diff --git a/.coveragerc b/.coveragerc index 851922e4f3a..a63e1ae33a5 100644 --- a/.coveragerc +++ b/.coveragerc @@ -45,10 +45,15 @@ omit = homeassistant/components/arest/sensor.py homeassistant/components/arest/switch.py homeassistant/components/arlo/* + homeassistant/components/arris_tg2492lg/* homeassistant/components/aruba/device_tracker.py homeassistant/components/arwn/sensor.py homeassistant/components/asterisk_cdr/mailbox.py homeassistant/components/asterisk_mbox/* + homeassistant/components/atag/__init__.py + homeassistant/components/atag/climate.py + homeassistant/components/atag/sensor.py + homeassistant/components/atag/water_heater.py homeassistant/components/aten_pe/* homeassistant/components/atome/* homeassistant/components/aurora_abb_powerone/sensor.py @@ -80,7 +85,10 @@ omit = homeassistant/components/bom/camera.py homeassistant/components/bom/sensor.py homeassistant/components/bom/weather.py + homeassistant/components/braviatv/__init__.py + homeassistant/components/braviatv/const.py homeassistant/components/braviatv/media_player.py + homeassistant/components/broadlink/const.py homeassistant/components/broadlink/remote.py homeassistant/components/broadlink/sensor.py homeassistant/components/broadlink/switch.py @@ -219,6 +227,7 @@ omit = homeassistant/components/flic/binary_sensor.py homeassistant/components/flock/notify.py homeassistant/components/flume/* + homeassistant/components/flunearyou/__init__.py homeassistant/components/flunearyou/sensor.py homeassistant/components/flux_led/light.py homeassistant/components/folder/sensor.py @@ -236,7 +245,6 @@ omit = homeassistant/components/freebox/sensor.py homeassistant/components/freebox/switch.py homeassistant/components/fritz/device_tracker.py - homeassistant/components/fritzbox/* homeassistant/components/fritzbox_callmonitor/sensor.py homeassistant/components/fritzbox_netmonitor/sensor.py homeassistant/components/fronius/sensor.py @@ -519,12 +527,15 @@ omit = homeassistant/components/osramlightify/light.py homeassistant/components/otp/sensor.py homeassistant/components/panasonic_bluray/media_player.py + homeassistant/components/panasonic_viera/__init__.py homeassistant/components/panasonic_viera/media_player.py homeassistant/components/pandora/media_player.py homeassistant/components/pcal9535a/* homeassistant/components/pencom/switch.py homeassistant/components/philips_js/media_player.py homeassistant/components/pi_hole/sensor.py + homeassistant/components/pi4ioe5v9xxxx/binary_sensor.py + homeassistant/components/pi4ioe5v9xxxx/switch.py homeassistant/components/picotts/tts.py homeassistant/components/piglow/light.py homeassistant/components/pilight/* @@ -549,7 +560,6 @@ omit = homeassistant/components/pulseaudio_loopback/switch.py homeassistant/components/pushbullet/notify.py homeassistant/components/pushbullet/sensor.py - homeassistant/components/pushetta/notify.py homeassistant/components/pushover/notify.py homeassistant/components/pushsafer/notify.py homeassistant/components/pvoutput/sensor.py @@ -589,9 +599,12 @@ omit = homeassistant/components/ring/camera.py homeassistant/components/ripple/sensor.py homeassistant/components/rocketchat/notify.py - homeassistant/components/roku/__init__.py - homeassistant/components/roku/media_player.py homeassistant/components/roku/remote.py + homeassistant/components/roomba/binary_sensor.py + homeassistant/components/roomba/braava.py + homeassistant/components/roomba/irobot_base.py + homeassistant/components/roomba/roomba.py + homeassistant/components/roomba/sensor.py homeassistant/components/roomba/vacuum.py homeassistant/components/route53/* homeassistant/components/rova/sensor.py @@ -645,7 +658,7 @@ omit = homeassistant/components/smarthab/* homeassistant/components/sms/* homeassistant/components/smtp/notify.py - homeassistant/components/snapcast/media_player.py + homeassistant/components/snapcast/* homeassistant/components/snmp/* homeassistant/components/sochain/sensor.py homeassistant/components/socialblade/sensor.py @@ -687,8 +700,9 @@ omit = homeassistant/components/syncthru/sensor.py homeassistant/components/synology/camera.py homeassistant/components/synology_chat/notify.py + homeassistant/components/synology_dsm/__init__.py + homeassistant/components/synology_dsm/sensor.py homeassistant/components/synology_srm/device_tracker.py - homeassistant/components/synologydsm/sensor.py homeassistant/components/syslog/notify.py homeassistant/components/systemmonitor/sensor.py homeassistant/components/tado/* diff --git a/.github/lock.yml b/.github/lock.yml index 93666bc6eeb..7ce0cc65619 100644 --- a/.github/lock.yml +++ b/.github/lock.yml @@ -24,4 +24,4 @@ only: pulls # Optionally, specify configuration settings just for `issues` or `pulls` issues: - daysUntilLock: 30 + daysUntilLock: 30 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4211438379c..e491637ea65 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,9 @@ repos: + - repo: https://github.com/asottile/pyupgrade + rev: v2.1.0 + hooks: + - id: pyupgrade + args: [--py37-plus] - repo: https://github.com/psf/black rev: 19.10b0 hooks: @@ -40,12 +45,23 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.4.0 hooks: + - id: check-executables-have-shebangs + stages: [manual] - id: check-json - id: no-commit-to-branch args: - --branch=dev - --branch=master - --branch=rc + - repo: https://github.com/adrienverge/yamllint.git + rev: v1.23.0 + hooks: + - id: yamllint + - repo: https://github.com/prettier/prettier + rev: 2.0.4 + hooks: + - id: prettier + stages: [manual] - repo: local hooks: # Run mypy through our wrapper script in order to get the possible @@ -72,4 +88,4 @@ repos: pass_filenames: false language: script types: [json] - files: ^homeassistant/.+/manifest\.json$ + files: ^homeassistant/.+/(manifest|strings)\.json$ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000000..1102d3a4e26 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +*.md +azure-*.yml +docs/source/_templates/* +homeassistant/components/*/translations/*.json +tests/fixtures/* diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000000..951134133e5 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode", "ms-python.python"] +} diff --git a/.yamllint b/.yamllint new file mode 100644 index 00000000000..c2f877a2b7a --- /dev/null +++ b/.yamllint @@ -0,0 +1,61 @@ +ignore: | + azure-*.yml +rules: + braces: + level: error + min-spaces-inside: 0 + max-spaces-inside: 1 + min-spaces-inside-empty: -1 + max-spaces-inside-empty: -1 + brackets: + level: error + min-spaces-inside: 0 + max-spaces-inside: 0 + min-spaces-inside-empty: -1 + max-spaces-inside-empty: -1 + colons: + level: error + max-spaces-before: 0 + max-spaces-after: 1 + commas: + level: error + max-spaces-before: 0 + min-spaces-after: 1 + max-spaces-after: 1 + comments: + level: error + require-starting-space: true + min-spaces-from-content: 2 + comments-indentation: + level: error + document-end: + level: error + present: false + document-start: + level: error + present: false + empty-lines: + level: error + max: 1 + max-start: 0 + max-end: 1 + hyphens: + level: error + max-spaces-after: 1 + indentation: + level: error + spaces: 2 + indent-sequences: true + check-multi-line-strings: false + key-duplicates: + level: error + line-length: disable + new-line-at-end-of-file: + level: error + new-lines: + level: error + type: unix + trailing-spaces: + level: error + truthy: + level: error diff --git a/CODEOWNERS b/CODEOWNERS index 3e2959cc043..815f1b6b85a 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -33,7 +33,9 @@ homeassistant/components/aprs/* @PhilRW homeassistant/components/arcam_fmj/* @elupus homeassistant/components/arduino/* @fabaff homeassistant/components/arest/* @fabaff +homeassistant/components/arris_tg2492lg/* @vanbalken homeassistant/components/asuswrt/* @kennedyshead +homeassistant/components/atag/* @MatsNL homeassistant/components/aten_pe/* @mtdcr homeassistant/components/atome/* @baqs homeassistant/components/august/* @bdraco @@ -55,12 +57,13 @@ homeassistant/components/blink/* @fronzbot homeassistant/components/bmp280/* @belidzs homeassistant/components/bmw_connected_drive/* @gerard33 homeassistant/components/bom/* @maddenp -homeassistant/components/braviatv/* @robbiet480 +homeassistant/components/braviatv/* @robbiet480 @bieniu homeassistant/components/broadlink/* @danielhiversen @felipediel homeassistant/components/brother/* @bieniu homeassistant/components/brunt/* @eavanvalkenburg homeassistant/components/bt_smarthub/* @jxwolstenholme homeassistant/components/buienradar/* @mjj4791 @ties +homeassistant/components/cast/* @emontnemery homeassistant/components/cert_expiry/* @Cereal2nd @jjlawren homeassistant/components/cisco_ios/* @fbradyirl homeassistant/components/cisco_mobility_express/* @fbradyirl @@ -120,7 +123,7 @@ homeassistant/components/filter/* @dgomes homeassistant/components/fitbit/* @robbiet480 homeassistant/components/fixer/* @fabaff homeassistant/components/flock/* @fabaff -homeassistant/components/flume/* @ChrisMandich +homeassistant/components/flume/* @ChrisMandich @bdraco homeassistant/components/flunearyou/* @bachya homeassistant/components/fortigate/* @kifeo homeassistant/components/fortios/* @kimfrellsen @@ -161,6 +164,7 @@ homeassistant/components/hisense_aehw4a1/* @bannhead homeassistant/components/history/* @home-assistant/core homeassistant/components/hive/* @Rendili @KJonline homeassistant/components/homeassistant/* @home-assistant/core +homeassistant/components/homekit/* @bdraco homeassistant/components/homekit_controller/* @Jc2k homeassistant/components/homematic/* @pvizeli @danielperna84 homeassistant/components/homematicip_cloud/* @SukramJ @@ -190,6 +194,7 @@ homeassistant/components/ipma/* @dgomes @abmantis homeassistant/components/ipp/* @ctalkington homeassistant/components/iqvia/* @bachya homeassistant/components/irish_rail_transport/* @ttroy50 +homeassistant/components/islamic_prayer_times/* @engrbm87 homeassistant/components/izone/* @Swamp-Ig homeassistant/components/jewish_calendar/* @tsvi homeassistant/components/juicenet/* @jesserockz @@ -236,7 +241,7 @@ homeassistant/components/modbus/* @adamchengtkc @janiversen homeassistant/components/monoprice/* @etsinko homeassistant/components/moon/* @fabaff homeassistant/components/mpd/* @fabaff -homeassistant/components/mqtt/* @home-assistant/core +homeassistant/components/mqtt/* @home-assistant/core @emontnemery homeassistant/components/msteams/* @peroyvind homeassistant/components/myq/* @bdraco homeassistant/components/mysensors/* @MartinHjelmare @@ -269,17 +274,20 @@ homeassistant/components/ohmconnect/* @robbiet480 homeassistant/components/ombi/* @larssont homeassistant/components/onboarding/* @home-assistant/core homeassistant/components/onewire/* @garbled1 +homeassistant/components/openerz/* @misialq homeassistant/components/opentherm_gw/* @mvn23 homeassistant/components/openuv/* @bachya homeassistant/components/openweathermap/* @fabaff homeassistant/components/opnsense/* @mtreinish homeassistant/components/orangepi_gpio/* @pascallj homeassistant/components/oru/* @bvlaicu +homeassistant/components/panasonic_viera/* @joogps homeassistant/components/panel_custom/* @home-assistant/frontend homeassistant/components/panel_iframe/* @home-assistant/frontend homeassistant/components/pcal9535a/* @Shulyaka homeassistant/components/persistent_notification/* @home-assistant/core homeassistant/components/philips_js/* @elupus +homeassistant/components/pi4ioe5v9xxxx/* @antonverburg homeassistant/components/pi_hole/* @fabaff @johnluetke homeassistant/components/pilight/* @trekky12 homeassistant/components/plaato/* @JohNan @@ -288,7 +296,7 @@ homeassistant/components/plex/* @jjlawren homeassistant/components/plugwise/* @laetificat @CoMPaTech @bouwew homeassistant/components/plum_lightpad/* @ColinHarrington homeassistant/components/point/* @fredrike -homeassistant/components/powerwall/* @bdraco +homeassistant/components/powerwall/* @bdraco @jrester homeassistant/components/proxmoxve/* @k4ds3 homeassistant/components/ps4/* @ktnrg45 homeassistant/components/ptvsd/* @swamp-ig @@ -311,7 +319,7 @@ homeassistant/components/rfxtrx/* @danielhiversen homeassistant/components/ring/* @balloob homeassistant/components/rmvtransport/* @cgtobi homeassistant/components/roku/* @ctalkington -homeassistant/components/roomba/* @pschmitt +homeassistant/components/roomba/* @pschmitt @cyr-ius @shenxn homeassistant/components/safe_mode/* @home-assistant/core homeassistant/components/saj/* @fredericvl homeassistant/components/salt/* @bjornorri @@ -325,6 +333,7 @@ homeassistant/components/sense/* @kbickar homeassistant/components/sensibo/* @andrey-git homeassistant/components/sentry/* @dcramer homeassistant/components/serial/* @fabaff +homeassistant/components/seven_segments/* @fabaff homeassistant/components/seventeentrack/* @bachya homeassistant/components/shell_command/* @home-assistant/core homeassistant/components/shiftr/* @fabaff @@ -346,6 +355,7 @@ homeassistant/components/solarlog/* @Ernst79 homeassistant/components/solax/* @squishykid homeassistant/components/soma/* @ratsept homeassistant/components/somfy/* @tetienne +homeassistant/components/sonarr/* @ctalkington homeassistant/components/songpal/* @rytilahti homeassistant/components/sonos/* @amelchio homeassistant/components/spaceapi/* @fabaff @@ -369,6 +379,7 @@ homeassistant/components/switchbot/* @danielhiversen homeassistant/components/switcher_kis/* @tomerfi homeassistant/components/switchmate/* @danielhiversen homeassistant/components/syncthru/* @nielstron +homeassistant/components/synology_dsm/* @ProtoThis @Quentame homeassistant/components/synology_srm/* @aerialls homeassistant/components/syslog/* @fabaff homeassistant/components/tado/* @michaelarnauts @bdraco @@ -409,6 +420,7 @@ homeassistant/components/usgs_earthquakes_feed/* @exxamalte homeassistant/components/utility_meter/* @dgomes homeassistant/components/velbus/* @Cereal2nd @brefra homeassistant/components/velux/* @Julius2342 +homeassistant/components/vera/* @vangorra homeassistant/components/versasense/* @flamm3blemuff1n homeassistant/components/version/* @fabaff homeassistant/components/vesync/* @markperdue @webdjoe diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index 8fb014f80a7..af323ecde1a 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -24,7 +24,6 @@ resources: variables: - name: PythonMain value: '37' - - group: codecov stages: @@ -44,6 +43,10 @@ stages: . venv/bin/activate pip install -r requirements_test.txt -c homeassistant/package_constraints.txt pre-commit install-hooks + - script: | + . venv/bin/activate + pre-commit run --hook-stage manual check-executables-have-shebangs --all-files + displayName: 'Run executables check' - script: | . venv/bin/activate pre-commit run codespell --all-files @@ -64,6 +67,20 @@ stages: . venv/bin/activate pre-commit run check-json --all-files displayName: 'Run check-json' + - script: | + . venv/bin/activate + pre-commit run yamllint --all-files + displayName: 'Run yamllint' + - script: | + . venv/bin/activate + pre-commit run pyupgrade --all-files --show-diff-on-failure + displayName: 'Run pyupgrade' + # Prettier seems to hang on Azure, unknown why yet. + # Temporarily disable the check to no block PRs + # - script: | + # . venv/bin/activate + # pre-commit run prettier --all-files --show-diff-on-failure + # displayName: 'Run prettier' - job: 'Validate' pool: vmImage: 'ubuntu-latest' @@ -79,7 +96,7 @@ stages: pip install -e . - script: | . venv/bin/activate - python -m script.hassfest validate + python -m script.hassfest --action validate displayName: 'Validate manifests' - script: | . venv/bin/activate @@ -148,7 +165,7 @@ stages: . venv/bin/activate pytest --timeout=9 --durations=10 -n auto --dist=loadfile --cov homeassistant --cov-report html -qq -o console_output_style=count -p no:sugar tests - #codecov --token $(codecovToken) + codecov --token $(codecovToken) script/check_dirty displayName: 'Run pytest for python $(python.container) / coverage' condition: and(succeeded(), eq(variables['python.container'], variables['PythonMain'])) diff --git a/azure-pipelines-translation.yml b/azure-pipelines-translation.yml index 0791cbcaab1..9f4db8d2005 100644 --- a/azure-pipelines-translation.yml +++ b/azure-pipelines-translation.yml @@ -37,7 +37,7 @@ jobs: export LOKALISE_TOKEN="$(lokaliseToken)" export AZURE_BRANCH="$(Build.SourceBranchName)" - ./script/translations_upload + python3 -m script.translations upload displayName: 'Upload Translation' - job: 'Download' @@ -54,9 +54,8 @@ jobs: - template: templates/azp-step-git-init.yaml@azure - script: | export LOKALISE_TOKEN="$(lokaliseToken)" - export AZURE_BRANCH="$(Build.SourceBranchName)" - ./script/translations_download + python3 -m script.translations download displayName: 'Download Translation' - script: | git checkout dev diff --git a/azure-pipelines-wheels.yml b/azure-pipelines-wheels.yml index b4ad0a556b2..9bc22ae6689 100644 --- a/azure-pipelines-wheels.yml +++ b/azure-pipelines-wheels.yml @@ -1,7 +1,6 @@ # https://dev.azure.com/home-assistant trigger: - batch: true branches: include: - dev @@ -16,7 +15,6 @@ schedules: branches: include: - dev - always: true variables: - name: versionWheels value: '1.10.1-3.7-alpine3.11' @@ -73,4 +71,4 @@ jobs: sed -i "s|# bme680|bme680|g" ${requirement_file} sed -i "s|# python-gammu|python-gammu|g" ${requirement_file} done - displayName: 'Prepare requirements files for Hass.io' + displayName: 'Prepare requirements files for Home Assistant wheels' diff --git a/codecov.yml b/codecov.yml index 1455c20749a..7a9eea730d8 100644 --- a/codecov.yml +++ b/codecov.yml @@ -6,14 +6,4 @@ coverage: default: target: 90 threshold: 0.09 - notify: - # Notify codecov room in Discord. The webhook URL (encrypted below) ends in /slack which is why we configure a Slack notification. - slack: - default: - url: "secret:TgWDUM4Jw0w7wMJxuxNF/yhSOHglIo1fGwInJnRLEVPy2P2aLimkoK1mtKCowH5TFw+baUXVXT3eAqefbdvIuM8BjRR4aRji95C6CYyD0QHy4N8i7nn1SQkWDPpS8IthYTg07rUDF7s5guurkKv2RrgoCdnnqjAMSzHoExMOF7xUmblMdhBTWJgBpWEhASJy85w/xxjlsE1xoTkzeJu9Q67pTXtRcn+5kb5/vIzPSYg=" -comment: - require_changes: yes - layout: reach - branches: - - master - - !dev +comment: false diff --git a/docs/source/_ext/edit_on_github.py b/docs/source/_ext/edit_on_github.py index a31fb13ebf1..1d40bfc33ab 100644 --- a/docs/source/_ext/edit_on_github.py +++ b/docs/source/_ext/edit_on_github.py @@ -8,19 +8,19 @@ Loosely based on https://github.com/astropy/astropy/pull/347 import os import warnings -__licence__ = 'BSD (3 clause)' +__licence__ = "BSD (3 clause)" def get_github_url(app, view, path): - github_fmt = 'https://github.com/{}/{}/{}/{}{}' return ( - github_fmt.format(app.config.edit_on_github_project, view, - app.config.edit_on_github_branch, - app.config.edit_on_github_src_path, path)) + f"https://github.com/{app.config.edit_on_github_project}/" + f"{view}/{app.config.edit_on_github_branch}/" + f"{app.config.edit_on_github_src_path}{path}" + ) def html_page_context(app, pagename, templatename, context, doctree): - if templatename != 'page.html': + if templatename != "page.html": return if not app.config.edit_on_github_project: @@ -29,16 +29,16 @@ def html_page_context(app, pagename, templatename, context, doctree): if not doctree: warnings.warn("doctree is None") return - path = os.path.relpath(doctree.get('source'), app.builder.srcdir) - show_url = get_github_url(app, 'blob', path) - edit_url = get_github_url(app, 'edit', path) + path = os.path.relpath(doctree.get("source"), app.builder.srcdir) + show_url = get_github_url(app, "blob", path) + edit_url = get_github_url(app, "edit", path) - context['show_on_github_url'] = show_url - context['edit_on_github_url'] = edit_url + context["show_on_github_url"] = show_url + context["edit_on_github_url"] = edit_url def setup(app): - app.add_config_value('edit_on_github_project', '', True) - app.add_config_value('edit_on_github_branch', 'master', True) - app.add_config_value('edit_on_github_src_path', '', True) # 'eg' "docs/" - app.connect('html-page-context', html_page_context) + app.add_config_value("edit_on_github_project", "", True) + app.add_config_value("edit_on_github_branch", "master", True) + app.add_config_value("edit_on_github_src_path", "", True) # 'eg' "docs/" + app.connect("html-page-context", html_page_context) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3aa30965c95..242a90088b3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # # Home-Assistant documentation build configuration file, created by # sphinx-quickstart on Sun Aug 28 13:13:10 2016. @@ -23,25 +22,26 @@ import sys from homeassistant.const import __short_version__, __version__ -PROJECT_NAME = 'Home Assistant' -PROJECT_PACKAGE_NAME = 'homeassistant' -PROJECT_AUTHOR = 'The Home Assistant Authors' -PROJECT_COPYRIGHT = ' 2013-2020, {}'.format(PROJECT_AUTHOR) -PROJECT_LONG_DESCRIPTION = ('Home Assistant is an open-source ' - 'home automation platform running on Python 3. ' - 'Track and control all devices at home and ' - 'automate control. ' - 'Installation in less than a minute.') -PROJECT_GITHUB_USERNAME = 'home-assistant' -PROJECT_GITHUB_REPOSITORY = 'home-assistant' +PROJECT_NAME = "Home Assistant" +PROJECT_PACKAGE_NAME = "homeassistant" +PROJECT_AUTHOR = "The Home Assistant Authors" +PROJECT_COPYRIGHT = f" 2013-2020, {PROJECT_AUTHOR}" +PROJECT_LONG_DESCRIPTION = ( + "Home Assistant is an open-source " + "home automation platform running on Python 3. " + "Track and control all devices at home and " + "automate control. " + "Installation in less than a minute." +) +PROJECT_GITHUB_USERNAME = "home-assistant" +PROJECT_GITHUB_REPOSITORY = "home-assistant" -GITHUB_PATH = '{}/{}'.format( - PROJECT_GITHUB_USERNAME, PROJECT_GITHUB_REPOSITORY) -GITHUB_URL = 'https://github.com/{}'.format(GITHUB_PATH) +GITHUB_PATH = f"{PROJECT_GITHUB_USERNAME}/{PROJECT_GITHUB_REPOSITORY}" +GITHUB_URL = f"https://github.com/{GITHUB_PATH}" -sys.path.insert(0, os.path.abspath('_ext')) -sys.path.insert(0, os.path.abspath('../homeassistant')) +sys.path.insert(0, os.path.abspath("_ext")) +sys.path.insert(0, os.path.abspath("../homeassistant")) # -- General configuration ------------------------------------------------ @@ -53,27 +53,27 @@ sys.path.insert(0, os.path.abspath('../homeassistant')) # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.linkcode', - 'sphinx_autodoc_annotation', - 'edit_on_github' + "sphinx.ext.autodoc", + "sphinx.ext.linkcode", + "sphinx_autodoc_annotation", + "edit_on_github", ] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The encoding of source files. # # source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. project = PROJECT_NAME @@ -89,25 +89,25 @@ version = __short_version__ # The full version, including alpha/beta/rc tags. release = __version__ -code_branch = 'dev' if 'dev' in __version__ else 'master' +code_branch = "dev" if "dev" in __version__ else "master" # Edit on Github config edit_on_github_project = GITHUB_PATH edit_on_github_branch = code_branch -edit_on_github_src_path = 'docs/source/' +edit_on_github_src_path = "docs/source/" def linkcode_resolve(domain, info): """Determine the URL corresponding to Python object.""" - if domain != 'py': + if domain != "py": return None - modname = info['module'] - fullname = info['fullname'] + modname = info["module"] + fullname = info["fullname"] submod = sys.modules.get(modname) if submod is None: return None obj = submod - for part in fullname.split('.'): + for part in fullname.split("."): try: obj = getattr(obj, part) except: @@ -132,7 +132,8 @@ def linkcode_resolve(domain, info): fn = fn[index:] - return '{}/blob/{}/{}{}'.format(GITHUB_URL, code_branch, fn, linespec) + return f"{GITHUB_URL}/blob/{code_branch}/{fn}{linespec}" + # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -175,7 +176,7 @@ exclude_patterns = [] # show_authors = False # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] @@ -192,22 +193,22 @@ todo_include_todos = False # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # html_theme_options = { - 'logo': 'logo.png', - 'logo_name': PROJECT_NAME, - 'description': PROJECT_LONG_DESCRIPTION, - 'github_user': PROJECT_GITHUB_USERNAME, - 'github_repo': PROJECT_GITHUB_REPOSITORY, - 'github_type': 'star', - 'github_banner': True, - 'travis_button': True, - 'touch_icon': 'logo-apple.png', + "logo": "logo.png", + "logo_name": PROJECT_NAME, + "description": PROJECT_LONG_DESCRIPTION, + "github_user": PROJECT_GITHUB_USERNAME, + "github_repo": PROJECT_GITHUB_REPOSITORY, + "github_type": "star", + "github_banner": True, + "travis_button": True, + "touch_icon": "logo-apple.png", # 'fixed_sidebar': True, # Re-enable when we have more content } @@ -233,12 +234,12 @@ html_theme_options = { # This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # -html_favicon = '_static/favicon.ico' +html_favicon = "_static/favicon.ico" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied @@ -250,7 +251,7 @@ html_static_path = ['_static'] # bottom, using the given strftime format. # The empty string is equivalent to '%b %d, %Y'. # -html_last_updated_fmt = '%b %d, %Y' +html_last_updated_fmt = "%b %d, %Y" # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. @@ -260,13 +261,13 @@ html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = { - '**': [ - 'about.html', - 'links.html', - 'searchbox.html', - 'sourcelink.html', - 'navigation.html', - 'relations.html' + "**": [ + "about.html", + "links.html", + "searchbox.html", + "sourcelink.html", + "navigation.html", + "relations.html", ] } @@ -327,34 +328,36 @@ html_sidebars = { # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. -htmlhelp_basename = 'Home-Assistantdoc' +htmlhelp_basename = "Home-Assistantdoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'home-assistant.tex', 'Home Assistant Documentation', - 'Home Assistant Team', 'manual'), + ( + master_doc, + "home-assistant.tex", + "Home Assistant Documentation", + "Home Assistant Team", + "manual", + ) ] # The name of an image file (relative to this directory) to place at the top of @@ -395,8 +398,7 @@ latex_documents = [ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'home-assistant', 'Home Assistant Documentation', - [author], 1) + (master_doc, "home-assistant", "Home Assistant Documentation", [author], 1) ] # If true, show URL addresses after external links. @@ -410,9 +412,15 @@ man_pages = [ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'Home-Assistant', 'Home Assistant Documentation', - author, 'Home Assistant', 'Open-source home automation platform.', - 'Miscellaneous'), + ( + master_doc, + "Home-Assistant", + "Home Assistant Documentation", + author, + "Home Assistant", + "Open-source home automation platform.", + "Miscellaneous", + ) ] # Documents to append as an appendix to all manuals. diff --git a/homeassistant/__main__.py b/homeassistant/__main__.py index a6d4e0c7bc9..728ee3c5985 100644 --- a/homeassistant/__main__.py +++ b/homeassistant/__main__.py @@ -13,6 +13,7 @@ from homeassistant.const import REQUIRED_PYTHON_VER, RESTART_EXIT_CODE, __versio def set_loop() -> None: """Attempt to use different loop.""" + # pylint: disable=import-outside-toplevel from asyncio.events import BaseDefaultEventLoopPolicy if sys.platform == "win32": @@ -35,15 +36,15 @@ def validate_python() -> None: """Validate that the right Python version is running.""" if sys.version_info[:3] < REQUIRED_PYTHON_VER: print( - "Home Assistant requires at least Python {}.{}.{}".format( - *REQUIRED_PYTHON_VER - ) + "Home Assistant requires at least Python " + f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}" ) sys.exit(1) def ensure_config_path(config_dir: str) -> None: """Validate the configuration directory.""" + # pylint: disable=import-outside-toplevel import homeassistant.config as config_util lib_dir = os.path.join(config_dir, "deps") @@ -77,6 +78,7 @@ def ensure_config_path(config_dir: str) -> None: def get_arguments() -> argparse.Namespace: """Get parsed passed in arguments.""" + # pylint: disable=import-outside-toplevel import homeassistant.config as config_util parser = argparse.ArgumentParser( @@ -164,7 +166,7 @@ def daemonize() -> None: sys.exit(0) # redirect standard file descriptors to devnull - infd = open(os.devnull, "r") + infd = open(os.devnull) outfd = open(os.devnull, "a+") sys.stdout.flush() sys.stderr.flush() @@ -177,7 +179,7 @@ def check_pid(pid_file: str) -> None: """Check that Home Assistant is not already running.""" # Check pid file try: - with open(pid_file, "r") as file: + with open(pid_file) as file: pid = int(file.readline()) except OSError: # PID File does not exist @@ -214,6 +216,7 @@ def closefds_osx(min_fd: int, max_fd: int) -> None: are guarded. But we can set the close-on-exec flag on everything we want to get rid of. """ + # pylint: disable=import-outside-toplevel from fcntl import fcntl, F_GETFD, F_SETFD, FD_CLOEXEC for _fd in range(min_fd, max_fd): @@ -237,6 +240,7 @@ def cmdline() -> List[str]: async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int: """Set up Home Assistant and run.""" + # pylint: disable=import-outside-toplevel from homeassistant import bootstrap hass = await bootstrap.async_setup_hass( @@ -253,7 +257,7 @@ async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int: return 1 if args.open_ui and hass.config.api is not None: - import webbrowser + import webbrowser # pylint: disable=import-outside-toplevel hass.add_job(webbrowser.open, hass.config.api.base_url) @@ -324,6 +328,7 @@ def main() -> int: args = get_arguments() if args.script is not None: + # pylint: disable=import-outside-toplevel from homeassistant import scripts return scripts.run(args.script) diff --git a/homeassistant/auth/mfa_modules/notify.py b/homeassistant/auth/mfa_modules/notify.py index 8da81a44a61..d8c28409b2d 100644 --- a/homeassistant/auth/mfa_modules/notify.py +++ b/homeassistant/auth/mfa_modules/notify.py @@ -47,28 +47,28 @@ _LOGGER = logging.getLogger(__name__) def _generate_secret() -> str: """Generate a secret.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel return str(pyotp.random_base32()) def _generate_random() -> int: """Generate a 8 digit number.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel return int(pyotp.random_base32(length=8, chars=list("1234567890"))) def _generate_otp(secret: str, count: int) -> str: """Generate one time password.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel return str(pyotp.HOTP(secret).at(count)) def _verify_otp(secret: str, otp: str, count: int) -> bool: """Verify one time password.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel return bool(pyotp.HOTP(secret).verify(otp, count)) @@ -204,7 +204,7 @@ class NotifyAuthModule(MultiFactorAuthModule): await self._async_load() assert self._user_settings is not None - notify_setting = self._user_settings.get(user_id, None) + notify_setting = self._user_settings.get(user_id) if notify_setting is None: return False @@ -222,7 +222,7 @@ class NotifyAuthModule(MultiFactorAuthModule): await self._async_load() assert self._user_settings is not None - notify_setting = self._user_settings.get(user_id, None) + notify_setting = self._user_settings.get(user_id) if notify_setting is None: raise ValueError("Cannot find user_id") @@ -246,7 +246,7 @@ class NotifyAuthModule(MultiFactorAuthModule): await self._async_load() assert self._user_settings is not None - notify_setting = self._user_settings.get(user_id, None) + notify_setting = self._user_settings.get(user_id) if notify_setting is None: _LOGGER.error("Cannot find user %s", user_id) return diff --git a/homeassistant/auth/mfa_modules/totp.py b/homeassistant/auth/mfa_modules/totp.py index 6abddd2123f..d35f237f424 100644 --- a/homeassistant/auth/mfa_modules/totp.py +++ b/homeassistant/auth/mfa_modules/totp.py @@ -35,13 +35,13 @@ _LOGGER = logging.getLogger(__name__) def _generate_qr_code(data: str) -> str: """Generate a base64 PNG string represent QR Code image of data.""" - import pyqrcode + import pyqrcode # pylint: disable=import-outside-toplevel qr_code = pyqrcode.create(data) with BytesIO() as buffer: qr_code.svg(file=buffer, scale=4) - return "{}".format( + return str( buffer.getvalue() .decode("ascii") .replace("\n", "") @@ -55,7 +55,7 @@ def _generate_qr_code(data: str) -> str: def _generate_secret_and_qr_code(username: str) -> Tuple[str, str, str]: """Generate a secret, url, and QR code.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel ota_secret = pyotp.random_base32() url = pyotp.totp.TOTP(ota_secret).provisioning_uri( @@ -105,7 +105,7 @@ class TotpAuthModule(MultiFactorAuthModule): def _add_ota_secret(self, user_id: str, secret: Optional[str] = None) -> str: """Create a ota_secret for user.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel ota_secret: str = secret or pyotp.random_base32() @@ -160,7 +160,7 @@ class TotpAuthModule(MultiFactorAuthModule): def _validate_2fa(self, user_id: str, code: str) -> bool: """Validate two factor authentication code.""" - import pyotp + import pyotp # pylint: disable=import-outside-toplevel ota_secret = self._users.get(user_id) # type: ignore if ota_secret is None: @@ -195,7 +195,7 @@ class TotpSetupFlow(SetupFlow): Return self.async_show_form(step_id='init') if user_input is None. Return self.async_create_entry(data={'result': result}) if finish. """ - import pyotp + import pyotp # pylint: disable=import-outside-toplevel errors: Dict[str, str] = {} diff --git a/homeassistant/auth/providers/__init__.py b/homeassistant/auth/providers/__init__.py index bb0fc55b5c4..1fa70e42b3f 100644 --- a/homeassistant/auth/providers/__init__.py +++ b/homeassistant/auth/providers/__init__.py @@ -116,7 +116,6 @@ class AuthProvider: async def async_initialize(self) -> None: """Initialize the auth provider.""" - pass async def auth_provider_from_config( diff --git a/homeassistant/block_async_io.py b/homeassistant/block_async_io.py new file mode 100644 index 00000000000..cd33a4207a8 --- /dev/null +++ b/homeassistant/block_async_io.py @@ -0,0 +1,14 @@ +"""Block I/O being done in asyncio.""" +from http.client import HTTPConnection + +from homeassistant.util.async_ import protect_loop + + +def enable() -> None: + """Enable the detection of I/O in the event loop.""" + # Prevent urllib3 and requests doing I/O in event loop + HTTPConnection.putrequest = protect_loop(HTTPConnection.putrequest) + + # Currently disabled. pytz doing I/O when getting timezone. + # Prevent files being opened inside the event loop + # builtins.open = protect_loop(builtins.open) diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index 5d939d4b34e..618a168be61 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -215,6 +215,7 @@ def async_enable_logging( if not log_no_color: try: + # pylint: disable=import-outside-toplevel from colorlog import ColoredFormatter # basicConfig must be called after importing colorlog in order to @@ -308,7 +309,7 @@ async def async_mount_local_lib_path(config_dir: str) -> str: def _get_domains(hass: core.HomeAssistant, config: Dict[str, Any]) -> Set[str]: """Get domains of components to set up.""" # Filter out the repeating and common config section [homeassistant] - domains = set(key.split(" ")[0] for key in config.keys() if key != core.DOMAIN) + domains = {key.split(" ")[0] for key in config.keys() if key != core.DOMAIN} # Add config entry domains if not hass.config.safe_mode: diff --git a/homeassistant/components/.translations/synology_dsm.ca.json b/homeassistant/components/.translations/synology_dsm.ca.json deleted file mode 100644 index 39b99ac9306..00000000000 --- a/homeassistant/components/.translations/synology_dsm.ca.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat" - }, - "error": { - "login": "Error d\u2019inici de sessi\u00f3: comprova el nom d'usuari i la contrasenya", - "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard o revisa la configuraci\u00f3" - }, - "step": { - "user": { - "data": { - "api_version": "Versi\u00f3 DSM", - "host": "Amfitri\u00f3", - "name": "Nom", - "password": "Contrasenya", - "port": "Port", - "ssl": "Utilitza SSL/TLS per connectar-te al servidor NAS", - "username": "Nom d'usuari" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.en.json b/homeassistant/components/.translations/synology_dsm.en.json deleted file mode 100644 index 3bac6d16288..00000000000 --- a/homeassistant/components/.translations/synology_dsm.en.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host already configured" - }, - "error": { - "login": "Login error: please check your username & password", - "unknown": "Unknown error: please retry later or an other configuration" - }, - "flow_title": "Synology DSM {name} ({host})", - "step": { - "link": { - "data": { - "api_version": "DSM version", - "password": "Password", - "port": "Port (Optional)", - "ssl": "Use SSL/TLS to connect to your NAS", - "username": "Username" - }, - "description": "Do you want to setup {name} ({host})?", - "title": "Synology DSM" - }, - "user": { - "data": { - "api_version": "DSM version", - "host": "Host", - "name": "Name", - "password": "Password", - "port": "Port (Optional)", - "ssl": "Use SSL/TLS to connect to your NAS", - "username": "Username" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.es.json b/homeassistant/components/.translations/synology_dsm.es.json deleted file mode 100644 index fafedb50a0e..00000000000 --- a/homeassistant/components/.translations/synology_dsm.es.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El host ya est\u00e1 configurado." - }, - "error": { - "login": "Error de inicio de sesi\u00f3n: comprueba tu direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a", - "unknown": "Error desconocido: por favor vuelve a intentarlo m\u00e1s tarde o usa otra configuraci\u00f3n" - }, - "step": { - "user": { - "data": { - "api_version": "Versi\u00f3n del DSM", - "host": "Host", - "name": "Nombre", - "password": "Contrase\u00f1a", - "port": "Puerto", - "ssl": "Usar SSL/TLS para conectar con tu NAS", - "username": "Usuario" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.ko.json b/homeassistant/components/.translations/synology_dsm.ko.json deleted file mode 100644 index 60fcd9866c1..00000000000 --- a/homeassistant/components/.translations/synology_dsm.ko.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud638\uc2a4\ud2b8\uac00 \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", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud558\uac70\ub098 \ub2e4\ub978 \uad6c\uc131\uc744 \uc2dc\ub3c4\ud574\ubcf4\uc138\uc694" - }, - "step": { - "user": { - "data": { - "api_version": "DSM \ubc84\uc804", - "host": "\ud638\uc2a4\ud2b8", - "name": "\uc774\ub984", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "ssl": "SSL/TLS \ub97c \uc0ac\uc6a9\ud558\uc5ec NAS \uc5d0 \uc5f0\uacb0", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.lb.json b/homeassistant/components/.translations/synology_dsm.lb.json deleted file mode 100644 index 92026cbe2d8..00000000000 --- a/homeassistant/components/.translations/synology_dsm.lb.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "login": "Feeler beim Login: iwwerpr\u00e9if de Benotzernumm & Passwuert", - "unknown": "Onbekannte Feeler: prob\u00e9ier sp\u00e9ider nach emol oder mat enger aner Konfiguratioun" - }, - "step": { - "user": { - "data": { - "api_version": "DSM Versioun", - "host": "Apparat", - "name": "Numm", - "password": "Passwuert", - "port": "Port", - "ssl": "Benotzt SSL/TLS fir sech mam NAS ze verbannen", - "username": "Benotzernumm" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.nl.json b/homeassistant/components/.translations/synology_dsm.nl.json deleted file mode 100644 index 1927227b65f..00000000000 --- a/homeassistant/components/.translations/synology_dsm.nl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is al geconfigureerd." - }, - "error": { - "unknown": "Onbekende fout: probeer het later opnieuw of een andere configuratie" - }, - "flow_title": "Synology DSM {name} ({host})", - "step": { - "link": { - "data": { - "api_version": "DSM-versie", - "password": "Wachtwoord", - "port": "Poort (optioneel)", - "ssl": "Gebruik SSL/TLS om verbinding te maken met uw NAS", - "username": "Gebruikersnaam" - }, - "description": "Wil je {name} ({host}) instellen?", - "title": "Synology DSM" - }, - "user": { - "data": { - "api_version": "DSM-versie", - "host": "Host", - "name": "Naam", - "password": "Wachtwoord", - "port": "Poort (optioneel)", - "ssl": "Gebruik SSL/TLS om verbinding te maken met uw NAS", - "username": "Gebruikersnaam" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.ru.json b/homeassistant/components/.translations/synology_dsm.ru.json deleted file mode 100644 index c76fa9ee972..00000000000 --- a/homeassistant/components/.translations/synology_dsm.ru.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "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": { - "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.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435." - }, - "step": { - "user": { - "data": { - "api_version": "\u0412\u0435\u0440\u0441\u0438\u044f DSM", - "host": "\u0425\u043e\u0441\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL / TLS \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "Synology DSM" - } - }, - "title": "Synology DSM" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/bg.json b/homeassistant/components/abode/.translations/bg.json deleted file mode 100644 index 29e3f342cf4..00000000000 --- a/homeassistant/components/abode/.translations/bg.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Abode." - }, - "error": { - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Abode.", - "identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d.", - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "E-mail \u0430\u0434\u0440\u0435\u0441" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0412\u0430\u0448\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0432\u0445\u043e\u0434 \u0432 Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/ca.json b/homeassistant/components/abode/.translations/ca.json deleted file mode 100644 index 7763ff04a7a..00000000000 --- a/homeassistant/components/abode/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'Abode." - }, - "error": { - "connection_error": "No es pot connectar amb Abode.", - "identifier_exists": "Compte ja registrat.", - "invalid_credentials": "Credencials inv\u00e0lides." - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Correu electr\u00f2nic" - }, - "title": "Introducci\u00f3 de la informaci\u00f3 d'inici de sessi\u00f3 a Abode." - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/cs.json b/homeassistant/components/abode/.translations/cs.json deleted file mode 100644 index 75c65f01e11..00000000000 --- a/homeassistant/components/abode/.translations/cs.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Je povolena pouze jedna konfigurace Abode." - }, - "error": { - "connection_error": "Nelze se p\u0159ipojit k Abode.", - "identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n.", - "invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje." - }, - "step": { - "user": { - "data": { - "password": "Heslo", - "username": "E-mailov\u00e1 adresa" - }, - "title": "Vypl\u0148te p\u0159ihla\u0161ovac\u00ed \u00fadaje Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/da.json b/homeassistant/components/abode/.translations/da.json deleted file mode 100644 index 4a5fa763ea1..00000000000 --- a/homeassistant/components/abode/.translations/da.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Abode." - }, - "error": { - "connection_error": "Kunne ikke oprette forbindelse til Abode.", - "identifier_exists": "Konto er allerede registreret.", - "invalid_credentials": "Ugyldige legitimationsoplysninger." - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Email-adresse" - }, - "title": "Udfyld dine Abode-loginoplysninger" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/de.json b/homeassistant/components/abode/.translations/de.json deleted file mode 100644 index ed5ec85a5d7..00000000000 --- a/homeassistant/components/abode/.translations/de.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Es ist nur eine einzige Konfiguration von Abode erlaubt." - }, - "error": { - "connection_error": "Es kann keine Verbindung zu Abode hergestellt werden.", - "identifier_exists": "Das Konto ist bereits registriert.", - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "E-Mail-Adresse" - }, - "title": "Gib deine Abode-Anmeldeinformationen ein" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/en.json b/homeassistant/components/abode/.translations/en.json deleted file mode 100644 index e8daeb22c0a..00000000000 --- a/homeassistant/components/abode/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Only a single configuration of Abode is allowed." - }, - "error": { - "connection_error": "Unable to connect to Abode.", - "identifier_exists": "Account already registered.", - "invalid_credentials": "Invalid credentials." - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Email Address" - }, - "title": "Fill in your Abode login information" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/es-419.json b/homeassistant/components/abode/.translations/es-419.json deleted file mode 100644 index f2def50d063..00000000000 --- a/homeassistant/components/abode/.translations/es-419.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode." - }, - "error": { - "connection_error": "No se puede conectar a Abode.", - "identifier_exists": "Cuenta ya registrada.", - "invalid_credentials": "Credenciales inv\u00e1lidas." - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Complete su informaci\u00f3n de inicio de sesi\u00f3n de Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/es.json b/homeassistant/components/abode/.translations/es.json deleted file mode 100644 index 908e8f0fbc3..00000000000 --- a/homeassistant/components/abode/.translations/es.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode." - }, - "error": { - "connection_error": "No se puede conectar a Abode.", - "identifier_exists": "Cuenta ya registrada.", - "invalid_credentials": "Credenciales inv\u00e1lidas." - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Rellene la informaci\u00f3n de acceso Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/fr.json b/homeassistant/components/abode/.translations/fr.json deleted file mode 100644 index c0c2a35081b..00000000000 --- a/homeassistant/components/abode/.translations/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Une seule configuration d'Abode est autoris\u00e9e." - }, - "error": { - "connection_error": "Impossible de se connecter \u00e0 Abode.", - "identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9.", - "invalid_credentials": "Informations d'identification invalides." - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Adresse e-mail" - }, - "title": "Remplissez vos informations de connexion Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/hu.json b/homeassistant/components/abode/.translations/hu.json deleted file mode 100644 index 385334c8549..00000000000 --- a/homeassistant/components/abode/.translations/hu.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Csak egyetlen Abode konfigur\u00e1ci\u00f3 enged\u00e9lyezett." - }, - "error": { - "connection_error": "Nem lehet csatlakozni az Abode-hez.", - "identifier_exists": "Fi\u00f3k m\u00e1r regisztr\u00e1lva van", - "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" - }, - "step": { - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Email c\u00edm" - }, - "title": "T\u00f6ltse ki az Abode bejelentkez\u00e9si adatait" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/it.json b/homeassistant/components/abode/.translations/it.json deleted file mode 100644 index af51aca8af9..00000000000 --- a/homeassistant/components/abode/.translations/it.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u00c8 consentita una sola configurazione di Abode." - }, - "error": { - "connection_error": "Impossibile connettersi ad Abode.", - "identifier_exists": "Account gi\u00e0 registrato", - "invalid_credentials": "Credenziali non valide" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Indirizzo email" - }, - "title": "Inserisci le tue informazioni di accesso Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/ko.json b/homeassistant/components/abode/.translations/ko.json deleted file mode 100644 index 9560dde6b3d..00000000000 --- a/homeassistant/components/abode/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "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.", - "identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc774\uba54\uc77c \uc8fc\uc18c" - }, - "title": "Abode \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/lb.json b/homeassistant/components/abode/.translations/lb.json deleted file mode 100644 index ed65a5df7c5..00000000000 --- a/homeassistant/components/abode/.translations/lb.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun ZHA ass erlaabt." - }, - "error": { - "connection_error": "Kann sech net mat Abode verbannen.", - "identifier_exists": "Konto ass scho registr\u00e9iert", - "invalid_credentials": "Ong\u00eblteg Login Informatioune" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "E-Mail Adress" - }, - "title": "F\u00ebllt \u00e4r Abode Login Informatiounen aus." - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/nl.json b/homeassistant/components/abode/.translations/nl.json deleted file mode 100644 index 89b5ae0c4a5..00000000000 --- a/homeassistant/components/abode/.translations/nl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Slechts een enkele configuratie van Abode is toegestaan." - }, - "error": { - "connection_error": "Kan geen verbinding maken met Abode.", - "identifier_exists": "Account is al geregistreerd.", - "invalid_credentials": "Ongeldige inloggegevens." - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "E-mailadres" - }, - "title": "Vul uw Abode-inloggegevens in" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/nn.json b/homeassistant/components/abode/.translations/nn.json deleted file mode 100644 index e0c1b6d6a7d..00000000000 --- a/homeassistant/components/abode/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/no.json b/homeassistant/components/abode/.translations/no.json deleted file mode 100644 index eefd4526d7f..00000000000 --- a/homeassistant/components/abode/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Bare en enkelt konfigurasjon av Abode er tillatt." - }, - "error": { - "connection_error": "Kan ikke koble til Abode.", - "identifier_exists": "Kontoen er allerede registrert.", - "invalid_credentials": "Ugyldig brukerinformasjon" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "E-postadresse" - }, - "title": "Fyll ut innloggingsinformasjonen for Abode" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/pl.json b/homeassistant/components/abode/.translations/pl.json deleted file mode 100644 index d086aaca395..00000000000 --- a/homeassistant/components/abode/.translations/pl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Abode." - }, - "error": { - "connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z Abode.", - "identifier_exists": "Konto jest ju\u017c zarejestrowane.", - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Adres e-mail" - }, - "title": "Wprowad\u017a informacje logowania Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/pt-BR.json b/homeassistant/components/abode/.translations/pt-BR.json deleted file mode 100644 index 30980103b38..00000000000 --- a/homeassistant/components/abode/.translations/pt-BR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Somente uma \u00fanica configura\u00e7\u00e3o de Abode \u00e9 permitida." - }, - "error": { - "connection_error": "N\u00e3o foi poss\u00edvel conectar ao Abode.", - "identifier_exists": "Conta j\u00e1 cadastrada.", - "invalid_credentials": "Credenciais inv\u00e1lidas." - }, - "step": { - "user": { - "data": { - "password": "Senha", - "username": "Endere\u00e7o de e-mail" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/pt.json b/homeassistant/components/abode/.translations/pt.json deleted file mode 100644 index 4a371c706f7..00000000000 --- a/homeassistant/components/abode/.translations/pt.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Conta j\u00e1 registada" - }, - "step": { - "user": { - "data": { - "password": "Palavra-passe", - "username": "Endere\u00e7o de e-mail" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/ru.json b/homeassistant/components/abode/.translations/ru.json deleted file mode 100644 index 590f7662731..00000000000 --- a/homeassistant/components/abode/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a Abode.", - "identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" - }, - "title": "Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/sl.json b/homeassistant/components/abode/.translations/sl.json deleted file mode 100644 index b840913b7be..00000000000 --- a/homeassistant/components/abode/.translations/sl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Dovoljena je samo ena konfiguracija Abode." - }, - "error": { - "connection_error": "Ni mogo\u010de vzpostaviti povezave z Abode.", - "identifier_exists": "Ra\u010dun je \u017ee registriran.", - "invalid_credentials": "Neveljavne poverilnice." - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "E-po\u0161tni naslov" - }, - "title": "Izpolnite svoje podatke za prijavo v Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/sv.json b/homeassistant/components/abode/.translations/sv.json deleted file mode 100644 index 9a59e4c2007..00000000000 --- a/homeassistant/components/abode/.translations/sv.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Endast en enda konfiguration av Abode \u00e4r till\u00e5ten." - }, - "error": { - "connection_error": "Det gick inte att ansluta till Abode.", - "identifier_exists": "Kontot \u00e4r redan registrerat.", - "invalid_credentials": "Ogiltiga autentiseringsuppgifter." - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "E-postadress" - }, - "title": "Fyll i din inloggningsinformation f\u00f6r Abode" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/zh-Hant.json b/homeassistant/components/abode/.translations/zh-Hant.json deleted file mode 100644 index 5bc9efc3696..00000000000 --- a/homeassistant/components/abode/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Abode\u3002" - }, - "error": { - "connection_error": "\u7121\u6cd5\u9023\u7dda\u81f3 Abode\u3002", - "identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a\u3002", - "invalid_credentials": "\u6191\u8b49\u7121\u6548\u3002" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" - }, - "title": "\u586b\u5beb Abode \u767b\u5165\u8cc7\u8a0a" - } - }, - "title": "Abode" - } -} \ No newline at end of file diff --git a/homeassistant/components/abode/__init__.py b/homeassistant/components/abode/__init__.py index 687d0d31263..85e05e89cc1 100644 --- a/homeassistant/components/abode/__init__.py +++ b/homeassistant/components/abode/__init__.py @@ -19,6 +19,7 @@ from homeassistant.const import ( CONF_USERNAME, EVENT_HOMEASSISTANT_STOP, ) +from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import config_validation as cv from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.entity import Entity @@ -119,7 +120,7 @@ async def async_setup_entry(hass, config_entry): except (AbodeException, ConnectTimeout, HTTPError) as ex: LOGGER.error("Unable to connect to Abode: %s", str(ex)) - return False + raise ConfigEntryNotReady for platform in ABODE_PLATFORMS: hass.async_create_task( @@ -186,7 +187,7 @@ def setup_hass_services(hass): def trigger_automation(call): """Trigger an Abode automation.""" - entity_ids = call.data.get(ATTR_ENTITY_ID, None) + entity_ids = call.data.get(ATTR_ENTITY_ID) target_entities = [ entity_id @@ -271,36 +272,72 @@ def setup_abode_events(hass): ) -class AbodeDevice(Entity): - """Representation of an Abode device.""" +class AbodeEntity(Entity): + """Representation of an Abode entity.""" - def __init__(self, data, device): - """Initialize Abode device.""" + def __init__(self, data): + """Initialize Abode entity.""" self._data = data - self._device = device + self._available = True - async def async_added_to_hass(self): - """Subscribe to device events.""" - self.hass.async_add_job( - self._data.abode.events.add_device_callback, - self._device.device_id, - self._update_callback, - ) - self.hass.data[DOMAIN].entity_ids.add(self.entity_id) - - async def async_will_remove_from_hass(self): - """Unsubscribe from device events.""" - self.hass.async_add_job( - self._data.abode.events.remove_all_device_callbacks, self._device.device_id - ) + @property + def available(self): + """Return the available state.""" + return self._available @property def should_poll(self): """Return the polling state.""" return self._data.polling + async def async_added_to_hass(self): + """Subscribe to Abode connection status updates.""" + await self.hass.async_add_executor_job( + self._data.abode.events.add_connection_status_callback, + self.unique_id, + self._update_connection_status, + ) + + self.hass.data[DOMAIN].entity_ids.add(self.entity_id) + + async def async_will_remove_from_hass(self): + """Unsubscribe from Abode connection status updates.""" + await self.hass.async_add_executor_job( + self._data.abode.events.remove_connection_status_callback, self.unique_id + ) + + def _update_connection_status(self): + """Update the entity available property.""" + self._available = self._data.abode.events.connected + self.schedule_update_ha_state() + + +class AbodeDevice(AbodeEntity): + """Representation of an Abode device.""" + + def __init__(self, data, device): + """Initialize Abode device.""" + super().__init__(data) + self._device = device + + async def async_added_to_hass(self): + """Subscribe to device events.""" + await super().async_added_to_hass() + await self.hass.async_add_executor_job( + self._data.abode.events.add_device_callback, + self._device.device_id, + self._update_callback, + ) + + async def async_will_remove_from_hass(self): + """Unsubscribe from device events.""" + await super().async_will_remove_from_hass() + await self.hass.async_add_executor_job( + self._data.abode.events.remove_all_device_callbacks, self._device.device_id + ) + def update(self): - """Update device and automation states.""" + """Update device state.""" self._device.refresh() @property @@ -339,23 +376,14 @@ class AbodeDevice(Entity): self.schedule_update_ha_state() -class AbodeAutomation(Entity): +class AbodeAutomation(AbodeEntity): """Representation of an Abode automation.""" def __init__(self, data, automation): """Initialize for Abode automation.""" - self._data = data + super().__init__(data) self._automation = automation - async def async_added_to_hass(self): - """Set up automation entity.""" - self.hass.data[DOMAIN].entity_ids.add(self.entity_id) - - @property - def should_poll(self): - """Return the polling state.""" - return self._data.polling - def update(self): """Update automation state.""" self._automation.refresh() @@ -368,10 +396,7 @@ class AbodeAutomation(Entity): @property def device_state_attributes(self): """Return the state attributes.""" - return { - ATTR_ATTRIBUTION: ATTRIBUTION, - "type": "CUE automation", - } + return {ATTR_ATTRIBUTION: ATTRIBUTION, "type": "CUE automation"} @property def unique_id(self): diff --git a/homeassistant/components/abode/camera.py b/homeassistant/components/abode/camera.py index bee73644890..b7d5f1dbe4c 100644 --- a/homeassistant/components/abode/camera.py +++ b/homeassistant/components/abode/camera.py @@ -41,14 +41,14 @@ class AbodeCamera(AbodeDevice, Camera): """Subscribe Abode events.""" await super().async_added_to_hass() - self.hass.async_add_job( + self.hass.async_add_executor_job( self._data.abode.events.add_timeline_callback, self._event, self._capture_callback, ) signal = f"abode_camera_capture_{self.entity_id}" - async_dispatcher_connect(self.hass, signal, self.capture) + self.async_on_remove(async_dispatcher_connect(self.hass, signal, self.capture)) def capture(self): """Request a new image capture.""" diff --git a/homeassistant/components/abode/config_flow.py b/homeassistant/components/abode/config_flow.py index 5c2c5e7b843..18146551a56 100644 --- a/homeassistant/components/abode/config_flow.py +++ b/homeassistant/components/abode/config_flow.py @@ -5,7 +5,7 @@ from requests.exceptions import ConnectTimeout, HTTPError import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, HTTP_BAD_REQUEST from homeassistant.core import callback from .const import DEFAULT_CACHEDB, DOMAIN, LOGGER # pylint: disable=unused-import @@ -46,7 +46,7 @@ class AbodeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): except (AbodeException, ConnectTimeout, HTTPError) as ex: LOGGER.error("Unable to connect to Abode: %s", str(ex)) - if ex.errcode == 400: + if ex.errcode == HTTP_BAD_REQUEST: return self._show_form({"base": "invalid_credentials"}) return self._show_form({"base": "connection_error"}) diff --git a/homeassistant/components/abode/manifest.json b/homeassistant/components/abode/manifest.json index eabd4a7f74f..c8dace4e87b 100644 --- a/homeassistant/components/abode/manifest.json +++ b/homeassistant/components/abode/manifest.json @@ -3,7 +3,6 @@ "name": "Abode", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/abode", - "requirements": ["abodepy==0.18.1"], - "dependencies": [], + "requirements": ["abodepy==0.19.0"], "codeowners": ["@shred86"] } diff --git a/homeassistant/components/abode/services.yaml b/homeassistant/components/abode/services.yaml index 5818cdc0048..f694afc0298 100644 --- a/homeassistant/components/abode/services.yaml +++ b/homeassistant/components/abode/services.yaml @@ -1,13 +1,21 @@ capture_image: description: Request a new image capture from a camera device. fields: - entity_id: {description: Entity id of the camera to request an image., example: camera.downstairs_motion_camera} + entity_id: + description: Entity id of the camera to request an image. + example: camera.downstairs_motion_camera change_setting: description: Change an Abode system setting. fields: - setting: {description: Setting to change., example: beeper_mute} - value: {description: Value of the setting., example: '1'} + setting: + description: Setting to change. + example: beeper_mute + value: + description: Value of the setting. + example: "1" trigger_automation: description: Trigger an Abode automation. fields: - entity_id: {description: Entity id of the automation to trigger., example: switch.my_automation} \ No newline at end of file + entity_id: + description: Entity id of the automation to trigger. + example: switch.my_automation diff --git a/homeassistant/components/abode/strings.json b/homeassistant/components/abode/strings.json index bf7e768f6e3..f6e7039a908 100644 --- a/homeassistant/components/abode/strings.json +++ b/homeassistant/components/abode/strings.json @@ -1,13 +1,9 @@ { "config": { - "title": "Abode", "step": { "user": { "title": "Fill in your Abode login information", - "data": { - "username": "Email Address", - "password": "Password" - } + "data": { "username": "Email Address", "password": "Password" } } }, "error": { @@ -19,4 +15,4 @@ "single_instance_allowed": "Only a single configuration of Abode is allowed." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/abode/switch.py b/homeassistant/components/abode/switch.py index b57f3fbe143..bbd90442cd9 100644 --- a/homeassistant/components/abode/switch.py +++ b/homeassistant/components/abode/switch.py @@ -53,7 +53,7 @@ class AbodeAutomationSwitch(AbodeAutomation, SwitchDevice): await super().async_added_to_hass() signal = f"abode_trigger_automation_{self.entity_id}" - async_dispatcher_connect(self.hass, signal, self.trigger) + self.async_on_remove(async_dispatcher_connect(self.hass, signal, self.trigger)) def turn_on(self, **kwargs): """Enable the automation.""" diff --git a/homeassistant/components/abode/translations/bg.json b/homeassistant/components/abode/translations/bg.json new file mode 100644 index 00000000000..3489c8bc866 --- /dev/null +++ b/homeassistant/components/abode/translations/bg.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Abode." + }, + "error": { + "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Abode.", + "identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d.", + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "E-mail \u0430\u0434\u0440\u0435\u0441" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0412\u0430\u0448\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0432\u0445\u043e\u0434 \u0432 Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/ca.json b/homeassistant/components/abode/translations/ca.json new file mode 100644 index 00000000000..5a1552700d9 --- /dev/null +++ b/homeassistant/components/abode/translations/ca.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'Abode." + }, + "error": { + "connection_error": "No es pot connectar amb Abode.", + "identifier_exists": "Compte ja registrat.", + "invalid_credentials": "Credencials inv\u00e0lides." + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Correu electr\u00f2nic" + }, + "title": "Introducci\u00f3 de la informaci\u00f3 d'inici de sessi\u00f3 a Abode." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/cs.json b/homeassistant/components/abode/translations/cs.json new file mode 100644 index 00000000000..e482cce526f --- /dev/null +++ b/homeassistant/components/abode/translations/cs.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Je povolena pouze jedna konfigurace Abode." + }, + "error": { + "connection_error": "Nelze se p\u0159ipojit k Abode.", + "identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n.", + "invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje." + }, + "step": { + "user": { + "data": { + "password": "Heslo", + "username": "E-mailov\u00e1 adresa" + }, + "title": "Vypl\u0148te p\u0159ihla\u0161ovac\u00ed \u00fadaje Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/da.json b/homeassistant/components/abode/translations/da.json new file mode 100644 index 00000000000..c00fd6ad5af --- /dev/null +++ b/homeassistant/components/abode/translations/da.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Abode." + }, + "error": { + "connection_error": "Kunne ikke oprette forbindelse til Abode.", + "identifier_exists": "Konto er allerede registreret.", + "invalid_credentials": "Ugyldige legitimationsoplysninger." + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Email-adresse" + }, + "title": "Udfyld dine Abode-loginoplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/de.json b/homeassistant/components/abode/translations/de.json new file mode 100644 index 00000000000..abbac44f2e3 --- /dev/null +++ b/homeassistant/components/abode/translations/de.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Es ist nur eine einzige Konfiguration von Abode erlaubt." + }, + "error": { + "connection_error": "Es kann keine Verbindung zu Abode hergestellt werden.", + "identifier_exists": "Das Konto ist bereits registriert.", + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "E-Mail-Adresse" + }, + "title": "Gib deine Abode-Anmeldeinformationen ein" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/en.json b/homeassistant/components/abode/translations/en.json new file mode 100644 index 00000000000..feaef16fdff --- /dev/null +++ b/homeassistant/components/abode/translations/en.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Only a single configuration of Abode is allowed." + }, + "error": { + "connection_error": "Unable to connect to Abode.", + "identifier_exists": "Account already registered.", + "invalid_credentials": "Invalid credentials." + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Email Address" + }, + "title": "Fill in your Abode login information" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/es-419.json b/homeassistant/components/abode/translations/es-419.json new file mode 100644 index 00000000000..ced57c4fdbd --- /dev/null +++ b/homeassistant/components/abode/translations/es-419.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode." + }, + "error": { + "connection_error": "No se puede conectar a Abode.", + "identifier_exists": "Cuenta ya registrada.", + "invalid_credentials": "Credenciales inv\u00e1lidas." + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Complete su informaci\u00f3n de inicio de sesi\u00f3n de Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/es.json b/homeassistant/components/abode/translations/es.json new file mode 100644 index 00000000000..76f06de9b85 --- /dev/null +++ b/homeassistant/components/abode/translations/es.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode." + }, + "error": { + "connection_error": "No se puede conectar a Abode.", + "identifier_exists": "Cuenta ya registrada.", + "invalid_credentials": "Credenciales inv\u00e1lidas." + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Rellene la informaci\u00f3n de acceso Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/fr.json b/homeassistant/components/abode/translations/fr.json new file mode 100644 index 00000000000..1c4cfe00872 --- /dev/null +++ b/homeassistant/components/abode/translations/fr.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Une seule configuration d'Abode est autoris\u00e9e." + }, + "error": { + "connection_error": "Impossible de se connecter \u00e0 Abode.", + "identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9.", + "invalid_credentials": "Informations d'identification invalides." + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Adresse e-mail" + }, + "title": "Remplissez vos informations de connexion Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/hu.json b/homeassistant/components/abode/translations/hu.json new file mode 100644 index 00000000000..89b695da7d9 --- /dev/null +++ b/homeassistant/components/abode/translations/hu.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Csak egyetlen Abode konfigur\u00e1ci\u00f3 enged\u00e9lyezett." + }, + "error": { + "connection_error": "Nem lehet csatlakozni az Abode-hez.", + "identifier_exists": "Fi\u00f3k m\u00e1r regisztr\u00e1lva van", + "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" + }, + "step": { + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Email c\u00edm" + }, + "title": "T\u00f6ltse ki az Abode bejelentkez\u00e9si adatait" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/it.json b/homeassistant/components/abode/translations/it.json new file mode 100644 index 00000000000..414ffb92ef4 --- /dev/null +++ b/homeassistant/components/abode/translations/it.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u00c8 consentita una sola configurazione di Abode." + }, + "error": { + "connection_error": "Impossibile connettersi ad Abode.", + "identifier_exists": "Account gi\u00e0 registrato", + "invalid_credentials": "Credenziali non valide" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Indirizzo email" + }, + "title": "Inserisci le tue informazioni di accesso Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/ko.json b/homeassistant/components/abode/translations/ko.json new file mode 100644 index 00000000000..46363382407 --- /dev/null +++ b/homeassistant/components/abode/translations/ko.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "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.", + "identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc774\uba54\uc77c \uc8fc\uc18c" + }, + "title": "Abode \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/lb.json b/homeassistant/components/abode/translations/lb.json new file mode 100644 index 00000000000..4e8f6084b54 --- /dev/null +++ b/homeassistant/components/abode/translations/lb.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun ZHA ass erlaabt." + }, + "error": { + "connection_error": "Kann sech net mat Abode verbannen.", + "identifier_exists": "Konto ass scho registr\u00e9iert", + "invalid_credentials": "Ong\u00eblteg Login Informatioune" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "E-Mail Adress" + }, + "title": "F\u00ebllt \u00e4r Abode Login Informatiounen aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/.translations/lv.json b/homeassistant/components/abode/translations/lv.json similarity index 100% rename from homeassistant/components/abode/.translations/lv.json rename to homeassistant/components/abode/translations/lv.json diff --git a/homeassistant/components/abode/translations/nl.json b/homeassistant/components/abode/translations/nl.json new file mode 100644 index 00000000000..580b1f487c0 --- /dev/null +++ b/homeassistant/components/abode/translations/nl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Slechts een enkele configuratie van Abode is toegestaan." + }, + "error": { + "connection_error": "Kan geen verbinding maken met Abode.", + "identifier_exists": "Account is al geregistreerd.", + "invalid_credentials": "Ongeldige inloggegevens." + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "E-mailadres" + }, + "title": "Vul uw Abode-inloggegevens in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/nn.json b/homeassistant/components/abode/translations/nn.json new file mode 100644 index 00000000000..f7a32b0983e --- /dev/null +++ b/homeassistant/components/abode/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Abode" +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/no.json b/homeassistant/components/abode/translations/no.json new file mode 100644 index 00000000000..dc269b112d7 --- /dev/null +++ b/homeassistant/components/abode/translations/no.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Bare en enkelt konfigurasjon av Abode er tillatt." + }, + "error": { + "connection_error": "Kan ikke koble til Abode.", + "identifier_exists": "Kontoen er allerede registrert.", + "invalid_credentials": "Ugyldig brukerinformasjon" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "E-postadresse" + }, + "title": "Fyll ut innloggingsinformasjonen for Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/pl.json b/homeassistant/components/abode/translations/pl.json new file mode 100644 index 00000000000..d7a25bb20b7 --- /dev/null +++ b/homeassistant/components/abode/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Abode." + }, + "error": { + "connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z Abode.", + "identifier_exists": "Konto jest ju\u017c zarejestrowane.", + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Adres e-mail" + }, + "title": "Wprowad\u017a informacje logowania Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/pt-BR.json b/homeassistant/components/abode/translations/pt-BR.json new file mode 100644 index 00000000000..1f9cf968fb0 --- /dev/null +++ b/homeassistant/components/abode/translations/pt-BR.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Somente uma \u00fanica configura\u00e7\u00e3o de Abode \u00e9 permitida." + }, + "error": { + "connection_error": "N\u00e3o foi poss\u00edvel conectar ao Abode.", + "identifier_exists": "Conta j\u00e1 cadastrada.", + "invalid_credentials": "Credenciais inv\u00e1lidas." + }, + "step": { + "user": { + "data": { + "password": "Senha", + "username": "Endere\u00e7o de e-mail" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/pt.json b/homeassistant/components/abode/translations/pt.json new file mode 100644 index 00000000000..505e1a850ec --- /dev/null +++ b/homeassistant/components/abode/translations/pt.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Conta j\u00e1 registada" + }, + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Endere\u00e7o de e-mail" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/ru.json b/homeassistant/components/abode/translations/ru.json new file mode 100644 index 00000000000..e0e6e131289 --- /dev/null +++ b/homeassistant/components/abode/translations/ru.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a Abode.", + "identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" + }, + "title": "Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/sl.json b/homeassistant/components/abode/translations/sl.json new file mode 100644 index 00000000000..d56b1335390 --- /dev/null +++ b/homeassistant/components/abode/translations/sl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dovoljena je samo ena konfiguracija Abode." + }, + "error": { + "connection_error": "Ni mogo\u010de vzpostaviti povezave z Abode.", + "identifier_exists": "Ra\u010dun je \u017ee registriran.", + "invalid_credentials": "Neveljavne poverilnice." + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "E-po\u0161tni naslov" + }, + "title": "Izpolnite svoje podatke za prijavo v Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/sv.json b/homeassistant/components/abode/translations/sv.json new file mode 100644 index 00000000000..40328574ba7 --- /dev/null +++ b/homeassistant/components/abode/translations/sv.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Endast en enda konfiguration av Abode \u00e4r till\u00e5ten." + }, + "error": { + "connection_error": "Det gick inte att ansluta till Abode.", + "identifier_exists": "Kontot \u00e4r redan registrerat.", + "invalid_credentials": "Ogiltiga autentiseringsuppgifter." + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "E-postadress" + }, + "title": "Fyll i din inloggningsinformation f\u00f6r Abode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/abode/translations/zh-Hant.json b/homeassistant/components/abode/translations/zh-Hant.json new file mode 100644 index 00000000000..5120d529cb5 --- /dev/null +++ b/homeassistant/components/abode/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Abode\u3002" + }, + "error": { + "connection_error": "\u7121\u6cd5\u9023\u7dda\u81f3 Abode\u3002", + "identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a\u3002", + "invalid_credentials": "\u6191\u8b49\u7121\u6548\u3002" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" + }, + "title": "\u586b\u5beb Abode \u767b\u5165\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/acer_projector/manifest.json b/homeassistant/components/acer_projector/manifest.json index eac1c36401a..85ff4a3f5b1 100644 --- a/homeassistant/components/acer_projector/manifest.json +++ b/homeassistant/components/acer_projector/manifest.json @@ -3,6 +3,5 @@ "name": "Acer Projector", "documentation": "https://www.home-assistant.io/integrations/acer_projector", "requirements": ["pyserial==3.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/acer_projector/switch.py b/homeassistant/components/acer_projector/switch.py index b28d67562d4..9afc9963522 100644 --- a/homeassistant/components/acer_projector/switch.py +++ b/homeassistant/components/acer_projector/switch.py @@ -61,10 +61,10 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Connect with serial port and return Acer Projector.""" - serial_port = config.get(CONF_FILENAME) - name = config.get(CONF_NAME) - timeout = config.get(CONF_TIMEOUT) - write_timeout = config.get(CONF_WRITE_TIMEOUT) + serial_port = config[CONF_FILENAME] + name = config[CONF_NAME] + timeout = config[CONF_TIMEOUT] + write_timeout = config[CONF_WRITE_TIMEOUT] add_entities([AcerSwitch(serial_port, name, timeout, write_timeout)], True) @@ -152,7 +152,7 @@ class AcerSwitch(SwitchDevice): self._available = False for key in self._attributes: - msg = CMD_DICT.get(key, None) + msg = CMD_DICT.get(key) if msg: awns = self._write_read_format(msg) self._attributes[key] = awns diff --git a/homeassistant/components/actiontec/device_tracker.py b/homeassistant/components/actiontec/device_tracker.py index 302a8d56173..e3fdeaf35f2 100644 --- a/homeassistant/components/actiontec/device_tracker.py +++ b/homeassistant/components/actiontec/device_tracker.py @@ -95,15 +95,15 @@ class ActiontecDeviceScanner(DeviceScanner): try: telnet = telnetlib.Telnet(self.host) telnet.read_until(b"Username: ") - telnet.write((self.username + "\n").encode("ascii")) + telnet.write((f"{self.username}\n").encode("ascii")) telnet.read_until(b"Password: ") - telnet.write((self.password + "\n").encode("ascii")) + telnet.write((f"{self.password}\n").encode("ascii")) prompt = telnet.read_until(b"Wireless Broadband Router> ").split(b"\n")[-1] - telnet.write("firewall mac_cache_dump\n".encode("ascii")) - telnet.write("\n".encode("ascii")) + telnet.write(b"firewall mac_cache_dump\n") + telnet.write(b"\n") telnet.read_until(prompt) leases_result = telnet.read_until(prompt).split(b"\n")[1:-1] - telnet.write("exit\n".encode("ascii")) + telnet.write(b"exit\n") except EOFError: _LOGGER.exception("Unexpected response from router") return diff --git a/homeassistant/components/actiontec/manifest.json b/homeassistant/components/actiontec/manifest.json index ddb4954794c..8a3f2f3f96a 100644 --- a/homeassistant/components/actiontec/manifest.json +++ b/homeassistant/components/actiontec/manifest.json @@ -2,7 +2,5 @@ "domain": "actiontec", "name": "Actiontec", "documentation": "https://www.home-assistant.io/integrations/actiontec", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/adguard/.translations/bg.json b/homeassistant/components/adguard/.translations/bg.json deleted file mode 100644 index 398927d370a..00000000000 --- a/homeassistant/components/adguard/.translations/bg.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "\u0422\u0430\u0437\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u0438\u0441\u043a\u0432\u0430 AdGuard Home {minimal_version} \u0438\u043b\u0438 \u043f\u043e-\u043d\u043e\u0432\u0430 {minimal_version}, \u0438\u043c\u0430\u0442\u0435 {current_version}. \u041c\u043e\u043b\u044f, \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0430\u0448\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043a\u0430 \u0437\u0430 Hass.io AdGuard Home.", - "adguard_home_outdated": "\u0422\u0430\u0437\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u0438\u0441\u043a\u0432\u0430 AdGuard Home {minimal_version} \u0438\u043b\u0438 \u043f\u043e-\u043d\u043e\u0432\u0430 {minimal_version}, \u0438\u043c\u0430\u0442\u0435 {current_version}.", - "existing_instance_updated": "\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0430\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f.", - "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 AdGuard Home." - }, - "error": { - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435." - }, - "step": { - "hassio_confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0437\u0432\u0430 \u0441 AdGuard Home, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430: {addon} ?", - "title": "AdGuard Home \u0447\u0440\u0435\u0437 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430" - }, - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442", - "ssl": "AdGuard Home \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", - "verify_ssl": "AdGuard Home \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043d\u0430\u0434\u0435\u0436\u0434\u0435\u043d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0412\u0430\u0448\u0438\u044f AdGuard Home, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b.", - "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/ca.json b/homeassistant/components/adguard/.translations/ca.json deleted file mode 100644 index 9b7b3c39b03..00000000000 --- a/homeassistant/components/adguard/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Aquesta integraci\u00f3 necessita la versi\u00f3 d'AdGuard Home {minimal_version} o una superior, tens la {current_version}. Actualitza el complement de Hass.io d'AdGuard Home.", - "adguard_home_outdated": "Aquesta integraci\u00f3 necessita la versi\u00f3 d'AdGuard Home {minimal_version} o una superior, tens la {current_version}.", - "existing_instance_updated": "S'ha actualitzat la configuraci\u00f3 existent.", - "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'AdGuard Home." - }, - "error": { - "connection_error": "No s'ha pogut connectar." - }, - "step": { - "hassio_confirm": { - "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb l'AdGuard Home proporcionat pel complement de Hass.io: {addon}?", - "title": "AdGuard Home (complement de Hass.io)" - }, - "user": { - "data": { - "host": "Amfitri\u00f3", - "password": "Contrasenya", - "port": "Port", - "ssl": "AdGuard Home utilitza un certificat SSL", - "username": "Nom d'usuari", - "verify_ssl": "AdGuard Home utilitza un certificat adequat" - }, - "description": "Configuraci\u00f3 de la inst\u00e0ncia d'AdGuard Home, permet el control i la monitoritzaci\u00f3.", - "title": "Enlla\u00e7ar AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/da.json b/homeassistant/components/adguard/.translations/da.json deleted file mode 100644 index e9e6415518d..00000000000 --- a/homeassistant/components/adguard/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Denne integration kr\u00e6ver AdGuard Home {minimal_version} eller h\u00f8jere, du har {current_version}. Opdater venligst din Hass.io AdGuard Home-tilf\u00f8jelse.", - "adguard_home_outdated": "Denne integration kr\u00e6ver AdGuard Home {minimal_version} eller h\u00f8jere, du har {current_version}.", - "existing_instance_updated": "Opdaterede eksisterende konfiguration.", - "single_instance_allowed": "Kun en enkelt konfiguration af AdGuard Home er tilladt." - }, - "error": { - "connection_error": "Forbindelse mislykkedes." - }, - "step": { - "hassio_confirm": { - "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til AdGuard Home leveret af Hass.io-tilf\u00f8jelsen: {addon}?", - "title": "AdGuard Home via Hass.io-tilf\u00f8jelse" - }, - "user": { - "data": { - "host": "V\u00e6rt", - "password": "Adgangskode", - "port": "Port", - "ssl": "AdGuard Home bruger et SSL-certifikat", - "username": "Brugernavn", - "verify_ssl": "AdGuard Home bruger et korrekt certifikat" - }, - "description": "Konfigurer din AdGuard Home-instans for at tillade overv\u00e5gning og kontrol.", - "title": "Forbind din AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/de.json b/homeassistant/components/adguard/.translations/de.json deleted file mode 100644 index c1ef5bb7926..00000000000 --- a/homeassistant/components/adguard/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Diese Integration erfordert AdGuard Home {minimal_version} oder h\u00f6her, du hast {current_version}. Bitte aktualisiere dein Hass.io AdGuard Home Add-on.", - "adguard_home_outdated": "Diese Integration erfordert AdGuard Home {minimal_version} oder h\u00f6her, du hast {current_version}.", - "existing_instance_updated": "Bestehende Konfiguration wurde aktualisiert.", - "single_instance_allowed": "Es ist nur eine einzige Konfiguration von AdGuard Home zul\u00e4ssig." - }, - "error": { - "connection_error": "Fehler beim Herstellen einer Verbindung." - }, - "step": { - "hassio_confirm": { - "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass eine Verbindung mit AdGuard Home als Hass.io-Add-On hergestellt wird: {addon}?", - "title": "AdGuard Home \u00fcber das Hass.io Add-on" - }, - "user": { - "data": { - "host": "Host", - "password": "Passwort", - "port": "Port", - "ssl": "AdGuard Home verwendet ein SSL-Zertifikat", - "username": "Benutzername", - "verify_ssl": "AdGuard Home verwendet ein richtiges Zertifikat" - }, - "description": "Richte deine AdGuard Home-Instanz ein um sie zu \u00dcberwachen und zu Steuern.", - "title": "Verkn\u00fcpfe AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/en.json b/homeassistant/components/adguard/.translations/en.json deleted file mode 100644 index 00d048c3343..00000000000 --- a/homeassistant/components/adguard/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}. Please update your Hass.io AdGuard Home add-on.", - "adguard_home_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}.", - "existing_instance_updated": "Updated existing configuration.", - "single_instance_allowed": "Only a single configuration of AdGuard Home is allowed." - }, - "error": { - "connection_error": "Failed to connect." - }, - "step": { - "hassio_confirm": { - "description": "Do you want to configure Home Assistant to connect to the AdGuard Home provided by the Hass.io add-on: {addon}?", - "title": "AdGuard Home via Hass.io add-on" - }, - "user": { - "data": { - "host": "Host", - "password": "Password", - "port": "Port", - "ssl": "AdGuard Home uses a SSL certificate", - "username": "Username", - "verify_ssl": "AdGuard Home uses a proper certificate" - }, - "description": "Set up your AdGuard Home instance to allow monitoring and control.", - "title": "Link your AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/es-419.json b/homeassistant/components/adguard/.translations/es-419.json deleted file mode 100644 index eb3274f19b6..00000000000 --- a/homeassistant/components/adguard/.translations/es-419.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, tiene {current_version}. Actualice su complemento Hass.io AdGuard Home.", - "adguard_home_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, tiene {current_version}.", - "existing_instance_updated": "Se actualiz\u00f3 la configuraci\u00f3n existente.", - "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de AdGuard Home." - }, - "error": { - "connection_error": "Error al conectar." - }, - "step": { - "hassio_confirm": { - "description": "\u00bfDesea configurar Home Assistant para conectarse a la p\u00e1gina principal de AdGuard proporcionada por el complemento Hass.io: {addon}?", - "title": "AdGuard Home a trav\u00e9s del complemento Hass.io" - }, - "user": { - "data": { - "password": "Contrase\u00f1a", - "port": "Puerto", - "ssl": "AdGuard Home utiliza un certificado SSL", - "username": "Nombre de usuario", - "verify_ssl": "AdGuard Home utiliza un certificado adecuado" - }, - "description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control.", - "title": "Enlace su AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/es.json b/homeassistant/components/adguard/.translations/es.json deleted file mode 100644 index c6946ab6120..00000000000 --- a/homeassistant/components/adguard/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, usted tiene {current_version}. Por favor, actualice su complemento Hass.io AdGuard Home.", - "adguard_home_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, usted tiene {current_version}.", - "existing_instance_updated": "Se ha actualizado la configuraci\u00f3n existente.", - "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de AdGuard Home." - }, - "error": { - "connection_error": "No se conect\u00f3." - }, - "step": { - "hassio_confirm": { - "description": "\u00bfDesea configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento Hass.io: {addon} ?", - "title": "AdGuard Home a trav\u00e9s del complemento Hass.io" - }, - "user": { - "data": { - "host": "Host", - "password": "Contrase\u00f1a", - "port": "Puerto", - "ssl": "AdGuard Home utiliza un certificado SSL", - "username": "Nombre de usuario", - "verify_ssl": "AdGuard Home utiliza un certificado apropiado" - }, - "description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control.", - "title": "Enlace su AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/fr.json b/homeassistant/components/adguard/.translations/fr.json deleted file mode 100644 index 749ba7d9c03..00000000000 --- a/homeassistant/components/adguard/.translations/fr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Cette int\u00e9gration n\u00e9cessite AdGuard Home {minimal_version} ou une version ult\u00e9rieure, vous disposez de {current_version}. Veuillez mettre \u00e0 jour votre compl\u00e9ment Hass.io AdGuard Home.", - "adguard_home_outdated": "Cette int\u00e9gration n\u00e9cessite AdGuard Home {minimal_version} ou une version ult\u00e9rieure, vous disposez de {current_version}.", - "existing_instance_updated": "La configuration existante a \u00e9t\u00e9 mise \u00e0 jour.", - "single_instance_allowed": "Une seule configuration d'AdGuard Home est autoris\u00e9e." - }, - "error": { - "connection_error": "\u00c9chec de connexion." - }, - "step": { - "hassio_confirm": { - "description": "Voulez-vous configurer Home Assistant pour qu'il se connecte \u00e0 AdGuard Home fourni par le module compl\u00e9mentaire Hass.io: {addon} ?", - "title": "AdGuard Home via le module compl\u00e9mentaire Hass.io" - }, - "user": { - "data": { - "host": "H\u00f4te", - "password": "Mot de passe", - "port": "Port", - "ssl": "AdGuard Home utilise un certificat SSL", - "username": "Nom d'utilisateur", - "verify_ssl": "AdGuard Home utilise un certificat appropri\u00e9" - }, - "description": "Configurez votre instance AdGuard Home pour permettre la surveillance et le contr\u00f4le.", - "title": "Liez votre AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/it.json b/homeassistant/components/adguard/.translations/it.json deleted file mode 100644 index 6dc6ae18d81..00000000000 --- a/homeassistant/components/adguard/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Questa integrazione richiede AdGuard Home {minimal_version} o versione successiva, si dispone di {current_version}. Aggiorna il componente aggiuntivo AdGuard Home di Hass.io.", - "adguard_home_outdated": "Questa integrazione richiede AdGuard Home {minimal_version} o versione successiva, si dispone di {current_version}.", - "existing_instance_updated": "Configurazione esistente aggiornata.", - "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di AdGuard Home." - }, - "error": { - "connection_error": "Impossibile connettersi." - }, - "step": { - "hassio_confirm": { - "description": "Vuoi configurare Home Assistant per connettersi alla AdGuard Home fornita dal componente aggiuntivo di Hass.io: {addon}?", - "title": "AdGuard Home tramite il componente aggiuntivo di Hass.io" - }, - "user": { - "data": { - "host": "Host", - "password": "Password", - "port": "Porta", - "ssl": "AdGuard Home utilizza un certificato SSL", - "username": "Nome utente", - "verify_ssl": "AdGuard Home utilizza un certificato appropriato" - }, - "description": "Configura l'istanza di AdGuard Home per consentire il monitoraggio e il controllo.", - "title": "Collega la tua AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/ko.json b/homeassistant/components/adguard/.translations/ko.json deleted file mode 100644 index 02bbb75cd2b..00000000000 --- a/homeassistant/components/adguard/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "error": { - "connection_error": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." - }, - "step": { - "hassio_confirm": { - "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc73c\ub85c AdGuard Home \uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Hass.io \uc560\ub4dc\uc628\uc758 AdGuard Home" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "ssl": "AdGuard Home \uc740 SSL \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", - "verify_ssl": "AdGuard Home \uc740 \uc62c\ubc14\ub978 \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4" - }, - "description": "\ubaa8\ub2c8\ud130\ub9c1 \ubc0f \uc81c\uc5b4\uac00 \uac00\ub2a5\ud558\ub3c4\ub85d AdGuard Home \uc778\uc2a4\ud134\uc2a4\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694.", - "title": "AdGuard Home \uc5f0\uacb0" - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/lb.json b/homeassistant/components/adguard/.translations/lb.json deleted file mode 100644 index e449f668fd9..00000000000 --- a/homeassistant/components/adguard/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "D\u00ebs Integratioun ben\u00e9idegt AdgGuard Home {minimal_version} oder m\u00e9i, dir hutt {current_version}. Aktualis\u00e9iert w.e.g. \u00e4ren Hass.io AdGuard Home Add-on.", - "adguard_home_outdated": "D\u00ebs Integratioun ben\u00e9idegt AdgGuard Home {minimal_version} oder m\u00e9i, dir hutt {current_version}.", - "existing_instance_updated": "D\u00e9i bestehend Konfiguratioun ass ge\u00e4nnert.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun AdGuard Home ass erlaabt." - }, - "error": { - "connection_error": "Feeler beim verbannen." - }, - "step": { - "hassio_confirm": { - "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mam AdGuard Home ze verbannen dee vum hass.io add-on {addon} bereet gestallt g\u00ebtt?", - "title": "AdGuard Home via Hass.io add-on" - }, - "user": { - "data": { - "host": "Apparat", - "password": "Passwuert", - "port": "Port", - "ssl": "AdGuard Home benotzt een SSL Zertifikat", - "username": "Benotzernumm", - "verify_ssl": "AdGuard Home benotzt een eegenen Zertifikat" - }, - "description": "Konfigur\u00e9iert \u00e4r AdGuard Home Instanz fir d'Iwwerwaachung an d'Kontroll z'erlaben.", - "title": "Verbannt \u00e4ren AdGuard Home" - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/nl.json b/homeassistant/components/adguard/.translations/nl.json deleted file mode 100644 index bd0dcc5fa43..00000000000 --- a/homeassistant/components/adguard/.translations/nl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Deze integratie vereist AdGuard Home {minimal_version} of hoger, u heeft {current_version}. Update uw Hass.io AdGuard Home-add-on.", - "adguard_home_outdated": "Deze integratie vereist AdGuard Home {minimal_version} of hoger, u heeft {current_version}.", - "existing_instance_updated": "Bestaande configuratie bijgewerkt.", - "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie van AdGuard Home is toegestaan." - }, - "error": { - "connection_error": "Kon niet verbinden." - }, - "step": { - "hassio_confirm": { - "description": "Wilt u Home Assistant configureren om verbinding te maken met AdGuard Home van de Hass.io-add-on: {addon}?", - "title": "AdGuard Home via Hass.io add-on" - }, - "user": { - "data": { - "host": "Host", - "password": "Wachtwoord", - "port": "Poort", - "ssl": "AdGuard Home maakt gebruik van een SSL certificaat", - "username": "Gebruikersnaam", - "verify_ssl": "AdGuard Home maakt gebruik van een goed certificaat" - }, - "description": "Stel uw AdGuard Home-instantie in om toezicht en controle mogelijk te maken.", - "title": "Link uw AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/nn.json b/homeassistant/components/adguard/.translations/nn.json deleted file mode 100644 index 0e2e82437e8..00000000000 --- a/homeassistant/components/adguard/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "username": "Brukarnamn" - } - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/no.json b/homeassistant/components/adguard/.translations/no.json deleted file mode 100644 index d91f226a7eb..00000000000 --- a/homeassistant/components/adguard/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Denne integrasjonen krever AdGuard Home {minimal_version} eller h\u00f8yere, du har {current_version}. Vennligst oppdater Hass.io AdGuard Home-tillegget.", - "adguard_home_outdated": "Denne integrasjonen krever AdGuard Home {minimal_version} eller h\u00f8yere, du har {current_version}.", - "existing_instance_updated": "Oppdatert eksisterende konfigurasjon.", - "single_instance_allowed": "Kun en konfigurasjon av AdGuard Hjemer tillatt." - }, - "error": { - "connection_error": "Tilkobling mislyktes." - }, - "step": { - "hassio_confirm": { - "description": "Vil du konfigurere Home Assistant til \u00e5 koble til AdGuard Hjem gitt av hass.io tillegget {addon}?", - "title": "AdGuard Hjem via Hass.io tillegg" - }, - "user": { - "data": { - "host": "Vert", - "password": "Passord", - "port": "", - "ssl": "AdGuard Hjem bruker et SSL-sertifikat", - "username": "Brukernavn", - "verify_ssl": "AdGuard Home bruker et riktig sertifikat" - }, - "description": "Sett opp din AdGuard Hjem instans for \u00e5 tillate overv\u00e5king og kontroll.", - "title": "Koble til ditt AdGuard Hjem." - } - }, - "title": "AdGuard Hjem" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/pl.json b/homeassistant/components/adguard/.translations/pl.json deleted file mode 100644 index 69ba6b024e2..00000000000 --- a/homeassistant/components/adguard/.translations/pl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Ta integracja wymaga AdGuard Home {minimal_version} lub nowszej wersji, masz {current_version}. Zaktualizuj sw\u00f3j dodatek Hass.io AdGuard Home.", - "adguard_home_outdated": "Ta integracja wymaga AdGuard Home {minimal_version} lub nowszej wersji, masz {current_version}.", - "existing_instance_updated": "Zaktualizowano istniej\u0105c\u0105 konfiguracj\u0119.", - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja AdGuard Home." - }, - "error": { - "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia." - }, - "step": { - "hassio_confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Home Assistant, aby po\u0142\u0105czy\u0142 si\u0119 z AdGuard Home przez dodatek Hass.io {addon}?", - "title": "AdGuard Home przez dodatek Hass.io" - }, - "user": { - "data": { - "host": "Host", - "password": "Has\u0142o", - "port": "Port", - "ssl": "AdGuard Home u\u017cywa certyfikatu SSL", - "username": "Nazwa u\u017cytkownika", - "verify_ssl": "AdGuard Home u\u017cywa odpowiedniego certyfikatu." - }, - "description": "Skonfiguruj instancj\u0119 AdGuard Home, aby umo\u017cliwi\u0107 monitorowanie i kontrol\u0119.", - "title": "Po\u0142\u0105cz AdGuard Home" - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/pt-BR.json b/homeassistant/components/adguard/.translations/pt-BR.json deleted file mode 100644 index 690947364e1..00000000000 --- a/homeassistant/components/adguard/.translations/pt-BR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "existing_instance_updated": "Configura\u00e7\u00e3o existente atualizada.", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do AdGuard Home \u00e9 permitida." - }, - "error": { - "connection_error": "Falhou ao conectar." - }, - "step": { - "hassio_confirm": { - "description": "Deseja configurar o Home Assistant para se conectar ao AdGuard Home fornecido pelo complemento Hass.io: {addon} ?", - "title": "AdGuard Home via add-on Hass.io" - }, - "user": { - "data": { - "host": "Host", - "password": "Senha", - "port": "Porta", - "ssl": "O AdGuard Home usa um certificado SSL", - "username": "Nome de usu\u00e1rio", - "verify_ssl": "O AdGuard Home usa um certificado apropriado" - }, - "description": "Configure sua inst\u00e2ncia do AdGuard Home para permitir o monitoramento e o controle.", - "title": "Vincule o seu AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/ru.json b/homeassistant/components/adguard/.translations/ru.json deleted file mode 100644 index eca46d7db00..00000000000 --- a/homeassistant/components/adguard/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "\u042d\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 AdGuard Home \u0432\u0435\u0440\u0441\u0438\u0438 {current_version}. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f {minimal_version}, \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u0430\u044f. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 Hass.io.", - "adguard_home_outdated": "\u042d\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 AdGuard Home \u0432\u0435\u0440\u0441\u0438\u0438 {current_version}. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e {minimal_version} \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u0443\u044e.", - "existing_instance_updated": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f." - }, - "step": { - "hassio_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a AdGuard Home (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", - "title": "AdGuard Home (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" - }, - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "ssl": "AdGuard Home \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 SSL", - "username": "\u041b\u043e\u0433\u0438\u043d", - "verify_ssl": "AdGuard Home \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f AdGuard Home.", - "title": "AdGuard Home" - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/sl.json b/homeassistant/components/adguard/.translations/sl.json deleted file mode 100644 index 974524c932d..00000000000 --- a/homeassistant/components/adguard/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Za to integracijo je potrebna AdGuard Home {minimal_version} ali vi\u0161ja, vi imate {current_version}. Prosimo posodobite va\u0161 hass.io AdGuard Home dodatek.", - "adguard_home_outdated": "Za to integracijo je potrebna AdGuard Home {minimal_version} ali vi\u0161ja, vi imate {current_version}.", - "existing_instance_updated": "Posodobljena obstoje\u010da konfiguracija.", - "single_instance_allowed": "Dovoljena je samo ena konfiguracija AdGuard Home." - }, - "error": { - "connection_error": "Povezava ni uspela." - }, - "step": { - "hassio_confirm": { - "description": "\u017delite konfigurirati Home Assistant-a za povezavo z AdGuard Home, ki ga ponuja Hass.io add-on {addon} ?", - "title": "AdGuard Home preko dodatka Hass.io" - }, - "user": { - "data": { - "host": "Gostitelj", - "password": "Geslo", - "port": "Vrata", - "ssl": "AdGuard Home uporablja SSL certifikat", - "username": "Uporabni\u0161ko ime", - "verify_ssl": "AdGuard Home uporablja ustrezen certifikat" - }, - "description": "Nastavite primerek AdGuard Home, da omogo\u010dite spremljanje in nadzor.", - "title": "Pove\u017eite svoj AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/sv.json b/homeassistant/components/adguard/.translations/sv.json deleted file mode 100644 index 519ecef52db..00000000000 --- a/homeassistant/components/adguard/.translations/sv.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "Den h\u00e4r integrationen kr\u00e4ver AdGuard Home {minimal_version} eller senare, du har {current_version}. Uppdatera ditt Hass.io AdGuard Home-till\u00e4gg.", - "adguard_home_outdated": "Den h\u00e4r integrationen kr\u00e4ver AdGuard Home {minimal_version} eller senare, du har {current_version}.", - "existing_instance_updated": "Uppdaterade existerande konfiguration.", - "single_instance_allowed": "Endast en enda konfiguration av AdGuard Home \u00e4r till\u00e5ten." - }, - "error": { - "connection_error": "Det gick inte att ansluta." - }, - "step": { - "hassio_confirm": { - "description": "Vill du konfigurera Home Assistant f\u00f6r att ansluta till AdGuard Home som tillhandah\u00e5lls av Hass.io Add-on: {addon}?", - "title": "AdGuard Home via Hass.io-till\u00e4gget" - }, - "user": { - "data": { - "host": "V\u00e4rd", - "password": "L\u00f6senord", - "port": "Port", - "ssl": "AdGuard Home anv\u00e4nder ett SSL-certifikat", - "username": "Anv\u00e4ndarnamn", - "verify_ssl": "AdGuard Home anv\u00e4nder ett korrekt certifikat" - }, - "description": "St\u00e4ll in din AdGuard Home-instans f\u00f6r att till\u00e5ta \u00f6vervakning och kontroll.", - "title": "L\u00e4nka din AdGuard Home." - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/zh-Hant.json b/homeassistant/components/adguard/.translations/zh-Hant.json deleted file mode 100644 index d08a5715a8e..00000000000 --- a/homeassistant/components/adguard/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "adguard_home_addon_outdated": "\u6574\u5408\u9700\u8981 AdGuard Home {minimal_version} \u6216\u66f4\u65b0\u7248\u672c\uff0c\u60a8\u76ee\u524d\u4f7f\u7528\u7248\u672c\u70ba {current_version}\u3002\u8acb\u66f4\u65b0 Hass.io AdGuard Home \u5143\u4ef6\u3002", - "adguard_home_outdated": "\u6574\u5408\u9700\u8981 AdGuard Home {minimal_version} \u6216\u66f4\u65b0\u7248\u672c\uff0c\u60a8\u76ee\u524d\u4f7f\u7528\u7248\u672c\u70ba {current_version}\u3002", - "existing_instance_updated": "\u5df2\u66f4\u65b0\u73fe\u6709\u8a2d\u5b9a\u3002", - "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 AdGuard Home\u3002" - }, - "error": { - "connection_error": "\u9023\u7dda\u5931\u6557\u3002" - }, - "step": { - "hassio_confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6\uff1a{addon} \u9023\u7dda\u81f3 AdGuard Home\uff1f", - "title": "\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6 AdGuard Home" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "ssl": "AdGuard Home \u4f7f\u7528 SSL \u8a8d\u8b49", - "username": "\u4f7f\u7528\u8005\u540d\u7a31", - "verify_ssl": "AdGuard Home \u4f7f\u7528\u5c0d\u61c9\u8a8d\u8b49" - }, - "description": "\u8a2d\u5b9a AdGuard Home \u4ee5\u9032\u884c\u76e3\u63a7\u3002", - "title": "\u9023\u7d50 AdGuard Home\u3002" - } - }, - "title": "AdGuard Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/adguard/config_flow.py b/homeassistant/components/adguard/config_flow.py index 3657d4ee3ad..e2a226eb4ce 100644 --- a/homeassistant/components/adguard/config_flow.py +++ b/homeassistant/components/adguard/config_flow.py @@ -30,10 +30,6 @@ class AdGuardHomeFlowHandler(ConfigFlow): _hassio_discovery = None - def __init__(self): - """Initialize AgGuard Home flow.""" - pass - async def _show_setup_form(self, errors=None): """Show the setup form to the user.""" return self.async_show_form( diff --git a/homeassistant/components/adguard/manifest.json b/homeassistant/components/adguard/manifest.json index 02b0e2ea455..0bcd25569a5 100644 --- a/homeassistant/components/adguard/manifest.json +++ b/homeassistant/components/adguard/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/adguard", "requirements": ["adguardhome==0.4.2"], - "dependencies": [], "codeowners": ["@frenck"] } diff --git a/homeassistant/components/adguard/strings.json b/homeassistant/components/adguard/strings.json index d33ba2b397a..471708879b4 100644 --- a/homeassistant/components/adguard/strings.json +++ b/homeassistant/components/adguard/strings.json @@ -1,32 +1,28 @@ { - "config": { - "title": "AdGuard Home", - "step": { - "user": { - "title": "Link your AdGuard Home.", - "description": "Set up your AdGuard Home instance to allow monitoring and control.", - "data": { - "host": "Host", - "password": "Password", - "port": "Port", - "username": "Username", - "ssl": "AdGuard Home uses a SSL certificate", - "verify_ssl": "AdGuard Home uses a proper certificate" - } - }, - "hassio_confirm": { - "title": "AdGuard Home via Hass.io add-on", - "description": "Do you want to configure Home Assistant to connect to the AdGuard Home provided by the Hass.io add-on: {addon}?" - } - }, - "error": { - "connection_error": "Failed to connect." - }, - "abort": { - "adguard_home_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}.", - "adguard_home_addon_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}. Please update your Hass.io AdGuard Home add-on.", - "existing_instance_updated": "Updated existing configuration.", - "single_instance_allowed": "Only a single configuration of AdGuard Home is allowed." + "config": { + "step": { + "user": { + "description": "Set up your AdGuard Home instance to allow monitoring and control.", + "data": { + "host": "Host", + "password": "Password", + "port": "Port", + "username": "Username", + "ssl": "AdGuard Home uses a SSL certificate", + "verify_ssl": "AdGuard Home uses a proper certificate" } + }, + "hassio_confirm": { + "title": "AdGuard Home via Hass.io add-on", + "description": "Do you want to configure Home Assistant to connect to the AdGuard Home provided by the Hass.io add-on: {addon}?" + } + }, + "error": { "connection_error": "Failed to connect." }, + "abort": { + "adguard_home_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}.", + "adguard_home_addon_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}. Please update your Hass.io AdGuard Home add-on.", + "existing_instance_updated": "Updated existing configuration.", + "single_instance_allowed": "Only a single configuration of AdGuard Home is allowed." } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/adguard/translations/bg.json b/homeassistant/components/adguard/translations/bg.json new file mode 100644 index 00000000000..90c3ddcb359 --- /dev/null +++ b/homeassistant/components/adguard/translations/bg.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "\u0422\u0430\u0437\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u0438\u0441\u043a\u0432\u0430 AdGuard Home {minimal_version} \u0438\u043b\u0438 \u043f\u043e-\u043d\u043e\u0432\u0430 {minimal_version}, \u0438\u043c\u0430\u0442\u0435 {current_version}. \u041c\u043e\u043b\u044f, \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0430\u0448\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043a\u0430 \u0437\u0430 Hass.io AdGuard Home.", + "adguard_home_outdated": "\u0422\u0430\u0437\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u0438\u0441\u043a\u0432\u0430 AdGuard Home {minimal_version} \u0438\u043b\u0438 \u043f\u043e-\u043d\u043e\u0432\u0430 {minimal_version}, \u0438\u043c\u0430\u0442\u0435 {current_version}.", + "existing_instance_updated": "\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0430\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f.", + "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 AdGuard Home." + }, + "error": { + "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435." + }, + "step": { + "hassio_confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0437\u0432\u0430 \u0441 AdGuard Home, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430: {addon} ?", + "title": "AdGuard Home \u0447\u0440\u0435\u0437 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430" + }, + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442", + "ssl": "AdGuard Home \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", + "verify_ssl": "AdGuard Home \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043d\u0430\u0434\u0435\u0436\u0434\u0435\u043d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0412\u0430\u0448\u0438\u044f AdGuard Home, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b.", + "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/ca.json b/homeassistant/components/adguard/translations/ca.json new file mode 100644 index 00000000000..adabb83ab0b --- /dev/null +++ b/homeassistant/components/adguard/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Aquesta integraci\u00f3 necessita la versi\u00f3 d'AdGuard Home {minimal_version} o una superior, tens la {current_version}. Actualitza el complement de Hass.io d'AdGuard Home.", + "adguard_home_outdated": "Aquesta integraci\u00f3 necessita la versi\u00f3 d'AdGuard Home {minimal_version} o una superior, tens la {current_version}.", + "existing_instance_updated": "S'ha actualitzat la configuraci\u00f3 existent.", + "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'AdGuard Home." + }, + "error": { + "connection_error": "No s'ha pogut connectar." + }, + "step": { + "hassio_confirm": { + "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb l'AdGuard Home proporcionat pel complement de Hass.io: {addon}?", + "title": "AdGuard Home (complement de Hass.io)" + }, + "user": { + "data": { + "host": "Amfitri\u00f3", + "password": "Contrasenya", + "port": "Port", + "ssl": "AdGuard Home utilitza un certificat SSL", + "username": "Nom d'usuari", + "verify_ssl": "AdGuard Home utilitza un certificat adequat" + }, + "description": "Configuraci\u00f3 de la inst\u00e0ncia d'AdGuard Home, permet el control i la monitoritzaci\u00f3.", + "title": "Enlla\u00e7ar AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/cs.json b/homeassistant/components/adguard/translations/cs.json similarity index 100% rename from homeassistant/components/adguard/.translations/cs.json rename to homeassistant/components/adguard/translations/cs.json diff --git a/homeassistant/components/adguard/translations/da.json b/homeassistant/components/adguard/translations/da.json new file mode 100644 index 00000000000..3a1a73ac6bd --- /dev/null +++ b/homeassistant/components/adguard/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Denne integration kr\u00e6ver AdGuard Home {minimal_version} eller h\u00f8jere, du har {current_version}. Opdater venligst din Hass.io AdGuard Home-tilf\u00f8jelse.", + "adguard_home_outdated": "Denne integration kr\u00e6ver AdGuard Home {minimal_version} eller h\u00f8jere, du har {current_version}.", + "existing_instance_updated": "Opdaterede eksisterende konfiguration.", + "single_instance_allowed": "Kun en enkelt konfiguration af AdGuard Home er tilladt." + }, + "error": { + "connection_error": "Forbindelse mislykkedes." + }, + "step": { + "hassio_confirm": { + "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til AdGuard Home leveret af Hass.io-tilf\u00f8jelsen: {addon}?", + "title": "AdGuard Home via Hass.io-tilf\u00f8jelse" + }, + "user": { + "data": { + "host": "V\u00e6rt", + "password": "Adgangskode", + "port": "Port", + "ssl": "AdGuard Home bruger et SSL-certifikat", + "username": "Brugernavn", + "verify_ssl": "AdGuard Home bruger et korrekt certifikat" + }, + "description": "Konfigurer din AdGuard Home-instans for at tillade overv\u00e5gning og kontrol.", + "title": "Forbind din AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/de.json b/homeassistant/components/adguard/translations/de.json new file mode 100644 index 00000000000..19c1a5ce6fc --- /dev/null +++ b/homeassistant/components/adguard/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Diese Integration erfordert AdGuard Home {minimal_version} oder h\u00f6her, du hast {current_version}. Bitte aktualisiere dein Hass.io AdGuard Home Add-on.", + "adguard_home_outdated": "Diese Integration erfordert AdGuard Home {minimal_version} oder h\u00f6her, du hast {current_version}.", + "existing_instance_updated": "Bestehende Konfiguration wurde aktualisiert.", + "single_instance_allowed": "Es ist nur eine einzige Konfiguration von AdGuard Home zul\u00e4ssig." + }, + "error": { + "connection_error": "Fehler beim Herstellen einer Verbindung." + }, + "step": { + "hassio_confirm": { + "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass eine Verbindung mit AdGuard Home als Hass.io-Add-On hergestellt wird: {addon}?", + "title": "AdGuard Home \u00fcber das Hass.io Add-on" + }, + "user": { + "data": { + "host": "Host", + "password": "Passwort", + "port": "Port", + "ssl": "AdGuard Home verwendet ein SSL-Zertifikat", + "username": "Benutzername", + "verify_ssl": "AdGuard Home verwendet ein richtiges Zertifikat" + }, + "description": "Richte deine AdGuard Home-Instanz ein um sie zu \u00dcberwachen und zu Steuern.", + "title": "Verkn\u00fcpfe AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/en.json b/homeassistant/components/adguard/translations/en.json new file mode 100644 index 00000000000..d9b5d81b469 --- /dev/null +++ b/homeassistant/components/adguard/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}. Please update your Hass.io AdGuard Home add-on.", + "adguard_home_outdated": "This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}.", + "existing_instance_updated": "Updated existing configuration.", + "single_instance_allowed": "Only a single configuration of AdGuard Home is allowed." + }, + "error": { + "connection_error": "Failed to connect." + }, + "step": { + "hassio_confirm": { + "description": "Do you want to configure Home Assistant to connect to the AdGuard Home provided by the Hass.io add-on: {addon}?", + "title": "AdGuard Home via Hass.io add-on" + }, + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Port", + "ssl": "AdGuard Home uses a SSL certificate", + "username": "Username", + "verify_ssl": "AdGuard Home uses a proper certificate" + }, + "description": "Set up your AdGuard Home instance to allow monitoring and control.", + "title": "Link your AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/es-419.json b/homeassistant/components/adguard/translations/es-419.json new file mode 100644 index 00000000000..5a36b35d028 --- /dev/null +++ b/homeassistant/components/adguard/translations/es-419.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, tiene {current_version}. Actualice su complemento Hass.io AdGuard Home.", + "adguard_home_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, tiene {current_version}.", + "existing_instance_updated": "Se actualiz\u00f3 la configuraci\u00f3n existente.", + "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de AdGuard Home." + }, + "error": { + "connection_error": "Error al conectar." + }, + "step": { + "hassio_confirm": { + "description": "\u00bfDesea configurar Home Assistant para conectarse a la p\u00e1gina principal de AdGuard proporcionada por el complemento Hass.io: {addon}?", + "title": "AdGuard Home a trav\u00e9s del complemento Hass.io" + }, + "user": { + "data": { + "password": "Contrase\u00f1a", + "port": "Puerto", + "ssl": "AdGuard Home utiliza un certificado SSL", + "username": "Nombre de usuario", + "verify_ssl": "AdGuard Home utiliza un certificado adecuado" + }, + "description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control.", + "title": "Enlace su AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/es.json b/homeassistant/components/adguard/translations/es.json new file mode 100644 index 00000000000..8e4bc821fdf --- /dev/null +++ b/homeassistant/components/adguard/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, usted tiene {current_version}. Por favor, actualice su complemento Hass.io AdGuard Home.", + "adguard_home_outdated": "Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, usted tiene {current_version}.", + "existing_instance_updated": "Se ha actualizado la configuraci\u00f3n existente.", + "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de AdGuard Home." + }, + "error": { + "connection_error": "No se conect\u00f3." + }, + "step": { + "hassio_confirm": { + "description": "\u00bfDesea configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento Hass.io: {addon} ?", + "title": "AdGuard Home a trav\u00e9s del complemento Hass.io" + }, + "user": { + "data": { + "host": "Host", + "password": "Contrase\u00f1a", + "port": "Puerto", + "ssl": "AdGuard Home utiliza un certificado SSL", + "username": "Usuario", + "verify_ssl": "AdGuard Home utiliza un certificado apropiado" + }, + "description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control.", + "title": "Enlace su AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/fr.json b/homeassistant/components/adguard/translations/fr.json new file mode 100644 index 00000000000..777e1e992af --- /dev/null +++ b/homeassistant/components/adguard/translations/fr.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Cette int\u00e9gration n\u00e9cessite AdGuard Home {minimal_version} ou une version ult\u00e9rieure, vous disposez de {current_version}. Veuillez mettre \u00e0 jour votre compl\u00e9ment Hass.io AdGuard Home.", + "adguard_home_outdated": "Cette int\u00e9gration n\u00e9cessite AdGuard Home {minimal_version} ou une version ult\u00e9rieure, vous disposez de {current_version}.", + "existing_instance_updated": "La configuration existante a \u00e9t\u00e9 mise \u00e0 jour.", + "single_instance_allowed": "Une seule configuration d'AdGuard Home est autoris\u00e9e." + }, + "error": { + "connection_error": "\u00c9chec de connexion." + }, + "step": { + "hassio_confirm": { + "description": "Voulez-vous configurer Home Assistant pour qu'il se connecte \u00e0 AdGuard Home fourni par le module compl\u00e9mentaire Hass.io: {addon} ?", + "title": "AdGuard Home via le module compl\u00e9mentaire Hass.io" + }, + "user": { + "data": { + "host": "H\u00f4te", + "password": "Mot de passe", + "port": "Port", + "ssl": "AdGuard Home utilise un certificat SSL", + "username": "Nom d'utilisateur", + "verify_ssl": "AdGuard Home utilise un certificat appropri\u00e9" + }, + "description": "Configurez votre instance AdGuard Home pour permettre la surveillance et le contr\u00f4le.", + "title": "Liez votre AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/hr.json b/homeassistant/components/adguard/translations/hr.json similarity index 100% rename from homeassistant/components/adguard/.translations/hr.json rename to homeassistant/components/adguard/translations/hr.json diff --git a/homeassistant/components/adguard/.translations/hu.json b/homeassistant/components/adguard/translations/hu.json similarity index 100% rename from homeassistant/components/adguard/.translations/hu.json rename to homeassistant/components/adguard/translations/hu.json diff --git a/homeassistant/components/adguard/.translations/id.json b/homeassistant/components/adguard/translations/id.json similarity index 100% rename from homeassistant/components/adguard/.translations/id.json rename to homeassistant/components/adguard/translations/id.json diff --git a/homeassistant/components/adguard/translations/it.json b/homeassistant/components/adguard/translations/it.json new file mode 100644 index 00000000000..c3c9aef22c9 --- /dev/null +++ b/homeassistant/components/adguard/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Questa integrazione richiede AdGuard Home {minimal_version} o versione successiva, si dispone di {current_version}. Aggiorna il componente aggiuntivo AdGuard Home di Hass.io.", + "adguard_home_outdated": "Questa integrazione richiede AdGuard Home {minimal_version} o versione successiva, si dispone di {current_version}.", + "existing_instance_updated": "Configurazione esistente aggiornata.", + "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di AdGuard Home." + }, + "error": { + "connection_error": "Impossibile connettersi." + }, + "step": { + "hassio_confirm": { + "description": "Vuoi configurare Home Assistant per connettersi alla AdGuard Home fornita dal componente aggiuntivo di Hass.io: {addon}?", + "title": "AdGuard Home tramite il componente aggiuntivo di Hass.io" + }, + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Porta", + "ssl": "AdGuard Home utilizza un certificato SSL", + "username": "Nome utente", + "verify_ssl": "AdGuard Home utilizza un certificato appropriato" + }, + "description": "Configura l'istanza di AdGuard Home per consentire il monitoraggio e il controllo.", + "title": "Collega la tua AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/ko.json b/homeassistant/components/adguard/translations/ko.json new file mode 100644 index 00000000000..1bcc60c80f0 --- /dev/null +++ b/homeassistant/components/adguard/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "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." + }, + "error": { + "connection_error": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." + }, + "step": { + "hassio_confirm": { + "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc73c\ub85c AdGuard Home \uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Hass.io \uc560\ub4dc\uc628\uc758 AdGuard Home" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "ssl": "AdGuard Home \uc740 SSL \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", + "verify_ssl": "AdGuard Home \uc740 \uc62c\ubc14\ub978 \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4" + }, + "description": "\ubaa8\ub2c8\ud130\ub9c1 \ubc0f \uc81c\uc5b4\uac00 \uac00\ub2a5\ud558\ub3c4\ub85d AdGuard Home \uc778\uc2a4\ud134\uc2a4\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694.", + "title": "AdGuard Home \uc5f0\uacb0" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/lb.json b/homeassistant/components/adguard/translations/lb.json new file mode 100644 index 00000000000..4c839fc9e18 --- /dev/null +++ b/homeassistant/components/adguard/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "D\u00ebs Integratioun ben\u00e9idegt AdgGuard Home {minimal_version} oder m\u00e9i, dir hutt {current_version}. Aktualis\u00e9iert w.e.g. \u00e4ren Hass.io AdGuard Home Add-on.", + "adguard_home_outdated": "D\u00ebs Integratioun ben\u00e9idegt AdgGuard Home {minimal_version} oder m\u00e9i, dir hutt {current_version}.", + "existing_instance_updated": "D\u00e9i bestehend Konfiguratioun ass ge\u00e4nnert.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun AdGuard Home ass erlaabt." + }, + "error": { + "connection_error": "Feeler beim verbannen." + }, + "step": { + "hassio_confirm": { + "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mam AdGuard Home ze verbannen dee vum hass.io add-on {addon} bereet gestallt g\u00ebtt?", + "title": "AdGuard Home via Hass.io add-on" + }, + "user": { + "data": { + "host": "Apparat", + "password": "Passwuert", + "port": "Port", + "ssl": "AdGuard Home benotzt een SSL Zertifikat", + "username": "Benotzernumm", + "verify_ssl": "AdGuard Home benotzt een eegenen Zertifikat" + }, + "description": "Konfigur\u00e9iert \u00e4r AdGuard Home Instanz fir d'Iwwerwaachung an d'Kontroll z'erlaben.", + "title": "Verbannt \u00e4ren AdGuard Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/nl.json b/homeassistant/components/adguard/translations/nl.json new file mode 100644 index 00000000000..4e3439dd624 --- /dev/null +++ b/homeassistant/components/adguard/translations/nl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Deze integratie vereist AdGuard Home {minimal_version} of hoger, u heeft {current_version}. Update uw Hass.io AdGuard Home-add-on.", + "adguard_home_outdated": "Deze integratie vereist AdGuard Home {minimal_version} of hoger, u heeft {current_version}.", + "existing_instance_updated": "Bestaande configuratie bijgewerkt.", + "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie van AdGuard Home is toegestaan." + }, + "error": { + "connection_error": "Kon niet verbinden." + }, + "step": { + "hassio_confirm": { + "description": "Wilt u Home Assistant configureren om verbinding te maken met AdGuard Home van de Hass.io-add-on: {addon}?", + "title": "AdGuard Home via Hass.io add-on" + }, + "user": { + "data": { + "host": "Host", + "password": "Wachtwoord", + "port": "Poort", + "ssl": "AdGuard Home maakt gebruik van een SSL certificaat", + "username": "Gebruikersnaam", + "verify_ssl": "AdGuard Home maakt gebruik van een goed certificaat" + }, + "description": "Stel uw AdGuard Home-instantie in om toezicht en controle mogelijk te maken.", + "title": "Link uw AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/nn.json b/homeassistant/components/adguard/translations/nn.json similarity index 100% rename from homeassistant/components/unifi/.translations/nn.json rename to homeassistant/components/adguard/translations/nn.json diff --git a/homeassistant/components/adguard/translations/no.json b/homeassistant/components/adguard/translations/no.json new file mode 100644 index 00000000000..5194e799b16 --- /dev/null +++ b/homeassistant/components/adguard/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Denne integrasjonen krever AdGuard Home {minimal_version} eller h\u00f8yere, du har {current_version}. Vennligst oppdater Hass.io AdGuard Home-tillegget.", + "adguard_home_outdated": "Denne integrasjonen krever AdGuard Home {minimal_version} eller h\u00f8yere, du har {current_version}.", + "existing_instance_updated": "Oppdatert eksisterende konfigurasjon.", + "single_instance_allowed": "Kun en konfigurasjon av AdGuard Hjemer tillatt." + }, + "error": { + "connection_error": "Tilkobling mislyktes." + }, + "step": { + "hassio_confirm": { + "description": "Vil du konfigurere Home Assistant til \u00e5 koble til AdGuard Hjem gitt av hass.io tillegget {addon}?", + "title": "AdGuard Hjem via Hass.io tillegg" + }, + "user": { + "data": { + "host": "Vert", + "password": "Passord", + "port": "", + "ssl": "AdGuard Hjem bruker et SSL-sertifikat", + "username": "Brukernavn", + "verify_ssl": "AdGuard Home bruker et riktig sertifikat" + }, + "description": "Sett opp din AdGuard Hjem instans for \u00e5 tillate overv\u00e5king og kontroll.", + "title": "Koble til ditt AdGuard Hjem." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/pl.json b/homeassistant/components/adguard/translations/pl.json new file mode 100644 index 00000000000..71264e906e4 --- /dev/null +++ b/homeassistant/components/adguard/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Ta integracja wymaga AdGuard Home {minimal_version} lub nowszej wersji, masz {current_version}. Zaktualizuj sw\u00f3j dodatek Hass.io AdGuard Home.", + "adguard_home_outdated": "Ta integracja wymaga AdGuard Home {minimal_version} lub nowszej wersji, masz {current_version}.", + "existing_instance_updated": "Zaktualizowano istniej\u0105c\u0105 konfiguracj\u0119.", + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja AdGuard Home." + }, + "error": { + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia." + }, + "step": { + "hassio_confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Home Assistant, aby po\u0142\u0105czy\u0142 si\u0119 z AdGuard Home przez dodatek Hass.io {addon}?", + "title": "AdGuard Home przez dodatek Hass.io" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o", + "port": "Port", + "ssl": "AdGuard Home u\u017cywa certyfikatu SSL", + "username": "Nazwa u\u017cytkownika", + "verify_ssl": "AdGuard Home u\u017cywa odpowiedniego certyfikatu." + }, + "description": "Skonfiguruj instancj\u0119 AdGuard Home, aby umo\u017cliwi\u0107 monitorowanie i kontrol\u0119.", + "title": "Po\u0142\u0105cz AdGuard Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/pt-BR.json b/homeassistant/components/adguard/translations/pt-BR.json new file mode 100644 index 00000000000..605085af1f1 --- /dev/null +++ b/homeassistant/components/adguard/translations/pt-BR.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "existing_instance_updated": "Configura\u00e7\u00e3o existente atualizada.", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do AdGuard Home \u00e9 permitida." + }, + "error": { + "connection_error": "Falhou ao conectar." + }, + "step": { + "hassio_confirm": { + "description": "Deseja configurar o Home Assistant para se conectar ao AdGuard Home fornecido pelo complemento Hass.io: {addon} ?", + "title": "AdGuard Home via add-on Hass.io" + }, + "user": { + "data": { + "host": "Host", + "password": "Senha", + "port": "Porta", + "ssl": "O AdGuard Home usa um certificado SSL", + "username": "Nome de usu\u00e1rio", + "verify_ssl": "O AdGuard Home usa um certificado apropriado" + }, + "description": "Configure sua inst\u00e2ncia do AdGuard Home para permitir o monitoramento e o controle.", + "title": "Vincule o seu AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/pt.json b/homeassistant/components/adguard/translations/pt.json similarity index 100% rename from homeassistant/components/adguard/.translations/pt.json rename to homeassistant/components/adguard/translations/pt.json diff --git a/homeassistant/components/adguard/translations/ru.json b/homeassistant/components/adguard/translations/ru.json new file mode 100644 index 00000000000..8c83b8c024c --- /dev/null +++ b/homeassistant/components/adguard/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "\u042d\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 AdGuard Home \u0432\u0435\u0440\u0441\u0438\u0438 {current_version}. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f {minimal_version}, \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u0430\u044f. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 Hass.io.", + "adguard_home_outdated": "\u042d\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 AdGuard Home \u0432\u0435\u0440\u0441\u0438\u0438 {current_version}. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e {minimal_version} \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u0443\u044e.", + "existing_instance_updated": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f." + }, + "step": { + "hassio_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a AdGuard Home (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", + "title": "AdGuard Home (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" + }, + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "ssl": "AdGuard Home \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 SSL", + "username": "\u041b\u043e\u0433\u0438\u043d", + "verify_ssl": "AdGuard Home \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f AdGuard Home.", + "title": "AdGuard Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/sl.json b/homeassistant/components/adguard/translations/sl.json new file mode 100644 index 00000000000..7cad7c1ac3a --- /dev/null +++ b/homeassistant/components/adguard/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Za to integracijo je potrebna AdGuard Home {minimal_version} ali vi\u0161ja, vi imate {current_version}. Prosimo posodobite va\u0161 hass.io AdGuard Home dodatek.", + "adguard_home_outdated": "Za to integracijo je potrebna AdGuard Home {minimal_version} ali vi\u0161ja, vi imate {current_version}.", + "existing_instance_updated": "Posodobljena obstoje\u010da konfiguracija.", + "single_instance_allowed": "Dovoljena je samo ena konfiguracija AdGuard Home." + }, + "error": { + "connection_error": "Povezava ni uspela." + }, + "step": { + "hassio_confirm": { + "description": "\u017delite konfigurirati Home Assistant-a za povezavo z AdGuard Home, ki ga ponuja Hass.io add-on {addon} ?", + "title": "AdGuard Home preko dodatka Hass.io" + }, + "user": { + "data": { + "host": "Gostitelj", + "password": "Geslo", + "port": "Vrata", + "ssl": "AdGuard Home uporablja SSL certifikat", + "username": "Uporabni\u0161ko ime", + "verify_ssl": "AdGuard Home uporablja ustrezen certifikat" + }, + "description": "Nastavite primerek AdGuard Home, da omogo\u010dite spremljanje in nadzor.", + "title": "Pove\u017eite svoj AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/translations/sv.json b/homeassistant/components/adguard/translations/sv.json new file mode 100644 index 00000000000..8ae4a5481d2 --- /dev/null +++ b/homeassistant/components/adguard/translations/sv.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "Den h\u00e4r integrationen kr\u00e4ver AdGuard Home {minimal_version} eller senare, du har {current_version}. Uppdatera ditt Hass.io AdGuard Home-till\u00e4gg.", + "adguard_home_outdated": "Den h\u00e4r integrationen kr\u00e4ver AdGuard Home {minimal_version} eller senare, du har {current_version}.", + "existing_instance_updated": "Uppdaterade existerande konfiguration.", + "single_instance_allowed": "Endast en enda konfiguration av AdGuard Home \u00e4r till\u00e5ten." + }, + "error": { + "connection_error": "Det gick inte att ansluta." + }, + "step": { + "hassio_confirm": { + "description": "Vill du konfigurera Home Assistant f\u00f6r att ansluta till AdGuard Home som tillhandah\u00e5lls av Hass.io Add-on: {addon}?", + "title": "AdGuard Home via Hass.io-till\u00e4gget" + }, + "user": { + "data": { + "host": "V\u00e4rd", + "password": "L\u00f6senord", + "port": "Port", + "ssl": "AdGuard Home anv\u00e4nder ett SSL-certifikat", + "username": "Anv\u00e4ndarnamn", + "verify_ssl": "AdGuard Home anv\u00e4nder ett korrekt certifikat" + }, + "description": "St\u00e4ll in din AdGuard Home-instans f\u00f6r att till\u00e5ta \u00f6vervakning och kontroll.", + "title": "L\u00e4nka din AdGuard Home." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/adguard/.translations/vi.json b/homeassistant/components/adguard/translations/vi.json similarity index 100% rename from homeassistant/components/adguard/.translations/vi.json rename to homeassistant/components/adguard/translations/vi.json diff --git a/homeassistant/components/adguard/.translations/zh-Hans.json b/homeassistant/components/adguard/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/adguard/.translations/zh-Hans.json rename to homeassistant/components/adguard/translations/zh-Hans.json diff --git a/homeassistant/components/adguard/translations/zh-Hant.json b/homeassistant/components/adguard/translations/zh-Hant.json new file mode 100644 index 00000000000..f3473fd3197 --- /dev/null +++ b/homeassistant/components/adguard/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "adguard_home_addon_outdated": "\u6574\u5408\u9700\u8981 AdGuard Home {minimal_version} \u6216\u66f4\u65b0\u7248\u672c\uff0c\u60a8\u76ee\u524d\u4f7f\u7528\u7248\u672c\u70ba {current_version}\u3002\u8acb\u66f4\u65b0 Hass.io AdGuard Home \u5143\u4ef6\u3002", + "adguard_home_outdated": "\u6574\u5408\u9700\u8981 AdGuard Home {minimal_version} \u6216\u66f4\u65b0\u7248\u672c\uff0c\u60a8\u76ee\u524d\u4f7f\u7528\u7248\u672c\u70ba {current_version}\u3002", + "existing_instance_updated": "\u5df2\u66f4\u65b0\u73fe\u6709\u8a2d\u5b9a\u3002", + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 AdGuard Home\u3002" + }, + "error": { + "connection_error": "\u9023\u7dda\u5931\u6557\u3002" + }, + "step": { + "hassio_confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6\uff1a{addon} \u9023\u7dda\u81f3 AdGuard Home\uff1f", + "title": "\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6 AdGuard Home" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "ssl": "AdGuard Home \u4f7f\u7528 SSL \u8a8d\u8b49", + "username": "\u4f7f\u7528\u8005\u540d\u7a31", + "verify_ssl": "AdGuard Home \u4f7f\u7528\u5c0d\u61c9\u8a8d\u8b49" + }, + "description": "\u8a2d\u5b9a AdGuard Home \u4ee5\u9032\u884c\u76e3\u63a7\u3002", + "title": "\u9023\u7d50 AdGuard Home\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ads/__init__.py b/homeassistant/components/ads/__init__.py index adaaaa08b7f..15d58eb4620 100644 --- a/homeassistant/components/ads/__init__.py +++ b/homeassistant/components/ads/__init__.py @@ -82,9 +82,9 @@ def setup(hass, config): conf = config[DOMAIN] - net_id = conf.get(CONF_DEVICE) + net_id = conf[CONF_DEVICE] ip_address = conf.get(CONF_IP_ADDRESS) - port = conf.get(CONF_PORT) + port = conf[CONF_PORT] client = pyads.Connection(net_id, port, ip_address) diff --git a/homeassistant/components/ads/binary_sensor.py b/homeassistant/components/ads/binary_sensor.py index fd6d77873b5..9e2f7b0cc4a 100644 --- a/homeassistant/components/ads/binary_sensor.py +++ b/homeassistant/components/ads/binary_sensor.py @@ -29,8 +29,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Binary Sensor platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) - ads_var = config.get(CONF_ADS_VAR) - name = config.get(CONF_NAME) + ads_var = config[CONF_ADS_VAR] + name = config[CONF_NAME] device_class = config.get(CONF_DEVICE_CLASS) ads_sensor = AdsBinarySensor(ads_hub, name, ads_var, device_class) diff --git a/homeassistant/components/ads/light.py b/homeassistant/components/ads/light.py index b9626b9e969..384bd2e83a6 100644 --- a/homeassistant/components/ads/light.py +++ b/homeassistant/components/ads/light.py @@ -36,9 +36,9 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the light platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) - ads_var_enable = config.get(CONF_ADS_VAR) + ads_var_enable = config[CONF_ADS_VAR] ads_var_brightness = config.get(CONF_ADS_VAR_BRIGHTNESS) - name = config.get(CONF_NAME) + name = config[CONF_NAME] add_entities([AdsLight(ads_hub, ads_var_enable, ads_var_brightness, name)]) diff --git a/homeassistant/components/ads/manifest.json b/homeassistant/components/ads/manifest.json index 1509402d720..0414dd0e8d9 100644 --- a/homeassistant/components/ads/manifest.json +++ b/homeassistant/components/ads/manifest.json @@ -3,6 +3,5 @@ "name": "ADS", "documentation": "https://www.home-assistant.io/integrations/ads", "requirements": ["pyads==3.0.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ads/sensor.py b/homeassistant/components/ads/sensor.py index 3bdcbfc95f8..134acae3f94 100644 --- a/homeassistant/components/ads/sensor.py +++ b/homeassistant/components/ads/sensor.py @@ -36,9 +36,9 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up an ADS sensor device.""" ads_hub = hass.data.get(ads.DATA_ADS) - ads_var = config.get(CONF_ADS_VAR) - ads_type = config.get(CONF_ADS_TYPE) - name = config.get(CONF_NAME) + ads_var = config[CONF_ADS_VAR] + ads_type = config[CONF_ADS_TYPE] + name = config[CONF_NAME] unit_of_measurement = config.get(CONF_UNIT_OF_MEASUREMENT) factor = config.get(CONF_ADS_FACTOR) diff --git a/homeassistant/components/ads/services.yaml b/homeassistant/components/ads/services.yaml index 81751e768f1..1e7b664b674 100644 --- a/homeassistant/components/ads/services.yaml +++ b/homeassistant/components/ads/services.yaml @@ -6,10 +6,10 @@ write_data_by_name: fields: adsvar: description: The name of the variable to write to. - example: '.global_var' + example: ".global_var" adstype: description: The data type of the variable to write to. - example: 'int' + example: "int" value: description: The value to write to the variable. example: 1 diff --git a/homeassistant/components/ads/switch.py b/homeassistant/components/ads/switch.py index 3590b6af88e..64c797ff309 100644 --- a/homeassistant/components/ads/switch.py +++ b/homeassistant/components/ads/switch.py @@ -14,7 +14,10 @@ _LOGGER = logging.getLogger(__name__) DEFAULT_NAME = "ADS Switch" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Required(CONF_ADS_VAR): cv.string, vol.Optional(CONF_NAME): cv.string} + { + vol.Required(CONF_ADS_VAR): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + } ) @@ -22,8 +25,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up switch platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) - name = config.get(CONF_NAME) - ads_var = config.get(CONF_ADS_VAR) + name = config[CONF_NAME] + ads_var = config[CONF_ADS_VAR] add_entities([AdsSwitch(ads_hub, name, ads_var)]) diff --git a/homeassistant/components/aftership/manifest.json b/homeassistant/components/aftership/manifest.json index 80dc959c136..335befa937b 100644 --- a/homeassistant/components/aftership/manifest.json +++ b/homeassistant/components/aftership/manifest.json @@ -3,6 +3,5 @@ "name": "AfterShip", "documentation": "https://www.home-assistant.io/integrations/aftership", "requirements": ["pyaftership==0.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/aftership/sensor.py b/homeassistant/components/aftership/sensor.py index eb0236cf3be..83ab52499da 100644 --- a/homeassistant/components/aftership/sensor.py +++ b/homeassistant/components/aftership/sensor.py @@ -6,7 +6,7 @@ from pyaftership.tracker import Tracking import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_NAME +from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_NAME, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_send @@ -27,7 +27,7 @@ CONF_TITLE = "title" CONF_TRACKING_NUMBER = "tracking_number" DEFAULT_NAME = "aftership" -UPDATE_TOPIC = DOMAIN + "_update" +UPDATE_TOPIC = f"{DOMAIN}_update" ICON = "mdi:package-variant-closed" @@ -66,7 +66,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= await aftership.get_trackings() - if not aftership.meta or aftership.meta["code"] != 200: + if not aftership.meta or aftership.meta["code"] != HTTP_OK: _LOGGER.error( "No tracking data found. Check API key is correct: %s", aftership.meta ) @@ -145,14 +145,16 @@ class AfterShipSensor(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - UPDATE_TOPIC, self._force_update + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + UPDATE_TOPIC, self._force_update + ) ) async def _force_update(self): """Force update of data.""" await self.async_update(no_throttle=True) - await self.async_update_ha_state() + self.async_write_ha_state() @Throttle(MIN_TIME_BETWEEN_UPDATES) async def async_update(self, **kwargs): @@ -162,7 +164,7 @@ class AfterShipSensor(Entity): if not self.aftership.meta: _LOGGER.error("Unknown errors when querying") return - if self.aftership.meta["code"] != 200: + if self.aftership.meta["code"] != HTTP_OK: _LOGGER.error( "Errors when querying AfterShip. %s", str(self.aftership.meta) ) @@ -189,7 +191,7 @@ class AfterShipSensor(Entity): "name": name, "tracking_number": track["tracking_number"], "slug": track["slug"], - "link": "%s%s/%s" % (BASE, track["slug"], track["tracking_number"]), + "link": f"{BASE}{track['slug']}/{track['tracking_number']}", "last_update": track["updated_at"], "expected_delivery": track["expected_delivery"], "status": track["tag"], diff --git a/homeassistant/components/aftership/services.yaml b/homeassistant/components/aftership/services.yaml index 157156c3252..5ad30d25d8b 100644 --- a/homeassistant/components/aftership/services.yaml +++ b/homeassistant/components/aftership/services.yaml @@ -5,20 +5,20 @@ add_tracking: fields: tracking_number: description: Tracking number for the new tracking - example: '123456789' + example: "123456789" title: description: A custom title for the new tracking - example: 'Laptop' + example: "Laptop" slug: description: Slug (carrier) of the new tracking - example: 'USPS' + example: "USPS" remove_tracking: description: Remove a tracking from Aftership. fields: tracking_number: description: Tracking number of the tracking to remove - example: '123456789' + example: "123456789" slug: description: Slug (carrier) of the tracking to remove - example: 'USPS' + example: "USPS" diff --git a/homeassistant/components/air_quality/__init__.py b/homeassistant/components/air_quality/__init__.py index 29c6756260c..48423d08e69 100644 --- a/homeassistant/components/air_quality/__init__.py +++ b/homeassistant/components/air_quality/__init__.py @@ -2,6 +2,7 @@ from datetime import timedelta import logging +from homeassistant.const import CONCENTRATION_MICROGRAMS_PER_CUBIC_METER from homeassistant.helpers.config_validation import ( # noqa: F401 PLATFORM_SCHEMA, PLATFORM_SCHEMA_BASE, @@ -144,3 +145,8 @@ class AirQualityEntity(Entity): def state(self): """Return the current state.""" return self.particulate_matter_2_5 + + @property + def unit_of_measurement(self): + """Return the unit of measurement of this entity.""" + return CONCENTRATION_MICROGRAMS_PER_CUBIC_METER diff --git a/homeassistant/components/air_quality/manifest.json b/homeassistant/components/air_quality/manifest.json index 4c36cc0dd22..c7086bb2e8f 100644 --- a/homeassistant/components/air_quality/manifest.json +++ b/homeassistant/components/air_quality/manifest.json @@ -2,7 +2,5 @@ "domain": "air_quality", "name": "Air Quality", "documentation": "https://www.home-assistant.io/integrations/air_quality", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/airly/.translations/bg.json b/homeassistant/components/airly/.translations/bg.json deleted file mode 100644 index e09d9c0d62f..00000000000 --- a/homeassistant/components/airly/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "auth": "API \u043a\u043b\u044e\u0447\u044a\u0442 \u043d\u0435 \u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d.", - "wrong_location": "\u0412 \u0442\u0430\u0437\u0438 \u043e\u0431\u043b\u0430\u0441\u0442 \u043d\u044f\u043c\u0430 \u0438\u0437\u043c\u0435\u0440\u0432\u0430\u0442\u0435\u043b\u043d\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Airly." - }, - "step": { - "user": { - "data": { - "api_key": "API \u043a\u043b\u044e\u0447 \u0437\u0430 Airly", - "latitude": "\u0428\u0438\u0440\u0438\u043d\u0430", - "longitude": "\u0414\u044a\u043b\u0436\u0438\u043d\u0430", - "name": "\u0418\u043c\u0435 \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0442\u0430" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u0442\u043e \u043d\u0430 \u0432\u044a\u0437\u0434\u0443\u0445\u0430 Airly \u0417\u0430 \u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0442\u0435 \u043a\u043b\u044e\u0447 \u0437\u0430 API, \u043e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/ca.json b/homeassistant/components/airly/.translations/ca.json deleted file mode 100644 index 00ef4c7180e..00000000000 --- a/homeassistant/components/airly/.translations/ca.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ja est\u00e0 configurada un integraci\u00f3 Airly amb aquestes coordenades." - }, - "error": { - "auth": "La clau API no \u00e9s correcta.", - "wrong_location": "No hi ha estacions de mesura Airly en aquesta zona." - }, - "step": { - "user": { - "data": { - "api_key": "Clau API d'Airly", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nom de la integraci\u00f3" - }, - "description": "Configura una integraci\u00f3 de qualitat d\u2019aire Airly. Per generar la clau API, v\u00e9s a https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/da.json b/homeassistant/components/airly/.translations/da.json deleted file mode 100644 index b33e9b18da8..00000000000 --- a/homeassistant/components/airly/.translations/da.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly-integration for disse koordinater er allerede konfigureret." - }, - "error": { - "auth": "API-n\u00f8glen er ikke korrekt.", - "wrong_location": "Ingen Airly-m\u00e5lestationer i dette omr\u00e5de." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API-n\u00f8gle", - "latitude": "Breddegrad", - "longitude": "L\u00e6ngdegrad", - "name": "Integrationens navn" - }, - "description": "Konfigurer Airly luftkvalitetsintegration. For at generere API-n\u00f8gle, g\u00e5 til https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/de.json b/homeassistant/components/airly/.translations/de.json deleted file mode 100644 index 727b67e3245..00000000000 --- a/homeassistant/components/airly/.translations/de.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Die Airly-Integration ist f\u00fcr diese Koordinaten bereits konfiguriert." - }, - "error": { - "auth": "Der API-Schl\u00fcssel ist nicht korrekt.", - "wrong_location": "Keine Airly Luftmessstation an diesem Ort" - }, - "step": { - "user": { - "data": { - "api_key": "Airly API-Schl\u00fcssel", - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad", - "name": "Name der Integration" - }, - "description": "Einrichtung der Airly-Luftqualit\u00e4t Integration. Um einen API-Schl\u00fcssel zu generieren, registriere dich auf https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/en.json b/homeassistant/components/airly/.translations/en.json deleted file mode 100644 index ef485ec610f..00000000000 --- a/homeassistant/components/airly/.translations/en.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly integration for these coordinates is already configured." - }, - "error": { - "auth": "API key is not correct.", - "wrong_location": "No Airly measuring stations in this area." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API key", - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Name of the integration" - }, - "description": "Set up Airly air quality integration. To generate API key go to https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/es-419.json b/homeassistant/components/airly/.translations/es-419.json deleted file mode 100644 index 41f7e29b408..00000000000 --- a/homeassistant/components/airly/.translations/es-419.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "auth": "La clave API no es correcta.", - "wrong_location": "No hay estaciones de medici\u00f3n Airly en esta \u00e1rea." - }, - "step": { - "user": { - "data": { - "api_key": "Clave API de Airly", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre de la integraci\u00f3n" - }, - "description": "Configure la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave API, vaya a https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/es.json b/homeassistant/components/airly/.translations/es.json deleted file mode 100644 index b364a45c344..00000000000 --- a/homeassistant/components/airly/.translations/es.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La integraci\u00f3n a\u00e9rea para estas coordenadas ya est\u00e1 configurada." - }, - "error": { - "auth": "La clave de la API no es correcta.", - "wrong_location": "No hay estaciones de medici\u00f3n Airly en esta zona." - }, - "step": { - "user": { - "data": { - "api_key": "Clave API de Airly", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre de la integraci\u00f3n" - }, - "description": "Establecer la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave de la API vaya a https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/fr.json b/homeassistant/components/airly/.translations/fr.json deleted file mode 100644 index b11493e337f..00000000000 --- a/homeassistant/components/airly/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'int\u00e9gration des coordonn\u00e9es d'Airly est d\u00e9j\u00e0 configur\u00e9." - }, - "error": { - "auth": "La cl\u00e9 API n'est pas correcte.", - "wrong_location": "Aucune station de mesure Airly dans cette zone." - }, - "step": { - "user": { - "data": { - "api_key": "Cl\u00e9 API Airly", - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nom de l'int\u00e9gration" - }, - "description": "Configurez l'int\u00e9gration de la qualit\u00e9 de l'air Airly. Pour g\u00e9n\u00e9rer une cl\u00e9 API, rendez-vous sur https://developer.airly.eu/register.", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/hu.json b/homeassistant/components/airly/.translations/hu.json deleted file mode 100644 index ae3990c31ce..00000000000 --- a/homeassistant/components/airly/.translations/hu.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ezen koordin\u00e1t\u00e1k Airly integr\u00e1ci\u00f3ja m\u00e1r konfigur\u00e1lva van." - }, - "error": { - "auth": "Az API kulcs nem megfelel\u0151.", - "wrong_location": "Ezen a ter\u00fcleten nincs Airly m\u00e9r\u0151\u00e1llom\u00e1s." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API kulcs", - "latitude": "Sz\u00e9less\u00e9g", - "longitude": "Hossz\u00fas\u00e1g", - "name": "Az integr\u00e1ci\u00f3 neve" - }, - "description": "Az Airly leveg\u0151min\u0151s\u00e9gi integr\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa. Api-kulcs l\u00e9trehoz\u00e1s\u00e1hoz nyissa meg a k\u00f6vetkez\u0151 weboldalt: https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/it.json b/homeassistant/components/airly/.translations/it.json deleted file mode 100644 index 0453d397bc4..00000000000 --- a/homeassistant/components/airly/.translations/it.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'integrazione Airly per queste coordinate \u00e8 gi\u00e0 configurata." - }, - "error": { - "auth": "La chiave API non \u00e8 corretta.", - "wrong_location": "Nessuna stazione di misurazione Airly in quest'area." - }, - "step": { - "user": { - "data": { - "api_key": "Chiave API Airly", - "latitude": "Latitudine", - "longitude": "Logitudine", - "name": "Nome dell'integrazione" - }, - "description": "Configurazione dell'integrazione della qualit\u00e0 dell'aria Airly. Per generare la chiave API andare su https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/ko.json b/homeassistant/components/airly/.translations/ko.json deleted file mode 100644 index 75b9bcfc1c4..00000000000 --- a/homeassistant/components/airly/.translations/ko.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc88c\ud45c\uc5d0 \ub300\ud55c Airly \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "auth": "API \ud0a4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", - "wrong_location": "\uc774 \uc9c0\uc5ed\uc5d0\ub294 Airly \uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc774 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API \ud0a4", - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4", - "name": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc758 \uc774\ub984" - }, - "description": "Airly \uacf5\uae30 \ud488\uc9c8 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. API \ud0a4\ub97c \uc0dd\uc131\ud558\ub824\uba74 https://developer.airly.eu/register \ub85c \uc774\ub3d9\ud574\uc8fc\uc138\uc694", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/lb.json b/homeassistant/components/airly/.translations/lb.json deleted file mode 100644 index 75c77d9481e..00000000000 --- a/homeassistant/components/airly/.translations/lb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly Integratioun fir d\u00ebs Koordinaten ass scho konfigur\u00e9iert." - }, - "error": { - "auth": "Api Schl\u00ebssel ass net korrekt.", - "wrong_location": "Keng Airly Moos Statioun an d\u00ebsem Ber\u00e4ich" - }, - "step": { - "user": { - "data": { - "api_key": "Airly API Schl\u00ebssel", - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad", - "name": "Numm vun der Installatioun" - }, - "description": "Airly Loft Qualit\u00e9it Integratioun ariichten. Fir een API Schl\u00ebssel z'erstelle gitt op https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/nl.json b/homeassistant/components/airly/.translations/nl.json deleted file mode 100644 index 2e9c97c8232..00000000000 --- a/homeassistant/components/airly/.translations/nl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly-integratie voor deze co\u00f6rdinaten is al geconfigureerd." - }, - "error": { - "auth": "API-sleutel is niet correct.", - "wrong_location": "Geen Airly meetstations in dit gebied." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API-sleutel", - "latitude": "Breedtegraad", - "longitude": "Lengtegraad", - "name": "Naam van de integratie" - }, - "description": "Airly-integratie van luchtkwaliteit instellen. Ga naar https://developer.airly.eu/register om de API-sleutel te genereren", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/nn.json b/homeassistant/components/airly/.translations/nn.json deleted file mode 100644 index 7e2f4f1ff6b..00000000000 --- a/homeassistant/components/airly/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/no.json b/homeassistant/components/airly/.translations/no.json deleted file mode 100644 index 492e1471351..00000000000 --- a/homeassistant/components/airly/.translations/no.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly integrering for disse koordinatene er allerede konfigurert." - }, - "error": { - "auth": "API-n\u00f8kkelen er ikke korrekt.", - "wrong_location": "Ingen Airly m\u00e5lestasjoner i dette omr\u00e5det." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API-n\u00f8kkel", - "latitude": "Breddegrad", - "longitude": "Lengdegrad", - "name": "Navn p\u00e5 integrasjonen" - }, - "description": "Sett opp Airly luftkvalitet integrering. For \u00e5 generere API-n\u00f8kkel g\u00e5 til https://developer.airly.eu/register", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/pl.json b/homeassistant/components/airly/.translations/pl.json deleted file mode 100644 index 85918d7c711..00000000000 --- a/homeassistant/components/airly/.translations/pl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integracja Airly dla tych wsp\u00f3\u0142rz\u0119dnych jest ju\u017c skonfigurowana." - }, - "error": { - "auth": "Klucz API jest nieprawid\u0142owy.", - "wrong_location": "Brak stacji pomiarowych Airly w tym rejonie." - }, - "step": { - "user": { - "data": { - "api_key": "Klucz API Airly", - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna", - "name": "Nazwa integracji" - }, - "description": "Konfiguracja integracji Airly. By wygenerowa\u0107 klucz API, przejd\u017a na stron\u0119 https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/pt.json b/homeassistant/components/airly/.translations/pt.json deleted file mode 100644 index d99bcb90733..00000000000 --- a/homeassistant/components/airly/.translations/pt.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude" - }, - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/ru.json b/homeassistant/components/airly/.translations/ru.json deleted file mode 100644 index 7846d8173c4..00000000000 --- a/homeassistant/components/airly/.translations/ru.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Airly \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430." - }, - "error": { - "auth": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API.", - "wrong_location": "\u0412 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0446\u0438\u0439 Airly." - }, - "step": { - "user": { - "data": { - "api_key": "\u041a\u043b\u044e\u0447 API", - "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", - "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "description": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 Airly. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u044e\u0447 API, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https://developer.airly.eu/register.", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/sl.json b/homeassistant/components/airly/.translations/sl.json deleted file mode 100644 index d7797997910..00000000000 --- a/homeassistant/components/airly/.translations/sl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly integracija za te koordinate je \u017ee nastavljen." - }, - "error": { - "auth": "Klju\u010d API ni pravilen.", - "wrong_location": "Na tem obmo\u010dju ni merilnih postaj Airly." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API klju\u010d", - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina", - "name": "Ime integracije" - }, - "description": "Nastavite Airly integracijo za kakovost zraka. \u010ce \u017eelite ustvariti API klju\u010d pojdite na https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/sv.json b/homeassistant/components/airly/.translations/sv.json deleted file mode 100644 index 7c7d10f47dc..00000000000 --- a/homeassistant/components/airly/.translations/sv.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Airly-integrationen f\u00f6r dessa koordinater \u00e4r redan konfigurerad." - }, - "error": { - "auth": "API-nyckeln \u00e4r inte korrekt.", - "wrong_location": "Inga Airly m\u00e4tstationer i detta omr\u00e5de." - }, - "step": { - "user": { - "data": { - "api_key": "Airly API-nyckel", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Integrationens namn" - }, - "description": "Konfigurera integration av luftkvalitet. F\u00f6r att skapa API-nyckel, g\u00e5 till https://developer.airly.eu/register", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/.translations/zh-Hant.json b/homeassistant/components/airly/.translations/zh-Hant.json deleted file mode 100644 index 66934d7a986..00000000000 --- a/homeassistant/components/airly/.translations/zh-Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64 Airly \u6574\u5408\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "auth": "API \u5bc6\u9470\u4e0d\u6b63\u78ba\u3002", - "wrong_location": "\u8a72\u5340\u57df\u6c92\u6709 Arily \u76e3\u6e2c\u7ad9\u3002" - }, - "step": { - "user": { - "data": { - "api_key": "Airly API \u5bc6\u9470", - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6", - "name": "\u6574\u5408\u540d\u7a31" - }, - "description": "\u6b32\u8a2d\u5b9a Airly \u7a7a\u6c23\u54c1\u8cea\u6574\u5408\u3002\u8acb\u81f3 https://developer.airly.eu/register \u7522\u751f API \u5bc6\u9470", - "title": "Airly" - } - }, - "title": "Airly" - } -} \ No newline at end of file diff --git a/homeassistant/components/airly/air_quality.py b/homeassistant/components/airly/air_quality.py index fa42e58e9ad..deeff9af00f 100644 --- a/homeassistant/components/airly/air_quality.py +++ b/homeassistant/components/airly/air_quality.py @@ -128,11 +128,9 @@ class AirlyAirQuality(AirQualityEntity): async def async_added_to_hass(self): """Connect to dispatcher listening for entity data notifications.""" - self.coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Disconnect from update signal.""" - self.coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) async def async_update(self): """Update Airly entity.""" diff --git a/homeassistant/components/airly/manifest.json b/homeassistant/components/airly/manifest.json index 1859f084bf1..e86a187793f 100644 --- a/homeassistant/components/airly/manifest.json +++ b/homeassistant/components/airly/manifest.json @@ -2,7 +2,6 @@ "domain": "airly", "name": "Airly", "documentation": "https://www.home-assistant.io/integrations/airly", - "dependencies": [], "codeowners": ["@bieniu"], "requirements": ["airly==0.0.2"], "config_flow": true diff --git a/homeassistant/components/airly/sensor.py b/homeassistant/components/airly/sensor.py index 0ee9fb3aac5..ec7b8cb3c76 100644 --- a/homeassistant/components/airly/sensor.py +++ b/homeassistant/components/airly/sensor.py @@ -149,11 +149,9 @@ class AirlySensor(Entity): async def async_added_to_hass(self): """Connect to dispatcher listening for entity data notifications.""" - self.coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Disconnect from update signal.""" - self.coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) async def async_update(self): """Update Airly entity.""" diff --git a/homeassistant/components/airly/strings.json b/homeassistant/components/airly/strings.json index d8047265415..794f70901f3 100644 --- a/homeassistant/components/airly/strings.json +++ b/homeassistant/components/airly/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Airly", "step": { "user": { "title": "Airly", diff --git a/homeassistant/components/airly/translations/bg.json b/homeassistant/components/airly/translations/bg.json new file mode 100644 index 00000000000..d4e7dd2ec28 --- /dev/null +++ b/homeassistant/components/airly/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "error": { + "auth": "API \u043a\u043b\u044e\u0447\u044a\u0442 \u043d\u0435 \u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d.", + "wrong_location": "\u0412 \u0442\u0430\u0437\u0438 \u043e\u0431\u043b\u0430\u0441\u0442 \u043d\u044f\u043c\u0430 \u0438\u0437\u043c\u0435\u0440\u0432\u0430\u0442\u0435\u043b\u043d\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Airly." + }, + "step": { + "user": { + "data": { + "api_key": "API \u043a\u043b\u044e\u0447 \u0437\u0430 Airly", + "latitude": "\u0428\u0438\u0440\u0438\u043d\u0430", + "longitude": "\u0414\u044a\u043b\u0436\u0438\u043d\u0430", + "name": "\u0418\u043c\u0435 \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0442\u0430" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u0442\u043e \u043d\u0430 \u0432\u044a\u0437\u0434\u0443\u0445\u0430 Airly \u0417\u0430 \u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0442\u0435 \u043a\u043b\u044e\u0447 \u0437\u0430 API, \u043e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/ca.json b/homeassistant/components/airly/translations/ca.json new file mode 100644 index 00000000000..76e8702e8fc --- /dev/null +++ b/homeassistant/components/airly/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ja est\u00e0 configurada un integraci\u00f3 Airly amb aquestes coordenades." + }, + "error": { + "auth": "La clau API no \u00e9s correcta.", + "wrong_location": "No hi ha estacions de mesura Airly en aquesta zona." + }, + "step": { + "user": { + "data": { + "api_key": "Clau API d'Airly", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nom de la integraci\u00f3" + }, + "description": "Configura una integraci\u00f3 de qualitat d\u2019aire Airly. Per generar la clau API, v\u00e9s a https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/da.json b/homeassistant/components/airly/translations/da.json new file mode 100644 index 00000000000..5eaaeac8cfc --- /dev/null +++ b/homeassistant/components/airly/translations/da.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly-integration for disse koordinater er allerede konfigureret." + }, + "error": { + "auth": "API-n\u00f8glen er ikke korrekt.", + "wrong_location": "Ingen Airly-m\u00e5lestationer i dette omr\u00e5de." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API-n\u00f8gle", + "latitude": "Breddegrad", + "longitude": "L\u00e6ngdegrad", + "name": "Integrationens navn" + }, + "description": "Konfigurer Airly luftkvalitetsintegration. For at generere API-n\u00f8gle, g\u00e5 til https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/de.json b/homeassistant/components/airly/translations/de.json new file mode 100644 index 00000000000..551c5cd294d --- /dev/null +++ b/homeassistant/components/airly/translations/de.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Die Airly-Integration ist f\u00fcr diese Koordinaten bereits konfiguriert." + }, + "error": { + "auth": "Der API-Schl\u00fcssel ist nicht korrekt.", + "wrong_location": "Keine Airly Luftmessstation an diesem Ort" + }, + "step": { + "user": { + "data": { + "api_key": "Airly API-Schl\u00fcssel", + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "name": "Name der Integration" + }, + "description": "Einrichtung der Airly-Luftqualit\u00e4t Integration. Um einen API-Schl\u00fcssel zu generieren, registriere dich auf https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/en.json b/homeassistant/components/airly/translations/en.json new file mode 100644 index 00000000000..ab243699232 --- /dev/null +++ b/homeassistant/components/airly/translations/en.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly integration for these coordinates is already configured." + }, + "error": { + "auth": "API key is not correct.", + "wrong_location": "No Airly measuring stations in this area." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API key", + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Name of the integration" + }, + "description": "Set up Airly air quality integration. To generate API key go to https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/es-419.json b/homeassistant/components/airly/translations/es-419.json new file mode 100644 index 00000000000..43770d1767b --- /dev/null +++ b/homeassistant/components/airly/translations/es-419.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "La integraci\u00f3n a\u00e9rea para estas coordenadas ya est\u00e1 configurada." + }, + "error": { + "auth": "La clave API no es correcta.", + "wrong_location": "No hay estaciones de medici\u00f3n Airly en esta \u00e1rea." + }, + "step": { + "user": { + "data": { + "api_key": "Clave API de Airly", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre de la integraci\u00f3n" + }, + "description": "Configure la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave API, vaya a https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/es.json b/homeassistant/components/airly/translations/es.json new file mode 100644 index 00000000000..353acfe2fb8 --- /dev/null +++ b/homeassistant/components/airly/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "La integraci\u00f3n a\u00e9rea para estas coordenadas ya est\u00e1 configurada." + }, + "error": { + "auth": "La clave de la API no es correcta.", + "wrong_location": "No hay estaciones de medici\u00f3n Airly en esta zona." + }, + "step": { + "user": { + "data": { + "api_key": "Clave API de Airly", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre de la integraci\u00f3n" + }, + "description": "Establecer la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave de la API vaya a https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/fr.json b/homeassistant/components/airly/translations/fr.json new file mode 100644 index 00000000000..a454a38fbe6 --- /dev/null +++ b/homeassistant/components/airly/translations/fr.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "L'int\u00e9gration des coordonn\u00e9es d'Airly est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "auth": "La cl\u00e9 API n'est pas correcte.", + "wrong_location": "Aucune station de mesure Airly dans cette zone." + }, + "step": { + "user": { + "data": { + "api_key": "Cl\u00e9 API Airly", + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nom de l'int\u00e9gration" + }, + "description": "Configurez l'int\u00e9gration de la qualit\u00e9 de l'air Airly. Pour g\u00e9n\u00e9rer une cl\u00e9 API, rendez-vous sur https://developer.airly.eu/register.", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/hu.json b/homeassistant/components/airly/translations/hu.json new file mode 100644 index 00000000000..f91b2de241f --- /dev/null +++ b/homeassistant/components/airly/translations/hu.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ezen koordin\u00e1t\u00e1k Airly integr\u00e1ci\u00f3ja m\u00e1r konfigur\u00e1lva van." + }, + "error": { + "auth": "Az API kulcs nem megfelel\u0151.", + "wrong_location": "Ezen a ter\u00fcleten nincs Airly m\u00e9r\u0151\u00e1llom\u00e1s." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API kulcs", + "latitude": "Sz\u00e9less\u00e9g", + "longitude": "Hossz\u00fas\u00e1g", + "name": "Az integr\u00e1ci\u00f3 neve" + }, + "description": "Az Airly leveg\u0151min\u0151s\u00e9gi integr\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa. Api-kulcs l\u00e9trehoz\u00e1s\u00e1hoz nyissa meg a k\u00f6vetkez\u0151 weboldalt: https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/it.json b/homeassistant/components/airly/translations/it.json new file mode 100644 index 00000000000..c42af14f030 --- /dev/null +++ b/homeassistant/components/airly/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "L'integrazione Airly per queste coordinate \u00e8 gi\u00e0 configurata." + }, + "error": { + "auth": "La chiave API non \u00e8 corretta.", + "wrong_location": "Nessuna stazione di misurazione Airly in quest'area." + }, + "step": { + "user": { + "data": { + "api_key": "Chiave API Airly", + "latitude": "Latitudine", + "longitude": "Logitudine", + "name": "Nome dell'integrazione" + }, + "description": "Configurazione dell'integrazione della qualit\u00e0 dell'aria Airly. Per generare la chiave API andare su https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/ko.json b/homeassistant/components/airly/translations/ko.json new file mode 100644 index 00000000000..5283797eb79 --- /dev/null +++ b/homeassistant/components/airly/translations/ko.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc88c\ud45c\uc5d0 \ub300\ud55c Airly \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "auth": "API \ud0a4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "wrong_location": "\uc774 \uc9c0\uc5ed\uc5d0\ub294 Airly \uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc774 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API \ud0a4", + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "name": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc758 \uc774\ub984" + }, + "description": "Airly \uacf5\uae30 \ud488\uc9c8 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. API \ud0a4\ub97c \uc0dd\uc131\ud558\ub824\uba74 https://developer.airly.eu/register \ub85c \uc774\ub3d9\ud574\uc8fc\uc138\uc694", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/lb.json b/homeassistant/components/airly/translations/lb.json new file mode 100644 index 00000000000..9a935079d99 --- /dev/null +++ b/homeassistant/components/airly/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly Integratioun fir d\u00ebs Koordinaten ass scho konfigur\u00e9iert." + }, + "error": { + "auth": "Api Schl\u00ebssel ass net korrekt.", + "wrong_location": "Keng Airly Moos Statioun an d\u00ebsem Ber\u00e4ich" + }, + "step": { + "user": { + "data": { + "api_key": "Airly API Schl\u00ebssel", + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad", + "name": "Numm vun der Installatioun" + }, + "description": "Airly Loft Qualit\u00e9it Integratioun ariichten. Fir een API Schl\u00ebssel z'erstelle gitt op https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/nl.json b/homeassistant/components/airly/translations/nl.json new file mode 100644 index 00000000000..f8edf64daa2 --- /dev/null +++ b/homeassistant/components/airly/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly-integratie voor deze co\u00f6rdinaten is al geconfigureerd." + }, + "error": { + "auth": "API-sleutel is niet correct.", + "wrong_location": "Geen Airly meetstations in dit gebied." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API-sleutel", + "latitude": "Breedtegraad", + "longitude": "Lengtegraad", + "name": "Naam van de integratie" + }, + "description": "Airly-integratie van luchtkwaliteit instellen. Ga naar https://developer.airly.eu/register om de API-sleutel te genereren", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/nn.json b/homeassistant/components/airly/translations/nn.json new file mode 100644 index 00000000000..9cf2b5d70fb --- /dev/null +++ b/homeassistant/components/airly/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/no.json b/homeassistant/components/airly/translations/no.json new file mode 100644 index 00000000000..965b12ef1fe --- /dev/null +++ b/homeassistant/components/airly/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly integrering for disse koordinatene er allerede konfigurert." + }, + "error": { + "auth": "API-n\u00f8kkelen er ikke korrekt.", + "wrong_location": "Ingen Airly m\u00e5lestasjoner i dette omr\u00e5det." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API-n\u00f8kkel", + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "name": "Navn p\u00e5 integrasjonen" + }, + "description": "Sett opp Airly luftkvalitet integrering. For \u00e5 generere API-n\u00f8kkel g\u00e5 til https://developer.airly.eu/register", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/pl.json b/homeassistant/components/airly/translations/pl.json new file mode 100644 index 00000000000..3cc43883308 --- /dev/null +++ b/homeassistant/components/airly/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Integracja Airly dla tych wsp\u00f3\u0142rz\u0119dnych jest ju\u017c skonfigurowana." + }, + "error": { + "auth": "Klucz API jest nieprawid\u0142owy.", + "wrong_location": "Brak stacji pomiarowych Airly w tym rejonie." + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API Airly", + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "name": "Nazwa integracji" + }, + "description": "Konfiguracja integracji Airly. By wygenerowa\u0107 klucz API, przejd\u017a na stron\u0119 https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/pt.json b/homeassistant/components/airly/translations/pt.json new file mode 100644 index 00000000000..971b4653be3 --- /dev/null +++ b/homeassistant/components/airly/translations/pt.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude" + }, + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/ru.json b/homeassistant/components/airly/translations/ru.json new file mode 100644 index 00000000000..9b3a62331db --- /dev/null +++ b/homeassistant/components/airly/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Airly \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430." + }, + "error": { + "auth": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API.", + "wrong_location": "\u0412 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0446\u0438\u0439 Airly." + }, + "step": { + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API", + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 Airly. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u044e\u0447 API, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https://developer.airly.eu/register.", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/sl.json b/homeassistant/components/airly/translations/sl.json new file mode 100644 index 00000000000..9fe84c532d1 --- /dev/null +++ b/homeassistant/components/airly/translations/sl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly integracija za te koordinate je \u017ee nastavljen." + }, + "error": { + "auth": "Klju\u010d API ni pravilen.", + "wrong_location": "Na tem obmo\u010dju ni merilnih postaj Airly." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API klju\u010d", + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina", + "name": "Ime integracije" + }, + "description": "Nastavite Airly integracijo za kakovost zraka. \u010ce \u017eelite ustvariti API klju\u010d pojdite na https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/sv.json b/homeassistant/components/airly/translations/sv.json new file mode 100644 index 00000000000..4a79f9cefe9 --- /dev/null +++ b/homeassistant/components/airly/translations/sv.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Airly-integrationen f\u00f6r dessa koordinater \u00e4r redan konfigurerad." + }, + "error": { + "auth": "API-nyckeln \u00e4r inte korrekt.", + "wrong_location": "Inga Airly m\u00e4tstationer i detta omr\u00e5de." + }, + "step": { + "user": { + "data": { + "api_key": "Airly API-nyckel", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Integrationens namn" + }, + "description": "Konfigurera integration av luftkvalitet. F\u00f6r att skapa API-nyckel, g\u00e5 till https://developer.airly.eu/register", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airly/translations/zh-Hant.json b/homeassistant/components/airly/translations/zh-Hant.json new file mode 100644 index 00000000000..d594922cd8f --- /dev/null +++ b/homeassistant/components/airly/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64 Airly \u6574\u5408\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "auth": "API \u5bc6\u9470\u4e0d\u6b63\u78ba\u3002", + "wrong_location": "\u8a72\u5340\u57df\u6c92\u6709 Arily \u76e3\u6e2c\u7ad9\u3002" + }, + "step": { + "user": { + "data": { + "api_key": "Airly API \u5bc6\u9470", + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "name": "\u6574\u5408\u540d\u7a31" + }, + "description": "\u6b32\u8a2d\u5b9a Airly \u7a7a\u6c23\u54c1\u8cea\u6574\u5408\u3002\u8acb\u81f3 https://developer.airly.eu/register \u7522\u751f API \u5bc6\u9470", + "title": "Airly" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/ca.json b/homeassistant/components/airvisual/.translations/ca.json deleted file mode 100644 index 070eeee8b51..00000000000 --- a/homeassistant/components/airvisual/.translations/ca.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta clau API ja est\u00e0 sent utilitzada." - }, - "error": { - "invalid_api_key": "Clau API inv\u00e0lida" - }, - "step": { - "user": { - "data": { - "api_key": "Clau API", - "latitude": "Latitud", - "longitude": "Longitud" - }, - "description": "Monitoritzaci\u00f3 de la qualitat de l'aire per ubicaci\u00f3 geogr\u00e0fica.", - "title": "Configura AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Mostra al mapa l'\u00e0rea geogr\u00e0fica monitoritzada" - }, - "description": "Estableix les diferents opcions de la integraci\u00f3 AirVisual.", - "title": "Configuraci\u00f3 d'AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/de.json b/homeassistant/components/airvisual/.translations/de.json deleted file mode 100644 index 02f25900428..00000000000 --- a/homeassistant/components/airvisual/.translations/de.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Diese Koordinaten wurden bereits registriert." - }, - "error": { - "invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel" - }, - "step": { - "user": { - "data": { - "api_key": "API-Schl\u00fcssel", - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad" - }, - "description": "\u00dcberwachen Sie die Luftqualit\u00e4t an einem geografischen Ort.", - "title": "Konfigurieren Sie AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Zeigen Sie die \u00fcberwachte Geografie auf der Karte an" - }, - "description": "Legen Sie verschiedene Optionen f\u00fcr die AirVisual-Integration fest.", - "title": "Konfigurieren Sie AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/en.json b/homeassistant/components/airvisual/.translations/en.json deleted file mode 100644 index 30d501f1af6..00000000000 --- a/homeassistant/components/airvisual/.translations/en.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "These coordinates have already been registered." - }, - "error": { - "invalid_api_key": "Invalid API key" - }, - "step": { - "user": { - "data": { - "api_key": "API Key", - "latitude": "Latitude", - "longitude": "Longitude" - }, - "description": "Monitor air quality in a geographical location.", - "title": "Configure AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Show monitored geography on the map" - }, - "description": "Set various options for the AirVisual integration.", - "title": "Configure AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/es.json b/homeassistant/components/airvisual/.translations/es.json deleted file mode 100644 index 752593ce29d..00000000000 --- a/homeassistant/components/airvisual/.translations/es.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta clave API ya est\u00e1 en uso." - }, - "error": { - "invalid_api_key": "Clave API inv\u00e1lida" - }, - "step": { - "user": { - "data": { - "api_key": "Clave API", - "latitude": "Latitud", - "longitude": "Longitud" - }, - "description": "Monitorizar la calidad del aire en una ubicaci\u00f3n geogr\u00e1fica.", - "title": "Configurar AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Mostrar geograf\u00eda monitorizada en el mapa" - }, - "description": "Ajustar varias opciones para la integraci\u00f3n de AirVisual.", - "title": "Configurar AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/fr.json b/homeassistant/components/airvisual/.translations/fr.json deleted file mode 100644 index 6ee4377db95..00000000000 --- a/homeassistant/components/airvisual/.translations/fr.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cette cl\u00e9 API est d\u00e9j\u00e0 utilis\u00e9e." - }, - "error": { - "invalid_api_key": "Cl\u00e9 API invalide" - }, - "step": { - "user": { - "data": { - "api_key": "Cl\u00e9 API", - "latitude": "Latitude", - "longitude": "Longitude" - }, - "description": "Surveiller la qualit\u00e9 de l\u2019air dans un emplacement g\u00e9ographique.", - "title": "Configurer AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "description": "D\u00e9finissez diverses options pour l'int\u00e9gration d'AirVisual.", - "title": "Configurer AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/it.json b/homeassistant/components/airvisual/.translations/it.json deleted file mode 100644 index 762c99ec4d7..00000000000 --- a/homeassistant/components/airvisual/.translations/it.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Queste coordinate sono gi\u00e0 state registrate." - }, - "error": { - "invalid_api_key": "Chiave API non valida" - }, - "step": { - "user": { - "data": { - "api_key": "Chiave API", - "latitude": "Latitudine", - "longitude": "Logitudine" - }, - "description": "Monitorare la qualit\u00e0 dell'aria in una posizione geografica.", - "title": "Configura AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Mostra l'area geografica monitorata sulla mappa" - }, - "description": "Impostare varie opzioni per l'integrazione AirVisual.", - "title": "Configurare AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/ko.json b/homeassistant/components/airvisual/.translations/ko.json deleted file mode 100644 index 4e1511b2d2d..00000000000 --- a/homeassistant/components/airvisual/.translations/ko.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc88c\ud45c\uac12\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "invalid_api_key": "\uc798\ubabb\ub41c API \ud0a4" - }, - "step": { - "user": { - "data": { - "api_key": "API \ud0a4", - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4" - }, - "description": "\uc9c0\ub9ac\uc801 \uc704\uce58\uc5d0\uc11c \ub300\uae30\uc9c8\uc744 \ubaa8\ub2c8\ud130\ub9c1\ud569\ub2c8\ub2e4.", - "title": "AirVisual \uad6c\uc131" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "\uc9c0\ub3c4\uc5d0 \ubaa8\ub2c8\ud130\ub9c1\ub41c \uc9c0\ub9ac \uc815\ubcf4 \ud45c\uc2dc" - }, - "description": "AirVisual \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \uc635\uc158\uc744 \uc124\uc815\ud574\uc8fc\uc138\uc694.", - "title": "AirVisual \uad6c\uc131" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/lb.json b/homeassistant/components/airvisual/.translations/lb.json deleted file mode 100644 index a7f20253ef1..00000000000 --- a/homeassistant/components/airvisual/.translations/lb.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebs Koordinate si schon registr\u00e9iert." - }, - "error": { - "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel" - }, - "step": { - "user": { - "data": { - "api_key": "API Schl\u00ebssel", - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad" - }, - "description": "Loft Qualit\u00e9it an enger geografescher Lag iwwerwaachen.", - "title": "AirVisual konfigur\u00e9ieren" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Iwwerwaachte Geografie op der Kaart uweisen" - }, - "description": "Verschidden Optioune fir d'AirVisual Integratioun d\u00e9fin\u00e9ieren.", - "title": "Airvisual ariichten" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/no.json b/homeassistant/components/airvisual/.translations/no.json deleted file mode 100644 index 2a2a1fcd07c..00000000000 --- a/homeassistant/components/airvisual/.translations/no.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Disse koordinatene er allerede registrert." - }, - "error": { - "invalid_api_key": "Ugyldig API-n\u00f8kkel" - }, - "step": { - "user": { - "data": { - "api_key": "API-n\u00f8kkel", - "latitude": "Breddegrad", - "longitude": "Lengdegrad" - }, - "description": "Overv\u00e5k luftkvaliteten p\u00e5 et geografisk sted.", - "title": "Konfigurer AirVisual" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Vis overv\u00e5ket geografi p\u00e5 kartet" - }, - "description": "Angi forskjellige alternativer for AirVisual-integrasjonen.", - "title": "Konfigurer AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/pl.json b/homeassistant/components/airvisual/.translations/pl.json deleted file mode 100644 index 99c74c3e5cd..00000000000 --- a/homeassistant/components/airvisual/.translations/pl.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ten klucz API jest ju\u017c w u\u017cyciu." - }, - "error": { - "invalid_api_key": "Nieprawid\u0142owy klucz API" - }, - "step": { - "user": { - "data": { - "api_key": "Klucz API", - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna" - }, - "description": "Monitoruj jako\u015b\u0107 powietrza w okre\u015blonej lokalizacji geograficznej.", - "title": "Konfiguracja AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Wy\u015bwietlaj encje na mapie" - }, - "description": "Konfiguracja opcji integracji AirVisual.", - "title": "Konfiguracja AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/ru.json b/homeassistant/components/airvisual/.translations/ru.json deleted file mode 100644 index e8682a0188a..00000000000 --- a/homeassistant/components/airvisual/.translations/ru.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "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." - }, - "error": { - "invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API." - }, - "step": { - "user": { - "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.", - "title": "AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 AirVisual.", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/sl.json b/homeassistant/components/airvisual/.translations/sl.json deleted file mode 100644 index 6511c7b6da8..00000000000 --- a/homeassistant/components/airvisual/.translations/sl.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta klju\u010d API je \u017ee v uporabi." - }, - "error": { - "invalid_api_key": "Neveljaven API klju\u010d" - }, - "step": { - "user": { - "data": { - "api_key": "API Klju\u010d", - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina" - }, - "description": "Spremljajte kakovost zraka na zemljepisni lokaciji.", - "title": "Nastavite AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "Prika\u017ei nadzorovano obmo\u010dje na zemljevidu" - }, - "description": "Nastavite razli\u010dne mo\u017enosti za integracijo AirVisual.", - "title": "Nastavite AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/zh-Hant.json b/homeassistant/components/airvisual/.translations/zh-Hant.json deleted file mode 100644 index e40926d4a08..00000000000 --- a/homeassistant/components/airvisual/.translations/zh-Hant.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u4e9b\u5ea7\u6a19\u5df2\u8a3b\u518a\u3002" - }, - "error": { - "invalid_api_key": "API \u5bc6\u78bc\u7121\u6548" - }, - "step": { - "user": { - "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", - "title": "\u8a2d\u5b9a AirVisual" - } - }, - "title": "AirVisual" - }, - "options": { - "step": { - "init": { - "data": { - "show_on_map": "\u65bc\u5730\u5716\u4e0a\u986f\u793a\u76e3\u63a7\u4f4d\u7f6e\u3002" - }, - "description": "\u8a2d\u5b9a AirVisual \u6574\u5408\u9078\u9805\u3002", - "title": "\u8a2d\u5b9a AirVisual" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/airvisual/__init__.py b/homeassistant/components/airvisual/__init__.py index e234c2b1c67..4352b15b8a5 100644 --- a/homeassistant/components/airvisual/__init__.py +++ b/homeassistant/components/airvisual/__init__.py @@ -22,6 +22,7 @@ from homeassistant.helpers.event import async_track_time_interval from .const import ( CONF_CITY, CONF_COUNTRY, + CONF_GEOGRAPHIES, DATA_CLIENT, DEFAULT_SCAN_INTERVAL, DOMAIN, @@ -34,8 +35,6 @@ DATA_LISTENER = "listener" DEFAULT_OPTIONS = {CONF_SHOW_ON_MAP: True} -CONF_GEOGRAPHIES = "geographies" - GEOGRAPHY_COORDINATES_SCHEMA = vol.Schema( { vol.Required(CONF_LATITUDE): cv.latitude, @@ -158,8 +157,7 @@ async def async_migrate_entry(hass, config_entry): # Update the config entry to only include the first geography (there is always # guaranteed to be at least one): - data = {**config_entry.data} - geographies = data.pop(CONF_GEOGRAPHIES) + geographies = list(config_entry.data[CONF_GEOGRAPHIES]) first_geography = geographies.pop(0) first_id = async_get_geography_id(first_geography) diff --git a/homeassistant/components/airvisual/config_flow.py b/homeassistant/components/airvisual/config_flow.py index 047f585a4ff..0c9c0e65ff1 100644 --- a/homeassistant/components/airvisual/config_flow.py +++ b/homeassistant/components/airvisual/config_flow.py @@ -16,7 +16,7 @@ from homeassistant.core import callback from homeassistant.helpers import aiohttp_client, config_validation as cv from . import async_get_geography_id -from .const import DOMAIN # pylint: disable=unused-import +from .const import CONF_GEOGRAPHIES, DOMAIN # pylint: disable=unused-import class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): @@ -69,6 +69,18 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): geo_id = async_get_geography_id(user_input) await self._async_set_unique_id(geo_id) + self._abort_if_unique_id_configured() + + # Find older config entries without unique ID + for entry in self._async_current_entries(): + if entry.version != 1: + continue + + if any( + geo_id == async_get_geography_id(geography) + for geography in entry.data[CONF_GEOGRAPHIES] + ): + return self.async_abort(reason="already_configured") websession = aiohttp_client.async_get_clientsession(self.hass) client = Client(websession, api_key=user_input[CONF_API_KEY]) @@ -90,9 +102,10 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) checked_keys.add(user_input[CONF_API_KEY]) - return self.async_create_entry( - title=f"Cloud API ({geo_id})", data=user_input - ) + + return self.async_create_entry( + title=f"Cloud API ({geo_id})", data=user_input + ) class AirVisualOptionsFlowHandler(config_entries.OptionsFlow): diff --git a/homeassistant/components/airvisual/const.py b/homeassistant/components/airvisual/const.py index 3bfc224a735..ab54e191116 100644 --- a/homeassistant/components/airvisual/const.py +++ b/homeassistant/components/airvisual/const.py @@ -5,6 +5,7 @@ DOMAIN = "airvisual" CONF_CITY = "city" CONF_COUNTRY = "country" +CONF_GEOGRAPHIES = "geographies" DATA_CLIENT = "client" diff --git a/homeassistant/components/airvisual/manifest.json b/homeassistant/components/airvisual/manifest.json index 756fb56acc1..d5c7dc6853d 100644 --- a/homeassistant/components/airvisual/manifest.json +++ b/homeassistant/components/airvisual/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/airvisual", "requirements": ["pyairvisual==3.0.1"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/airvisual/sensor.py b/homeassistant/components/airvisual/sensor.py index 49a5f53361f..20e76bf86b6 100644 --- a/homeassistant/components/airvisual/sensor.py +++ b/homeassistant/components/airvisual/sensor.py @@ -95,7 +95,6 @@ class AirVisualSensor(Entity): def __init__(self, airvisual, kind, name, icon, unit, locale, geography_id): """Initialize.""" self._airvisual = airvisual - self._async_unsub_dispatcher_connects = [] self._geography_id = geography_id self._icon = icon self._kind = kind @@ -159,9 +158,7 @@ class AirVisualSensor(Entity): """Update the state.""" self.async_schedule_update_ha_state(True) - self._async_unsub_dispatcher_connects.append( - async_dispatcher_connect(self.hass, TOPIC_UPDATE, update) - ) + self.async_on_remove(async_dispatcher_connect(self.hass, TOPIC_UPDATE, update)) async def async_update(self): """Update the sensor.""" @@ -206,9 +203,3 @@ class AirVisualSensor(Entity): self._attrs["long"] = self._airvisual.geography_data[CONF_LONGITUDE] self._attrs.pop(ATTR_LATITUDE, None) self._attrs.pop(ATTR_LONGITUDE, None) - - async def async_will_remove_from_hass(self) -> None: - """Disconnect dispatcher listener when removed.""" - for cancel in self._async_unsub_dispatcher_connects: - cancel() - self._async_unsub_dispatcher_connects = [] diff --git a/homeassistant/components/airvisual/strings.json b/homeassistant/components/airvisual/strings.json index 8791e6d864d..cd81d1862dd 100644 --- a/homeassistant/components/airvisual/strings.json +++ b/homeassistant/components/airvisual/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "AirVisual", "step": { "user": { "title": "Configure AirVisual", @@ -12,9 +11,7 @@ } } }, - "error": { - "invalid_api_key": "Invalid API key" - }, + "error": { "invalid_api_key": "Invalid API key" }, "abort": { "already_configured": "These coordinates have already been registered." } @@ -24,9 +21,7 @@ "init": { "title": "Configure AirVisual", "description": "Set various options for the AirVisual integration.", - "data": { - "show_on_map": "Show monitored geography on the map" - } + "data": { "show_on_map": "Show monitored geography on the map" } } } } diff --git a/homeassistant/components/airvisual/translations/ca.json b/homeassistant/components/airvisual/translations/ca.json new file mode 100644 index 00000000000..2d9a644c704 --- /dev/null +++ b/homeassistant/components/airvisual/translations/ca.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta clau API ja est\u00e0 sent utilitzada." + }, + "error": { + "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": { + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Mostra al mapa l'\u00e0rea geogr\u00e0fica monitoritzada" + }, + "description": "Estableix les diferents opcions de la integraci\u00f3 AirVisual.", + "title": "Configuraci\u00f3 d'AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/de.json b/homeassistant/components/airvisual/translations/de.json new file mode 100644 index 00000000000..a8b2d296560 --- /dev/null +++ b/homeassistant/components/airvisual/translations/de.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "already_configured": "Diese Koordinaten oder Node/Pro ID sind bereits registriert." + }, + "error": { + "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": { + "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 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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Zeigen Sie die \u00fcberwachte Geografie auf der Karte an" + }, + "description": "Legen Sie verschiedene Optionen f\u00fcr die AirVisual-Integration fest.", + "title": "Konfigurieren Sie AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/en.json b/homeassistant/components/airvisual/translations/en.json new file mode 100644 index 00000000000..a3af2a7031b --- /dev/null +++ b/homeassistant/components/airvisual/translations/en.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "already_configured": "These coordinates have already been registered." + }, + "error": { + "invalid_api_key": "Invalid API key" + }, + "step": { + "user": { + "data": { + "api_key": "API Key", + "latitude": "Latitude", + "longitude": "Longitude" + }, + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Show monitored geography on the map" + }, + "description": "Set various options for the AirVisual integration.", + "title": "Configure AirVisual" + } + } + } +} diff --git a/homeassistant/components/airvisual/translations/es-419.json b/homeassistant/components/airvisual/translations/es-419.json new file mode 100644 index 00000000000..ada76676ca9 --- /dev/null +++ b/homeassistant/components/airvisual/translations/es-419.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Estas coordenadas ya han sido registradas." + }, + "error": { + "invalid_api_key": "Clave de API inv\u00e1lida" + }, + "step": { + "user": { + "data": { + "api_key": "Clave API", + "latitude": "Latitud", + "longitude": "Longitud" + }, + "description": "Monitoree la calidad del aire en una ubicaci\u00f3n geogr\u00e1fica.", + "title": "Configurar AirVisual" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Mostrar geograf\u00eda monitoreada en el mapa" + }, + "description": "Establezca varias opciones para la integraci\u00f3n de AirVisual.", + "title": "Configurar AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/es.json b/homeassistant/components/airvisual/translations/es.json new file mode 100644 index 00000000000..e64b2f31691 --- /dev/null +++ b/homeassistant/components/airvisual/translations/es.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_configured": "Esta clave API ya est\u00e1 en uso." + }, + "error": { + "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": { + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Mostrar geograf\u00eda monitorizada en el mapa" + }, + "description": "Ajustar varias opciones para la integraci\u00f3n de AirVisual.", + "title": "Configurar AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/fr.json b/homeassistant/components/airvisual/translations/fr.json new file mode 100644 index 00000000000..d2013b0f17d --- /dev/null +++ b/homeassistant/components/airvisual/translations/fr.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Cette cl\u00e9 API est d\u00e9j\u00e0 utilis\u00e9e." + }, + "error": { + "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", + "latitude": "Latitude", + "longitude": "Longitude" + }, + "description": "Surveiller la qualit\u00e9 de l\u2019air dans un emplacement g\u00e9ographique.", + "title": "Configurer AirVisual" + } + } + }, + "options": { + "step": { + "init": { + "description": "D\u00e9finissez diverses options pour l'int\u00e9gration d'AirVisual.", + "title": "Configurer AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/hi.json b/homeassistant/components/airvisual/translations/hi.json new file mode 100644 index 00000000000..ff9c8ebe206 --- /dev/null +++ b/homeassistant/components/airvisual/translations/hi.json @@ -0,0 +1,34 @@ +{ + "config": { + "error": { + "general_error": "\u0915\u094b\u0908 \u0905\u091c\u094d\u091e\u093e\u0924 \u0924\u094d\u0930\u0941\u091f\u093f \u0925\u0940\u0964", + "unable_to_connect": "\u0928\u094b\u0921 / \u092a\u094d\u0930\u094b \u0907\u0915\u093e\u0908 \u0938\u0947 \u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0905\u0938\u092e\u0930\u094d\u0925\u0964" + }, + "step": { + "geography": { + "data": { + "api_key": "\u090f\u092a\u0940\u0906\u0908 \u0915\u0941\u0902\u091c\u0940", + "latitude": "\u0905\u0915\u094d\u0937\u093e\u0902\u0936", + "longitude": "\u0926\u0947\u0936\u093e\u0928\u094d\u0924\u0930" + }, + "description": "\u092d\u094c\u0917\u094b\u0932\u093f\u0915 \u0938\u094d\u0925\u093f\u0924\u093f \u0915\u0940 \u0928\u093f\u0917\u0930\u093e\u0928\u0940 \u0915\u0947 \u0932\u093f\u090f \u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0915\u094d\u0932\u093e\u0909\u0921 \u090f\u092a\u0940\u0906\u0908 \u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0915\u0930\u0947\u0902\u0964", + "title": "\u092d\u0942\u0917\u094b\u0932 \u0915\u0949\u0928\u094d\u092b\u093c\u093f\u0917\u0930 \u0915\u0930\u0947\u0902" + }, + "node_pro": { + "data": { + "ip_address": "\u0907\u0915\u093e\u0908 \u0915\u0947 \u0906\u0908\u092a\u0940 \u092a\u0924\u0947/\u0939\u094b\u0938\u094d\u091f\u0928\u093e\u092e", + "password": "\u0907\u0915\u093e\u0908 \u092a\u093e\u0938\u0935\u0930\u094d\u0921" + }, + "description": "\u090f\u0915 \u0935\u094d\u092f\u0915\u094d\u0924\u093f\u0917\u0924 \u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0907\u0915\u093e\u0908 \u0915\u0940 \u0928\u093f\u0917\u0930\u093e\u0928\u0940 \u0915\u0930\u0947\u0902\u0964 \u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u092f\u0942\u0928\u093f\u091f \u0915\u0947 \u092f\u0942\u0906\u0908 \u0938\u0947 \u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0915\u093f\u092f\u093e \u091c\u093e \u0938\u0915\u0924\u093e \u0939\u0948\u0964", + "title": "\u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0928\u094b\u0921 \u092a\u094d\u0930\u094b" + }, + "user": { + "data": { + "cloud_api": "\u092d\u094c\u0917\u094b\u0932\u093f\u0915 \u0938\u094d\u0925\u093f\u0924\u093f", + "node_pro": "\u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0928\u094b\u0921 \u092a\u094d\u0930\u094b", + "type": "\u090f\u0915\u0940\u0915\u0930\u0923 \u092a\u094d\u0930\u0915\u093e\u0930" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/it.json b/homeassistant/components/airvisual/translations/it.json new file mode 100644 index 00000000000..268c82bfccf --- /dev/null +++ b/homeassistant/components/airvisual/translations/it.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Queste coordinate sono gi\u00e0 state registrate." + }, + "error": { + "invalid_api_key": "Chiave API non valida" + }, + "step": { + "user": { + "data": { + "api_key": "Chiave API", + "latitude": "Latitudine", + "longitude": "Logitudine" + }, + "description": "Monitorare la qualit\u00e0 dell'aria in una posizione geografica.", + "title": "Configura AirVisual" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Mostra l'area geografica monitorata sulla mappa" + }, + "description": "Impostare varie opzioni per l'integrazione AirVisual.", + "title": "Configurare AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/ko.json b/homeassistant/components/airvisual/translations/ko.json new file mode 100644 index 00000000000..c28790288ab --- /dev/null +++ b/homeassistant/components/airvisual/translations/ko.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "\uc88c\ud45c\uac12\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "invalid_api_key": "\uc798\ubabb\ub41c API \ud0a4" + }, + "step": { + "user": { + "data": { + "api_key": "API \ud0a4", + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4" + }, + "description": "\uc9c0\ub9ac\uc801 \uc704\uce58\uc5d0\uc11c \ub300\uae30\uc9c8\uc744 \ubaa8\ub2c8\ud130\ub9c1\ud569\ub2c8\ub2e4.", + "title": "AirVisual \uad6c\uc131" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "\uc9c0\ub3c4\uc5d0 \ubaa8\ub2c8\ud130\ub9c1\ub41c \uc9c0\ub9ac \uc815\ubcf4 \ud45c\uc2dc" + }, + "description": "AirVisual \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \uc635\uc158\uc744 \uc124\uc815\ud574\uc8fc\uc138\uc694.", + "title": "AirVisual \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/lb.json b/homeassistant/components/airvisual/translations/lb.json new file mode 100644 index 00000000000..52e55242a05 --- /dev/null +++ b/homeassistant/components/airvisual/translations/lb.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "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 uginn", + "unable_to_connect": "Kann sech net mat der Node/Pri verbannen." + }, + "step": { + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Iwwerwaachte Geografie op der Kaart uweisen" + }, + "description": "Verschidden Optioune fir d'AirVisual Integratioun d\u00e9fin\u00e9ieren.", + "title": "Airvisual ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/no.json b/homeassistant/components/airvisual/translations/no.json new file mode 100644 index 00000000000..a528c98e04c --- /dev/null +++ b/homeassistant/components/airvisual/translations/no.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_configured": "Disse koordinatene eller Node / Pro ID er allerede registrert." + }, + "error": { + "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": { + "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": "Velg hvilken type AirVisual-data du vil overv\u00e5ke.", + "title": "Konfigurer AirVisual" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Vis overv\u00e5ket geografi p\u00e5 kartet" + }, + "description": "Angi forskjellige alternativer for AirVisual-integrasjonen.", + "title": "Konfigurer AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/pl.json b/homeassistant/components/airvisual/translations/pl.json new file mode 100644 index 00000000000..8687a2ead03 --- /dev/null +++ b/homeassistant/components/airvisual/translations/pl.json @@ -0,0 +1,53 @@ +{ + "config": { + "abort": { + "already_configured": "Ten klucz API jest ju\u017c w u\u017cyciu." + }, + "error": { + "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": { + "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.", + "title": "Konfiguracja AirVisual" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Wy\u015bwietlaj encje na mapie" + }, + "description": "Konfiguracja opcji integracji AirVisual.", + "title": "Konfiguracja AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/ru.json b/homeassistant/components/airvisual/translations/ru.json new file mode 100644 index 00000000000..ecc8999fd18 --- /dev/null +++ b/homeassistant/components/airvisual/translations/ru.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "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": { + "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": { + "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": "\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": "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 \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": { + "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": "\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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 AirVisual.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/.translations/sk.json b/homeassistant/components/airvisual/translations/sk.json similarity index 100% rename from homeassistant/components/airvisual/.translations/sk.json rename to homeassistant/components/airvisual/translations/sk.json diff --git a/homeassistant/components/airvisual/translations/sl.json b/homeassistant/components/airvisual/translations/sl.json new file mode 100644 index 00000000000..376da5c3900 --- /dev/null +++ b/homeassistant/components/airvisual/translations/sl.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Te koordinate so \u017ee registrirane." + }, + "error": { + "invalid_api_key": "Neveljaven API klju\u010d" + }, + "step": { + "user": { + "data": { + "api_key": "API Klju\u010d", + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina" + }, + "description": "Spremljajte kakovost zraka na zemljepisni lokaciji.", + "title": "Nastavite AirVisual" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "Prika\u017ei nadzorovano obmo\u010dje na zemljevidu" + }, + "description": "Nastavite razli\u010dne mo\u017enosti za integracijo AirVisual.", + "title": "Nastavite AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/vi.json b/homeassistant/components/airvisual/translations/vi.json new file mode 100644 index 00000000000..6246d8997da --- /dev/null +++ b/homeassistant/components/airvisual/translations/vi.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "type": "Lo\u1ea1i t\u00edch h\u1ee3p" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/airvisual/translations/zh-Hant.json b/homeassistant/components/airvisual/translations/zh-Hant.json new file mode 100644 index 00000000000..1153d7c3b99 --- /dev/null +++ b/homeassistant/components/airvisual/translations/zh-Hant.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u5ea7\u6a19\u6216 Node/Pro ID \u5df2\u8a3b\u518a\u3002" + }, + "error": { + "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": { + "geography": { + "data": { + "api_key": "API \u5bc6\u9470", + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6" + }, + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "show_on_map": "\u65bc\u5730\u5716\u4e0a\u986f\u793a\u76e3\u63a7\u4f4d\u7f6e\u3002" + }, + "description": "\u8a2d\u5b9a AirVisual \u6574\u5408\u9078\u9805\u3002", + "title": "\u8a2d\u5b9a AirVisual" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/aladdin_connect/cover.py b/homeassistant/components/aladdin_connect/cover.py index 351703c5cb3..eaa2dfc85f0 100644 --- a/homeassistant/components/aladdin_connect/cover.py +++ b/homeassistant/components/aladdin_connect/cover.py @@ -42,8 +42,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Aladdin Connect platform.""" - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] acc = AladdinConnectClient(username, password) try: diff --git a/homeassistant/components/aladdin_connect/manifest.json b/homeassistant/components/aladdin_connect/manifest.json index ca38f26ff1f..2eb72f6bd35 100644 --- a/homeassistant/components/aladdin_connect/manifest.json +++ b/homeassistant/components/aladdin_connect/manifest.json @@ -3,6 +3,5 @@ "name": "Aladdin Connect", "documentation": "https://www.home-assistant.io/integrations/aladdin_connect", "requirements": ["aladdin_connect==0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/alarm_control_panel/.translations/bg.json b/homeassistant/components/alarm_control_panel/.translations/bg.json deleted file mode 100644 index a9342c8c477..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "\u0421\u043b\u043e\u0436\u0438 {entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u0441\u044a\u0441\u0442\u0432\u0438\u0435", - "arm_home": "\u0421\u043b\u043e\u0436\u0438 {entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u0432\u043a\u044a\u0449\u0438", - "arm_night": "\u0421\u043b\u043e\u0436\u0438 {entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 \u0432 \u043d\u043e\u0449\u0435\u043d \u0440\u0435\u0436\u0438\u043c", - "disarm": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0439 {entity_name}", - "trigger": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d\u0435 {entity_name}" - }, - "trigger_type": { - "armed_away": "{entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430", - "armed_home": "{entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u0432\u043a\u044a\u0449\u0438", - "armed_night": "{entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u043d\u043e\u0449", - "disarmed": "{entity_name} \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0430", - "triggered": "{entity_name} \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/ca.json b/homeassistant/components/alarm_control_panel/.translations/ca.json deleted file mode 100644 index 5c33ac3c963..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/ca.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Activa {entity_name} fora", - "arm_home": "Activa {entity_name} a casa", - "arm_night": "Activa {entity_name} nocturn", - "disarm": "Desactiva {entity_name}", - "trigger": "Dispara {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} est\u00e0 activada en mode 'a fora'", - "is_armed_home": "{entity_name} est\u00e0 activada en mode 'a casa'", - "is_armed_night": "{entity_name} est\u00e0 activada en mode 'nocturn'", - "is_disarmed": "{entity_name} est\u00e0 desactivada", - "is_triggered": "{entity_name} est\u00e0 disparada" - }, - "trigger_type": { - "armed_away": "{entity_name} activada en mode 'a fora'", - "armed_home": "{entity_name} activada en mode 'a casa'", - "armed_night": "{entity_name} activada en mode 'nocturn'", - "disarmed": "{entity_name} desactivada", - "triggered": "{entity_name} disparat/ada" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/cs.json b/homeassistant/components/alarm_control_panel/.translations/cs.json deleted file mode 100644 index 247a4e96da4..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/cs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Aktivovat {entity_name} v re\u017eimu mimo domov", - "arm_home": "Aktivovat {entity_name} v re\u017eimu doma", - "arm_night": "Aktivovat {entity_name} v re\u017eimu noc", - "disarm": "Deaktivovat {entity_name}", - "trigger": "Spustit {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/da.json b/homeassistant/components/alarm_control_panel/.translations/da.json deleted file mode 100644 index 220034d23e1..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Tilkobl {entity_name} ude", - "arm_home": "Tilkobl {entity_name} hjemme", - "arm_night": "Tilkobl {entity_name} nat", - "disarm": "Frakobl {entity_name}", - "trigger": "Udl\u00f8s {entity_name}" - }, - "trigger_type": { - "armed_away": "{entity_name} tilkoblet ude", - "armed_home": "{entity_name} tilkoblet hjemme", - "armed_night": "{entity_name} tilkoblet nat", - "disarmed": "{entity_name} frakoblet", - "triggered": "{entity_name} udl\u00f8st" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/de.json b/homeassistant/components/alarm_control_panel/.translations/de.json deleted file mode 100644 index 2b319c4a8a6..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/de.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Aktiviere {entity_name} Unterwegs", - "arm_home": "Aktiviere {entity_name} Zuhause", - "arm_night": "Aktiviere {entity_name} Nacht-Modus", - "disarm": "Deaktivere {entity_name}", - "trigger": "Ausl\u00f6ser {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} ist aktiviert - Unterwegs", - "is_armed_home": "{entity_name} ist aktiviert - Zuhause", - "is_armed_night": "{entity_name} ist aktiviert - Nacht", - "is_disarmed": "{entity_name} ist deaktiviert", - "is_triggered": "{entity_name} wurde ausgel\u00f6st" - }, - "trigger_type": { - "armed_away": "{entity_name} Unterwegs", - "armed_home": "{entity_name} Zuhause", - "armed_night": "{entity_name} Nacht-Modus", - "disarmed": "{entity_name} deaktiviert", - "triggered": "{entity_name} ausgel\u00f6st" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/en.json b/homeassistant/components/alarm_control_panel/.translations/en.json deleted file mode 100644 index 85b6be1138c..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/en.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Arm {entity_name} away", - "arm_home": "Arm {entity_name} home", - "arm_night": "Arm {entity_name} night", - "disarm": "Disarm {entity_name}", - "trigger": "Trigger {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} is armed away", - "is_armed_home": "{entity_name} is armed home", - "is_armed_night": "{entity_name} is armed night", - "is_disarmed": "{entity_name} is disarmed", - "is_triggered": "{entity_name} is triggered" - }, - "trigger_type": { - "armed_away": "{entity_name} armed away", - "armed_home": "{entity_name} armed home", - "armed_night": "{entity_name} armed night", - "disarmed": "{entity_name} disarmed", - "triggered": "{entity_name} triggered" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/es.json b/homeassistant/components/alarm_control_panel/.translations/es.json deleted file mode 100644 index 0acc0e5c98c..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/es.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Armar {entity_name} exterior", - "arm_home": "Armar {entity_name} modo casa", - "arm_night": "Armar {entity_name} por la noche", - "disarm": "Desarmar {entity_name}", - "trigger": "Lanzar {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} est\u00e1 armada fuera", - "is_armed_home": "{entity_name} est\u00e1 armada en casa", - "is_armed_night": "{entity_name} est\u00e1 armada noche", - "is_disarmed": "{entity_name} est\u00e1 desarmada", - "is_triggered": "{entity_name} est\u00e1 disparada" - }, - "trigger_type": { - "armed_away": "{entity_name} armado fuera", - "armed_home": "{entity_name} armado en casa", - "armed_night": "{entity_name} armado modo noche", - "disarmed": "{entity_name} desarmado", - "triggered": "{entity_name} activado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/fr.json b/homeassistant/components/alarm_control_panel/.translations/fr.json deleted file mode 100644 index f87f1b79b87..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/fr.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Armer {entity_name} en mode \"sortie\"", - "arm_home": "Armer {entity_name} en mode \"maison\"", - "arm_night": "Armer {entity_name} en mode \"nuit\"", - "disarm": "D\u00e9sarmer {entity_name}", - "trigger": "D\u00e9clencheur {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} est arm\u00e9", - "is_armed_home": "{entity_name} est arm\u00e9 \u00e0 la maison", - "is_armed_night": "{entity_name} est arm\u00e9 la nuit", - "is_disarmed": "{entity_name} est d\u00e9sarm\u00e9", - "is_triggered": "{entity_name} est d\u00e9clench\u00e9" - }, - "trigger_type": { - "armed_away": "Armer {entity_name} en mode \"sortie\"", - "armed_home": "Armer {entity_name} en mode \"maison\"", - "armed_night": "Armer {entity_name} en mode \"nuit\"", - "disarmed": "{entity_name} d\u00e9sarm\u00e9", - "triggered": "{entity_name} d\u00e9clench\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/hu.json b/homeassistant/components/alarm_control_panel/.translations/hu.json deleted file mode 100644 index b249a16c9f1..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "{entity_name} \u00e9les\u00edt\u00e9se t\u00e1voz\u00f3 m\u00f3dban", - "arm_home": "{entity_name} \u00e9les\u00edt\u00e9se otthon marad\u00f3 m\u00f3dban", - "arm_night": "{entity_name} \u00e9les\u00edt\u00e9se \u00e9jszakai m\u00f3dban", - "disarm": "{entity_name} hat\u00e1stalan\u00edt\u00e1sa", - "trigger": "{entity_name} riaszt\u00e1si esem\u00e9ny ind\u00edt\u00e1sa" - }, - "trigger_type": { - "armed_away": "{entity_name} t\u00e1voz\u00f3 m\u00f3dban lett \u00e9les\u00edtve", - "armed_home": "{entity_name} otthon marad\u00f3 m\u00f3dban lett \u00e9les\u00edtve", - "armed_night": "{entity_name} \u00e9jszakai m\u00f3dban lett \u00e9les\u00edtve", - "disarmed": "{entity_name} hat\u00e1stalan\u00edtva lett", - "triggered": "{entity_name} riaszt\u00e1sba ker\u00fclt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/it.json b/homeassistant/components/alarm_control_panel/.translations/it.json deleted file mode 100644 index 0857f0665aa..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/it.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Armare {entity_name} uscito", - "arm_home": "Armare {entity_name} casa", - "arm_night": "Armare {entity_name} notte", - "disarm": "Disarmare {entity_name}", - "trigger": "Attivazione {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} \u00e8 attivo in modalit\u00e0 fuori casa", - "is_armed_home": "{entity_name} \u00e8 attivo in modalit\u00e0 a casa", - "is_armed_night": "{entity_name} \u00e8 attivo in modalit\u00e0 notte", - "is_disarmed": "{entity_name} \u00e8 disattivo", - "is_triggered": "{entity_name} \u00e8 attivato" - }, - "trigger_type": { - "armed_away": "{entity_name} attivato in modalit\u00e0 fuori casa", - "armed_home": "{entity_name} attivato in modalit\u00e0 a casa", - "armed_night": "{entity_name} attivato in modalit\u00e0 notte", - "disarmed": "{entity_name} disattivato", - "triggered": "{entity_name} attivato" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/ko.json b/homeassistant/components/alarm_control_panel/.translations/ko.json deleted file mode 100644 index 321bc442444..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/ko.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "{entity_name} \uc678\ucd9c\uacbd\ube44", - "arm_home": "{entity_name} \uc7ac\uc2e4\uacbd\ube44", - "arm_night": "{entity_name} \uc57c\uac04\uacbd\ube44", - "disarm": "{entity_name} \uacbd\ube44\ud574\uc81c", - "trigger": "{entity_name} \ud2b8\ub9ac\uac70" - }, - "condition_type": { - "is_armed_away": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uacbd\ube44\ubaa8\ub4dc \uc0c1\ud0dc\uc774\uba74", - "is_armed_home": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uacbd\ube44\ubaa8\ub4dc \uc0c1\ud0dc\uc774\uba74", - "is_armed_night": "{entity_name} \uc774(\uac00) \uc57c\uac04 \uacbd\ube44\ubaa8\ub4dc \uc0c1\ud0dc\uc774\uba74", - "is_disarmed": "{entity_name} \uc774(\uac00) \ud574\uc81c \uc0c1\ud0dc\uc774\uba74", - "is_triggered": "{entity_name} \uc774(\uac00) \ud2b8\ub9ac\uac70\ub418\uc5c8\uc73c\uba74" - }, - "trigger_type": { - "armed_away": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uacbd\ube44\ubaa8\ub4dc\ub85c \uc124\uc815\ub420 \ub54c", - "armed_home": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uacbd\ube44\ubaa8\ub4dc\ub85c \uc124\uc815\ub420 \ub54c", - "armed_night": "{entity_name} \uc774(\uac00) \uc57c\uac04 \uacbd\ube44\ubaa8\ub4dc\ub85c \uc124\uc815\ub420 \ub54c", - "disarmed": "{entity_name} \uc774(\uac00) \ud574\uc81c\ub420 \ub54c", - "triggered": "{entity_name} \uc774(\uac00) \ud2b8\ub9ac\uac70\ub420 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/lb.json b/homeassistant/components/alarm_control_panel/.translations/lb.json deleted file mode 100644 index 6c0d32f42ad..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/lb.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "{entity_name} fir \u00ebnnerwee uschalten", - "arm_home": "{entity_name} fir doheem uschalten", - "arm_night": "{entity_name} fir Nuecht uschalten", - "disarm": "{entity_name} entsch\u00e4rfen", - "trigger": "{entity_name} ausl\u00e9isen" - }, - "condition_type": { - "is_armed_away": "{entity_name} ass ugeschalt fir Ennerwee", - "is_armed_home": "{entity_name} ass ugeschalt fir Doheem", - "is_armed_night": "{entity_name} ass ugeschalt fir Nuecht", - "is_disarmed": "{entity_name} ass entsch\u00e4rft", - "is_triggered": "{entity_name} ass ausgel\u00e9ist" - }, - "trigger_type": { - "armed_away": "{entity_name} ugeschalt fir Ennerwee", - "armed_home": "{entity_name} ugeschalt fir Doheem", - "armed_night": "{entity_name} ugeschalt fir Nuecht", - "disarmed": "{entity_name} entsch\u00e4rft", - "triggered": "{entity_name} ausgel\u00e9ist" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/nl.json b/homeassistant/components/alarm_control_panel/.translations/nl.json deleted file mode 100644 index 6f26cc99e21..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Inschakelen {entity_name} afwezig", - "arm_home": "Inschakelen {entity_name} thuis", - "arm_night": "Inschakelen {entity_name} nacht", - "disarm": "Uitschakelen {entity_name}", - "trigger": "Trigger {entity_name}" - }, - "trigger_type": { - "armed_away": "{entity_name} afwezig ingeschakeld", - "armed_home": "{entity_name} thuis ingeschakeld", - "armed_night": "{entity_name} nachtstand ingeschakeld", - "disarmed": "{entity_name} uitgeschakeld", - "triggered": "{entity_name} geactiveerd" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/no.json b/homeassistant/components/alarm_control_panel/.translations/no.json deleted file mode 100644 index 1177e130150..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/no.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Aktiver {entity_name} borte", - "arm_home": "Aktiver {entity_name} hjemme", - "arm_night": "Aktiver {entity_name} natt", - "disarm": "Deaktiver {entity_name}", - "trigger": "Utl\u00f8ser {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} aktivert borte", - "is_armed_home": "{entity_name} aktivert hjemme", - "is_armed_night": "{entity_name} aktivert natt", - "is_disarmed": "{entity_name} er deaktivert", - "is_triggered": "{entity_name} er utl\u00f8st" - }, - "trigger_type": { - "armed_away": "{entity_name} aktivert borte", - "armed_home": "{entity_name} aktivert hjemme", - "armed_night": "{entity_name} aktivert natt", - "disarmed": "{entity_name} deaktivert", - "triggered": "{entity_name} utl\u00f8st" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/pl.json b/homeassistant/components/alarm_control_panel/.translations/pl.json deleted file mode 100644 index c1125be31b6..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/pl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "uzbr\u00f3j (poza domem) {entity_name}", - "arm_home": "uzbr\u00f3j (w domu) {entity_name}", - "arm_night": "uzbr\u00f3j (noc) {entity_name}", - "disarm": "rozbr\u00f3j {entity_name}", - "trigger": "wyzw\u00f3l {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} jest uzbrojony (poza domem)", - "is_armed_home": "{entity_name} jest uzbrojony (w domu)", - "is_armed_night": "{entity_name} jest uzbrojony (noc)", - "is_disarmed": "{entity_name} jest rozbrojony", - "is_triggered": "{entity_name} jest wyzwolony" - }, - "trigger_type": { - "armed_away": "{entity_name} zostanie uzbrojony (poza domem)", - "armed_home": "{entity_name} zostanie uzbrojony (w domu)", - "armed_night": "{entity_name} zostanie uzbrojony (noc)", - "disarmed": "{entity_name} zostanie rozbrojony", - "triggered": "{entity_name} zostanie wyzwolony" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/pt-BR.json b/homeassistant/components/alarm_control_panel/.translations/pt-BR.json deleted file mode 100644 index 274aa8cb4c2..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Armar {entity_name} longe", - "arm_home": "Armar {entity_name} casa", - "arm_night": "Armar {entity_name} noite", - "disarm": "Desarmar {entity_name}", - "trigger": "Disparar {entidade_nome}" - }, - "trigger_type": { - "armed_away": "{entity_name} armado modo longe", - "armed_home": "{entity_name} armadado modo casa", - "armed_night": "{entity_name} armadado para noite", - "disarmed": "{entity_name} desarmado", - "triggered": "{entity_name} acionado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/pt.json b/homeassistant/components/alarm_control_panel/.translations/pt.json deleted file mode 100644 index 90b9b1d43d5..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/pt.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_home": "Armar casa {entity_name}", - "arm_night": "Armar noite {entity_name}", - "disarm": "Desarmar {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/ru.json b/homeassistant/components/alarm_control_panel/.translations/ru.json deleted file mode 100644 index 36705dbcefd..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/ru.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u0435 \u0434\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "arm_home": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u0414\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "arm_night": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u043e\u0447\u044c\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "disarm": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0445\u0440\u0430\u043d\u0443 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "trigger": "{entity_name} \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442" - }, - "condition_type": { - "is_armed_away": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u0435 \u0434\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "is_armed_home": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u0414\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "is_armed_night": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u043e\u0447\u044c\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "is_disarmed": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0430 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "is_triggered": "{entity_name} \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442" - }, - "trigger_type": { - "armed_away": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u0435 \u0434\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "armed_home": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u0414\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "armed_night": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u043e\u0447\u044c\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "disarmed": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0430 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", - "triggered": "{entity_name} \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/sl.json b/homeassistant/components/alarm_control_panel/.translations/sl.json deleted file mode 100644 index c817f7830ba..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/sl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Vklju\u010di {entity_name} zdoma", - "arm_home": "Vklju\u010di {entity_name} doma", - "arm_night": "Vklju\u010di {entity_name} no\u010d", - "disarm": "Razoro\u017ei {entity_name}", - "trigger": "Spro\u017ei {entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name} je oboro\u017een na \"zdoma\"", - "is_armed_home": "{entity_name} je oboro\u017een na \"dom\"", - "is_armed_night": "{entity_name} je oboro\u017een na \"no\u010d\"", - "is_disarmed": "{entity_name} razoro\u017een", - "is_triggered": "{entity_name} spro\u017een" - }, - "trigger_type": { - "armed_away": "{entity_name} oboro\u017een - zdoma", - "armed_home": "{entity_name} oboro\u017een - dom", - "armed_night": "{entity_name} oboro\u017een - no\u010d", - "disarmed": "{entity_name} razoro\u017een", - "triggered": "{entity_name} spro\u017een" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/sv.json b/homeassistant/components/alarm_control_panel/.translations/sv.json deleted file mode 100644 index 65e4433f5a3..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "Larma {entity_name} borta", - "arm_home": "Larma {entity_name} hemma", - "arm_night": "Larma {entity_name} natt", - "disarm": "Avlarma {entity_name}", - "trigger": "Utl\u00f6sare {entity_name}" - }, - "trigger_type": { - "armed_away": "{entity_name} larmad borta", - "armed_home": "{entity_name} larmad hemma", - "armed_night": "{entity_name} larmad natt", - "disarmed": "{entity_name} bortkopplad", - "triggered": "{entity_name} utl\u00f6st" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json b/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json deleted file mode 100644 index a02ea1c1966..00000000000 --- a/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "device_automation": { - "action_type": { - "arm_away": "\u8a2d\u5b9a{entity_name}\u5916\u51fa\u6a21\u5f0f", - "arm_home": "\u8a2d\u5b9a{entity_name}\u8fd4\u5bb6\u6a21\u5f0f", - "arm_night": "\u8a2d\u5b9a{entity_name}\u591c\u9593\u6a21\u5f0f", - "disarm": "\u89e3\u9664{entity_name}", - "trigger": "\u89f8\u767c{entity_name}" - }, - "condition_type": { - "is_armed_away": "{entity_name}\u8a2d\u5b9a\u5916\u51fa", - "is_armed_home": "{entity_name}\u8a2d\u5b9a\u5728\u5bb6", - "is_armed_night": "{entity_name}\u8a2d\u5b9a\u591c\u9593", - "is_disarmed": "{entity_name}\u5df2\u89e3\u9664", - "is_triggered": "{entity_name}\u5df2\u89f8\u767c" - }, - "trigger_type": { - "armed_away": "{entity_name}\u8a2d\u5b9a\u5916\u51fa", - "armed_home": "{entity_name}\u8a2d\u5b9a\u5728\u5bb6", - "armed_night": "{entity_name}\u8a2d\u5b9a\u591c\u9593", - "disarmed": "{entity_name}\u5df2\u89e3\u9664", - "triggered": "{entity_name}\u5df2\u89f8\u767c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/manifest.json b/homeassistant/components/alarm_control_panel/manifest.json index 80c245b8d8f..e4cd0e27a39 100644 --- a/homeassistant/components/alarm_control_panel/manifest.json +++ b/homeassistant/components/alarm_control_panel/manifest.json @@ -2,8 +2,6 @@ "domain": "alarm_control_panel", "name": "Alarm Control Panel", "documentation": "https://www.home-assistant.io/integrations/alarm_control_panel", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/alarm_control_panel/reproduce_state.py b/homeassistant/components/alarm_control_panel/reproduce_state.py index 705bca608a6..9e7d8e6f1a7 100644 --- a/homeassistant/components/alarm_control_panel/reproduce_state.py +++ b/homeassistant/components/alarm_control_panel/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Alarm control panel state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -36,7 +36,11 @@ VALID_STATES = { async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -76,9 +80,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Alarm control panel states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/alarm_control_panel/services.yaml b/homeassistant/components/alarm_control_panel/services.yaml index b31cb718b3f..fa5c573a7f8 100644 --- a/homeassistant/components/alarm_control_panel/services.yaml +++ b/homeassistant/components/alarm_control_panel/services.yaml @@ -5,7 +5,7 @@ alarm_disarm: fields: entity_id: description: Name of alarm control panel to disarm. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" code: description: An optional code to disarm the alarm control panel with. example: 1234 @@ -15,7 +15,7 @@ alarm_arm_custom_bypass: fields: entity_id: description: Name of alarm control panel to arm custom bypass. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" code: description: An optional code to arm custom bypass the alarm control panel with. example: 1234 @@ -25,7 +25,7 @@ alarm_arm_home: fields: entity_id: description: Name of alarm control panel to arm home. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" code: description: An optional code to arm home the alarm control panel with. example: 1234 @@ -35,7 +35,7 @@ alarm_arm_away: fields: entity_id: description: Name of alarm control panel to arm away. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" code: description: An optional code to arm away the alarm control panel with. example: 1234 @@ -45,7 +45,7 @@ alarm_arm_night: fields: entity_id: description: Name of alarm control panel to arm night. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" code: description: An optional code to arm night the alarm control panel with. example: 1234 @@ -55,7 +55,7 @@ alarm_trigger: fields: entity_id: description: Name of alarm control panel to trigger. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" code: description: An optional code to trigger the alarm control panel with. example: 1234 diff --git a/homeassistant/components/alarm_control_panel/strings.json b/homeassistant/components/alarm_control_panel/strings.json index 4e14a8c2a3d..de89d28082b 100644 --- a/homeassistant/components/alarm_control_panel/strings.json +++ b/homeassistant/components/alarm_control_panel/strings.json @@ -1,25 +1,40 @@ { - "device_automation": { - "action_type": { - "arm_away": "Arm {entity_name} away", - "arm_home": "Arm {entity_name} home", - "arm_night": "Arm {entity_name} night", - "disarm": "Disarm {entity_name}", - "trigger": "Trigger {entity_name}" - }, - "condition_type": { - "is_triggered": "{entity_name} is triggered", - "is_disarmed": "{entity_name} is disarmed", - "is_armed_home": "{entity_name} is armed home", - "is_armed_away": "{entity_name} is armed away", - "is_armed_night": "{entity_name} is armed night" - }, - "trigger_type": { - "triggered": "{entity_name} triggered", - "disarmed": "{entity_name} disarmed", - "armed_home": "{entity_name} armed home", - "armed_away": "{entity_name} armed away", - "armed_night": "{entity_name} armed night" - } + "title": "Alarm control panel", + "device_automation": { + "action_type": { + "arm_away": "Arm {entity_name} away", + "arm_home": "Arm {entity_name} home", + "arm_night": "Arm {entity_name} night", + "disarm": "Disarm {entity_name}", + "trigger": "Trigger {entity_name}" + }, + "condition_type": { + "is_triggered": "{entity_name} is triggered", + "is_disarmed": "{entity_name} is disarmed", + "is_armed_home": "{entity_name} is armed home", + "is_armed_away": "{entity_name} is armed away", + "is_armed_night": "{entity_name} is armed night" + }, + "trigger_type": { + "triggered": "{entity_name} triggered", + "disarmed": "{entity_name} disarmed", + "armed_home": "{entity_name} armed home", + "armed_away": "{entity_name} armed away", + "armed_night": "{entity_name} armed night" } -} \ No newline at end of file + }, + "state": { + "_": { + "armed": "Armed", + "disarmed": "Disarmed", + "armed_home": "Armed home", + "armed_away": "Armed away", + "armed_night": "Armed night", + "armed_custom_bypass": "Armed custom bypass", + "pending": "Pending", + "arming": "Arming", + "disarming": "Disarming", + "triggered": "Triggered" + } + } +} diff --git a/homeassistant/components/alarm_control_panel/translations/af.json b/homeassistant/components/alarm_control_panel/translations/af.json new file mode 100644 index 00000000000..6f6a5c51c94 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/af.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Gewapen", + "armed_away": "Gewapend weg", + "armed_custom_bypass": "Gewapende pasgemaakte omseil", + "armed_home": "Gewapend tuis", + "armed_night": "Gewapend nag", + "arming": "Bewapen Tans", + "disarmed": "Ontwapen", + "disarming": "Ontwapen Tans", + "pending": "Hangende", + "triggered": "Geaktiveer" + } + }, + "title": "Alarm beheer paneel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ar.json b/homeassistant/components/alarm_control_panel/translations/ar.json new file mode 100644 index 00000000000..427b30eebbe --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ar.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u0645\u0633\u0644\u062d", + "armed_away": "\u0645\u0641\u0639\u0651\u0644 \u0641\u064a \u0627\u0644\u062e\u0627\u0631\u062c", + "armed_custom_bypass": "\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u062a\u0641\u0639\u064a\u0644", + "armed_home": "\u0645\u0641\u0639\u0651\u0644 \u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644", + "armed_night": "\u0645\u0641\u0639\u0651\u0644 \u0644\u064a\u0644", + "arming": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0641\u0639\u064a\u0644", + "disarmed": "\u063a\u064a\u0631 \u0645\u0641\u0639\u0651\u0644", + "disarming": "\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0625\u0646\u0630\u0627\u0631", + "pending": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u062a\u0638\u0627\u0631", + "triggered": "\u0645\u0641\u0639\u0651\u0644" + } + }, + "title": "\u0644\u0648\u062d\u0629 \u062a\u062d\u0643\u0645 \u0627\u0644\u0625\u0646\u0630\u0627\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/bg.json b/homeassistant/components/alarm_control_panel/translations/bg.json new file mode 100644 index 00000000000..4eb04fa54fc --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/bg.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "\u0421\u043b\u043e\u0436\u0438 {entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u0441\u044a\u0441\u0442\u0432\u0438\u0435", + "arm_home": "\u0421\u043b\u043e\u0436\u0438 {entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u0432\u043a\u044a\u0449\u0438", + "arm_night": "\u0421\u043b\u043e\u0436\u0438 {entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 \u0432 \u043d\u043e\u0449\u0435\u043d \u0440\u0435\u0436\u0438\u043c", + "disarm": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0439 {entity_name}", + "trigger": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d\u0435 {entity_name}" + }, + "trigger_type": { + "armed_away": "{entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430", + "armed_home": "{entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u0432\u043a\u044a\u0449\u0438", + "armed_night": "{entity_name} \u043f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u043d\u043e\u0449", + "disarmed": "{entity_name} \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0430", + "triggered": "{entity_name} \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d\u0430" + } + }, + "state": { + "_": { + "armed": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430", + "armed_away": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430", + "armed_custom_bypass": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430", + "armed_home": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u0432\u043a\u044a\u0449\u0438", + "armed_night": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u043d\u043e\u0449", + "arming": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435", + "disarmed": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0430", + "disarming": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435", + "pending": "\u0412 \u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0435", + "triggered": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d" + } + }, + "title": "\u041a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0430\u043b\u0430\u0440\u043c\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/bs.json b/homeassistant/components/alarm_control_panel/translations/bs.json new file mode 100644 index 00000000000..00012852b52 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/bs.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Aktiviran", + "armed_away": "Aktiviran izvan ku\u0107e", + "armed_custom_bypass": "Aktiviran pod specijalnim rezimom", + "armed_home": "Aktiviran kod ku\u0107e", + "armed_night": "Aktiviran no\u0107u", + "arming": "Aktivacija", + "disarmed": "Deaktiviran", + "disarming": "Deaktivacija", + "pending": "U is\u010dekivanju", + "triggered": "Pokrenut" + } + }, + "title": "Centralni sistem za alarm" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ca.json b/homeassistant/components/alarm_control_panel/translations/ca.json new file mode 100644 index 00000000000..dafef96b090 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ca.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Activa {entity_name} fora", + "arm_home": "Activa {entity_name} a casa", + "arm_night": "Activa {entity_name} nocturn", + "disarm": "Desactiva {entity_name}", + "trigger": "Dispara {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} est\u00e0 activada en mode 'a fora'", + "is_armed_home": "{entity_name} est\u00e0 activada en mode 'a casa'", + "is_armed_night": "{entity_name} est\u00e0 activada en mode 'nocturn'", + "is_disarmed": "{entity_name} est\u00e0 desactivada", + "is_triggered": "{entity_name} est\u00e0 disparada" + }, + "trigger_type": { + "armed_away": "{entity_name} activada en mode 'a fora'", + "armed_home": "{entity_name} activada en mode 'a casa'", + "armed_night": "{entity_name} activada en mode 'nocturn'", + "disarmed": "{entity_name} desactivada", + "triggered": "{entity_name} disparat/ada" + } + }, + "state": { + "_": { + "armed": "Activada", + "armed_away": "Activada, mode fora", + "armed_custom_bypass": "Activada, bypass personalitzat", + "armed_home": "Activada, mode a casa", + "armed_night": "Activada, mode nocturn", + "arming": "Activant", + "disarmed": "Desactivada", + "disarming": "Desactivant", + "pending": "Pendent", + "triggered": "Disparada" + } + }, + "title": "Panell de control d'alarma" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/cs.json b/homeassistant/components/alarm_control_panel/translations/cs.json new file mode 100644 index 00000000000..0eff1bebaae --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/cs.json @@ -0,0 +1,26 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Aktivovat {entity_name} v re\u017eimu mimo domov", + "arm_home": "Aktivovat {entity_name} v re\u017eimu doma", + "arm_night": "Aktivovat {entity_name} v re\u017eimu noc", + "disarm": "Deaktivovat {entity_name}", + "trigger": "Spustit {entity_name}" + } + }, + "state": { + "_": { + "armed": "Aktivn\u00ed", + "armed_away": "Aktivn\u00ed re\u017eim mimo domov", + "armed_custom_bypass": "Aktivn\u00ed u\u017eivatelsk\u00fdm obejit\u00edm", + "armed_home": "Aktivn\u00ed re\u017eim doma", + "armed_night": "Aktivn\u00ed no\u010dn\u00ed re\u017eim", + "arming": "Aktivov\u00e1n\u00ed", + "disarmed": "Neaktivn\u00ed", + "disarming": "Deaktivov\u00e1n\u00ed", + "pending": "Nadch\u00e1zej\u00edc\u00ed", + "triggered": "Spu\u0161t\u011bno" + } + }, + "title": "Ovl\u00e1dac\u00ed panel alarmu" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/cy.json b/homeassistant/components/alarm_control_panel/translations/cy.json new file mode 100644 index 00000000000..a8a7e52af34 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/cy.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Arfogi", + "armed_away": "Arfog i ffwrdd", + "armed_custom_bypass": "Ffordd osgoi larwm personol", + "armed_home": "Arfogi gartref", + "armed_night": "Arfog nos", + "arming": "Arfogi", + "disarmed": "Diarfogi", + "disarming": "Ddiarfogi", + "pending": "Yn yr arfaeth", + "triggered": "Sbarduno" + } + }, + "title": "Panel rheoli larwm" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/da.json b/homeassistant/components/alarm_control_panel/translations/da.json new file mode 100644 index 00000000000..f3b04e26360 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/da.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Tilkobl {entity_name} ude", + "arm_home": "Tilkobl {entity_name} hjemme", + "arm_night": "Tilkobl {entity_name} nat", + "disarm": "Frakobl {entity_name}", + "trigger": "Udl\u00f8s {entity_name}" + }, + "trigger_type": { + "armed_away": "{entity_name} tilkoblet ude", + "armed_home": "{entity_name} tilkoblet hjemme", + "armed_night": "{entity_name} tilkoblet nat", + "disarmed": "{entity_name} frakoblet", + "triggered": "{entity_name} udl\u00f8st" + } + }, + "state": { + "_": { + "armed": "Tilkoblet", + "armed_away": "Tilkoblet ude", + "armed_custom_bypass": "Tilkoblet brugerdefineret bypass", + "armed_home": "Tilkoblet hjemme", + "armed_night": "Tilkoblet nat", + "arming": "Tilkobler", + "disarmed": "Frakoblet", + "disarming": "Frakobler", + "pending": "Afventer", + "triggered": "Udl\u00f8st" + } + }, + "title": "Alarmkontrolpanel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/de.json b/homeassistant/components/alarm_control_panel/translations/de.json new file mode 100644 index 00000000000..a671c388932 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/de.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Aktiviere {entity_name} Unterwegs", + "arm_home": "Aktiviere {entity_name} Zuhause", + "arm_night": "Aktiviere {entity_name} Nacht-Modus", + "disarm": "Deaktivere {entity_name}", + "trigger": "Ausl\u00f6ser {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} ist aktiviert - Unterwegs", + "is_armed_home": "{entity_name} ist aktiviert - Zuhause", + "is_armed_night": "{entity_name} ist aktiviert - Nacht", + "is_disarmed": "{entity_name} ist deaktiviert", + "is_triggered": "{entity_name} wurde ausgel\u00f6st" + }, + "trigger_type": { + "armed_away": "{entity_name} Unterwegs", + "armed_home": "{entity_name} Zuhause", + "armed_night": "{entity_name} Nacht-Modus", + "disarmed": "{entity_name} deaktiviert", + "triggered": "{entity_name} ausgel\u00f6st" + } + }, + "state": { + "_": { + "armed": "Aktiv", + "armed_away": "Aktiv, abwesend", + "armed_custom_bypass": "Aktiv, benutzerdefiniert", + "armed_home": "Aktiv, zu Hause", + "armed_night": "Aktiv, Nacht", + "arming": "Aktiviere", + "disarmed": "Inaktiv", + "disarming": "Deaktiviere", + "pending": "Ausstehend", + "triggered": "Ausgel\u00f6st" + } + }, + "title": "Alarmanlage" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/el.json b/homeassistant/components/alarm_control_panel/translations/el.json new file mode 100644 index 00000000000..5b37be59d47 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/el.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2", + "armed_away": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2 \u03bc\u03b1\u03ba\u03c1\u03b9\u03ac", + "armed_custom_bypass": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03b7 \u03c0\u03b1\u03c1\u03ac\u03ba\u03b1\u03bc\u03c8\u03b7 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae", + "armed_home": "\u03a3\u03c0\u03af\u03c4\u03b9 \u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf", + "armed_night": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03b2\u03c1\u03ac\u03b4\u03c5", + "arming": "\u038c\u03c0\u03bb\u03b9\u03c3\u03b7", + "disarmed": "\u0391\u03c6\u03bf\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2", + "disarming": "\u0391\u03c6\u03cc\u03c0\u03bb\u03b9\u03c3\u03b7", + "pending": "\u0395\u03ba\u03ba\u03c1\u03b5\u03bc\u03ae\u03c2", + "triggered": "\u03a0\u03b1\u03c1\u03b1\u03b2\u03af\u03b1\u03c3\u03b7" + } + }, + "title": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c9\u03bd" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/en.json b/homeassistant/components/alarm_control_panel/translations/en.json new file mode 100644 index 00000000000..b364d850461 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/en.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Arm {entity_name} away", + "arm_home": "Arm {entity_name} home", + "arm_night": "Arm {entity_name} night", + "disarm": "Disarm {entity_name}", + "trigger": "Trigger {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} is armed away", + "is_armed_home": "{entity_name} is armed home", + "is_armed_night": "{entity_name} is armed night", + "is_disarmed": "{entity_name} is disarmed", + "is_triggered": "{entity_name} is triggered" + }, + "trigger_type": { + "armed_away": "{entity_name} armed away", + "armed_home": "{entity_name} armed home", + "armed_night": "{entity_name} armed night", + "disarmed": "{entity_name} disarmed", + "triggered": "{entity_name} triggered" + } + }, + "state": { + "_": { + "armed": "Armed", + "armed_away": "Armed away", + "armed_custom_bypass": "Armed custom bypass", + "armed_home": "Armed home", + "armed_night": "Armed night", + "arming": "Arming", + "disarmed": "Disarmed", + "disarming": "Disarming", + "pending": "Pending", + "triggered": "Triggered" + } + }, + "title": "Alarm control panel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/es-419.json b/homeassistant/components/alarm_control_panel/translations/es-419.json new file mode 100644 index 00000000000..7de15a91608 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/es-419.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Habilitar {entity_name} fuera de casa", + "arm_home": "Habilitar {entity_name} en casa", + "arm_night": "Habilitar {entity_name} de noche", + "disarm": "Deshabilitar {entity_name}", + "trigger": "Activar {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} est\u00e1 habilitada fuera de casa", + "is_armed_home": "{entity_name} est\u00e1 habilitada en casa", + "is_armed_night": "{entity_name} est\u00e1 habilitada de noche", + "is_disarmed": "{entity_name} est\u00e1 deshabilitada", + "is_triggered": "{entity_name} est\u00e1 activada" + }, + "trigger_type": { + "armed_away": "{entity_name} habilitada fuera de casa", + "armed_home": "{entity_name} habilitada en casa", + "armed_night": "{entity_name} habilitada de noche", + "disarmed": "{entity_name} deshabilitada", + "triggered": "{entity_name} activada" + } + }, + "state": { + "_": { + "armed": "Armado", + "armed_away": "Armado Fuera de Casa", + "armed_custom_bypass": "Armada zona espec\u00edfica", + "armed_home": "Armado en Casa", + "armed_night": "Armado Nocturno", + "arming": "Armando", + "disarmed": "Desarmado", + "disarming": "Desarmando", + "pending": "Pendiente", + "triggered": "Activado" + } + }, + "title": "Panel de control de alarma" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/es.json b/homeassistant/components/alarm_control_panel/translations/es.json new file mode 100644 index 00000000000..465dd0e8994 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/es.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Armar {entity_name} exterior", + "arm_home": "Armar {entity_name} modo casa", + "arm_night": "Armar {entity_name} por la noche", + "disarm": "Desarmar {entity_name}", + "trigger": "Lanzar {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} est\u00e1 armada fuera", + "is_armed_home": "{entity_name} est\u00e1 armada en casa", + "is_armed_night": "{entity_name} est\u00e1 armada noche", + "is_disarmed": "{entity_name} est\u00e1 desarmada", + "is_triggered": "{entity_name} est\u00e1 disparada" + }, + "trigger_type": { + "armed_away": "{entity_name} armado fuera", + "armed_home": "{entity_name} armado en casa", + "armed_night": "{entity_name} armado modo noche", + "disarmed": "{entity_name} desarmado", + "triggered": "{entity_name} activado" + } + }, + "state": { + "_": { + "armed": "Armado", + "armed_away": "Armado fuera de casa", + "armed_custom_bypass": "Armada Zona Espec\u00edfica", + "armed_home": "Armado en casa", + "armed_night": "Armado noche", + "arming": "Armando", + "disarmed": "Desarmado", + "disarming": "Desarmando", + "pending": "Pendiente", + "triggered": "Disparada" + } + }, + "title": "Panel de control de alarmas" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/et.json b/homeassistant/components/alarm_control_panel/translations/et.json new file mode 100644 index 00000000000..28c47b5a06d --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/et.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Valves", + "armed_away": "Valves eemal", + "armed_custom_bypass": "Valves, eranditega", + "armed_home": "Valves kodus", + "armed_night": "Valves \u00f6ine", + "arming": "Valvestab", + "disarmed": "Maas", + "disarming": "Maas...", + "pending": "Ootel", + "triggered": "H\u00e4ires" + } + }, + "title": "Valvekeskuse juhtpaneel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/eu.json b/homeassistant/components/alarm_control_panel/translations/eu.json new file mode 100644 index 00000000000..e483eeac44d --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "pending": "Zain", + "triggered": "Abiarazita" + } + }, + "title": "Alarmen kontrol panela" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/fa.json b/homeassistant/components/alarm_control_panel/translations/fa.json new file mode 100644 index 00000000000..1aa489f7d93 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/fa.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u0645\u0635\u0644\u062d \u0634\u062f\u0647", + "armed_away": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u0628\u06cc\u0631\u0648\u0646", + "armed_custom_bypass": "\u0628\u0627\u06cc\u06af\u0627\u0646\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u0633\u0644\u062d", + "armed_home": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u062e\u0627\u0646\u0647", + "armed_night": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u0634\u0628", + "arming": "\u062f\u0631 \u062d\u0627\u0644 \u0645\u0633\u0644\u062d \u06a9\u0631\u062f\u0646", + "disarmed": "\u063a\u06cc\u0631 \u0645\u0633\u0644\u062d", + "disarming": "\u062f\u0631 \u062d\u0627\u0644 \u063a\u06cc\u0631 \u0645\u0633\u0644\u062d \u06a9\u0631\u062f\u0646", + "pending": "\u062f\u0631 \u0627\u0646\u062a\u0638\u0627\u0631", + "triggered": "\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u062e\u062a\u0647 \u0634\u062f\u0647" + } + }, + "title": "\u06a9\u0646\u062a\u0631\u0644 \u067e\u0646\u0644 \u0622\u0644\u0627\u0631\u0645" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/fi.json b/homeassistant/components/alarm_control_panel/translations/fi.json new file mode 100644 index 00000000000..1a77c621458 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/fi.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Viritetty", + "armed_away": "Viritetty (poissa)", + "armed_custom_bypass": "Virityksen ohittaminen", + "armed_home": "Viritetty (kotona)", + "armed_night": "Viritetty (y\u00f6)", + "arming": "Viritys", + "disarmed": "Viritys pois", + "disarming": "Virityksen poisto", + "pending": "Odottaa", + "triggered": "Lauennut" + } + }, + "title": "H\u00e4lytysasetukset" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/fr.json b/homeassistant/components/alarm_control_panel/translations/fr.json new file mode 100644 index 00000000000..597b3d0d2f2 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/fr.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Armer {entity_name} en mode \"sortie\"", + "arm_home": "Armer {entity_name} en mode \"maison\"", + "arm_night": "Armer {entity_name} en mode \"nuit\"", + "disarm": "D\u00e9sarmer {entity_name}", + "trigger": "D\u00e9clencheur {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} est arm\u00e9", + "is_armed_home": "{entity_name} est arm\u00e9 \u00e0 la maison", + "is_armed_night": "{entity_name} est arm\u00e9 la nuit", + "is_disarmed": "{entity_name} est d\u00e9sarm\u00e9", + "is_triggered": "{entity_name} est d\u00e9clench\u00e9" + }, + "trigger_type": { + "armed_away": "Armer {entity_name} en mode \"sortie\"", + "armed_home": "Armer {entity_name} en mode \"maison\"", + "armed_night": "Armer {entity_name} en mode \"nuit\"", + "disarmed": "{entity_name} d\u00e9sarm\u00e9", + "triggered": "{entity_name} d\u00e9clench\u00e9" + } + }, + "state": { + "_": { + "armed": "Activ\u00e9", + "armed_away": "Enclench\u00e9e (absent)", + "armed_custom_bypass": "Activ\u00e9e avec exception", + "armed_home": "Enclench\u00e9e (pr\u00e9sent)", + "armed_night": "Enclench\u00e9 (nuit)", + "arming": "Activation", + "disarmed": "D\u00e9sactiv\u00e9e", + "disarming": "D\u00e9sactivation", + "pending": "En attente", + "triggered": "D\u00e9clench\u00e9" + } + }, + "title": "Panneau de contr\u00f4le d'alarme" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/gsw.json b/homeassistant/components/alarm_control_panel/translations/gsw.json new file mode 100644 index 00000000000..615ad7dc950 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/gsw.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "armed": "Scharf", + "armed_away": "Scharf usswerts", + "armed_home": "Scharf dihei", + "armed_night": "Scharf Nacht", + "arming": "Scharf stel\u00e4", + "disarmed": "Nid scharf", + "disarming": "Entsperr\u00e4", + "pending": "Usstehehnd", + "triggered": "Usgl\u00f6sst" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/he.json b/homeassistant/components/alarm_control_panel/translations/he.json new file mode 100644 index 00000000000..544b23f5629 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/he.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u05d3\u05e8\u05d5\u05da", + "armed_away": "\u05d3\u05e8\u05d5\u05da \u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea", + "armed_custom_bypass": "\u05de\u05e2\u05e7\u05e3 \u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea \u05d3\u05e8\u05d5\u05da", + "armed_home": "\u05d4\u05d1\u05d9\u05ea \u05d3\u05e8\u05d5\u05da", + "armed_night": "\u05d3\u05e8\u05d5\u05da \u05dc\u05d9\u05dc\u05d4", + "arming": "\u05de\u05e4\u05e2\u05d9\u05dc", + "disarmed": "\u05de\u05e0\u05d5\u05d8\u05e8\u05dc", + "disarming": "\u05de\u05e0\u05d8\u05e8\u05dc", + "pending": "\u05de\u05de\u05ea\u05d9\u05df", + "triggered": "\u05d4\u05d5\u05e4\u05e2\u05dc" + } + }, + "title": "\u05dc\u05d5\u05d7 \u05d1\u05e7\u05e8\u05d4 \u05e9\u05dc \u05d0\u05d6\u05e2\u05e7\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/hr.json b/homeassistant/components/alarm_control_panel/translations/hr.json new file mode 100644 index 00000000000..57308c14e30 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/hr.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Aktiviran", + "armed_away": "Aktiviran odsutno", + "armed_custom_bypass": "Aktiviran", + "armed_home": "Aktiviran doma", + "armed_night": "Aktiviran no\u010dni", + "arming": "Aktiviranje", + "disarmed": "Deaktiviran", + "disarming": "Deaktiviranje", + "pending": "U tijeku", + "triggered": "Okinut" + } + }, + "title": "Upravlja\u010dka plo\u010da za alarm" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/hu.json b/homeassistant/components/alarm_control_panel/translations/hu.json new file mode 100644 index 00000000000..81fa10311ef --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/hu.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "{entity_name} \u00e9les\u00edt\u00e9se t\u00e1voz\u00f3 m\u00f3dban", + "arm_home": "{entity_name} \u00e9les\u00edt\u00e9se otthon marad\u00f3 m\u00f3dban", + "arm_night": "{entity_name} \u00e9les\u00edt\u00e9se \u00e9jszakai m\u00f3dban", + "disarm": "{entity_name} hat\u00e1stalan\u00edt\u00e1sa", + "trigger": "{entity_name} riaszt\u00e1si esem\u00e9ny ind\u00edt\u00e1sa" + }, + "trigger_type": { + "armed_away": "{entity_name} t\u00e1voz\u00f3 m\u00f3dban lett \u00e9les\u00edtve", + "armed_home": "{entity_name} otthon marad\u00f3 m\u00f3dban lett \u00e9les\u00edtve", + "armed_night": "{entity_name} \u00e9jszakai m\u00f3dban lett \u00e9les\u00edtve", + "disarmed": "{entity_name} hat\u00e1stalan\u00edtva lett", + "triggered": "{entity_name} riaszt\u00e1sba ker\u00fclt" + } + }, + "state": { + "_": { + "armed": "\u00c9les\u00edtve", + "armed_away": "\u00c9les\u00edtve t\u00e1vol", + "armed_custom_bypass": "\u00c9les\u00edtve \u00e1thidal\u00e1ssal", + "armed_home": "\u00c9les\u00edtve otthon", + "armed_night": "\u00c9les\u00edtve \u00e9jszaka", + "arming": "\u00c9les\u00edt\u00e9s", + "disarmed": "Hat\u00e1stalan\u00edtva", + "disarming": "Hat\u00e1stalan\u00edt\u00e1s", + "pending": "F\u00fcgg\u0151ben", + "triggered": "Riaszt\u00e1s" + } + }, + "title": "Riaszt\u00f3 k\u00f6zpont" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/hy.json b/homeassistant/components/alarm_control_panel/translations/hy.json new file mode 100644 index 00000000000..58788b33577 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/hy.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u0536\u056b\u0576\u057e\u0561\u056e", + "armed_away": "\u0536\u056b\u0576\u057e\u0561\u056e", + "armed_custom_bypass": "\u0536\u056b\u0576\u0574\u0561\u0576 \u0561\u0576\u0570\u0561\u057f\u0561\u056f\u0561\u0576 \u056f\u0578\u0564", + "armed_home": "\u0536\u056b\u0576\u057e\u0561\u056e \u057f\u0578\u0582\u0576", + "armed_night": "\u0536\u056b\u0576\u057e\u0561\u056e \u0563\u056b\u0577\u0565\u0580", + "arming": "\u0536\u056b\u0576\u0565\u056c", + "disarmed": "\u0536\u056b\u0576\u0561\u0569\u0561\u0583\u057e\u0561\u056e", + "disarming": "\u0536\u056b\u0576\u0561\u0569\u0561\u0583\u0578\u0572", + "pending": "\u054d\u057a\u0561\u057d\u0578\u0582\u0574", + "triggered": "\u057a\u0561\u057f\u0573\u0561\u057c\u0568" + } + }, + "title": "\u054f\u0561\u0563\u0576\u0561\u057a\u056b \u056f\u0561\u057c\u0561\u057e\u0561\u0580\u0574\u0561\u0576 \u057e\u0561\u0570\u0561\u0576\u0561\u056f" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/id.json b/homeassistant/components/alarm_control_panel/translations/id.json new file mode 100644 index 00000000000..cbc3d31370c --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/id.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Bersenjata", + "armed_away": "Armed away", + "armed_custom_bypass": "Armed custom bypass", + "armed_home": "Armed home", + "armed_night": "Armed night", + "arming": "Mempersenjatai", + "disarmed": "Dilucuti", + "disarming": "Melucuti", + "pending": "Tertunda", + "triggered": "Terpicu" + } + }, + "title": "Kontrol panel alarm" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/is.json b/homeassistant/components/alarm_control_panel/translations/is.json new file mode 100644 index 00000000000..eda11e6177f --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/is.json @@ -0,0 +1,16 @@ +{ + "state": { + "_": { + "armed": "\u00c1 ver\u00f0i", + "armed_away": "\u00c1 ver\u00f0i \u00fati", + "armed_home": "\u00c1 ver\u00f0i heima", + "armed_night": "\u00c1 ver\u00f0i n\u00f3tt", + "arming": "Set \u00e1 v\u00f6r\u00f0", + "disarmed": "ekki \u00e1 ver\u00f0i", + "disarming": "tek af ver\u00f0i", + "pending": "B\u00ed\u00f0ur", + "triggered": "R\u00e6st" + } + }, + "title": "Stj\u00f3rnbor\u00f0 \u00f6ryggiskerfis" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/it.json b/homeassistant/components/alarm_control_panel/translations/it.json new file mode 100644 index 00000000000..a365c5cd35b --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/it.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Armare {entity_name} uscito", + "arm_home": "Armare {entity_name} casa", + "arm_night": "Armare {entity_name} notte", + "disarm": "Disarmare {entity_name}", + "trigger": "Attivazione {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} \u00e8 attivo in modalit\u00e0 fuori casa", + "is_armed_home": "{entity_name} \u00e8 attivo in modalit\u00e0 a casa", + "is_armed_night": "{entity_name} \u00e8 attivo in modalit\u00e0 notte", + "is_disarmed": "{entity_name} \u00e8 disattivo", + "is_triggered": "{entity_name} \u00e8 attivato" + }, + "trigger_type": { + "armed_away": "{entity_name} attivato in modalit\u00e0 fuori casa", + "armed_home": "{entity_name} attivato in modalit\u00e0 a casa", + "armed_night": "{entity_name} attivato in modalit\u00e0 notte", + "disarmed": "{entity_name} disattivato", + "triggered": "{entity_name} attivato" + } + }, + "state": { + "_": { + "armed": "Attivo", + "armed_away": "Attivo fuori casa", + "armed_custom_bypass": "Attivo con bypass", + "armed_home": "Attivo in casa", + "armed_night": "Attivo Notte", + "arming": "In attivazione", + "disarmed": "Disattivo", + "disarming": "In disattivazione", + "pending": "In sospeso", + "triggered": "Attivato" + } + }, + "title": "Pannello di Controllo degli Allarmi" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ja.json b/homeassistant/components/alarm_control_panel/translations/ja.json new file mode 100644 index 00000000000..3eceb75b597 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ja.json @@ -0,0 +1,7 @@ +{ + "state": { + "_": { + "triggered": "\u30c8\u30ea\u30ac\u30fc" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ko.json b/homeassistant/components/alarm_control_panel/translations/ko.json new file mode 100644 index 00000000000..f6adb68fe66 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ko.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "{entity_name} \uc678\ucd9c\uacbd\ube44", + "arm_home": "{entity_name} \uc7ac\uc2e4\uacbd\ube44", + "arm_night": "{entity_name} \uc57c\uac04\uacbd\ube44", + "disarm": "{entity_name} \uacbd\ube44\ud574\uc81c", + "trigger": "{entity_name} \ud2b8\ub9ac\uac70" + }, + "condition_type": { + "is_armed_away": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uacbd\ube44\ubaa8\ub4dc \uc0c1\ud0dc\uc774\uba74", + "is_armed_home": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uacbd\ube44\ubaa8\ub4dc \uc0c1\ud0dc\uc774\uba74", + "is_armed_night": "{entity_name} \uc774(\uac00) \uc57c\uac04 \uacbd\ube44\ubaa8\ub4dc \uc0c1\ud0dc\uc774\uba74", + "is_disarmed": "{entity_name} \uc774(\uac00) \ud574\uc81c \uc0c1\ud0dc\uc774\uba74", + "is_triggered": "{entity_name} \uc774(\uac00) \ud2b8\ub9ac\uac70\ub418\uc5c8\uc73c\uba74" + }, + "trigger_type": { + "armed_away": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uacbd\ube44\ubaa8\ub4dc\ub85c \uc124\uc815\ub420 \ub54c", + "armed_home": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uacbd\ube44\ubaa8\ub4dc\ub85c \uc124\uc815\ub420 \ub54c", + "armed_night": "{entity_name} \uc774(\uac00) \uc57c\uac04 \uacbd\ube44\ubaa8\ub4dc\ub85c \uc124\uc815\ub420 \ub54c", + "disarmed": "{entity_name} \uc774(\uac00) \ud574\uc81c\ub420 \ub54c", + "triggered": "{entity_name} \uc774(\uac00) \ud2b8\ub9ac\uac70\ub420 \ub54c" + } + }, + "state": { + "_": { + "armed": "\uacbd\ube44\uc911", + "armed_away": "\uacbd\ube44\uc911(\uc678\ucd9c)", + "armed_custom_bypass": "\uacbd\ube44\uc911(\uc0ac\uc6a9\uc790 \uc6b0\ud68c)", + "armed_home": "\uacbd\ube44\uc911(\uc7ac\uc2e4)", + "armed_night": "\uacbd\ube44\uc911(\uc57c\uac04)", + "arming": "\uacbd\ube44\uc911", + "disarmed": "\ud574\uc81c\ub428", + "disarming": "\ud574\uc81c\uc911", + "pending": "\ubcf4\ub958\uc911", + "triggered": "\uc791\ub3d9\ub428" + } + }, + "title": "\uc54c\ub78c\uc81c\uc5b4\ud310" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/lb.json b/homeassistant/components/alarm_control_panel/translations/lb.json new file mode 100644 index 00000000000..5a441693726 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/lb.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "{entity_name} fir \u00ebnnerwee uschalten", + "arm_home": "{entity_name} fir doheem uschalten", + "arm_night": "{entity_name} fir Nuecht uschalten", + "disarm": "{entity_name} entsch\u00e4rfen", + "trigger": "{entity_name} ausl\u00e9isen" + }, + "condition_type": { + "is_armed_away": "{entity_name} ass ugeschalt fir Ennerwee", + "is_armed_home": "{entity_name} ass ugeschalt fir Doheem", + "is_armed_night": "{entity_name} ass ugeschalt fir Nuecht", + "is_disarmed": "{entity_name} ass entsch\u00e4rft", + "is_triggered": "{entity_name} ass ausgel\u00e9ist" + }, + "trigger_type": { + "armed_away": "{entity_name} ugeschalt fir Ennerwee", + "armed_home": "{entity_name} ugeschalt fir Doheem", + "armed_night": "{entity_name} ugeschalt fir Nuecht", + "disarmed": "{entity_name} entsch\u00e4rft", + "triggered": "{entity_name} ausgel\u00e9ist" + } + }, + "state": { + "_": { + "armed": "Aktiv\u00e9iert", + "armed_away": "Aktiv\u00e9iert \u00cbnnerwee", + "armed_custom_bypass": "Aktiv, Benotzerdefin\u00e9iert", + "armed_home": "Aktiv\u00e9iert Doheem", + "armed_night": "Aktiv\u00e9iert Nuecht", + "arming": "Aktiv\u00e9ieren", + "disarmed": "Desaktiv\u00e9iert", + "disarming": "Desaktiv\u00e9ieren", + "pending": "Ustoend", + "triggered": "Ausgel\u00e9ist" + } + }, + "title": "Kontroll Feld Alarm" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/lt.json b/homeassistant/components/alarm_control_panel/translations/lt.json new file mode 100644 index 00000000000..c8a44246004 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/lt.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "armed": "U\u017erakinta", + "armed_home": "Nam\u0173 apsauga \u012fjungta", + "arming": "Saugojimo re\u017eimo \u012fjungimas", + "disarmed": "Atrakinta", + "disarming": "Saugojimo re\u017eimo i\u0161jungimas", + "pending": "Laukiama", + "triggered": "Aktyvinta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/lv.json b/homeassistant/components/alarm_control_panel/translations/lv.json new file mode 100644 index 00000000000..e77f05f4812 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/lv.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Piesl\u0113gta", + "armed_away": "Piesl\u0113gta uz promb\u016btni", + "armed_custom_bypass": "Piesl\u0113gts piel\u0101gots apvedce\u013c\u0161", + "armed_home": "Piesl\u0113gta m\u0101j\u0101s", + "armed_night": "Piesl\u0113gta uz nakti", + "arming": "Piesl\u0113dzas", + "disarmed": "Atsl\u0113gta", + "disarming": "Atsl\u0113dzas", + "pending": "Gaida", + "triggered": "Aktiviz\u0113ta" + } + }, + "title": "Signaliz\u0101cijas vad\u012bbas panelis" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/nb.json b/homeassistant/components/alarm_control_panel/translations/nb.json new file mode 100644 index 00000000000..ec2e8b92e1e --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/nb.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Armert", + "armed_away": "Armert borte", + "armed_custom_bypass": "Armert tilpasset unntak", + "armed_home": "Armert hjemme", + "armed_night": "Armert natt", + "arming": "Armerer", + "disarmed": "Avsl\u00e5tt", + "disarming": "Skrur av", + "pending": "Venter", + "triggered": "Utl\u00f8st" + } + }, + "title": "Alarm kontrollpanel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/nl.json b/homeassistant/components/alarm_control_panel/translations/nl.json new file mode 100644 index 00000000000..a1a00e7c9e3 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/nl.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Inschakelen {entity_name} afwezig", + "arm_home": "Inschakelen {entity_name} thuis", + "arm_night": "Inschakelen {entity_name} nacht", + "disarm": "Uitschakelen {entity_name}", + "trigger": "Trigger {entity_name}" + }, + "trigger_type": { + "armed_away": "{entity_name} afwezig ingeschakeld", + "armed_home": "{entity_name} thuis ingeschakeld", + "armed_night": "{entity_name} nachtstand ingeschakeld", + "disarmed": "{entity_name} uitgeschakeld", + "triggered": "{entity_name} geactiveerd" + } + }, + "state": { + "_": { + "armed": "Ingeschakeld", + "armed_away": "Ingeschakeld afwezig", + "armed_custom_bypass": "Ingeschakeld met overbrugging(en)", + "armed_home": "Ingeschakeld thuis", + "armed_night": "Ingeschakeld nacht", + "arming": "Schakelt in", + "disarmed": "Uitgeschakeld", + "disarming": "Schakelt uit", + "pending": "In wacht", + "triggered": "Geactiveerd" + } + }, + "title": "Alarm bedieningspaneel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/nn.json b/homeassistant/components/alarm_control_panel/translations/nn.json new file mode 100644 index 00000000000..f8932a995b9 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/nn.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "P\u00e5sl\u00e5tt", + "armed_away": "P\u00e5 for borte", + "armed_custom_bypass": "Armert tilpassa unntak", + "armed_home": "P\u00e5 for heime", + "armed_night": "P\u00e5 for natta", + "arming": "Skrur p\u00e5", + "disarmed": "Avsl\u00e5tt", + "disarming": "Skrur av", + "pending": "I vente av", + "triggered": "Utl\u00f8yst" + } + }, + "title": "Alarmkontrollpanel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/no.json b/homeassistant/components/alarm_control_panel/translations/no.json new file mode 100644 index 00000000000..d26d7d0b181 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/no.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Aktiver {entity_name} borte", + "arm_home": "Aktiver {entity_name} hjemme", + "arm_night": "Aktiver {entity_name} natt", + "disarm": "Deaktiver {entity_name}", + "trigger": "Utl\u00f8ser {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} aktivert borte", + "is_armed_home": "{entity_name} aktivert hjemme", + "is_armed_night": "{entity_name} aktivert natt", + "is_disarmed": "{entity_name} er deaktivert", + "is_triggered": "{entity_name} er utl\u00f8st" + }, + "trigger_type": { + "armed_away": "{entity_name} aktivert borte", + "armed_home": "{entity_name} aktivert hjemme", + "armed_night": "{entity_name} aktivert natt", + "disarmed": "{entity_name} deaktivert", + "triggered": "{entity_name} utl\u00f8st" + } + }, + "state": { + "_": { + "armed": "Armert", + "armed_away": "Armert borte", + "armed_custom_bypass": "Armert tilpasset unntak", + "armed_home": "Armert hjemme", + "armed_night": "Armert natt", + "arming": "Armerer", + "disarmed": "Avsl\u00e5tt", + "disarming": "Disarmer", + "pending": "Ventende", + "triggered": "Utl\u00f8st" + } + }, + "title": "Alarm kontrollpanel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/pl.json b/homeassistant/components/alarm_control_panel/translations/pl.json new file mode 100644 index 00000000000..ca61dc870ea --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/pl.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "uzbr\u00f3j (poza domem) {entity_name}", + "arm_home": "uzbr\u00f3j (w domu) {entity_name}", + "arm_night": "uzbr\u00f3j (noc) {entity_name}", + "disarm": "rozbr\u00f3j {entity_name}", + "trigger": "wyzw\u00f3l {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} jest uzbrojony (poza domem)", + "is_armed_home": "{entity_name} jest uzbrojony (w domu)", + "is_armed_night": "{entity_name} jest uzbrojony (noc)", + "is_disarmed": "{entity_name} jest rozbrojony", + "is_triggered": "{entity_name} jest wyzwolony" + }, + "trigger_type": { + "armed_away": "{entity_name} zostanie uzbrojony (poza domem)", + "armed_home": "{entity_name} zostanie uzbrojony (w domu)", + "armed_night": "{entity_name} zostanie uzbrojony (noc)", + "disarmed": "{entity_name} zostanie rozbrojony", + "triggered": "{entity_name} zostanie wyzwolony" + } + }, + "state": { + "_": { + "armed": "uzbrojony", + "armed_away": "uzbrojony (poza domem)", + "armed_custom_bypass": "uzbrojony (cz\u0119\u015bciowo)", + "armed_home": "uzbrojony (w domu)", + "armed_night": "uzbrojony (noc)", + "arming": "uzbrajanie", + "disarmed": "rozbrojony", + "disarming": "rozbrajanie", + "pending": "oczekuje", + "triggered": "wyzwolony" + } + }, + "title": "Panel kontrolny alarmu" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/pt-BR.json b/homeassistant/components/alarm_control_panel/translations/pt-BR.json new file mode 100644 index 00000000000..a056e1f4187 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/pt-BR.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Armar {entity_name} longe", + "arm_home": "Armar {entity_name} casa", + "arm_night": "Armar {entity_name} noite", + "disarm": "Desarmar {entity_name}", + "trigger": "Disparar {entidade_nome}" + }, + "trigger_type": { + "armed_away": "{entity_name} armado modo longe", + "armed_home": "{entity_name} armadado modo casa", + "armed_night": "{entity_name} armadado para noite", + "disarmed": "{entity_name} desarmado", + "triggered": "{entity_name} acionado" + } + }, + "state": { + "_": { + "armed": "Armado", + "armed_away": "Armado ausente", + "armed_custom_bypass": "Armado em \u00e1reas espec\u00edficas", + "armed_home": "Armado casa", + "armed_night": "Armado noite", + "arming": "Armando", + "disarmed": "Desarmado", + "disarming": "Desarmando", + "pending": "Pendente", + "triggered": "Acionado" + } + }, + "title": "Painel de controle do alarme" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/pt.json b/homeassistant/components/alarm_control_panel/translations/pt.json new file mode 100644 index 00000000000..e4293b81731 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/pt.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "arm_home": "Armar casa {entity_name}", + "arm_night": "Armar noite {entity_name}", + "disarm": "Desarmar {entity_name}" + } + }, + "state": { + "_": { + "armed": "Armado", + "armed_away": "Armado ausente", + "armed_custom_bypass": "Armado com desvio personalizado", + "armed_home": "Armado Casa", + "armed_night": "Armado noite", + "arming": "A armar", + "disarmed": "Desarmado", + "disarming": "A desarmar", + "pending": "Pendente", + "triggered": "Despoletado" + } + }, + "title": "Painel de controlo do alarme" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ro.json b/homeassistant/components/alarm_control_panel/translations/ro.json new file mode 100644 index 00000000000..57af2d045d3 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ro.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Armat", + "armed_away": "Armat plecat", + "armed_custom_bypass": "Armare personalizat\u0103", + "armed_home": "Armat acas\u0103", + "armed_night": "Armat noaptea", + "arming": "Armare", + "disarmed": "Dezarmat", + "disarming": "Dezarmare", + "pending": "\u00cen a\u0219teptare", + "triggered": "Declan\u0219at" + } + }, + "title": "Panoul de control alarma" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ru.json b/homeassistant/components/alarm_control_panel/translations/ru.json new file mode 100644 index 00000000000..f390f017328 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ru.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u0435 \u0434\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "arm_home": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u0414\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "arm_night": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u043e\u0447\u044c\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "disarm": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0445\u0440\u0430\u043d\u0443 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "trigger": "{entity_name} \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442" + }, + "condition_type": { + "is_armed_away": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u0435 \u0434\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "is_armed_home": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u0414\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "is_armed_night": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u043e\u0447\u044c\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "is_disarmed": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0430 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "is_triggered": "{entity_name} \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442" + }, + "trigger_type": { + "armed_away": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u0435 \u0434\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "armed_home": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u0414\u043e\u043c\u0430\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "armed_night": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u0440\u0430\u043d\u044b \"\u041d\u043e\u0447\u044c\" \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "disarmed": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0430 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 {entity_name}", + "triggered": "{entity_name} \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442" + } + }, + "state": { + "_": { + "armed": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u043e\u0439", + "armed_away": "\u041e\u0445\u0440\u0430\u043d\u0430 (\u043d\u0435 \u0434\u043e\u043c\u0430)", + "armed_custom_bypass": "\u041e\u0445\u0440\u0430\u043d\u0430 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438", + "armed_home": "\u041e\u0445\u0440\u0430\u043d\u0430 (\u0434\u043e\u043c\u0430)", + "armed_night": "\u041e\u0445\u0440\u0430\u043d\u0430 (\u043d\u043e\u0447\u044c)", + "arming": "\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0443", + "disarmed": "\u0421\u043d\u044f\u0442\u043e \u0441 \u043e\u0445\u0440\u0430\u043d\u044b", + "disarming": "\u0421\u043d\u044f\u0442\u0438\u0435 \u0441 \u043e\u0445\u0440\u0430\u043d\u044b", + "pending": "\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0443", + "triggered": "\u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435" + } + }, + "title": "\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/sk.json b/homeassistant/components/alarm_control_panel/translations/sk.json new file mode 100644 index 00000000000..ceff70c00a6 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/sk.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Akt\u00edvny", + "armed_away": "Akt\u00edvny v nepr\u00edtomnosti", + "armed_custom_bypass": "Zak\u00f3dovan\u00e9 prisp\u00f4soben\u00e9 vyl\u00fa\u010denie", + "armed_home": "Akt\u00edvny doma", + "armed_night": "Akt\u00edvny v noci", + "arming": "Aktivuje sa", + "disarmed": "Neakt\u00edvny", + "disarming": "Deaktivuje sa", + "pending": "\u010cak\u00e1 sa", + "triggered": "Spusten\u00fd" + } + }, + "title": "Ovl\u00e1dac\u00ed panel alarmu" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/sl.json b/homeassistant/components/alarm_control_panel/translations/sl.json new file mode 100644 index 00000000000..6ccef2cead6 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/sl.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Vklju\u010di {entity_name} zdoma", + "arm_home": "Vklju\u010di {entity_name} doma", + "arm_night": "Vklju\u010di {entity_name} no\u010d", + "disarm": "Razoro\u017ei {entity_name}", + "trigger": "Spro\u017ei {entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name} je oboro\u017een na \"zdoma\"", + "is_armed_home": "{entity_name} je oboro\u017een na \"dom\"", + "is_armed_night": "{entity_name} je oboro\u017een na \"no\u010d\"", + "is_disarmed": "{entity_name} razoro\u017een", + "is_triggered": "{entity_name} spro\u017een" + }, + "trigger_type": { + "armed_away": "{entity_name} oboro\u017een - zdoma", + "armed_home": "{entity_name} oboro\u017een - dom", + "armed_night": "{entity_name} oboro\u017een - no\u010d", + "disarmed": "{entity_name} razoro\u017een", + "triggered": "{entity_name} spro\u017een" + } + }, + "state": { + "_": { + "armed": "Omogo\u010den", + "armed_away": "Omogo\u010den-zunaj", + "armed_custom_bypass": "Vklopljen izjeme po meri", + "armed_home": "Omogo\u010den-doma", + "armed_night": "Omogo\u010den-no\u010d", + "arming": "Omogo\u010danje", + "disarmed": "Onemogo\u010den", + "disarming": "Onemogo\u010danje", + "pending": "V teku", + "triggered": "Spro\u017een" + } + }, + "title": "Nadzorna plo\u0161\u010da Alarma" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/sv.json b/homeassistant/components/alarm_control_panel/translations/sv.json new file mode 100644 index 00000000000..1f375eb5f1d --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/sv.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "Larma {entity_name} borta", + "arm_home": "Larma {entity_name} hemma", + "arm_night": "Larma {entity_name} natt", + "disarm": "Avlarma {entity_name}", + "trigger": "Utl\u00f6sare {entity_name}" + }, + "trigger_type": { + "armed_away": "{entity_name} larmad borta", + "armed_home": "{entity_name} larmad hemma", + "armed_night": "{entity_name} larmad natt", + "disarmed": "{entity_name} bortkopplad", + "triggered": "{entity_name} utl\u00f6st" + } + }, + "state": { + "_": { + "armed": "Larmat", + "armed_away": "Larmat", + "armed_custom_bypass": "Larm f\u00f6rbikopplat", + "armed_home": "Hemmalarmat", + "armed_night": "Nattlarmat", + "arming": "Tillkopplar", + "disarmed": "Avlarmat", + "disarming": "Fr\u00e5nkopplar", + "pending": "V\u00e4ntande", + "triggered": "Utl\u00f6st" + } + }, + "title": "Larmkontrollpanel" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/ta.json b/homeassistant/components/alarm_control_panel/translations/ta.json new file mode 100644 index 00000000000..731c9815d92 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/ta.json @@ -0,0 +1,16 @@ +{ + "state": { + "_": { + "armed": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b85\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1", + "armed_away": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7", + "armed_custom_bypass": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa \u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf", + "armed_home": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0bae\u0bc1\u0b95\u0baa\u0bcd\u0baa\u0bc1", + "armed_night": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b87\u0bb0\u0bb5\u0bbf\u0bb2\u0bcd", + "arming": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b85\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1", + "disarmed": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b85\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", + "disarming": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bae\u0bcd", + "pending": "\u0ba8\u0bbf\u0bb2\u0bc1\u0bb5\u0bc8\u0baf\u0bbf\u0bb2\u0bcd", + "triggered": "\u0ba4\u0bc2\u0ba3\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/te.json b/homeassistant/components/alarm_control_panel/translations/te.json new file mode 100644 index 00000000000..dd5357238e3 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/te.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c35\u0c41\u0c02\u0c26\u0c3f", + "armed_away": "\u0c07\u0c02\u0c1f \u0c2c\u0c2f\u0c1f \u0c2d\u0c26\u0c4d\u0c30\u0c24", + "armed_custom_bypass": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c15\u0c38\u0c4d\u0c1f\u0c2e\u0c4d \u0c2c\u0c48\u0c2a\u0c3e\u0c38\u0c4d", + "armed_home": "\u0c38\u0c46\u0c15\u0c4d\u0c2f\u0c42\u0c30\u0c3f\u0c1f\u0c40 \u0c38\u0c3f\u0c38\u0c4d\u0c1f\u0c2e\u0c4d \u0c06\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f", + "armed_night": "\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f \u0c2a\u0c42\u0c1f \u0c2d\u0c26\u0c4d\u0c30\u0c24", + "arming": "\u0c2d\u0c26\u0c4d\u0c30\u0c3f\u0c02\u0c1a\u0c41\u0c1f", + "disarmed": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c32\u0c47\u0c26\u0c41", + "disarming": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c24\u0c40\u0c38\u0c3f\u0c35\u0c47\u0c2f\u0c41\u0c1f", + "pending": "\u0c2a\u0c46\u0c02\u0c21\u0c3f\u0c02\u0c17\u0c4d", + "triggered": "\u0c0a\u0c2a\u0c02\u0c26\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f" + } + }, + "title": "\u0c05\u0c32\u0c3e\u0c30\u0c02 \u0c28\u0c3f\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c23 \u0c2a\u0c4d\u0c2f\u0c3e\u0c28\u0c46\u0c32\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/th.json b/homeassistant/components/alarm_control_panel/translations/th.json new file mode 100644 index 00000000000..ada983bba16 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/th.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19", + "armed_away": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19-\u0e42\u0e2b\u0e21\u0e14\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19", + "armed_custom_bypass": "\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e42\u0e14\u0e22\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07", + "armed_home": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19-\u0e42\u0e2b\u0e21\u0e14\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19", + "armed_night": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19-\u0e42\u0e2b\u0e21\u0e14\u0e01\u0e25\u0e32\u0e07\u0e04\u0e37\u0e19", + "arming": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19", + "disarmed": "\u0e1b\u0e25\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19", + "disarming": "\u0e1b\u0e25\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19", + "pending": "\u0e04\u0e49\u0e32\u0e07\u0e2d\u0e22\u0e39\u0e48", + "triggered": "\u0e16\u0e39\u0e01\u0e01\u0e23\u0e30\u0e15\u0e38\u0e49\u0e19" + } + }, + "title": "\u0e41\u0e1c\u0e07\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e20\u0e31\u0e22" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/tr.json b/homeassistant/components/alarm_control_panel/translations/tr.json new file mode 100644 index 00000000000..e352755fdf3 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/tr.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "Etkin", + "armed_away": "Etkin d\u0131\u015far\u0131da", + "armed_custom_bypass": "\u00d6zel alarm atlatmas\u0131", + "armed_home": "Etkin evde", + "armed_night": "Etkin gece", + "arming": "Etkinle\u015fiyor", + "disarmed": "Etkisiz", + "disarming": "Etkisizle\u015ftiriliyor", + "pending": "Beklemede", + "triggered": "Tetiklendi" + } + }, + "title": "Alarm kontrol paneli" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/uk.json b/homeassistant/components/alarm_control_panel/translations/uk.json new file mode 100644 index 00000000000..e618e297019 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/uk.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430", + "armed_away": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 (\u043d\u0435 \u0432\u0434\u043e\u043c\u0430)", + "armed_custom_bypass": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 \u0437 \u0432\u0438\u043d\u044f\u0442\u043a\u0430\u043c\u0438", + "armed_home": "\u0411\u0443\u0434\u0438\u043d\u043a\u043e\u0432\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0430", + "armed_night": "\u041d\u0456\u0447\u043d\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0430", + "arming": "\u0421\u0442\u0430\u0432\u043b\u044e \u043d\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0443", + "disarmed": "\u0417\u043d\u044f\u0442\u043e", + "disarming": "\u0417\u043d\u044f\u0442\u0442\u044f", + "pending": "\u041e\u0447\u0456\u043a\u0443\u044e", + "triggered": "\u0422\u0440\u0438\u0432\u043e\u0433\u0430" + } + }, + "title": "\u041f\u0430\u043d\u0435\u043b\u044c \u043a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u0454\u044e" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/vi.json b/homeassistant/components/alarm_control_panel/translations/vi.json new file mode 100644 index 00000000000..3a0fb34950b --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/vi.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "K\u00edch ho\u1ea1t an ninh", + "armed_away": "B\u1ea3o v\u1ec7 \u0111i v\u1eafng", + "armed_custom_bypass": "T\u00f9y ch\u1ec9nh b\u1ecf qua An ninh", + "armed_home": "B\u1ea3o v\u1ec7 \u1edf nh\u00e0", + "armed_night": "Ban \u0111\u00eam", + "arming": "K\u00edch ho\u1ea1t", + "disarmed": "V\u00f4 hi\u1ec7u h\u00f3a", + "disarming": "Gi\u1ea3i gi\u00e1p", + "pending": "\u0110ang ch\u1edd x\u1eed l\u00fd", + "triggered": "K\u00edch ho\u1ea1t" + } + }, + "title": "B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n an ninh" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/zh-Hans.json b/homeassistant/components/alarm_control_panel/translations/zh-Hans.json new file mode 100644 index 00000000000..749674e8e6e --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "armed": "\u8b66\u6212", + "armed_away": "\u79bb\u5bb6\u8b66\u6212", + "armed_custom_bypass": "\u81ea\u5b9a\u4e49\u533a\u57df\u8b66\u6212", + "armed_home": "\u5728\u5bb6\u8b66\u6212", + "armed_night": "\u591c\u95f4\u8b66\u6212", + "arming": "\u8b66\u6212\u4e2d", + "disarmed": "\u8b66\u6212\u89e3\u9664", + "disarming": "\u8b66\u6212\u89e3\u9664", + "pending": "\u6302\u8d77", + "triggered": "\u5df2\u89e6\u53d1" + } + }, + "title": "\u8b66\u62a5\u63a7\u5236\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/alarm_control_panel/translations/zh-Hant.json b/homeassistant/components/alarm_control_panel/translations/zh-Hant.json new file mode 100644 index 00000000000..2dac00f9990 --- /dev/null +++ b/homeassistant/components/alarm_control_panel/translations/zh-Hant.json @@ -0,0 +1,40 @@ +{ + "device_automation": { + "action_type": { + "arm_away": "\u8a2d\u5b9a{entity_name}\u5916\u51fa\u6a21\u5f0f", + "arm_home": "\u8a2d\u5b9a{entity_name}\u8fd4\u5bb6\u6a21\u5f0f", + "arm_night": "\u8a2d\u5b9a{entity_name}\u591c\u9593\u6a21\u5f0f", + "disarm": "\u89e3\u9664{entity_name}", + "trigger": "\u89f8\u767c{entity_name}" + }, + "condition_type": { + "is_armed_away": "{entity_name}\u8a2d\u5b9a\u5916\u51fa", + "is_armed_home": "{entity_name}\u8a2d\u5b9a\u5728\u5bb6", + "is_armed_night": "{entity_name}\u8a2d\u5b9a\u591c\u9593", + "is_disarmed": "{entity_name}\u5df2\u89e3\u9664", + "is_triggered": "{entity_name}\u5df2\u89f8\u767c" + }, + "trigger_type": { + "armed_away": "{entity_name}\u8a2d\u5b9a\u5916\u51fa", + "armed_home": "{entity_name}\u8a2d\u5b9a\u5728\u5bb6", + "armed_night": "{entity_name}\u8a2d\u5b9a\u591c\u9593", + "disarmed": "{entity_name}\u5df2\u89e3\u9664", + "triggered": "{entity_name}\u5df2\u89f8\u767c" + } + }, + "state": { + "_": { + "armed": "\u5df2\u8b66\u6212", + "armed_away": "\u96e2\u5bb6\u8b66\u6212", + "armed_custom_bypass": "\u8b66\u6212\u6a21\u5f0f\u72c0\u614b", + "armed_home": "\u5728\u5bb6\u8b66\u6212", + "armed_night": "\u591c\u9593\u8b66\u6212", + "arming": "\u8b66\u6212\u4e2d", + "disarmed": "\u8b66\u6212\u89e3\u9664", + "disarming": "\u89e3\u9664\u4e2d", + "pending": "\u7b49\u5f85\u4e2d", + "triggered": "\u5df2\u89f8\u767c" + } + }, + "title": "\u8b66\u6212\u63a7\u5236\u9762\u677f" +} \ No newline at end of file diff --git a/homeassistant/components/alarmdecoder/__init__.py b/homeassistant/components/alarmdecoder/__init__.py index 5e143fcca81..c70bcdcc45c 100644 --- a/homeassistant/components/alarmdecoder/__init__.py +++ b/homeassistant/components/alarmdecoder/__init__.py @@ -187,12 +187,12 @@ def setup(hass, config): controller = False if device_type == "socket": - host = device.get(CONF_HOST) - port = device.get(CONF_DEVICE_PORT) + host = device[CONF_HOST] + port = device[CONF_DEVICE_PORT] controller = AlarmDecoder(SocketDevice(interface=(host, port))) elif device_type == "serial": - path = device.get(CONF_DEVICE_PATH) - baud = device.get(CONF_DEVICE_BAUD) + path = device[CONF_DEVICE_PATH] + baud = device[CONF_DEVICE_BAUD] controller = AlarmDecoder(SerialDevice(interface=path)) elif device_type == "usb": AlarmDecoder(USBDevice.find()) diff --git a/homeassistant/components/alarmdecoder/alarm_control_panel.py b/homeassistant/components/alarmdecoder/alarm_control_panel.py index 57004191064..5625204c762 100644 --- a/homeassistant/components/alarmdecoder/alarm_control_panel.py +++ b/homeassistant/components/alarmdecoder/alarm_control_panel.py @@ -96,8 +96,10 @@ class AlarmDecoderAlarmPanel(AlarmControlPanel): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_PANEL_MESSAGE, self._message_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_PANEL_MESSAGE, self._message_callback + ) ) def _message_callback(self, message): diff --git a/homeassistant/components/alarmdecoder/binary_sensor.py b/homeassistant/components/alarmdecoder/binary_sensor.py index 13a7913e190..b34c90bc35a 100644 --- a/homeassistant/components/alarmdecoder/binary_sensor.py +++ b/homeassistant/components/alarmdecoder/binary_sensor.py @@ -79,20 +79,28 @@ class AlarmDecoderBinarySensor(BinarySensorDevice): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_ZONE_FAULT, self._fault_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_ZONE_FAULT, self._fault_callback + ) ) - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_ZONE_RESTORE, self._restore_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_ZONE_RESTORE, self._restore_callback + ) ) - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_RFX_MESSAGE, self._rfx_message_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_RFX_MESSAGE, self._rfx_message_callback + ) ) - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_REL_MESSAGE, self._rel_message_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_REL_MESSAGE, self._rel_message_callback + ) ) @property diff --git a/homeassistant/components/alarmdecoder/manifest.json b/homeassistant/components/alarmdecoder/manifest.json index 9824b20db2a..48c5cb824ad 100644 --- a/homeassistant/components/alarmdecoder/manifest.json +++ b/homeassistant/components/alarmdecoder/manifest.json @@ -1,8 +1,7 @@ { - "domain": "alarmdecoder", - "name": "AlarmDecoder", - "documentation": "https://www.home-assistant.io/integrations/alarmdecoder", - "requirements": ["alarmdecoder==1.13.2"], - "dependencies": [], - "codeowners": ["@ajschmidt8"] + "domain": "alarmdecoder", + "name": "AlarmDecoder", + "documentation": "https://www.home-assistant.io/integrations/alarmdecoder", + "requirements": ["alarmdecoder==1.13.2"], + "codeowners": ["@ajschmidt8"] } diff --git a/homeassistant/components/alarmdecoder/sensor.py b/homeassistant/components/alarmdecoder/sensor.py index 196e8d704e1..96e5feb532d 100644 --- a/homeassistant/components/alarmdecoder/sensor.py +++ b/homeassistant/components/alarmdecoder/sensor.py @@ -29,8 +29,10 @@ class AlarmDecoderSensor(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_PANEL_MESSAGE, self._message_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_PANEL_MESSAGE, self._message_callback + ) ) def _message_callback(self, message): diff --git a/homeassistant/components/alarmdecoder/services.yaml b/homeassistant/components/alarmdecoder/services.yaml index 1193f90ff8e..bcf5a927713 100644 --- a/homeassistant/components/alarmdecoder/services.yaml +++ b/homeassistant/components/alarmdecoder/services.yaml @@ -2,8 +2,8 @@ alarm_keypress: description: Send custom keypresses to the alarm. fields: keypress: - description: 'String to send to the alarm panel.' - example: '*71' + description: "String to send to the alarm panel." + example: "*71" alarm_toggle_chime: description: Send the alarm the toggle chime command. diff --git a/homeassistant/components/alert/__init__.py b/homeassistant/components/alert/__init__.py index 9aa3c62e76c..f3b15a7af57 100644 --- a/homeassistant/components/alert/__init__.py +++ b/homeassistant/components/alert/__init__.py @@ -1,5 +1,4 @@ """Support for repeating alerts when conditions are met.""" -import asyncio from datetime import timedelta import logging @@ -80,15 +79,15 @@ async def async_setup(hass, config): if not cfg: cfg = {} - name = cfg.get(CONF_NAME) - watched_entity_id = cfg.get(CONF_ENTITY_ID) - alert_state = cfg.get(CONF_STATE) - repeat = cfg.get(CONF_REPEAT) - skip_first = cfg.get(CONF_SKIP_FIRST) + name = cfg[CONF_NAME] + watched_entity_id = cfg[CONF_ENTITY_ID] + alert_state = cfg[CONF_STATE] + repeat = cfg[CONF_REPEAT] + skip_first = cfg[CONF_SKIP_FIRST] message_template = cfg.get(CONF_ALERT_MESSAGE) done_message_template = cfg.get(CONF_DONE_MESSAGE) - notifiers = cfg.get(CONF_NOTIFIERS) - can_ack = cfg.get(CONF_CAN_ACK) + notifiers = cfg[CONF_NOTIFIERS] + can_ack = cfg[CONF_CAN_ACK] title_template = cfg.get(CONF_TITLE) data = cfg.get(CONF_DATA) @@ -144,9 +143,8 @@ async def async_setup(hass, config): DOMAIN, SERVICE_TOGGLE, async_handle_alert_service, schema=ALERT_SERVICE_SCHEMA ) - tasks = [alert.async_update_ha_state() for alert in entities] - if tasks: - await asyncio.wait(tasks) + for alert in entities: + alert.async_write_ha_state() return True @@ -249,7 +247,7 @@ class Alert(ToggleEntity): else: await self._schedule_notify() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def end_alerting(self): """End the alert procedures.""" @@ -259,7 +257,7 @@ class Alert(ToggleEntity): self._firing = False if self._send_done_message: await self._notify_done_message() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def _schedule_notify(self): """Schedule a notification.""" @@ -318,13 +316,13 @@ class Alert(ToggleEntity): """Async Unacknowledge alert.""" _LOGGER.debug("Reset Alert: %s", self._name) self._ack = False - await self.async_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Async Acknowledge alert.""" _LOGGER.debug("Acknowledged Alert: %s", self._name) self._ack = True - await self.async_update_ha_state() + self.async_write_ha_state() async def async_toggle(self, **kwargs): """Async toggle alert.""" diff --git a/homeassistant/components/alert/manifest.json b/homeassistant/components/alert/manifest.json index 93c88655d34..ff1faf39827 100644 --- a/homeassistant/components/alert/manifest.json +++ b/homeassistant/components/alert/manifest.json @@ -2,8 +2,6 @@ "domain": "alert", "name": "Alert", "documentation": "https://www.home-assistant.io/integrations/alert", - "requirements": [], - "dependencies": [], "after_dependencies": ["notify"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/alert/services.yaml b/homeassistant/components/alert/services.yaml index 1cdd1f02e7e..99530200546 100644 --- a/homeassistant/components/alert/services.yaml +++ b/homeassistant/components/alert/services.yaml @@ -1,12 +1,18 @@ toggle: description: Toggle alert's notifications. fields: - entity_id: {description: Name of the alert to toggle., example: alert.garage_door_open} + entity_id: + description: Name of the alert to toggle. + example: alert.garage_door_open turn_off: description: Silence alert's notifications. fields: - entity_id: {description: Name of the alert to silence., example: alert.garage_door_open} + entity_id: + description: Name of the alert to silence. + example: alert.garage_door_open turn_on: description: Reset alert's notifications. fields: - entity_id: {description: Name of the alert to reset., example: alert.garage_door_open} + entity_id: + description: Name of the alert to reset. + example: alert.garage_door_open diff --git a/homeassistant/components/alexa/auth.py b/homeassistant/components/alexa/auth.py index 94789c33305..3b7984f56d3 100644 --- a/homeassistant/components/alexa/auth.py +++ b/homeassistant/components/alexa/auth.py @@ -7,6 +7,7 @@ import logging import aiohttp import async_timeout +from homeassistant.const import HTTP_OK from homeassistant.core import callback from homeassistant.helpers import aiohttp_client from homeassistant.util import dt @@ -118,7 +119,7 @@ class Auth: _LOGGER.debug("LWA response header: %s", response.headers) _LOGGER.debug("LWA response status: %s", response.status) - if response.status != 200: + if response.status != HTTP_OK: _LOGGER.error("Error calling LWA to get auth token.") return None diff --git a/homeassistant/components/alexa/capabilities.py b/homeassistant/components/alexa/capabilities.py index 63be7df2ead..7451d15eb1c 100644 --- a/homeassistant/components/alexa/capabilities.py +++ b/homeassistant/components/alexa/capabilities.py @@ -734,12 +734,11 @@ class AlexaPlaybackController(AlexaCapability): media_player.SUPPORT_STOP: "Stop", } - supported_operations = [] - for operation in operations: - if operation & supported_features: - supported_operations.append(operations[operation]) - - return supported_operations + return [ + value + for operation, value in operations.items() + if operation & supported_features + ] class AlexaInputController(AlexaCapability): @@ -759,9 +758,7 @@ class AlexaInputController(AlexaCapability): source_list = self.entity.attributes.get( media_player.ATTR_INPUT_SOURCE_LIST, [] ) - input_list = AlexaInputController.get_valid_inputs(source_list) - - return input_list + return AlexaInputController.get_valid_inputs(source_list) @staticmethod def get_valid_inputs(source_list): @@ -1089,7 +1086,7 @@ class AlexaPowerLevelController(AlexaCapability): if self.entity.domain == fan.DOMAIN: speed = self.entity.attributes.get(fan.ATTR_SPEED) - return PERCENTAGE_FAN_MAP.get(speed, None) + return PERCENTAGE_FAN_MAP.get(speed) return None @@ -1829,10 +1826,11 @@ class AlexaEqualizerController(AlexaCapability): configurations = None sound_mode_list = self.entity.attributes.get(media_player.ATTR_SOUND_MODE_LIST) if sound_mode_list: - supported_sound_modes = [] - for sound_mode in sound_mode_list: - if sound_mode.upper() in ("MOVIE", "MUSIC", "NIGHT", "SPORT", "TV"): - supported_sound_modes.append({"name": sound_mode.upper()}) + supported_sound_modes = [ + {"name": sound_mode.upper()} + for sound_mode in sound_mode_list + if sound_mode.upper() in ("MOVIE", "MUSIC", "NIGHT", "SPORT", "TV") + ] configurations = {"modes": {"supported": supported_sound_modes}} @@ -1890,7 +1888,7 @@ class AlexaCameraStreamController(AlexaCapability): def camera_stream_configurations(self): """Return cameraStreamConfigurations object.""" - camera_stream_configurations = [ + return [ { "protocols": ["HLS"], "resolutions": [{"width": 1280, "height": 720}], @@ -1899,4 +1897,3 @@ class AlexaCameraStreamController(AlexaCapability): "audioCodecs": ["AAC"], } ] - return camera_stream_configurations diff --git a/homeassistant/components/alexa/entities.py b/homeassistant/components/alexa/entities.py index d4676344a62..e22c5c62db9 100644 --- a/homeassistant/components/alexa/entities.py +++ b/homeassistant/components/alexa/entities.py @@ -252,7 +252,6 @@ class AlexaEntity: Raises _UnsupportedInterface. """ - pass def interfaces(self): """Return a list of supported interfaces. @@ -268,8 +267,7 @@ class AlexaEntity: if not interface.properties_proactively_reported(): continue - for prop in interface.serialize_properties(): - yield prop + yield from interface.serialize_properties() def serialize_discovery(self): """Serialize the entity for discovery.""" @@ -283,10 +281,12 @@ class AlexaEntity: } locale = self.config.locale - capabilities = [] - for i in self.interfaces(): - if locale in i.supported_locales: - capabilities.append(i.serialize_discovery()) + capabilities = [ + i.serialize_discovery() + for i in self.interfaces() + if locale in i.supported_locales + ] + result["capabilities"] = capabilities return result diff --git a/homeassistant/components/alexa/flash_briefings.py b/homeassistant/components/alexa/flash_briefings.py index 45d31d6088a..1205fd58091 100644 --- a/homeassistant/components/alexa/flash_briefings.py +++ b/homeassistant/components/alexa/flash_briefings.py @@ -4,6 +4,7 @@ import logging import uuid from homeassistant.components import http +from homeassistant.const import HTTP_NOT_FOUND from homeassistant.core import callback from homeassistant.helpers import template import homeassistant.util.dt as dt_util @@ -54,7 +55,7 @@ class AlexaFlashBriefingView(http.HomeAssistantView): if self.flash_briefings.get(briefing_id) is None: err = "No configured Alexa flash briefing was found for: %s" _LOGGER.error(err, briefing_id) - return b"", 404 + return b"", HTTP_NOT_FOUND briefing = [] diff --git a/homeassistant/components/alexa/handlers.py b/homeassistant/components/alexa/handlers.py index b3885588b0f..6b903665c17 100644 --- a/homeassistant/components/alexa/handlers.py +++ b/homeassistant/components/alexa/handlers.py @@ -355,7 +355,6 @@ async def async_api_deactivate(hass, config, directive, context): async def async_api_set_percentage(hass, config, directive, context): """Process a set percentage request.""" entity = directive.entity - percentage = int(directive.payload["percentage"]) service = None data = {ATTR_ENTITY_ID: entity.entity_id} @@ -363,6 +362,7 @@ async def async_api_set_percentage(hass, config, directive, context): service = fan.SERVICE_SET_SPEED speed = "off" + percentage = int(directive.payload["percentage"]) if percentage <= 33: speed = "low" elif percentage <= 66: @@ -568,7 +568,7 @@ async def async_api_adjust_volume_step(hass, config, directive, context): data = {ATTR_ENTITY_ID: entity.entity_id} - for _ in range(0, abs(volume_int)): + for _ in range(abs(volume_int)): await hass.services.async_call( entity.domain, service_volume, data, blocking=False, context=context ) @@ -849,7 +849,6 @@ async def async_api_reportstate(hass, config, directive, context): async def async_api_set_power_level(hass, config, directive, context): """Process a SetPowerLevel request.""" entity = directive.entity - percentage = int(directive.payload["powerLevel"]) service = None data = {ATTR_ENTITY_ID: entity.entity_id} @@ -857,6 +856,7 @@ async def async_api_set_power_level(hass, config, directive, context): service = fan.SERVICE_SET_SPEED speed = "off" + percentage = int(directive.payload["powerLevel"]) if percentage <= 33: speed = "low" elif percentage <= 66: @@ -920,10 +920,10 @@ async def async_api_arm(hass, config, directive, context): if arm_state == "ARMED_AWAY": service = SERVICE_ALARM_ARM_AWAY - if arm_state == "ARMED_STAY": - service = SERVICE_ALARM_ARM_HOME - if arm_state == "ARMED_NIGHT": + elif arm_state == "ARMED_NIGHT": service = SERVICE_ALARM_ARM_NIGHT + elif arm_state == "ARMED_STAY": + service = SERVICE_ALARM_ARM_HOME await hass.services.async_call( entity.domain, service, data, blocking=False, context=context @@ -1383,7 +1383,7 @@ async def async_api_skipchannel(hass, config, directive, context): else: service_media = SERVICE_MEDIA_NEXT_TRACK - for _ in range(0, abs(channel)): + for _ in range(abs(channel)): await hass.services.async_call( entity.domain, service_media, data, blocking=False, context=context ) diff --git a/homeassistant/components/alexa/intent.py b/homeassistant/components/alexa/intent.py index 4cb75c65bc9..f879b66268b 100644 --- a/homeassistant/components/alexa/intent.py +++ b/homeassistant/components/alexa/intent.py @@ -201,7 +201,7 @@ def resolve_slot_synonyms(key, request): _LOGGER.debug( "Found multiple synonym resolutions for slot value: {%s: %s}", key, - request["value"], + resolved_value, ) return resolved_value diff --git a/homeassistant/components/alexa/manifest.json b/homeassistant/components/alexa/manifest.json index d47e5dea96a..6144ccc6870 100644 --- a/homeassistant/components/alexa/manifest.json +++ b/homeassistant/components/alexa/manifest.json @@ -2,7 +2,6 @@ "domain": "alexa", "name": "Amazon Alexa", "documentation": "https://www.home-assistant.io/integrations/alexa", - "requirements": [], "dependencies": ["http"], "after_dependencies": ["logbook", "camera"], "codeowners": ["@home-assistant/cloud", "@ochlocracy"] diff --git a/homeassistant/components/alexa/resources.py b/homeassistant/components/alexa/resources.py index d2580f3bfea..5c02eca4fb2 100644 --- a/homeassistant/components/alexa/resources.py +++ b/homeassistant/components/alexa/resources.py @@ -296,14 +296,13 @@ class AlexaPresetResource(AlexaCapabilityResource): configuration["unitOfMeasure"] = self._unit_of_measure if self._presets: - preset_resources = [] - for preset in self._presets: - preset_resources.append( - { - "rangeValue": preset["value"], - "presetResources": self.serialize_labels(preset["labels"]), - } - ) + preset_resources = [ + { + "rangeValue": preset["value"], + "presetResources": self.serialize_labels(preset["labels"]), + } + for preset in self._presets + ] configuration["presets"] = preset_resources return configuration diff --git a/homeassistant/components/almond/.translations/bg.json b/homeassistant/components/almond/.translations/bg.json deleted file mode 100644 index 3327e34e765..00000000000 --- a/homeassistant/components/almond/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Almond \u0430\u043a\u0430\u0443\u043d\u0442.", - "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Almond \u0441\u044a\u0440\u0432\u044a\u0440\u0430.", - "missing_configuration": "\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u043a\u0430\u043a \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Almond." - }, - "step": { - "pick_implementation": { - "title": "\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/ca.json b/homeassistant/components/almond/.translations/ca.json deleted file mode 100644 index 5cedcfef481..00000000000 --- a/homeassistant/components/almond/.translations/ca.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Almond.", - "cannot_connect": "No es pot connectar amb el servidor d'Almond.", - "missing_configuration": "Consulta la documentaci\u00f3 sobre com configurar Almond." - }, - "step": { - "hassio_confirm": { - "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb Almond proporcionat pel complement de Hass.io: {addon}?", - "title": "Almond (complement de Hass.io)" - }, - "pick_implementation": { - "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/da.json b/homeassistant/components/almond/.translations/da.json deleted file mode 100644 index a752b791988..00000000000 --- a/homeassistant/components/almond/.translations/da.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en Almond-konto.", - "cannot_connect": "Kan ikke oprette forbindelse til Almond-serveren.", - "missing_configuration": "Tjek venligst dokumentationen om, hvordan man indstiller Almond." - }, - "step": { - "hassio_confirm": { - "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til Almond leveret af Hass.io-tilf\u00f8jelsen: {addon}?", - "title": "Almond via Hass.io-tilf\u00f8jelse" - }, - "pick_implementation": { - "title": "V\u00e6lg godkendelsesmetode" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/de.json b/homeassistant/components/almond/.translations/de.json deleted file mode 100644 index 89021793f94..00000000000 --- a/homeassistant/components/almond/.translations/de.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kannst nur ein Almond-Konto konfigurieren.", - "cannot_connect": "Verbindung zum Almond-Server nicht m\u00f6glich.", - "missing_configuration": "Bitte \u00fcberpr\u00fcfe die Dokumentation zur Einrichtung von Almond." - }, - "step": { - "hassio_confirm": { - "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass eine Verbindung mit Almond als Hass.io-Add-On hergestellt wird: {addon}?", - "title": "Almond \u00fcber das Hass.io Add-on" - }, - "pick_implementation": { - "title": "W\u00e4hle die Authentifizierungsmethode" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/en.json b/homeassistant/components/almond/.translations/en.json deleted file mode 100644 index 96638ef08fb..00000000000 --- a/homeassistant/components/almond/.translations/en.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure one Almond account.", - "cannot_connect": "Unable to connect to the Almond server.", - "missing_configuration": "Please check the documentation on how to set up Almond." - }, - "step": { - "hassio_confirm": { - "description": "Do you want to configure Home Assistant to connect to Almond provided by the Hass.io add-on: {addon}?", - "title": "Almond via Hass.io add-on" - }, - "pick_implementation": { - "title": "Pick Authentication Method" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/es.json b/homeassistant/components/almond/.translations/es.json deleted file mode 100644 index 41e1fad4126..00000000000 --- a/homeassistant/components/almond/.translations/es.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3lo puede configurar una cuenta de Almond.", - "cannot_connect": "No se puede conectar al servidor Almond.", - "missing_configuration": "Consulte la documentaci\u00f3n sobre c\u00f3mo configurar Almond." - }, - "step": { - "hassio_confirm": { - "description": "\u00bfDesea configurar Home Assistant para conectarse a Almond proporcionado por el complemento Hass.io: {addon} ?", - "title": "Almond a trav\u00e9s del complemento Hass.io" - }, - "pick_implementation": { - "title": "Seleccione el m\u00e9todo de autenticaci\u00f3n" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/fr.json b/homeassistant/components/almond/.translations/fr.json deleted file mode 100644 index 30a4cbec6bd..00000000000 --- a/homeassistant/components/almond/.translations/fr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Almond", - "cannot_connect": "Impossible de se connecter au serveur Almond", - "missing_configuration": "Veuillez consulter la documentation pour savoir comment configurer Almond." - }, - "step": { - "hassio_confirm": { - "description": "Voulez-vous configurer Home Assistant pour se connecter \u00e0 Almond fourni par le module compl\u00e9mentaire Hass.io: {addon} ?", - "title": "Almonf via le module compl\u00e9mentaire Hass.io" - }, - "pick_implementation": { - "title": "S\u00e9lectionner une m\u00e9thode d'authentification" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/hu.json b/homeassistant/components/almond/.translations/hu.json deleted file mode 100644 index 2331e57c6eb..00000000000 --- a/homeassistant/components/almond/.translations/hu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Csak egy Almond fi\u00f3kot konfigur\u00e1lhat.", - "cannot_connect": "Nem lehet csatlakozni az Almond szerverhez.", - "missing_configuration": "K\u00e9rj\u00fck, ellen\u0151rizze az Almond be\u00e1ll\u00edt\u00e1s\u00e1nak dokument\u00e1ci\u00f3j\u00e1t." - }, - "step": { - "hassio_confirm": { - "description": "Be szeretn\u00e9 \u00e1ll\u00edtani a Home Assistant alkalmaz\u00e1st az Almondhoz val\u00f3 csatlakoz\u00e1shoz, amelyet a Hass.io kieg\u00e9sz\u00edt\u0151 biztos\u00edt: {addon} ?", - "title": "Almond a Hass.io kieg\u00e9sz\u00edt\u0151n kereszt\u00fcl" - }, - "pick_implementation": { - "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/it.json b/homeassistant/components/almond/.translations/it.json deleted file mode 100644 index dd722907c6a..00000000000 --- a/homeassistant/components/almond/.translations/it.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account Almond.", - "cannot_connect": "Impossibile connettersi al server Almond.", - "missing_configuration": "Si prega di controllare la documentazione su come impostare Almond." - }, - "step": { - "hassio_confirm": { - "description": "Vuoi configurare Home Assistant a connettersi ad Almond tramite il componente aggiuntivo Hass.io: {addon} ?", - "title": "Almond tramite il componente aggiuntivo di Hass.io" - }, - "pick_implementation": { - "title": "Seleziona metodo di autenticazione" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/ko.json b/homeassistant/components/almond/.translations/ko.json deleted file mode 100644 index ec484ffc0d4..00000000000 --- a/homeassistant/components/almond/.translations/ko.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "step": { - "hassio_confirm": { - "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc73c\ub85c Almond \uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Hass.io \uc560\ub4dc\uc628\uc758 Almond" - }, - "pick_implementation": { - "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/lb.json b/homeassistant/components/almond/.translations/lb.json deleted file mode 100644 index b47ddca4a26..00000000000 --- a/homeassistant/components/almond/.translations/lb.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Almond Kont konfigur\u00e9ieren.", - "cannot_connect": "Kann sech net mam Almond Server verbannen.", - "missing_configuration": "Kuckt w.e.g. Dokumentatioun iwwert d'ariichten vun Almond." - }, - "step": { - "hassio_confirm": { - "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mam Almond ze verbannen dee vun der hass.io Erweiderung {addon} bereet gestallt g\u00ebtt?", - "title": "Almond via Hass.io Erweiderung" - }, - "pick_implementation": { - "title": "Wielt Authentifikatiouns Method aus" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/nl.json b/homeassistant/components/almond/.translations/nl.json deleted file mode 100644 index 939a9a904ad..00000000000 --- a/homeassistant/components/almond/.translations/nl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n Almond-account configureren.", - "cannot_connect": "Kan geen verbinding maken met de Almond-server.", - "missing_configuration": "Raadpleeg de documentatie over het instellen van Almond." - }, - "step": { - "hassio_confirm": { - "description": "Wilt u Home Assistant configureren om verbinding te maken met Almond die wordt aangeboden door de hass.io add-on {addon} ?", - "title": "Almond via Hass.io add-on" - }, - "pick_implementation": { - "title": "Kies de authenticatie methode" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/nn.json b/homeassistant/components/almond/.translations/nn.json deleted file mode 100644 index a25f5dc1574..00000000000 --- a/homeassistant/components/almond/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/no.json b/homeassistant/components/almond/.translations/no.json deleted file mode 100644 index 63e1d99f7a9..00000000000 --- a/homeassistant/components/almond/.translations/no.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bare konfigurere en Almond konto.", - "cannot_connect": "Kan ikke koble til Almond-serveren.", - "missing_configuration": "Vennligst sjekk dokumentasjonen om hvordan du setter opp Almond." - }, - "step": { - "hassio_confirm": { - "description": "Vil du konfigurere Home Assistant til \u00e5 koble til Almond levert av Hass.io add-on: {addon}?", - "title": "Almond via Hass.io add-on" - }, - "pick_implementation": { - "title": "Velg autentiseringsmetode" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/pl.json b/homeassistant/components/almond/.translations/pl.json deleted file mode 100644 index dc5717539a6..00000000000 --- a/homeassistant/components/almond/.translations/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Almond.", - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z serwerem Almond.", - "missing_configuration": "Prosz\u0119 zapozna\u0107 si\u0119 z dokumentacj\u0105 konfiguracji Almond." - }, - "step": { - "hassio_confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Home Assistant'a, aby \u0142\u0105czy\u0142 si\u0119 z Almond dostarczonym przez dodatek Hass.io: {addon}?", - "title": "Almond poprzez dodatek Hass.io" - }, - "pick_implementation": { - "title": "Wybierz metod\u0119 uwierzytelniania" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/pt.json b/homeassistant/components/almond/.translations/pt.json deleted file mode 100644 index 720400e72a5..00000000000 --- a/homeassistant/components/almond/.translations/pt.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "pick_implementation": { - "title": "Escolha o m\u00e9todo de autentica\u00e7\u00e3o" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/ru.json b/homeassistant/components/almond/.translations/ru.json deleted file mode 100644 index 02162980894..00000000000 --- a/homeassistant/components/almond/.translations/ru.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 Almond.", - "missing_configuration": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Almond." - }, - "step": { - "hassio_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Almond (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", - "title": "Almond (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" - }, - "pick_implementation": { - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/sl.json b/homeassistant/components/almond/.translations/sl.json deleted file mode 100644 index 4a593cc5605..00000000000 --- a/homeassistant/components/almond/.translations/sl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Konfigurirate lahko samo en ra\u010dun Almond.", - "cannot_connect": "Ni mogo\u010de vzpostaviti povezave s stre\u017enikom Almond.", - "missing_configuration": "Prosimo, preverite dokumentacijo o tem, kako nastaviti Almond." - }, - "step": { - "hassio_confirm": { - "description": "Ali \u017eelite konfigurirati Home Assistant za povezavo z Almondom, ki ga ponuja dodatek Hass.io: {addon} ?", - "title": "Almond prek dodatka Hass.io" - }, - "pick_implementation": { - "title": "Izberite na\u010din preverjanja pristnosti" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/sv.json b/homeassistant/components/almond/.translations/sv.json deleted file mode 100644 index d2630b95c02..00000000000 --- a/homeassistant/components/almond/.translations/sv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bara konfigurera ett Almond-konto.", - "cannot_connect": "Det g\u00e5r inte att ansluta till Almond-servern.", - "missing_configuration": "Kontrollera dokumentationen f\u00f6r hur du st\u00e4ller in Almond." - }, - "step": { - "hassio_confirm": { - "description": "Vill du konfigurera Home Assistant f\u00f6r att ansluta till Almond som tillhandah\u00e5lls av Hass.io-till\u00e4gget: {addon} ?", - "title": "Almond via Hass.io-till\u00e4gget" - }, - "pick_implementation": { - "title": "V\u00e4lj autentiseringsmetod" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/zh-Hant.json b/homeassistant/components/almond/.translations/zh-Hant.json deleted file mode 100644 index 9522e350eea..00000000000 --- a/homeassistant/components/almond/.translations/zh-Hant.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Almond \u5e33\u865f\u3002", - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Almond \u4f3a\u670d\u5668\u3002", - "missing_configuration": "\u8acb\u53c3\u8003\u76f8\u95dc\u6587\u4ef6\u4ee5\u4e86\u89e3\u5982\u4f55\u8a2d\u5b9a Almond\u3002" - }, - "step": { - "hassio_confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6\uff1a{addon} \u9023\u7dda\u81f3 Almond\uff1f", - "title": "\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6 Almond" - }, - "pick_implementation": { - "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" - } - }, - "title": "Almond" - } -} \ No newline at end of file diff --git a/homeassistant/components/almond/__init__.py b/homeassistant/components/almond/__init__.py index 8877107b984..58fada7a196 100644 --- a/homeassistant/components/almond/__init__.py +++ b/homeassistant/components/almond/__init__.py @@ -286,15 +286,13 @@ class AlmondAgent(conversation.AbstractConversationAgent): buffer = "" for message in response["messages"]: if message["type"] == "text": - buffer += "\n" + message["text"] + buffer += f"\n{message['text']}" elif message["type"] == "picture": - buffer += "\n Picture: " + message["url"] + buffer += f"\n Picture: {message['url']}" elif message["type"] == "rdl": buffer += ( - "\n Link: " - + message["rdl"]["displayTitle"] - + " " - + message["rdl"]["webCallback"] + f"\n Link: {message['rdl']['displayTitle']} " + f"{message['rdl']['webCallback']}" ) elif message["type"] == "choice": if first_choice: diff --git a/homeassistant/components/almond/strings.json b/homeassistant/components/almond/strings.json index 2ae4e632d6b..008d21c463b 100644 --- a/homeassistant/components/almond/strings.json +++ b/homeassistant/components/almond/strings.json @@ -1,9 +1,7 @@ { "config": { "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - }, + "pick_implementation": { "title": "Pick Authentication Method" }, "hassio_confirm": { "title": "Almond via Hass.io add-on", "description": "Do you want to configure Home Assistant to connect to Almond provided by the Hass.io add-on: {addon}?" @@ -13,7 +11,6 @@ "already_setup": "You can only configure one Almond account.", "cannot_connect": "Unable to connect to the Almond server.", "missing_configuration": "Please check the documentation on how to set up Almond." - }, - "title": "Almond" + } } } diff --git a/homeassistant/components/almond/translations/bg.json b/homeassistant/components/almond/translations/bg.json new file mode 100644 index 00000000000..c2bcab535f3 --- /dev/null +++ b/homeassistant/components/almond/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Almond \u0430\u043a\u0430\u0443\u043d\u0442.", + "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Almond \u0441\u044a\u0440\u0432\u044a\u0440\u0430.", + "missing_configuration": "\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u043a\u0430\u043a \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Almond." + }, + "step": { + "pick_implementation": { + "title": "\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/ca.json b/homeassistant/components/almond/translations/ca.json new file mode 100644 index 00000000000..8747f1ed7df --- /dev/null +++ b/homeassistant/components/almond/translations/ca.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Almond.", + "cannot_connect": "No es pot connectar amb el servidor d'Almond.", + "missing_configuration": "Consulta la documentaci\u00f3 sobre com configurar Almond." + }, + "step": { + "hassio_confirm": { + "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb Almond proporcionat pel complement de Hass.io: {addon}?", + "title": "Almond (complement de Hass.io)" + }, + "pick_implementation": { + "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/cs.json b/homeassistant/components/almond/translations/cs.json similarity index 100% rename from homeassistant/components/almond/.translations/cs.json rename to homeassistant/components/almond/translations/cs.json diff --git a/homeassistant/components/almond/translations/da.json b/homeassistant/components/almond/translations/da.json new file mode 100644 index 00000000000..9ce415cf8f9 --- /dev/null +++ b/homeassistant/components/almond/translations/da.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en Almond-konto.", + "cannot_connect": "Kan ikke oprette forbindelse til Almond-serveren.", + "missing_configuration": "Tjek venligst dokumentationen om, hvordan man indstiller Almond." + }, + "step": { + "hassio_confirm": { + "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til Almond leveret af Hass.io-tilf\u00f8jelsen: {addon}?", + "title": "Almond via Hass.io-tilf\u00f8jelse" + }, + "pick_implementation": { + "title": "V\u00e6lg godkendelsesmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/de.json b/homeassistant/components/almond/translations/de.json new file mode 100644 index 00000000000..d90bbc9154f --- /dev/null +++ b/homeassistant/components/almond/translations/de.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Du kannst nur ein Almond-Konto konfigurieren.", + "cannot_connect": "Verbindung zum Almond-Server nicht m\u00f6glich.", + "missing_configuration": "Bitte \u00fcberpr\u00fcfe die Dokumentation zur Einrichtung von Almond." + }, + "step": { + "hassio_confirm": { + "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass eine Verbindung mit Almond als Hass.io-Add-On hergestellt wird: {addon}?", + "title": "Almond \u00fcber das Hass.io Add-on" + }, + "pick_implementation": { + "title": "W\u00e4hle die Authentifizierungsmethode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/en.json b/homeassistant/components/almond/translations/en.json new file mode 100644 index 00000000000..2a587d46403 --- /dev/null +++ b/homeassistant/components/almond/translations/en.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure one Almond account.", + "cannot_connect": "Unable to connect to the Almond server.", + "missing_configuration": "Please check the documentation on how to set up Almond." + }, + "step": { + "hassio_confirm": { + "description": "Do you want to configure Home Assistant to connect to Almond provided by the Hass.io add-on: {addon}?", + "title": "Almond via Hass.io add-on" + }, + "pick_implementation": { + "title": "Pick Authentication Method" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/es-419.json b/homeassistant/components/almond/translations/es-419.json new file mode 100644 index 00000000000..7b7f7aea9ca --- /dev/null +++ b/homeassistant/components/almond/translations/es-419.json @@ -0,0 +1,8 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puede configurar una cuenta Almond.", + "cannot_connect": "No se puede conectar con el servidor Almond." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/es.json b/homeassistant/components/almond/translations/es.json new file mode 100644 index 00000000000..de9fb58eabd --- /dev/null +++ b/homeassistant/components/almond/translations/es.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3lo puede configurar una cuenta de Almond.", + "cannot_connect": "No se puede conectar al servidor Almond.", + "missing_configuration": "Consulte la documentaci\u00f3n sobre c\u00f3mo configurar Almond." + }, + "step": { + "hassio_confirm": { + "description": "\u00bfDesea configurar Home Assistant para conectarse a Almond proporcionado por el complemento Hass.io: {addon} ?", + "title": "Almond a trav\u00e9s del complemento Hass.io" + }, + "pick_implementation": { + "title": "Seleccione el m\u00e9todo de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/fr.json b/homeassistant/components/almond/translations/fr.json new file mode 100644 index 00000000000..f39a1660bb9 --- /dev/null +++ b/homeassistant/components/almond/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Almond", + "cannot_connect": "Impossible de se connecter au serveur Almond", + "missing_configuration": "Veuillez consulter la documentation pour savoir comment configurer Almond." + }, + "step": { + "hassio_confirm": { + "description": "Voulez-vous configurer Home Assistant pour se connecter \u00e0 Almond fourni par le module compl\u00e9mentaire Hass.io: {addon} ?", + "title": "Almonf via le module compl\u00e9mentaire Hass.io" + }, + "pick_implementation": { + "title": "S\u00e9lectionner une m\u00e9thode d'authentification" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/hu.json b/homeassistant/components/almond/translations/hu.json new file mode 100644 index 00000000000..2f9be096d79 --- /dev/null +++ b/homeassistant/components/almond/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Csak egy Almond fi\u00f3kot konfigur\u00e1lhat.", + "cannot_connect": "Nem lehet csatlakozni az Almond szerverhez.", + "missing_configuration": "K\u00e9rj\u00fck, ellen\u0151rizze az Almond be\u00e1ll\u00edt\u00e1s\u00e1nak dokument\u00e1ci\u00f3j\u00e1t." + }, + "step": { + "hassio_confirm": { + "description": "Be szeretn\u00e9 \u00e1ll\u00edtani a Home Assistant alkalmaz\u00e1st az Almondhoz val\u00f3 csatlakoz\u00e1shoz, amelyet a Hass.io kieg\u00e9sz\u00edt\u0151 biztos\u00edt: {addon} ?", + "title": "Almond a Hass.io kieg\u00e9sz\u00edt\u0151n kereszt\u00fcl" + }, + "pick_implementation": { + "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/it.json b/homeassistant/components/almond/translations/it.json new file mode 100644 index 00000000000..3e68336bf3e --- /dev/null +++ b/homeassistant/components/almond/translations/it.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account Almond.", + "cannot_connect": "Impossibile connettersi al server Almond.", + "missing_configuration": "Si prega di controllare la documentazione su come impostare Almond." + }, + "step": { + "hassio_confirm": { + "description": "Vuoi configurare Home Assistant a connettersi ad Almond tramite il componente aggiuntivo Hass.io: {addon} ?", + "title": "Almond tramite il componente aggiuntivo di Hass.io" + }, + "pick_implementation": { + "title": "Seleziona metodo di autenticazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/ko.json b/homeassistant/components/almond/translations/ko.json new file mode 100644 index 00000000000..695ca3a752c --- /dev/null +++ b/homeassistant/components/almond/translations/ko.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "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." + }, + "step": { + "hassio_confirm": { + "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc73c\ub85c Almond \uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Hass.io \uc560\ub4dc\uc628\uc758 Almond" + }, + "pick_implementation": { + "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/lb.json b/homeassistant/components/almond/translations/lb.json new file mode 100644 index 00000000000..3b866a326be --- /dev/null +++ b/homeassistant/components/almond/translations/lb.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Almond Kont konfigur\u00e9ieren.", + "cannot_connect": "Kann sech net mam Almond Server verbannen.", + "missing_configuration": "Kuckt w.e.g. Dokumentatioun iwwert d'ariichten vun Almond." + }, + "step": { + "hassio_confirm": { + "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mam Almond ze verbannen dee vun der hass.io Erweiderung {addon} bereet gestallt g\u00ebtt?", + "title": "Almond via Hass.io Erweiderung" + }, + "pick_implementation": { + "title": "Wielt Authentifikatiouns Method aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/nl.json b/homeassistant/components/almond/translations/nl.json new file mode 100644 index 00000000000..7a2a60b1a69 --- /dev/null +++ b/homeassistant/components/almond/translations/nl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n Almond-account configureren.", + "cannot_connect": "Kan geen verbinding maken met de Almond-server.", + "missing_configuration": "Raadpleeg de documentatie over het instellen van Almond." + }, + "step": { + "hassio_confirm": { + "description": "Wilt u Home Assistant configureren om verbinding te maken met Almond die wordt aangeboden door de hass.io add-on {addon} ?", + "title": "Almond via Hass.io add-on" + }, + "pick_implementation": { + "title": "Kies de authenticatie methode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/nn.json b/homeassistant/components/almond/translations/nn.json new file mode 100644 index 00000000000..adee9514928 --- /dev/null +++ b/homeassistant/components/almond/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Almond" +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/no.json b/homeassistant/components/almond/translations/no.json new file mode 100644 index 00000000000..d27b903452d --- /dev/null +++ b/homeassistant/components/almond/translations/no.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bare konfigurere en Almond konto.", + "cannot_connect": "Kan ikke koble til Almond-serveren.", + "missing_configuration": "Vennligst sjekk dokumentasjonen om hvordan du setter opp Almond." + }, + "step": { + "hassio_confirm": { + "description": "Vil du konfigurere Home Assistant til \u00e5 koble til Almond levert av Hass.io add-on: {addon}?", + "title": "Almond via Hass.io add-on" + }, + "pick_implementation": { + "title": "Velg autentiseringsmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/pl.json b/homeassistant/components/almond/translations/pl.json new file mode 100644 index 00000000000..6b3feb4bd0b --- /dev/null +++ b/homeassistant/components/almond/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Almond.", + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z serwerem Almond.", + "missing_configuration": "Prosz\u0119 zapozna\u0107 si\u0119 z dokumentacj\u0105 konfiguracji Almond." + }, + "step": { + "hassio_confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Home Assistant'a, aby \u0142\u0105czy\u0142 si\u0119 z Almond dostarczonym przez dodatek Hass.io: {addon}?", + "title": "Almond poprzez dodatek Hass.io" + }, + "pick_implementation": { + "title": "Wybierz metod\u0119 uwierzytelniania" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/.translations/pt-BR.json b/homeassistant/components/almond/translations/pt-BR.json similarity index 100% rename from homeassistant/components/almond/.translations/pt-BR.json rename to homeassistant/components/almond/translations/pt-BR.json diff --git a/homeassistant/components/almond/translations/pt.json b/homeassistant/components/almond/translations/pt.json new file mode 100644 index 00000000000..94dfbefb86a --- /dev/null +++ b/homeassistant/components/almond/translations/pt.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "pick_implementation": { + "title": "Escolha o m\u00e9todo de autentica\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/ru.json b/homeassistant/components/almond/translations/ru.json new file mode 100644 index 00000000000..3821a65e08b --- /dev/null +++ b/homeassistant/components/almond/translations/ru.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 Almond.", + "missing_configuration": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 Almond." + }, + "step": { + "hassio_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Almond (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", + "title": "Almond (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" + }, + "pick_implementation": { + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/sl.json b/homeassistant/components/almond/translations/sl.json new file mode 100644 index 00000000000..cc2197ffaba --- /dev/null +++ b/homeassistant/components/almond/translations/sl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Konfigurirate lahko samo en ra\u010dun Almond.", + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave s stre\u017enikom Almond.", + "missing_configuration": "Prosimo, preverite dokumentacijo o tem, kako nastaviti Almond." + }, + "step": { + "hassio_confirm": { + "description": "Ali \u017eelite konfigurirati Home Assistant za povezavo z Almondom, ki ga ponuja dodatek Hass.io: {addon} ?", + "title": "Almond prek dodatka Hass.io" + }, + "pick_implementation": { + "title": "Izberite na\u010din preverjanja pristnosti" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/sv.json b/homeassistant/components/almond/translations/sv.json new file mode 100644 index 00000000000..70743f68e4d --- /dev/null +++ b/homeassistant/components/almond/translations/sv.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bara konfigurera ett Almond-konto.", + "cannot_connect": "Det g\u00e5r inte att ansluta till Almond-servern.", + "missing_configuration": "Kontrollera dokumentationen f\u00f6r hur du st\u00e4ller in Almond." + }, + "step": { + "hassio_confirm": { + "description": "Vill du konfigurera Home Assistant f\u00f6r att ansluta till Almond som tillhandah\u00e5lls av Hass.io-till\u00e4gget: {addon} ?", + "title": "Almond via Hass.io-till\u00e4gget" + }, + "pick_implementation": { + "title": "V\u00e4lj autentiseringsmetod" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/almond/translations/zh-Hant.json b/homeassistant/components/almond/translations/zh-Hant.json new file mode 100644 index 00000000000..96e3d92e060 --- /dev/null +++ b/homeassistant/components/almond/translations/zh-Hant.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Almond \u5e33\u865f\u3002", + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Almond \u4f3a\u670d\u5668\u3002", + "missing_configuration": "\u8acb\u53c3\u8003\u76f8\u95dc\u6587\u4ef6\u4ee5\u4e86\u89e3\u5982\u4f55\u8a2d\u5b9a Almond\u3002" + }, + "step": { + "hassio_confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6\uff1a{addon} \u9023\u7dda\u81f3 Almond\uff1f", + "title": "\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6 Almond" + }, + "pick_implementation": { + "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/alpha_vantage/manifest.json b/homeassistant/components/alpha_vantage/manifest.json index c7220d8e059..dad5fc88e80 100644 --- a/homeassistant/components/alpha_vantage/manifest.json +++ b/homeassistant/components/alpha_vantage/manifest.json @@ -3,6 +3,5 @@ "name": "Alpha Vantage", "documentation": "https://www.home-assistant.io/integrations/alpha_vantage", "requirements": ["alpha_vantage==2.1.3"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/alpha_vantage/sensor.py b/homeassistant/components/alpha_vantage/sensor.py index 7d871c286e5..0d0aec47915 100644 --- a/homeassistant/components/alpha_vantage/sensor.py +++ b/homeassistant/components/alpha_vantage/sensor.py @@ -64,7 +64,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Alpha Vantage sensor.""" - api_key = config.get(CONF_API_KEY) + api_key = config[CONF_API_KEY] symbols = config.get(CONF_SYMBOLS, []) conversions = config.get(CONF_FOREIGN_EXCHANGE, []) @@ -162,8 +162,8 @@ class AlphaVantageForeignExchange(Entity): def __init__(self, foreign_exchange, config): """Initialize the sensor.""" self._foreign_exchange = foreign_exchange - self._from_currency = config.get(CONF_FROM) - self._to_currency = config.get(CONF_TO) + self._from_currency = config[CONF_FROM] + self._to_currency = config[CONF_TO] if CONF_NAME in config: self._name = config.get(CONF_NAME) else: diff --git a/homeassistant/components/amazon_polly/manifest.json b/homeassistant/components/amazon_polly/manifest.json index 4bfcff4ce76..abcc46cadad 100644 --- a/homeassistant/components/amazon_polly/manifest.json +++ b/homeassistant/components/amazon_polly/manifest.json @@ -3,6 +3,5 @@ "name": "Amazon Polly", "documentation": "https://www.home-assistant.io/integrations/amazon_polly", "requirements": ["boto3==1.9.252"], - "dependencies": [], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/amazon_polly/tts.py b/homeassistant/components/amazon_polly/tts.py index bcb4a24e95b..ef3fe4e3ccb 100644 --- a/homeassistant/components/amazon_polly/tts.py +++ b/homeassistant/components/amazon_polly/tts.py @@ -147,7 +147,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def get_engine(hass, config, discovery_info=None): """Set up Amazon Polly speech component.""" - output_format = config.get(CONF_OUTPUT_FORMAT) + output_format = config[CONF_OUTPUT_FORMAT] sample_rate = config.get(CONF_SAMPLE_RATE, DEFAULT_SAMPLE_RATES[output_format]) if sample_rate not in SUPPORTED_SAMPLE_RATES_MAP.get(output_format): _LOGGER.error( @@ -163,7 +163,7 @@ def get_engine(hass, config, discovery_info=None): boto3.setup_default_session(profile_name=profile) aws_config = { - CONF_REGION: config.get(CONF_REGION), + CONF_REGION: config[CONF_REGION], CONF_ACCESS_KEY_ID: config.get(CONF_ACCESS_KEY_ID), CONF_SECRET_ACCESS_KEY: config.get(CONF_SECRET_ACCESS_KEY), } @@ -197,7 +197,7 @@ class AmazonPollyProvider(Provider): self.config = config self.supported_langs = supported_languages self.all_voices = all_voices - self.default_voice = self.config.get(CONF_VOICE) + self.default_voice = self.config[CONF_VOICE] self.name = "Amazon Polly" @property diff --git a/homeassistant/components/ambiclimate/.translations/bg.json b/homeassistant/components/ambiclimate/.translations/bg.json deleted file mode 100644 index 4795267cd5e..00000000000 --- a/homeassistant/components/ambiclimate/.translations/bg.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f.", - "already_setup": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u043d\u0430 Ambiclimate \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d.", - "no_config": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Ambiclimate, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0433\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate." - }, - "error": { - "follow_link": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0438 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435", - "no_token": "\u041b\u0438\u043f\u0441\u0432\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate" - }, - "step": { - "auth": { - "description": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 [link]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Ambiclimate, \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443. \n (\u0423\u0432\u0435\u0440\u0435\u0442\u0435 \u0441\u0435, \u0447\u0435 \u043f\u043e\u0441\u043e\u0447\u0435\u043d\u0438\u044f\u0442 url \u0437\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430 \u043f\u043e\u0432\u0438\u043a\u0432\u0430\u043d\u0435 \u0435 {cb_url})", - "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/ca.json b/homeassistant/components/ambiclimate/.translations/ca.json deleted file mode 100644 index f446bf7390f..00000000000 --- a/homeassistant/components/ambiclimate/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "S'ha produ\u00eft un error desconegut al generat un testimoni d'acc\u00e9s.", - "already_setup": "El compte d\u2019Ambi Climate est\u00e0 configurat.", - "no_config": "Necessites configurar Ambiclimate abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Ambi Climate." - }, - "error": { - "follow_link": "V\u00e9s a l'enlla\u00e7 i autentica't abans de pr\u00e9mer Envia", - "no_token": "No autenticat amb Ambi Climate" - }, - "step": { - "auth": { - "description": "V\u00e9s a l'[enlla\u00e7]({authorization_url}) i Permet l'acc\u00e9s al teu compte de Ambiclimate, despr\u00e9s torna i prem Envia (a sota).\n(Assegura't que l'enlla\u00e7 de retorn \u00e9s el seg\u00fcent {cb_url})", - "title": "Autenticaci\u00f3 amb Ambi Climate" - } - }, - "title": "Ambi Climate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/cs.json b/homeassistant/components/ambiclimate/.translations/cs.json deleted file mode 100644 index d34169edfc7..00000000000 --- a/homeassistant/components/ambiclimate/.translations/cs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "error": { - "follow_link": "N\u00e1sledujte odkaz a prove\u010fte ov\u011b\u0159en\u00ed p\u0159ed stisknut\u00edm tla\u010d\u00edtka Odeslat.", - "no_token": "Nen\u00ed ov\u011b\u0159en s Ambiclimate" - }, - "step": { - "auth": { - "description": "N\u00e1sledujte tento [odkaz]({authorization_url}) a Povolit p\u0159\u00edstup k va\u0161emu \u00fa\u010dtu Ambiclimate, pot\u00e9 se vra\u0165te a stiskn\u011bte Odeslat n\u00ed\u017ee. \n (Ujist\u011bte se, \u017ee zadan\u00e1 adresa URL zp\u011btn\u00e9ho vol\u00e1n\u00ed je {cb_url} )", - "title": "Ov\u011b\u0159it Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/da.json b/homeassistant/components/ambiclimate/.translations/da.json deleted file mode 100644 index b57a0e15797..00000000000 --- a/homeassistant/components/ambiclimate/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Ukendt fejl ved generering af et adgangstoken.", - "already_setup": "Ambiclimate kontoen er konfigureret.", - "no_config": "Du skal konfigurere Ambiclimate f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Godkendt med Ambiclimate" - }, - "error": { - "follow_link": "F\u00f8lg linket og godkend f\u00f8r du trykker p\u00e5 send", - "no_token": "Ikke godkendt med Ambiclimate" - }, - "step": { - "auth": { - "description": "F\u00f8lg dette [link]({authorization_url}) og Tillad adgang til din Ambiclimate-konto, vend s\u00e5 tilbage og tryk p\u00e5 Indsend nedenfor.\n(Kontroll\u00e9r den angivne callback url er {cb_url})", - "title": "Godkend Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/de.json b/homeassistant/components/ambiclimate/.translations/de.json deleted file mode 100644 index 68d714cfc1b..00000000000 --- a/homeassistant/components/ambiclimate/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Unbekannter Fehler beim Generieren eines Zugriffstokens.", - "already_setup": "Das Ambiclimate Konto ist konfiguriert.", - "no_config": "Ambiclimate muss konfiguriert sein, bevor die Authentifizierund durchgef\u00fchrt werden kann. [Bitte lies die Anleitung] (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Erfolgreiche Authentifizierung mit Ambiclimate" - }, - "error": { - "follow_link": "Bitte folge dem Link und authentifizieren dich, bevor du auf Senden klickst", - "no_token": "Nicht authentifiziert mit Ambiclimate" - }, - "step": { - "auth": { - "description": "Bitte folge diesem [link] ({authorization_url}) und Erlaube Zugriff auf dein Ambiclimate-Konto, komme dann zur\u00fcck und dr\u00fccke Senden darunter.\n (Pr\u00fcfe, dass die Callback-URL {cb_url} ist.)", - "title": "Ambiclimate authentifizieren" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/en.json b/homeassistant/components/ambiclimate/.translations/en.json deleted file mode 100644 index da1e173b4a8..00000000000 --- a/homeassistant/components/ambiclimate/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Unknown error generating an access token.", - "already_setup": "The Ambiclimate account is configured.", - "no_config": "You need to configure Ambiclimate before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Successfully authenticated with Ambiclimate" - }, - "error": { - "follow_link": "Please follow the link and authenticate before pressing Submit", - "no_token": "Not authenticated with Ambiclimate" - }, - "step": { - "auth": { - "description": "Please follow this [link]({authorization_url}) and Allow access to your Ambiclimate account, then come back and press Submit below.\n(Make sure the specified callback url is {cb_url})", - "title": "Authenticate Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/es-419.json b/homeassistant/components/ambiclimate/.translations/es-419.json deleted file mode 100644 index 607454f4402..00000000000 --- a/homeassistant/components/ambiclimate/.translations/es-419.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Error desconocido al generar un token de acceso.", - "already_setup": "La cuenta de Ambiclimate est\u00e1 configurada.", - "no_config": "Es necesario configurar Ambiclimate antes de poder autenticarse con \u00e9l. Por favor, lea las instrucciones](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Autenticaci\u00f3n exitosa con Ambiclimate" - }, - "error": { - "follow_link": "Por favor, siga el enlace y autent\u00edquese antes de presionar Enviar", - "no_token": "No autenticado con Ambiclimate" - }, - "step": { - "auth": { - "description": "Por favor, siga este [link]('authorization_url') y Permitir acceso a su cuenta de Ambiclimate, luego vuelva y presione Enviar a continuaci\u00f3n.\n(Aseg\u00farese de que la url de devoluci\u00f3n de llamada especificada es {cb_url})", - "title": "Autenticaci\u00f3n de Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/es.json b/homeassistant/components/ambiclimate/.translations/es.json deleted file mode 100644 index 6447926f64e..00000000000 --- a/homeassistant/components/ambiclimate/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Error desconocido al generar un token de acceso.", - "already_setup": "La cuenta de Ambiclimate est\u00e1 configurada.", - "no_config": "Es necesario configurar Ambiclimate antes de poder autenticarse con \u00e9l. [Por favor, lee las instrucciones](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Autenticado correctamente con Ambiclimate" - }, - "error": { - "follow_link": "Accede al enlace e identif\u00edcate antes de pulsar Enviar.", - "no_token": "No autenticado con Ambiclimate" - }, - "step": { - "auth": { - "description": "Accede al siguiente [enlace]({authorization_url}) y permite el acceso a tu cuenta de Ambiclimate, despu\u00e9s vuelve y pulsa en enviar a continuaci\u00f3n.\n(Aseg\u00farate que la url de devoluci\u00f3n de llamada es {cb_url})", - "title": "Autenticaci\u00f3n de Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/fr.json b/homeassistant/components/ambiclimate/.translations/fr.json deleted file mode 100644 index 6d09fd6ee05..00000000000 --- a/homeassistant/components/ambiclimate/.translations/fr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'un jeton d'acc\u00e8s.", - "already_setup": "Le compte Ambiclimate est configur\u00e9.", - "no_config": "Vous devez configurer Ambiclimate avant de pouvoir vous authentifier aupr\u00e8s de celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Authentifi\u00e9 avec succ\u00e8s avec Ambiclimate" - }, - "error": { - "follow_link": "Veuillez suivre le lien et vous authentifier avant d'appuyer sur Soumettre.", - "no_token": "Non authentifi\u00e9 avec Ambiclimate" - }, - "step": { - "auth": { - "description": "Suivez ce [lien] ( {authorization_url} ) et Autorisez l'acc\u00e8s \u00e0 votre compte Ambiclimate, puis revenez et appuyez sur Envoyer ci-dessous. \n (Assurez-vous que l'URL de rappel sp\u00e9cifi\u00e9 est {cb_url} )", - "title": "Authentifier Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/it.json b/homeassistant/components/ambiclimate/.translations/it.json deleted file mode 100644 index a13874b3676..00000000000 --- a/homeassistant/components/ambiclimate/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Errore sconosciuto durante la generazione di un token di accesso.", - "already_setup": "L'account Ambiclimate \u00e8 configurato.", - "no_config": "\u00c8 necessario configurare Ambiclimate prima di poter eseguire l'autenticazione con esso. [Leggere le istruzioni] (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Autenticato con successo con Ambiclimate" - }, - "error": { - "follow_link": "Si prega di seguire il link e di autenticarsi prima di premere Invia", - "no_token": "Non autenticato con Ambiclimate" - }, - "step": { - "auth": { - "description": "Segui questo [link]({authorization_url}) e Consenti accesso al tuo account Ambiclimate, quindi torna indietro e premi Invia qui sotto. \n (Assicurati che l'URL di richiamata specificato sia {cb_url})", - "title": "Autenticare Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/ko.json b/homeassistant/components/ambiclimate/.translations/ko.json deleted file mode 100644 index 3b21726bcbe..00000000000 --- a/homeassistant/components/ambiclimate/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "\uc561\uc138\uc2a4 \ud1a0\ud070 \uc0dd\uc131\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", - "already_setup": "Ambi Climate \uacc4\uc815\uc774 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "no_config": "Ambiclimate \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Ambiclimate \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/ambiclimate/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694." - }, - "create_entry": { - "default": "Ambi Climate \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "follow_link": "Submit \ubc84\ud2bc\uc744 \ub204\ub974\uae30 \uc804\uc5d0 \ub9c1\ud06c\ub97c \ub530\ub77c \uc778\uc99d\uc744 \ubc1b\uc544\uc8fc\uc138\uc694", - "no_token": "Ambi Climate \ub85c \uc778\uc99d\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4" - }, - "step": { - "auth": { - "description": "[\ub9c1\ud06c]({authorization_url}) \ub97c \ud074\ub9ad\ud558\uc5ec Ambi Climate \uacc4\uc815\uc5d0 \ub300\ud574 \ud5c8\uc6a9 \ud55c \ub2e4\uc74c, \ub2e4\uc2dc \ub3cc\uc544\uc640\uc11c \ud558\ub2e8\uc758 Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694. \n(\ucf5c\ubc31 url \uc744 {cb_url} \ub85c \uad6c\uc131\ud588\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694)", - "title": "Ambi Climate \uc778\uc99d" - } - }, - "title": "Ambi Climate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/lb.json b/homeassistant/components/ambiclimate/.translations/lb.json deleted file mode 100644 index 88be279ae7a..00000000000 --- a/homeassistant/components/ambiclimate/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Onbekannte Feeler beim gener\u00e9ieren vum Acc\u00e8s Jeton.", - "already_setup": "Den Ambiclimate Kont ass konfigur\u00e9iert.", - "no_config": "Dir musst Ambiclimate konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Ambiclimate authentifiz\u00e9iert." - }, - "error": { - "follow_link": "Follegt w.e.g. dem Link an authentifiz\u00e9iert de Kont ier dir op ofsch\u00e9cken dr\u00e9ckt.", - "no_token": "Net mat Ambiclimate authentifiz\u00e9iert" - }, - "step": { - "auth": { - "description": "Follegt d\u00ebsem [Link]({authorization_url}) an erlaabtt den Acc\u00e8s zu \u00e4rem Ambiclimate Kont , a kommt dann zer\u00e9ck heihin an dr\u00e9ck op ofsch\u00e9cken hei \u00ebnnen.\n(Stellt s\u00e9cher dass den Type vun Callback {cb_url} ass.)", - "title": "Ambiclimate authentifiz\u00e9ieren" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/nl.json b/homeassistant/components/ambiclimate/.translations/nl.json deleted file mode 100644 index ca4d0b912ab..00000000000 --- a/homeassistant/components/ambiclimate/.translations/nl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Onbekende fout bij het genereren van een toegangstoken.", - "already_setup": "Het Ambiclimate-account is geconfigureerd.", - "no_config": "U moet Ambiclimate configureren voordat u zich ermee kunt authenticeren. (Lees de instructies) (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Succesvol geverifieerd met Ambiclimate" - }, - "error": { - "follow_link": "Gelieve de link te volgen en te verifi\u00ebren voordat u op Verzenden drukt.", - "no_token": "Niet geverifieerd met Ambiclimate" - }, - "step": { - "auth": { - "description": "Volg deze [link] ( {authorization_url} ) en Toestaan toegang tot uw Ambiclimate-account, kom dan terug en druk hieronder op Verzenden . \n (Zorg ervoor dat de opgegeven callback-URL {cb_url} )", - "title": "Authenticatie Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/nn.json b/homeassistant/components/ambiclimate/.translations/nn.json deleted file mode 100644 index ce8a3ed9db6..00000000000 --- a/homeassistant/components/ambiclimate/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/no.json b/homeassistant/components/ambiclimate/.translations/no.json deleted file mode 100644 index 3f8e8444cf0..00000000000 --- a/homeassistant/components/ambiclimate/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Ukjent feil ved oppretting av tilgangstoken.", - "already_setup": "Ambiclimate-kontoen er konfigurert.", - "no_config": "Du m\u00e5 konfigurere Ambiclimate f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Vellykket autentisering med Ambiclimate" - }, - "error": { - "follow_link": "Vennligst f\u00f8lg lenken og godkjenn f\u00f8r du trykker p\u00e5 Send", - "no_token": "Ikke autentisert med Ambiclimate" - }, - "step": { - "auth": { - "description": "Vennligst f\u00f8lg denne [linken]({authorization_url}) og Tillat tilgang til din Ambiclimate konto, kom deretter tilbake og trykk Send nedenfor.\n(Kontroller at den angitte URL-adressen for tilbakeringing er {cb_url})", - "title": "Autensiere Ambiclimate" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/pl.json b/homeassistant/components/ambiclimate/.translations/pl.json deleted file mode 100644 index 18f5d043dbc..00000000000 --- a/homeassistant/components/ambiclimate/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Nieznany b\u0142\u0105d podczas generowania tokena dost\u0119pu.", - "already_setup": "Konto Ambiclimate jest skonfigurowane.", - "no_config": "Musisz skonfigurowa\u0107 Ambiclimate, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Ambiclimate" - }, - "error": { - "follow_link": "Prosz\u0119 klikn\u0105\u0107 link i uwierzytelni\u0107 przed naci\u015bni\u0119ciem przycisku Prze\u015blij", - "no_token": "Nieuwierzytelniony z Ambiclimate" - }, - "step": { - "auth": { - "description": "Kliknij poni\u017cszy [link]({authorization_url}) i Zezw\u00f3l na dost\u0119p do konta Ambiclimate, a nast\u0119pnie wr\u00f3\u0107 i naci\u015bnij Prze\u015blij poni\u017cej. \n(Upewnij si\u0119, \u017ce podany adres URL to {cb_url})", - "title": "Uwierzytelnienie Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/pt-BR.json b/homeassistant/components/ambiclimate/.translations/pt-BR.json deleted file mode 100644 index 4de4190d055..00000000000 --- a/homeassistant/components/ambiclimate/.translations/pt-BR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Erro desconhecido ao gerar um token de acesso.", - "already_setup": "A conta Ambiclimate est\u00e1 configurada.", - "no_config": "Voc\u00ea precisa configurar o Ambiclimate antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Autenticado com sucesso no Ambiclimate" - }, - "error": { - "follow_link": "Por favor, siga o link e autentique-se antes de pressionar Enviar", - "no_token": "N\u00e3o autenticado com o Ambiclimate" - }, - "step": { - "auth": { - "description": "Por favor, siga este [link]({authorization_url}) e Permitir acesso \u00e0 sua conta Ambiclimate, em seguida, volte e pressione Enviar abaixo. \n (Verifique se a URL de retorno de chamada especificada \u00e9 {cb_url})", - "title": "Autenticar Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/ru.json b/homeassistant/components/ambiclimate/.translations/ru.json deleted file mode 100644 index 2a99430e436..00000000000 --- a/homeassistant/components/ambiclimate/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.", - "already_setup": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430.", - "no_config": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Ambiclimate \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "error": { - "follow_link": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\".", - "no_token": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430." - }, - "step": { - "auth": { - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e [\u0441\u0441\u044b\u043b\u043a\u0435]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Ambi Climate, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c. \n(\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 URL \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 {cb_url})", - "title": "Ambi Climate" - } - }, - "title": "Ambi Climate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/sl.json b/homeassistant/components/ambiclimate/.translations/sl.json deleted file mode 100644 index c5d84f030fa..00000000000 --- a/homeassistant/components/ambiclimate/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Neznana napaka pri ustvarjanju \u017eetona za dostop.", - "already_setup": "Ra\u010dun Ambiclimate je konfiguriran.", - "no_config": "Ambiclimate morate konfigurirati, preden lahko z njo preverjate pristnost. [Preberite navodila] (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Uspe\u0161no overjeno z funkcijo Ambiclimate" - }, - "error": { - "follow_link": "Preden pritisnete Po\u0161lji, sledite povezavi in preverite pristnost", - "no_token": "Ni overjeno z Ambiclimate" - }, - "step": { - "auth": { - "description": "Sledite temu povezavi ( {authorization_url} in Dovoli dostopu do svojega ra\u010duna Ambiclimate, nato se vrnite in pritisnite Po\u0161lji spodaj. \n (Poskrbite, da je dolo\u010den url za povratni klic {cb_url} )", - "title": "Overi Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/sv.json b/homeassistant/components/ambiclimate/.translations/sv.json deleted file mode 100644 index f52bb6697f9..00000000000 --- a/homeassistant/components/ambiclimate/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "Ok\u00e4nt fel vid generering av \u00e5tkomsttoken.", - "already_setup": "Ambiclientkontot \u00e4r konfigurerat", - "no_config": "Du m\u00e5ste konfigurera Ambiclimate innan du kan autentisera med den. [V\u00e4nligen l\u00e4s instruktionerna] (https://www.home-assistant.io/components/ambiclimate/)." - }, - "create_entry": { - "default": "Lyckad autentisering med Ambiclimate" - }, - "error": { - "follow_link": "V\u00e4nligen f\u00f6lj l\u00e4nken och autentisera dig innan du trycker p\u00e5 Skicka", - "no_token": "Inte autentiserad med Ambiclimate" - }, - "step": { - "auth": { - "description": "V\u00e4nligen f\u00f6lj denna [l\u00e4nk] ({authorization_url}) och till\u00e5ta till g\u00e5ng till ditt Ambiclimate konto, kom sedan tillbaka och tryck p\u00e5 Skicka nedan.\n(Kontrollera att den angivna callback url \u00e4r {cb_url})", - "title": "Autentisera Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/.translations/zh-Hant.json b/homeassistant/components/ambiclimate/.translations/zh-Hant.json deleted file mode 100644 index 1539429d0ef..00000000000 --- a/homeassistant/components/ambiclimate/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "access_token": "\u7522\u751f\u5b58\u53d6\u8a8d\u8b49\u78bc\u672a\u77e5\u932f\u8aa4\u3002", - "already_setup": "Ambiclimate \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "no_config": "\u5fc5\u9808\u5148\u8a2d\u5b9a Ambiclimate \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15]\uff08https://www.home-assistant.io/components/ambiclimate/\uff09\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Ambiclimate \u8a2d\u5099\u3002" - }, - "error": { - "follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002", - "no_token": "Ambiclimate \u672a\u6388\u6b0a" - }, - "step": { - "auth": { - "description": "\u8acb\u4f7f\u7528\u6b64[\u9023\u7d50]\uff08{authorization_url}\uff09\u4e26\u9ede\u9078\u5141\u8a31\u4ee5\u5b58\u53d6 Ambiclimate \u5e33\u865f\uff0c\u7136\u5f8c\u8fd4\u56de\u6b64\u9801\u9762\u4e26\u9ede\u9078\u4e0b\u65b9\u7684\u50b3\u9001\u3002\n\uff08\u78ba\u5b9a Callback url \u70ba {cb_url}\uff09", - "title": "\u8a8d\u8b49 Ambiclimate" - } - }, - "title": "Ambiclimate" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/strings.json b/homeassistant/components/ambiclimate/strings.json index 78386077af2..50bc8284b71 100644 --- a/homeassistant/components/ambiclimate/strings.json +++ b/homeassistant/components/ambiclimate/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Ambiclimate", "step": { "auth": { "title": "Authenticate Ambiclimate", @@ -20,4 +19,4 @@ "access_token": "Unknown error generating an access token." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/ambiclimate/translations/bg.json b/homeassistant/components/ambiclimate/translations/bg.json new file mode 100644 index 00000000000..e76a714d5b0 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/bg.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f.", + "already_setup": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u043d\u0430 Ambiclimate \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d.", + "no_config": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Ambiclimate, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0433\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate." + }, + "error": { + "follow_link": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0438 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435", + "no_token": "\u041b\u0438\u043f\u0441\u0432\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate" + }, + "step": { + "auth": { + "description": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 [link]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Ambiclimate, \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443. \n (\u0423\u0432\u0435\u0440\u0435\u0442\u0435 \u0441\u0435, \u0447\u0435 \u043f\u043e\u0441\u043e\u0447\u0435\u043d\u0438\u044f\u0442 url \u0437\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430 \u043f\u043e\u0432\u0438\u043a\u0432\u0430\u043d\u0435 \u0435 {cb_url})", + "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/ca.json b/homeassistant/components/ambiclimate/translations/ca.json new file mode 100644 index 00000000000..d260691eb90 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "S'ha produ\u00eft un error desconegut al generat un testimoni d'acc\u00e9s.", + "already_setup": "El compte d\u2019Ambi Climate est\u00e0 configurat.", + "no_config": "Necessites configurar Ambiclimate abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Ambi Climate." + }, + "error": { + "follow_link": "V\u00e9s a l'enlla\u00e7 i autentica't abans de pr\u00e9mer Envia", + "no_token": "No autenticat amb Ambi Climate" + }, + "step": { + "auth": { + "description": "V\u00e9s a l'[enlla\u00e7]({authorization_url}) i Permet l'acc\u00e9s al teu compte de Ambiclimate, despr\u00e9s torna i prem Envia (a sota).\n(Assegura't que l'enlla\u00e7 de retorn \u00e9s el seg\u00fcent {cb_url})", + "title": "Autenticaci\u00f3 amb Ambi Climate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/cs.json b/homeassistant/components/ambiclimate/translations/cs.json new file mode 100644 index 00000000000..da0430346a7 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/cs.json @@ -0,0 +1,14 @@ +{ + "config": { + "error": { + "follow_link": "N\u00e1sledujte odkaz a prove\u010fte ov\u011b\u0159en\u00ed p\u0159ed stisknut\u00edm tla\u010d\u00edtka Odeslat.", + "no_token": "Nen\u00ed ov\u011b\u0159en s Ambiclimate" + }, + "step": { + "auth": { + "description": "N\u00e1sledujte tento [odkaz]({authorization_url}) a Povolit p\u0159\u00edstup k va\u0161emu \u00fa\u010dtu Ambiclimate, pot\u00e9 se vra\u0165te a stiskn\u011bte Odeslat n\u00ed\u017ee. \n (Ujist\u011bte se, \u017ee zadan\u00e1 adresa URL zp\u011btn\u00e9ho vol\u00e1n\u00ed je {cb_url} )", + "title": "Ov\u011b\u0159it Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/da.json b/homeassistant/components/ambiclimate/translations/da.json new file mode 100644 index 00000000000..3229e9f4127 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Ukendt fejl ved generering af et adgangstoken.", + "already_setup": "Ambiclimate kontoen er konfigureret.", + "no_config": "Du skal konfigurere Ambiclimate f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Godkendt med Ambiclimate" + }, + "error": { + "follow_link": "F\u00f8lg linket og godkend f\u00f8r du trykker p\u00e5 send", + "no_token": "Ikke godkendt med Ambiclimate" + }, + "step": { + "auth": { + "description": "F\u00f8lg dette [link]({authorization_url}) og Tillad adgang til din Ambiclimate-konto, vend s\u00e5 tilbage og tryk p\u00e5 Indsend nedenfor.\n(Kontroll\u00e9r den angivne callback url er {cb_url})", + "title": "Godkend Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/de.json b/homeassistant/components/ambiclimate/translations/de.json new file mode 100644 index 00000000000..6fba5772a10 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Unbekannter Fehler beim Generieren eines Zugriffstokens.", + "already_setup": "Das Ambiclimate Konto ist konfiguriert.", + "no_config": "Ambiclimate muss konfiguriert sein, bevor die Authentifizierund durchgef\u00fchrt werden kann. [Bitte lies die Anleitung] (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Erfolgreiche Authentifizierung mit Ambiclimate" + }, + "error": { + "follow_link": "Bitte folge dem Link und authentifizieren dich, bevor du auf Senden klickst", + "no_token": "Nicht authentifiziert mit Ambiclimate" + }, + "step": { + "auth": { + "description": "Bitte folge diesem [link] ({authorization_url}) und Erlaube Zugriff auf dein Ambiclimate-Konto, komme dann zur\u00fcck und dr\u00fccke Senden darunter.\n (Pr\u00fcfe, dass die Callback-URL {cb_url} ist.)", + "title": "Ambiclimate authentifizieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/en.json b/homeassistant/components/ambiclimate/translations/en.json new file mode 100644 index 00000000000..509b801fa62 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Unknown error generating an access token.", + "already_setup": "The Ambiclimate account is configured.", + "no_config": "You need to configure Ambiclimate before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Successfully authenticated with Ambiclimate" + }, + "error": { + "follow_link": "Please follow the link and authenticate before pressing Submit", + "no_token": "Not authenticated with Ambiclimate" + }, + "step": { + "auth": { + "description": "Please follow this [link]({authorization_url}) and Allow access to your Ambiclimate account, then come back and press Submit below.\n(Make sure the specified callback url is {cb_url})", + "title": "Authenticate Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/es-419.json b/homeassistant/components/ambiclimate/translations/es-419.json new file mode 100644 index 00000000000..55fb20ef45c --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/es-419.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Error desconocido al generar un token de acceso.", + "already_setup": "La cuenta de Ambiclimate est\u00e1 configurada.", + "no_config": "Es necesario configurar Ambiclimate antes de poder autenticarse con \u00e9l. Por favor, lea las instrucciones](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Autenticaci\u00f3n exitosa con Ambiclimate" + }, + "error": { + "follow_link": "Por favor, siga el enlace y autent\u00edquese antes de presionar Enviar", + "no_token": "No autenticado con Ambiclimate" + }, + "step": { + "auth": { + "description": "Por favor, siga este [link]('authorization_url') y Permitir acceso a su cuenta de Ambiclimate, luego vuelva y presione Enviar a continuaci\u00f3n.\n(Aseg\u00farese de que la url de devoluci\u00f3n de llamada especificada es {cb_url})", + "title": "Autenticaci\u00f3n de Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/es.json b/homeassistant/components/ambiclimate/translations/es.json new file mode 100644 index 00000000000..01d6643b634 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Error desconocido al generar un token de acceso.", + "already_setup": "La cuenta de Ambiclimate est\u00e1 configurada.", + "no_config": "Es necesario configurar Ambiclimate antes de poder autenticarse con \u00e9l. [Por favor, lee las instrucciones](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Autenticado correctamente con Ambiclimate" + }, + "error": { + "follow_link": "Accede al enlace e identif\u00edcate antes de pulsar Enviar.", + "no_token": "No autenticado con Ambiclimate" + }, + "step": { + "auth": { + "description": "Accede al siguiente [enlace]({authorization_url}) y permite el acceso a tu cuenta de Ambiclimate, despu\u00e9s vuelve y pulsa en enviar a continuaci\u00f3n.\n(Aseg\u00farate que la url de devoluci\u00f3n de llamada es {cb_url})", + "title": "Autenticaci\u00f3n de Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/fr.json b/homeassistant/components/ambiclimate/translations/fr.json new file mode 100644 index 00000000000..c16b0c10266 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/fr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'un jeton d'acc\u00e8s.", + "already_setup": "Le compte Ambiclimate est configur\u00e9.", + "no_config": "Vous devez configurer Ambiclimate avant de pouvoir vous authentifier aupr\u00e8s de celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Authentifi\u00e9 avec succ\u00e8s avec Ambiclimate" + }, + "error": { + "follow_link": "Veuillez suivre le lien et vous authentifier avant d'appuyer sur Soumettre.", + "no_token": "Non authentifi\u00e9 avec Ambiclimate" + }, + "step": { + "auth": { + "description": "Suivez ce [lien] ( {authorization_url} ) et Autorisez l'acc\u00e8s \u00e0 votre compte Ambiclimate, puis revenez et appuyez sur Envoyer ci-dessous. \n (Assurez-vous que l'URL de rappel sp\u00e9cifi\u00e9 est {cb_url} )", + "title": "Authentifier Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/it.json b/homeassistant/components/ambiclimate/translations/it.json new file mode 100644 index 00000000000..2da7a0ee4c8 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Errore sconosciuto durante la generazione di un token di accesso.", + "already_setup": "L'account Ambiclimate \u00e8 configurato.", + "no_config": "\u00c8 necessario configurare Ambiclimate prima di poter eseguire l'autenticazione con esso. [Leggere le istruzioni] (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Autenticato con successo con Ambiclimate" + }, + "error": { + "follow_link": "Si prega di seguire il link e di autenticarsi prima di premere Invia", + "no_token": "Non autenticato con Ambiclimate" + }, + "step": { + "auth": { + "description": "Segui questo [link]({authorization_url}) e Consenti accesso al tuo account Ambiclimate, quindi torna indietro e premi Invia qui sotto. \n (Assicurati che l'URL di richiamata specificato sia {cb_url})", + "title": "Autenticare Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/ko.json b/homeassistant/components/ambiclimate/translations/ko.json new file mode 100644 index 00000000000..311e05fa19e --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "\uc561\uc138\uc2a4 \ud1a0\ud070 \uc0dd\uc131\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "already_setup": "Ambi Climate \uacc4\uc815\uc774 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "no_config": "Ambiclimate \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Ambiclimate \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/ambiclimate/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694." + }, + "create_entry": { + "default": "Ambi Climate \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "follow_link": "Submit \ubc84\ud2bc\uc744 \ub204\ub974\uae30 \uc804\uc5d0 \ub9c1\ud06c\ub97c \ub530\ub77c \uc778\uc99d\uc744 \ubc1b\uc544\uc8fc\uc138\uc694", + "no_token": "Ambi Climate \ub85c \uc778\uc99d\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4" + }, + "step": { + "auth": { + "description": "[\ub9c1\ud06c]({authorization_url}) \ub97c \ud074\ub9ad\ud558\uc5ec Ambi Climate \uacc4\uc815\uc5d0 \ub300\ud574 \ud5c8\uc6a9 \ud55c \ub2e4\uc74c, \ub2e4\uc2dc \ub3cc\uc544\uc640\uc11c \ud558\ub2e8\uc758 Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694. \n(\ucf5c\ubc31 url \uc744 {cb_url} \ub85c \uad6c\uc131\ud588\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694)", + "title": "Ambi Climate \uc778\uc99d" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/lb.json b/homeassistant/components/ambiclimate/translations/lb.json new file mode 100644 index 00000000000..3d2b56ba466 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Onbekannte Feeler beim gener\u00e9ieren vum Acc\u00e8s Jeton.", + "already_setup": "Den Ambiclimate Kont ass konfigur\u00e9iert.", + "no_config": "Dir musst Ambiclimate konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Ambiclimate authentifiz\u00e9iert." + }, + "error": { + "follow_link": "Follegt w.e.g. dem Link an authentifiz\u00e9iert de Kont ier dir op ofsch\u00e9cken dr\u00e9ckt.", + "no_token": "Net mat Ambiclimate authentifiz\u00e9iert" + }, + "step": { + "auth": { + "description": "Follegt d\u00ebsem [Link]({authorization_url}) an erlaabtt den Acc\u00e8s zu \u00e4rem Ambiclimate Kont , a kommt dann zer\u00e9ck heihin an dr\u00e9ck op ofsch\u00e9cken hei \u00ebnnen.\n(Stellt s\u00e9cher dass den Type vun Callback {cb_url} ass.)", + "title": "Ambiclimate authentifiz\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/nl.json b/homeassistant/components/ambiclimate/translations/nl.json new file mode 100644 index 00000000000..17e6dfa9c82 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/nl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Onbekende fout bij het genereren van een toegangstoken.", + "already_setup": "Het Ambiclimate-account is geconfigureerd.", + "no_config": "U moet Ambiclimate configureren voordat u zich ermee kunt authenticeren. (Lees de instructies) (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Succesvol geverifieerd met Ambiclimate" + }, + "error": { + "follow_link": "Gelieve de link te volgen en te verifi\u00ebren voordat u op Verzenden drukt.", + "no_token": "Niet geverifieerd met Ambiclimate" + }, + "step": { + "auth": { + "description": "Volg deze [link] ( {authorization_url} ) en Toestaan toegang tot uw Ambiclimate-account, kom dan terug en druk hieronder op Verzenden . \n (Zorg ervoor dat de opgegeven callback-URL {cb_url} )", + "title": "Authenticatie Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/nn.json b/homeassistant/components/ambiclimate/translations/nn.json new file mode 100644 index 00000000000..31e478697d7 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Ambiclimate" +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/no.json b/homeassistant/components/ambiclimate/translations/no.json new file mode 100644 index 00000000000..e0df96e0361 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Ukjent feil ved oppretting av tilgangstoken.", + "already_setup": "Ambiclimate-kontoen er konfigurert.", + "no_config": "Du m\u00e5 konfigurere Ambiclimate f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Vellykket autentisering med Ambiclimate" + }, + "error": { + "follow_link": "Vennligst f\u00f8lg lenken og godkjenn f\u00f8r du trykker p\u00e5 Send", + "no_token": "Ikke autentisert med Ambiclimate" + }, + "step": { + "auth": { + "description": "Vennligst f\u00f8lg denne [linken]({authorization_url}) og Tillat tilgang til din Ambiclimate konto, kom deretter tilbake og trykk Send nedenfor.\n(Kontroller at den angitte URL-adressen for tilbakeringing er {cb_url})", + "title": "Autensiere Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/pl.json b/homeassistant/components/ambiclimate/translations/pl.json new file mode 100644 index 00000000000..69cb3f0e818 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Nieznany b\u0142\u0105d podczas generowania tokena dost\u0119pu.", + "already_setup": "Konto Ambiclimate jest skonfigurowane.", + "no_config": "Musisz skonfigurowa\u0107 Ambiclimate, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Ambiclimate" + }, + "error": { + "follow_link": "Prosz\u0119 klikn\u0105\u0107 link i uwierzytelni\u0107 przed naci\u015bni\u0119ciem przycisku \"Zatwierd\u017a\"", + "no_token": "Nieuwierzytelniony z Ambiclimate" + }, + "step": { + "auth": { + "description": "Kliknij poni\u017cszy [link]({authorization_url}) i Zezw\u00f3l na dost\u0119p do konta Ambiclimate, a nast\u0119pnie wr\u00f3\u0107 i naci\u015bnij Zatwierd\u017a poni\u017cej. \n(Upewnij si\u0119, \u017ce podany adres URL to {cb_url})", + "title": "Uwierzytelnienie Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/pt-BR.json b/homeassistant/components/ambiclimate/translations/pt-BR.json new file mode 100644 index 00000000000..1b0ae2a74df --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/pt-BR.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Erro desconhecido ao gerar um token de acesso.", + "already_setup": "A conta Ambiclimate est\u00e1 configurada.", + "no_config": "Voc\u00ea precisa configurar o Ambiclimate antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Autenticado com sucesso no Ambiclimate" + }, + "error": { + "follow_link": "Por favor, siga o link e autentique-se antes de pressionar Enviar", + "no_token": "N\u00e3o autenticado com o Ambiclimate" + }, + "step": { + "auth": { + "description": "Por favor, siga este [link]({authorization_url}) e Permitir acesso \u00e0 sua conta Ambiclimate, em seguida, volte e pressione Enviar abaixo. \n (Verifique se a URL de retorno de chamada especificada \u00e9 {cb_url})", + "title": "Autenticar Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/ru.json b/homeassistant/components/ambiclimate/translations/ru.json new file mode 100644 index 00000000000..a1eefc78575 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.", + "already_setup": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430.", + "no_config": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Ambiclimate \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "error": { + "follow_link": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\".", + "no_token": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430." + }, + "step": { + "auth": { + "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e [\u0441\u0441\u044b\u043b\u043a\u0435]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Ambi Climate, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c. \n(\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 URL \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 {cb_url})", + "title": "Ambi Climate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/sl.json b/homeassistant/components/ambiclimate/translations/sl.json new file mode 100644 index 00000000000..e293b411226 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Neznana napaka pri ustvarjanju \u017eetona za dostop.", + "already_setup": "Ra\u010dun Ambiclimate je konfiguriran.", + "no_config": "Ambiclimate morate konfigurirati, preden lahko z njo preverjate pristnost. [Preberite navodila] (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Uspe\u0161no overjeno z funkcijo Ambiclimate" + }, + "error": { + "follow_link": "Preden pritisnete Po\u0161lji, sledite povezavi in preverite pristnost", + "no_token": "Ni overjeno z Ambiclimate" + }, + "step": { + "auth": { + "description": "Sledite temu povezavi ( {authorization_url} in Dovoli dostopu do svojega ra\u010duna Ambiclimate, nato se vrnite in pritisnite Po\u0161lji spodaj. \n (Poskrbite, da je dolo\u010den url za povratni klic {cb_url} )", + "title": "Overi Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/sv.json b/homeassistant/components/ambiclimate/translations/sv.json new file mode 100644 index 00000000000..3ff8ed3da97 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "Ok\u00e4nt fel vid generering av \u00e5tkomsttoken.", + "already_setup": "Ambiclientkontot \u00e4r konfigurerat", + "no_config": "Du m\u00e5ste konfigurera Ambiclimate innan du kan autentisera med den. [V\u00e4nligen l\u00e4s instruktionerna] (https://www.home-assistant.io/components/ambiclimate/)." + }, + "create_entry": { + "default": "Lyckad autentisering med Ambiclimate" + }, + "error": { + "follow_link": "V\u00e4nligen f\u00f6lj l\u00e4nken och autentisera dig innan du trycker p\u00e5 Skicka", + "no_token": "Inte autentiserad med Ambiclimate" + }, + "step": { + "auth": { + "description": "V\u00e4nligen f\u00f6lj denna [l\u00e4nk] ({authorization_url}) och till\u00e5ta till g\u00e5ng till ditt Ambiclimate konto, kom sedan tillbaka och tryck p\u00e5 Skicka nedan.\n(Kontrollera att den angivna callback url \u00e4r {cb_url})", + "title": "Autentisera Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambiclimate/translations/zh-Hant.json b/homeassistant/components/ambiclimate/translations/zh-Hant.json new file mode 100644 index 00000000000..2efd9f13549 --- /dev/null +++ b/homeassistant/components/ambiclimate/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "access_token": "\u7522\u751f\u5b58\u53d6\u8a8d\u8b49\u78bc\u672a\u77e5\u932f\u8aa4\u3002", + "already_setup": "Ambiclimate \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "no_config": "\u5fc5\u9808\u5148\u8a2d\u5b9a Ambiclimate \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15]\uff08https://www.home-assistant.io/components/ambiclimate/\uff09\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Ambiclimate \u8a2d\u5099\u3002" + }, + "error": { + "follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002", + "no_token": "Ambiclimate \u672a\u6388\u6b0a" + }, + "step": { + "auth": { + "description": "\u8acb\u4f7f\u7528\u6b64[\u9023\u7d50]\uff08{authorization_url}\uff09\u4e26\u9ede\u9078\u5141\u8a31\u4ee5\u5b58\u53d6 Ambiclimate \u5e33\u865f\uff0c\u7136\u5f8c\u8fd4\u56de\u6b64\u9801\u9762\u4e26\u9ede\u9078\u4e0b\u65b9\u7684\u50b3\u9001\u3002\n\uff08\u78ba\u5b9a Callback url \u70ba {cb_url}\uff09", + "title": "\u8a8d\u8b49 Ambiclimate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/bg.json b/homeassistant/components/ambient_station/.translations/bg.json deleted file mode 100644 index df9fe8866ac..00000000000 --- a/homeassistant/components/ambient_station/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d API \u043a\u043b\u044e\u0447 \u0438/\u0438\u043b\u0438 Application \u043a\u043b\u044e\u0447", - "no_devices": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0430" - }, - "step": { - "user": { - "data": { - "api_key": "API \u043a\u043b\u044e\u0447", - "app_key": "Application \u043a\u043b\u044e\u0447" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" - } - }, - "title": "\u0410\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u0430 PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/ca.json b/homeassistant/components/ambient_station/.translations/ca.json deleted file mode 100644 index 0991c74b0a5..00000000000 --- a/homeassistant/components/ambient_station/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta clau d'aplicaci\u00f3 ja est\u00e0 en \u00fas." - }, - "error": { - "invalid_key": "Clau API i/o clau d'aplicaci\u00f3 inv\u00e0lida/es", - "no_devices": "No s'ha trobat cap dispositiu al compte" - }, - "step": { - "user": { - "data": { - "api_key": "Clau API", - "app_key": "Clau d'aplicaci\u00f3" - }, - "title": "Introdueix la teva informaci\u00f3" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/da.json b/homeassistant/components/ambient_station/.translations/da.json deleted file mode 100644 index 5028a84eb31..00000000000 --- a/homeassistant/components/ambient_station/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne appn\u00f8gle er allerede i brug." - }, - "error": { - "invalid_key": "Ugyldig API n\u00f8gle og/eller applikationsn\u00f8gle", - "no_devices": "Ingen enheder fundet i konto" - }, - "step": { - "user": { - "data": { - "api_key": "API-n\u00f8gle", - "app_key": "Applikationsn\u00f8gle" - }, - "title": "Udfyld dine oplysninger" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/de.json b/homeassistant/components/ambient_station/.translations/de.json deleted file mode 100644 index 9213007e935..00000000000 --- a/homeassistant/components/ambient_station/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser App-Schl\u00fcssel wird bereits verwendet." - }, - "error": { - "invalid_key": "Ung\u00fcltiger API Key und / oder Anwendungsschl\u00fcssel", - "no_devices": "Keine Ger\u00e4te im Konto gefunden" - }, - "step": { - "user": { - "data": { - "api_key": "API Key", - "app_key": "Anwendungsschl\u00fcssel" - }, - "title": "Gib deine Informationen ein" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/en.json b/homeassistant/components/ambient_station/.translations/en.json deleted file mode 100644 index c3e2a40ab13..00000000000 --- a/homeassistant/components/ambient_station/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This app key is already in use." - }, - "error": { - "invalid_key": "Invalid API Key and/or Application Key", - "no_devices": "No devices found in account" - }, - "step": { - "user": { - "data": { - "api_key": "API Key", - "app_key": "Application Key" - }, - "title": "Fill in your information" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/es-419.json b/homeassistant/components/ambient_station/.translations/es-419.json deleted file mode 100644 index 4cca42afbf4..00000000000 --- a/homeassistant/components/ambient_station/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "Clave de API y/o clave de aplicaci\u00f3n no v\u00e1lida", - "no_devices": "No se han encontrado dispositivos en la cuenta." - }, - "step": { - "user": { - "data": { - "api_key": "Clave API", - "app_key": "Clave de aplicaci\u00f3n" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/es.json b/homeassistant/components/ambient_station/.translations/es.json deleted file mode 100644 index ae8b829d56e..00000000000 --- a/homeassistant/components/ambient_station/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta clave API ya est\u00e1 en uso." - }, - "error": { - "invalid_key": "Clave API y/o clave de aplicaci\u00f3n no v\u00e1lida", - "no_devices": "No se han encontrado dispositivos en la cuenta" - }, - "step": { - "user": { - "data": { - "api_key": "Clave API", - "app_key": "Clave de aplicaci\u00f3n" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "Ambiente PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/fr.json b/homeassistant/components/ambient_station/.translations/fr.json deleted file mode 100644 index 34490332c12..00000000000 --- a/homeassistant/components/ambient_station/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cette cl\u00e9 d'application est d\u00e9j\u00e0 utilis\u00e9e." - }, - "error": { - "invalid_key": "Cl\u00e9 d'API et / ou cl\u00e9 d'application non valide", - "no_devices": "Aucun appareil trouv\u00e9 dans le compte" - }, - "step": { - "user": { - "data": { - "api_key": "Cl\u00e9 d'API", - "app_key": "Cl\u00e9 d'application" - }, - "title": "Veuillez saisir vos informations" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/hu.json b/homeassistant/components/ambient_station/.translations/hu.json deleted file mode 100644 index 6febc6ec20d..00000000000 --- a/homeassistant/components/ambient_station/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "\u00c9rv\u00e9nytelen API kulcs \u00e9s / vagy alkalmaz\u00e1skulcs", - "no_devices": "Nincs a fi\u00f3kodban tal\u00e1lhat\u00f3 eszk\u00f6z" - }, - "step": { - "user": { - "data": { - "api_key": "API kulcs", - "app_key": "Alkalmaz\u00e1skulcs" - }, - "title": "T\u00f6ltsd ki az adataid" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/it.json b/homeassistant/components/ambient_station/.translations/it.json deleted file mode 100644 index e5c27bd3939..00000000000 --- a/homeassistant/components/ambient_station/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questa chiave dell'app \u00e8 gi\u00e0 in uso." - }, - "error": { - "invalid_key": "API Key e/o Application Key non valida", - "no_devices": "Nessun dispositivo trovato nell'account" - }, - "step": { - "user": { - "data": { - "api_key": "API Key", - "app_key": "Application Key" - }, - "title": "Inserisci i tuoi dati" - } - }, - "title": "PWS ambientale" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/ko.json b/homeassistant/components/ambient_station/.translations/ko.json deleted file mode 100644 index 2aa38688957..00000000000 --- a/homeassistant/components/ambient_station/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc571 \ud0a4\ub294 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4." - }, - "error": { - "invalid_key": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud0a4 \ud639\uc740 API \ud0a4\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "no_devices": "\uacc4\uc815\uc5d0 \uae30\uae30\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "api_key": "API \ud0a4", - "app_key": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud0a4" - }, - "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/lb.json b/homeassistant/components/ambient_station/.translations/lb.json deleted file mode 100644 index 1c6f9224c57..00000000000 --- a/homeassistant/components/ambient_station/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebsen App Schl\u00ebssel g\u00ebtt scho benotzt" - }, - "error": { - "invalid_key": "Ong\u00ebltegen API Schl\u00ebssel an/oder Applikatioun's Schl\u00ebssel", - "no_devices": "Keng Apparater am Kont fonnt" - }, - "step": { - "user": { - "data": { - "api_key": "API Schl\u00ebssel", - "app_key": "Applikatioun's Schl\u00ebssel" - }, - "title": "F\u00ebllt \u00e4r Informatiounen aus" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/nl.json b/homeassistant/components/ambient_station/.translations/nl.json deleted file mode 100644 index bc8f90057e3..00000000000 --- a/homeassistant/components/ambient_station/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "Ongeldige API-sleutel en/of applicatiesleutel", - "no_devices": "Geen apparaten gevonden in account" - }, - "step": { - "user": { - "data": { - "api_key": "API-sleutel", - "app_key": "Applicatiesleutel" - }, - "title": "Vul uw gegevens in" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/nn.json b/homeassistant/components/ambient_station/.translations/nn.json deleted file mode 100644 index 0f878b363c9..00000000000 --- a/homeassistant/components/ambient_station/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/no.json b/homeassistant/components/ambient_station/.translations/no.json deleted file mode 100644 index b69081286ed..00000000000 --- a/homeassistant/components/ambient_station/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne app n\u00f8kkelen er allerede i bruk." - }, - "error": { - "invalid_key": "Ugyldig API-n\u00f8kkel og/eller programn\u00f8kkel", - "no_devices": "Ingen enheter funnet i kontoen" - }, - "step": { - "user": { - "data": { - "api_key": "API-n\u00f8kkel", - "app_key": "Applikasjonsn\u00f8kkel" - }, - "title": "Fyll ut informasjonen din" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/pl.json b/homeassistant/components/ambient_station/.translations/pl.json deleted file mode 100644 index 45d98e64dbb..00000000000 --- a/homeassistant/components/ambient_station/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ten klucz aplikacji jest ju\u017c w u\u017cyciu." - }, - "error": { - "invalid_key": "Nieprawid\u0142owy klucz API i/lub klucz aplikacji", - "no_devices": "Nie znaleziono urz\u0105dze\u0144 na koncie" - }, - "step": { - "user": { - "data": { - "api_key": "Klucz API", - "app_key": "Klucz aplikacji" - }, - "title": "Wprowad\u017a dane" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/pt-BR.json b/homeassistant/components/ambient_station/.translations/pt-BR.json deleted file mode 100644 index 533d46ca8b7..00000000000 --- a/homeassistant/components/ambient_station/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "Chave de API e / ou chave de aplicativo inv\u00e1lidas", - "no_devices": "Nenhum dispositivo encontrado na conta" - }, - "step": { - "user": { - "data": { - "api_key": "Chave API", - "app_key": "Chave de aplicativo" - }, - "title": "Preencha suas informa\u00e7\u00f5es" - } - }, - "title": "Ambiente PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/pt.json b/homeassistant/components/ambient_station/.translations/pt.json deleted file mode 100644 index 61d8bf3ae1c..00000000000 --- a/homeassistant/components/ambient_station/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "Chave de API e/ou chave de aplica\u00e7\u00e3o inv\u00e1lidas", - "no_devices": "Nenhum dispositivo encontrado na conta" - }, - "step": { - "user": { - "data": { - "api_key": "Chave de API", - "app_key": "Chave de aplica\u00e7\u00e3o" - }, - "title": "Preencha as suas informa\u00e7\u00f5es" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/ru.json b/homeassistant/components/ambient_station/.translations/ru.json deleted file mode 100644 index e1f01d1567f..00000000000 --- a/homeassistant/components/ambient_station/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u042d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." - }, - "error": { - "invalid_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API \u0438/\u0438\u043b\u0438 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.", - "no_devices": "\u0412 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b." - }, - "step": { - "user": { - "data": { - "api_key": "\u041a\u043b\u044e\u0447 API", - "app_key": "\u041a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f" - }, - "title": "Ambient PWS" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/sl.json b/homeassistant/components/ambient_station/.translations/sl.json deleted file mode 100644 index 4f9389e7e49..00000000000 --- a/homeassistant/components/ambient_station/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta klju\u010d za aplikacijo je \u017ee v uporabi." - }, - "error": { - "invalid_key": "Neveljaven klju\u010d API in / ali klju\u010d aplikacije", - "no_devices": "V ra\u010dunu ni najdene nobene naprave" - }, - "step": { - "user": { - "data": { - "api_key": "API Klju\u010d", - "app_key": "Klju\u010d aplikacije" - }, - "title": "Izpolnite svoje podatke" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/sv.json b/homeassistant/components/ambient_station/.translations/sv.json deleted file mode 100644 index 2f68fe4332d..00000000000 --- a/homeassistant/components/ambient_station/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "Ogiltigt API-nyckel och/eller applikationsnyckel", - "no_devices": "Inga enheter hittades i kontot" - }, - "step": { - "user": { - "data": { - "api_key": "API-nyckel", - "app_key": "Applikationsnyckel" - }, - "title": "Fyll i dina uppgifter" - } - }, - "title": "Ambient Weather PWS (Personal Weather Station)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/zh-Hans.json b/homeassistant/components/ambient_station/.translations/zh-Hans.json deleted file mode 100644 index dc6f2d51ee9..00000000000 --- a/homeassistant/components/ambient_station/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_key": "\u65e0\u6548\u7684 API \u5bc6\u94a5\u548c/\u6216 Application Key", - "no_devices": "\u6ca1\u6709\u5728\u5e10\u6237\u4e2d\u627e\u5230\u8bbe\u5907" - }, - "step": { - "user": { - "data": { - "api_key": "API Key", - "app_key": "Application Key" - }, - "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" - } - }, - "title": "Ambient PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/zh-Hant.json b/homeassistant/components/ambient_station/.translations/zh-Hant.json deleted file mode 100644 index fdc7b87aa6b..00000000000 --- a/homeassistant/components/ambient_station/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u61c9\u7528\u7a0b\u5f0f\u5bc6\u9470\u5df2\u88ab\u4f7f\u7528\u3002" - }, - "error": { - "invalid_key": "API \u5bc6\u9470\u53ca/\u6216\u61c9\u7528\u5bc6\u9470\u7121\u6548", - "no_devices": "\u5e33\u865f\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u8a2d\u5099" - }, - "step": { - "user": { - "data": { - "api_key": "API \u5bc6\u9470", - "app_key": "\u61c9\u7528\u5bc6\u9470" - }, - "title": "\u586b\u5beb\u8cc7\u8a0a" - } - }, - "title": "\u74b0\u5883 PWS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/__init__.py b/homeassistant/components/ambient_station/__init__.py index d50ba727467..8ee37f4503e 100644 --- a/homeassistant/components/ambient_station/__init__.py +++ b/homeassistant/components/ambient_station/__init__.py @@ -12,8 +12,11 @@ from homeassistant.const import ( ATTR_NAME, CONCENTRATION_PARTS_PER_MILLION, CONF_API_KEY, + DEGREE, EVENT_HOMEASSISTANT_STOP, + POWER_WATT, SPEED_MILES_PER_HOUR, + TEMP_FAHRENHEIT, UNIT_PERCENTAGE, ) from homeassistant.core import callback @@ -150,9 +153,9 @@ SENSOR_TYPES = { TYPE_BATTOUT: ("Battery", None, TYPE_BINARY_SENSOR, "battery"), TYPE_CO2: ("co2", CONCENTRATION_PARTS_PER_MILLION, TYPE_SENSOR, None), TYPE_DAILYRAININ: ("Daily Rain", "in", TYPE_SENSOR, None), - TYPE_DEWPOINT: ("Dew Point", "°F", TYPE_SENSOR, "temperature"), + TYPE_DEWPOINT: ("Dew Point", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), TYPE_EVENTRAININ: ("Event Rain", "in", TYPE_SENSOR, None), - TYPE_FEELSLIKE: ("Feels Like", "°F", TYPE_SENSOR, "temperature"), + TYPE_FEELSLIKE: ("Feels Like", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), TYPE_HOURLYRAININ: ("Hourly Rain Rate", "in/hr", TYPE_SENSOR, None), TYPE_HUMIDITY10: ("Humidity 10", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"), TYPE_HUMIDITY1: ("Humidity 1", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"), @@ -189,37 +192,37 @@ SENSOR_TYPES = { TYPE_SOILHUM7: ("Soil Humidity 7", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"), TYPE_SOILHUM8: ("Soil Humidity 8", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"), TYPE_SOILHUM9: ("Soil Humidity 9", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"), - TYPE_SOILTEMP10F: ("Soil Temp 10", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP1F: ("Soil Temp 1", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP2F: ("Soil Temp 2", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP3F: ("Soil Temp 3", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP4F: ("Soil Temp 4", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP5F: ("Soil Temp 5", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP6F: ("Soil Temp 6", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP7F: ("Soil Temp 7", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP8F: ("Soil Temp 8", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOILTEMP9F: ("Soil Temp 9", "°F", TYPE_SENSOR, "temperature"), - TYPE_SOLARRADIATION: ("Solar Rad", "W/m^2", TYPE_SENSOR, None), + TYPE_SOILTEMP10F: ("Soil Temp 10", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP1F: ("Soil Temp 1", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP2F: ("Soil Temp 2", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP3F: ("Soil Temp 3", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP4F: ("Soil Temp 4", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP5F: ("Soil Temp 5", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP6F: ("Soil Temp 6", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP7F: ("Soil Temp 7", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP8F: ("Soil Temp 8", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOILTEMP9F: ("Soil Temp 9", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_SOLARRADIATION: ("Solar Rad", f"{POWER_WATT}/m^2", TYPE_SENSOR, None), TYPE_SOLARRADIATION_LX: ("Solar Rad (lx)", "lx", TYPE_SENSOR, "illuminance"), - TYPE_TEMP10F: ("Temp 10", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP1F: ("Temp 1", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP2F: ("Temp 2", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP3F: ("Temp 3", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP4F: ("Temp 4", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP5F: ("Temp 5", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP6F: ("Temp 6", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP7F: ("Temp 7", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP8F: ("Temp 8", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMP9F: ("Temp 9", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMPF: ("Temp", "°F", TYPE_SENSOR, "temperature"), - TYPE_TEMPINF: ("Inside Temp", "°F", TYPE_SENSOR, "temperature"), + TYPE_TEMP10F: ("Temp 10", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP1F: ("Temp 1", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP2F: ("Temp 2", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP3F: ("Temp 3", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP4F: ("Temp 4", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP5F: ("Temp 5", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP6F: ("Temp 6", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP7F: ("Temp 7", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP8F: ("Temp 8", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMP9F: ("Temp 9", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMPF: ("Temp", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), + TYPE_TEMPINF: ("Inside Temp", TEMP_FAHRENHEIT, TYPE_SENSOR, "temperature"), TYPE_TOTALRAININ: ("Lifetime Rain", "in", TYPE_SENSOR, None), TYPE_UV: ("uv", "Index", TYPE_SENSOR, None), TYPE_WEEKLYRAININ: ("Weekly Rain", "in", TYPE_SENSOR, None), - TYPE_WINDDIR: ("Wind Dir", "°", TYPE_SENSOR, None), - TYPE_WINDDIR_AVG10M: ("Wind Dir Avg 10m", "°", TYPE_SENSOR, None), + TYPE_WINDDIR: ("Wind Dir", DEGREE, TYPE_SENSOR, None), + TYPE_WINDDIR_AVG10M: ("Wind Dir Avg 10m", DEGREE, TYPE_SENSOR, None), TYPE_WINDDIR_AVG2M: ("Wind Dir Avg 2m", SPEED_MILES_PER_HOUR, TYPE_SENSOR, None), - TYPE_WINDGUSTDIR: ("Gust Dir", "°", TYPE_SENSOR, None), + TYPE_WINDGUSTDIR: ("Gust Dir", DEGREE, TYPE_SENSOR, None), TYPE_WINDGUSTMPH: ("Wind Gust", SPEED_MILES_PER_HOUR, TYPE_SENSOR, None), TYPE_WINDSPDMPH_AVG10M: ("Wind Avg 10m", SPEED_MILES_PER_HOUR, TYPE_SENSOR, None), TYPE_WINDSPDMPH_AVG2M: ("Wind Avg 2m", SPEED_MILES_PER_HOUR, TYPE_SENSOR, None), @@ -442,7 +445,6 @@ class AmbientWeatherEntity(Entity): """Initialize the sensor.""" self._ambient = ambient self._device_class = device_class - self._async_unsub_dispatcher_connect = None self._mac_address = mac_address self._sensor_name = sensor_name self._sensor_type = sensor_type @@ -508,18 +510,14 @@ class AmbientWeatherEntity(Entity): self.update_from_latest_data() self.async_write_ha_state() - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, f"ambient_station_data_update_{self._mac_address}", update + self.async_on_remove( + async_dispatcher_connect( + self.hass, f"ambient_station_data_update_{self._mac_address}", update + ) ) self.update_from_latest_data() - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() - self._async_unsub_dispatcher_connect = None - @callback def update_from_latest_data(self): """Update the entity from the latest data.""" diff --git a/homeassistant/components/ambient_station/strings.json b/homeassistant/components/ambient_station/strings.json index 3cfe36b3220..0e49301198c 100644 --- a/homeassistant/components/ambient_station/strings.json +++ b/homeassistant/components/ambient_station/strings.json @@ -1,21 +1,15 @@ { "config": { - "title": "Ambient PWS", "step": { "user": { "title": "Fill in your information", - "data": { - "api_key": "API Key", - "app_key": "Application Key" - } + "data": { "api_key": "API Key", "app_key": "Application Key" } } }, "error": { "invalid_key": "Invalid API Key and/or Application Key", "no_devices": "No devices found in account" }, - "abort": { - "already_configured": "This app key is already in use." - } + "abort": { "already_configured": "This app key is already in use." } } } diff --git a/homeassistant/components/ambient_station/translations/bg.json b/homeassistant/components/ambient_station/translations/bg.json new file mode 100644 index 00000000000..173b1c39c5f --- /dev/null +++ b/homeassistant/components/ambient_station/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d API \u043a\u043b\u044e\u0447 \u0438/\u0438\u043b\u0438 Application \u043a\u043b\u044e\u0447", + "no_devices": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0430" + }, + "step": { + "user": { + "data": { + "api_key": "API \u043a\u043b\u044e\u0447", + "app_key": "Application \u043a\u043b\u044e\u0447" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/ca.json b/homeassistant/components/ambient_station/translations/ca.json new file mode 100644 index 00000000000..87934f8e90c --- /dev/null +++ b/homeassistant/components/ambient_station/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta clau d'aplicaci\u00f3 ja est\u00e0 en \u00fas." + }, + "error": { + "invalid_key": "Clau API i/o clau d'aplicaci\u00f3 inv\u00e0lida/es", + "no_devices": "No s'ha trobat cap dispositiu al compte" + }, + "step": { + "user": { + "data": { + "api_key": "Clau API", + "app_key": "Clau d'aplicaci\u00f3" + }, + "title": "Introdueix la teva informaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/da.json b/homeassistant/components/ambient_station/translations/da.json new file mode 100644 index 00000000000..b8a4f1ab29e --- /dev/null +++ b/homeassistant/components/ambient_station/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Denne appn\u00f8gle er allerede i brug." + }, + "error": { + "invalid_key": "Ugyldig API n\u00f8gle og/eller applikationsn\u00f8gle", + "no_devices": "Ingen enheder fundet i konto" + }, + "step": { + "user": { + "data": { + "api_key": "API-n\u00f8gle", + "app_key": "Applikationsn\u00f8gle" + }, + "title": "Udfyld dine oplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/de.json b/homeassistant/components/ambient_station/translations/de.json new file mode 100644 index 00000000000..ae4fbe36505 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser App-Schl\u00fcssel wird bereits verwendet." + }, + "error": { + "invalid_key": "Ung\u00fcltiger API Key und / oder Anwendungsschl\u00fcssel", + "no_devices": "Keine Ger\u00e4te im Konto gefunden" + }, + "step": { + "user": { + "data": { + "api_key": "API Key", + "app_key": "Anwendungsschl\u00fcssel" + }, + "title": "Gib deine Informationen ein" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/en.json b/homeassistant/components/ambient_station/translations/en.json new file mode 100644 index 00000000000..10b7eebc38a --- /dev/null +++ b/homeassistant/components/ambient_station/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "This app key is already in use." + }, + "error": { + "invalid_key": "Invalid API Key and/or Application Key", + "no_devices": "No devices found in account" + }, + "step": { + "user": { + "data": { + "api_key": "API Key", + "app_key": "Application Key" + }, + "title": "Fill in your information" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/es-419.json b/homeassistant/components/ambient_station/translations/es-419.json new file mode 100644 index 00000000000..d2c60aee5a0 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "Clave de API y/o clave de aplicaci\u00f3n no v\u00e1lida", + "no_devices": "No se han encontrado dispositivos en la cuenta." + }, + "step": { + "user": { + "data": { + "api_key": "Clave API", + "app_key": "Clave de aplicaci\u00f3n" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/es.json b/homeassistant/components/ambient_station/translations/es.json new file mode 100644 index 00000000000..12272affdf1 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Esta clave API ya est\u00e1 en uso." + }, + "error": { + "invalid_key": "Clave API y/o clave de aplicaci\u00f3n no v\u00e1lida", + "no_devices": "No se han encontrado dispositivos en la cuenta" + }, + "step": { + "user": { + "data": { + "api_key": "Clave API", + "app_key": "Clave de aplicaci\u00f3n" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/fr.json b/homeassistant/components/ambient_station/translations/fr.json new file mode 100644 index 00000000000..d88e9f9c9f6 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Cette cl\u00e9 d'application est d\u00e9j\u00e0 utilis\u00e9e." + }, + "error": { + "invalid_key": "Cl\u00e9 d'API et / ou cl\u00e9 d'application non valide", + "no_devices": "Aucun appareil trouv\u00e9 dans le compte" + }, + "step": { + "user": { + "data": { + "api_key": "Cl\u00e9 d'API", + "app_key": "Cl\u00e9 d'application" + }, + "title": "Veuillez saisir vos informations" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/he.json b/homeassistant/components/ambient_station/translations/he.json similarity index 100% rename from homeassistant/components/ambient_station/.translations/he.json rename to homeassistant/components/ambient_station/translations/he.json diff --git a/homeassistant/components/ambient_station/translations/hu.json b/homeassistant/components/ambient_station/translations/hu.json new file mode 100644 index 00000000000..e6b95634827 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "\u00c9rv\u00e9nytelen API kulcs \u00e9s / vagy alkalmaz\u00e1skulcs", + "no_devices": "Nincs a fi\u00f3kodban tal\u00e1lhat\u00f3 eszk\u00f6z" + }, + "step": { + "user": { + "data": { + "api_key": "API kulcs", + "app_key": "Alkalmaz\u00e1skulcs" + }, + "title": "T\u00f6ltsd ki az adataid" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/it.json b/homeassistant/components/ambient_station/translations/it.json new file mode 100644 index 00000000000..1991d053f6c --- /dev/null +++ b/homeassistant/components/ambient_station/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Questa chiave dell'app \u00e8 gi\u00e0 in uso." + }, + "error": { + "invalid_key": "API Key e/o Application Key non valida", + "no_devices": "Nessun dispositivo trovato nell'account" + }, + "step": { + "user": { + "data": { + "api_key": "API Key", + "app_key": "Application Key" + }, + "title": "Inserisci i tuoi dati" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/ko.json b/homeassistant/components/ambient_station/translations/ko.json new file mode 100644 index 00000000000..83d273dc4df --- /dev/null +++ b/homeassistant/components/ambient_station/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc571 \ud0a4\ub294 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4." + }, + "error": { + "invalid_key": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud0a4 \ud639\uc740 API \ud0a4\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "no_devices": "\uacc4\uc815\uc5d0 \uae30\uae30\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "api_key": "API \ud0a4", + "app_key": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud0a4" + }, + "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/lb.json b/homeassistant/components/ambient_station/translations/lb.json new file mode 100644 index 00000000000..c679b270e80 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebsen App Schl\u00ebssel g\u00ebtt scho benotzt" + }, + "error": { + "invalid_key": "Ong\u00ebltegen API Schl\u00ebssel an/oder Applikatioun's Schl\u00ebssel", + "no_devices": "Keng Apparater am Kont fonnt" + }, + "step": { + "user": { + "data": { + "api_key": "API Schl\u00ebssel", + "app_key": "Applikatioun's Schl\u00ebssel" + }, + "title": "F\u00ebllt \u00e4r Informatiounen aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/nl.json b/homeassistant/components/ambient_station/translations/nl.json new file mode 100644 index 00000000000..53ad8c9094b --- /dev/null +++ b/homeassistant/components/ambient_station/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "Ongeldige API-sleutel en/of applicatiesleutel", + "no_devices": "Geen apparaten gevonden in account" + }, + "step": { + "user": { + "data": { + "api_key": "API-sleutel", + "app_key": "Applicatiesleutel" + }, + "title": "Vul uw gegevens in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/nn.json b/homeassistant/components/ambient_station/translations/nn.json new file mode 100644 index 00000000000..1774198088a --- /dev/null +++ b/homeassistant/components/ambient_station/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Ambient PWS" +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/no.json b/homeassistant/components/ambient_station/translations/no.json new file mode 100644 index 00000000000..972d1210f00 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Denne app n\u00f8kkelen er allerede i bruk." + }, + "error": { + "invalid_key": "Ugyldig API-n\u00f8kkel og/eller programn\u00f8kkel", + "no_devices": "Ingen enheter funnet i kontoen" + }, + "step": { + "user": { + "data": { + "api_key": "API-n\u00f8kkel", + "app_key": "Applikasjonsn\u00f8kkel" + }, + "title": "Fyll ut informasjonen din" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/pl.json b/homeassistant/components/ambient_station/translations/pl.json new file mode 100644 index 00000000000..bb597971b0c --- /dev/null +++ b/homeassistant/components/ambient_station/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ten klucz aplikacji jest ju\u017c w u\u017cyciu." + }, + "error": { + "invalid_key": "Nieprawid\u0142owy klucz API i/lub klucz aplikacji", + "no_devices": "Nie znaleziono urz\u0105dze\u0144 na koncie" + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API", + "app_key": "Klucz aplikacji" + }, + "title": "Wprowad\u017a dane" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/pt-BR.json b/homeassistant/components/ambient_station/translations/pt-BR.json new file mode 100644 index 00000000000..d3ac36bf0e2 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "Chave de API e / ou chave de aplicativo inv\u00e1lidas", + "no_devices": "Nenhum dispositivo encontrado na conta" + }, + "step": { + "user": { + "data": { + "api_key": "Chave API", + "app_key": "Chave de aplicativo" + }, + "title": "Preencha suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/pt.json b/homeassistant/components/ambient_station/translations/pt.json new file mode 100644 index 00000000000..56c8b5f718a --- /dev/null +++ b/homeassistant/components/ambient_station/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "Chave de API e/ou chave de aplica\u00e7\u00e3o inv\u00e1lidas", + "no_devices": "Nenhum dispositivo encontrado na conta" + }, + "step": { + "user": { + "data": { + "api_key": "Chave de API", + "app_key": "Chave de aplica\u00e7\u00e3o" + }, + "title": "Preencha as suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/ru.json b/homeassistant/components/ambient_station/translations/ru.json new file mode 100644 index 00000000000..a78bfbe3049 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u042d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." + }, + "error": { + "invalid_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API \u0438/\u0438\u043b\u0438 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.", + "no_devices": "\u0412 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b." + }, + "step": { + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API", + "app_key": "\u041a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f" + }, + "title": "Ambient PWS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/sl.json b/homeassistant/components/ambient_station/translations/sl.json new file mode 100644 index 00000000000..0fbacf5ccc1 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ta klju\u010d za aplikacijo je \u017ee v uporabi." + }, + "error": { + "invalid_key": "Neveljaven klju\u010d API in / ali klju\u010d aplikacije", + "no_devices": "V ra\u010dunu ni najdene nobene naprave" + }, + "step": { + "user": { + "data": { + "api_key": "API Klju\u010d", + "app_key": "Klju\u010d aplikacije" + }, + "title": "Izpolnite svoje podatke" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/sv.json b/homeassistant/components/ambient_station/translations/sv.json new file mode 100644 index 00000000000..7c6be84d594 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "Ogiltigt API-nyckel och/eller applikationsnyckel", + "no_devices": "Inga enheter hittades i kontot" + }, + "step": { + "user": { + "data": { + "api_key": "API-nyckel", + "app_key": "Applikationsnyckel" + }, + "title": "Fyll i dina uppgifter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/.translations/th.json b/homeassistant/components/ambient_station/translations/th.json similarity index 100% rename from homeassistant/components/ambient_station/.translations/th.json rename to homeassistant/components/ambient_station/translations/th.json diff --git a/homeassistant/components/ambient_station/translations/zh-Hans.json b/homeassistant/components/ambient_station/translations/zh-Hans.json new file mode 100644 index 00000000000..fc092c7c247 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_key": "\u65e0\u6548\u7684 API \u5bc6\u94a5\u548c/\u6216 Application Key", + "no_devices": "\u6ca1\u6709\u5728\u5e10\u6237\u4e2d\u627e\u5230\u8bbe\u5907" + }, + "step": { + "user": { + "data": { + "api_key": "API Key", + "app_key": "Application Key" + }, + "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ambient_station/translations/zh-Hant.json b/homeassistant/components/ambient_station/translations/zh-Hant.json new file mode 100644 index 00000000000..f14d177e899 --- /dev/null +++ b/homeassistant/components/ambient_station/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u61c9\u7528\u7a0b\u5f0f\u5bc6\u9470\u5df2\u88ab\u4f7f\u7528\u3002" + }, + "error": { + "invalid_key": "API \u5bc6\u9470\u53ca/\u6216\u61c9\u7528\u5bc6\u9470\u7121\u6548", + "no_devices": "\u5e33\u865f\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u8a2d\u5099" + }, + "step": { + "user": { + "data": { + "api_key": "API \u5bc6\u9470", + "app_key": "\u61c9\u7528\u5bc6\u9470" + }, + "title": "\u586b\u5beb\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/amcrest/services.yaml b/homeassistant/components/amcrest/services.yaml index 820f965c533..10865586b6d 100644 --- a/homeassistant/components/amcrest/services.yaml +++ b/homeassistant/components/amcrest/services.yaml @@ -3,49 +3,49 @@ enable_recording: fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" disable_recording: description: Disable continuous recording to camera storage. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" enable_audio: description: Enable audio stream. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" disable_audio: description: Disable audio stream. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" enable_motion_recording: description: Enable recording a clip to camera storage when motion is detected. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" disable_motion_recording: description: Disable recording a clip to camera storage when motion is detected. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" goto_preset: description: Move camera to PTZ preset. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" preset: description: Preset number, starting from 1. example: 1 @@ -55,7 +55,7 @@ set_color_bw: fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" color_bw: description: Color mode, one of 'auto', 'color' or 'bw'. example: auto @@ -65,24 +65,24 @@ start_tour: fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" stop_tour: description: Stop camera's PTZ tour function. fields: entity_id: description: "Name(s) of the cameras, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" ptz_control: description: Move (Pan/Tilt) and/or Zoom a PTZ camera fields: entity_id: description: "Name of the camera, or 'all' for all cameras." - example: 'camera.house_front' + example: "camera.house_front" movement: description: "up, down, right, left, right_up, right_down, left_up, left_down, zoom_in, zoom_out" - example: 'right' + example: "right" travel_time: description: "(optional) Travel time in fractional seconds: from 0 to 1. Default: .2" - example: '.5' + example: ".5" diff --git a/homeassistant/components/ampio/manifest.json b/homeassistant/components/ampio/manifest.json index 99c84da6334..c92837d2417 100644 --- a/homeassistant/components/ampio/manifest.json +++ b/homeassistant/components/ampio/manifest.json @@ -3,6 +3,5 @@ "name": "Ampio Smart Smog System", "documentation": "https://www.home-assistant.io/integrations/ampio", "requirements": ["asmog==0.0.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/android_ip_webcam/__init__.py b/homeassistant/components/android_ip_webcam/__init__.py index 1f9df527c28..333da7dceea 100644 --- a/homeassistant/components/android_ip_webcam/__init__.py +++ b/homeassistant/components/android_ip_webcam/__init__.py @@ -309,7 +309,9 @@ class AndroidIPCamEntity(Entity): return self.async_schedule_update_ha_state(True) - async_dispatcher_connect(self.hass, SIGNAL_UPDATE_DATA, async_ipcam_update) + self.async_on_remove( + async_dispatcher_connect(self.hass, SIGNAL_UPDATE_DATA, async_ipcam_update) + ) @property def should_poll(self): diff --git a/homeassistant/components/android_ip_webcam/manifest.json b/homeassistant/components/android_ip_webcam/manifest.json index f5181a7d33f..60fe7204034 100644 --- a/homeassistant/components/android_ip_webcam/manifest.json +++ b/homeassistant/components/android_ip_webcam/manifest.json @@ -3,6 +3,5 @@ "name": "Android IP Webcam", "documentation": "https://www.home-assistant.io/integrations/android_ip_webcam", "requirements": ["pydroid-ipcam==0.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/android_ip_webcam/switch.py b/homeassistant/components/android_ip_webcam/switch.py index 2d5f2412d85..a494e78bdc7 100644 --- a/homeassistant/components/android_ip_webcam/switch.py +++ b/homeassistant/components/android_ip_webcam/switch.py @@ -67,7 +67,7 @@ class IPWebcamSettingsSwitch(AndroidIPCamEntity, SwitchDevice): else: await self._ipcam.change_setting(self._setting, True) self._state = True - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn device off.""" @@ -80,7 +80,7 @@ class IPWebcamSettingsSwitch(AndroidIPCamEntity, SwitchDevice): else: await self._ipcam.change_setting(self._setting, False) self._state = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def icon(self): diff --git a/homeassistant/components/androidtv/manifest.json b/homeassistant/components/androidtv/manifest.json index 5fea6c3f2e2..fb74ab9ab2e 100644 --- a/homeassistant/components/androidtv/manifest.json +++ b/homeassistant/components/androidtv/manifest.json @@ -3,10 +3,9 @@ "name": "Android TV", "documentation": "https://www.home-assistant.io/integrations/androidtv", "requirements": [ - "adb-shell==0.1.1", - "androidtv==0.0.39", + "adb-shell==0.1.3", + "androidtv==0.0.41", "pure-python-adb==0.2.2.dev0" ], - "dependencies": [], "codeowners": ["@JeffLIrion"] } diff --git a/homeassistant/components/androidtv/media_player.py b/homeassistant/components/androidtv/media_player.py index f9ec68c8742..a9d7f0ad5be 100644 --- a/homeassistant/components/androidtv/media_player.py +++ b/homeassistant/components/androidtv/media_player.py @@ -1,5 +1,4 @@ """Support for functionality to interact with Android TV / Fire TV devices.""" -import binascii from datetime import datetime import functools import logging @@ -89,12 +88,14 @@ CONF_GET_SOURCES = "get_sources" CONF_STATE_DETECTION_RULES = "state_detection_rules" CONF_TURN_ON_COMMAND = "turn_on_command" CONF_TURN_OFF_COMMAND = "turn_off_command" +CONF_SCREENCAP = "screencap" DEFAULT_NAME = "Android TV" DEFAULT_PORT = 5555 DEFAULT_ADB_SERVER_PORT = 5037 DEFAULT_GET_SOURCES = True DEFAULT_DEVICE_CLASS = "auto" +DEFAULT_SCREENCAP = True DEVICE_ANDROIDTV = "androidtv" DEVICE_FIRETV = "firetv" @@ -137,7 +138,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( vol.Optional(CONF_ADB_SERVER_IP): cv.string, vol.Optional(CONF_ADB_SERVER_PORT, default=DEFAULT_ADB_SERVER_PORT): cv.port, vol.Optional(CONF_GET_SOURCES, default=DEFAULT_GET_SOURCES): cv.boolean, - vol.Optional(CONF_APPS, default=dict()): vol.Schema( + vol.Optional(CONF_APPS, default={}): vol.Schema( {cv.string: vol.Any(cv.string, None)} ), vol.Optional(CONF_TURN_ON_COMMAND): cv.string, @@ -146,6 +147,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( {cv.string: ha_state_detection_rules_validator(vol.Invalid)} ), vol.Optional(CONF_EXCLUDE_UNNAMED_APPS, default=False): cv.boolean, + vol.Optional(CONF_SCREENCAP, default=DEFAULT_SCREENCAP): cv.boolean, } ) @@ -239,6 +241,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): config.get(CONF_TURN_ON_COMMAND), config.get(CONF_TURN_OFF_COMMAND), config[CONF_EXCLUDE_UNNAMED_APPS], + config[CONF_SCREENCAP], ] if aftv.DEVICE_CLASS == DEVICE_ANDROIDTV: @@ -327,7 +330,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): target_device.adb_push(local_path, device_path) hass.services.register( - ANDROIDTV_DOMAIN, SERVICE_UPLOAD, service_upload, schema=SERVICE_UPLOAD_SCHEMA, + ANDROIDTV_DOMAIN, SERVICE_UPLOAD, service_upload, schema=SERVICE_UPLOAD_SCHEMA ) @@ -382,6 +385,7 @@ class ADBDevice(MediaPlayerDevice): turn_on_command, turn_off_command, exclude_unnamed_apps, + screencap, ): """Initialize the Android TV / Fire TV device.""" self.aftv = aftv @@ -401,6 +405,7 @@ class ADBDevice(MediaPlayerDevice): self.turn_off_command = turn_off_command self._exclude_unnamed_apps = exclude_unnamed_apps + self._screencap = screencap # ADB exceptions to catch if not self.aftv.adb_server_ip: @@ -479,7 +484,7 @@ class ADBDevice(MediaPlayerDevice): async def async_get_media_image(self): """Fetch current playing image.""" - if self.state in [STATE_OFF, None] or not self.available: + if not self._screencap or self.state in [STATE_OFF, None] or not self.available: return None, None media_data = await self.hass.async_add_executor_job(self.get_raw_media_data) @@ -489,16 +494,8 @@ class ADBDevice(MediaPlayerDevice): @adb_decorator() def get_raw_media_data(self): - """Raw base64 image data.""" - try: - response = self.aftv.adb_shell("screencap -p | base64") - except UnicodeDecodeError: - return None - - if isinstance(response, str) and response.strip(): - return binascii.a2b_base64(response.strip().replace("\n", "")) - - return None + """Raw image data.""" + return self.aftv.adb_screencap() @property def media_image_hash(self): @@ -613,6 +610,7 @@ class AndroidTVDevice(ADBDevice): turn_on_command, turn_off_command, exclude_unnamed_apps, + screencap, ): """Initialize the Android TV device.""" super().__init__( @@ -623,6 +621,7 @@ class AndroidTVDevice(ADBDevice): turn_on_command, turn_off_command, exclude_unnamed_apps, + screencap, ) self._is_volume_muted = None diff --git a/homeassistant/components/androidtv/services.yaml b/homeassistant/components/androidtv/services.yaml index 96d70ef4998..f5efe233271 100644 --- a/homeassistant/components/androidtv/services.yaml +++ b/homeassistant/components/androidtv/services.yaml @@ -5,31 +5,31 @@ adb_command: fields: entity_id: description: Name(s) of Android TV / Fire TV entities. - example: 'media_player.android_tv_living_room' + example: "media_player.android_tv_living_room" command: description: Either a key command or an ADB shell command. - example: 'HOME' + example: "HOME" download: description: Download a file from your Android TV / Fire TV device to your Home Assistant instance. fields: entity_id: description: Name of Android TV / Fire TV entity. - example: 'media_player.android_tv_living_room' + example: "media_player.android_tv_living_room" device_path: description: The filepath on the Android TV / Fire TV device. - example: '/storage/emulated/0/Download/example.txt' + example: "/storage/emulated/0/Download/example.txt" local_path: description: The filepath on your Home Assistant instance. - example: '/config/example.txt' + example: "/config/www/example.txt" upload: description: Upload a file from your Home Assistant instance to an Android TV / Fire TV device. fields: entity_id: description: Name(s) of Android TV / Fire TV entities. - example: 'media_player.android_tv_living_room' + example: "media_player.android_tv_living_room" device_path: description: The filepath on the Android TV / Fire TV device. - example: '/storage/emulated/0/Download/example.txt' + example: "/storage/emulated/0/Download/example.txt" local_path: description: The filepath on your Home Assistant instance. - example: '/config/example.txt' + example: "/config/www/example.txt" diff --git a/homeassistant/components/anel_pwrctrl/manifest.json b/homeassistant/components/anel_pwrctrl/manifest.json index d076d71b24a..891b485bd97 100644 --- a/homeassistant/components/anel_pwrctrl/manifest.json +++ b/homeassistant/components/anel_pwrctrl/manifest.json @@ -3,6 +3,5 @@ "name": "Anel NET-PwrCtrl", "documentation": "https://www.home-assistant.io/integrations/anel_pwrctrl", "requirements": ["anel_pwrctrl-homeassistant==0.0.1.dev2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/anel_pwrctrl/switch.py b/homeassistant/components/anel_pwrctrl/switch.py index 19a0cc7c6ad..cc6011d9b65 100644 --- a/homeassistant/components/anel_pwrctrl/switch.py +++ b/homeassistant/components/anel_pwrctrl/switch.py @@ -1,7 +1,6 @@ """Support for ANEL PwrCtrl switches.""" from datetime import timedelta import logging -import socket from anel_pwrctrl import DeviceMaster import voluptuous as vol @@ -31,11 +30,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up PwrCtrl devices/switches.""" - host = config.get(CONF_HOST, None) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - port_recv = config.get(CONF_PORT_RECV) - port_send = config.get(CONF_PORT_SEND) + host = config.get(CONF_HOST) + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] + port_recv = config[CONF_PORT_RECV] + port_send = config[CONF_PORT_SEND] try: master = DeviceMaster( @@ -45,7 +44,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): write_port=port_recv, ) master.query(ip_addr=host) - except socket.error as ex: + except OSError as ex: _LOGGER.error("Unable to discover PwrCtrl device: %s", str(ex)) return False diff --git a/homeassistant/components/anthemav/manifest.json b/homeassistant/components/anthemav/manifest.json index df0de2079de..db9d8c7d3b9 100644 --- a/homeassistant/components/anthemav/manifest.json +++ b/homeassistant/components/anthemav/manifest.json @@ -3,6 +3,5 @@ "name": "Anthem A/V Receivers", "documentation": "https://www.home-assistant.io/integrations/anthemav", "requirements": ["anthemav==1.1.10"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/anthemav/media_player.py b/homeassistant/components/anthemav/media_player.py index f4efd0de355..434692ce6f5 100644 --- a/homeassistant/components/anthemav/media_player.py +++ b/homeassistant/components/anthemav/media_player.py @@ -22,6 +22,10 @@ from homeassistant.const import ( ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.dispatcher import ( + async_dispatcher_connect, + async_dispatcher_send, +) _LOGGER = logging.getLogger(__name__) @@ -49,8 +53,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up our socket to the AVR.""" - host = config.get(CONF_HOST) - port = config.get(CONF_PORT) + host = config[CONF_HOST] + port = config[CONF_PORT] name = config.get(CONF_NAME) device = None @@ -60,7 +64,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= def async_anthemav_update_callback(message): """Receive notification from transport that new data exists.""" _LOGGER.debug("Received update callback from AVR: %s", message) - hass.async_create_task(device.async_update_ha_state()) + async_dispatcher_send(hass, DOMAIN) avr = await anthemav.Connection.create( host=host, port=port, update_callback=async_anthemav_update_callback @@ -87,6 +91,12 @@ class AnthemAVR(MediaPlayerDevice): def _lookup(self, propname, dval=None): return getattr(self.avr.protocol, propname, dval) + async def async_added_to_hass(self): + """When entity is added to hass.""" + self.async_on_remove( + async_dispatcher_connect(self.hass, DOMAIN, self.async_write_ha_state) + ) + @property def supported_features(self): """Flag media player features that are supported.""" @@ -132,9 +142,8 @@ class AnthemAVR(MediaPlayerDevice): def app_name(self): """Return details about current video and audio stream.""" return ( - self._lookup("video_input_resolution_text", "") - + " " - + self._lookup("audio_input_name", "") + f"{self._lookup('video_input_resolution_text', '')} " + f"{self._lookup('audio_input_name', '')}" ) @property @@ -176,4 +185,5 @@ class AnthemAVR(MediaPlayerDevice): def dump_avrdata(self): """Return state of avr object for debugging forensics.""" attrs = vars(self) - return "dump_avrdata: " + ", ".join("%s: %s" % item for item in attrs.items()) + items_string = ", ".join(f"{item}: {item}" for item in attrs.items()) + return f"dump_avrdata: {items_string}" diff --git a/homeassistant/components/apache_kafka/manifest.json b/homeassistant/components/apache_kafka/manifest.json index 0061aecade9..f4dd2cb6ae8 100644 --- a/homeassistant/components/apache_kafka/manifest.json +++ b/homeassistant/components/apache_kafka/manifest.json @@ -3,6 +3,5 @@ "name": "Apache Kafka", "documentation": "https://www.home-assistant.io/integrations/apache_kafka", "requirements": ["aiokafka==0.5.1"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/apcupsd/__init__.py b/homeassistant/components/apcupsd/__init__.py index 01f74165190..1f024bf5882 100644 --- a/homeassistant/components/apcupsd/__init__.py +++ b/homeassistant/components/apcupsd/__init__.py @@ -11,9 +11,6 @@ from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) -CONF_TYPE = "type" - -DATA = None DEFAULT_HOST = "localhost" DEFAULT_PORT = 3551 DOMAIN = "apcupsd" @@ -39,17 +36,17 @@ CONFIG_SCHEMA = vol.Schema( def setup(hass, config): """Use config values to set up a function enabling status retrieval.""" - global DATA conf = config[DOMAIN] - host = conf.get(CONF_HOST) - port = conf.get(CONF_PORT) + host = conf[CONF_HOST] + port = conf[CONF_PORT] - DATA = APCUPSdData(host, port) + apcups_data = APCUPSdData(host, port) + hass.data[DOMAIN] = apcups_data # It doesn't really matter why we're not able to get the status, just that # we can't. try: - DATA.update(no_throttle=True) + apcups_data.update(no_throttle=True) except Exception: # pylint: disable=broad-except _LOGGER.exception("Failure while testing APCUPSd status retrieval.") return False diff --git a/homeassistant/components/apcupsd/binary_sensor.py b/homeassistant/components/apcupsd/binary_sensor.py index de4e1f17200..000e738052d 100644 --- a/homeassistant/components/apcupsd/binary_sensor.py +++ b/homeassistant/components/apcupsd/binary_sensor.py @@ -1,11 +1,12 @@ """Support for tracking the online status of a UPS.""" import voluptuous as vol -from homeassistant.components import apcupsd from homeassistant.components.binary_sensor import PLATFORM_SCHEMA, BinarySensorDevice from homeassistant.const import CONF_NAME import homeassistant.helpers.config_validation as cv +from . import DOMAIN, KEY_STATUS, VALUE_ONLINE + DEFAULT_NAME = "UPS Online Status" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( {vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string} @@ -14,7 +15,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up an APCUPSd Online Status binary sensor.""" - add_entities([OnlineStatus(config, apcupsd.DATA)], True) + apcups_data = hass.data[DOMAIN] + + add_entities([OnlineStatus(config, apcups_data)], True) class OnlineStatus(BinarySensorDevice): @@ -29,13 +32,13 @@ class OnlineStatus(BinarySensorDevice): @property def name(self): """Return the name of the UPS online status sensor.""" - return self._config.get(CONF_NAME) + return self._config[CONF_NAME] @property def is_on(self): """Return true if the UPS is online, else false.""" - return self._state & apcupsd.VALUE_ONLINE > 0 + return self._state & VALUE_ONLINE > 0 def update(self): """Get the status report from APCUPSd and set this entity's state.""" - self._state = int(self._data.status[apcupsd.KEY_STATUS], 16) + self._state = int(self._data.status[KEY_STATUS], 16) diff --git a/homeassistant/components/apcupsd/manifest.json b/homeassistant/components/apcupsd/manifest.json index 5908523e6d8..643f42b4201 100644 --- a/homeassistant/components/apcupsd/manifest.json +++ b/homeassistant/components/apcupsd/manifest.json @@ -3,6 +3,5 @@ "name": "apcupsd", "documentation": "https://www.home-assistant.io/integrations/apcupsd", "requirements": ["apcaccess==0.0.13"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/apcupsd/sensor.py b/homeassistant/components/apcupsd/sensor.py index e39696cc37a..44c1c498c28 100644 --- a/homeassistant/components/apcupsd/sensor.py +++ b/homeassistant/components/apcupsd/sensor.py @@ -4,19 +4,22 @@ import logging from apcaccess.status import ALL_UNITS import voluptuous as vol -from homeassistant.components import apcupsd from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_RESOURCES, + FREQUENCY_HERTZ, POWER_WATT, TEMP_CELSIUS, TIME_MINUTES, TIME_SECONDS, UNIT_PERCENTAGE, + VOLT, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity +from . import DOMAIN + _LOGGER = logging.getLogger(__name__) SENSOR_PREFIX = "UPS " @@ -28,7 +31,7 @@ SENSOR_TYPES = { "badbatts": ["Bad Batteries", "", "mdi:information-outline"], "battdate": ["Battery Replaced", "", "mdi:calendar-clock"], "battstat": ["Battery Status", "", "mdi:information-outline"], - "battv": ["Battery Voltage", "V", "mdi:flash"], + "battv": ["Battery Voltage", VOLT, "mdi:flash"], "bcharge": ["Battery", UNIT_PERCENTAGE, "mdi:battery"], "cable": ["Cable Type", "", "mdi:ethernet-cable"], "cumonbatt": ["Total Time on Battery", "", "mdi:timer"], @@ -41,33 +44,33 @@ SENSOR_TYPES = { "endapc": ["Date and Time", "", "mdi:calendar-clock"], "extbatts": ["External Batteries", "", "mdi:information-outline"], "firmware": ["Firmware Version", "", "mdi:information-outline"], - "hitrans": ["Transfer High", "V", "mdi:flash"], + "hitrans": ["Transfer High", VOLT, "mdi:flash"], "hostname": ["Hostname", "", "mdi:information-outline"], "humidity": ["Ambient Humidity", UNIT_PERCENTAGE, "mdi:water-percent"], "itemp": ["Internal Temperature", TEMP_CELSIUS, "mdi:thermometer"], "lastxfer": ["Last Transfer", "", "mdi:transfer"], "linefail": ["Input Voltage Status", "", "mdi:information-outline"], - "linefreq": ["Line Frequency", "Hz", "mdi:information-outline"], - "linev": ["Input Voltage", "V", "mdi:flash"], + "linefreq": ["Line Frequency", FREQUENCY_HERTZ, "mdi:information-outline"], + "linev": ["Input Voltage", VOLT, "mdi:flash"], "loadpct": ["Load", UNIT_PERCENTAGE, "mdi:gauge"], "loadapnt": ["Load Apparent Power", UNIT_PERCENTAGE, "mdi:gauge"], - "lotrans": ["Transfer Low", "V", "mdi:flash"], + "lotrans": ["Transfer Low", VOLT, "mdi:flash"], "mandate": ["Manufacture Date", "", "mdi:calendar"], "masterupd": ["Master Update", "", "mdi:information-outline"], - "maxlinev": ["Input Voltage High", "V", "mdi:flash"], + "maxlinev": ["Input Voltage High", VOLT, "mdi:flash"], "maxtime": ["Battery Timeout", "", "mdi:timer-off"], "mbattchg": ["Battery Shutdown", UNIT_PERCENTAGE, "mdi:battery-alert"], - "minlinev": ["Input Voltage Low", "V", "mdi:flash"], + "minlinev": ["Input Voltage Low", VOLT, "mdi:flash"], "mintimel": ["Shutdown Time", "", "mdi:timer"], "model": ["Model", "", "mdi:information-outline"], - "nombattv": ["Battery Nominal Voltage", "V", "mdi:flash"], - "nominv": ["Nominal Input Voltage", "V", "mdi:flash"], - "nomoutv": ["Nominal Output Voltage", "V", "mdi:flash"], + "nombattv": ["Battery Nominal Voltage", VOLT, "mdi:flash"], + "nominv": ["Nominal Input Voltage", VOLT, "mdi:flash"], + "nomoutv": ["Nominal Output Voltage", VOLT, "mdi:flash"], "nompower": ["Nominal Output Power", POWER_WATT, "mdi:flash"], "nomapnt": ["Nominal Apparent Power", "VA", "mdi:flash"], "numxfers": ["Transfer Count", "", "mdi:counter"], "outcurnt": ["Output Current", "A", "mdi:flash"], - "outputv": ["Output Voltage", "V", "mdi:flash"], + "outputv": ["Output Voltage", VOLT, "mdi:flash"], "reg1": ["Register 1 Fault", "", "mdi:information-outline"], "reg2": ["Register 2 Fault", "", "mdi:information-outline"], "reg3": ["Register 3 Fault", "", "mdi:information-outline"], @@ -94,11 +97,11 @@ INFERRED_UNITS = { " Minutes": TIME_MINUTES, " Seconds": TIME_SECONDS, " Percent": UNIT_PERCENTAGE, - " Volts": "V", + " Volts": VOLT, " Ampere": "A", " Volt-Ampere": "VA", " Watts": POWER_WATT, - " Hz": "Hz", + " Hz": FREQUENCY_HERTZ, " C": TEMP_CELSIUS, " Percent Load Capacity": UNIT_PERCENTAGE, } @@ -114,6 +117,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the APCUPSd sensors.""" + apcups_data = hass.data[DOMAIN] entities = [] for resource in config[CONF_RESOURCES]: @@ -126,13 +130,13 @@ def setup_platform(hass, config, add_entities, discovery_info=None): "mdi:information-outline", ] - if sensor_type.upper() not in apcupsd.DATA.status: + if sensor_type.upper() not in apcups_data.status: _LOGGER.warning( "Sensor type: %s does not appear in the APCUPSd status output", sensor_type, ) - entities.append(APCUPSdSensor(apcupsd.DATA, sensor_type)) + entities.append(APCUPSdSensor(apcups_data, sensor_type)) add_entities(entities, True) diff --git a/homeassistant/components/api/__init__.py b/homeassistant/components/api/__init__.py index e11bc5e61f9..8d0cd44070c 100644 --- a/homeassistant/components/api/__init__.py +++ b/homeassistant/components/api/__init__.py @@ -17,6 +17,7 @@ from homeassistant.const import ( HTTP_BAD_REQUEST, HTTP_CREATED, HTTP_NOT_FOUND, + HTTP_OK, MATCH_ALL, URL_API, URL_API_COMPONENTS, @@ -250,7 +251,7 @@ class APIEntityStateView(HomeAssistantView): ) # Read the state back for our response - status_code = HTTP_CREATED if is_new_state else 200 + status_code = HTTP_CREATED if is_new_state else HTTP_OK resp = self.json(hass.states.get(entity_id), status_code) resp.headers.add("Location", f"/api/states/{entity_id}") diff --git a/homeassistant/components/api/manifest.json b/homeassistant/components/api/manifest.json index f5795a55f04..1f400470943 100644 --- a/homeassistant/components/api/manifest.json +++ b/homeassistant/components/api/manifest.json @@ -2,7 +2,6 @@ "domain": "api", "name": "Home Assistant API", "documentation": "https://www.home-assistant.io/integrations/api", - "requirements": [], "dependencies": ["http"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/apns/manifest.json b/homeassistant/components/apns/manifest.json index b498e4476ec..0d3639040f7 100644 --- a/homeassistant/components/apns/manifest.json +++ b/homeassistant/components/apns/manifest.json @@ -3,7 +3,6 @@ "name": "Apple Push Notification Service (APNS)", "documentation": "https://www.home-assistant.io/integrations/apns", "requirements": ["apns2==0.3.0"], - "dependencies": [], "after_dependencies": ["device_tracker"], "codeowners": [] } diff --git a/homeassistant/components/apns/notify.py b/homeassistant/components/apns/notify.py index 3cd43ee36ae..59b2a7aa9fa 100644 --- a/homeassistant/components/apns/notify.py +++ b/homeassistant/components/apns/notify.py @@ -45,10 +45,10 @@ REGISTER_SERVICE_SCHEMA = vol.Schema( def get_service(hass, config, discovery_info=None): """Return push service.""" - name = config.get(CONF_NAME) - cert_file = config.get(CONF_CERTFILE) - topic = config.get(CONF_TOPIC) - sandbox = config.get(CONF_SANDBOX) + name = config[CONF_NAME] + cert_file = config[CONF_CERTFILE] + topic = config[CONF_TOPIC] + sandbox = config[CONF_SANDBOX] service = ApnsNotificationService(hass, name, topic, sandbox, cert_file) hass.services.register( diff --git a/homeassistant/components/apple_tv/__init__.py b/homeassistant/components/apple_tv/__init__.py index 52e02cfaf72..aae4165fe5f 100644 --- a/homeassistant/components/apple_tv/__init__.py +++ b/homeassistant/components/apple_tv/__init__.py @@ -129,8 +129,10 @@ async def scan_apple_tvs(hass): if not devices: devices = ["No device(s) found"] + found_devices = "

".join(devices) + hass.components.persistent_notification.async_create( - "The following devices were found:

" + "

".join(devices), + f"The following devices were found:

{found_devices}", title=NOTIFICATION_SCAN_TITLE, notification_id=NOTIFICATION_SCAN_ID, ) diff --git a/homeassistant/components/apple_tv/media_player.py b/homeassistant/components/apple_tv/media_player.py index c34a46a8b82..8b9f3355930 100644 --- a/homeassistant/components/apple_tv/media_player.py +++ b/homeassistant/components/apple_tv/media_player.py @@ -138,7 +138,7 @@ class AppleTvDevice(MediaPlayerDevice): def playstatus_update(self, updater, playing): """Print what is currently playing when it changes.""" self._playing = playing - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def playstatus_error(self, updater, exception): @@ -151,7 +151,7 @@ class AppleTvDevice(MediaPlayerDevice): # implemented here later. updater.start(initial_delay=10) self._playing = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def media_content_type(self): diff --git a/homeassistant/components/apple_tv/services.yaml b/homeassistant/components/apple_tv/services.yaml index 01e26a5630b..af1e052fa33 100644 --- a/homeassistant/components/apple_tv/services.yaml +++ b/homeassistant/components/apple_tv/services.yaml @@ -1,5 +1,8 @@ apple_tv_authenticate: description: Start AirPlay device authentication. fields: - entity_id: {description: Name(s) of entities to authenticate with., example: media_player.apple_tv} -apple_tv_scan: {description: Scan for Apple TV devices.} + entity_id: + description: Name(s) of entities to authenticate with. + example: media_player.apple_tv +apple_tv_scan: + description: Scan for Apple TV devices. diff --git a/homeassistant/components/apprise/manifest.json b/homeassistant/components/apprise/manifest.json index ba934b804d7..2f22b9f6344 100644 --- a/homeassistant/components/apprise/manifest.json +++ b/homeassistant/components/apprise/manifest.json @@ -3,6 +3,5 @@ "name": "Apprise", "documentation": "https://www.home-assistant.io/integrations/apprise", "requirements": ["apprise==0.8.5"], - "dependencies": [], "codeowners": ["@caronc"] } diff --git a/homeassistant/components/aprs/manifest.json b/homeassistant/components/aprs/manifest.json index bc887505cd7..c2f4fe52fa1 100644 --- a/homeassistant/components/aprs/manifest.json +++ b/homeassistant/components/aprs/manifest.json @@ -2,7 +2,6 @@ "domain": "aprs", "name": "APRS", "documentation": "https://www.home-assistant.io/integrations/aprs", - "dependencies": [], "codeowners": ["@PhilRW"], - "requirements": ["aprslib==0.6.46", "geopy==1.19.0"] + "requirements": ["aprslib==0.6.46", "geopy==1.21.0"] } diff --git a/homeassistant/components/aqualogic/__init__.py b/homeassistant/components/aqualogic/__init__.py index 9f693966382..7ed38206a11 100644 --- a/homeassistant/components/aqualogic/__init__.py +++ b/homeassistant/components/aqualogic/__init__.py @@ -18,7 +18,7 @@ from homeassistant.helpers import config_validation as cv _LOGGER = logging.getLogger(__name__) DOMAIN = "aqualogic" -UPDATE_TOPIC = DOMAIN + "_update" +UPDATE_TOPIC = f"{DOMAIN}_update" CONF_UNIT = "unit" RECONNECT_INTERVAL = timedelta(seconds=10) diff --git a/homeassistant/components/aqualogic/manifest.json b/homeassistant/components/aqualogic/manifest.json index f7f704e998b..2a8e2a78cac 100644 --- a/homeassistant/components/aqualogic/manifest.json +++ b/homeassistant/components/aqualogic/manifest.json @@ -3,6 +3,5 @@ "name": "AquaLogic", "documentation": "https://www.home-assistant.io/integrations/aqualogic", "requirements": ["aqualogic==1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/aqualogic/sensor.py b/homeassistant/components/aqualogic/sensor.py index dde092dd1fa..a53a8c1d348 100644 --- a/homeassistant/components/aqualogic/sensor.py +++ b/homeassistant/components/aqualogic/sensor.py @@ -6,6 +6,7 @@ import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_MONITORED_CONDITIONS, + POWER_WATT, TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE, @@ -21,7 +22,7 @@ _LOGGER = logging.getLogger(__name__) TEMP_UNITS = [TEMP_CELSIUS, TEMP_FAHRENHEIT] PERCENT_UNITS = [UNIT_PERCENTAGE, UNIT_PERCENTAGE] SALT_UNITS = ["g/L", "PPM"] -WATT_UNITS = ["W", "W"] +WATT_UNITS = [POWER_WATT, POWER_WATT] NO_UNITS = [None, None] # sensor_type [ description, unit, icon ] @@ -52,7 +53,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= sensors = [] processor = hass.data[DOMAIN] - for sensor_type in config.get(CONF_MONITORED_CONDITIONS): + for sensor_type in config[CONF_MONITORED_CONDITIONS]: sensors.append(AquaLogicSensor(processor, sensor_type)) async_add_entities(sensors) @@ -99,8 +100,10 @@ class AquaLogicSensor(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - UPDATE_TOPIC, self.async_update_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + UPDATE_TOPIC, self.async_update_callback + ) ) @callback @@ -109,4 +112,4 @@ class AquaLogicSensor(Entity): panel = self._processor.panel if panel is not None: self._state = getattr(panel, self._type) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/aqualogic/switch.py b/homeassistant/components/aqualogic/switch.py index 6950929ee80..d949175bc6e 100644 --- a/homeassistant/components/aqualogic/switch.py +++ b/homeassistant/components/aqualogic/switch.py @@ -6,7 +6,6 @@ import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice from homeassistant.const import CONF_MONITORED_CONDITIONS -from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from . import DOMAIN, UPDATE_TOPIC @@ -40,7 +39,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= switches = [] processor = hass.data[DOMAIN] - for switch_type in config.get(CONF_MONITORED_CONDITIONS): + for switch_type in config[CONF_MONITORED_CONDITIONS]: switches.append(AquaLogicSwitch(processor, switch_type)) async_add_entities(switches) @@ -51,7 +50,6 @@ class AquaLogicSwitch(SwitchDevice): def __init__(self, processor, switch_type): """Initialize switch.""" - self._processor = processor self._type = switch_type self._state_name = { @@ -102,11 +100,8 @@ class AquaLogicSwitch(SwitchDevice): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - UPDATE_TOPIC, self.async_update_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + UPDATE_TOPIC, self.async_write_ha_state + ) ) - - @callback - def async_update_callback(self): - """Update callback.""" - self.async_schedule_update_ha_state() diff --git a/homeassistant/components/aquostv/manifest.json b/homeassistant/components/aquostv/manifest.json index 8922249e3fa..cd402b3db90 100644 --- a/homeassistant/components/aquostv/manifest.json +++ b/homeassistant/components/aquostv/manifest.json @@ -3,6 +3,5 @@ "name": "Sharp Aquos TV", "documentation": "https://www.home-assistant.io/integrations/aquostv", "requirements": ["sharp_aquos_rc==0.3.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/aquostv/media_player.py b/homeassistant/components/aquostv/media_player.py index f71f41dc293..d5383590868 100644 --- a/homeassistant/components/aquostv/media_player.py +++ b/homeassistant/components/aquostv/media_player.py @@ -79,11 +79,11 @@ SOURCES = { def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Sharp Aquos TV platform.""" - name = config.get(CONF_NAME) - port = config.get(CONF_PORT) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - power_on_enabled = config.get("power_on_enabled") + name = config[CONF_NAME] + port = config[CONF_PORT] + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] + power_on_enabled = config["power_on_enabled"] if discovery_info: _LOGGER.debug("%s", discovery_info) @@ -96,7 +96,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): add_entities([SharpAquosTVDevice(name, remote, power_on_enabled)]) return True - host = config.get(CONF_HOST) + host = config[CONF_HOST] remote = sharp_aquos_rc.TV(host, port, username, password, 15, 1) add_entities([SharpAquosTVDevice(name, remote, power_on_enabled)]) @@ -126,10 +126,10 @@ class SharpAquosTVDevice(MediaPlayerDevice): def __init__(self, name, remote, power_on_enabled=False): """Initialize the aquos device.""" - global SUPPORT_SHARPTV + self._supported_features = SUPPORT_SHARPTV self._power_on_enabled = power_on_enabled if self._power_on_enabled: - SUPPORT_SHARPTV = SUPPORT_SHARPTV | SUPPORT_TURN_ON + self._supported_features |= SUPPORT_TURN_ON # Save a reference to the imported class self._name = name # Assume that the TV is not muted @@ -199,7 +199,7 @@ class SharpAquosTVDevice(MediaPlayerDevice): @property def supported_features(self): """Flag media player features that are supported.""" - return SUPPORT_SHARPTV + return self._supported_features @_retry def turn_off(self): diff --git a/homeassistant/components/arcam_fmj/.translations/bg.json b/homeassistant/components/arcam_fmj/.translations/bg.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/bg.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/ca.json b/homeassistant/components/arcam_fmj/.translations/ca.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/ca.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/da.json b/homeassistant/components/arcam_fmj/.translations/da.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/da.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/de.json b/homeassistant/components/arcam_fmj/.translations/de.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/de.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/en.json b/homeassistant/components/arcam_fmj/.translations/en.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/en.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/es-419.json b/homeassistant/components/arcam_fmj/.translations/es-419.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/es-419.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/es.json b/homeassistant/components/arcam_fmj/.translations/es.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/es.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/fr.json b/homeassistant/components/arcam_fmj/.translations/fr.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/fr.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/it.json b/homeassistant/components/arcam_fmj/.translations/it.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/it.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/ko.json b/homeassistant/components/arcam_fmj/.translations/ko.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/ko.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/lb.json b/homeassistant/components/arcam_fmj/.translations/lb.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/lb.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/nl.json b/homeassistant/components/arcam_fmj/.translations/nl.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/nl.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/nn.json b/homeassistant/components/arcam_fmj/.translations/nn.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/no.json b/homeassistant/components/arcam_fmj/.translations/no.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/no.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/pl.json b/homeassistant/components/arcam_fmj/.translations/pl.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/pl.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/pt-BR.json b/homeassistant/components/arcam_fmj/.translations/pt-BR.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/pt-BR.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/ru.json b/homeassistant/components/arcam_fmj/.translations/ru.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/ru.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/sl.json b/homeassistant/components/arcam_fmj/.translations/sl.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/sl.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/sv.json b/homeassistant/components/arcam_fmj/.translations/sv.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/sv.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/.translations/zh-Hant.json b/homeassistant/components/arcam_fmj/.translations/zh-Hant.json deleted file mode 100644 index b0ad4660d0f..00000000000 --- a/homeassistant/components/arcam_fmj/.translations/zh-Hant.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/manifest.json b/homeassistant/components/arcam_fmj/manifest.json index cb063c4c047..5508f4b6869 100644 --- a/homeassistant/components/arcam_fmj/manifest.json +++ b/homeassistant/components/arcam_fmj/manifest.json @@ -4,6 +4,5 @@ "config_flow": false, "documentation": "https://www.home-assistant.io/integrations/arcam_fmj", "requirements": ["arcam-fmj==0.4.3"], - "dependencies": [], "codeowners": ["@elupus"] } diff --git a/homeassistant/components/arcam_fmj/media_player.py b/homeassistant/components/arcam_fmj/media_player.py index 8a54c745695..92e07a0547e 100644 --- a/homeassistant/components/arcam_fmj/media_player.py +++ b/homeassistant/components/arcam_fmj/media_player.py @@ -130,7 +130,7 @@ class ArcamFmj(MediaPlayerDevice): @callback def _data(host): if host == self._state.client.host: - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def _started(host): @@ -142,14 +142,22 @@ class ArcamFmj(MediaPlayerDevice): if host == self._state.client.host: self.async_schedule_update_ha_state(force_refresh=True) - self.hass.helpers.dispatcher.async_dispatcher_connect(SIGNAL_CLIENT_DATA, _data) - - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_CLIENT_STARTED, _started + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_CLIENT_DATA, _data + ) ) - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_CLIENT_STOPPED, _stopped + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_CLIENT_STARTED, _started + ) + ) + + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_CLIENT_STOPPED, _stopped + ) ) async def async_update(self): @@ -160,7 +168,7 @@ class ArcamFmj(MediaPlayerDevice): async def async_mute_volume(self, mute): """Send mute command.""" await self._state.set_mute(mute) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_select_source(self, source): """Select a specific source.""" @@ -171,7 +179,7 @@ class ArcamFmj(MediaPlayerDevice): return await self._state.set_source(value) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_select_sound_mode(self, sound_mode): """Select a specific source.""" @@ -184,22 +192,22 @@ class ArcamFmj(MediaPlayerDevice): _LOGGER.error("Unsupported sound_mode %s", sound_mode) return - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_volume_level(self, volume): """Set volume level, range 0..1.""" await self._state.set_volume(round(volume * 99.0)) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_volume_up(self): """Turn volume up for media player.""" await self._state.inc_volume() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_volume_down(self): """Turn volume up for media player.""" await self._state.dec_volume() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self): """Turn the media player on.""" diff --git a/homeassistant/components/arcam_fmj/strings.json b/homeassistant/components/arcam_fmj/strings.json deleted file mode 100644 index b0006dbb5ae..00000000000 --- a/homeassistant/components/arcam_fmj/strings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Arcam FMJ" - } -} diff --git a/homeassistant/components/arcam_fmj/translations/bg.json b/homeassistant/components/arcam_fmj/translations/bg.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/ca.json b/homeassistant/components/arcam_fmj/translations/ca.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/da.json b/homeassistant/components/arcam_fmj/translations/da.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/de.json b/homeassistant/components/arcam_fmj/translations/de.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/en.json b/homeassistant/components/arcam_fmj/translations/en.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/es-419.json b/homeassistant/components/arcam_fmj/translations/es-419.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/es.json b/homeassistant/components/arcam_fmj/translations/es.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/fr.json b/homeassistant/components/arcam_fmj/translations/fr.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/it.json b/homeassistant/components/arcam_fmj/translations/it.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/ko.json b/homeassistant/components/arcam_fmj/translations/ko.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/lb.json b/homeassistant/components/arcam_fmj/translations/lb.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/nl.json b/homeassistant/components/arcam_fmj/translations/nl.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/nn.json b/homeassistant/components/arcam_fmj/translations/nn.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/no.json b/homeassistant/components/arcam_fmj/translations/no.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/pl.json b/homeassistant/components/arcam_fmj/translations/pl.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/pt-BR.json b/homeassistant/components/arcam_fmj/translations/pt-BR.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/ru.json b/homeassistant/components/arcam_fmj/translations/ru.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/sl.json b/homeassistant/components/arcam_fmj/translations/sl.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/sv.json b/homeassistant/components/arcam_fmj/translations/sv.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arcam_fmj/translations/zh-Hant.json b/homeassistant/components/arcam_fmj/translations/zh-Hant.json new file mode 100644 index 00000000000..b78b8cbaa7b --- /dev/null +++ b/homeassistant/components/arcam_fmj/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "Arcam FMJ" +} \ No newline at end of file diff --git a/homeassistant/components/arduino/__init__.py b/homeassistant/components/arduino/__init__.py index 61b03a3160d..e87a625522e 100644 --- a/homeassistant/components/arduino/__init__.py +++ b/homeassistant/components/arduino/__init__.py @@ -14,8 +14,6 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -BOARD = None - DOMAIN = "arduino" CONFIG_SCHEMA = vol.Schema( @@ -28,15 +26,14 @@ def setup(hass, config): port = config[DOMAIN][CONF_PORT] - global BOARD try: - BOARD = ArduinoBoard(port) + board = ArduinoBoard(port) except (serial.serialutil.SerialException, FileNotFoundError): _LOGGER.error("Your port %s is not accessible", port) return False try: - if BOARD.get_firmata()[1] <= 2: + if board.get_firmata()[1] <= 2: _LOGGER.error("The StandardFirmata sketch should be 2.2 or newer") return False except IndexError: @@ -47,13 +44,14 @@ def setup(hass, config): def stop_arduino(event): """Stop the Arduino service.""" - BOARD.disconnect() + board.disconnect() def start_arduino(event): """Start the Arduino service.""" hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_arduino) hass.bus.listen_once(EVENT_HOMEASSISTANT_START, start_arduino) + hass.data[DOMAIN] = board return True diff --git a/homeassistant/components/arduino/manifest.json b/homeassistant/components/arduino/manifest.json index aded8c1c9ac..4266d55926b 100644 --- a/homeassistant/components/arduino/manifest.json +++ b/homeassistant/components/arduino/manifest.json @@ -3,6 +3,5 @@ "name": "Arduino", "documentation": "https://www.home-assistant.io/integrations/arduino", "requirements": ["PyMata==2.20"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/arduino/sensor.py b/homeassistant/components/arduino/sensor.py index c5863475512..8da656d217a 100644 --- a/homeassistant/components/arduino/sensor.py +++ b/homeassistant/components/arduino/sensor.py @@ -3,12 +3,13 @@ import logging import voluptuous as vol -from homeassistant.components import arduino from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import CONF_NAME import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity +from . import DOMAIN + _LOGGER = logging.getLogger(__name__) CONF_PINS = "pins" @@ -23,22 +24,20 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Arduino platform.""" - if arduino.BOARD is None: - _LOGGER.error("A connection has not been made to the Arduino board") - return False + board = hass.data[DOMAIN] - pins = config.get(CONF_PINS) + pins = config[CONF_PINS] sensors = [] for pinnum, pin in pins.items(): - sensors.append(ArduinoSensor(pin.get(CONF_NAME), pinnum, CONF_TYPE)) + sensors.append(ArduinoSensor(pin.get(CONF_NAME), pinnum, CONF_TYPE, board)) add_entities(sensors) class ArduinoSensor(Entity): """Representation of an Arduino Sensor.""" - def __init__(self, name, pin, pin_type): + def __init__(self, name, pin, pin_type, board): """Initialize the sensor.""" self._pin = pin self._name = name @@ -46,7 +45,8 @@ class ArduinoSensor(Entity): self.direction = "in" self._value = None - arduino.BOARD.set_mode(self._pin, self.direction, self.pin_type) + board.set_mode(self._pin, self.direction, self.pin_type) + self._board = board @property def state(self): @@ -60,4 +60,4 @@ class ArduinoSensor(Entity): def update(self): """Get the latest value from the pin.""" - self._value = arduino.BOARD.get_analog_inputs()[self._pin][1] + self._value = self._board.get_analog_inputs()[self._pin][1] diff --git a/homeassistant/components/arduino/switch.py b/homeassistant/components/arduino/switch.py index 5b5b161a24a..ea6f36ac7f5 100644 --- a/homeassistant/components/arduino/switch.py +++ b/homeassistant/components/arduino/switch.py @@ -3,11 +3,12 @@ import logging import voluptuous as vol -from homeassistant.components import arduino from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice from homeassistant.const import CONF_NAME import homeassistant.helpers.config_validation as cv +from . import DOMAIN + _LOGGER = logging.getLogger(__name__) CONF_PINS = "pins" @@ -30,39 +31,36 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Arduino platform.""" - # Verify that Arduino board is present - if arduino.BOARD is None: - _LOGGER.error("A connection has not been made to the Arduino board") - return False + board = hass.data[DOMAIN] - pins = config.get(CONF_PINS) + pins = config[CONF_PINS] switches = [] for pinnum, pin in pins.items(): - switches.append(ArduinoSwitch(pinnum, pin)) + switches.append(ArduinoSwitch(pinnum, pin, board)) add_entities(switches) class ArduinoSwitch(SwitchDevice): """Representation of an Arduino switch.""" - def __init__(self, pin, options): + def __init__(self, pin, options, board): """Initialize the Pin.""" self._pin = pin - self._name = options.get(CONF_NAME) + self._name = options[CONF_NAME] self.pin_type = CONF_TYPE self.direction = "out" - self._state = options.get(CONF_INITIAL) + self._state = options[CONF_INITIAL] - if options.get(CONF_NEGATE): - self.turn_on_handler = arduino.BOARD.set_digital_out_low - self.turn_off_handler = arduino.BOARD.set_digital_out_high + if options[CONF_NEGATE]: + self.turn_on_handler = board.set_digital_out_low + self.turn_off_handler = board.set_digital_out_high else: - self.turn_on_handler = arduino.BOARD.set_digital_out_high - self.turn_off_handler = arduino.BOARD.set_digital_out_low + self.turn_on_handler = board.set_digital_out_high + self.turn_off_handler = board.set_digital_out_low - arduino.BOARD.set_mode(self._pin, self.direction, self.pin_type) + board.set_mode(self._pin, self.direction, self.pin_type) (self.turn_on_handler if self._state else self.turn_off_handler)(pin) @property diff --git a/homeassistant/components/arest/binary_sensor.py b/homeassistant/components/arest/binary_sensor.py index 3bd0a85c6f0..1b914f80aa7 100644 --- a/homeassistant/components/arest/binary_sensor.py +++ b/homeassistant/components/arest/binary_sensor.py @@ -10,7 +10,13 @@ from homeassistant.components.binary_sensor import ( PLATFORM_SCHEMA, BinarySensorDevice, ) -from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME, CONF_PIN, CONF_RESOURCE +from homeassistant.const import ( + CONF_DEVICE_CLASS, + CONF_NAME, + CONF_PIN, + CONF_RESOURCE, + HTTP_OK, +) import homeassistant.helpers.config_validation as cv from homeassistant.util import Throttle @@ -30,8 +36,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the aREST binary sensor.""" - resource = config.get(CONF_RESOURCE) - pin = config.get(CONF_PIN) + resource = config[CONF_RESOURCE] + pin = config[CONF_PIN] device_class = config.get(CONF_DEVICE_CLASS) try: @@ -74,7 +80,7 @@ class ArestBinarySensor(BinarySensorDevice): if self._pin is not None: request = requests.get(f"{self._resource}/mode/{self._pin}/i", timeout=10) - if request.status_code != 200: + if request.status_code != HTTP_OK: _LOGGER.error("Can't set mode of %s", self._resource) @property diff --git a/homeassistant/components/arest/manifest.json b/homeassistant/components/arest/manifest.json index 58eaad4648b..9ed57d2d982 100644 --- a/homeassistant/components/arest/manifest.json +++ b/homeassistant/components/arest/manifest.json @@ -2,7 +2,5 @@ "domain": "arest", "name": "aREST", "documentation": "https://www.home-assistant.io/integrations/arest", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/arest/sensor.py b/homeassistant/components/arest/sensor.py index 1bb34a11693..638c0e2557a 100644 --- a/homeassistant/components/arest/sensor.py +++ b/homeassistant/components/arest/sensor.py @@ -12,6 +12,7 @@ from homeassistant.const import ( CONF_RESOURCE, CONF_UNIT_OF_MEASUREMENT, CONF_VALUE_TEMPLATE, + HTTP_OK, ) from homeassistant.exceptions import TemplateError import homeassistant.helpers.config_validation as cv @@ -51,9 +52,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the aREST sensor.""" - resource = config.get(CONF_RESOURCE) - var_conf = config.get(CONF_MONITORED_VARIABLES) - pins = config.get(CONF_PINS) + resource = config[CONF_RESOURCE] + var_conf = config[CONF_MONITORED_VARIABLES] + pins = config[CONF_PINS] try: response = requests.get(resource, timeout=10).json() @@ -149,7 +150,7 @@ class ArestSensor(Entity): if self._pin is not None: request = requests.get(f"{self._resource}/mode/{self._pin}/i", timeout=10) - if request.status_code != 200: + if request.status_code != HTTP_OK: _LOGGER.error("Can't set mode of %s", self._resource) @property diff --git a/homeassistant/components/arest/switch.py b/homeassistant/components/arest/switch.py index d3a51391627..875211f5f0b 100644 --- a/homeassistant/components/arest/switch.py +++ b/homeassistant/components/arest/switch.py @@ -6,7 +6,7 @@ import requests import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice -from homeassistant.const import CONF_NAME, CONF_RESOURCE +from homeassistant.const import CONF_NAME, CONF_RESOURCE, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -40,7 +40,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the aREST switches.""" - resource = config.get(CONF_RESOURCE) + resource = config[CONF_RESOURCE] try: response = requests.get(resource, timeout=10) @@ -54,7 +54,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): return False dev = [] - pins = config.get(CONF_PINS) + pins = config[CONF_PINS] for pinnum, pin in pins.items(): dev.append( ArestSwitchPin( @@ -62,11 +62,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None): config.get(CONF_NAME, response.json()[CONF_NAME]), pin.get(CONF_NAME), pinnum, - pin.get(CONF_INVERT), + pin[CONF_INVERT], ) ) - functions = config.get(CONF_FUNCTIONS) + functions = config[CONF_FUNCTIONS] for funcname, func in functions.items(): dev.append( ArestSwitchFunction( @@ -116,7 +116,7 @@ class ArestSwitchFunction(ArestSwitchBase): request = requests.get(f"{self._resource}/{self._func}", timeout=10) - if request.status_code != 200: + if request.status_code != HTTP_OK: _LOGGER.error("Can't find function") return @@ -133,7 +133,7 @@ class ArestSwitchFunction(ArestSwitchBase): f"{self._resource}/{self._func}", timeout=10, params={"params": "1"} ) - if request.status_code == 200: + if request.status_code == HTTP_OK: self._state = True else: _LOGGER.error("Can't turn on function %s at %s", self._func, self._resource) @@ -144,7 +144,7 @@ class ArestSwitchFunction(ArestSwitchBase): f"{self._resource}/{self._func}", timeout=10, params={"params": "0"} ) - if request.status_code == 200: + if request.status_code == HTTP_OK: self._state = False else: _LOGGER.error( @@ -172,7 +172,7 @@ class ArestSwitchPin(ArestSwitchBase): self.invert = invert request = requests.get(f"{self._resource}/mode/{self._pin}/o", timeout=10) - if request.status_code != 200: + if request.status_code != HTTP_OK: _LOGGER.error("Can't set mode") self._available = False @@ -182,7 +182,7 @@ class ArestSwitchPin(ArestSwitchBase): request = requests.get( f"{self._resource}/digital/{self._pin}/{turn_on_payload}", timeout=10 ) - if request.status_code == 200: + if request.status_code == HTTP_OK: self._state = True else: _LOGGER.error("Can't turn on pin %s at %s", self._pin, self._resource) @@ -193,7 +193,7 @@ class ArestSwitchPin(ArestSwitchBase): request = requests.get( f"{self._resource}/digital/{self._pin}/{turn_off_payload}", timeout=10 ) - if request.status_code == 200: + if request.status_code == HTTP_OK: self._state = False else: _LOGGER.error("Can't turn off pin %s at %s", self._pin, self._resource) diff --git a/homeassistant/components/arlo/__init__.py b/homeassistant/components/arlo/__init__.py index 40d75d557bb..3cc0ec607a5 100644 --- a/homeassistant/components/arlo/__init__.py +++ b/homeassistant/components/arlo/__init__.py @@ -43,9 +43,9 @@ CONFIG_SCHEMA = vol.Schema( def setup(hass, config): """Set up an Arlo component.""" conf = config[DOMAIN] - username = conf.get(CONF_USERNAME) - password = conf.get(CONF_PASSWORD) - scan_interval = conf.get(CONF_SCAN_INTERVAL) + username = conf[CONF_USERNAME] + password = conf[CONF_PASSWORD] + scan_interval = conf[CONF_SCAN_INTERVAL] try: diff --git a/homeassistant/components/arlo/alarm_control_panel.py b/homeassistant/components/arlo/alarm_control_panel.py index 49a1bced577..7440db0495e 100644 --- a/homeassistant/components/arlo/alarm_control_panel.py +++ b/homeassistant/components/arlo/alarm_control_panel.py @@ -53,9 +53,9 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if not arlo.base_stations: return - home_mode_name = config.get(CONF_HOME_MODE_NAME) - away_mode_name = config.get(CONF_AWAY_MODE_NAME) - night_mode_name = config.get(CONF_NIGHT_MODE_NAME) + home_mode_name = config[CONF_HOME_MODE_NAME] + away_mode_name = config[CONF_AWAY_MODE_NAME] + night_mode_name = config[CONF_NIGHT_MODE_NAME] base_stations = [] for base_station in arlo.base_stations: base_stations.append( @@ -84,7 +84,11 @@ class ArloBaseStation(AlarmControlPanel): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect(self.hass, SIGNAL_UPDATE_ARLO, self._update_callback) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_ARLO, self._update_callback + ) + ) @callback def _update_callback(self): diff --git a/homeassistant/components/arlo/camera.py b/homeassistant/components/arlo/camera.py index 8152a76feec..6f7e3796309 100644 --- a/homeassistant/components/arlo/camera.py +++ b/homeassistant/components/arlo/camera.py @@ -7,7 +7,6 @@ import voluptuous as vol from homeassistant.components.camera import PLATFORM_SCHEMA, Camera from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.const import ATTR_BATTERY_LEVEL -from homeassistant.core import callback from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -69,12 +68,11 @@ class ArloCam(Camera): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect(self.hass, SIGNAL_UPDATE_ARLO, self._update_callback) - - @callback - def _update_callback(self): - """Call update method.""" - self.async_schedule_update_ha_state() + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_ARLO, self.async_write_ha_state + ) + ) async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" diff --git a/homeassistant/components/arlo/sensor.py b/homeassistant/components/arlo/sensor.py index 03e4437b257..9942ce687f4 100644 --- a/homeassistant/components/arlo/sensor.py +++ b/homeassistant/components/arlo/sensor.py @@ -51,7 +51,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): return sensors = [] - for sensor_type in config.get(CONF_MONITORED_CONDITIONS): + for sensor_type in config[CONF_MONITORED_CONDITIONS]: if sensor_type == "total_cameras": sensors.append(ArloSensor(SENSOR_TYPES[sensor_type][0], arlo, sensor_type)) else: @@ -92,7 +92,11 @@ class ArloSensor(Entity): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect(self.hass, SIGNAL_UPDATE_ARLO, self._update_callback) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_ARLO, self._update_callback + ) + ) @callback def _update_callback(self): diff --git a/homeassistant/components/arlo/services.yaml b/homeassistant/components/arlo/services.yaml index 773bee4430a..a35fec8fb73 100644 --- a/homeassistant/components/arlo/services.yaml +++ b/homeassistant/components/arlo/services.yaml @@ -1,4 +1,4 @@ # Describes the format for available arlo services update: - description: Update the state for all cameras and the base station. \ No newline at end of file + description: Update the state for all cameras and the base station. diff --git a/homeassistant/components/arris_tg2492lg/__init__.py b/homeassistant/components/arris_tg2492lg/__init__.py new file mode 100644 index 00000000000..c08ddcba48f --- /dev/null +++ b/homeassistant/components/arris_tg2492lg/__init__.py @@ -0,0 +1 @@ +"""The Arris TG2492LG component.""" diff --git a/homeassistant/components/arris_tg2492lg/device_tracker.py b/homeassistant/components/arris_tg2492lg/device_tracker.py new file mode 100644 index 00000000000..d18d19806f9 --- /dev/null +++ b/homeassistant/components/arris_tg2492lg/device_tracker.py @@ -0,0 +1,70 @@ +"""Support for Arris TG2492LG router.""" +import logging +from typing import List + +from arris_tg2492lg import ConnectBox, Device +import voluptuous as vol + +from homeassistant.components.device_tracker import ( + DOMAIN, + PLATFORM_SCHEMA, + DeviceScanner, +) +from homeassistant.const import CONF_HOST, CONF_PASSWORD +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_HOST = "192.168.178.1" + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( + { + vol.Required(CONF_PASSWORD): cv.string, + vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string, + } +) + + +def get_scanner(hass, config): + """Return the Arris device scanner.""" + conf = config[DOMAIN] + url = f"http://{conf[CONF_HOST]}" + connect_box = ConnectBox(url, conf[CONF_PASSWORD]) + return ArrisDeviceScanner(connect_box) + + +class ArrisDeviceScanner(DeviceScanner): + """This class queries a Arris TG2492LG router for connected devices.""" + + def __init__(self, connect_box: ConnectBox): + """Initialize the scanner.""" + self.connect_box = connect_box + self.last_results: List[Device] = [] + + def scan_devices(self): + """Scan for new devices and return a list with found device IDs.""" + self._update_info() + + return [device.mac for device in self.last_results] + + def get_device_name(self, device): + """Return the name of the given device or None if we don't know.""" + name = next( + (result.hostname for result in self.last_results if result.mac == device), + None, + ) + return name + + def _update_info(self): + """Ensure the information from the Arris TG2492LG router is up to date.""" + result = self.connect_box.get_connected_devices() + + last_results = [] + mac_addresses = set() + + for device in result: + if device.online and device.mac not in mac_addresses: + last_results.append(device) + mac_addresses.add(device.mac) + + self.last_results = last_results diff --git a/homeassistant/components/arris_tg2492lg/manifest.json b/homeassistant/components/arris_tg2492lg/manifest.json new file mode 100644 index 00000000000..385bb955627 --- /dev/null +++ b/homeassistant/components/arris_tg2492lg/manifest.json @@ -0,0 +1,11 @@ +{ + "domain": "arris_tg2492lg", + "name": "Arris TG2492LG", + "documentation": "https://www.home-assistant.io/integrations/arris_tg2492lg", + "requirements": [ + "arris-tg2492lg==1.0.0" + ], + "codeowners": [ + "@vanbalken" + ] +} diff --git a/homeassistant/components/aruba/manifest.json b/homeassistant/components/aruba/manifest.json index b871fa029cf..aa55cdba355 100644 --- a/homeassistant/components/aruba/manifest.json +++ b/homeassistant/components/aruba/manifest.json @@ -3,6 +3,5 @@ "name": "Aruba", "documentation": "https://www.home-assistant.io/integrations/aruba", "requirements": ["pexpect==4.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/arwn/manifest.json b/homeassistant/components/arwn/manifest.json index d756fa457d3..36ec1c79e58 100644 --- a/homeassistant/components/arwn/manifest.json +++ b/homeassistant/components/arwn/manifest.json @@ -2,7 +2,6 @@ "domain": "arwn", "name": "Ambient Radio Weather Network", "documentation": "https://www.home-assistant.io/integrations/arwn", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/arwn/sensor.py b/homeassistant/components/arwn/sensor.py index 014c46fd73c..5da860d8a50 100644 --- a/homeassistant/components/arwn/sensor.py +++ b/homeassistant/components/arwn/sensor.py @@ -3,7 +3,7 @@ import json import logging from homeassistant.components import mqtt -from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT +from homeassistant.const import DEGREE, TEMP_CELSIUS, TEMP_FAHRENHEIT from homeassistant.core import callback from homeassistant.helpers.entity import Entity from homeassistant.util import slugify @@ -32,7 +32,7 @@ def discover_sensors(topic, payload): unit = TEMP_CELSIUS return ArwnSensor(name, "temp", unit) if domain == "moisture": - name = parts[2] + " Moisture" + name = f"{parts[2]} Moisture" return ArwnSensor(name, "moisture", unit, "mdi:water-percent") if domain == "rain": if len(parts) >= 3 and parts[2] == "today": @@ -45,7 +45,7 @@ def discover_sensors(topic, payload): return ( ArwnSensor("Wind Speed", "speed", unit, "mdi:speedometer"), ArwnSensor("Wind Gust", "gust", unit, "mdi:speedometer"), - ArwnSensor("Wind Direction", "direction", "°", "mdi:compass"), + ArwnSensor("Wind Direction", "direction", DEGREE, "mdi:compass"), ) @@ -119,7 +119,7 @@ class ArwnSensor(Entity): """Update the sensor with the most recent event.""" self.event = {} self.event.update(event) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def state(self): diff --git a/homeassistant/components/asterisk_cdr/manifest.json b/homeassistant/components/asterisk_cdr/manifest.json index ac18b14682e..8681c308ba3 100644 --- a/homeassistant/components/asterisk_cdr/manifest.json +++ b/homeassistant/components/asterisk_cdr/manifest.json @@ -2,7 +2,6 @@ "domain": "asterisk_cdr", "name": "Asterisk Call Detail Records", "documentation": "https://www.home-assistant.io/integrations/asterisk_cdr", - "requirements": [], "dependencies": ["asterisk_mbox"], "codeowners": [] } diff --git a/homeassistant/components/asterisk_mbox/__init__.py b/homeassistant/components/asterisk_mbox/__init__.py index 1ecba9f4c8f..ca511267302 100644 --- a/homeassistant/components/asterisk_mbox/__init__.py +++ b/homeassistant/components/asterisk_mbox/__init__.py @@ -43,9 +43,9 @@ def setup(hass, config): """Set up for the Asterisk Voicemail box.""" conf = config.get(DOMAIN) - host = conf.get(CONF_HOST) - port = conf.get(CONF_PORT) - password = conf.get(CONF_PASSWORD) + host = conf[CONF_HOST] + port = conf[CONF_PORT] + password = conf[CONF_PASSWORD] hass.data[DOMAIN] = AsteriskData(hass, host, port, password, config) diff --git a/homeassistant/components/asterisk_mbox/manifest.json b/homeassistant/components/asterisk_mbox/manifest.json index 6a3591b001b..f02e964fb61 100644 --- a/homeassistant/components/asterisk_mbox/manifest.json +++ b/homeassistant/components/asterisk_mbox/manifest.json @@ -3,6 +3,5 @@ "name": "Asterisk Voicemail", "documentation": "https://www.home-assistant.io/integrations/asterisk_mbox", "requirements": ["asterisk_mbox==0.5.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/asuswrt/__init__.py b/homeassistant/components/asuswrt/__init__.py index 446fe898aaa..d9c87beea5d 100644 --- a/homeassistant/components/asuswrt/__init__.py +++ b/homeassistant/components/asuswrt/__init__.py @@ -36,7 +36,7 @@ FIRST_RETRY_TIME = 60 MAX_RETRY_TIME = 900 SECRET_GROUP = "Password or SSH Key" -SENSOR_TYPES = ["upload_speed", "download_speed", "download", "upload"] +SENSOR_TYPES = ["devices", "upload_speed", "download_speed", "download", "upload"] CONFIG_SCHEMA = vol.Schema( { diff --git a/homeassistant/components/asuswrt/manifest.json b/homeassistant/components/asuswrt/manifest.json index 2e032dedfe7..274060404b7 100644 --- a/homeassistant/components/asuswrt/manifest.json +++ b/homeassistant/components/asuswrt/manifest.json @@ -2,7 +2,6 @@ "domain": "asuswrt", "name": "ASUSWRT", "documentation": "https://www.home-assistant.io/integrations/asuswrt", - "requirements": ["aioasuswrt==1.2.3"], - "dependencies": [], + "requirements": ["aioasuswrt==1.2.5"], "codeowners": ["@kennedyshead"] } diff --git a/homeassistant/components/asuswrt/sensor.py b/homeassistant/components/asuswrt/sensor.py index 50100d3625d..631e6e9d70f 100644 --- a/homeassistant/components/asuswrt/sensor.py +++ b/homeassistant/components/asuswrt/sensor.py @@ -1,6 +1,8 @@ """Asuswrt status sensors.""" import logging +from aioasuswrt.asuswrt import AsusWrt + from homeassistant.const import DATA_GIGABYTES, DATA_RATE_MEGABITS_PER_SECOND from homeassistant.helpers.entity import Entity @@ -18,6 +20,8 @@ async def async_setup_platform(hass, config, add_entities, discovery_info=None): devices = [] + if "devices" in discovery_info: + devices.append(AsuswrtDevicesSensor(api)) if "download" in discovery_info: devices.append(AsuswrtTotalRXSensor(api)) if "upload" in discovery_info: @@ -35,10 +39,11 @@ class AsuswrtSensor(Entity): _name = "generic" - def __init__(self, api): + def __init__(self, api: AsusWrt): """Initialize the sensor.""" self._api = api self._state = None + self._devices = None self._rates = None self._speed = None @@ -54,10 +59,23 @@ class AsuswrtSensor(Entity): async def async_update(self): """Fetch status from asuswrt.""" + self._devices = await self._api.async_get_connected_devices() self._rates = await self._api.async_get_bytes_total() self._speed = await self._api.async_get_current_transfer_rates() +class AsuswrtDevicesSensor(AsuswrtSensor): + """Representation of a asuswrt download speed sensor.""" + + _name = "Asuswrt Devices Connected" + + async def async_update(self): + """Fetch new state data for the sensor.""" + await super().async_update() + if self._devices: + self._state = len(self._devices) + + class AsuswrtRXSensor(AsuswrtSensor): """Representation of a asuswrt download speed sensor.""" diff --git a/homeassistant/components/atag/__init__.py b/homeassistant/components/atag/__init__.py new file mode 100644 index 00000000000..cb90df1650c --- /dev/null +++ b/homeassistant/components/atag/__init__.py @@ -0,0 +1,259 @@ +"""The ATAG Integration.""" +from datetime import timedelta +import logging + +import async_timeout +from pyatag import AtagDataStore, AtagException + +from homeassistant.components.climate import DOMAIN as CLIMATE +from homeassistant.components.sensor import DOMAIN as SENSOR +from homeassistant.components.water_heater import DOMAIN as WATER_HEATER +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ( + ATTR_DEVICE_CLASS, + ATTR_ICON, + ATTR_ID, + ATTR_MODE, + ATTR_NAME, + ATTR_UNIT_OF_MEASUREMENT, + DEVICE_CLASS_PRESSURE, + DEVICE_CLASS_TEMPERATURE, + PRESSURE_BAR, + TEMP_CELSIUS, +) +from homeassistant.core import HomeAssistant, asyncio +from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers.aiohttp_client import async_get_clientsession +from homeassistant.helpers.entity import Entity +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed + +_LOGGER = logging.getLogger(__name__) + +DOMAIN = "atag" +DATA_LISTENER = f"{DOMAIN}_listener" +SIGNAL_UPDATE_ATAG = f"{DOMAIN}_update" +PLATFORMS = [CLIMATE, WATER_HEATER, SENSOR] +HOUR = "h" +FIRE = "fire" +PERCENTAGE = "%" + +ICONS = { + TEMP_CELSIUS: "mdi:thermometer", + PRESSURE_BAR: "mdi:gauge", + FIRE: "mdi:fire", + ATTR_MODE: "mdi:settings", +} + +ENTITY_TYPES = { + SENSOR: [ + { + ATTR_NAME: "Outside Temperature", + ATTR_ID: "outside_temp", + ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, + ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE, + ATTR_ICON: ICONS[TEMP_CELSIUS], + }, + { + ATTR_NAME: "Average Outside Temperature", + ATTR_ID: "tout_avg", + ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, + ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE, + ATTR_ICON: ICONS[TEMP_CELSIUS], + }, + { + ATTR_NAME: "Weather Status", + ATTR_ID: "weather_status", + ATTR_UNIT_OF_MEASUREMENT: None, + ATTR_DEVICE_CLASS: None, + ATTR_ICON: None, + }, + { + ATTR_NAME: "CH Water Pressure", + ATTR_ID: "ch_water_pres", + ATTR_UNIT_OF_MEASUREMENT: PRESSURE_BAR, + ATTR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE, + ATTR_ICON: ICONS[PRESSURE_BAR], + }, + { + ATTR_NAME: "CH Water Temperature", + ATTR_ID: "ch_water_temp", + ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, + ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE, + ATTR_ICON: ICONS[TEMP_CELSIUS], + }, + { + ATTR_NAME: "CH Return Temperature", + ATTR_ID: "ch_return_temp", + ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, + ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE, + ATTR_ICON: ICONS[TEMP_CELSIUS], + }, + { + ATTR_NAME: "Burning Hours", + ATTR_ID: "burning_hours", + ATTR_UNIT_OF_MEASUREMENT: HOUR, + ATTR_DEVICE_CLASS: None, + ATTR_ICON: ICONS[FIRE], + }, + { + ATTR_NAME: "Flame", + ATTR_ID: "rel_mod_level", + ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE, + ATTR_DEVICE_CLASS: None, + ATTR_ICON: ICONS[FIRE], + }, + ], + CLIMATE: { + ATTR_NAME: DOMAIN.title(), + ATTR_ID: CLIMATE, + ATTR_UNIT_OF_MEASUREMENT: None, + ATTR_DEVICE_CLASS: None, + ATTR_ICON: None, + }, + WATER_HEATER: { + ATTR_NAME: DOMAIN.title(), + ATTR_ID: WATER_HEATER, + ATTR_UNIT_OF_MEASUREMENT: None, + ATTR_DEVICE_CLASS: None, + ATTR_ICON: None, + }, +} + + +async def async_setup(hass: HomeAssistant, config): + """Set up the Atag component.""" + return True + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): + """Set up Atag integration from a config entry.""" + session = async_get_clientsession(hass) + + coordinator = AtagDataUpdateCoordinator(hass, session, entry) + + await coordinator.async_refresh() + + if not coordinator.last_update_success: + raise ConfigEntryNotReady + + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN][entry.entry_id] = coordinator + + for platform in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, platform) + ) + + return True + + +class AtagDataUpdateCoordinator(DataUpdateCoordinator): + """Define an object to hold Atag data.""" + + def __init__(self, hass, session, entry): + """Initialize.""" + self.atag = AtagDataStore(session, paired=True, **entry.data) + + super().__init__( + hass, _LOGGER, name=DOMAIN, update_interval=timedelta(seconds=30) + ) + + async def _async_update_data(self): + """Update data via library.""" + with async_timeout.timeout(20): + try: + await self.atag.async_update() + except (AtagException) as error: + raise UpdateFailed(error) + + return self.atag.sensordata + + +async def async_unload_entry(hass, entry): + """Unload Atag config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, component) + for component in PLATFORMS + ] + ) + ) + if unload_ok: + hass.data[DOMAIN].pop(entry.entry_id) + return unload_ok + + +class AtagEntity(Entity): + """Defines a base Atag entity.""" + + def __init__(self, coordinator: AtagDataUpdateCoordinator, atag_type: dict) -> None: + """Initialize the Atag entity.""" + self.coordinator = coordinator + + self._id = atag_type[ATTR_ID] + self._name = atag_type[ATTR_NAME] + self._icon = atag_type[ATTR_ICON] + self._unit = atag_type[ATTR_UNIT_OF_MEASUREMENT] + self._class = atag_type[ATTR_DEVICE_CLASS] + + @property + def device_info(self) -> dict: + """Return info for device registry.""" + device = self.coordinator.atag.device + version = self.coordinator.atag.apiversion + return { + "identifiers": {(DOMAIN, device)}, + ATTR_NAME: "Atag Thermostat", + "model": "Atag One", + "sw_version": version, + "manufacturer": "Atag", + } + + @property + def name(self) -> str: + """Return the name of the entity.""" + return self._name + + @property + def icon(self) -> str: + """Return the mdi icon of the entity.""" + self._icon = ( + self.coordinator.data.get(self._id, {}).get(ATTR_ICON) or self._icon + ) + return self._icon + + @property + def should_poll(self) -> bool: + """Return the polling requirement of the entity.""" + return False + + @property + def unit_of_measurement(self): + """Return the unit of measurement of this entity, if any.""" + return self._unit + + @property + def device_class(self): + """Return the device class.""" + return self._class + + @property + def available(self): + """Return True if entity is available.""" + return self.coordinator.last_update_success + + @property + def unique_id(self): + """Return a unique ID to use for this entity.""" + return f"{self.coordinator.atag.device}-{self._id}" + + async def async_added_to_hass(self): + """Connect to dispatcher listening for entity data notifications.""" + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) + + async def async_update(self): + """Update Atag entity.""" + await self.coordinator.async_request_refresh() diff --git a/homeassistant/components/atag/climate.py b/homeassistant/components/atag/climate.py new file mode 100644 index 00000000000..40bd8cd4cc7 --- /dev/null +++ b/homeassistant/components/atag/climate.py @@ -0,0 +1,106 @@ +"""Initialization of ATAG One climate platform.""" +from typing import List, Optional + +from homeassistant.components.climate import ClimateDevice +from homeassistant.components.climate.const import ( + CURRENT_HVAC_HEAT, + CURRENT_HVAC_IDLE, + HVAC_MODE_AUTO, + HVAC_MODE_HEAT, + PRESET_AWAY, + PRESET_BOOST, + SUPPORT_PRESET_MODE, + SUPPORT_TARGET_TEMPERATURE, +) +from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT + +from . import CLIMATE, DOMAIN, ENTITY_TYPES, AtagEntity + +PRESET_SCHEDULE = "Auto" +PRESET_MANUAL = "Manual" +PRESET_EXTEND = "Extend" +SUPPORT_PRESET = [ + PRESET_MANUAL, + PRESET_SCHEDULE, + PRESET_EXTEND, + PRESET_AWAY, + PRESET_BOOST, +] +SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE +HVAC_MODES = [HVAC_MODE_AUTO, HVAC_MODE_HEAT] + + +async def async_setup_entry(hass, entry, async_add_entities): + """Load a config entry.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + async_add_entities([AtagThermostat(coordinator, ENTITY_TYPES[CLIMATE])]) + + +class AtagThermostat(AtagEntity, ClimateDevice): + """Atag climate device.""" + + @property + def supported_features(self): + """Return the list of supported features.""" + return SUPPORT_FLAGS + + @property + def hvac_mode(self) -> Optional[str]: + """Return hvac operation ie. heat, cool mode.""" + if self.coordinator.atag.hvac_mode in HVAC_MODES: + return self.coordinator.atag.hvac_mode + return None + + @property + def hvac_modes(self) -> List[str]: + """Return the list of available hvac operation modes.""" + return HVAC_MODES + + @property + def hvac_action(self) -> Optional[str]: + """Return the current running hvac operation.""" + if self.coordinator.atag.cv_status: + return CURRENT_HVAC_HEAT + return CURRENT_HVAC_IDLE + + @property + def temperature_unit(self): + """Return the unit of measurement.""" + if self.coordinator.atag.temp_unit in [TEMP_CELSIUS, TEMP_FAHRENHEIT]: + return self.coordinator.atag.temp_unit + return None + + @property + def current_temperature(self) -> Optional[float]: + """Return the current temperature.""" + return self.coordinator.atag.temperature + + @property + def target_temperature(self) -> Optional[float]: + """Return the temperature we try to reach.""" + return self.coordinator.atag.target_temperature + + @property + def preset_mode(self) -> Optional[str]: + """Return the current preset mode, e.g., auto, manual, fireplace, extend, etc.""" + return self.coordinator.atag.hold_mode + + @property + def preset_modes(self) -> Optional[List[str]]: + """Return a list of available preset modes.""" + return SUPPORT_PRESET + + async def async_set_temperature(self, **kwargs) -> None: + """Set new target temperature.""" + await self.coordinator.atag.set_temp(kwargs.get(ATTR_TEMPERATURE)) + self.async_write_ha_state() + + async def async_set_hvac_mode(self, hvac_mode: str) -> None: + """Set new target hvac mode.""" + await self.coordinator.atag.set_hvac_mode(hvac_mode) + self.async_write_ha_state() + + async def async_set_preset_mode(self, preset_mode: str) -> None: + """Set new preset mode.""" + await self.coordinator.atag.set_hold_mode(preset_mode) + self.async_write_ha_state() diff --git a/homeassistant/components/atag/config_flow.py b/homeassistant/components/atag/config_flow.py new file mode 100644 index 00000000000..27b2b7a42f6 --- /dev/null +++ b/homeassistant/components/atag/config_flow.py @@ -0,0 +1,50 @@ +"""Config flow for the Atag component.""" +from pyatag import DEFAULT_PORT, AtagDataStore, AtagException +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.const import CONF_DEVICE, CONF_HOST, CONF_PORT +from homeassistant.core import callback +from homeassistant.helpers.aiohttp_client import async_get_clientsession + +from . import DOMAIN # pylint: disable=unused-import + +DATA_SCHEMA = { + vol.Required(CONF_HOST): str, + vol.Required(CONF_PORT, default=DEFAULT_PORT): vol.Coerce(int), +} + + +class AtagConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Config flow for Atag.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL + + async def async_step_user(self, user_input=None): + """Handle a flow initialized by the user.""" + + if self._async_current_entries(): + return self.async_abort(reason="already_configured") + + if not user_input: + return await self._show_form() + session = async_get_clientsession(self.hass) + try: + atag = AtagDataStore(session, **user_input) + await atag.async_check_pair_status() + + except AtagException: + return await self._show_form({"base": "connection_error"}) + + user_input.update({CONF_DEVICE: atag.device}) + return self.async_create_entry(title=atag.device, data=user_input) + + @callback + async def _show_form(self, errors=None): + """Show the form to the user.""" + return self.async_show_form( + step_id="user", + data_schema=vol.Schema(DATA_SCHEMA), + errors=errors if errors else {}, + ) diff --git a/homeassistant/components/atag/manifest.json b/homeassistant/components/atag/manifest.json new file mode 100644 index 00000000000..902da2bff75 --- /dev/null +++ b/homeassistant/components/atag/manifest.json @@ -0,0 +1,8 @@ +{ + "domain": "atag", + "name": "Atag", + "config_flow": true, + "documentation": "https://www.home-assistant.io/integrations/atag/", + "requirements": ["pyatag==0.2.19"], + "codeowners": ["@MatsNL"] +} diff --git a/homeassistant/components/atag/sensor.py b/homeassistant/components/atag/sensor.py new file mode 100644 index 00000000000..743b50ef40d --- /dev/null +++ b/homeassistant/components/atag/sensor.py @@ -0,0 +1,22 @@ +"""Initialization of ATAG One sensor platform.""" +from homeassistant.const import ATTR_STATE + +from . import DOMAIN, ENTITY_TYPES, SENSOR, AtagEntity + + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Initialize sensor platform from config entry.""" + coordinator = hass.data[DOMAIN][config_entry.entry_id] + entities = [] + for sensor in ENTITY_TYPES[SENSOR]: + entities.append(AtagSensor(coordinator, sensor)) + async_add_entities(entities) + + +class AtagSensor(AtagEntity): + """Representation of a AtagOne Sensor.""" + + @property + def state(self): + """Return the state of the sensor.""" + return self.coordinator.data[self._id][ATTR_STATE] diff --git a/homeassistant/components/atag/strings.json b/homeassistant/components/atag/strings.json new file mode 100644 index 00000000000..094fde70dc9 --- /dev/null +++ b/homeassistant/components/atag/strings.json @@ -0,0 +1,20 @@ +{ + "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" + } + } +} diff --git a/homeassistant/components/atag/translations/ca.json b/homeassistant/components/atag/translations/ca.json new file mode 100644 index 00000000000..994cc3c8fbe --- /dev/null +++ b/homeassistant/components/atag/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Nom\u00e9s es pot afegir un sol dispositiu Atag a Home Assistant" + }, + "error": { + "connection_error": "No s'ha pogut connectar, torna-ho a provar" + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port (10000)" + }, + "title": "Connexi\u00f3 amb el dispositiu" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/de.json b/homeassistant/components/atag/translations/de.json new file mode 100644 index 00000000000..f9d40a035a3 --- /dev/null +++ b/homeassistant/components/atag/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Nur ein Atag-Ger\u00e4t kann mit Home Assistant verbunden werden." + }, + "error": { + "connection_error": "Verbindung fehlgeschlagen, versuchen Sie es erneut" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Port (10000)" + }, + "title": "Stellen Sie eine Verbindung zum Ger\u00e4t her" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/en.json b/homeassistant/components/atag/translations/en.json new file mode 100644 index 00000000000..edee94a8e04 --- /dev/null +++ b/homeassistant/components/atag/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Only one Atag device can be added to Home Assistant" + }, + "error": { + "connection_error": "Failed to connect, please try again" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Port (10000)" + }, + "title": "Connect to the device" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/es.json b/homeassistant/components/atag/translations/es.json new file mode 100644 index 00000000000..b02a20e09a1 --- /dev/null +++ b/homeassistant/components/atag/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "S\u00f3lo se puede a\u00f1adir un dispositivo Atag a Home Assistant" + }, + "error": { + "connection_error": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Puerto (10000)" + }, + "title": "Conectarse al dispositivo" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/fr.json b/homeassistant/components/atag/translations/fr.json new file mode 100644 index 00000000000..ace565408f6 --- /dev/null +++ b/homeassistant/components/atag/translations/fr.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "port": "Port (10000)" + }, + "title": "Se connecter \u00e0 l'appareil" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/hi.json b/homeassistant/components/atag/translations/hi.json new file mode 100644 index 00000000000..e2b57f18e79 --- /dev/null +++ b/homeassistant/components/atag/translations/hi.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "connection_error": "\u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0935\u093f\u092b\u0932, \u0915\u0943\u092a\u092f\u093e \u092a\u0941\u0928\u0903 \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "\u092a\u094b\u0930\u094d\u091f (10000)" + }, + "title": "\u0921\u093f\u0935\u093e\u0907\u0938 \u0938\u0947 \u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0947\u0902" + } + } + }, + "title": "A\u091f\u0948\u0917" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/lb.json b/homeassistant/components/atag/translations/lb.json new file mode 100644 index 00000000000..dcb32f3eedc --- /dev/null +++ b/homeassistant/components/atag/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "N\u00ebmmen 1 Atag Apparat kann am Home Assistant dob\u00e4igesat ginn" + }, + "error": { + "connection_error": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol." + }, + "step": { + "user": { + "data": { + "host": "Apparat", + "port": "Port (10000)" + }, + "title": "Mam Apparat verbannen" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/nl.json b/homeassistant/components/atag/translations/nl.json new file mode 100644 index 00000000000..14da45b8eb9 --- /dev/null +++ b/homeassistant/components/atag/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Er kan slechts \u00e9\u00e9n Atag-apparaat worden toegevoegd aan Home Assistant " + }, + "error": { + "connection_error": "Verbinding mislukt, probeer het opnieuw" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Poort (10000)" + }, + "title": "Verbinding maken met het apparaat" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/no.json b/homeassistant/components/atag/translations/no.json new file mode 100644 index 00000000000..4b4a5346558 --- /dev/null +++ b/homeassistant/components/atag/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Bare en Atag-enhet kan legges til Home Assistant" + }, + "error": { + "connection_error": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen" + }, + "step": { + "user": { + "data": { + "host": "Vert", + "port": "Port (10000)" + }, + "title": "Koble til enheten" + } + } + }, + "title": "Atag " +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/pl.json b/homeassistant/components/atag/translations/pl.json new file mode 100644 index 00000000000..e931c1fc10f --- /dev/null +++ b/homeassistant/components/atag/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Do Home Assistant mo\u017cna doda\u0107 tylko jedno urz\u0105dzenie Atag" + }, + "error": { + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie." + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port (10000)" + }, + "title": "Po\u0142\u0105cz z urz\u0105dzeniem" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/ru.json b/homeassistant/components/atag/translations/ru.json new file mode 100644 index 00000000000..f1c734dc933 --- /dev/null +++ b/homeassistant/components/atag/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e." + }, + "error": { + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442 (10000)" + }, + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/zh-Hant.json b/homeassistant/components/atag/translations/zh-Hant.json new file mode 100644 index 00000000000..aa1c6a90d2b --- /dev/null +++ b/homeassistant/components/atag/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u50c5\u80fd\u65b0\u589e\u4e00\u7d44 Atag \u8a2d\u5099\u81f3 Home Assistant" + }, + "error": { + "connection_error": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0\uff0810000\uff09" + }, + "title": "\u9023\u7dda\u81f3\u8a2d\u5099" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/water_heater.py b/homeassistant/components/atag/water_heater.py new file mode 100644 index 00000000000..bb1f72d6a8e --- /dev/null +++ b/homeassistant/components/atag/water_heater.py @@ -0,0 +1,70 @@ +"""ATAG water heater component.""" +from homeassistant.components.water_heater import ( + ATTR_TEMPERATURE, + STATE_ECO, + STATE_PERFORMANCE, + WaterHeaterDevice, +) +from homeassistant.const import STATE_OFF, TEMP_CELSIUS + +from . import DOMAIN, ENTITY_TYPES, WATER_HEATER, AtagEntity + +SUPPORT_FLAGS_HEATER = 0 +OPERATION_LIST = [STATE_OFF, STATE_ECO, STATE_PERFORMANCE] + + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Initialize DHW device from config entry.""" + coordinator = hass.data[DOMAIN][config_entry.entry_id] + async_add_entities([AtagWaterHeater(coordinator, ENTITY_TYPES[WATER_HEATER])]) + + +class AtagWaterHeater(AtagEntity, WaterHeaterDevice): + """Representation of an ATAG water heater.""" + + @property + def supported_features(self): + """Return the list of supported features.""" + return SUPPORT_FLAGS_HEATER + + @property + def temperature_unit(self): + """Return the unit of measurement.""" + return TEMP_CELSIUS + + @property + def current_temperature(self): + """Return the current temperature.""" + return self.coordinator.atag.dhw_temperature + + @property + def current_operation(self): + """Return current operation.""" + if self.coordinator.atag.dhw_status: + return STATE_PERFORMANCE + return STATE_OFF + + @property + def operation_list(self): + """List of available operation modes.""" + return OPERATION_LIST + + async def set_temperature(self, **kwargs): + """Set new target temperature.""" + if await self.coordinator.atag.dhw_set_temp(kwargs.get(ATTR_TEMPERATURE)): + self.async_write_ha_state() + + @property + def target_temperature(self): + """Return the setpoint if water demand, otherwise return base temp (comfort level).""" + return self.coordinator.atag.dhw_target_temperature + + @property + def max_temp(self): + """Return the maximum temperature.""" + return self.coordinator.atag.dhw_max_temp + + @property + def min_temp(self): + """Return the minimum temperature.""" + return self.coordinator.atag.dhw_min_temp diff --git a/homeassistant/components/aten_pe/manifest.json b/homeassistant/components/aten_pe/manifest.json index c7910a1254b..fdfcb4de047 100644 --- a/homeassistant/components/aten_pe/manifest.json +++ b/homeassistant/components/aten_pe/manifest.json @@ -3,6 +3,5 @@ "name": "ATEN Rack PDU", "documentation": "https://www.home-assistant.io/integrations/aten_pe", "requirements": ["atenpdu==0.3.0"], - "dependencies": [], "codeowners": ["@mtdcr"] } diff --git a/homeassistant/components/atome/manifest.json b/homeassistant/components/atome/manifest.json index 493940329f8..9479f76c7d8 100644 --- a/homeassistant/components/atome/manifest.json +++ b/homeassistant/components/atome/manifest.json @@ -2,7 +2,6 @@ "domain": "atome", "name": "Atome Linky", "documentation": "https://www.home-assistant.io/integrations/atome", - "dependencies": [], "codeowners": ["@baqs"], "requirements": ["pyatome==0.1.1"] } diff --git a/homeassistant/components/august/.translations/ca.json b/homeassistant/components/august/.translations/ca.json deleted file mode 100644 index 561b91799be..00000000000 --- a/homeassistant/components/august/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El compte ja ha estat configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "login_method": "M\u00e8tode d'inici de sessi\u00f3", - "password": "Contrasenya", - "timeout": "Temps d'espera (segons)", - "username": "Nom d'usuari" - }, - "description": "Si el m\u00e8tode d'inici de sessi\u00f3 \u00e9s 'email', el nom d'usuari \u00e9s l'adre\u00e7a de correu electr\u00f2nic. Si el m\u00e8tode d'inici de sessi\u00f3 \u00e9s 'phone', el nom d'usuari \u00e9s el n\u00famero de tel\u00e8fon en el format \"+NNNNNNNNN\".", - "title": "Configuraci\u00f3 de compte August" - }, - "validation": { - "data": { - "code": "Codi de verificaci\u00f3" - }, - "description": "Comprova el teu {login_method} ({username}) i introdueix el codi de verificaci\u00f3 a continuaci\u00f3", - "title": "Autenticaci\u00f3 de dos factors" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/da.json b/homeassistant/components/august/.translations/da.json deleted file mode 100644 index d63bcf9acca..00000000000 --- a/homeassistant/components/august/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontoen er allerede konfigureret" - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse. Pr\u00f8v igen", - "invalid_auth": "Ugyldig godkendelse", - "unknown": "Uventet fejl" - }, - "step": { - "user": { - "data": { - "login_method": "Loginmetode", - "password": "Adgangskode", - "timeout": "Timeout (sekunder)", - "username": "Brugernavn" - }, - "description": "Hvis loginmetoden er 'e-mail', er brugernavn e-mailadressen. Hvis loginmetoden er 'telefon', er brugernavn telefonnummeret i formatet '+NNNNNNNNNN'.", - "title": "Konfigurer en August-konto" - }, - "validation": { - "data": { - "code": "Bekr\u00e6ftelseskode" - }, - "description": "Kontroller dit {login_method} ({username}), og angiv bekr\u00e6ftelseskoden nedenfor", - "title": "Tofaktorgodkendelse" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/de.json b/homeassistant/components/august/.translations/de.json deleted file mode 100644 index 8d34eaaf5ee..00000000000 --- a/homeassistant/components/august/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Konto ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "login_method": "Anmeldemethode", - "password": "Passwort", - "timeout": "Zeit\u00fcberschreitung (Sekunden)", - "username": "Benutzername" - }, - "description": "Wenn die Anmeldemethode \"E-Mail\" lautet, ist Benutzername die E-Mail-Adresse. Wenn die Anmeldemethode \"Telefon\" ist, ist Benutzername die Telefonnummer im Format \"+ NNNNNNNNN\".", - "title": "Richten Sie ein August-Konto ein" - }, - "validation": { - "data": { - "code": "Verifizierungs-Code" - }, - "description": "Bitte \u00fcberpr\u00fcfen Sie Ihre {login_method} ({username}) und geben Sie den Best\u00e4tigungscode ein", - "title": "Zwei-Faktor-Authentifizierung" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/en.json b/homeassistant/components/august/.translations/en.json deleted file mode 100644 index 32c628f0b0d..00000000000 --- a/homeassistant/components/august/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "login_method": "Login Method", - "password": "Password", - "timeout": "Timeout (seconds)", - "username": "Username" - }, - "description": "If the Login Method is 'email', Username is the email address. If the Login Method is 'phone', Username is the phone number in the format '+NNNNNNNNN'.", - "title": "Setup an August account" - }, - "validation": { - "data": { - "code": "Verification code" - }, - "description": "Please check your {login_method} ({username}) and enter the verification code below", - "title": "Two factor authentication" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/es.json b/homeassistant/components/august/.translations/es.json deleted file mode 100644 index 58d94bb0cbf..00000000000 --- a/homeassistant/components/august/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La cuenta ya est\u00e1 configurada" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "login_method": "M\u00e9todo de inicio de sesi\u00f3n", - "password": "Contrase\u00f1a", - "timeout": "Tiempo de espera (segundos)", - "username": "Usuario" - }, - "description": "Si el M\u00e9todo de Inicio de Sesi\u00f3n es 'correo electr\u00f3nico', Usuario es la direcci\u00f3n de correo electr\u00f3nico. Si el M\u00e9todo de Inicio de Sesi\u00f3n es 'tel\u00e9fono', Usuario es el n\u00famero de tel\u00e9fono en formato '+NNNNNNNNN'.", - "title": "Configurar una cuenta de August" - }, - "validation": { - "data": { - "code": "C\u00f3digo de verificaci\u00f3n" - }, - "description": "Por favor, compruebe tu {login_method} ({username}) e introduce el c\u00f3digo de verificaci\u00f3n a continuaci\u00f3n", - "title": "Autenticaci\u00f3n de dos factores" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/fr.json b/homeassistant/components/august/.translations/fr.json deleted file mode 100644 index 89a35b28f1d..00000000000 --- a/homeassistant/components/august/.translations/fr.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le compte est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification non valide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "login_method": "M\u00e9thode de connexion", - "password": "Mot de passe", - "timeout": "D\u00e9lai d'expiration (secondes)", - "username": "Nom d'utilisateur" - } - }, - "validation": { - "data": { - "code": "Code de v\u00e9rification" - }, - "title": "Authentification \u00e0 deux facteurs" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/it.json b/homeassistant/components/august/.translations/it.json deleted file mode 100644 index 98445345f96..00000000000 --- a/homeassistant/components/august/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'account \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare.", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "login_method": "Metodo di accesso", - "password": "Password", - "timeout": "Timeout (in secondi)", - "username": "Nome utente" - }, - "description": "Se il metodo di accesso \u00e8 \"e-mail\", il nome utente \u00e8 l'indirizzo e-mail. Se il metodo di accesso \u00e8 \"telefono\", il nome utente \u00e8 il numero di telefono nel formato \"+NNNNNNNNN\".", - "title": "Configura un account di August" - }, - "validation": { - "data": { - "code": "Codice di verifica" - }, - "description": "Controlla il tuo {login_method} ({username}) e inserisci il codice di verifica seguente", - "title": "Autenticazione a due fattori" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/ko.json b/homeassistant/components/august/.translations/ko.json deleted file mode 100644 index 018bb9d6a56..00000000000 --- a/homeassistant/components/august/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uacc4\uc815\uc774 \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": { - "login_method": "\ub85c\uadf8\uc778 \ubc29\ubc95", - "password": "\ube44\ubc00\ubc88\ud638", - "timeout": "\uc81c\ud55c \uc2dc\uac04 (\ucd08)", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "\ub85c\uadf8\uc778 \ubc29\ubc95\uc774 '\uc774\uba54\uc77c'\uc778 \uacbd\uc6b0, \uc0ac\uc6a9\uc790 \uc774\ub984\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ubc29\ubc95\uc774 'phone'\uc778 \uacbd\uc6b0, \uc0ac\uc6a9\uc790 \uc774\ub984\uc740 '+NNNNNNNNN' \ud615\uc2dd\uc758 \uc804\ud654\ubc88\ud638\uc785\ub2c8\ub2e4.", - "title": "August \uacc4\uc815 \uc124\uc815" - }, - "validation": { - "data": { - "code": "\uc778\uc99d \ucf54\ub4dc" - }, - "description": "{login_method} ({username}) \uc744(\ub97c) \ud655\uc778\ud558\uace0 \uc544\ub798\uc5d0 \uc778\uc99d \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "2\ub2e8\uacc4 \uc778\uc99d" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/lb.json b/homeassistant/components/august/.translations/lb.json deleted file mode 100644 index 514ad6786d4..00000000000 --- a/homeassistant/components/august/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kont ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "login_method": "Login Method", - "password": "Passwuert", - "timeout": "Z\u00e4itiwwerscheidung (sekonnen)", - "username": "Benotzernumm" - }, - "description": "Wann d'Login Method 'E-Mail' ass, dannn ass de Benotzernumm d'E-Mail Adress. Wann d'Login-Method 'Telefon' ass, ass den Benotzernumm d'Telefonsnummer am Format '+ NNNNNNNNN'.", - "title": "August Kont ariichten" - }, - "validation": { - "data": { - "code": "Verifikatiouns Code" - }, - "description": "Pr\u00e9ift w.e.g. \u00c4re {login_method} ({username}) a gitt de Verifikatiounscode hei dr\u00ebnner an", - "title": "2-Faktor-Authentifikatioun" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/no.json b/homeassistant/components/august/.translations/no.json deleted file mode 100644 index 449989bade1..00000000000 --- a/homeassistant/components/august/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontoen er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "login_method": "P\u00e5loggingsmetode", - "password": "Passord", - "timeout": "Tidsavbrudd (sekunder)", - "username": "Brukernavn" - }, - "description": "Hvis p\u00e5loggingsmetoden er 'e-post', er brukernavnet e-postadressen. Hvis p\u00e5loggingsmetoden er 'telefon', er brukernavn telefonnummeret i formatet '+ NNNNNNNNN'.", - "title": "Sett opp en August konto" - }, - "validation": { - "data": { - "code": "Bekreftelseskode" - }, - "description": "Kontroller {login_method} ({username}) og skriv inn bekreftelseskoden nedenfor", - "title": "To-faktor autentisering" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/pl.json b/homeassistant/components/august/.translations/pl.json deleted file mode 100644 index 70654e12566..00000000000 --- a/homeassistant/components/august/.translations/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "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": { - "login_method": "Metoda logowania", - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika" - } - }, - "validation": { - "data": { - "code": "Kod weryfikacyjny" - }, - "title": "Uwierzytelnianie dwusk\u0142adnikowe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/ru.json b/homeassistant/components/august/.translations/ru.json deleted file mode 100644 index fc90b3e8bb5..00000000000 --- a/homeassistant/components/august/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "login_method": "\u0421\u043f\u043e\u0441\u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "timeout": "\u0422\u0430\u0439\u043c-\u0430\u0443\u0442 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 'email', \u0442\u043e \u043b\u043e\u0433\u0438\u043d\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 'phone', \u0442\u043e \u043b\u043e\u0433\u0438\u043d\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 '+NNNNNNNNN'.", - "title": "August" - }, - "validation": { - "data": { - "code": "\u041a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f" - }, - "description": "\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 {login_method} ({username}) \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.", - "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/sl.json b/homeassistant/components/august/.translations/sl.json deleted file mode 100644 index d0497278fee..00000000000 --- a/homeassistant/components/august/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ra\u010dun je \u017ee nastavljen" - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova", - "invalid_auth": "Neveljavna avtentikacija", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "data": { - "login_method": "Na\u010din prijave", - "password": "Geslo", - "timeout": "\u010casovna omejitev (sekunde)", - "username": "Uporabni\u0161ko ime" - }, - "description": "\u010ce je metoda za prijavo 'e-po\u0161ta', je e-po\u0161tni naslov uporabni\u0161ko ime. V kolikor je na\u010din prijave \"telefon\", je uporabni\u0161ko ime telefonska \u0161tevilka v obliki \" +NNNNNNNNN\".", - "title": "Nastavite ra\u010dun August" - }, - "validation": { - "data": { - "code": "Koda za preverjanje" - }, - "description": "Preverite svoj {login_method} ({username}) in spodaj vnesite verifikacijsko kodo", - "title": "Dvofaktorska avtentikacija" - } - }, - "title": "Avgust" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/zh-Hant.json b/homeassistant/components/august/.translations/zh-Hant.json deleted file mode 100644 index 193b9a46e3f..00000000000 --- a/homeassistant/components/august/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "login_method": "\u767b\u5165\u65b9\u5f0f", - "password": "\u5bc6\u78bc", - "timeout": "\u903e\u6642\uff08\u79d2\uff09", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u5047\u5982\u767b\u5165\u65b9\u5f0f\u70ba\u90f5\u4ef6\u300cemail\u300d\u3001\u4f7f\u7528\u8005\u540d\u7a31\u70ba\u96fb\u5b50\u90f5\u4ef6\u4f4d\u5740\u3002\u5047\u5982\u767b\u5165\u65b9\u5f0f\u70ba\u96fb\u8a71\u300cphone\u300d\u3001\u5247\u4f7f\u7528\u8005\u540d\u7a31\u70ba\u5305\u542b\u570b\u78bc\u4e4b\u96fb\u8a71\u865f\u78bc\uff0c\u5982\u300c+NNNNNNNNN\u300d\u3002", - "title": "\u8a2d\u5b9a August \u5e33\u865f" - }, - "validation": { - "data": { - "code": "\u9a57\u8b49\u78bc" - }, - "description": "\u8acb\u78ba\u8a8d {login_method} ({username}) \u4e26\u65bc\u4e0b\u65b9\u8f38\u5165\u9a57\u8b49\u78bc", - "title": "\u5169\u6b65\u9a5f\u9a57\u8b49" - } - }, - "title": "August" - } -} \ No newline at end of file diff --git a/homeassistant/components/august/__init__.py b/homeassistant/components/august/__init__.py index 373fcae8d0c..1b25564b8a6 100644 --- a/homeassistant/components/august/__init__.py +++ b/homeassistant/components/august/__init__.py @@ -90,8 +90,11 @@ async def async_request_validation(hass, config_entry, august_gateway): hass.data[DOMAIN][entry_id][TWO_FA_REVALIDATE] = configurator.async_request_config( f"{DEFAULT_NAME} ({username})", async_august_configuration_validation_callback, - description="August must be re-verified. Please check your {} ({}) and enter the verification " - "code below".format(login_method, username), + description=( + "August must be re-verified. " + f"Please check your {login_method} ({username}) " + "and enter the verification code below" + ), submit_caption="Verify", fields=[ {"id": VERIFICATION_CODE_KEY, "name": "Verification code", "type": "string"} @@ -214,11 +217,11 @@ class AugustData(AugustSubscriberMixin): await self._api.async_get_doorbells(self._august_gateway.access_token) or [] ) - self._doorbells_by_id = dict((device.device_id, device) for device in doorbells) - self._locks_by_id = dict((device.device_id, device) for device in locks) - self._house_ids = set( + self._doorbells_by_id = {device.device_id: device for device in doorbells} + self._locks_by_id = {device.device_id: device for device in locks} + self._house_ids = { device.house_id for device in itertools.chain(locks, doorbells) - ) + } await self._async_refresh_device_detail_by_ids( [device.device_id for device in itertools.chain(locks, doorbells)] @@ -259,13 +262,20 @@ class AugustData(AugustSubscriberMixin): await self._async_update_device_detail( self._locks_by_id[device_id], self._api.async_get_lock_detail ) + # keypads are always attached to locks + if ( + device_id in self._device_detail_by_id + and self._device_detail_by_id[device_id].keypad is not None + ): + keypad = self._device_detail_by_id[device_id].keypad + self._device_detail_by_id[keypad.device_id] = keypad elif device_id in self._doorbells_by_id: await self._async_update_device_detail( self._doorbells_by_id[device_id], self._api.async_get_doorbell_detail, ) _LOGGER.debug( - "async_signal_device_id_update (from detail updates): %s", device_id, + "async_signal_device_id_update (from detail updates): %s", device_id ) self.async_signal_device_id_update(device_id) diff --git a/homeassistant/components/august/manifest.json b/homeassistant/components/august/manifest.json index f1085b81554..c2c383468f6 100644 --- a/homeassistant/components/august/manifest.json +++ b/homeassistant/components/august/manifest.json @@ -2,14 +2,8 @@ "domain": "august", "name": "August", "documentation": "https://www.home-assistant.io/integrations/august", - "requirements": [ - "py-august==0.25.0" - ], - "dependencies": [ - "configurator" - ], - "codeowners": [ - "@bdraco" - ], + "requirements": ["py-august==0.25.0"], + "dependencies": ["configurator"], + "codeowners": ["@bdraco"], "config_flow": true } diff --git a/homeassistant/components/august/sensor.py b/homeassistant/components/august/sensor.py index 018837a81dc..3276f8b073b 100644 --- a/homeassistant/components/august/sensor.py +++ b/homeassistant/components/august/sensor.py @@ -7,6 +7,7 @@ from homeassistant.components.sensor import DEVICE_CLASS_BATTERY from homeassistant.const import ATTR_ENTITY_PICTURE, UNIT_PERCENTAGE from homeassistant.core import callback from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity_registry import async_get_registry from homeassistant.helpers.restore_state import RestoreEntity from .const import ( @@ -33,21 +34,12 @@ def _retrieve_device_battery_state(detail): def _retrieve_linked_keypad_battery_state(detail): """Get the latest state of the sensor.""" - if detail.keypad is None: - return None - - return detail.keypad.battery_percentage + return detail.battery_percentage SENSOR_TYPES_BATTERY = { - "device_battery": { - "name": "Battery", - "state_provider": _retrieve_device_battery_state, - }, - "linked_keypad_battery": { - "name": "Keypad Battery", - "state_provider": _retrieve_linked_keypad_battery_state, - }, + "device_battery": {"state_provider": _retrieve_device_battery_state}, + "linked_keypad_battery": {"state_provider": _retrieve_linked_keypad_battery_state}, } @@ -55,7 +47,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the August sensors.""" data = hass.data[DOMAIN][config_entry.entry_id][DATA_AUGUST] devices = [] - + migrate_unique_id_devices = [] operation_sensors = [] batteries = { "device_battery": [], @@ -68,30 +60,62 @@ async def async_setup_entry(hass, config_entry, async_add_entities): batteries["linked_keypad_battery"].append(device) operation_sensors.append(device) - for sensor_type in SENSOR_TYPES_BATTERY: - for device in batteries[sensor_type]: - state_provider = SENSOR_TYPES_BATTERY[sensor_type]["state_provider"] - detail = data.get_device_detail(device.device_id) - state = state_provider(detail) - sensor_name = SENSOR_TYPES_BATTERY[sensor_type]["name"] - if state is None: - _LOGGER.debug( - "Not adding battery sensor %s for %s because it is not present", - sensor_name, - device.device_name, - ) - else: - _LOGGER.debug( - "Adding battery sensor %s for %s", sensor_name, device.device_name, - ) - devices.append(AugustBatterySensor(data, sensor_type, device)) + for device in batteries["device_battery"]: + state_provider = SENSOR_TYPES_BATTERY["device_battery"]["state_provider"] + detail = data.get_device_detail(device.device_id) + if detail is None or state_provider(detail) is None: + _LOGGER.debug( + "Not adding battery sensor for %s because it is not present", + device.device_name, + ) + continue + _LOGGER.debug( + "Adding battery sensor for %s", device.device_name, + ) + devices.append(AugustBatterySensor(data, "device_battery", device, device)) + + for device in batteries["linked_keypad_battery"]: + detail = data.get_device_detail(device.device_id) + + if detail.keypad is None: + _LOGGER.debug( + "Not adding keypad battery sensor for %s because it is not present", + device.device_name, + ) + continue + _LOGGER.debug( + "Adding keypad battery sensor for %s", device.device_name, + ) + keypad_battery_sensor = AugustBatterySensor( + data, "linked_keypad_battery", detail.keypad, device + ) + devices.append(keypad_battery_sensor) + migrate_unique_id_devices.append(keypad_battery_sensor) for device in operation_sensors: devices.append(AugustOperatorSensor(data, device)) + await _async_migrate_old_unique_ids(hass, migrate_unique_id_devices) + async_add_entities(devices, True) +async def _async_migrate_old_unique_ids(hass, devices): + """Keypads now have their own serial number.""" + registry = await async_get_registry(hass) + for device in devices: + old_entity_id = registry.async_get_entity_id( + "sensor", DOMAIN, device.old_unique_id + ) + if old_entity_id is not None: + _LOGGER.debug( + "Migrating unique_id from [%s] to [%s]", + device.old_unique_id, + device.unique_id, + ) + registry.async_update_entity(old_entity_id, new_unique_id=device.unique_id) + + class AugustOperatorSensor(AugustEntityMixin, RestoreEntity, Entity): """Representation of an August lock operation sensor.""" @@ -194,12 +218,13 @@ class AugustOperatorSensor(AugustEntityMixin, RestoreEntity, Entity): class AugustBatterySensor(AugustEntityMixin, Entity): """Representation of an August sensor.""" - def __init__(self, data, sensor_type, device): + def __init__(self, data, sensor_type, device, old_device): """Initialize the sensor.""" super().__init__(data, device) self._data = data self._sensor_type = sensor_type self._device = device + self._old_device = old_device self._state = None self._available = False self._update_from_data() @@ -228,8 +253,7 @@ class AugustBatterySensor(AugustEntityMixin, Entity): def name(self): """Return the name of the sensor.""" device_name = self._device.device_name - sensor_name = SENSOR_TYPES_BATTERY[self._sensor_type]["name"] - return f"{device_name} {sensor_name}" + return f"{device_name} Battery" @callback def _update_from_data(self): @@ -242,3 +266,8 @@ class AugustBatterySensor(AugustEntityMixin, Entity): def unique_id(self) -> str: """Get the unique id of the device sensor.""" return f"{self._device_id}_{self._sensor_type}" + + @property + def old_unique_id(self) -> str: + """Get the old unique id of the device sensor.""" + return f"{self._old_device.device_id}_{self._sensor_type}" diff --git a/homeassistant/components/august/strings.json b/homeassistant/components/august/strings.json index 1695d33cd63..bffca81ab33 100644 --- a/homeassistant/components/august/strings.json +++ b/homeassistant/components/august/strings.json @@ -1,32 +1,27 @@ { - "config" : { - "error" : { - "unknown" : "Unexpected error", - "cannot_connect" : "Failed to connect, please try again", - "invalid_auth" : "Invalid authentication" + "config": { + "error": { + "unknown": "Unexpected error", + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication" + }, + "abort": { "already_configured": "Account is already configured" }, + "step": { + "validation": { + "title": "Two factor authentication", + "data": { "code": "Verification code" }, + "description": "Please check your {login_method} ({username}) and enter the verification code below" }, - "abort" : { - "already_configured" : "Account is already configured" - }, - "step" : { - "validation" : { - "title" : "Two factor authentication", - "data" : { - "code" : "Verification code" - }, - "description" : "Please check your {login_method} ({username}) and enter the verification code below" - }, - "user" : { - "description" : "If the Login Method is 'email', Username is the email address. If the Login Method is 'phone', Username is the phone number in the format '+NNNNNNNNN'.", - "data" : { - "timeout" : "Timeout (seconds)", - "password" : "Password", - "username" : "Username", - "login_method" : "Login Method" - }, - "title" : "Setup an August account" - } - }, - "title" : "August" - } + "user": { + "description": "If the Login Method is 'email', Username is the email address. If the Login Method is 'phone', Username is the phone number in the format '+NNNNNNNNN'.", + "data": { + "timeout": "Timeout (seconds)", + "password": "Password", + "username": "Username", + "login_method": "Login Method" + }, + "title": "Setup an August account" + } + } + } } diff --git a/homeassistant/components/august/translations/ca.json b/homeassistant/components/august/translations/ca.json new file mode 100644 index 00000000000..4f8f9cebe63 --- /dev/null +++ b/homeassistant/components/august/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "El compte ja ha estat configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "login_method": "M\u00e8tode d'inici de sessi\u00f3", + "password": "Contrasenya", + "timeout": "Temps d'espera (segons)", + "username": "Nom d'usuari" + }, + "description": "Si el m\u00e8tode d'inici de sessi\u00f3 \u00e9s 'email', el nom d'usuari \u00e9s l'adre\u00e7a de correu electr\u00f2nic. Si el m\u00e8tode d'inici de sessi\u00f3 \u00e9s 'phone', el nom d'usuari \u00e9s el n\u00famero de tel\u00e8fon en el format \"+NNNNNNNNN\".", + "title": "Configuraci\u00f3 de compte August" + }, + "validation": { + "data": { + "code": "Codi de verificaci\u00f3" + }, + "description": "Comprova el teu {login_method} ({username}) i introdueix el codi de verificaci\u00f3 a continuaci\u00f3", + "title": "Autenticaci\u00f3 de dos factors" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/da.json b/homeassistant/components/august/translations/da.json new file mode 100644 index 00000000000..e022fac3790 --- /dev/null +++ b/homeassistant/components/august/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigureret" + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse. Pr\u00f8v igen", + "invalid_auth": "Ugyldig godkendelse", + "unknown": "Uventet fejl" + }, + "step": { + "user": { + "data": { + "login_method": "Loginmetode", + "password": "Adgangskode", + "timeout": "Timeout (sekunder)", + "username": "Brugernavn" + }, + "description": "Hvis loginmetoden er 'e-mail', er brugernavn e-mailadressen. Hvis loginmetoden er 'telefon', er brugernavn telefonnummeret i formatet '+NNNNNNNNNN'.", + "title": "Konfigurer en August-konto" + }, + "validation": { + "data": { + "code": "Bekr\u00e6ftelseskode" + }, + "description": "Kontroller dit {login_method} ({username}), og angiv bekr\u00e6ftelseskoden nedenfor", + "title": "Tofaktorgodkendelse" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/de.json b/homeassistant/components/august/translations/de.json new file mode 100644 index 00000000000..d46be650e2c --- /dev/null +++ b/homeassistant/components/august/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Konto ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "login_method": "Anmeldemethode", + "password": "Passwort", + "timeout": "Zeit\u00fcberschreitung (Sekunden)", + "username": "Benutzername" + }, + "description": "Wenn die Anmeldemethode \"E-Mail\" lautet, ist Benutzername die E-Mail-Adresse. Wenn die Anmeldemethode \"Telefon\" ist, ist Benutzername die Telefonnummer im Format \"+ NNNNNNNNN\".", + "title": "Richten Sie ein August-Konto ein" + }, + "validation": { + "data": { + "code": "Verifizierungs-Code" + }, + "description": "Bitte \u00fcberpr\u00fcfen Sie Ihre {login_method} ({username}) und geben Sie den Best\u00e4tigungscode ein", + "title": "Zwei-Faktor-Authentifizierung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/en.json b/homeassistant/components/august/translations/en.json new file mode 100644 index 00000000000..b8bf1b1bc03 --- /dev/null +++ b/homeassistant/components/august/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Account is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "login_method": "Login Method", + "password": "Password", + "timeout": "Timeout (seconds)", + "username": "Username" + }, + "description": "If the Login Method is 'email', Username is the email address. If the Login Method is 'phone', Username is the phone number in the format '+NNNNNNNNN'.", + "title": "Setup an August account" + }, + "validation": { + "data": { + "code": "Verification code" + }, + "description": "Please check your {login_method} ({username}) and enter the verification code below", + "title": "Two factor authentication" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/es-419.json b/homeassistant/components/august/translations/es-419.json new file mode 100644 index 00000000000..0732c1c5e48 --- /dev/null +++ b/homeassistant/components/august/translations/es-419.json @@ -0,0 +1,26 @@ +{ + "config": { + "error": { + "invalid_auth": "Autenticaci\u00f3n inv\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "login_method": "M\u00e9todo de inicio de sesi\u00f3n", + "password": "Contrase\u00f1a", + "timeout": "Tiempo de espera (segundos)", + "username": "Nombre de usuario" + }, + "description": "Si el M\u00e9todo de inicio de sesi\u00f3n es 'correo electr\u00f3nico', Nombre de usuario es la direcci\u00f3n de correo electr\u00f3nico. Si el M\u00e9todo de inicio de sesi\u00f3n es 'tel\u00e9fono', Nombre de usuario es el n\u00famero de tel\u00e9fono en el formato '+NNNNNNNNN'." + }, + "validation": { + "data": { + "code": "C\u00f3digo de verificaci\u00f3n" + }, + "description": "Verifique su {login_method} ( {username} ) e ingrese el c\u00f3digo de verificaci\u00f3n a continuaci\u00f3n", + "title": "Autenticaci\u00f3n de dos factores" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/es.json b/homeassistant/components/august/translations/es.json new file mode 100644 index 00000000000..28d9743c073 --- /dev/null +++ b/homeassistant/components/august/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "La cuenta ya est\u00e1 configurada" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "login_method": "M\u00e9todo de inicio de sesi\u00f3n", + "password": "Contrase\u00f1a", + "timeout": "Tiempo de espera (segundos)", + "username": "Usuario" + }, + "description": "Si el M\u00e9todo de Inicio de Sesi\u00f3n es 'correo electr\u00f3nico', Usuario es la direcci\u00f3n de correo electr\u00f3nico. Si el M\u00e9todo de Inicio de Sesi\u00f3n es 'tel\u00e9fono', Usuario es el n\u00famero de tel\u00e9fono en formato '+NNNNNNNNN'.", + "title": "Configurar una cuenta de August" + }, + "validation": { + "data": { + "code": "C\u00f3digo de verificaci\u00f3n" + }, + "description": "Por favor, comprueba tu {login_method} ({username}) e introduce el c\u00f3digo de verificaci\u00f3n a continuaci\u00f3n", + "title": "Autenticaci\u00f3n de dos factores" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/fr.json b/homeassistant/components/august/translations/fr.json new file mode 100644 index 00000000000..da2df2461a1 --- /dev/null +++ b/homeassistant/components/august/translations/fr.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Le compte est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "login_method": "M\u00e9thode de connexion", + "password": "Mot de passe", + "timeout": "D\u00e9lai d'expiration (secondes)", + "username": "Nom d'utilisateur" + }, + "title": "Configurer un compte August" + }, + "validation": { + "data": { + "code": "Code de v\u00e9rification" + }, + "title": "Authentification \u00e0 deux facteurs" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/it.json b/homeassistant/components/august/translations/it.json new file mode 100644 index 00000000000..3a5f2676acd --- /dev/null +++ b/homeassistant/components/august/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "L'account \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare.", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "login_method": "Metodo di accesso", + "password": "Password", + "timeout": "Timeout (in secondi)", + "username": "Nome utente" + }, + "description": "Se il metodo di accesso \u00e8 \"e-mail\", il nome utente \u00e8 l'indirizzo e-mail. Se il metodo di accesso \u00e8 \"telefono\", il nome utente \u00e8 il numero di telefono nel formato \"+NNNNNNNNN\".", + "title": "Configura un account di August" + }, + "validation": { + "data": { + "code": "Codice di verifica" + }, + "description": "Controlla il tuo {login_method} ({username}) e inserisci il codice di verifica seguente", + "title": "Autenticazione a due fattori" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/ko.json b/homeassistant/components/august/translations/ko.json new file mode 100644 index 00000000000..28d6ed8842e --- /dev/null +++ b/homeassistant/components/august/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\uacc4\uc815\uc774 \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": { + "login_method": "\ub85c\uadf8\uc778 \ubc29\ubc95", + "password": "\ube44\ubc00\ubc88\ud638", + "timeout": "\uc81c\ud55c \uc2dc\uac04 (\ucd08)", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "\ub85c\uadf8\uc778 \ubc29\ubc95\uc774 '\uc774\uba54\uc77c'\uc778 \uacbd\uc6b0, \uc0ac\uc6a9\uc790 \uc774\ub984\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ubc29\ubc95\uc774 'phone'\uc778 \uacbd\uc6b0, \uc0ac\uc6a9\uc790 \uc774\ub984\uc740 '+NNNNNNNNN' \ud615\uc2dd\uc758 \uc804\ud654\ubc88\ud638\uc785\ub2c8\ub2e4.", + "title": "August \uacc4\uc815 \uc124\uc815" + }, + "validation": { + "data": { + "code": "\uc778\uc99d \ucf54\ub4dc" + }, + "description": "{login_method} ({username}) \uc744(\ub97c) \ud655\uc778\ud558\uace0 \uc544\ub798\uc5d0 \uc778\uc99d \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "2\ub2e8\uacc4 \uc778\uc99d" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/lb.json b/homeassistant/components/august/translations/lb.json new file mode 100644 index 00000000000..501af05c2df --- /dev/null +++ b/homeassistant/components/august/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Kont ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "login_method": "Login Method", + "password": "Passwuert", + "timeout": "Z\u00e4itiwwerscheidung (sekonnen)", + "username": "Benotzernumm" + }, + "description": "Wann d'Login Method 'E-Mail' ass, dannn ass de Benotzernumm d'E-Mail Adress. Wann d'Login-Method 'Telefon' ass, ass den Benotzernumm d'Telefonsnummer am Format '+ NNNNNNNNN'.", + "title": "August Kont ariichten" + }, + "validation": { + "data": { + "code": "Verifikatiouns Code" + }, + "description": "Pr\u00e9ift w.e.g. \u00c4re {login_method} ({username}) a gitt de Verifikatiounscode hei dr\u00ebnner an", + "title": "2-Faktor-Authentifikatioun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/.translations/lv.json b/homeassistant/components/august/translations/lv.json similarity index 100% rename from homeassistant/components/august/.translations/lv.json rename to homeassistant/components/august/translations/lv.json diff --git a/homeassistant/components/august/translations/no.json b/homeassistant/components/august/translations/no.json new file mode 100644 index 00000000000..2ba841ea139 --- /dev/null +++ b/homeassistant/components/august/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "login_method": "P\u00e5loggingsmetode", + "password": "Passord", + "timeout": "Tidsavbrudd (sekunder)", + "username": "Brukernavn" + }, + "description": "Hvis p\u00e5loggingsmetoden er 'e-post', er brukernavnet e-postadressen. Hvis p\u00e5loggingsmetoden er 'telefon', er brukernavn telefonnummeret i formatet '+ NNNNNNNNN'.", + "title": "Sett opp en August konto" + }, + "validation": { + "data": { + "code": "Bekreftelseskode" + }, + "description": "Kontroller {login_method} ({username}) og skriv inn bekreftelseskoden nedenfor", + "title": "To-faktor autentisering" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/pl.json b/homeassistant/components/august/translations/pl.json new file mode 100644 index 00000000000..2798af40779 --- /dev/null +++ b/homeassistant/components/august/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "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": { + "login_method": "Metoda logowania", + "password": "Has\u0142o", + "timeout": "Limit czasu (sekundy)", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Je\u015bli metod\u0105 logowania jest 'e-mail', nazw\u0105 u\u017cytkownika b\u0119dzie adres e-mail. Je\u015bli metod\u0105 logowania jest 'telefon', nazw\u0105 u\u017cytkownika b\u0119dzie numer telefonu w formacie '+NNNNNNNNN'.", + "title": "Konfiguracja konta August" + }, + "validation": { + "data": { + "code": "Kod weryfikacyjny" + }, + "description": "Sprawd\u017a {login_method} ({username}) i wprowad\u017a kod weryfikacyjny poni\u017cej", + "title": "Uwierzytelnianie dwusk\u0142adnikowe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/pt.json b/homeassistant/components/august/translations/pt.json similarity index 100% rename from homeassistant/components/glances/.translations/pt.json rename to homeassistant/components/august/translations/pt.json diff --git a/homeassistant/components/august/translations/ru.json b/homeassistant/components/august/translations/ru.json new file mode 100644 index 00000000000..5cc039b8e9e --- /dev/null +++ b/homeassistant/components/august/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "login_method": "\u0421\u043f\u043e\u0441\u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "timeout": "\u0422\u0430\u0439\u043c-\u0430\u0443\u0442 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 'email', \u0442\u043e \u043b\u043e\u0433\u0438\u043d\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0415\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 'phone', \u0442\u043e \u043b\u043e\u0433\u0438\u043d\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 '+NNNNNNNNN'.", + "title": "August" + }, + "validation": { + "data": { + "code": "\u041a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f" + }, + "description": "\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 {login_method} ({username}) \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.", + "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/sl.json b/homeassistant/components/august/translations/sl.json new file mode 100644 index 00000000000..5d78dac5ef1 --- /dev/null +++ b/homeassistant/components/august/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ra\u010dun je \u017ee nastavljen" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "login_method": "Na\u010din prijave", + "password": "Geslo", + "timeout": "\u010casovna omejitev (sekunde)", + "username": "Uporabni\u0161ko ime" + }, + "description": "\u010ce je metoda za prijavo 'e-po\u0161ta', je e-po\u0161tni naslov uporabni\u0161ko ime. V kolikor je na\u010din prijave \"telefon\", je uporabni\u0161ko ime telefonska \u0161tevilka v obliki \" +NNNNNNNNN\".", + "title": "Nastavite ra\u010dun August" + }, + "validation": { + "data": { + "code": "Koda za preverjanje" + }, + "description": "Preverite svoj {login_method} ({username}) in spodaj vnesite verifikacijsko kodo", + "title": "Dvofaktorska avtentikacija" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/zh-Hant.json b/homeassistant/components/august/translations/zh-Hant.json new file mode 100644 index 00000000000..6b7e206d4c4 --- /dev/null +++ b/homeassistant/components/august/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "login_method": "\u767b\u5165\u65b9\u5f0f", + "password": "\u5bc6\u78bc", + "timeout": "\u903e\u6642\uff08\u79d2\uff09", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u5047\u5982\u767b\u5165\u65b9\u5f0f\u70ba\u90f5\u4ef6\u300cemail\u300d\u3001\u4f7f\u7528\u8005\u540d\u7a31\u70ba\u96fb\u5b50\u90f5\u4ef6\u4f4d\u5740\u3002\u5047\u5982\u767b\u5165\u65b9\u5f0f\u70ba\u96fb\u8a71\u300cphone\u300d\u3001\u5247\u4f7f\u7528\u8005\u540d\u7a31\u70ba\u5305\u542b\u570b\u78bc\u4e4b\u96fb\u8a71\u865f\u78bc\uff0c\u5982\u300c+NNNNNNNNN\u300d\u3002", + "title": "\u8a2d\u5b9a August \u5e33\u865f" + }, + "validation": { + "data": { + "code": "\u9a57\u8b49\u78bc" + }, + "description": "\u8acb\u78ba\u8a8d {login_method} ({username}) \u4e26\u65bc\u4e0b\u65b9\u8f38\u5165\u9a57\u8b49\u78bc", + "title": "\u5169\u6b65\u9a5f\u9a57\u8b49" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/aurora/binary_sensor.py b/homeassistant/components/aurora/binary_sensor.py index 6963d836685..e2f07276c6c 100644 --- a/homeassistant/components/aurora/binary_sensor.py +++ b/homeassistant/components/aurora/binary_sensor.py @@ -41,8 +41,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): _LOGGER.error("Lat. or long. not set in Home Assistant config") return False - name = config.get(CONF_NAME) - threshold = config.get(CONF_THRESHOLD) + name = config[CONF_NAME] + threshold = config[CONF_THRESHOLD] try: aurora_data = AuroraData(hass.config.latitude, hass.config.longitude, threshold) diff --git a/homeassistant/components/aurora/manifest.json b/homeassistant/components/aurora/manifest.json index 204327043f9..3e7a9359614 100644 --- a/homeassistant/components/aurora/manifest.json +++ b/homeassistant/components/aurora/manifest.json @@ -2,7 +2,5 @@ "domain": "aurora", "name": "Aurora", "documentation": "https://www.home-assistant.io/integrations/aurora", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/aurora_abb_powerone/manifest.json b/homeassistant/components/aurora_abb_powerone/manifest.json index 18e5a4b5ed9..55d700c6496 100644 --- a/homeassistant/components/aurora_abb_powerone/manifest.json +++ b/homeassistant/components/aurora_abb_powerone/manifest.json @@ -2,7 +2,6 @@ "domain": "aurora_abb_powerone", "name": "Aurora ABB Solar PV", "documentation": "https://www.home-assistant.io/integrations/aurora_abb_powerone/", - "dependencies": [], "codeowners": ["@davet2001"], "requirements": ["aurorapy==0.2.6"] } diff --git a/homeassistant/components/auth/__init__.py b/homeassistant/components/auth/__init__.py index 888ef98a582..5b1ca46c41b 100644 --- a/homeassistant/components/auth/__init__.py +++ b/homeassistant/components/auth/__init__.py @@ -132,6 +132,7 @@ from homeassistant.components.http.auth import async_sign_path from homeassistant.components.http.ban import log_invalid_auth from homeassistant.components.http.data_validator import RequestDataValidator from homeassistant.components.http.view import HomeAssistantView +from homeassistant.const import HTTP_BAD_REQUEST, HTTP_FORBIDDEN, HTTP_OK from homeassistant.core import HomeAssistant, callback from homeassistant.loader import bind_hass from homeassistant.util import dt as dt_util @@ -260,7 +261,9 @@ class TokenView(HomeAssistantView): hass, data, str(request[KEY_REAL_IP]) ) - return self.json({"error": "unsupported_grant_type"}, status_code=400) + return self.json( + {"error": "unsupported_grant_type"}, status_code=HTTP_BAD_REQUEST + ) async def _async_handle_revoke_token(self, hass, data): """Handle revoke token request.""" @@ -271,15 +274,15 @@ class TokenView(HomeAssistantView): token = data.get("token") if token is None: - return web.Response(status=200) + return web.Response(status=HTTP_OK) refresh_token = await hass.auth.async_get_refresh_token_by_token(token) if refresh_token is None: - return web.Response(status=200) + return web.Response(status=HTTP_OK) await hass.auth.async_remove_refresh_token(refresh_token) - return web.Response(status=200) + return web.Response(status=HTTP_OK) async def _async_handle_auth_code(self, hass, data, remote_addr): """Handle authorization code request.""" @@ -287,7 +290,7 @@ class TokenView(HomeAssistantView): if client_id is None or not indieauth.verify_client_id(client_id): return self.json( {"error": "invalid_request", "error_description": "Invalid client id"}, - status_code=400, + status_code=HTTP_BAD_REQUEST, ) code = data.get("code") @@ -295,7 +298,7 @@ class TokenView(HomeAssistantView): if code is None: return self.json( {"error": "invalid_request", "error_description": "Invalid code"}, - status_code=400, + status_code=HTTP_BAD_REQUEST, ) user = self._retrieve_user(client_id, RESULT_TYPE_USER, code) @@ -303,7 +306,7 @@ class TokenView(HomeAssistantView): if user is None or not isinstance(user, User): return self.json( {"error": "invalid_request", "error_description": "Invalid code"}, - status_code=400, + status_code=HTTP_BAD_REQUEST, ) # refresh user @@ -312,7 +315,7 @@ class TokenView(HomeAssistantView): if not user.is_active: return self.json( {"error": "access_denied", "error_description": "User is not active"}, - status_code=403, + status_code=HTTP_FORBIDDEN, ) refresh_token = await hass.auth.async_create_refresh_token(user, client_id) @@ -335,21 +338,21 @@ class TokenView(HomeAssistantView): if client_id is not None and not indieauth.verify_client_id(client_id): return self.json( {"error": "invalid_request", "error_description": "Invalid client id"}, - status_code=400, + status_code=HTTP_BAD_REQUEST, ) token = data.get("refresh_token") if token is None: - return self.json({"error": "invalid_request"}, status_code=400) + return self.json({"error": "invalid_request"}, status_code=HTTP_BAD_REQUEST) refresh_token = await hass.auth.async_get_refresh_token_by_token(token) if refresh_token is None: - return self.json({"error": "invalid_grant"}, status_code=400) + return self.json({"error": "invalid_grant"}, status_code=HTTP_BAD_REQUEST) if refresh_token.client_id != client_id: - return self.json({"error": "invalid_request"}, status_code=400) + return self.json({"error": "invalid_request"}, status_code=HTTP_BAD_REQUEST) access_token = hass.auth.async_create_access_token(refresh_token, remote_addr) @@ -385,7 +388,7 @@ class LinkUserView(HomeAssistantView): ) if credentials is None: - return self.json_message("Invalid code", status_code=400) + return self.json_message("Invalid code", status_code=HTTP_BAD_REQUEST) await hass.auth.async_link_user(user, credentials) return self.json_message("User linked") diff --git a/homeassistant/components/auth/indieauth.py b/homeassistant/components/auth/indieauth.py index a2d015c279b..cd8e797876f 100644 --- a/homeassistant/components/auth/indieauth.py +++ b/homeassistant/components/auth/indieauth.py @@ -90,21 +90,16 @@ async def fetch_redirect_uris(hass, url): except asyncio.TimeoutError: _LOGGER.error("Timeout while looking up redirect_uri %s", url) - pass except aiohttp.client_exceptions.ClientSSLError: _LOGGER.error("SSL error while looking up redirect_uri %s", url) - pass except aiohttp.client_exceptions.ClientOSError as ex: _LOGGER.error("OS error while looking up redirect_uri %s: %s", url, ex.strerror) - pass except aiohttp.client_exceptions.ClientConnectionError: _LOGGER.error( "Low level connection error while looking up redirect_uri %s", url ) - pass except aiohttp.client_exceptions.ClientError: _LOGGER.error("Unknown error while looking up redirect_uri %s", url) - pass # Authorization endpoints verifying that a redirect_uri is allowed for use # by a client MUST look for an exact match of the given redirect_uri in the diff --git a/homeassistant/components/auth/login_flow.py b/homeassistant/components/auth/login_flow.py index 6f8d2751018..c5d824ce617 100644 --- a/homeassistant/components/auth/login_flow.py +++ b/homeassistant/components/auth/login_flow.py @@ -79,6 +79,7 @@ from homeassistant.components.http.ban import ( ) from homeassistant.components.http.data_validator import RequestDataValidator from homeassistant.components.http.view import HomeAssistantView +from homeassistant.const import HTTP_BAD_REQUEST, HTTP_NOT_FOUND from . import indieauth @@ -103,7 +104,7 @@ class AuthProvidersView(HomeAssistantView): if not hass.components.onboarding.async_is_user_onboarded(): return self.json_message( message="Onboarding not finished", - status_code=400, + status_code=HTTP_BAD_REQUEST, message_code="onboarding_required", ) @@ -169,7 +170,9 @@ class LoginFlowIndexView(HomeAssistantView): if not await indieauth.verify_redirect_uri( request.app["hass"], data["client_id"], data["redirect_uri"] ): - return self.json_message("invalid client id or redirect uri", 400) + return self.json_message( + "invalid client id or redirect uri", HTTP_BAD_REQUEST + ) if isinstance(data["handler"], list): handler = tuple(data["handler"]) @@ -185,9 +188,9 @@ class LoginFlowIndexView(HomeAssistantView): }, ) except data_entry_flow.UnknownHandler: - return self.json_message("Invalid handler specified", 404) + return self.json_message("Invalid handler specified", HTTP_NOT_FOUND) except data_entry_flow.UnknownStep: - return self.json_message("Handler does not support init", 400) + return self.json_message("Handler does not support init", HTTP_BAD_REQUEST) if result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY: await process_success_login(request) @@ -212,7 +215,7 @@ class LoginFlowResourceView(HomeAssistantView): async def get(self, request): """Do not allow getting status of a flow in progress.""" - return self.json_message("Invalid flow specified", 404) + return self.json_message("Invalid flow specified", HTTP_NOT_FOUND) @RequestDataValidator(vol.Schema({"client_id": str}, extra=vol.ALLOW_EXTRA)) @log_invalid_auth @@ -221,7 +224,7 @@ class LoginFlowResourceView(HomeAssistantView): client_id = data.pop("client_id") if not indieauth.verify_client_id(client_id): - return self.json_message("Invalid client id", 400) + return self.json_message("Invalid client id", HTTP_BAD_REQUEST) try: # do not allow change ip during login flow @@ -229,13 +232,13 @@ class LoginFlowResourceView(HomeAssistantView): if flow["flow_id"] == flow_id and flow["context"][ "ip_address" ] != request.get(KEY_REAL_IP): - return self.json_message("IP address changed", 400) + return self.json_message("IP address changed", HTTP_BAD_REQUEST) result = await self._flow_mgr.async_configure(flow_id, data) except data_entry_flow.UnknownFlow: - return self.json_message("Invalid flow specified", 404) + return self.json_message("Invalid flow specified", HTTP_NOT_FOUND) except vol.Invalid: - return self.json_message("User input malformed", 400) + return self.json_message("User input malformed", HTTP_BAD_REQUEST) if result["type"] != data_entry_flow.RESULT_TYPE_CREATE_ENTRY: # @log_invalid_auth does not work here since it returns HTTP 200 @@ -257,6 +260,6 @@ class LoginFlowResourceView(HomeAssistantView): try: self._flow_mgr.async_abort(flow_id) except data_entry_flow.UnknownFlow: - return self.json_message("Invalid flow specified", 404) + return self.json_message("Invalid flow specified", HTTP_NOT_FOUND) return self.json_message("Flow aborted") diff --git a/homeassistant/components/auth/manifest.json b/homeassistant/components/auth/manifest.json index e2b49ccfec1..b8c711c1dda 100644 --- a/homeassistant/components/auth/manifest.json +++ b/homeassistant/components/auth/manifest.json @@ -2,7 +2,6 @@ "domain": "auth", "name": "Auth", "documentation": "https://www.home-assistant.io/integrations/auth", - "requirements": [], "dependencies": ["http"], "after_dependencies": ["onboarding"], "codeowners": ["@home-assistant/core"], diff --git a/homeassistant/components/auth/strings.json b/homeassistant/components/auth/strings.json index 57f5ed659b0..d386bb7a488 100644 --- a/homeassistant/components/auth/strings.json +++ b/homeassistant/components/auth/strings.json @@ -1,5 +1,5 @@ { - "mfa_setup":{ + "mfa_setup": { "totp": { "title": "TOTP", "step": { diff --git a/homeassistant/components/auth/.translations/ar.json b/homeassistant/components/auth/translations/ar.json similarity index 100% rename from homeassistant/components/auth/.translations/ar.json rename to homeassistant/components/auth/translations/ar.json diff --git a/homeassistant/components/auth/.translations/bg.json b/homeassistant/components/auth/translations/bg.json similarity index 100% rename from homeassistant/components/auth/.translations/bg.json rename to homeassistant/components/auth/translations/bg.json diff --git a/homeassistant/components/auth/.translations/ca.json b/homeassistant/components/auth/translations/ca.json similarity index 100% rename from homeassistant/components/auth/.translations/ca.json rename to homeassistant/components/auth/translations/ca.json diff --git a/homeassistant/components/auth/.translations/cs.json b/homeassistant/components/auth/translations/cs.json similarity index 100% rename from homeassistant/components/auth/.translations/cs.json rename to homeassistant/components/auth/translations/cs.json diff --git a/homeassistant/components/auth/.translations/da.json b/homeassistant/components/auth/translations/da.json similarity index 100% rename from homeassistant/components/auth/.translations/da.json rename to homeassistant/components/auth/translations/da.json diff --git a/homeassistant/components/auth/.translations/de.json b/homeassistant/components/auth/translations/de.json similarity index 100% rename from homeassistant/components/auth/.translations/de.json rename to homeassistant/components/auth/translations/de.json diff --git a/homeassistant/components/auth/.translations/en.json b/homeassistant/components/auth/translations/en.json similarity index 100% rename from homeassistant/components/auth/.translations/en.json rename to homeassistant/components/auth/translations/en.json diff --git a/homeassistant/components/auth/.translations/es-419.json b/homeassistant/components/auth/translations/es-419.json similarity index 100% rename from homeassistant/components/auth/.translations/es-419.json rename to homeassistant/components/auth/translations/es-419.json diff --git a/homeassistant/components/auth/.translations/es.json b/homeassistant/components/auth/translations/es.json similarity index 100% rename from homeassistant/components/auth/.translations/es.json rename to homeassistant/components/auth/translations/es.json diff --git a/homeassistant/components/auth/.translations/et.json b/homeassistant/components/auth/translations/et.json similarity index 100% rename from homeassistant/components/auth/.translations/et.json rename to homeassistant/components/auth/translations/et.json diff --git a/homeassistant/components/auth/.translations/fr.json b/homeassistant/components/auth/translations/fr.json similarity index 100% rename from homeassistant/components/auth/.translations/fr.json rename to homeassistant/components/auth/translations/fr.json diff --git a/homeassistant/components/auth/.translations/he.json b/homeassistant/components/auth/translations/he.json similarity index 100% rename from homeassistant/components/auth/.translations/he.json rename to homeassistant/components/auth/translations/he.json diff --git a/homeassistant/components/auth/.translations/hu.json b/homeassistant/components/auth/translations/hu.json similarity index 100% rename from homeassistant/components/auth/.translations/hu.json rename to homeassistant/components/auth/translations/hu.json diff --git a/homeassistant/components/auth/.translations/id.json b/homeassistant/components/auth/translations/id.json similarity index 100% rename from homeassistant/components/auth/.translations/id.json rename to homeassistant/components/auth/translations/id.json diff --git a/homeassistant/components/auth/.translations/it.json b/homeassistant/components/auth/translations/it.json similarity index 100% rename from homeassistant/components/auth/.translations/it.json rename to homeassistant/components/auth/translations/it.json diff --git a/homeassistant/components/auth/.translations/ko.json b/homeassistant/components/auth/translations/ko.json similarity index 100% rename from homeassistant/components/auth/.translations/ko.json rename to homeassistant/components/auth/translations/ko.json diff --git a/homeassistant/components/auth/.translations/lb.json b/homeassistant/components/auth/translations/lb.json similarity index 100% rename from homeassistant/components/auth/.translations/lb.json rename to homeassistant/components/auth/translations/lb.json diff --git a/homeassistant/components/auth/.translations/nl.json b/homeassistant/components/auth/translations/nl.json similarity index 100% rename from homeassistant/components/auth/.translations/nl.json rename to homeassistant/components/auth/translations/nl.json diff --git a/homeassistant/components/auth/.translations/nn.json b/homeassistant/components/auth/translations/nn.json similarity index 100% rename from homeassistant/components/auth/.translations/nn.json rename to homeassistant/components/auth/translations/nn.json diff --git a/homeassistant/components/auth/.translations/no.json b/homeassistant/components/auth/translations/no.json similarity index 100% rename from homeassistant/components/auth/.translations/no.json rename to homeassistant/components/auth/translations/no.json diff --git a/homeassistant/components/auth/.translations/pl.json b/homeassistant/components/auth/translations/pl.json similarity index 100% rename from homeassistant/components/auth/.translations/pl.json rename to homeassistant/components/auth/translations/pl.json diff --git a/homeassistant/components/auth/.translations/pt-BR.json b/homeassistant/components/auth/translations/pt-BR.json similarity index 100% rename from homeassistant/components/auth/.translations/pt-BR.json rename to homeassistant/components/auth/translations/pt-BR.json diff --git a/homeassistant/components/auth/.translations/pt.json b/homeassistant/components/auth/translations/pt.json similarity index 100% rename from homeassistant/components/auth/.translations/pt.json rename to homeassistant/components/auth/translations/pt.json diff --git a/homeassistant/components/auth/.translations/ro.json b/homeassistant/components/auth/translations/ro.json similarity index 100% rename from homeassistant/components/auth/.translations/ro.json rename to homeassistant/components/auth/translations/ro.json diff --git a/homeassistant/components/auth/.translations/ru.json b/homeassistant/components/auth/translations/ru.json similarity index 100% rename from homeassistant/components/auth/.translations/ru.json rename to homeassistant/components/auth/translations/ru.json diff --git a/homeassistant/components/auth/.translations/sl.json b/homeassistant/components/auth/translations/sl.json similarity index 100% rename from homeassistant/components/auth/.translations/sl.json rename to homeassistant/components/auth/translations/sl.json diff --git a/homeassistant/components/auth/.translations/sv.json b/homeassistant/components/auth/translations/sv.json similarity index 100% rename from homeassistant/components/auth/.translations/sv.json rename to homeassistant/components/auth/translations/sv.json diff --git a/homeassistant/components/auth/.translations/th.json b/homeassistant/components/auth/translations/th.json similarity index 100% rename from homeassistant/components/auth/.translations/th.json rename to homeassistant/components/auth/translations/th.json diff --git a/homeassistant/components/auth/.translations/uk.json b/homeassistant/components/auth/translations/uk.json similarity index 100% rename from homeassistant/components/auth/.translations/uk.json rename to homeassistant/components/auth/translations/uk.json diff --git a/homeassistant/components/auth/.translations/vi.json b/homeassistant/components/auth/translations/vi.json similarity index 100% rename from homeassistant/components/auth/.translations/vi.json rename to homeassistant/components/auth/translations/vi.json diff --git a/homeassistant/components/auth/.translations/zh-Hans.json b/homeassistant/components/auth/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/auth/.translations/zh-Hans.json rename to homeassistant/components/auth/translations/zh-Hans.json diff --git a/homeassistant/components/auth/.translations/zh-Hant.json b/homeassistant/components/auth/translations/zh-Hant.json similarity index 100% rename from homeassistant/components/auth/.translations/zh-Hant.json rename to homeassistant/components/auth/translations/zh-Hant.json diff --git a/homeassistant/components/automatic/device_tracker.py b/homeassistant/components/automatic/device_tracker.py index 0fc747ffaa9..0f48ef6376d 100644 --- a/homeassistant/components/automatic/device_tracker.py +++ b/homeassistant/components/automatic/device_tracker.py @@ -164,7 +164,7 @@ class AutomaticAuthCallbackView(HomeAssistantView): """Finish OAuth callback request.""" hass = request.app["hass"] params = request.query - response = web.HTTPFound("/states") + response = web.HTTPFound("/lovelace") if "state" not in params or "code" not in params: if "error" in params: diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index c19a0033f86..ea6c1e81e66 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -14,7 +14,7 @@ from homeassistant.const import ( CONF_PLATFORM, CONF_ZONE, EVENT_AUTOMATION_TRIGGERED, - EVENT_HOMEASSISTANT_START, + EVENT_HOMEASSISTANT_STARTED, SERVICE_RELOAD, SERVICE_TOGGLE, SERVICE_TURN_OFF, @@ -389,7 +389,7 @@ class AutomationEntity(ToggleEntity, RestoreEntity): pass self._last_triggered = utcnow() - await self.async_update_ha_state() + self.async_write_ha_state() async def async_will_remove_from_hass(self): """Remove listeners when removing automation from Home Assistant.""" @@ -408,7 +408,7 @@ class AutomationEntity(ToggleEntity, RestoreEntity): # HomeAssistant is starting up if self.hass.state != CoreState.not_running: - self._async_detach_triggers = await self._async_attach_triggers() + self._async_detach_triggers = await self._async_attach_triggers(False) self.async_write_ha_state() return @@ -418,10 +418,10 @@ class AutomationEntity(ToggleEntity, RestoreEntity): if not self._is_enabled or self._async_detach_triggers is not None: return - self._async_detach_triggers = await self._async_attach_triggers() + self._async_detach_triggers = await self._async_attach_triggers(True) self.hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_START, async_enable_automation + EVENT_HOMEASSISTANT_STARTED, async_enable_automation ) self.async_write_ha_state() @@ -438,15 +438,17 @@ class AutomationEntity(ToggleEntity, RestoreEntity): self.async_write_ha_state() - async def _async_attach_triggers(self): + async def _async_attach_triggers( + self, home_assistant_start: bool + ) -> Optional[Callable[[], None]]: """Set up the triggers.""" removes = [] - info = {"name": self._name} + info = {"name": self._name, "home_assistant_start": home_assistant_start} for conf in self._trigger_config: platform = importlib.import_module(f".{conf[CONF_PLATFORM]}", __name__) - remove = await platform.async_attach_trigger( + remove = await platform.async_attach_trigger( # type: ignore self.hass, conf, self.async_trigger, info ) diff --git a/homeassistant/components/automation/homeassistant.py b/homeassistant/components/automation/homeassistant.py index 743b169c86c..91b67e28c7c 100644 --- a/homeassistant/components/automation/homeassistant.py +++ b/homeassistant/components/automation/homeassistant.py @@ -4,7 +4,7 @@ import logging import voluptuous as vol from homeassistant.const import CONF_EVENT, CONF_PLATFORM, EVENT_HOMEASSISTANT_STOP -from homeassistant.core import CoreState, callback +from homeassistant.core import callback # mypy: allow-untyped-defs @@ -40,7 +40,7 @@ async def async_attach_trigger(hass, config, action, automation_info): # Automation are enabled while hass is starting up, fire right away # Check state because a config reload shouldn't trigger it. - if hass.state == CoreState.starting: + if automation_info["home_assistant_start"]: hass.async_run_job( action({"trigger": {"platform": "homeassistant", "event": event}}) ) diff --git a/homeassistant/components/automation/manifest.json b/homeassistant/components/automation/manifest.json index 48d8c58dfe1..1b5fad1b588 100644 --- a/homeassistant/components/automation/manifest.json +++ b/homeassistant/components/automation/manifest.json @@ -2,8 +2,6 @@ "domain": "automation", "name": "Automation", "documentation": "https://www.home-assistant.io/integrations/automation", - "requirements": [], - "dependencies": [], "after_dependencies": ["device_automation", "webhook"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/automation/reproduce_state.py b/homeassistant/components/automation/reproduce_state.py index 4cfe519d585..bcd0cc4e585 100644 --- a/homeassistant/components/automation/reproduce_state.py +++ b/homeassistant/components/automation/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Automation state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -21,7 +21,11 @@ VALID_STATES = {STATE_ON, STATE_OFF} async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -53,9 +57,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Automation states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/automation/services.yaml b/homeassistant/components/automation/services.yaml index ce54220aff4..867dc8e89cd 100644 --- a/homeassistant/components/automation/services.yaml +++ b/homeassistant/components/automation/services.yaml @@ -1,35 +1,34 @@ # Describes the format for available automation services - turn_on: description: Enable an automation. fields: entity_id: description: Name of the automation to turn on. - example: 'automation.notify_home' + example: "automation.notify_home" turn_off: description: Disable an automation. fields: entity_id: description: Name of the automation to turn off. - example: 'automation.notify_home' + example: "automation.notify_home" toggle: description: Toggle an automation. fields: entity_id: description: Name of the automation to toggle on/off. - example: 'automation.notify_home' + example: "automation.notify_home" trigger: description: Trigger the action of an automation. fields: entity_id: description: Name of the automation to trigger. - example: 'automation.notify_home' + example: "automation.notify_home" skip_condition: description: Whether or not the condition will be skipped (defaults to True). - example: True + example: true reload: description: Reload the automation configuration. diff --git a/homeassistant/components/automation/strings.json b/homeassistant/components/automation/strings.json new file mode 100644 index 00000000000..adcc505b145 --- /dev/null +++ b/homeassistant/components/automation/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Automation", + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } + } +} diff --git a/homeassistant/components/automation/translations/af.json b/homeassistant/components/automation/translations/af.json new file mode 100644 index 00000000000..c821073c2ed --- /dev/null +++ b/homeassistant/components/automation/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Outomatisering" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ar.json b/homeassistant/components/automation/translations/ar.json new file mode 100644 index 00000000000..392afb2946f --- /dev/null +++ b/homeassistant/components/automation/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0627\u0644\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u064a" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/bg.json b/homeassistant/components/automation/translations/bg.json new file mode 100644 index 00000000000..1e294bff9a7 --- /dev/null +++ b/homeassistant/components/automation/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/bs.json b/homeassistant/components/automation/translations/bs.json new file mode 100644 index 00000000000..c40d856e4bb --- /dev/null +++ b/homeassistant/components/automation/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Automatizacija" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ca.json b/homeassistant/components/automation/translations/ca.json new file mode 100644 index 00000000000..d138d6da6e5 --- /dev/null +++ b/homeassistant/components/automation/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desactivat", + "on": "Activat" + } + }, + "title": "Automatitzaci\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/cs.json b/homeassistant/components/automation/translations/cs.json new file mode 100644 index 00000000000..5a8f3819c9d --- /dev/null +++ b/homeassistant/components/automation/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Automatizace" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/cy.json b/homeassistant/components/automation/translations/cy.json new file mode 100644 index 00000000000..8239d527af3 --- /dev/null +++ b/homeassistant/components/automation/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "I ffwrdd", + "on": "Ar" + } + }, + "title": "Awtomeiddio" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/da.json b/homeassistant/components/automation/translations/da.json new file mode 100644 index 00000000000..755c3719ee8 --- /dev/null +++ b/homeassistant/components/automation/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Automatisering" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/de.json b/homeassistant/components/automation/translations/de.json new file mode 100644 index 00000000000..9920c73d447 --- /dev/null +++ b/homeassistant/components/automation/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Automatisierung" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/el.json b/homeassistant/components/automation/translations/el.json new file mode 100644 index 00000000000..14f41748830 --- /dev/null +++ b/homeassistant/components/automation/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2 " + } + }, + "title": "\u0391\u03c5\u03c4\u03bf\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/en.json b/homeassistant/components/automation/translations/en.json new file mode 100644 index 00000000000..e5dabcf3bce --- /dev/null +++ b/homeassistant/components/automation/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Automation" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/es-419.json b/homeassistant/components/automation/translations/es-419.json new file mode 100644 index 00000000000..30b83fcacaf --- /dev/null +++ b/homeassistant/components/automation/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desactivado", + "on": "Encendido" + } + }, + "title": "Automatizaci\u00f3n" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/es.json b/homeassistant/components/automation/translations/es.json new file mode 100644 index 00000000000..c20f1be7d1d --- /dev/null +++ b/homeassistant/components/automation/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendida" + } + }, + "title": "Automatizaci\u00f3n" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/et.json b/homeassistant/components/automation/translations/et.json new file mode 100644 index 00000000000..71df51e9147 --- /dev/null +++ b/homeassistant/components/automation/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Automatiseerimine" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/eu.json b/homeassistant/components/automation/translations/eu.json new file mode 100644 index 00000000000..e0c3e625dfd --- /dev/null +++ b/homeassistant/components/automation/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Automatizazioa" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/fa.json b/homeassistant/components/automation/translations/fa.json new file mode 100644 index 00000000000..78b9a05540a --- /dev/null +++ b/homeassistant/components/automation/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0641\u0639\u0627\u0644" + } + }, + "title": "\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/fi.json b/homeassistant/components/automation/translations/fi.json new file mode 100644 index 00000000000..b55e959d0c5 --- /dev/null +++ b/homeassistant/components/automation/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Automaatio" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/fr.json b/homeassistant/components/automation/translations/fr.json new file mode 100644 index 00000000000..548c30fd0de --- /dev/null +++ b/homeassistant/components/automation/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Inactif", + "on": "Actif" + } + }, + "title": "Automation" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/gsw.json b/homeassistant/components/automation/translations/gsw.json new file mode 100644 index 00000000000..4cdd801926a --- /dev/null +++ b/homeassistant/components/automation/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Automation" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/he.json b/homeassistant/components/automation/translations/he.json new file mode 100644 index 00000000000..6e4decfce9a --- /dev/null +++ b/homeassistant/components/automation/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05d0\u05d5\u05d8\u05d5\u05de\u05e6\u05d9\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/hi.json b/homeassistant/components/automation/translations/hi.json new file mode 100644 index 00000000000..d68188a8010 --- /dev/null +++ b/homeassistant/components/automation/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926" + } + }, + "title": "\u0938\u094d\u0935\u091a\u093e\u0932\u0928" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/hr.json b/homeassistant/components/automation/translations/hr.json new file mode 100644 index 00000000000..c40d856e4bb --- /dev/null +++ b/homeassistant/components/automation/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Automatizacija" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/hu.json b/homeassistant/components/automation/translations/hu.json new file mode 100644 index 00000000000..85640af23ba --- /dev/null +++ b/homeassistant/components/automation/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Automatiz\u00e1l\u00e1s" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/hy.json b/homeassistant/components/automation/translations/hy.json new file mode 100644 index 00000000000..a421380748b --- /dev/null +++ b/homeassistant/components/automation/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u0531\u057e\u057f\u0578\u0574\u0561\u057f\u0561\u0581\u0578\u0582\u0574" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/id.json b/homeassistant/components/automation/translations/id.json new file mode 100644 index 00000000000..eabfe0b64aa --- /dev/null +++ b/homeassistant/components/automation/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Otomasi" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/is.json b/homeassistant/components/automation/translations/is.json new file mode 100644 index 00000000000..7585e03c3b5 --- /dev/null +++ b/homeassistant/components/automation/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u00d3virk", + "on": "Virk" + } + }, + "title": "Sj\u00e1lfvirkni" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/it.json b/homeassistant/components/automation/translations/it.json new file mode 100644 index 00000000000..c913ae7de4d --- /dev/null +++ b/homeassistant/components/automation/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Automazione" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ja.json b/homeassistant/components/automation/translations/ja.json new file mode 100644 index 00000000000..ffd515979a2 --- /dev/null +++ b/homeassistant/components/automation/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + }, + "title": "\u30aa\u30fc\u30c8\u30e1\u30fc\u30b7\u30e7\u30f3" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ko.json b/homeassistant/components/automation/translations/ko.json new file mode 100644 index 00000000000..18be137be1b --- /dev/null +++ b/homeassistant/components/automation/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc790\ub3d9\ud654" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/lb.json b/homeassistant/components/automation/translations/lb.json new file mode 100644 index 00000000000..8a4ef4d9bf1 --- /dev/null +++ b/homeassistant/components/automation/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Automatismen" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/lt.json b/homeassistant/components/automation/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/automation/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/lv.json b/homeassistant/components/automation/translations/lv.json new file mode 100644 index 00000000000..48407ed6ab8 --- /dev/null +++ b/homeassistant/components/automation/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + } + }, + "title": "Automatiz\u0101cija" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/nb.json b/homeassistant/components/automation/translations/nb.json new file mode 100644 index 00000000000..64e00db42ca --- /dev/null +++ b/homeassistant/components/automation/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Automasjon" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/nl.json b/homeassistant/components/automation/translations/nl.json new file mode 100644 index 00000000000..7ef3acc9f2c --- /dev/null +++ b/homeassistant/components/automation/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Automatisering" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/nn.json b/homeassistant/components/automation/translations/nn.json new file mode 100644 index 00000000000..7c18b2e2ce2 --- /dev/null +++ b/homeassistant/components/automation/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Automasjonar" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/no.json b/homeassistant/components/automation/translations/no.json new file mode 100644 index 00000000000..2e6c49d8993 --- /dev/null +++ b/homeassistant/components/automation/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Automatisering" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/pl.json b/homeassistant/components/automation/translations/pl.json new file mode 100644 index 00000000000..f8ed21a204d --- /dev/null +++ b/homeassistant/components/automation/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Automatyzacja" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/pt-BR.json b/homeassistant/components/automation/translations/pt-BR.json new file mode 100644 index 00000000000..30c78d0a187 --- /dev/null +++ b/homeassistant/components/automation/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ativa" + } + }, + "title": "Automa\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/pt.json b/homeassistant/components/automation/translations/pt.json new file mode 100644 index 00000000000..447658433e5 --- /dev/null +++ b/homeassistant/components/automation/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Automa\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ro.json b/homeassistant/components/automation/translations/ro.json new file mode 100644 index 00000000000..f21db43282c --- /dev/null +++ b/homeassistant/components/automation/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Automatiz\u0103ri" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ru.json b/homeassistant/components/automation/translations/ru.json new file mode 100644 index 00000000000..79732bea385 --- /dev/null +++ b/homeassistant/components/automation/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/sk.json b/homeassistant/components/automation/translations/sk.json new file mode 100644 index 00000000000..a300acd23da --- /dev/null +++ b/homeassistant/components/automation/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neakt\u00edvny", + "on": "Akt\u00edvna" + } + }, + "title": "Automatiz\u00e1cia" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/sl.json b/homeassistant/components/automation/translations/sl.json new file mode 100644 index 00000000000..9045a3f3d36 --- /dev/null +++ b/homeassistant/components/automation/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Avtomatizacija" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/sv.json b/homeassistant/components/automation/translations/sv.json new file mode 100644 index 00000000000..8a5e2e58a9c --- /dev/null +++ b/homeassistant/components/automation/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Automation" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/ta.json b/homeassistant/components/automation/translations/ta.json new file mode 100644 index 00000000000..27ed507378f --- /dev/null +++ b/homeassistant/components/automation/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd " + } + } +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/te.json b/homeassistant/components/automation/translations/te.json new file mode 100644 index 00000000000..9577cca49cc --- /dev/null +++ b/homeassistant/components/automation/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c06\u0c1f\u0c4b\u0c2e\u0c47\u0c37\u0c28\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/th.json b/homeassistant/components/automation/translations/th.json new file mode 100644 index 00000000000..0754717d6ab --- /dev/null +++ b/homeassistant/components/automation/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/tr.json b/homeassistant/components/automation/translations/tr.json new file mode 100644 index 00000000000..804b616bfae --- /dev/null +++ b/homeassistant/components/automation/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Otomasyon" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/uk.json b/homeassistant/components/automation/translations/uk.json new file mode 100644 index 00000000000..aa6eebb40c9 --- /dev/null +++ b/homeassistant/components/automation/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/vi.json b/homeassistant/components/automation/translations/vi.json new file mode 100644 index 00000000000..8b466688be9 --- /dev/null +++ b/homeassistant/components/automation/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "T\u1ef1 \u0111\u1ed9ng h\u00f3a" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/zh-Hans.json b/homeassistant/components/automation/translations/zh-Hans.json new file mode 100644 index 00000000000..8a6cdbc5db8 --- /dev/null +++ b/homeassistant/components/automation/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u5173\u95ed", + "on": "\u5f00\u542f" + } + }, + "title": "\u81ea\u52a8\u5316" +} \ No newline at end of file diff --git a/homeassistant/components/automation/translations/zh-Hant.json b/homeassistant/components/automation/translations/zh-Hant.json new file mode 100644 index 00000000000..3fd099ef8d8 --- /dev/null +++ b/homeassistant/components/automation/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + } + }, + "title": "\u81ea\u52d5\u5316" +} \ No newline at end of file diff --git a/homeassistant/components/avea/manifest.json b/homeassistant/components/avea/manifest.json index f6217eeed18..729219d8f1d 100644 --- a/homeassistant/components/avea/manifest.json +++ b/homeassistant/components/avea/manifest.json @@ -2,7 +2,6 @@ "domain": "avea", "name": "Elgato Avea", "documentation": "https://www.home-assistant.io/integrations/avea", - "dependencies": [], "codeowners": ["@pattyland"], "requirements": ["avea==1.4"] } diff --git a/homeassistant/components/avion/manifest.json b/homeassistant/components/avion/manifest.json index cfdda5a0d84..bd72cb8c06c 100644 --- a/homeassistant/components/avion/manifest.json +++ b/homeassistant/components/avion/manifest.json @@ -3,6 +3,5 @@ "name": "Avi-on", "documentation": "https://www.home-assistant.io/integrations/avion", "requirements": ["avion==0.10"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/avri/manifest.json b/homeassistant/components/avri/manifest.json index 7c9e7bc348c..41be3251b10 100644 --- a/homeassistant/components/avri/manifest.json +++ b/homeassistant/components/avri/manifest.json @@ -3,6 +3,5 @@ "name": "Avri", "documentation": "https://www.home-assistant.io/integrations/avri", "requirements": ["avri-api==0.1.7"], - "dependencies": [], "codeowners": ["@timvancann"] } diff --git a/homeassistant/components/awair/manifest.json b/homeassistant/components/awair/manifest.json index 2741ad358f6..2ead58c0fe8 100644 --- a/homeassistant/components/awair/manifest.json +++ b/homeassistant/components/awair/manifest.json @@ -3,6 +3,5 @@ "name": "Awair", "documentation": "https://www.home-assistant.io/integrations/awair", "requirements": ["python_awair==0.0.4"], - "dependencies": [], "codeowners": ["@danielsjf"] } diff --git a/homeassistant/components/aws/manifest.json b/homeassistant/components/aws/manifest.json index 3f9c0043a3e..f6e88ce2899 100644 --- a/homeassistant/components/aws/manifest.json +++ b/homeassistant/components/aws/manifest.json @@ -3,6 +3,5 @@ "name": "Amazon Web Services (AWS)", "documentation": "https://www.home-assistant.io/integrations/aws", "requirements": ["aiobotocore==0.11.1"], - "dependencies": [], "codeowners": ["@awarecan", "@robbiet480"] } diff --git a/homeassistant/components/axis/.translations/bg.json b/homeassistant/components/axis/.translations/bg.json deleted file mode 100644 index c56822ba5a4..00000000000 --- a/homeassistant/components/axis/.translations/bg.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", - "bad_config_file": "\u041b\u043e\u0448\u0438 \u0434\u0430\u043d\u043d\u0438 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0438\u044f \u0444\u0430\u0439\u043b", - "link_local_address": "\u041b\u043e\u043a\u0430\u043b\u043d\u0438 \u0430\u0434\u0440\u0435\u0441\u0438 \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0442", - "not_axis_device": "\u041e\u0442\u043a\u0440\u0438\u0442\u043e\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0435 Axis" - }, - "error": { - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", - "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.", - "device_unavailable": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0447\u043d\u043e", - "faulty_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" - }, - "flow_title": "Axis \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: {name} ({host})", - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442 Axis" - } - }, - "title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/ca.json b/homeassistant/components/axis/.translations/ca.json deleted file mode 100644 index b391af0e609..00000000000 --- a/homeassistant/components/axis/.translations/ca.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat", - "bad_config_file": "Dades incorrectes del fitxer de configuraci\u00f3", - "link_local_address": "L'enlla\u00e7 d'adreces locals no est\u00e0 disponible", - "not_axis_device": "El dispositiu descobert no \u00e9s un dispositiu Axis" - }, - "error": { - "already_configured": "El dispositiu ja est\u00e0 configurat", - "already_in_progress": "El flux de dades de configuraci\u00f3 pel dispositiu ja est\u00e0 en curs.", - "device_unavailable": "El dispositiu no est\u00e0 disponible", - "faulty_credentials": "Credencials d'usuari incorrectes" - }, - "flow_title": "Dispositiu d'eix: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "password": "Contrasenya", - "port": "Port", - "username": "Nom d'usuari" - }, - "title": "Configuraci\u00f3 de dispositiu Axis" - } - }, - "title": "Dispositiu Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/da.json b/homeassistant/components/axis/.translations/da.json deleted file mode 100644 index 21f33d120f7..00000000000 --- a/homeassistant/components/axis/.translations/da.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheden er allerede konfigureret", - "bad_config_file": "Forkerte data fra konfigurationsfilen", - "link_local_address": "Link lokale adresser underst\u00f8ttes ikke", - "not_axis_device": "Fundet enhed ikke en Axis enhed" - }, - "error": { - "already_configured": "Enheden er allerede konfigureret", - "already_in_progress": "Enhedskonfiguration er allerede i gang.", - "device_unavailable": "Enheden er ikke tilg\u00e6ngelig", - "faulty_credentials": "Ugyldige legitimationsoplysninger" - }, - "flow_title": "Axis-enhed: {name} ({host})", - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "password": "Adgangskode", - "port": "Port", - "username": "Brugernavn" - }, - "title": "Indstil Axis-enhed" - } - }, - "title": "Axis-enhed" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/de.json b/homeassistant/components/axis/.translations/de.json deleted file mode 100644 index f238b00e847..00000000000 --- a/homeassistant/components/axis/.translations/de.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert", - "bad_config_file": "Fehlerhafte Daten aus der Konfigurationsdatei", - "link_local_address": "Link-local Adressen werden nicht unterst\u00fctzt", - "not_axis_device": "Erkanntes Ger\u00e4t ist kein Axis-Ger\u00e4t" - }, - "error": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert", - "already_in_progress": "Der Konfigurationsablauf f\u00fcr das Ger\u00e4t wird bereits ausgef\u00fchrt.", - "device_unavailable": "Ger\u00e4t ist nicht verf\u00fcgbar", - "faulty_credentials": "Ung\u00fcltige Anmeldeinformationen" - }, - "flow_title": "Achsenger\u00e4t: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Passwort", - "port": "Port", - "username": "Benutzername" - }, - "title": "Axis Ger\u00e4t einrichten" - } - }, - "title": "Axis Ger\u00e4t" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/en.json b/homeassistant/components/axis/.translations/en.json deleted file mode 100644 index b56cb0c5b74..00000000000 --- a/homeassistant/components/axis/.translations/en.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured", - "bad_config_file": "Bad data from configuration file", - "link_local_address": "Link local addresses are not supported", - "not_axis_device": "Discovered device not an Axis device" - }, - "error": { - "already_configured": "Device is already configured", - "already_in_progress": "Config flow for device is already in progress.", - "device_unavailable": "Device is not available", - "faulty_credentials": "Bad user credentials" - }, - "flow_title": "Axis device: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Password", - "port": "Port", - "username": "Username" - }, - "title": "Set up Axis device" - } - }, - "title": "Axis device" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/es-419.json b/homeassistant/components/axis/.translations/es-419.json deleted file mode 100644 index c5404a173f6..00000000000 --- a/homeassistant/components/axis/.translations/es-419.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "bad_config_file": "Datos err\u00f3neos del archivo de configuraci\u00f3n", - "link_local_address": "Las direcciones locales de enlace no son compatibles", - "not_axis_device": "El dispositivo descubierto no es un dispositivo de Axis" - }, - "error": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "already_in_progress": "El flujo de configuraci\u00f3n para el dispositivo ya est\u00e1 en progreso.", - "device_unavailable": "El dispositivo no est\u00e1 disponible", - "faulty_credentials": "Credenciales de usuario incorrectas" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "port": "Puerto", - "username": "Nombre de usuario" - }, - "title": "Configurar dispositivo Axis" - } - }, - "title": "Dispositivo Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/es.json b/homeassistant/components/axis/.translations/es.json deleted file mode 100644 index 3f7db674fdf..00000000000 --- a/homeassistant/components/axis/.translations/es.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "bad_config_file": "Datos err\u00f3neos en el archivo de configuraci\u00f3n", - "link_local_address": "Las direcciones de enlace locales no son compatibles", - "not_axis_device": "El dispositivo descubierto no es un dispositivo de Axis" - }, - "error": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "already_in_progress": "El flujo de configuraci\u00f3n del dispositivo ya est\u00e1 en curso.", - "device_unavailable": "El dispositivo no est\u00e1 disponible", - "faulty_credentials": "Credenciales de usuario incorrectas" - }, - "flow_title": "Dispositivo Axis: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Contrase\u00f1a", - "port": "Puerto", - "username": "Nombre de usuario" - }, - "title": "Configurar dispositivo Axis" - } - }, - "title": "Dispositivo Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/fr.json b/homeassistant/components/axis/.translations/fr.json deleted file mode 100644 index 608e12d020a..00000000000 --- a/homeassistant/components/axis/.translations/fr.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", - "bad_config_file": "Mauvaises donn\u00e9es du fichier de configuration", - "link_local_address": "Les adresses locales ne sont pas prises en charge", - "not_axis_device": "L'appareil d\u00e9couvert n'est pas un appareil Axis" - }, - "error": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", - "already_in_progress": "Le flux de configuration de l'appareil est d\u00e9j\u00e0 en cours.", - "device_unavailable": "L'appareil n'est pas disponible", - "faulty_credentials": "Mauvaises informations d'identification de l'utilisateur" - }, - "flow_title": "Appareil Axis: {name} ( {host} )", - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "password": "Mot de passe", - "port": "Port", - "username": "Nom d'utilisateur" - }, - "title": "Configurer l'appareil Axis" - } - }, - "title": "Appareil Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/hu.json b/homeassistant/components/axis/.translations/hu.json deleted file mode 100644 index b6347e21744..00000000000 --- a/homeassistant/components/axis/.translations/hu.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Az eszk\u00f6zt m\u00e1r konfigur\u00e1ltuk", - "device_unavailable": "Az eszk\u00f6z nem \u00e9rhet\u0151 el", - "faulty_credentials": "Rossz felhaszn\u00e1l\u00f3i hiteles\u00edt\u0151 adatok" - }, - "flow_title": "Axis eszk\u00f6z: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Hoszt", - "password": "Jelsz\u00f3", - "port": "Port", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - } - } - }, - "title": "Axis eszk\u00f6z" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/it.json b/homeassistant/components/axis/.translations/it.json deleted file mode 100644 index 3f303140c68..00000000000 --- a/homeassistant/components/axis/.translations/it.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", - "bad_config_file": "Dati errati dal file di configurazione", - "link_local_address": "Gli indirizzi locali di collegamento non sono supportati", - "not_axis_device": "Il dispositivo rilevato non \u00e8 un dispositivo Axis" - }, - "error": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", - "already_in_progress": "Il flusso di configurazione per il dispositivo \u00e8 gi\u00e0 in corso.", - "device_unavailable": "Il dispositivo non \u00e8 disponibile", - "faulty_credentials": "Credenziali utente non valide" - }, - "flow_title": "Dispositivo Axis: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Password", - "port": "Porta", - "username": "Nome utente" - }, - "title": "Impostazione del dispositivo Axis" - } - }, - "title": "Dispositivo Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/ko.json b/homeassistant/components/axis/.translations/ko.json deleted file mode 100644 index 648bd3cfd7d..00000000000 --- a/homeassistant/components/axis/.translations/ko.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "bad_config_file": "\uad6c\uc131 \ud30c\uc77c\uc5d0 \uc798\ubabb\ub41c \ub370\uc774\ud130\uac00 \uc788\uc2b5\ub2c8\ub2e4", - "link_local_address": "\ub85c\uceec \uc8fc\uc18c \uc5f0\uacb0\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "not_axis_device": "\ubc1c\uacac\ub41c \uae30\uae30\ub294 Axis \uae30\uae30\uac00 \uc544\ub2d9\ub2c8\ub2e4" - }, - "error": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "\uae30\uae30 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", - "device_unavailable": "\uae30\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "faulty_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "flow_title": "Axis \uae30\uae30: {name} ({host})", - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "title": "Axis \uae30\uae30 \uc124\uc815" - } - }, - "title": "Axis \uae30\uae30" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/lb.json b/homeassistant/components/axis/.translations/lb.json deleted file mode 100644 index 24ee0e24125..00000000000 --- a/homeassistant/components/axis/.translations/lb.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert", - "bad_config_file": "Feelerhaft Donn\u00e9e\u00eb aus der Konfiguratioun's Datei", - "link_local_address": "Lokal Link Adressen ginn net \u00ebnnerst\u00ebtzt", - "not_axis_device": "Entdeckten Apparat ass keen Axis Apparat" - }, - "error": { - "already_configured": "Apparat ass scho konfigur\u00e9iert", - "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", - "device_unavailable": "Apparat ass net erreechbar", - "faulty_credentials": "Ong\u00eblteg Login Informatioune" - }, - "flow_title": "Axis Apparat: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Apparat", - "password": "Passwuert", - "port": "Port", - "username": "Benotzernumm" - }, - "title": "Axis Apparat ariichten" - } - }, - "title": "Axis Apparat" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/nl.json b/homeassistant/components/axis/.translations/nl.json deleted file mode 100644 index 10fc8c02d66..00000000000 --- a/homeassistant/components/axis/.translations/nl.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparaat is al geconfigureerd", - "bad_config_file": "Slechte gegevens van het configuratiebestand", - "link_local_address": "Link-lokale adressen worden niet ondersteund", - "not_axis_device": "Ontdekte apparaat, is geen Axis-apparaat" - }, - "error": { - "already_configured": "Apparaat is al geconfigureerd", - "already_in_progress": "De configuratiestroom voor het apparaat is al in volle gang.", - "device_unavailable": "Apparaat is niet beschikbaar", - "faulty_credentials": "Ongeldige gebruikersreferenties" - }, - "flow_title": "Axis apparaat: {naam} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Wachtwoord", - "port": "Poort", - "username": "Gebruikersnaam" - }, - "title": "Stel het Axis-apparaat in" - } - }, - "title": "Axis-apparaat" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/no.json b/homeassistant/components/axis/.translations/no.json deleted file mode 100644 index 1ad7a446cfa..00000000000 --- a/homeassistant/components/axis/.translations/no.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert", - "bad_config_file": "D\u00e5rlige data fra konfigurasjonsfilen", - "link_local_address": "Linking av lokale adresser st\u00f8ttes ikke", - "not_axis_device": "Oppdaget enhet ikke en Axis enhet" - }, - "error": { - "already_configured": "Enheten er allerede konfigurert", - "already_in_progress": "Konfigurasjonsflyt for enhet p\u00e5g\u00e5r allerede.", - "device_unavailable": "Enheten er ikke tilgjengelig", - "faulty_credentials": "Ugyldig brukerlegitimasjon" - }, - "flow_title": "Akse-enhet: {Name} ({Host})", - "step": { - "user": { - "data": { - "host": "Vert", - "password": "Passord", - "port": "", - "username": "Brukernavn" - }, - "title": "Sett opp Axis enhet" - } - }, - "title": "Axis enhet" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/pl.json b/homeassistant/components/axis/.translations/pl.json deleted file mode 100644 index dd1a63039e2..00000000000 --- a/homeassistant/components/axis/.translations/pl.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "bad_config_file": "B\u0142\u0119dne dane z pliku konfiguracyjnego", - "link_local_address": "Po\u0142\u0105czenie lokalnego adresu nie jest obs\u0142ugiwane", - "not_axis_device": "Wykryte urz\u0105dzenie nie jest urz\u0105dzeniem Axis" - }, - "error": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "already_in_progress": "Konfiguracja urz\u0105dzenia jest ju\u017c w toku.", - "device_unavailable": "Urz\u0105dzenie jest niedost\u0119pne", - "faulty_credentials": "B\u0142\u0119dne dane uwierzytelniaj\u0105ce" - }, - "flow_title": "Urz\u0105dzenie Axis: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Has\u0142o", - "port": "Port", - "username": "Nazwa u\u017cytkownika" - }, - "title": "Konfiguracja urz\u0105dzenia Axis" - } - }, - "title": "Urz\u0105dzenie Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/pt-BR.json b/homeassistant/components/axis/.translations/pt-BR.json deleted file mode 100644 index 453c8fa3643..00000000000 --- a/homeassistant/components/axis/.translations/pt-BR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", - "bad_config_file": "Dados incorretos do arquivo de configura\u00e7\u00e3o", - "link_local_address": "Link de endere\u00e7os locais n\u00e3o s\u00e3o suportados", - "not_axis_device": "Dispositivo descoberto n\u00e3o \u00e9 um dispositivo Axis" - }, - "error": { - "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", - "already_in_progress": "O fluxo de configura\u00e7\u00e3o para o dispositivo j\u00e1 est\u00e1 em andamento.", - "device_unavailable": "O dispositivo n\u00e3o est\u00e1 dispon\u00edvel", - "faulty_credentials": "Credenciais do usu\u00e1rio inv\u00e1lidas" - }, - "flow_title": "Eixos do dispositivo: {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host", - "password": "Senha", - "port": "Porta", - "username": "Nome de usu\u00e1rio" - }, - "title": "Configurar o dispositivo Axis" - } - }, - "title": "Dispositivo Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/pt.json b/homeassistant/components/axis/.translations/pt.json deleted file mode 100644 index 77ce7025f70..00000000000 --- a/homeassistant/components/axis/.translations/pt.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "host": "Servidor", - "password": "Palavra-passe", - "port": "Porta", - "username": "Nome de Utilizador" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/ru.json b/homeassistant/components/axis/.translations/ru.json deleted file mode 100644 index d9e3a40d304..00000000000 --- a/homeassistant/components/axis/.translations/ru.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "bad_config_file": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.", - "link_local_address": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", - "not_axis_device": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c Axis." - }, - "error": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", - "device_unavailable": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e.", - "faulty_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." - }, - "flow_title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Axis {name} ({host})", - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "Axis" - } - }, - "title": "Axis" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/sl.json b/homeassistant/components/axis/.translations/sl.json deleted file mode 100644 index 9d66831b91a..00000000000 --- a/homeassistant/components/axis/.translations/sl.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana", - "bad_config_file": "Slabi podatki iz konfiguracijske datoteke", - "link_local_address": "Lokalni naslovi povezave niso podprti", - "not_axis_device": "Odkrita naprava ni naprava Axis" - }, - "error": { - "already_configured": "Naprava je \u017ee konfigurirana", - "already_in_progress": "Konfiguracijski tok za to napravo je \u017ee v teku.", - "device_unavailable": "Naprava ni na voljo", - "faulty_credentials": "Napa\u010dni uporabni\u0161ki podatki" - }, - "flow_title": "OS naprava: {Name} ({Host})", - "step": { - "user": { - "data": { - "host": "Gostitelj", - "password": "Geslo", - "port": "Vrata", - "username": "Uporabni\u0161ko ime" - }, - "title": "Nastavite plo\u0161\u010dek" - } - }, - "title": "Plo\u0161\u010dek" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/sv.json b/homeassistant/components/axis/.translations/sv.json deleted file mode 100644 index 76ceaf7cbd7..00000000000 --- a/homeassistant/components/axis/.translations/sv.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten \u00e4r redan konfigurerad", - "bad_config_file": "Felaktig data fr\u00e5n konfigurationsfilen", - "link_local_address": "Link local addresses are not supported", - "not_axis_device": "Uppt\u00e4ckte enhet som inte \u00e4r en Axis enhet" - }, - "error": { - "already_configured": "Enheten \u00e4r redan konfigurerad", - "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r enheten p\u00e5g\u00e5r redan.", - "device_unavailable": "Enheten \u00e4r inte tillg\u00e4nglig", - "faulty_credentials": "Felaktiga anv\u00e4ndaruppgifter" - }, - "flow_title": "Axisenhet: {name} ({host})", - "step": { - "user": { - "data": { - "host": "V\u00e4rd", - "password": "L\u00f6senord", - "port": "Port", - "username": "Anv\u00e4ndarnamn" - }, - "title": "Konfigurera Axis-enhet" - } - }, - "title": "Axis enhet" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/zh-Hant.json b/homeassistant/components/axis/.translations/zh-Hant.json deleted file mode 100644 index 41ecfdb80b7..00000000000 --- a/homeassistant/components/axis/.translations/zh-Hant.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "bad_config_file": "\u8a2d\u5b9a\u6a94\u6848\u8cc7\u6599\u7121\u6548\u932f\u8aa4", - "link_local_address": "\u4e0d\u652f\u63f4\u9023\u7d50\u672c\u5730\u7aef\u4f4d\u5740", - "not_axis_device": "\u6240\u767c\u73fe\u7684\u8a2d\u5099\u4e26\u975e Axis \u8a2d\u5099" - }, - "error": { - "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "\u8a2d\u5099\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", - "device_unavailable": "\u8a2d\u5099\u7121\u6cd5\u4f7f\u7528", - "faulty_credentials": "\u4f7f\u7528\u8005\u6191\u8b49\u7121\u6548" - }, - "flow_title": "Axis \u8a2d\u5099\uff1a{name} ({host})", - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "title": "\u8a2d\u5b9a Axis \u8a2d\u5099" - } - }, - "title": "Axis \u8a2d\u5099" - } -} \ No newline at end of file diff --git a/homeassistant/components/axis/axis_base.py b/homeassistant/components/axis/axis_base.py index f22a169a102..2e848168b49 100644 --- a/homeassistant/components/axis/axis_base.py +++ b/homeassistant/components/axis/axis_base.py @@ -13,21 +13,15 @@ class AxisEntityBase(Entity): def __init__(self, device): """Initialize the Axis event.""" self.device = device - self.unsub_dispatcher = [] async def async_added_to_hass(self): """Subscribe device events.""" - self.unsub_dispatcher.append( + self.async_on_remove( async_dispatcher_connect( self.hass, self.device.event_reachable, self.update_callback ) ) - async def async_will_remove_from_hass(self) -> None: - """Unsubscribe device events when removed.""" - for unsub_dispatcher in self.unsub_dispatcher: - unsub_dispatcher() - @property def available(self): """Return True if device is available.""" @@ -41,7 +35,7 @@ class AxisEntityBase(Entity): @callback def update_callback(self, no_delay=None): """Update the entities state.""" - self.async_schedule_update_ha_state() + self.async_write_ha_state() class AxisEventBase(AxisEntityBase): diff --git a/homeassistant/components/axis/binary_sensor.py b/homeassistant/components/axis/binary_sensor.py index d7551abebc1..d992c28746c 100644 --- a/homeassistant/components/axis/binary_sensor.py +++ b/homeassistant/components/axis/binary_sensor.py @@ -53,13 +53,13 @@ class AxisBinarySensor(AxisEventBase, BinarySensorDevice): self.remove_timer = None if self.is_on or delay == 0 or no_delay: - self.async_schedule_update_ha_state() + self.async_write_ha_state() return @callback def _delay_update(now): """Timer callback for sensor update.""" - self.async_schedule_update_ha_state() + self.async_write_ha_state() self.remove_timer = None self.remove_timer = async_track_point_in_utc_time( diff --git a/homeassistant/components/axis/camera.py b/homeassistant/components/axis/camera.py index c914319aa42..ca76552a4cc 100644 --- a/homeassistant/components/axis/camera.py +++ b/homeassistant/components/axis/camera.py @@ -57,7 +57,7 @@ class AxisCamera(AxisEntityBase, MjpegCamera): async def async_added_to_hass(self): """Subscribe camera events.""" - self.unsub_dispatcher.append( + self.async_on_remove( async_dispatcher_connect( self.hass, self.device.event_new_address, self._new_address ) diff --git a/homeassistant/components/axis/manifest.json b/homeassistant/components/axis/manifest.json index 348f6148386..6e8899c79d6 100644 --- a/homeassistant/components/axis/manifest.json +++ b/homeassistant/components/axis/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/axis", "requirements": ["axis==25"], - "dependencies": [], "zeroconf": ["_axis-video._tcp.local."], "codeowners": ["@kane610"] } diff --git a/homeassistant/components/axis/strings.json b/homeassistant/components/axis/strings.json index 04a9f9e388a..67a3bb0a49e 100644 --- a/homeassistant/components/axis/strings.json +++ b/homeassistant/components/axis/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Axis device", "flow_title": "Axis device: {name} ({host})", "step": { "user": { diff --git a/homeassistant/components/axis/translations/bg.json b/homeassistant/components/axis/translations/bg.json new file mode 100644 index 00000000000..83fbfa0118c --- /dev/null +++ b/homeassistant/components/axis/translations/bg.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", + "bad_config_file": "\u041b\u043e\u0448\u0438 \u0434\u0430\u043d\u043d\u0438 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0438\u044f \u0444\u0430\u0439\u043b", + "link_local_address": "\u041b\u043e\u043a\u0430\u043b\u043d\u0438 \u0430\u0434\u0440\u0435\u0441\u0438 \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0442", + "not_axis_device": "\u041e\u0442\u043a\u0440\u0438\u0442\u043e\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0435 Axis" + }, + "error": { + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", + "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.", + "device_unavailable": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0447\u043d\u043e", + "faulty_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" + }, + "flow_title": "Axis \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: {name} ({host})", + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442 Axis" + } + } + }, + "title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/ca.json b/homeassistant/components/axis/translations/ca.json new file mode 100644 index 00000000000..5ca4c474bc9 --- /dev/null +++ b/homeassistant/components/axis/translations/ca.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat", + "bad_config_file": "Dades incorrectes del fitxer de configuraci\u00f3", + "link_local_address": "L'enlla\u00e7 d'adreces locals no est\u00e0 disponible", + "not_axis_device": "El dispositiu descobert no \u00e9s un dispositiu Axis" + }, + "error": { + "already_configured": "El dispositiu ja est\u00e0 configurat", + "already_in_progress": "El flux de dades de configuraci\u00f3 pel dispositiu ja est\u00e0 en curs.", + "device_unavailable": "El dispositiu no est\u00e0 disponible", + "faulty_credentials": "Credencials d'usuari incorrectes" + }, + "flow_title": "Dispositiu d'eix: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "password": "Contrasenya", + "port": "Port", + "username": "Nom d'usuari" + }, + "title": "Configuraci\u00f3 de dispositiu Axis" + } + } + }, + "title": "Dispositiu Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/cs.json b/homeassistant/components/axis/translations/cs.json similarity index 100% rename from homeassistant/components/axis/.translations/cs.json rename to homeassistant/components/axis/translations/cs.json diff --git a/homeassistant/components/axis/translations/da.json b/homeassistant/components/axis/translations/da.json new file mode 100644 index 00000000000..78e4e200082 --- /dev/null +++ b/homeassistant/components/axis/translations/da.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Enheden er allerede konfigureret", + "bad_config_file": "Forkerte data fra konfigurationsfilen", + "link_local_address": "Link lokale adresser underst\u00f8ttes ikke", + "not_axis_device": "Fundet enhed ikke en Axis enhed" + }, + "error": { + "already_configured": "Enheden er allerede konfigureret", + "already_in_progress": "Enhedskonfiguration er allerede i gang.", + "device_unavailable": "Enheden er ikke tilg\u00e6ngelig", + "faulty_credentials": "Ugyldige legitimationsoplysninger" + }, + "flow_title": "Axis-enhed: {name} ({host})", + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "password": "Adgangskode", + "port": "Port", + "username": "Brugernavn" + }, + "title": "Indstil Axis-enhed" + } + } + }, + "title": "Axis-enhed" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/de.json b/homeassistant/components/axis/translations/de.json new file mode 100644 index 00000000000..7410a79bdc9 --- /dev/null +++ b/homeassistant/components/axis/translations/de.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert", + "bad_config_file": "Fehlerhafte Daten aus der Konfigurationsdatei", + "link_local_address": "Link-local Adressen werden nicht unterst\u00fctzt", + "not_axis_device": "Erkanntes Ger\u00e4t ist kein Axis-Ger\u00e4t" + }, + "error": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert", + "already_in_progress": "Der Konfigurationsablauf f\u00fcr das Ger\u00e4t wird bereits ausgef\u00fchrt.", + "device_unavailable": "Ger\u00e4t ist nicht verf\u00fcgbar", + "faulty_credentials": "Ung\u00fcltige Anmeldeinformationen" + }, + "flow_title": "Achsenger\u00e4t: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host", + "password": "Passwort", + "port": "Port", + "username": "Benutzername" + }, + "title": "Axis Ger\u00e4t einrichten" + } + } + }, + "title": "Axis Ger\u00e4t" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/en.json b/homeassistant/components/axis/translations/en.json new file mode 100644 index 00000000000..cc76571b01b --- /dev/null +++ b/homeassistant/components/axis/translations/en.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured", + "bad_config_file": "Bad data from configuration file", + "link_local_address": "Link local addresses are not supported", + "not_axis_device": "Discovered device not an Axis device" + }, + "error": { + "already_configured": "Device is already configured", + "already_in_progress": "Config flow for device is already in progress.", + "device_unavailable": "Device is not available", + "faulty_credentials": "Bad user credentials" + }, + "flow_title": "Axis device: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Port", + "username": "Username" + }, + "title": "Set up Axis device" + } + } + }, + "title": "Axis device" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/es-419.json b/homeassistant/components/axis/translations/es-419.json new file mode 100644 index 00000000000..a86131723e3 --- /dev/null +++ b/homeassistant/components/axis/translations/es-419.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "bad_config_file": "Datos err\u00f3neos del archivo de configuraci\u00f3n", + "link_local_address": "Las direcciones locales de enlace no son compatibles", + "not_axis_device": "El dispositivo descubierto no es un dispositivo de Axis" + }, + "error": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "already_in_progress": "El flujo de configuraci\u00f3n para el dispositivo ya est\u00e1 en progreso.", + "device_unavailable": "El dispositivo no est\u00e1 disponible", + "faulty_credentials": "Credenciales de usuario incorrectas" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Nombre de usuario" + }, + "title": "Configurar dispositivo Axis" + } + } + }, + "title": "Dispositivo Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/es.json b/homeassistant/components/axis/translations/es.json new file mode 100644 index 00000000000..19a774fe170 --- /dev/null +++ b/homeassistant/components/axis/translations/es.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "bad_config_file": "Datos err\u00f3neos en el archivo de configuraci\u00f3n", + "link_local_address": "Las direcciones de enlace locales no son compatibles", + "not_axis_device": "El dispositivo descubierto no es un dispositivo de Axis" + }, + "error": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "already_in_progress": "El flujo de configuraci\u00f3n del dispositivo ya est\u00e1 en curso.", + "device_unavailable": "El dispositivo no est\u00e1 disponible", + "faulty_credentials": "Credenciales de usuario incorrectas" + }, + "flow_title": "Dispositivo Axis: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host", + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Usuario" + }, + "title": "Configurar dispositivo Axis" + } + } + }, + "title": "Dispositivo Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/fr.json b/homeassistant/components/axis/translations/fr.json new file mode 100644 index 00000000000..4fb4f928768 --- /dev/null +++ b/homeassistant/components/axis/translations/fr.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", + "bad_config_file": "Mauvaises donn\u00e9es du fichier de configuration", + "link_local_address": "Les adresses locales ne sont pas prises en charge", + "not_axis_device": "L'appareil d\u00e9couvert n'est pas un appareil Axis" + }, + "error": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", + "already_in_progress": "Le flux de configuration de l'appareil est d\u00e9j\u00e0 en cours.", + "device_unavailable": "L'appareil n'est pas disponible", + "faulty_credentials": "Mauvaises informations d'identification de l'utilisateur" + }, + "flow_title": "Appareil Axis: {name} ( {host} )", + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "password": "Mot de passe", + "port": "Port", + "username": "Nom d'utilisateur" + }, + "title": "Configurer l'appareil Axis" + } + } + }, + "title": "Appareil Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/hu.json b/homeassistant/components/axis/translations/hu.json new file mode 100644 index 00000000000..ac8538c6943 --- /dev/null +++ b/homeassistant/components/axis/translations/hu.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "already_configured": "Az eszk\u00f6zt m\u00e1r konfigur\u00e1ltuk", + "device_unavailable": "Az eszk\u00f6z nem \u00e9rhet\u0151 el", + "faulty_credentials": "Rossz felhaszn\u00e1l\u00f3i hiteles\u00edt\u0151 adatok" + }, + "flow_title": "Axis eszk\u00f6z: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Hoszt", + "password": "Jelsz\u00f3", + "port": "Port", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + } + } + } + }, + "title": "Axis eszk\u00f6z" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/it.json b/homeassistant/components/axis/translations/it.json new file mode 100644 index 00000000000..e3083687b07 --- /dev/null +++ b/homeassistant/components/axis/translations/it.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", + "bad_config_file": "Dati errati dal file di configurazione", + "link_local_address": "Gli indirizzi locali di collegamento non sono supportati", + "not_axis_device": "Il dispositivo rilevato non \u00e8 un dispositivo Axis" + }, + "error": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", + "already_in_progress": "Il flusso di configurazione per il dispositivo \u00e8 gi\u00e0 in corso.", + "device_unavailable": "Il dispositivo non \u00e8 disponibile", + "faulty_credentials": "Credenziali utente non valide" + }, + "flow_title": "Dispositivo Axis: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Porta", + "username": "Nome utente" + }, + "title": "Impostazione del dispositivo Axis" + } + } + }, + "title": "Dispositivo Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/ko.json b/homeassistant/components/axis/translations/ko.json new file mode 100644 index 00000000000..ae2da8858b4 --- /dev/null +++ b/homeassistant/components/axis/translations/ko.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "bad_config_file": "\uad6c\uc131 \ud30c\uc77c\uc5d0 \uc798\ubabb\ub41c \ub370\uc774\ud130\uac00 \uc788\uc2b5\ub2c8\ub2e4", + "link_local_address": "\ub85c\uceec \uc8fc\uc18c \uc5f0\uacb0\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "not_axis_device": "\ubc1c\uacac\ub41c \uae30\uae30\ub294 Axis \uae30\uae30\uac00 \uc544\ub2d9\ub2c8\ub2e4" + }, + "error": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "\uae30\uae30 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", + "device_unavailable": "\uae30\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "faulty_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "flow_title": "Axis \uae30\uae30: {name} ({host})", + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Axis \uae30\uae30 \uc124\uc815" + } + } + }, + "title": "Axis \uae30\uae30" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/lb.json b/homeassistant/components/axis/translations/lb.json new file mode 100644 index 00000000000..c19c50381fc --- /dev/null +++ b/homeassistant/components/axis/translations/lb.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert", + "bad_config_file": "Feelerhaft Donn\u00e9e\u00eb aus der Konfiguratioun's Datei", + "link_local_address": "Lokal Link Adressen ginn net \u00ebnnerst\u00ebtzt", + "not_axis_device": "Entdeckten Apparat ass keen Axis Apparat" + }, + "error": { + "already_configured": "Apparat ass scho konfigur\u00e9iert", + "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", + "device_unavailable": "Apparat ass net erreechbar", + "faulty_credentials": "Ong\u00eblteg Login Informatioune" + }, + "flow_title": "Axis Apparat: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Apparat", + "password": "Passwuert", + "port": "Port", + "username": "Benotzernumm" + }, + "title": "Axis Apparat ariichten" + } + } + }, + "title": "Axis Apparat" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/nl.json b/homeassistant/components/axis/translations/nl.json new file mode 100644 index 00000000000..852933c6204 --- /dev/null +++ b/homeassistant/components/axis/translations/nl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd", + "bad_config_file": "Slechte gegevens van het configuratiebestand", + "link_local_address": "Link-lokale adressen worden niet ondersteund", + "not_axis_device": "Ontdekte apparaat, is geen Axis-apparaat" + }, + "error": { + "already_configured": "Apparaat is al geconfigureerd", + "already_in_progress": "De configuratiestroom voor het apparaat is al in volle gang.", + "device_unavailable": "Apparaat is niet beschikbaar", + "faulty_credentials": "Ongeldige gebruikersreferenties" + }, + "flow_title": "Axis apparaat: {naam} ({host})", + "step": { + "user": { + "data": { + "host": "Host", + "password": "Wachtwoord", + "port": "Poort", + "username": "Gebruikersnaam" + }, + "title": "Stel het Axis-apparaat in" + } + } + }, + "title": "Axis-apparaat" +} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/nn.json b/homeassistant/components/axis/translations/nn.json similarity index 100% rename from homeassistant/components/axis/.translations/nn.json rename to homeassistant/components/axis/translations/nn.json diff --git a/homeassistant/components/axis/translations/no.json b/homeassistant/components/axis/translations/no.json new file mode 100644 index 00000000000..fb04b498d70 --- /dev/null +++ b/homeassistant/components/axis/translations/no.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert", + "bad_config_file": "D\u00e5rlige data fra konfigurasjonsfilen", + "link_local_address": "Linking av lokale adresser st\u00f8ttes ikke", + "not_axis_device": "Oppdaget enhet ikke en Axis enhet" + }, + "error": { + "already_configured": "Enheten er allerede konfigurert", + "already_in_progress": "Konfigurasjonsflyt for enhet p\u00e5g\u00e5r allerede.", + "device_unavailable": "Enheten er ikke tilgjengelig", + "faulty_credentials": "Ugyldig brukerlegitimasjon" + }, + "flow_title": "Akse-enhet: {Name} ({Host})", + "step": { + "user": { + "data": { + "host": "Vert", + "password": "Passord", + "port": "", + "username": "Brukernavn" + }, + "title": "Sett opp Axis enhet" + } + } + }, + "title": "Axis enhet" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/pl.json b/homeassistant/components/axis/translations/pl.json new file mode 100644 index 00000000000..7473c62f668 --- /dev/null +++ b/homeassistant/components/axis/translations/pl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "bad_config_file": "B\u0142\u0119dne dane z pliku konfiguracyjnego", + "link_local_address": "Po\u0142\u0105czenie lokalnego adresu nie jest obs\u0142ugiwane", + "not_axis_device": "Wykryte urz\u0105dzenie nie jest urz\u0105dzeniem Axis" + }, + "error": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "already_in_progress": "Konfiguracja urz\u0105dzenia jest ju\u017c w toku.", + "device_unavailable": "Urz\u0105dzenie jest niedost\u0119pne", + "faulty_credentials": "B\u0142\u0119dne dane uwierzytelniaj\u0105ce" + }, + "flow_title": "Urz\u0105dzenie Axis: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o", + "port": "Port", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Konfiguracja urz\u0105dzenia Axis" + } + } + }, + "title": "Urz\u0105dzenie Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/pt-BR.json b/homeassistant/components/axis/translations/pt-BR.json new file mode 100644 index 00000000000..10e9fb563ce --- /dev/null +++ b/homeassistant/components/axis/translations/pt-BR.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", + "bad_config_file": "Dados incorretos do arquivo de configura\u00e7\u00e3o", + "link_local_address": "Link de endere\u00e7os locais n\u00e3o s\u00e3o suportados", + "not_axis_device": "Dispositivo descoberto n\u00e3o \u00e9 um dispositivo Axis" + }, + "error": { + "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", + "already_in_progress": "O fluxo de configura\u00e7\u00e3o para o dispositivo j\u00e1 est\u00e1 em andamento.", + "device_unavailable": "O dispositivo n\u00e3o est\u00e1 dispon\u00edvel", + "faulty_credentials": "Credenciais do usu\u00e1rio inv\u00e1lidas" + }, + "flow_title": "Eixos do dispositivo: {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host", + "password": "Senha", + "port": "Porta", + "username": "Nome de usu\u00e1rio" + }, + "title": "Configurar o dispositivo Axis" + } + } + }, + "title": "Dispositivo Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/pt.json b/homeassistant/components/axis/translations/pt.json new file mode 100644 index 00000000000..2dc5a14249f --- /dev/null +++ b/homeassistant/components/axis/translations/pt.json @@ -0,0 +1,15 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "Servidor", + "password": "Palavra-passe", + "port": "Porta", + "username": "Nome de Utilizador" + } + } + } + }, + "title": "Dispositivo Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/ru.json b/homeassistant/components/axis/translations/ru.json new file mode 100644 index 00000000000..578e642d4d2 --- /dev/null +++ b/homeassistant/components/axis/translations/ru.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "bad_config_file": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.", + "link_local_address": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", + "not_axis_device": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c Axis." + }, + "error": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "device_unavailable": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e.", + "faulty_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." + }, + "flow_title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Axis {name} ({host})", + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "Axis" + } + } + }, + "title": "Axis" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/sl.json b/homeassistant/components/axis/translations/sl.json new file mode 100644 index 00000000000..a41e5ddd652 --- /dev/null +++ b/homeassistant/components/axis/translations/sl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana", + "bad_config_file": "Slabi podatki iz konfiguracijske datoteke", + "link_local_address": "Lokalni naslovi povezave niso podprti", + "not_axis_device": "Odkrita naprava ni naprava Axis" + }, + "error": { + "already_configured": "Naprava je \u017ee konfigurirana", + "already_in_progress": "Konfiguracijski tok za to napravo je \u017ee v teku.", + "device_unavailable": "Naprava ni na voljo", + "faulty_credentials": "Napa\u010dni uporabni\u0161ki podatki" + }, + "flow_title": "OS naprava: {Name} ({Host})", + "step": { + "user": { + "data": { + "host": "Gostitelj", + "password": "Geslo", + "port": "Vrata", + "username": "Uporabni\u0161ko ime" + }, + "title": "Nastavite plo\u0161\u010dek" + } + } + }, + "title": "Plo\u0161\u010dek" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/sv.json b/homeassistant/components/axis/translations/sv.json new file mode 100644 index 00000000000..c208838ed1a --- /dev/null +++ b/homeassistant/components/axis/translations/sv.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten \u00e4r redan konfigurerad", + "bad_config_file": "Felaktig data fr\u00e5n konfigurationsfilen", + "link_local_address": "Link local addresses are not supported", + "not_axis_device": "Uppt\u00e4ckte enhet som inte \u00e4r en Axis enhet" + }, + "error": { + "already_configured": "Enheten \u00e4r redan konfigurerad", + "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r enheten p\u00e5g\u00e5r redan.", + "device_unavailable": "Enheten \u00e4r inte tillg\u00e4nglig", + "faulty_credentials": "Felaktiga anv\u00e4ndaruppgifter" + }, + "flow_title": "Axisenhet: {name} ({host})", + "step": { + "user": { + "data": { + "host": "V\u00e4rd", + "password": "L\u00f6senord", + "port": "Port", + "username": "Anv\u00e4ndarnamn" + }, + "title": "Konfigurera Axis-enhet" + } + } + }, + "title": "Axis enhet" +} \ No newline at end of file diff --git a/homeassistant/components/axis/.translations/th.json b/homeassistant/components/axis/translations/th.json similarity index 100% rename from homeassistant/components/axis/.translations/th.json rename to homeassistant/components/axis/translations/th.json diff --git a/homeassistant/components/axis/.translations/zh-Hans.json b/homeassistant/components/axis/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/axis/.translations/zh-Hans.json rename to homeassistant/components/axis/translations/zh-Hans.json diff --git a/homeassistant/components/axis/translations/zh-Hant.json b/homeassistant/components/axis/translations/zh-Hant.json new file mode 100644 index 00000000000..e24c29a86bc --- /dev/null +++ b/homeassistant/components/axis/translations/zh-Hant.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "bad_config_file": "\u8a2d\u5b9a\u6a94\u6848\u8cc7\u6599\u7121\u6548\u932f\u8aa4", + "link_local_address": "\u4e0d\u652f\u63f4\u9023\u7d50\u672c\u5730\u7aef\u4f4d\u5740", + "not_axis_device": "\u6240\u767c\u73fe\u7684\u8a2d\u5099\u4e26\u975e Axis \u8a2d\u5099" + }, + "error": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "\u8a2d\u5099\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "device_unavailable": "\u8a2d\u5099\u7121\u6cd5\u4f7f\u7528", + "faulty_credentials": "\u4f7f\u7528\u8005\u6191\u8b49\u7121\u6548" + }, + "flow_title": "Axis \u8a2d\u5099\uff1a{name} ({host})", + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u8a2d\u5b9a Axis \u8a2d\u5099" + } + } + }, + "title": "Axis \u8a2d\u5099" +} \ No newline at end of file diff --git a/homeassistant/components/azure_event_hub/manifest.json b/homeassistant/components/azure_event_hub/manifest.json index 614fb0d98ef..f9d4cf09e04 100644 --- a/homeassistant/components/azure_event_hub/manifest.json +++ b/homeassistant/components/azure_event_hub/manifest.json @@ -3,6 +3,5 @@ "name": "Azure Event Hub", "documentation": "https://www.home-assistant.io/integrations/azure_event_hub", "requirements": ["azure-eventhub==1.3.1"], - "dependencies": [], "codeowners": ["@eavanvalkenburg"] } diff --git a/homeassistant/components/azure_service_bus/manifest.json b/homeassistant/components/azure_service_bus/manifest.json index af1d9d889df..9e3f0e956e5 100644 --- a/homeassistant/components/azure_service_bus/manifest.json +++ b/homeassistant/components/azure_service_bus/manifest.json @@ -3,6 +3,5 @@ "name": "Azure Service Bus", "documentation": "https://www.home-assistant.io/integrations/azure_service_bus", "requirements": ["azure-servicebus==0.50.1"], - "dependencies": [], "codeowners": ["@hfurubotten"] } diff --git a/homeassistant/components/baidu/manifest.json b/homeassistant/components/baidu/manifest.json index 2448f87778b..88443e86722 100644 --- a/homeassistant/components/baidu/manifest.json +++ b/homeassistant/components/baidu/manifest.json @@ -3,6 +3,5 @@ "name": "Baidu", "documentation": "https://www.home-assistant.io/integrations/baidu", "requirements": ["baidu-aip==1.6.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/baidu/tts.py b/homeassistant/components/baidu/tts.py index 4208750b7fc..2d0857de135 100644 --- a/homeassistant/components/baidu/tts.py +++ b/homeassistant/components/baidu/tts.py @@ -63,21 +63,21 @@ class BaiduTTSProvider(Provider): def __init__(self, hass, conf): """Init Baidu TTS service.""" self.hass = hass - self._lang = conf.get(CONF_LANG) + self._lang = conf[CONF_LANG] self._codec = "mp3" self.name = "BaiduTTS" self._app_data = { - "appid": conf.get(CONF_APP_ID), - "apikey": conf.get(CONF_API_KEY), - "secretkey": conf.get(CONF_SECRET_KEY), + "appid": conf[CONF_APP_ID], + "apikey": conf[CONF_API_KEY], + "secretkey": conf[CONF_SECRET_KEY], } self._speech_conf_data = { - _OPTIONS[CONF_PERSON]: conf.get(CONF_PERSON), - _OPTIONS[CONF_PITCH]: conf.get(CONF_PITCH), - _OPTIONS[CONF_SPEED]: conf.get(CONF_SPEED), - _OPTIONS[CONF_VOLUME]: conf.get(CONF_VOLUME), + _OPTIONS[CONF_PERSON]: conf[CONF_PERSON], + _OPTIONS[CONF_PITCH]: conf[CONF_PITCH], + _OPTIONS[CONF_SPEED]: conf[CONF_SPEED], + _OPTIONS[CONF_VOLUME]: conf[CONF_VOLUME], } @property diff --git a/homeassistant/components/bayesian/binary_sensor.py b/homeassistant/components/bayesian/binary_sensor.py index 74a0aaae295..b51653bb3c8 100644 --- a/homeassistant/components/bayesian/binary_sensor.py +++ b/homeassistant/components/bayesian/binary_sensor.py @@ -97,10 +97,10 @@ def update_probability(prior, prob_given_true, prob_given_false): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Bayesian Binary sensor.""" - name = config.get(CONF_NAME) - observations = config.get(CONF_OBSERVATIONS) - prior = config.get(CONF_PRIOR) - probability_threshold = config.get(CONF_PROBABILITY_THRESHOLD) + name = config[CONF_NAME] + observations = config[CONF_OBSERVATIONS] + prior = config[CONF_PRIOR] + probability_threshold = config[CONF_PROBABILITY_THRESHOLD] device_class = config.get(CONF_DEVICE_CLASS) async_add_entities( @@ -298,14 +298,22 @@ class BayesianBinarySensor(BinarySensorDevice): @property def device_state_attributes(self): """Return the state attributes of the sensor.""" + + attr_observations_list = list( + obs.copy() for obs in self.current_observations.values() if obs is not None + ) + + for item in attr_observations_list: + item.pop("value_template", None) + return { - ATTR_OBSERVATIONS: list(self.current_observations.values()), + ATTR_OBSERVATIONS: attr_observations_list, ATTR_OCCURRED_OBSERVATION_ENTITIES: list( - set( + { obs.get("entity_id") for obs in self.current_observations.values() if obs is not None - ) + } ), ATTR_PROBABILITY: round(self.probability, 2), ATTR_PROBABILITY_THRESHOLD: self._probability_threshold, diff --git a/homeassistant/components/bayesian/manifest.json b/homeassistant/components/bayesian/manifest.json index 1b4dc73810f..ca62e91f09e 100644 --- a/homeassistant/components/bayesian/manifest.json +++ b/homeassistant/components/bayesian/manifest.json @@ -2,8 +2,6 @@ "domain": "bayesian", "name": "Bayesian", "documentation": "https://www.home-assistant.io/integrations/bayesian", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/bbb_gpio/binary_sensor.py b/homeassistant/components/bbb_gpio/binary_sensor.py index 3ef13c117a2..b1245aeabde 100644 --- a/homeassistant/components/bbb_gpio/binary_sensor.py +++ b/homeassistant/components/bbb_gpio/binary_sensor.py @@ -35,7 +35,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Beaglebone Black GPIO devices.""" - pins = config.get(CONF_PINS) + pins = config[CONF_PINS] binary_sensors = [] @@ -50,10 +50,10 @@ class BBBGPIOBinarySensor(BinarySensorDevice): def __init__(self, pin, params): """Initialize the Beaglebone Black binary sensor.""" self._pin = pin - self._name = params.get(CONF_NAME) or DEVICE_DEFAULT_NAME - self._bouncetime = params.get(CONF_BOUNCETIME) - self._pull_mode = params.get(CONF_PULL_MODE) - self._invert_logic = params.get(CONF_INVERT_LOGIC) + self._name = params[CONF_NAME] or DEVICE_DEFAULT_NAME + self._bouncetime = params[CONF_BOUNCETIME] + self._pull_mode = params[CONF_PULL_MODE] + self._invert_logic = params[CONF_INVERT_LOGIC] bbb_gpio.setup_input(self._pin, self._pull_mode) self._state = bbb_gpio.read_input(self._pin) diff --git a/homeassistant/components/bbb_gpio/manifest.json b/homeassistant/components/bbb_gpio/manifest.json index 42670d510da..201c01fa709 100644 --- a/homeassistant/components/bbb_gpio/manifest.json +++ b/homeassistant/components/bbb_gpio/manifest.json @@ -3,6 +3,5 @@ "name": "BeagleBone Black GPIO", "documentation": "https://www.home-assistant.io/integrations/bbb_gpio", "requirements": ["Adafruit_BBIO==1.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bbb_gpio/switch.py b/homeassistant/components/bbb_gpio/switch.py index eb75c6f374c..cc776c21f9e 100644 --- a/homeassistant/components/bbb_gpio/switch.py +++ b/homeassistant/components/bbb_gpio/switch.py @@ -30,7 +30,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the BeagleBone Black GPIO devices.""" - pins = config.get(CONF_PINS) + pins = config[CONF_PINS] switches = [] for pin, params in pins.items(): @@ -44,9 +44,9 @@ class BBBGPIOSwitch(ToggleEntity): def __init__(self, pin, params): """Initialize the pin.""" self._pin = pin - self._name = params.get(CONF_NAME) or DEVICE_DEFAULT_NAME - self._state = params.get(CONF_INITIAL) - self._invert_logic = params.get(CONF_INVERT_LOGIC) + self._name = params[CONF_NAME] or DEVICE_DEFAULT_NAME + self._state = params[CONF_INITIAL] + self._invert_logic = params[CONF_INVERT_LOGIC] bbb_gpio.setup_output(self._pin) diff --git a/homeassistant/components/bbox/manifest.json b/homeassistant/components/bbox/manifest.json index ed7f7270bd5..bdace6c35f5 100644 --- a/homeassistant/components/bbox/manifest.json +++ b/homeassistant/components/bbox/manifest.json @@ -3,6 +3,5 @@ "name": "Bbox", "documentation": "https://www.home-assistant.io/integrations/bbox", "requirements": ["pybbox==0.0.5-alpha"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bbox/sensor.py b/homeassistant/components/bbox/sensor.py index 259066d4561..13c8f5bb03f 100644 --- a/homeassistant/components/bbox/sensor.py +++ b/homeassistant/components/bbox/sensor.py @@ -74,7 +74,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): _LOGGER.error(error) return False - name = config.get(CONF_NAME) + name = config[CONF_NAME] sensors = [] for variable in config[CONF_MONITORED_VARIABLES]: diff --git a/homeassistant/components/beewi_smartclim/manifest.json b/homeassistant/components/beewi_smartclim/manifest.json index 69adb76d3cb..169132515d2 100644 --- a/homeassistant/components/beewi_smartclim/manifest.json +++ b/homeassistant/components/beewi_smartclim/manifest.json @@ -3,6 +3,5 @@ "name": "BeeWi SmartClim BLE sensor", "documentation": "https://www.home-assistant.io/integrations/beewi_smartclim", "requirements": ["beewi_smartclim==0.0.7"], - "dependencies": [], "codeowners": ["@alemuro"] } diff --git a/homeassistant/components/bh1750/manifest.json b/homeassistant/components/bh1750/manifest.json index 1c9724b7dd8..e8473910abd 100644 --- a/homeassistant/components/bh1750/manifest.json +++ b/homeassistant/components/bh1750/manifest.json @@ -3,6 +3,5 @@ "name": "BH1750", "documentation": "https://www.home-assistant.io/integrations/bh1750", "requirements": ["i2csense==0.0.4", "smbus-cffi==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bh1750/sensor.py b/homeassistant/components/bh1750/sensor.py index 924bfcd5507..df8e87f751d 100644 --- a/homeassistant/components/bh1750/sensor.py +++ b/homeassistant/components/bh1750/sensor.py @@ -63,10 +63,10 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the BH1750 sensor.""" - name = config.get(CONF_NAME) - bus_number = config.get(CONF_I2C_BUS) - i2c_address = config.get(CONF_I2C_ADDRESS) - operation_mode = config.get(CONF_OPERATION_MODE) + name = config[CONF_NAME] + bus_number = config[CONF_I2C_BUS] + i2c_address = config[CONF_I2C_ADDRESS] + operation_mode = config[CONF_OPERATION_MODE] bus = smbus.SMBus(bus_number) @@ -76,8 +76,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= bus, i2c_address, operation_mode=operation_mode, - measurement_delay=config.get(CONF_DELAY), - sensitivity=config.get(CONF_SENSITIVITY), + measurement_delay=config[CONF_DELAY], + sensitivity=config[CONF_SENSITIVITY], logger=_LOGGER, ) ) @@ -85,7 +85,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= _LOGGER.error("BH1750 sensor not detected at %s", i2c_address) return False - dev = [BH1750Sensor(sensor, name, SENSOR_UNIT, config.get(CONF_MULTIPLIER))] + dev = [BH1750Sensor(sensor, name, SENSOR_UNIT, config[CONF_MULTIPLIER])] _LOGGER.info( "Setup of BH1750 light sensor at %s in mode %s is complete", i2c_address, diff --git a/homeassistant/components/binary_sensor/.translations/bg.json b/homeassistant/components/binary_sensor/.translations/bg.json deleted file mode 100644 index 3006b8cadbc..00000000000 --- a/homeassistant/components/binary_sensor/.translations/bg.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u0435 \u0438\u0437\u0442\u043e\u0449\u0435\u043d\u0430", - "is_cold": "{entity_name} \u0435 \u0441\u0442\u0443\u0434\u0435\u043d", - "is_connected": "{entity_name} \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d", - "is_gas": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", - "is_hot": "{entity_name} \u0435 \u0433\u043e\u0440\u0435\u0449", - "is_light": "{entity_name} \u0437\u0430\u0441\u0438\u0447\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", - "is_locked": "{entity_name} \u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", - "is_moist": "{entity_name} \u0435 \u0432\u043b\u0430\u0436\u0435\u043d", - "is_motion": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "is_moving": "{entity_name} \u0441\u0435 \u0434\u0432\u0438\u0436\u0438", - "is_no_gas": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", - "is_no_light": "{entity_name} \u043d\u0435 \u0437\u0430\u0441\u0438\u0447\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", - "is_no_motion": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "is_no_problem": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", - "is_no_smoke": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", - "is_no_sound": "{entity_name} \u043d\u0435 \u0437\u0430\u0441\u0438\u0447\u0430 \u0437\u0432\u0443\u043a", - "is_no_vibration": "{entity_name} \u043d\u0435 \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438", - "is_not_bat_low": "{entity_name} \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u0435 \u0437\u0430\u0440\u0435\u0434\u0435\u043d\u0430", - "is_not_cold": "{entity_name} \u043d\u0435 \u0435 \u0441\u0442\u0443\u0434\u0435\u043d", - "is_not_connected": "{entity_name} \u0435 \u0440\u0430\u0437\u043a\u0430\u0447\u0435\u043d", - "is_not_hot": "{entity_name} \u043d\u0435 \u0435 \u0433\u043e\u0440\u0435\u0449", - "is_not_locked": "{entity_name} \u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d", - "is_not_moist": "{entity_name} \u0435 \u0441\u0443\u0445", - "is_not_moving": "{entity_name} \u043d\u0435 \u0441\u0435 \u0434\u0432\u0438\u0436\u0438", - "is_not_occupied": "{entity_name} \u043d\u0435 \u0435 \u0437\u0430\u0435\u0442", - "is_not_open": "{entity_name} \u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", - "is_not_plugged_in": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "is_not_powered": "{entity_name} \u043d\u0435 \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", - "is_not_present": "{entity_name} \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0446\u0435", - "is_not_unsafe": "{entity_name} \u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", - "is_occupied": "{entity_name} \u0435 \u0437\u0430\u0435\u0442", - "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", - "is_open": "{entity_name} \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d", - "is_plugged_in": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", - "is_powered": "{entity_name} \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", - "is_present": "{entity_name} \u043f\u0440\u0438\u0441\u044a\u0441\u0442\u0432\u0430", - "is_problem": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", - "is_smoke": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", - "is_sound": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0437\u0432\u0443\u043a", - "is_unsafe": "{entity_name} \u043d\u0435 \u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", - "is_vibration": "{entity_name} \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438" - }, - "trigger_type": { - "bat_low": "{entity_name} \u0438\u0437\u0442\u043e\u0449\u0435\u043d\u0430 \u0431\u0430\u0442\u0435\u0440\u0438\u044f", - "cold": "{entity_name} \u0441\u0435 \u0438\u0437\u0441\u0442\u0443\u0434\u0438", - "connected": "{entity_name} \u0441\u0432\u044a\u0440\u0437\u0430\u043d", - "gas": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", - "hot": "{entity_name} \u0441\u0435 \u0441\u0442\u043e\u043f\u043b\u0438", - "light": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", - "locked": "{entity_name} \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", - "moist": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u0432\u043b\u0430\u0436\u0435\u043d", - "motion": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "moving": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "no_gas": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", - "no_light": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", - "no_motion": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "no_problem": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", - "no_smoke": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", - "no_sound": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0437\u0432\u0443\u043a", - "no_vibration": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438", - "not_bat_low": "{entity_name} \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u043d\u0435 \u0435 \u0438\u0437\u0442\u043e\u0449\u0435\u043d\u0430", - "not_cold": "{entity_name} \u0441\u0435 \u0441\u0442\u043e\u043f\u043b\u0438", - "not_connected": "{entity_name} \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "not_hot": "{entity_name} \u043e\u0445\u043b\u0430\u0434\u043d\u044f", - "not_locked": "{entity_name} \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d", - "not_moist": "{entity_name} \u0441\u0442\u0430\u0432\u0430 \u0441\u0443\u0445", - "not_moving": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u0441\u0435 \u0434\u0432\u0438\u0436\u0438", - "not_occupied": "{entity_name} \u0432\u0435\u0447\u0435 \u043d\u0435 \u0435 \u0437\u0430\u0435\u0442", - "not_opened": "{entity_name} \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", - "not_plugged_in": "{entity_name} \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "not_powered": "{entity_name} \u043d\u0435 \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", - "not_present": "{entity_name} \u043d\u0435 \u043f\u0440\u0438\u0441\u044a\u0441\u0442\u0432\u0430", - "not_unsafe": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", - "occupied": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u0437\u0430\u0435\u0442", - "opened": "{entity_name} \u0441\u0435 \u043e\u0442\u0432\u043e\u0440\u0438", - "plugged_in": "{entity_name} \u0441\u0435 \u0432\u043a\u043b\u044e\u0447\u0438", - "powered": "{entity_name} \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", - "present": "{entity_name} \u043f\u0440\u0438\u0441\u044a\u0441\u0442\u0432\u0430", - "problem": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", - "smoke": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", - "sound": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0437\u0432\u0443\u043a", - "turned_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "turned_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", - "unsafe": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u043e\u043f\u0430\u0441\u0435\u043d", - "vibration": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/ca.json b/homeassistant/components/binary_sensor/.translations/ca.json deleted file mode 100644 index 3a3485a3be7..00000000000 --- a/homeassistant/components/binary_sensor/.translations/ca.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "Bateria de {entity_name} baixa", - "is_cold": "{entity_name} est\u00e0 fred", - "is_connected": "{entity_name} est\u00e0 connectat", - "is_gas": "{entity_name} est\u00e0 detectant gas", - "is_hot": "{entity_name} est\u00e0 calent", - "is_light": "{entity_name} est\u00e0 detectant llum", - "is_locked": "{entity_name} est\u00e0 bloquejat", - "is_moist": "{entity_name} est\u00e0 humit", - "is_motion": "{entity_name} est\u00e0 detectant moviment", - "is_moving": "{entity_name} s'est\u00e0 movent", - "is_no_gas": "{entity_name} no detecta gas", - "is_no_light": "{entity_name} no detecta llum", - "is_no_motion": "{entity_name} no detecta moviment", - "is_no_problem": "{entity_name} no est\u00e0 detectant cap problema", - "is_no_smoke": "{entity_name} no detecta fum", - "is_no_sound": "{entity_name} no detecta so", - "is_no_vibration": "{entity_name} no detecta vibraci\u00f3", - "is_not_bat_low": "Bateria de {entity_name} normal", - "is_not_cold": "{entity_name} no est\u00e0 fred", - "is_not_connected": "{entity_name} est\u00e0 desconnectat", - "is_not_hot": "{entity_name} no est\u00e0 calent", - "is_not_locked": "{entity_name} est\u00e0 desbloquejat", - "is_not_moist": "{entity_name} est\u00e0 sec", - "is_not_moving": "{entity_name} no s'est\u00e0 movent", - "is_not_occupied": "{entity_name} no est\u00e0 ocupat", - "is_not_open": "{entity_name} est\u00e0 tancat", - "is_not_plugged_in": "{entity_name} est\u00e0 desendollat", - "is_not_powered": "{entity_name} no est\u00e0 alimentat", - "is_not_present": "{entity_name} no est\u00e0 present", - "is_not_unsafe": "{entity_name} \u00e9s segur", - "is_occupied": "{entity_name} est\u00e0 ocupat", - "is_off": "{entity_name} est\u00e0 apagat", - "is_on": "{entity_name} est\u00e0 enc\u00e8s", - "is_open": "{entity_name} est\u00e0 obert", - "is_plugged_in": "{entity_name} est\u00e0 endollat", - "is_powered": "{entity_name} est\u00e0 alimentat", - "is_present": "{entity_name} est\u00e0 present", - "is_problem": "{entity_name} est\u00e0 detectant un problema", - "is_smoke": "{entity_name} est\u00e0 detectant fum", - "is_sound": "{entity_name} est\u00e0 detectant so", - "is_unsafe": "{entity_name} \u00e9s insegur", - "is_vibration": "{entity_name} est\u00e0 detectant vibraci\u00f3" - }, - "trigger_type": { - "bat_low": "Bateria de {entity_name} baixa", - "cold": "{entity_name} es torna fred", - "connected": "{entity_name} est\u00e0 connectat", - "gas": "{entity_name} ha comen\u00e7at a detectar gas", - "hot": "{entity_name} es torna calent", - "light": "{entity_name} ha comen\u00e7at a detectar llum", - "locked": "{entity_name} est\u00e0 bloquejat", - "moist": "{entity_name} es torna humit", - "motion": "{entity_name} ha comen\u00e7at a detectar moviment", - "moving": "{entity_name} ha comen\u00e7at a moure's", - "no_gas": "{entity_name} ha deixat de detectar gas", - "no_light": "{entity_name} ha deixat de detectar llum", - "no_motion": "{entity_name} ha deixat de detectar moviment", - "no_problem": "{entity_name} ha deixat de detectar un problema", - "no_smoke": "{entity_name} ha deixat de detectar fum", - "no_sound": "{entity_name} ha deixat de detectar so", - "no_vibration": "{entity_name} ha deixat de detectar vibraci\u00f3", - "not_bat_low": "Bateria de {entity_name} normal", - "not_cold": "{entity_name} es torna no-fred", - "not_connected": "{entity_name} est\u00e0 desconnectat", - "not_hot": "{entity_name} es torna no-calent", - "not_locked": "{entity_name} est\u00e0 desbloquejat", - "not_moist": "{entity_name} es torna sec", - "not_moving": "{entity_name} ha parat de moure's", - "not_occupied": "{entity_name} es desocupa", - "not_opened": "{entity_name} es tanca", - "not_plugged_in": "{entity_name} desendollat", - "not_powered": "{entity_name} no est\u00e0 alimentat", - "not_present": "{entity_name} no est\u00e0 present", - "not_unsafe": "{entity_name} es torna segur", - "occupied": "{entity_name} s'ocupa", - "opened": "{entity_name} s'ha obert", - "plugged_in": "{entity_name} s'ha endollat", - "powered": "{entity_name} alimentat", - "present": "{entity_name} present", - "problem": "{entity_name} ha comen\u00e7at a detectar un problema", - "smoke": "{entity_name} ha comen\u00e7at a detectar fum", - "sound": "{entity_name} ha comen\u00e7at a detectar so", - "turned_off": "{entity_name} apagat", - "turned_on": "{entity_name} enc\u00e8s", - "unsafe": "{entity_name} es torna insegur", - "vibration": "{entity_name} ha comen\u00e7at a detectar vibraci\u00f3" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/cs.json b/homeassistant/components/binary_sensor/.translations/cs.json deleted file mode 100644 index cb941e67883..00000000000 --- a/homeassistant/components/binary_sensor/.translations/cs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "trigger_type": { - "moist": "{entity_name} se navlh\u010dil", - "not_opened": "{entity_name} uzav\u0159eno" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/da.json b/homeassistant/components/binary_sensor/.translations/da.json deleted file mode 100644 index ffa68b094be..00000000000 --- a/homeassistant/components/binary_sensor/.translations/da.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} batteri er lavt", - "is_cold": "{entity_name} er kold", - "is_connected": "{entity_name} er tilsluttet", - "is_gas": "{entity_name} registrerer gas", - "is_hot": "{entity_name} er varm", - "is_light": "{entity_name} registrerer lys", - "is_locked": "{entity_name} er l\u00e5st", - "is_moist": "{entity_name} er fugtig", - "is_motion": "{entity_name} registrerer bev\u00e6gelse", - "is_moving": "{entity_name} bev\u00e6ger sig", - "is_no_gas": "{entity_name} registrerer ikke gas", - "is_no_light": "{entity_name} registrerer ikke lys", - "is_no_motion": "{entity_name} registrerer ikke bev\u00e6gelse", - "is_no_problem": "{entity_name} registrerer ikke noget problem", - "is_no_smoke": "{entity_name} registrerer ikke r\u00f8g", - "is_no_sound": "{entity_name} registrerer ikke lyd", - "is_no_vibration": "{entity_name} registrerer ikke vibration", - "is_not_bat_low": "{entity_name} batteri er normalt", - "is_not_cold": "{entity_name} er ikke kold", - "is_not_connected": "{entity_name} er afbrudt", - "is_not_hot": "{entity_name} er ikke varm", - "is_not_locked": "{entity_name} er l\u00e5st op", - "is_not_moist": "{entity_name} er t\u00f8r", - "is_not_moving": "{entity_name} bev\u00e6ger sig ikke", - "is_not_occupied": "{entity_name} er ikke optaget", - "is_not_open": "{entity_name} er lukket", - "is_not_plugged_in": "{entity_name} er ikke tilsluttet str\u00f8m", - "is_not_powered": "{entity_name} er ikke tilsluttet str\u00f8m", - "is_not_present": "{entity_name} er ikke til stede", - "is_not_unsafe": "{entity_name} er sikker", - "is_occupied": "{entity_name} er optaget", - "is_off": "{entity_name} er sl\u00e5et fra", - "is_on": "{entity_name} er sl\u00e5et til", - "is_open": "{entity_name} er \u00e5ben", - "is_plugged_in": "{entity_name} er tilsluttet str\u00f8m", - "is_powered": "{entity_name} er tilsluttet str\u00f8m", - "is_present": "{entity_name} er til stede", - "is_problem": "{entity_name} registrerer problem", - "is_smoke": "{entity_name} registrerer r\u00f8g", - "is_sound": "{entity_name} registrerer lyd", - "is_unsafe": "{entity_name} er usikker", - "is_vibration": "{entity_name} registrerer vibration" - }, - "trigger_type": { - "bat_low": "{entity_name} lavt batteriniveau", - "cold": "{entity_name} blev kold", - "connected": "{entity_name} tilsluttet", - "gas": "{entity_name} begyndte at registrere gas", - "hot": "{entity_name} blev varm", - "light": "{entity_name} begyndte at registrere lys", - "locked": "{entity_name} l\u00e5st", - "moist": "{entity_name} blev fugtig", - "motion": "{entity_name} begyndte at registrere bev\u00e6gelse", - "moving": "{entity_name} begyndte at bev\u00e6ge sig", - "no_gas": "{entity_name} stoppede med at registrere gas", - "no_light": "{entity_name} stoppede med at registrere lys", - "no_motion": "{entity_name} stoppede med at registrere bev\u00e6gelse", - "no_problem": "{entity_name} stoppede med at registrere problem", - "no_smoke": "{entity_name} stoppede med at registrere r\u00f8g", - "no_sound": "{entity_name} stoppede med at registrere lyd", - "no_vibration": "{entity_name} stoppede med at registrere vibration", - "not_bat_low": "{entity_name} batteri normalt", - "not_cold": "{entity_name} blev ikke kold", - "not_connected": "{entity_name} afbrudt", - "not_hot": "{entity_name} blev ikke varm", - "not_locked": "{entity_name} l\u00e5st op", - "not_moist": "{entity_name} blev t\u00f8r", - "not_moving": "{entity_name} stoppede med at bev\u00e6ge sig", - "not_occupied": "{entity_name} blev ikke optaget", - "not_opened": "{entity_name} lukket", - "not_plugged_in": "{entity_name} ikke tilsluttet str\u00f8m", - "not_powered": "{entity_name} ikke tilsluttet str\u00f8m", - "not_present": "{entity_name} ikke til stede", - "not_unsafe": "{entity_name} blev sikker", - "occupied": "{entity_name} blev optaget", - "opened": "{entity_name} \u00e5bnet", - "plugged_in": "{entity_name} tilsluttet str\u00f8m", - "powered": "{entity_name} tilsluttet str\u00f8m", - "present": "{entity_name} til stede", - "problem": "{entity_name} begyndte at registrere problem", - "smoke": "{entity_name} begyndte at registrere r\u00f8g", - "sound": "{entity_name} begyndte at registrere lyd", - "turned_off": "{entity_name} slukkede", - "turned_on": "{entity_name} t\u00e6ndte", - "unsafe": "{entity_name} blev usikker", - "vibration": "{entity_name} begyndte at registrere vibration" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/de.json b/homeassistant/components/binary_sensor/.translations/de.json deleted file mode 100644 index 55a079ca42a..00000000000 --- a/homeassistant/components/binary_sensor/.translations/de.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} Batterie ist schwach", - "is_cold": "{entity_name} ist kalt", - "is_connected": "{entity_name} ist verbunden", - "is_gas": "{entity_name} erkennt Gas", - "is_hot": "{entity_name} ist hei\u00df", - "is_light": "{entity_name} erkennt Licht", - "is_locked": "{entity_name} ist gesperrt", - "is_moist": "{entity_name} ist feucht", - "is_motion": "{entity_name} erkennt Bewegung", - "is_moving": "{entity_name} bewegt sich", - "is_no_gas": "{entity_name} erkennt kein Gas", - "is_no_light": "{entity_name} erkennt kein Licht", - "is_no_motion": "{entity_name} erkennt keine Bewegung", - "is_no_problem": "{entity_name} erkennt kein Problem", - "is_no_smoke": "{entity_name} erkennt keinen Rauch", - "is_no_sound": "{entity_name} erkennt keine Ger\u00e4usche", - "is_no_vibration": "{entity_name} erkennt keine Vibrationen", - "is_not_bat_low": "{entity_name} Batterie ist normal", - "is_not_cold": "{entity_name} ist nicht kalt", - "is_not_connected": "{entity_name} ist nicht verbunden", - "is_not_hot": "{entity_name} ist nicht hei\u00df", - "is_not_locked": "{entity_name} ist entsperrt", - "is_not_moist": "{entity_name} ist trocken", - "is_not_moving": "{entity_name} bewegt sich nicht", - "is_not_occupied": "{entity_name} ist nicht besch\u00e4ftigt / besetzt", - "is_not_open": "{entity_name} ist geschlossen", - "is_not_plugged_in": "{entity_name} ist nicht angeschlossen", - "is_not_powered": "{entity_name} wird nicht mit Strom versorgt", - "is_not_present": "{entity_name} ist nicht vorhanden", - "is_not_unsafe": "{entity_name} ist sicher", - "is_occupied": "{entity_name} ist besch\u00e4ftigt / besetzt", - "is_off": "{entity_name} ist ausgeschaltet", - "is_on": "{entity_name} ist eingeschaltet", - "is_open": "{entity_name} ist offen", - "is_plugged_in": "{entity_name} ist eingesteckt", - "is_powered": "{entity_name} wird mit Strom versorgt", - "is_present": "{entity_name} ist vorhanden", - "is_problem": "{entity_name} hat ein Problem festgestellt", - "is_smoke": "{entity_name} hat Rauch detektiert", - "is_sound": "{entity_name} hat Ger\u00e4usche detektiert", - "is_unsafe": "{entity_name} ist unsicher", - "is_vibration": "{entity_name} erkennt Vibrationen." - }, - "trigger_type": { - "bat_low": "{entity_name} Batterie schwach", - "cold": "{entity_name} wurde kalt", - "connected": "{entity_name} verbunden", - "gas": "{entity_name} hat Gas detektiert", - "hot": "{entity_name} wurde hei\u00df", - "light": "{entity_name} hat Licht detektiert", - "locked": "{entity_name} gesperrt", - "moist": "{entity_name} wurde feucht", - "motion": "{entity_name} hat Bewegungen detektiert", - "moving": "{entity_name} hat angefangen sich zu bewegen", - "no_gas": "{entity_name} hat kein Gas mehr erkannt", - "no_light": "{entity_name} hat kein Licht mehr erkannt", - "no_motion": "{entity_name} hat keine Bewegung mehr erkannt", - "no_problem": "{entity_name} hat kein Problem mehr erkannt", - "no_smoke": "{entity_name} hat keinen Rauch mehr erkannt", - "no_sound": "{entity_name} hat keine Ger\u00e4usche mehr erkannt", - "no_vibration": "{entity_name}hat keine Vibrationen mehr erkannt", - "not_bat_low": "{entity_name} Batterie normal", - "not_cold": "{entity_name} w\u00e4rmte auf", - "not_connected": "{entity_name} getrennt", - "not_hot": "{entity_name} k\u00fchlte ab", - "not_locked": "{entity_name} entsperrt", - "not_moist": "{entity_name} wurde trocken", - "not_moving": "{entity_name} bewegt sich nicht mehr", - "not_occupied": "{entity_name} wurde frei / inaktiv", - "not_opened": "{entity_name} geschlossen", - "not_plugged_in": "{entity_name} ist nicht angeschlossen", - "not_powered": "{entity_name} nicht mit Strom versorgt", - "not_present": "{entity_name} nicht anwesend", - "not_unsafe": "{entity_name} wurde sicher", - "occupied": "{entity_name} wurde besch\u00e4ftigt / besetzt", - "opened": "{entity_name} ge\u00f6ffnet", - "plugged_in": "{entity_name} eingesteckt", - "powered": "{entity_name} wird mit Strom versorgt", - "present": "{entity_name} anwesend", - "problem": "{entity_name} hat ein Problem festgestellt", - "smoke": "{entity_name} detektiert Rauch", - "sound": "{entity_name} detektiert Ger\u00e4usche", - "turned_off": "{entity_name} ausgeschaltet", - "turned_on": "{entity_name} eingeschaltet", - "unsafe": "{entity_name} ist unsicher", - "vibration": "{entity_name} detektiert Vibrationen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/en.json b/homeassistant/components/binary_sensor/.translations/en.json deleted file mode 100644 index 213d947236c..00000000000 --- a/homeassistant/components/binary_sensor/.translations/en.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} battery is low", - "is_cold": "{entity_name} is cold", - "is_connected": "{entity_name} is connected", - "is_gas": "{entity_name} is detecting gas", - "is_hot": "{entity_name} is hot", - "is_light": "{entity_name} is detecting light", - "is_locked": "{entity_name} is locked", - "is_moist": "{entity_name} is moist", - "is_motion": "{entity_name} is detecting motion", - "is_moving": "{entity_name} is moving", - "is_no_gas": "{entity_name} is not detecting gas", - "is_no_light": "{entity_name} is not detecting light", - "is_no_motion": "{entity_name} is not detecting motion", - "is_no_problem": "{entity_name} is not detecting problem", - "is_no_smoke": "{entity_name} is not detecting smoke", - "is_no_sound": "{entity_name} is not detecting sound", - "is_no_vibration": "{entity_name} is not detecting vibration", - "is_not_bat_low": "{entity_name} battery is normal", - "is_not_cold": "{entity_name} is not cold", - "is_not_connected": "{entity_name} is disconnected", - "is_not_hot": "{entity_name} is not hot", - "is_not_locked": "{entity_name} is unlocked", - "is_not_moist": "{entity_name} is dry", - "is_not_moving": "{entity_name} is not moving", - "is_not_occupied": "{entity_name} is not occupied", - "is_not_open": "{entity_name} is closed", - "is_not_plugged_in": "{entity_name} is unplugged", - "is_not_powered": "{entity_name} is not powered", - "is_not_present": "{entity_name} is not present", - "is_not_unsafe": "{entity_name} is safe", - "is_occupied": "{entity_name} is occupied", - "is_off": "{entity_name} is off", - "is_on": "{entity_name} is on", - "is_open": "{entity_name} is open", - "is_plugged_in": "{entity_name} is plugged in", - "is_powered": "{entity_name} is powered", - "is_present": "{entity_name} is present", - "is_problem": "{entity_name} is detecting problem", - "is_smoke": "{entity_name} is detecting smoke", - "is_sound": "{entity_name} is detecting sound", - "is_unsafe": "{entity_name} is unsafe", - "is_vibration": "{entity_name} is detecting vibration" - }, - "trigger_type": { - "bat_low": "{entity_name} battery low", - "cold": "{entity_name} became cold", - "connected": "{entity_name} connected", - "gas": "{entity_name} started detecting gas", - "hot": "{entity_name} became hot", - "light": "{entity_name} started detecting light", - "locked": "{entity_name} locked", - "moist": "{entity_name} became moist", - "motion": "{entity_name} started detecting motion", - "moving": "{entity_name} started moving", - "no_gas": "{entity_name} stopped detecting gas", - "no_light": "{entity_name} stopped detecting light", - "no_motion": "{entity_name} stopped detecting motion", - "no_problem": "{entity_name} stopped detecting problem", - "no_smoke": "{entity_name} stopped detecting smoke", - "no_sound": "{entity_name} stopped detecting sound", - "no_vibration": "{entity_name} stopped detecting vibration", - "not_bat_low": "{entity_name} battery normal", - "not_cold": "{entity_name} became not cold", - "not_connected": "{entity_name} disconnected", - "not_hot": "{entity_name} became not hot", - "not_locked": "{entity_name} unlocked", - "not_moist": "{entity_name} became dry", - "not_moving": "{entity_name} stopped moving", - "not_occupied": "{entity_name} became not occupied", - "not_opened": "{entity_name} closed", - "not_plugged_in": "{entity_name} unplugged", - "not_powered": "{entity_name} not powered", - "not_present": "{entity_name} not present", - "not_unsafe": "{entity_name} became safe", - "occupied": "{entity_name} became occupied", - "opened": "{entity_name} opened", - "plugged_in": "{entity_name} plugged in", - "powered": "{entity_name} powered", - "present": "{entity_name} present", - "problem": "{entity_name} started detecting problem", - "smoke": "{entity_name} started detecting smoke", - "sound": "{entity_name} started detecting sound", - "turned_off": "{entity_name} turned off", - "turned_on": "{entity_name} turned on", - "unsafe": "{entity_name} became unsafe", - "vibration": "{entity_name} started detecting vibration" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/es-419.json b/homeassistant/components/binary_sensor/.translations/es-419.json deleted file mode 100644 index 18b5e060818..00000000000 --- a/homeassistant/components/binary_sensor/.translations/es-419.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} la bater\u00eda est\u00e1 baja", - "is_cold": "{entity_name} est\u00e1 fr\u00edo", - "is_connected": "{entity_name} est\u00e1 conectado", - "is_gas": "{entity_name} est\u00e1 detectando gas", - "is_hot": "{entity_name} est\u00e1 caliente", - "is_light": "{entity_name} est\u00e1 detectando luz", - "is_locked": "{entity_name} est\u00e1 bloqueado", - "is_moist": "{entity_name} est\u00e1 h\u00famedo", - "is_motion": "{entity_name} est\u00e1 detectando movimiento", - "is_moving": "{entity_name} se est\u00e1 moviendo", - "is_no_gas": "{entity_name} no detecta gas", - "is_no_light": "{entity_name} no detecta luz", - "is_no_motion": "{entity_name} no detecta movimiento", - "is_no_problem": "{entity_name} no detecta el problema", - "is_no_smoke": "{entity_name} no detecta humo", - "is_no_sound": "{entity_name} no detecta sonido", - "is_no_vibration": "{entity_name} no detecta vibraciones", - "is_not_bat_low": "{entity_name} bater\u00eda est\u00e1 normal", - "is_not_cold": "{entity_name} no est\u00e1 fr\u00edo", - "is_not_connected": "{entity_name} est\u00e1 desconectado", - "is_not_hot": "{entity_name} no est\u00e1 caliente", - "is_not_locked": "{entity_name} est\u00e1 desbloqueado", - "is_not_moist": "{entity_name} est\u00e1 seco", - "is_not_moving": "{entity_name} no se mueve", - "is_not_occupied": "{entity_name} no est\u00e1 ocupado", - "is_not_open": "{entity_name} est\u00e1 cerrado", - "is_not_plugged_in": "{entity_name} est\u00e1 desconectado", - "is_not_unsafe": "{entity_name} es seguro", - "is_occupied": "{entity_name} est\u00e1 ocupado", - "is_off": "{entity_name} est\u00e1 apagado", - "is_on": "{entity_name} est\u00e1 encendido", - "is_open": "{entity_name} est\u00e1 abierto", - "is_plugged_in": "{entity_name} est\u00e1 enchufado", - "is_powered": "{entity_name} est\u00e1 encendido", - "is_present": "{entity_name} est\u00e1 presente", - "is_problem": "{entity_name} est\u00e1 detectando un problema", - "is_smoke": "{entity_name} est\u00e1 detectando humo", - "is_sound": "{entity_name} est\u00e1 detectando sonido", - "is_unsafe": "{entity_name} es inseguro", - "is_vibration": "{entity_name} est\u00e1 detectando vibraciones" - }, - "trigger_type": { - "bat_low": "{entity_name} bater\u00eda baja", - "cold": "{entity_name} se enfri\u00f3", - "connected": "{entity_name} conectado", - "gas": "{entity_name} comenz\u00f3 a detectar gas", - "hot": "{entity_name} se calent\u00f3", - "light": "{entity_name} comenz\u00f3 a detectar luz", - "locked": "{entity_name} bloqueado", - "moist": "{entity_name} se humedeci\u00f3", - "motion": "{entity_name} comenz\u00f3 a detectar movimiento", - "moving": "{entity_name} comenz\u00f3 a moverse", - "no_gas": "{entity_name} dej\u00f3 de detectar gas", - "no_light": "{entity_name} dej\u00f3 de detectar luz", - "no_motion": "{entity_name} dej\u00f3 de detectar movimiento", - "no_problem": "{entity_name} dej\u00f3 de detectar problemas", - "no_smoke": "{entity_name} dej\u00f3 de detectar humo", - "no_sound": "{entity_name} dej\u00f3 de detectar sonido", - "no_vibration": "{entity_name} dej\u00f3 de detectar vibraciones", - "not_bat_low": "{entity_name} bater\u00eda normal", - "not_cold": "{entity_name} no se enfri\u00f3", - "not_connected": "{entity_name} desconectado", - "not_hot": "{entity_name} no se calent\u00f3", - "not_locked": "{entity_name} desbloqueado", - "not_moist": "{entity_name} se sec\u00f3", - "not_moving": "{entity_name} dej\u00f3 de moverse", - "not_opened": "{entity_name} cerrado", - "not_plugged_in": "{entity_name} desconectado", - "not_present": "{entity_name} no presente", - "not_unsafe": "{entity_name} se volvi\u00f3 seguro", - "occupied": "{entity_name} se ocup\u00f3", - "opened": "{entity_name} abierto", - "plugged_in": "{entity_name} enchufado", - "present": "{entity_name} presente", - "problem": "{entity_name} comenz\u00f3 a detectar problemas", - "smoke": "{entity_name} comenz\u00f3 a detectar humo", - "sound": "{entity_name} comenz\u00f3 a detectar sonido", - "turned_off": "{entity_name} apagado", - "turned_on": "{entity_name} encendido" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/es.json b/homeassistant/components/binary_sensor/.translations/es.json deleted file mode 100644 index 02fbc465252..00000000000 --- a/homeassistant/components/binary_sensor/.translations/es.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} la bater\u00eda est\u00e1 baja", - "is_cold": "{entity_name} est\u00e1 fr\u00edo", - "is_connected": "{entity_name} est\u00e1 conectado", - "is_gas": "{entity_name} est\u00e1 detectando gas", - "is_hot": "{entity_name} est\u00e1 caliente", - "is_light": "{entity_name} est\u00e1 detectando luz", - "is_locked": "{entity_name} est\u00e1 bloqueado", - "is_moist": "{entity_name} est\u00e1 h\u00famedo", - "is_motion": "{entity_name} est\u00e1 detectando movimiento", - "is_moving": "{entity_name} se est\u00e1 moviendo", - "is_no_gas": "{entity_name} no detecta gas", - "is_no_light": "{entity_name} no detecta la luz", - "is_no_motion": "{entity_name} no detecta movimiento", - "is_no_problem": "{entity_name} no detecta el problema", - "is_no_smoke": "{entity_name} no detecta humo", - "is_no_sound": "{entity_name} no detecta sonido", - "is_no_vibration": "{entity_name} no detecta vibraci\u00f3n", - "is_not_bat_low": "La bater\u00eda de {entity_name} es normal", - "is_not_cold": "{entity_name} no est\u00e1 fr\u00edo", - "is_not_connected": "{entity_name} est\u00e1 desconectado", - "is_not_hot": "{entity_name} no est\u00e1 caliente", - "is_not_locked": "{entity_name} est\u00e1 desbloqueado", - "is_not_moist": "{entity_name} est\u00e1 seco", - "is_not_moving": "{entity_name} no se mueve", - "is_not_occupied": "{entity_name} no est\u00e1 ocupado", - "is_not_open": "{entity_name} est\u00e1 cerrado", - "is_not_plugged_in": "{entity_name} est\u00e1 desconectado", - "is_not_powered": "{entity_name} no tiene alimentaci\u00f3n", - "is_not_present": "{entity_name} no est\u00e1 presente", - "is_not_unsafe": "{entity_name} es seguro", - "is_occupied": "{entity_name} est\u00e1 ocupado", - "is_off": "{entity_name} est\u00e1 apagado", - "is_on": "{entity_name} est\u00e1 activado", - "is_open": "{entity_name} est\u00e1 abierto", - "is_plugged_in": "{entity_name} est\u00e1 conectado", - "is_powered": "{entity_name} est\u00e1 activado", - "is_present": "{entity_name} est\u00e1 presente", - "is_problem": "{entity_name} est\u00e1 detectando un problema", - "is_smoke": "{entity_name} est\u00e1 detectando humo", - "is_sound": "{entity_name} est\u00e1 detectando sonido", - "is_unsafe": "{entity_name} no es seguro", - "is_vibration": "{entity_name} est\u00e1 detectando vibraciones" - }, - "trigger_type": { - "bat_low": "{entity_name} bater\u00eda baja", - "cold": "{entity_name} se enfri\u00f3", - "connected": "{entity_name} conectado", - "gas": "{entity_name} empez\u00f3 a detectar gas", - "hot": "{entity_name} se est\u00e1 calentando", - "light": "{entity_name} empez\u00f3 a detectar la luz", - "locked": "{entity_name} bloqueado", - "moist": "{entity_name} se humedece", - "motion": "{entity_name} comenz\u00f3 a detectar movimiento", - "moving": "{entity_name} empez\u00f3 a moverse", - "no_gas": "{entity_name} dej\u00f3 de detectar gas", - "no_light": "{entity_name} dej\u00f3 de detectar la luz", - "no_motion": "{entity_name} dej\u00f3 de detectar movimiento", - "no_problem": "{entity_name} dej\u00f3 de detectar el problema", - "no_smoke": "{entity_name} dej\u00f3 de detectar humo", - "no_sound": "{entity_name} dej\u00f3 de detectar sonido", - "no_vibration": "{entity_name} dej\u00f3 de detectar vibraci\u00f3n", - "not_bat_low": "{entity_name} bater\u00eda normal", - "not_cold": "{entity_name} no se enfri\u00f3", - "not_connected": "{entity_name} desconectado", - "not_hot": "{entity_name} no se calent\u00f3", - "not_locked": "{entity_name} desbloqueado", - "not_moist": "{entity_name} se sec\u00f3", - "not_moving": "{entity_name} dej\u00f3 de moverse", - "not_occupied": "{entity_name} no est\u00e1 ocupado", - "not_opened": "{entity_name} cerrado", - "not_plugged_in": "{entity_name} desconectado", - "not_powered": "{entity_name} no est\u00e1 activado", - "not_present": "{entity_name} no est\u00e1 presente", - "not_unsafe": "{entity_name} se volvi\u00f3 seguro", - "occupied": "{entity_name} se convirti\u00f3 en ocupado", - "opened": "{entity_name} abierto", - "plugged_in": "{entity_name} conectado", - "powered": "{entity_name} alimentado", - "present": "{entity_name} presente", - "problem": "{entity_name} empez\u00f3 a detectar problemas", - "smoke": "{entity_name} empez\u00f3 a detectar humo", - "sound": "{entity_name} empez\u00f3 a detectar sonido", - "turned_off": "{entity_name} desactivado", - "turned_on": "{entity_name} activado", - "unsafe": "{entity_name} se volvi\u00f3 inseguro", - "vibration": "{entity_name} empez\u00f3 a detectar vibraciones" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/fr.json b/homeassistant/components/binary_sensor/.translations/fr.json deleted file mode 100644 index f5b2e2bfd97..00000000000 --- a/homeassistant/components/binary_sensor/.translations/fr.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} batterie faible", - "is_cold": "{entity_name} est froid", - "is_connected": "{entity_name} est connect\u00e9", - "is_gas": "{entity_name} d\u00e9tecte du gaz", - "is_hot": "{entity_name} est chaud", - "is_light": "{entity_name} d\u00e9tecte de la lumi\u00e8re", - "is_locked": "{entity_name} est verrouill\u00e9", - "is_moist": "{entity_name} est humide", - "is_motion": "{entity_name} d\u00e9tecte du mouvement", - "is_moving": "{entity_name} se d\u00e9place", - "is_no_gas": "{entity_name} ne d\u00e9tecte pas de gaz", - "is_no_light": "{entity_name} ne d\u00e9tecte pas de lumi\u00e8re", - "is_no_motion": "{entity_name} ne d\u00e9tecte pas de mouvement", - "is_no_problem": "{entity_name} ne d\u00e9tecte pas de probl\u00e8me", - "is_no_smoke": "{entity_name} ne d\u00e9tecte pas de fum\u00e9e", - "is_no_sound": "{entity_name} ne d\u00e9tecte pas de son", - "is_no_vibration": "{entity_name} ne d\u00e9tecte pas de vibration", - "is_not_bat_low": "{entity_name} batterie normale", - "is_not_cold": "{entity_name} n'est pas froid", - "is_not_connected": "{entity_name} est d\u00e9connect\u00e9", - "is_not_hot": "{entity_name} n'est pas chaud", - "is_not_locked": "{entity_name} est d\u00e9verrouill\u00e9", - "is_not_moist": "{entity_name} est sec", - "is_not_moving": "{entity_name} ne bouge pas", - "is_not_occupied": "{entity_name} n'est pas occup\u00e9", - "is_not_open": "{entity_name} est ferm\u00e9", - "is_not_plugged_in": "{entity_name} est d\u00e9branch\u00e9", - "is_not_powered": "{entity_name} n'est pas aliment\u00e9", - "is_not_present": "{entity_name} n'est pas pr\u00e9sent", - "is_not_unsafe": "{entity_name} est en s\u00e9curit\u00e9", - "is_occupied": "{entity_name} est occup\u00e9", - "is_off": "{entity_name} est d\u00e9sactiv\u00e9", - "is_on": "{entity_name} est activ\u00e9", - "is_open": "{entity_name} est ouvert", - "is_plugged_in": "{entity_name} est branch\u00e9", - "is_powered": "{entity_name} est aliment\u00e9", - "is_present": "{entity_name} est pr\u00e9sent", - "is_problem": "{entity_name} d\u00e9tecte un probl\u00e8me", - "is_smoke": "{entity_name} d\u00e9tecte de la fum\u00e9e", - "is_sound": "{entity_name} d\u00e9tecte du son", - "is_unsafe": "{entity_name} est dangereux", - "is_vibration": "{entity_name} d\u00e9tecte des vibrations" - }, - "trigger_type": { - "bat_low": "{entity_name} batterie faible", - "cold": "{entity_name} est devenu froid", - "connected": "{entity_name} connect\u00e9", - "gas": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter du gaz", - "hot": "{entity_name} est devenu chaud", - "light": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter la lumi\u00e8re", - "locked": "{entity_name} verrouill\u00e9", - "moist": "{entity_name} est devenu humide", - "motion": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter du mouvement", - "moving": "{entity_name} a commenc\u00e9 \u00e0 se d\u00e9placer", - "no_gas": "{entity_name} a arr\u00eat\u00e9 de d\u00e9tecter le gaz", - "no_light": "{entity_name} a arr\u00eat\u00e9 de d\u00e9tecter la lumi\u00e8re", - "no_motion": "{entity_name} a arr\u00eat\u00e9 de d\u00e9tecter le mouvement", - "no_problem": "{entity_name} a cess\u00e9 de d\u00e9tecter un probl\u00e8me", - "no_smoke": "{entity_name} a cess\u00e9 de d\u00e9tecter de la fum\u00e9e", - "no_sound": "{entity_name} a cess\u00e9 de d\u00e9tecter du bruit", - "no_vibration": "{entity_name} a cess\u00e9 de d\u00e9tecter des vibrations", - "not_bat_low": "{entity_name} batterie normale", - "not_cold": "{entity_name} n'est plus froid", - "not_connected": "{entity_name} d\u00e9connect\u00e9", - "not_hot": "{entity_name} n'est plus chaud", - "not_locked": "{entity_name} d\u00e9verrouill\u00e9", - "not_moist": "{entity_name} est devenu sec", - "not_moving": "{entity_name} a cess\u00e9 de bouger", - "not_occupied": "{entity_name} est devenu non occup\u00e9", - "not_opened": "{entity_name} ferm\u00e9", - "not_plugged_in": "{entity_name} d\u00e9branch\u00e9", - "not_powered": "{entity_name} non aliment\u00e9", - "not_present": "{entity_name} non pr\u00e9sent", - "not_unsafe": "{entity_name} est devenu s\u00fbr", - "occupied": "{entity_name} est devenu occup\u00e9", - "opened": "{entity_name} ouvert", - "plugged_in": "{entity_name} branch\u00e9", - "powered": "{entity_name} aliment\u00e9", - "present": "{entity_name} pr\u00e9sent", - "problem": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter un probl\u00e8me", - "smoke": "{entity_name} commenc\u00e9 \u00e0 d\u00e9tecter la fum\u00e9e", - "sound": "{entity_name} commenc\u00e9 \u00e0 d\u00e9tecter le son", - "turned_off": "{entity_name} est d\u00e9sactiv\u00e9", - "turned_on": "{entity_name} est activ\u00e9", - "unsafe": "{entity_name} est devenu dangereux", - "vibration": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter les vibrations" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/hu.json b/homeassistant/components/binary_sensor/.translations/hu.json deleted file mode 100644 index d53e869e075..00000000000 --- a/homeassistant/components/binary_sensor/.translations/hu.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} akkufesz\u00fclts\u00e9g alacsony", - "is_cold": "{entity_name} hideg", - "is_connected": "{entity_name} csatlakoztatva van", - "is_gas": "{entity_name} g\u00e1zt \u00e9rz\u00e9kel", - "is_hot": "{entity_name} forr\u00f3", - "is_light": "{entity_name} f\u00e9nyt \u00e9rz\u00e9kel", - "is_locked": "{entity_name} z\u00e1rva van", - "is_moist": "{entity_name} nedves", - "is_motion": "{entity_name} mozg\u00e1st \u00e9rz\u00e9kel", - "is_moving": "{entity_name} mozog", - "is_no_gas": "{entity_name} nem \u00e9rz\u00e9kel g\u00e1zt", - "is_no_light": "{entity_name} nem \u00e9rz\u00e9kel f\u00e9nyt", - "is_no_motion": "{entity_name} nem \u00e9rz\u00e9kel mozg\u00e1st", - "is_no_problem": "{entity_name} nem \u00e9szlel probl\u00e9m\u00e1t", - "is_no_smoke": "{entity_name} nem \u00e9rz\u00e9kel f\u00fcst\u00f6t", - "is_no_sound": "{entity_name} nem \u00e9rz\u00e9kel hangot", - "is_no_vibration": "{entity_name} nem \u00e9rz\u00e9kel rezg\u00e9st", - "is_not_bat_low": "{entity_name} akkufesz\u00fclts\u00e9g megfelel\u0151", - "is_not_cold": "{entity_name} nem hideg", - "is_not_connected": "{entity_name} le van csatlakoztatva", - "is_not_hot": "{entity_name} nem forr\u00f3", - "is_not_locked": "{entity_name} nyitva van", - "is_not_moist": "{entity_name} sz\u00e1raz", - "is_not_moving": "{entity_name} nem mozog", - "is_not_occupied": "{entity_name} nem foglalt", - "is_not_open": "{entity_name} z\u00e1rva van", - "is_not_plugged_in": "{entity_name} nincs csatlakoztatva", - "is_not_powered": "{entity_name} nincs fesz\u00fcts\u00e9g alatt", - "is_not_present": "{entity_name} nincs jelen", - "is_not_unsafe": "{entity_name} biztons\u00e1gos", - "is_occupied": "{entity_name} foglalt", - "is_off": "{entity_name} ki van kapcsolva", - "is_on": "{entity_name} be van kapcsolva", - "is_open": "{entity_name} nyitva van", - "is_plugged_in": "{entity_name} csatlakoztatva van", - "is_powered": "{entity_name} fesz\u00fclts\u00e9g alatt van", - "is_present": "{entity_name} jelen van", - "is_problem": "{entity_name} probl\u00e9m\u00e1t \u00e9szlel", - "is_smoke": "{entity_name} f\u00fcst\u00f6t \u00e9rz\u00e9kel", - "is_sound": "{entity_name} hangot \u00e9rz\u00e9kel", - "is_unsafe": "{entity_name} nem biztons\u00e1gos", - "is_vibration": "{entity_name} rezg\u00e9st \u00e9rz\u00e9kel" - }, - "trigger_type": { - "bat_low": "{entity_name} akkufesz\u00fclts\u00e9g alacsony", - "cold": "{entity_name} hideg lett", - "connected": "{entity_name} csatlakozik", - "gas": "{entity_name} g\u00e1zt \u00e9rz\u00e9kel", - "hot": "{entity_name} felforr\u00f3sodik", - "light": "{entity_name} f\u00e9nyt \u00e9rz\u00e9kel", - "locked": "{entity_name} be lett z\u00e1rva", - "moist": "{entity_name} nedves lett", - "motion": "{entity_name} mozg\u00e1st \u00e9rz\u00e9kel", - "moving": "{entity_name} mozog", - "no_gas": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel g\u00e1zt", - "no_light": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel f\u00e9nyt", - "no_motion": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel mozg\u00e1st", - "no_problem": "{entity_name} m\u00e1r nem \u00e9szlel probl\u00e9m\u00e1t", - "no_smoke": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel f\u00fcst\u00f6t", - "no_sound": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel hangot", - "no_vibration": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel rezg\u00e9st", - "not_bat_low": "{entity_name} akkufesz\u00fclts\u00e9g megfelel\u0151", - "not_cold": "{entity_name} m\u00e1r nem hideg", - "not_connected": "{entity_name} lecsatlakozik", - "not_hot": "{entity_name} m\u00e1r nem forr\u00f3", - "not_locked": "{entity_name} ki lett nyitva", - "not_moist": "{entity_name} sz\u00e1raz lett", - "not_moving": "{entity_name} m\u00e1r nem mozog", - "not_occupied": "{entity_name} m\u00e1r nem foglalt", - "not_opened": "{entity_name} be lett csukva", - "not_plugged_in": "{entity_name} m\u00e1r nincs csatlakoztatva", - "not_powered": "{entity_name} m\u00e1r nincs fesz\u00fcts\u00e9g alatt", - "not_present": "{entity_name} m\u00e1r nincs jelen", - "not_unsafe": "{entity_name} biztons\u00e1gos lett", - "occupied": "{entity_name} foglalt lett", - "opened": "{entity_name} ki lett nyitva", - "plugged_in": "{entity_name} csatlakoztatva lett", - "powered": "{entity_name} m\u00e1r fesz\u00fclts\u00e9g alatt van", - "present": "{entity_name} m\u00e1r jelen van", - "problem": "{entity_name} probl\u00e9m\u00e1t \u00e9szlel", - "smoke": "{entity_name} f\u00fcst\u00f6t \u00e9rz\u00e9kel", - "sound": "{entity_name} hangot \u00e9rz\u00e9kel", - "turned_off": "{entity_name} ki lett kapcsolva", - "turned_on": "{entity_name} be lett kapcsolva", - "unsafe": "{entity_name} m\u00e1r nem biztons\u00e1gos", - "vibration": "{entity_name} rezg\u00e9st \u00e9rz\u00e9kel" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/it.json b/homeassistant/components/binary_sensor/.translations/it.json deleted file mode 100644 index db897b68da0..00000000000 --- a/homeassistant/components/binary_sensor/.translations/it.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} la batteria \u00e8 scarica", - "is_cold": "{entity_name} \u00e8 freddo", - "is_connected": "{entity_name} \u00e8 collegato", - "is_gas": "{entity_name} sta rilevando il gas", - "is_hot": "{entity_name} \u00e8 caldo", - "is_light": "{entity_name} sta rilevando la luce", - "is_locked": "{entity_name} \u00e8 bloccato", - "is_moist": "{entity_name} \u00e8 umido", - "is_motion": "{entity_name} sta rilevando il movimento", - "is_moving": "{entity_name} si sta muovendo", - "is_no_gas": "{entity_name} non sta rilevando il gas", - "is_no_light": "{entity_name} non sta rilevando la luce", - "is_no_motion": "{entity_name} non sta rilevando il movimento", - "is_no_problem": "{entity_name} non sta rilevando un problema", - "is_no_smoke": "{entity_name} non sta rilevando il fumo", - "is_no_sound": "{entity_name} non sta rilevando il suono", - "is_no_vibration": "{entity_name} non sta rilevando la vibrazione", - "is_not_bat_low": "{entity_name} la batteria \u00e8 normale", - "is_not_cold": "{entity_name} non \u00e8 freddo", - "is_not_connected": "{entity_name} \u00e8 disconnesso", - "is_not_hot": "{entity_name} non \u00e8 caldo", - "is_not_locked": "{entity_name} \u00e8 sbloccato", - "is_not_moist": "{entity_name} \u00e8 asciutto", - "is_not_moving": "{entity_name} non si sta muovendo", - "is_not_occupied": "{entity_name} non \u00e8 occupato", - "is_not_open": "{entity_name} \u00e8 chiuso", - "is_not_plugged_in": "{entity_name} \u00e8 collegato", - "is_not_powered": "{entity_name} non \u00e8 alimentato", - "is_not_present": "{entity_name} non \u00e8 presente", - "is_not_unsafe": "{entity_name} \u00e8 sicuro", - "is_occupied": "{entity_name} \u00e8 occupato", - "is_off": "{entity_name} \u00e8 spento", - "is_on": "{entity_name} \u00e8 acceso", - "is_open": "{entity_name} \u00e8 aperto", - "is_plugged_in": "{entity_name} \u00e8 collegato", - "is_powered": "{entity_name} \u00e8 alimentato", - "is_present": "{entity_name} \u00e8 presente", - "is_problem": "{entity_name} sta rilevando un problema", - "is_smoke": "{entity_name} sta rilevando il fumo", - "is_sound": "{entity_name} sta rilevando il suono", - "is_unsafe": "{entity_name} non \u00e8 sicuro", - "is_vibration": "{entity_name} sta rilevando la vibrazione" - }, - "trigger_type": { - "bat_low": "{entity_name} batteria scarica", - "cold": "{entity_name} \u00e8 diventato freddo", - "connected": "{entity_name} connesso", - "gas": "{entity_name} ha iniziato a rilevare il gas", - "hot": "{entity_name} \u00e8 diventato caldo", - "light": "{entity_name} ha iniziato a rilevare la luce", - "locked": "{entity_name} bloccato", - "moist": "{entity_name} diventato umido", - "motion": "{entity_name} ha iniziato a rilevare il movimento", - "moving": "{entity_name} ha iniziato a muoversi", - "no_gas": "{entity_name} ha smesso la rilevazione di gas", - "no_light": "{entity_name} smesso il rilevamento di luce", - "no_motion": "{entity_name} ha smesso di rilevare il movimento", - "no_problem": "{entity_name} ha smesso di rilevare un problema", - "no_smoke": "{entity_name} ha smesso la rilevazione di fumo", - "no_sound": "{entity_name} ha smesso di rilevare il suono", - "no_vibration": "{entity_name} ha smesso di rilevare le vibrazioni", - "not_bat_low": "{entity_name} batteria normale", - "not_cold": "{entity_name} non \u00e8 diventato freddo", - "not_connected": "{entity_name} \u00e8 disconnesso", - "not_hot": "{entity_name} non \u00e8 diventato caldo", - "not_locked": "{entity_name} \u00e8 sbloccato", - "not_moist": "{entity_name} \u00e8 diventato asciutto", - "not_moving": "{entity_name} ha smesso di muoversi", - "not_occupied": "{entity_name} non \u00e8 occupato", - "not_opened": "{entity_name} chiuso", - "not_plugged_in": "{entity_name} \u00e8 scollegato", - "not_powered": "{entity_name} non \u00e8 alimentato", - "not_present": "{entity_name} non \u00e8 presente", - "not_unsafe": "{entity_name} \u00e8 diventato sicuro", - "occupied": "{entity_name} \u00e8 diventato occupato", - "opened": "{entity_name} \u00e8 aperto", - "plugged_in": "{entity_name} \u00e8 collegato", - "powered": "{entity_name} \u00e8 alimentato", - "present": "{entity_name} \u00e8 presente", - "problem": "{entity_name} ha iniziato a rilevare un problema", - "smoke": "{entity_name} ha iniziato la rilevazione di fumo", - "sound": "{entity_name} ha iniziato il rilevamento del suono", - "turned_off": "{entity_name} disattivato", - "turned_on": "{entity_name} attivato", - "unsafe": "{entity_name} diventato non sicuro", - "vibration": "{entity_name} iniziato a rilevare le vibrazioni" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/ko.json b/homeassistant/components/binary_sensor/.translations/ko.json deleted file mode 100644 index 733d3a8de8f..00000000000 --- a/homeassistant/components/binary_sensor/.translations/ko.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} \uc758 \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 \ubd80\uc871\ud558\uba74", - "is_cold": "{entity_name} \uc774(\uac00) \ucc28\uac00\uc6b0\uba74", - "is_connected": "{entity_name} \uc774(\uac00) \uc5f0\uacb0\ub418\uc5b4 \uc788\uc73c\uba74", - "is_gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud558\uba74", - "is_hot": "{entity_name} \uc774(\uac00) \ub728\uac70\uc6b0\uba74", - "is_light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud558\uba74", - "is_locked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc73c\uba74", - "is_moist": "{entity_name} \uc774(\uac00) \uc2b5\ud558\uba74", - "is_motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud558\uba74", - "is_moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc774\uba74", - "is_no_gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_no_light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_no_motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_no_problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_no_smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_no_sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_no_vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_not_bat_low": "{entity_name} \uc758 \ubc30\ud130\ub9ac\uac00 \uc815\uc0c1\uc774\uba74", - "is_not_cold": "{entity_name} \uc774(\uac00) \ucc28\uac11\uc9c0 \uc54a\ub2e4\uba74", - "is_not_connected": "{entity_name} \uc758 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc838 \uc788\ub2e4\uba74", - "is_not_hot": "{entity_name} \uc774(\uac00) \ub728\uac81\uc9c0 \uc54a\ub2e4\uba74", - "is_not_locked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc9c0 \uc54a\uc73c\uba74", - "is_not_moist": "{entity_name} \uc774(\uac00) \uac74\uc870\ud558\uba74", - "is_not_moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc774\uc9c0 \uc54a\uc73c\uba74", - "is_not_occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \uc544\ub2c8\uba74", - "is_not_open": "{entity_name} \uc774(\uac00) \ub2eb\ud600 \uc788\uc73c\uba74", - "is_not_plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \ubf51\ud600 \uc788\uc73c\uba74", - "is_not_powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub418\uc9c0 \uc54a\uc73c\uba74", - "is_not_present": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uc911\uc774\uba74", - "is_not_unsafe": "{entity_name} \uc774(\uac00) \uc548\uc804\ud558\uba74", - "is_occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uc774\uba74", - "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", - "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74", - "is_open": "{entity_name} \uc774(\uac00) \uc5f4\ub824 \uc788\uc73c\uba74", - "is_plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \uaf3d\ud600 \uc788\uc73c\uba74", - "is_powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub418\uace0 \uc788\uc73c\uba74", - "is_present": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc911\uc774\uba74", - "is_problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud558\uba74", - "is_smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud558\uba74", - "is_sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud558\uba74", - "is_unsafe": "{entity_name} \uc740(\ub294) \uc548\uc804\ud558\uc9c0 \uc54a\uc73c\uba74", - "is_vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud558\uba74" - }, - "trigger_type": { - "bat_low": "{entity_name} \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 \ubd80\uc871\ud574\uc9c8 \ub54c", - "cold": "{entity_name} \uc774(\uac00) \ucc28\uac00\uc6cc\uc9c8 \ub54c", - "connected": "{entity_name} \uc774(\uac00) \uc5f0\uacb0\ub420 \ub54c", - "gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud560 \ub54c", - "hot": "{entity_name} \uc774(\uac00) \ub728\uac70\uc6cc\uc9c8 \ub54c", - "light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud560 \ub54c", - "locked": "{entity_name} \uc774(\uac00) \uc7a0\uae38 \ub54c", - "moist": "{entity_name} \uc774(\uac00) \uc2b5\ud574\uc9c8 \ub54c", - "motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud560 \ub54c", - "moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc77c \ub54c", - "no_gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "no_light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "no_motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "no_problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "no_smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "no_sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "no_vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "not_bat_low": "{entity_name} \ubc30\ud130\ub9ac\uac00 \uc815\uc0c1\uc774 \ub420 \ub54c", - "not_cold": "{entity_name} \uc774(\uac00) \ucc28\uac11\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "not_connected": "{entity_name} \uc758 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \ub54c", - "not_hot": "{entity_name} \uc774(\uac00) \ub728\uac81\uc9c0 \uc54a\uac8c \ub420 \ub54c", - "not_locked": "{entity_name} \uc758 \uc7a0\uae08\uc774 \ud574\uc81c\ub420 \ub54c", - "not_moist": "{entity_name} \uc774(\uac00) \uac74\uc870\ud574\uc9c8 \ub54c", - "not_moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc774\uc9c0 \uc54a\uc744 \ub54c", - "not_occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \uc544\ub2c8\uac8c \ub420 \ub54c", - "not_opened": "{entity_name} \uc774(\uac00) \ub2eb\ud790 \ub54c", - "not_plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \ubf51\ud790 \ub54c", - "not_powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub418\uc9c0 \uc54a\uc744 \ub54c", - "not_present": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uc0c1\ud0dc\uac00 \ub420 \ub54c", - "not_unsafe": "{entity_name} \uc740(\ub294) \uc548\uc804\ud574\uc9c8 \ub54c", - "occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \ub420 \ub54c", - "opened": "{entity_name} \uc774(\uac00) \uc5f4\ub9b4 \ub54c", - "plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \uaf3d\ud790 \ub54c", - "powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub420 \ub54c", - "present": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \ub420 \ub54c", - "problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud560 \ub54c", - "smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud560 \ub54c", - "sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud560 \ub54c", - "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", - "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c", - "unsafe": "{entity_name} \uc774(\uac00) \uc548\uc804\ud558\uc9c0 \uc54a\uc744 \ub54c", - "vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud560 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/lb.json b/homeassistant/components/binary_sensor/.translations/lb.json deleted file mode 100644 index 7120b1bb289..00000000000 --- a/homeassistant/components/binary_sensor/.translations/lb.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} Batterie ass niddereg", - "is_cold": "{entity_name} ass kal", - "is_connected": "{entity_name} ass verbonnen", - "is_gas": "{entity_name} entdeckt Gas", - "is_hot": "{entity_name} ass waarm", - "is_light": "{entity_name} entdeckt Luucht", - "is_locked": "{entity_name} ass gespaart", - "is_moist": "{entity_name} ass fiicht", - "is_motion": "{entity_name} entdeckt Beweegung", - "is_moving": "{entity_name} beweegt sech", - "is_no_gas": "{entity_name} entdeckt kee Gas", - "is_no_light": "{entity_name} entdeckt keng Luucht", - "is_no_motion": "{entity_name} entdeckt keng Beweegung", - "is_no_problem": "{entity_name} entdeckt keng Problemer", - "is_no_smoke": "{entity_name} entdeckt keen Damp", - "is_no_sound": "{entity_name} entdeckt keen Toun", - "is_no_vibration": "{entity_name} entdeckt keng Vibratiounen", - "is_not_bat_low": "{entity_name} Batterie ass normal", - "is_not_cold": "{entity_name} ass net kal", - "is_not_connected": "{entity_name} ass d\u00e9connect\u00e9iert", - "is_not_hot": "{entity_name} ass net waarm", - "is_not_locked": "{entity_name} ass entspaart", - "is_not_moist": "{entity_name} ass dr\u00e9chen", - "is_not_moving": "{entity_name} beweegt sech net", - "is_not_occupied": "{entity_name} ass fr\u00e4i", - "is_not_open": "{entity_name} ass zou", - "is_not_plugged_in": "{entity_name} ass net ugeschloss", - "is_not_powered": "{entity_name} ass net aliment\u00e9iert", - "is_not_present": "{entity_name} ass net pr\u00e4sent", - "is_not_unsafe": "{entity_name} ass s\u00e9cher", - "is_occupied": "{entity_name} ass besat", - "is_off": "{entity_name} ass aus", - "is_on": "{entity_name} ass un", - "is_open": "{entity_name} ass op", - "is_plugged_in": "{entity_name} ass ugeschloss", - "is_powered": "{entity_name} ass aliment\u00e9iert", - "is_present": "{entity_name} ass pr\u00e4sent", - "is_problem": "{entity_name} entdeckt Problemer", - "is_smoke": "{entity_name} entdeckt Damp", - "is_sound": "{entity_name} entdeckt Toun", - "is_unsafe": "{entity_name} ass ons\u00e9cher", - "is_vibration": "{entity_name} entdeckt Vibratiounen" - }, - "trigger_type": { - "bat_low": "{entity_name} Batterie niddereg", - "cold": "{entity_name} gouf kal", - "connected": "{entity_name} ass verbonnen", - "gas": "{entity_name} huet ugefaangen Gas z'entdecken", - "hot": "{entity_name} gouf waarm", - "light": "{entity_name} huet ugefange Luucht z'entdecken", - "locked": "{entity_name} gespaart", - "moist": "{entity_name} gouf fiicht", - "motion": "{entity_name} huet ugefaange Beweegung z'entdecken", - "moving": "{entity_name} huet ugefaangen sech ze beweegen", - "no_gas": "{entity_name} huet opgehale Gas z'entdecken", - "no_light": "{entity_name} huet opgehale Luucht z'entdecken", - "no_motion": "{entity_name} huet opgehale Beweegung z'entdecken", - "no_problem": "{entity_name} huet opgehale Problemer z'entdecken", - "no_smoke": "{entity_name} huet opgehale Damp z'entdecken", - "no_sound": "{entity_name} huet opgehale Toun z'entdecken", - "no_vibration": "{entity_name} huet opgehale Vibratiounen z'entdecken", - "not_bat_low": "{entity_name} Batterie normal", - "not_cold": "{entity_name} gouf net kal", - "not_connected": "{entity_name} d\u00e9connect\u00e9iert", - "not_hot": "{entity_name} gouf net waarm", - "not_locked": "{entity_name} entspaart", - "not_moist": "{entity_name} gouf dr\u00e9chen", - "not_moving": "{entity_name} huet opgehale sech ze beweegen", - "not_occupied": "{entity_name} gouf fr\u00e4i", - "not_opened": "{entity_name} gouf zougemaach", - "not_plugged_in": "{entity_name} net ugeschloss", - "not_powered": "{entity_name} net aliment\u00e9iert", - "not_present": "{entity_name} net pr\u00e4sent", - "not_unsafe": "{entity_name} gouf s\u00e9cher", - "occupied": "{entity_name} gouf besat", - "opened": "{entity_name} gouf opgemaach", - "plugged_in": "{entity_name} ugeschloss", - "powered": "{entity_name} aliment\u00e9iert", - "present": "{entity_name} pr\u00e4sent", - "problem": "{entity_name} huet ugefaange Problemer z'entdecken", - "smoke": "{entity_name} huet ugefaangen Damp z'entdecken", - "sound": "{entity_name} huet ugefaangen Toun z'entdecken", - "turned_off": "{entity_name} gouf ausgeschalt", - "turned_on": "{entity_name} gouf ugeschalt", - "unsafe": "{entity_name} gouf ons\u00e9cher", - "vibration": "{entity_name} huet ugefaange Vibratiounen z'entdecken" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/lv.json b/homeassistant/components/binary_sensor/.translations/lv.json deleted file mode 100644 index 7668dfa5ac8..00000000000 --- a/homeassistant/components/binary_sensor/.translations/lv.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "trigger_type": { - "turned_off": "{entity_name} tika izsl\u0113gta", - "turned_on": "{entity_name} tika iesl\u0113gta" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/nl.json b/homeassistant/components/binary_sensor/.translations/nl.json deleted file mode 100644 index 04d40ecf9b8..00000000000 --- a/homeassistant/components/binary_sensor/.translations/nl.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} batterij is bijna leeg", - "is_cold": "{entity_name} is koud", - "is_connected": "{entity_name} is verbonden", - "is_gas": "{entity_name} detecteert gas", - "is_hot": "{entity_name} is hot", - "is_light": "{entity_name} detecteert licht", - "is_locked": "{entity_name} is vergrendeld", - "is_moist": "{entity_name} is vochtig", - "is_motion": "{entity_name} detecteert beweging", - "is_moving": "{entity_name} is in beweging", - "is_no_gas": "{entity_name} detecteert geen gas", - "is_no_light": "{entity_name} detecteert geen licht", - "is_no_motion": "{entity_name} detecteert geen beweging", - "is_no_problem": "{entity_name} detecteert geen probleem", - "is_no_smoke": "{entity_name} detecteert geen rook", - "is_no_sound": "{entity_name} detecteert geen geluid", - "is_no_vibration": "{entity_name} detecteert geen trillingen", - "is_not_bat_low": "{entity_name} batterij is normaal", - "is_not_cold": "{entity_name} is niet koud", - "is_not_connected": "{entity_name} is niet verbonden", - "is_not_hot": "{entity_name} is niet heet", - "is_not_locked": "{entity_name} is ontgrendeld", - "is_not_moist": "{entity_name} is droog", - "is_not_moving": "{entity_name} beweegt niet", - "is_not_occupied": "{entity_name} is niet bezet", - "is_not_open": "{entity_name} is gesloten", - "is_not_plugged_in": "{entity_name} is niet aangesloten", - "is_not_powered": "{entity_name} is niet van stroom voorzien...", - "is_not_present": "{entity_name} is niet aanwezig", - "is_not_unsafe": "{entity_name} is veilig", - "is_occupied": "{entity_name} bezet is", - "is_off": "{entity_name} is uitgeschakeld", - "is_on": "{entity_name} is ingeschakeld", - "is_open": "{entity_name} is open", - "is_plugged_in": "{entity_name} is aangesloten", - "is_powered": "{entity_name} is van stroom voorzien....", - "is_present": "{entity_name} is aanwezig", - "is_problem": "{entity_name} detecteert een probleem", - "is_smoke": "{entity_name} detecteert rook", - "is_sound": "{entity_name} detecteert geluid", - "is_unsafe": "{entity_name} is onveilig", - "is_vibration": "{entity_name} detecteert trillingen" - }, - "trigger_type": { - "bat_low": "{entity_name} batterij bijna leeg", - "cold": "{entity_name} werd koud", - "connected": "{entity_name} verbonden", - "gas": "{entity_name} begon gas te detecteren", - "hot": "{entity_name} werd heet", - "light": "{entity_name} begon licht te detecteren", - "locked": "{entity_name} vergrendeld", - "moist": "{entity_name} werd vochtig", - "motion": "{entity_name} begon beweging te detecteren", - "moving": "{entity_name} begon te bewegen", - "no_gas": "{entity_name} is gestopt met het detecteren van gas", - "no_light": "{entity_name} gestopt met het detecteren van licht", - "no_motion": "{entity_name} gestopt met het detecteren van beweging", - "no_problem": "{entity_name} gestopt met het detecteren van het probleem", - "no_smoke": "{entity_name} gestopt met het detecteren van rook", - "no_sound": "{entity_name} gestopt met het detecteren van geluid", - "no_vibration": "{entity_name} gestopt met het detecteren van trillingen", - "not_bat_low": "{entity_name} batterij normaal", - "not_cold": "{entity_name} werd niet koud", - "not_connected": "{entity_name} verbroken", - "not_hot": "{entity_name} werd niet warm", - "not_locked": "{entity_name} ontgrendeld", - "not_moist": "{entity_name} werd droog", - "not_moving": "{entity_name} gestopt met bewegen", - "not_occupied": "{entity_name} werd niet bezet", - "not_opened": "{entity_name} gesloten", - "not_plugged_in": "{entity_name} niet verbonden", - "not_powered": "{entity_name} niet ingeschakeld", - "not_present": "{entity_name} is niet aanwezig", - "not_unsafe": "{entity_name} werd veilig", - "occupied": "{entity_name} werd bezet", - "opened": "{entity_name} geopend", - "plugged_in": "{entity_name} aangesloten", - "powered": "{entity_name} heeft vermogen", - "present": "{entity_name} aanwezig", - "problem": "{entity_name} begonnen met het detecteren van een probleem", - "smoke": "{entity_name} begon rook te detecteren", - "sound": "{entity_name} begon geluid te detecteren", - "turned_off": "{entity_name} uitgeschakeld", - "turned_on": "{entity_name} ingeschakeld", - "unsafe": "{entity_name} werd onveilig", - "vibration": "{entity_name} begon trillingen te detecteren" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/no.json b/homeassistant/components/binary_sensor/.translations/no.json deleted file mode 100644 index b82dd8b0533..00000000000 --- a/homeassistant/components/binary_sensor/.translations/no.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} batteriniv\u00e5et er lavt", - "is_cold": "{entity_name} er kald", - "is_connected": "{entity_name} er tilkoblet", - "is_gas": "{entity_name} registrerer gass", - "is_hot": "{entity_name} er varm", - "is_light": "{entity_name} registrerer lys", - "is_locked": "{entity_name} er l\u00e5st", - "is_moist": "{entity_name} er fuktig", - "is_motion": "{entity_name} registrerer bevegelse", - "is_moving": "{entity_name} er i bevegelse", - "is_no_gas": "{entity_name} registrerer ikke gass", - "is_no_light": "{entity_name} registrerer ikke lys", - "is_no_motion": "{entity_name} registrerer ikke bevegelse", - "is_no_problem": "{entity_name} registrerer ikke et problem", - "is_no_smoke": "{entity_name} registrerer ikke r\u00f8yk", - "is_no_sound": "{entity_name} registrerer ikke lyd", - "is_no_vibration": "{entity_name} registrerer ikke bevegelse", - "is_not_bat_low": "{entity_name} batteri er normalt", - "is_not_cold": "{entity_name} er ikke kald", - "is_not_connected": "{entity_name} er frakoblet", - "is_not_hot": "{entity_name} er ikke varm", - "is_not_locked": "{entity_name} er ul\u00e5st", - "is_not_moist": "{entity_name} er t\u00f8rr", - "is_not_moving": "{entity_name} er ikke i bevegelse", - "is_not_occupied": "{entity_name} er ledig", - "is_not_open": "{entity_name} er lukket", - "is_not_plugged_in": "{entity_name} er koblet fra", - "is_not_powered": "{entity_name} er spenningsl\u00f8s", - "is_not_present": "{entity_name} er ikke tilstede", - "is_not_unsafe": "{entity_name} er trygg", - "is_occupied": "{entity_name} er opptatt", - "is_off": "{entity_name} er sl\u00e5tt av", - "is_on": "{entity_name} er sl\u00e5tt p\u00e5", - "is_open": "{entity_name} er \u00e5pen", - "is_plugged_in": "{entity_name} er koblet til", - "is_powered": "{entity_name} er spenningssatt", - "is_present": "{entity_name} er tilstede", - "is_problem": "{entity_name} registrerer et problem", - "is_smoke": "{entity_name} registrerer r\u00f8yk", - "is_sound": "{entity_name} registrerer lyd", - "is_unsafe": "{entity_name} er utrygg", - "is_vibration": "{entity_name} registrerer vibrasjon" - }, - "trigger_type": { - "bat_low": "{entity_name} lavt batteri", - "cold": "{entity_name} ble kald", - "connected": "{entity_name} tilkoblet", - "gas": "{entity_name} begynte \u00e5 registrere gass", - "hot": "{entity_name} ble varm", - "light": "{entity_name} begynte \u00e5 registrere lys", - "locked": "{entity_name} l\u00e5st", - "moist": "{entity_name} ble fuktig", - "motion": "{entity_name} begynte \u00e5 registrere bevegelse", - "moving": "{entity_name} begynte \u00e5 bevege seg", - "no_gas": "{entity_name} sluttet \u00e5 registrere gass", - "no_light": "{entity_name} sluttet \u00e5 registrere lys", - "no_motion": "{entity_name} sluttet \u00e5 registrere bevegelse", - "no_problem": "{entity_name} sluttet \u00e5 registrere problem", - "no_smoke": "{entity_name} sluttet \u00e5 registrere r\u00f8yk", - "no_sound": "{entity_name} sluttet \u00e5 registrere lyd", - "no_vibration": "{entity_name} sluttet \u00e5 registrere vibrasjon", - "not_bat_low": "{entity_name} batteri normalt", - "not_cold": "{entity_name} ble ikke lenger kald", - "not_connected": "{entity_name} koblet fra", - "not_hot": "{entity_name} ble ikke lenger varm", - "not_locked": "{entity_name} l\u00e5st opp", - "not_moist": "{entity_name} ble t\u00f8rr", - "not_moving": "{entity_name} sluttet \u00e5 bevege seg", - "not_occupied": "{entity_name} ble ledig", - "not_opened": "{entity_name} stengt", - "not_plugged_in": "{entity_name} koblet fra", - "not_powered": "{entity_name} spenningsl\u00f8s", - "not_present": "{entity_name} ikke til stede", - "not_unsafe": "{entity_name} ble trygg", - "occupied": "{entity_name} ble opptatt", - "opened": "{entity_name} \u00e5pnet", - "plugged_in": "{entity_name} koblet til", - "powered": "{entity_name} spenningssatt", - "present": "{entity_name} tilstede", - "problem": "{entity_name} begynte \u00e5 registrere et problem", - "smoke": "{entity_name} begynte \u00e5 registrere r\u00f8yk", - "sound": "{entity_name} begynte \u00e5 registrere lyd", - "turned_off": "{entity_name} sl\u00e5tt av", - "turned_on": "{entity_name} sl\u00e5tt p\u00e5", - "unsafe": "{entity_name} ble usikker", - "vibration": "{entity_name} begynte \u00e5 oppdage vibrasjon" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/pl.json b/homeassistant/components/binary_sensor/.translations/pl.json deleted file mode 100644 index ef174e72336..00000000000 --- a/homeassistant/components/binary_sensor/.translations/pl.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "bateria {entity_name} jest roz\u0142adowana", - "is_cold": "sensor {entity_name} wykrywa zimno", - "is_connected": "sensor {entity_name} raportuje po\u0142\u0105czenie", - "is_gas": "sensor {entity_name} wykrywa gaz", - "is_hot": "sensor {entity_name} wykrywa gor\u0105co", - "is_light": "sensor {entity_name} wykrywa \u015bwiat\u0142o", - "is_locked": "sensor {entity_name} wykrywa zamkni\u0119cie", - "is_moist": "sensor {entity_name} wykrywa wilgo\u0107", - "is_motion": "sensor {entity_name} wykrywa ruch", - "is_moving": "sensor {entity_name} porusza si\u0119", - "is_no_gas": "sensor {entity_name} nie wykrywa gazu", - "is_no_light": "sensor {entity_name} nie wykrywa \u015bwiat\u0142a", - "is_no_motion": "sensor {entity_name} nie wykrywa ruchu", - "is_no_problem": "sensor {entity_name} nie wykrywa problemu", - "is_no_smoke": "sensor {entity_name} nie wykrywa dymu", - "is_no_sound": "sensor {entity_name} nie wykrywa d\u017awi\u0119ku", - "is_no_vibration": "sensor {entity_name} nie wykrywa wibracji", - "is_not_bat_low": "bateria {entity_name} nie jest roz\u0142adowana", - "is_not_cold": "sensor {entity_name} nie wykrywa zimna", - "is_not_connected": "sensor {entity_name} nie wykrywa roz\u0142\u0105czenia", - "is_not_hot": "sensor {entity_name} nie wykrywa gor\u0105ca", - "is_not_locked": "sensor {entity_name} nie wykrywa otwarcia", - "is_not_moist": "sensor {entity_name} nie wykrywa wilgoci", - "is_not_moving": "sensor {entity_name} nie porusza si\u0119", - "is_not_occupied": "sensor {entity_name} nie jest zaj\u0119ty", - "is_not_open": "sensor {entity_name} jest zamkni\u0119ty", - "is_not_plugged_in": "sensor {entity_name} wykrywa od\u0142\u0105czenie", - "is_not_powered": "sensor {entity_name} nie wykrywa zasilania", - "is_not_present": "sensor {entity_name} nie wykrywa obecno\u015bci", - "is_not_unsafe": "sensor {entity_name} nie wykrywa niebezpiecze\u0144stwa", - "is_occupied": "sensor {entity_name} jest zaj\u0119ty", - "is_off": "sensor {entity_name} jest wy\u0142\u0105czony", - "is_on": "sensor {entity_name} jest w\u0142\u0105czony", - "is_open": "sensor {entity_name} jest otwarty", - "is_plugged_in": "sensor {entity_name} wykrywa pod\u0142\u0105czenie", - "is_powered": "sensor {entity_name} wykrywa zasilanie", - "is_present": "sensor {entity_name} wykrywa obecno\u015b\u0107", - "is_problem": "sensor {entity_name} wykrywa problem", - "is_smoke": "sensor {entity_name} wykrywa dym", - "is_sound": "sensor {entity_name} wykrywa d\u017awi\u0119k", - "is_unsafe": "sensor {entity_name} wykrywa niebezpiecze\u0144stwo", - "is_vibration": "sensor {entity_name} wykrywa wibracje" - }, - "trigger_type": { - "bat_low": "nast\u0105pi roz\u0142adowanie baterii {entity_name}", - "cold": "sensor {entity_name} wykryje zimno", - "connected": "nast\u0105pi pod\u0142\u0105czenie {entity_name}", - "gas": "sensor {entity_name} wykryje gaz", - "hot": "sensor {entity_name} wykryje gor\u0105co", - "light": "sensor {entity_name} wykryje \u015bwiat\u0142o", - "locked": "nast\u0105pi zamkni\u0119cie {entity_name}", - "moist": "nast\u0105pi wykrycie wilgoci {entity_name}", - "motion": "sensor {entity_name} wykryje ruch", - "moving": "sensor {entity_name} zacznie porusza\u0107 si\u0119", - "no_gas": "sensor {entity_name} przestanie wykrywa\u0107 gaz", - "no_light": "sensor {entity_name} przestanie wykrywa\u0107 \u015bwiat\u0142o", - "no_motion": "sensor {entity_name} przestanie wykrywa\u0107 ruch", - "no_problem": "sensor {entity_name} przestanie wykrywa\u0107 problem", - "no_smoke": "sensor {entity_name} przestanie wykrywa\u0107 dym", - "no_sound": "sensor {entity_name} przestanie wykrywa\u0107 d\u017awi\u0119k", - "no_vibration": "sensor {entity_name} przestanie wykrywa\u0107 wibracje", - "not_bat_low": "nast\u0105pi na\u0142adowanie baterii {entity_name}", - "not_cold": "sensor {entity_name} przestanie wykrywa\u0107 zimno", - "not_connected": "nast\u0105pi roz\u0142\u0105czenie {entity_name}", - "not_hot": "sensor {entity_name} przestanie wykrywa\u0107 gor\u0105co", - "not_locked": "nast\u0105pi otwarcie {entity_name}", - "not_moist": "sensor {entity_name} przestanie wykrywa\u0107 wilgo\u0107", - "not_moving": "sensor {entity_name} przestanie porusza\u0107 si\u0119", - "not_occupied": "sensor {entity_name} przestanie by\u0107 zaj\u0119ty", - "not_opened": "nast\u0105pi zamkni\u0119cie {entity_name}", - "not_plugged_in": "nast\u0105pi od\u0142\u0105czenie {entity_name}", - "not_powered": "nast\u0105pi od\u0142\u0105czenie zasilania {entity_name}", - "not_present": "sensor {entity_name} przestanie wykrywa\u0107 obecno\u015b\u0107", - "not_unsafe": "sensor {entity_name} przestanie wykrywa\u0107 niebezpiecze\u0144stwo", - "occupied": "sensor {entity_name} stanie si\u0119 zaj\u0119ty", - "opened": "nast\u0105pi otwarcie {entity_name}", - "plugged_in": "nast\u0105pi pod\u0142\u0105czenie {entity_name}", - "powered": "nast\u0105pi pod\u0142\u0105czenie zasilenia {entity_name}", - "present": "sensor {entity_name} wykryje obecno\u015b\u0107", - "problem": "sensor {entity_name} wykryje problem", - "smoke": "sensor {entity_name} wykryje dym", - "sound": "sensor {entity_name} wykryje d\u017awi\u0119k", - "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", - "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}", - "unsafe": "sensor {entity_name} wykryje niebezpiecze\u0144stwo", - "vibration": "sensor {entity_name} wykryje wibracje" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/pt.json b/homeassistant/components/binary_sensor/.translations/pt.json deleted file mode 100644 index caea4c6c97a..00000000000 --- a/homeassistant/components/binary_sensor/.translations/pt.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "a bateria {entity_name} est\u00e1 baixa", - "is_cold": "{entity_name} est\u00e1 frio", - "is_connected": "{entity_name} est\u00e1 ligado", - "is_gas": "{entity_name} est\u00e1 a detectar g\u00e1s", - "is_hot": "{entity_name} est\u00e1 quente", - "is_light": "{entity_name} est\u00e1 a detectar luz", - "is_locked": "{entity_name} est\u00e1 fechado", - "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_not_open": "{entity_name} est\u00e1 fechada", - "is_off": "{entity_name} est\u00e1 desligado", - "is_on": "{entity_name} est\u00e1 ligado", - "is_vibration": "{entity_name} est\u00e1 a detectar vibra\u00e7\u00f5es" - }, - "trigger_type": { - "moist": "ficou h\u00famido {entity_name}", - "not_opened": "fechado {entity_name}", - "not_plugged_in": "{entity_name} desligado", - "not_powered": "{entity_name} n\u00e3o alimentado", - "not_present": "ausente {entity_name}", - "not_unsafe": "ficou seguro {entity_name}", - "occupied": "ficou ocupado {entity_name}", - "opened": "{entity_name} aberto", - "plugged_in": "{entity_name} ligado", - "powered": "{entity_name} alimentado", - "present": "{entity_name} presente", - "problem": "foi detectado problema em {entity_name}", - "smoke": "foi detectado fumo em {entity_name}", - "sound": "foram detectadas sons em {entity_name}", - "turned_off": "foi desligado {entity_name}", - "turned_on": "foi ligado {entity_name}", - "unsafe": "ficou inseguro {entity_name}", - "vibration": "foram detectadas vibra\u00e7\u00f5es em {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/ro.json b/homeassistant/components/binary_sensor/.translations/ro.json deleted file mode 100644 index 438822a97f5..00000000000 --- a/homeassistant/components/binary_sensor/.translations/ro.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_off": "{entity_name} oprit", - "is_on": "{entity_name} pornit" - }, - "trigger_type": { - "gas": "{entity_name} a \u00eenceput s\u0103 detecteze gaz", - "hot": "{entity_name} a devenit fierbinte", - "locked": "{entity_name} blocat", - "motion": "{entity_name} a \u00eenceput s\u0103 detecteze mi\u0219care", - "moving": "{entity_name} a \u00eenceput s\u0103 se mi\u0219te", - "no_light": "{entity_name} a oprit detectarea luminii", - "no_motion": "{entity_name} a oprit detectarea mi\u0219c\u0103rii", - "no_problem": "{entity_name} a oprit detectarea problemei", - "no_smoke": "{entity_name} a oprit detectarea fumului", - "no_sound": "{entity_name} a oprit detectarea de sunet", - "no_vibration": "{entity_name} a oprit detectarea vibra\u021biilor", - "not_bat_low": "{entity_name} baterie normal\u0103", - "not_cold": "{entity_name} nu mai este rece", - "not_connected": "{entity_name} deconectat", - "not_hot": "{entity_name} nu mai este fierbinte", - "not_locked": "{entity_name} deblocat", - "not_moist": "{entity_name} a devenit uscat", - "not_moving": "{entity_name} a \u00eencetat mi\u0219carea", - "not_occupied": "{entity_name} a devenit neocupat", - "not_plugged_in": "{entity_name} deconectat", - "not_powered": "{entity_name} nu este alimentat", - "not_present": "{entity_name} nu este prezent", - "not_unsafe": "{entity_name} a devenit sigur", - "occupied": "{entity_name} a devenit ocupat", - "opened": "{entity_name} deschis", - "plugged_in": "{entity_name} conectat", - "powered": "{entity_name} alimentat", - "present": "{entity_name} prezent", - "problem": "{entity_name} a \u00eenceput detectarea unei probleme", - "smoke": "{entity_name} a \u00eenceput s\u0103 detecteze fum", - "sound": "{entity_name} a \u00eenceput s\u0103 detecteze sunetul", - "turned_off": "{entity_name} oprit", - "turned_on": "{entity_name} pornit", - "unsafe": "{entity_name} a devenit nesigur", - "vibration": "{entity_name} a \u00eenceput s\u0103 detecteze vibra\u021biile" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/ru.json b/homeassistant/components/binary_sensor/.translations/ru.json deleted file mode 100644 index fe1323c6744..00000000000 --- a/homeassistant/components/binary_sensor/.translations/ru.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} \u0432 \u0440\u0430\u0437\u0440\u044f\u0436\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_cold": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435", - "is_connected": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", - "is_gas": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0430\u0437", - "is_hot": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432", - "is_light": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u0435\u0442", - "is_locked": "{entity_name} \u0432 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_moist": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043b\u0430\u0433\u0443", - "is_motion": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "is_moving": "{entity_name} \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f", - "is_no_gas": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0430\u0437", - "is_no_light": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u0435\u0442", - "is_no_motion": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "is_no_problem": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", - "is_no_smoke": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u044b\u043c", - "is_no_sound": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0432\u0443\u043a", - "is_no_vibration": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e", - "is_not_bat_low": "{entity_name} \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_not_cold": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435", - "is_not_connected": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", - "is_not_hot": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432", - "is_not_locked": "{entity_name} \u0432 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_not_moist": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043b\u0430\u0433\u0443", - "is_not_moving": "{entity_name} \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f", - "is_not_occupied": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "is_not_open": "{entity_name} \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_not_plugged_in": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", - "is_not_powered": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435", - "is_not_present": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "is_not_unsafe": "{entity_name} \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_occupied": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_open": "{entity_name} \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_plugged_in": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", - "is_powered": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435", - "is_present": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "is_problem": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", - "is_smoke": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u044b\u043c", - "is_sound": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0432\u0443\u043a", - "is_unsafe": "{entity_name} \u0432 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_vibration": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e" - }, - "trigger_type": { - "bat_low": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0437\u043a\u0438\u0439 \u0437\u0430\u0440\u044f\u0434", - "cold": "{entity_name} \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u0435\u0442\u0441\u044f", - "connected": "{entity_name} \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "gas": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0433\u0430\u0437", - "hot": "{entity_name} \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f", - "light": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0442", - "locked": "{entity_name} \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f", - "moist": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043b\u0430\u0433\u0443", - "motion": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "moving": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435", - "no_gas": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0433\u0430\u0437", - "no_light": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0442", - "no_motion": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", - "no_problem": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", - "no_smoke": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u044b\u043c", - "no_sound": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0432\u0443\u043a", - "no_vibration": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e", - "not_bat_low": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u0440\u044f\u0434", - "not_cold": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u0442\u044c\u0441\u044f", - "not_connected": "{entity_name} \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "not_hot": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u044c\u0441\u044f", - "not_locked": "{entity_name} \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f", - "not_moist": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043b\u0430\u0433\u0443", - "not_moving": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435", - "not_occupied": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "not_opened": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "not_plugged_in": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", - "not_powered": "{entity_name} \u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f", - "not_present": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "not_unsafe": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c", - "occupied": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "opened": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "plugged_in": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", - "powered": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f", - "present": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", - "problem": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", - "smoke": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u044b\u043c", - "sound": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0432\u0443\u043a", - "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "unsafe": "{entity_name} \u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c", - "vibration": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/sl.json b/homeassistant/components/binary_sensor/.translations/sl.json deleted file mode 100644 index 234146e2e6f..00000000000 --- a/homeassistant/components/binary_sensor/.translations/sl.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} ima prazno baterijo", - "is_cold": "{entity_name} je hladen", - "is_connected": "{entity_name} je povezan", - "is_gas": "{entity_name} zaznava plin", - "is_hot": "{entity_name} je vro\u010d", - "is_light": "{entity_name} zaznava svetlobo", - "is_locked": "{entity_name} je zaklenjen", - "is_moist": "{entity_name} je vla\u017een", - "is_motion": "{entity_name} zaznava gibanje", - "is_moving": "{entity_name} se premika", - "is_no_gas": "{entity_name} ne zaznava plina", - "is_no_light": "{entity_name} ne zaznava svetlobe", - "is_no_motion": "{entity_name} ne zaznava gibanja", - "is_no_problem": "{entity_name} ne zaznava te\u017eav", - "is_no_smoke": "{entity_name} ne zaznava dima", - "is_no_sound": "{entity_name} ne zaznava zvoka", - "is_no_vibration": "{entity_name} ne zazna vibracij", - "is_not_bat_low": "{entity_name} baterija je polna", - "is_not_cold": "{entity_name} ni hladen", - "is_not_connected": "{entity_name} ni povezan", - "is_not_hot": "{entity_name} ni vro\u010d", - "is_not_locked": "{entity_name} je odklenjen", - "is_not_moist": "{entity_name} je suh", - "is_not_moving": "{entity_name} se ne premika", - "is_not_occupied": "{entity_name} ni zaseden", - "is_not_open": "{entity_name} je zaprt", - "is_not_plugged_in": "{entity_name} je odklopljen", - "is_not_powered": "{entity_name} ni napajan", - "is_not_present": "{entity_name} ni prisoten", - "is_not_unsafe": "{entity_name} je varen", - "is_occupied": "{entity_name} je zaseden", - "is_off": "{entity_name} je izklopljen", - "is_on": "{entity_name} je vklopljen", - "is_open": "{entity_name} je odprt", - "is_plugged_in": "{entity_name} je priklju\u010den", - "is_powered": "{entity_name} je vklopljen", - "is_present": "{entity_name} je prisoten", - "is_problem": "{entity_name} zaznava te\u017eavo", - "is_smoke": "{entity_name} zaznava dim", - "is_sound": "{entity_name} zaznava zvok", - "is_unsafe": "{entity_name} ni varen", - "is_vibration": "{entity_name} zaznava vibracije" - }, - "trigger_type": { - "bat_low": "{entity_name} ima prazno baterijo", - "cold": "{entity_name} je postal hladen", - "connected": "{entity_name} povezan", - "gas": "{entity_name} za\u010del zaznavati plin", - "hot": "{entity_name} je postal vro\u010d", - "light": "{entity_name} za\u010del zaznavati svetlobo", - "locked": "{entity_name} zaklenjen", - "moist": "{entity_name} postal vla\u017een", - "motion": "{entity_name} za\u010del zaznavati gibanje", - "moving": "{entity_name} se je za\u010del premikati", - "no_gas": "{entity_name} prenehal zaznavati plin", - "no_light": "{entity_name} prenehal zaznavati svetlobo", - "no_motion": "{entity_name} prenehal zaznavati gibanje", - "no_problem": "{entity_name} prenehal odkrivati te\u017eavo", - "no_smoke": "{entity_name} prenehal zaznavati dim", - "no_sound": "{entity_name} prenehal zaznavati zvok", - "no_vibration": "{entity_name} prenehal zaznavati vibracije", - "not_bat_low": "{entity_name} ima polno baterijo", - "not_cold": "{entity_name} ni ve\u010d hladen", - "not_connected": "{entity_name} prekinjen", - "not_hot": "{entity_name} ni ve\u010d vro\u010d", - "not_locked": "{entity_name} odklenjen", - "not_moist": "{entity_name} je postalo suh", - "not_moving": "{entity_name} se je prenehal premikati", - "not_occupied": "{entity_name} ni zaseden", - "not_opened": "{entity_name} zaprto", - "not_plugged_in": "{entity_name} odklopljen", - "not_powered": "{entity_name} ni napajan", - "not_present": "{entity_name} ni prisoten", - "not_unsafe": "{entity_name} je postal varen", - "occupied": "{entity_name} postal zaseden", - "opened": "{entity_name} odprl", - "plugged_in": "{entity_name} priklju\u010den", - "powered": "{entity_name} priklopljen", - "present": "{entity_name} prisoten", - "problem": "{entity_name} za\u010del odkrivati te\u017eavo", - "smoke": "{entity_name} za\u010del zaznavati dim", - "sound": "{entity_name} za\u010del zaznavati zvok", - "turned_off": "{entity_name} izklopljen", - "turned_on": "{entity_name} vklopljen", - "unsafe": "{entity_name} je postal nevaren", - "vibration": "{entity_name} je za\u010del odkrivat vibracije" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/sv.json b/homeassistant/components/binary_sensor/.translations/sv.json deleted file mode 100644 index ec5d57daa79..00000000000 --- a/homeassistant/components/binary_sensor/.translations/sv.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name}-batteriet \u00e4r l\u00e5gt", - "is_cold": "{entity_name} \u00e4r kall", - "is_connected": "{entity_name} \u00e4r ansluten", - "is_gas": "{entity_name} detekterar gas", - "is_hot": "{entity_name} \u00e4r varm", - "is_light": "{entity_name} uppt\u00e4cker ljus", - "is_locked": "{entity_name} \u00e4r l\u00e5st", - "is_moist": "{entity_name} \u00e4r fuktig", - "is_motion": "{entity_name} detekterar r\u00f6relse", - "is_moving": "{entity_name} r\u00f6r sig", - "is_no_gas": "{entity_name} uppt\u00e4cker inte gas", - "is_no_light": "{entity_name} uppt\u00e4cker inte ljus", - "is_no_motion": "{entity_name} detekterar inte r\u00f6relse", - "is_no_problem": "{entity_name} uppt\u00e4cker inte problem", - "is_no_smoke": "{entity_name} detekterar inte r\u00f6k", - "is_no_sound": "{entity_name} uppt\u00e4cker inte ljud", - "is_no_vibration": "{entity_name} uppt\u00e4cker inte vibrationer", - "is_not_bat_low": "{entity_name} batteri \u00e4r normalt", - "is_not_cold": "{entity_name} \u00e4r inte kall", - "is_not_connected": "{entity_name} \u00e4r fr\u00e5nkopplad", - "is_not_hot": "{entity_name} \u00e4r inte varm", - "is_not_locked": "{entity_name} \u00e4r ol\u00e5st", - "is_not_moist": "{entity_name} \u00e4r torr", - "is_not_moving": "{entity_name} r\u00f6r sig inte", - "is_not_occupied": "{entity_name} \u00e4r inte upptagen", - "is_not_open": "{entity_name} \u00e4r st\u00e4ngd", - "is_not_plugged_in": "{entity_name} \u00e4r urkopplad", - "is_not_powered": "{entity_name} \u00e4r inte str\u00f6mf\u00f6rd", - "is_not_present": "{entity_name} finns inte", - "is_not_unsafe": "{entity_name} \u00e4r s\u00e4ker", - "is_occupied": "{entity_name} \u00e4r upptagen", - "is_off": "{entity_name} \u00e4r avst\u00e4ngd", - "is_on": "{entity_name} \u00e4r p\u00e5", - "is_open": "{entity_name} \u00e4r \u00f6ppen", - "is_plugged_in": "{entity_name} \u00e4r ansluten", - "is_powered": "{entity_name} \u00e4r str\u00f6mf\u00f6rd", - "is_present": "{entity_name} \u00e4r n\u00e4rvarande", - "is_problem": "{entity_name} uppt\u00e4cker problem", - "is_smoke": "{entity_name} detekterar r\u00f6k", - "is_sound": "{entity_name} uppt\u00e4cker ljud", - "is_unsafe": "{entity_name} \u00e4r os\u00e4ker", - "is_vibration": "{entity_name} uppt\u00e4cker vibrationer" - }, - "trigger_type": { - "bat_low": "{entity_name} batteri l\u00e5gt", - "cold": "{entity_name} blev kall", - "connected": "{entity_name} ansluten", - "gas": "{entity_name} b\u00f6rjade detektera gas", - "hot": "{entity_name} blev varm", - "light": "{entity_name} b\u00f6rjade uppt\u00e4cka ljus", - "locked": "{entity_name} l\u00e5st", - "moist": "{entity_name} blev fuktig", - "motion": "{entity_name} b\u00f6rjade detektera r\u00f6relse", - "moving": "{entity_name} b\u00f6rjade r\u00f6ra sig", - "no_gas": "{entity_name} slutade uppt\u00e4cka gas", - "no_light": "{entity_name} slutade uppt\u00e4cka ljus", - "no_motion": "{entity_name} slutade uppt\u00e4cka r\u00f6relse", - "no_problem": "{entity_name} slutade uppt\u00e4cka problem", - "no_smoke": "{entity_name} slutade detektera r\u00f6k", - "no_sound": "{entity_name} slutade uppt\u00e4cka ljud", - "no_vibration": "{entity_name} slutade uppt\u00e4cka vibrationer", - "not_bat_low": "{entity_name} batteri normalt", - "not_cold": "{entity_name} blev inte kall", - "not_connected": "{entity_name} fr\u00e5nkopplad", - "not_hot": "{entity_name} blev inte varm", - "not_locked": "{entity_name} ol\u00e5st", - "not_moist": "{entity_name} blev torr", - "not_moving": "{entity_name} slutade r\u00f6ra sig", - "not_occupied": "{entity_name} blev inte upptagen", - "not_opened": "{entity_name} st\u00e4ngd", - "not_plugged_in": "{entity_name} urkopplad", - "not_powered": "{entity_name} inte str\u00f6mf\u00f6rd", - "not_present": "{entity_name} inte n\u00e4rvarande", - "not_unsafe": "{entity_name} blev s\u00e4ker", - "occupied": "{entity_name} blev upptagen", - "opened": "{entity_name} \u00f6ppnades", - "plugged_in": "{entity_name} ansluten", - "powered": "{entity_name} str\u00f6mf\u00f6rd", - "present": "{entity_name} n\u00e4rvarande", - "problem": "{entity_name} b\u00f6rjade uppt\u00e4cka problem", - "smoke": "{entity_name} b\u00f6rjade detektera r\u00f6k", - "sound": "{entity_name} b\u00f6rjade uppt\u00e4cka ljud", - "turned_off": "{entity_name} st\u00e4ngdes av", - "turned_on": "{entity_name} slogs p\u00e5", - "unsafe": "{entity_name} blev os\u00e4ker", - "vibration": "{entity_name} b\u00f6rjade detektera vibrationer" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/zh-Hans.json b/homeassistant/components/binary_sensor/.translations/zh-Hans.json deleted file mode 100644 index 9ad8e67e6b8..00000000000 --- a/homeassistant/components/binary_sensor/.translations/zh-Hans.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name} \u7535\u6c60\u7535\u91cf\u4f4e", - "is_cold": "{entity_name} \u8fc7\u51b7", - "is_connected": "{entity_name} \u5df2\u8fde\u63a5", - "is_gas": "{entity_name} \u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f", - "is_hot": "{entity_name} \u8fc7\u70ed", - "is_light": "{entity_name} \u68c0\u6d4b\u5230\u5149\u7ebf", - "is_locked": "{entity_name} \u5df2\u9501\u5b9a", - "is_moist": "{entity_name} \u6f6e\u6e7f", - "is_motion": "{entity_name} \u68c0\u6d4b\u5230\u6709\u4eba", - "is_moving": "{entity_name} \u6b63\u5728\u79fb\u52a8", - "is_no_gas": "{entity_name} \u672a\u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f", - "is_no_light": "{entity_name} \u672a\u68c0\u6d4b\u5230\u5149\u7ebf", - "is_no_motion": "{entity_name} \u672a\u68c0\u6d4b\u5230\u6709\u4eba", - "is_no_problem": "{entity_name} \u672a\u53d1\u73b0\u95ee\u9898", - "is_no_smoke": "{entity_name} \u672a\u68c0\u6d4b\u5230\u70df\u96fe", - "is_no_sound": "{entity_name} \u672a\u68c0\u6d4b\u5230\u58f0\u97f3", - "is_no_vibration": "{entity_name} \u672a\u68c0\u6d4b\u5230\u632f\u52a8", - "is_not_bat_low": "{entity_name} \u7535\u6c60\u7535\u91cf\u6b63\u5e38", - "is_not_cold": "{entity_name} \u4e0d\u51b7", - "is_not_connected": "{entity_name} \u5df2\u65ad\u5f00", - "is_not_hot": "{entity_name} \u4e0d\u70ed", - "is_not_locked": "{entity_name} \u5df2\u89e3\u9501", - "is_not_moist": "{entity_name} \u5e72\u71e5", - "is_not_moving": "{entity_name} \u9759\u6b62", - "is_not_open": "{entity_name} \u5df2\u5173\u95ed", - "is_not_plugged_in": "{entity_name} \u672a\u63d2\u5165", - "is_not_powered": "{entity_name} \u672a\u901a\u7535", - "is_not_present": "{entity_name} \u4e0d\u5728\u5bb6", - "is_not_unsafe": "{entity_name} \u5b89\u5168", - "is_off": "{entity_name} \u5df2\u5173\u95ed", - "is_on": "{entity_name} \u5df2\u5f00\u542f", - "is_open": "{entity_name} \u5df2\u6253\u5f00", - "is_plugged_in": "{entity_name} \u5df2\u63d2\u5165", - "is_powered": "{entity_name} \u5df2\u901a\u7535", - "is_present": "{entity_name} \u5728\u5bb6", - "is_problem": "{entity_name} \u53d1\u73b0\u95ee\u9898", - "is_smoke": "{entity_name} \u68c0\u6d4b\u5230\u70df\u96fe", - "is_sound": "{entity_name} \u68c0\u6d4b\u5230\u58f0\u97f3", - "is_unsafe": "{entity_name} \u4e0d\u5b89\u5168", - "is_vibration": "{entity_name} \u68c0\u6d4b\u5230\u632f\u52a8" - }, - "trigger_type": { - "bat_low": "{entity_name} \u7535\u6c60\u7535\u91cf\u4f4e", - "cold": "{entity_name} \u53d8\u51b7", - "connected": "{entity_name} \u5df2\u8fde\u63a5", - "gas": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f", - "hot": "{entity_name} \u53d8\u70ed", - "light": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u5149\u7ebf" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/.translations/zh-Hant.json b/homeassistant/components/binary_sensor/.translations/zh-Hant.json deleted file mode 100644 index 7b48833dd7b..00000000000 --- a/homeassistant/components/binary_sensor/.translations/zh-Hant.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_bat_low": "{entity_name}\u96fb\u91cf\u904e\u4f4e", - "is_cold": "{entity_name}\u51b7", - "is_connected": "{entity_name}\u5df2\u9023\u7dda", - "is_gas": "{entity_name}\u5075\u6e2c\u5230\u6c23\u9ad4", - "is_hot": "{entity_name}\u71b1", - "is_light": "{entity_name}\u5075\u6e2c\u5230\u5149\u7dda\u4e2d", - "is_locked": "{entity_name}\u5df2\u4e0a\u9396", - "is_moist": "{entity_name}\u6f6e\u6fd5", - "is_motion": "{entity_name}\u5075\u6e2c\u5230\u52d5\u4f5c\u4e2d", - "is_moving": "{entity_name}\u79fb\u52d5\u4e2d", - "is_no_gas": "{entity_name}\u672a\u5075\u6e2c\u5230\u6c23\u9ad4", - "is_no_light": "{entity_name}\u672a\u5075\u6e2c\u5230\u5149\u7dda", - "is_no_motion": "{entity_name}\u672a\u5075\u6e2c\u5230\u52d5\u4f5c", - "is_no_problem": "{entity_name}\u672a\u5075\u6e2c\u5230\u554f\u984c", - "is_no_smoke": "{entity_name}\u672a\u5075\u6e2c\u5230\u7159\u9727", - "is_no_sound": "{entity_name}\u672a\u5075\u6e2c\u5230\u8072\u97f3", - "is_no_vibration": "{entity_name}\u672a\u5075\u6e2c\u5230\u9707\u52d5", - "is_not_bat_low": "{entity_name}\u96fb\u91cf\u6b63\u5e38", - "is_not_cold": "{entity_name}\u4e0d\u51b7", - "is_not_connected": "{entity_name}\u65b7\u7dda", - "is_not_hot": "{entity_name}\u4e0d\u71b1", - "is_not_locked": "{entity_name}\u89e3\u9396", - "is_not_moist": "{entity_name}\u4e7e\u71e5", - "is_not_moving": "{entity_name}\u672a\u5728\u79fb\u52d5", - "is_not_occupied": "{entity_name}\u672a\u6709\u4eba", - "is_not_open": "{entity_name}\u95dc\u9589", - "is_not_plugged_in": "{entity_name}\u672a\u63d2\u5165", - "is_not_powered": "{entity_name}\u672a\u901a\u96fb", - "is_not_present": "{entity_name}\u672a\u51fa\u73fe", - "is_not_unsafe": "{entity_name}\u5b89\u5168", - "is_occupied": "{entity_name}\u6709\u4eba", - "is_off": "{entity_name}\u95dc\u9589", - "is_on": "{entity_name}\u958b\u555f", - "is_open": "{entity_name}\u958b\u555f", - "is_plugged_in": "{entity_name}\u63d2\u5165", - "is_powered": "{entity_name}\u901a\u96fb", - "is_present": "{entity_name}\u51fa\u73fe", - "is_problem": "{entity_name}\u6b63\u5075\u6e2c\u5230\u554f\u984c", - "is_smoke": "{entity_name}\u6b63\u5075\u6e2c\u5230\u7159\u9727", - "is_sound": "{entity_name}\u6b63\u5075\u6e2c\u5230\u8072\u97f3", - "is_unsafe": "{entity_name}\u4e0d\u5b89\u5168", - "is_vibration": "{entity_name}\u6b63\u5075\u6e2c\u5230\u9707\u52d5" - }, - "trigger_type": { - "bat_low": "{entity_name}\u96fb\u91cf\u4f4e", - "cold": "{entity_name}\u5df2\u8b8a\u51b7", - "connected": "{entity_name}\u5df2\u9023\u7dda", - "gas": "{entity_name}\u5df2\u958b\u59cb\u5075\u6e2c\u6c23\u9ad4", - "hot": "{entity_name}\u5df2\u8b8a\u71b1", - "light": "{entity_name}\u5df2\u958b\u59cb\u5075\u6e2c\u5149\u7dda", - "locked": "{entity_name}\u5df2\u4e0a\u9396", - "moist": "{entity_name}\u5df2\u8b8a\u6f6e\u6fd5", - "motion": "{entity_name}\u5df2\u5075\u6e2c\u5230\u52d5\u4f5c", - "moving": "{entity_name}\u958b\u59cb\u79fb\u52d5", - "no_gas": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u6c23\u9ad4", - "no_light": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u5149\u7dda", - "no_motion": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u52d5\u4f5c", - "no_problem": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u554f\u984c", - "no_smoke": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u7159\u9727", - "no_sound": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u8072\u97f3", - "no_vibration": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u9707\u52d5", - "not_bat_low": "{entity_name}\u96fb\u91cf\u6b63\u5e38", - "not_cold": "{entity_name}\u5df2\u4e0d\u51b7", - "not_connected": "{entity_name}\u5df2\u65b7\u7dda", - "not_hot": "{entity_name}\u5df2\u4e0d\u71b1", - "not_locked": "{entity_name}\u5df2\u89e3\u9396", - "not_moist": "{entity_name}\u5df2\u8b8a\u4e7e", - "not_moving": "{entity_name}\u505c\u6b62\u79fb\u52d5", - "not_occupied": "{entity_name}\u672a\u6709\u4eba", - "not_opened": "{entity_name}\u5df2\u95dc\u9589", - "not_plugged_in": "{entity_name}\u672a\u63d2\u5165", - "not_powered": "{entity_name}\u672a\u901a\u96fb", - "not_present": "{entity_name}\u672a\u51fa\u73fe", - "not_unsafe": "{entity_name}\u5df2\u5b89\u5168", - "occupied": "{entity_name}\u8b8a\u6210\u6709\u4eba", - "opened": "{entity_name}\u5df2\u958b\u555f", - "plugged_in": "{entity_name}\u5df2\u63d2\u5165", - "powered": "{entity_name}\u5df2\u901a\u96fb", - "present": "{entity_name}\u5df2\u51fa\u73fe", - "problem": "{entity_name}\u5df2\u5075\u6e2c\u5230\u554f\u984c", - "smoke": "{entity_name}\u5df2\u5075\u6e2c\u5230\u7159\u9727", - "sound": "{entity_name}\u5df2\u5075\u6e2c\u5230\u8072\u97f3", - "turned_off": "{entity_name}\u5df2\u95dc\u9589", - "turned_on": "{entity_name}\u5df2\u958b\u555f", - "unsafe": "{entity_name}\u5df2\u4e0d\u5b89\u5168", - "vibration": "{entity_name}\u5df2\u5075\u6e2c\u5230\u9707\u52d5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/__init__.py b/homeassistant/components/binary_sensor/__init__.py index 73d5e0be458..7dc5d958537 100644 --- a/homeassistant/components/binary_sensor/__init__.py +++ b/homeassistant/components/binary_sensor/__init__.py @@ -23,6 +23,9 @@ ENTITY_ID_FORMAT = DOMAIN + ".{}" # On means low, Off means normal DEVICE_CLASS_BATTERY = "battery" +# On means charging, Off means not charging +DEVICE_CLASS_BATTERY_CHARGING = "battery_charging" + # On means cold, Off means normal DEVICE_CLASS_COLD = "cold" @@ -91,6 +94,7 @@ DEVICE_CLASS_WINDOW = "window" DEVICE_CLASSES = [ DEVICE_CLASS_BATTERY, + DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_COLD, DEVICE_CLASS_CONNECTIVITY, DEVICE_CLASS_DOOR, diff --git a/homeassistant/components/binary_sensor/device_condition.py b/homeassistant/components/binary_sensor/device_condition.py index cb98ec90b5d..999a62b3a80 100644 --- a/homeassistant/components/binary_sensor/device_condition.py +++ b/homeassistant/components/binary_sensor/device_condition.py @@ -15,6 +15,7 @@ from homeassistant.helpers.typing import ConfigType from . import ( DEVICE_CLASS_BATTERY, + DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_COLD, DEVICE_CLASS_CONNECTIVITY, DEVICE_CLASS_DOOR, @@ -44,6 +45,8 @@ DEVICE_CLASS_NONE = "none" CONF_IS_BAT_LOW = "is_bat_low" CONF_IS_NOT_BAT_LOW = "is_not_bat_low" +CONF_IS_CHARGING = "is_charging" +CONF_IS_NOT_CHARGING = "is_not_charging" CONF_IS_COLD = "is_cold" CONF_IS_NOT_COLD = "is_not_cold" CONF_IS_CONNECTED = "is_connected" @@ -85,6 +88,7 @@ CONF_IS_NOT_OPEN = "is_not_open" IS_ON = [ CONF_IS_BAT_LOW, + CONF_IS_CHARGING, CONF_IS_COLD, CONF_IS_CONNECTED, CONF_IS_GAS, @@ -109,6 +113,7 @@ IS_ON = [ IS_OFF = [ CONF_IS_NOT_BAT_LOW, + CONF_IS_NOT_CHARGING, CONF_IS_NOT_COLD, CONF_IS_NOT_CONNECTED, CONF_IS_NOT_HOT, @@ -136,6 +141,10 @@ ENTITY_CONDITIONS = { {CONF_TYPE: CONF_IS_BAT_LOW}, {CONF_TYPE: CONF_IS_NOT_BAT_LOW}, ], + DEVICE_CLASS_BATTERY_CHARGING: [ + {CONF_TYPE: CONF_IS_CHARGING}, + {CONF_TYPE: CONF_IS_NOT_CHARGING}, + ], DEVICE_CLASS_COLD: [{CONF_TYPE: CONF_IS_COLD}, {CONF_TYPE: CONF_IS_NOT_COLD}], DEVICE_CLASS_CONNECTIVITY: [ {CONF_TYPE: CONF_IS_CONNECTED}, @@ -217,16 +226,14 @@ async def async_get_conditions( ) conditions.extend( - ( - { - **template, - "condition": "device", - "device_id": device_id, - "entity_id": entry.entity_id, - "domain": DOMAIN, - } - for template in templates - ) + { + **template, + "condition": "device", + "device_id": device_id, + "entity_id": entry.entity_id, + "domain": DOMAIN, + } + for template in templates ) return conditions diff --git a/homeassistant/components/binary_sensor/device_trigger.py b/homeassistant/components/binary_sensor/device_trigger.py index f4799828c68..d50cc20c1ae 100644 --- a/homeassistant/components/binary_sensor/device_trigger.py +++ b/homeassistant/components/binary_sensor/device_trigger.py @@ -13,6 +13,7 @@ from homeassistant.helpers.entity_registry import async_entries_for_device from . import ( DEVICE_CLASS_BATTERY, + DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_COLD, DEVICE_CLASS_CONNECTIVITY, DEVICE_CLASS_DOOR, @@ -44,6 +45,8 @@ DEVICE_CLASS_NONE = "none" CONF_BAT_LOW = "bat_low" CONF_NOT_BAT_LOW = "not_bat_low" +CONF_CHARGING = "charging" +CONF_NOT_CHARGING = "not_charging" CONF_COLD = "cold" CONF_NOT_COLD = "not_cold" CONF_CONNECTED = "connected" @@ -135,6 +138,10 @@ TURNED_OFF = [ ENTITY_TRIGGERS = { DEVICE_CLASS_BATTERY: [{CONF_TYPE: CONF_BAT_LOW}, {CONF_TYPE: CONF_NOT_BAT_LOW}], + DEVICE_CLASS_BATTERY_CHARGING: [ + {CONF_TYPE: CONF_CHARGING}, + {CONF_TYPE: CONF_NOT_CHARGING}, + ], DEVICE_CLASS_COLD: [{CONF_TYPE: CONF_COLD}, {CONF_TYPE: CONF_NOT_COLD}], DEVICE_CLASS_CONNECTIVITY: [ {CONF_TYPE: CONF_CONNECTED}, @@ -226,16 +233,14 @@ async def async_get_triggers(hass, device_id): ) triggers.extend( - ( - { - **automation, - "platform": "device", - "device_id": device_id, - "entity_id": entry.entity_id, - "domain": DOMAIN, - } - for automation in templates - ) + { + **automation, + "platform": "device", + "device_id": device_id, + "entity_id": entry.entity_id, + "domain": DOMAIN, + } + for automation in templates ) return triggers diff --git a/homeassistant/components/binary_sensor/manifest.json b/homeassistant/components/binary_sensor/manifest.json index cbe95684715..be2feb9d207 100644 --- a/homeassistant/components/binary_sensor/manifest.json +++ b/homeassistant/components/binary_sensor/manifest.json @@ -2,8 +2,6 @@ "domain": "binary_sensor", "name": "Binary Sensor", "documentation": "https://www.home-assistant.io/integrations/binary_sensor", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/binary_sensor/strings.json b/homeassistant/components/binary_sensor/strings.json index e01af8d183e..045fcdae707 100644 --- a/homeassistant/components/binary_sensor/strings.json +++ b/homeassistant/components/binary_sensor/strings.json @@ -1,4 +1,5 @@ { + "title": "Binary sensor", "device_automation": { "condition_type": { "is_bat_low": "{entity_name} battery is low", @@ -87,7 +88,88 @@ "not_opened": "{entity_name} closed", "turned_on": "{entity_name} turned on", "turned_off": "{entity_name} turned off" - + } + }, + "state": { + "battery": { + "off": "Normal", + "on": "Low" + }, + "cold": { + "off": "[%key:component::binary_sensor::state::battery::off%]", + "on": "Cold" + }, + "connectivity": { + "off": "[%key:common::state::disconnected%]", + "on": "[%key:common::state::connected%]" + }, + "door": { + "off": "[%key:common::state::closed%]", + "on": "[%key:common::state::open%]" + }, + "garage_door": { + "off": "[%key:common::state::closed%]", + "on": "[%key:common::state::open%]" + }, + "gas": { + "off": "Clear", + "on": "Detected" + }, + "heat": { + "off": "[%key:component::binary_sensor::state::battery::off%]", + "on": "Hot" + }, + "lock": { + "off": "[%key:common::state::locked%]", + "on": "[%key:common::state::unlocked%]" + }, + "moisture": { + "off": "Dry", + "on": "Wet" + }, + "motion": { + "off": "[%key:component::binary_sensor::state::gas::off%]", + "on": "[%key:component::binary_sensor::state::gas::on%]" + }, + "occupancy": { + "off": "[%key:component::binary_sensor::state::gas::off%]", + "on": "[%key:component::binary_sensor::state::gas::on%]" + }, + "opening": { + "off": "[%key:common::state::closed%]", + "on": "[%key:common::state::open%]" + }, + "presence": { + "off": "[%key:component::device_tracker::state::_::not_home%]", + "on": "[%key:component::device_tracker::state::_::home%]" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Safe", + "on": "Unsafe" + }, + "smoke": { + "off": "[%key:component::binary_sensor::state::gas::off%]", + "on": "[%key:component::binary_sensor::state::gas::on%]" + }, + "sound": { + "off": "[%key:component::binary_sensor::state::gas::off%]", + "on": "[%key:component::binary_sensor::state::gas::on%]" + }, + "vibration": { + "off": "[%key:component::binary_sensor::state::gas::off%]", + "on": "[%key:component::binary_sensor::state::gas::on%]" + }, + "window": { + "off": "[%key:common::state::closed%]", + "on": "[%key:common::state::open%]" + }, + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" } } } diff --git a/homeassistant/components/binary_sensor/translations/af.json b/homeassistant/components/binary_sensor/translations/af.json new file mode 100644 index 00000000000..c0988c3aa68 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/af.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + }, + "battery": { + "off": "Normaal", + "on": "Laag" + }, + "cold": { + "off": "Normaal", + "on": "Koud" + }, + "connectivity": { + "off": "Ontkoppel", + "on": "Gekoppel" + }, + "door": { + "off": "Toe", + "on": "Oop" + }, + "garage_door": { + "off": "Toe", + "on": "Oop" + }, + "gas": { + "off": "Ongemerk", + "on": "Bespeur" + }, + "heat": { + "off": "Normaal", + "on": "Warm" + }, + "lock": { + "off": "Gesluit", + "on": "Oopgesluit" + }, + "moisture": { + "off": "Droog", + "on": "Nat" + }, + "motion": { + "off": "Ongemerk", + "on": "Bespeur" + }, + "occupancy": { + "off": "Ongemerk", + "on": "Bespeur" + }, + "opening": { + "off": "Toe", + "on": "Oop" + }, + "presence": { + "off": "Elders", + "on": "Tuis" + }, + "problem": { + "off": "OK", + "on": "Probleem" + }, + "safety": { + "off": "Veilige", + "on": "Onveilige" + }, + "smoke": { + "off": "Ongemerk", + "on": "Bespeur" + }, + "sound": { + "off": "Ongemerk", + "on": "Bespeur" + }, + "vibration": { + "off": "Ongemerk", + "on": "Bespeur" + }, + "window": { + "off": "Toe", + "on": "Oop" + } + }, + "title": "Bin\u00eare sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ar.json b/homeassistant/components/binary_sensor/translations/ar.json new file mode 100644 index 00000000000..7782421ef1c --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ar.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u062a\u0634\u063a\u064a\u0644" + }, + "battery": { + "off": "\u0637\u0628\u064a\u0639\u064a", + "on": "\u0645\u0646\u062e\u0641\u0636" + }, + "cold": { + "off": "\u0637\u0628\u064a\u0639\u064a", + "on": "\u0628\u0627\u0631\u062f" + }, + "connectivity": { + "off": "\u0645\u0641\u0635\u0648\u0644", + "on": "\u0645\u062a\u0635\u0644" + }, + "door": { + "off": "\u0645\u063a\u0644\u0642", + "on": "\u0645\u0641\u062a\u0648\u062d" + }, + "garage_door": { + "off": "\u0645\u063a\u0644\u0642", + "on": "\u0645\u0641\u062a\u0648\u062d" + }, + "gas": { + "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641", + "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641" + }, + "heat": { + "off": "\u0637\u0628\u064a\u0639\u064a", + "on": "\u062d\u0627\u0631" + }, + "lock": { + "off": "\u0645\u0642\u0641\u0644", + "on": "\u063a\u064a\u0631 \u0645\u0642\u0641\u0644" + }, + "moisture": { + "off": "\u062c\u0627\u0641", + "on": "\u0645\u0628\u0644\u0644" + }, + "motion": { + "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641", + "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641" + }, + "occupancy": { + "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641", + "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641" + }, + "opening": { + "off": "\u0645\u0642\u0641\u0644", + "on": "\u0645\u0641\u062a\u0648\u062d" + }, + "presence": { + "off": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644", + "on": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644" + }, + "problem": { + "off": "\u0645\u0648\u0627\u0641\u0642", + "on": "\u0639\u0637\u0644" + }, + "safety": { + "off": "\u0623\u0645\u0646", + "on": "\u063a\u064a\u0631 \u0623\u0645\u0646" + }, + "smoke": { + "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641", + "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641" + }, + "sound": { + "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641", + "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641" + }, + "vibration": { + "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641", + "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641" + }, + "window": { + "off": "\u0645\u063a\u0644\u0642", + "on": "\u0645\u0641\u062a\u0648\u062d" + } + }, + "title": "\u062c\u0647\u0627\u0632 \u0627\u0633\u062a\u0634\u0639\u0627\u0631 \u062b\u0646\u0627\u0626\u064a" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/bg.json b/homeassistant/components/binary_sensor/translations/bg.json new file mode 100644 index 00000000000..2d969af731e --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/bg.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u0435 \u0438\u0437\u0442\u043e\u0449\u0435\u043d\u0430", + "is_cold": "{entity_name} \u0435 \u0441\u0442\u0443\u0434\u0435\u043d", + "is_connected": "{entity_name} \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d", + "is_gas": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", + "is_hot": "{entity_name} \u0435 \u0433\u043e\u0440\u0435\u0449", + "is_light": "{entity_name} \u0437\u0430\u0441\u0438\u0447\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", + "is_locked": "{entity_name} \u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", + "is_moist": "{entity_name} \u0435 \u0432\u043b\u0430\u0436\u0435\u043d", + "is_motion": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "is_moving": "{entity_name} \u0441\u0435 \u0434\u0432\u0438\u0436\u0438", + "is_no_gas": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", + "is_no_light": "{entity_name} \u043d\u0435 \u0437\u0430\u0441\u0438\u0447\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", + "is_no_motion": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "is_no_problem": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", + "is_no_smoke": "{entity_name} \u043d\u0435 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", + "is_no_sound": "{entity_name} \u043d\u0435 \u0437\u0430\u0441\u0438\u0447\u0430 \u0437\u0432\u0443\u043a", + "is_no_vibration": "{entity_name} \u043d\u0435 \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438", + "is_not_bat_low": "{entity_name} \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u0435 \u0437\u0430\u0440\u0435\u0434\u0435\u043d\u0430", + "is_not_cold": "{entity_name} \u043d\u0435 \u0435 \u0441\u0442\u0443\u0434\u0435\u043d", + "is_not_connected": "{entity_name} \u0435 \u0440\u0430\u0437\u043a\u0430\u0447\u0435\u043d", + "is_not_hot": "{entity_name} \u043d\u0435 \u0435 \u0433\u043e\u0440\u0435\u0449", + "is_not_locked": "{entity_name} \u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d", + "is_not_moist": "{entity_name} \u0435 \u0441\u0443\u0445", + "is_not_moving": "{entity_name} \u043d\u0435 \u0441\u0435 \u0434\u0432\u0438\u0436\u0438", + "is_not_occupied": "{entity_name} \u043d\u0435 \u0435 \u0437\u0430\u0435\u0442", + "is_not_open": "{entity_name} \u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", + "is_not_plugged_in": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "is_not_powered": "{entity_name} \u043d\u0435 \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", + "is_not_present": "{entity_name} \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0446\u0435", + "is_not_unsafe": "{entity_name} \u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", + "is_occupied": "{entity_name} \u0435 \u0437\u0430\u0435\u0442", + "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", + "is_open": "{entity_name} \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d", + "is_plugged_in": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", + "is_powered": "{entity_name} \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", + "is_present": "{entity_name} \u043f\u0440\u0438\u0441\u044a\u0441\u0442\u0432\u0430", + "is_problem": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", + "is_smoke": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", + "is_sound": "{entity_name} \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0437\u0432\u0443\u043a", + "is_unsafe": "{entity_name} \u043d\u0435 \u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", + "is_vibration": "{entity_name} \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438" + }, + "trigger_type": { + "bat_low": "{entity_name} \u0438\u0437\u0442\u043e\u0449\u0435\u043d\u0430 \u0431\u0430\u0442\u0435\u0440\u0438\u044f", + "cold": "{entity_name} \u0441\u0435 \u0438\u0437\u0441\u0442\u0443\u0434\u0438", + "connected": "{entity_name} \u0441\u0432\u044a\u0440\u0437\u0430\u043d", + "gas": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", + "hot": "{entity_name} \u0441\u0435 \u0441\u0442\u043e\u043f\u043b\u0438", + "light": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", + "locked": "{entity_name} \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", + "moist": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u0432\u043b\u0430\u0436\u0435\u043d", + "motion": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "moving": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "no_gas": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0433\u0430\u0437", + "no_light": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430", + "no_motion": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "no_problem": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", + "no_smoke": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", + "no_sound": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0437\u0432\u0443\u043a", + "no_vibration": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438", + "not_bat_low": "{entity_name} \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u043d\u0435 \u0435 \u0438\u0437\u0442\u043e\u0449\u0435\u043d\u0430", + "not_cold": "{entity_name} \u0441\u0435 \u0441\u0442\u043e\u043f\u043b\u0438", + "not_connected": "{entity_name} \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "not_hot": "{entity_name} \u043e\u0445\u043b\u0430\u0434\u043d\u044f", + "not_locked": "{entity_name} \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d", + "not_moist": "{entity_name} \u0441\u0442\u0430\u0432\u0430 \u0441\u0443\u0445", + "not_moving": "{entity_name} \u0441\u043f\u0440\u044f \u0434\u0430 \u0441\u0435 \u0434\u0432\u0438\u0436\u0438", + "not_occupied": "{entity_name} \u0432\u0435\u0447\u0435 \u043d\u0435 \u0435 \u0437\u0430\u0435\u0442", + "not_opened": "{entity_name} \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", + "not_plugged_in": "{entity_name} \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "not_powered": "{entity_name} \u043d\u0435 \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", + "not_present": "{entity_name} \u043d\u0435 \u043f\u0440\u0438\u0441\u044a\u0441\u0442\u0432\u0430", + "not_unsafe": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", + "occupied": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u0437\u0430\u0435\u0442", + "opened": "{entity_name} \u0441\u0435 \u043e\u0442\u0432\u043e\u0440\u0438", + "plugged_in": "{entity_name} \u0441\u0435 \u0432\u043a\u043b\u044e\u0447\u0438", + "powered": "{entity_name} \u0441\u0435 \u0437\u0430\u0445\u0440\u0430\u043d\u0432\u0430", + "present": "{entity_name} \u043f\u0440\u0438\u0441\u044a\u0441\u0442\u0432\u0430", + "problem": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c", + "smoke": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430 \u0434\u0438\u043c", + "sound": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0437\u0432\u0443\u043a", + "turned_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "turned_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", + "unsafe": "{entity_name} \u0441\u0442\u0430\u043d\u0430 \u043e\u043f\u0430\u0441\u0435\u043d", + "vibration": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u0434\u0430 \u0437\u0430\u0441\u0438\u0447\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u0438" + } + }, + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + }, + "battery": { + "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u0430", + "on": "\u0418\u0437\u0442\u043e\u0449\u0435\u043d\u0430" + }, + "cold": { + "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e", + "on": "\u0421\u0442\u0443\u0434\u0435\u043d\u043e" + }, + "connectivity": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0421\u0432\u044a\u0440\u0437\u0430\u043d" + }, + "door": { + "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430", + "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430" + }, + "garage_door": { + "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430", + "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430" + }, + "gas": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d" + }, + "heat": { + "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e", + "on": "\u0413\u043e\u0440\u0435\u0449\u043e" + }, + "lock": { + "off": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043e", + "on": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e" + }, + "moisture": { + "off": "\u0421\u0443\u0445", + "on": "\u041c\u043e\u043a\u044a\u0440" + }, + "motion": { + "off": "\u0411\u0435\u0437 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "on": "\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435" + }, + "occupancy": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d" + }, + "opening": { + "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d", + "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d" + }, + "presence": { + "off": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430", + "on": "\u0412\u043a\u044a\u0449\u0438" + }, + "problem": { + "off": "\u041e\u041a", + "on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c" + }, + "safety": { + "off": "\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d", + "on": "\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442" + }, + "smoke": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d" + }, + "sound": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d" + }, + "vibration": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0430" + }, + "window": { + "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d", + "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d" + } + }, + "title": "\u0414\u0432\u043e\u0438\u0447\u0435\u043d \u0441\u0435\u043d\u0437\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/bs.json b/homeassistant/components/binary_sensor/translations/bs.json new file mode 100644 index 00000000000..58975af616b --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/bs.json @@ -0,0 +1,61 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + }, + "battery": { + "off": "Normalno", + "on": "Nisko" + }, + "connectivity": { + "off": "Nepovezan", + "on": "Povezan" + }, + "gas": { + "off": "\u010cist", + "on": "Otkriven" + }, + "moisture": { + "off": "Suho", + "on": "Mokar" + }, + "motion": { + "off": "\u010cist", + "on": "Otkriven" + }, + "occupancy": { + "off": "\u010cist", + "on": "Otkriven" + }, + "opening": { + "off": "Zatvoren", + "on": "Otvoren" + }, + "presence": { + "off": "Odsutan", + "on": "Kod ku\u0107e" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Siguran", + "on": "Nesiguran" + }, + "smoke": { + "off": "\u010cist", + "on": "Otkriven" + }, + "sound": { + "off": "\u010cist", + "on": "Otkriven" + }, + "vibration": { + "off": "\u010cist", + "on": "Otkriven" + } + }, + "title": "Binarni senzor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ca.json b/homeassistant/components/binary_sensor/translations/ca.json new file mode 100644 index 00000000000..995b5906c53 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ca.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "Bateria de {entity_name} baixa", + "is_cold": "{entity_name} est\u00e0 fred", + "is_connected": "{entity_name} est\u00e0 connectat", + "is_gas": "{entity_name} est\u00e0 detectant gas", + "is_hot": "{entity_name} est\u00e0 calent", + "is_light": "{entity_name} est\u00e0 detectant llum", + "is_locked": "{entity_name} est\u00e0 bloquejat", + "is_moist": "{entity_name} est\u00e0 humit", + "is_motion": "{entity_name} est\u00e0 detectant moviment", + "is_moving": "{entity_name} s'est\u00e0 movent", + "is_no_gas": "{entity_name} no detecta gas", + "is_no_light": "{entity_name} no detecta llum", + "is_no_motion": "{entity_name} no detecta moviment", + "is_no_problem": "{entity_name} no est\u00e0 detectant cap problema", + "is_no_smoke": "{entity_name} no detecta fum", + "is_no_sound": "{entity_name} no detecta so", + "is_no_vibration": "{entity_name} no detecta vibraci\u00f3", + "is_not_bat_low": "Bateria de {entity_name} normal", + "is_not_cold": "{entity_name} no est\u00e0 fred", + "is_not_connected": "{entity_name} est\u00e0 desconnectat", + "is_not_hot": "{entity_name} no est\u00e0 calent", + "is_not_locked": "{entity_name} est\u00e0 desbloquejat", + "is_not_moist": "{entity_name} est\u00e0 sec", + "is_not_moving": "{entity_name} no s'est\u00e0 movent", + "is_not_occupied": "{entity_name} no est\u00e0 ocupat", + "is_not_open": "{entity_name} est\u00e0 tancat", + "is_not_plugged_in": "{entity_name} est\u00e0 desendollat", + "is_not_powered": "{entity_name} no est\u00e0 alimentat", + "is_not_present": "{entity_name} no est\u00e0 present", + "is_not_unsafe": "{entity_name} \u00e9s segur", + "is_occupied": "{entity_name} est\u00e0 ocupat", + "is_off": "{entity_name} est\u00e0 apagat", + "is_on": "{entity_name} est\u00e0 enc\u00e8s", + "is_open": "{entity_name} est\u00e0 obert", + "is_plugged_in": "{entity_name} est\u00e0 endollat", + "is_powered": "{entity_name} est\u00e0 alimentat", + "is_present": "{entity_name} est\u00e0 present", + "is_problem": "{entity_name} est\u00e0 detectant un problema", + "is_smoke": "{entity_name} est\u00e0 detectant fum", + "is_sound": "{entity_name} est\u00e0 detectant so", + "is_unsafe": "{entity_name} \u00e9s insegur", + "is_vibration": "{entity_name} est\u00e0 detectant vibraci\u00f3" + }, + "trigger_type": { + "bat_low": "Bateria de {entity_name} baixa", + "cold": "{entity_name} es torna fred", + "connected": "{entity_name} est\u00e0 connectat", + "gas": "{entity_name} ha comen\u00e7at a detectar gas", + "hot": "{entity_name} es torna calent", + "light": "{entity_name} ha comen\u00e7at a detectar llum", + "locked": "{entity_name} est\u00e0 bloquejat", + "moist": "{entity_name} es torna humit", + "motion": "{entity_name} ha comen\u00e7at a detectar moviment", + "moving": "{entity_name} ha comen\u00e7at a moure's", + "no_gas": "{entity_name} ha deixat de detectar gas", + "no_light": "{entity_name} ha deixat de detectar llum", + "no_motion": "{entity_name} ha deixat de detectar moviment", + "no_problem": "{entity_name} ha deixat de detectar un problema", + "no_smoke": "{entity_name} ha deixat de detectar fum", + "no_sound": "{entity_name} ha deixat de detectar so", + "no_vibration": "{entity_name} ha deixat de detectar vibraci\u00f3", + "not_bat_low": "Bateria de {entity_name} normal", + "not_cold": "{entity_name} es torna no-fred", + "not_connected": "{entity_name} est\u00e0 desconnectat", + "not_hot": "{entity_name} es torna no-calent", + "not_locked": "{entity_name} est\u00e0 desbloquejat", + "not_moist": "{entity_name} es torna sec", + "not_moving": "{entity_name} ha parat de moure's", + "not_occupied": "{entity_name} es desocupa", + "not_opened": "{entity_name} es tanca", + "not_plugged_in": "{entity_name} desendollat", + "not_powered": "{entity_name} no est\u00e0 alimentat", + "not_present": "{entity_name} no est\u00e0 present", + "not_unsafe": "{entity_name} es torna segur", + "occupied": "{entity_name} s'ocupa", + "opened": "{entity_name} s'ha obert", + "plugged_in": "{entity_name} s'ha endollat", + "powered": "{entity_name} alimentat", + "present": "{entity_name} present", + "problem": "{entity_name} ha comen\u00e7at a detectar un problema", + "smoke": "{entity_name} ha comen\u00e7at a detectar fum", + "sound": "{entity_name} ha comen\u00e7at a detectar so", + "turned_off": "{entity_name} apagat", + "turned_on": "{entity_name} enc\u00e8s", + "unsafe": "{entity_name} es torna insegur", + "vibration": "{entity_name} ha comen\u00e7at a detectar vibraci\u00f3" + } + }, + "state": { + "_": { + "off": "Desactivat", + "on": "Activat" + }, + "battery": { + "off": "Normal", + "on": "Baixa" + }, + "cold": { + "off": "Normal", + "on": "Fred" + }, + "connectivity": { + "off": "Desconnectat", + "on": "Connectat" + }, + "door": { + "off": "Tancada", + "on": "Oberta" + }, + "garage_door": { + "off": "Tancada", + "on": "Oberta" + }, + "gas": { + "off": "Lliure", + "on": "Detectat" + }, + "heat": { + "off": "Normal", + "on": "Calent" + }, + "lock": { + "off": "Bloquejat", + "on": "Desbloquejat" + }, + "moisture": { + "off": "Sec", + "on": "Humit" + }, + "motion": { + "off": "Lliure", + "on": "Detectat" + }, + "occupancy": { + "off": "Lliure", + "on": "Detectat" + }, + "opening": { + "off": "Tancat", + "on": "Obert" + }, + "presence": { + "off": "Lliure", + "on": "Detectat" + }, + "problem": { + "off": "Correcte", + "on": "Problema" + }, + "safety": { + "off": "Segur", + "on": "No segur" + }, + "smoke": { + "off": "Lliure", + "on": "Detectat" + }, + "sound": { + "off": "Lliure", + "on": "Detectat" + }, + "vibration": { + "off": "Lliure", + "on": "Detectat" + }, + "window": { + "off": "Tancada", + "on": "Oberta" + } + }, + "title": "Sensor binari" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/cs.json b/homeassistant/components/binary_sensor/translations/cs.json new file mode 100644 index 00000000000..c3ace898a8b --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/cs.json @@ -0,0 +1,91 @@ +{ + "device_automation": { + "trigger_type": { + "moist": "{entity_name} se navlh\u010dil", + "not_opened": "{entity_name} uzav\u0159eno" + } + }, + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + }, + "battery": { + "off": "Norm\u00e1ln\u00ed", + "on": "N\u00edzk\u00fd stav" + }, + "cold": { + "off": "Norm\u00e1ln\u00ed", + "on": "Chladn\u00e9" + }, + "connectivity": { + "off": "Odpojeno", + "on": "P\u0159ipojeno" + }, + "door": { + "off": "Zav\u0159eno", + "on": "Otev\u0159eno" + }, + "garage_door": { + "off": "Zav\u0159eno", + "on": "Otev\u0159eno" + }, + "gas": { + "off": "\u017d\u00e1dn\u00fd plyn", + "on": "Zji\u0161t\u011bn plyn" + }, + "heat": { + "off": "Norm\u00e1ln\u00ed", + "on": "Hork\u00e9" + }, + "lock": { + "off": "Zam\u010deno", + "on": "Odem\u010deno" + }, + "moisture": { + "off": "Sucho", + "on": "Vlhko" + }, + "motion": { + "off": "Bez pohybu", + "on": "Zaznamen\u00e1n pohyb" + }, + "occupancy": { + "off": "Volno", + "on": "Obsazeno" + }, + "opening": { + "off": "Zav\u0159eno", + "on": "Otev\u0159eno" + }, + "presence": { + "off": "Pry\u010d", + "on": "Doma" + }, + "problem": { + "off": "V po\u0159\u00e1dku", + "on": "Probl\u00e9m" + }, + "safety": { + "off": "Zaji\u0161t\u011bno", + "on": "Nezaji\u0161t\u011bno" + }, + "smoke": { + "off": "\u017d\u00e1dn\u00fd d\u00fdm", + "on": "Zji\u0161t\u011bn d\u00fdm" + }, + "sound": { + "off": "Ticho", + "on": "Zachycen zvuk" + }, + "vibration": { + "off": "Klid", + "on": "Zji\u0161t\u011bny vibrace" + }, + "window": { + "off": "Zav\u0159eno", + "on": "Otev\u0159eno" + } + }, + "title": "Bin\u00e1rn\u00ed senzor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/cy.json b/homeassistant/components/binary_sensor/translations/cy.json new file mode 100644 index 00000000000..d28227d7c39 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/cy.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + }, + "battery": { + "off": "Arferol", + "on": "Isel" + }, + "cold": { + "off": "Arferol", + "on": "Oer" + }, + "connectivity": { + "off": "Wedi datgysylltu", + "on": "Cysylltiedig" + }, + "door": { + "off": "Cau", + "on": "Agor" + }, + "garage_door": { + "off": "Cau", + "on": "Agor" + }, + "gas": { + "off": "Clir", + "on": "Wedi'i ganfod" + }, + "heat": { + "off": "Arferol", + "on": "Poeth" + }, + "lock": { + "off": "Cloi", + "on": "Dad-gloi" + }, + "moisture": { + "off": "Sych", + "on": "Gwlyb" + }, + "motion": { + "off": "Clir", + "on": "Wedi'i ganfod" + }, + "occupancy": { + "off": "Clir", + "on": "Wedi'i ganfod" + }, + "opening": { + "off": "Cau", + "on": "Agor" + }, + "presence": { + "off": "Allan", + "on": "Gartref" + }, + "problem": { + "off": "iawn", + "on": "Problem" + }, + "safety": { + "off": "Diogel", + "on": "Anniogel" + }, + "smoke": { + "off": "Clir", + "on": "Wedi'i ganfod" + }, + "sound": { + "off": "Clir", + "on": "Wedi'i ganfod" + }, + "vibration": { + "off": "Clir", + "on": "Wedi'i ganfod" + }, + "window": { + "off": "Cau", + "on": "Agored" + } + }, + "title": "Synhwyrydd deuaidd" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/da.json b/homeassistant/components/binary_sensor/translations/da.json new file mode 100644 index 00000000000..7215c5a3556 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/da.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} batteri er lavt", + "is_cold": "{entity_name} er kold", + "is_connected": "{entity_name} er tilsluttet", + "is_gas": "{entity_name} registrerer gas", + "is_hot": "{entity_name} er varm", + "is_light": "{entity_name} registrerer lys", + "is_locked": "{entity_name} er l\u00e5st", + "is_moist": "{entity_name} er fugtig", + "is_motion": "{entity_name} registrerer bev\u00e6gelse", + "is_moving": "{entity_name} bev\u00e6ger sig", + "is_no_gas": "{entity_name} registrerer ikke gas", + "is_no_light": "{entity_name} registrerer ikke lys", + "is_no_motion": "{entity_name} registrerer ikke bev\u00e6gelse", + "is_no_problem": "{entity_name} registrerer ikke noget problem", + "is_no_smoke": "{entity_name} registrerer ikke r\u00f8g", + "is_no_sound": "{entity_name} registrerer ikke lyd", + "is_no_vibration": "{entity_name} registrerer ikke vibration", + "is_not_bat_low": "{entity_name} batteri er normalt", + "is_not_cold": "{entity_name} er ikke kold", + "is_not_connected": "{entity_name} er afbrudt", + "is_not_hot": "{entity_name} er ikke varm", + "is_not_locked": "{entity_name} er l\u00e5st op", + "is_not_moist": "{entity_name} er t\u00f8r", + "is_not_moving": "{entity_name} bev\u00e6ger sig ikke", + "is_not_occupied": "{entity_name} er ikke optaget", + "is_not_open": "{entity_name} er lukket", + "is_not_plugged_in": "{entity_name} er ikke tilsluttet str\u00f8m", + "is_not_powered": "{entity_name} er ikke tilsluttet str\u00f8m", + "is_not_present": "{entity_name} er ikke til stede", + "is_not_unsafe": "{entity_name} er sikker", + "is_occupied": "{entity_name} er optaget", + "is_off": "{entity_name} er sl\u00e5et fra", + "is_on": "{entity_name} er sl\u00e5et til", + "is_open": "{entity_name} er \u00e5ben", + "is_plugged_in": "{entity_name} er tilsluttet str\u00f8m", + "is_powered": "{entity_name} er tilsluttet str\u00f8m", + "is_present": "{entity_name} er til stede", + "is_problem": "{entity_name} registrerer problem", + "is_smoke": "{entity_name} registrerer r\u00f8g", + "is_sound": "{entity_name} registrerer lyd", + "is_unsafe": "{entity_name} er usikker", + "is_vibration": "{entity_name} registrerer vibration" + }, + "trigger_type": { + "bat_low": "{entity_name} lavt batteriniveau", + "cold": "{entity_name} blev kold", + "connected": "{entity_name} tilsluttet", + "gas": "{entity_name} begyndte at registrere gas", + "hot": "{entity_name} blev varm", + "light": "{entity_name} begyndte at registrere lys", + "locked": "{entity_name} l\u00e5st", + "moist": "{entity_name} blev fugtig", + "motion": "{entity_name} begyndte at registrere bev\u00e6gelse", + "moving": "{entity_name} begyndte at bev\u00e6ge sig", + "no_gas": "{entity_name} stoppede med at registrere gas", + "no_light": "{entity_name} stoppede med at registrere lys", + "no_motion": "{entity_name} stoppede med at registrere bev\u00e6gelse", + "no_problem": "{entity_name} stoppede med at registrere problem", + "no_smoke": "{entity_name} stoppede med at registrere r\u00f8g", + "no_sound": "{entity_name} stoppede med at registrere lyd", + "no_vibration": "{entity_name} stoppede med at registrere vibration", + "not_bat_low": "{entity_name} batteri normalt", + "not_cold": "{entity_name} blev ikke kold", + "not_connected": "{entity_name} afbrudt", + "not_hot": "{entity_name} blev ikke varm", + "not_locked": "{entity_name} l\u00e5st op", + "not_moist": "{entity_name} blev t\u00f8r", + "not_moving": "{entity_name} stoppede med at bev\u00e6ge sig", + "not_occupied": "{entity_name} blev ikke optaget", + "not_opened": "{entity_name} lukket", + "not_plugged_in": "{entity_name} ikke tilsluttet str\u00f8m", + "not_powered": "{entity_name} ikke tilsluttet str\u00f8m", + "not_present": "{entity_name} ikke til stede", + "not_unsafe": "{entity_name} blev sikker", + "occupied": "{entity_name} blev optaget", + "opened": "{entity_name} \u00e5bnet", + "plugged_in": "{entity_name} tilsluttet str\u00f8m", + "powered": "{entity_name} tilsluttet str\u00f8m", + "present": "{entity_name} til stede", + "problem": "{entity_name} begyndte at registrere problem", + "smoke": "{entity_name} begyndte at registrere r\u00f8g", + "sound": "{entity_name} begyndte at registrere lyd", + "turned_off": "{entity_name} slukkede", + "turned_on": "{entity_name} t\u00e6ndte", + "unsafe": "{entity_name} blev usikker", + "vibration": "{entity_name} begyndte at registrere vibration" + } + }, + "state": { + "_": { + "off": "Fra", + "on": "Til" + }, + "battery": { + "off": "Normal", + "on": "Lav" + }, + "cold": { + "off": "Normal", + "on": "Kold" + }, + "connectivity": { + "off": "Afbrudt", + "on": "Forbundet" + }, + "door": { + "off": "Lukket", + "on": "\u00c5ben" + }, + "garage_door": { + "off": "Lukket", + "on": "\u00c5ben" + }, + "gas": { + "off": "Ikke registreret", + "on": "Registreret" + }, + "heat": { + "off": "Normal", + "on": "Varm" + }, + "lock": { + "off": "L\u00e5st", + "on": "Ul\u00e5st" + }, + "moisture": { + "off": "T\u00f8r", + "on": "Fugtig" + }, + "motion": { + "off": "Ikke registreret", + "on": "Registreret" + }, + "occupancy": { + "off": "Ikke registreret", + "on": "Registreret" + }, + "opening": { + "off": "Lukket", + "on": "\u00c5ben" + }, + "presence": { + "off": "Ude", + "on": "Hjemme" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Sikret", + "on": "Usikret" + }, + "smoke": { + "off": "Ikke registreret", + "on": "Registreret" + }, + "sound": { + "off": "Ikke registreret", + "on": "Registreret" + }, + "vibration": { + "off": "Ikke registreret", + "on": "Registreret" + }, + "window": { + "off": "Lukket", + "on": "\u00c5ben" + } + }, + "title": "Bin\u00e6r sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/de.json b/homeassistant/components/binary_sensor/translations/de.json new file mode 100644 index 00000000000..3687536eb5b --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/de.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} Batterie ist schwach", + "is_cold": "{entity_name} ist kalt", + "is_connected": "{entity_name} ist verbunden", + "is_gas": "{entity_name} erkennt Gas", + "is_hot": "{entity_name} ist hei\u00df", + "is_light": "{entity_name} erkennt Licht", + "is_locked": "{entity_name} ist gesperrt", + "is_moist": "{entity_name} ist feucht", + "is_motion": "{entity_name} erkennt Bewegung", + "is_moving": "{entity_name} bewegt sich", + "is_no_gas": "{entity_name} erkennt kein Gas", + "is_no_light": "{entity_name} erkennt kein Licht", + "is_no_motion": "{entity_name} erkennt keine Bewegung", + "is_no_problem": "{entity_name} erkennt kein Problem", + "is_no_smoke": "{entity_name} erkennt keinen Rauch", + "is_no_sound": "{entity_name} erkennt keine Ger\u00e4usche", + "is_no_vibration": "{entity_name} erkennt keine Vibrationen", + "is_not_bat_low": "{entity_name} Batterie ist normal", + "is_not_cold": "{entity_name} ist nicht kalt", + "is_not_connected": "{entity_name} ist nicht verbunden", + "is_not_hot": "{entity_name} ist nicht hei\u00df", + "is_not_locked": "{entity_name} ist entsperrt", + "is_not_moist": "{entity_name} ist trocken", + "is_not_moving": "{entity_name} bewegt sich nicht", + "is_not_occupied": "{entity_name} ist nicht besch\u00e4ftigt / besetzt", + "is_not_open": "{entity_name} ist geschlossen", + "is_not_plugged_in": "{entity_name} ist nicht angeschlossen", + "is_not_powered": "{entity_name} wird nicht mit Strom versorgt", + "is_not_present": "{entity_name} ist nicht vorhanden", + "is_not_unsafe": "{entity_name} ist sicher", + "is_occupied": "{entity_name} ist besch\u00e4ftigt / besetzt", + "is_off": "{entity_name} ist ausgeschaltet", + "is_on": "{entity_name} ist eingeschaltet", + "is_open": "{entity_name} ist offen", + "is_plugged_in": "{entity_name} ist eingesteckt", + "is_powered": "{entity_name} wird mit Strom versorgt", + "is_present": "{entity_name} ist vorhanden", + "is_problem": "{entity_name} hat ein Problem festgestellt", + "is_smoke": "{entity_name} hat Rauch detektiert", + "is_sound": "{entity_name} hat Ger\u00e4usche detektiert", + "is_unsafe": "{entity_name} ist unsicher", + "is_vibration": "{entity_name} erkennt Vibrationen." + }, + "trigger_type": { + "bat_low": "{entity_name} Batterie schwach", + "cold": "{entity_name} wurde kalt", + "connected": "{entity_name} verbunden", + "gas": "{entity_name} hat Gas detektiert", + "hot": "{entity_name} wurde hei\u00df", + "light": "{entity_name} hat Licht detektiert", + "locked": "{entity_name} gesperrt", + "moist": "{entity_name} wurde feucht", + "motion": "{entity_name} hat Bewegungen detektiert", + "moving": "{entity_name} hat angefangen sich zu bewegen", + "no_gas": "{entity_name} hat kein Gas mehr erkannt", + "no_light": "{entity_name} hat kein Licht mehr erkannt", + "no_motion": "{entity_name} hat keine Bewegung mehr erkannt", + "no_problem": "{entity_name} hat kein Problem mehr erkannt", + "no_smoke": "{entity_name} hat keinen Rauch mehr erkannt", + "no_sound": "{entity_name} hat keine Ger\u00e4usche mehr erkannt", + "no_vibration": "{entity_name}hat keine Vibrationen mehr erkannt", + "not_bat_low": "{entity_name} Batterie normal", + "not_cold": "{entity_name} w\u00e4rmte auf", + "not_connected": "{entity_name} getrennt", + "not_hot": "{entity_name} k\u00fchlte ab", + "not_locked": "{entity_name} entsperrt", + "not_moist": "{entity_name} wurde trocken", + "not_moving": "{entity_name} bewegt sich nicht mehr", + "not_occupied": "{entity_name} wurde frei / inaktiv", + "not_opened": "{entity_name} geschlossen", + "not_plugged_in": "{entity_name} ist nicht angeschlossen", + "not_powered": "{entity_name} nicht mit Strom versorgt", + "not_present": "{entity_name} nicht anwesend", + "not_unsafe": "{entity_name} wurde sicher", + "occupied": "{entity_name} wurde besch\u00e4ftigt / besetzt", + "opened": "{entity_name} ge\u00f6ffnet", + "plugged_in": "{entity_name} eingesteckt", + "powered": "{entity_name} wird mit Strom versorgt", + "present": "{entity_name} anwesend", + "problem": "{entity_name} hat ein Problem festgestellt", + "smoke": "{entity_name} detektiert Rauch", + "sound": "{entity_name} detektiert Ger\u00e4usche", + "turned_off": "{entity_name} ausgeschaltet", + "turned_on": "{entity_name} eingeschaltet", + "unsafe": "{entity_name} ist unsicher", + "vibration": "{entity_name} detektiert Vibrationen" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "An" + }, + "battery": { + "off": "Normal", + "on": "Schwach" + }, + "cold": { + "off": "Normal", + "on": "Kalt" + }, + "connectivity": { + "off": "Getrennt", + "on": "Verbunden" + }, + "door": { + "off": "Geschlossen", + "on": "Offen" + }, + "garage_door": { + "off": "Geschlossen", + "on": "Offen" + }, + "gas": { + "off": "Normal", + "on": "Erkannt" + }, + "heat": { + "off": "Normal", + "on": "Hei\u00df" + }, + "lock": { + "off": "Verriegelt", + "on": "Entriegelt" + }, + "moisture": { + "off": "Trocken", + "on": "Nass" + }, + "motion": { + "off": "Ruhig", + "on": "Bewegung erkannt" + }, + "occupancy": { + "off": "Frei", + "on": "Belegt" + }, + "opening": { + "off": "Geschlossen", + "on": "Offen" + }, + "presence": { + "off": "Abwesend", + "on": "Zu Hause" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Sicher", + "on": "Unsicher" + }, + "smoke": { + "off": "OK", + "on": "Rauch erkannt" + }, + "sound": { + "off": "Stille", + "on": "Ger\u00e4usch erkannt" + }, + "vibration": { + "off": "Normal", + "on": "Vibration" + }, + "window": { + "off": "Geschlossen", + "on": "Offen" + } + }, + "title": "Bin\u00e4rsensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/el.json b/homeassistant/components/binary_sensor/translations/el.json new file mode 100644 index 00000000000..f4ed1d55bc2 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/el.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2" + }, + "battery": { + "off": "\u039a\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03cc\u03c2", + "on": "\u03a7\u03b1\u03bc\u03b7\u03bb\u03cc\u03c2" + }, + "cold": { + "off": "\u03a6\u03c5\u03c3\u03b9\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc", + "on": "\u039a\u03c1\u03cd\u03bf" + }, + "connectivity": { + "off": "\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7", + "on": "\u03a3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2" + }, + "door": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03ae", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03ae" + }, + "garage_door": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1" + }, + "gas": { + "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5", + "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5" + }, + "heat": { + "off": "\u03a6\u03c5\u03c3\u03b9\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc", + "on": "\u039a\u03b1\u03c5\u03c4\u03cc" + }, + "lock": { + "off": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf", + "on": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03bf" + }, + "moisture": { + "off": "\u039e\u03b7\u03c1\u03cc", + "on": "\u03a5\u03b3\u03c1\u03cc" + }, + "motion": { + "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5", + "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5" + }, + "occupancy": { + "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5", + "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5" + }, + "opening": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + }, + "presence": { + "off": "\u0395\u03ba\u03c4\u03cc\u03c2", + "on": "\u03a3\u03c0\u03af\u03c4\u03b9" + }, + "problem": { + "off": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9", + "on": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1" + }, + "safety": { + "off": "\u0391\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2", + "on": "\u0391\u03bd\u03b1\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2" + }, + "smoke": { + "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5", + "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5" + }, + "sound": { + "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5", + "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5" + }, + "vibration": { + "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5", + "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5" + }, + "window": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u0394\u03c5\u03b1\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b1\u03b9\u03c3\u03b8\u03b7\u03c4\u03ae\u03c1\u03b1\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/en.json b/homeassistant/components/binary_sensor/translations/en.json new file mode 100644 index 00000000000..c9a1ad15a8b --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/en.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} battery is low", + "is_cold": "{entity_name} is cold", + "is_connected": "{entity_name} is connected", + "is_gas": "{entity_name} is detecting gas", + "is_hot": "{entity_name} is hot", + "is_light": "{entity_name} is detecting light", + "is_locked": "{entity_name} is locked", + "is_moist": "{entity_name} is moist", + "is_motion": "{entity_name} is detecting motion", + "is_moving": "{entity_name} is moving", + "is_no_gas": "{entity_name} is not detecting gas", + "is_no_light": "{entity_name} is not detecting light", + "is_no_motion": "{entity_name} is not detecting motion", + "is_no_problem": "{entity_name} is not detecting problem", + "is_no_smoke": "{entity_name} is not detecting smoke", + "is_no_sound": "{entity_name} is not detecting sound", + "is_no_vibration": "{entity_name} is not detecting vibration", + "is_not_bat_low": "{entity_name} battery is normal", + "is_not_cold": "{entity_name} is not cold", + "is_not_connected": "{entity_name} is disconnected", + "is_not_hot": "{entity_name} is not hot", + "is_not_locked": "{entity_name} is unlocked", + "is_not_moist": "{entity_name} is dry", + "is_not_moving": "{entity_name} is not moving", + "is_not_occupied": "{entity_name} is not occupied", + "is_not_open": "{entity_name} is closed", + "is_not_plugged_in": "{entity_name} is unplugged", + "is_not_powered": "{entity_name} is not powered", + "is_not_present": "{entity_name} is not present", + "is_not_unsafe": "{entity_name} is safe", + "is_occupied": "{entity_name} is occupied", + "is_off": "{entity_name} is off", + "is_on": "{entity_name} is on", + "is_open": "{entity_name} is open", + "is_plugged_in": "{entity_name} is plugged in", + "is_powered": "{entity_name} is powered", + "is_present": "{entity_name} is present", + "is_problem": "{entity_name} is detecting problem", + "is_smoke": "{entity_name} is detecting smoke", + "is_sound": "{entity_name} is detecting sound", + "is_unsafe": "{entity_name} is unsafe", + "is_vibration": "{entity_name} is detecting vibration" + }, + "trigger_type": { + "bat_low": "{entity_name} battery low", + "cold": "{entity_name} became cold", + "connected": "{entity_name} connected", + "gas": "{entity_name} started detecting gas", + "hot": "{entity_name} became hot", + "light": "{entity_name} started detecting light", + "locked": "{entity_name} locked", + "moist": "{entity_name} became moist", + "motion": "{entity_name} started detecting motion", + "moving": "{entity_name} started moving", + "no_gas": "{entity_name} stopped detecting gas", + "no_light": "{entity_name} stopped detecting light", + "no_motion": "{entity_name} stopped detecting motion", + "no_problem": "{entity_name} stopped detecting problem", + "no_smoke": "{entity_name} stopped detecting smoke", + "no_sound": "{entity_name} stopped detecting sound", + "no_vibration": "{entity_name} stopped detecting vibration", + "not_bat_low": "{entity_name} battery normal", + "not_cold": "{entity_name} became not cold", + "not_connected": "{entity_name} disconnected", + "not_hot": "{entity_name} became not hot", + "not_locked": "{entity_name} unlocked", + "not_moist": "{entity_name} became dry", + "not_moving": "{entity_name} stopped moving", + "not_occupied": "{entity_name} became not occupied", + "not_opened": "{entity_name} closed", + "not_plugged_in": "{entity_name} unplugged", + "not_powered": "{entity_name} not powered", + "not_present": "{entity_name} not present", + "not_unsafe": "{entity_name} became safe", + "occupied": "{entity_name} became occupied", + "opened": "{entity_name} opened", + "plugged_in": "{entity_name} plugged in", + "powered": "{entity_name} powered", + "present": "{entity_name} present", + "problem": "{entity_name} started detecting problem", + "smoke": "{entity_name} started detecting smoke", + "sound": "{entity_name} started detecting sound", + "turned_off": "{entity_name} turned off", + "turned_on": "{entity_name} turned on", + "unsafe": "{entity_name} became unsafe", + "vibration": "{entity_name} started detecting vibration" + } + }, + "state": { + "_": { + "off": "Off", + "on": "On" + }, + "battery": { + "off": "Normal", + "on": "Low" + }, + "cold": { + "off": "Normal", + "on": "Cold" + }, + "connectivity": { + "off": "Disconnected", + "on": "Connected" + }, + "door": { + "off": "Closed", + "on": "Open" + }, + "garage_door": { + "off": "Closed", + "on": "Open" + }, + "gas": { + "off": "Clear", + "on": "Detected" + }, + "heat": { + "off": "Normal", + "on": "Hot" + }, + "lock": { + "off": "Locked", + "on": "Unlocked" + }, + "moisture": { + "off": "Dry", + "on": "Wet" + }, + "motion": { + "off": "Clear", + "on": "Detected" + }, + "occupancy": { + "off": "Clear", + "on": "Detected" + }, + "opening": { + "off": "Closed", + "on": "Open" + }, + "presence": { + "off": "Away", + "on": "Home" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Safe", + "on": "Unsafe" + }, + "smoke": { + "off": "Clear", + "on": "Detected" + }, + "sound": { + "off": "Clear", + "on": "Detected" + }, + "vibration": { + "off": "Clear", + "on": "Detected" + }, + "window": { + "off": "Closed", + "on": "Open" + } + }, + "title": "Binary sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/es-419.json b/homeassistant/components/binary_sensor/translations/es-419.json new file mode 100644 index 00000000000..3954724934b --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/es-419.json @@ -0,0 +1,169 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} la bater\u00eda est\u00e1 baja", + "is_cold": "{entity_name} est\u00e1 fr\u00edo", + "is_connected": "{entity_name} est\u00e1 conectado", + "is_gas": "{entity_name} est\u00e1 detectando gas", + "is_hot": "{entity_name} est\u00e1 caliente", + "is_light": "{entity_name} est\u00e1 detectando luz", + "is_locked": "{entity_name} est\u00e1 bloqueado", + "is_moist": "{entity_name} est\u00e1 h\u00famedo", + "is_motion": "{entity_name} est\u00e1 detectando movimiento", + "is_moving": "{entity_name} se est\u00e1 moviendo", + "is_no_gas": "{entity_name} no detecta gas", + "is_no_light": "{entity_name} no detecta luz", + "is_no_motion": "{entity_name} no detecta movimiento", + "is_no_problem": "{entity_name} no detecta el problema", + "is_no_smoke": "{entity_name} no detecta humo", + "is_no_sound": "{entity_name} no detecta sonido", + "is_no_vibration": "{entity_name} no detecta vibraciones", + "is_not_bat_low": "{entity_name} bater\u00eda est\u00e1 normal", + "is_not_cold": "{entity_name} no est\u00e1 fr\u00edo", + "is_not_connected": "{entity_name} est\u00e1 desconectado", + "is_not_hot": "{entity_name} no est\u00e1 caliente", + "is_not_locked": "{entity_name} est\u00e1 desbloqueado", + "is_not_moist": "{entity_name} est\u00e1 seco", + "is_not_moving": "{entity_name} no se mueve", + "is_not_occupied": "{entity_name} no est\u00e1 ocupado", + "is_not_open": "{entity_name} est\u00e1 cerrado", + "is_not_plugged_in": "{entity_name} est\u00e1 desconectado", + "is_not_present": "{entity_name} no est\u00e1 presente", + "is_not_unsafe": "{entity_name} es seguro", + "is_occupied": "{entity_name} est\u00e1 ocupado", + "is_off": "{entity_name} est\u00e1 apagado", + "is_on": "{entity_name} est\u00e1 encendido", + "is_open": "{entity_name} est\u00e1 abierto", + "is_plugged_in": "{entity_name} est\u00e1 enchufado", + "is_powered": "{entity_name} est\u00e1 encendido", + "is_present": "{entity_name} est\u00e1 presente", + "is_problem": "{entity_name} est\u00e1 detectando un problema", + "is_smoke": "{entity_name} est\u00e1 detectando humo", + "is_sound": "{entity_name} est\u00e1 detectando sonido", + "is_unsafe": "{entity_name} es inseguro", + "is_vibration": "{entity_name} est\u00e1 detectando vibraciones" + }, + "trigger_type": { + "bat_low": "{entity_name} bater\u00eda baja", + "cold": "{entity_name} se enfri\u00f3", + "connected": "{entity_name} conectado", + "gas": "{entity_name} comenz\u00f3 a detectar gas", + "hot": "{entity_name} se calent\u00f3", + "light": "{entity_name} comenz\u00f3 a detectar luz", + "locked": "{entity_name} bloqueado", + "moist": "{entity_name} se humedeci\u00f3", + "motion": "{entity_name} comenz\u00f3 a detectar movimiento", + "moving": "{entity_name} comenz\u00f3 a moverse", + "no_gas": "{entity_name} dej\u00f3 de detectar gas", + "no_light": "{entity_name} dej\u00f3 de detectar luz", + "no_motion": "{entity_name} dej\u00f3 de detectar movimiento", + "no_problem": "{entity_name} dej\u00f3 de detectar problemas", + "no_smoke": "{entity_name} dej\u00f3 de detectar humo", + "no_sound": "{entity_name} dej\u00f3 de detectar sonido", + "no_vibration": "{entity_name} dej\u00f3 de detectar vibraciones", + "not_bat_low": "{entity_name} bater\u00eda normal", + "not_cold": "{entity_name} no se enfri\u00f3", + "not_connected": "{entity_name} desconectado", + "not_hot": "{entity_name} no se calent\u00f3", + "not_locked": "{entity_name} desbloqueado", + "not_moist": "{entity_name} se sec\u00f3", + "not_moving": "{entity_name} dej\u00f3 de moverse", + "not_opened": "{entity_name} cerrado", + "not_plugged_in": "{entity_name} desconectado", + "not_present": "{entity_name} no presente", + "not_unsafe": "{entity_name} se volvi\u00f3 seguro", + "occupied": "{entity_name} se ocup\u00f3", + "opened": "{entity_name} abierto", + "plugged_in": "{entity_name} enchufado", + "present": "{entity_name} presente", + "problem": "{entity_name} comenz\u00f3 a detectar problemas", + "smoke": "{entity_name} comenz\u00f3 a detectar humo", + "sound": "{entity_name} comenz\u00f3 a detectar sonido", + "turned_off": "{entity_name} apagado", + "turned_on": "{entity_name} encendido" + } + }, + "state": { + "_": { + "off": "Desactivado", + "on": "Encendido" + }, + "battery": { + "off": "Normal", + "on": "Baja" + }, + "cold": { + "off": "Normal", + "on": "Fr\u00edo" + }, + "connectivity": { + "off": "Desconectado", + "on": "Conectado" + }, + "door": { + "off": "Cerrada", + "on": "Abierta" + }, + "garage_door": { + "off": "Cerrada", + "on": "Abierta" + }, + "gas": { + "off": "Despejado", + "on": "Detectado" + }, + "heat": { + "off": "Normal", + "on": "Caliente" + }, + "lock": { + "off": "Bloqueado", + "on": "Desbloqueado" + }, + "moisture": { + "off": "Seco", + "on": "Humedo" + }, + "motion": { + "off": "Despejado", + "on": "Detectado" + }, + "occupancy": { + "off": "Despejado", + "on": "Detectado" + }, + "opening": { + "off": "Cerrado", + "on": "Abierto" + }, + "presence": { + "off": "Fuera de casa", + "on": "En Casa" + }, + "problem": { + "off": "OK", + "on": "Problema" + }, + "safety": { + "off": "Seguro", + "on": "Inseguro" + }, + "smoke": { + "off": "Despejado", + "on": "Detectado" + }, + "sound": { + "off": "Despejado", + "on": "Detectado" + }, + "vibration": { + "off": "Despejado", + "on": "Detectado" + }, + "window": { + "off": "Cerrada", + "on": "Abierta" + } + }, + "title": "Sensor binario" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/es.json b/homeassistant/components/binary_sensor/translations/es.json new file mode 100644 index 00000000000..75b8a33026f --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/es.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} la bater\u00eda est\u00e1 baja", + "is_cold": "{entity_name} est\u00e1 fr\u00edo", + "is_connected": "{entity_name} est\u00e1 conectado", + "is_gas": "{entity_name} est\u00e1 detectando gas", + "is_hot": "{entity_name} est\u00e1 caliente", + "is_light": "{entity_name} est\u00e1 detectando luz", + "is_locked": "{entity_name} est\u00e1 bloqueado", + "is_moist": "{entity_name} est\u00e1 h\u00famedo", + "is_motion": "{entity_name} est\u00e1 detectando movimiento", + "is_moving": "{entity_name} se est\u00e1 moviendo", + "is_no_gas": "{entity_name} no detecta gas", + "is_no_light": "{entity_name} no detecta la luz", + "is_no_motion": "{entity_name} no detecta movimiento", + "is_no_problem": "{entity_name} no detecta el problema", + "is_no_smoke": "{entity_name} no detecta humo", + "is_no_sound": "{entity_name} no detecta sonido", + "is_no_vibration": "{entity_name} no detecta vibraci\u00f3n", + "is_not_bat_low": "La bater\u00eda de {entity_name} es normal", + "is_not_cold": "{entity_name} no est\u00e1 fr\u00edo", + "is_not_connected": "{entity_name} est\u00e1 desconectado", + "is_not_hot": "{entity_name} no est\u00e1 caliente", + "is_not_locked": "{entity_name} est\u00e1 desbloqueado", + "is_not_moist": "{entity_name} est\u00e1 seco", + "is_not_moving": "{entity_name} no se mueve", + "is_not_occupied": "{entity_name} no est\u00e1 ocupado", + "is_not_open": "{entity_name} est\u00e1 cerrado", + "is_not_plugged_in": "{entity_name} est\u00e1 desconectado", + "is_not_powered": "{entity_name} no tiene alimentaci\u00f3n", + "is_not_present": "{entity_name} no est\u00e1 presente", + "is_not_unsafe": "{entity_name} es seguro", + "is_occupied": "{entity_name} est\u00e1 ocupado", + "is_off": "{entity_name} est\u00e1 apagado", + "is_on": "{entity_name} est\u00e1 activado", + "is_open": "{entity_name} est\u00e1 abierto", + "is_plugged_in": "{entity_name} est\u00e1 conectado", + "is_powered": "{entity_name} est\u00e1 activado", + "is_present": "{entity_name} est\u00e1 presente", + "is_problem": "{entity_name} est\u00e1 detectando un problema", + "is_smoke": "{entity_name} est\u00e1 detectando humo", + "is_sound": "{entity_name} est\u00e1 detectando sonido", + "is_unsafe": "{entity_name} no es seguro", + "is_vibration": "{entity_name} est\u00e1 detectando vibraciones" + }, + "trigger_type": { + "bat_low": "{entity_name} bater\u00eda baja", + "cold": "{entity_name} se enfri\u00f3", + "connected": "{entity_name} conectado", + "gas": "{entity_name} empez\u00f3 a detectar gas", + "hot": "{entity_name} se est\u00e1 calentando", + "light": "{entity_name} empez\u00f3 a detectar la luz", + "locked": "{entity_name} bloqueado", + "moist": "{entity_name} se humedece", + "motion": "{entity_name} comenz\u00f3 a detectar movimiento", + "moving": "{entity_name} empez\u00f3 a moverse", + "no_gas": "{entity_name} dej\u00f3 de detectar gas", + "no_light": "{entity_name} dej\u00f3 de detectar la luz", + "no_motion": "{entity_name} dej\u00f3 de detectar movimiento", + "no_problem": "{entity_name} dej\u00f3 de detectar el problema", + "no_smoke": "{entity_name} dej\u00f3 de detectar humo", + "no_sound": "{entity_name} dej\u00f3 de detectar sonido", + "no_vibration": "{entity_name} dej\u00f3 de detectar vibraci\u00f3n", + "not_bat_low": "{entity_name} bater\u00eda normal", + "not_cold": "{entity_name} no se enfri\u00f3", + "not_connected": "{entity_name} desconectado", + "not_hot": "{entity_name} no se calent\u00f3", + "not_locked": "{entity_name} desbloqueado", + "not_moist": "{entity_name} se sec\u00f3", + "not_moving": "{entity_name} dej\u00f3 de moverse", + "not_occupied": "{entity_name} no est\u00e1 ocupado", + "not_opened": "{entity_name} cerrado", + "not_plugged_in": "{entity_name} desconectado", + "not_powered": "{entity_name} no est\u00e1 activado", + "not_present": "{entity_name} no est\u00e1 presente", + "not_unsafe": "{entity_name} se volvi\u00f3 seguro", + "occupied": "{entity_name} se convirti\u00f3 en ocupado", + "opened": "{entity_name} abierto", + "plugged_in": "{entity_name} conectado", + "powered": "{entity_name} alimentado", + "present": "{entity_name} presente", + "problem": "{entity_name} empez\u00f3 a detectar problemas", + "smoke": "{entity_name} empez\u00f3 a detectar humo", + "sound": "{entity_name} empez\u00f3 a detectar sonido", + "turned_off": "{entity_name} desactivado", + "turned_on": "{entity_name} activado", + "unsafe": "{entity_name} se volvi\u00f3 inseguro", + "vibration": "{entity_name} empez\u00f3 a detectar vibraciones" + } + }, + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + }, + "battery": { + "off": "Normal", + "on": "Bajo" + }, + "cold": { + "off": "Normal", + "on": "Frio" + }, + "connectivity": { + "off": "Desconectado", + "on": "Conectado" + }, + "door": { + "off": "Cerrada", + "on": "Abierta" + }, + "garage_door": { + "off": "Cerrada", + "on": "Abierta" + }, + "gas": { + "off": "No detectado", + "on": "Detectado" + }, + "heat": { + "off": "Normal", + "on": "Caliente" + }, + "lock": { + "off": "Bloqueado", + "on": "Desbloqueado" + }, + "moisture": { + "off": "Seco", + "on": "H\u00famedo" + }, + "motion": { + "off": "Sin movimiento", + "on": "Detectado" + }, + "occupancy": { + "off": "No detectado", + "on": "Detectado" + }, + "opening": { + "off": "Cerrado", + "on": "Abierto" + }, + "presence": { + "off": "Fuera de casa", + "on": "En casa" + }, + "problem": { + "off": "OK", + "on": "Problema" + }, + "safety": { + "off": "Seguro", + "on": "Inseguro" + }, + "smoke": { + "off": "No detectado", + "on": "Detectado" + }, + "sound": { + "off": "No detectado", + "on": "Detectado" + }, + "vibration": { + "off": "No detectado", + "on": "Detectado" + }, + "window": { + "off": "Cerrada", + "on": "Abierta" + } + }, + "title": "Sensor binario" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/et.json b/homeassistant/components/binary_sensor/translations/et.json new file mode 100644 index 00000000000..a9da1be9ee2 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/et.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + }, + "battery": { + "off": "Tavaline", + "on": "Madal" + }, + "cold": { + "off": "Normaalne", + "on": "Jahe" + }, + "connectivity": { + "off": "Lahti \u00fchendatud", + "on": "\u00dchendatud" + }, + "door": { + "off": "Suletud", + "on": "Avatud" + }, + "garage_door": { + "off": "Suletud", + "on": "Avatud" + }, + "gas": { + "off": "Puudub", + "on": "Tuvastatud" + }, + "heat": { + "off": "Normaalne", + "on": "Palav" + }, + "lock": { + "off": "Lukus", + "on": "Lukustamata" + }, + "moisture": { + "off": "Kuiv", + "on": "M\u00e4rg" + }, + "motion": { + "off": "Puudub", + "on": "Tuvastatud" + }, + "occupancy": { + "off": "Puudub", + "on": "Tuvastatud" + }, + "opening": { + "off": "Suletud", + "on": "Avatud" + }, + "presence": { + "off": "Eemal", + "on": "Kodus" + }, + "problem": { + "off": "OK", + "on": "Probleem" + }, + "safety": { + "off": "Ohutu", + "on": "Ohtlik" + }, + "smoke": { + "off": "Puudub", + "on": "Tuvastatud" + }, + "sound": { + "off": "Puudub", + "on": "Tuvastatud" + }, + "vibration": { + "off": "Puudub", + "on": "Tuvastatud" + }, + "window": { + "off": "Suletud", + "on": "Avatud" + } + }, + "title": "Binaarne andur" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/eu.json b/homeassistant/components/binary_sensor/translations/eu.json new file mode 100644 index 00000000000..a60728ce6cd --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/eu.json @@ -0,0 +1,60 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + }, + "battery": { + "off": "Normala", + "on": "Baxua" + }, + "cold": { + "off": "Normala", + "on": "Hotza" + }, + "connectivity": { + "off": "Deskonektatuta", + "on": "Konektatuta" + }, + "door": { + "off": "Itxita", + "on": "Ireki" + }, + "garage_door": { + "off": "Itxita", + "on": "Ireki" + }, + "heat": { + "off": "Normala", + "on": "Beroa" + }, + "lock": { + "off": "Itxita", + "on": "Irekita" + }, + "moisture": { + "off": "Lehorra", + "on": "Buztita" + }, + "opening": { + "off": "Itxita", + "on": "Ireki" + }, + "presence": { + "off": "Kanpoan", + "on": "Etxean" + }, + "problem": { + "off": "Ondo", + "on": "Arazoa" + }, + "safety": { + "off": "Babestuta" + }, + "window": { + "off": "Itxita", + "on": "Ireki" + } + }, + "title": "Sentsore bitarra" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/fa.json b/homeassistant/components/binary_sensor/translations/fa.json new file mode 100644 index 00000000000..4fbfa928fcd --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/fa.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0631\u0648\u0634\u0646" + }, + "battery": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u06a9\u0645" + }, + "cold": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u0633\u0631\u062f" + }, + "connectivity": { + "off": "\u0642\u0637\u0639 ", + "on": "\u0645\u062a\u0635\u0644" + }, + "door": { + "off": "\u0628\u0633\u062a\u0647", + "on": "\u0628\u0627\u0632" + }, + "garage_door": { + "off": "\u0628\u0633\u062a\u0647", + "on": "\u0628\u0627\u0632" + }, + "gas": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f" + }, + "heat": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u062f\u0627\u063a" + }, + "lock": { + "off": "\u0642\u0641\u0644", + "on": "\u0628\u0627\u0632" + }, + "moisture": { + "off": "\u062e\u0634\u06a9", + "on": "\u0645\u0631\u0637\u0648\u0628" + }, + "motion": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f" + }, + "occupancy": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f" + }, + "opening": { + "off": "\u0628\u0633\u062a\u0647 \u0634\u062f\u0647", + "on": "\u0628\u0627\u0632" + }, + "presence": { + "off": "\u0628\u06cc\u0631\u0648\u0646", + "on": "\u062e\u0627\u0646\u0647" + }, + "problem": { + "off": "\u062e\u0648\u0628", + "on": "\u0645\u0634\u06a9\u0644" + }, + "safety": { + "off": "\u0627\u0645\u0646", + "on": "\u0646\u0627 \u0627\u0645\u0646" + }, + "smoke": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f" + }, + "sound": { + "off": "\u0639\u0627\u062f\u06cc", + "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f" + }, + "vibration": { + "off": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646", + "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f" + }, + "window": { + "off": "\u0628\u0633\u062a\u0647", + "on": "\u0628\u0627\u0632" + } + }, + "title": "\u062d\u0633\u06af\u0631 \u0628\u0627\u06cc\u0646\u0631\u06cc" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/fi.json b/homeassistant/components/binary_sensor/translations/fi.json new file mode 100644 index 00000000000..b5c65028e73 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/fi.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + }, + "battery": { + "off": "Normaali", + "on": "Alhainen" + }, + "cold": { + "off": "Normaali", + "on": "Kylm\u00e4" + }, + "connectivity": { + "off": "Ei yhteytt\u00e4", + "on": "Yhdistetty" + }, + "door": { + "off": "Suljettu", + "on": "Auki" + }, + "garage_door": { + "off": "Suljettu", + "on": "Auki" + }, + "gas": { + "off": "Pois", + "on": "Havaittu" + }, + "heat": { + "off": "Normaali", + "on": "Kuuma" + }, + "lock": { + "off": "Lukittu", + "on": "Auki" + }, + "moisture": { + "off": "Kuiva", + "on": "Kostea" + }, + "motion": { + "off": "Ei liikett\u00e4", + "on": "Havaittu" + }, + "occupancy": { + "off": "Ei liikett\u00e4", + "on": "Havaittu" + }, + "opening": { + "off": "Suljettu", + "on": "Auki" + }, + "presence": { + "off": "Poissa", + "on": "Kotona" + }, + "problem": { + "off": "OK", + "on": "Ongelma" + }, + "safety": { + "off": "Turvallinen", + "on": "Vaarallinen" + }, + "smoke": { + "off": "Ei savua", + "on": "Havaittu" + }, + "sound": { + "off": "Ei \u00e4\u00e4nt\u00e4", + "on": "Havaittu" + }, + "vibration": { + "off": "Ei v\u00e4rin\u00e4\u00e4", + "on": "Havaittu" + }, + "window": { + "off": "Suljettu", + "on": "Auki" + } + }, + "title": "Bin\u00e4\u00e4risensori" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/fr.json b/homeassistant/components/binary_sensor/translations/fr.json new file mode 100644 index 00000000000..a27c3368923 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/fr.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} batterie faible", + "is_cold": "{entity_name} est froid", + "is_connected": "{entity_name} est connect\u00e9", + "is_gas": "{entity_name} d\u00e9tecte du gaz", + "is_hot": "{entity_name} est chaud", + "is_light": "{entity_name} d\u00e9tecte de la lumi\u00e8re", + "is_locked": "{entity_name} est verrouill\u00e9", + "is_moist": "{entity_name} est humide", + "is_motion": "{entity_name} d\u00e9tecte du mouvement", + "is_moving": "{entity_name} se d\u00e9place", + "is_no_gas": "{entity_name} ne d\u00e9tecte pas de gaz", + "is_no_light": "{entity_name} ne d\u00e9tecte pas de lumi\u00e8re", + "is_no_motion": "{entity_name} ne d\u00e9tecte pas de mouvement", + "is_no_problem": "{entity_name} ne d\u00e9tecte pas de probl\u00e8me", + "is_no_smoke": "{entity_name} ne d\u00e9tecte pas de fum\u00e9e", + "is_no_sound": "{entity_name} ne d\u00e9tecte pas de son", + "is_no_vibration": "{entity_name} ne d\u00e9tecte pas de vibration", + "is_not_bat_low": "{entity_name} batterie normale", + "is_not_cold": "{entity_name} n'est pas froid", + "is_not_connected": "{entity_name} est d\u00e9connect\u00e9", + "is_not_hot": "{entity_name} n'est pas chaud", + "is_not_locked": "{entity_name} est d\u00e9verrouill\u00e9", + "is_not_moist": "{entity_name} est sec", + "is_not_moving": "{entity_name} ne bouge pas", + "is_not_occupied": "{entity_name} n'est pas occup\u00e9", + "is_not_open": "{entity_name} est ferm\u00e9", + "is_not_plugged_in": "{entity_name} est d\u00e9branch\u00e9", + "is_not_powered": "{entity_name} n'est pas aliment\u00e9", + "is_not_present": "{entity_name} n'est pas pr\u00e9sent", + "is_not_unsafe": "{entity_name} est en s\u00e9curit\u00e9", + "is_occupied": "{entity_name} est occup\u00e9", + "is_off": "{entity_name} est d\u00e9sactiv\u00e9", + "is_on": "{entity_name} est activ\u00e9", + "is_open": "{entity_name} est ouvert", + "is_plugged_in": "{entity_name} est branch\u00e9", + "is_powered": "{entity_name} est aliment\u00e9", + "is_present": "{entity_name} est pr\u00e9sent", + "is_problem": "{entity_name} d\u00e9tecte un probl\u00e8me", + "is_smoke": "{entity_name} d\u00e9tecte de la fum\u00e9e", + "is_sound": "{entity_name} d\u00e9tecte du son", + "is_unsafe": "{entity_name} est dangereux", + "is_vibration": "{entity_name} d\u00e9tecte des vibrations" + }, + "trigger_type": { + "bat_low": "{entity_name} batterie faible", + "cold": "{entity_name} est devenu froid", + "connected": "{entity_name} connect\u00e9", + "gas": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter du gaz", + "hot": "{entity_name} est devenu chaud", + "light": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter la lumi\u00e8re", + "locked": "{entity_name} verrouill\u00e9", + "moist": "{entity_name} est devenu humide", + "motion": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter du mouvement", + "moving": "{entity_name} a commenc\u00e9 \u00e0 se d\u00e9placer", + "no_gas": "{entity_name} a arr\u00eat\u00e9 de d\u00e9tecter le gaz", + "no_light": "{entity_name} a arr\u00eat\u00e9 de d\u00e9tecter la lumi\u00e8re", + "no_motion": "{entity_name} a arr\u00eat\u00e9 de d\u00e9tecter le mouvement", + "no_problem": "{entity_name} a cess\u00e9 de d\u00e9tecter un probl\u00e8me", + "no_smoke": "{entity_name} a cess\u00e9 de d\u00e9tecter de la fum\u00e9e", + "no_sound": "{entity_name} a cess\u00e9 de d\u00e9tecter du bruit", + "no_vibration": "{entity_name} a cess\u00e9 de d\u00e9tecter des vibrations", + "not_bat_low": "{entity_name} batterie normale", + "not_cold": "{entity_name} n'est plus froid", + "not_connected": "{entity_name} d\u00e9connect\u00e9", + "not_hot": "{entity_name} n'est plus chaud", + "not_locked": "{entity_name} d\u00e9verrouill\u00e9", + "not_moist": "{entity_name} est devenu sec", + "not_moving": "{entity_name} a cess\u00e9 de bouger", + "not_occupied": "{entity_name} est devenu non occup\u00e9", + "not_opened": "{entity_name} ferm\u00e9", + "not_plugged_in": "{entity_name} d\u00e9branch\u00e9", + "not_powered": "{entity_name} non aliment\u00e9", + "not_present": "{entity_name} non pr\u00e9sent", + "not_unsafe": "{entity_name} est devenu s\u00fbr", + "occupied": "{entity_name} est devenu occup\u00e9", + "opened": "{entity_name} ouvert", + "plugged_in": "{entity_name} branch\u00e9", + "powered": "{entity_name} aliment\u00e9", + "present": "{entity_name} pr\u00e9sent", + "problem": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter un probl\u00e8me", + "smoke": "{entity_name} commenc\u00e9 \u00e0 d\u00e9tecter la fum\u00e9e", + "sound": "{entity_name} commenc\u00e9 \u00e0 d\u00e9tecter le son", + "turned_off": "{entity_name} est d\u00e9sactiv\u00e9", + "turned_on": "{entity_name} est activ\u00e9", + "unsafe": "{entity_name} est devenu dangereux", + "vibration": "{entity_name} a commenc\u00e9 \u00e0 d\u00e9tecter les vibrations" + } + }, + "state": { + "_": { + "off": "Inactif", + "on": "Actif" + }, + "battery": { + "off": "Normal", + "on": "Faible" + }, + "cold": { + "off": "Normale", + "on": "Froid" + }, + "connectivity": { + "off": "D\u00e9connect\u00e9", + "on": "Connect\u00e9" + }, + "door": { + "off": "Ferm\u00e9e", + "on": "Ouverte" + }, + "garage_door": { + "off": "Ferm\u00e9e", + "on": "Ouverte" + }, + "gas": { + "off": "Non d\u00e9tect\u00e9", + "on": "D\u00e9tect\u00e9" + }, + "heat": { + "off": "Normale", + "on": "Chaud" + }, + "lock": { + "off": "Verrouill\u00e9", + "on": "D\u00e9verrouill\u00e9" + }, + "moisture": { + "off": "Sec", + "on": "Humide" + }, + "motion": { + "off": "RAS", + "on": "D\u00e9tect\u00e9" + }, + "occupancy": { + "off": "RAS", + "on": "D\u00e9tect\u00e9" + }, + "opening": { + "off": "Ferm\u00e9", + "on": "Ouvert" + }, + "presence": { + "off": "Absent", + "on": "Pr\u00e9sent" + }, + "problem": { + "off": "OK", + "on": "Probl\u00e8me" + }, + "safety": { + "off": "S\u00e9curis\u00e9", + "on": "Dangereux" + }, + "smoke": { + "off": "RAS", + "on": "D\u00e9tect\u00e9" + }, + "sound": { + "off": "RAS", + "on": "D\u00e9tect\u00e9" + }, + "vibration": { + "off": "RAS", + "on": "D\u00e9tect\u00e9e" + }, + "window": { + "off": "Ferm\u00e9e", + "on": "Ouverte" + } + }, + "title": "Capteur binaire" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/gsw.json b/homeassistant/components/binary_sensor/translations/gsw.json new file mode 100644 index 00000000000..51fdfdd3cde --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/gsw.json @@ -0,0 +1,64 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + }, + "battery": { + "off": "Normau", + "on": "Nidrig" + }, + "connectivity": { + "off": "Trennt", + "on": "Verbunge" + }, + "gas": { + "off": "Frei", + "on": "Erk\u00e4nnt" + }, + "heat": { + "on": "Heiss" + }, + "moisture": { + "off": "Troch\u00e4", + "on": "Nass" + }, + "motion": { + "off": "Ok", + "on": "Erch\u00e4nt" + }, + "occupancy": { + "off": "Ok", + "on": "Erch\u00e4nt" + }, + "opening": { + "off": "Gschlos\u00e4", + "on": "Off\u00e4" + }, + "presence": { + "off": "Nid Dahei", + "on": "Dahei" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Sicher", + "on": "Unsicher" + }, + "smoke": { + "off": "Ok", + "on": "Erch\u00e4nt" + }, + "sound": { + "off": "Ok", + "on": "Erch\u00e4nt" + }, + "vibration": { + "off": "Ok", + "on": "Erch\u00e4nt" + } + }, + "title": "Bin\u00e4re Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/he.json b/homeassistant/components/binary_sensor/translations/he.json new file mode 100644 index 00000000000..9178d8ef649 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/he.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + }, + "battery": { + "off": "\u05e0\u05d5\u05e8\u05de\u05dc\u05d9", + "on": "\u05e0\u05de\u05d5\u05da" + }, + "cold": { + "off": "\u05e8\u05d2\u05d9\u05dc", + "on": "\u05e7\u05b7\u05e8" + }, + "connectivity": { + "off": "\u05de\u05e0\u05d5\u05ea\u05e7", + "on": "\u05de\u05d7\u05d5\u05d1\u05e8" + }, + "door": { + "off": "\u05e1\u05d2\u05d5\u05e8\u05d4", + "on": "\u05e4\u05ea\u05d5\u05d7\u05d4" + }, + "garage_door": { + "off": "\u05e1\u05d2\u05d5\u05e8\u05d4", + "on": "\u05e4\u05ea\u05d5\u05d7\u05d4" + }, + "gas": { + "off": "\u05e0\u05e7\u05d9", + "on": "\u05d0\u05d5\u05ea\u05e8" + }, + "heat": { + "off": "\u05e8\u05d2\u05d9\u05dc", + "on": "\u05d7\u05dd" + }, + "lock": { + "off": "\u05e0\u05e2\u05d5\u05dc", + "on": "\u05dc\u05d0 \u05e0\u05e2\u05d5\u05dc" + }, + "moisture": { + "off": "\u05d9\u05d1\u05e9", + "on": "\u05e8\u05d8\u05d5\u05d1" + }, + "motion": { + "off": "\u05e0\u05e7\u05d9", + "on": "\u05d6\u05d5\u05d4\u05d4" + }, + "occupancy": { + "off": "\u05e0\u05e7\u05d9", + "on": "\u05d6\u05d5\u05d4\u05d4" + }, + "opening": { + "off": "\u05e1\u05d2\u05d5\u05e8", + "on": "\u05e4\u05ea\u05d5\u05d7" + }, + "presence": { + "off": "\u05dc\u05d0 \u05e0\u05d5\u05db\u05d7", + "on": "\u05e0\u05d5\u05db\u05d7" + }, + "problem": { + "off": "\u05d0\u05d5\u05e7\u05d9\u05d9", + "on": "\u05d1\u05e2\u05d9\u05d9\u05d4" + }, + "safety": { + "off": "\u05d1\u05d8\u05d5\u05d7", + "on": "\u05dc\u05d0 \u05d1\u05d8\u05d5\u05d7" + }, + "smoke": { + "off": "\u05e0\u05e7\u05d9", + "on": "\u05d0\u05d5\u05ea\u05e8" + }, + "sound": { + "off": "\u05e0\u05e7\u05d9", + "on": "\u05d0\u05d5\u05ea\u05e8" + }, + "vibration": { + "off": "\u05e0\u05e7\u05d9", + "on": "\u05d0\u05d5\u05ea\u05e8" + }, + "window": { + "off": "\u05e1\u05d2\u05d5\u05e8", + "on": "\u05e4\u05ea\u05d5\u05d7" + } + }, + "title": "\u05d7\u05d9\u05d9\u05e9\u05df \u05d1\u05d9\u05e0\u05d0\u05e8\u05d9" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/hi.json b/homeassistant/components/binary_sensor/translations/hi.json new file mode 100644 index 00000000000..ca66925b6c9 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/hi.json @@ -0,0 +1,45 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926" + }, + "battery": { + "off": "\u0938\u093e\u0927\u093e\u0930\u0923", + "on": "\u0915\u092e" + }, + "cold": { + "off": "\u0938\u093e\u0927\u093e\u0930\u0923", + "on": "\u0938\u0930\u094d\u0926\u0940" + }, + "connectivity": { + "off": "\u0921\u093f\u0938\u094d\u0915\u0928\u0947\u0915\u094d\u091f \u0915\u093f\u092f\u093e \u0917\u092f\u093e", + "on": "\u091c\u0941\u0921\u093c\u0947 \u0939\u0941\u090f" + }, + "door": { + "off": "\u092c\u0902\u0926", + "on": "\u0916\u0941\u0932\u093e" + }, + "garage_door": { + "off": "\u092c\u0902\u0926", + "on": "\u0916\u0941\u0932\u093e" + }, + "heat": { + "on": "\u0917\u0930\u094d\u092e" + }, + "motion": { + "off": "\u0935\u093f\u0936\u0926", + "on": "\u0905\u0928\u0941\u0938\u0928\u094d\u0927\u093e\u0928\u093f\u0924" + }, + "opening": { + "on": "\u0916\u0941\u0932\u093e" + }, + "presence": { + "on": "\u0918\u0930" + }, + "window": { + "off": "\u092c\u0902\u0926", + "on": "\u0916\u0941\u0932\u0940" + } + }, + "title": "\u092c\u093e\u0907\u0928\u0930\u0940 \u0938\u0947\u0902\u0938\u0930" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/hr.json b/homeassistant/components/binary_sensor/translations/hr.json new file mode 100644 index 00000000000..b1586d5e0f3 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/hr.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + }, + "battery": { + "off": "Normalno", + "on": "Prazna" + }, + "cold": { + "off": "Normalno", + "on": "Hladno" + }, + "connectivity": { + "off": "Nije spojen", + "on": "Spojen" + }, + "door": { + "off": "Zatvoreno", + "on": "Otvori" + }, + "garage_door": { + "off": "Zatvoren", + "on": "Otvoreno" + }, + "gas": { + "off": "\u010cisto", + "on": "Otkriveno" + }, + "heat": { + "off": "Normalno", + "on": "Vru\u0107e" + }, + "lock": { + "off": "Zaklju\u010dano", + "on": "Otklju\u010dano" + }, + "moisture": { + "off": "Suho", + "on": "Mokro" + }, + "motion": { + "off": "\u010cisto", + "on": "Otkriveno" + }, + "occupancy": { + "off": "\u010cisto", + "on": "Otkriveno" + }, + "opening": { + "off": "Zatvoreno", + "on": "Otvoreno" + }, + "presence": { + "off": "Odsutan", + "on": "Doma" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Sigurno", + "on": "Nesigurno" + }, + "smoke": { + "off": "\u010cisto", + "on": "Otkriveno" + }, + "sound": { + "off": "\u010cisto", + "on": "Otkriveno" + }, + "vibration": { + "off": "\u010cisto", + "on": "Otkriveno" + }, + "window": { + "off": "Zatvoreno", + "on": "Otvoreno" + } + }, + "title": "Binarni senzor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/hu.json b/homeassistant/components/binary_sensor/translations/hu.json new file mode 100644 index 00000000000..bb4904f12dc --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/hu.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} akkufesz\u00fclts\u00e9g alacsony", + "is_cold": "{entity_name} hideg", + "is_connected": "{entity_name} csatlakoztatva van", + "is_gas": "{entity_name} g\u00e1zt \u00e9rz\u00e9kel", + "is_hot": "{entity_name} forr\u00f3", + "is_light": "{entity_name} f\u00e9nyt \u00e9rz\u00e9kel", + "is_locked": "{entity_name} z\u00e1rva van", + "is_moist": "{entity_name} nedves", + "is_motion": "{entity_name} mozg\u00e1st \u00e9rz\u00e9kel", + "is_moving": "{entity_name} mozog", + "is_no_gas": "{entity_name} nem \u00e9rz\u00e9kel g\u00e1zt", + "is_no_light": "{entity_name} nem \u00e9rz\u00e9kel f\u00e9nyt", + "is_no_motion": "{entity_name} nem \u00e9rz\u00e9kel mozg\u00e1st", + "is_no_problem": "{entity_name} nem \u00e9szlel probl\u00e9m\u00e1t", + "is_no_smoke": "{entity_name} nem \u00e9rz\u00e9kel f\u00fcst\u00f6t", + "is_no_sound": "{entity_name} nem \u00e9rz\u00e9kel hangot", + "is_no_vibration": "{entity_name} nem \u00e9rz\u00e9kel rezg\u00e9st", + "is_not_bat_low": "{entity_name} akkufesz\u00fclts\u00e9g megfelel\u0151", + "is_not_cold": "{entity_name} nem hideg", + "is_not_connected": "{entity_name} le van csatlakoztatva", + "is_not_hot": "{entity_name} nem forr\u00f3", + "is_not_locked": "{entity_name} nyitva van", + "is_not_moist": "{entity_name} sz\u00e1raz", + "is_not_moving": "{entity_name} nem mozog", + "is_not_occupied": "{entity_name} nem foglalt", + "is_not_open": "{entity_name} z\u00e1rva van", + "is_not_plugged_in": "{entity_name} nincs csatlakoztatva", + "is_not_powered": "{entity_name} nincs fesz\u00fcts\u00e9g alatt", + "is_not_present": "{entity_name} nincs jelen", + "is_not_unsafe": "{entity_name} biztons\u00e1gos", + "is_occupied": "{entity_name} foglalt", + "is_off": "{entity_name} ki van kapcsolva", + "is_on": "{entity_name} be van kapcsolva", + "is_open": "{entity_name} nyitva van", + "is_plugged_in": "{entity_name} csatlakoztatva van", + "is_powered": "{entity_name} fesz\u00fclts\u00e9g alatt van", + "is_present": "{entity_name} jelen van", + "is_problem": "{entity_name} probl\u00e9m\u00e1t \u00e9szlel", + "is_smoke": "{entity_name} f\u00fcst\u00f6t \u00e9rz\u00e9kel", + "is_sound": "{entity_name} hangot \u00e9rz\u00e9kel", + "is_unsafe": "{entity_name} nem biztons\u00e1gos", + "is_vibration": "{entity_name} rezg\u00e9st \u00e9rz\u00e9kel" + }, + "trigger_type": { + "bat_low": "{entity_name} akkufesz\u00fclts\u00e9g alacsony", + "cold": "{entity_name} hideg lett", + "connected": "{entity_name} csatlakozik", + "gas": "{entity_name} g\u00e1zt \u00e9rz\u00e9kel", + "hot": "{entity_name} felforr\u00f3sodik", + "light": "{entity_name} f\u00e9nyt \u00e9rz\u00e9kel", + "locked": "{entity_name} be lett z\u00e1rva", + "moist": "{entity_name} nedves lett", + "motion": "{entity_name} mozg\u00e1st \u00e9rz\u00e9kel", + "moving": "{entity_name} mozog", + "no_gas": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel g\u00e1zt", + "no_light": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel f\u00e9nyt", + "no_motion": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel mozg\u00e1st", + "no_problem": "{entity_name} m\u00e1r nem \u00e9szlel probl\u00e9m\u00e1t", + "no_smoke": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel f\u00fcst\u00f6t", + "no_sound": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel hangot", + "no_vibration": "{entity_name} m\u00e1r nem \u00e9rz\u00e9kel rezg\u00e9st", + "not_bat_low": "{entity_name} akkufesz\u00fclts\u00e9g megfelel\u0151", + "not_cold": "{entity_name} m\u00e1r nem hideg", + "not_connected": "{entity_name} lecsatlakozik", + "not_hot": "{entity_name} m\u00e1r nem forr\u00f3", + "not_locked": "{entity_name} ki lett nyitva", + "not_moist": "{entity_name} sz\u00e1raz lett", + "not_moving": "{entity_name} m\u00e1r nem mozog", + "not_occupied": "{entity_name} m\u00e1r nem foglalt", + "not_opened": "{entity_name} be lett csukva", + "not_plugged_in": "{entity_name} m\u00e1r nincs csatlakoztatva", + "not_powered": "{entity_name} m\u00e1r nincs fesz\u00fcts\u00e9g alatt", + "not_present": "{entity_name} m\u00e1r nincs jelen", + "not_unsafe": "{entity_name} biztons\u00e1gos lett", + "occupied": "{entity_name} foglalt lett", + "opened": "{entity_name} ki lett nyitva", + "plugged_in": "{entity_name} csatlakoztatva lett", + "powered": "{entity_name} m\u00e1r fesz\u00fclts\u00e9g alatt van", + "present": "{entity_name} m\u00e1r jelen van", + "problem": "{entity_name} probl\u00e9m\u00e1t \u00e9szlel", + "smoke": "{entity_name} f\u00fcst\u00f6t \u00e9rz\u00e9kel", + "sound": "{entity_name} hangot \u00e9rz\u00e9kel", + "turned_off": "{entity_name} ki lett kapcsolva", + "turned_on": "{entity_name} be lett kapcsolva", + "unsafe": "{entity_name} m\u00e1r nem biztons\u00e1gos", + "vibration": "{entity_name} rezg\u00e9st \u00e9rz\u00e9kel" + } + }, + "state": { + "_": { + "off": "Ki", + "on": "Be" + }, + "battery": { + "off": "Norm\u00e1l", + "on": "Alacsony" + }, + "cold": { + "off": "Norm\u00e1l", + "on": "Hideg" + }, + "connectivity": { + "off": "Lekapcsol\u00f3dva", + "on": "Kapcsol\u00f3dva" + }, + "door": { + "off": "Z\u00e1rva", + "on": "Nyitva" + }, + "garage_door": { + "off": "Z\u00e1rva", + "on": "Nyitva" + }, + "gas": { + "off": "Norm\u00e1l", + "on": "\u00c9szlelve" + }, + "heat": { + "off": "Norm\u00e1l", + "on": "Meleg" + }, + "lock": { + "off": "Bez\u00e1rva", + "on": "Kinyitva" + }, + "moisture": { + "off": "Sz\u00e1raz", + "on": "Nedves" + }, + "motion": { + "off": "Norm\u00e1l", + "on": "\u00c9szlelve" + }, + "occupancy": { + "off": "Norm\u00e1l", + "on": "\u00c9szlelve" + }, + "opening": { + "off": "Z\u00e1rva", + "on": "Nyitva" + }, + "presence": { + "off": "T\u00e1vol", + "on": "Otthon" + }, + "problem": { + "off": "OK", + "on": "Probl\u00e9ma" + }, + "safety": { + "off": "Biztons\u00e1gos", + "on": "Nem biztons\u00e1gos" + }, + "smoke": { + "off": "Norm\u00e1l", + "on": "\u00c9szlelve" + }, + "sound": { + "off": "Norm\u00e1l", + "on": "\u00c9szlelve" + }, + "vibration": { + "off": "Norm\u00e1l", + "on": "\u00c9szlelve" + }, + "window": { + "off": "Z\u00e1rva", + "on": "Nyitva" + } + }, + "title": "Bin\u00e1ris \u00e9rz\u00e9kel\u0151" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/hy.json b/homeassistant/components/binary_sensor/translations/hy.json new file mode 100644 index 00000000000..7a23642b750 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/hy.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + }, + "battery": { + "off": "\u0546\u0578\u0580\u0574\u0561\u056c \u0567", + "on": "\u0551\u0561\u056e\u0580" + }, + "cold": { + "off": "\u0546\u0578\u0580\u0574\u0561\u056c", + "on": "\u054d\u0561\u057c\u0568" + }, + "connectivity": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e \u0567", + "on": "\u053f\u0561\u057a\u057e\u0561\u056e" + }, + "door": { + "off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567", + "on": "\u0532\u0561\u0581\u0565\u056c" + }, + "garage_door": { + "off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567", + "on": "\u0532\u0561\u0581\u0565\u056c" + }, + "gas": { + "off": "\u0544\u0561\u0584\u0580\u0565\u056c", + "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567" + }, + "heat": { + "off": "\u0546\u0578\u0580\u0574\u0561\u056c", + "on": "\u0539\u0565\u056a" + }, + "lock": { + "off": "\u056f\u0578\u0572\u057a\u057e\u0561\u056e", + "on": "\u0562\u0561\u0581\u0565\u056c \u0567" + }, + "moisture": { + "off": "\u0549\u0578\u0580", + "on": "\u053d\u0578\u0576\u0561\u057e" + }, + "motion": { + "off": "\u0544\u0561\u0584\u0580\u0565\u056c", + "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567" + }, + "occupancy": { + "off": "\u0544\u0561\u0584\u0580\u0565\u056c", + "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567" + }, + "opening": { + "off": "\u0553\u0561\u056f\u057e\u0561\u056e", + "on": "\u0532\u0561\u0581" + }, + "presence": { + "off": "\u0540\u0565\u057c\u0578\u0582", + "on": "\u054f\u0578\u0582\u0576" + }, + "problem": { + "off": "OK", + "on": "\u053d\u0576\u0564\u056b\u0580" + }, + "safety": { + "off": "\u0531\u057a\u0561\u0570\u0578\u057e", + "on": "\u0531\u0576\u057e\u057f\u0561\u0576\u0563" + }, + "smoke": { + "off": "\u0544\u0561\u0584\u0580\u0565\u056c", + "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567" + }, + "sound": { + "off": "\u0544\u0561\u0584\u0580\u0565\u056c", + "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567" + }, + "vibration": { + "off": "\u0544\u0561\u0584\u0580\u0565\u056c", + "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567" + }, + "window": { + "off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567", + "on": "\u0532\u0561\u0581\u0565\u056c" + } + }, + "title": "\u0535\u0580\u056f\u0578\u0582\u0561\u056f\u0561\u0576 \u054d\u0565\u0576\u057d\u0578\u0580" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/id.json b/homeassistant/components/binary_sensor/translations/id.json new file mode 100644 index 00000000000..4ca757da6e5 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/id.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + }, + "battery": { + "off": "Normal", + "on": "Rendah" + }, + "cold": { + "off": "Normal", + "on": "Dingin" + }, + "connectivity": { + "off": "Terputus", + "on": "Terhubung" + }, + "door": { + "off": "Tertutup", + "on": "Terbuka" + }, + "garage_door": { + "off": "Tertutup", + "on": "Terbuka" + }, + "gas": { + "off": "Kosong", + "on": "Terdeteksi" + }, + "heat": { + "off": "Normal", + "on": "Panas" + }, + "lock": { + "off": "Terkunci", + "on": "Terbuka" + }, + "moisture": { + "off": "Kering", + "on": "Basah" + }, + "motion": { + "off": "Tidak ada", + "on": "Terdeteksi" + }, + "occupancy": { + "off": "Tidak ada", + "on": "Terdeteksi" + }, + "opening": { + "off": "Tertutup", + "on": "Terbuka" + }, + "presence": { + "off": "Keluar", + "on": "Rumah" + }, + "problem": { + "off": "Oke", + "on": "Masalah" + }, + "safety": { + "off": "Aman", + "on": "Tidak aman" + }, + "smoke": { + "off": "Tidak ada", + "on": "Terdeteksi" + }, + "sound": { + "off": "Tidak ada", + "on": "Terdeteksi" + }, + "vibration": { + "off": "Tidak ada", + "on": "Terdeteksi" + }, + "window": { + "off": "Tertutup", + "on": "Terbuka" + } + }, + "title": "Sensor biner" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/is.json b/homeassistant/components/binary_sensor/translations/is.json new file mode 100644 index 00000000000..f53316ebd73 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/is.json @@ -0,0 +1,80 @@ +{ + "state": { + "_": { + "off": "Sl\u00f6kkt", + "on": "Kveikt" + }, + "battery": { + "off": "Venjulegt", + "on": "L\u00e1gt" + }, + "cold": { + "off": "Venjulegt", + "on": "Kalt" + }, + "connectivity": { + "off": "Aftengdur", + "on": "Tengdur" + }, + "door": { + "off": "Loku\u00f0", + "on": "Opin" + }, + "garage_door": { + "off": "Loku\u00f0", + "on": "Opin" + }, + "gas": { + "off": "Hreinsa", + "on": "Uppg\u00f6tva\u00f0" + }, + "heat": { + "off": "Venjulegt", + "on": "Heitt" + }, + "lock": { + "off": "L\u00e6st", + "on": "Afl\u00e6st" + }, + "moisture": { + "off": "\u00deurrt", + "on": "Blautt" + }, + "motion": { + "off": "Engin hreyfing", + "on": "Hreyfing" + }, + "occupancy": { + "off": "Hreinsa", + "on": "Uppg\u00f6tva\u00f0" + }, + "presence": { + "off": "Fjarverandi", + "on": "Heima" + }, + "problem": { + "off": "\u00cd lagi", + "on": "Vandam\u00e1l" + }, + "safety": { + "off": "\u00d6ruggt", + "on": "\u00d3\u00f6ruggt" + }, + "smoke": { + "off": "Hreinsa", + "on": "Uppg\u00f6tva\u00f0" + }, + "sound": { + "off": "Hreinsa", + "on": "Uppg\u00f6tva\u00f0" + }, + "vibration": { + "on": "Uppg\u00f6tva\u00f0" + }, + "window": { + "off": "Loka", + "on": "Opna" + } + }, + "title": "Tv\u00edundar skynjari" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/it.json b/homeassistant/components/binary_sensor/translations/it.json new file mode 100644 index 00000000000..b0bb47b77d8 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/it.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} la batteria \u00e8 scarica", + "is_cold": "{entity_name} \u00e8 freddo", + "is_connected": "{entity_name} \u00e8 collegato", + "is_gas": "{entity_name} sta rilevando il gas", + "is_hot": "{entity_name} \u00e8 caldo", + "is_light": "{entity_name} sta rilevando la luce", + "is_locked": "{entity_name} \u00e8 bloccato", + "is_moist": "{entity_name} \u00e8 umido", + "is_motion": "{entity_name} sta rilevando il movimento", + "is_moving": "{entity_name} si sta muovendo", + "is_no_gas": "{entity_name} non sta rilevando il gas", + "is_no_light": "{entity_name} non sta rilevando la luce", + "is_no_motion": "{entity_name} non sta rilevando il movimento", + "is_no_problem": "{entity_name} non sta rilevando un problema", + "is_no_smoke": "{entity_name} non sta rilevando il fumo", + "is_no_sound": "{entity_name} non sta rilevando il suono", + "is_no_vibration": "{entity_name} non sta rilevando la vibrazione", + "is_not_bat_low": "{entity_name} la batteria \u00e8 normale", + "is_not_cold": "{entity_name} non \u00e8 freddo", + "is_not_connected": "{entity_name} \u00e8 disconnesso", + "is_not_hot": "{entity_name} non \u00e8 caldo", + "is_not_locked": "{entity_name} \u00e8 sbloccato", + "is_not_moist": "{entity_name} \u00e8 asciutto", + "is_not_moving": "{entity_name} non si sta muovendo", + "is_not_occupied": "{entity_name} non \u00e8 occupato", + "is_not_open": "{entity_name} \u00e8 chiuso", + "is_not_plugged_in": "{entity_name} \u00e8 collegato", + "is_not_powered": "{entity_name} non \u00e8 alimentato", + "is_not_present": "{entity_name} non \u00e8 presente", + "is_not_unsafe": "{entity_name} \u00e8 sicuro", + "is_occupied": "{entity_name} \u00e8 occupato", + "is_off": "{entity_name} \u00e8 spento", + "is_on": "{entity_name} \u00e8 acceso", + "is_open": "{entity_name} \u00e8 aperto", + "is_plugged_in": "{entity_name} \u00e8 collegato", + "is_powered": "{entity_name} \u00e8 alimentato", + "is_present": "{entity_name} \u00e8 presente", + "is_problem": "{entity_name} sta rilevando un problema", + "is_smoke": "{entity_name} sta rilevando il fumo", + "is_sound": "{entity_name} sta rilevando il suono", + "is_unsafe": "{entity_name} non \u00e8 sicuro", + "is_vibration": "{entity_name} sta rilevando la vibrazione" + }, + "trigger_type": { + "bat_low": "{entity_name} batteria scarica", + "cold": "{entity_name} \u00e8 diventato freddo", + "connected": "{entity_name} connesso", + "gas": "{entity_name} ha iniziato a rilevare il gas", + "hot": "{entity_name} \u00e8 diventato caldo", + "light": "{entity_name} ha iniziato a rilevare la luce", + "locked": "{entity_name} bloccato", + "moist": "{entity_name} diventato umido", + "motion": "{entity_name} ha iniziato a rilevare il movimento", + "moving": "{entity_name} ha iniziato a muoversi", + "no_gas": "{entity_name} ha smesso la rilevazione di gas", + "no_light": "{entity_name} smesso il rilevamento di luce", + "no_motion": "{entity_name} ha smesso di rilevare il movimento", + "no_problem": "{entity_name} ha smesso di rilevare un problema", + "no_smoke": "{entity_name} ha smesso la rilevazione di fumo", + "no_sound": "{entity_name} ha smesso di rilevare il suono", + "no_vibration": "{entity_name} ha smesso di rilevare le vibrazioni", + "not_bat_low": "{entity_name} batteria normale", + "not_cold": "{entity_name} non \u00e8 diventato freddo", + "not_connected": "{entity_name} \u00e8 disconnesso", + "not_hot": "{entity_name} non \u00e8 diventato caldo", + "not_locked": "{entity_name} \u00e8 sbloccato", + "not_moist": "{entity_name} \u00e8 diventato asciutto", + "not_moving": "{entity_name} ha smesso di muoversi", + "not_occupied": "{entity_name} non \u00e8 occupato", + "not_opened": "{entity_name} chiuso", + "not_plugged_in": "{entity_name} \u00e8 scollegato", + "not_powered": "{entity_name} non \u00e8 alimentato", + "not_present": "{entity_name} non \u00e8 presente", + "not_unsafe": "{entity_name} \u00e8 diventato sicuro", + "occupied": "{entity_name} \u00e8 diventato occupato", + "opened": "{entity_name} \u00e8 aperto", + "plugged_in": "{entity_name} \u00e8 collegato", + "powered": "{entity_name} \u00e8 alimentato", + "present": "{entity_name} \u00e8 presente", + "problem": "{entity_name} ha iniziato a rilevare un problema", + "smoke": "{entity_name} ha iniziato la rilevazione di fumo", + "sound": "{entity_name} ha iniziato il rilevamento del suono", + "turned_off": "{entity_name} disattivato", + "turned_on": "{entity_name} attivato", + "unsafe": "{entity_name} diventato non sicuro", + "vibration": "{entity_name} iniziato a rilevare le vibrazioni" + } + }, + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + }, + "battery": { + "off": "Normale", + "on": "Basso" + }, + "cold": { + "off": "Normale", + "on": "Freddo" + }, + "connectivity": { + "off": "Disconnesso", + "on": "Connesso" + }, + "door": { + "off": "Chiusa", + "on": "Aperta" + }, + "garage_door": { + "off": "Chiusa", + "on": "Aperta" + }, + "gas": { + "off": "Assente", + "on": "Rilevato" + }, + "heat": { + "off": "Normale", + "on": "Caldo" + }, + "lock": { + "off": "Bloccato", + "on": "Sbloccato" + }, + "moisture": { + "off": "Asciutto", + "on": "Bagnato" + }, + "motion": { + "off": "Assente", + "on": "Rilevato" + }, + "occupancy": { + "off": "Vuoto", + "on": "Rilevato" + }, + "opening": { + "off": "Chiuso", + "on": "Aperta" + }, + "presence": { + "off": "Fuori casa", + "on": "A casa" + }, + "problem": { + "off": "OK", + "on": "Problema" + }, + "safety": { + "off": "Sicuro", + "on": "Non Sicuro" + }, + "smoke": { + "off": "Assente", + "on": "Rilevato" + }, + "sound": { + "off": "Assente", + "on": "Rilevato" + }, + "vibration": { + "off": "Assente", + "on": "Rilevata" + }, + "window": { + "off": "Chiusa", + "on": "Aperta" + } + }, + "title": "Sensore binario" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ja.json b/homeassistant/components/binary_sensor/translations/ja.json new file mode 100644 index 00000000000..5434f8687bf --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ja.json @@ -0,0 +1,84 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + }, + "battery": { + "off": "\u901a\u5e38", + "on": "\u4f4e" + }, + "cold": { + "off": "\u901a\u5e38", + "on": "\u4f4e\u6e29" + }, + "connectivity": { + "off": "\u5207\u65ad", + "on": "\u63a5\u7d9a\u6e08" + }, + "door": { + "off": "\u9589\u9396", + "on": "\u958b\u653e" + }, + "garage_door": { + "off": "\u9589\u9396", + "on": "\u958b\u653e" + }, + "gas": { + "off": "\u672a\u691c\u51fa", + "on": "\u691c\u51fa" + }, + "heat": { + "off": "\u6b63\u5e38", + "on": "\u9ad8\u6e29" + }, + "lock": { + "off": "\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f", + "on": "\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093" + }, + "moisture": { + "off": "\u30c9\u30e9\u30a4", + "on": "\u30a6\u30a7\u30c3\u30c8" + }, + "motion": { + "off": "\u672a\u691c\u51fa", + "on": "\u691c\u51fa" + }, + "occupancy": { + "off": "\u672a\u691c\u51fa", + "on": "\u691c\u51fa" + }, + "opening": { + "off": "\u9589\u9396", + "on": "\u958b\u653e" + }, + "presence": { + "off": "\u5916\u51fa", + "on": "\u5728\u5b85" + }, + "problem": { + "off": "OK" + }, + "safety": { + "off": "\u5b89\u5168", + "on": "\u5371\u967a" + }, + "smoke": { + "off": "\u672a\u691c\u51fa", + "on": "\u691c\u51fa" + }, + "sound": { + "off": "\u672a\u691c\u51fa", + "on": "\u691c\u51fa" + }, + "vibration": { + "off": "\u672a\u691c\u51fa", + "on": "\u691c\u51fa" + }, + "window": { + "off": "\u9589\u9396", + "on": "\u958b\u653e" + } + }, + "title": "\u30d0\u30a4\u30ca\u30ea\u30bb\u30f3\u30b5\u30fc" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ko.json b/homeassistant/components/binary_sensor/translations/ko.json new file mode 100644 index 00000000000..cd7281cbbb0 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ko.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} \uc758 \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 \ubd80\uc871\ud558\uba74", + "is_cold": "{entity_name} \uc774(\uac00) \ucc28\uac00\uc6b0\uba74", + "is_connected": "{entity_name} \uc774(\uac00) \uc5f0\uacb0\ub418\uc5b4 \uc788\uc73c\uba74", + "is_gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud558\uba74", + "is_hot": "{entity_name} \uc774(\uac00) \ub728\uac70\uc6b0\uba74", + "is_light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud558\uba74", + "is_locked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc73c\uba74", + "is_moist": "{entity_name} \uc774(\uac00) \uc2b5\ud558\uba74", + "is_motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud558\uba74", + "is_moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc774\uba74", + "is_no_gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_no_light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_no_motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_no_problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_no_smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_no_sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_no_vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_not_bat_low": "{entity_name} \uc758 \ubc30\ud130\ub9ac\uac00 \uc815\uc0c1\uc774\uba74", + "is_not_cold": "{entity_name} \uc774(\uac00) \ucc28\uac11\uc9c0 \uc54a\ub2e4\uba74", + "is_not_connected": "{entity_name} \uc758 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc838 \uc788\ub2e4\uba74", + "is_not_hot": "{entity_name} \uc774(\uac00) \ub728\uac81\uc9c0 \uc54a\ub2e4\uba74", + "is_not_locked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc9c0 \uc54a\uc73c\uba74", + "is_not_moist": "{entity_name} \uc774(\uac00) \uac74\uc870\ud558\uba74", + "is_not_moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc774\uc9c0 \uc54a\uc73c\uba74", + "is_not_occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \uc544\ub2c8\uba74", + "is_not_open": "{entity_name} \uc774(\uac00) \ub2eb\ud600 \uc788\uc73c\uba74", + "is_not_plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \ubf51\ud600 \uc788\uc73c\uba74", + "is_not_powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub418\uc9c0 \uc54a\uc73c\uba74", + "is_not_present": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uc911\uc774\uba74", + "is_not_unsafe": "{entity_name} \uc774(\uac00) \uc548\uc804\ud558\uba74", + "is_occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uc774\uba74", + "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", + "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74", + "is_open": "{entity_name} \uc774(\uac00) \uc5f4\ub824 \uc788\uc73c\uba74", + "is_plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \uaf3d\ud600 \uc788\uc73c\uba74", + "is_powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub418\uace0 \uc788\uc73c\uba74", + "is_present": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc911\uc774\uba74", + "is_problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud558\uba74", + "is_smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud558\uba74", + "is_sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud558\uba74", + "is_unsafe": "{entity_name} \uc740(\ub294) \uc548\uc804\ud558\uc9c0 \uc54a\uc73c\uba74", + "is_vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud558\uba74" + }, + "trigger_type": { + "bat_low": "{entity_name} \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 \ubd80\uc871\ud574\uc9c8 \ub54c", + "cold": "{entity_name} \uc774(\uac00) \ucc28\uac00\uc6cc\uc9c8 \ub54c", + "connected": "{entity_name} \uc774(\uac00) \uc5f0\uacb0\ub420 \ub54c", + "gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud560 \ub54c", + "hot": "{entity_name} \uc774(\uac00) \ub728\uac70\uc6cc\uc9c8 \ub54c", + "light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud560 \ub54c", + "locked": "{entity_name} \uc774(\uac00) \uc7a0\uae38 \ub54c", + "moist": "{entity_name} \uc774(\uac00) \uc2b5\ud574\uc9c8 \ub54c", + "motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud560 \ub54c", + "moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc77c \ub54c", + "no_gas": "{entity_name} \uc774(\uac00) \uac00\uc2a4\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "no_light": "{entity_name} \uc774(\uac00) \ube5b\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "no_motion": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc784\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "no_problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "no_smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "no_sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "no_vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud558\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "not_bat_low": "{entity_name} \ubc30\ud130\ub9ac\uac00 \uc815\uc0c1\uc774 \ub420 \ub54c", + "not_cold": "{entity_name} \uc774(\uac00) \ucc28\uac11\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "not_connected": "{entity_name} \uc758 \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9c8 \ub54c", + "not_hot": "{entity_name} \uc774(\uac00) \ub728\uac81\uc9c0 \uc54a\uac8c \ub420 \ub54c", + "not_locked": "{entity_name} \uc758 \uc7a0\uae08\uc774 \ud574\uc81c\ub420 \ub54c", + "not_moist": "{entity_name} \uc774(\uac00) \uac74\uc870\ud574\uc9c8 \ub54c", + "not_moving": "{entity_name} \uc774(\uac00) \uc6c0\uc9c1\uc774\uc9c0 \uc54a\uc744 \ub54c", + "not_occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \uc544\ub2c8\uac8c \ub420 \ub54c", + "not_opened": "{entity_name} \uc774(\uac00) \ub2eb\ud790 \ub54c", + "not_plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \ubf51\ud790 \ub54c", + "not_powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub418\uc9c0 \uc54a\uc744 \ub54c", + "not_present": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uc0c1\ud0dc\uac00 \ub420 \ub54c", + "not_unsafe": "{entity_name} \uc740(\ub294) \uc548\uc804\ud574\uc9c8 \ub54c", + "occupied": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \ub420 \ub54c", + "opened": "{entity_name} \uc774(\uac00) \uc5f4\ub9b4 \ub54c", + "plugged_in": "{entity_name} \ud50c\ub7ec\uadf8\uac00 \uaf3d\ud790 \ub54c", + "powered": "{entity_name} \uc5d0 \uc804\uc6d0\uc774 \uacf5\uae09\ub420 \ub54c", + "present": "{entity_name} \uc774(\uac00) \uc7ac\uc2e4 \uc0c1\ud0dc\uac00 \ub420 \ub54c", + "problem": "{entity_name} \uc774(\uac00) \ubb38\uc81c\ub97c \uac10\uc9c0\ud560 \ub54c", + "smoke": "{entity_name} \uc774(\uac00) \uc5f0\uae30\ub97c \uac10\uc9c0\ud560 \ub54c", + "sound": "{entity_name} \uc774(\uac00) \uc18c\ub9ac\ub97c \uac10\uc9c0\ud560 \ub54c", + "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", + "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c", + "unsafe": "{entity_name} \uc774(\uac00) \uc548\uc804\ud558\uc9c0 \uc54a\uc744 \ub54c", + "vibration": "{entity_name} \uc774(\uac00) \uc9c4\ub3d9\uc744 \uac10\uc9c0\ud560 \ub54c" + } + }, + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + }, + "battery": { + "off": "\ubcf4\ud1b5", + "on": "\ub0ae\uc74c" + }, + "cold": { + "off": "\ubcf4\ud1b5", + "on": "\uc800\uc628" + }, + "connectivity": { + "off": "\uc5f0\uacb0\ud574\uc81c\ub428", + "on": "\uc5f0\uacb0\ub428" + }, + "door": { + "off": "\ub2eb\ud798", + "on": "\uc5f4\ub9bc" + }, + "garage_door": { + "off": "\ub2eb\ud798", + "on": "\uc5f4\ub9bc" + }, + "gas": { + "off": "\uc774\uc0c1\uc5c6\uc74c", + "on": "\uac10\uc9c0\ub428" + }, + "heat": { + "off": "\ubcf4\ud1b5", + "on": "\uace0\uc628" + }, + "lock": { + "off": "\uc7a0\uae40", + "on": "\ud574\uc81c" + }, + "moisture": { + "off": "\uac74\uc870\ud568", + "on": "\uc2b5\ud568" + }, + "motion": { + "off": "\uc774\uc0c1\uc5c6\uc74c", + "on": "\uac10\uc9c0\ub428" + }, + "occupancy": { + "off": "\uc774\uc0c1\uc5c6\uc74c", + "on": "\uac10\uc9c0\ub428" + }, + "opening": { + "off": "\ub2eb\ud798", + "on": "\uc5f4\ub9bc" + }, + "presence": { + "off": "\uc678\ucd9c", + "on": "\uc7ac\uc2e4" + }, + "problem": { + "off": "\ubb38\uc81c\uc5c6\uc74c", + "on": "\ubb38\uc81c\uc788\uc74c" + }, + "safety": { + "off": "\uc548\uc804", + "on": "\uc704\ud5d8" + }, + "smoke": { + "off": "\uc774\uc0c1\uc5c6\uc74c", + "on": "\uac10\uc9c0\ub428" + }, + "sound": { + "off": "\uc774\uc0c1\uc5c6\uc74c", + "on": "\uac10\uc9c0\ub428" + }, + "vibration": { + "off": "\uc774\uc0c1\uc5c6\uc74c", + "on": "\uac10\uc9c0\ub428" + }, + "window": { + "off": "\ub2eb\ud798", + "on": "\uc5f4\ub9bc" + } + }, + "title": "\uc774\uc9c4\uc13c\uc11c" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/lb.json b/homeassistant/components/binary_sensor/translations/lb.json new file mode 100644 index 00000000000..fc29c0e67a8 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/lb.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} Batterie ass niddereg", + "is_cold": "{entity_name} ass kal", + "is_connected": "{entity_name} ass verbonnen", + "is_gas": "{entity_name} entdeckt Gas", + "is_hot": "{entity_name} ass waarm", + "is_light": "{entity_name} entdeckt Luucht", + "is_locked": "{entity_name} ass gespaart", + "is_moist": "{entity_name} ass fiicht", + "is_motion": "{entity_name} entdeckt Beweegung", + "is_moving": "{entity_name} beweegt sech", + "is_no_gas": "{entity_name} entdeckt kee Gas", + "is_no_light": "{entity_name} entdeckt keng Luucht", + "is_no_motion": "{entity_name} entdeckt keng Beweegung", + "is_no_problem": "{entity_name} entdeckt keng Problemer", + "is_no_smoke": "{entity_name} entdeckt keen Damp", + "is_no_sound": "{entity_name} entdeckt keen Toun", + "is_no_vibration": "{entity_name} entdeckt keng Vibratiounen", + "is_not_bat_low": "{entity_name} Batterie ass normal", + "is_not_cold": "{entity_name} ass net kal", + "is_not_connected": "{entity_name} ass d\u00e9connect\u00e9iert", + "is_not_hot": "{entity_name} ass net waarm", + "is_not_locked": "{entity_name} ass entspaart", + "is_not_moist": "{entity_name} ass dr\u00e9chen", + "is_not_moving": "{entity_name} beweegt sech net", + "is_not_occupied": "{entity_name} ass fr\u00e4i", + "is_not_open": "{entity_name} ass zou", + "is_not_plugged_in": "{entity_name} ass net ugeschloss", + "is_not_powered": "{entity_name} ass net aliment\u00e9iert", + "is_not_present": "{entity_name} ass net pr\u00e4sent", + "is_not_unsafe": "{entity_name} ass s\u00e9cher", + "is_occupied": "{entity_name} ass besat", + "is_off": "{entity_name} ass aus", + "is_on": "{entity_name} ass un", + "is_open": "{entity_name} ass op", + "is_plugged_in": "{entity_name} ass ugeschloss", + "is_powered": "{entity_name} ass aliment\u00e9iert", + "is_present": "{entity_name} ass pr\u00e4sent", + "is_problem": "{entity_name} entdeckt Problemer", + "is_smoke": "{entity_name} entdeckt Damp", + "is_sound": "{entity_name} entdeckt Toun", + "is_unsafe": "{entity_name} ass ons\u00e9cher", + "is_vibration": "{entity_name} entdeckt Vibratiounen" + }, + "trigger_type": { + "bat_low": "{entity_name} Batterie niddereg", + "cold": "{entity_name} gouf kal", + "connected": "{entity_name} ass verbonnen", + "gas": "{entity_name} huet ugefaangen Gas z'entdecken", + "hot": "{entity_name} gouf waarm", + "light": "{entity_name} huet ugefange Luucht z'entdecken", + "locked": "{entity_name} gespaart", + "moist": "{entity_name} gouf fiicht", + "motion": "{entity_name} huet ugefaange Beweegung z'entdecken", + "moving": "{entity_name} huet ugefaangen sech ze beweegen", + "no_gas": "{entity_name} huet opgehale Gas z'entdecken", + "no_light": "{entity_name} huet opgehale Luucht z'entdecken", + "no_motion": "{entity_name} huet opgehale Beweegung z'entdecken", + "no_problem": "{entity_name} huet opgehale Problemer z'entdecken", + "no_smoke": "{entity_name} huet opgehale Damp z'entdecken", + "no_sound": "{entity_name} huet opgehale Toun z'entdecken", + "no_vibration": "{entity_name} huet opgehale Vibratiounen z'entdecken", + "not_bat_low": "{entity_name} Batterie normal", + "not_cold": "{entity_name} gouf net kal", + "not_connected": "{entity_name} d\u00e9connect\u00e9iert", + "not_hot": "{entity_name} gouf net waarm", + "not_locked": "{entity_name} entspaart", + "not_moist": "{entity_name} gouf dr\u00e9chen", + "not_moving": "{entity_name} huet opgehale sech ze beweegen", + "not_occupied": "{entity_name} gouf fr\u00e4i", + "not_opened": "{entity_name} gouf zougemaach", + "not_plugged_in": "{entity_name} net ugeschloss", + "not_powered": "{entity_name} net aliment\u00e9iert", + "not_present": "{entity_name} net pr\u00e4sent", + "not_unsafe": "{entity_name} gouf s\u00e9cher", + "occupied": "{entity_name} gouf besat", + "opened": "{entity_name} gouf opgemaach", + "plugged_in": "{entity_name} ugeschloss", + "powered": "{entity_name} aliment\u00e9iert", + "present": "{entity_name} pr\u00e4sent", + "problem": "{entity_name} huet ugefaange Problemer z'entdecken", + "smoke": "{entity_name} huet ugefaangen Damp z'entdecken", + "sound": "{entity_name} huet ugefaangen Toun z'entdecken", + "turned_off": "{entity_name} gouf ausgeschalt", + "turned_on": "{entity_name} gouf ugeschalt", + "unsafe": "{entity_name} gouf ons\u00e9cher", + "vibration": "{entity_name} huet ugefaange Vibratiounen z'entdecken" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "Un" + }, + "battery": { + "off": "Normal", + "on": "Niddreg" + }, + "cold": { + "off": "Normal", + "on": "Kal" + }, + "connectivity": { + "off": "Net Verbonnen", + "on": "Verbonnen" + }, + "door": { + "off": "Zou", + "on": "Op" + }, + "garage_door": { + "off": "Zou", + "on": "Op" + }, + "gas": { + "off": "Kloer", + "on": "Detekt\u00e9iert" + }, + "heat": { + "off": "Normal", + "on": "Waarm" + }, + "lock": { + "off": "Gespaart", + "on": "Net gespaart" + }, + "moisture": { + "off": "Dr\u00e9chen", + "on": "Naass" + }, + "motion": { + "off": "Roueg", + "on": "Detekt\u00e9iert" + }, + "occupancy": { + "off": "Roueg", + "on": "Detekt\u00e9iert" + }, + "opening": { + "off": "Zou", + "on": "Op" + }, + "presence": { + "off": "\u00cbnnerwee", + "on": "Doheem" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "S\u00e9cher", + "on": "Ons\u00e9cher" + }, + "smoke": { + "off": "Kloer", + "on": "Detekt\u00e9iert" + }, + "sound": { + "off": "Roueg", + "on": "Detekt\u00e9iert" + }, + "vibration": { + "off": "Kloer", + "on": "Detekt\u00e9iert" + }, + "window": { + "off": "Zou", + "on": "Op" + } + }, + "title": "Bin\u00e4ren Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/lt.json b/homeassistant/components/binary_sensor/translations/lt.json new file mode 100644 index 00000000000..1214ac53470 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/lt.json @@ -0,0 +1,60 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + }, + "connectivity": { + "off": "Atsijung\u0119s", + "on": "Prisijung\u0119s" + }, + "door": { + "off": "U\u017edaryta", + "on": "Atidaryta" + }, + "garage_door": { + "off": "U\u017edaryta", + "on": "Atidaryta" + }, + "gas": { + "off": "Neaptikta", + "on": "Aptikta" + }, + "moisture": { + "off": "Sausa", + "on": "\u0160lapia" + }, + "motion": { + "off": "Nejuda", + "on": "Aptiktas judesys" + }, + "occupancy": { + "off": "Laisva", + "on": "U\u017eimta" + }, + "opening": { + "off": "U\u017edaryta", + "on": "Atidaryta" + }, + "safety": { + "off": "Saugu", + "on": "Nesaugu" + }, + "smoke": { + "off": "Neaptikta", + "on": "Aptikta" + }, + "sound": { + "off": "Tylu", + "on": "Aptikta" + }, + "vibration": { + "off": "Neaptikta", + "on": "Aptikta" + }, + "window": { + "off": "U\u017edaryta", + "on": "Atidaryta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/lv.json b/homeassistant/components/binary_sensor/translations/lv.json new file mode 100644 index 00000000000..14f39116c49 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/lv.json @@ -0,0 +1,91 @@ +{ + "device_automation": { + "trigger_type": { + "turned_off": "{entity_name} tika izsl\u0113gta", + "turned_on": "{entity_name} tika iesl\u0113gta" + } + }, + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + }, + "battery": { + "off": "Norm\u0101ls", + "on": "Zems" + }, + "cold": { + "off": "Norm\u0101ls", + "on": "Auksts" + }, + "connectivity": { + "off": "Atvienots", + "on": "Piesl\u0113dzies" + }, + "door": { + "off": "Aizv\u0113rtas", + "on": "Atv\u0113rtas" + }, + "garage_door": { + "off": "Aizv\u0113rtas", + "on": "Atv\u0113rtas" + }, + "gas": { + "off": "Br\u012bvs", + "on": "Sajusta" + }, + "heat": { + "off": "Norm\u0101ls", + "on": "Karsts" + }, + "lock": { + "off": "Sl\u0113gts", + "on": "Atsl\u0113gts" + }, + "moisture": { + "off": "Sauss", + "on": "Slapj\u0161" + }, + "motion": { + "off": "Br\u012bvs", + "on": "Sajusta" + }, + "occupancy": { + "off": "Br\u012bvs", + "on": "Aiz\u0146emts" + }, + "opening": { + "off": "Aizv\u0113rts", + "on": "Atv\u0113rts" + }, + "presence": { + "off": "Promb\u016btne", + "on": "M\u0101j\u0101s" + }, + "problem": { + "off": "OK", + "on": "Probl\u0113ma" + }, + "safety": { + "off": "Dro\u0161i", + "on": "Nedro\u0161i" + }, + "smoke": { + "off": "Br\u012bvs", + "on": "Sajusta" + }, + "sound": { + "off": "Br\u012bvs", + "on": "Sajusts" + }, + "vibration": { + "off": "Br\u012bvs", + "on": "Sajusts" + }, + "window": { + "off": "Aizv\u0113rts", + "on": "Atv\u0113rts" + } + }, + "title": "Bin\u0101rais sensors" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/nb.json b/homeassistant/components/binary_sensor/translations/nb.json new file mode 100644 index 00000000000..76c56713646 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/nb.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + }, + "battery": { + "off": "Normalt", + "on": "Lavt" + }, + "cold": { + "off": "", + "on": "Kald" + }, + "connectivity": { + "off": "Frakoblet", + "on": "Tilkoblet" + }, + "door": { + "off": "Lukket", + "on": "\u00c5pen" + }, + "garage_door": { + "off": "Lukket", + "on": "\u00c5pen" + }, + "gas": { + "off": "Klar", + "on": "Oppdaget" + }, + "heat": { + "off": "Normal", + "on": "Varm" + }, + "lock": { + "off": "L\u00e5st", + "on": "Ul\u00e5st" + }, + "moisture": { + "off": "T\u00f8rr", + "on": "Fuktig" + }, + "motion": { + "off": "Klar", + "on": "Oppdaget" + }, + "occupancy": { + "off": "Klar", + "on": "Oppdaget" + }, + "opening": { + "off": "Lukket", + "on": "\u00c5pen" + }, + "presence": { + "off": "Borte", + "on": "Hjemme" + }, + "problem": { + "off": "", + "on": "" + }, + "safety": { + "off": "Sikker", + "on": "Usikker" + }, + "smoke": { + "off": "Klar", + "on": "Oppdaget" + }, + "sound": { + "off": "Klar", + "on": "Oppdaget" + }, + "vibration": { + "off": "Klar", + "on": "Oppdaget" + }, + "window": { + "off": "Lukket", + "on": "\u00c5pent" + } + }, + "title": "Bin\u00e6r sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/nl.json b/homeassistant/components/binary_sensor/translations/nl.json new file mode 100644 index 00000000000..e99c41a473c --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/nl.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} batterij is bijna leeg", + "is_cold": "{entity_name} is koud", + "is_connected": "{entity_name} is verbonden", + "is_gas": "{entity_name} detecteert gas", + "is_hot": "{entity_name} is hot", + "is_light": "{entity_name} detecteert licht", + "is_locked": "{entity_name} is vergrendeld", + "is_moist": "{entity_name} is vochtig", + "is_motion": "{entity_name} detecteert beweging", + "is_moving": "{entity_name} is in beweging", + "is_no_gas": "{entity_name} detecteert geen gas", + "is_no_light": "{entity_name} detecteert geen licht", + "is_no_motion": "{entity_name} detecteert geen beweging", + "is_no_problem": "{entity_name} detecteert geen probleem", + "is_no_smoke": "{entity_name} detecteert geen rook", + "is_no_sound": "{entity_name} detecteert geen geluid", + "is_no_vibration": "{entity_name} detecteert geen trillingen", + "is_not_bat_low": "{entity_name} batterij is normaal", + "is_not_cold": "{entity_name} is niet koud", + "is_not_connected": "{entity_name} is niet verbonden", + "is_not_hot": "{entity_name} is niet heet", + "is_not_locked": "{entity_name} is ontgrendeld", + "is_not_moist": "{entity_name} is droog", + "is_not_moving": "{entity_name} beweegt niet", + "is_not_occupied": "{entity_name} is niet bezet", + "is_not_open": "{entity_name} is gesloten", + "is_not_plugged_in": "{entity_name} is niet aangesloten", + "is_not_powered": "{entity_name} is niet van stroom voorzien...", + "is_not_present": "{entity_name} is niet aanwezig", + "is_not_unsafe": "{entity_name} is veilig", + "is_occupied": "{entity_name} bezet is", + "is_off": "{entity_name} is uitgeschakeld", + "is_on": "{entity_name} is ingeschakeld", + "is_open": "{entity_name} is open", + "is_plugged_in": "{entity_name} is aangesloten", + "is_powered": "{entity_name} is van stroom voorzien....", + "is_present": "{entity_name} is aanwezig", + "is_problem": "{entity_name} detecteert een probleem", + "is_smoke": "{entity_name} detecteert rook", + "is_sound": "{entity_name} detecteert geluid", + "is_unsafe": "{entity_name} is onveilig", + "is_vibration": "{entity_name} detecteert trillingen" + }, + "trigger_type": { + "bat_low": "{entity_name} batterij bijna leeg", + "cold": "{entity_name} werd koud", + "connected": "{entity_name} verbonden", + "gas": "{entity_name} begon gas te detecteren", + "hot": "{entity_name} werd heet", + "light": "{entity_name} begon licht te detecteren", + "locked": "{entity_name} vergrendeld", + "moist": "{entity_name} werd vochtig", + "motion": "{entity_name} begon beweging te detecteren", + "moving": "{entity_name} begon te bewegen", + "no_gas": "{entity_name} is gestopt met het detecteren van gas", + "no_light": "{entity_name} gestopt met het detecteren van licht", + "no_motion": "{entity_name} gestopt met het detecteren van beweging", + "no_problem": "{entity_name} gestopt met het detecteren van het probleem", + "no_smoke": "{entity_name} gestopt met het detecteren van rook", + "no_sound": "{entity_name} gestopt met het detecteren van geluid", + "no_vibration": "{entity_name} gestopt met het detecteren van trillingen", + "not_bat_low": "{entity_name} batterij normaal", + "not_cold": "{entity_name} werd niet koud", + "not_connected": "{entity_name} verbroken", + "not_hot": "{entity_name} werd niet warm", + "not_locked": "{entity_name} ontgrendeld", + "not_moist": "{entity_name} werd droog", + "not_moving": "{entity_name} gestopt met bewegen", + "not_occupied": "{entity_name} werd niet bezet", + "not_opened": "{entity_name} gesloten", + "not_plugged_in": "{entity_name} niet verbonden", + "not_powered": "{entity_name} niet ingeschakeld", + "not_present": "{entity_name} is niet aanwezig", + "not_unsafe": "{entity_name} werd veilig", + "occupied": "{entity_name} werd bezet", + "opened": "{entity_name} geopend", + "plugged_in": "{entity_name} aangesloten", + "powered": "{entity_name} heeft vermogen", + "present": "{entity_name} aanwezig", + "problem": "{entity_name} begonnen met het detecteren van een probleem", + "smoke": "{entity_name} begon rook te detecteren", + "sound": "{entity_name} begon geluid te detecteren", + "turned_off": "{entity_name} uitgeschakeld", + "turned_on": "{entity_name} ingeschakeld", + "unsafe": "{entity_name} werd onveilig", + "vibration": "{entity_name} begon trillingen te detecteren" + } + }, + "state": { + "_": { + "off": "Uit", + "on": "Aan" + }, + "battery": { + "off": "Normaal", + "on": "Laag" + }, + "cold": { + "off": "Normaal", + "on": "Koud" + }, + "connectivity": { + "off": "Verbroken", + "on": "Verbonden" + }, + "door": { + "off": "Dicht", + "on": "Open" + }, + "garage_door": { + "off": "Dicht", + "on": "Open" + }, + "gas": { + "off": "Niet gedetecteerd", + "on": "Gedetecteerd" + }, + "heat": { + "off": "Normaal", + "on": "Heet" + }, + "lock": { + "off": "Vergrendeld", + "on": "Ontgrendeld" + }, + "moisture": { + "off": "Droog", + "on": "Vochtig" + }, + "motion": { + "off": "Niet gedetecteerd", + "on": "Gedetecteerd" + }, + "occupancy": { + "off": "Niet gedetecteerd", + "on": "Gedetecteerd" + }, + "opening": { + "off": "Gesloten", + "on": "Open" + }, + "presence": { + "off": "Afwezig", + "on": "Thuis" + }, + "problem": { + "off": "OK", + "on": "Probleem" + }, + "safety": { + "off": "Veilig", + "on": "Onveilig" + }, + "smoke": { + "off": "Niet gedetecteerd", + "on": "Gedetecteerd" + }, + "sound": { + "off": "Niet gedetecteerd", + "on": "Gedetecteerd" + }, + "vibration": { + "off": "Niet gedetecteerd", + "on": "Gedetecteerd" + }, + "window": { + "off": "Dicht", + "on": "Open" + } + }, + "title": "Binaire sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/nn.json b/homeassistant/components/binary_sensor/translations/nn.json new file mode 100644 index 00000000000..740f55076f4 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/nn.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + }, + "battery": { + "off": "Normalt", + "on": "L\u00e5gt" + }, + "cold": { + "off": "Normal", + "on": "Kald" + }, + "connectivity": { + "off": "Fr\u00e5kopla", + "on": "Tilkopla" + }, + "door": { + "off": "Lukka", + "on": "Open" + }, + "garage_door": { + "off": "Lukka", + "on": "Open" + }, + "gas": { + "off": "Ikkje oppdaga", + "on": "Oppdaga" + }, + "heat": { + "off": "Normal", + "on": "Varm" + }, + "lock": { + "off": "L\u00e5st", + "on": "Ul\u00e5st" + }, + "moisture": { + "off": "T\u00f8rr", + "on": "V\u00e5t" + }, + "motion": { + "off": "Ikkje oppdaga", + "on": "Oppdaga" + }, + "occupancy": { + "off": "Ikkje oppdaga", + "on": "Oppdaga" + }, + "opening": { + "off": "Lukka", + "on": "Open" + }, + "presence": { + "off": "Borte", + "on": "Heime" + }, + "problem": { + "off": "Ok", + "on": "Problem" + }, + "safety": { + "off": "Sikker", + "on": "Usikker" + }, + "smoke": { + "off": "Ikkje oppdaga", + "on": "Oppdaga" + }, + "sound": { + "off": "Ikkje oppdaga", + "on": "Oppdaga" + }, + "vibration": { + "off": "Ikkje oppdaga", + "on": "Oppdaga" + }, + "window": { + "off": "Lukka", + "on": "Open" + } + }, + "title": "Bin\u00e6rsensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/no.json b/homeassistant/components/binary_sensor/translations/no.json new file mode 100644 index 00000000000..1264e770ce4 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/no.json @@ -0,0 +1,121 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} batteriniv\u00e5et er lavt", + "is_cold": "{entity_name} er kald", + "is_connected": "{entity_name} er tilkoblet", + "is_gas": "{entity_name} registrerer gass", + "is_hot": "{entity_name} er varm", + "is_light": "{entity_name} registrerer lys", + "is_locked": "{entity_name} er l\u00e5st", + "is_moist": "{entity_name} er fuktig", + "is_motion": "{entity_name} registrerer bevegelse", + "is_moving": "{entity_name} er i bevegelse", + "is_no_gas": "{entity_name} registrerer ikke gass", + "is_no_light": "{entity_name} registrerer ikke lys", + "is_no_motion": "{entity_name} registrerer ikke bevegelse", + "is_no_problem": "{entity_name} registrerer ikke et problem", + "is_no_smoke": "{entity_name} registrerer ikke r\u00f8yk", + "is_no_sound": "{entity_name} registrerer ikke lyd", + "is_no_vibration": "{entity_name} registrerer ikke bevegelse", + "is_not_bat_low": "{entity_name} batteri er normalt", + "is_not_cold": "{entity_name} er ikke kald", + "is_not_connected": "{entity_name} er frakoblet", + "is_not_hot": "{entity_name} er ikke varm", + "is_not_locked": "{entity_name} er ul\u00e5st", + "is_not_moist": "{entity_name} er t\u00f8rr", + "is_not_moving": "{entity_name} er ikke i bevegelse", + "is_not_occupied": "{entity_name} er ledig", + "is_not_open": "{entity_name} er lukket", + "is_not_plugged_in": "{entity_name} er koblet fra", + "is_not_powered": "{entity_name} er spenningsl\u00f8s", + "is_not_present": "{entity_name} er ikke tilstede", + "is_not_unsafe": "{entity_name} er trygg", + "is_occupied": "{entity_name} er opptatt", + "is_off": "{entity_name} er sl\u00e5tt av", + "is_on": "{entity_name} er sl\u00e5tt p\u00e5", + "is_open": "{entity_name} er \u00e5pen", + "is_plugged_in": "{entity_name} er koblet til", + "is_powered": "{entity_name} er spenningssatt", + "is_present": "{entity_name} er tilstede", + "is_problem": "{entity_name} registrerer et problem", + "is_smoke": "{entity_name} registrerer r\u00f8yk", + "is_sound": "{entity_name} registrerer lyd", + "is_unsafe": "{entity_name} er utrygg", + "is_vibration": "{entity_name} registrerer vibrasjon" + }, + "trigger_type": { + "bat_low": "{entity_name} lavt batteri", + "cold": "{entity_name} ble kald", + "connected": "{entity_name} tilkoblet", + "gas": "{entity_name} begynte \u00e5 registrere gass", + "hot": "{entity_name} ble varm", + "light": "{entity_name} begynte \u00e5 registrere lys", + "locked": "{entity_name} l\u00e5st", + "moist": "{entity_name} ble fuktig", + "motion": "{entity_name} begynte \u00e5 registrere bevegelse", + "moving": "{entity_name} begynte \u00e5 bevege seg", + "no_gas": "{entity_name} sluttet \u00e5 registrere gass", + "no_light": "{entity_name} sluttet \u00e5 registrere lys", + "no_motion": "{entity_name} sluttet \u00e5 registrere bevegelse", + "no_problem": "{entity_name} sluttet \u00e5 registrere problem", + "no_smoke": "{entity_name} sluttet \u00e5 registrere r\u00f8yk", + "no_sound": "{entity_name} sluttet \u00e5 registrere lyd", + "no_vibration": "{entity_name} sluttet \u00e5 registrere vibrasjon", + "not_bat_low": "{entity_name} batteri normalt", + "not_cold": "{entity_name} ble ikke lenger kald", + "not_connected": "{entity_name} koblet fra", + "not_hot": "{entity_name} ble ikke lenger varm", + "not_locked": "{entity_name} l\u00e5st opp", + "not_moist": "{entity_name} ble t\u00f8rr", + "not_moving": "{entity_name} sluttet \u00e5 bevege seg", + "not_occupied": "{entity_name} ble ledig", + "not_opened": "{entity_name} stengt", + "not_plugged_in": "{entity_name} koblet fra", + "not_powered": "{entity_name} spenningsl\u00f8s", + "not_present": "{entity_name} ikke til stede", + "not_unsafe": "{entity_name} ble trygg", + "occupied": "{entity_name} ble opptatt", + "opened": "{entity_name} \u00e5pnet", + "plugged_in": "{entity_name} koblet til", + "powered": "{entity_name} spenningssatt", + "present": "{entity_name} tilstede", + "problem": "{entity_name} begynte \u00e5 registrere et problem", + "smoke": "{entity_name} begynte \u00e5 registrere r\u00f8yk", + "sound": "{entity_name} begynte \u00e5 registrere lyd", + "turned_off": "{entity_name} sl\u00e5tt av", + "turned_on": "{entity_name} sl\u00e5tt p\u00e5", + "unsafe": "{entity_name} ble usikker", + "vibration": "{entity_name} begynte \u00e5 oppdage vibrasjon" + } + }, + "state": { + "battery": { + "off": "Normalt", + "on": "Lavt" + }, + "cold": { + "on": "Kald" + }, + "gas": { + "off": "Klar", + "on": "Oppdaget" + }, + "heat": { + "on": "Varm" + }, + "moisture": { + "off": "T\u00f8rr", + "on": "V\u00e5t" + }, + "problem": { + "off": "OK", + "on": "Problem" + }, + "safety": { + "off": "Sikker", + "on": "Usikker" + } + }, + "title": "Bin\u00e6r sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/pl.json b/homeassistant/components/binary_sensor/translations/pl.json new file mode 100644 index 00000000000..67af6898c39 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/pl.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "bateria {entity_name} jest roz\u0142adowana", + "is_cold": "sensor {entity_name} wykrywa zimno", + "is_connected": "sensor {entity_name} raportuje po\u0142\u0105czenie", + "is_gas": "sensor {entity_name} wykrywa gaz", + "is_hot": "sensor {entity_name} wykrywa gor\u0105co", + "is_light": "sensor {entity_name} wykrywa \u015bwiat\u0142o", + "is_locked": "sensor {entity_name} wykrywa zamkni\u0119cie", + "is_moist": "sensor {entity_name} wykrywa wilgo\u0107", + "is_motion": "sensor {entity_name} wykrywa ruch", + "is_moving": "sensor {entity_name} porusza si\u0119", + "is_no_gas": "sensor {entity_name} nie wykrywa gazu", + "is_no_light": "sensor {entity_name} nie wykrywa \u015bwiat\u0142a", + "is_no_motion": "sensor {entity_name} nie wykrywa ruchu", + "is_no_problem": "sensor {entity_name} nie wykrywa problemu", + "is_no_smoke": "sensor {entity_name} nie wykrywa dymu", + "is_no_sound": "sensor {entity_name} nie wykrywa d\u017awi\u0119ku", + "is_no_vibration": "sensor {entity_name} nie wykrywa wibracji", + "is_not_bat_low": "bateria {entity_name} nie jest roz\u0142adowana", + "is_not_cold": "sensor {entity_name} nie wykrywa zimna", + "is_not_connected": "sensor {entity_name} nie wykrywa roz\u0142\u0105czenia", + "is_not_hot": "sensor {entity_name} nie wykrywa gor\u0105ca", + "is_not_locked": "sensor {entity_name} nie wykrywa otwarcia", + "is_not_moist": "sensor {entity_name} nie wykrywa wilgoci", + "is_not_moving": "sensor {entity_name} nie porusza si\u0119", + "is_not_occupied": "sensor {entity_name} nie jest zaj\u0119ty", + "is_not_open": "sensor {entity_name} jest zamkni\u0119ty", + "is_not_plugged_in": "sensor {entity_name} wykrywa od\u0142\u0105czenie", + "is_not_powered": "sensor {entity_name} nie wykrywa zasilania", + "is_not_present": "sensor {entity_name} nie wykrywa obecno\u015bci", + "is_not_unsafe": "sensor {entity_name} nie wykrywa niebezpiecze\u0144stwa", + "is_occupied": "sensor {entity_name} jest zaj\u0119ty", + "is_off": "sensor {entity_name} jest wy\u0142\u0105czony", + "is_on": "sensor {entity_name} jest w\u0142\u0105czony", + "is_open": "sensor {entity_name} jest otwarty", + "is_plugged_in": "sensor {entity_name} wykrywa pod\u0142\u0105czenie", + "is_powered": "sensor {entity_name} wykrywa zasilanie", + "is_present": "sensor {entity_name} wykrywa obecno\u015b\u0107", + "is_problem": "sensor {entity_name} wykrywa problem", + "is_smoke": "sensor {entity_name} wykrywa dym", + "is_sound": "sensor {entity_name} wykrywa d\u017awi\u0119k", + "is_unsafe": "sensor {entity_name} wykrywa niebezpiecze\u0144stwo", + "is_vibration": "sensor {entity_name} wykrywa wibracje" + }, + "trigger_type": { + "bat_low": "nast\u0105pi roz\u0142adowanie baterii {entity_name}", + "cold": "sensor {entity_name} wykryje zimno", + "connected": "nast\u0105pi pod\u0142\u0105czenie {entity_name}", + "gas": "sensor {entity_name} wykryje gaz", + "hot": "sensor {entity_name} wykryje gor\u0105co", + "light": "sensor {entity_name} wykryje \u015bwiat\u0142o", + "locked": "nast\u0105pi zamkni\u0119cie {entity_name}", + "moist": "nast\u0105pi wykrycie wilgoci {entity_name}", + "motion": "sensor {entity_name} wykryje ruch", + "moving": "sensor {entity_name} zacznie porusza\u0107 si\u0119", + "no_gas": "sensor {entity_name} przestanie wykrywa\u0107 gaz", + "no_light": "sensor {entity_name} przestanie wykrywa\u0107 \u015bwiat\u0142o", + "no_motion": "sensor {entity_name} przestanie wykrywa\u0107 ruch", + "no_problem": "sensor {entity_name} przestanie wykrywa\u0107 problem", + "no_smoke": "sensor {entity_name} przestanie wykrywa\u0107 dym", + "no_sound": "sensor {entity_name} przestanie wykrywa\u0107 d\u017awi\u0119k", + "no_vibration": "sensor {entity_name} przestanie wykrywa\u0107 wibracje", + "not_bat_low": "nast\u0105pi na\u0142adowanie baterii {entity_name}", + "not_cold": "sensor {entity_name} przestanie wykrywa\u0107 zimno", + "not_connected": "nast\u0105pi roz\u0142\u0105czenie {entity_name}", + "not_hot": "sensor {entity_name} przestanie wykrywa\u0107 gor\u0105co", + "not_locked": "nast\u0105pi otwarcie {entity_name}", + "not_moist": "sensor {entity_name} przestanie wykrywa\u0107 wilgo\u0107", + "not_moving": "sensor {entity_name} przestanie porusza\u0107 si\u0119", + "not_occupied": "sensor {entity_name} przestanie by\u0107 zaj\u0119ty", + "not_opened": "nast\u0105pi zamkni\u0119cie {entity_name}", + "not_plugged_in": "nast\u0105pi od\u0142\u0105czenie {entity_name}", + "not_powered": "nast\u0105pi od\u0142\u0105czenie zasilania {entity_name}", + "not_present": "sensor {entity_name} przestanie wykrywa\u0107 obecno\u015b\u0107", + "not_unsafe": "sensor {entity_name} przestanie wykrywa\u0107 niebezpiecze\u0144stwo", + "occupied": "sensor {entity_name} stanie si\u0119 zaj\u0119ty", + "opened": "nast\u0105pi otwarcie {entity_name}", + "plugged_in": "nast\u0105pi pod\u0142\u0105czenie {entity_name}", + "powered": "nast\u0105pi pod\u0142\u0105czenie zasilenia {entity_name}", + "present": "sensor {entity_name} wykryje obecno\u015b\u0107", + "problem": "sensor {entity_name} wykryje problem", + "smoke": "sensor {entity_name} wykryje dym", + "sound": "sensor {entity_name} wykryje d\u017awi\u0119k", + "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", + "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}", + "unsafe": "sensor {entity_name} wykryje niebezpiecze\u0144stwo", + "vibration": "sensor {entity_name} wykryje wibracje" + } + }, + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + }, + "battery": { + "off": "na\u0142adowana", + "on": "roz\u0142adowana" + }, + "cold": { + "off": "normalnie", + "on": "zimno" + }, + "connectivity": { + "off": "offline", + "on": "online" + }, + "door": { + "off": "zamkni\u0119te", + "on": "otwarte" + }, + "garage_door": { + "off": "zamkni\u0119ta", + "on": "otwarta" + }, + "gas": { + "off": "brak", + "on": "wykryto" + }, + "heat": { + "off": "normalnie", + "on": "gor\u0105co" + }, + "lock": { + "off": "zamkni\u0119ty", + "on": "otwarty" + }, + "moisture": { + "off": "brak wilgoci", + "on": "wilgo\u0107" + }, + "motion": { + "off": "brak", + "on": "wykryto" + }, + "occupancy": { + "off": "brak", + "on": "wykryto" + }, + "opening": { + "off": "zamkni\u0119te", + "on": "otwarte" + }, + "presence": { + "off": "poza domem", + "on": "w domu" + }, + "problem": { + "off": "ok", + "on": "problem" + }, + "safety": { + "off": "brak zagro\u017cenia", + "on": "zagro\u017cenie" + }, + "smoke": { + "off": "brak", + "on": "wykryto" + }, + "sound": { + "off": "brak", + "on": "wykryto" + }, + "vibration": { + "off": "brak", + "on": "wykryto" + }, + "window": { + "off": "zamkni\u0119te", + "on": "otwarte" + } + }, + "title": "Sensor binarny" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/pt-BR.json b/homeassistant/components/binary_sensor/translations/pt-BR.json new file mode 100644 index 00000000000..52671ca0425 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/pt-BR.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + }, + "battery": { + "off": "Normal", + "on": "Fraca" + }, + "cold": { + "off": "Normal", + "on": "Frio" + }, + "connectivity": { + "off": "Desconectado", + "on": "Conectado" + }, + "door": { + "off": "Fechado", + "on": "Aberto" + }, + "garage_door": { + "off": "Fechado", + "on": "Aberto" + }, + "gas": { + "off": "Limpo", + "on": "Detectado" + }, + "heat": { + "off": "Normal", + "on": "Quente" + }, + "lock": { + "off": "Trancado", + "on": "Desbloqueado" + }, + "moisture": { + "off": "Seco", + "on": "Molhado" + }, + "motion": { + "off": "Desligado", + "on": "Detectado" + }, + "occupancy": { + "off": "Desocupado", + "on": "Detectado" + }, + "opening": { + "off": "Fechado", + "on": "Aberto" + }, + "presence": { + "off": "Ausente", + "on": "Em casa" + }, + "problem": { + "off": "OK", + "on": "Problema" + }, + "safety": { + "off": "Seguro", + "on": "N\u00e3o seguro" + }, + "smoke": { + "off": "Limpo", + "on": "Detectado" + }, + "sound": { + "off": "Limpo", + "on": "Detectado" + }, + "vibration": { + "off": "Limpo", + "on": "Detectado" + }, + "window": { + "off": "Fechado", + "on": "Aberto" + } + }, + "title": "Sensor bin\u00e1rio" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/pt.json b/homeassistant/components/binary_sensor/translations/pt.json new file mode 100644 index 00000000000..c71f43eca72 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/pt.json @@ -0,0 +1,166 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "a bateria {entity_name} est\u00e1 baixa", + "is_cold": "{entity_name} est\u00e1 frio", + "is_connected": "{entity_name} est\u00e1 ligado", + "is_gas": "{entity_name} est\u00e1 a detectar g\u00e1s", + "is_hot": "{entity_name} est\u00e1 quente", + "is_light": "{entity_name} est\u00e1 a detectar luz", + "is_locked": "{entity_name} est\u00e1 fechado", + "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", + "not_present": "ausente {entity_name}", + "not_unsafe": "ficou seguro {entity_name}", + "occupied": "ficou ocupado {entity_name}", + "opened": "{entity_name} aberto", + "plugged_in": "{entity_name} ligado", + "powered": "{entity_name} alimentado", + "present": "{entity_name} presente", + "problem": "foi detectado problema em {entity_name}", + "smoke": "foi detectado fumo em {entity_name}", + "sound": "foram detectadas sons em {entity_name}", + "turned_off": "foi desligado {entity_name}", + "turned_on": "foi ligado {entity_name}", + "unsafe": "ficou inseguro {entity_name}", + "vibration": "foram detectadas vibra\u00e7\u00f5es em {entity_name}" + } + }, + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + }, + "battery": { + "off": "Normal", + "on": "Baixo" + }, + "cold": { + "off": "Normal", + "on": "Frio" + }, + "connectivity": { + "off": "Desligado", + "on": "Ligado" + }, + "door": { + "off": "Fechada", + "on": "Aberta" + }, + "garage_door": { + "off": "Fechada", + "on": "Aberta" + }, + "gas": { + "off": "Limpo", + "on": "Detectado" + }, + "heat": { + "off": "Normal", + "on": "Quente" + }, + "lock": { + "off": "Trancada", + "on": "Destrancada" + }, + "moisture": { + "off": "Seco", + "on": "H\u00famido" + }, + "motion": { + "off": "Limpo", + "on": "Detectado" + }, + "occupancy": { + "off": "Limpo", + "on": "Detectado" + }, + "opening": { + "off": "Fechado", + "on": "Aberto" + }, + "presence": { + "off": "Fora", + "on": "Casa" + }, + "problem": { + "off": "OK", + "on": "Problema" + }, + "safety": { + "off": "Seguro", + "on": "Inseguro" + }, + "smoke": { + "off": "Limpo", + "on": "Detectado" + }, + "sound": { + "off": "Limpo", + "on": "Detectado" + }, + "vibration": { + "off": "Limpo", + "on": "Detetado" + }, + "window": { + "off": "Fechada", + "on": "Aberta" + } + }, + "title": "Sensor bin\u00e1rio" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ro.json b/homeassistant/components/binary_sensor/translations/ro.json new file mode 100644 index 00000000000..4ad892d234a --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ro.json @@ -0,0 +1,128 @@ +{ + "device_automation": { + "condition_type": { + "is_off": "{entity_name} oprit", + "is_on": "{entity_name} pornit" + }, + "trigger_type": { + "gas": "{entity_name} a \u00eenceput s\u0103 detecteze gaz", + "hot": "{entity_name} a devenit fierbinte", + "locked": "{entity_name} blocat", + "motion": "{entity_name} a \u00eenceput s\u0103 detecteze mi\u0219care", + "moving": "{entity_name} a \u00eenceput s\u0103 se mi\u0219te", + "no_light": "{entity_name} a oprit detectarea luminii", + "no_motion": "{entity_name} a oprit detectarea mi\u0219c\u0103rii", + "no_problem": "{entity_name} a oprit detectarea problemei", + "no_smoke": "{entity_name} a oprit detectarea fumului", + "no_sound": "{entity_name} a oprit detectarea de sunet", + "no_vibration": "{entity_name} a oprit detectarea vibra\u021biilor", + "not_bat_low": "{entity_name} baterie normal\u0103", + "not_cold": "{entity_name} nu mai este rece", + "not_connected": "{entity_name} deconectat", + "not_hot": "{entity_name} nu mai este fierbinte", + "not_locked": "{entity_name} deblocat", + "not_moist": "{entity_name} a devenit uscat", + "not_moving": "{entity_name} a \u00eencetat mi\u0219carea", + "not_occupied": "{entity_name} a devenit neocupat", + "not_plugged_in": "{entity_name} deconectat", + "not_powered": "{entity_name} nu este alimentat", + "not_present": "{entity_name} nu este prezent", + "not_unsafe": "{entity_name} a devenit sigur", + "occupied": "{entity_name} a devenit ocupat", + "opened": "{entity_name} deschis", + "plugged_in": "{entity_name} conectat", + "powered": "{entity_name} alimentat", + "present": "{entity_name} prezent", + "problem": "{entity_name} a \u00eenceput detectarea unei probleme", + "smoke": "{entity_name} a \u00eenceput s\u0103 detecteze fum", + "sound": "{entity_name} a \u00eenceput s\u0103 detecteze sunetul", + "turned_off": "{entity_name} oprit", + "turned_on": "{entity_name} pornit", + "unsafe": "{entity_name} a devenit nesigur", + "vibration": "{entity_name} a \u00eenceput s\u0103 detecteze vibra\u021biile" + } + }, + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + }, + "battery": { + "off": "Normal", + "on": "Sc\u0103zuta" + }, + "cold": { + "off": "Normal", + "on": "Rece" + }, + "connectivity": { + "off": "Deconectat", + "on": "Conectat" + }, + "door": { + "off": "\u00cenchis", + "on": "Deschis" + }, + "garage_door": { + "off": "\u00cenchis", + "on": "Deschis" + }, + "gas": { + "off": "Liber", + "on": "Detec\u021bie" + }, + "heat": { + "off": "Normal", + "on": "Fierbinte" + }, + "lock": { + "off": "Blocat", + "on": "Deblocat" + }, + "moisture": { + "off": "Uscat", + "on": "Umed" + }, + "motion": { + "off": "Liber", + "on": "Detec\u021bie" + }, + "occupancy": { + "off": "Liber", + "on": "Detec\u021bie" + }, + "opening": { + "off": "\u00cenchis", + "on": "Deschis" + }, + "presence": { + "off": "Plecat", + "on": "Acas\u0103" + }, + "problem": { + "off": "OK", + "on": "Problem\u0103" + }, + "safety": { + "off": "Sigur", + "on": "Nesigur" + }, + "smoke": { + "off": "Liber", + "on": "Detec\u021bie" + }, + "sound": { + "off": "Liber", + "on": "Detec\u021bie" + }, + "vibration": { + "off": "Liber", + "on": "Detec\u021bie" + }, + "window": { + "off": "\u00cenchis", + "on": "Deschis" + } + }, + "title": "Senzor binar" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ru.json b/homeassistant/components/binary_sensor/translations/ru.json new file mode 100644 index 00000000000..c3906cdc88c --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ru.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} \u0432 \u0440\u0430\u0437\u0440\u044f\u0436\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_cold": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435", + "is_connected": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", + "is_gas": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0430\u0437", + "is_hot": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432", + "is_light": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u0435\u0442", + "is_locked": "{entity_name} \u0432 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_moist": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043b\u0430\u0433\u0443", + "is_motion": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "is_moving": "{entity_name} \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f", + "is_no_gas": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0430\u0437", + "is_no_light": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u0435\u0442", + "is_no_motion": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "is_no_problem": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", + "is_no_smoke": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u044b\u043c", + "is_no_sound": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0432\u0443\u043a", + "is_no_vibration": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e", + "is_not_bat_low": "{entity_name} \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_not_cold": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435", + "is_not_connected": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", + "is_not_hot": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432", + "is_not_locked": "{entity_name} \u0432 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_not_moist": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043b\u0430\u0433\u0443", + "is_not_moving": "{entity_name} \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f", + "is_not_occupied": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "is_not_open": "{entity_name} \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_not_plugged_in": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", + "is_not_powered": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435", + "is_not_present": "{entity_name} \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "is_not_unsafe": "{entity_name} \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_occupied": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_open": "{entity_name} \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_plugged_in": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", + "is_powered": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435", + "is_present": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "is_problem": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", + "is_smoke": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u044b\u043c", + "is_sound": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0432\u0443\u043a", + "is_unsafe": "{entity_name} \u0432 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_vibration": "{entity_name} \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e" + }, + "trigger_type": { + "bat_low": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0437\u043a\u0438\u0439 \u0437\u0430\u0440\u044f\u0434", + "cold": "{entity_name} \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u0435\u0442\u0441\u044f", + "connected": "{entity_name} \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "gas": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0433\u0430\u0437", + "hot": "{entity_name} \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f", + "light": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0442", + "locked": "{entity_name} \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f", + "moist": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043b\u0430\u0433\u0443", + "motion": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "moving": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435", + "no_gas": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0433\u0430\u0437", + "no_light": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0442", + "no_motion": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435", + "no_problem": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", + "no_smoke": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u044b\u043c", + "no_sound": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0432\u0443\u043a", + "no_vibration": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e", + "not_bat_low": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u0440\u044f\u0434", + "not_cold": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u0442\u044c\u0441\u044f", + "not_connected": "{entity_name} \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "not_hot": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u044c\u0441\u044f", + "not_locked": "{entity_name} \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f", + "not_moist": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043b\u0430\u0433\u0443", + "not_moving": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435", + "not_occupied": "{entity_name} \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "not_opened": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "not_plugged_in": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", + "not_powered": "{entity_name} \u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f", + "not_present": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "not_unsafe": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c", + "occupied": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "opened": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "plugged_in": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435", + "powered": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f", + "present": "{entity_name} \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435", + "problem": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443", + "smoke": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u044b\u043c", + "sound": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0432\u0443\u043a", + "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "unsafe": "{entity_name} \u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c", + "vibration": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e" + } + }, + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + }, + "battery": { + "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439", + "on": "\u041d\u0438\u0437\u043a\u0438\u0439" + }, + "cold": { + "off": "\u041d\u043e\u0440\u043c\u0430", + "on": "\u041e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435" + }, + "connectivity": { + "off": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e", + "on": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e" + }, + "door": { + "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u0430", + "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u0430" + }, + "garage_door": { + "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u044b", + "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u044b" + }, + "gas": { + "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d", + "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d" + }, + "heat": { + "off": "\u041d\u043e\u0440\u043c\u0430", + "on": "\u041d\u0430\u0433\u0440\u0435\u0432" + }, + "lock": { + "off": "\u0417\u0430\u043a\u0440\u044b\u0442", + "on": "\u041e\u0442\u043a\u0440\u044b\u0442" + }, + "moisture": { + "off": "\u0421\u0443\u0445\u043e", + "on": "\u0412\u043b\u0430\u0436\u043d\u043e" + }, + "motion": { + "off": "\u041d\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f ", + "on": "\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435" + }, + "occupancy": { + "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e", + "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e" + }, + "opening": { + "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e", + "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e" + }, + "presence": { + "off": "\u041d\u0435 \u0434\u043e\u043c\u0430", + "on": "\u0414\u043e\u043c\u0430" + }, + "problem": { + "off": "\u041e\u041a", + "on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430" + }, + "safety": { + "off": "\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e", + "on": "\u041d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e" + }, + "smoke": { + "off": "\u041d\u0435\u0442 \u0434\u044b\u043c\u0430", + "on": "\u0414\u044b\u043c" + }, + "sound": { + "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d", + "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d" + }, + "vibration": { + "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430", + "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430" + }, + "window": { + "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e", + "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e" + } + }, + "title": "\u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0441\u0435\u043d\u0441\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/sk.json b/homeassistant/components/binary_sensor/translations/sk.json new file mode 100644 index 00000000000..5cff82615ae --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/sk.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Neakt\u00edvny", + "on": "Akt\u00edvny" + }, + "battery": { + "off": "Norm\u00e1lna", + "on": "Slab\u00e1" + }, + "cold": { + "off": "Norm\u00e1lny", + "on": "Studen\u00fd" + }, + "connectivity": { + "off": "Odpojen\u00fd", + "on": "Pripojen\u00fd" + }, + "door": { + "off": "Zatvoren\u00e9", + "on": "Otvoren\u00e9" + }, + "garage_door": { + "off": "Zatvoren\u00e9", + "on": "Otvoren\u00e9" + }, + "gas": { + "off": "\u017diadny plyn", + "on": "Zachyten\u00fd plyn" + }, + "heat": { + "off": "Norm\u00e1lny", + "on": "Hor\u00faci" + }, + "lock": { + "off": "Zamknut\u00fd", + "on": "Odomknut\u00fd" + }, + "moisture": { + "off": "Sucho", + "on": "Vlhko" + }, + "motion": { + "off": "K\u013eud", + "on": "Pohyb" + }, + "occupancy": { + "off": "Vo\u013en\u00e9", + "on": "Obsaden\u00e9" + }, + "opening": { + "off": "Zatvoren\u00e9", + "on": "Otvoren\u00e9" + }, + "presence": { + "off": "Pre\u010d", + "on": "Doma" + }, + "problem": { + "off": "OK", + "on": "Probl\u00e9m" + }, + "safety": { + "off": "Zabezpe\u010den\u00e9", + "on": "Nezabezpe\u010den\u00e9" + }, + "smoke": { + "off": "\u017diadny dym", + "on": "Zachyten\u00fd dym" + }, + "sound": { + "off": "Ticho", + "on": "Zachyten\u00fd zvuk" + }, + "vibration": { + "off": "K\u013eud", + "on": "Zachyten\u00e9 vibr\u00e1cie" + }, + "window": { + "off": "Zatvoren\u00e9", + "on": "Otvoren\u00e9" + } + }, + "title": "Bin\u00e1rny senzor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/sl.json b/homeassistant/components/binary_sensor/translations/sl.json new file mode 100644 index 00000000000..a340b62ac99 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/sl.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} ima prazno baterijo", + "is_cold": "{entity_name} je hladen", + "is_connected": "{entity_name} je povezan", + "is_gas": "{entity_name} zaznava plin", + "is_hot": "{entity_name} je vro\u010d", + "is_light": "{entity_name} zaznava svetlobo", + "is_locked": "{entity_name} je zaklenjen", + "is_moist": "{entity_name} je vla\u017een", + "is_motion": "{entity_name} zaznava gibanje", + "is_moving": "{entity_name} se premika", + "is_no_gas": "{entity_name} ne zaznava plina", + "is_no_light": "{entity_name} ne zaznava svetlobe", + "is_no_motion": "{entity_name} ne zaznava gibanja", + "is_no_problem": "{entity_name} ne zaznava te\u017eav", + "is_no_smoke": "{entity_name} ne zaznava dima", + "is_no_sound": "{entity_name} ne zaznava zvoka", + "is_no_vibration": "{entity_name} ne zazna vibracij", + "is_not_bat_low": "{entity_name} baterija je polna", + "is_not_cold": "{entity_name} ni hladen", + "is_not_connected": "{entity_name} ni povezan", + "is_not_hot": "{entity_name} ni vro\u010d", + "is_not_locked": "{entity_name} je odklenjen", + "is_not_moist": "{entity_name} je suh", + "is_not_moving": "{entity_name} se ne premika", + "is_not_occupied": "{entity_name} ni zaseden", + "is_not_open": "{entity_name} je zaprt", + "is_not_plugged_in": "{entity_name} je odklopljen", + "is_not_powered": "{entity_name} ni napajan", + "is_not_present": "{entity_name} ni prisoten", + "is_not_unsafe": "{entity_name} je varen", + "is_occupied": "{entity_name} je zaseden", + "is_off": "{entity_name} je izklopljen", + "is_on": "{entity_name} je vklopljen", + "is_open": "{entity_name} je odprt", + "is_plugged_in": "{entity_name} je priklju\u010den", + "is_powered": "{entity_name} je vklopljen", + "is_present": "{entity_name} je prisoten", + "is_problem": "{entity_name} zaznava te\u017eavo", + "is_smoke": "{entity_name} zaznava dim", + "is_sound": "{entity_name} zaznava zvok", + "is_unsafe": "{entity_name} ni varen", + "is_vibration": "{entity_name} zaznava vibracije" + }, + "trigger_type": { + "bat_low": "{entity_name} ima prazno baterijo", + "cold": "{entity_name} je postal hladen", + "connected": "{entity_name} povezan", + "gas": "{entity_name} za\u010del zaznavati plin", + "hot": "{entity_name} je postal vro\u010d", + "light": "{entity_name} za\u010del zaznavati svetlobo", + "locked": "{entity_name} zaklenjen", + "moist": "{entity_name} postal vla\u017een", + "motion": "{entity_name} za\u010del zaznavati gibanje", + "moving": "{entity_name} se je za\u010del premikati", + "no_gas": "{entity_name} prenehal zaznavati plin", + "no_light": "{entity_name} prenehal zaznavati svetlobo", + "no_motion": "{entity_name} prenehal zaznavati gibanje", + "no_problem": "{entity_name} prenehal odkrivati te\u017eavo", + "no_smoke": "{entity_name} prenehal zaznavati dim", + "no_sound": "{entity_name} prenehal zaznavati zvok", + "no_vibration": "{entity_name} prenehal zaznavati vibracije", + "not_bat_low": "{entity_name} ima polno baterijo", + "not_cold": "{entity_name} ni ve\u010d hladen", + "not_connected": "{entity_name} prekinjen", + "not_hot": "{entity_name} ni ve\u010d vro\u010d", + "not_locked": "{entity_name} odklenjen", + "not_moist": "{entity_name} je postalo suh", + "not_moving": "{entity_name} se je prenehal premikati", + "not_occupied": "{entity_name} ni zaseden", + "not_opened": "{entity_name} zaprto", + "not_plugged_in": "{entity_name} odklopljen", + "not_powered": "{entity_name} ni napajan", + "not_present": "{entity_name} ni prisoten", + "not_unsafe": "{entity_name} je postal varen", + "occupied": "{entity_name} postal zaseden", + "opened": "{entity_name} odprl", + "plugged_in": "{entity_name} priklju\u010den", + "powered": "{entity_name} priklopljen", + "present": "{entity_name} prisoten", + "problem": "{entity_name} za\u010del odkrivati te\u017eavo", + "smoke": "{entity_name} za\u010del zaznavati dim", + "sound": "{entity_name} za\u010del zaznavati zvok", + "turned_off": "{entity_name} izklopljen", + "turned_on": "{entity_name} vklopljen", + "unsafe": "{entity_name} je postal nevaren", + "vibration": "{entity_name} je za\u010del odkrivat vibracije" + } + }, + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + }, + "battery": { + "off": "Normalno", + "on": "Nizko" + }, + "cold": { + "off": "Normalno", + "on": "Hladno" + }, + "connectivity": { + "off": "Povezava prekinjena", + "on": "Povezan" + }, + "door": { + "off": "Zaprto", + "on": "Odprto" + }, + "garage_door": { + "off": "Zaprto", + "on": "Odprto" + }, + "gas": { + "off": "\u010cisto", + "on": "Zaznano" + }, + "heat": { + "off": "Normalno", + "on": "Vro\u010de" + }, + "lock": { + "off": "Zaklenjeno", + "on": "Odklenjeno" + }, + "moisture": { + "off": "Suho", + "on": "Mokro" + }, + "motion": { + "off": "\u010cisto", + "on": "Zaznano" + }, + "occupancy": { + "off": "\u010cisto", + "on": "Zaznano" + }, + "opening": { + "off": "Zaprto", + "on": "Odprto" + }, + "presence": { + "off": "Odsoten", + "on": "Doma" + }, + "problem": { + "off": "OK", + "on": "Te\u017eava" + }, + "safety": { + "off": "Varno", + "on": "Nevarno" + }, + "smoke": { + "off": "\u010cisto", + "on": "Zaznano" + }, + "sound": { + "off": "\u010cisto", + "on": "Zaznano" + }, + "vibration": { + "off": "\u010cisto", + "on": "Zaznano" + }, + "window": { + "off": "Zaprto", + "on": "Odprto" + } + }, + "title": "Binarni senzor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/sv.json b/homeassistant/components/binary_sensor/translations/sv.json new file mode 100644 index 00000000000..c651d895fda --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/sv.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name}-batteriet \u00e4r l\u00e5gt", + "is_cold": "{entity_name} \u00e4r kall", + "is_connected": "{entity_name} \u00e4r ansluten", + "is_gas": "{entity_name} detekterar gas", + "is_hot": "{entity_name} \u00e4r varm", + "is_light": "{entity_name} uppt\u00e4cker ljus", + "is_locked": "{entity_name} \u00e4r l\u00e5st", + "is_moist": "{entity_name} \u00e4r fuktig", + "is_motion": "{entity_name} detekterar r\u00f6relse", + "is_moving": "{entity_name} r\u00f6r sig", + "is_no_gas": "{entity_name} uppt\u00e4cker inte gas", + "is_no_light": "{entity_name} uppt\u00e4cker inte ljus", + "is_no_motion": "{entity_name} detekterar inte r\u00f6relse", + "is_no_problem": "{entity_name} uppt\u00e4cker inte problem", + "is_no_smoke": "{entity_name} detekterar inte r\u00f6k", + "is_no_sound": "{entity_name} uppt\u00e4cker inte ljud", + "is_no_vibration": "{entity_name} uppt\u00e4cker inte vibrationer", + "is_not_bat_low": "{entity_name} batteri \u00e4r normalt", + "is_not_cold": "{entity_name} \u00e4r inte kall", + "is_not_connected": "{entity_name} \u00e4r fr\u00e5nkopplad", + "is_not_hot": "{entity_name} \u00e4r inte varm", + "is_not_locked": "{entity_name} \u00e4r ol\u00e5st", + "is_not_moist": "{entity_name} \u00e4r torr", + "is_not_moving": "{entity_name} r\u00f6r sig inte", + "is_not_occupied": "{entity_name} \u00e4r inte upptagen", + "is_not_open": "{entity_name} \u00e4r st\u00e4ngd", + "is_not_plugged_in": "{entity_name} \u00e4r urkopplad", + "is_not_powered": "{entity_name} \u00e4r inte str\u00f6mf\u00f6rd", + "is_not_present": "{entity_name} finns inte", + "is_not_unsafe": "{entity_name} \u00e4r s\u00e4ker", + "is_occupied": "{entity_name} \u00e4r upptagen", + "is_off": "{entity_name} \u00e4r avst\u00e4ngd", + "is_on": "{entity_name} \u00e4r p\u00e5", + "is_open": "{entity_name} \u00e4r \u00f6ppen", + "is_plugged_in": "{entity_name} \u00e4r ansluten", + "is_powered": "{entity_name} \u00e4r str\u00f6mf\u00f6rd", + "is_present": "{entity_name} \u00e4r n\u00e4rvarande", + "is_problem": "{entity_name} uppt\u00e4cker problem", + "is_smoke": "{entity_name} detekterar r\u00f6k", + "is_sound": "{entity_name} uppt\u00e4cker ljud", + "is_unsafe": "{entity_name} \u00e4r os\u00e4ker", + "is_vibration": "{entity_name} uppt\u00e4cker vibrationer" + }, + "trigger_type": { + "bat_low": "{entity_name} batteri l\u00e5gt", + "cold": "{entity_name} blev kall", + "connected": "{entity_name} ansluten", + "gas": "{entity_name} b\u00f6rjade detektera gas", + "hot": "{entity_name} blev varm", + "light": "{entity_name} b\u00f6rjade uppt\u00e4cka ljus", + "locked": "{entity_name} l\u00e5st", + "moist": "{entity_name} blev fuktig", + "motion": "{entity_name} b\u00f6rjade detektera r\u00f6relse", + "moving": "{entity_name} b\u00f6rjade r\u00f6ra sig", + "no_gas": "{entity_name} slutade uppt\u00e4cka gas", + "no_light": "{entity_name} slutade uppt\u00e4cka ljus", + "no_motion": "{entity_name} slutade uppt\u00e4cka r\u00f6relse", + "no_problem": "{entity_name} slutade uppt\u00e4cka problem", + "no_smoke": "{entity_name} slutade detektera r\u00f6k", + "no_sound": "{entity_name} slutade uppt\u00e4cka ljud", + "no_vibration": "{entity_name} slutade uppt\u00e4cka vibrationer", + "not_bat_low": "{entity_name} batteri normalt", + "not_cold": "{entity_name} blev inte kall", + "not_connected": "{entity_name} fr\u00e5nkopplad", + "not_hot": "{entity_name} blev inte varm", + "not_locked": "{entity_name} ol\u00e5st", + "not_moist": "{entity_name} blev torr", + "not_moving": "{entity_name} slutade r\u00f6ra sig", + "not_occupied": "{entity_name} blev inte upptagen", + "not_opened": "{entity_name} st\u00e4ngd", + "not_plugged_in": "{entity_name} urkopplad", + "not_powered": "{entity_name} inte str\u00f6mf\u00f6rd", + "not_present": "{entity_name} inte n\u00e4rvarande", + "not_unsafe": "{entity_name} blev s\u00e4ker", + "occupied": "{entity_name} blev upptagen", + "opened": "{entity_name} \u00f6ppnades", + "plugged_in": "{entity_name} ansluten", + "powered": "{entity_name} str\u00f6mf\u00f6rd", + "present": "{entity_name} n\u00e4rvarande", + "problem": "{entity_name} b\u00f6rjade uppt\u00e4cka problem", + "smoke": "{entity_name} b\u00f6rjade detektera r\u00f6k", + "sound": "{entity_name} b\u00f6rjade uppt\u00e4cka ljud", + "turned_off": "{entity_name} st\u00e4ngdes av", + "turned_on": "{entity_name} slogs p\u00e5", + "unsafe": "{entity_name} blev os\u00e4ker", + "vibration": "{entity_name} b\u00f6rjade detektera vibrationer" + } + }, + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + }, + "battery": { + "off": "Normal", + "on": "L\u00e5g" + }, + "cold": { + "off": "Normal", + "on": "Kallt" + }, + "connectivity": { + "off": "Fr\u00e5nkopplad", + "on": "Ansluten" + }, + "door": { + "off": "St\u00e4ngd", + "on": "\u00d6ppen" + }, + "garage_door": { + "off": "St\u00e4ngd", + "on": "\u00d6ppen" + }, + "gas": { + "off": "Klart", + "on": "Detekterad" + }, + "heat": { + "off": "Normal", + "on": "Varmt" + }, + "lock": { + "off": "L\u00e5st", + "on": "Ol\u00e5st" + }, + "moisture": { + "off": "Torr", + "on": "Bl\u00f6t" + }, + "motion": { + "off": "Klart", + "on": "Detekterad" + }, + "occupancy": { + "off": "Tomt", + "on": "Detekterad" + }, + "opening": { + "off": "St\u00e4ngd", + "on": "\u00d6ppen" + }, + "presence": { + "off": "Borta", + "on": "Hemma" + }, + "problem": { + "off": "Ok", + "on": "Problem" + }, + "safety": { + "off": "S\u00e4ker", + "on": "Os\u00e4ker" + }, + "smoke": { + "off": "Klart", + "on": "Detekterad" + }, + "sound": { + "off": "Klart", + "on": "Detekterad" + }, + "vibration": { + "off": "Klart", + "on": "Detekterad" + }, + "window": { + "off": "St\u00e4ngt", + "on": "\u00d6ppet" + } + }, + "title": "Bin\u00e4r sensor" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/ta.json b/homeassistant/components/binary_sensor/translations/ta.json new file mode 100644 index 00000000000..a720b61c69c --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/ta.json @@ -0,0 +1,60 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd " + }, + "gas": { + "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1", + "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "heat": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b9a\u0bc2\u0b9f\u0bbe\u0ba9" + }, + "moisture": { + "off": "\u0b89\u0bb2\u0bb0\u0bcd", + "on": "\u0b88\u0bb0\u0bae\u0bcd" + }, + "motion": { + "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ", + "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "occupancy": { + "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ", + "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "opening": { + "off": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "on": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1" + }, + "presence": { + "off": "\u0ba4\u0bca\u0bb2\u0bc8\u0bb5\u0bbf\u0bb2\u0bcd", + "on": "\u0bae\u0bc1\u0b95\u0baa\u0bcd\u0baa\u0bc1" + }, + "problem": { + "off": "\u0b9a\u0bb0\u0bbf", + "on": "\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb2\u0bcd" + }, + "safety": { + "off": "\u0baa\u0bbe\u0ba4\u0bc1\u0b95\u0bbe\u0baa\u0bcd\u0baa\u0bbe\u0ba9", + "on": "\u0baa\u0bbe\u0ba4\u0bc1\u0b95\u0bbe\u0baa\u0bcd\u0baa\u0bb1\u0bcd\u0bb1" + }, + "smoke": { + "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ", + "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "sound": { + "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ", + "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "vibration": { + "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ", + "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "window": { + "off": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1", + "on": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/te.json b/homeassistant/components/binary_sensor/translations/te.json new file mode 100644 index 00000000000..4d5817d7492 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/te.json @@ -0,0 +1,84 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + }, + "battery": { + "off": "\u0c38\u0c3e\u0c27\u0c3e\u0c30\u0c23", + "on": "\u0c24\u0c15\u0c4d\u0c15\u0c41\u0c35" + }, + "cold": { + "on": "\u0c1a\u0c32\u0c4d\u0c32\u0c28\u0c3f" + }, + "connectivity": { + "off": "\u0c21\u0c3f\u0c38\u0c4d\u0c15\u0c28\u0c46\u0c15\u0c4d\u0c1f\u0c4d", + "on": "\u0c15\u0c28\u0c46\u0c15\u0c4d\u0c1f\u0c4d" + }, + "door": { + "off": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f", + "on": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f" + }, + "garage_door": { + "off": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f", + "on": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f" + }, + "gas": { + "off": "\u0c17\u0c4d\u0c2f\u0c3e\u0c38\u0c4d \u0c06\u0c2b\u0c4d", + "on": "\u0c17\u0c4d\u0c2f\u0c3e\u0c38\u0c4d \u0c06\u0c28\u0c4d" + }, + "heat": { + "off": "\u0c38\u0c3e\u0c27\u0c3e\u0c30\u0c23", + "on": "\u0c35\u0c47\u0c21\u0c3f" + }, + "lock": { + "off": "\u0c32\u0c3e\u0c15\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f", + "on": "\u0c32\u0c3e\u0c15\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c32\u0c47\u0c26\u0c41" + }, + "moisture": { + "off": "\u0c2a\u0c4a\u0c21\u0c3f", + "on": "\u0c24\u0c21\u0c3f" + }, + "motion": { + "off": "\u0c15\u0c26\u0c32\u0c3f\u0c15 \u0c32\u0c47\u0c26\u0c41", + "on": "\u0c15\u0c26\u0c32\u0c3f\u0c15 \u0c35\u0c41\u0c02\u0c26\u0c3f" + }, + "occupancy": { + "off": "\u0c09\u0c28\u0c3f\u0c15\u0c3f\u0c21\u0c3f \u0c32\u0c47\u0c26\u0c41", + "on": "\u0c09\u0c28\u0c3f\u0c15\u0c3f\u0c21\u0c3f \u0c09\u0c02\u0c26\u0c3f" + }, + "opening": { + "off": "\u0c2e\u0c42\u0c38\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f", + "on": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f" + }, + "presence": { + "off": "\u0c2c\u0c2f\u0c1f", + "on": "\u0c07\u0c02\u0c1f" + }, + "problem": { + "off": "OK", + "on": "\u0c38\u0c2e\u0c38\u0c4d\u0c2f" + }, + "safety": { + "off": "\u0c15\u0c4d\u0c37\u0c47\u0c2e\u0c02", + "on": "\u0c15\u0c4d\u0c37\u0c47\u0c2e\u0c02 \u0c15\u0c3e\u0c26\u0c41" + }, + "smoke": { + "off": "\u0c2a\u0c4a\u0c17 \u0c32\u0c47\u0c26\u0c41", + "on": "\u0c2a\u0c4a\u0c17 \u0c35\u0c41\u0c02\u0c26\u0c3f" + }, + "sound": { + "off": "\u0c36\u0c2c\u0c4d\u0c27\u0c02 \u0c32\u0c47\u0c26\u0c41", + "on": "\u0c36\u0c2c\u0c4d\u0c27\u0c02 \u0c35\u0c41\u0c02\u0c26\u0c3f" + }, + "vibration": { + "off": "\u0c15\u0c26\u0c32\u0c1f\u0c4d\u0c32\u0c47\u0c26\u0c41", + "on": "\u0c15\u0c26\u0c41\u0c32\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f" + }, + "window": { + "off": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f", + "on": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f" + } + }, + "title": "\u0c2c\u0c48\u0c28\u0c30\u0c40 \u0c38\u0c46\u0c28\u0c4d\u0c38\u0c3e\u0c30\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/th.json b/homeassistant/components/binary_sensor/translations/th.json new file mode 100644 index 00000000000..b8f41eb2b73 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/th.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + }, + "battery": { + "off": "\u0e1b\u0e01\u0e15\u0e34", + "on": "\u0e15\u0e48\u0e33" + }, + "cold": { + "off": "\u0e1b\u0e01\u0e15\u0e34", + "on": "\u0e2b\u0e19\u0e32\u0e27" + }, + "connectivity": { + "off": "\u0e15\u0e31\u0e14\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d", + "on": "\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e41\u0e25\u0e49\u0e27" + }, + "door": { + "off": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27", + "on": "\u0e40\u0e1b\u0e34\u0e14" + }, + "garage_door": { + "off": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27", + "on": "\u0e40\u0e1b\u0e34\u0e14" + }, + "gas": { + "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e41\u0e01\u0e4a\u0e2a", + "on": "\u0e15\u0e23\u0e27\u0e08\u0e1e\u0e1a\u0e41\u0e01\u0e4a\u0e2a" + }, + "heat": { + "off": "\u0e1b\u0e01\u0e15\u0e34", + "on": "\u0e23\u0e49\u0e2d\u0e19" + }, + "lock": { + "off": "\u0e25\u0e47\u0e2d\u0e04\u0e2d\u0e22\u0e39\u0e48", + "on": "\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04\u0e41\u0e25\u0e49\u0e27" + }, + "moisture": { + "off": "\u0e41\u0e2b\u0e49\u0e07", + "on": "\u0e40\u0e1b\u0e35\u0e22\u0e01" + }, + "motion": { + "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e2b\u0e27", + "on": "\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e2b\u0e27" + }, + "occupancy": { + "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a", + "on": "\u0e1e\u0e1a" + }, + "opening": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + }, + "presence": { + "off": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48", + "on": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19" + }, + "problem": { + "off": "\u0e15\u0e01\u0e25\u0e07", + "on": "\u0e1b\u0e31\u0e0d\u0e2b\u0e32" + }, + "safety": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + }, + "smoke": { + "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e04\u0e27\u0e31\u0e19", + "on": "\u0e1e\u0e1a\u0e04\u0e27\u0e31\u0e19" + }, + "sound": { + "off": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e22\u0e34\u0e19", + "on": "\u0e44\u0e14\u0e49\u0e22\u0e34\u0e19" + }, + "vibration": { + "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e19", + "on": "\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e19" + }, + "window": { + "off": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e40\u0e0b\u0e47\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e41\u0e1a\u0e1a\u0e44\u0e1a\u0e19\u0e32\u0e23\u0e35" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/tr.json b/homeassistant/components/binary_sensor/translations/tr.json new file mode 100644 index 00000000000..582668c179d --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/tr.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + }, + "battery": { + "off": "Normal", + "on": "D\u00fc\u015f\u00fck" + }, + "cold": { + "off": "Normal", + "on": "So\u011fuk" + }, + "connectivity": { + "off": "Ba\u011flant\u0131 kesildi", + "on": "Ba\u011fl\u0131" + }, + "door": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + }, + "garage_door": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + }, + "gas": { + "off": "Temiz", + "on": "Alg\u0131land\u0131" + }, + "heat": { + "off": "Normal", + "on": "S\u0131cak" + }, + "lock": { + "off": "Kilit kapal\u0131", + "on": "Kilit a\u00e7\u0131k" + }, + "moisture": { + "off": "Kuru", + "on": "Islak" + }, + "motion": { + "off": "Temiz", + "on": "Alg\u0131land\u0131" + }, + "occupancy": { + "off": "Temiz", + "on": "Alg\u0131land\u0131" + }, + "opening": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + }, + "presence": { + "off": "D\u0131\u015farda", + "on": "Evde" + }, + "problem": { + "off": "Tamam", + "on": "Sorun" + }, + "safety": { + "off": "G\u00fcvenli", + "on": "G\u00fcvensiz" + }, + "smoke": { + "off": "Temiz", + "on": "Alg\u0131land\u0131" + }, + "sound": { + "off": "Temiz", + "on": "Alg\u0131land\u0131" + }, + "vibration": { + "off": "Temiz", + "on": "Alg\u0131land\u0131" + }, + "window": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "\u0130kili sens\u00f6r" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/uk.json b/homeassistant/components/binary_sensor/translations/uk.json new file mode 100644 index 00000000000..7b01acae4fb --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/uk.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + }, + "battery": { + "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0438\u0439", + "on": "\u041d\u0438\u0437\u044c\u043a\u0438\u0439" + }, + "cold": { + "off": "\u041d\u043e\u0440\u043c\u0430", + "on": "\u041e\u0445\u043e\u043b\u043e\u0434\u0436\u0435\u043d\u043d\u044f" + }, + "connectivity": { + "off": "\u0412\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e", + "on": "\u041f\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e" + }, + "door": { + "off": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0456", + "on": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u0456" + }, + "garage_door": { + "off": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0406", + "on": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0456" + }, + "gas": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0433\u0430\u0437" + }, + "heat": { + "off": "\u041d\u043e\u0440\u043c\u0430", + "on": "\u041d\u0430\u0433\u0440\u0456\u0432\u0430\u043d\u043d\u044f" + }, + "lock": { + "off": "\u0417\u0430\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e", + "on": "\u0420\u043e\u0437\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e" + }, + "moisture": { + "off": "\u0421\u0443\u0445\u043e", + "on": "\u0412\u043e\u043b\u043e\u0433\u043e" + }, + "motion": { + "off": "\u041d\u0435\u043c\u0430\u0454 \u0440\u0443\u0445\u0443", + "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0440\u0443\u0445" + }, + "occupancy": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u043d\u0456\u0441\u0442\u044c" + }, + "opening": { + "off": "\u0417\u0430\u043a\u0440\u0438\u0442\u043e", + "on": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438\u0439" + }, + "presence": { + "off": "\u041d\u0435 \u0432\u0434\u043e\u043c\u0430", + "on": "\u0412\u0434\u043e\u043c\u0430" + }, + "problem": { + "off": "\u041e\u041a", + "on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430" + }, + "safety": { + "off": "\u0411\u0435\u0437\u043f\u0435\u0447\u043d\u043e", + "on": "\u041d\u0435\u0431\u0435\u0437\u043f\u0435\u0447\u043d\u043e" + }, + "smoke": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0434\u0438\u043c" + }, + "sound": { + "off": "\u0427\u0438\u0441\u0442\u043e", + "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0437\u0432\u0443\u043a" + }, + "vibration": { + "off": "\u041d\u0435 \u0432\u0438\u044f\u0432\u043b\u0435\u043d\u043e", + "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u0430 \u0432\u0456\u0431\u0440\u0430\u0446\u0456\u044f" + }, + "window": { + "off": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0435", + "on": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u0435" + } + }, + "title": "\u0411\u0456\u043d\u0430\u0440\u043d\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/vi.json b/homeassistant/components/binary_sensor/translations/vi.json new file mode 100644 index 00000000000..d74bda46730 --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/vi.json @@ -0,0 +1,85 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + }, + "battery": { + "off": "B\u00ecnh th\u01b0\u1eddng", + "on": "Th\u1ea5p" + }, + "cold": { + "off": "B\u00ecnh th\u01b0\u1eddng", + "on": "L\u1ea1nh" + }, + "connectivity": { + "off": "\u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i", + "on": "\u0110\u00e3 k\u1ebft n\u1ed1i" + }, + "door": { + "off": "\u0110\u00f3ng", + "on": "M\u1edf" + }, + "garage_door": { + "off": "\u0110\u00f3ng", + "on": "M\u1edf" + }, + "gas": { + "off": "Tr\u00f4\u0341ng tra\u0309i", + "on": "Ph\u00e1t hi\u1ec7n" + }, + "heat": { + "off": "B\u00ecnh th\u01b0\u1eddng", + "on": "N\u00f3ng" + }, + "lock": { + "off": "\u0110\u00e3 kho\u00e1", + "on": "M\u1edf kho\u00e1" + }, + "moisture": { + "off": "Kh\u00f4", + "on": "\u01af\u1edbt" + }, + "motion": { + "off": "Tr\u00f4\u0341ng tra\u0309i", + "on": "Ph\u00e1t hi\u1ec7n" + }, + "occupancy": { + "off": "Tr\u00f4\u0341ng tra\u0309i", + "on": "Ph\u00e1t hi\u1ec7n" + }, + "opening": { + "off": "\u0110\u00e3 \u0111\u00f3ng", + "on": "M\u1edf" + }, + "presence": { + "off": "\u0110i v\u1eafng", + "on": "\u1ede nh\u00e0" + }, + "problem": { + "off": "OK", + "on": "C\u00f3 v\u1ea5n \u0111\u1ec1" + }, + "safety": { + "off": "An to\u00e0n", + "on": "Kh\u00f4ng an to\u00e0n" + }, + "smoke": { + "off": "Tr\u00f4\u0341ng tra\u0309i", + "on": "Ph\u00e1t hi\u1ec7n" + }, + "sound": { + "off": "Tr\u00f4\u0341ng tra\u0309i", + "on": "Ph\u00e1t hi\u1ec7n" + }, + "vibration": { + "off": "Tr\u00f4\u0341ng tra\u0309i", + "on": "Ph\u00e1t hi\u1ec7n" + }, + "window": { + "off": "\u0110\u00f3ng", + "on": "M\u1edf" + } + }, + "title": "C\u1ea3m bi\u1ebfn nh\u1ecb ph\u00e2n" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/zh-Hans.json b/homeassistant/components/binary_sensor/translations/zh-Hans.json new file mode 100644 index 00000000000..d2edb26163f --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/zh-Hans.json @@ -0,0 +1,137 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name} \u7535\u6c60\u7535\u91cf\u4f4e", + "is_cold": "{entity_name} \u8fc7\u51b7", + "is_connected": "{entity_name} \u5df2\u8fde\u63a5", + "is_gas": "{entity_name} \u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f", + "is_hot": "{entity_name} \u8fc7\u70ed", + "is_light": "{entity_name} \u68c0\u6d4b\u5230\u5149\u7ebf", + "is_locked": "{entity_name} \u5df2\u9501\u5b9a", + "is_moist": "{entity_name} \u6f6e\u6e7f", + "is_motion": "{entity_name} \u68c0\u6d4b\u5230\u6709\u4eba", + "is_moving": "{entity_name} \u6b63\u5728\u79fb\u52a8", + "is_no_gas": "{entity_name} \u672a\u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f", + "is_no_light": "{entity_name} \u672a\u68c0\u6d4b\u5230\u5149\u7ebf", + "is_no_motion": "{entity_name} \u672a\u68c0\u6d4b\u5230\u6709\u4eba", + "is_no_problem": "{entity_name} \u672a\u53d1\u73b0\u95ee\u9898", + "is_no_smoke": "{entity_name} \u672a\u68c0\u6d4b\u5230\u70df\u96fe", + "is_no_sound": "{entity_name} \u672a\u68c0\u6d4b\u5230\u58f0\u97f3", + "is_no_vibration": "{entity_name} \u672a\u68c0\u6d4b\u5230\u632f\u52a8", + "is_not_bat_low": "{entity_name} \u7535\u6c60\u7535\u91cf\u6b63\u5e38", + "is_not_cold": "{entity_name} \u4e0d\u51b7", + "is_not_connected": "{entity_name} \u5df2\u65ad\u5f00", + "is_not_hot": "{entity_name} \u4e0d\u70ed", + "is_not_locked": "{entity_name} \u5df2\u89e3\u9501", + "is_not_moist": "{entity_name} \u5e72\u71e5", + "is_not_moving": "{entity_name} \u9759\u6b62", + "is_not_open": "{entity_name} \u5df2\u5173\u95ed", + "is_not_plugged_in": "{entity_name} \u672a\u63d2\u5165", + "is_not_powered": "{entity_name} \u672a\u901a\u7535", + "is_not_present": "{entity_name} \u4e0d\u5728\u5bb6", + "is_not_unsafe": "{entity_name} \u5b89\u5168", + "is_off": "{entity_name} \u5df2\u5173\u95ed", + "is_on": "{entity_name} \u5df2\u5f00\u542f", + "is_open": "{entity_name} \u5df2\u6253\u5f00", + "is_plugged_in": "{entity_name} \u5df2\u63d2\u5165", + "is_powered": "{entity_name} \u5df2\u901a\u7535", + "is_present": "{entity_name} \u5728\u5bb6", + "is_problem": "{entity_name} \u53d1\u73b0\u95ee\u9898", + "is_smoke": "{entity_name} \u68c0\u6d4b\u5230\u70df\u96fe", + "is_sound": "{entity_name} \u68c0\u6d4b\u5230\u58f0\u97f3", + "is_unsafe": "{entity_name} \u4e0d\u5b89\u5168", + "is_vibration": "{entity_name} \u68c0\u6d4b\u5230\u632f\u52a8" + }, + "trigger_type": { + "bat_low": "{entity_name} \u7535\u6c60\u7535\u91cf\u4f4e", + "cold": "{entity_name} \u53d8\u51b7", + "connected": "{entity_name} \u5df2\u8fde\u63a5", + "gas": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f", + "hot": "{entity_name} \u53d8\u70ed", + "light": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u5149\u7ebf" + } + }, + "state": { + "_": { + "off": "\u5173\u95ed", + "on": "\u5f00\u542f" + }, + "battery": { + "off": "\u6b63\u5e38", + "on": "\u4f4e" + }, + "cold": { + "off": "\u6b63\u5e38", + "on": "\u8fc7\u51b7" + }, + "connectivity": { + "off": "\u5df2\u65ad\u5f00", + "on": "\u5df2\u8fde\u63a5" + }, + "door": { + "off": "\u5173\u95ed", + "on": "\u5f00\u542f" + }, + "garage_door": { + "off": "\u5173\u95ed", + "on": "\u5f00\u542f" + }, + "gas": { + "off": "\u6b63\u5e38", + "on": "\u89e6\u53d1" + }, + "heat": { + "off": "\u6b63\u5e38", + "on": "\u8fc7\u70ed" + }, + "lock": { + "off": "\u4e0a\u9501", + "on": "\u89e3\u9501" + }, + "moisture": { + "off": "\u5e72\u71e5", + "on": "\u6e7f\u6da6" + }, + "motion": { + "off": "\u672a\u89e6\u53d1", + "on": "\u89e6\u53d1" + }, + "occupancy": { + "off": "\u672a\u89e6\u53d1", + "on": "\u5df2\u89e6\u53d1" + }, + "opening": { + "off": "\u5173\u95ed", + "on": "\u5f00\u542f" + }, + "presence": { + "off": "\u79bb\u5f00", + "on": "\u5728\u5bb6" + }, + "problem": { + "off": "\u6b63\u5e38", + "on": "\u5f02\u5e38" + }, + "safety": { + "off": "\u5b89\u5168", + "on": "\u5371\u9669" + }, + "smoke": { + "off": "\u6b63\u5e38", + "on": "\u89e6\u53d1" + }, + "sound": { + "off": "\u6b63\u5e38", + "on": "\u89e6\u53d1" + }, + "vibration": { + "off": "\u6b63\u5e38", + "on": "\u89e6\u53d1" + }, + "window": { + "off": "\u5173\u95ed", + "on": "\u5f00\u542f" + } + }, + "title": "\u4e8c\u5143\u4f20\u611f\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/zh-Hant.json b/homeassistant/components/binary_sensor/translations/zh-Hant.json new file mode 100644 index 00000000000..a78ecdcf8ef --- /dev/null +++ b/homeassistant/components/binary_sensor/translations/zh-Hant.json @@ -0,0 +1,175 @@ +{ + "device_automation": { + "condition_type": { + "is_bat_low": "{entity_name}\u96fb\u91cf\u904e\u4f4e", + "is_cold": "{entity_name}\u51b7", + "is_connected": "{entity_name}\u5df2\u9023\u7dda", + "is_gas": "{entity_name}\u5075\u6e2c\u5230\u6c23\u9ad4", + "is_hot": "{entity_name}\u71b1", + "is_light": "{entity_name}\u5075\u6e2c\u5230\u5149\u7dda\u4e2d", + "is_locked": "{entity_name}\u5df2\u4e0a\u9396", + "is_moist": "{entity_name}\u6f6e\u6fd5", + "is_motion": "{entity_name}\u5075\u6e2c\u5230\u52d5\u4f5c\u4e2d", + "is_moving": "{entity_name}\u79fb\u52d5\u4e2d", + "is_no_gas": "{entity_name}\u672a\u5075\u6e2c\u5230\u6c23\u9ad4", + "is_no_light": "{entity_name}\u672a\u5075\u6e2c\u5230\u5149\u7dda", + "is_no_motion": "{entity_name}\u672a\u5075\u6e2c\u5230\u52d5\u4f5c", + "is_no_problem": "{entity_name}\u672a\u5075\u6e2c\u5230\u554f\u984c", + "is_no_smoke": "{entity_name}\u672a\u5075\u6e2c\u5230\u7159\u9727", + "is_no_sound": "{entity_name}\u672a\u5075\u6e2c\u5230\u8072\u97f3", + "is_no_vibration": "{entity_name}\u672a\u5075\u6e2c\u5230\u9707\u52d5", + "is_not_bat_low": "{entity_name}\u96fb\u91cf\u6b63\u5e38", + "is_not_cold": "{entity_name}\u4e0d\u51b7", + "is_not_connected": "{entity_name}\u65b7\u7dda", + "is_not_hot": "{entity_name}\u4e0d\u71b1", + "is_not_locked": "{entity_name}\u89e3\u9396", + "is_not_moist": "{entity_name}\u4e7e\u71e5", + "is_not_moving": "{entity_name}\u672a\u5728\u79fb\u52d5", + "is_not_occupied": "{entity_name}\u672a\u6709\u4eba", + "is_not_open": "{entity_name}\u95dc\u9589", + "is_not_plugged_in": "{entity_name}\u672a\u63d2\u5165", + "is_not_powered": "{entity_name}\u672a\u901a\u96fb", + "is_not_present": "{entity_name}\u672a\u51fa\u73fe", + "is_not_unsafe": "{entity_name}\u5b89\u5168", + "is_occupied": "{entity_name}\u6709\u4eba", + "is_off": "{entity_name}\u95dc\u9589", + "is_on": "{entity_name}\u958b\u555f", + "is_open": "{entity_name}\u958b\u555f", + "is_plugged_in": "{entity_name}\u63d2\u5165", + "is_powered": "{entity_name}\u901a\u96fb", + "is_present": "{entity_name}\u51fa\u73fe", + "is_problem": "{entity_name}\u6b63\u5075\u6e2c\u5230\u554f\u984c", + "is_smoke": "{entity_name}\u6b63\u5075\u6e2c\u5230\u7159\u9727", + "is_sound": "{entity_name}\u6b63\u5075\u6e2c\u5230\u8072\u97f3", + "is_unsafe": "{entity_name}\u4e0d\u5b89\u5168", + "is_vibration": "{entity_name}\u6b63\u5075\u6e2c\u5230\u9707\u52d5" + }, + "trigger_type": { + "bat_low": "{entity_name}\u96fb\u91cf\u4f4e", + "cold": "{entity_name}\u5df2\u8b8a\u51b7", + "connected": "{entity_name}\u5df2\u9023\u7dda", + "gas": "{entity_name}\u5df2\u958b\u59cb\u5075\u6e2c\u6c23\u9ad4", + "hot": "{entity_name}\u5df2\u8b8a\u71b1", + "light": "{entity_name}\u5df2\u958b\u59cb\u5075\u6e2c\u5149\u7dda", + "locked": "{entity_name}\u5df2\u4e0a\u9396", + "moist": "{entity_name}\u5df2\u8b8a\u6f6e\u6fd5", + "motion": "{entity_name}\u5df2\u5075\u6e2c\u5230\u52d5\u4f5c", + "moving": "{entity_name}\u958b\u59cb\u79fb\u52d5", + "no_gas": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u6c23\u9ad4", + "no_light": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u5149\u7dda", + "no_motion": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u52d5\u4f5c", + "no_problem": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u554f\u984c", + "no_smoke": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u7159\u9727", + "no_sound": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u8072\u97f3", + "no_vibration": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u9707\u52d5", + "not_bat_low": "{entity_name}\u96fb\u91cf\u6b63\u5e38", + "not_cold": "{entity_name}\u5df2\u4e0d\u51b7", + "not_connected": "{entity_name}\u5df2\u65b7\u7dda", + "not_hot": "{entity_name}\u5df2\u4e0d\u71b1", + "not_locked": "{entity_name}\u5df2\u89e3\u9396", + "not_moist": "{entity_name}\u5df2\u8b8a\u4e7e", + "not_moving": "{entity_name}\u505c\u6b62\u79fb\u52d5", + "not_occupied": "{entity_name}\u672a\u6709\u4eba", + "not_opened": "{entity_name}\u5df2\u95dc\u9589", + "not_plugged_in": "{entity_name}\u672a\u63d2\u5165", + "not_powered": "{entity_name}\u672a\u901a\u96fb", + "not_present": "{entity_name}\u672a\u51fa\u73fe", + "not_unsafe": "{entity_name}\u5df2\u5b89\u5168", + "occupied": "{entity_name}\u8b8a\u6210\u6709\u4eba", + "opened": "{entity_name}\u5df2\u958b\u555f", + "plugged_in": "{entity_name}\u5df2\u63d2\u5165", + "powered": "{entity_name}\u5df2\u901a\u96fb", + "present": "{entity_name}\u5df2\u51fa\u73fe", + "problem": "{entity_name}\u5df2\u5075\u6e2c\u5230\u554f\u984c", + "smoke": "{entity_name}\u5df2\u5075\u6e2c\u5230\u7159\u9727", + "sound": "{entity_name}\u5df2\u5075\u6e2c\u5230\u8072\u97f3", + "turned_off": "{entity_name}\u5df2\u95dc\u9589", + "turned_on": "{entity_name}\u5df2\u958b\u555f", + "unsafe": "{entity_name}\u5df2\u4e0d\u5b89\u5168", + "vibration": "{entity_name}\u5df2\u5075\u6e2c\u5230\u9707\u52d5" + } + }, + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + }, + "battery": { + "off": "\u96fb\u91cf\u6b63\u5e38", + "on": "\u96fb\u91cf\u4f4e" + }, + "cold": { + "off": "\u6b63\u5e38", + "on": "\u51b7" + }, + "connectivity": { + "off": "\u5df2\u65b7\u7dda", + "on": "\u5df2\u9023\u7dda" + }, + "door": { + "off": "\u5df2\u95dc\u9589", + "on": "\u5df2\u958b\u555f" + }, + "garage_door": { + "off": "\u95dc\u9589", + "on": "\u5df2\u958b\u555f" + }, + "gas": { + "off": "\u672a\u89f8\u767c", + "on": "\u5df2\u89f8\u767c" + }, + "heat": { + "off": "\u6b63\u5e38", + "on": "\u71b1" + }, + "lock": { + "off": "\u5df2\u4e0a\u9396", + "on": "\u5df2\u89e3\u9396" + }, + "moisture": { + "off": "\u4e7e\u71e5", + "on": "\u6fd5\u6f64" + }, + "motion": { + "off": "\u7121\u4eba", + "on": "\u6709\u4eba" + }, + "occupancy": { + "off": "\u672a\u89f8\u767c", + "on": "\u5df2\u89f8\u767c" + }, + "opening": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + }, + "presence": { + "off": "\u96e2\u5bb6", + "on": "\u5728\u5bb6" + }, + "problem": { + "off": "\u78ba\u5b9a", + "on": "\u7570\u5e38" + }, + "safety": { + "off": "\u5b89\u5168", + "on": "\u5371\u96aa" + }, + "smoke": { + "off": "\u672a\u89f8\u767c", + "on": "\u5df2\u89f8\u767c" + }, + "sound": { + "off": "\u672a\u89f8\u767c", + "on": "\u5df2\u89f8\u767c" + }, + "vibration": { + "off": "\u672a\u5075\u6e2c", + "on": "\u5075\u6e2c" + }, + "window": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + } + }, + "title": "\u4e8c\u9032\u4f4d\u50b3\u611f\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/bitcoin/manifest.json b/homeassistant/components/bitcoin/manifest.json index caf1aafcacf..e198813dbee 100644 --- a/homeassistant/components/bitcoin/manifest.json +++ b/homeassistant/components/bitcoin/manifest.json @@ -3,6 +3,5 @@ "name": "Bitcoin", "documentation": "https://www.home-assistant.io/integrations/bitcoin", "requirements": ["blockchain==1.4.4"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/bitcoin/sensor.py b/homeassistant/components/bitcoin/sensor.py index a488fa1e2fa..c748b2f72f9 100644 --- a/homeassistant/components/bitcoin/sensor.py +++ b/homeassistant/components/bitcoin/sensor.py @@ -63,7 +63,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Bitcoin sensors.""" - currency = config.get(CONF_CURRENCY) + currency = config[CONF_CURRENCY] if currency not in exchangerates.get_ticker(): _LOGGER.warning("Currency %s is not available. Using USD", currency) diff --git a/homeassistant/components/bizkaibus/manifest.json b/homeassistant/components/bizkaibus/manifest.json index 63c0494c2f1..d403d96ce6f 100644 --- a/homeassistant/components/bizkaibus/manifest.json +++ b/homeassistant/components/bizkaibus/manifest.json @@ -2,7 +2,6 @@ "domain": "bizkaibus", "name": "Bizkaibus", "documentation": "https://www.home-assistant.io/integrations/bizkaibus", - "dependencies": [], "codeowners": ["@UgaitzEtxebarria"], "requirements": ["bizkaibus==0.1.1"] } diff --git a/homeassistant/components/bizkaibus/sensor.py b/homeassistant/components/bizkaibus/sensor.py index c58873473d5..0b8e2682f30 100644 --- a/homeassistant/components/bizkaibus/sensor.py +++ b/homeassistant/components/bizkaibus/sensor.py @@ -30,7 +30,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Bizkaibus public transport sensor.""" - name = config.get(CONF_NAME) + name = config[CONF_NAME] stop = config[CONF_STOP_ID] route = config[CONF_ROUTE] diff --git a/homeassistant/components/blackbird/manifest.json b/homeassistant/components/blackbird/manifest.json index d68703eee84..f094109ba84 100644 --- a/homeassistant/components/blackbird/manifest.json +++ b/homeassistant/components/blackbird/manifest.json @@ -3,6 +3,5 @@ "name": "Monoprice Blackbird Matrix Switch", "documentation": "https://www.home-assistant.io/integrations/blackbird", "requirements": ["pyblackbird==0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/blackbird/services.yaml b/homeassistant/components/blackbird/services.yaml index d541e21049d..a783dff241b 100644 --- a/homeassistant/components/blackbird/services.yaml +++ b/homeassistant/components/blackbird/services.yaml @@ -3,8 +3,7 @@ set_all_zones: fields: entity_id: description: Name of any blackbird zone. - example: 'media_player.zone_1' + example: "media_player.zone_1" source: description: Name of source to switch to. - example: 'Source 1' - + example: "Source 1" diff --git a/homeassistant/components/blink/manifest.json b/homeassistant/components/blink/manifest.json index 4912f72b906..d55510c44ad 100644 --- a/homeassistant/components/blink/manifest.json +++ b/homeassistant/components/blink/manifest.json @@ -2,7 +2,6 @@ "domain": "blink", "name": "Blink", "documentation": "https://www.home-assistant.io/integrations/blink", - "requirements": ["blinkpy==0.14.2"], - "dependencies": [], + "requirements": ["blinkpy==0.14.3"], "codeowners": ["@fronzbot"] } diff --git a/homeassistant/components/blink/services.yaml b/homeassistant/components/blink/services.yaml index fc042b0d598..37595837c11 100644 --- a/homeassistant/components/blink/services.yaml +++ b/homeassistant/components/blink/services.yaml @@ -1,21 +1,21 @@ # Describes the format for available Blink services blink_update: - description: Force a refresh. + description: Force a refresh. trigger_camera: - description: Request named camera to take new image. - fields: - name: - description: Name of camera to take new image. - example: 'Living Room' + description: Request named camera to take new image. + fields: + name: + description: Name of camera to take new image. + example: "Living Room" save_video: - description: Save last recorded video clip to local file. - fields: - name: - description: Name of camera to grab video from. - example: 'Living Room' - filename: - description: Filename to writable path (directory may need to be included in whitelist_dirs in config) - example: '/tmp/video.mp4' + description: Save last recorded video clip to local file. + fields: + name: + description: Name of camera to grab video from. + example: "Living Room" + filename: + description: Filename to writable path (directory may need to be included in whitelist_dirs in config) + example: "/tmp/video.mp4" diff --git a/homeassistant/components/blinksticklight/light.py b/homeassistant/components/blinksticklight/light.py index 197213f7473..4eab2fc3d11 100644 --- a/homeassistant/components/blinksticklight/light.py +++ b/homeassistant/components/blinksticklight/light.py @@ -35,8 +35,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Blinkstick device specified by serial number.""" - name = config.get(CONF_NAME) - serial = config.get(CONF_SERIAL) + name = config[CONF_NAME] + serial = config[CONF_SERIAL] stick = blinkstick.find_by_serial(serial) diff --git a/homeassistant/components/blinksticklight/manifest.json b/homeassistant/components/blinksticklight/manifest.json index 75ee7c8ad36..07726bc8cb0 100644 --- a/homeassistant/components/blinksticklight/manifest.json +++ b/homeassistant/components/blinksticklight/manifest.json @@ -3,6 +3,5 @@ "name": "BlinkStick", "documentation": "https://www.home-assistant.io/integrations/blinksticklight", "requirements": ["blinkstick==1.1.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/blinkt/light.py b/homeassistant/components/blinkt/light.py index 0fedc2b794b..d9ef2ac6a7e 100644 --- a/homeassistant/components/blinkt/light.py +++ b/homeassistant/components/blinkt/light.py @@ -35,7 +35,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): # ensure that the lights are off when exiting blinkt.set_clear_on_exit() - name = config.get(CONF_NAME) + name = config[CONF_NAME] add_entities( [BlinktLight(blinkt, name, index) for index in range(blinkt.NUM_PIXELS)] diff --git a/homeassistant/components/blinkt/manifest.json b/homeassistant/components/blinkt/manifest.json index f61b674aa3a..4759a356d9d 100644 --- a/homeassistant/components/blinkt/manifest.json +++ b/homeassistant/components/blinkt/manifest.json @@ -3,6 +3,5 @@ "name": "Blinkt!", "documentation": "https://www.home-assistant.io/integrations/blinkt", "requirements": ["blinkt==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/blockchain/manifest.json b/homeassistant/components/blockchain/manifest.json index 324abf792df..f30f7d041a0 100644 --- a/homeassistant/components/blockchain/manifest.json +++ b/homeassistant/components/blockchain/manifest.json @@ -3,6 +3,5 @@ "name": "Blockchain.com", "documentation": "https://www.home-assistant.io/integrations/blockchain", "requirements": ["python-blockchain-api==0.0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/blockchain/sensor.py b/homeassistant/components/blockchain/sensor.py index acf86957957..feb9d582cff 100644 --- a/homeassistant/components/blockchain/sensor.py +++ b/homeassistant/components/blockchain/sensor.py @@ -33,8 +33,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Blockchain.com sensors.""" - addresses = config.get(CONF_ADDRESSES) - name = config.get(CONF_NAME) + addresses = config[CONF_ADDRESSES] + name = config[CONF_NAME] for address in addresses: if not validate_address(address): diff --git a/homeassistant/components/bloomsky/__init__.py b/homeassistant/components/bloomsky/__init__.py index 6373471fe7a..929f8218144 100644 --- a/homeassistant/components/bloomsky/__init__.py +++ b/homeassistant/components/bloomsky/__init__.py @@ -6,14 +6,13 @@ from aiohttp.hdrs import AUTHORIZATION import requests import voluptuous as vol -from homeassistant.const import CONF_API_KEY +from homeassistant.const import CONF_API_KEY, HTTP_OK from homeassistant.helpers import discovery import homeassistant.helpers.config_validation as cv from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) -BLOOMSKY = None BLOOMSKY_TYPE = ["camera", "binary_sensor", "sensor"] DOMAIN = "bloomsky" @@ -31,12 +30,13 @@ def setup(hass, config): """Set up the BloomSky component.""" api_key = config[DOMAIN][CONF_API_KEY] - global BLOOMSKY try: - BLOOMSKY = BloomSky(api_key, hass.config.units.is_metric) + bloomsky = BloomSky(api_key, hass.config.units.is_metric) except RuntimeError: return False + hass.data[DOMAIN] = bloomsky + for component in BLOOMSKY_TYPE: discovery.load_platform(hass, component, DOMAIN, {}, config) @@ -72,7 +72,7 @@ class BloomSky: if response.status_code == 405: _LOGGER.error("You have no bloomsky devices configured") return - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.error("Invalid HTTP response: %s", response.status_code) return # Create dictionary keyed off of the device unique id diff --git a/homeassistant/components/bloomsky/binary_sensor.py b/homeassistant/components/bloomsky/binary_sensor.py index 516fa42cb5c..4e6fc867f2d 100644 --- a/homeassistant/components/bloomsky/binary_sensor.py +++ b/homeassistant/components/bloomsky/binary_sensor.py @@ -7,7 +7,7 @@ from homeassistant.components.binary_sensor import PLATFORM_SCHEMA, BinarySensor from homeassistant.const import CONF_MONITORED_CONDITIONS import homeassistant.helpers.config_validation as cv -from . import BLOOMSKY +from . import DOMAIN _LOGGER = logging.getLogger(__name__) @@ -25,11 +25,15 @@ 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 - sensors = config.get(CONF_MONITORED_CONDITIONS, SENSOR_TYPES) + if discovery_info is not None: + return - for device in BLOOMSKY.devices.values(): + sensors = config[CONF_MONITORED_CONDITIONS] + bloomsky = hass.data[DOMAIN] + + for device in bloomsky.devices.values(): for variable in sensors: - add_entities([BloomSkySensor(BLOOMSKY, device, variable)], True) + add_entities([BloomSkySensor(bloomsky, device, variable)], True) class BloomSkySensor(BinarySensorDevice): diff --git a/homeassistant/components/bloomsky/camera.py b/homeassistant/components/bloomsky/camera.py index d62dede5abd..e14e2f5c68b 100644 --- a/homeassistant/components/bloomsky/camera.py +++ b/homeassistant/components/bloomsky/camera.py @@ -5,13 +5,18 @@ import requests from homeassistant.components.camera import Camera -from . import BLOOMSKY +from . import DOMAIN def setup_platform(hass, config, add_entities, discovery_info=None): """Set up access to BloomSky cameras.""" - for device in BLOOMSKY.devices.values(): - add_entities([BloomSkyCamera(BLOOMSKY, device)]) + if discovery_info is not None: + return + + bloomsky = hass.data[DOMAIN] + + for device in bloomsky.devices.values(): + add_entities([BloomSkyCamera(bloomsky, device)]) class BloomSkyCamera(Camera): diff --git a/homeassistant/components/bloomsky/manifest.json b/homeassistant/components/bloomsky/manifest.json index fdaa649b344..8dda93b16b9 100644 --- a/homeassistant/components/bloomsky/manifest.json +++ b/homeassistant/components/bloomsky/manifest.json @@ -2,7 +2,5 @@ "domain": "bloomsky", "name": "BloomSky", "documentation": "https://www.home-assistant.io/integrations/bloomsky", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bloomsky/sensor.py b/homeassistant/components/bloomsky/sensor.py index b07bca948bd..0a2c19a8cd8 100644 --- a/homeassistant/components/bloomsky/sensor.py +++ b/homeassistant/components/bloomsky/sensor.py @@ -13,7 +13,7 @@ from homeassistant.const import ( import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -from . import BLOOMSKY +from . import DOMAIN LOGGER = logging.getLogger(__name__) @@ -60,11 +60,15 @@ 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 - sensors = config.get(CONF_MONITORED_CONDITIONS, SENSOR_TYPES) + if discovery_info is not None: + return - for device in BLOOMSKY.devices.values(): + sensors = config[CONF_MONITORED_CONDITIONS] + bloomsky = hass.data[DOMAIN] + + for device in bloomsky.devices.values(): for variable in sensors: - add_entities([BloomSkySensor(BLOOMSKY, device, variable)], True) + add_entities([BloomSkySensor(bloomsky, device, variable)], True) class BloomSkySensor(Entity): diff --git a/homeassistant/components/bluesound/manifest.json b/homeassistant/components/bluesound/manifest.json index df6aa5b03de..9ea32a9e5df 100644 --- a/homeassistant/components/bluesound/manifest.json +++ b/homeassistant/components/bluesound/manifest.json @@ -3,6 +3,5 @@ "name": "Bluesound", "documentation": "https://www.home-assistant.io/integrations/bluesound", "requirements": ["xmltodict==0.12.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bluesound/media_player.py b/homeassistant/components/bluesound/media_player.py index e2cc0dd31e2..eb1ce5f30dc 100644 --- a/homeassistant/components/bluesound/media_player.py +++ b/homeassistant/components/bluesound/media_player.py @@ -38,6 +38,7 @@ from homeassistant.const import ( CONF_PORT, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, + HTTP_OK, STATE_IDLE, STATE_OFF, STATE_PAUSED, @@ -155,11 +156,11 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= hass, async_add_entities, discovery_info.get(CONF_HOST), - discovery_info.get(CONF_PORT, None), + discovery_info.get(CONF_PORT), ) return - hosts = config.get(CONF_HOSTS, None) + hosts = config.get(CONF_HOSTS) if hosts: for host in hosts: _add_player( @@ -258,7 +259,7 @@ class BluesoundPlayer(MediaPlayerDevice): if not self._icon: self._icon = self._sync_status.get("@icon", self.host) - master = self._sync_status.get("master", None) + master = self._sync_status.get("master") if master is not None: self._is_master = False master_host = master.get("#text") @@ -276,7 +277,7 @@ class BluesoundPlayer(MediaPlayerDevice): else: if self._master is not None: self._master = None - slaves = self._sync_status.get("slave", None) + slaves = self._sync_status.get("slave") self._is_master = slaves is not None if on_updated_cb: @@ -354,7 +355,7 @@ class BluesoundPlayer(MediaPlayerDevice): with async_timeout.timeout(10): response = await websession.get(url) - if response.status == 200: + if response.status == HTTP_OK: result = await response.text() if result: data = xmltodict.parse(result) @@ -398,13 +399,13 @@ class BluesoundPlayer(MediaPlayerDevice): url, headers={CONNECTION: KEEP_ALIVE} ) - if response.status == 200: + if response.status == HTTP_OK: result = await response.text() self._is_online = True self._last_status_update = dt_util.utcnow() self._status = xmltodict.parse(result)["status"].copy() - group_name = self._status.get("groupName", None) + group_name = self._status.get("groupName") if group_name != self._group_name: _LOGGER.debug("Group name change detected on device: %s", self.host) self._group_name = group_name @@ -426,7 +427,7 @@ class BluesoundPlayer(MediaPlayerDevice): # communication is moved to a separate library await self.force_update_sync_status() - self.async_schedule_update_ha_state() + self.async_write_ha_state() elif response.status == 595: _LOGGER.info("Status 595 returned, treating as timeout") raise BluesoundPlayer._TimeoutException() @@ -439,7 +440,7 @@ class BluesoundPlayer(MediaPlayerDevice): self._is_online = False self._last_status_update = None self._status = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() _LOGGER.info("Client connection error, marking %s as offline", self._name) raise @@ -555,7 +556,7 @@ class BluesoundPlayer(MediaPlayerDevice): if self.is_grouped and not self.is_master: return STATE_GROUPED - status = self._status.get("state", None) + status = self._status.get("state") if status in ("pause", "stop"): return STATE_PAUSED if status in ("stream", "play"): @@ -568,7 +569,7 @@ class BluesoundPlayer(MediaPlayerDevice): if self._status is None or (self.is_grouped and not self.is_master): return None - return self._status.get("title1", None) + return self._status.get("title1") @property def media_artist(self): @@ -579,9 +580,9 @@ class BluesoundPlayer(MediaPlayerDevice): if self.is_grouped and not self.is_master: return self._group_name - artist = self._status.get("artist", None) + artist = self._status.get("artist") if not artist: - artist = self._status.get("title2", None) + artist = self._status.get("title2") return artist @property @@ -590,9 +591,9 @@ class BluesoundPlayer(MediaPlayerDevice): if self._status is None or (self.is_grouped and not self.is_master): return None - album = self._status.get("album", None) + album = self._status.get("album") if not album: - album = self._status.get("title3", None) + album = self._status.get("title3") return album @property @@ -601,7 +602,7 @@ class BluesoundPlayer(MediaPlayerDevice): if self._status is None or (self.is_grouped and not self.is_master): return None - url = self._status.get("image", None) + url = self._status.get("image") if not url: return if url[0] == "/": @@ -619,7 +620,7 @@ class BluesoundPlayer(MediaPlayerDevice): if self._last_status_update is None or mediastate == STATE_IDLE: return None - position = self._status.get("secs", None) + position = self._status.get("secs") if position is None: return None @@ -635,7 +636,7 @@ class BluesoundPlayer(MediaPlayerDevice): if self._status is None or (self.is_grouped and not self.is_master): return None - duration = self._status.get("totlen", None) + duration = self._status.get("totlen") if duration is None: return None return float(duration) @@ -648,9 +649,9 @@ class BluesoundPlayer(MediaPlayerDevice): @property def volume_level(self): """Volume level of the media player (0..1).""" - volume = self._status.get("volume", None) + volume = self._status.get("volume") if self.is_grouped: - volume = self._sync_status.get("@volume", None) + volume = self._sync_status.get("@volume") if volume is not None: return int(volume) / 100 @@ -1038,9 +1039,7 @@ class BluesoundPlayer(MediaPlayerDevice): volume = 0 elif volume > 1: volume = 1 - return await self.send_bluesound_command( - "Volume?level=" + str(float(volume) * 100) - ) + return await self.send_bluesound_command(f"Volume?level={float(volume) * 100}") async def async_mute_volume(self, mute): """Send mute command to media player.""" @@ -1050,5 +1049,5 @@ class BluesoundPlayer(MediaPlayerDevice): self._lastvol = volume return await self.send_bluesound_command("Volume?level=0") return await self.send_bluesound_command( - "Volume?level=" + str(float(self._lastvol) * 100) + f"Volume?level={float(self._lastvol) * 100}" ) diff --git a/homeassistant/components/bluesound/services.yaml b/homeassistant/components/bluesound/services.yaml index 6c85c77e961..0ca12c9e2ae 100644 --- a/homeassistant/components/bluesound/services.yaml +++ b/homeassistant/components/bluesound/services.yaml @@ -3,28 +3,28 @@ join: fields: master: description: Entity ID of the player that should become the master of the group. - example: 'media_player.bluesound_livingroom' + example: "media_player.bluesound_livingroom" entity_id: description: Name(s) of entities that will coordinate the grouping. Platform dependent. - example: 'media_player.bluesound_livingroom' + example: "media_player.bluesound_livingroom" unjoin: description: Unjoin the player from a group. fields: entity_id: description: Name(s) of entities that will be unjoined from their group. Platform dependent. - example: 'media_player.bluesound_livingroom' + example: "media_player.bluesound_livingroom" set_sleep_timer: description: "Set a Bluesound timer. It will increase timer in steps: 15, 30, 45, 60, 90, 0" fields: entity_id: description: Name(s) of entities that will have a timer set. - example: 'media_player.bluesound_livingroom' + example: "media_player.bluesound_livingroom" clear_sleep_timer: description: Clear a Bluesound timer. fields: entity_id: description: Name(s) of entities that will have the timer cleared. - example: 'media_player.bluesound_livingroom' \ No newline at end of file + example: "media_player.bluesound_livingroom" diff --git a/homeassistant/components/bluetooth_le_tracker/manifest.json b/homeassistant/components/bluetooth_le_tracker/manifest.json index 52d2d40a99b..ca4a44c55c6 100644 --- a/homeassistant/components/bluetooth_le_tracker/manifest.json +++ b/homeassistant/components/bluetooth_le_tracker/manifest.json @@ -3,6 +3,5 @@ "name": "Bluetooth LE Tracker", "documentation": "https://www.home-assistant.io/integrations/bluetooth_le_tracker", "requirements": ["pygatt[GATTTOOL]==4.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bluetooth_tracker/device_tracker.py b/homeassistant/components/bluetooth_tracker/device_tracker.py index d833f60c84f..af49266bef4 100644 --- a/homeassistant/components/bluetooth_tracker/device_tracker.py +++ b/homeassistant/components/bluetooth_tracker/device_tracker.py @@ -112,7 +112,7 @@ async def async_setup_scanner( hass: HomeAssistantType, config: dict, async_see, discovery_info=None ): """Set up the Bluetooth Scanner.""" - device_id: int = config.get(CONF_DEVICE_ID) + device_id: int = config[CONF_DEVICE_ID] interval = config.get(CONF_SCAN_INTERVAL, SCAN_INTERVAL) request_rssi = config.get(CONF_REQUEST_RSSI, False) update_bluetooth_lock = asyncio.Lock() diff --git a/homeassistant/components/bluetooth_tracker/manifest.json b/homeassistant/components/bluetooth_tracker/manifest.json index b6ae27346f2..9ef6fddcb0d 100644 --- a/homeassistant/components/bluetooth_tracker/manifest.json +++ b/homeassistant/components/bluetooth_tracker/manifest.json @@ -3,6 +3,5 @@ "name": "Bluetooth Tracker", "documentation": "https://www.home-assistant.io/integrations/bluetooth_tracker", "requirements": ["bt_proximity==0.2", "pybluez==0.22"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bluetooth_tracker/services.yaml b/homeassistant/components/bluetooth_tracker/services.yaml index b48c48a8968..01b31eee63e 100644 --- a/homeassistant/components/bluetooth_tracker/services.yaml +++ b/homeassistant/components/bluetooth_tracker/services.yaml @@ -1,2 +1,2 @@ update: - description: Trigger manual tracker update \ No newline at end of file + description: Trigger manual tracker update diff --git a/homeassistant/components/bme280/manifest.json b/homeassistant/components/bme280/manifest.json index 393d3f45104..2402c41402e 100644 --- a/homeassistant/components/bme280/manifest.json +++ b/homeassistant/components/bme280/manifest.json @@ -3,6 +3,5 @@ "name": "Bosch BME280 Environmental Sensor", "documentation": "https://www.home-assistant.io/integrations/bme280", "requirements": ["i2csense==0.0.4", "smbus-cffi==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bme280/sensor.py b/homeassistant/components/bme280/sensor.py index 28e22c10f20..893ddbf54e9 100644 --- a/homeassistant/components/bme280/sensor.py +++ b/homeassistant/components/bme280/sensor.py @@ -85,22 +85,22 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= """Set up the BME280 sensor.""" SENSOR_TYPES[SENSOR_TEMP][1] = hass.config.units.temperature_unit - name = config.get(CONF_NAME) - i2c_address = config.get(CONF_I2C_ADDRESS) + name = config[CONF_NAME] + i2c_address = config[CONF_I2C_ADDRESS] - bus = smbus.SMBus(config.get(CONF_I2C_BUS)) + bus = smbus.SMBus(config[CONF_I2C_BUS]) sensor = await hass.async_add_job( partial( BME280, bus, i2c_address, - osrs_t=config.get(CONF_OVERSAMPLING_TEMP), - osrs_p=config.get(CONF_OVERSAMPLING_PRES), - osrs_h=config.get(CONF_OVERSAMPLING_HUM), - mode=config.get(CONF_OPERATION_MODE), - t_sb=config.get(CONF_T_STANDBY), - filter_mode=config.get(CONF_FILTER_MODE), - delta_temp=config.get(CONF_DELTA_TEMP), + osrs_t=config[CONF_OVERSAMPLING_TEMP], + osrs_p=config[CONF_OVERSAMPLING_PRES], + osrs_h=config[CONF_OVERSAMPLING_HUM], + mode=config[CONF_OPERATION_MODE], + t_sb=config[CONF_T_STANDBY], + filter_mode=config[CONF_FILTER_MODE], + delta_temp=config[CONF_DELTA_TEMP], logger=_LOGGER, ) ) diff --git a/homeassistant/components/bme680/manifest.json b/homeassistant/components/bme680/manifest.json index 058bbf341e8..be59b2fbaf9 100644 --- a/homeassistant/components/bme680/manifest.json +++ b/homeassistant/components/bme680/manifest.json @@ -3,6 +3,5 @@ "name": "Bosch BME680 Environmental Sensor", "documentation": "https://www.home-assistant.io/integrations/bme680", "requirements": ["bme680==1.0.5", "smbus-cffi==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bme680/sensor.py b/homeassistant/components/bme680/sensor.py index 19d6fbd3086..2d274c077a4 100644 --- a/homeassistant/components/bme680/sensor.py +++ b/homeassistant/components/bme680/sensor.py @@ -61,8 +61,8 @@ SENSOR_TYPES = { SENSOR_AQ: ["Air Quality", UNIT_PERCENTAGE], } DEFAULT_MONITORED = [SENSOR_TEMP, SENSOR_HUMID, SENSOR_PRESS, SENSOR_AQ] -OVERSAMPLING_VALUES = set([0, 1, 2, 4, 8, 16]) -FILTER_VALUES = set([0, 1, 3, 7, 15, 31, 63, 127]) +OVERSAMPLING_VALUES = {0, 1, 2, 4, 8, 16} +FILTER_VALUES = {0, 1, 3, 7, 15, 31, 63, 127} PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -109,7 +109,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the BME680 sensor.""" SENSOR_TYPES[SENSOR_TEMP][1] = hass.config.units.temperature_unit - name = config.get(CONF_NAME) + name = config[CONF_NAME] sensor_handler = await hass.async_add_job(_setup_bme680, config) if sensor_handler is None: @@ -132,8 +132,8 @@ def _setup_bme680(config): sensor = None try: # pylint: disable=no-member - i2c_address = config.get(CONF_I2C_ADDRESS) - bus = SMBus(config.get(CONF_I2C_BUS)) + i2c_address = config[CONF_I2C_ADDRESS] + bus = SMBus(config[CONF_I2C_BUS]) sensor = bme680.BME680(i2c_address, bus) # Configure Oversampling @@ -145,10 +145,10 @@ def _setup_bme680(config): 8: bme680.OS_8X, 16: bme680.OS_16X, } - sensor.set_temperature_oversample(os_lookup[config.get(CONF_OVERSAMPLING_TEMP)]) - sensor.set_temp_offset(config.get(CONF_TEMP_OFFSET)) - sensor.set_humidity_oversample(os_lookup[config.get(CONF_OVERSAMPLING_HUM)]) - sensor.set_pressure_oversample(os_lookup[config.get(CONF_OVERSAMPLING_PRES)]) + sensor.set_temperature_oversample(os_lookup[config[CONF_OVERSAMPLING_TEMP]]) + sensor.set_temp_offset(config[CONF_TEMP_OFFSET]) + sensor.set_humidity_oversample(os_lookup[config[CONF_OVERSAMPLING_HUM]]) + sensor.set_pressure_oversample(os_lookup[config[CONF_OVERSAMPLING_PRES]]) # Configure IIR Filter filter_lookup = { @@ -161,7 +161,7 @@ def _setup_bme680(config): 63: bme680.FILTER_SIZE_63, 127: bme680.FILTER_SIZE_127, } - sensor.set_filter(filter_lookup[config.get(CONF_FILTER_SIZE)]) + sensor.set_filter(filter_lookup[config[CONF_FILTER_SIZE]]) # Configure the Gas Heater if ( diff --git a/homeassistant/components/bmp280/manifest.json b/homeassistant/components/bmp280/manifest.json index d7d3752392b..dbd79896718 100644 --- a/homeassistant/components/bmp280/manifest.json +++ b/homeassistant/components/bmp280/manifest.json @@ -2,7 +2,6 @@ "domain": "bmp280", "name": "Bosch BMP280 Environmental Sensor", "documentation": "https://www.home-assistant.io/integrations/bmp280", - "dependencies": [], "codeowners": ["@belidzs"], "requirements": ["adafruit-circuitpython-bmp280==3.1.1", "RPi.GPIO==0.7.0"], "quality_scale": "silver" diff --git a/homeassistant/components/bmw_connected_drive/__init__.py b/homeassistant/components/bmw_connected_drive/__init__.py index 273bac8ef0e..b8f60dafdbb 100644 --- a/homeassistant/components/bmw_connected_drive/__init__.py +++ b/homeassistant/components/bmw_connected_drive/__init__.py @@ -32,7 +32,7 @@ CONFIG_SCHEMA = vol.Schema({DOMAIN: {cv.string: ACCOUNT_SCHEMA}}, extra=vol.ALLO SERVICE_SCHEMA = vol.Schema({vol.Required(ATTR_VIN): cv.string}) -BMW_COMPONENTS = ["binary_sensor", "device_tracker", "lock", "sensor"] +BMW_COMPONENTS = ["binary_sensor", "device_tracker", "lock", "notify", "sensor"] UPDATE_INTERVAL = 5 # in minutes SERVICE_UPDATE_STATE = "update_state" diff --git a/homeassistant/components/bmw_connected_drive/manifest.json b/homeassistant/components/bmw_connected_drive/manifest.json index 6b6311c6b0d..4521af8d36e 100644 --- a/homeassistant/components/bmw_connected_drive/manifest.json +++ b/homeassistant/components/bmw_connected_drive/manifest.json @@ -2,7 +2,7 @@ "domain": "bmw_connected_drive", "name": "BMW Connected Drive", "documentation": "https://www.home-assistant.io/integrations/bmw_connected_drive", - "requirements": ["bimmer_connected==0.7.1"], + "requirements": ["bimmer_connected==0.7.5"], "dependencies": [], "codeowners": ["@gerard33"] } diff --git a/homeassistant/components/bmw_connected_drive/notify.py b/homeassistant/components/bmw_connected_drive/notify.py new file mode 100644 index 00000000000..9cf2bca2df5 --- /dev/null +++ b/homeassistant/components/bmw_connected_drive/notify.py @@ -0,0 +1,74 @@ +"""Support for BMW notifications.""" +import logging + +from homeassistant.components.notify import ( + ATTR_DATA, + ATTR_TARGET, + ATTR_TITLE, + ATTR_TITLE_DEFAULT, + BaseNotificationService, +) +from homeassistant.const import ATTR_LATITUDE, ATTR_LOCATION, ATTR_LONGITUDE, ATTR_NAME + +from . import DOMAIN as BMW_DOMAIN + +ATTR_LAT = "lat" +ATTR_LOCATION_ATTRIBUTES = ["street", "city", "postal_code", "country"] +ATTR_LON = "lon" +ATTR_SUBJECT = "subject" +ATTR_TEXT = "text" + +_LOGGER = logging.getLogger(__name__) + + +def get_service(hass, config, discovery_info=None): + """Get the BMW notification service.""" + accounts = hass.data[BMW_DOMAIN] + _LOGGER.debug("Found BMW accounts: %s", ", ".join([a.name for a in accounts])) + svc = BMWNotificationService() + svc.setup(accounts) + return svc + + +class BMWNotificationService(BaseNotificationService): + """Send Notifications to BMW.""" + + def __init__(self): + """Set up the notification service.""" + self.targets = {} + + def setup(self, accounts): + """Get the BMW vehicle(s) for the account(s).""" + for account in accounts: + self.targets.update({v.name: v for v in account.account.vehicles}) + + def send_message(self, message="", **kwargs): + """Send a message or POI to the car.""" + for _vehicle in kwargs[ATTR_TARGET]: + _LOGGER.debug("Sending message to %s", _vehicle.name) + + # Extract params from data dict + title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT) + data = kwargs.get(ATTR_DATA) + + # Check if message is a POI + if data is not None and ATTR_LOCATION in data: + location_dict = { + ATTR_LAT: data[ATTR_LOCATION][ATTR_LATITUDE], + ATTR_LON: data[ATTR_LOCATION][ATTR_LONGITUDE], + ATTR_NAME: message, + } + # Update dictionary with additional attributes if available + location_dict.update( + { + k: v + for k, v in data[ATTR_LOCATION].items() + if k in ATTR_LOCATION_ATTRIBUTES + } + ) + + _vehicle.remote_services.trigger_send_poi(location_dict) + else: + _vehicle.remote_services.trigger_send_message( + {ATTR_TEXT: message, ATTR_SUBJECT: title} + ) diff --git a/homeassistant/components/bom/manifest.json b/homeassistant/components/bom/manifest.json index 13537c53d0c..854b42f68d3 100644 --- a/homeassistant/components/bom/manifest.json +++ b/homeassistant/components/bom/manifest.json @@ -3,6 +3,5 @@ "name": "Australian Bureau of Meteorology (BOM)", "documentation": "https://www.home-assistant.io/integrations/bom", "requirements": ["bomradarloop==0.1.4"], - "dependencies": [], "codeowners": ["@maddenp"] } diff --git a/homeassistant/components/bom/sensor.py b/homeassistant/components/bom/sensor.py index 5ecd9c1009f..59ee8027180 100644 --- a/homeassistant/components/bom/sensor.py +++ b/homeassistant/components/bom/sensor.py @@ -19,6 +19,8 @@ from homeassistant.const import ( CONF_LONGITUDE, CONF_MONITORED_CONDITIONS, CONF_NAME, + LENGTH_KILOMETERS, + LENGTH_METERS, SPEED_KILOMETERS_PER_HOUR, TEMP_CELSIUS, UNIT_PERCENTAGE, @@ -72,9 +74,9 @@ SENSOR_TYPES = { "rel_hum": ["Relative Humidity", UNIT_PERCENTAGE], "sea_state": ["Sea State", None], "swell_dir_worded": ["Swell Direction", None], - "swell_height": ["Swell Height", "m"], + "swell_height": ["Swell Height", LENGTH_METERS], "swell_period": ["Swell Period", None], - "vis_km": ["Visability km", "km"], + "vis_km": [f"Visability {LENGTH_KILOMETERS}", LENGTH_KILOMETERS], "weather": ["Weather", None], "wind_dir": ["Wind Direction", None], "wind_spd_kmh": ["Wind Speed kmh", SPEED_KILOMETERS_PER_HOUR], diff --git a/homeassistant/components/braviatv/__init__.py b/homeassistant/components/braviatv/__init__.py index 47c6f4cf24d..9c55ef01cee 100644 --- a/homeassistant/components/braviatv/__init__.py +++ b/homeassistant/components/braviatv/__init__.py @@ -1 +1,47 @@ -"""The braviatv component.""" +"""The Bravia TV component.""" +import asyncio + +from bravia_tv import BraviaRC + +from homeassistant.const import CONF_HOST, CONF_MAC + +from .const import DOMAIN + +PLATFORMS = ["media_player"] + + +async def async_setup(hass, config): + """Set up the Bravia TV component.""" + return True + + +async def async_setup_entry(hass, config_entry): + """Set up a config entry.""" + host = config_entry.data[CONF_HOST] + mac = config_entry.data[CONF_MAC] + + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN][config_entry.entry_id] = BraviaRC(host, mac) + + for component in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(config_entry, component) + ) + + return True + + +async def async_unload_entry(hass, config_entry): + """Unload a config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(config_entry, component) + for component in PLATFORMS + ] + ) + ) + if unload_ok: + hass.data[DOMAIN].pop(config_entry.entry_id) + + return unload_ok diff --git a/homeassistant/components/braviatv/config_flow.py b/homeassistant/components/braviatv/config_flow.py new file mode 100644 index 00000000000..be2a91c8429 --- /dev/null +++ b/homeassistant/components/braviatv/config_flow.py @@ -0,0 +1,189 @@ +"""Adds config flow for Bravia TV integration.""" +import ipaddress +import logging +import re + +from bravia_tv import BraviaRC +import voluptuous as vol + +from homeassistant import config_entries, exceptions +from homeassistant.const import CONF_HOST, CONF_MAC, CONF_PIN +from homeassistant.core import callback +import homeassistant.helpers.config_validation as cv + +from .const import ( # pylint:disable=unused-import + ATTR_CID, + ATTR_MAC, + ATTR_MODEL, + CLIENTID_PREFIX, + CONF_IGNORED_SOURCES, + DOMAIN, + NICKNAME, +) + +_LOGGER = logging.getLogger(__name__) + + +def host_valid(host): + """Return True if hostname or IP address is valid.""" + try: + if ipaddress.ip_address(host).version == (4 or 6): + return True + except ValueError: + disallowed = re.compile(r"[^a-zA-Z\d\-]") + return all(x and not disallowed.search(x) for x in host.split(".")) + + +class BraviaTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow for BraviaTV integration.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL + + def __init__(self): + """Initialize.""" + self.braviarc = None + self.host = None + self.title = None + self.mac = None + + async def init_device(self, pin): + """Initialize Bravia TV device.""" + await self.hass.async_add_executor_job( + self.braviarc.connect, pin, CLIENTID_PREFIX, NICKNAME, + ) + + if not self.braviarc.is_connected(): + raise CannotConnect() + + system_info = await self.hass.async_add_executor_job( + self.braviarc.get_system_info + ) + if not system_info: + raise ModelNotSupported() + + await self.async_set_unique_id(system_info[ATTR_CID].lower()) + self._abort_if_unique_id_configured() + + self.title = system_info[ATTR_MODEL] + self.mac = system_info[ATTR_MAC] + + @staticmethod + @callback + def async_get_options_flow(config_entry): + """Bravia TV options callback.""" + return BraviaTVOptionsFlowHandler(config_entry) + + async def async_step_import(self, user_input=None): + """Handle configuration by yaml file.""" + self.host = user_input[CONF_HOST] + self.braviarc = BraviaRC(self.host) + + try: + await self.init_device(user_input[CONF_PIN]) + except CannotConnect: + _LOGGER.error("Import aborted, cannot connect to %s", self.host) + return self.async_abort(reason="cannot_connect") + except ModelNotSupported: + _LOGGER.error("Import aborted, your TV is not supported") + return self.async_abort(reason="unsupported_model") + + user_input[CONF_MAC] = self.mac + + return self.async_create_entry(title=self.title, data=user_input) + + async def async_step_user(self, user_input=None): + """Handle the initial step.""" + errors = {} + + if user_input is not None: + if host_valid(user_input[CONF_HOST]): + self.host = user_input[CONF_HOST] + self.braviarc = BraviaRC(self.host) + + return await self.async_step_authorize() + + errors[CONF_HOST] = "invalid_host" + + return self.async_show_form( + step_id="user", + data_schema=vol.Schema({vol.Required(CONF_HOST, default=""): str}), + errors=errors, + ) + + async def async_step_authorize(self, user_input=None): + """Get PIN from the Bravia TV device.""" + errors = {} + + if user_input is not None: + try: + await self.init_device(user_input[CONF_PIN]) + except CannotConnect: + errors["base"] = "cannot_connect" + except ModelNotSupported: + errors["base"] = "unsupported_model" + else: + user_input[CONF_HOST] = self.host + user_input[CONF_MAC] = self.mac + return self.async_create_entry(title=self.title, data=user_input) + + # Connecting with th PIN "0000" to start the pairing process on the TV. + await self.hass.async_add_executor_job( + self.braviarc.connect, "0000", CLIENTID_PREFIX, NICKNAME, + ) + + return self.async_show_form( + step_id="authorize", + data_schema=vol.Schema({vol.Required(CONF_PIN, default=""): str}), + errors=errors, + ) + + +class BraviaTVOptionsFlowHandler(config_entries.OptionsFlow): + """Config flow options for Bravia TV.""" + + def __init__(self, config_entry): + """Initialize Bravia TV options flow.""" + self.braviarc = None + self.config_entry = config_entry + self.pin = config_entry.data[CONF_PIN] + self.ignored_sources = config_entry.options.get(CONF_IGNORED_SOURCES) + self.source_list = [] + + async def async_step_init(self, user_input=None): + """Manage the options.""" + self.braviarc = self.hass.data[DOMAIN][self.config_entry.entry_id] + if not self.braviarc.is_connected(): + await self.hass.async_add_executor_job( + self.braviarc.connect, self.pin, CLIENTID_PREFIX, NICKNAME, + ) + + content_mapping = await self.hass.async_add_executor_job( + self.braviarc.load_source_list + ) + self.source_list = [*content_mapping] + return await self.async_step_user() + + async def async_step_user(self, user_input=None): + """Handle a flow initialized by the user.""" + if user_input is not None: + return self.async_create_entry(title="", data=user_input) + + return self.async_show_form( + step_id="user", + data_schema=vol.Schema( + { + vol.Optional( + CONF_IGNORED_SOURCES, default=self.ignored_sources + ): cv.multi_select(self.source_list) + } + ), + ) + + +class CannotConnect(exceptions.HomeAssistantError): + """Error to indicate we cannot connect.""" + + +class ModelNotSupported(exceptions.HomeAssistantError): + """Error to indicate not supported model.""" diff --git a/homeassistant/components/braviatv/const.py b/homeassistant/components/braviatv/const.py new file mode 100644 index 00000000000..1fa96e6a98d --- /dev/null +++ b/homeassistant/components/braviatv/const.py @@ -0,0 +1,13 @@ +"""Constants for Bravia TV integration.""" +ATTR_CID = "cid" +ATTR_MAC = "macAddr" +ATTR_MANUFACTURER = "Sony" +ATTR_MODEL = "model" + +CONF_IGNORED_SOURCES = "ignored_sources" + +BRAVIA_CONFIG_FILE = "bravia.conf" +CLIENTID_PREFIX = "HomeAssistant" +DEFAULT_NAME = f"{ATTR_MANUFACTURER} Bravia TV" +DOMAIN = "braviatv" +NICKNAME = "Home Assistant" diff --git a/homeassistant/components/braviatv/manifest.json b/homeassistant/components/braviatv/manifest.json index 4945614ed7f..cde236b4ca4 100644 --- a/homeassistant/components/braviatv/manifest.json +++ b/homeassistant/components/braviatv/manifest.json @@ -2,7 +2,7 @@ "domain": "braviatv", "name": "Sony Bravia TV", "documentation": "https://www.home-assistant.io/integrations/braviatv", - "requirements": ["bravia-tv==1.0.1", "getmac==0.8.1"], - "dependencies": ["configurator"], - "codeowners": ["@robbiet480"] + "requirements": ["bravia-tv==1.0.2"], + "codeowners": ["@robbiet480", "@bieniu"], + "config_flow": true } diff --git a/homeassistant/components/braviatv/media_player.py b/homeassistant/components/braviatv/media_player.py index f9362799224..718f99d8357 100644 --- a/homeassistant/components/braviatv/media_player.py +++ b/homeassistant/components/braviatv/media_player.py @@ -1,12 +1,14 @@ -"""Support for interface with a Sony Bravia TV.""" -import ipaddress +"""Support for interface with a Bravia TV.""" +import asyncio import logging -from bravia_tv import BraviaRC -from getmac import get_mac_address import voluptuous as vol -from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerDevice +from homeassistant.components.media_player import ( + DEVICE_CLASS_TV, + PLATFORM_SCHEMA, + MediaPlayerDevice, +) from homeassistant.components.media_player.const import ( SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, @@ -20,20 +22,20 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, SUPPORT_VOLUME_STEP, ) -from homeassistant.const import CONF_HOST, CONF_NAME, STATE_OFF, STATE_ON +from homeassistant.config_entries import SOURCE_IMPORT +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PIN, STATE_OFF, STATE_ON import homeassistant.helpers.config_validation as cv -from homeassistant.util.json import load_json, save_json +from homeassistant.util.json import load_json -BRAVIA_CONFIG_FILE = "bravia.conf" - -CLIENTID_PREFIX = "HomeAssistant" - -DEFAULT_NAME = "Sony Bravia TV" - -NICKNAME = "Home Assistant" - -# Map ip to request id for configuring -_CONFIGURING = {} +from .const import ( + ATTR_MANUFACTURER, + BRAVIA_CONFIG_FILE, + CLIENTID_PREFIX, + CONF_IGNORED_SOURCES, + DEFAULT_NAME, + DOMAIN, + NICKNAME, +) _LOGGER = logging.getLogger(__name__) @@ -59,110 +61,66 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Sony Bravia TV platform.""" - host = config.get(CONF_HOST) +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): + """Set up the Bravia TV platform.""" + host = config[CONF_HOST] - if host is None: - return - - pin = None - bravia_config = load_json(hass.config.path(BRAVIA_CONFIG_FILE)) - while bravia_config: - # Set up a configured TV - host_ip, host_config = bravia_config.popitem() - if host_ip == host: - pin = host_config["pin"] - mac = host_config["mac"] - name = config.get(CONF_NAME) - braviarc = BraviaRC(host, mac) - braviarc.connect(pin, CLIENTID_PREFIX, NICKNAME) - unique_id = braviarc.get_system_info()["cid"].lower() - - add_entities([BraviaTVDevice(braviarc, name, pin, unique_id)]) - return - - setup_bravia(config, pin, hass, add_entities) - - -def setup_bravia(config, pin, hass, add_entities): - """Set up a Sony Bravia TV based on host parameter.""" - host = config.get(CONF_HOST) - name = config.get(CONF_NAME) - - if pin is None: - request_configuration(config, hass, add_entities) - return - - try: - if ipaddress.ip_address(host).version == 6: - mode = "ip6" - else: - mode = "ip" - except ValueError: - mode = "hostname" - mac = get_mac_address(**{mode: host}) - - # If we came here and configuring this host, mark as done - if host in _CONFIGURING: - request_id = _CONFIGURING.pop(host) - configurator = hass.components.configurator - configurator.request_done(request_id) - _LOGGER.info("Discovery configuration done") - - # Save config - save_json( - hass.config.path(BRAVIA_CONFIG_FILE), - {host: {"pin": pin, "host": host, "mac": mac}}, + bravia_config_file_path = hass.config.path(BRAVIA_CONFIG_FILE) + bravia_config = await hass.async_add_executor_job( + load_json, bravia_config_file_path ) - braviarc = BraviaRC(host, mac) - braviarc.connect(pin, CLIENTID_PREFIX, NICKNAME) - unique_id = braviarc.get_system_info()["cid"].lower() - - add_entities([BraviaTVDevice(braviarc, name, pin, unique_id)]) - - -def request_configuration(config, hass, add_entities): - """Request configuration steps from the user.""" - host = config.get(CONF_HOST) - name = config.get(CONF_NAME) - - configurator = hass.components.configurator - - # We got an error if this method is called while we are configuring - if host in _CONFIGURING: - configurator.notify_errors( - _CONFIGURING[host], "Failed to register, please try again." + if not bravia_config: + _LOGGER.error( + "Configuration import failed, there is no bravia.conf file in the configuration folder" ) return - def bravia_configuration_callback(data): - """Handle the entry of user PIN.""" + while bravia_config: + # Import a configured TV + host_ip, host_config = bravia_config.popitem() + if host_ip == host: + pin = host_config[CONF_PIN] - pin = data.get("pin") - _braviarc = BraviaRC(host) - _braviarc.connect(pin, CLIENTID_PREFIX, NICKNAME) - if _braviarc.is_connected(): - setup_bravia(config, pin, hass, add_entities) - else: - request_configuration(config, hass, add_entities) + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_IMPORT}, + data={CONF_HOST: host, CONF_PIN: pin}, + ) + ) + return - _CONFIGURING[host] = configurator.request_config( - name, - bravia_configuration_callback, - description="Enter the Pin shown on your Sony Bravia TV." - + "If no Pin is shown, enter 0000 to let TV show you a Pin.", - description_image="/static/images/smart-tv.png", - submit_caption="Confirm", - fields=[{"id": "pin", "name": "Enter the pin", "type": ""}], + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Add BraviaTV entities from a config_entry.""" + ignored_sources = [] + pin = config_entry.data[CONF_PIN] + unique_id = config_entry.unique_id + device_info = { + "identifiers": {(DOMAIN, unique_id)}, + "name": DEFAULT_NAME, + "manufacturer": ATTR_MANUFACTURER, + "model": config_entry.title, + } + + braviarc = hass.data[DOMAIN][config_entry.entry_id] + + ignored_sources = config_entry.options.get(CONF_IGNORED_SOURCES, []) + + async_add_entities( + [ + BraviaTVDevice( + braviarc, DEFAULT_NAME, pin, unique_id, device_info, ignored_sources + ) + ] ) class BraviaTVDevice(MediaPlayerDevice): - """Representation of a Sony Bravia TV.""" + """Representation of a Bravia TV.""" - def __init__(self, client, name, pin, unique_id): - """Initialize the Sony Bravia device.""" + def __init__(self, client, name, pin, unique_id, device_info, ignored_sources): + """Initialize the Bravia TV device.""" self._pin = pin self._braviarc = client @@ -185,49 +143,41 @@ class BraviaTVDevice(MediaPlayerDevice): self._max_volume = None self._volume = None self._unique_id = unique_id + self._device_info = device_info + self._ignored_sources = ignored_sources + self._state_lock = asyncio.Lock() + self._need_refresh = True - if self._braviarc.is_connected(): - self.update() - else: - self._state = STATE_OFF - - def update(self): + async def async_update(self): """Update TV info.""" - if not self._braviarc.is_connected(): - if self._braviarc.get_power_status() != "off": - self._braviarc.connect(self._pin, CLIENTID_PREFIX, NICKNAME) - if not self._braviarc.is_connected(): + if self._state_lock.locked(): + return + + if self._state == STATE_OFF: + self._need_refresh = True + + power_status = await self.hass.async_add_executor_job( + self._braviarc.get_power_status + ) + if power_status == "active": + if self._need_refresh: + connected = await self.hass.async_add_executor_job( + self._braviarc.connect, self._pin, CLIENTID_PREFIX, NICKNAME + ) + self._need_refresh = False + else: + connected = self._braviarc.is_connected() + if not connected: return - # Retrieve the latest data. - try: - if self._state == STATE_ON: - # refresh volume info: - self._refresh_volume() - self._refresh_channels() - - power_status = self._braviarc.get_power_status() - if power_status == "active": - self._state = STATE_ON - playing_info = self._braviarc.get_playing_info() - self._reset_playing_info() - if playing_info is None or not playing_info: - self._channel_name = "App" - else: - self._program_name = playing_info.get("programTitle") - self._channel_name = playing_info.get("title") - self._program_media_type = playing_info.get("programMediaType") - self._channel_number = playing_info.get("dispNum") - self._content_uri = playing_info.get("uri") - self._source = self._get_source() - self._duration = playing_info.get("durationSec") - self._start_date_time = playing_info.get("startDateTime") - else: - self._state = STATE_OFF - - except Exception as exception_instance: # pylint: disable=broad-except - _LOGGER.error(exception_instance) - self._state = STATE_OFF + self._state = STATE_ON + if ( + await self._async_refresh_volume() + and await self._async_refresh_channels() + ): + await self._async_refresh_playing_info() + return + self._state = STATE_OFF def _get_source(self): """Return the name of the source.""" @@ -235,42 +185,69 @@ class BraviaTVDevice(MediaPlayerDevice): if value == self._content_uri: return key - def _reset_playing_info(self): - self._program_name = None - self._channel_name = None - self._program_media_type = None - self._channel_number = None - self._source = None - self._content_uri = None - self._duration = None - self._start_date_time = None - - def _refresh_volume(self): + async def _async_refresh_volume(self): """Refresh volume information.""" - volume_info = self._braviarc.get_volume_info() + volume_info = await self.hass.async_add_executor_job( + self._braviarc.get_volume_info + ) if volume_info is not None: self._volume = volume_info.get("volume") self._min_volume = volume_info.get("minVolume") self._max_volume = volume_info.get("maxVolume") self._muted = volume_info.get("mute") + return True + return False - def _refresh_channels(self): + async def _async_refresh_channels(self): + """Refresh source and channels list.""" if not self._source_list: - self._content_mapping = self._braviarc.load_source_list() + self._content_mapping = await self.hass.async_add_executor_job( + self._braviarc.load_source_list + ) self._source_list = [] + if not self._content_mapping: + return False for key in self._content_mapping: - self._source_list.append(key) + if key not in self._ignored_sources: + self._source_list.append(key) + return True + + async def _async_refresh_playing_info(self): + """Refresh Playing information.""" + playing_info = await self.hass.async_add_executor_job( + self._braviarc.get_playing_info + ) + self._program_name = playing_info.get("programTitle") + self._channel_name = playing_info.get("title") + self._program_media_type = playing_info.get("programMediaType") + self._channel_number = playing_info.get("dispNum") + self._content_uri = playing_info.get("uri") + self._source = self._get_source() + self._duration = playing_info.get("durationSec") + self._start_date_time = playing_info.get("startDateTime") + if not playing_info: + self._channel_name = "App" @property def name(self): """Return the name of the device.""" return self._name + @property + def device_class(self): + """Set the device class to TV.""" + return DEVICE_CLASS_TV + @property def unique_id(self): """Return a unique_id for this entity.""" return self._unique_id + @property + def device_info(self): + """Return the device info.""" + return self._device_info + @property def state(self): """Return the state of the device.""" @@ -327,13 +304,15 @@ class BraviaTVDevice(MediaPlayerDevice): """Set volume level, range 0..1.""" self._braviarc.set_volume_level(volume) - def turn_on(self): + async def async_turn_on(self): """Turn the media player on.""" - self._braviarc.turn_on() + async with self._state_lock: + await self.hass.async_add_executor_job(self._braviarc.turn_on) - def turn_off(self): + async def async_turn_off(self): """Turn off media player.""" - self._braviarc.turn_off() + async with self._state_lock: + await self.hass.async_add_executor_job(self._braviarc.turn_off) def volume_up(self): """Volume up the media player.""" diff --git a/homeassistant/components/braviatv/strings.json b/homeassistant/components/braviatv/strings.json new file mode 100644 index 00000000000..1e434cd118a --- /dev/null +++ b/homeassistant/components/braviatv/strings.json @@ -0,0 +1,30 @@ +{ + "config": { + "step": { + "user": { + "title": "Sony Bravia TV", + "description": "Set up Sony Bravia TV integration. If you have problems with configuration go to: https://www.home-assistant.io/integrations/braviatv \n\nEnsure that your TV is turned on.", + "data": { "host": "TV hostname or IP address" } + }, + "authorize": { + "title": "Authorize Sony Bravia TV", + "description": "Enter the PIN code shown on the Sony Bravia TV. \n\nIf the PIN code is not shown, you have to unregister Home Assistant on your TV, go to: Settings -> Network -> Remote device settings -> Unregister remote device.", + "data": { "pin": "PIN code" } + } + }, + "error": { + "invalid_host": "Invalid hostname or IP address.", + "cannot_connect": "Failed to connect, invalid host or PIN code.", + "unsupported_model": "Your TV model is not supported." + }, + "abort": { "already_configured": "This TV is already configured." } + }, + "options": { + "step": { + "user": { + "title": "Options for Sony Bravia TV", + "data": { "ignored_sources": "List of ignored sources" } + } + } + } +} diff --git a/homeassistant/components/braviatv/translations/ca.json b/homeassistant/components/braviatv/translations/ca.json new file mode 100644 index 00000000000..d92525ae325 --- /dev/null +++ b/homeassistant/components/braviatv/translations/ca.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest televisor ja est\u00e0 configurat." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, amfitri\u00f3 o codi PIN inv\u00e0lids.", + "invalid_host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP inv\u00e0lids.", + "unsupported_model": "Aquest model de televisor no \u00e9s compatible." + }, + "step": { + "authorize": { + "data": { + "pin": "Codi PIN" + }, + "description": "Introdueix el codi PIN que es mostra a la pantalla del televisor.\n\nSi no es mostra el codi, has d'eliminar Home Assistant del teu televisor. V\u00e9s a Configuraci\u00f3 > Xarxa > Configuraci\u00f3 de dispositiu remot > Elimina dispositiu remot.", + "title": "Autoritzaci\u00f3 del televisor Sony Bravia" + }, + "user": { + "data": { + "host": "Nom d\u2019amfitri\u00f3 o adre\u00e7a IP del televisor" + }, + "description": "Configura la integraci\u00f3 de televisor Sony Bravia. Si tens problemes durant la configuraci\u00f3, v\u00e9s a: https://www.home-assistant.io/integrations/braviatv\n\nAssegura't que el televisor estigui engegat.", + "title": "Televisor Sony Bravia" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Llista de fonts ignorades" + }, + "title": "Opcions del televisor Sony Bravia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/de.json b/homeassistant/components/braviatv/translations/de.json new file mode 100644 index 00000000000..f46ff584d6c --- /dev/null +++ b/homeassistant/components/braviatv/translations/de.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Fernseher ist bereits konfiguriert." + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, ung\u00fcltiger Host- oder PIN-Code.", + "invalid_host": "Ung\u00fcltiger Hostname oder IP-Adresse", + "unsupported_model": "Ihr TV-Modell wird nicht unterst\u00fctzt." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN Code" + }, + "description": "Geben Sie den auf dem Sony Bravia-Fernseher angezeigten PIN-Code ein. \n\nWenn der PIN-Code nicht angezeigt wird, m\u00fcssen Sie die Registrierung von Home Assistant auf Ihrem Fernseher aufheben, gehen Sie daf\u00fcr zu: Einstellungen -> Netzwerk -> Remote - Ger\u00e4teeinstellungen -> Registrierung des entfernten Ger\u00e4ts aufheben.", + "title": "Autorisieren Sie Sony Bravia TV" + }, + "user": { + "data": { + "host": "TV-Hostname oder IP-Adresse" + }, + "description": "Richten Sie die Sony Bravia TV-Integration ein. Wenn Sie Probleme mit der Konfiguration haben, gehen Sie zu: https://www.home-assistant.io/integrations/braviatv \n\n Stellen Sie sicher, dass Ihr Fernseher eingeschaltet ist.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Liste der ignorierten Quellen" + }, + "title": "Optionen f\u00fcr Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/en.json b/homeassistant/components/braviatv/translations/en.json new file mode 100644 index 00000000000..04ab5830739 --- /dev/null +++ b/homeassistant/components/braviatv/translations/en.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "This TV is already configured." + }, + "error": { + "cannot_connect": "Failed to connect, invalid host or PIN code.", + "invalid_host": "Invalid hostname or IP address.", + "unsupported_model": "Your TV model is not supported." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN code" + }, + "description": "Enter the PIN code shown on the Sony Bravia TV. \n\nIf the PIN code is not shown, you have to unregister Home Assistant on your TV, go to: Settings -> Network -> Remote device settings -> Unregister remote device.", + "title": "Authorize Sony Bravia TV" + }, + "user": { + "data": { + "host": "TV hostname or IP address" + }, + "description": "Set up Sony Bravia TV integration. If you have problems with configuration go to: https://www.home-assistant.io/integrations/braviatv \n\nEnsure that your TV is turned on.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "List of ignored sources" + }, + "title": "Options for Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/es.json b/homeassistant/components/braviatv/translations/es.json new file mode 100644 index 00000000000..fa858a73079 --- /dev/null +++ b/homeassistant/components/braviatv/translations/es.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Este televisor ya est\u00e1 configurado." + }, + "error": { + "cannot_connect": "No se pudo conectar, host o c\u00f3digo PIN no v\u00e1lido.", + "invalid_host": "Nombre del host o direcci\u00f3n IP no v\u00e1lidos.", + "unsupported_model": "Tu modelo de televisor no es compatible." + }, + "step": { + "authorize": { + "data": { + "pin": "C\u00f3digo PIN" + }, + "description": "Introduce el c\u00f3digo PIN que se muestra en el televisor Sony Bravia.\n\nSi no se muestra ning\u00fan c\u00f3digo PIN, necesitas eliminar el registro de Home Assistant de tu televisor, ve a: Configuraci\u00f3n -> Red -> Configuraci\u00f3n del dispositivo remoto -> Eliminar el dispositivo remoto.", + "title": "Autorizar televisor Sony Bravia" + }, + "user": { + "data": { + "host": "Nombre host del televisor o direcci\u00f3n IP" + }, + "description": "Configura la integraci\u00f3n del televisor Sony Bravia. Si tienes problemas con la configuraci\u00f3n, ve a: https://www.home-assistant.io/integrations/braviatv\n\nAseg\u00farate de que tu televisor est\u00e1 encendido.", + "title": "Televisor Sony Bravia" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Lista de fuentes ignoradas" + }, + "title": "Opciones para el televisor Sony Bravia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/fr.json b/homeassistant/components/braviatv/translations/fr.json new file mode 100644 index 00000000000..787d53b90a3 --- /dev/null +++ b/homeassistant/components/braviatv/translations/fr.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Ce t\u00e9l\u00e9viseur est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "cannot_connect": "\u00c9chec de connexion, h\u00f4te ou code PIN non valide.", + "invalid_host": "Nom d'h\u00f4te ou adresse IP invalide.", + "unsupported_model": "Votre mod\u00e8le de t\u00e9l\u00e9viseur n'est pas pris en charge." + }, + "step": { + "authorize": { + "data": { + "pin": "Code PIN" + }, + "description": "Saisissez le code PIN affich\u00e9 sur le t\u00e9l\u00e9viseur Sony Bravia. \n\nSi le code PIN n'est pas affich\u00e9, vous devez d\u00e9senregistrer Home Assistant de votre t\u00e9l\u00e9viseur, allez dans: Param\u00e8tres - > R\u00e9seau - > Param\u00e8tres de l'appareil distant - > Annuler l'enregistrement de l'appareil distant.", + "title": "Autoriser Sony Bravia TV" + }, + "user": { + "data": { + "host": "Nom d'h\u00f4te ou adresse IP du t\u00e9l\u00e9viseur" + }, + "description": "Configurez l'int\u00e9gration du t\u00e9l\u00e9viseur Sony Bravia. Si vous rencontrez des probl\u00e8mes de configuration, rendez-vous sur: https://www.home-assistant.io/integrations/braviatv \n\n Assurez-vous que votre t\u00e9l\u00e9viseur est allum\u00e9.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Liste des sources ignor\u00e9es" + }, + "title": "Options pour Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/hi.json b/homeassistant/components/braviatv/translations/hi.json new file mode 100644 index 00000000000..a7a8a15c204 --- /dev/null +++ b/homeassistant/components/braviatv/translations/hi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "authorize": { + "description": "\u0938\u094b\u0928\u0940 \u092c\u094d\u0930\u093e\u0935\u093f\u092f\u093e \u091f\u0940\u0935\u0940 \u092a\u0930 \u0926\u093f\u0916\u093e\u092f\u093e \u0917\u092f\u093e \u092a\u093f\u0928 \u0915\u094b\u0921 \u0921\u093e\u0932\u0947\u0902\u0964 \n\n \u092f\u0926\u093f \u092a\u093f\u0928 \u0915\u094b\u0921 \u0928\u0939\u0940\u0902 \u0926\u093f\u0916\u093e\u092f\u093e \u0917\u092f\u093e \u0939\u0948, \u0924\u094b \u0906\u092a\u0915\u094b \u0905\u092a\u0928\u0947 \u091f\u0940\u0935\u0940 \u092a\u0930 \u0939\u094b\u092e \u0905\u0938\u093f\u0938\u094d\u091f\u0947\u0902\u091f \u0915\u094b \u0905\u092a\u0902\u091c\u0940\u0915\u0943\u0924 \u0915\u0930\u0928\u093e \u0939\u094b\u0917\u093e, \u0907\u0938\u0915\u0947 \u0932\u093f\u090f \u091c\u093e\u090f\u0902: \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 - > \u0928\u0947\u091f\u0935\u0930\u094d\u0915 - > \u0926\u0942\u0930\u0938\u094d\u0925 \u0921\u093f\u0935\u093e\u0907\u0938 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 - > \u0905\u092a\u0902\u091c\u0940\u0915\u0943\u0924 \u0930\u093f\u092e\u094b\u091f \u0921\u093f\u0935\u093e\u0907\u0938\u0964" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/it.json b/homeassistant/components/braviatv/translations/it.json new file mode 100644 index 00000000000..c6fe7db4439 --- /dev/null +++ b/homeassistant/components/braviatv/translations/it.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Questo televisore \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Connessione non riuscita, host o codice PIN non valido.", + "invalid_host": "Nome host o indirizzo IP non valido.", + "unsupported_model": "Il tuo modello TV non \u00e8 supportato." + }, + "step": { + "authorize": { + "data": { + "pin": "Codice PIN" + }, + "description": "Immettere il codice PIN visualizzato sul Sony Bravia TV. \n\nSe il codice PIN non viene visualizzato, \u00e8 necessario annullare la registrazione di Home Assistant sul televisore, andare su: Impostazioni - > Rete - > Impostazioni dispositivo remoto - > Annulla registrazione dispositivo remoto.", + "title": "Autorizzare Sony Bravia TV" + }, + "user": { + "data": { + "host": "Nome host TV o indirizzo IP" + }, + "description": "Configurare l'integrazione TV di Sony Bravia. In caso di problemi con la configurazione visitare: https://www.home-assistant.io/integrations/braviatv\n\nAssicurarsi che il televisore sia acceso.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Elenco delle fonti ignorate" + }, + "title": "Opzioni per Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/ko.json b/homeassistant/components/braviatv/translations/ko.json new file mode 100644 index 00000000000..3652210f7b7 --- /dev/null +++ b/homeassistant/components/braviatv/translations/ko.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 TV \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8 \ub610\ub294 PIN \ucf54\ub4dc\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "invalid_host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "unsupported_model": "\uc774 TV \ubaa8\ub378\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN \ucf54\ub4dc" + }, + "description": "Sony Bravia TV \uc5d0 \ud45c\uc2dc\ub41c PIN \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.\n\nPIN \ucf54\ub4dc\uac00 \ud45c\uc2dc\ub418\uc9c0 \uc54a\uc73c\uba74 TV \uc5d0\uc11c Home Assistant \ub97c \ub4f1\ub85d \ud574\uc81c\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4. Settings -> Network -> Remote device settings -> Unregister remote device \ub85c \uc774\ub3d9\ud558\uc5ec \ub4f1\ub85d\uc744 \ud574\uc81c\ud574\uc8fc\uc138\uc694.", + "title": "Sony Bravia TV \uc2b9\uc778\ud558\uae30" + }, + "user": { + "data": { + "host": "TV \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c" + }, + "description": "Sony Bravia TV \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694. \uad6c\uc131\uc5d0 \ubb38\uc81c\uac00 \uc788\ub294 \uacbd\uc6b0 https://www.home-assistant.io/integrations/braviatv \ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694.\n\nTV \uac00 \ucf1c\uc838 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "\ubb34\uc2dc\ub41c \uc785\ub825 \uc18c\uc2a4 \ubaa9\ub85d" + }, + "title": "Sony Bravia TV \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/lb.json b/homeassistant/components/braviatv/translations/lb.json new file mode 100644 index 00000000000..37366eee6dd --- /dev/null +++ b/homeassistant/components/braviatv/translations/lb.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "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." + }, + "step": { + "authorize": { + "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" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "L\u00ebscht vun ignor\u00e9ierte Quellen" + }, + "title": "Optioune fir Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/no.json b/homeassistant/components/braviatv/translations/no.json new file mode 100644 index 00000000000..afd0f0d758c --- /dev/null +++ b/homeassistant/components/braviatv/translations/no.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Denne TV-en er allerede konfigurert." + }, + "error": { + "cannot_connect": "Kunne ikke koble til, ugyldig vert eller PIN-kode.", + "invalid_host": "Ugyldig vertsnavn eller IP-adresse.", + "unsupported_model": "TV-modellen din st\u00f8ttes ikke." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN-kode" + }, + "description": "Tast inn PIN-koden som vises p\u00e5 Sony Bravia TV. \n\n Hvis PIN-koden ikke vises, m\u00e5 du avregistrere Home Assistant p\u00e5 TV-en, g\u00e5 til: Innstillinger - > Nettverk - > Innstillinger for ekstern enhet - > Avregistrere ekstern enhet.", + "title": "Autoriser Sony Bravia TV" + }, + "user": { + "data": { + "host": "TV-vertsnavn eller IP-adresse" + }, + "description": "Konfigurer Sony Bravia TV-integrasjon. Hvis du har problemer med konfigurasjonen, g\u00e5 til: https://www.home-assistant.io/integrations/braviatv \n\n Forsikre deg om at TV-en er sl\u00e5tt p\u00e5.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Liste over ignorerte kilder" + }, + "title": "Alternativer for Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/pl.json b/homeassistant/components/braviatv/translations/pl.json new file mode 100644 index 00000000000..cbafa3c4b44 --- /dev/null +++ b/homeassistant/components/braviatv/translations/pl.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Ten telewizor jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Po\u0142\u0105czenie nieudane, nieprawid\u0142owy host lub kod PIN.", + "invalid_host": "Nieprawid\u0142owa nazwa hosta lub adres IP.", + "unsupported_model": "Ten model telewizora nie jest obs\u0142ugiwany." + }, + "step": { + "authorize": { + "data": { + "pin": "Kod PIN" + }, + "description": "Wprowad\u017a kod PIN wy\u015bwietlany na telewizorze Sony Bravia. \n\nJe\u015bli kod PIN nie jest wy\u015bwietlany, musisz wyrejestrowa\u0107 Home Assistant'a na swoim telewizorze, przejd\u017a do Ustawienia -> Sie\u0107 -> Ustawienia urz\u0105dzenia zdalnego -> Wyrejestruj urz\u0105dzenie zdalne.", + "title": "Autoryzacja Sony Bravia TV" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP telewizora" + }, + "description": "Konfiguracja integracji telewizora Sony Bravia. Je\u015bli masz problemy z konfiguracj\u0105, przejd\u017a do strony: https://www.home-assistant.io/integrations/braviatv\n\nUpewnij si\u0119, \u017ce telewizor jest w\u0142\u0105czony.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Lista ignorowanych \u017ar\u00f3de\u0142" + }, + "title": "Opcje dla Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/pt.json b/homeassistant/components/braviatv/translations/pt.json new file mode 100644 index 00000000000..d818bda11ff --- /dev/null +++ b/homeassistant/components/braviatv/translations/pt.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "already_configured": "Esta TV j\u00e1 est\u00e1 configurada." + }, + "error": { + "cannot_connect": "Falha na conex\u00e3o, nome de servidor inv\u00e1lido ou c\u00f3digo PIN.", + "invalid_host": "Nome de servidor ou endere\u00e7o IP inv\u00e1lido.", + "unsupported_model": "O seu modelo de TV n\u00e3o \u00e9 suportado." + }, + "step": { + "authorize": { + "data": { + "pin": "C\u00f3digo PIN" + }, + "description": "Digite o c\u00f3digo PIN mostrado na TV Sony Bravia. \n\nSe o c\u00f3digo PIN n\u00e3o for exibido, \u00e9 necess\u00e1rio cancelar o registro do Home Assistant na TV, v\u00e1 para: Configura\u00e7\u00f5es -> Rede -> Configura\u00e7\u00f5es do dispositivo remoto -> Cancelar registro do dispositivo remoto.", + "title": "Autorizar TV Sony Bravia" + }, + "user": { + "data": { + "host": "Nome do host da TV ou endere\u00e7o IP" + }, + "title": "TV Sony Bravia" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Lista de fontes ignoradas" + }, + "title": "Op\u00e7\u00f5es para a TV Sony Bravia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/ru.json b/homeassistant/components/braviatv/translations/ru.json new file mode 100644 index 00000000000..33e8d71bd64 --- /dev/null +++ b/homeassistant/components/braviatv/translations/ru.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0445\u043e\u0441\u0442 \u0438\u043b\u0438 PIN-\u043a\u043e\u0434.", + "invalid_host": "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441.", + "unsupported_model": "\u042d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN-\u043a\u043e\u0434" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 PIN-\u043a\u043e\u0434, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 Sony Bravia. \n\n\u0415\u0441\u043b\u0438 \u0412\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435 PIN-\u043a\u043e\u0434, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e Home Assistant \u043d\u0430 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0435. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -> \u0421\u0435\u0442\u044c -> \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 -> \u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "title": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 Sony Bravia" + }, + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" + }, + "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438:\nhttps://www.home-assistant.io/integrations/braviatv", + "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Sony Bravia" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 Sony Bravia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/sl.json b/homeassistant/components/braviatv/translations/sl.json new file mode 100644 index 00000000000..99ab83a39c6 --- /dev/null +++ b/homeassistant/components/braviatv/translations/sl.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Ta televizor je \u017ee konfiguriran." + }, + "error": { + "cannot_connect": "Povezava ni bila mogo\u010de, neveljaven gostitelj ali PIN koda.", + "invalid_host": "Neveljavno ime gostitelja ali IP naslov.", + "unsupported_model": "Va\u0161 model televizorja ni podprt." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN koda" + }, + "description": "Vnesite kodo PIN, ki je prikazana na Sony Bravia TVju. \n\n \u010ce koda PIN ni prikazana, morate na televizorju odjaviti Home Assistant, pojdite na: Nastavitve - > Omre\u017eje - > Nastavitve oddaljenih naprav - > Odjavite oddaljeno napravo.", + "title": "Pooblastite Sony Bravia TV" + }, + "user": { + "data": { + "host": "TV ime gostitelja ali IP naslov" + }, + "description": "Nastavite integracijo Sony Bravia TV. \u010ce imate te\u017eave s konfiguracijo, pojdite na: https://www.home-assistant.io/integrations/braviatv \n\n Prepri\u010dajte se, da je va\u0161 televizor vklopljen.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "Seznam prezrtih virov" + }, + "title": "Mo\u017enosti za Sony Bravia TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/zh-Hant.json b/homeassistant/components/braviatv/translations/zh-Hant.json new file mode 100644 index 00000000000..cf2c87f4c93 --- /dev/null +++ b/homeassistant/components/braviatv/translations/zh-Hant.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u96fb\u8996\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u7121\u6548\u7684\u4e3b\u6a5f\u540d\u7a31\u6216 PIN \u78bc\u3002", + "invalid_host": "\u7121\u6548\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", + "unsupported_model": "\u4e0d\u652f\u63f4\u6b64\u6b3e\u96fb\u8996\u578b\u865f\u3002" + }, + "step": { + "authorize": { + "data": { + "pin": "PIN \u78bc" + }, + "description": "\u8f38\u5165 Sony Bravia \u96fb\u8996\u6240\u986f\u793a\u4e4b PIN \u78bc\u3002\n\n\u5047\u5982 PIN \u78bc\u672a\u986f\u793a\uff0c\u5fc5\u9808\u5148\u65bc\u96fb\u8996\u89e3\u9664 Home Assistant \u8a3b\u518a\uff0c\u6b65\u9a5f\u70ba\uff1a\u8a2d\u5b9a -> \u7db2\u8def -> \u9060\u7aef\u88dd\u7f6e\u8a2d\u5b9a -> \u89e3\u9664\u9060\u7aef\u88dd\u7f6e\u8a3b\u518a\u3002", + "title": "\u8a8d\u8b49 Sony Bravia \u96fb\u8996" + }, + "user": { + "data": { + "host": "\u96fb\u8996\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740" + }, + "description": "\u8a2d\u5b9a Sony Bravia \u96fb\u8996\u6574\u5408\u3002\u5047\u5982\u65bc\u8a2d\u5b9a\u904e\u7a0b\u4e2d\u906d\u9047\u56f0\u7136\uff0c\u8acb\u53c3\u95b1\uff1ahttps://www.home-assistant.io/integrations/braviatv \n\n\u78ba\u5b9a\u96fb\u8996\u5df2\u7d93\u958b\u555f\u3002", + "title": "Sony Bravia \u96fb\u8996" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "\u5ffd\u7565\u7684\u4f86\u6e90\u5217\u8868" + }, + "title": "Sony Bravia \u96fb\u8996\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/broadlink/const.py b/homeassistant/components/broadlink/const.py index c31a1540349..3264ec225ca 100644 --- a/homeassistant/components/broadlink/const.py +++ b/homeassistant/components/broadlink/const.py @@ -1,7 +1,38 @@ """Constants for broadlink platform.""" CONF_PACKET = "packet" +DEFAULT_LEARNING_TIMEOUT = 20 +DEFAULT_NAME = "Broadlink" +DEFAULT_PORT = 80 +DEFAULT_RETRY = 3 +DEFAULT_TIMEOUT = 5 + DOMAIN = "broadlink" SERVICE_LEARN = "learn" SERVICE_SEND = "send" + +A1_TYPES = ["a1"] +MP1_TYPES = ["mp1"] +RM_TYPES = [ + "rm", + "rm2", + "rm_mini", + "rm_mini_shate", + "rm_pro_phicomm", + "rm2_home_plus", + "rm2_home_plus_gdt", + "rm2_pro_plus", + "rm2_pro_plus2", + "rm2_pro_plus_bl", +] +RM4_TYPES = [ + "rm_mini3_newblackbean", + "rm_mini3_redbean", + "rm4_mini", + "rm4_pro", + "rm4c_mini", + "rm4c_pro", +] +SP1_TYPES = ["sp1"] +SP2_TYPES = ["sp2", "honeywell_sp2", "sp3", "spmini2", "spminiplus"] diff --git a/homeassistant/components/broadlink/manifest.json b/homeassistant/components/broadlink/manifest.json index 3c2c03384f3..f894fe46a53 100644 --- a/homeassistant/components/broadlink/manifest.json +++ b/homeassistant/components/broadlink/manifest.json @@ -2,6 +2,6 @@ "domain": "broadlink", "name": "Broadlink", "documentation": "https://www.home-assistant.io/integrations/broadlink", - "requirements": ["broadlink==0.13.1"], + "requirements": ["broadlink==0.13.2"], "codeowners": ["@danielhiversen", "@felipediel"] } diff --git a/homeassistant/components/broadlink/remote.py b/homeassistant/components/broadlink/remote.py index 714b5dfec34..177cf2ee0bd 100644 --- a/homeassistant/components/broadlink/remote.py +++ b/homeassistant/components/broadlink/remote.py @@ -7,9 +7,8 @@ from datetime import timedelta from ipaddress import ip_address from itertools import product import logging -import socket -import broadlink +import broadlink as blk import voluptuous as vol from homeassistant.components.remote import ( @@ -25,7 +24,7 @@ from homeassistant.components.remote import ( SUPPORT_LEARN_COMMAND, RemoteDevice, ) -from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, CONF_TIMEOUT +from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, CONF_TIMEOUT, CONF_TYPE from homeassistant.core import callback from homeassistant.exceptions import HomeAssistantError, PlatformNotReady import homeassistant.helpers.config_validation as cv @@ -33,21 +32,26 @@ from homeassistant.helpers.storage import Store from homeassistant.util.dt import utcnow from . import DOMAIN, data_packet, hostname, mac_address +from .const import ( + DEFAULT_LEARNING_TIMEOUT, + DEFAULT_NAME, + DEFAULT_PORT, + DEFAULT_RETRY, + DEFAULT_TIMEOUT, + RM4_TYPES, + RM_TYPES, +) _LOGGER = logging.getLogger(__name__) -DEFAULT_LEARNING_TIMEOUT = 20 -DEFAULT_NAME = "Broadlink" -DEFAULT_PORT = 80 -DEFAULT_RETRY = 3 -DEFAULT_TIMEOUT = 5 - SCAN_INTERVAL = timedelta(minutes=2) CODE_STORAGE_VERSION = 1 FLAG_STORAGE_VERSION = 1 FLAG_SAVE_DELAY = 15 +DEVICE_TYPES = RM_TYPES + RM4_TYPES + MINIMUM_SERVICE_SCHEMA = vol.Schema( { vol.Required(ATTR_COMMAND): vol.All( @@ -73,6 +77,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_HOST): vol.All(vol.Any(hostname, ip_address), cv.string), vol.Required(CONF_MAC): mac_address, + vol.Optional(CONF_TYPE, default=DEVICE_TYPES[0]): vol.In(DEVICE_TYPES), vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, } @@ -83,6 +88,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= """Set up the Broadlink remote.""" host = config[CONF_HOST] mac_addr = config[CONF_MAC] + model = config[CONF_TYPE] timeout = config[CONF_TIMEOUT] name = config[CONF_NAME] unique_id = f"remote_{hexlify(mac_addr).decode('utf-8')}" @@ -92,7 +98,10 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= return hass.data[DOMAIN][COMPONENT].append(unique_id) - api = broadlink.rm((host, DEFAULT_PORT), mac_addr, None) + if model in RM_TYPES: + api = blk.rm((host, DEFAULT_PORT), mac_addr, None) + else: + api = blk.rm4((host, DEFAULT_PORT), mac_addr, None) api.timeout = timeout code_storage = Store(hass, CODE_STORAGE_VERSION, f"broadlink_{unique_id}_codes") flag_storage = Store(hass, FLAG_STORAGE_VERSION, f"broadlink_{unique_id}_flags") @@ -103,7 +112,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= connected, loaded = await asyncio.gather( hass.async_add_executor_job(api.auth), remote.async_load_storage_files() ) - except socket.error: + except OSError: pass if not connected: hass.data[DOMAIN][COMPONENT].remove(unique_id) @@ -327,7 +336,7 @@ class BroadlinkRemote(RemoteDevice): continue try: await self.hass.async_add_executor_job(function, *args) - except socket.error: + except OSError: continue return raise ConnectionError @@ -336,7 +345,7 @@ class BroadlinkRemote(RemoteDevice): """Connect to the remote.""" try: auth = await self.hass.async_add_executor_job(self._api.auth) - except socket.error: + except OSError: auth = False if auth and not self._available: _LOGGER.warning("Connected to the remote") diff --git a/homeassistant/components/broadlink/sensor.py b/homeassistant/components/broadlink/sensor.py index dbff4108a3f..13b1530eb6d 100644 --- a/homeassistant/components/broadlink/sensor.py +++ b/homeassistant/components/broadlink/sensor.py @@ -1,9 +1,9 @@ """Support for the Broadlink RM2 Pro (only temperature) and A1 devices.""" -import binascii from datetime import timedelta +from ipaddress import ip_address import logging -import broadlink +import broadlink as blk import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA @@ -14,6 +14,7 @@ from homeassistant.const import ( CONF_NAME, CONF_SCAN_INTERVAL, CONF_TIMEOUT, + CONF_TYPE, TEMP_CELSIUS, UNIT_PERCENTAGE, ) @@ -21,10 +22,18 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle +from . import hostname, mac_address +from .const import ( + A1_TYPES, + DEFAULT_NAME, + DEFAULT_PORT, + DEFAULT_TIMEOUT, + RM4_TYPES, + RM_TYPES, +) + _LOGGER = logging.getLogger(__name__) -DEVICE_DEFAULT_NAME = "Broadlink sensor" -DEFAULT_TIMEOUT = 10 SCAN_INTERVAL = timedelta(seconds=300) SENSOR_TYPES = { @@ -35,14 +44,17 @@ SENSOR_TYPES = { "noise": ["Noise", " "], } +DEVICE_TYPES = A1_TYPES + RM_TYPES + RM4_TYPES + PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { - vol.Optional(CONF_NAME, default=DEVICE_DEFAULT_NAME): vol.Coerce(str), + vol.Optional(CONF_NAME, default=DEFAULT_NAME): vol.Coerce(str), vol.Optional(CONF_MONITORED_CONDITIONS, default=[]): vol.All( cv.ensure_list, [vol.In(SENSOR_TYPES)] ), - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_MAC): cv.string, + vol.Required(CONF_HOST): vol.All(vol.Any(hostname, ip_address), cv.string), + vol.Required(CONF_MAC): mac_address, + vol.Optional(CONF_TYPE, default=DEVICE_TYPES[0]): vol.In(DEVICE_TYPES), vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, } ) @@ -50,13 +62,22 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Broadlink device sensors.""" - host = config.get(CONF_HOST) - mac = config.get(CONF_MAC).encode().replace(b":", b"") - mac_addr = binascii.unhexlify(mac) - name = config.get(CONF_NAME) - timeout = config.get(CONF_TIMEOUT) + host = config[CONF_HOST] + mac_addr = config[CONF_MAC] + model = config[CONF_TYPE] + name = config[CONF_NAME] + timeout = config[CONF_TIMEOUT] update_interval = config.get(CONF_SCAN_INTERVAL, SCAN_INTERVAL) - broadlink_data = BroadlinkData(update_interval, host, mac_addr, timeout) + + if model in RM4_TYPES: + api = blk.rm4((host, DEFAULT_PORT), mac_addr, None) + check_sensors = api.check_sensors + else: + api = blk.a1((host, DEFAULT_PORT), mac_addr, None) + check_sensors = api.check_sensors_raw + + api.timeout = timeout + broadlink_data = BroadlinkData(api, check_sensors, update_interval) dev = [] for variable in config[CONF_MONITORED_CONDITIONS]: dev.append(BroadlinkSensor(name, broadlink_data, variable)) @@ -109,13 +130,11 @@ class BroadlinkSensor(Entity): class BroadlinkData: """Representation of a Broadlink data object.""" - def __init__(self, interval, ip_addr, mac_addr, timeout): + def __init__(self, api, check_sensors, interval): """Initialize the data object.""" + self.api = api + self.check_sensors = check_sensors self.data = None - self.ip_addr = ip_addr - self.mac_addr = mac_addr - self.timeout = timeout - self._connect() self._schema = vol.Schema( { vol.Optional("temperature"): vol.Range(min=-50, max=150), @@ -129,14 +148,9 @@ class BroadlinkData: if not self._auth(): _LOGGER.warning("Failed to connect to device") - def _connect(self): - - self._device = broadlink.a1((self.ip_addr, 80), self.mac_addr, None) - self._device.timeout = self.timeout - def _update(self, retry=3): try: - data = self._device.check_sensors_raw() + data = self.check_sensors() if data is not None: self.data = self._schema(data) return @@ -152,10 +166,9 @@ class BroadlinkData: def _auth(self, retry=3): try: - auth = self._device.auth() + auth = self.api.auth() except OSError: auth = False if not auth and retry > 0: - self._connect() return self._auth(retry - 1) return auth diff --git a/homeassistant/components/broadlink/services.yaml b/homeassistant/components/broadlink/services.yaml index 2281cb1cc4d..f1b39976afc 100644 --- a/homeassistant/components/broadlink/services.yaml +++ b/homeassistant/components/broadlink/services.yaml @@ -1,9 +1,14 @@ send: description: Send a raw packet to device. fields: - host: {description: IP address of device to send packet via. This must be an already configured device., example: "192.168.0.1"} - packet: {description: base64 encoded packet.} + host: + description: IP address of device to send packet via. This must be an already configured device. + example: "192.168.0.1" + packet: + description: base64 encoded packet. learn: description: Learn a IR or RF code from remote. fields: - host: {description: IP address of device to send packet via. This must be an already configured device., example: "192.168.0.1"} + host: + description: IP address of device to send packet via. This must be an already configured device. + example: "192.168.0.1" diff --git a/homeassistant/components/broadlink/switch.py b/homeassistant/components/broadlink/switch.py index 9b986ae75d4..6eed0646d76 100644 --- a/homeassistant/components/broadlink/switch.py +++ b/homeassistant/components/broadlink/switch.py @@ -1,10 +1,10 @@ """Support for Broadlink RM devices.""" -import binascii from datetime import timedelta +from ipaddress import ip_address import logging import socket -import broadlink +import broadlink as blk import voluptuous as vol from homeassistant.components.switch import DOMAIN, PLATFORM_SCHEMA, SwitchDevice @@ -23,35 +23,27 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.util import Throttle, slugify -from . import async_setup_service, data_packet +from . import async_setup_service, data_packet, hostname, mac_address +from .const import ( + DEFAULT_NAME, + DEFAULT_PORT, + DEFAULT_RETRY, + DEFAULT_TIMEOUT, + MP1_TYPES, + RM4_TYPES, + RM_TYPES, + SP1_TYPES, + SP2_TYPES, +) _LOGGER = logging.getLogger(__name__) TIME_BETWEEN_UPDATES = timedelta(seconds=5) -DEFAULT_NAME = "Broadlink switch" -DEFAULT_TIMEOUT = 10 -DEFAULT_RETRY = 2 CONF_SLOTS = "slots" CONF_RETRY = "retry" -RM_TYPES = [ - "rm", - "rm2", - "rm_mini", - "rm_pro_phicomm", - "rm2_home_plus", - "rm2_home_plus_gdt", - "rm2_pro_plus", - "rm2_pro_plus2", - "rm2_pro_plus_bl", - "rm_mini_shate", -] -SP1_TYPES = ["sp1"] -SP2_TYPES = ["sp2", "honeywell_sp2", "sp3", "spmini2", "spminiplus"] -MP1_TYPES = ["mp1"] - -SWITCH_TYPES = RM_TYPES + SP1_TYPES + SP2_TYPES + MP1_TYPES +DEVICE_TYPES = RM_TYPES + RM4_TYPES + SP1_TYPES + SP2_TYPES + MP1_TYPES SWITCH_SCHEMA = vol.Schema( { @@ -76,10 +68,10 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( SWITCH_SCHEMA ), vol.Optional(CONF_SLOTS, default={}): MP1_SWITCH_SLOT_SCHEMA, - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_MAC): cv.string, + vol.Required(CONF_HOST): vol.All(vol.Any(hostname, ip_address), cv.string), + vol.Required(CONF_MAC): mac_address, vol.Optional(CONF_FRIENDLY_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_TYPE, default=SWITCH_TYPES[0]): vol.In(SWITCH_TYPES), + vol.Optional(CONF_TYPE, default=DEVICE_TYPES[0]): vol.In(DEVICE_TYPES), vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, vol.Optional(CONF_RETRY, default=DEFAULT_RETRY): cv.positive_int, } @@ -91,47 +83,53 @@ def setup_platform(hass, config, add_entities, discovery_info=None): devices = config.get(CONF_SWITCHES) slots = config.get("slots", {}) - ip_addr = config.get(CONF_HOST) + host = config.get(CONF_HOST) + mac_addr = config.get(CONF_MAC) friendly_name = config.get(CONF_FRIENDLY_NAME) - mac_addr = binascii.unhexlify(config.get(CONF_MAC).encode().replace(b":", b"")) - switch_type = config.get(CONF_TYPE) + model = config[CONF_TYPE] retry_times = config.get(CONF_RETRY) - def _get_mp1_slot_name(switch_friendly_name, slot): + def generate_rm_switches(switches, broadlink_device): + """Generate RM switches.""" + return [ + BroadlinkRMSwitch( + object_id, + config.get(CONF_FRIENDLY_NAME, object_id), + broadlink_device, + config.get(CONF_COMMAND_ON), + config.get(CONF_COMMAND_OFF), + retry_times, + ) + for object_id, config in switches.items() + ] + + def get_mp1_slot_name(switch_friendly_name, slot): """Get slot name.""" if not slots[f"slot_{slot}"]: return f"{switch_friendly_name} slot {slot}" return slots[f"slot_{slot}"] - if switch_type in RM_TYPES: - broadlink_device = broadlink.rm((ip_addr, 80), mac_addr, None) - hass.add_job(async_setup_service, hass, ip_addr, broadlink_device) - - switches = [] - for object_id, device_config in devices.items(): - switches.append( - BroadlinkRMSwitch( - object_id, - device_config.get(CONF_FRIENDLY_NAME, object_id), - broadlink_device, - device_config.get(CONF_COMMAND_ON), - device_config.get(CONF_COMMAND_OFF), - retry_times, - ) - ) - elif switch_type in SP1_TYPES: - broadlink_device = broadlink.sp1((ip_addr, 80), mac_addr, None) + if model in RM_TYPES: + broadlink_device = blk.rm((host, DEFAULT_PORT), mac_addr, None) + hass.add_job(async_setup_service, hass, host, broadlink_device) + switches = generate_rm_switches(devices, broadlink_device) + elif model in RM4_TYPES: + broadlink_device = blk.rm4((host, DEFAULT_PORT), mac_addr, None) + hass.add_job(async_setup_service, hass, host, broadlink_device) + switches = generate_rm_switches(devices, broadlink_device) + elif model in SP1_TYPES: + broadlink_device = blk.sp1((host, DEFAULT_PORT), mac_addr, None) switches = [BroadlinkSP1Switch(friendly_name, broadlink_device, retry_times)] - elif switch_type in SP2_TYPES: - broadlink_device = broadlink.sp2((ip_addr, 80), mac_addr, None) + elif model in SP2_TYPES: + broadlink_device = blk.sp2((host, DEFAULT_PORT), mac_addr, None) switches = [BroadlinkSP2Switch(friendly_name, broadlink_device, retry_times)] - elif switch_type in MP1_TYPES: + elif model in MP1_TYPES: switches = [] - broadlink_device = broadlink.mp1((ip_addr, 80), mac_addr, None) + broadlink_device = blk.mp1((host, DEFAULT_PORT), mac_addr, None) parent_device = BroadlinkMP1Switch(broadlink_device, retry_times) for i in range(1, 5): slot = BroadlinkMP1Slot( - _get_mp1_slot_name(friendly_name, i), + get_mp1_slot_name(friendly_name, i), broadlink_device, i, parent_device, diff --git a/homeassistant/components/brother/.translations/ca.json b/homeassistant/components/brother/.translations/ca.json deleted file mode 100644 index bf592396094..00000000000 --- a/homeassistant/components/brother/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta impressora ja est\u00e0 configurada.", - "unsupported_model": "Aquest model d'impressora no \u00e9s compatible." - }, - "error": { - "connection_error": "Error de connexi\u00f3.", - "snmp_error": "El servidor SNMP s'ha tancat o la impressora no \u00e9s compatible.", - "wrong_host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP inv\u00e0lids." - }, - "flow_title": "Impressora Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP de la impressora", - "type": "Tipus d'impressora" - }, - "description": "Configura la integraci\u00f3 d'impressora Brother. Si tens problemes amb la configuraci\u00f3, visita: https://www.home-assistant.io/integrations/brother", - "title": "Impressora Brother" - }, - "zeroconf_confirm": { - "data": { - "type": "Tipus d'impressora" - }, - "description": "Vols afegir la impressora Brother {model} amb n\u00famero de s\u00e8rie `{serial_number}` a Home Assistant?", - "title": "Impressora Brother descoberta" - } - }, - "title": "Impressora Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/da.json b/homeassistant/components/brother/.translations/da.json deleted file mode 100644 index 7a8f754bd9f..00000000000 --- a/homeassistant/components/brother/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne printer er allerede konfigureret.", - "unsupported_model": "Denne printermodel underst\u00f8ttes ikke." - }, - "error": { - "connection_error": "Forbindelsesfejl.", - "snmp_error": "SNMP-server er sl\u00e5et fra, eller printeren underst\u00f8ttes ikke.", - "wrong_host": "Ugyldigt v\u00e6rtsnavn eller IP-adresse." - }, - "flow_title": "Brother-printer: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Printerens v\u00e6rtsnavn eller IP-adresse", - "type": "Type af printer" - }, - "description": "Konfigurer Brother-printerintegration. Hvis du har problemer med konfiguration, kan du g\u00e5 til: https://www.home-assistant.io/integrations/brother", - "title": "Brother-printer" - }, - "zeroconf_confirm": { - "data": { - "type": "Type af printer" - }, - "description": "Vil du tilf\u00f8je Brother-printeren {model} med serienummeret `{serial_number}` til Home Assistant?", - "title": "Fandt Brother-printer" - } - }, - "title": "Brother-printer" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/de.json b/homeassistant/components/brother/.translations/de.json deleted file mode 100644 index f99681d6d7b..00000000000 --- a/homeassistant/components/brother/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser Drucker ist bereits konfiguriert", - "unsupported_model": "Dieses Druckermodell wird nicht unterst\u00fctzt." - }, - "error": { - "connection_error": "Verbindungsfehler", - "snmp_error": "SNMP-Server deaktiviert oder Drucker nicht unterst\u00fctzt.", - "wrong_host": " Ung\u00fcltiger Hostname oder IP-Adresse" - }, - "flow_title": "Brother-Drucker: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Drucker Hostname oder IP-Adresse", - "type": "Typ des Druckers" - }, - "description": "Einrichten der Brother-Drucker-Integration. Wenn Du Probleme mit der Konfiguration hast, gehe zu: https://www.home-assistant.io/integrations/brother", - "title": "Brother Drucker" - }, - "zeroconf_confirm": { - "data": { - "type": "Typ des Druckers" - }, - "description": "M\u00f6chten Sie den Brother Drucker {model} mit der Seriennummer `{serial_number}` zum Home Assistant hinzuf\u00fcgen?", - "title": "Brother-Drucker entdeckt" - } - }, - "title": "Brother Drucker" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/en.json b/homeassistant/components/brother/.translations/en.json deleted file mode 100644 index 928b6bf3530..00000000000 --- a/homeassistant/components/brother/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This printer is already configured.", - "unsupported_model": "This printer model is not supported." - }, - "error": { - "connection_error": "Connection error.", - "snmp_error": "SNMP server turned off or printer not supported.", - "wrong_host": "Invalid hostname or IP address." - }, - "flow_title": "Brother Printer: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Printer hostname or IP address", - "type": "Type of the printer" - }, - "description": "Set up Brother printer integration. If you have problems with configuration go to: https://www.home-assistant.io/integrations/brother", - "title": "Brother Printer" - }, - "zeroconf_confirm": { - "data": { - "type": "Type of the printer" - }, - "description": "Do you want to add the Brother Printer {model} with serial number `{serial_number}` to Home Assistant?", - "title": "Discovered Brother Printer" - } - }, - "title": "Brother Printer" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/es-419.json b/homeassistant/components/brother/.translations/es-419.json deleted file mode 100644 index 49b77b829b5..00000000000 --- a/homeassistant/components/brother/.translations/es-419.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Impresora Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/es.json b/homeassistant/components/brother/.translations/es.json deleted file mode 100644 index d41d09634d8..00000000000 --- a/homeassistant/components/brother/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta impresora ya est\u00e1 configurada.", - "unsupported_model": "Este modelo de impresora no es compatible." - }, - "error": { - "connection_error": "Error de conexi\u00f3n.", - "snmp_error": "El servidor SNMP est\u00e1 apagado o la impresora no es compatible.", - "wrong_host": "Nombre del host o direcci\u00f3n IP no v\u00e1lidos." - }, - "flow_title": "Impresora Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Nombre del host o direcci\u00f3n IP de la impresora", - "type": "Tipo de impresora" - }, - "description": "Configure la integraci\u00f3n de impresoras Brother. Si tiene problemas con la configuraci\u00f3n, vaya a: https://www.home-assistant.io/integrations/brother", - "title": "Impresora Brother" - }, - "zeroconf_confirm": { - "data": { - "type": "Tipo de impresora" - }, - "description": "\u00bfQuiere a\u00f1adir la Impresora Brother {model} con el n\u00famero de serie `{serial_number}` a Home Assistant?", - "title": "Impresora Brother encontrada" - } - }, - "title": "Impresora Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/fr.json b/homeassistant/components/brother/.translations/fr.json deleted file mode 100644 index 788d0c74003..00000000000 --- a/homeassistant/components/brother/.translations/fr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cette imprimante est d\u00e9j\u00e0 configur\u00e9e.", - "unsupported_model": "Ce mod\u00e8le d'imprimante n'est pas pris en charge." - }, - "error": { - "connection_error": "Erreur de connexion.", - "snmp_error": "Serveur SNMP d\u00e9sactiv\u00e9 ou imprimante non prise en charge.", - "wrong_host": "Nom d'h\u00f4te ou adresse IP invalide." - }, - "flow_title": "Imprimante Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Nom d'h\u00f4te ou adresse IP de l'imprimante", - "type": "Type d'imprimante" - }, - "description": "Configurez l'int\u00e9gration de l'imprimante Brother. Si vous avez des probl\u00e8mes avec la configuration, allez \u00e0 : https://www.home-assistant.io/integrations/brother", - "title": "Imprimante Brother" - }, - "zeroconf_confirm": { - "data": { - "type": "Type d'imprimante" - }, - "description": "Voulez-vous ajouter l'imprimante Brother {model} avec le num\u00e9ro de s\u00e9rie `{serial_number}` \u00e0 Home Assistant ?", - "title": "Imprimante Brother d\u00e9couverte" - } - }, - "title": "Imprimante Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/hu.json b/homeassistant/components/brother/.translations/hu.json deleted file mode 100644 index 1907d65f289..00000000000 --- a/homeassistant/components/brother/.translations/hu.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ez a nyomtat\u00f3 m\u00e1r konfigur\u00e1lva van.", - "unsupported_model": "Ez a nyomtat\u00f3modell nem t\u00e1mogatott." - }, - "error": { - "connection_error": "Csatlakoz\u00e1si hiba.", - "snmp_error": "Az SNMP szerver ki van kapcsolva, vagy a nyomtat\u00f3 nem t\u00e1mogatott.", - "wrong_host": "\u00c9rv\u00e9nytelen \u00e1llom\u00e1sn\u00e9v vagy IP-c\u00edm." - }, - "flow_title": "Brother nyomtat\u00f3: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Nyomtat\u00f3 \u00e1llom\u00e1sneve vagy IP-c\u00edme", - "type": "A nyomtat\u00f3 t\u00edpusa" - }, - "description": "A Brother nyomtat\u00f3 integr\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa. Ha probl\u00e9m\u00e1id vannak a konfigur\u00e1ci\u00f3val, l\u00e1togass el a k\u00f6vetkez\u0151 oldalra: https://www.home-assistant.io/integrations/brother", - "title": "Brother nyomtat\u00f3" - }, - "zeroconf_confirm": { - "data": { - "type": "A nyomtat\u00f3 t\u00edpusa" - }, - "description": "Hozz\u00e1 akarja adni a {model} Brother nyomtat\u00f3t, amelynek sorsz\u00e1ma: {serial_number} `, a Home Assistant-hoz?", - "title": "Felfedezett Brother nyomtat\u00f3" - } - }, - "title": "Brother nyomtat\u00f3" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/it.json b/homeassistant/components/brother/.translations/it.json deleted file mode 100644 index 838598f24f7..00000000000 --- a/homeassistant/components/brother/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questa stampante \u00e8 gi\u00e0 configurata.", - "unsupported_model": "Questo modello di stampante non \u00e8 supportato." - }, - "error": { - "connection_error": "Errore di connessione.", - "snmp_error": "Server SNMP spento o stampante non supportata.", - "wrong_host": "Nome host o indirizzo IP non valido." - }, - "flow_title": "Stampante Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Nome host o indirizzo IP della stampante", - "type": "Tipo di stampante" - }, - "description": "Configurare l'integrazione della stampante Brother. In caso di problemi con la configurazione, visitare: https://www.home-assistant.io/integrations/brother", - "title": "Stampante Brother" - }, - "zeroconf_confirm": { - "data": { - "type": "Tipo di stampante" - }, - "description": "Vuoi aggiungere la stampante Brother {model} con il numero seriale `{serial_number}` a Home Assistant?", - "title": "Trovata stampante Brother" - } - }, - "title": "Stampante Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/ko.json b/homeassistant/components/brother/.translations/ko.json deleted file mode 100644 index ec0f0d2453f..00000000000 --- a/homeassistant/components/brother/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \ud504\ub9b0\ud130\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "unsupported_model": "\uc774 \ud504\ub9b0\ud130 \ubaa8\ub378\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." - }, - "error": { - "connection_error": "\uc5f0\uacb0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", - "snmp_error": "SNMP \uc11c\ubc84\uac00 \uaebc\uc838 \uc788\uac70\ub098 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \ud504\ub9b0\ud130\uc785\ub2c8\ub2e4.", - "wrong_host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "flow_title": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "\ud504\ub9b0\ud130 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", - "type": "\ud504\ub9b0\ud130\uc758 \uc885\ub958" - }, - "description": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. \uad6c\uc131\uc5d0 \ubb38\uc81c\uac00\uc788\ub294 \uacbd\uc6b0 https://www.home-assistant.io/integrations/brother \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", - "title": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130" - }, - "zeroconf_confirm": { - "data": { - "type": "\ud504\ub9b0\ud130\uc758 \uc885\ub958" - }, - "description": "\uc2dc\ub9ac\uc5bc \ubc88\ud638 `{serial_number}` \ub85c \ube0c\ub77c\ub354 \ud504\ub9b0\ud130 {model} \uc744(\ub97c) Home Assistant \uc5d0 \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\ubc1c\uacac\ub41c \ube0c\ub77c\ub354 \ud504\ub9b0\ud130" - } - }, - "title": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/lb.json b/homeassistant/components/brother/.translations/lb.json deleted file mode 100644 index 7553933b66e..00000000000 --- a/homeassistant/components/brother/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse Printer ass scho konfigur\u00e9iert.", - "unsupported_model": "D\u00ebse Printer Modell g\u00ebtt net \u00ebnnerst\u00ebtzt." - }, - "error": { - "connection_error": "Feeler bei der Verbindung.", - "snmp_error": "SNMP Server ausgeschalt oder Printer net \u00ebnnerst\u00ebtzt.", - "wrong_host": "Ong\u00ebltege Numm oder IP Adresse" - }, - "flow_title": "Brother Printer: {model {serial_number}", - "step": { - "user": { - "data": { - "host": "Printer Numm oder IP Adresse", - "type": "Typ vum Printer" - }, - "description": "Brother Printer Integratioun ariichten. Am Fall vun Problemer kuckt op: https://www.home-assistant.io/integrations/brother", - "title": "Brother Printer" - }, - "zeroconf_confirm": { - "data": { - "type": "Typ vum Printer" - }, - "description": "W\u00ebllt dir den Brother Printer {model} mat der Seriennummer `{serial_number}` am Home Assistant dob\u00e4isetzen?", - "title": "Entdeckten Brother Printer" - } - }, - "title": "Brother Printer" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/nl.json b/homeassistant/components/brother/.translations/nl.json deleted file mode 100644 index c72aab46801..00000000000 --- a/homeassistant/components/brother/.translations/nl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Deze printer is al geconfigureerd.", - "unsupported_model": "Dit printermodel wordt niet ondersteund." - }, - "error": { - "connection_error": "Verbindingsfout.", - "snmp_error": "SNMP-server uitgeschakeld of printer wordt niet ondersteund.", - "wrong_host": "Ongeldige hostnaam of IP-adres." - }, - "flow_title": "Brother Printer: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Printerhostnaam of IP-adres", - "type": "Type printer" - }, - "description": "Zet Brother printerintegratie op. Als u problemen heeft met de configuratie ga dan naar: https://www.home-assistant.io/integrations/brother", - "title": "Brother Printer" - }, - "zeroconf_confirm": { - "data": { - "type": "Type printer" - }, - "description": "Wilt u het Brother Printer {model} met serienummer {serial_number}' toevoegen aan Home Assistant?", - "title": "Ontdekte Brother Printer" - } - }, - "title": "Brother Printer" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/no.json b/homeassistant/components/brother/.translations/no.json deleted file mode 100644 index 46bfe618176..00000000000 --- a/homeassistant/components/brother/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne skriveren er allerede konfigurert.", - "unsupported_model": "Denne skrivermodellen er ikke st\u00f8ttet." - }, - "error": { - "connection_error": "Tilkoblingen mislyktes.", - "snmp_error": "SNMP verten er skrudd av eller printeren er ikke st\u00f8ttet.", - "wrong_host": "Ugyldig vertsnavn eller IP-adresse." - }, - "flow_title": "Brother Printer: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Vertsnavn eller IP-adresse til skriveren", - "type": "Skriver type" - }, - "description": "Konfigurer Brother skriver integrasjonen. Hvis du har problemer med konfigurasjonen, bes\u00f8k dokumentasjonen her: https://www.home-assistant.io/integrations/brother", - "title": "Brother skriver" - }, - "zeroconf_confirm": { - "data": { - "type": "Type skriver" - }, - "description": "Vil du legge til Brother-skriveren {Model} med serienummeret {serial_number} til Home Assistant?", - "title": "Oppdaget Brother-Skriveren" - } - }, - "title": "Brother skriver" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/pl.json b/homeassistant/components/brother/.translations/pl.json deleted file mode 100644 index 1417720714e..00000000000 --- a/homeassistant/components/brother/.translations/pl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta drukarka jest ju\u017c skonfigurowana.", - "unsupported_model": "Ten model drukarki nie jest obs\u0142ugiwany." - }, - "error": { - "connection_error": "B\u0142\u0105d po\u0142\u0105czenia.", - "snmp_error": "Serwer SNMP wy\u0142\u0105czony lub drukarka nie jest obs\u0142ugiwana.", - "wrong_host": "Niepoprawna nazwa hosta lub adres IP drukarki." - }, - "flow_title": "Drukarka Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Nazwa hosta lub adres IP drukarki", - "type": "Typ drukarki" - }, - "description": "Konfiguracja integracji drukarek Brother. Je\u015bli masz problemy z konfiguracj\u0105, przejd\u017a na stron\u0119: https://www.home-assistant.io/integrations/brother", - "title": "Drukarka Brother" - }, - "zeroconf_confirm": { - "data": { - "type": "Typ drukarki" - }, - "description": "Czy chcesz doda\u0107 drukark\u0119 Brother {model} o numerze seryjnym `{serial_number}` do Home Assistant'a?", - "title": "Wykryto drukark\u0119 Brother" - } - }, - "title": "Drukarka Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/pt-BR.json b/homeassistant/components/brother/.translations/pt-BR.json deleted file mode 100644 index 454cde320d7..00000000000 --- a/homeassistant/components/brother/.translations/pt-BR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "unsupported_model": "Este modelo de impressora n\u00e3o \u00e9 suportado." - }, - "error": { - "connection_error": "Erro de conex\u00e3o.", - "snmp_error": "Servidor SNMP desligado ou impressora n\u00e3o suportada.", - "wrong_host": "Nome de host ou endere\u00e7o IP inv\u00e1lido." - }, - "step": { - "user": { - "data": { - "host": "Nome do host ou endere\u00e7o IP da impressora", - "type": "Tipo de impressora" - }, - "description": "Configure a integra\u00e7\u00e3o da impressora Brother. Se voc\u00ea tiver problemas com a configura\u00e7\u00e3o, acesse: https://www.home-assistant.io/integrations/brother", - "title": "Impressora Brother" - } - }, - "title": "Impressora Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/ru.json b/homeassistant/components/brother/.translations/ru.json deleted file mode 100644 index 0faf059c8b9..00000000000 --- a/homeassistant/components/brother/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "unsupported_model": "\u042d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f." - }, - "error": { - "connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", - "snmp_error": "\u0421\u0435\u0440\u0432\u0435\u0440 SNMP \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", - "wrong_host": "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441." - }, - "flow_title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "type": "\u0422\u0438\u043f \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430" - }, - "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: https://www.home-assistant.io/integrations/brother.", - "title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 Brother" - }, - "zeroconf_confirm": { - "data": { - "type": "\u0422\u0438\u043f \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430" - }, - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440 Brother {model} \u0441 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c `{serial_number}`?", - "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u0442\u0435\u0440 Brother" - } - }, - "title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 Brother" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/sl.json b/homeassistant/components/brother/.translations/sl.json deleted file mode 100644 index d22f128ffbe..00000000000 --- a/homeassistant/components/brother/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta tiskalnik je \u017ee konfiguriran.", - "unsupported_model": "Ta model tiskalnika ni podprt." - }, - "error": { - "connection_error": "Napaka v povezavi.", - "snmp_error": "Stre\u017enik SNMP je izklopljen ali tiskalnik ni podprt.", - "wrong_host": "Neveljavno ime gostitelja ali IP naslov." - }, - "flow_title": "Tiskalnik Brother: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Gostiteljsko ime tiskalnika ali naslov IP", - "type": "Vrsta tiskalnika" - }, - "description": "Nastavite integracijo tiskalnika Brother. \u010ce imate te\u017eave s konfiguracijo, pojdite na: https://www.home-assistant.io/integrations/brother", - "title": "Brother Tiskalnik" - }, - "zeroconf_confirm": { - "data": { - "type": "Vrsta tiskalnika" - }, - "description": "Ali \u017eelite dodati Brother tiskalnik {model} s serijsko \u0161tevilko ' {serial_number} ' v Home Assistant?", - "title": "Odkriti Brother tiskalniki" - } - }, - "title": "Brother Tiskalnik" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/sv.json b/homeassistant/components/brother/.translations/sv.json deleted file mode 100644 index 774863d4f08..00000000000 --- a/homeassistant/components/brother/.translations/sv.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den h\u00e4r skrivaren \u00e4r redan konfigurerad.", - "unsupported_model": "Den h\u00e4r skrivarmodellen st\u00f6ds inte." - }, - "error": { - "connection_error": "Anslutningsfel.", - "snmp_error": "SNMP-servern har st\u00e4ngts av eller s\u00e5 st\u00f6ds inte skrivaren.", - "wrong_host": "Ogiltigt v\u00e4rdnamn eller IP-adress." - }, - "flow_title": "Brother-skrivare: {model} {serial_number}", - "step": { - "user": { - "data": { - "host": "Skrivarens v\u00e4rdnamn eller IP-adress", - "type": "Typ av skrivare" - }, - "description": "St\u00e4ll in Brother-skrivarintegration. Om du har problem med konfigurationen g\u00e5r du till: https://www.home-assistant.io/integrations/brother", - "title": "Brother-skrivare" - }, - "zeroconf_confirm": { - "data": { - "type": "Typ av skrivare" - }, - "description": "Vill du l\u00e4gga till Brother-skrivaren {model} med serienumret {serial_number} i Home Assistant?", - "title": "Uppt\u00e4ckte Brother-skrivare" - } - }, - "title": "Brother-skrivare" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/zh-Hant.json b/homeassistant/components/brother/.translations/zh-Hant.json deleted file mode 100644 index 987a15f8a2f..00000000000 --- a/homeassistant/components/brother/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u5370\u8868\u6a5f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "unsupported_model": "\u4e0d\u652f\u63f4\u6b64\u6b3e\u5370\u8868\u6a5f\u3002" - }, - "error": { - "connection_error": "\u9023\u7dda\u932f\u8aa4\u3002", - "snmp_error": "SNMP \u4f3a\u670d\u5668\u70ba\u95dc\u9589\u72c0\u614b\u6216\u5370\u8868\u6a5f\u4e0d\u652f\u63f4\u3002", - "wrong_host": "\u7121\u6548\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740" - }, - "flow_title": "Brother \u5370\u8868\u6a5f\uff1a{model} {serial_number}", - "step": { - "user": { - "data": { - "host": "\u5370\u8868\u6a5f\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", - "type": "\u5370\u8868\u6a5f\u985e\u578b" - }, - "description": "\u8a2d\u5b9a Brother \u5370\u8868\u6a5f\u6574\u5408\u3002\u5047\u5982\u9700\u8981\u5354\u52a9\uff0c\u8acb\u53c3\u8003\uff1ahttps://www.home-assistant.io/integrations/brother", - "title": "Brother \u5370\u8868\u6a5f" - }, - "zeroconf_confirm": { - "data": { - "type": "\u5370\u8868\u6a5f\u985e\u578b" - }, - "description": "\u662f\u5426\u8981\u5c07\u5e8f\u865f {serial_number} \u4e4bBrother \u5370\u8868\u6a5f {model} \u65b0\u589e\u81f3 Home Assistant\uff1f", - "title": "\u81ea\u52d5\u63a2\u7d22\u5230 Brother \u5370\u8868\u6a5f" - } - }, - "title": "Brother \u5370\u8868\u6a5f" - } -} \ No newline at end of file diff --git a/homeassistant/components/brother/manifest.json b/homeassistant/components/brother/manifest.json index 7f48c7ee22c..48df788c93a 100644 --- a/homeassistant/components/brother/manifest.json +++ b/homeassistant/components/brother/manifest.json @@ -2,9 +2,8 @@ "domain": "brother", "name": "Brother Printer", "documentation": "https://www.home-assistant.io/integrations/brother", - "dependencies": [], "codeowners": ["@bieniu"], - "requirements": ["brother==0.1.11"], + "requirements": ["brother==0.1.13"], "zeroconf": ["_printer._tcp.local."], "config_flow": true, "quality_scale": "platinum" diff --git a/homeassistant/components/brother/sensor.py b/homeassistant/components/brother/sensor.py index b8142ac0c34..d4f389908b1 100644 --- a/homeassistant/components/brother/sensor.py +++ b/homeassistant/components/brother/sensor.py @@ -142,11 +142,9 @@ class BrotherPrinterSensor(Entity): async def async_added_to_hass(self): """Connect to dispatcher listening for entity data notifications.""" - self.coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Disconnect from update signal.""" - self.coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) async def async_update(self): """Update Brother entity.""" diff --git a/homeassistant/components/brother/strings.json b/homeassistant/components/brother/strings.json index c14903df950..76e62731e53 100644 --- a/homeassistant/components/brother/strings.json +++ b/homeassistant/components/brother/strings.json @@ -1,10 +1,8 @@ { "config": { - "title": "Brother Printer", "flow_title": "Brother Printer: {model} {serial_number}", "step": { "user": { - "title": "Brother Printer", "description": "Set up Brother printer integration. If you have problems with configuration go to: https://www.home-assistant.io/integrations/brother", "data": { "host": "Printer hostname or IP address", @@ -14,9 +12,7 @@ "zeroconf_confirm": { "description": "Do you want to add the Brother Printer {model} with serial number `{serial_number}` to Home Assistant?", "title": "Discovered Brother Printer", - "data": { - "type": "Type of the printer" - } + "data": { "type": "Type of the printer" } } }, "error": { diff --git a/homeassistant/components/brother/translations/ca.json b/homeassistant/components/brother/translations/ca.json new file mode 100644 index 00000000000..bf96f4c3d58 --- /dev/null +++ b/homeassistant/components/brother/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta impressora ja est\u00e0 configurada.", + "unsupported_model": "Aquest model d'impressora no \u00e9s compatible." + }, + "error": { + "connection_error": "Error de connexi\u00f3.", + "snmp_error": "El servidor SNMP s'ha tancat o la impressora no \u00e9s compatible.", + "wrong_host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP inv\u00e0lids." + }, + "flow_title": "Impressora Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP de la impressora", + "type": "Tipus d'impressora" + }, + "description": "Configura la integraci\u00f3 d'impressora Brother. Si tens problemes amb la configuraci\u00f3, visita: https://www.home-assistant.io/integrations/brother", + "title": "Impressora Brother" + }, + "zeroconf_confirm": { + "data": { + "type": "Tipus d'impressora" + }, + "description": "Vols afegir la impressora Brother {model} amb n\u00famero de s\u00e8rie `{serial_number}` a Home Assistant?", + "title": "Impressora Brother descoberta" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/.translations/cs.json b/homeassistant/components/brother/translations/cs.json similarity index 100% rename from homeassistant/components/brother/.translations/cs.json rename to homeassistant/components/brother/translations/cs.json diff --git a/homeassistant/components/brother/translations/da.json b/homeassistant/components/brother/translations/da.json new file mode 100644 index 00000000000..6d9edc1fcad --- /dev/null +++ b/homeassistant/components/brother/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Denne printer er allerede konfigureret.", + "unsupported_model": "Denne printermodel underst\u00f8ttes ikke." + }, + "error": { + "connection_error": "Forbindelsesfejl.", + "snmp_error": "SNMP-server er sl\u00e5et fra, eller printeren underst\u00f8ttes ikke.", + "wrong_host": "Ugyldigt v\u00e6rtsnavn eller IP-adresse." + }, + "flow_title": "Brother-printer: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Printerens v\u00e6rtsnavn eller IP-adresse", + "type": "Type af printer" + }, + "description": "Konfigurer Brother-printerintegration. Hvis du har problemer med konfiguration, kan du g\u00e5 til: https://www.home-assistant.io/integrations/brother", + "title": "Brother-printer" + }, + "zeroconf_confirm": { + "data": { + "type": "Type af printer" + }, + "description": "Vil du tilf\u00f8je Brother-printeren {model} med serienummeret `{serial_number}` til Home Assistant?", + "title": "Fandt Brother-printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/de.json b/homeassistant/components/brother/translations/de.json new file mode 100644 index 00000000000..fb1a1420397 --- /dev/null +++ b/homeassistant/components/brother/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Drucker ist bereits konfiguriert", + "unsupported_model": "Dieses Druckermodell wird nicht unterst\u00fctzt." + }, + "error": { + "connection_error": "Verbindungsfehler", + "snmp_error": "SNMP-Server deaktiviert oder Drucker nicht unterst\u00fctzt.", + "wrong_host": " Ung\u00fcltiger Hostname oder IP-Adresse" + }, + "flow_title": "Brother-Drucker: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Drucker Hostname oder IP-Adresse", + "type": "Typ des Druckers" + }, + "description": "Einrichten der Brother-Drucker-Integration. Wenn Du Probleme mit der Konfiguration hast, gehe zu: https://www.home-assistant.io/integrations/brother", + "title": "Brother Drucker" + }, + "zeroconf_confirm": { + "data": { + "type": "Typ des Druckers" + }, + "description": "M\u00f6chten Sie den Brother Drucker {model} mit der Seriennummer `{serial_number}` zum Home Assistant hinzuf\u00fcgen?", + "title": "Brother-Drucker entdeckt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/en.json b/homeassistant/components/brother/translations/en.json new file mode 100644 index 00000000000..6d453478083 --- /dev/null +++ b/homeassistant/components/brother/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "This printer is already configured.", + "unsupported_model": "This printer model is not supported." + }, + "error": { + "connection_error": "Connection error.", + "snmp_error": "SNMP server turned off or printer not supported.", + "wrong_host": "Invalid hostname or IP address." + }, + "flow_title": "Brother Printer: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Printer hostname or IP address", + "type": "Type of the printer" + }, + "description": "Set up Brother printer integration. If you have problems with configuration go to: https://www.home-assistant.io/integrations/brother", + "title": "Brother Printer" + }, + "zeroconf_confirm": { + "data": { + "type": "Type of the printer" + }, + "description": "Do you want to add the Brother Printer {model} with serial number `{serial_number}` to Home Assistant?", + "title": "Discovered Brother Printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/es-419.json b/homeassistant/components/brother/translations/es-419.json new file mode 100644 index 00000000000..337f5b624fb --- /dev/null +++ b/homeassistant/components/brother/translations/es-419.json @@ -0,0 +1,12 @@ +{ + "config": { + "abort": { + "already_configured": "Esta impresora ya est\u00e1 configurada.", + "unsupported_model": "Este modelo de impresora no es compatible." + }, + "error": { + "connection_error": "Error de conexi\u00f3n.", + "snmp_error": "El servidor SNMP est\u00e1 apagado o la impresora no es compatible." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/es.json b/homeassistant/components/brother/translations/es.json new file mode 100644 index 00000000000..ffd0bd9c7a0 --- /dev/null +++ b/homeassistant/components/brother/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Esta impresora ya est\u00e1 configurada.", + "unsupported_model": "Este modelo de impresora no es compatible." + }, + "error": { + "connection_error": "Error de conexi\u00f3n.", + "snmp_error": "El servidor SNMP est\u00e1 apagado o la impresora no es compatible.", + "wrong_host": "Nombre del host o direcci\u00f3n IP no v\u00e1lidos." + }, + "flow_title": "Impresora Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Nombre del host o direcci\u00f3n IP de la impresora", + "type": "Tipo de impresora" + }, + "description": "Configura la integraci\u00f3n de impresoras Brother. Si tienes problemas con la configuraci\u00f3n, ve a: https://www.home-assistant.io/integrations/brother", + "title": "Impresora Brother" + }, + "zeroconf_confirm": { + "data": { + "type": "Tipo de impresora" + }, + "description": "\u00bfQuieres a\u00f1adir la Impresora Brother {model} con el n\u00famero de serie `{serial_number}` a Home Assistant?", + "title": "Impresora Brother encontrada" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/fr.json b/homeassistant/components/brother/translations/fr.json new file mode 100644 index 00000000000..9dba52055ac --- /dev/null +++ b/homeassistant/components/brother/translations/fr.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Cette imprimante est d\u00e9j\u00e0 configur\u00e9e.", + "unsupported_model": "Ce mod\u00e8le d'imprimante n'est pas pris en charge." + }, + "error": { + "connection_error": "Erreur de connexion.", + "snmp_error": "Serveur SNMP d\u00e9sactiv\u00e9 ou imprimante non prise en charge.", + "wrong_host": "Nom d'h\u00f4te ou adresse IP invalide." + }, + "flow_title": "Imprimante Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Nom d'h\u00f4te ou adresse IP de l'imprimante", + "type": "Type d'imprimante" + }, + "description": "Configurez l'int\u00e9gration de l'imprimante Brother. Si vous avez des probl\u00e8mes avec la configuration, allez \u00e0 : https://www.home-assistant.io/integrations/brother", + "title": "Imprimante Brother" + }, + "zeroconf_confirm": { + "data": { + "type": "Type d'imprimante" + }, + "description": "Voulez-vous ajouter l'imprimante Brother {model} avec le num\u00e9ro de s\u00e9rie `{serial_number}` \u00e0 Home Assistant ?", + "title": "Imprimante Brother d\u00e9couverte" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/hu.json b/homeassistant/components/brother/translations/hu.json new file mode 100644 index 00000000000..77bdb4b6bf1 --- /dev/null +++ b/homeassistant/components/brother/translations/hu.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ez a nyomtat\u00f3 m\u00e1r konfigur\u00e1lva van.", + "unsupported_model": "Ez a nyomtat\u00f3modell nem t\u00e1mogatott." + }, + "error": { + "connection_error": "Csatlakoz\u00e1si hiba.", + "snmp_error": "Az SNMP szerver ki van kapcsolva, vagy a nyomtat\u00f3 nem t\u00e1mogatott.", + "wrong_host": "\u00c9rv\u00e9nytelen \u00e1llom\u00e1sn\u00e9v vagy IP-c\u00edm." + }, + "flow_title": "Brother nyomtat\u00f3: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Nyomtat\u00f3 \u00e1llom\u00e1sneve vagy IP-c\u00edme", + "type": "A nyomtat\u00f3 t\u00edpusa" + }, + "description": "A Brother nyomtat\u00f3 integr\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa. Ha probl\u00e9m\u00e1id vannak a konfigur\u00e1ci\u00f3val, l\u00e1togass el a k\u00f6vetkez\u0151 oldalra: https://www.home-assistant.io/integrations/brother", + "title": "Brother nyomtat\u00f3" + }, + "zeroconf_confirm": { + "data": { + "type": "A nyomtat\u00f3 t\u00edpusa" + }, + "description": "Hozz\u00e1 akarja adni a {model} Brother nyomtat\u00f3t, amelynek sorsz\u00e1ma: {serial_number} `, a Home Assistant-hoz?", + "title": "Felfedezett Brother nyomtat\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/it.json b/homeassistant/components/brother/translations/it.json new file mode 100644 index 00000000000..7631709d0b0 --- /dev/null +++ b/homeassistant/components/brother/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Questa stampante \u00e8 gi\u00e0 configurata.", + "unsupported_model": "Questo modello di stampante non \u00e8 supportato." + }, + "error": { + "connection_error": "Errore di connessione.", + "snmp_error": "Server SNMP spento o stampante non supportata.", + "wrong_host": "Nome host o indirizzo IP non valido." + }, + "flow_title": "Stampante Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Nome host o indirizzo IP della stampante", + "type": "Tipo di stampante" + }, + "description": "Configurare l'integrazione della stampante Brother. In caso di problemi con la configurazione, visitare: https://www.home-assistant.io/integrations/brother", + "title": "Stampante Brother" + }, + "zeroconf_confirm": { + "data": { + "type": "Tipo di stampante" + }, + "description": "Vuoi aggiungere la stampante Brother {model} con il numero seriale `{serial_number}` a Home Assistant?", + "title": "Trovata stampante Brother" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/ko.json b/homeassistant/components/brother/translations/ko.json new file mode 100644 index 00000000000..5b79c87c175 --- /dev/null +++ b/homeassistant/components/brother/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \ud504\ub9b0\ud130\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "unsupported_model": "\uc774 \ud504\ub9b0\ud130 \ubaa8\ub378\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." + }, + "error": { + "connection_error": "\uc5f0\uacb0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "snmp_error": "SNMP \uc11c\ubc84\uac00 \uaebc\uc838 \uc788\uac70\ub098 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \ud504\ub9b0\ud130\uc785\ub2c8\ub2e4.", + "wrong_host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "flow_title": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "\ud504\ub9b0\ud130 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", + "type": "\ud504\ub9b0\ud130\uc758 \uc885\ub958" + }, + "description": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. \uad6c\uc131\uc5d0 \ubb38\uc81c\uac00\uc788\ub294 \uacbd\uc6b0 https://www.home-assistant.io/integrations/brother \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", + "title": "\ube0c\ub77c\ub354 \ud504\ub9b0\ud130" + }, + "zeroconf_confirm": { + "data": { + "type": "\ud504\ub9b0\ud130\uc758 \uc885\ub958" + }, + "description": "\uc2dc\ub9ac\uc5bc \ubc88\ud638 `{serial_number}` \ub85c \ube0c\ub77c\ub354 \ud504\ub9b0\ud130 {model} \uc744(\ub97c) Home Assistant \uc5d0 \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "\ubc1c\uacac\ub41c \ube0c\ub77c\ub354 \ud504\ub9b0\ud130" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/lb.json b/homeassistant/components/brother/translations/lb.json new file mode 100644 index 00000000000..d8d49b0b3ac --- /dev/null +++ b/homeassistant/components/brother/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Printer ass scho konfigur\u00e9iert.", + "unsupported_model": "D\u00ebse Printer Modell g\u00ebtt net \u00ebnnerst\u00ebtzt." + }, + "error": { + "connection_error": "Feeler bei der Verbindung.", + "snmp_error": "SNMP Server ausgeschalt oder Printer net \u00ebnnerst\u00ebtzt.", + "wrong_host": "Ong\u00ebltege Numm oder IP Adresse" + }, + "flow_title": "Brother Printer: {model {serial_number}", + "step": { + "user": { + "data": { + "host": "Printer Numm oder IP Adresse", + "type": "Typ vum Printer" + }, + "description": "Brother Printer Integratioun ariichten. Am Fall vun Problemer kuckt op: https://www.home-assistant.io/integrations/brother", + "title": "Brother Printer" + }, + "zeroconf_confirm": { + "data": { + "type": "Typ vum Printer" + }, + "description": "W\u00ebllt dir den Brother Printer {model} mat der Seriennummer `{serial_number}` am Home Assistant dob\u00e4isetzen?", + "title": "Entdeckten Brother Printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/nl.json b/homeassistant/components/brother/translations/nl.json new file mode 100644 index 00000000000..2dfef67fb18 --- /dev/null +++ b/homeassistant/components/brother/translations/nl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Deze printer is al geconfigureerd.", + "unsupported_model": "Dit printermodel wordt niet ondersteund." + }, + "error": { + "connection_error": "Verbindingsfout.", + "snmp_error": "SNMP-server uitgeschakeld of printer wordt niet ondersteund.", + "wrong_host": "Ongeldige hostnaam of IP-adres." + }, + "flow_title": "Brother Printer: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Printerhostnaam of IP-adres", + "type": "Type printer" + }, + "description": "Zet Brother printerintegratie op. Als u problemen heeft met de configuratie ga dan naar: https://www.home-assistant.io/integrations/brother", + "title": "Brother Printer" + }, + "zeroconf_confirm": { + "data": { + "type": "Type printer" + }, + "description": "Wilt u het Brother Printer {model} met serienummer {serial_number}' toevoegen aan Home Assistant?", + "title": "Ontdekte Brother Printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/no.json b/homeassistant/components/brother/translations/no.json new file mode 100644 index 00000000000..c612e5f8986 --- /dev/null +++ b/homeassistant/components/brother/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Denne skriveren er allerede konfigurert.", + "unsupported_model": "Denne skrivermodellen er ikke st\u00f8ttet." + }, + "error": { + "connection_error": "Tilkoblingen mislyktes.", + "snmp_error": "SNMP verten er skrudd av eller printeren er ikke st\u00f8ttet.", + "wrong_host": "Ugyldig vertsnavn eller IP-adresse." + }, + "flow_title": "Brother Printer: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Vertsnavn eller IP-adresse til skriveren", + "type": "Skriver type" + }, + "description": "Konfigurer Brother skriver integrasjonen. Hvis du har problemer med konfigurasjonen, bes\u00f8k dokumentasjonen her: https://www.home-assistant.io/integrations/brother", + "title": "Brother skriver" + }, + "zeroconf_confirm": { + "data": { + "type": "Type skriver" + }, + "description": "Vil du legge til Brother-skriveren {Model} med serienummeret {serial_number} til Home Assistant?", + "title": "Oppdaget Brother-Skriveren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/pl.json b/homeassistant/components/brother/translations/pl.json new file mode 100644 index 00000000000..94f23b8b5d2 --- /dev/null +++ b/homeassistant/components/brother/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ta drukarka jest ju\u017c skonfigurowana.", + "unsupported_model": "Ten model drukarki nie jest obs\u0142ugiwany." + }, + "error": { + "connection_error": "B\u0142\u0105d po\u0142\u0105czenia.", + "snmp_error": "Serwer SNMP wy\u0142\u0105czony lub drukarka nie jest obs\u0142ugiwana.", + "wrong_host": "Niepoprawna nazwa hosta lub adres IP drukarki." + }, + "flow_title": "Drukarka Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP drukarki", + "type": "Typ drukarki" + }, + "description": "Konfiguracja integracji drukarek Brother. Je\u015bli masz problemy z konfiguracj\u0105, przejd\u017a na stron\u0119: https://www.home-assistant.io/integrations/brother", + "title": "Drukarka Brother" + }, + "zeroconf_confirm": { + "data": { + "type": "Typ drukarki" + }, + "description": "Czy chcesz doda\u0107 drukark\u0119 Brother {model} o numerze seryjnym `{serial_number}` do Home Assistant'a?", + "title": "Wykryto drukark\u0119 Brother" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/pt-BR.json b/homeassistant/components/brother/translations/pt-BR.json new file mode 100644 index 00000000000..b59501e8cfb --- /dev/null +++ b/homeassistant/components/brother/translations/pt-BR.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "unsupported_model": "Este modelo de impressora n\u00e3o \u00e9 suportado." + }, + "error": { + "connection_error": "Erro de conex\u00e3o.", + "snmp_error": "Servidor SNMP desligado ou impressora n\u00e3o suportada.", + "wrong_host": "Nome de host ou endere\u00e7o IP inv\u00e1lido." + }, + "step": { + "user": { + "data": { + "host": "Nome do host ou endere\u00e7o IP da impressora", + "type": "Tipo de impressora" + }, + "description": "Configure a integra\u00e7\u00e3o da impressora Brother. Se voc\u00ea tiver problemas com a configura\u00e7\u00e3o, acesse: https://www.home-assistant.io/integrations/brother", + "title": "Impressora Brother" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/pt.json b/homeassistant/components/brother/translations/pt.json new file mode 100644 index 00000000000..4f76c66c4f6 --- /dev/null +++ b/homeassistant/components/brother/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "type": "Tipo de impressora" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/ru.json b/homeassistant/components/brother/translations/ru.json new file mode 100644 index 00000000000..66c4df1ac6a --- /dev/null +++ b/homeassistant/components/brother/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "unsupported_model": "\u042d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f." + }, + "error": { + "connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", + "snmp_error": "\u0421\u0435\u0440\u0432\u0435\u0440 SNMP \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", + "wrong_host": "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441." + }, + "flow_title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "type": "\u0422\u0438\u043f \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430" + }, + "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: https://www.home-assistant.io/integrations/brother.", + "title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 Brother" + }, + "zeroconf_confirm": { + "data": { + "type": "\u0422\u0438\u043f \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430" + }, + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440 Brother {model} \u0441 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c `{serial_number}`?", + "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u0442\u0435\u0440 Brother" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/sl.json b/homeassistant/components/brother/translations/sl.json new file mode 100644 index 00000000000..91085e32ba1 --- /dev/null +++ b/homeassistant/components/brother/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ta tiskalnik je \u017ee konfiguriran.", + "unsupported_model": "Ta model tiskalnika ni podprt." + }, + "error": { + "connection_error": "Napaka v povezavi.", + "snmp_error": "Stre\u017enik SNMP je izklopljen ali tiskalnik ni podprt.", + "wrong_host": "Neveljavno ime gostitelja ali IP naslov." + }, + "flow_title": "Tiskalnik Brother: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Gostiteljsko ime tiskalnika ali naslov IP", + "type": "Vrsta tiskalnika" + }, + "description": "Nastavite integracijo tiskalnika Brother. \u010ce imate te\u017eave s konfiguracijo, pojdite na: https://www.home-assistant.io/integrations/brother", + "title": "Brother Tiskalnik" + }, + "zeroconf_confirm": { + "data": { + "type": "Vrsta tiskalnika" + }, + "description": "Ali \u017eelite dodati Brother tiskalnik {model} s serijsko \u0161tevilko ' {serial_number} ' v Home Assistant?", + "title": "Odkriti Brother tiskalniki" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/sv.json b/homeassistant/components/brother/translations/sv.json new file mode 100644 index 00000000000..ad6372c423e --- /dev/null +++ b/homeassistant/components/brother/translations/sv.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Den h\u00e4r skrivaren \u00e4r redan konfigurerad.", + "unsupported_model": "Den h\u00e4r skrivarmodellen st\u00f6ds inte." + }, + "error": { + "connection_error": "Anslutningsfel.", + "snmp_error": "SNMP-servern har st\u00e4ngts av eller s\u00e5 st\u00f6ds inte skrivaren.", + "wrong_host": "Ogiltigt v\u00e4rdnamn eller IP-adress." + }, + "flow_title": "Brother-skrivare: {model} {serial_number}", + "step": { + "user": { + "data": { + "host": "Skrivarens v\u00e4rdnamn eller IP-adress", + "type": "Typ av skrivare" + }, + "description": "St\u00e4ll in Brother-skrivarintegration. Om du har problem med konfigurationen g\u00e5r du till: https://www.home-assistant.io/integrations/brother", + "title": "Brother-skrivare" + }, + "zeroconf_confirm": { + "data": { + "type": "Typ av skrivare" + }, + "description": "Vill du l\u00e4gga till Brother-skrivaren {model} med serienumret {serial_number} i Home Assistant?", + "title": "Uppt\u00e4ckte Brother-skrivare" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brother/translations/zh-Hant.json b/homeassistant/components/brother/translations/zh-Hant.json new file mode 100644 index 00000000000..cf268cb4563 --- /dev/null +++ b/homeassistant/components/brother/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u5370\u8868\u6a5f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "unsupported_model": "\u4e0d\u652f\u63f4\u6b64\u6b3e\u5370\u8868\u6a5f\u3002" + }, + "error": { + "connection_error": "\u9023\u7dda\u932f\u8aa4\u3002", + "snmp_error": "SNMP \u4f3a\u670d\u5668\u70ba\u95dc\u9589\u72c0\u614b\u6216\u5370\u8868\u6a5f\u4e0d\u652f\u63f4\u3002", + "wrong_host": "\u7121\u6548\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740" + }, + "flow_title": "Brother \u5370\u8868\u6a5f\uff1a{model} {serial_number}", + "step": { + "user": { + "data": { + "host": "\u5370\u8868\u6a5f\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", + "type": "\u5370\u8868\u6a5f\u985e\u578b" + }, + "description": "\u8a2d\u5b9a Brother \u5370\u8868\u6a5f\u6574\u5408\u3002\u5047\u5982\u9700\u8981\u5354\u52a9\uff0c\u8acb\u53c3\u8003\uff1ahttps://www.home-assistant.io/integrations/brother", + "title": "Brother \u5370\u8868\u6a5f" + }, + "zeroconf_confirm": { + "data": { + "type": "\u5370\u8868\u6a5f\u985e\u578b" + }, + "description": "\u662f\u5426\u8981\u5c07\u5e8f\u865f {serial_number} \u4e4bBrother \u5370\u8868\u6a5f {model} \u65b0\u589e\u81f3 Home Assistant\uff1f", + "title": "\u81ea\u52d5\u63a2\u7d22\u5230 Brother \u5370\u8868\u6a5f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/brottsplatskartan/manifest.json b/homeassistant/components/brottsplatskartan/manifest.json index dfc1a385c6b..0737e506785 100644 --- a/homeassistant/components/brottsplatskartan/manifest.json +++ b/homeassistant/components/brottsplatskartan/manifest.json @@ -3,6 +3,5 @@ "name": "Brottsplatskartan", "documentation": "https://www.home-assistant.io/integrations/brottsplatskartan", "requirements": ["brottsplatskartan==0.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/brottsplatskartan/sensor.py b/homeassistant/components/brottsplatskartan/sensor.py index feb066a6f3f..7b2c3e585e3 100644 --- a/homeassistant/components/brottsplatskartan/sensor.py +++ b/homeassistant/components/brottsplatskartan/sensor.py @@ -65,7 +65,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): area = config.get(CONF_AREA) latitude = config.get(CONF_LATITUDE, hass.config.latitude) longitude = config.get(CONF_LONGITUDE, hass.config.longitude) - name = config.get(CONF_NAME) + name = config[CONF_NAME] # Every Home Assistant instance should have their own unique # app parameter: https://brottsplatskartan.se/sida/api diff --git a/homeassistant/components/browser/manifest.json b/homeassistant/components/browser/manifest.json index bb6c5e783fd..448e3af1d24 100644 --- a/homeassistant/components/browser/manifest.json +++ b/homeassistant/components/browser/manifest.json @@ -2,8 +2,6 @@ "domain": "browser", "name": "Browser", "documentation": "https://www.home-assistant.io/integrations/browser", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/brunt/manifest.json b/homeassistant/components/brunt/manifest.json index 4af42fb28de..68f0cf9e461 100644 --- a/homeassistant/components/brunt/manifest.json +++ b/homeassistant/components/brunt/manifest.json @@ -3,6 +3,5 @@ "name": "Brunt Blind Engine", "documentation": "https://www.home-assistant.io/integrations/brunt", "requirements": ["brunt==0.1.3"], - "dependencies": [], "codeowners": ["@eavanvalkenburg"] } diff --git a/homeassistant/components/bt_home_hub_5/manifest.json b/homeassistant/components/bt_home_hub_5/manifest.json index fde6dc6e546..adf3e74c7a6 100644 --- a/homeassistant/components/bt_home_hub_5/manifest.json +++ b/homeassistant/components/bt_home_hub_5/manifest.json @@ -3,6 +3,5 @@ "name": "BT Home Hub 5", "documentation": "https://www.home-assistant.io/integrations/bt_home_hub_5", "requirements": ["bthomehub5-devicelist==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/bt_smarthub/device_tracker.py b/homeassistant/components/bt_smarthub/device_tracker.py index 45b18b963c5..383f724decd 100644 --- a/homeassistant/components/bt_smarthub/device_tracker.py +++ b/homeassistant/components/bt_smarthub/device_tracker.py @@ -1,7 +1,7 @@ """Support for BT Smart Hub (Sometimes referred to as BT Home Hub 6).""" import logging -import btsmarthub_devicelist +from btsmarthub_devicelist import BTSmartHub import voluptuous as vol from homeassistant.components.device_tracker import ( @@ -15,15 +15,24 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) CONF_DEFAULT_IP = "192.168.1.254" +CONF_SMARTHUB_MODEL = "smarthub_model" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Optional(CONF_HOST, default=CONF_DEFAULT_IP): cv.string} + { + vol.Optional(CONF_HOST, default=CONF_DEFAULT_IP): cv.string, + vol.Optional(CONF_SMARTHUB_MODEL): vol.In([1, 2]), + } ) def get_scanner(hass, config): """Return a BT Smart Hub scanner if successful.""" - scanner = BTSmartHubScanner(config[DOMAIN]) + info = config[DOMAIN] + smarthub_client = BTSmartHub( + router_ip=info[CONF_HOST], smarthub_model=info.get(CONF_SMARTHUB_MODEL) + ) + + scanner = BTSmartHubScanner(smarthub_client) return scanner if scanner.success_init else None @@ -31,10 +40,9 @@ def get_scanner(hass, config): class BTSmartHubScanner(DeviceScanner): """This class queries a BT Smart Hub.""" - def __init__(self, config): + def __init__(self, smarthub_client): """Initialise the scanner.""" - _LOGGER.debug("Initialising BT Smart Hub") - self.host = config[CONF_HOST] + self.smarthub = smarthub_client self.last_results = {} self.success_init = False @@ -43,7 +51,7 @@ class BTSmartHubScanner(DeviceScanner): if data: self.success_init = True else: - _LOGGER.info("Failed to connect to %s", self.host) + _LOGGER.info("Failed to connect to %s", self.smarthub.router_ip) def scan_devices(self): """Scan for new devices and return a list with found device IDs.""" @@ -77,9 +85,8 @@ class BTSmartHubScanner(DeviceScanner): """Retrieve data from BT Smart Hub and return parsed result.""" # Request data from bt smarthub into a list of dicts. - data = btsmarthub_devicelist.get_devicelist( - router_ip=self.host, only_active_devices=True - ) + data = self.smarthub.get_devicelist(only_active_devices=True) + # Renaming keys from parsed result. devices = {} for device in data: diff --git a/homeassistant/components/bt_smarthub/manifest.json b/homeassistant/components/bt_smarthub/manifest.json index 0c474584f36..81f7098e653 100644 --- a/homeassistant/components/bt_smarthub/manifest.json +++ b/homeassistant/components/bt_smarthub/manifest.json @@ -2,7 +2,6 @@ "domain": "bt_smarthub", "name": "BT Smart Hub", "documentation": "https://www.home-assistant.io/integrations/bt_smarthub", - "requirements": ["btsmarthub_devicelist==0.1.3"], - "dependencies": [], + "requirements": ["btsmarthub_devicelist==0.2.0"], "codeowners": ["@jxwolstenholme"] } diff --git a/homeassistant/components/buienradar/camera.py b/homeassistant/components/buienradar/camera.py index b685bdb5c73..78c8f82d1ff 100644 --- a/homeassistant/components/buienradar/camera.py +++ b/homeassistant/components/buienradar/camera.py @@ -128,7 +128,7 @@ class BuienradarCam(Camera): _LOG.debug("HTTP 304 - success") return True - last_modified = res.headers.get("Last-Modified", None) + last_modified = res.headers.get("Last-Modified") if last_modified: self._last_modified = last_modified diff --git a/homeassistant/components/buienradar/manifest.json b/homeassistant/components/buienradar/manifest.json index 5f604322b16..359cb471ada 100644 --- a/homeassistant/components/buienradar/manifest.json +++ b/homeassistant/components/buienradar/manifest.json @@ -3,6 +3,5 @@ "name": "Buienradar", "documentation": "https://www.home-assistant.io/integrations/buienradar", "requirements": ["buienradar==1.0.4"], - "dependencies": [], "codeowners": ["@mjj4791", "@ties"] } diff --git a/homeassistant/components/buienradar/sensor.py b/homeassistant/components/buienradar/sensor.py index 5d709ab1e63..92811b98a80 100644 --- a/homeassistant/components/buienradar/sensor.py +++ b/homeassistant/components/buienradar/sensor.py @@ -27,12 +27,15 @@ from homeassistant.const import ( CONF_LONGITUDE, CONF_MONITORED_CONDITIONS, CONF_NAME, + DEGREE, IRRADIATION_WATTS_PER_SQUARE_METER, + LENGTH_KILOMETERS, SPEED_KILOMETERS_PER_HOUR, TEMP_CELSIUS, TIME_HOURS, UNIT_PERCENTAGE, ) +from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import dt as dt_util @@ -74,9 +77,9 @@ SENSOR_TYPES = { "windspeed": ["Wind speed", SPEED_KILOMETERS_PER_HOUR, "mdi:weather-windy"], "windforce": ["Wind force", "Bft", "mdi:weather-windy"], "winddirection": ["Wind direction", None, "mdi:compass-outline"], - "windazimuth": ["Wind direction azimuth", "°", "mdi:compass-outline"], + "windazimuth": ["Wind direction azimuth", DEGREE, "mdi:compass-outline"], "pressure": ["Pressure", "hPa", "mdi:gauge"], - "visibility": ["Visibility", "km", None], + "visibility": ["Visibility", LENGTH_KILOMETERS, None], "windgust": ["Wind gust", SPEED_KILOMETERS_PER_HOUR, "mdi:weather-windy"], "precipitation": ["Precipitation", f"mm/{TIME_HOURS}", "mdi:weather-pouring"], "irradiance": ["Irradiance", IRRADIATION_WATTS_PER_SQUARE_METER, "mdi:sunglasses"], @@ -146,11 +149,11 @@ SENSOR_TYPES = { "winddirection_3d": ["Wind direction 3d", None, "mdi:compass-outline"], "winddirection_4d": ["Wind direction 4d", None, "mdi:compass-outline"], "winddirection_5d": ["Wind direction 5d", None, "mdi:compass-outline"], - "windazimuth_1d": ["Wind direction azimuth 1d", "°", "mdi:compass-outline"], - "windazimuth_2d": ["Wind direction azimuth 2d", "°", "mdi:compass-outline"], - "windazimuth_3d": ["Wind direction azimuth 3d", "°", "mdi:compass-outline"], - "windazimuth_4d": ["Wind direction azimuth 4d", "°", "mdi:compass-outline"], - "windazimuth_5d": ["Wind direction azimuth 5d", "°", "mdi:compass-outline"], + "windazimuth_1d": ["Wind direction azimuth 1d", DEGREE, "mdi:compass-outline"], + "windazimuth_2d": ["Wind direction azimuth 2d", DEGREE, "mdi:compass-outline"], + "windazimuth_3d": ["Wind direction azimuth 3d", DEGREE, "mdi:compass-outline"], + "windazimuth_4d": ["Wind direction azimuth 4d", DEGREE, "mdi:compass-outline"], + "windazimuth_5d": ["Wind direction azimuth 5d", DEGREE, "mdi:compass-outline"], "condition_1d": ["Condition 1d", None, None], "condition_2d": ["Condition 2d", None, None], "condition_3d": ["Condition 3d", None, None], @@ -191,7 +194,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( vol.Inclusive( CONF_LONGITUDE, "coordinates", "Latitude and longitude must exist together" ): cv.longitude, - vol.Optional(CONF_TIMEFRAME, default=60): vol.All( + vol.Optional(CONF_TIMEFRAME, default=DEFAULT_TIMEFRAME): vol.All( vol.Coerce(int), vol.Range(min=5, max=120) ), vol.Optional(CONF_NAME, default="br"): cv.string, @@ -204,7 +207,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= latitude = config.get(CONF_LATITUDE, hass.config.latitude) longitude = config.get(CONF_LONGITUDE, hass.config.longitude) - timeframe = config.get(CONF_TIMEFRAME, DEFAULT_TIMEFRAME) + timeframe = config[CONF_TIMEFRAME] if None in (latitude, longitude): _LOGGER.error("Latitude or longitude not set in Home Assistant config") @@ -254,13 +257,18 @@ class BrSensor(Entity): def uid(self, coordinates): """Generate a unique id using coordinates and sensor type.""" # The combination of the location, name and sensor type is unique - return "%2.6f%2.6f%s" % ( - coordinates[CONF_LATITUDE], - coordinates[CONF_LONGITUDE], - self.type, + return "{:2.6f}{:2.6f}{}".format( + coordinates[CONF_LATITUDE], coordinates[CONF_LONGITUDE], self.type ) - def load_data(self, data): + @callback + def data_updated(self, data): + """Update data.""" + if self._load_data(data) and self.hass: + self.async_write_ha_state() + + @callback + def _load_data(self, data): """Load the sensor with relevant data.""" # Find sensor @@ -301,17 +309,17 @@ class BrSensor(Entity): return False if condition: - new_state = condition.get(CONDITION, None) + new_state = condition.get(CONDITION) if self.type.startswith(SYMBOL): - new_state = condition.get(EXACTNL, None) + new_state = condition.get(EXACTNL) if self.type.startswith("conditioncode"): - new_state = condition.get(CONDCODE, None) + new_state = condition.get(CONDCODE) if self.type.startswith("conditiondetailed"): - new_state = condition.get(DETAILED, None) + new_state = condition.get(DETAILED) if self.type.startswith("conditionexact"): - new_state = condition.get(EXACT, None) + new_state = condition.get(EXACT) - img = condition.get(IMAGE, None) + img = condition.get(IMAGE) if new_state != self._state or img != self._entity_picture: self._state = new_state @@ -340,20 +348,20 @@ class BrSensor(Entity): if self.type == SYMBOL or self.type.startswith(CONDITION): # update weather symbol & status text - condition = data.get(CONDITION, None) + condition = data.get(CONDITION) if condition: if self.type == SYMBOL: - new_state = condition.get(EXACTNL, None) + new_state = condition.get(EXACTNL) if self.type == CONDITION: - new_state = condition.get(CONDITION, None) + new_state = condition.get(CONDITION) if self.type == "conditioncode": - new_state = condition.get(CONDCODE, None) + new_state = condition.get(CONDCODE) if self.type == "conditiondetailed": - new_state = condition.get(DETAILED, None) + new_state = condition.get(DETAILED) if self.type == "conditionexact": - new_state = condition.get(EXACT, None) + new_state = condition.get(EXACT) - img = condition.get(IMAGE, None) + img = condition.get(IMAGE) if new_state != self._state or img != self._entity_picture: self._state = new_state diff --git a/homeassistant/components/buienradar/util.py b/homeassistant/components/buienradar/util.py index 7d16f072b98..4c69678d215 100644 --- a/homeassistant/components/buienradar/util.py +++ b/homeassistant/components/buienradar/util.py @@ -25,7 +25,7 @@ from buienradar.constants import ( ) from buienradar.urls import JSON_FEED_URL, json_precipitation_forecast_url -from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE +from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.event import async_track_point_in_utc_time from homeassistant.util import dt as dt_util @@ -67,15 +67,12 @@ class BrData: async def update_devices(self): """Update all devices/sensors.""" - if self.devices: - tasks = [] - # Update all devices - for dev in self.devices: - if dev.load_data(self.data): - tasks.append(dev.async_update_ha_state()) + if not self.devices: + return - if tasks: - await asyncio.wait(tasks) + # Update all devices + for dev in self.devices: + dev.data_updated(self.data) async def schedule_update(self, minute=1): """Schedule an update after minute minutes.""" @@ -95,7 +92,7 @@ class BrData: result[STATUS_CODE] = resp.status result[CONTENT] = await resp.text() - if resp.status == 200: + if resp.status == HTTP_OK: result[SUCCESS] = True else: result[MESSAGE] = "Got http statuscode: %d" % (resp.status) diff --git a/homeassistant/components/buienradar/weather.py b/homeassistant/components/buienradar/weather.py index 32e8babde90..37dee08313e 100644 --- a/homeassistant/components/buienradar/weather.py +++ b/homeassistant/components/buienradar/weather.py @@ -101,8 +101,8 @@ class BrWeather(WeatherEntity): def __init__(self, data, config): """Initialise the platform with a data instance and station name.""" - self._stationname = config.get(CONF_NAME, None) - self._forecast = config.get(CONF_FORECAST) + self._stationname = config.get(CONF_NAME) + self._forecast = config[CONF_FORECAST] self._data = data @property diff --git a/homeassistant/components/caldav/manifest.json b/homeassistant/components/caldav/manifest.json index 85dc005a6a8..94d786c8825 100644 --- a/homeassistant/components/caldav/manifest.json +++ b/homeassistant/components/caldav/manifest.json @@ -3,6 +3,5 @@ "name": "CalDAV", "documentation": "https://www.home-assistant.io/integrations/caldav", "requirements": ["caldav==0.6.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/calendar/__init__.py b/homeassistant/components/calendar/__init__.py index 53edf48ae80..6f7427a0234 100644 --- a/homeassistant/components/calendar/__init__.py +++ b/homeassistant/components/calendar/__init__.py @@ -6,7 +6,7 @@ import re from aiohttp import web from homeassistant.components import http -from homeassistant.const import STATE_OFF, STATE_ON +from homeassistant.const import HTTP_BAD_REQUEST, STATE_OFF, STATE_ON from homeassistant.helpers.config_validation import ( # noqa: F401 PLATFORM_SCHEMA, PLATFORM_SCHEMA_BASE, @@ -86,15 +86,15 @@ def calculate_offset(event, offset): summary = event.get("summary", "") # check if we have an offset tag in the message # time is HH:MM or MM - reg = "{}([+-]?[0-9]{{0,2}}(:[0-9]{{0,2}})?)".format(offset) + reg = f"{offset}([+-]?[0-9]{{0,2}}(:[0-9]{{0,2}})?)" search = re.search(reg, summary) if search and search.group(1): time = search.group(1) if ":" not in time: if time[0] == "+" or time[0] == "-": - time = "{}0:{}".format(time[0], time[1:]) + time = f"{time[0]}0:{time[1:]}" else: - time = "0:{}".format(time) + time = f"0:{time}" offset_time = time_period_str(time) summary = (summary[: search.start()] + summary[search.end() :]).strip() @@ -182,12 +182,12 @@ class CalendarEventView(http.HomeAssistantView): start = request.query.get("start") end = request.query.get("end") if None in (start, end, entity): - return web.Response(status=400) + return web.Response(status=HTTP_BAD_REQUEST) try: start_date = dt.parse_datetime(start) end_date = dt.parse_datetime(end) except (ValueError, AttributeError): - return web.Response(status=400) + return web.Response(status=HTTP_BAD_REQUEST) event_list = await entity.async_get_events( request.app["hass"], start_date, end_date ) diff --git a/homeassistant/components/calendar/manifest.json b/homeassistant/components/calendar/manifest.json index abcff158bfb..1ae68100c06 100644 --- a/homeassistant/components/calendar/manifest.json +++ b/homeassistant/components/calendar/manifest.json @@ -2,7 +2,6 @@ "domain": "calendar", "name": "Calendar", "documentation": "https://www.home-assistant.io/integrations/calendar", - "requirements": [], "dependencies": ["http"], "codeowners": [] } diff --git a/homeassistant/components/calendar/services.yaml b/homeassistant/components/calendar/services.yaml index d8a0575bced..8e2958f7370 100644 --- a/homeassistant/components/calendar/services.yaml +++ b/homeassistant/components/calendar/services.yaml @@ -1,2 +1 @@ # Describes the format for available calendar services - diff --git a/homeassistant/components/calendar/strings.json b/homeassistant/components/calendar/strings.json new file mode 100644 index 00000000000..3af9a78e607 --- /dev/null +++ b/homeassistant/components/calendar/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Calendar", + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } + } +} diff --git a/homeassistant/components/calendar/translations/af.json b/homeassistant/components/calendar/translations/af.json new file mode 100644 index 00000000000..e9d01214e08 --- /dev/null +++ b/homeassistant/components/calendar/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ar.json b/homeassistant/components/calendar/translations/ar.json new file mode 100644 index 00000000000..033a147f799 --- /dev/null +++ b/homeassistant/components/calendar/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0627\u0644\u062a\u0642\u0648\u064a\u0645" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/bg.json b/homeassistant/components/calendar/translations/bg.json new file mode 100644 index 00000000000..bd4bb5fb584 --- /dev/null +++ b/homeassistant/components/calendar/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/bs.json b/homeassistant/components/calendar/translations/bs.json new file mode 100644 index 00000000000..4655814c097 --- /dev/null +++ b/homeassistant/components/calendar/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Kalendar" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ca.json b/homeassistant/components/calendar/translations/ca.json new file mode 100644 index 00000000000..5e842769c51 --- /dev/null +++ b/homeassistant/components/calendar/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desactivat", + "on": "Activat" + } + }, + "title": "Calendari" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/cs.json b/homeassistant/components/calendar/translations/cs.json new file mode 100644 index 00000000000..315c67b0703 --- /dev/null +++ b/homeassistant/components/calendar/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Kalend\u00e1\u0159" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/cy.json b/homeassistant/components/calendar/translations/cy.json new file mode 100644 index 00000000000..9e348b3ed93 --- /dev/null +++ b/homeassistant/components/calendar/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Calendr" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/da.json b/homeassistant/components/calendar/translations/da.json new file mode 100644 index 00000000000..c57af953ad2 --- /dev/null +++ b/homeassistant/components/calendar/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/de.json b/homeassistant/components/calendar/translations/de.json new file mode 100644 index 00000000000..70c9fc7a318 --- /dev/null +++ b/homeassistant/components/calendar/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/el.json b/homeassistant/components/calendar/translations/el.json new file mode 100644 index 00000000000..58a04bbeeac --- /dev/null +++ b/homeassistant/components/calendar/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf" + } + }, + "title": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/en.json b/homeassistant/components/calendar/translations/en.json new file mode 100644 index 00000000000..1a454c483cd --- /dev/null +++ b/homeassistant/components/calendar/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Calendar" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/es-419.json b/homeassistant/components/calendar/translations/es-419.json new file mode 100644 index 00000000000..cab0bd1d814 --- /dev/null +++ b/homeassistant/components/calendar/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desactivado", + "on": "Activado" + } + }, + "title": "Calendario" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/es.json b/homeassistant/components/calendar/translations/es.json new file mode 100644 index 00000000000..47da487c739 --- /dev/null +++ b/homeassistant/components/calendar/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Calendario" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/et.json b/homeassistant/components/calendar/translations/et.json new file mode 100644 index 00000000000..bbdab07d5de --- /dev/null +++ b/homeassistant/components/calendar/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/eu.json b/homeassistant/components/calendar/translations/eu.json new file mode 100644 index 00000000000..22e0b3be84f --- /dev/null +++ b/homeassistant/components/calendar/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Egutegia" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/fa.json b/homeassistant/components/calendar/translations/fa.json new file mode 100644 index 00000000000..f6d09cd27ab --- /dev/null +++ b/homeassistant/components/calendar/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644", + "on": "\u0641\u0639\u0627\u0644" + } + }, + "title": "\u062a\u0642\u0648\u06cc\u0645" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/fi.json b/homeassistant/components/calendar/translations/fi.json new file mode 100644 index 00000000000..8aa704af010 --- /dev/null +++ b/homeassistant/components/calendar/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois p\u00e4\u00e4lt\u00e4", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Kalenteri" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/fr.json b/homeassistant/components/calendar/translations/fr.json new file mode 100644 index 00000000000..70aaa6f0292 --- /dev/null +++ b/homeassistant/components/calendar/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Inactif", + "on": "Actif" + } + }, + "title": "Calendrier" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/gsw.json b/homeassistant/components/calendar/translations/gsw.json new file mode 100644 index 00000000000..58d1042af2e --- /dev/null +++ b/homeassistant/components/calendar/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Kal\u00e4nder" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/he.json b/homeassistant/components/calendar/translations/he.json new file mode 100644 index 00000000000..206528ef6a8 --- /dev/null +++ b/homeassistant/components/calendar/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05dc\u05d5\u05bc\u05d7\u05b7 \u05e9\u05c1\u05b8\u05e0\u05b8\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/hi.json b/homeassistant/components/calendar/translations/hi.json new file mode 100644 index 00000000000..5f1bd39058c --- /dev/null +++ b/homeassistant/components/calendar/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/hr.json b/homeassistant/components/calendar/translations/hr.json new file mode 100644 index 00000000000..4655814c097 --- /dev/null +++ b/homeassistant/components/calendar/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Kalendar" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/hu.json b/homeassistant/components/calendar/translations/hu.json new file mode 100644 index 00000000000..722f67aa095 --- /dev/null +++ b/homeassistant/components/calendar/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Napt\u00e1r" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/hy.json b/homeassistant/components/calendar/translations/hy.json new file mode 100644 index 00000000000..2bfad01c512 --- /dev/null +++ b/homeassistant/components/calendar/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u0555\u0580\u0561\u0581\u0578\u0582\u0575\u0581" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/id.json b/homeassistant/components/calendar/translations/id.json new file mode 100644 index 00000000000..383a6ba77a1 --- /dev/null +++ b/homeassistant/components/calendar/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/is.json b/homeassistant/components/calendar/translations/is.json new file mode 100644 index 00000000000..e693887c6e4 --- /dev/null +++ b/homeassistant/components/calendar/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u00d3virkt", + "on": "Virkt" + } + }, + "title": "Dagatal" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/it.json b/homeassistant/components/calendar/translations/it.json new file mode 100644 index 00000000000..f9dcc4d668e --- /dev/null +++ b/homeassistant/components/calendar/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Disattivo", + "on": "Attivo" + } + }, + "title": "Calendario" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ja.json b/homeassistant/components/calendar/translations/ja.json new file mode 100644 index 00000000000..07a3cd908e7 --- /dev/null +++ b/homeassistant/components/calendar/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + }, + "title": "\u30ab\u30ec\u30f3\u30c0\u30fc" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ko.json b/homeassistant/components/calendar/translations/ko.json new file mode 100644 index 00000000000..af8622be7d7 --- /dev/null +++ b/homeassistant/components/calendar/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc77c\uc815" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/lb.json b/homeassistant/components/calendar/translations/lb.json new file mode 100644 index 00000000000..df7b45c3636 --- /dev/null +++ b/homeassistant/components/calendar/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Kalenner" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/lt.json b/homeassistant/components/calendar/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/calendar/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/lv.json b/homeassistant/components/calendar/translations/lv.json new file mode 100644 index 00000000000..25a5b3d2733 --- /dev/null +++ b/homeassistant/components/calendar/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + } + }, + "title": "Kalend\u0101rs" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/nb.json b/homeassistant/components/calendar/translations/nb.json new file mode 100644 index 00000000000..516a3b7d443 --- /dev/null +++ b/homeassistant/components/calendar/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/nl.json b/homeassistant/components/calendar/translations/nl.json new file mode 100644 index 00000000000..af586da6f96 --- /dev/null +++ b/homeassistant/components/calendar/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/nn.json b/homeassistant/components/calendar/translations/nn.json new file mode 100644 index 00000000000..e72b238e128 --- /dev/null +++ b/homeassistant/components/calendar/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Kalendar" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/no.json b/homeassistant/components/calendar/translations/no.json new file mode 100644 index 00000000000..ba22ae540fc --- /dev/null +++ b/homeassistant/components/calendar/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/pl.json b/homeassistant/components/calendar/translations/pl.json new file mode 100644 index 00000000000..94ac2fd244d --- /dev/null +++ b/homeassistant/components/calendar/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Kalendarz" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/pt-BR.json b/homeassistant/components/calendar/translations/pt-BR.json new file mode 100644 index 00000000000..fca0b1a103b --- /dev/null +++ b/homeassistant/components/calendar/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Inativo", + "on": "Ativo" + } + }, + "title": "Calend\u00e1rio" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/pt.json b/homeassistant/components/calendar/translations/pt.json new file mode 100644 index 00000000000..0d47e41440b --- /dev/null +++ b/homeassistant/components/calendar/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Calend\u00e1rio" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ro.json b/homeassistant/components/calendar/translations/ro.json new file mode 100644 index 00000000000..6433538a1e1 --- /dev/null +++ b/homeassistant/components/calendar/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Calendar" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ru.json b/homeassistant/components/calendar/translations/ru.json new file mode 100644 index 00000000000..0a95a70ae06 --- /dev/null +++ b/homeassistant/components/calendar/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/sk.json b/homeassistant/components/calendar/translations/sk.json new file mode 100644 index 00000000000..8bda47c7ac6 --- /dev/null +++ b/homeassistant/components/calendar/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neakt\u00edvny", + "on": "Akt\u00edvny" + } + }, + "title": "Kalend\u00e1r" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/sl.json b/homeassistant/components/calendar/translations/sl.json new file mode 100644 index 00000000000..bd917673e78 --- /dev/null +++ b/homeassistant/components/calendar/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Koledar" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/sv.json b/homeassistant/components/calendar/translations/sv.json new file mode 100644 index 00000000000..516a3b7d443 --- /dev/null +++ b/homeassistant/components/calendar/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Kalender" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/ta.json b/homeassistant/components/calendar/translations/ta.json new file mode 100644 index 00000000000..27ed507378f --- /dev/null +++ b/homeassistant/components/calendar/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd " + } + } +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/te.json b/homeassistant/components/calendar/translations/te.json new file mode 100644 index 00000000000..5a7f88b221e --- /dev/null +++ b/homeassistant/components/calendar/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c15\u0c4d\u0c2f\u0c3e\u0c32\u0c46\u0c02\u0c21\u0c30\u0c41" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/th.json b/homeassistant/components/calendar/translations/th.json new file mode 100644 index 00000000000..552424760c8 --- /dev/null +++ b/homeassistant/components/calendar/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/tr.json b/homeassistant/components/calendar/translations/tr.json new file mode 100644 index 00000000000..3925c50dd41 --- /dev/null +++ b/homeassistant/components/calendar/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Takvim" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/uk.json b/homeassistant/components/calendar/translations/uk.json new file mode 100644 index 00000000000..a456fad0f79 --- /dev/null +++ b/homeassistant/components/calendar/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/vi.json b/homeassistant/components/calendar/translations/vi.json new file mode 100644 index 00000000000..82c3728ce00 --- /dev/null +++ b/homeassistant/components/calendar/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "L\u1ecbch" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/zh-Hans.json b/homeassistant/components/calendar/translations/zh-Hans.json new file mode 100644 index 00000000000..8ac81c99fa5 --- /dev/null +++ b/homeassistant/components/calendar/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u65e5\u5386" +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/zh-Hant.json b/homeassistant/components/calendar/translations/zh-Hant.json new file mode 100644 index 00000000000..98955bc45b2 --- /dev/null +++ b/homeassistant/components/calendar/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + } + }, + "title": "\u884c\u4e8b\u66c6" +} \ No newline at end of file diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index 6bbf30b000e..2862805a333 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -271,7 +271,7 @@ async def async_setup(hass, config): """Update tokens of the entities.""" for entity in component.entities: entity.async_update_token() - hass.async_create_task(entity.async_update_ha_state()) + entity.async_write_ha_state() hass.helpers.event.async_track_time_interval(update_tokens, TOKEN_CHANGE_INTERVAL) @@ -373,7 +373,7 @@ class Camera(Entity): async def async_camera_image(self): """Return bytes of camera image.""" - return await self.hass.async_add_job(self.camera_image) + return await self.hass.async_add_executor_job(self.camera_image) async def handle_async_still_stream(self, request, interval): """Generate an HTTP MJPEG stream from camera images.""" @@ -409,7 +409,7 @@ class Camera(Entity): async def async_turn_off(self): """Turn off camera.""" - await self.hass.async_add_job(self.turn_off) + await self.hass.async_add_executor_job(self.turn_off) def turn_on(self): """Turn off camera.""" @@ -417,25 +417,23 @@ class Camera(Entity): async def async_turn_on(self): """Turn off camera.""" - await self.hass.async_add_job(self.turn_on) + await self.hass.async_add_executor_job(self.turn_on) def enable_motion_detection(self): """Enable motion detection in the camera.""" raise NotImplementedError() - @callback - def async_enable_motion_detection(self): + async def async_enable_motion_detection(self): """Call the job and enable motion detection.""" - return self.hass.async_add_job(self.enable_motion_detection) + await self.hass.async_add_executor_job(self.enable_motion_detection) def disable_motion_detection(self): """Disable motion detection in camera.""" raise NotImplementedError() - @callback - def async_disable_motion_detection(self): + async def async_disable_motion_detection(self): """Call the job and disable motion detection.""" - return self.hass.async_add_job(self.disable_motion_detection) + await self.hass.async_add_executor_job(self.disable_motion_detection) @property def state_attributes(self): diff --git a/homeassistant/components/camera/manifest.json b/homeassistant/components/camera/manifest.json index e3a2400ac8b..ed8e10c1956 100644 --- a/homeassistant/components/camera/manifest.json +++ b/homeassistant/components/camera/manifest.json @@ -2,7 +2,6 @@ "domain": "camera", "name": "Camera", "documentation": "https://www.home-assistant.io/integrations/camera", - "requirements": [], "dependencies": ["http"], "after_dependencies": ["media_player"], "codeowners": [], diff --git a/homeassistant/components/camera/services.yaml b/homeassistant/components/camera/services.yaml index 6196322e234..14f94976984 100644 --- a/homeassistant/components/camera/services.yaml +++ b/homeassistant/components/camera/services.yaml @@ -5,61 +5,61 @@ turn_off: fields: entity_id: description: Entity id. - example: 'camera.living_room' + example: "camera.living_room" turn_on: description: Turn on camera. fields: entity_id: description: Entity id. - example: 'camera.living_room' + example: "camera.living_room" enable_motion_detection: description: Enable the motion detection in a camera. fields: entity_id: description: Name(s) of entities to enable motion detection. - example: 'camera.living_room_camera' + example: "camera.living_room_camera" disable_motion_detection: description: Disable the motion detection in a camera. fields: entity_id: description: Name(s) of entities to disable motion detection. - example: 'camera.living_room_camera' + example: "camera.living_room_camera" snapshot: description: Take a snapshot from a camera. fields: entity_id: description: Name(s) of entities to create snapshots from. - example: 'camera.living_room_camera' + example: "camera.living_room_camera" filename: description: Template of a Filename. Variable is entity_id. - example: '/tmp/snapshot_{{ entity_id }}' + example: "/tmp/snapshot_{{ entity_id }}" play_stream: description: Play camera stream on supported media player. fields: entity_id: description: Name(s) of entities to stream from. - example: 'camera.living_room_camera' + example: "camera.living_room_camera" media_player: description: Name(s) of media player to stream to. - example: 'media_player.living_room_tv' + example: "media_player.living_room_tv" format: description: (Optional) Stream format supported by media player. - example: 'hls' + example: "hls" record: description: Record live camera feed. fields: entity_id: description: Name of entities to record. - example: 'camera.living_room_camera' + example: "camera.living_room_camera" filename: description: Template of a Filename. Variable is entity_id. Must be mp4. - example: '/tmp/snapshot_{{ entity_id }}.mp4' + example: "/tmp/snapshot_{{ entity_id }}.mp4" duration: description: (Optional) Target recording length (in seconds). default: 30 @@ -67,4 +67,3 @@ record: lookback: description: (Optional) Target lookback period (in seconds) to include in addition to duration. Only available if there is currently an active HLS stream. example: 4 - diff --git a/homeassistant/components/camera/strings.json b/homeassistant/components/camera/strings.json new file mode 100644 index 00000000000..3b8767ec8cd --- /dev/null +++ b/homeassistant/components/camera/strings.json @@ -0,0 +1,10 @@ +{ + "title": "Camera", + "state": { + "_": { + "recording": "Recording", + "streaming": "Streaming", + "idle": "[%key:common::state::idle%]" + } + } +} diff --git a/homeassistant/components/camera/translations/af.json b/homeassistant/components/camera/translations/af.json new file mode 100644 index 00000000000..1696c9045bb --- /dev/null +++ b/homeassistant/components/camera/translations/af.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Onaktief", + "recording": "Opname", + "streaming": "Stroming" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ar.json b/homeassistant/components/camera/translations/ar.json new file mode 100644 index 00000000000..3cd28abe618 --- /dev/null +++ b/homeassistant/components/camera/translations/ar.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u062e\u0627\u0645\u0644", + "recording": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0633\u062c\u064a\u0644", + "streaming": "\u062c\u0627\u0631\u064a \u0627\u0644\u0628\u062b" + } + }, + "title": "\u0643\u0627\u0645\u064a\u0631\u0627" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/bg.json b/homeassistant/components/camera/translations/bg.json new file mode 100644 index 00000000000..b15bbc2f153 --- /dev/null +++ b/homeassistant/components/camera/translations/bg.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u041d\u0435 \u0437\u0430\u043f\u0438\u0441\u0432\u0430", + "recording": "\u0417\u0430\u043f\u0438\u0441\u0432\u0430\u043d\u0435", + "streaming": "\u041f\u0440\u0435\u0434\u0430\u0432\u0430" + } + }, + "title": "\u041a\u0430\u043c\u0435\u0440\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/bs.json b/homeassistant/components/camera/translations/bs.json new file mode 100644 index 00000000000..746cbf74d1e --- /dev/null +++ b/homeassistant/components/camera/translations/bs.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Besposlen", + "recording": "Snimanje", + "streaming": "Predaja slike" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ca.json b/homeassistant/components/camera/translations/ca.json new file mode 100644 index 00000000000..0a7b029aced --- /dev/null +++ b/homeassistant/components/camera/translations/ca.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inactiu", + "recording": "Enregistrant", + "streaming": "Transmetent v\u00eddeo" + } + }, + "title": "C\u00e0mera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/cs.json b/homeassistant/components/camera/translations/cs.json new file mode 100644 index 00000000000..3a310779d79 --- /dev/null +++ b/homeassistant/components/camera/translations/cs.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Ne\u010dinn\u00fd", + "recording": "Z\u00e1znam", + "streaming": "Streamov\u00e1n\u00ed" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/cy.json b/homeassistant/components/camera/translations/cy.json new file mode 100644 index 00000000000..13363333d8a --- /dev/null +++ b/homeassistant/components/camera/translations/cy.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Segur", + "recording": "Recordio", + "streaming": "Ffrydio" + } + }, + "title": "Camera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/da.json b/homeassistant/components/camera/translations/da.json new file mode 100644 index 00000000000..41bdb7f4edd --- /dev/null +++ b/homeassistant/components/camera/translations/da.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inaktiv", + "recording": "Optager", + "streaming": "Streamer" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/de.json b/homeassistant/components/camera/translations/de.json new file mode 100644 index 00000000000..d6f409f1a0e --- /dev/null +++ b/homeassistant/components/camera/translations/de.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Unt\u00e4tig", + "recording": "Aufnehmen", + "streaming": "\u00dcbertr\u00e4gt" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/el.json b/homeassistant/components/camera/translations/el.json new file mode 100644 index 00000000000..56a57402b4d --- /dev/null +++ b/homeassistant/components/camera/translations/el.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u0391\u03b4\u03c1\u03b1\u03bd\u03ad\u03c2", + "recording": "\u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03ac\u03c6\u03b5\u03b9", + "streaming": "\u039c\u03b5\u03c4\u03ac\u03b4\u03bf\u03c3\u03b7 \u03a1\u03bf\u03ae\u03c2" + } + }, + "title": "\u039a\u03ac\u03bc\u03b5\u03c1\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/en.json b/homeassistant/components/camera/translations/en.json new file mode 100644 index 00000000000..f0e1ec40a9c --- /dev/null +++ b/homeassistant/components/camera/translations/en.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Idle", + "recording": "Recording", + "streaming": "Streaming" + } + }, + "title": "Camera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/es-419.json b/homeassistant/components/camera/translations/es-419.json new file mode 100644 index 00000000000..4e00ed76377 --- /dev/null +++ b/homeassistant/components/camera/translations/es-419.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inactivo", + "recording": "Grabando", + "streaming": "Streaming" + } + }, + "title": "C\u00e1mara" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/es.json b/homeassistant/components/camera/translations/es.json new file mode 100644 index 00000000000..54f22812cf2 --- /dev/null +++ b/homeassistant/components/camera/translations/es.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inactivo", + "recording": "Grabando", + "streaming": "Transmitiendo" + } + }, + "title": "C\u00e1mara" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/et.json b/homeassistant/components/camera/translations/et.json new file mode 100644 index 00000000000..1d33a9b1caf --- /dev/null +++ b/homeassistant/components/camera/translations/et.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Ootel", + "recording": "Salvestab", + "streaming": "Voogedastab" + } + }, + "title": "Kaamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/eu.json b/homeassistant/components/camera/translations/eu.json new file mode 100644 index 00000000000..e470b6d1355 --- /dev/null +++ b/homeassistant/components/camera/translations/eu.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "recording": "Grabatzen" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/fa.json b/homeassistant/components/camera/translations/fa.json new file mode 100644 index 00000000000..5d8020b55ea --- /dev/null +++ b/homeassistant/components/camera/translations/fa.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u0628\u06cc\u06a9\u0627\u0631", + "recording": "\u062f\u0631 \u062d\u0627\u0644 \u0636\u0628\u0637", + "streaming": "\u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634" + } + }, + "title": "\u062f\u0648\u0631\u0628\u06cc\u0646" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/fi.json b/homeassistant/components/camera/translations/fi.json new file mode 100644 index 00000000000..5fe10682a21 --- /dev/null +++ b/homeassistant/components/camera/translations/fi.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Lepotilassa", + "recording": "Tallentaa", + "streaming": "Toistaa" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/fr.json b/homeassistant/components/camera/translations/fr.json new file mode 100644 index 00000000000..d4f5cd31afc --- /dev/null +++ b/homeassistant/components/camera/translations/fr.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "En veille", + "recording": "Enregistrement", + "streaming": "Diffusion en cours" + } + }, + "title": "Cam\u00e9ra" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/gsw.json b/homeassistant/components/camera/translations/gsw.json new file mode 100644 index 00000000000..5c09ff84d57 --- /dev/null +++ b/homeassistant/components/camera/translations/gsw.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "L\u00e4\u00e4rlauf", + "recording": "Nimt uf", + "streaming": "Streamt" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/he.json b/homeassistant/components/camera/translations/he.json new file mode 100644 index 00000000000..ccca3a79099 --- /dev/null +++ b/homeassistant/components/camera/translations/he.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u05de\u05d7\u05db\u05d4", + "recording": "\u05de\u05e7\u05dc\u05d9\u05d8", + "streaming": "\u05de\u05d6\u05e8\u05d9\u05dd" + } + }, + "title": "\u05de\u05b7\u05e6\u05dc\u05b5\u05de\u05b8\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/hi.json b/homeassistant/components/camera/translations/hi.json new file mode 100644 index 00000000000..376072b9759 --- /dev/null +++ b/homeassistant/components/camera/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "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/camera/translations/hr.json b/homeassistant/components/camera/translations/hr.json new file mode 100644 index 00000000000..40d11226a52 --- /dev/null +++ b/homeassistant/components/camera/translations/hr.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Neaktivan", + "recording": "Snimanje", + "streaming": "Oda\u0161ilja" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/hu.json b/homeassistant/components/camera/translations/hu.json new file mode 100644 index 00000000000..41a125e80bf --- /dev/null +++ b/homeassistant/components/camera/translations/hu.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "T\u00e9tlen", + "recording": "Felv\u00e9tel", + "streaming": "Streamel\u00e9s" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/hy.json b/homeassistant/components/camera/translations/hy.json new file mode 100644 index 00000000000..48a722755f2 --- /dev/null +++ b/homeassistant/components/camera/translations/hy.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u057a\u0561\u0580\u0561\u057a", + "recording": "\u0541\u0561\u0575\u0576\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568", + "streaming": "\u0540\u0578\u057d\u0584" + } + }, + "title": "\u054f\u0565\u057d\u0561\u056d\u0581\u056b\u056f" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/id.json b/homeassistant/components/camera/translations/id.json new file mode 100644 index 00000000000..7256dc88e5a --- /dev/null +++ b/homeassistant/components/camera/translations/id.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Siaga", + "recording": "Merekam", + "streaming": "Streaming" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/is.json b/homeassistant/components/camera/translations/is.json new file mode 100644 index 00000000000..03c03bd5604 --- /dev/null +++ b/homeassistant/components/camera/translations/is.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "A\u00f0ger\u00f0alaus", + "recording": "\u00cd uppt\u00f6ku", + "streaming": "Streymi" + } + }, + "title": "Myndav\u00e9l" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/it.json b/homeassistant/components/camera/translations/it.json new file mode 100644 index 00000000000..79fe9916de3 --- /dev/null +++ b/homeassistant/components/camera/translations/it.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inattiva", + "recording": "In registrazione", + "streaming": "Streaming" + } + }, + "title": "Telecamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ja.json b/homeassistant/components/camera/translations/ja.json new file mode 100644 index 00000000000..4ab2b8ed3b6 --- /dev/null +++ b/homeassistant/components/camera/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "idle": "\u30a2\u30a4\u30c9\u30eb" + } + }, + "title": "\u30ab\u30e1\u30e9" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ko.json b/homeassistant/components/camera/translations/ko.json new file mode 100644 index 00000000000..8c054ff862c --- /dev/null +++ b/homeassistant/components/camera/translations/ko.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\ub300\uae30\uc911", + "recording": "\ub179\ud654\uc911", + "streaming": "\uc2a4\ud2b8\ub9ac\ubc0d" + } + }, + "title": "\uce74\uba54\ub77c" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/lb.json b/homeassistant/components/camera/translations/lb.json new file mode 100644 index 00000000000..aba896b00c3 --- /dev/null +++ b/homeassistant/components/camera/translations/lb.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Roueg", + "recording": "H\u00eblt Op", + "streaming": "Streamt" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/lt.json b/homeassistant/components/camera/translations/lt.json new file mode 100644 index 00000000000..24091a05733 --- /dev/null +++ b/homeassistant/components/camera/translations/lt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "idle": "Laukimo re\u017eimas", + "recording": "\u012era\u0161ymas", + "streaming": "Transliuojama" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/lv.json b/homeassistant/components/camera/translations/lv.json new file mode 100644 index 00000000000..b4cede92841 --- /dev/null +++ b/homeassistant/components/camera/translations/lv.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "D\u012bkst\u0101ve", + "recording": "Ieraksta", + "streaming": "Straum\u0113" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/nb.json b/homeassistant/components/camera/translations/nb.json new file mode 100644 index 00000000000..f7f505e9d1c --- /dev/null +++ b/homeassistant/components/camera/translations/nb.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inaktiv", + "recording": "Opptak", + "streaming": "Str\u00f8mmer" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/nl.json b/homeassistant/components/camera/translations/nl.json new file mode 100644 index 00000000000..976d8e651fb --- /dev/null +++ b/homeassistant/components/camera/translations/nl.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inactief", + "recording": "Opnemen", + "streaming": "Streamen" + } + }, + "title": "Camera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/nn.json b/homeassistant/components/camera/translations/nn.json new file mode 100644 index 00000000000..39df070558b --- /dev/null +++ b/homeassistant/components/camera/translations/nn.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inaktiv", + "recording": "Opptak", + "streaming": "Str\u00f8ymer" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/no.json b/homeassistant/components/camera/translations/no.json new file mode 100644 index 00000000000..6c2dc281761 --- /dev/null +++ b/homeassistant/components/camera/translations/no.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "recording": "Opptak", + "streaming": "Str\u00f8mming" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/pl.json b/homeassistant/components/camera/translations/pl.json new file mode 100644 index 00000000000..e7922e118df --- /dev/null +++ b/homeassistant/components/camera/translations/pl.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "nieaktywna", + "recording": "nagrywanie", + "streaming": "strumieniowanie" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/pt-BR.json b/homeassistant/components/camera/translations/pt-BR.json new file mode 100644 index 00000000000..7534267a875 --- /dev/null +++ b/homeassistant/components/camera/translations/pt-BR.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Ocioso", + "recording": "Gravando", + "streaming": "Transmitindo" + } + }, + "title": "C\u00e2mera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/pt.json b/homeassistant/components/camera/translations/pt.json new file mode 100644 index 00000000000..91d38a22158 --- /dev/null +++ b/homeassistant/components/camera/translations/pt.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Em espera", + "recording": "A gravar", + "streaming": "A enviar" + } + }, + "title": "C\u00e2mara" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ro.json b/homeassistant/components/camera/translations/ro.json new file mode 100644 index 00000000000..32fd0582d60 --- /dev/null +++ b/homeassistant/components/camera/translations/ro.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inactiv", + "recording": "\u00cenregistrare", + "streaming": "Streaming" + } + }, + "title": "Camera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ru.json b/homeassistant/components/camera/translations/ru.json new file mode 100644 index 00000000000..5334d49d2ff --- /dev/null +++ b/homeassistant/components/camera/translations/ru.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u0411\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", + "recording": "\u0417\u0430\u043f\u0438\u0441\u044c", + "streaming": "\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f" + } + }, + "title": "\u041a\u0430\u043c\u0435\u0440\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/sk.json b/homeassistant/components/camera/translations/sk.json new file mode 100644 index 00000000000..496ac7e451e --- /dev/null +++ b/homeassistant/components/camera/translations/sk.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Ne\u010dinn\u00e1", + "recording": "Z\u00e1znam", + "streaming": "Streamovanie" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/sl.json b/homeassistant/components/camera/translations/sl.json new file mode 100644 index 00000000000..969a4d46562 --- /dev/null +++ b/homeassistant/components/camera/translations/sl.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "V pripravljenosti", + "recording": "Snemanje", + "streaming": "Pretakanje" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/sv.json b/homeassistant/components/camera/translations/sv.json new file mode 100644 index 00000000000..7c3d0343086 --- /dev/null +++ b/homeassistant/components/camera/translations/sv.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Inaktiv", + "recording": "Spelar in", + "streaming": "Str\u00f6mmar" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/ta.json b/homeassistant/components/camera/translations/ta.json new file mode 100644 index 00000000000..abf73c2c210 --- /dev/null +++ b/homeassistant/components/camera/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "idle": "\u0baa\u0ba3\u0bbf\u0baf\u0bbf\u0ba9\u0bcd\u0bb1\u0bbf", + "recording": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc1", + "streaming": "\u0bb8\u0bcd\u0b9f\u0bcd\u0bb0\u0bc0\u0bae\u0bbf\u0b99\u0bcd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/te.json b/homeassistant/components/camera/translations/te.json new file mode 100644 index 00000000000..e9c13f2fe36 --- /dev/null +++ b/homeassistant/components/camera/translations/te.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u0c10\u0c21\u0c3f\u0c32\u0c4d", + "recording": "\u0c30\u0c3f\u0c15\u0c3e\u0c30\u0c4d\u0c21\u0c3f\u0c02\u0c17\u0c4d", + "streaming": "\u0c2a\u0c4d\u0c30\u0c38\u0c3e\u0c30\u0c02" + } + }, + "title": "\u0c15\u0c46\u0c2e\u0c47\u0c30\u0c3e" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/th.json b/homeassistant/components/camera/translations/th.json new file mode 100644 index 00000000000..ac9b819a3b1 --- /dev/null +++ b/homeassistant/components/camera/translations/th.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "recording": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01", + "streaming": "\u0e2a\u0e15\u0e23\u0e35\u0e21\u0e21\u0e34\u0e48\u0e07" + } + }, + "title": "\u0e01\u0e25\u0e49\u0e2d\u0e07" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/tr.json b/homeassistant/components/camera/translations/tr.json new file mode 100644 index 00000000000..313eaeb887b --- /dev/null +++ b/homeassistant/components/camera/translations/tr.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Bo\u015fta", + "recording": "Kaydediliyor", + "streaming": "Yay\u0131n ak\u0131\u015f\u0131" + } + }, + "title": "Kamera" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/uk.json b/homeassistant/components/camera/translations/uk.json new file mode 100644 index 00000000000..2f31b0e0171 --- /dev/null +++ b/homeassistant/components/camera/translations/uk.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f", + "recording": "\u0417\u0430\u043f\u0438\u0441", + "streaming": "\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0456\u044f" + } + }, + "title": "\u041a\u0430\u043c\u0435\u0440\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/vi.json b/homeassistant/components/camera/translations/vi.json new file mode 100644 index 00000000000..69985269477 --- /dev/null +++ b/homeassistant/components/camera/translations/vi.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng", + "recording": "Ghi \u00e2m", + "streaming": "Ph\u00e1t tr\u1ef1c tuy\u1ebfn" + } + }, + "title": "M\u00e1y \u1ea3nh" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/zh-Hans.json b/homeassistant/components/camera/translations/zh-Hans.json new file mode 100644 index 00000000000..e50c157515b --- /dev/null +++ b/homeassistant/components/camera/translations/zh-Hans.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u5f85\u673a", + "recording": "\u5f55\u5236\u4e2d", + "streaming": "\u76d1\u63a7\u4e2d" + } + }, + "title": "\u6444\u50cf\u5934" +} \ No newline at end of file diff --git a/homeassistant/components/camera/translations/zh-Hant.json b/homeassistant/components/camera/translations/zh-Hant.json new file mode 100644 index 00000000000..580728a7bf5 --- /dev/null +++ b/homeassistant/components/camera/translations/zh-Hant.json @@ -0,0 +1,10 @@ +{ + "state": { + "_": { + "idle": "\u5f85\u547d", + "recording": "\u9304\u5f71\u4e2d", + "streaming": "\u76e3\u63a7\u4e2d" + } + }, + "title": "\u651d\u5f71\u6a5f" +} \ No newline at end of file diff --git a/homeassistant/components/canary/__init__.py b/homeassistant/components/canary/__init__.py index a8a45f5b946..d6effc7eb80 100644 --- a/homeassistant/components/canary/__init__.py +++ b/homeassistant/components/canary/__init__.py @@ -40,18 +40,16 @@ CANARY_COMPONENTS = ["alarm_control_panel", "camera", "sensor"] def setup(hass, config): """Set up the Canary component.""" conf = config[DOMAIN] - username = conf.get(CONF_USERNAME) - password = conf.get(CONF_PASSWORD) - timeout = conf.get(CONF_TIMEOUT) + username = conf[CONF_USERNAME] + password = conf[CONF_PASSWORD] + timeout = conf[CONF_TIMEOUT] try: hass.data[DATA_CANARY] = CanaryData(username, password, timeout) except (ConnectTimeout, HTTPError) as ex: _LOGGER.error("Unable to connect to Canary service: %s", str(ex)) hass.components.persistent_notification.create( - "Error: {}
" - "You will need to restart hass after fixing." - "".format(ex), + f"Error: {ex}
You will need to restart hass after fixing.", title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, ) diff --git a/homeassistant/components/canary/camera.py b/homeassistant/components/canary/camera.py index 7ed1e62ab8a..1631038f81a 100644 --- a/homeassistant/components/canary/camera.py +++ b/homeassistant/components/canary/camera.py @@ -42,7 +42,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): location, device, DEFAULT_TIMEOUT, - config.get(CONF_FFMPEG_ARGUMENTS), + config[CONF_FFMPEG_ARGUMENTS], ) ) diff --git a/homeassistant/components/canary/sensor.py b/homeassistant/components/canary/sensor.py index 88b42d296ed..0be5171af48 100644 --- a/homeassistant/components/canary/sensor.py +++ b/homeassistant/components/canary/sensor.py @@ -76,7 +76,7 @@ class CanarySensor(Entity): @property def unique_id(self): """Return the unique ID of this sensor.""" - return "{}_{}".format(self._device_id, self._sensor_type[0]) + return f"{self._device_id}_{self._sensor_type[0]}" @property def unit_of_measurement(self): diff --git a/homeassistant/components/cast/.translations/bg.json b/homeassistant/components/cast/.translations/bg.json deleted file mode 100644 index c56bf118dc1..00000000000 --- a/homeassistant/components/cast/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 Google Cast \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", - "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Google Cast." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/ca.json b/homeassistant/components/cast/.translations/ca.json deleted file mode 100644 index 26236397dec..00000000000 --- a/homeassistant/components/cast/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'han trobat dispositius de Google Cast a la xarxa.", - "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de Google Cast." - }, - "step": { - "confirm": { - "description": "Vols configurar Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/cs.json b/homeassistant/components/cast/.translations/cs.json deleted file mode 100644 index 82f063b365f..00000000000 --- a/homeassistant/components/cast/.translations/cs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V s\u00edti nebyly nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed Google Cast.", - "single_instance_allowed": "Pouze jedin\u00e1 konfigurace Google Cast je nezbytn\u00e1." - }, - "step": { - "confirm": { - "description": "Chcete nastavit Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/da.json b/homeassistant/components/cast/.translations/da.json deleted file mode 100644 index 5d8ab236237..00000000000 --- a/homeassistant/components/cast/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen Google Cast enheder kunne findes p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Google Cast" - }, - "step": { - "confirm": { - "description": "Vil du ops\u00e6tte Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/de.json b/homeassistant/components/cast/.translations/de.json deleted file mode 100644 index ac1ebbeb236..00000000000 --- a/homeassistant/components/cast/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keine Google Cast Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Nur eine einzige Konfiguration von Google Cast ist notwendig." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du Google Cast einrichten?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/en.json b/homeassistant/components/cast/.translations/en.json deleted file mode 100644 index f908f41e328..00000000000 --- a/homeassistant/components/cast/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No Google Cast devices found on the network.", - "single_instance_allowed": "Only a single configuration of Google Cast is necessary." - }, - "step": { - "confirm": { - "description": "Do you want to set up Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/es-419.json b/homeassistant/components/cast/.translations/es-419.json deleted file mode 100644 index 2f8d4982afd..00000000000 --- a/homeassistant/components/cast/.translations/es-419.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos Google Cast en la red.", - "single_instance_allowed": "S\u00f3lo es necesaria una \u00fanica configuraci\u00f3n de Google Cast." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/es.json b/homeassistant/components/cast/.translations/es.json deleted file mode 100644 index 6dc41196af5..00000000000 --- a/homeassistant/components/cast/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos de Google Cast en la red.", - "single_instance_allowed": "S\u00f3lo es necesaria una \u00fanica configuraci\u00f3n de Google Cast." - }, - "step": { - "confirm": { - "description": "\u00bfQuieres configurar Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/et.json b/homeassistant/components/cast/.translations/et.json deleted file mode 100644 index 987c54955f2..00000000000 --- a/homeassistant/components/cast/.translations/et.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/fr.json b/homeassistant/components/cast/.translations/fr.json deleted file mode 100644 index 99feeb3c898..00000000000 --- a/homeassistant/components/cast/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun appareil Google Cast trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration de Google Cast est n\u00e9cessaire." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/he.json b/homeassistant/components/cast/.translations/he.json deleted file mode 100644 index 40d2514b59c..00000000000 --- a/homeassistant/components/cast/.translations/he.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05db\u05e9\u05d9\u05e8\u05d9 Google Cast \u05d1\u05e8\u05e9\u05ea.", - "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Google Cast \u05e0\u05d7\u05d5\u05e6\u05d4." - }, - "step": { - "confirm": { - "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/hr.json b/homeassistant/components/cast/.translations/hr.json deleted file mode 100644 index 91dafab0201..00000000000 --- a/homeassistant/components/cast/.translations/hr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/hu.json b/homeassistant/components/cast/.translations/hu.json deleted file mode 100644 index 66dc4ea8dd8..00000000000 --- a/homeassistant/components/cast/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nem tal\u00e1lhat\u00f3k Google Cast eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", - "single_instance_allowed": "Csak egyetlen Google Cast konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "confirm": { - "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a Google Cast szolg\u00e1ltat\u00e1st?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/id.json b/homeassistant/components/cast/.translations/id.json deleted file mode 100644 index 86fb32c0844..00000000000 --- a/homeassistant/components/cast/.translations/id.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Tidak ada perangkat Google Cast yang ditemukan pada jaringan.", - "single_instance_allowed": "Hanya satu konfigurasi Google Cast yang diperlukan." - }, - "step": { - "confirm": { - "description": "Apakah Anda ingin menyiapkan Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/it.json b/homeassistant/components/cast/.translations/it.json deleted file mode 100644 index 21c8e60518e..00000000000 --- a/homeassistant/components/cast/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nessun dispositivo Google Cast trovato in rete.", - "single_instance_allowed": "\u00c8 necessaria una sola configurazione di Google Cast." - }, - "step": { - "confirm": { - "description": "Vuoi configurare Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/ja.json b/homeassistant/components/cast/.translations/ja.json deleted file mode 100644 index 25b9c10b2e7..00000000000 --- a/homeassistant/components/cast/.translations/ja.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4e0a\u306bGoogle Cast\u30c7\u30d0\u30a4\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002" - }, - "step": { - "confirm": { - "description": "Google Cast\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u304b\uff1f", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/ko.json b/homeassistant/components/cast/.translations/ko.json deleted file mode 100644 index f0eebf4b7b9..00000000000 --- a/homeassistant/components/cast/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "Google \uce90\uc2a4\ud2b8\ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Google \uce90\uc2a4\ud2b8" - } - }, - "title": "Google \uce90\uc2a4\ud2b8" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/lb.json b/homeassistant/components/cast/.translations/lb.json deleted file mode 100644 index f1daff83069..00000000000 --- a/homeassistant/components/cast/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng Google Cast Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Google Cast ass n\u00e9ideg." - }, - "step": { - "confirm": { - "description": "Soll Google Cast konfigur\u00e9iert ginn?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/nl.json b/homeassistant/components/cast/.translations/nl.json deleted file mode 100644 index 91c428770f5..00000000000 --- a/homeassistant/components/cast/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen Google Cast-apparaten gevonden op het netwerk.", - "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van Google Cast nodig." - }, - "step": { - "confirm": { - "description": "Wilt u Google Cast instellen?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/nn.json b/homeassistant/components/cast/.translations/nn.json deleted file mode 100644 index 7f550155658..00000000000 --- a/homeassistant/components/cast/.translations/nn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Klar", - "single_instance_allowed": "Du treng berre \u00e5 sette opp \u00e9in Google Cast-konfigurasjon." - }, - "step": { - "confirm": { - "description": "Vil du sette opp Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/no.json b/homeassistant/components/cast/.translations/no.json deleted file mode 100644 index 6c733896d27..00000000000 --- a/homeassistant/components/cast/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen Google Cast enheter funnet p\u00e5 nettverket.", - "single_instance_allowed": "Kun en konfigurasjon av Google Cast er n\u00f8dvendig." - }, - "step": { - "confirm": { - "description": "\u00d8nsker du \u00e5 sette opp Google Cast?", - "title": "" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/pl.json b/homeassistant/components/cast/.translations/pl.json deleted file mode 100644 index c4399f95def..00000000000 --- a/homeassistant/components/cast/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Google Cast.", - "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja Google Cast." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/pt-BR.json b/homeassistant/components/cast/.translations/pt-BR.json deleted file mode 100644 index e26a829480c..00000000000 --- a/homeassistant/components/cast/.translations/pt-BR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo Google Cast encontrado na rede.", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Google Cast \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar o Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/pt.json b/homeassistant/components/cast/.translations/pt.json deleted file mode 100644 index 85d1b14484d..00000000000 --- a/homeassistant/components/cast/.translations/pt.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo Google Cast descoberto na rede.", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Google Cast \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar o Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/ro.json b/homeassistant/components/cast/.translations/ro.json deleted file mode 100644 index 8a1d19c0ecf..00000000000 --- a/homeassistant/components/cast/.translations/ro.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nu s-au g\u0103sit dispozitive Google Cast \u00een re\u021bea.", - "single_instance_allowed": "Este necesar\u0103 o singur\u0103 configura\u021bie a serviciului Google Cast." - }, - "step": { - "confirm": { - "description": "Dori\u021bi s\u0103 configura\u021bi Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/ru.json b/homeassistant/components/cast/.translations/ru.json deleted file mode 100644 index da03eae701d..00000000000 --- a/homeassistant/components/cast/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Google Cast \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/sl.json b/homeassistant/components/cast/.translations/sl.json deleted file mode 100644 index 24a7215574d..00000000000 --- a/homeassistant/components/cast/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V omre\u017eju niso najdene naprave Google Cast.", - "single_instance_allowed": "Potrebna je samo ena konfiguracija Google Cast-a." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/sv.json b/homeassistant/components/cast/.translations/sv.json deleted file mode 100644 index aea55058d10..00000000000 --- a/homeassistant/components/cast/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga Google Cast-enheter hittades i n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration av Google Cast \u00e4r n\u00f6dv\u00e4ndig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera Google Cast?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/th.json b/homeassistant/components/cast/.translations/th.json deleted file mode 100644 index 372a9cf0760..00000000000 --- a/homeassistant/components/cast/.translations/th.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c Google Cast \u0e1a\u0e19\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22" - }, - "step": { - "confirm": { - "description": "\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 Google Cast \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/vi.json b/homeassistant/components/cast/.translations/vi.json deleted file mode 100644 index 2f2982293cf..00000000000 --- a/homeassistant/components/cast/.translations/vi.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Kh\u00f4ng t\u00ecm th\u1ea5y thi\u1ebft b\u1ecb Google Cast n\u00e0o tr\u00ean m\u1ea1ng.", - "single_instance_allowed": "Ch\u1ec9 c\u1ea7n m\u1ed9t c\u1ea5u h\u00ecnh duy nh\u1ea5t c\u1ee7a Google Cast l\u00e0 \u0111\u1ee7." - }, - "step": { - "confirm": { - "description": "B\u1ea1n c\u00f3 mu\u1ed1n thi\u1ebft l\u1eadp Google Cast kh\u00f4ng?", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/zh-Hans.json b/homeassistant/components/cast/.translations/zh-Hans.json deleted file mode 100644 index d4f1cf4c1a5..00000000000 --- a/homeassistant/components/cast/.translations/zh-Hans.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 Google Cast \u8bbe\u5907\u3002", - "single_instance_allowed": "Google Cast \u53ea\u9700\u8981\u914d\u7f6e\u4e00\u6b21\u3002" - }, - "step": { - "confirm": { - "description": "\u60a8\u60f3\u8981\u914d\u7f6e Google Cast \u5417\uff1f", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/zh-Hant.json b/homeassistant/components/cast/.translations/zh-Hant.json deleted file mode 100644 index 711ac320397..00000000000 --- a/homeassistant/components/cast/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 Google Cast \u8a2d\u5099\u3002", - "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 Google Cast \u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Google Cast\uff1f", - "title": "Google Cast" - } - }, - "title": "Google Cast" - } -} \ No newline at end of file diff --git a/homeassistant/components/cast/discovery.py b/homeassistant/components/cast/discovery.py index 54f165889af..9f90b074c3d 100644 --- a/homeassistant/components/cast/discovery.py +++ b/homeassistant/components/cast/discovery.py @@ -25,14 +25,13 @@ def discover_chromecast(hass: HomeAssistant, info: ChromecastInfo): _LOGGER.debug("Discovered previous chromecast %s", info) # Either discovered completely new chromecast or a "moved" one. - info = info.fill_out_missing_chromecast_info() _LOGGER.debug("Discovered chromecast %s", info) if info.uuid is not None: # Remove previous cast infos with same uuid from known chromecasts. - same_uuid = set( + same_uuid = { x for x in hass.data[KNOWN_CHROMECAST_INFO_KEY] if info.uuid == x.uuid - ) + } hass.data[KNOWN_CHROMECAST_INFO_KEY] -= same_uuid hass.data[KNOWN_CHROMECAST_INFO_KEY].add(info) diff --git a/homeassistant/components/cast/helpers.py b/homeassistant/components/cast/helpers.py index e82f6c9e4ed..5a99d30f087 100644 --- a/homeassistant/components/cast/helpers.py +++ b/homeassistant/components/cast/helpers.py @@ -2,7 +2,7 @@ from typing import Optional, Tuple import attr -from pychromecast import dial +from pychromecast.const import CAST_MANUFACTURERS from .const import DEFAULT_PORT @@ -20,100 +20,25 @@ class ChromecastInfo: uuid = attr.ib( type=Optional[str], converter=attr.converters.optional(str), default=None ) # always convert UUID to string if not None - manufacturer = attr.ib(type=str, default="") model_name = attr.ib(type=str, default="") friendly_name = attr.ib(type=Optional[str], default=None) - is_dynamic_group = attr.ib(type=Optional[bool], default=None) @property def is_audio_group(self) -> bool: """Return if this is an audio group.""" return self.port != DEFAULT_PORT - @property - def is_information_complete(self) -> bool: - """Return if all information is filled out.""" - want_dynamic_group = self.is_audio_group - have_dynamic_group = self.is_dynamic_group is not None - have_all_except_dynamic_group = all( - attr.astuple( - self, - filter=attr.filters.exclude( - attr.fields(ChromecastInfo).is_dynamic_group - ), - ) - ) - return have_all_except_dynamic_group and ( - not want_dynamic_group or have_dynamic_group - ) - @property def host_port(self) -> Tuple[str, int]: """Return the host+port tuple.""" return self.host, self.port - def fill_out_missing_chromecast_info(self) -> "ChromecastInfo": - """Return a new ChromecastInfo object with missing attributes filled in. - - Uses blocking HTTP. - """ - if self.is_information_complete: - # We have all information, no need to check HTTP API. Or this is an - # audio group, so checking via HTTP won't give us any new information. - return self - - # Fill out missing information via HTTP dial. - if self.is_audio_group: - is_dynamic_group = False - http_group_status = None - dynamic_groups = [] - if self.uuid: - http_group_status = dial.get_multizone_status( - self.host, - services=[self.service], - zconf=ChromeCastZeroconf.get_zeroconf(), - ) - if http_group_status is not None: - dynamic_groups = [ - str(g.uuid) for g in http_group_status.dynamic_groups - ] - is_dynamic_group = self.uuid in dynamic_groups - - return ChromecastInfo( - service=self.service, - host=self.host, - port=self.port, - uuid=self.uuid, - friendly_name=self.friendly_name, - manufacturer=self.manufacturer, - model_name=self.model_name, - is_dynamic_group=is_dynamic_group, - ) - - http_device_status = dial.get_device_status( - self.host, services=[self.service], zconf=ChromeCastZeroconf.get_zeroconf() - ) - if http_device_status is None: - # HTTP dial didn't give us any new information. - return self - - return ChromecastInfo( - service=self.service, - host=self.host, - port=self.port, - uuid=(self.uuid or http_device_status.uuid), - friendly_name=(self.friendly_name or http_device_status.friendly_name), - manufacturer=(self.manufacturer or http_device_status.manufacturer), - model_name=(self.model_name or http_device_status.model_name), - ) - - def same_dynamic_group(self, other: "ChromecastInfo") -> bool: - """Test chromecast info is same dynamic group.""" - return ( - self.is_audio_group - and other.is_dynamic_group - and self.friendly_name == other.friendly_name - ) + @property + def manufacturer(self) -> str: + """Return the manufacturer.""" + if not self.model_name: + return None + return CAST_MANUFACTURERS.get(self.model_name.lower(), "Google Inc.") class ChromeCastZeroconf: @@ -173,7 +98,6 @@ class CastStatusListener: @staticmethod def added_to_multizone(group_uuid): """Handle the cast added to a group.""" - pass def removed_from_multizone(self, group_uuid): """Handle the cast removed from a group.""" @@ -182,7 +106,6 @@ class CastStatusListener: def multizone_new_cast_status(self, group_uuid, cast_status): """Handle reception of a new CastStatus for a group.""" - pass def multizone_new_media_status(self, group_uuid, media_status): """Handle reception of a new MediaStatus for a group.""" @@ -200,46 +123,3 @@ class CastStatusListener: else: self._mz_mgr.deregister_listener(self._uuid, self) self._valid = False - - -class DynamicGroupCastStatusListener: - """Helper class to handle pychromecast status callbacks. - - Necessary because a CastDevice entity can create a new socket client - and therefore callbacks from multiple chromecast connections can - potentially arrive. This class allows invalidating past chromecast objects. - """ - - def __init__(self, cast_device, chromecast, mz_mgr): - """Initialize the status listener.""" - self._cast_device = cast_device - self._uuid = chromecast.uuid - self._valid = True - self._mz_mgr = mz_mgr - - chromecast.register_status_listener(self) - chromecast.socket_client.media_controller.register_status_listener(self) - chromecast.register_connection_listener(self) - self._mz_mgr.add_multizone(chromecast) - - def new_cast_status(self, cast_status): - """Handle reception of a new CastStatus.""" - pass - - def new_media_status(self, media_status): - """Handle reception of a new MediaStatus.""" - if self._valid: - self._cast_device.new_dynamic_group_media_status(media_status) - - def new_connection_status(self, connection_status): - """Handle reception of a new ConnectionStatus.""" - if self._valid: - self._cast_device.new_dynamic_group_connection_status(connection_status) - - def invalidate(self): - """Invalidate this status listener. - - All following callbacks won't be forwarded. - """ - self._mz_mgr.remove_multizone(self._uuid) - self._valid = False diff --git a/homeassistant/components/cast/manifest.json b/homeassistant/components/cast/manifest.json index be0b64dc0b1..b8ad1fe67cc 100644 --- a/homeassistant/components/cast/manifest.json +++ b/homeassistant/components/cast/manifest.json @@ -3,9 +3,8 @@ "name": "Google Cast", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/cast", - "requirements": ["pychromecast==4.2.0"], - "dependencies": [], + "requirements": ["pychromecast==5.0.0"], "after_dependencies": ["cloud"], "zeroconf": ["_googlecast._tcp.local."], - "codeowners": [] + "codeowners": ["@emontnemery"] } diff --git a/homeassistant/components/cast/media_player.py b/homeassistant/components/cast/media_player.py index e0c48062dfb..c1729850189 100644 --- a/homeassistant/components/cast/media_player.py +++ b/homeassistant/components/cast/media_player.py @@ -55,13 +55,8 @@ from .const import ( SIGNAL_CAST_REMOVED, SIGNAL_HASS_CAST_SHOW_VIEW, ) -from .discovery import discover_chromecast, setup_internal_discovery -from .helpers import ( - CastStatusListener, - ChromecastInfo, - ChromeCastZeroconf, - DynamicGroupCastStatusListener, -) +from .discovery import setup_internal_discovery +from .helpers import CastStatusListener, ChromecastInfo, ChromeCastZeroconf _LOGGER = logging.getLogger(__name__) @@ -96,15 +91,10 @@ def _async_create_cast_device(hass: HomeAssistantType, info: ChromecastInfo): """ _LOGGER.debug("_async_create_cast_device: %s", info) if info.uuid is None: - # Found a cast without UUID, we don't store it because we won't be able - # to update it anyway. - return CastDevice(info) - - # Found a cast with UUID - if info.is_dynamic_group: - # This is a dynamic group, do not add it. + _LOGGER.error("_async_create_cast_device uuid none: %s", info) return None + # Found a cast with UUID added_casts = hass.data[ADDED_CAST_DEVICES_KEY] if info.uuid in added_casts: # Already added this one, the entity will take care of moved hosts @@ -165,7 +155,7 @@ async def _async_setup_platform( def async_cast_discovered(discover: ChromecastInfo) -> None: """Handle discovery of a new chromecast.""" if info is not None and info.host_port != discover.host_port: - # Not our requested cast device. + # Waiting for a specific cast device, this is not it. return cast_device = _async_create_cast_device(hass, discover) @@ -178,20 +168,7 @@ async def _async_setup_platform( for chromecast in list(hass.data[KNOWN_CHROMECAST_INFO_KEY]): async_cast_discovered(chromecast) - if info is None or info.is_audio_group: - # If we were a) explicitly told to enable discovery or - # b) have an audio group cast device, we need internal discovery. - hass.async_add_executor_job(setup_internal_discovery, hass) - else: - info = await hass.async_add_executor_job(info.fill_out_missing_chromecast_info) - if info.friendly_name is None: - _LOGGER.debug( - "Cannot retrieve detail information for chromecast" - " %s, the device may not be online", - info, - ) - - hass.async_add_executor_job(discover_chromecast, hass, info) + hass.async_add_executor_job(setup_internal_discovery, hass) class CastDevice(MediaPlayerDevice): @@ -214,19 +191,11 @@ class CastDevice(MediaPlayerDevice): self.cast_status = None self.media_status = None self.media_status_received = None - self._dynamic_group_cast_info: ChromecastInfo = None - self._dynamic_group_cast: Optional[pychromecast.Chromecast] = None - self.dynamic_group_media_status = None - self.dynamic_group_media_status_received = None self.mz_media_status = {} self.mz_media_status_received = {} self.mz_mgr = None self._available = False - self._dynamic_group_available = False self._status_listener: Optional[CastStatusListener] = None - self._dynamic_group_status_listener: Optional[ - DynamicGroupCastStatusListener - ] = None self._hass_cast_controller: Optional[HomeAssistantController] = None self._add_remove_handler = None @@ -245,20 +214,6 @@ class CastDevice(MediaPlayerDevice): self.hass.async_create_task( async_create_catching_coro(self.async_set_cast_info(self._cast_info)) ) - for info in self.hass.data[KNOWN_CHROMECAST_INFO_KEY]: - if self._cast_info.same_dynamic_group(info): - _LOGGER.debug( - "[%s %s (%s:%s)] Found dynamic group: %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, - info, - ) - self.hass.async_create_task( - async_create_catching_coro(self.async_set_dynamic_group(info)) - ) - break self._cast_view_remove_handler = async_dispatcher_connect( self.hass, SIGNAL_HASS_CAST_SHOW_VIEW, self._handle_signal_show_view @@ -305,45 +260,24 @@ class CastDevice(MediaPlayerDevice): # will automatically be picked up. return - # pylint: disable=protected-access - if self.services is None: - _LOGGER.debug( - "[%s %s (%s:%s)] Connecting to cast device by host %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, - cast_info, - ) - chromecast = await self.hass.async_add_job( - pychromecast._get_chromecast_from_host, - ( - cast_info.host, - cast_info.port, - cast_info.uuid, - cast_info.model_name, - cast_info.friendly_name, - ), - ) - else: - _LOGGER.debug( - "[%s %s (%s:%s)] Connecting to cast device by service %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, + _LOGGER.debug( + "[%s %s (%s:%s)] Connecting to cast device by service %s", + self.entity_id, + self._cast_info.friendly_name, + self._cast_info.host, + self._cast_info.port, + self.services, + ) + chromecast = await self.hass.async_add_executor_job( + pychromecast.get_chromecast_from_service, + ( self.services, - ) - chromecast = await self.hass.async_add_job( - pychromecast._get_chromecast_from_service, - ( - self.services, - ChromeCastZeroconf.get_zeroconf(), - cast_info.uuid, - cast_info.model_name, - cast_info.friendly_name, - ), - ) + ChromeCastZeroconf.get_zeroconf(), + cast_info.uuid, + cast_info.model_name, + cast_info.friendly_name, + ), + ) self._chromecast = chromecast if CAST_MULTIZONE_MANAGER_KEY not in self.hass.data: @@ -356,7 +290,7 @@ class CastDevice(MediaPlayerDevice): self.cast_status = chromecast.status self.media_status = chromecast.media_controller.status self._chromecast.start() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_del_cast_info(self, cast_info): """Remove the service.""" @@ -371,69 +305,6 @@ class CastDevice(MediaPlayerDevice): self.services, ) - async def async_set_dynamic_group(self, cast_info): - """Set the cast information and set up the chromecast object.""" - - _LOGGER.debug( - "[%s %s (%s:%s)] Connecting to dynamic group by host %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, - cast_info, - ) - - await self.async_del_dynamic_group() - self._dynamic_group_cast_info = cast_info - - # pylint: disable=protected-access - chromecast = await self.hass.async_add_executor_job( - pychromecast._get_chromecast_from_host, - ( - cast_info.host, - cast_info.port, - cast_info.uuid, - cast_info.model_name, - cast_info.friendly_name, - ), - ) - - self._dynamic_group_cast = chromecast - - if CAST_MULTIZONE_MANAGER_KEY not in self.hass.data: - self.hass.data[CAST_MULTIZONE_MANAGER_KEY] = MultizoneManager() - - mz_mgr = self.hass.data[CAST_MULTIZONE_MANAGER_KEY] - - self._dynamic_group_status_listener = DynamicGroupCastStatusListener( - self, chromecast, mz_mgr - ) - self._dynamic_group_available = False - self.dynamic_group_media_status = chromecast.media_controller.status - self._dynamic_group_cast.start() - self.async_schedule_update_ha_state() - - async def async_del_dynamic_group(self): - """Remove the dynamic group.""" - cast_info = self._dynamic_group_cast_info - _LOGGER.debug( - "[%s %s (%s:%s)] Remove dynamic group: %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, - cast_info.service if cast_info else None, - ) - - self._dynamic_group_available = False - self._dynamic_group_cast_info = None - if self._dynamic_group_cast is not None: - await self.hass.async_add_executor_job(self._dynamic_group_cast.disconnect) - - self._dynamic_group_invalidate() - - self.async_schedule_update_ha_state() - async def _async_disconnect(self): """Disconnect Chromecast object if it is set.""" if self._chromecast is None: @@ -447,15 +318,13 @@ class CastDevice(MediaPlayerDevice): self._cast_info.port, ) self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() await self.hass.async_add_executor_job(self._chromecast.disconnect) - if self._dynamic_group_cast is not None: - await self.hass.async_add_executor_job(self._dynamic_group_cast.disconnect) self._invalidate() - self.async_schedule_update_ha_state() + self.async_write_ha_state() def _invalidate(self): """Invalidate some attributes.""" @@ -471,15 +340,6 @@ class CastDevice(MediaPlayerDevice): self._status_listener.invalidate() self._status_listener = None - def _dynamic_group_invalidate(self): - """Invalidate some attributes.""" - self._dynamic_group_cast = None - self.dynamic_group_media_status = None - self.dynamic_group_media_status_received = None - if self._dynamic_group_status_listener is not None: - self._dynamic_group_status_listener.invalidate() - self._dynamic_group_status_listener = None - # ========== Callbacks ========== def new_cast_status(self, cast_status): """Handle updates of the cast status.""" @@ -521,51 +381,9 @@ class CastDevice(MediaPlayerDevice): self._cast_info.port, connection_status.status, ) - info = self._cast_info - if info.friendly_name is None and not info.is_audio_group: - # We couldn't find friendly_name when the cast was added, retry - self._cast_info = info.fill_out_missing_chromecast_info() self._available = new_available self.schedule_update_ha_state() - def new_dynamic_group_media_status(self, media_status): - """Handle updates of the media status.""" - self.dynamic_group_media_status = media_status - self.dynamic_group_media_status_received = dt_util.utcnow() - self.schedule_update_ha_state() - - def new_dynamic_group_connection_status(self, connection_status): - """Handle updates of connection status.""" - _LOGGER.debug( - "[%s %s (%s:%s)] Received dynamic group connection status: %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, - connection_status.status, - ) - if connection_status.status == CONNECTION_STATUS_DISCONNECTED: - self._dynamic_group_available = False - self._dynamic_group_invalidate() - self.schedule_update_ha_state() - return - - new_available = connection_status.status == CONNECTION_STATUS_CONNECTED - if new_available != self._dynamic_group_available: - # Connection status callbacks happen often when disconnected. - # Only update state when availability changed to put less pressure - # on state machine. - _LOGGER.debug( - "[%s %s (%s:%s)] Dynamic group availability changed: %s", - self.entity_id, - self._cast_info.friendly_name, - self._cast_info.host, - self._cast_info.port, - connection_status.status, - ) - self._dynamic_group_available = new_available - self.schedule_update_ha_state() - def multizone_new_media_status(self, group_uuid, media_status): """Handle updates of audio group media status.""" _LOGGER.debug( @@ -586,18 +404,11 @@ class CastDevice(MediaPlayerDevice): """ Return media status. - First try from our own cast, then dynamic groups and finally - groups which our cast is a member in. + First try from our own cast, then groups which our cast is a member in. """ media_status = self.media_status media_controller = self._chromecast.media_controller - if ( - media_status is None or media_status.player_state == "UNKNOWN" - ) and self._dynamic_group_cast is not None: - media_status = self.dynamic_group_media_status - media_controller = self._dynamic_group_cast.media_controller - if media_status is None or media_status.player_state == "UNKNOWN": groups = self.mz_media_status for k, val in groups.items(): @@ -665,7 +476,7 @@ class CastDevice(MediaPlayerDevice): def play_media(self, media_type, media_id, **kwargs): """Play media from a URL.""" - # We do not want this to be forwarded to a group / dynamic group + # We do not want this to be forwarded to a group self._chromecast.media_controller.play_media(media_id, media_type) # ========== Properties ========== @@ -698,18 +509,11 @@ class CastDevice(MediaPlayerDevice): """ Return media status. - First try from our own cast, then dynamic groups and finally - groups which our cast is a member in. + First try from our own cast, then groups which our cast is a member in. """ media_status = self.media_status media_status_received = self.media_status_received - if ( - media_status is None or media_status.player_state == "UNKNOWN" - ) and self._dynamic_group_cast is not None: - media_status = self.dynamic_group_media_status - media_status_received = self.dynamic_group_media_status_received - if media_status is None or media_status.player_state == "UNKNOWN": groups = self.mz_media_status for k, val in groups.items(): @@ -900,11 +704,6 @@ class CastDevice(MediaPlayerDevice): # We can't handle empty UUIDs return - if self._cast_info.same_dynamic_group(discover): - _LOGGER.debug("Discovered matching dynamic group: %s", discover) - await self.async_set_dynamic_group(discover) - return - if self._cast_info.uuid != discover.uuid: # Discovered is not our device. return @@ -928,14 +727,6 @@ class CastDevice(MediaPlayerDevice): # We can't handle empty UUIDs return - if ( - self._dynamic_group_cast_info is not None - and self._dynamic_group_cast_info.uuid == discover.uuid - ): - _LOGGER.debug("Removed matching dynamic group: %s", discover) - await self.async_del_dynamic_group() - return - if self._cast_info.uuid != discover.uuid: # Removed is not our device. return diff --git a/homeassistant/components/cast/strings.json b/homeassistant/components/cast/strings.json index eecdecbfdf9..aed62243f31 100644 --- a/homeassistant/components/cast/strings.json +++ b/homeassistant/components/cast/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "Google Cast", "step": { "confirm": { - "title": "Google Cast", "description": "Do you want to set up Google Cast?" } }, diff --git a/homeassistant/components/cast/translations/bg.json b/homeassistant/components/cast/translations/bg.json new file mode 100644 index 00000000000..746278595d0 --- /dev/null +++ b/homeassistant/components/cast/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 Google Cast \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Google Cast." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/ca.json b/homeassistant/components/cast/translations/ca.json new file mode 100644 index 00000000000..0b358293304 --- /dev/null +++ b/homeassistant/components/cast/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'han trobat dispositius de Google Cast a la xarxa.", + "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de Google Cast." + }, + "step": { + "confirm": { + "description": "Vols configurar Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/cs.json b/homeassistant/components/cast/translations/cs.json new file mode 100644 index 00000000000..79694e427ca --- /dev/null +++ b/homeassistant/components/cast/translations/cs.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V s\u00edti nebyly nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed Google Cast.", + "single_instance_allowed": "Pouze jedin\u00e1 konfigurace Google Cast je nezbytn\u00e1." + }, + "step": { + "confirm": { + "description": "Chcete nastavit Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/da.json b/homeassistant/components/cast/translations/da.json new file mode 100644 index 00000000000..3230e215bff --- /dev/null +++ b/homeassistant/components/cast/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen Google Cast enheder kunne findes p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Google Cast" + }, + "step": { + "confirm": { + "description": "Vil du ops\u00e6tte Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/de.json b/homeassistant/components/cast/translations/de.json new file mode 100644 index 00000000000..5a87e714bf6 --- /dev/null +++ b/homeassistant/components/cast/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keine Google Cast Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Nur eine einzige Konfiguration von Google Cast ist notwendig." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du Google Cast einrichten?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/en.json b/homeassistant/components/cast/translations/en.json new file mode 100644 index 00000000000..81ba0457240 --- /dev/null +++ b/homeassistant/components/cast/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No Google Cast devices found on the network.", + "single_instance_allowed": "Only a single configuration of Google Cast is necessary." + }, + "step": { + "confirm": { + "description": "Do you want to set up Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/es-419.json b/homeassistant/components/cast/translations/es-419.json new file mode 100644 index 00000000000..c4374997d8a --- /dev/null +++ b/homeassistant/components/cast/translations/es-419.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos Google Cast en la red.", + "single_instance_allowed": "S\u00f3lo es necesaria una \u00fanica configuraci\u00f3n de Google Cast." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/es.json b/homeassistant/components/cast/translations/es.json new file mode 100644 index 00000000000..3a5f5653237 --- /dev/null +++ b/homeassistant/components/cast/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos de Google Cast en la red.", + "single_instance_allowed": "S\u00f3lo es necesaria una \u00fanica configuraci\u00f3n de Google Cast." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/et.json b/homeassistant/components/cast/translations/et.json new file mode 100644 index 00000000000..0e652624ef6 --- /dev/null +++ b/homeassistant/components/cast/translations/et.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/fr.json b/homeassistant/components/cast/translations/fr.json new file mode 100644 index 00000000000..a4fef5a7c52 --- /dev/null +++ b/homeassistant/components/cast/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun appareil Google Cast trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration de Google Cast est n\u00e9cessaire." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/he.json b/homeassistant/components/cast/translations/he.json new file mode 100644 index 00000000000..019561c2b87 --- /dev/null +++ b/homeassistant/components/cast/translations/he.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05db\u05e9\u05d9\u05e8\u05d9 Google Cast \u05d1\u05e8\u05e9\u05ea.", + "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Google Cast \u05e0\u05d7\u05d5\u05e6\u05d4." + }, + "step": { + "confirm": { + "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/hr.json b/homeassistant/components/cast/translations/hr.json new file mode 100644 index 00000000000..e3f09f8b09c --- /dev/null +++ b/homeassistant/components/cast/translations/hr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/hu.json b/homeassistant/components/cast/translations/hu.json new file mode 100644 index 00000000000..83f0f959c71 --- /dev/null +++ b/homeassistant/components/cast/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nem tal\u00e1lhat\u00f3k Google Cast eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", + "single_instance_allowed": "Csak egyetlen Google Cast konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "confirm": { + "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a Google Cast szolg\u00e1ltat\u00e1st?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/id.json b/homeassistant/components/cast/translations/id.json new file mode 100644 index 00000000000..f4d66facce1 --- /dev/null +++ b/homeassistant/components/cast/translations/id.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Tidak ada perangkat Google Cast yang ditemukan pada jaringan.", + "single_instance_allowed": "Hanya satu konfigurasi Google Cast yang diperlukan." + }, + "step": { + "confirm": { + "description": "Apakah Anda ingin menyiapkan Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/it.json b/homeassistant/components/cast/translations/it.json new file mode 100644 index 00000000000..ba3cdc0645d --- /dev/null +++ b/homeassistant/components/cast/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nessun dispositivo Google Cast trovato in rete.", + "single_instance_allowed": "\u00c8 necessaria una sola configurazione di Google Cast." + }, + "step": { + "confirm": { + "description": "Vuoi configurare Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/ja.json b/homeassistant/components/cast/translations/ja.json new file mode 100644 index 00000000000..f078c7c13e9 --- /dev/null +++ b/homeassistant/components/cast/translations/ja.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4e0a\u306bGoogle Cast\u30c7\u30d0\u30a4\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002" + }, + "step": { + "confirm": { + "description": "Google Cast\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u304b\uff1f", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/ko.json b/homeassistant/components/cast/translations/ko.json new file mode 100644 index 00000000000..1de8e74ec84 --- /dev/null +++ b/homeassistant/components/cast/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "Google \uce90\uc2a4\ud2b8\ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Google \uce90\uc2a4\ud2b8" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/lb.json b/homeassistant/components/cast/translations/lb.json new file mode 100644 index 00000000000..9ea5e36b379 --- /dev/null +++ b/homeassistant/components/cast/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng Google Cast Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Google Cast ass n\u00e9ideg." + }, + "step": { + "confirm": { + "description": "Soll Google Cast konfigur\u00e9iert ginn?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/nl.json b/homeassistant/components/cast/translations/nl.json new file mode 100644 index 00000000000..b22c25f1292 --- /dev/null +++ b/homeassistant/components/cast/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen Google Cast-apparaten gevonden op het netwerk.", + "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van Google Cast nodig." + }, + "step": { + "confirm": { + "description": "Wilt u Google Cast instellen?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/nn.json b/homeassistant/components/cast/translations/nn.json new file mode 100644 index 00000000000..0c7d56d3ad8 --- /dev/null +++ b/homeassistant/components/cast/translations/nn.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Klar", + "single_instance_allowed": "Du treng berre \u00e5 sette opp \u00e9in Google Cast-konfigurasjon." + }, + "step": { + "confirm": { + "description": "Vil du sette opp Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/no.json b/homeassistant/components/cast/translations/no.json new file mode 100644 index 00000000000..de041d89f81 --- /dev/null +++ b/homeassistant/components/cast/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen Google Cast enheter funnet p\u00e5 nettverket.", + "single_instance_allowed": "Kun en konfigurasjon av Google Cast er n\u00f8dvendig." + }, + "step": { + "confirm": { + "description": "\u00d8nsker du \u00e5 sette opp Google Cast?", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/pl.json b/homeassistant/components/cast/translations/pl.json new file mode 100644 index 00000000000..26897da5da3 --- /dev/null +++ b/homeassistant/components/cast/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Google Cast.", + "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja Google Cast." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/pt-BR.json b/homeassistant/components/cast/translations/pt-BR.json new file mode 100644 index 00000000000..25c0adf866f --- /dev/null +++ b/homeassistant/components/cast/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo Google Cast encontrado na rede.", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Google Cast \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar o Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/pt.json b/homeassistant/components/cast/translations/pt.json new file mode 100644 index 00000000000..dcf0391c420 --- /dev/null +++ b/homeassistant/components/cast/translations/pt.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo Google Cast descoberto na rede.", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Google Cast \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar o Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/ro.json b/homeassistant/components/cast/translations/ro.json new file mode 100644 index 00000000000..4dd8c04c381 --- /dev/null +++ b/homeassistant/components/cast/translations/ro.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nu s-au g\u0103sit dispozitive Google Cast \u00een re\u021bea.", + "single_instance_allowed": "Este necesar\u0103 o singur\u0103 configura\u021bie a serviciului Google Cast." + }, + "step": { + "confirm": { + "description": "Dori\u021bi s\u0103 configura\u021bi Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/ru.json b/homeassistant/components/cast/translations/ru.json new file mode 100644 index 00000000000..fae0cd417ff --- /dev/null +++ b/homeassistant/components/cast/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Google Cast \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/sl.json b/homeassistant/components/cast/translations/sl.json new file mode 100644 index 00000000000..eb4e930af86 --- /dev/null +++ b/homeassistant/components/cast/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V omre\u017eju niso najdene naprave Google Cast.", + "single_instance_allowed": "Potrebna je samo ena konfiguracija Google Cast-a." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/sv.json b/homeassistant/components/cast/translations/sv.json new file mode 100644 index 00000000000..937604b1000 --- /dev/null +++ b/homeassistant/components/cast/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga Google Cast-enheter hittades i n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration av Google Cast \u00e4r n\u00f6dv\u00e4ndig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera Google Cast?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/th.json b/homeassistant/components/cast/translations/th.json new file mode 100644 index 00000000000..9806057716a --- /dev/null +++ b/homeassistant/components/cast/translations/th.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c Google Cast \u0e1a\u0e19\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22" + }, + "step": { + "confirm": { + "description": "\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 Google Cast \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/.translations/uk.json b/homeassistant/components/cast/translations/uk.json similarity index 100% rename from homeassistant/components/cast/.translations/uk.json rename to homeassistant/components/cast/translations/uk.json diff --git a/homeassistant/components/cast/translations/vi.json b/homeassistant/components/cast/translations/vi.json new file mode 100644 index 00000000000..7e75cfce4fa --- /dev/null +++ b/homeassistant/components/cast/translations/vi.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Kh\u00f4ng t\u00ecm th\u1ea5y thi\u1ebft b\u1ecb Google Cast n\u00e0o tr\u00ean m\u1ea1ng.", + "single_instance_allowed": "Ch\u1ec9 c\u1ea7n m\u1ed9t c\u1ea5u h\u00ecnh duy nh\u1ea5t c\u1ee7a Google Cast l\u00e0 \u0111\u1ee7." + }, + "step": { + "confirm": { + "description": "B\u1ea1n c\u00f3 mu\u1ed1n thi\u1ebft l\u1eadp Google Cast kh\u00f4ng?", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/zh-Hans.json b/homeassistant/components/cast/translations/zh-Hans.json new file mode 100644 index 00000000000..9f834a98990 --- /dev/null +++ b/homeassistant/components/cast/translations/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 Google Cast \u8bbe\u5907\u3002", + "single_instance_allowed": "Google Cast \u53ea\u9700\u8981\u914d\u7f6e\u4e00\u6b21\u3002" + }, + "step": { + "confirm": { + "description": "\u60a8\u60f3\u8981\u914d\u7f6e Google Cast \u5417\uff1f", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/zh-Hant.json b/homeassistant/components/cast/translations/zh-Hant.json new file mode 100644 index 00000000000..0b7101b5cc8 --- /dev/null +++ b/homeassistant/components/cast/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 Google Cast \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 Google Cast \u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Google Cast\uff1f", + "title": "Google Cast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/bg.json b/homeassistant/components/cert_expiry/.translations/bg.json deleted file mode 100644 index cf89911071b..00000000000 --- a/homeassistant/components/cert_expiry/.translations/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "connection_timeout": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0442\u043e\u0437\u0438 \u0430\u0434\u0440\u0435\u0441", - "resolve_failed": "\u0422\u043e\u0437\u0438 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d" - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441 \u0432 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", - "name": "\u0418\u043c\u0435 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", - "port": "\u041f\u043e\u0440\u0442 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" - }, - "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0437\u0430 \u0442\u0435\u0441\u0442\u0432\u0430\u043d\u0435" - } - }, - "title": "\u0421\u0440\u043e\u043a \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/ca.json b/homeassistant/components/cert_expiry/.translations/ca.json deleted file mode 100644 index dce3519f09f..00000000000 --- a/homeassistant/components/cert_expiry/.translations/ca.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta combinaci\u00f3 d'amfitri\u00f3 i port ja est\u00e0 configurada", - "import_failed": "La importaci\u00f3 des de configuraci\u00f3 ha fallat" - }, - "error": { - "connection_refused": "La connexi\u00f3 s'ha rebutjat en connectar-se a l'amfitri\u00f3", - "connection_timeout": "S'ha acabat el temps d'espera durant la connexi\u00f3 amb l'amfitri\u00f3.", - "resolve_failed": "No s'ha pogut resoldre l'amfitri\u00f3" - }, - "step": { - "user": { - "data": { - "host": "Nom de l'amfitri\u00f3 del certificat", - "name": "Nom del certificat", - "port": "Port del certificat" - }, - "title": "Configuraci\u00f3 del certificat a provar" - } - }, - "title": "Caducitat del certificat" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/da.json b/homeassistant/components/cert_expiry/.translations/da.json deleted file mode 100644 index cf5f42338c3..00000000000 --- a/homeassistant/components/cert_expiry/.translations/da.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "connection_timeout": "Timeout ved tilslutning til denne v\u00e6rt", - "resolve_failed": "V\u00e6rten kunne ikke findes" - }, - "step": { - "user": { - "data": { - "host": "Certifikatets v\u00e6rtsnavn", - "name": "Certifikatets navn", - "port": "Certifikatets port" - }, - "title": "Definer certifikatet, der skal testes" - } - }, - "title": "Certifikatets udl\u00f8bsdato" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/de.json b/homeassistant/components/cert_expiry/.translations/de.json deleted file mode 100644 index 119d172690a..00000000000 --- a/homeassistant/components/cert_expiry/.translations/de.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Diese Kombination aus Host und Port ist bereits konfiguriert.", - "import_failed": "Import aus Konfiguration fehlgeschlagen" - }, - "error": { - "connection_refused": "Verbindung beim Herstellen einer Verbindung zum Host abgelehnt", - "connection_timeout": "Zeit\u00fcberschreitung beim Herstellen einer Verbindung mit diesem Host", - "resolve_failed": "Dieser Host kann nicht aufgel\u00f6st werden" - }, - "step": { - "user": { - "data": { - "host": "Der Hostname des Zertifikats", - "name": "Der Name des Zertifikats", - "port": "Der Port des Zertifikats" - }, - "title": "Definiere das zu testende Zertifikat" - } - }, - "title": "Zertifikatsablauf" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/en.json b/homeassistant/components/cert_expiry/.translations/en.json deleted file mode 100644 index 5aca41f7f78..00000000000 --- a/homeassistant/components/cert_expiry/.translations/en.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This host and port combination is already configured", - "import_failed": "Import from config failed" - }, - "error": { - "connection_refused": "Connection refused when connecting to host", - "connection_timeout": "Timeout when connecting to this host", - "resolve_failed": "This host can not be resolved" - }, - "step": { - "user": { - "data": { - "host": "The hostname of the certificate", - "name": "The name of the certificate", - "port": "The port of the certificate" - }, - "title": "Define the certificate to test" - } - }, - "title": "Certificate Expiry" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/es-419.json b/homeassistant/components/cert_expiry/.translations/es-419.json deleted file mode 100644 index 4e0b1ffca5d..00000000000 --- a/homeassistant/components/cert_expiry/.translations/es-419.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "connection_timeout": "Tiempo de espera al conectarse a este host", - "resolve_failed": "Este host no puede resolverse" - }, - "step": { - "user": { - "data": { - "host": "El nombre de host del certificado", - "name": "El nombre del certificado", - "port": "El puerto del certificado" - }, - "title": "Definir el certificado para probar" - } - }, - "title": "Expiraci\u00f3n del certificado" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/es.json b/homeassistant/components/cert_expiry/.translations/es.json deleted file mode 100644 index 7cc44d7038a..00000000000 --- a/homeassistant/components/cert_expiry/.translations/es.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta combinaci\u00f3n de host y puerto ya est\u00e1 configurada", - "import_failed": "No se pudo importar desde la configuraci\u00f3n" - }, - "error": { - "connection_refused": "Conexi\u00f3n rechazada al conectarse al host", - "connection_timeout": "Tiempo de espera agotado al conectar a este host", - "resolve_failed": "Este host no se puede resolver" - }, - "step": { - "user": { - "data": { - "host": "El nombre de host del certificado", - "name": "El nombre del certificado", - "port": "El puerto del certificado" - }, - "title": "Defina el certificado para probar" - } - }, - "title": "Caducidad del certificado" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/fr.json b/homeassistant/components/cert_expiry/.translations/fr.json deleted file mode 100644 index 18398a2b048..00000000000 --- a/homeassistant/components/cert_expiry/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cette combinaison h\u00f4te et port est d\u00e9j\u00e0 configur\u00e9e", - "import_failed": "\u00c9chec de l'importation \u00e0 partir de la configuration" - }, - "error": { - "connection_refused": "Connexion refus\u00e9e lors de la connexion \u00e0 l'h\u00f4te", - "connection_timeout": "D\u00e9lai d'attente lors de la connexion \u00e0 cet h\u00f4te", - "resolve_failed": "Cet h\u00f4te ne peut pas \u00eatre r\u00e9solu" - }, - "step": { - "user": { - "data": { - "host": "Le nom d'h\u00f4te du certificat", - "name": "Le nom du certificat", - "port": "Le port du certificat" - }, - "title": "D\u00e9finir le certificat \u00e0 tester" - } - }, - "title": "Expiration du certificat" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/it.json b/homeassistant/components/cert_expiry/.translations/it.json deleted file mode 100644 index e88afa7caef..00000000000 --- a/homeassistant/components/cert_expiry/.translations/it.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questa combinazione di host e porta \u00e8 gi\u00e0 configurata", - "import_failed": "Importazione dalla configurazione non riuscita" - }, - "error": { - "connection_refused": "Connessione rifiutata durante la connessione all'host", - "connection_timeout": "Tempo scaduto collegandosi a questo host", - "resolve_failed": "Questo host non pu\u00f2 essere risolto" - }, - "step": { - "user": { - "data": { - "host": "L'hostname del certificato", - "name": "Il nome del certificato", - "port": "La porta del certificato" - }, - "title": "Definire il certificato da testare" - } - }, - "title": "Scadenza certificato" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/ko.json b/homeassistant/components/cert_expiry/.translations/ko.json deleted file mode 100644 index 962f9ebe42c..00000000000 --- a/homeassistant/components/cert_expiry/.translations/ko.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud638\uc2a4\ud2b8\uc640 \ud3ec\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "import_failed": "\uad6c\uc131\uc5d0\uc11c \uac00\uc838\uc624\uae30 \uc2e4\ud328" - }, - "error": { - "connection_refused": "\ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "connection_timeout": "\ud638\uc2a4\ud2b8 \uc5f0\uacb0 \uc2dc\uac04\uc774 \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4", - "resolve_failed": "\ud638\uc2a4\ud2b8\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "host": "\uc778\uc99d\uc11c\uc758 \ud638\uc2a4\ud2b8 \uc774\ub984", - "name": "\uc778\uc99d\uc11c\uc758 \uc774\ub984", - "port": "\uc778\uc99d\uc11c\uc758 \ud3ec\ud2b8" - }, - "title": "\uc778\uc99d\uc11c \uc815\uc758 \ud14c\uc2a4\ud2b8 \ub300\uc0c1" - } - }, - "title": "\uc778\uc99d\uc11c \ub9cc\ub8cc" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/lb.json b/homeassistant/components/cert_expiry/.translations/lb.json deleted file mode 100644 index 55ac013f96a..00000000000 --- a/homeassistant/components/cert_expiry/.translations/lb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebs Kombinatioun vun Host an Port sinn scho konfigur\u00e9iert", - "import_failed": "Import vun der Konfiguratioun feelgeschloen" - }, - "error": { - "connection_refused": "Verbindung refus\u00e9iert beim verbannen mam Host", - "connection_timeout": "Z\u00e4it Iwwerschreidung beim verbannen.", - "resolve_failed": "D\u00ebsen Host kann net opgel\u00e9ist ginn" - }, - "step": { - "user": { - "data": { - "host": "Den Hostnumm vum Zertifikat", - "name": "De Numm vum Zertifikat", - "port": "De Port vum Zertifikat" - }, - "title": "W\u00e9ieen Zertifikat soll getest ginn" - } - }, - "title": "Zertifikat Verfallsdatum" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/nl.json b/homeassistant/components/cert_expiry/.translations/nl.json deleted file mode 100644 index 7c9fbe67565..00000000000 --- a/homeassistant/components/cert_expiry/.translations/nl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "connection_timeout": "Time-out bij verbinding maken met deze host", - "resolve_failed": "Deze host kon niet gevonden worden" - }, - "step": { - "user": { - "data": { - "host": "De hostnaam van het certificaat", - "name": "De naam van het certificaat", - "port": "De poort van het certificaat" - }, - "title": "Het certificaat defini\u00ebren dat moet worden getest" - } - }, - "title": "Vervaldatum certificaat" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/no.json b/homeassistant/components/cert_expiry/.translations/no.json deleted file mode 100644 index a798ead27b6..00000000000 --- a/homeassistant/components/cert_expiry/.translations/no.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne verts- og portkombinasjonen er allerede konfigurert", - "import_failed": "Import fra config mislyktes" - }, - "error": { - "connection_refused": "Tilkoblingen ble nektet da den koblet til verten", - "connection_timeout": "Tidsavbrudd n\u00e5r du kobler til denne verten", - "resolve_failed": "Denne verten kan ikke l\u00f8ses" - }, - "step": { - "user": { - "data": { - "host": "Sertifikatets vertsnavn", - "name": "Sertifikatets navn", - "port": "Sertifikatets port" - }, - "title": "Definer sertifikatet som skal testes" - } - }, - "title": "Sertifikat utl\u00f8p" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/pl.json b/homeassistant/components/cert_expiry/.translations/pl.json deleted file mode 100644 index 510b75658a2..00000000000 --- a/homeassistant/components/cert_expiry/.translations/pl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta kombinacja hosta i portu jest ju\u017c skonfigurowana", - "import_failed": "Import z konfiguracji nie powi\u00f3d\u0142 si\u0119" - }, - "error": { - "connection_refused": "Po\u0142\u0105czenie odrzucone podczas \u0142\u0105czenia z hostem", - "connection_timeout": "Przekroczono limit czasu po\u0142\u0105czenia z hostem.", - "resolve_failed": "Tego hosta nie mo\u017cna rozwi\u0105za\u0107" - }, - "step": { - "user": { - "data": { - "host": "Nazwa hosta certyfikatu", - "name": "Nazwa certyfikatu", - "port": "Port certyfikatu" - }, - "title": "Zdefiniuj certyfikat do przetestowania" - } - }, - "title": "Wa\u017cno\u015b\u0107 certyfikatu" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/pt-BR.json b/homeassistant/components/cert_expiry/.translations/pt-BR.json deleted file mode 100644 index 0c0e272e23b..00000000000 --- a/homeassistant/components/cert_expiry/.translations/pt-BR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "connection_timeout": "Tempo limite ao conectar-se a este host", - "resolve_failed": "Este host n\u00e3o pode ser resolvido" - }, - "step": { - "user": { - "data": { - "host": "O nome do host do certificado", - "name": "O nome do certificado", - "port": "A porta do certificado" - }, - "title": "Defina o certificado para testar" - } - }, - "title": "Expira\u00e7\u00e3o do certificado" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/ru.json b/homeassistant/components/cert_expiry/.translations/ru.json deleted file mode 100644 index 39c78acc4c0..00000000000 --- a/homeassistant/components/cert_expiry/.translations/ru.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u042d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0445\u043e\u0441\u0442\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430.", - "import_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438." - }, - "error": { - "connection_refused": "\u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0445\u043e\u0441\u0442\u0443 \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438.", - "connection_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0445\u043e\u0441\u0442\u0443.", - "resolve_failed": "\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0441\u0442." - }, - "step": { - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "port": "\u041f\u043e\u0440\u0442" - }, - "title": "\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" - } - }, - "title": "\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/sl.json b/homeassistant/components/cert_expiry/.translations/sl.json deleted file mode 100644 index 605eb0b8182..00000000000 --- a/homeassistant/components/cert_expiry/.translations/sl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta kombinacija gostitelja in vrat je \u017ee konfigurirana", - "import_failed": "Uvoz iz konfiguracije ni uspel" - }, - "error": { - "connection_refused": "Povezava zavrnjena, ko ste se povezali z gostiteljem", - "connection_timeout": "\u010casovna omejitev za povezavo s tem gostiteljem je potekla", - "resolve_failed": "Tega gostitelja ni mogo\u010de razre\u0161iti" - }, - "step": { - "user": { - "data": { - "host": "Ime gostitelja potrdila", - "name": "Ime potrdila", - "port": "Vrata potrdila" - }, - "title": "Dolo\u010dite potrdilo za testiranje" - } - }, - "title": "Veljavnost certifikata" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/sv.json b/homeassistant/components/cert_expiry/.translations/sv.json deleted file mode 100644 index 2655bb40f08..00000000000 --- a/homeassistant/components/cert_expiry/.translations/sv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "connection_timeout": "Timeout vid anslutning till den h\u00e4r v\u00e4rden", - "resolve_failed": "Denna v\u00e4rd kan inte resolveras" - }, - "step": { - "user": { - "data": { - "host": "Certifikatets v\u00e4rdnamn", - "name": "Certifikatets namn", - "port": "Certifikatets port" - }, - "title": "Definiera certifikatet som ska testas" - } - }, - "title": "Certifikatets utg\u00e5ng" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/zh-Hant.json b/homeassistant/components/cert_expiry/.translations/zh-Hant.json deleted file mode 100644 index f08e3e277e9..00000000000 --- a/homeassistant/components/cert_expiry/.translations/zh-Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u4e3b\u6a5f\u7aef\u8207\u901a\u8a0a\u57e0\u7d44\u5408\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "import_failed": "\u532f\u5165\u8a2d\u5b9a\u5931\u6557" - }, - "error": { - "connection_refused": "\u9023\u7dda\u81f3\u4e3b\u6a5f\u6642\u906d\u62d2\u7d55", - "connection_timeout": "\u9023\u7dda\u81f3\u4e3b\u6a5f\u7aef\u903e\u6642", - "resolve_failed": "\u4e3b\u6a5f\u7aef\u7121\u6cd5\u89e3\u6790" - }, - "step": { - "user": { - "data": { - "host": "\u8a8d\u8b49\u4e3b\u6a5f\u7aef\u540d\u7a31", - "name": "\u8a8d\u8b49\u540d\u7a31", - "port": "\u8a8d\u8b49\u901a\u8a0a\u57e0" - }, - "title": "\u5b9a\u7fa9\u8a8d\u8b49\u9032\u884c\u6e2c\u8a66" - } - }, - "title": "\u6191\u8b49\u671f\u9650" - } -} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/manifest.json b/homeassistant/components/cert_expiry/manifest.json index dc26006d711..62216290b80 100644 --- a/homeassistant/components/cert_expiry/manifest.json +++ b/homeassistant/components/cert_expiry/manifest.json @@ -2,8 +2,6 @@ "domain": "cert_expiry", "name": "Certificate Expiry", "documentation": "https://www.home-assistant.io/integrations/cert_expiry", - "requirements": [], "config_flow": true, - "dependencies": [], "codeowners": ["@Cereal2nd", "@jjlawren"] } diff --git a/homeassistant/components/cert_expiry/strings.json b/homeassistant/components/cert_expiry/strings.json index 4d4982a19af..f456809147b 100644 --- a/homeassistant/components/cert_expiry/strings.json +++ b/homeassistant/components/cert_expiry/strings.json @@ -1,24 +1,24 @@ { - "config": { - "title": "Certificate Expiry", - "step": { - "user": { - "title": "Define the certificate to test", - "data": { - "name": "The name of the certificate", - "host": "The hostname of the certificate", - "port": "The port of the certificate" - } - } - }, - "error": { - "resolve_failed": "This host can not be resolved", - "connection_timeout": "Timeout when connecting to this host", - "connection_refused": "Connection refused when connecting to host" - }, - "abort": { - "already_configured": "This host and port combination is already configured", - "import_failed": "Import from config failed" + "title": "Certificate Expiry", + "config": { + "step": { + "user": { + "title": "Define the certificate to test", + "data": { + "name": "The name of the certificate", + "host": "The hostname of the certificate", + "port": "The port of the certificate" } + } + }, + "error": { + "resolve_failed": "This host can not be resolved", + "connection_timeout": "Timeout when connecting to this host", + "connection_refused": "Connection refused when connecting to host" + }, + "abort": { + "already_configured": "This host and port combination is already configured", + "import_failed": "Import from config failed" } + } } diff --git a/homeassistant/components/cert_expiry/translations/bg.json b/homeassistant/components/cert_expiry/translations/bg.json new file mode 100644 index 00000000000..7ff68cd7fae --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/bg.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "connection_timeout": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0442\u043e\u0437\u0438 \u0430\u0434\u0440\u0435\u0441", + "resolve_failed": "\u0422\u043e\u0437\u0438 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d" + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441 \u0432 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", + "name": "\u0418\u043c\u0435 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", + "port": "\u041f\u043e\u0440\u0442 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" + }, + "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0437\u0430 \u0442\u0435\u0441\u0442\u0432\u0430\u043d\u0435" + } + } + }, + "title": "\u0421\u0440\u043e\u043a \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/ca.json b/homeassistant/components/cert_expiry/translations/ca.json new file mode 100644 index 00000000000..5b9b095acbc --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/ca.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta combinaci\u00f3 d'amfitri\u00f3 i port ja est\u00e0 configurada", + "import_failed": "La importaci\u00f3 des de configuraci\u00f3 ha fallat" + }, + "error": { + "connection_refused": "La connexi\u00f3 s'ha rebutjat en connectar-se a l'amfitri\u00f3", + "connection_timeout": "S'ha acabat el temps d'espera durant la connexi\u00f3 amb l'amfitri\u00f3.", + "resolve_failed": "No s'ha pogut resoldre l'amfitri\u00f3" + }, + "step": { + "user": { + "data": { + "host": "Nom de l'amfitri\u00f3 del certificat", + "name": "Nom del certificat", + "port": "Port del certificat" + }, + "title": "Configuraci\u00f3 del certificat a provar" + } + } + }, + "title": "Caducitat del certificat" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/cs.json b/homeassistant/components/cert_expiry/translations/cs.json similarity index 100% rename from homeassistant/components/cert_expiry/.translations/cs.json rename to homeassistant/components/cert_expiry/translations/cs.json diff --git a/homeassistant/components/cert_expiry/translations/da.json b/homeassistant/components/cert_expiry/translations/da.json new file mode 100644 index 00000000000..6c94fe09806 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/da.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "connection_timeout": "Timeout ved tilslutning til denne v\u00e6rt", + "resolve_failed": "V\u00e6rten kunne ikke findes" + }, + "step": { + "user": { + "data": { + "host": "Certifikatets v\u00e6rtsnavn", + "name": "Certifikatets navn", + "port": "Certifikatets port" + }, + "title": "Definer certifikatet, der skal testes" + } + } + }, + "title": "Certifikatets udl\u00f8bsdato" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/de.json b/homeassistant/components/cert_expiry/translations/de.json new file mode 100644 index 00000000000..e3733a4fcf1 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/de.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Diese Kombination aus Host und Port ist bereits konfiguriert.", + "import_failed": "Import aus Konfiguration fehlgeschlagen" + }, + "error": { + "connection_refused": "Verbindung beim Herstellen einer Verbindung zum Host abgelehnt", + "connection_timeout": "Zeit\u00fcberschreitung beim Herstellen einer Verbindung mit diesem Host", + "resolve_failed": "Dieser Host kann nicht aufgel\u00f6st werden" + }, + "step": { + "user": { + "data": { + "host": "Der Hostname des Zertifikats", + "name": "Der Name des Zertifikats", + "port": "Der Port des Zertifikats" + }, + "title": "Definiere das zu testende Zertifikat" + } + } + }, + "title": "Zertifikatsablauf" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/en.json b/homeassistant/components/cert_expiry/translations/en.json new file mode 100644 index 00000000000..5844868a6e4 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/en.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "This host and port combination is already configured", + "import_failed": "Import from config failed" + }, + "error": { + "connection_refused": "Connection refused when connecting to host", + "connection_timeout": "Timeout when connecting to this host", + "resolve_failed": "This host can not be resolved" + }, + "step": { + "user": { + "data": { + "host": "The hostname of the certificate", + "name": "The name of the certificate", + "port": "The port of the certificate" + }, + "title": "Define the certificate to test" + } + } + }, + "title": "Certificate Expiry" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/es-419.json b/homeassistant/components/cert_expiry/translations/es-419.json new file mode 100644 index 00000000000..ee5fc92391f --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/es-419.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "connection_timeout": "Tiempo de espera al conectarse a este host", + "resolve_failed": "Este host no puede resolverse" + }, + "step": { + "user": { + "data": { + "host": "El nombre de host del certificado", + "name": "El nombre del certificado", + "port": "El puerto del certificado" + }, + "title": "Definir el certificado para probar" + } + } + }, + "title": "Expiraci\u00f3n del certificado" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/es.json b/homeassistant/components/cert_expiry/translations/es.json new file mode 100644 index 00000000000..d616634fdea --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/es.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Esta combinaci\u00f3n de host y puerto ya est\u00e1 configurada", + "import_failed": "No se pudo importar desde la configuraci\u00f3n" + }, + "error": { + "connection_refused": "Conexi\u00f3n rechazada al conectarse al host", + "connection_timeout": "Tiempo de espera agotado al conectar a este host", + "resolve_failed": "Este host no se puede resolver" + }, + "step": { + "user": { + "data": { + "host": "El nombre de host del certificado", + "name": "El nombre del certificado", + "port": "El puerto del certificado" + }, + "title": "Defina el certificado para probar" + } + } + }, + "title": "Caducidad del certificado" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/fr.json b/homeassistant/components/cert_expiry/translations/fr.json new file mode 100644 index 00000000000..8c3d92edf92 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/fr.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Cette combinaison h\u00f4te et port est d\u00e9j\u00e0 configur\u00e9e", + "import_failed": "\u00c9chec de l'importation \u00e0 partir de la configuration" + }, + "error": { + "connection_refused": "Connexion refus\u00e9e lors de la connexion \u00e0 l'h\u00f4te", + "connection_timeout": "D\u00e9lai d'attente lors de la connexion \u00e0 cet h\u00f4te", + "resolve_failed": "Cet h\u00f4te ne peut pas \u00eatre r\u00e9solu" + }, + "step": { + "user": { + "data": { + "host": "Le nom d'h\u00f4te du certificat", + "name": "Le nom du certificat", + "port": "Le port du certificat" + }, + "title": "D\u00e9finir le certificat \u00e0 tester" + } + } + }, + "title": "Expiration du certificat" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/hu.json b/homeassistant/components/cert_expiry/translations/hu.json similarity index 100% rename from homeassistant/components/cert_expiry/.translations/hu.json rename to homeassistant/components/cert_expiry/translations/hu.json diff --git a/homeassistant/components/cert_expiry/translations/it.json b/homeassistant/components/cert_expiry/translations/it.json new file mode 100644 index 00000000000..c5e56bc95a2 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/it.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Questa combinazione di host e porta \u00e8 gi\u00e0 configurata", + "import_failed": "Importazione dalla configurazione non riuscita" + }, + "error": { + "connection_refused": "Connessione rifiutata durante la connessione all'host", + "connection_timeout": "Tempo scaduto collegandosi a questo host", + "resolve_failed": "Questo host non pu\u00f2 essere risolto" + }, + "step": { + "user": { + "data": { + "host": "L'hostname del certificato", + "name": "Il nome del certificato", + "port": "La porta del certificato" + }, + "title": "Definire il certificato da testare" + } + } + }, + "title": "Scadenza certificato" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/ko.json b/homeassistant/components/cert_expiry/translations/ko.json new file mode 100644 index 00000000000..699ca413604 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\ud638\uc2a4\ud2b8\uc640 \ud3ec\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "import_failed": "\uad6c\uc131\uc5d0\uc11c \uac00\uc838\uc624\uae30 \uc2e4\ud328" + }, + "error": { + "connection_refused": "\ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "connection_timeout": "\ud638\uc2a4\ud2b8 \uc5f0\uacb0 \uc2dc\uac04\uc774 \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4", + "resolve_failed": "\ud638\uc2a4\ud2b8\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "host": "\uc778\uc99d\uc11c\uc758 \ud638\uc2a4\ud2b8 \uc774\ub984", + "name": "\uc778\uc99d\uc11c\uc758 \uc774\ub984", + "port": "\uc778\uc99d\uc11c\uc758 \ud3ec\ud2b8" + }, + "title": "\uc778\uc99d\uc11c \uc815\uc758 \ud14c\uc2a4\ud2b8 \ub300\uc0c1" + } + } + }, + "title": "\uc778\uc99d\uc11c \ub9cc\ub8cc" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/lb.json b/homeassistant/components/cert_expiry/translations/lb.json new file mode 100644 index 00000000000..db6d5c7ccb0 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/lb.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebs Kombinatioun vun Host an Port sinn scho konfigur\u00e9iert", + "import_failed": "Import vun der Konfiguratioun feelgeschloen" + }, + "error": { + "connection_refused": "Verbindung refus\u00e9iert beim verbannen mam Host", + "connection_timeout": "Z\u00e4it Iwwerschreidung beim verbannen.", + "resolve_failed": "D\u00ebsen Host kann net opgel\u00e9ist ginn" + }, + "step": { + "user": { + "data": { + "host": "Den Hostnumm vum Zertifikat", + "name": "De Numm vum Zertifikat", + "port": "De Port vum Zertifikat" + }, + "title": "W\u00e9ieen Zertifikat soll getest ginn" + } + } + }, + "title": "Zertifikat Verfallsdatum" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/nl.json b/homeassistant/components/cert_expiry/translations/nl.json new file mode 100644 index 00000000000..c33d4c06e6f --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/nl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "connection_timeout": "Time-out bij verbinding maken met deze host", + "resolve_failed": "Deze host kon niet gevonden worden" + }, + "step": { + "user": { + "data": { + "host": "De hostnaam van het certificaat", + "name": "De naam van het certificaat", + "port": "De poort van het certificaat" + }, + "title": "Het certificaat defini\u00ebren dat moet worden getest" + } + } + }, + "title": "Vervaldatum certificaat" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/no.json b/homeassistant/components/cert_expiry/translations/no.json new file mode 100644 index 00000000000..341efe2d932 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/no.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Denne verts- og portkombinasjonen er allerede konfigurert", + "import_failed": "Import fra config mislyktes" + }, + "error": { + "connection_refused": "Tilkoblingen ble nektet da den koblet til verten", + "connection_timeout": "Tidsavbrudd n\u00e5r du kobler til denne verten", + "resolve_failed": "Denne verten kan ikke l\u00f8ses" + }, + "step": { + "user": { + "data": { + "host": "Sertifikatets vertsnavn", + "name": "Sertifikatets navn", + "port": "Sertifikatets port" + }, + "title": "Definer sertifikatet som skal testes" + } + } + }, + "title": "Sertifikat utl\u00f8p" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/pl.json b/homeassistant/components/cert_expiry/translations/pl.json new file mode 100644 index 00000000000..f213befed4f --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Ta kombinacja hosta i portu jest ju\u017c skonfigurowana", + "import_failed": "Import z konfiguracji nie powi\u00f3d\u0142 si\u0119" + }, + "error": { + "connection_refused": "Po\u0142\u0105czenie odrzucone podczas \u0142\u0105czenia z hostem", + "connection_timeout": "Przekroczono limit czasu po\u0142\u0105czenia z hostem.", + "resolve_failed": "Tego hosta nie mo\u017cna rozwi\u0105za\u0107" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta certyfikatu", + "name": "Nazwa certyfikatu", + "port": "Port certyfikatu" + }, + "title": "Zdefiniuj certyfikat do przetestowania" + } + } + }, + "title": "Wa\u017cno\u015b\u0107 certyfikatu" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/pt-BR.json b/homeassistant/components/cert_expiry/translations/pt-BR.json new file mode 100644 index 00000000000..6a395059625 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/pt-BR.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "connection_timeout": "Tempo limite ao conectar-se a este host", + "resolve_failed": "Este host n\u00e3o pode ser resolvido" + }, + "step": { + "user": { + "data": { + "host": "O nome do host do certificado", + "name": "O nome do certificado", + "port": "A porta do certificado" + }, + "title": "Defina o certificado para testar" + } + } + }, + "title": "Expira\u00e7\u00e3o do certificado" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/ru.json b/homeassistant/components/cert_expiry/translations/ru.json new file mode 100644 index 00000000000..5219caa057d --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/ru.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u042d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0445\u043e\u0441\u0442\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430.", + "import_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438." + }, + "error": { + "connection_refused": "\u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0445\u043e\u0441\u0442\u0443 \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438.", + "connection_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0445\u043e\u0441\u0442\u0443.", + "resolve_failed": "\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0441\u0442." + }, + "step": { + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "port": "\u041f\u043e\u0440\u0442" + }, + "title": "\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" + } + } + }, + "title": "\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/sl.json b/homeassistant/components/cert_expiry/translations/sl.json new file mode 100644 index 00000000000..1da2a7921f3 --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/sl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Ta kombinacija gostitelja in vrat je \u017ee konfigurirana", + "import_failed": "Uvoz iz konfiguracije ni uspel" + }, + "error": { + "connection_refused": "Povezava zavrnjena, ko ste se povezali z gostiteljem", + "connection_timeout": "\u010casovna omejitev za povezavo s tem gostiteljem je potekla", + "resolve_failed": "Tega gostitelja ni mogo\u010de razre\u0161iti" + }, + "step": { + "user": { + "data": { + "host": "Ime gostitelja potrdila", + "name": "Ime potrdila", + "port": "Vrata potrdila" + }, + "title": "Dolo\u010dite potrdilo za testiranje" + } + } + }, + "title": "Veljavnost certifikata" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/translations/sv.json b/homeassistant/components/cert_expiry/translations/sv.json new file mode 100644 index 00000000000..8449db1ec7a --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/sv.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "connection_timeout": "Timeout vid anslutning till den h\u00e4r v\u00e4rden", + "resolve_failed": "Denna v\u00e4rd kan inte resolveras" + }, + "step": { + "user": { + "data": { + "host": "Certifikatets v\u00e4rdnamn", + "name": "Certifikatets namn", + "port": "Certifikatets port" + }, + "title": "Definiera certifikatet som ska testas" + } + } + }, + "title": "Certifikatets utg\u00e5ng" +} \ No newline at end of file diff --git a/homeassistant/components/cert_expiry/.translations/zh-Hans.json b/homeassistant/components/cert_expiry/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/cert_expiry/.translations/zh-Hans.json rename to homeassistant/components/cert_expiry/translations/zh-Hans.json diff --git a/homeassistant/components/cert_expiry/translations/zh-Hant.json b/homeassistant/components/cert_expiry/translations/zh-Hant.json new file mode 100644 index 00000000000..1968f3d866c --- /dev/null +++ b/homeassistant/components/cert_expiry/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u4e3b\u6a5f\u7aef\u8207\u901a\u8a0a\u57e0\u7d44\u5408\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "import_failed": "\u532f\u5165\u8a2d\u5b9a\u5931\u6557" + }, + "error": { + "connection_refused": "\u9023\u7dda\u81f3\u4e3b\u6a5f\u6642\u906d\u62d2\u7d55", + "connection_timeout": "\u9023\u7dda\u81f3\u4e3b\u6a5f\u7aef\u903e\u6642", + "resolve_failed": "\u4e3b\u6a5f\u7aef\u7121\u6cd5\u89e3\u6790" + }, + "step": { + "user": { + "data": { + "host": "\u8a8d\u8b49\u4e3b\u6a5f\u7aef\u540d\u7a31", + "name": "\u8a8d\u8b49\u540d\u7a31", + "port": "\u8a8d\u8b49\u901a\u8a0a\u57e0" + }, + "title": "\u5b9a\u7fa9\u8a8d\u8b49\u9032\u884c\u6e2c\u8a66" + } + } + }, + "title": "\u6191\u8b49\u671f\u9650" +} \ No newline at end of file diff --git a/homeassistant/components/channels/manifest.json b/homeassistant/components/channels/manifest.json index 3a61d0636bc..45248bf1e7d 100644 --- a/homeassistant/components/channels/manifest.json +++ b/homeassistant/components/channels/manifest.json @@ -3,6 +3,5 @@ "name": "Channels", "documentation": "https://www.home-assistant.io/integrations/channels", "requirements": ["pychannels==1.0.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/channels/media_player.py b/homeassistant/components/channels/media_player.py index e4acc2f907c..fb5f8cb6ac0 100644 --- a/homeassistant/components/channels/media_player.py +++ b/homeassistant/components/channels/media_player.py @@ -70,9 +70,7 @@ CHANNELS_SEEK_BY_SCHEMA = CHANNELS_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Channels platform.""" - device = ChannelsPlayer( - config.get(CONF_NAME), config.get(CONF_HOST), config.get(CONF_PORT) - ) + device = ChannelsPlayer(config[CONF_NAME], config[CONF_HOST], config[CONF_PORT]) if DATA_CHANNELS not in hass.data: hass.data[DATA_CHANNELS] = [] diff --git a/homeassistant/components/channels/services.yaml b/homeassistant/components/channels/services.yaml index cbb1dd201a6..f06b2bfd905 100644 --- a/homeassistant/components/channels/services.yaml +++ b/homeassistant/components/channels/services.yaml @@ -3,21 +3,21 @@ seek_forward: fields: entity_id: description: Name of entity for the instance of Channels to seek in. - example: 'media_player.family_room_channels' + example: "media_player.family_room_channels" seek_backward: description: Seek backward by a set number of seconds. fields: entity_id: description: Name of entity for the instance of Channels to seek in. - example: 'media_player.family_room_channels' + example: "media_player.family_room_channels" seek_by: description: Seek by an inputted number of seconds. fields: entity_id: description: Name of entity for the instance of Channels to seek in. - example: 'media_player.family_room_channels' + example: "media_player.family_room_channels" seconds: description: Number of seconds to seek by. Negative numbers seek backwards. example: 120 diff --git a/homeassistant/components/cisco_ios/device_tracker.py b/homeassistant/components/cisco_ios/device_tracker.py index 5a42ef1c8b8..8bf2b77fa25 100644 --- a/homeassistant/components/cisco_ios/device_tracker.py +++ b/homeassistant/components/cisco_ios/device_tracker.py @@ -42,7 +42,7 @@ class CiscoDeviceScanner(DeviceScanner): self.host = config[CONF_HOST] self.username = config[CONF_USERNAME] self.port = config.get(CONF_PORT) - self.password = config.get(CONF_PASSWORD) + self.password = config[CONF_PASSWORD] self.last_results = {} diff --git a/homeassistant/components/cisco_ios/manifest.json b/homeassistant/components/cisco_ios/manifest.json index 0cdcddb56df..b485cf831b1 100644 --- a/homeassistant/components/cisco_ios/manifest.json +++ b/homeassistant/components/cisco_ios/manifest.json @@ -3,6 +3,5 @@ "name": "Cisco IOS", "documentation": "https://www.home-assistant.io/integrations/cisco_ios", "requirements": ["pexpect==4.6.0"], - "dependencies": [], "codeowners": ["@fbradyirl"] } diff --git a/homeassistant/components/cisco_mobility_express/device_tracker.py b/homeassistant/components/cisco_mobility_express/device_tracker.py index db504e3d19b..b032ca30fc3 100644 --- a/homeassistant/components/cisco_mobility_express/device_tracker.py +++ b/homeassistant/components/cisco_mobility_express/device_tracker.py @@ -43,8 +43,8 @@ def get_scanner(hass, config): config[CONF_HOST], config[CONF_USERNAME], config[CONF_PASSWORD], - config.get(CONF_SSL), - config.get(CONF_VERIFY_SSL), + config[CONF_SSL], + config[CONF_VERIFY_SSL], ) if not controller.is_logged_in(): return None diff --git a/homeassistant/components/cisco_mobility_express/manifest.json b/homeassistant/components/cisco_mobility_express/manifest.json index 4c83116747b..972903e53e6 100644 --- a/homeassistant/components/cisco_mobility_express/manifest.json +++ b/homeassistant/components/cisco_mobility_express/manifest.json @@ -3,6 +3,5 @@ "name": "Cisco Mobility Express", "documentation": "https://www.home-assistant.io/integrations/cisco_mobility_express", "requirements": ["ciscomobilityexpress==0.3.3"], - "dependencies": [], "codeowners": ["@fbradyirl"] } diff --git a/homeassistant/components/cisco_webex_teams/manifest.json b/homeassistant/components/cisco_webex_teams/manifest.json index c9d6d14c109..d10f9641846 100644 --- a/homeassistant/components/cisco_webex_teams/manifest.json +++ b/homeassistant/components/cisco_webex_teams/manifest.json @@ -3,6 +3,5 @@ "name": "Cisco Webex Teams", "documentation": "https://www.home-assistant.io/integrations/cisco_webex_teams", "requirements": ["webexteamssdk==1.1.1"], - "dependencies": [], "codeowners": ["@fbradyirl"] } diff --git a/homeassistant/components/cisco_webex_teams/notify.py b/homeassistant/components/cisco_webex_teams/notify.py index 7be53d1fb6c..271d58fcc8e 100644 --- a/homeassistant/components/cisco_webex_teams/notify.py +++ b/homeassistant/components/cisco_webex_teams/notify.py @@ -48,7 +48,7 @@ class CiscoWebexTeamsNotificationService(BaseNotificationService): title = "" if kwargs.get(ATTR_TITLE) is not None: - title = "{}{}".format(kwargs.get(ATTR_TITLE), "
") + title = f"{kwargs.get(ATTR_TITLE)}
" try: self.client.messages.create(roomId=self.room, html=f"{title}{message}") diff --git a/homeassistant/components/citybikes/manifest.json b/homeassistant/components/citybikes/manifest.json index 488997378ef..1470832e899 100644 --- a/homeassistant/components/citybikes/manifest.json +++ b/homeassistant/components/citybikes/manifest.json @@ -2,7 +2,5 @@ "domain": "citybikes", "name": "CityBikes", "documentation": "https://www.home-assistant.io/integrations/citybikes", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/citybikes/sensor.py b/homeassistant/components/citybikes/sensor.py index 8e0b883b726..799fe6acc70 100644 --- a/homeassistant/components/citybikes/sensor.py +++ b/homeassistant/components/citybikes/sensor.py @@ -125,8 +125,6 @@ STATIONS_RESPONSE_SCHEMA = vol.Schema( class CityBikesRequestError(Exception): """Error to indicate a CityBikes API request has failed.""" - pass - async def async_citybikes_request(hass, uri, schema): """Perform a request to CityBikes API endpoint, and parse the response.""" diff --git a/homeassistant/components/clementine/manifest.json b/homeassistant/components/clementine/manifest.json index dadb28c0392..53ae0cbe533 100644 --- a/homeassistant/components/clementine/manifest.json +++ b/homeassistant/components/clementine/manifest.json @@ -3,6 +3,5 @@ "name": "Clementine Music Player", "documentation": "https://www.home-assistant.io/integrations/clementine", "requirements": ["python-clementine-remote==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/clementine/media_player.py b/homeassistant/components/clementine/media_player.py index 9e05b831359..db4dfc38664 100644 --- a/homeassistant/components/clementine/media_player.py +++ b/homeassistant/components/clementine/media_player.py @@ -58,8 +58,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Clementine platform.""" - host = config.get(CONF_HOST) - port = config.get(CONF_PORT) + host = config[CONF_HOST] + port = config[CONF_PORT] token = config.get(CONF_ACCESS_TOKEN) client = ClementineRemote(host, port, token, reconnect=True) diff --git a/homeassistant/components/clickatell/manifest.json b/homeassistant/components/clickatell/manifest.json index a10da6e1cc0..520fce157cd 100644 --- a/homeassistant/components/clickatell/manifest.json +++ b/homeassistant/components/clickatell/manifest.json @@ -2,7 +2,5 @@ "domain": "clickatell", "name": "Clickatell", "documentation": "https://www.home-assistant.io/integrations/clickatell", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/clickatell/notify.py b/homeassistant/components/clickatell/notify.py index d59a553a4f6..0c1ce2e9585 100644 --- a/homeassistant/components/clickatell/notify.py +++ b/homeassistant/components/clickatell/notify.py @@ -5,7 +5,7 @@ import requests import voluptuous as vol from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService -from homeassistant.const import CONF_API_KEY, CONF_RECIPIENT +from homeassistant.const import CONF_API_KEY, CONF_RECIPIENT, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -29,13 +29,13 @@ class ClickatellNotificationService(BaseNotificationService): def __init__(self, config): """Initialize the service.""" - self.api_key = config.get(CONF_API_KEY) - self.recipient = config.get(CONF_RECIPIENT) + self.api_key = config[CONF_API_KEY] + self.recipient = config[CONF_RECIPIENT] def send_message(self, message="", **kwargs): """Send a message to a user.""" data = {"apiKey": self.api_key, "to": self.recipient, "content": message} resp = requests.get(BASE_API_URL, params=data, timeout=5) - if (resp.status_code != 200) or (resp.status_code != 201): + if (resp.status_code != HTTP_OK) or (resp.status_code != 201): _LOGGER.error("Error %s : %s", resp.status_code, resp.text) diff --git a/homeassistant/components/clicksend/manifest.json b/homeassistant/components/clicksend/manifest.json index 18f048d1efc..ee72e056b30 100644 --- a/homeassistant/components/clicksend/manifest.json +++ b/homeassistant/components/clicksend/manifest.json @@ -2,7 +2,5 @@ "domain": "clicksend", "name": "ClickSend SMS", "documentation": "https://www.home-assistant.io/integrations/clicksend", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/clicksend/notify.py b/homeassistant/components/clicksend/notify.py index 42136e9a09c..18562260431 100644 --- a/homeassistant/components/clicksend/notify.py +++ b/homeassistant/components/clicksend/notify.py @@ -13,6 +13,7 @@ from homeassistant.const import ( CONF_SENDER, CONF_USERNAME, CONTENT_TYPE_JSON, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv @@ -80,7 +81,7 @@ class ClicksendNotificationService(BaseNotificationService): auth=(self.username, self.api_key), timeout=TIMEOUT, ) - if resp.status_code == 200: + if resp.status_code == HTTP_OK: return obj = json.loads(resp.text) @@ -100,6 +101,6 @@ def _authenticate(config): auth=(config[CONF_USERNAME], config[CONF_API_KEY]), timeout=TIMEOUT, ) - if resp.status_code != 200: + if resp.status_code != HTTP_OK: return False return True diff --git a/homeassistant/components/clicksend_tts/manifest.json b/homeassistant/components/clicksend_tts/manifest.json index 75b9ec2619f..f5d3390d005 100644 --- a/homeassistant/components/clicksend_tts/manifest.json +++ b/homeassistant/components/clicksend_tts/manifest.json @@ -2,7 +2,5 @@ "domain": "clicksend_tts", "name": "ClickSend TTS", "documentation": "https://www.home-assistant.io/integrations/clicksend_tts", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/clicksend_tts/notify.py b/homeassistant/components/clicksend_tts/notify.py index 400e72a7d0c..6648333bb54 100644 --- a/homeassistant/components/clicksend_tts/notify.py +++ b/homeassistant/components/clicksend_tts/notify.py @@ -12,6 +12,7 @@ from homeassistant.const import ( CONF_RECIPIENT, CONF_USERNAME, CONTENT_TYPE_JSON, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv @@ -55,11 +56,11 @@ class ClicksendNotificationService(BaseNotificationService): def __init__(self, config): """Initialize the service.""" - self.username = config.get(CONF_USERNAME) - self.api_key = config.get(CONF_API_KEY) - self.recipient = config.get(CONF_RECIPIENT) - self.language = config.get(CONF_LANGUAGE) - self.voice = config.get(CONF_VOICE) + self.username = config[CONF_USERNAME] + self.api_key = config[CONF_API_KEY] + self.recipient = config[CONF_RECIPIENT] + self.language = config[CONF_LANGUAGE] + self.voice = config[CONF_VOICE] self.caller = config.get(CONF_CALLER) if self.caller is None: self.caller = self.recipient @@ -87,7 +88,7 @@ class ClicksendNotificationService(BaseNotificationService): timeout=TIMEOUT, ) - if resp.status_code == 200: + if resp.status_code == HTTP_OK: return obj = json.loads(resp.text) response_msg = obj["response_msg"] @@ -107,7 +108,7 @@ def _authenticate(config): timeout=TIMEOUT, ) - if resp.status_code != 200: + if resp.status_code != HTTP_OK: return False return True diff --git a/homeassistant/components/climate/.translations/bg.json b/homeassistant/components/climate/.translations/bg.json deleted file mode 100644 index ac1b05b096a..00000000000 --- a/homeassistant/components/climate/.translations/bg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "\u041f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u041e\u0412\u041a \u043d\u0430 {entity_name}", - "set_preset_mode": "\u041f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0437\u0430\u0434\u0430\u0434\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043d\u0430 {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u043d \u041e\u0412\u041a \u0440\u0435\u0436\u0438\u043c", - "is_preset_mode": "{entity_name} \u0435 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0437\u0430\u0434\u0430\u0434\u0435\u043d \u0440\u0435\u0436\u0438\u043c" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0430\u0442\u0430 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "current_temperature_changed": "{entity_name} \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0430\u0442\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "hvac_mode_changed": "{entity_name} \u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u041e\u0412\u041a \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/ca.json b/homeassistant/components/climate/.translations/ca.json deleted file mode 100644 index bde91c26b7e..00000000000 --- a/homeassistant/components/climate/.translations/ca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Canvia el mode HVAC de {entity_name}", - "set_preset_mode": "Canvia la configuraci\u00f3 preestablerta de {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} est\u00e0 configurat/ada en un mode HVAC espec\u00edfic", - "is_preset_mode": "{entity_name} est\u00e0 configurat/ada en un mode preestablert espec\u00edfic" - }, - "trigger_type": { - "current_humidity_changed": "Ha canviat la humitat mesurada per {entity_name}", - "current_temperature_changed": "Ha canviat la temperatura mesurada per {entity_name}", - "hvac_mode_changed": "El mode HVAC de {entity_name} ha canviat" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/da.json b/homeassistant/components/climate/.translations/da.json deleted file mode 100644 index 78731dd1577..00000000000 --- a/homeassistant/components/climate/.translations/da.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Skift af klimaanl\u00e6gstilstand p\u00e5 {entity_name}", - "set_preset_mode": "Skift af forudindstilling p\u00e5 {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} er indstillet til en bestemt klimaanl\u00e6gstilstand", - "is_preset_mode": "{entity_name} er indstillet til en bestemt forudindstillet tilstand" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} m\u00e5lte luftfugtighed \u00e6ndret", - "current_temperature_changed": "{entity_name} m\u00e5lte temperatur \u00e6ndret", - "hvac_mode_changed": "{entity_name} klimaanl\u00e6gstilstand \u00e6ndret" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/de.json b/homeassistant/components/climate/.translations/de.json deleted file mode 100644 index 444c2cc460b..00000000000 --- a/homeassistant/components/climate/.translations/de.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "HVAC-Modus auf {entity_name} \u00e4ndern", - "set_preset_mode": "Voreinstellung von {entity_name} \u00e4ndern" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} ist auf einen bestimmten HVAC-Modus festgelegt", - "is_preset_mode": "{entity_name} ist auf einen bestimmten voreingestellten Modus eingestellt" - }, - "trigger_type": { - "current_humidity_changed": "Gemessene Luftfeuchtigkeit von {entity_name} ge\u00e4ndert", - "current_temperature_changed": "Gemessene Temperatur von {entity_name} ge\u00e4ndert", - "hvac_mode_changed": "{entity_name} HVAC-Modus ge\u00e4ndert" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/en.json b/homeassistant/components/climate/.translations/en.json deleted file mode 100644 index 2a56426e988..00000000000 --- a/homeassistant/components/climate/.translations/en.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Change HVAC mode on {entity_name}", - "set_preset_mode": "Change preset on {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} is set to a specific HVAC mode", - "is_preset_mode": "{entity_name} is set to a specific preset mode" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} measured humidity changed", - "current_temperature_changed": "{entity_name} measured temperature changed", - "hvac_mode_changed": "{entity_name} HVAC mode changed" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/es-419.json b/homeassistant/components/climate/.translations/es-419.json deleted file mode 100644 index f3b861b9195..00000000000 --- a/homeassistant/components/climate/.translations/es-419.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Cambiar el modo HVAC en {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} est\u00e1 configurado en un modo HVAC espec\u00edfico" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/es.json b/homeassistant/components/climate/.translations/es.json deleted file mode 100644 index e873427e694..00000000000 --- a/homeassistant/components/climate/.translations/es.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Cambiar el modo HVAC de {entity_name}.", - "set_preset_mode": "Cambiar la configuraci\u00f3n prefijada de {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} est\u00e1 configurado en un modo HVAC espec\u00edfico", - "is_preset_mode": "{entity_name} se establece en un modo predeterminado espec\u00edfico" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} humedad medida cambi\u00f3", - "current_temperature_changed": "{entity_name} temperatura medida cambi\u00f3", - "hvac_mode_changed": "{entity_name} Modo HVAC cambiado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/fr.json b/homeassistant/components/climate/.translations/fr.json deleted file mode 100644 index 0358a60f180..00000000000 --- a/homeassistant/components/climate/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Changer le mode HVAC sur {entity_name}.", - "set_preset_mode": "Changer les pr\u00e9r\u00e9glages de {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} est d\u00e9fini sur un mode HVAC sp\u00e9cifique", - "is_preset_mode": "{entity_name} est d\u00e9fini sur un mode pr\u00e9d\u00e9fini sp\u00e9cifique" - }, - "trigger_type": { - "current_humidity_changed": "Changement d'humidit\u00e9 mesur\u00e9e pour {entity_name}", - "current_temperature_changed": "Changement de temp\u00e9rature mesur\u00e9e pour {entity_name}", - "hvac_mode_changed": "Mode HVAC chang\u00e9 pour {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/hu.json b/homeassistant/components/climate/.translations/hu.json deleted file mode 100644 index 38d6cc68822..00000000000 --- a/homeassistant/components/climate/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "F\u0171t\u00e9s- \u00e9s l\u00e9gtechnikai (HVAC) \u00fczemm\u00f3d m\u00f3dos\u00edt\u00e1sa a k\u00f6vetkez\u0151n: {entity_name}", - "set_preset_mode": "A(z) {entity_name} be\u00e1ll\u00edt\u00e1s\u00e1nak v\u00e1lt\u00e1sa" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} speci\u00e1lis f\u0171t\u00e9s, szell\u0151z\u00e9s \u00e9s l\u00e9gkondicion\u00e1l\u00e1s (HVAC) \u00fczemm\u00f3dra van be\u00e1ll\u00edtva", - "is_preset_mode": "A(z) {entity_name} el\u0151re be\u00e1ll\u00edtott m\u00f3dja van kiv\u00e1lasztva" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} m\u00e9rt p\u00e1ratartalma megv\u00e1ltozott", - "current_temperature_changed": "{entity_name} m\u00e9rt h\u0151m\u00e9rs\u00e9klete megv\u00e1ltozott", - "hvac_mode_changed": "{entity_name} f\u0171t\u00e9s, szell\u0151z\u00e9s \u00e9s l\u00e9gkondicion\u00e1l\u00e1s (HVAC) \u00fczemm\u00f3d megv\u00e1ltozott" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/it.json b/homeassistant/components/climate/.translations/it.json deleted file mode 100644 index 25a09b7d66d..00000000000 --- a/homeassistant/components/climate/.translations/it.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Cambia modalit\u00e0 HVAC su {entity_name}", - "set_preset_mode": "Modifica preimpostazione su {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} \u00e8 impostato su una modalit\u00e0 HVAC specifica", - "is_preset_mode": "{entity_name} \u00e8 impostato su una modalit\u00e0 preimpostata specifica" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} umidit\u00e0 misurata modificata", - "current_temperature_changed": "{entity_name} temperatura misurata cambiata", - "hvac_mode_changed": "{entity_name} modalit\u00e0 HVAC modificata" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/ko.json b/homeassistant/components/climate/.translations/ko.json deleted file mode 100644 index 299172958e8..00000000000 --- a/homeassistant/components/climate/.translations/ko.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "{entity_name} \uc758 HVAC \ubaa8\ub4dc \ubcc0\uacbd", - "set_preset_mode": "{entity_name} \uc758 \uc0ac\uc804 \uc124\uc815 \ubcc0\uacbd" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} \uc774(\uac00) \ud2b9\uc815 HVAC \ubaa8\ub4dc\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc73c\uba74", - "is_preset_mode": "{entity_name} \uc774(\uac00) \ud2b9\uc815 \uc0ac\uc804 \uc124\uc815 \ubaa8\ub4dc\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc73c\uba74" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} \uc774(\uac00) \uc2b5\ub3c4 \ubcc0\ud654\ub97c \uac10\uc9c0\ud560 \ub54c", - "current_temperature_changed": "{entity_name} \uc774(\uac00) \uc628\ub3c4 \ubcc0\ud654\ub97c \uac10\uc9c0\ud560 \ub54c", - "hvac_mode_changed": "{entity_name} HVAC \ubaa8\ub4dc\uac00 \ubcc0\uacbd\ub420 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/lb.json b/homeassistant/components/climate/.translations/lb.json deleted file mode 100644 index 2b6ca061fd8..00000000000 --- a/homeassistant/components/climate/.translations/lb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "HVAC Modus \u00e4nnere fir {entity_name}", - "set_preset_mode": "Preset \u00e4nnere fir {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} ass op e spezifesche HVAC Modus gesat", - "is_preset_mode": "{entity_name} ass op e spezifesche preset Modus gesat" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} gemoosse Fiichtegkeet ge\u00e4nnert", - "current_temperature_changed": "{entity_name} gemoossen Temperatur ge\u00e4nnert", - "hvac_mode_changed": "{entity_name} HVAC Modus ge\u00e4nnert" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/nl.json b/homeassistant/components/climate/.translations/nl.json deleted file mode 100644 index 87e16c1c885..00000000000 --- a/homeassistant/components/climate/.translations/nl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Wijzig de HVAC-modus op {entity_name}", - "set_preset_mode": "Wijzig voorinstelling op {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} is ingesteld op een specifieke HVAC-modus", - "is_preset_mode": "{entity_name} is ingesteld op een specifieke vooraf ingestelde modus" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} gemeten vochtigheid veranderd", - "current_temperature_changed": "{entity_name} gemeten temperatuur veranderd", - "hvac_mode_changed": "{entity_name} HVAC-modus gewijzigd" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/no.json b/homeassistant/components/climate/.translations/no.json deleted file mode 100644 index bc6e97b9aa5..00000000000 --- a/homeassistant/components/climate/.translations/no.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Endre HVAC-modus p\u00e5 {entity_name}", - "set_preset_mode": "Endre forh\u00e5ndsinnstilling p\u00e5 {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} er satt til en spesifikk HVAC-modus", - "is_preset_mode": "{entity_name} er satt til en spesifikk forh\u00e5ndsinnstilt modus" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} m\u00e5lt fuktighet er endret", - "current_temperature_changed": "{entity_name} m\u00e5lt temperatur er endret", - "hvac_mode_changed": "{entity_name} HVAC-modus er endret" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/pl.json b/homeassistant/components/climate/.translations/pl.json deleted file mode 100644 index f2a09eee3ef..00000000000 --- a/homeassistant/components/climate/.translations/pl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "zmie\u0144 tryb HVAC na {entity_name}", - "set_preset_mode": "zmie\u0144 ustawienia dla {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "na {entity_name} jest ustawiony okre\u015blony tryb HVAC", - "is_preset_mode": "na {entity_name} jest okre\u015blone ustawienie" - }, - "trigger_type": { - "current_humidity_changed": "zmieni si\u0119 zmierzona wilgotno\u015b\u0107 {entity_name}", - "current_temperature_changed": "zmieni si\u0119 zmierzona temperatura {entity_name}", - "hvac_mode_changed": "zmieni si\u0119 tryb HVAC {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/ru.json b/homeassistant/components/climate/.translations/ru.json deleted file mode 100644 index 6a9c52be209..00000000000 --- a/homeassistant/components/climate/.translations/ru.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \"{entity_name}\"", - "set_preset_mode": "\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \"{entity_name}\"" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b", - "is_preset_mode": "{entity_name} \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438", - "current_temperature_changed": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b", - "hvac_mode_changed": "{entity_name} \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/sl.json b/homeassistant/components/climate/.translations/sl.json deleted file mode 100644 index ecaf24fed80..00000000000 --- a/homeassistant/components/climate/.translations/sl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "Spremeni na\u010din HVAC na {entity_name}", - "set_preset_mode": "Spremenite prednastavitev na {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} je nastavljen na dolo\u010den na\u010din HVAC", - "is_preset_mode": "{entity_name} je nastavljen na dolo\u010den prednastavljeni na\u010din" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} spremenjena izmerjena vla\u017enost", - "current_temperature_changed": "{entity_name} izmerjena temperaturna sprememba", - "hvac_mode_changed": "{entity_name} HVAC na\u010din spremenjen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/sv.json b/homeassistant/components/climate/.translations/sv.json deleted file mode 100644 index 51fe0540549..00000000000 --- a/homeassistant/components/climate/.translations/sv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "\u00c4ndra HVAC-l\u00e4ge p\u00e5 {entity_name}", - "set_preset_mode": "\u00c4ndra f\u00f6rinst\u00e4llning p\u00e5 {entity_name}" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} \u00e4r inst\u00e4lld p\u00e5 ett specifikt HVAC-l\u00e4ge", - "is_preset_mode": "{entity_name} \u00e4r inst\u00e4lld p\u00e5 ett specifikt f\u00f6rinst\u00e4llt l\u00e4ge" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} uppm\u00e4tt fuktighet har \u00e4ndrats", - "current_temperature_changed": "{entity_name} uppm\u00e4tt temperatur har \u00e4ndrats", - "hvac_mode_changed": "{entity_name} HVAC-l\u00e4ge har \u00e4ndrats" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/zh-Hans.json b/homeassistant/components/climate/.translations/zh-Hans.json deleted file mode 100644 index 3459ef3b798..00000000000 --- a/homeassistant/components/climate/.translations/zh-Hans.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "\u66f4\u6539 {entity_name} \u7a7a\u8c03\u6a21\u5f0f", - "set_preset_mode": "\u66f4\u6539 {entity_name} \u9884\u8bbe\u6a21\u5f0f" - }, - "condition_type": { - "is_hvac_mode": "{entity_name} \u88ab\u8bbe\u4e3a\u6307\u5b9a\u7684\u7a7a\u8c03\u6a21\u5f0f", - "is_preset_mode": "{entity_name} \u88ab\u8bbe\u4e3a\u6307\u5b9a\u7684\u9884\u8bbe\u6a21\u5f0f" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name} \u6d4b\u91cf\u7684\u5ba4\u5185\u6e7f\u5ea6\u53d8\u5316", - "current_temperature_changed": "{entity_name} \u6d4b\u91cf\u7684\u5ba4\u5185\u6e29\u5ea6\u53d8\u5316", - "hvac_mode_changed": "{entity_name} \u7684\u8fd0\u884c\u6a21\u5f0f\u53d8\u5316" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/.translations/zh-Hant.json b/homeassistant/components/climate/.translations/zh-Hant.json deleted file mode 100644 index 28ff10f09f0..00000000000 --- a/homeassistant/components/climate/.translations/zh-Hant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "set_hvac_mode": "\u8b8a\u66f4{entity_name} HVAC \u6a21\u5f0f", - "set_preset_mode": "\u8b8a\u66f4{entity_name}\u8a2d\u5b9a\u6a21\u5f0f" - }, - "condition_type": { - "is_hvac_mode": "{entity_name}\u8a2d\u5b9a\u70ba\u6307\u5b9a HVAC \u6a21\u5f0f", - "is_preset_mode": "{entity_name}\u8a2d\u5b9a\u70ba\u6307\u5b9a\u8a2d\u5b9a\u6a21\u5f0f" - }, - "trigger_type": { - "current_humidity_changed": "{entity_name}\u91cf\u6e2c\u6fd5\u5ea6\u5df2\u8b8a\u66f4", - "current_temperature_changed": "{entity_name}\u91cf\u6e2c\u6eab\u5ea6\u5df2\u8b8a\u66f4", - "hvac_mode_changed": "{entity_name} HVAC \u6a21\u5f0f\u5df2\u8b8a\u66f4" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/climate/manifest.json b/homeassistant/components/climate/manifest.json index 4ac1f55b2b0..5d950ccbe2d 100644 --- a/homeassistant/components/climate/manifest.json +++ b/homeassistant/components/climate/manifest.json @@ -2,8 +2,6 @@ "domain": "climate", "name": "Climate", "documentation": "https://www.home-assistant.io/integrations/climate", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/climate/reproduce_state.py b/homeassistant/components/climate/reproduce_state.py index 82ca4f4e85c..1217d5fde4c 100644 --- a/homeassistant/components/climate/reproduce_state.py +++ b/homeassistant/components/climate/reproduce_state.py @@ -1,6 +1,6 @@ """Module that groups code required to handle state restore for component.""" import asyncio -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ATTR_TEMPERATURE from homeassistant.core import Context, State @@ -26,7 +26,11 @@ from .const import ( async def _async_reproduce_states( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce component states.""" @@ -69,9 +73,18 @@ async def _async_reproduce_states( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce component states.""" await asyncio.gather( - *(_async_reproduce_states(hass, state, context) for state in states) + *( + _async_reproduce_states( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/climate/services.yaml b/homeassistant/components/climate/services.yaml index 815df57f342..99964081277 100644 --- a/homeassistant/components/climate/services.yaml +++ b/homeassistant/components/climate/services.yaml @@ -5,7 +5,7 @@ set_aux_heat: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" aux_heat: description: New value of axillary heater. example: true @@ -15,17 +15,17 @@ set_preset_mode: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" preset_mode: description: New value of preset mode - example: 'away' + example: "away" set_temperature: description: Set target temperature of climate device. fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" temperature: description: New target temperature for HVAC. example: 25 @@ -37,14 +37,14 @@ set_temperature: example: 20 hvac_mode: description: HVAC operation mode to set temperature to. - example: 'heat' + example: "heat" set_humidity: description: Set target humidity of climate device. fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" humidity: description: New target humidity for climate device. example: 60 @@ -54,7 +54,7 @@ set_fan_mode: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.nest' + example: "climate.nest" fan_mode: description: New value of fan mode. example: On Low @@ -64,7 +64,7 @@ set_hvac_mode: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.nest' + example: "climate.nest" hvac_mode: description: New value of operation mode. example: heat @@ -74,7 +74,7 @@ set_swing_mode: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.nest' + example: "climate.nest" swing_mode: description: New value of swing mode. @@ -83,11 +83,11 @@ turn_on: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" turn_off: description: Turn climate device off. fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" diff --git a/homeassistant/components/climate/strings.json b/homeassistant/components/climate/strings.json index ff071aed083..1caf184b998 100644 --- a/homeassistant/components/climate/strings.json +++ b/homeassistant/components/climate/strings.json @@ -1,4 +1,5 @@ { + "title": "Climate", "device_automation": { "condition_type": { "is_hvac_mode": "{entity_name} is set to a specific HVAC mode", @@ -13,5 +14,16 @@ "set_hvac_mode": "Change HVAC mode on {entity_name}", "set_preset_mode": "Change preset on {entity_name}" } + }, + "state": { + "_": { + "off": "[%key:common::state::off%]", + "heat": "Heat", + "cool": "Cool", + "heat_cool": "Heat/Cool", + "auto": "Auto", + "dry": "Dry", + "fan_only": "Fan only" + } } } diff --git a/homeassistant/components/climate/translations/af.json b/homeassistant/components/climate/translations/af.json new file mode 100644 index 00000000000..4a6ceb4a267 --- /dev/null +++ b/homeassistant/components/climate/translations/af.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Outo", + "cool": "Koel", + "dry": "Droog", + "fan_only": "Slegs waaier", + "heat": "Hitte", + "heat_cool": "Verhit/Verkoel", + "off": "Af" + } + }, + "title": "Klimaat" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ar.json b/homeassistant/components/climate/translations/ar.json new file mode 100644 index 00000000000..1363f619d25 --- /dev/null +++ b/homeassistant/components/climate/translations/ar.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "\u062a\u0644\u0642\u0627\u0626\u064a", + "cool": "\u062a\u0628\u0631\u064a\u062f", + "dry": "\u062c\u0627\u0641", + "fan_only": "\u0627\u0644\u0645\u0631\u0648\u062d\u0629 \u0641\u0642\u0637", + "heat": "\u062a\u062f\u0641\u0626\u0629", + "off": "\u0625\u064a\u0642\u0627\u0641" + } + }, + "title": "\u0627\u0644\u0637\u0642\u0633" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/bg.json b/homeassistant/components/climate/translations/bg.json new file mode 100644 index 00000000000..7c7389545eb --- /dev/null +++ b/homeassistant/components/climate/translations/bg.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "\u041f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u041e\u0412\u041a \u043d\u0430 {entity_name}", + "set_preset_mode": "\u041f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0437\u0430\u0434\u0430\u0434\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043d\u0430 {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u043d \u041e\u0412\u041a \u0440\u0435\u0436\u0438\u043c", + "is_preset_mode": "{entity_name} \u0435 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0437\u0430\u0434\u0430\u0434\u0435\u043d \u0440\u0435\u0436\u0438\u043c" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0430\u0442\u0430 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "current_temperature_changed": "{entity_name} \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0430\u0442\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "hvac_mode_changed": "{entity_name} \u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u041e\u0412\u041a \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438" + } + }, + "state": { + "_": { + "auto": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043d", + "cool": "\u041e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435", + "dry": "\u0421\u0443\u0445", + "fan_only": "\u0421\u0430\u043c\u043e \u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0442\u043e\u0440", + "heat": "\u041e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435", + "heat_cool": "\u041e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435/\u041e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435", + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u041a\u043b\u0438\u043c\u0430\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/bs.json b/homeassistant/components/climate/translations/bs.json new file mode 100644 index 00000000000..a18207041ea --- /dev/null +++ b/homeassistant/components/climate/translations/bs.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Hladno", + "dry": "Suh", + "fan_only": "Samo ventilator", + "heat": "Toplota", + "off": "Isklju\u010den" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ca.json b/homeassistant/components/climate/translations/ca.json new file mode 100644 index 00000000000..e2f3a58e2eb --- /dev/null +++ b/homeassistant/components/climate/translations/ca.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Canvia el mode HVAC de {entity_name}", + "set_preset_mode": "Canvia la configuraci\u00f3 preestablerta de {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} est\u00e0 configurat/ada en un mode HVAC espec\u00edfic", + "is_preset_mode": "{entity_name} est\u00e0 configurat/ada en un mode preestablert espec\u00edfic" + }, + "trigger_type": { + "current_humidity_changed": "Ha canviat la humitat mesurada per {entity_name}", + "current_temperature_changed": "Ha canviat la temperatura mesurada per {entity_name}", + "hvac_mode_changed": "El mode HVAC de {entity_name} ha canviat" + } + }, + "state": { + "_": { + "auto": "Autom\u00e0tic", + "cool": "Refredar", + "dry": "Assecar", + "fan_only": "Nom\u00e9s ventilador", + "heat": "Escalfar", + "heat_cool": "Escalfar/Refredar", + "off": "Apagat" + } + }, + "title": "Climatitzaci\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/cs.json b/homeassistant/components/climate/translations/cs.json new file mode 100644 index 00000000000..a61706acea8 --- /dev/null +++ b/homeassistant/components/climate/translations/cs.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Automatika", + "cool": "Chlazen\u00ed", + "dry": "Vysou\u0161en\u00ed", + "fan_only": "Pouze ventil\u00e1tor", + "heat": "Topen\u00ed", + "heat_cool": "Vyt\u00e1p\u011bn\u00ed/Chlazen\u00ed", + "off": "Neaktivn\u00ed" + } + }, + "title": "Klimatizace" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/cy.json b/homeassistant/components/climate/translations/cy.json new file mode 100644 index 00000000000..c2d1ebdef05 --- /dev/null +++ b/homeassistant/components/climate/translations/cy.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "Awto", + "cool": "Sefydlog", + "dry": "Sych", + "fan_only": "Fan yn unig", + "heat": "Gwres", + "off": "i ffwrdd" + } + }, + "title": "Hinsawdd" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/da.json b/homeassistant/components/climate/translations/da.json new file mode 100644 index 00000000000..18b2bf16d49 --- /dev/null +++ b/homeassistant/components/climate/translations/da.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Skift af klimaanl\u00e6gstilstand p\u00e5 {entity_name}", + "set_preset_mode": "Skift af forudindstilling p\u00e5 {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} er indstillet til en bestemt klimaanl\u00e6gstilstand", + "is_preset_mode": "{entity_name} er indstillet til en bestemt forudindstillet tilstand" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} m\u00e5lte luftfugtighed \u00e6ndret", + "current_temperature_changed": "{entity_name} m\u00e5lte temperatur \u00e6ndret", + "hvac_mode_changed": "{entity_name} klimaanl\u00e6gstilstand \u00e6ndret" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "K\u00f8l", + "dry": "T\u00f8r", + "fan_only": "Kun bl\u00e6ser", + "heat": "Varme", + "heat_cool": "Opvarm/k\u00f8l", + "off": "Fra" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/de.json b/homeassistant/components/climate/translations/de.json new file mode 100644 index 00000000000..b720df9f007 --- /dev/null +++ b/homeassistant/components/climate/translations/de.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "HVAC-Modus auf {entity_name} \u00e4ndern", + "set_preset_mode": "Voreinstellung von {entity_name} \u00e4ndern" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} ist auf einen bestimmten HVAC-Modus festgelegt", + "is_preset_mode": "{entity_name} ist auf einen bestimmten voreingestellten Modus eingestellt" + }, + "trigger_type": { + "current_humidity_changed": "Gemessene Luftfeuchtigkeit von {entity_name} ge\u00e4ndert", + "current_temperature_changed": "Gemessene Temperatur von {entity_name} ge\u00e4ndert", + "hvac_mode_changed": "{entity_name} HVAC-Modus ge\u00e4ndert" + } + }, + "state": { + "_": { + "auto": "Automatisch", + "cool": "K\u00fchlen", + "dry": "Entfeuchten", + "fan_only": "Nur Ventilator", + "heat": "Heizen", + "heat_cool": "Heizen/K\u00fchlen", + "off": "Aus" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/el.json b/homeassistant/components/climate/translations/el.json new file mode 100644 index 00000000000..44c56a0a271 --- /dev/null +++ b/homeassistant/components/climate/translations/el.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03bf", + "cool": "\u0394\u03c1\u03bf\u03c3\u03b5\u03c1\u03cc", + "dry": "\u039e\u03b7\u03c1\u03cc", + "fan_only": "\u0391\u03bd\u03b5\u03bc\u03b9\u03c3\u03c4\u03ae\u03c1\u03b1\u03c2 \u03bc\u03cc\u03bd\u03bf", + "heat": "\u0398\u03b5\u03c1\u03bc\u03cc", + "heat_cool": "\u0398\u03ad\u03c1\u03bc\u03b1\u03bd\u03c3\u03b7 / \u03a8\u03cd\u03be\u03b7", + "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc" + } + }, + "title": "\u03a4\u03bf \u03ba\u03bb\u03af\u03bc\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/en.json b/homeassistant/components/climate/translations/en.json new file mode 100644 index 00000000000..92ff71be756 --- /dev/null +++ b/homeassistant/components/climate/translations/en.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Change HVAC mode on {entity_name}", + "set_preset_mode": "Change preset on {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} is set to a specific HVAC mode", + "is_preset_mode": "{entity_name} is set to a specific preset mode" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} measured humidity changed", + "current_temperature_changed": "{entity_name} measured temperature changed", + "hvac_mode_changed": "{entity_name} HVAC mode changed" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "Cool", + "dry": "Dry", + "fan_only": "Fan only", + "heat": "Heat", + "heat_cool": "Heat/Cool", + "off": "Off" + } + }, + "title": "Climate" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/es-419.json b/homeassistant/components/climate/translations/es-419.json new file mode 100644 index 00000000000..d61483edda2 --- /dev/null +++ b/homeassistant/components/climate/translations/es-419.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Cambiar el modo HVAC en {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} est\u00e1 configurado en un modo HVAC espec\u00edfico" + } + }, + "state": { + "_": { + "auto": "Automatico", + "cool": "Enfriar", + "dry": "Seco", + "fan_only": "S\u00f3lo ventilador", + "heat": "Calentar", + "heat_cool": "Calentar/Enfriar", + "off": "Desactivar" + } + }, + "title": "Clima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/es.json b/homeassistant/components/climate/translations/es.json new file mode 100644 index 00000000000..9ed5ff150c0 --- /dev/null +++ b/homeassistant/components/climate/translations/es.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Cambiar el modo HVAC de {entity_name}.", + "set_preset_mode": "Cambiar la configuraci\u00f3n prefijada de {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} est\u00e1 configurado en un modo HVAC espec\u00edfico", + "is_preset_mode": "{entity_name} se establece en un modo predeterminado espec\u00edfico" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} humedad medida cambi\u00f3", + "current_temperature_changed": "{entity_name} temperatura medida cambi\u00f3", + "hvac_mode_changed": "{entity_name} Modo HVAC cambiado" + } + }, + "state": { + "_": { + "auto": "Autom\u00e1tico", + "cool": "Fr\u00edo", + "dry": "Seco", + "fan_only": "S\u00f3lo ventilador", + "heat": "Calor", + "heat_cool": "Calor/Fr\u00edo", + "off": "Apagado" + } + }, + "title": "Climatizaci\u00f3n" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/et.json b/homeassistant/components/climate/translations/et.json new file mode 100644 index 00000000000..1c4a6a5ff11 --- /dev/null +++ b/homeassistant/components/climate/translations/et.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Automaatne", + "cool": "Jahuta", + "dry": "Kuiv", + "fan_only": "Ainult ventilaator", + "heat": "Soojenda", + "heat_cool": "K\u00fcta/jahuta", + "off": "V\u00e4ljas" + } + }, + "title": "Kliima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/eu.json b/homeassistant/components/climate/translations/eu.json new file mode 100644 index 00000000000..1dc30b687ac --- /dev/null +++ b/homeassistant/components/climate/translations/eu.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "Automatikoa", + "cool": "Hotza", + "dry": "Lehorra", + "fan_only": "Haizagailua bakarrik", + "heat": "Beroa", + "off": "Itzalita" + } + }, + "title": "Klimatizazioa" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/fa.json b/homeassistant/components/climate/translations/fa.json new file mode 100644 index 00000000000..84793ac06c9 --- /dev/null +++ b/homeassistant/components/climate/translations/fa.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "\u062e\u0648\u062f\u06a9\u0627\u0631", + "cool": "\u062e\u0646\u06a9", + "dry": "\u062e\u0634\u06a9", + "fan_only": "\u0641\u0642\u0637 \u067e\u0646\u06a9\u0647", + "heat": "\u062d\u0631\u0627\u0631\u062a", + "off": "\u062e\u0627\u0645\u0648\u0634" + } + }, + "title": "\u0622\u0628 \u0648 \u0647\u0648\u0627" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/fi.json b/homeassistant/components/climate/translations/fi.json new file mode 100644 index 00000000000..7a280d44120 --- /dev/null +++ b/homeassistant/components/climate/translations/fi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Automaatilla", + "cool": "J\u00e4\u00e4hdytys", + "dry": "Kuivaus", + "fan_only": "Tuuletus", + "heat": "L\u00e4mmitys", + "heat_cool": "L\u00e4mmitys/j\u00e4\u00e4hdytys", + "off": "Pois" + } + }, + "title": "Ilmasto" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/fr.json b/homeassistant/components/climate/translations/fr.json new file mode 100644 index 00000000000..913c2579478 --- /dev/null +++ b/homeassistant/components/climate/translations/fr.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Changer le mode HVAC sur {entity_name}.", + "set_preset_mode": "Changer les pr\u00e9r\u00e9glages de {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} est d\u00e9fini sur un mode HVAC sp\u00e9cifique", + "is_preset_mode": "{entity_name} est d\u00e9fini sur un mode pr\u00e9d\u00e9fini sp\u00e9cifique" + }, + "trigger_type": { + "current_humidity_changed": "Changement d'humidit\u00e9 mesur\u00e9e pour {entity_name}", + "current_temperature_changed": "Changement de temp\u00e9rature mesur\u00e9e pour {entity_name}", + "hvac_mode_changed": "Mode HVAC chang\u00e9 pour {entity_name}" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "Frais", + "dry": "Sec", + "fan_only": "Ventilateur seul", + "heat": "Chauffe", + "heat_cool": "Chaud/Froid", + "off": "Inactif" + } + }, + "title": "Thermostat" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/gsw.json b/homeassistant/components/climate/translations/gsw.json new file mode 100644 index 00000000000..9c3f9a34fb7 --- /dev/null +++ b/homeassistant/components/climate/translations/gsw.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "Automatik", + "cool": "Ch\u00fc\u00e4l\u00e4", + "dry": "Troch\u00e4", + "fan_only": "Nur L\u00fcfter", + "heat": "Heiz\u00e4", + "off": "Us" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/he.json b/homeassistant/components/climate/translations/he.json new file mode 100644 index 00000000000..fe5380a0528 --- /dev/null +++ b/homeassistant/components/climate/translations/he.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "\u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9", + "cool": "\u05e7\u05e8\u05d5\u05e8", + "dry": "\u05d9\u05d1\u05e9", + "fan_only": "\u05de\u05d0\u05d5\u05d5\u05e8\u05e8 \u05d1\u05dc\u05d1\u05d3", + "heat": "\u05d7\u05d9\u05de\u05d5\u05dd", + "heat_cool": "\u05d7\u05d9\u05de\u05d5\u05dd/\u05e7\u05d9\u05e8\u05d5\u05e8", + "off": "\u05db\u05d1\u05d5\u05d9" + } + }, + "title": "\u05d0\u05b7\u05e7\u05dc\u05b4\u05d9\u05dd" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/hi.json b/homeassistant/components/climate/translations/hi.json new file mode 100644 index 00000000000..1c595e33c76 --- /dev/null +++ b/homeassistant/components/climate/translations/hi.json @@ -0,0 +1,11 @@ +{ + "state": { + "_": { + "cool": "\u0920\u0902\u0921\u093e", + "dry": "\u0938\u0942\u0916\u093e", + "heat": "\u0917\u0930\u094d\u092e\u0940", + "off": "\u092c\u0902\u0926" + } + }, + "title": "\u091c\u0932\u0935\u093e\u092f\u0941" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/hr.json b/homeassistant/components/climate/translations/hr.json new file mode 100644 index 00000000000..a960810c020 --- /dev/null +++ b/homeassistant/components/climate/translations/hr.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Hla\u0111enje", + "dry": "Suho", + "fan_only": "Samo ventilator", + "heat": "Grijanje", + "heat_cool": "Grijanje/Hla\u0111enje", + "off": "Isklju\u010den" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/hu.json b/homeassistant/components/climate/translations/hu.json new file mode 100644 index 00000000000..400c1af877d --- /dev/null +++ b/homeassistant/components/climate/translations/hu.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "F\u0171t\u00e9s- \u00e9s l\u00e9gtechnikai (HVAC) \u00fczemm\u00f3d m\u00f3dos\u00edt\u00e1sa a k\u00f6vetkez\u0151n: {entity_name}", + "set_preset_mode": "A(z) {entity_name} be\u00e1ll\u00edt\u00e1s\u00e1nak v\u00e1lt\u00e1sa" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} speci\u00e1lis f\u0171t\u00e9s, szell\u0151z\u00e9s \u00e9s l\u00e9gkondicion\u00e1l\u00e1s (HVAC) \u00fczemm\u00f3dra van be\u00e1ll\u00edtva", + "is_preset_mode": "A(z) {entity_name} el\u0151re be\u00e1ll\u00edtott m\u00f3dja van kiv\u00e1lasztva" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} m\u00e9rt p\u00e1ratartalma megv\u00e1ltozott", + "current_temperature_changed": "{entity_name} m\u00e9rt h\u0151m\u00e9rs\u00e9klete megv\u00e1ltozott", + "hvac_mode_changed": "{entity_name} f\u0171t\u00e9s, szell\u0151z\u00e9s \u00e9s l\u00e9gkondicion\u00e1l\u00e1s (HVAC) \u00fczemm\u00f3d megv\u00e1ltozott" + } + }, + "state": { + "_": { + "auto": "Automatikus", + "cool": "H\u0171t\u00e9s", + "dry": "Sz\u00e1raz", + "fan_only": "Csak ventil\u00e1tor", + "heat": "F\u0171t\u00e9s", + "heat_cool": "F\u0171t\u00e9s/H\u0171t\u00e9s", + "off": "Ki" + } + }, + "title": "H\u0171t\u00e9s/f\u0171t\u00e9s" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/hy.json b/homeassistant/components/climate/translations/hy.json new file mode 100644 index 00000000000..d7a090fe5f3 --- /dev/null +++ b/homeassistant/components/climate/translations/hy.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "\u0531\u057e\u057f\u0578\u0574\u0561\u057f", + "cool": "\u0540\u0578\u057e\u0561\u0581\u0578\u0582\u0574", + "dry": "\u0549\u0578\u0580", + "fan_only": "\u0555\u0564\u0561\u0583\u0578\u056d\u056b\u0579", + "heat": "\u054b\u0565\u0580\u0574\u0578\u0582\u0569\u0575\u0578\u0582\u0576", + "heat_cool": "\u054b\u0565\u057c\u0578\u0582\u0581\u0578\u0582\u0574/\u0540\u0578\u057e\u0561\u0581\u0578\u0582\u0574", + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e" + } + }, + "title": "\u053f\u056c\u056b\u0574\u0561" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/id.json b/homeassistant/components/climate/translations/id.json new file mode 100644 index 00000000000..4f1ec02379b --- /dev/null +++ b/homeassistant/components/climate/translations/id.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Sejuk", + "dry": "Kering", + "fan_only": "Hanya kipas", + "heat": "Panas", + "heat_cool": "Panas/Dingin", + "off": "Off" + } + }, + "title": "Cuaca" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/is.json b/homeassistant/components/climate/translations/is.json new file mode 100644 index 00000000000..dd2e8043cd8 --- /dev/null +++ b/homeassistant/components/climate/translations/is.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Sj\u00e1lfvirkt", + "cool": "K\u00e6ling", + "dry": "\u00deurrt", + "fan_only": "Vifta eing\u00f6ngu", + "heat": "Hitun", + "heat_cool": "Hita/K\u00e6la", + "off": "Sl\u00f6kkt" + } + }, + "title": "Loftslag" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/it.json b/homeassistant/components/climate/translations/it.json new file mode 100644 index 00000000000..4f427209325 --- /dev/null +++ b/homeassistant/components/climate/translations/it.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Cambia modalit\u00e0 HVAC su {entity_name}", + "set_preset_mode": "Modifica preimpostazione su {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} \u00e8 impostato su una modalit\u00e0 HVAC specifica", + "is_preset_mode": "{entity_name} \u00e8 impostato su una modalit\u00e0 preimpostata specifica" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} umidit\u00e0 misurata modificata", + "current_temperature_changed": "{entity_name} temperatura misurata cambiata", + "hvac_mode_changed": "{entity_name} modalit\u00e0 HVAC modificata" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "Freddo", + "dry": "Secco", + "fan_only": "Solo ventilatore", + "heat": "Caldo", + "heat_cool": "Caldo/Freddo", + "off": "Spento" + } + }, + "title": "Termostato" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ja.json b/homeassistant/components/climate/translations/ja.json new file mode 100644 index 00000000000..2d660b8dd54 --- /dev/null +++ b/homeassistant/components/climate/translations/ja.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "auto": "\u30aa\u30fc\u30c8", + "cool": "\u51b7\u623f", + "dry": "\u30c9\u30e9\u30a4", + "fan_only": "\u30d5\u30a1\u30f3\u306e\u307f", + "heat": "\u6696\u623f", + "off": "\u30aa\u30d5" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ko.json b/homeassistant/components/climate/translations/ko.json new file mode 100644 index 00000000000..c707c9c1eba --- /dev/null +++ b/homeassistant/components/climate/translations/ko.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "{entity_name} \uc758 HVAC \ubaa8\ub4dc \ubcc0\uacbd", + "set_preset_mode": "{entity_name} \uc758 \uc0ac\uc804 \uc124\uc815 \ubcc0\uacbd" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} \uc774(\uac00) \ud2b9\uc815 HVAC \ubaa8\ub4dc\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc73c\uba74", + "is_preset_mode": "{entity_name} \uc774(\uac00) \ud2b9\uc815 \uc0ac\uc804 \uc124\uc815 \ubaa8\ub4dc\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc73c\uba74" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} \uc774(\uac00) \uc2b5\ub3c4 \ubcc0\ud654\ub97c \uac10\uc9c0\ud560 \ub54c", + "current_temperature_changed": "{entity_name} \uc774(\uac00) \uc628\ub3c4 \ubcc0\ud654\ub97c \uac10\uc9c0\ud560 \ub54c", + "hvac_mode_changed": "{entity_name} HVAC \ubaa8\ub4dc\uac00 \ubcc0\uacbd\ub420 \ub54c" + } + }, + "state": { + "_": { + "auto": "\uc790\ub3d9", + "cool": "\ub0c9\ubc29", + "dry": "\uc81c\uc2b5", + "fan_only": "\uc1a1\ud48d", + "heat": "\ub09c\ubc29", + "heat_cool": "\ub0c9\ub09c\ubc29", + "off": "\uaebc\uc9d0" + } + }, + "title": "\uacf5\uc870\uae30\uae30" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/lb.json b/homeassistant/components/climate/translations/lb.json new file mode 100644 index 00000000000..6d97f7759be --- /dev/null +++ b/homeassistant/components/climate/translations/lb.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "HVAC Modus \u00e4nnere fir {entity_name}", + "set_preset_mode": "Preset \u00e4nnere fir {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} ass op e spezifesche HVAC Modus gesat", + "is_preset_mode": "{entity_name} ass op e spezifesche preset Modus gesat" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} gemoosse Fiichtegkeet ge\u00e4nnert", + "current_temperature_changed": "{entity_name} gemoossen Temperatur ge\u00e4nnert", + "hvac_mode_changed": "{entity_name} HVAC Modus ge\u00e4nnert" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "Kill", + "dry": "Dr\u00e9chen", + "fan_only": "N\u00ebmme Ventilator", + "heat": "Heizen", + "heat_cool": "H\u00ebtzen/Ofkillen", + "off": "Aus" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/lt.json b/homeassistant/components/climate/translations/lt.json new file mode 100644 index 00000000000..1f60d1cd5c2 --- /dev/null +++ b/homeassistant/components/climate/translations/lt.json @@ -0,0 +1,7 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/lv.json b/homeassistant/components/climate/translations/lv.json new file mode 100644 index 00000000000..f789256ed33 --- /dev/null +++ b/homeassistant/components/climate/translations/lv.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Dzes\u0113\u0161ana", + "dry": "Sauss", + "fan_only": "Tikai ventilators", + "heat": "Sild\u012b\u0161ana", + "heat_cool": "Sild\u012bt / Atdzes\u0113t", + "off": "Izsl\u0113gts" + } + }, + "title": "Klimats" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/nb.json b/homeassistant/components/climate/translations/nb.json new file mode 100644 index 00000000000..aa28848f921 --- /dev/null +++ b/homeassistant/components/climate/translations/nb.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Kj\u00f8ling", + "dry": "T\u00f8rr", + "fan_only": "Kun vifte", + "heat": "Varme", + "heat_cool": "Varme/kj\u00f8ling", + "off": "Av" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/nl.json b/homeassistant/components/climate/translations/nl.json new file mode 100644 index 00000000000..0237d2bbd9a --- /dev/null +++ b/homeassistant/components/climate/translations/nl.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Wijzig de HVAC-modus op {entity_name}", + "set_preset_mode": "Wijzig voorinstelling op {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} is ingesteld op een specifieke HVAC-modus", + "is_preset_mode": "{entity_name} is ingesteld op een specifieke vooraf ingestelde modus" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} gemeten vochtigheid veranderd", + "current_temperature_changed": "{entity_name} gemeten temperatuur veranderd", + "hvac_mode_changed": "{entity_name} HVAC-modus gewijzigd" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "Koelen", + "dry": "Droog", + "fan_only": "Alleen ventilatie", + "heat": "Verwarmen", + "heat_cool": "Verwarmen/Koelen", + "off": "Uit" + } + }, + "title": "Klimaat" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/nn.json b/homeassistant/components/climate/translations/nn.json new file mode 100644 index 00000000000..12a5e879b78 --- /dev/null +++ b/homeassistant/components/climate/translations/nn.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Kj\u00f8le", + "dry": "T\u00f8rr", + "fan_only": "Berre vifte", + "heat": "Varme", + "heat_cool": "Oppvarming/Nedkj\u00f8ling", + "off": "Av" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/no.json b/homeassistant/components/climate/translations/no.json new file mode 100644 index 00000000000..4e9722bb207 --- /dev/null +++ b/homeassistant/components/climate/translations/no.json @@ -0,0 +1,28 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Endre HVAC-modus p\u00e5 {entity_name}", + "set_preset_mode": "Endre forh\u00e5ndsinnstilling p\u00e5 {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} er satt til en spesifikk HVAC-modus", + "is_preset_mode": "{entity_name} er satt til en spesifikk forh\u00e5ndsinnstilt modus" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} m\u00e5lt fuktighet er endret", + "current_temperature_changed": "{entity_name} m\u00e5lt temperatur er endret", + "hvac_mode_changed": "{entity_name} HVAC-modus er endret" + } + }, + "state": { + "_": { + "auto": "Auto", + "cool": "Kj\u00f8le", + "dry": "T\u00f8rr", + "fan_only": "Kun vifte", + "heat": "Varme", + "heat_cool": "Varme/kj\u00f8lig" + } + }, + "title": "Klima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/pl.json b/homeassistant/components/climate/translations/pl.json new file mode 100644 index 00000000000..50f882dcd80 --- /dev/null +++ b/homeassistant/components/climate/translations/pl.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "zmie\u0144 tryb HVAC na {entity_name}", + "set_preset_mode": "zmie\u0144 ustawienia dla {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "na {entity_name} jest ustawiony okre\u015blony tryb HVAC", + "is_preset_mode": "na {entity_name} jest okre\u015blone ustawienie" + }, + "trigger_type": { + "current_humidity_changed": "zmieni si\u0119 zmierzona wilgotno\u015b\u0107 {entity_name}", + "current_temperature_changed": "zmieni si\u0119 zmierzona temperatura {entity_name}", + "hvac_mode_changed": "zmieni si\u0119 tryb HVAC {entity_name}" + } + }, + "state": { + "_": { + "auto": "automatyczny", + "cool": "ch\u0142odzenie", + "dry": "osuszanie", + "fan_only": "tylko wentylator", + "heat": "grzanie", + "heat_cool": "grzanie/ch\u0142odzenie", + "off": "wy\u0142\u0105czony" + } + }, + "title": "Klimat" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/pt-BR.json b/homeassistant/components/climate/translations/pt-BR.json new file mode 100644 index 00000000000..e920caf2a87 --- /dev/null +++ b/homeassistant/components/climate/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Autom\u00e1tico", + "cool": "Frio", + "dry": "Seco", + "fan_only": "Apenas ventilador", + "heat": "Quente", + "heat_cool": "Quente/Frio", + "off": "Desligado" + } + }, + "title": "Clima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/pt.json b/homeassistant/components/climate/translations/pt.json new file mode 100644 index 00000000000..5acd785c644 --- /dev/null +++ b/homeassistant/components/climate/translations/pt.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Frio", + "dry": "Desumidificar", + "fan_only": "Apenas ventilar", + "heat": "Quente", + "heat_cool": "Calor / Frio", + "off": "Desligado" + } + }, + "title": "Climatiza\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ro.json b/homeassistant/components/climate/translations/ro.json new file mode 100644 index 00000000000..bb39b84b03d --- /dev/null +++ b/homeassistant/components/climate/translations/ro.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Auto", + "cool": "Rece", + "dry": "Uscat", + "fan_only": "Numai ventilator", + "heat": "C\u0103ldur\u0103", + "heat_cool": "\u00cenc\u0103lzire / R\u0103cire", + "off": "Oprit" + } + }, + "title": "Clima" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ru.json b/homeassistant/components/climate/translations/ru.json new file mode 100644 index 00000000000..507686629e9 --- /dev/null +++ b/homeassistant/components/climate/translations/ru.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \"{entity_name}\"", + "set_preset_mode": "\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \"{entity_name}\"" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b", + "is_preset_mode": "{entity_name} \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438", + "current_temperature_changed": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b", + "hvac_mode_changed": "{entity_name} \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b" + } + }, + "state": { + "_": { + "auto": "\u0410\u0432\u0442\u043e", + "cool": "\u041e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435", + "dry": "\u041e\u0441\u0443\u0448\u0435\u043d\u0438\u0435", + "fan_only": "\u0412\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u044f", + "heat": "\u041e\u0431\u043e\u0433\u0440\u0435\u0432", + "heat_cool": "\u041e\u0431\u043e\u0433\u0440\u0435\u0432 / \u041e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435", + "off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e" + } + }, + "title": "\u041a\u043b\u0438\u043c\u0430\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/sk.json b/homeassistant/components/climate/translations/sk.json new file mode 100644 index 00000000000..15536f9b879 --- /dev/null +++ b/homeassistant/components/climate/translations/sk.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Automatika", + "cool": "Chladenie", + "dry": "Su\u0161enie", + "fan_only": "Iba ventil\u00e1tor", + "heat": "K\u00farenie", + "heat_cool": "Vykurovanie / Chladenie", + "off": "Vypnut\u00e9" + } + }, + "title": "Klimatiz\u00e1cia" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/sl.json b/homeassistant/components/climate/translations/sl.json new file mode 100644 index 00000000000..037f807b42d --- /dev/null +++ b/homeassistant/components/climate/translations/sl.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "Spremeni na\u010din HVAC na {entity_name}", + "set_preset_mode": "Spremenite prednastavitev na {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} je nastavljen na dolo\u010den na\u010din HVAC", + "is_preset_mode": "{entity_name} je nastavljen na dolo\u010den prednastavljeni na\u010din" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} spremenjena izmerjena vla\u017enost", + "current_temperature_changed": "{entity_name} izmerjena temperaturna sprememba", + "hvac_mode_changed": "{entity_name} HVAC na\u010din spremenjen" + } + }, + "state": { + "_": { + "auto": "Samodejno", + "cool": "Mrzlo", + "dry": "Suho", + "fan_only": "Samo ventilator", + "heat": "Toplo", + "heat_cool": "Gretje/Hlajenje", + "off": "Izklju\u010den" + } + }, + "title": "Klimat" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/sv.json b/homeassistant/components/climate/translations/sv.json new file mode 100644 index 00000000000..a5dcd72d66b --- /dev/null +++ b/homeassistant/components/climate/translations/sv.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "\u00c4ndra HVAC-l\u00e4ge p\u00e5 {entity_name}", + "set_preset_mode": "\u00c4ndra f\u00f6rinst\u00e4llning p\u00e5 {entity_name}" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} \u00e4r inst\u00e4lld p\u00e5 ett specifikt HVAC-l\u00e4ge", + "is_preset_mode": "{entity_name} \u00e4r inst\u00e4lld p\u00e5 ett specifikt f\u00f6rinst\u00e4llt l\u00e4ge" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} uppm\u00e4tt fuktighet har \u00e4ndrats", + "current_temperature_changed": "{entity_name} uppm\u00e4tt temperatur har \u00e4ndrats", + "hvac_mode_changed": "{entity_name} HVAC-l\u00e4ge har \u00e4ndrats" + } + }, + "state": { + "_": { + "auto": "Automatisk", + "cool": "Kyla", + "dry": "Avfuktning", + "fan_only": "Endast fl\u00e4kt", + "heat": "V\u00e4rme", + "heat_cool": "V\u00e4rme/Kyla", + "off": "Av" + } + }, + "title": "Klimat" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/ta.json b/homeassistant/components/climate/translations/ta.json new file mode 100644 index 00000000000..17d24535cb8 --- /dev/null +++ b/homeassistant/components/climate/translations/ta.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "auto": "\u0ba4\u0bbe\u0ba9\u0bbe\u0b95 \u0b87\u0baf\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd", + "cool": "\u0b95\u0bc1\u0bb3\u0bbf\u0bb0\u0bcd", + "dry": "\u0b89\u0bb2\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4", + "fan_only": "\u0bb5\u0bbf\u0b9a\u0bbf\u0bb1\u0bbf \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd", + "heat": "\u0bb5\u0bc6\u0baa\u0bcd\u0baa\u0bae\u0bcd", + "off": "\u0b86\u0b83\u0baa\u0bcd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/te.json b/homeassistant/components/climate/translations/te.json new file mode 100644 index 00000000000..ba01524303e --- /dev/null +++ b/homeassistant/components/climate/translations/te.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "auto": "\u0c26\u0c3e\u0c28\u0c02\u0c24\u0c1f \u0c05\u0c26\u0c47", + "cool": "\u0c1a\u0c32\u0c4d\u0c32\u0c17\u0c3e", + "dry": "\u0c2a\u0c4a\u0c21\u0c3f", + "fan_only": "\u0c2b\u0c4d\u0c2f\u0c3e\u0c28\u0c4d \u0c2e\u0c3e\u0c24\u0c4d\u0c30\u0c2e\u0c47", + "heat": "\u0c35\u0c46\u0c1a\u0c4d\u0c1a\u0c17\u0c3e", + "off": "\u0c06\u0c2b\u0c4d" + } + }, + "title": "\u0c35\u0c3e\u0c24\u0c3e\u0c35\u0c30\u0c23\u0c02" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/th.json b/homeassistant/components/climate/translations/th.json new file mode 100644 index 00000000000..73c9f9e1d57 --- /dev/null +++ b/homeassistant/components/climate/translations/th.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34", + "cool": "\u0e40\u0e22\u0e47\u0e19", + "dry": "\u0e41\u0e2b\u0e49\u0e07", + "fan_only": "\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e1e\u0e31\u0e14\u0e25\u0e21", + "heat": "\u0e23\u0e49\u0e2d\u0e19", + "heat_cool": "\u0e23\u0e49\u0e2d\u0e19/\u0e40\u0e22\u0e47\u0e19", + "off": "\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e2a\u0e20\u0e32\u0e1e\u0e2d\u0e32\u0e01\u0e32\u0e28" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/tr.json b/homeassistant/components/climate/translations/tr.json new file mode 100644 index 00000000000..bfac4a6e7c6 --- /dev/null +++ b/homeassistant/components/climate/translations/tr.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "Otomatik", + "cool": "Serin", + "dry": "Kuru", + "fan_only": "Sadece fan", + "heat": "S\u0131cak", + "heat_cool": "Is\u0131tma / So\u011futma", + "off": "Kapal\u0131" + } + }, + "title": "\u0130klim" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/uk.json b/homeassistant/components/climate/translations/uk.json new file mode 100644 index 00000000000..227e0e1f4ef --- /dev/null +++ b/homeassistant/components/climate/translations/uk.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0438\u0439", + "cool": "\u041e\u0445\u043e\u043b\u043e\u0434\u0436\u0435\u043d\u043d\u044f", + "dry": "\u041e\u0441\u0443\u0448\u0435\u043d\u043d\u044f", + "fan_only": "\u041b\u0438\u0448\u0435 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440", + "heat": "\u041e\u0431\u0456\u0433\u0440\u0456\u0432\u0430\u043d\u043d\u044f", + "heat_cool": "\u041e\u043f\u0430\u043b\u0435\u043d\u043d\u044f/\u041e\u0445\u043e\u043b\u043e\u0434\u0436\u0435\u043d\u043d\u044f", + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u041a\u043b\u0456\u043c\u0430\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/vi.json b/homeassistant/components/climate/translations/vi.json new file mode 100644 index 00000000000..f5b9bd1e723 --- /dev/null +++ b/homeassistant/components/climate/translations/vi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "auto": "T\u01b0\u0323 \u0111\u00f4\u0323ng", + "cool": "M\u00e1t m\u1ebb", + "dry": "Kh\u00f4", + "fan_only": "Ch\u1ec9 c\u00f3 qu\u1ea1t", + "heat": "Nhi\u1ec7t", + "heat_cool": "N\u00f3ng/L\u1ea1nh", + "off": "T\u1eaft" + } + }, + "title": "Kh\u00ed h\u1eadu" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/zh-Hans.json b/homeassistant/components/climate/translations/zh-Hans.json new file mode 100644 index 00000000000..9927cd679ae --- /dev/null +++ b/homeassistant/components/climate/translations/zh-Hans.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "\u66f4\u6539 {entity_name} \u7a7a\u8c03\u6a21\u5f0f", + "set_preset_mode": "\u66f4\u6539 {entity_name} \u9884\u8bbe\u6a21\u5f0f" + }, + "condition_type": { + "is_hvac_mode": "{entity_name} \u88ab\u8bbe\u4e3a\u6307\u5b9a\u7684\u7a7a\u8c03\u6a21\u5f0f", + "is_preset_mode": "{entity_name} \u88ab\u8bbe\u4e3a\u6307\u5b9a\u7684\u9884\u8bbe\u6a21\u5f0f" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name} \u6d4b\u91cf\u7684\u5ba4\u5185\u6e7f\u5ea6\u53d8\u5316", + "current_temperature_changed": "{entity_name} \u6d4b\u91cf\u7684\u5ba4\u5185\u6e29\u5ea6\u53d8\u5316", + "hvac_mode_changed": "{entity_name} \u7684\u8fd0\u884c\u6a21\u5f0f\u53d8\u5316" + } + }, + "state": { + "_": { + "auto": "\u81ea\u52a8", + "cool": "\u5236\u51b7", + "dry": "\u9664\u6e7f", + "fan_only": "\u4ec5\u9001\u98ce", + "heat": "\u5236\u70ed", + "heat_cool": "\u5236\u70ed/\u5236\u51b7", + "off": "\u5173" + } + }, + "title": "\u7a7a\u8c03" +} \ No newline at end of file diff --git a/homeassistant/components/climate/translations/zh-Hant.json b/homeassistant/components/climate/translations/zh-Hant.json new file mode 100644 index 00000000000..e8f43f589ee --- /dev/null +++ b/homeassistant/components/climate/translations/zh-Hant.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "set_hvac_mode": "\u8b8a\u66f4{entity_name} HVAC \u6a21\u5f0f", + "set_preset_mode": "\u8b8a\u66f4{entity_name}\u8a2d\u5b9a\u6a21\u5f0f" + }, + "condition_type": { + "is_hvac_mode": "{entity_name}\u8a2d\u5b9a\u70ba\u6307\u5b9a HVAC \u6a21\u5f0f", + "is_preset_mode": "{entity_name}\u8a2d\u5b9a\u70ba\u6307\u5b9a\u8a2d\u5b9a\u6a21\u5f0f" + }, + "trigger_type": { + "current_humidity_changed": "{entity_name}\u91cf\u6e2c\u6fd5\u5ea6\u5df2\u8b8a\u66f4", + "current_temperature_changed": "{entity_name}\u91cf\u6e2c\u6eab\u5ea6\u5df2\u8b8a\u66f4", + "hvac_mode_changed": "{entity_name} HVAC \u6a21\u5f0f\u5df2\u8b8a\u66f4" + } + }, + "state": { + "_": { + "auto": "\u81ea\u52d5", + "cool": "\u51b7\u6c23", + "dry": "\u9664\u6fd5\u6a21\u5f0f", + "fan_only": "\u50c5\u9001\u98a8", + "heat": "\u6696\u6c23", + "heat_cool": "\u6696\u6c23/\u51b7\u6c23", + "off": "\u95dc\u9589" + } + }, + "title": "\u6eab\u63a7" +} \ No newline at end of file diff --git a/homeassistant/components/cloud/alexa_config.py b/homeassistant/components/cloud/alexa_config.py index 4085233436e..a45469c8f97 100644 --- a/homeassistant/components/cloud/alexa_config.py +++ b/homeassistant/components/cloud/alexa_config.py @@ -13,7 +13,7 @@ from homeassistant.components.alexa import ( errors as alexa_errors, state_report as alexa_state_report, ) -from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES +from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES, HTTP_BAD_REQUEST from homeassistant.core import callback from homeassistant.helpers import entity_registry from homeassistant.helpers.event import async_call_later @@ -114,14 +114,14 @@ class AlexaConfig(alexa_config.AbstractConfig): resp = await cloud_api.async_alexa_access_token(self._cloud) body = await resp.json() - if resp.status == 400: + if resp.status == HTTP_BAD_REQUEST: if body["reason"] in ("RefreshTokenNotFound", "UnknownRegion"): if self.should_report_state: await self._prefs.async_update(alexa_report_state=False) self.hass.components.persistent_notification.async_create( - "There was an error reporting state to Alexa ({}). " + f"There was an error reporting state to Alexa ({body['reason']}). " "Please re-link your Alexa skill via the Alexa app to " - "continue using it.".format(body["reason"]), + "continue using it.", "Alexa state reporting disabled", "cloud_alexa_report", ) diff --git a/homeassistant/components/cloud/binary_sensor.py b/homeassistant/components/cloud/binary_sensor.py index 056105f8071..c2974678faa 100644 --- a/homeassistant/components/cloud/binary_sensor.py +++ b/homeassistant/components/cloud/binary_sensor.py @@ -62,7 +62,7 @@ class CloudRemoteBinary(BinarySensorDevice): async def async_state_update(data): """Update callback.""" await asyncio.sleep(WAIT_UNTIL_CHANGE) - self.async_schedule_update_ha_state() + self.async_write_ha_state() self._unsub_dispatcher = async_dispatcher_connect( self.hass, DISPATCHER_REMOTE_UPDATE, async_state_update diff --git a/homeassistant/components/cloud/client.py b/homeassistant/components/cloud/client.py index ef73d4356d5..a17f536db72 100644 --- a/homeassistant/components/cloud/client.py +++ b/homeassistant/components/cloud/client.py @@ -12,6 +12,7 @@ from homeassistant.components.alexa import ( smart_home as alexa_sh, ) from homeassistant.components.google_assistant import const as gc, smart_home as ga +from homeassistant.const import HTTP_OK from homeassistant.core import Context, callback from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.typing import HomeAssistantType @@ -174,7 +175,7 @@ class CloudClient(Interface): break if found is None: - return {"status": 200} + return {"status": HTTP_OK} request = MockRequest( content=payload["body"].encode("utf-8"), diff --git a/homeassistant/components/cloud/google_config.py b/homeassistant/components/cloud/google_config.py index 25c6adeac5a..9b94b77ca45 100644 --- a/homeassistant/components/cloud/google_config.py +++ b/homeassistant/components/cloud/google_config.py @@ -6,7 +6,12 @@ from hass_nabucasa import cloud_api from hass_nabucasa.google_report_state import ErrorResponse from homeassistant.components.google_assistant.helpers import AbstractConfig -from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES +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): @@ -125,7 +131,7 @@ class CloudGoogleConfig(AbstractConfig): async def _async_request_sync_devices(self, agent_user_id: str): """Trigger a sync with Google.""" if self._sync_entities_lock.locked(): - return 200 + return HTTP_OK async with self._sync_entities_lock: resp = await cloud_api.async_google_actions_request_sync(self._cloud) @@ -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/components/cloud/http_api.py b/homeassistant/components/cloud/http_api.py index 69b5796e8ba..c3809f76b8c 100644 --- a/homeassistant/components/cloud/http_api.py +++ b/homeassistant/components/cloud/http_api.py @@ -19,6 +19,7 @@ from homeassistant.components.google_assistant import helpers as google_helpers from homeassistant.components.http import HomeAssistantView from homeassistant.components.http.data_validator import RequestDataValidator from homeassistant.components.websocket_api import const as ws_const +from homeassistant.const import HTTP_BAD_REQUEST, HTTP_INTERNAL_SERVER_ERROR, HTTP_OK from homeassistant.core import callback from .const import ( @@ -63,11 +64,11 @@ SCHEMA_WS_HOOK_DELETE = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend( _CLOUD_ERRORS = { InvalidTrustedNetworks: ( - 500, + HTTP_INTERNAL_SERVER_ERROR, "Remote UI not compatible with 127.0.0.1/::1 as a trusted network.", ), InvalidTrustedProxies: ( - 500, + HTTP_INTERNAL_SERVER_ERROR, "Remote UI not compatible with 127.0.0.1/::1 as trusted proxies.", ), } @@ -108,13 +109,22 @@ async def async_setup(hass): _CLOUD_ERRORS.update( { - auth.UserNotFound: (400, "User does not exist."), - auth.UserNotConfirmed: (400, "Email not confirmed."), - auth.UserExists: (400, "An account with the given email already exists."), + auth.UserNotFound: (HTTP_BAD_REQUEST, "User does not exist."), + auth.UserNotConfirmed: (HTTP_BAD_REQUEST, "Email not confirmed."), + auth.UserExists: ( + HTTP_BAD_REQUEST, + "An account with the given email already exists.", + ), auth.Unauthenticated: (401, "Authentication failed."), - auth.PasswordChangeRequired: (400, "Password change required."), + auth.PasswordChangeRequired: ( + HTTP_BAD_REQUEST, + "Password change required.", + ), asyncio.TimeoutError: (502, "Unable to reach the Home Assistant cloud."), - aiohttp.ClientError: (500, "Error making internal request"), + aiohttp.ClientError: ( + HTTP_INTERNAL_SERVER_ERROR, + "Error making internal request", + ), } ) @@ -321,7 +331,7 @@ async def websocket_subscription(hass, connection, msg): with async_timeout.timeout(REQUEST_TIMEOUT): response = await cloud.fetch_subscription_info() - if response.status != 200: + if response.status != HTTP_OK: connection.send_message( websocket_api.error_message( msg["id"], "request_failed", "Failed to request subscription" diff --git a/homeassistant/components/cloudflare/manifest.json b/homeassistant/components/cloudflare/manifest.json index 44beaaa213a..d22d526d01c 100644 --- a/homeassistant/components/cloudflare/manifest.json +++ b/homeassistant/components/cloudflare/manifest.json @@ -3,6 +3,5 @@ "name": "Cloudflare", "documentation": "https://www.home-assistant.io/integrations/cloudflare", "requirements": ["pycfdns==0.0.1"], - "dependencies": [], "codeowners": ["@ludeeus"] } diff --git a/homeassistant/components/cmus/manifest.json b/homeassistant/components/cmus/manifest.json index 22585f7766b..5a062996ab9 100644 --- a/homeassistant/components/cmus/manifest.json +++ b/homeassistant/components/cmus/manifest.json @@ -3,6 +3,5 @@ "name": "cmus", "documentation": "https://www.home-assistant.io/integrations/cmus", "requirements": ["pycmus==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/cmus/media_player.py b/homeassistant/components/cmus/media_player.py index 3daf0bac828..e9b9513479f 100644 --- a/homeassistant/components/cmus/media_player.py +++ b/homeassistant/components/cmus/media_player.py @@ -61,8 +61,8 @@ def setup_platform(hass, config, add_entities, discover_info=None): host = config.get(CONF_HOST) password = config.get(CONF_PASSWORD) - port = config.get(CONF_PORT) - name = config.get(CONF_NAME) + port = config[CONF_PORT] + name = config[CONF_NAME] try: cmus_remote = CmusDevice(host, password, port, name) diff --git a/homeassistant/components/co2signal/manifest.json b/homeassistant/components/co2signal/manifest.json index 5caab7fe89c..9b7aa80e2cc 100644 --- a/homeassistant/components/co2signal/manifest.json +++ b/homeassistant/components/co2signal/manifest.json @@ -3,6 +3,5 @@ "name": "CO2 Signal", "documentation": "https://www.home-assistant.io/integrations/co2signal", "requirements": ["co2signal==0.4.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/co2signal/sensor.py b/homeassistant/components/co2signal/sensor.py index 31a06c94120..d7f78f9c362 100644 --- a/homeassistant/components/co2signal/sensor.py +++ b/homeassistant/components/co2signal/sensor.py @@ -10,6 +10,7 @@ from homeassistant.const import ( CONF_LATITUDE, CONF_LONGITUDE, CONF_TOKEN, + ENERGY_KILO_WATT_HOUR, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -25,7 +26,7 @@ MSG_LOCATION = ( "For the coordinates, " "you need to use both latitude and longitude." ) -CO2_INTENSITY_UNIT = "CO2eq/kWh" +CO2_INTENSITY_UNIT = f"CO2eq/{ENERGY_KILO_WATT_HOUR}" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_TOKEN): cv.string, diff --git a/homeassistant/components/coinbase/__init__.py b/homeassistant/components/coinbase/__init__.py index d52c0867e24..9fd99e993b6 100644 --- a/homeassistant/components/coinbase/__init__.py +++ b/homeassistant/components/coinbase/__init__.py @@ -48,10 +48,10 @@ def setup(hass, config): Will automatically setup sensors to support wallets discovered on the network. """ - api_key = config[DOMAIN].get(CONF_API_KEY) - api_secret = config[DOMAIN].get(CONF_API_SECRET) + api_key = config[DOMAIN][CONF_API_KEY] + api_secret = config[DOMAIN][CONF_API_SECRET] account_currencies = config[DOMAIN].get(CONF_ACCOUNT_CURRENCIES) - exchange_currencies = config[DOMAIN].get(CONF_EXCHANGE_CURRENCIES) + exchange_currencies = config[DOMAIN][CONF_EXCHANGE_CURRENCIES] hass.data[DATA_COINBASE] = coinbase_data = CoinbaseData(api_key, api_secret) diff --git a/homeassistant/components/coinbase/manifest.json b/homeassistant/components/coinbase/manifest.json index dfd05475703..8d134792bbd 100644 --- a/homeassistant/components/coinbase/manifest.json +++ b/homeassistant/components/coinbase/manifest.json @@ -3,6 +3,5 @@ "name": "Coinbase", "documentation": "https://www.home-assistant.io/integrations/coinbase", "requirements": ["coinbase==2.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/coinbase/sensor.py b/homeassistant/components/coinbase/sensor.py index a13dfef11da..973c3d39159 100644 --- a/homeassistant/components/coinbase/sensor.py +++ b/homeassistant/components/coinbase/sensor.py @@ -82,7 +82,7 @@ class AccountSensor(Entity): """Get the latest state of the sensor.""" self._coinbase_data.update() for account in self._coinbase_data.accounts["data"]: - if self._name == "Coinbase {}".format(account["name"]): + if self._name == f"Coinbase {account['name']}": self._state = account["balance"]["amount"] self._native_balance = account["native_balance"]["amount"] self._native_currency = account["native_balance"]["currency"] diff --git a/homeassistant/components/coinmarketcap/manifest.json b/homeassistant/components/coinmarketcap/manifest.json index 2aa7e64587a..e3f827f2718 100644 --- a/homeassistant/components/coinmarketcap/manifest.json +++ b/homeassistant/components/coinmarketcap/manifest.json @@ -3,6 +3,5 @@ "name": "CoinMarketCap", "documentation": "https://www.home-assistant.io/integrations/coinmarketcap", "requirements": ["coinmarketcap==5.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/coinmarketcap/sensor.py b/homeassistant/components/coinmarketcap/sensor.py index ca166aa793a..2ae3de49817 100644 --- a/homeassistant/components/coinmarketcap/sensor.py +++ b/homeassistant/components/coinmarketcap/sensor.py @@ -42,9 +42,9 @@ SCAN_INTERVAL = timedelta(minutes=15) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Optional(CONF_CURRENCY_ID, default=DEFAULT_CURRENCY_ID): cv.positive_int, - vol.Optional( - CONF_DISPLAY_CURRENCY, default=DEFAULT_DISPLAY_CURRENCY - ): cv.string, + vol.Optional(CONF_DISPLAY_CURRENCY, default=DEFAULT_DISPLAY_CURRENCY): vol.All( + cv.string, vol.Upper + ), vol.Optional( CONF_DISPLAY_CURRENCY_DECIMALS, default=DEFAULT_DISPLAY_CURRENCY_DECIMALS ): vol.All(vol.Coerce(int), vol.Range(min=1)), @@ -54,9 +54,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the CoinMarketCap sensor.""" - currency_id = config.get(CONF_CURRENCY_ID) - display_currency = config.get(CONF_DISPLAY_CURRENCY).upper() - display_currency_decimals = config.get(CONF_DISPLAY_CURRENCY_DECIMALS) + currency_id = config[CONF_CURRENCY_ID] + display_currency = config[CONF_DISPLAY_CURRENCY] + display_currency_decimals = config[CONF_DISPLAY_CURRENCY_DECIMALS] try: CoinMarketCapData(currency_id, display_currency).update() diff --git a/homeassistant/components/comed_hourly_pricing/manifest.json b/homeassistant/components/comed_hourly_pricing/manifest.json index 27698a7b94a..e0d2b2bd3b4 100644 --- a/homeassistant/components/comed_hourly_pricing/manifest.json +++ b/homeassistant/components/comed_hourly_pricing/manifest.json @@ -2,7 +2,5 @@ "domain": "comed_hourly_pricing", "name": "ComEd Hourly Pricing", "documentation": "https://www.home-assistant.io/integrations/comed_hourly_pricing", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/comfoconnect/__init__.py b/homeassistant/components/comfoconnect/__init__.py index f1fd67cc4bb..2a132837388 100644 --- a/homeassistant/components/comfoconnect/__init__.py +++ b/homeassistant/components/comfoconnect/__init__.py @@ -52,11 +52,11 @@ def setup(hass, config): """Set up the ComfoConnect bridge.""" conf = config[DOMAIN] - host = conf.get(CONF_HOST) - name = conf.get(CONF_NAME) - token = conf.get(CONF_TOKEN) - user_agent = conf.get(CONF_USER_AGENT) - pin = conf.get(CONF_PIN) + host = conf[CONF_HOST] + name = conf[CONF_NAME] + token = conf[CONF_TOKEN] + user_agent = conf[CONF_USER_AGENT] + pin = conf[CONF_PIN] # Run discovery on the configured ip bridges = Bridge.discover(host) diff --git a/homeassistant/components/comfoconnect/fan.py b/homeassistant/components/comfoconnect/fan.py index 432b25ac602..b5eac4f9afe 100644 --- a/homeassistant/components/comfoconnect/fan.py +++ b/homeassistant/components/comfoconnect/fan.py @@ -44,10 +44,12 @@ class ComfoConnectFan(FanEntity): async def async_added_to_hass(self): """Register for sensor updates.""" _LOGGER.debug("Registering for fan speed") - async_dispatcher_connect( - self.hass, - SIGNAL_COMFOCONNECT_UPDATE_RECEIVED.format(SENSOR_FAN_SPEED_MODE), - self._handle_update, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_COMFOCONNECT_UPDATE_RECEIVED.format(SENSOR_FAN_SPEED_MODE), + self._handle_update, + ) ) await self.hass.async_add_executor_job( self._ccb.comfoconnect.register_sensor, SENSOR_FAN_SPEED_MODE diff --git a/homeassistant/components/comfoconnect/manifest.json b/homeassistant/components/comfoconnect/manifest.json index c55b6895e80..966de82f219 100644 --- a/homeassistant/components/comfoconnect/manifest.json +++ b/homeassistant/components/comfoconnect/manifest.json @@ -3,6 +3,5 @@ "name": "Zehnder ComfoAir Q", "documentation": "https://www.home-assistant.io/integrations/comfoconnect", "requirements": ["pycomfoconnect==0.3"], - "dependencies": [], "codeowners": ["@michaelarnauts"] } diff --git a/homeassistant/components/comfoconnect/sensor.py b/homeassistant/components/comfoconnect/sensor.py index 5c8c0d6a75c..cea09e97dba 100644 --- a/homeassistant/components/comfoconnect/sensor.py +++ b/homeassistant/components/comfoconnect/sensor.py @@ -234,10 +234,12 @@ class ComfoConnectSensor(Entity): _LOGGER.debug( "Registering for sensor %s (%d)", self._sensor_type, self._sensor_id ) - async_dispatcher_connect( - self.hass, - SIGNAL_COMFOCONNECT_UPDATE_RECEIVED.format(self._sensor_id), - self._handle_update, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_COMFOCONNECT_UPDATE_RECEIVED.format(self._sensor_id), + self._handle_update, + ) ) await self.hass.async_add_executor_job( self._ccb.comfoconnect.register_sensor, self._sensor_id diff --git a/homeassistant/components/command_line/manifest.json b/homeassistant/components/command_line/manifest.json index 9d625ebcc7e..ffb1a33ed7b 100644 --- a/homeassistant/components/command_line/manifest.json +++ b/homeassistant/components/command_line/manifest.json @@ -2,7 +2,5 @@ "domain": "command_line", "name": "Command Line", "documentation": "https://www.home-assistant.io/integrations/command_line", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/command_line/sensor.py b/homeassistant/components/command_line/sensor.py index c1fb5f1d21e..f7ae21ab704 100644 --- a/homeassistant/components/command_line/sensor.py +++ b/homeassistant/components/command_line/sensor.py @@ -1,5 +1,5 @@ """Allows to configure custom shell commands to turn a value for a sensor.""" -import collections +from collections.abc import Mapping from datetime import timedelta import json import logging @@ -106,7 +106,7 @@ class CommandSensor(Entity): if value: try: json_dict = json.loads(value) - if isinstance(json_dict, collections.Mapping): + if isinstance(json_dict, Mapping): self._attributes = { k: json_dict[k] for k in self._json_attributes diff --git a/homeassistant/components/concord232/alarm_control_panel.py b/homeassistant/components/concord232/alarm_control_panel.py index 81a54a182d4..afb7e23e8fc 100644 --- a/homeassistant/components/concord232/alarm_control_panel.py +++ b/homeassistant/components/concord232/alarm_control_panel.py @@ -46,11 +46,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Concord232 alarm control panel platform.""" - name = config.get(CONF_NAME) + name = config[CONF_NAME] code = config.get(CONF_CODE) - mode = config.get(CONF_MODE) - host = config.get(CONF_HOST) - port = config.get(CONF_PORT) + mode = config[CONF_MODE] + host = config[CONF_HOST] + port = config[CONF_PORT] url = f"http://{host}:{port}" diff --git a/homeassistant/components/concord232/binary_sensor.py b/homeassistant/components/concord232/binary_sensor.py index 2d119e2cf86..326ac799f06 100644 --- a/homeassistant/components/concord232/binary_sensor.py +++ b/homeassistant/components/concord232/binary_sensor.py @@ -44,10 +44,10 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Concord232 binary sensor platform.""" - host = config.get(CONF_HOST) - port = config.get(CONF_PORT) - exclude = config.get(CONF_EXCLUDE_ZONES) - zone_types = config.get(CONF_ZONE_TYPES) + host = config[CONF_HOST] + port = config[CONF_PORT] + exclude = config[CONF_EXCLUDE_ZONES] + zone_types = config[CONF_ZONE_TYPES] sensors = [] try: diff --git a/homeassistant/components/concord232/manifest.json b/homeassistant/components/concord232/manifest.json index e0060490cfe..97ae62bc3b0 100644 --- a/homeassistant/components/concord232/manifest.json +++ b/homeassistant/components/concord232/manifest.json @@ -3,6 +3,5 @@ "name": "Concord232", "documentation": "https://www.home-assistant.io/integrations/concord232", "requirements": ["concord232==0.15"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/config/__init__.py b/homeassistant/components/config/__init__.py index 682e23dd14c..d7a257b1d9b 100644 --- a/homeassistant/components/config/__init__.py +++ b/homeassistant/components/config/__init__.py @@ -6,7 +6,12 @@ import os import voluptuous as vol from homeassistant.components.http import HomeAssistantView -from homeassistant.const import CONF_ID, EVENT_COMPONENT_LOADED +from homeassistant.const import ( + CONF_ID, + EVENT_COMPONENT_LOADED, + HTTP_BAD_REQUEST, + HTTP_NOT_FOUND, +) from homeassistant.core import callback from homeassistant.exceptions import HomeAssistantError from homeassistant.setup import ATTR_COMPONENT @@ -120,7 +125,7 @@ class BaseEditConfigView(HomeAssistantView): value = self._get_value(hass, current, config_key) if value is None: - return self.json_message("Resource not found", 404) + return self.json_message("Resource not found", HTTP_NOT_FOUND) return self.json(value) @@ -129,12 +134,12 @@ class BaseEditConfigView(HomeAssistantView): try: data = await request.json() except ValueError: - return self.json_message("Invalid JSON specified", 400) + return self.json_message("Invalid JSON specified", HTTP_BAD_REQUEST) try: self.key_schema(config_key) except vol.Invalid as err: - return self.json_message(f"Key malformed: {err}", 400) + return self.json_message(f"Key malformed: {err}", HTTP_BAD_REQUEST) hass = request.app["hass"] @@ -146,7 +151,7 @@ class BaseEditConfigView(HomeAssistantView): else: self.data_schema(data) except (vol.Invalid, HomeAssistantError) as err: - return self.json_message(f"Message malformed: {err}", 400) + return self.json_message(f"Message malformed: {err}", HTTP_BAD_REQUEST) path = hass.config.path(self.path) @@ -172,7 +177,7 @@ class BaseEditConfigView(HomeAssistantView): path = hass.config.path(self.path) if value is None: - return self.json_message("Resource not found", 404) + return self.json_message("Resource not found", HTTP_NOT_FOUND) self._delete_value(hass, current, config_key) await hass.async_add_executor_job(_write, path, current) diff --git a/homeassistant/components/config/config_entries.py b/homeassistant/components/config/config_entries.py index c69a3ed5739..584255764a3 100644 --- a/homeassistant/components/config/config_entries.py +++ b/homeassistant/components/config/config_entries.py @@ -7,6 +7,8 @@ from homeassistant import config_entries, data_entry_flow from homeassistant.auth.permissions.const import CAT_CONFIG_ENTRIES from homeassistant.components import websocket_api from homeassistant.components.http import HomeAssistantView +from homeassistant.const import HTTP_NOT_FOUND +from homeassistant.core import callback from homeassistant.exceptions import Unauthorized import homeassistant.helpers.config_validation as cv from homeassistant.helpers.data_entry_flow import ( @@ -27,6 +29,7 @@ async def async_setup(hass): hass.http.register_view(OptionManagerFlowIndexView(hass.config_entries.options)) hass.http.register_view(OptionManagerFlowResourceView(hass.config_entries.options)) + hass.components.websocket_api.async_register_command(config_entry_update) hass.components.websocket_api.async_register_command(config_entries_progress) hass.components.websocket_api.async_register_command(system_options_list) hass.components.websocket_api.async_register_command(system_options_update) @@ -63,30 +66,9 @@ class ConfigManagerEntryIndexView(HomeAssistantView): """List available config entries.""" hass = request.app["hass"] - results = [] - - for entry in hass.config_entries.async_entries(): - handler = config_entries.HANDLERS.get(entry.domain) - supports_options = ( - # Guard in case handler is no longer registered (custom compnoent etc) - handler is not None - # pylint: disable=comparison-with-callable - and handler.async_get_options_flow - != config_entries.ConfigFlow.async_get_options_flow - ) - results.append( - { - "entry_id": entry.entry_id, - "domain": entry.domain, - "title": entry.title, - "source": entry.source, - "state": entry.state, - "connection_class": entry.connection_class, - "supports_options": supports_options, - } - ) - - return self.json(results) + return self.json( + [entry_json(entry) for entry in hass.config_entries.async_entries()] + ) class ConfigManagerEntryResourceView(HomeAssistantView): @@ -105,7 +87,7 @@ class ConfigManagerEntryResourceView(HomeAssistantView): try: result = await hass.config_entries.async_remove(entry_id) except config_entries.UnknownEntry: - return self.json_message("Invalid entry specified", 404) + return self.json_message("Invalid entry specified", HTTP_NOT_FOUND) return self.json(result) @@ -286,6 +268,30 @@ async def system_options_update(hass, connection, msg): connection.send_result(msg["id"], entry.system_options.as_dict()) +@websocket_api.require_admin +@websocket_api.async_response +@websocket_api.websocket_command( + {"type": "config_entries/update", "entry_id": str, vol.Optional("title"): str} +) +async def config_entry_update(hass, connection, msg): + """Update config entry system options.""" + changes = dict(msg) + changes.pop("id") + changes.pop("type") + entry_id = changes.pop("entry_id") + + entry = hass.config_entries.async_get_entry(entry_id) + + if entry is None: + connection.send_error( + msg["id"], websocket_api.const.ERR_NOT_FOUND, "Config entry not found" + ) + return + + hass.config_entries.async_update_entry(entry, **changes) + connection.send_result(msg["id"], entry_json(entry)) + + @websocket_api.require_admin @websocket_api.async_response @websocket_api.websocket_command({"type": "config_entries/ignore_flow", "flow_id": str}) @@ -318,3 +324,25 @@ async def ignore_config_flow(hass, connection, msg): data={"unique_id": flow["context"]["unique_id"]}, ) connection.send_result(msg["id"]) + + +@callback +def entry_json(entry: config_entries.ConfigEntry) -> dict: + """Return JSON value of a config entry.""" + handler = config_entries.HANDLERS.get(entry.domain) + supports_options = ( + # Guard in case handler is no longer registered (custom compnoent etc) + handler is not None + # pylint: disable=comparison-with-callable + and handler.async_get_options_flow + != config_entries.ConfigFlow.async_get_options_flow + ) + return { + "entry_id": entry.entry_id, + "domain": entry.domain, + "title": entry.title, + "source": entry.source, + "state": entry.state, + "connection_class": entry.connection_class, + "supports_options": supports_options, + } diff --git a/homeassistant/components/config/manifest.json b/homeassistant/components/config/manifest.json index 5d5db4b0741..57dfd0d360a 100644 --- a/homeassistant/components/config/manifest.json +++ b/homeassistant/components/config/manifest.json @@ -2,7 +2,6 @@ "domain": "config", "name": "Configuration", "documentation": "https://www.home-assistant.io/integrations/config", - "requirements": [], "dependencies": ["http"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/config/scene.py b/homeassistant/components/config/scene.py index b380656c541..19cfb7cd31a 100644 --- a/homeassistant/components/config/scene.py +++ b/homeassistant/components/config/scene.py @@ -58,7 +58,7 @@ class EditSceneConfigView(EditIdBasedConfigView): elif cur_value[CONF_ID] == config_key: break else: - cur_value = dict() + cur_value = {} cur_value[CONF_ID] = config_key index = len(data) data.append(cur_value) diff --git a/homeassistant/components/config/zwave.py b/homeassistant/components/config/zwave.py index eaed84fe24d..b8331d8192b 100644 --- a/homeassistant/components/config/zwave.py +++ b/homeassistant/components/config/zwave.py @@ -6,7 +6,7 @@ from aiohttp.web import Response from homeassistant.components.http import HomeAssistantView from homeassistant.components.zwave import DEVICE_CONFIG_SCHEMA_ENTRY, const -from homeassistant.const import HTTP_NOT_FOUND, HTTP_OK +from homeassistant.const import HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_OK import homeassistant.core as ha import homeassistant.helpers.config_validation as cv @@ -51,7 +51,7 @@ class ZWaveLogView(HomeAssistantView): try: lines = int(request.query.get("lines", 0)) except ValueError: - return Response(text="Invalid datetime", status=400) + return Response(text="Invalid datetime", status=HTTP_BAD_REQUEST) hass = request.app["hass"] response = await hass.async_add_job(self._get_log, hass, lines) @@ -61,7 +61,7 @@ class ZWaveLogView(HomeAssistantView): def _get_log(self, hass, lines): """Retrieve the logfile content.""" logfilepath = hass.config.path(OZW_LOG_FILENAME) - with open(logfilepath, "r") as logfile: + with open(logfilepath) as logfile: data = (line.rstrip() for line in logfile) if lines == 0: loglines = list(data) @@ -226,7 +226,7 @@ class ZWaveProtectionView(HomeAssistantView): return self.json(protection_options) protections = node.get_protections() protection_options = { - "value_id": "{0:d}".format(list(protections)[0]), + "value_id": "{:d}".format(list(protections)[0]), "selected": node.get_protection_item(list(protections)[0]), "options": node.get_protection_items(list(protections)[0]), } diff --git a/homeassistant/components/configurator/manifest.json b/homeassistant/components/configurator/manifest.json index 56079887450..acd0fa80423 100644 --- a/homeassistant/components/configurator/manifest.json +++ b/homeassistant/components/configurator/manifest.json @@ -2,8 +2,6 @@ "domain": "configurator", "name": "Configurator", "documentation": "https://www.home-assistant.io/integrations/configurator", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/configurator/strings.json b/homeassistant/components/configurator/strings.json new file mode 100644 index 00000000000..570c18d3cde --- /dev/null +++ b/homeassistant/components/configurator/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Configurator", + "state": { + "_": { + "configure": "Configure", + "configured": "Configured" + } + } +} diff --git a/homeassistant/components/configurator/translations/af.json b/homeassistant/components/configurator/translations/af.json new file mode 100644 index 00000000000..494c8fb0293 --- /dev/null +++ b/homeassistant/components/configurator/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Stel op", + "configured": "Opgestel" + } + }, + "title": "Konfigureerder" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ar.json b/homeassistant/components/configurator/translations/ar.json new file mode 100644 index 00000000000..0e0be047a22 --- /dev/null +++ b/homeassistant/components/configurator/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u0625\u0639\u062f\u0627\u062f", + "configured": "\u062a\u0645 \u0627\u0644\u0625\u0639\u062f\u0627\u062f" + } + }, + "title": "\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/bg.json b/homeassistant/components/configurator/translations/bg.json new file mode 100644 index 00000000000..bf5990d8fce --- /dev/null +++ b/homeassistant/components/configurator/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435", + "configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d" + } + }, + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/bs.json b/homeassistant/components/configurator/translations/bs.json new file mode 100644 index 00000000000..643bd65489d --- /dev/null +++ b/homeassistant/components/configurator/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Podesite", + "configured": "Konfigurirano" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ca.json b/homeassistant/components/configurator/translations/ca.json new file mode 100644 index 00000000000..0a4ea1ab6fa --- /dev/null +++ b/homeassistant/components/configurator/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configurar", + "configured": "Configurat" + } + }, + "title": "Configurador" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/cs.json b/homeassistant/components/configurator/translations/cs.json new file mode 100644 index 00000000000..dcd1b4ee91e --- /dev/null +++ b/homeassistant/components/configurator/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Nakonfigurovat", + "configured": "Nakonfigurov\u00e1no" + } + }, + "title": "Konfigur\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/cy.json b/homeassistant/components/configurator/translations/cy.json new file mode 100644 index 00000000000..0712f69b211 --- /dev/null +++ b/homeassistant/components/configurator/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Ffurfweddu", + "configured": "Wedi'i ffurfweddu" + } + }, + "title": "Ffurfweddwr" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/da.json b/homeassistant/components/configurator/translations/da.json new file mode 100644 index 00000000000..476dac71ee3 --- /dev/null +++ b/homeassistant/components/configurator/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurer", + "configured": "Konfigureret" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/de.json b/homeassistant/components/configurator/translations/de.json new file mode 100644 index 00000000000..6fd69086bcd --- /dev/null +++ b/homeassistant/components/configurator/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurieren", + "configured": "Konfiguriert" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/el.json b/homeassistant/components/configurator/translations/el.json new file mode 100644 index 00000000000..a8242694284 --- /dev/null +++ b/homeassistant/components/configurator/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03ce\u03c3\u03c4\u03b5", + "configured": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03ce\u03b8\u03b7\u03ba\u03b5" + } + }, + "title": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03c4\u03ae\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/en.json b/homeassistant/components/configurator/translations/en.json new file mode 100644 index 00000000000..3a4b210f363 --- /dev/null +++ b/homeassistant/components/configurator/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configure", + "configured": "Configured" + } + }, + "title": "Configurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/es-419.json b/homeassistant/components/configurator/translations/es-419.json new file mode 100644 index 00000000000..dffb90e6d49 --- /dev/null +++ b/homeassistant/components/configurator/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configurar", + "configured": "Configurado" + } + }, + "title": "Configurador" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/es.json b/homeassistant/components/configurator/translations/es.json new file mode 100644 index 00000000000..dffb90e6d49 --- /dev/null +++ b/homeassistant/components/configurator/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configurar", + "configured": "Configurado" + } + }, + "title": "Configurador" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/et.json b/homeassistant/components/configurator/translations/et.json new file mode 100644 index 00000000000..7bee6125685 --- /dev/null +++ b/homeassistant/components/configurator/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Seadista", + "configured": "Seadistatud" + } + }, + "title": "Seadistaja" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/eu.json b/homeassistant/components/configurator/translations/eu.json new file mode 100644 index 00000000000..fafcf6863f3 --- /dev/null +++ b/homeassistant/components/configurator/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfiguratu", + "configured": "Konfiguratuta" + } + }, + "title": "Konfiguratzailea" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/fa.json b/homeassistant/components/configurator/translations/fa.json new file mode 100644 index 00000000000..8eeb6b1385e --- /dev/null +++ b/homeassistant/components/configurator/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc", + "configured": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647" + } + }, + "title": "\u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u0646\u062f\u0647" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/fi.json b/homeassistant/components/configurator/translations/fi.json new file mode 100644 index 00000000000..88c1583182a --- /dev/null +++ b/homeassistant/components/configurator/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "M\u00e4\u00e4rittele", + "configured": "M\u00e4\u00e4ritetty" + } + }, + "title": "Asetukset" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/fr.json b/homeassistant/components/configurator/translations/fr.json new file mode 100644 index 00000000000..01dd299abe8 --- /dev/null +++ b/homeassistant/components/configurator/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configurer", + "configured": "Configur\u00e9" + } + }, + "title": "Configurateur" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/gsw.json b/homeassistant/components/configurator/translations/gsw.json new file mode 100644 index 00000000000..7538d2dad51 --- /dev/null +++ b/homeassistant/components/configurator/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfiguri\u00e4r\u00e4", + "configured": "Konfiguri\u00e4rt" + } + }, + "title": "Configurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/he.json b/homeassistant/components/configurator/translations/he.json new file mode 100644 index 00000000000..7cc7aad41d7 --- /dev/null +++ b/homeassistant/components/configurator/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u05d4\u05d2\u05d3\u05e8", + "configured": "\u05d4\u05d5\u05d2\u05d3\u05e8" + } + }, + "title": "\u05e7\u05d5\u05e0\u05e4\u05d9\u05d2\u05d5\u05e8\u05d8\u05d5\u05e8" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/hr.json b/homeassistant/components/configurator/translations/hr.json new file mode 100644 index 00000000000..f336542f787 --- /dev/null +++ b/homeassistant/components/configurator/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfiguriranje", + "configured": "Konfiguriran" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/hu.json b/homeassistant/components/configurator/translations/hu.json new file mode 100644 index 00000000000..eda4d16bc1b --- /dev/null +++ b/homeassistant/components/configurator/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Be\u00e1ll\u00edt\u00e1s", + "configured": "Be\u00e1ll\u00edtva" + } + }, + "title": "Konfigur\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/hy.json b/homeassistant/components/configurator/translations/hy.json new file mode 100644 index 00000000000..4ce35563bae --- /dev/null +++ b/homeassistant/components/configurator/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u0565\u056c", + "configured": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u057e\u0561\u056e" + } + }, + "title": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u056b\u0579" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/id.json b/homeassistant/components/configurator/translations/id.json new file mode 100644 index 00000000000..759af513228 --- /dev/null +++ b/homeassistant/components/configurator/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurasi", + "configured": "Terkonfigurasi" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/is.json b/homeassistant/components/configurator/translations/is.json new file mode 100644 index 00000000000..93a92a804b3 --- /dev/null +++ b/homeassistant/components/configurator/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Stilli", + "configured": "Stillt" + } + }, + "title": "Stillingar\u00e1lfur" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/it.json b/homeassistant/components/configurator/translations/it.json new file mode 100644 index 00000000000..3e17f84d1c8 --- /dev/null +++ b/homeassistant/components/configurator/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configura", + "configured": "Configurato" + } + }, + "title": "Configuratore" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ja.json b/homeassistant/components/configurator/translations/ja.json new file mode 100644 index 00000000000..44c6ef349c0 --- /dev/null +++ b/homeassistant/components/configurator/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "configure": "\u8a2d\u5b9a", + "configured": "\u8a2d\u5b9a\u6e08\u307f" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ko.json b/homeassistant/components/configurator/translations/ko.json new file mode 100644 index 00000000000..58bf663fefd --- /dev/null +++ b/homeassistant/components/configurator/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\uc124\uc815", + "configured": "\uc124\uc815\ub428" + } + }, + "title": "\uad6c\uc131" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/lb.json b/homeassistant/components/configurator/translations/lb.json new file mode 100644 index 00000000000..504ed491b5d --- /dev/null +++ b/homeassistant/components/configurator/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Astellen", + "configured": "Agestallt" + } + }, + "title": "Konfigur\u00e9ieren" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/lv.json b/homeassistant/components/configurator/translations/lv.json new file mode 100644 index 00000000000..0a73cca9d7a --- /dev/null +++ b/homeassistant/components/configurator/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigur\u0113t", + "configured": "Konfigur\u0113ts" + } + }, + "title": "Konfigur\u0113t\u0101js" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/nb.json b/homeassistant/components/configurator/translations/nb.json new file mode 100644 index 00000000000..1f923920583 --- /dev/null +++ b/homeassistant/components/configurator/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurer", + "configured": "Konfigurert" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/nl.json b/homeassistant/components/configurator/translations/nl.json new file mode 100644 index 00000000000..d8ad5061e0f --- /dev/null +++ b/homeassistant/components/configurator/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configureer", + "configured": "Geconfigureerd" + } + }, + "title": "Configurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/nn.json b/homeassistant/components/configurator/translations/nn.json new file mode 100644 index 00000000000..c359f56cad1 --- /dev/null +++ b/homeassistant/components/configurator/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurerer", + "configured": "Konfigurert" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/no.json b/homeassistant/components/configurator/translations/no.json new file mode 100644 index 00000000000..1f923920583 --- /dev/null +++ b/homeassistant/components/configurator/translations/no.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurer", + "configured": "Konfigurert" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/pl.json b/homeassistant/components/configurator/translations/pl.json new file mode 100644 index 00000000000..45e5af46722 --- /dev/null +++ b/homeassistant/components/configurator/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "skonfiguruj", + "configured": "skonfigurowany" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/pt-BR.json b/homeassistant/components/configurator/translations/pt-BR.json new file mode 100644 index 00000000000..dffb90e6d49 --- /dev/null +++ b/homeassistant/components/configurator/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configurar", + "configured": "Configurado" + } + }, + "title": "Configurador" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/pt.json b/homeassistant/components/configurator/translations/pt.json new file mode 100644 index 00000000000..dffb90e6d49 --- /dev/null +++ b/homeassistant/components/configurator/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configurar", + "configured": "Configurado" + } + }, + "title": "Configurador" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ro.json b/homeassistant/components/configurator/translations/ro.json new file mode 100644 index 00000000000..8a205563803 --- /dev/null +++ b/homeassistant/components/configurator/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Configureaz\u0103", + "configured": "Configurat" + } + }, + "title": "Configurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ru.json b/homeassistant/components/configurator/translations/ru.json new file mode 100644 index 00000000000..57be89551a3 --- /dev/null +++ b/homeassistant/components/configurator/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c", + "configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e" + } + }, + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/sk.json b/homeassistant/components/configurator/translations/sk.json new file mode 100644 index 00000000000..b4a22864cfb --- /dev/null +++ b/homeassistant/components/configurator/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurova\u0165", + "configured": "Nakonfigurovan\u00e9" + } + }, + "title": "Konfigur\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/sl.json b/homeassistant/components/configurator/translations/sl.json new file mode 100644 index 00000000000..a612146e919 --- /dev/null +++ b/homeassistant/components/configurator/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfiguriraj", + "configured": "Konfigurirano" + } + }, + "title": "Konfigurator" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/sv.json b/homeassistant/components/configurator/translations/sv.json new file mode 100644 index 00000000000..856be2ae01e --- /dev/null +++ b/homeassistant/components/configurator/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Konfigurera", + "configured": "Konfigurerad" + } + }, + "title": "Konfiguratorn" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/ta.json b/homeassistant/components/configurator/translations/ta.json new file mode 100644 index 00000000000..27894b3ba11 --- /dev/null +++ b/homeassistant/components/configurator/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "configure": "\u0b89\u0bb3\u0bcd\u0bb3\u0bae\u0bc8", + "configured": "\u0b89\u0bb3\u0bcd\u0bb3\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/te.json b/homeassistant/components/configurator/translations/te.json new file mode 100644 index 00000000000..82fba2a671d --- /dev/null +++ b/homeassistant/components/configurator/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u0c15\u0c3e\u0c28\u0c4d\u0c2b\u0c3f\u0c17\u0c30\u0c4d", + "configured": "\u0c15\u0c3e\u0c28\u0c4d\u0c2b\u0c3f\u0c17\u0c30\u0c4d" + } + }, + "title": "\u0c15\u0c3e\u0c28\u0c4d\u0c2b\u0c3f\u0c17\u0c30\u0c47\u0c1f\u0c30\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/th.json b/homeassistant/components/configurator/translations/th.json new file mode 100644 index 00000000000..5f82d109f0e --- /dev/null +++ b/homeassistant/components/configurator/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32", + "configured": "\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e41\u0e25\u0e49\u0e27" + } + }, + "title": "\u0e15\u0e31\u0e27\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/tr.json b/homeassistant/components/configurator/translations/tr.json new file mode 100644 index 00000000000..2c78391b563 --- /dev/null +++ b/homeassistant/components/configurator/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "Ayarla", + "configured": "Ayarland\u0131" + } + }, + "title": "Yap\u0131land\u0131r\u0131c\u0131" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/uk.json b/homeassistant/components/configurator/translations/uk.json new file mode 100644 index 00000000000..22c03e565eb --- /dev/null +++ b/homeassistant/components/configurator/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438", + "configured": "\u041d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0430\u043d\u043e" + } + }, + "title": "\u041a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0442\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/vi.json b/homeassistant/components/configurator/translations/vi.json new file mode 100644 index 00000000000..4d6bb9c4c49 --- /dev/null +++ b/homeassistant/components/configurator/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "C\u1ea5u h\u00ecnh", + "configured": "\u0110\u00e3 c\u1ea5u h\u00ecnh" + } + }, + "title": "Tr\u00ecnh c\u1ea5u h\u00ecnh" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/zh-Hans.json b/homeassistant/components/configurator/translations/zh-Hans.json new file mode 100644 index 00000000000..78f21d69e15 --- /dev/null +++ b/homeassistant/components/configurator/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u8bbe\u7f6e", + "configured": "\u8bbe\u7f6e\u6210\u529f" + } + }, + "title": "\u914d\u7f6e\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/zh-Hant.json b/homeassistant/components/configurator/translations/zh-Hant.json new file mode 100644 index 00000000000..f3cd720e1ef --- /dev/null +++ b/homeassistant/components/configurator/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "configure": "\u8a2d\u5b9a", + "configured": "\u8a2d\u5b9a\u6210\u529f" + } + }, + "title": "\u8a2d\u5b9a\u6a94\u7de8\u8f2f\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/__init__.py b/homeassistant/components/conversation/__init__.py index 91031c141dd..dd17eca6792 100644 --- a/homeassistant/components/conversation/__init__.py +++ b/homeassistant/components/conversation/__init__.py @@ -7,6 +7,7 @@ import voluptuous as vol from homeassistant import core from homeassistant.components import http, websocket_api from homeassistant.components.http.data_validator import RequestDataValidator +from homeassistant.const import HTTP_INTERNAL_SERVER_ERROR from homeassistant.helpers import config_validation as cv, intent from homeassistant.loader import bind_hass @@ -145,7 +146,7 @@ class ConversationProcessView(http.HomeAssistantView): "message": str(err), }, }, - status_code=500, + status_code=HTTP_INTERNAL_SERVER_ERROR, ) return self.json(intent_result) diff --git a/homeassistant/components/conversation/manifest.json b/homeassistant/components/conversation/manifest.json index 7e2decb2bff..4f7a8f489bf 100644 --- a/homeassistant/components/conversation/manifest.json +++ b/homeassistant/components/conversation/manifest.json @@ -2,7 +2,6 @@ "domain": "conversation", "name": "Conversation", "documentation": "https://www.home-assistant.io/integrations/conversation", - "requirements": [], "dependencies": ["http"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/conversation/services.yaml b/homeassistant/components/conversation/services.yaml index a1b980d8e05..032edba8db1 100644 --- a/homeassistant/components/conversation/services.yaml +++ b/homeassistant/components/conversation/services.yaml @@ -1,10 +1,7 @@ # Describes the format for available component services - process: description: Launch a conversation from a transcribed text. fields: text: description: Transcribed text example: Turn all lights on - - diff --git a/homeassistant/components/conversation/strings.json b/homeassistant/components/conversation/strings.json new file mode 100644 index 00000000000..dc6f2b5f52b --- /dev/null +++ b/homeassistant/components/conversation/strings.json @@ -0,0 +1 @@ +{ "title": "Conversation" } diff --git a/homeassistant/components/conversation/translations/af.json b/homeassistant/components/conversation/translations/af.json new file mode 100644 index 00000000000..b74d6fcd9a6 --- /dev/null +++ b/homeassistant/components/conversation/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Konversasie" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/ar.json b/homeassistant/components/conversation/translations/ar.json new file mode 100644 index 00000000000..753558615c7 --- /dev/null +++ b/homeassistant/components/conversation/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0645\u062d\u0627\u062f\u062b\u0629" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/bg.json b/homeassistant/components/conversation/translations/bg.json new file mode 100644 index 00000000000..e0183cbce8c --- /dev/null +++ b/homeassistant/components/conversation/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/bs.json b/homeassistant/components/conversation/translations/bs.json new file mode 100644 index 00000000000..60795341d2f --- /dev/null +++ b/homeassistant/components/conversation/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Razgovor" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/ca.json b/homeassistant/components/conversation/translations/ca.json new file mode 100644 index 00000000000..3bdf3862d6a --- /dev/null +++ b/homeassistant/components/conversation/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Conversa" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/cs.json b/homeassistant/components/conversation/translations/cs.json new file mode 100644 index 00000000000..8f7dfbe50e9 --- /dev/null +++ b/homeassistant/components/conversation/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Konverzace" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/cy.json b/homeassistant/components/conversation/translations/cy.json new file mode 100644 index 00000000000..20d6f8fefff --- /dev/null +++ b/homeassistant/components/conversation/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Sgwrs" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/da.json b/homeassistant/components/conversation/translations/da.json new file mode 100644 index 00000000000..b27eaed6e90 --- /dev/null +++ b/homeassistant/components/conversation/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Samtale" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/de.json b/homeassistant/components/conversation/translations/de.json new file mode 100644 index 00000000000..aafff25ebac --- /dev/null +++ b/homeassistant/components/conversation/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Konversation" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/el.json b/homeassistant/components/conversation/translations/el.json new file mode 100644 index 00000000000..642c5a64ff4 --- /dev/null +++ b/homeassistant/components/conversation/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/en.json b/homeassistant/components/conversation/translations/en.json new file mode 100644 index 00000000000..54d9f55a046 --- /dev/null +++ b/homeassistant/components/conversation/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Conversation" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/es-419.json b/homeassistant/components/conversation/translations/es-419.json new file mode 100644 index 00000000000..2a05f60c1d7 --- /dev/null +++ b/homeassistant/components/conversation/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Conversacion" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/es.json b/homeassistant/components/conversation/translations/es.json new file mode 100644 index 00000000000..bdb615bfc18 --- /dev/null +++ b/homeassistant/components/conversation/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Conversaci\u00f3n" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/et.json b/homeassistant/components/conversation/translations/et.json new file mode 100644 index 00000000000..679432e2d4a --- /dev/null +++ b/homeassistant/components/conversation/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Vestlus" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/eu.json b/homeassistant/components/conversation/translations/eu.json new file mode 100644 index 00000000000..8a4c2d9cd70 --- /dev/null +++ b/homeassistant/components/conversation/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Elkarrizketa" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/fa.json b/homeassistant/components/conversation/translations/fa.json new file mode 100644 index 00000000000..85516ffaf83 --- /dev/null +++ b/homeassistant/components/conversation/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "\u06af\u0641\u062a\u06af\u0648" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/fi.json b/homeassistant/components/conversation/translations/fi.json new file mode 100644 index 00000000000..0a6f93565d1 --- /dev/null +++ b/homeassistant/components/conversation/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Keskustelu" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/fr.json b/homeassistant/components/conversation/translations/fr.json new file mode 100644 index 00000000000..54d9f55a046 --- /dev/null +++ b/homeassistant/components/conversation/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Conversation" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/gsw.json b/homeassistant/components/conversation/translations/gsw.json new file mode 100644 index 00000000000..05a5a43f511 --- /dev/null +++ b/homeassistant/components/conversation/translations/gsw.json @@ -0,0 +1,3 @@ +{ + "title": "Gspr\u00e4ch" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/he.json b/homeassistant/components/conversation/translations/he.json new file mode 100644 index 00000000000..eeccec319af --- /dev/null +++ b/homeassistant/components/conversation/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e9\u05c2\u05b4\u05d9\u05d7\u05b8\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/hr.json b/homeassistant/components/conversation/translations/hr.json new file mode 100644 index 00000000000..60795341d2f --- /dev/null +++ b/homeassistant/components/conversation/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Razgovor" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/hu.json b/homeassistant/components/conversation/translations/hu.json new file mode 100644 index 00000000000..863f34a2697 --- /dev/null +++ b/homeassistant/components/conversation/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Besz\u00e9lget\u00e9s" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/hy.json b/homeassistant/components/conversation/translations/hy.json new file mode 100644 index 00000000000..d7cd9c62424 --- /dev/null +++ b/homeassistant/components/conversation/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u053d\u0578\u057d\u0561\u056f\u0581\u0578\u0582\u0569\u0575\u0578\u0582\u0576" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/id.json b/homeassistant/components/conversation/translations/id.json new file mode 100644 index 00000000000..3cc821278bb --- /dev/null +++ b/homeassistant/components/conversation/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Percakapan" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/is.json b/homeassistant/components/conversation/translations/is.json new file mode 100644 index 00000000000..ec14e3986f1 --- /dev/null +++ b/homeassistant/components/conversation/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Samtal" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/it.json b/homeassistant/components/conversation/translations/it.json new file mode 100644 index 00000000000..7ee70b92f5f --- /dev/null +++ b/homeassistant/components/conversation/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Conversazione" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/ko.json b/homeassistant/components/conversation/translations/ko.json new file mode 100644 index 00000000000..e2aec03cb12 --- /dev/null +++ b/homeassistant/components/conversation/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\ub300\ud654" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/lb.json b/homeassistant/components/conversation/translations/lb.json new file mode 100644 index 00000000000..b95eaea7348 --- /dev/null +++ b/homeassistant/components/conversation/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "\u00cbnnerhalung" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/lv.json b/homeassistant/components/conversation/translations/lv.json new file mode 100644 index 00000000000..714b1068844 --- /dev/null +++ b/homeassistant/components/conversation/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Saruna" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/nb.json b/homeassistant/components/conversation/translations/nb.json new file mode 100644 index 00000000000..b27eaed6e90 --- /dev/null +++ b/homeassistant/components/conversation/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Samtale" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/nl.json b/homeassistant/components/conversation/translations/nl.json new file mode 100644 index 00000000000..2b3dcdad5a4 --- /dev/null +++ b/homeassistant/components/conversation/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Conversatie" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/nn.json b/homeassistant/components/conversation/translations/nn.json new file mode 100644 index 00000000000..b27eaed6e90 --- /dev/null +++ b/homeassistant/components/conversation/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Samtale" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/no.json b/homeassistant/components/conversation/translations/no.json new file mode 100644 index 00000000000..b27eaed6e90 --- /dev/null +++ b/homeassistant/components/conversation/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Samtale" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/pl.json b/homeassistant/components/conversation/translations/pl.json new file mode 100644 index 00000000000..00e93934f92 --- /dev/null +++ b/homeassistant/components/conversation/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Rozmowa" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/pt-BR.json b/homeassistant/components/conversation/translations/pt-BR.json new file mode 100644 index 00000000000..20b82694d37 --- /dev/null +++ b/homeassistant/components/conversation/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Conversa\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/pt.json b/homeassistant/components/conversation/translations/pt.json new file mode 100644 index 00000000000..3bdf3862d6a --- /dev/null +++ b/homeassistant/components/conversation/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Conversa" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/ro.json b/homeassistant/components/conversation/translations/ro.json new file mode 100644 index 00000000000..c407b2a70b3 --- /dev/null +++ b/homeassistant/components/conversation/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Conversa\u0163ie" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/ru.json b/homeassistant/components/conversation/translations/ru.json new file mode 100644 index 00000000000..cb8c411d689 --- /dev/null +++ b/homeassistant/components/conversation/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0414\u0438\u0430\u043b\u043e\u0433" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/sk.json b/homeassistant/components/conversation/translations/sk.json new file mode 100644 index 00000000000..dcb27d50d69 --- /dev/null +++ b/homeassistant/components/conversation/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Konverz\u00e1cia" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/sl.json b/homeassistant/components/conversation/translations/sl.json new file mode 100644 index 00000000000..8a24231aeb6 --- /dev/null +++ b/homeassistant/components/conversation/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Pogovor" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/sv.json b/homeassistant/components/conversation/translations/sv.json new file mode 100644 index 00000000000..ec14e3986f1 --- /dev/null +++ b/homeassistant/components/conversation/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Samtal" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/te.json b/homeassistant/components/conversation/translations/te.json new file mode 100644 index 00000000000..8f3118176df --- /dev/null +++ b/homeassistant/components/conversation/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c38\u0c02\u0c2d\u0c3e\u0c37\u0c23" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/th.json b/homeassistant/components/conversation/translations/th.json new file mode 100644 index 00000000000..35921d062e0 --- /dev/null +++ b/homeassistant/components/conversation/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e01\u0e32\u0e23\u0e2a\u0e19\u0e17\u0e19\u0e32" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/tr.json b/homeassistant/components/conversation/translations/tr.json new file mode 100644 index 00000000000..eaff1206952 --- /dev/null +++ b/homeassistant/components/conversation/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Konu\u015fma" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/uk.json b/homeassistant/components/conversation/translations/uk.json new file mode 100644 index 00000000000..713b6c28dae --- /dev/null +++ b/homeassistant/components/conversation/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0420\u043e\u0437\u043c\u043e\u0432\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/vi.json b/homeassistant/components/conversation/translations/vi.json new file mode 100644 index 00000000000..d8fdbc9b4d8 --- /dev/null +++ b/homeassistant/components/conversation/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "H\u1ed9i tho\u1ea1i" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/zh-Hans.json b/homeassistant/components/conversation/translations/zh-Hans.json new file mode 100644 index 00000000000..ca605ebd370 --- /dev/null +++ b/homeassistant/components/conversation/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u8bed\u97f3\u5bf9\u8bdd" +} \ No newline at end of file diff --git a/homeassistant/components/conversation/translations/zh-Hant.json b/homeassistant/components/conversation/translations/zh-Hant.json new file mode 100644 index 00000000000..cfd34df797c --- /dev/null +++ b/homeassistant/components/conversation/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u8a9e\u97f3\u4e92\u52d5" +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/bg.json b/homeassistant/components/coolmaster/.translations/bg.json deleted file mode 100644 index 9e484f5d38c..00000000000 --- a/homeassistant/components/coolmaster/.translations/bg.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 CoolMasterNet. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.", - "no_units": "\u041d\u0435 \u0431\u044f\u0445\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u043a\u043b\u0438\u043c\u0430\u0442\u0438\u0447\u043d\u0438/\u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0434\u0435\u043d\u0438\u044f CoolMasterNet \u0430\u0434\u0440\u0435\u0441." - }, - "step": { - "user": { - "data": { - "cool": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435", - "dry": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u0438\u0437\u0441\u0443\u0448\u0430\u0432\u0430\u043d\u0435", - "fan_only": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0442\u043e\u0440", - "heat": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435", - "heat_cool": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435/\u043e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435", - "host": "\u0410\u0434\u0440\u0435\u0441", - "off": "\u041c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0441\u0432\u043e\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/ca.json b/homeassistant/components/coolmaster/.translations/ca.json deleted file mode 100644 index 65816e696fe..00000000000 --- a/homeassistant/components/coolmaster/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "No s'ha pogut connectar amb la inst\u00e0ncia de CoolMasterNet. Comprova l'amfitri\u00f3.", - "no_units": "No s'ha pogut trobar cap unitat d'HVAC a l'amfitri\u00f3 de CoolMasterNet." - }, - "step": { - "user": { - "data": { - "cool": "Suporta mode refredar", - "dry": "Suporta mode assecar", - "fan_only": "Suporta nom\u00e9s mode ventiladoci\u00f3", - "heat": "Suporta mode escalfar", - "heat_cool": "Suporta mode escalfar/refredar autom\u00e0tic", - "host": "Amfitri\u00f3", - "off": "Es pot apagar" - }, - "title": "Configuraci\u00f3 de la connexi\u00f3 amb CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/cs.json b/homeassistant/components/coolmaster/.translations/cs.json deleted file mode 100644 index f1e18f8fcb4..00000000000 --- a/homeassistant/components/coolmaster/.translations/cs.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Nepoda\u0159ilo se p\u0159ipojit k instanci CoolMasterNet. Zkontrolujte pros\u00edm sv\u00e9ho hostitele.", - "no_units": "V hostiteli CoolMasterNet nelze naj\u00edt \u017e\u00e1dn\u00e9 jednotky HVAC." - }, - "step": { - "user": { - "data": { - "cool": "Podpora re\u017eimu chlazen\u00ed", - "dry": "Podpora re\u017eimu vysou\u0161en\u00ed", - "fan_only": "Podpora re\u017eimu pouze ventil\u00e1tor", - "heat": "Podpora re\u017eimu topen\u00ed", - "heat_cool": "Podpora automatick\u00e9ho oh\u0159\u00edv\u00e1n\u00ed/chlazen\u00ed", - "host": "Hostitel", - "off": "Lze vypnout" - }, - "title": "Nastavte podrobnosti p\u0159ipojen\u00ed CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/da.json b/homeassistant/components/coolmaster/.translations/da.json deleted file mode 100644 index 882bc5de359..00000000000 --- a/homeassistant/components/coolmaster/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Kunne ikke oprette forbindelse til CoolMasterNet-instansen. Tjek din v\u00e6rt.", - "no_units": "Kunne ikke finde nogen klimaanl\u00e6g i CoolMasterNet-v\u00e6rt." - }, - "step": { - "user": { - "data": { - "cool": "Underst\u00f8tter k\u00f8lingstilstand", - "dry": "Underst\u00f8tter t\u00f8rringstilstand", - "fan_only": "Underst\u00f8tter kun-bl\u00e6ser-tilstand", - "heat": "Underst\u00f8tter varmetilstand", - "heat_cool": "Underst\u00f8tter automatisk varm/k\u00f8l-tilstand", - "host": "V\u00e6rt", - "off": "Kan slukkes" - }, - "title": "Ops\u00e6t dine CoolMasterNet-forbindelsesdetaljer." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/de.json b/homeassistant/components/coolmaster/.translations/de.json deleted file mode 100644 index 5359f92b138..00000000000 --- a/homeassistant/components/coolmaster/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Verbindung zur CoolMasterNet-Instanz fehlgeschlagen. Bitte \u00fcberpr\u00fcfe deinen Host.", - "no_units": "Es wurden keine HVAC-Ger\u00e4te im CoolMasterNet-Host gefunden." - }, - "step": { - "user": { - "data": { - "cool": "Unterst\u00fctzt K\u00fchl-Modus", - "dry": "Unterst\u00fctzt Trockenmodus", - "fan_only": "Unterst\u00fctzt Fan-Only-Modus", - "heat": "Unterst\u00fctzt Heiz-Modus", - "heat_cool": "Unterst\u00fctzung automatische Heiz-/K\u00fchlmodus", - "host": "Host", - "off": "Kann ausgeschaltet werden" - }, - "title": "Richte deine CoolMasterNet-Verbindungsdaten ein." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/en.json b/homeassistant/components/coolmaster/.translations/en.json deleted file mode 100644 index 6c30efc594a..00000000000 --- a/homeassistant/components/coolmaster/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Failed to connect to CoolMasterNet instance. Please check your host.", - "no_units": "Could not find any HVAC units in CoolMasterNet host." - }, - "step": { - "user": { - "data": { - "cool": "Support cool mode", - "dry": "Support dry mode", - "fan_only": "Support fan only mode", - "heat": "Support heat mode", - "heat_cool": "Support automatic heat/cool mode", - "host": "Host", - "off": "Can be turned off" - }, - "title": "Setup your CoolMasterNet connection details." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/es-419.json b/homeassistant/components/coolmaster/.translations/es-419.json deleted file mode 100644 index 2bcdecb2aec..00000000000 --- a/homeassistant/components/coolmaster/.translations/es-419.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "off": "Puede ser apagado" - }, - "title": "Configure los detalles de su conexi\u00f3n CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/es.json b/homeassistant/components/coolmaster/.translations/es.json deleted file mode 100644 index aedd81baccc..00000000000 --- a/homeassistant/components/coolmaster/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Error al conectarse a la instancia de CoolMasterNet. Por favor revise su anfitri\u00f3n.", - "no_units": "No se ha encontrado ninguna unidad HVAC en el host CoolMasterNet." - }, - "step": { - "user": { - "data": { - "cool": "Soporta el modo de enfriamiento", - "dry": "Soporta el modo seco", - "fan_only": "Soporta modo solo ventilador", - "heat": "Soporta modo calor", - "heat_cool": "Soporta el modo autom\u00e1tico de calor/fr\u00edo", - "host": "Host", - "off": "Se puede apagar" - }, - "title": "Configure los detalles de su conexi\u00f3n a CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/fr.json b/homeassistant/components/coolmaster/.translations/fr.json deleted file mode 100644 index 97b1753ddde..00000000000 --- a/homeassistant/components/coolmaster/.translations/fr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "\u00c9chec de la connexion \u00e0 l'instance CoolMasterNet. S'il vous pla\u00eet v\u00e9rifier votre h\u00f4te.", - "no_units": "Impossible de trouver des unit\u00e9s HVAC dans l'h\u00f4te CoolMasterNet." - }, - "step": { - "user": { - "data": { - "cool": "Prise en charge du mode refroidissement", - "dry": "Prise en charge du mode d\u00e9shumidification", - "fan_only": "Prise en charge du mode ventilateur uniquement", - "heat": "Prise en charge du mode chauffage", - "heat_cool": "Prise en charge du mode chauffage / refroidissement automatique", - "host": "H\u00f4te", - "off": "Peut \u00eatre \u00e9teint" - }, - "title": "Configurez les d\u00e9tails de votre connexion CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/it.json b/homeassistant/components/coolmaster/.translations/it.json deleted file mode 100644 index b543a10d32d..00000000000 --- a/homeassistant/components/coolmaster/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Impossibile connettersi all'istanza CoolMasterNet. Controlla il tuo host.", - "no_units": "Impossibile trovare alcuna unit\u00e0 HVAC nell'host CoolMasterNet." - }, - "step": { - "user": { - "data": { - "cool": "Supporta la modalit\u00e0 fresco", - "dry": "Supporta la modalit\u00e0 asciutto", - "fan_only": "Supporta la modalit\u00e0 solo ventilatore", - "heat": "Supporta la modalit\u00e0 di riscaldamento", - "heat_cool": "Supporta la modalit\u00e0 di riscaldamento/raffreddamento automatica", - "host": "Host", - "off": "Pu\u00f2 essere spento" - }, - "title": "Impostare i dettagli della connessione CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/ko.json b/homeassistant/components/coolmaster/.translations/ko.json deleted file mode 100644 index 4d96e606c7b..00000000000 --- a/homeassistant/components/coolmaster/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "CoolMasterNet \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694.", - "no_units": "CoolMasterNet \ud638\uc2a4\ud2b8\uc5d0\uc11c HVAC \uae30\uae30\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "cool": "\ub0c9\ubc29 \ubaa8\ub4dc \uc9c0\uc6d0", - "dry": "\uc81c\uc2b5 \ubaa8\ub4dc \uc9c0\uc6d0", - "fan_only": "\uc1a1\ud48d \ubaa8\ub4dc \uc9c0\uc6d0", - "heat": "\ub09c\ubc29 \ubaa8\ub4dc \uc9c0\uc6d0", - "heat_cool": "\uc790\ub3d9 \ub0c9/\ub09c\ubc29 \ubaa8\ub4dc \uc9c0\uc6d0", - "host": "\ud638\uc2a4\ud2b8", - "off": "\uc804\uc6d0 \ub044\uae30 \ud5c8\uc6a9" - }, - "title": "CoolMasterNet \uc5f0\uacb0 \uc0c1\uc138\uc815\ubcf4\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/lb.json b/homeassistant/components/coolmaster/.translations/lb.json deleted file mode 100644 index ed54abac03e..00000000000 --- a/homeassistant/components/coolmaster/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Feeler beim verbanne mat der CoolMasterNet Instanz. Iwwerpr\u00e9ift w.e.g. \u00e4ren Apparat.", - "no_units": "Konnt keng HVAC Eenheeten am CoolMasterNet Apparat fannen." - }, - "step": { - "user": { - "data": { - "cool": "\u00cbnnerst\u00ebtzt KillModus", - "dry": "\u00cbnnerst\u00ebtzt Dr\u00e9che Modus", - "fan_only": "\u00cbnnerst\u00ebtzt n\u00ebmmen Ventilatiouns Modus", - "heat": "\u00cbnnerst\u00ebtzt H\u00ebtzt Modus", - "heat_cool": "\u00cbnnerst\u00ebtzt automateschen H\u00ebtzt/Kill Modus", - "host": "Apparat", - "off": "Kann ausgeschalt ginn" - }, - "title": "CoolMasterNet Verbindungs Detailer ariichten" - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/nl.json b/homeassistant/components/coolmaster/.translations/nl.json deleted file mode 100644 index e5b1683790f..00000000000 --- a/homeassistant/components/coolmaster/.translations/nl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Kan geen verbinding maken met CoolMasterNet-instantie. Controleer uw host", - "no_units": "Kon geen HVAC units vinden in CoolMasterNet host." - }, - "step": { - "user": { - "data": { - "cool": "Ondersteuning afkoelen modus", - "dry": "Ondersteuning droog modus", - "fan_only": "Ondersteunt alleen ventilatormodus", - "heat": "Ondersteuning warmtemodus", - "heat_cool": "Ondersteuning van automatische warmte/koelmodus", - "host": "Host", - "off": "Kan uitgeschakeld worden" - }, - "title": "Stel uw CoolMasterNet-verbindingsgegevens in." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/no.json b/homeassistant/components/coolmaster/.translations/no.json deleted file mode 100644 index e9859d23989..00000000000 --- a/homeassistant/components/coolmaster/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Kunne ikke koble til CoolMasterNet-forekomsten. Sjekk verten din.", - "no_units": "Kunne ikke finne noen HVAC-enheter i CoolMasterNet vert." - }, - "step": { - "user": { - "data": { - "cool": "St\u00f8tte kj\u00f8lemodus", - "dry": "St\u00f8tt t\u00f8rr modus", - "fan_only": "St\u00f8tt kun modus for vifte", - "heat": "St\u00f8tt varmemodus", - "heat_cool": "St\u00f8tter automatisk varme/kj\u00f8l-modus", - "host": "Vert", - "off": "Kan sl\u00e5s av" - }, - "title": "Konfigurer informasjonen om CoolMasterNet-tilkoblingen." - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/pl.json b/homeassistant/components/coolmaster/.translations/pl.json deleted file mode 100644 index 118c4bc424b..00000000000 --- a/homeassistant/components/coolmaster/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 z CoolMasterNet. Sprawd\u017a adres hosta.", - "no_units": "Nie mo\u017cna znale\u017a\u0107 urz\u0105dze\u0144 HVAC na ho\u015bcie CoolMasterNet." - }, - "step": { - "user": { - "data": { - "cool": "Obs\u0142uga trybu ch\u0142odzenia", - "dry": "Obs\u0142uga trybu osuszania", - "fan_only": "Obs\u0142uga trybu \"tylko wentylator\"", - "heat": "Obs\u0142uga trybu grzania", - "heat_cool": "Obs\u0142uga automatycznego trybu grzanie/ch\u0142odzenie", - "host": "Host", - "off": "Mo\u017ce by\u0107 wy\u0142\u0105czone" - }, - "title": "Skonfiguruj szczeg\u00f3\u0142y po\u0142\u0105czenia CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/ru.json b/homeassistant/components/coolmaster/.translations/ru.json deleted file mode 100644 index 4c2f74440cd..00000000000 --- a/homeassistant/components/coolmaster/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "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\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430.", - "no_units": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u044f, \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043a\u043e\u043d\u0434\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f." - }, - "step": { - "user": { - "data": { - "cool": "\u0420\u0435\u0436\u0438\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u044f", - "dry": "\u0420\u0435\u0436\u0438\u043c \u043e\u0441\u0443\u0448\u0435\u043d\u0438\u044f", - "fan_only": "\u0420\u0435\u0436\u0438\u043c \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u0438", - "heat": "\u0420\u0435\u0436\u0438\u043c \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430", - "heat_cool": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c", - "host": "\u0425\u043e\u0441\u0442", - "off": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435" - }, - "title": "CoolMasterNet" - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/sl.json b/homeassistant/components/coolmaster/.translations/sl.json deleted file mode 100644 index a59b5215e7f..00000000000 --- a/homeassistant/components/coolmaster/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Povezava s CoolMasterNet ni uspela. Preverite svojega gostitelja.", - "no_units": "V gostitelju CoolMasterNet ni bilo mogo\u010de najti nobenih enot HVAC." - }, - "step": { - "user": { - "data": { - "cool": "Podpira na\u010din hlajenja", - "dry": "Podpira na\u010din su\u0161enja", - "fan_only": "Podpira samo na\u010din ventilacije", - "heat": "Podpira na\u010din ogrevanja", - "heat_cool": "Podpira samodejni na\u010din ogrevanja / hlajenja", - "host": "Gostitelj", - "off": "Lahko se izklopi" - }, - "title": "Nastavite svoje podatke CoolMasterNet." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/sv.json b/homeassistant/components/coolmaster/.translations/sv.json deleted file mode 100644 index 89e2ab32863..00000000000 --- a/homeassistant/components/coolmaster/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Det gick inte att ansluta till CoolMasterNet-instansen. Kontrollera din v\u00e4rd.", - "no_units": "Det gick inte att hitta n\u00e5gra HVAC-enheter i CoolMasterNet-v\u00e4rden." - }, - "step": { - "user": { - "data": { - "cool": "St\u00f6d svalt l\u00e4ge", - "dry": "St\u00f6d torrl\u00e4ge", - "fan_only": "St\u00f6d endast fl\u00e4ktl\u00e4ge", - "heat": "St\u00f6d v\u00e4rmel\u00e4ge", - "heat_cool": "St\u00f6d automatiskt v\u00e4rme/kyl-l\u00e4ge", - "host": "V\u00e4rd", - "off": "Kan st\u00e4ngas av" - }, - "title": "St\u00e4ll in dina CoolMasterNet-anslutningsdetaljer." - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/zh-Hant.json b/homeassistant/components/coolmaster/.translations/zh-Hant.json deleted file mode 100644 index bc61e82b98a..00000000000 --- a/homeassistant/components/coolmaster/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "\u9023\u7dda\u81f3 CoolMasterNet \u5931\u6557\uff0c\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u3002", - "no_units": "\u7121\u6cd5\u65bc CoolMasterNet \u4e3b\u6a5f\u627e\u5230\u4efb\u4f55 HVAC \u8a2d\u5099\u3002" - }, - "step": { - "user": { - "data": { - "cool": "\u652f\u63f4\u5236\u51b7\u6a21\u5f0f", - "dry": "\u652f\u63f4\u9664\u6fd5\u6a21\u5f0f", - "fan_only": "\u652f\u63f4\u50c5\u9001\u98a8\u6a21\u5f0f", - "heat": "\u652f\u63f4\u4fdd\u6696\u6a21\u5f0f", - "heat_cool": "\u652f\u63f4\u81ea\u52d5\u4fdd\u6696/\u5236\u51b7\u6a21\u5f0f", - "host": "\u4e3b\u6a5f\u7aef", - "off": "\u53ef\u4ee5\u95dc\u9589" - }, - "title": "\u8a2d\u5b9a CoolMasterNet \u9023\u7dda\u8cc7\u8a0a\u3002" - } - }, - "title": "CoolMasterNet" - } -} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/manifest.json b/homeassistant/components/coolmaster/manifest.json index 0041895a290..bc0ebd17d40 100644 --- a/homeassistant/components/coolmaster/manifest.json +++ b/homeassistant/components/coolmaster/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/coolmaster", "requirements": ["pycoolmasternet==0.0.4"], - "dependencies": [], "codeowners": ["@OnFreund"] } diff --git a/homeassistant/components/coolmaster/strings.json b/homeassistant/components/coolmaster/strings.json index d309f8c9c93..3bb5d3ad4e1 100644 --- a/homeassistant/components/coolmaster/strings.json +++ b/homeassistant/components/coolmaster/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "CoolMasterNet", "step": { "user": { "title": "Setup your CoolMasterNet connection details.", diff --git a/homeassistant/components/coolmaster/translations/bg.json b/homeassistant/components/coolmaster/translations/bg.json new file mode 100644 index 00000000000..a7fff4f036d --- /dev/null +++ b/homeassistant/components/coolmaster/translations/bg.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 CoolMasterNet. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.", + "no_units": "\u041d\u0435 \u0431\u044f\u0445\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u043a\u043b\u0438\u043c\u0430\u0442\u0438\u0447\u043d\u0438/\u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0434\u0435\u043d\u0438\u044f CoolMasterNet \u0430\u0434\u0440\u0435\u0441." + }, + "step": { + "user": { + "data": { + "cool": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435", + "dry": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u0438\u0437\u0441\u0443\u0448\u0430\u0432\u0430\u043d\u0435", + "fan_only": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0442\u043e\u0440", + "heat": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435", + "heat_cool": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435/\u043e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435", + "host": "\u0410\u0434\u0440\u0435\u0441", + "off": "\u041c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0441\u0432\u043e\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/ca.json b/homeassistant/components/coolmaster/translations/ca.json new file mode 100644 index 00000000000..fb256e52f88 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "No s'ha pogut connectar amb la inst\u00e0ncia de CoolMasterNet. Comprova l'amfitri\u00f3.", + "no_units": "No s'ha pogut trobar cap unitat d'HVAC a l'amfitri\u00f3 de CoolMasterNet." + }, + "step": { + "user": { + "data": { + "cool": "Suporta mode refredar", + "dry": "Suporta mode assecar", + "fan_only": "Suporta nom\u00e9s mode ventiladoci\u00f3", + "heat": "Suporta mode escalfar", + "heat_cool": "Suporta mode escalfar/refredar autom\u00e0tic", + "host": "Amfitri\u00f3", + "off": "Es pot apagar" + }, + "title": "Configuraci\u00f3 de la connexi\u00f3 amb CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/cs.json b/homeassistant/components/coolmaster/translations/cs.json new file mode 100644 index 00000000000..56e7d591d6b --- /dev/null +++ b/homeassistant/components/coolmaster/translations/cs.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Nepoda\u0159ilo se p\u0159ipojit k instanci CoolMasterNet. Zkontrolujte pros\u00edm sv\u00e9ho hostitele.", + "no_units": "V hostiteli CoolMasterNet nelze naj\u00edt \u017e\u00e1dn\u00e9 jednotky HVAC." + }, + "step": { + "user": { + "data": { + "cool": "Podpora re\u017eimu chlazen\u00ed", + "dry": "Podpora re\u017eimu vysou\u0161en\u00ed", + "fan_only": "Podpora re\u017eimu pouze ventil\u00e1tor", + "heat": "Podpora re\u017eimu topen\u00ed", + "heat_cool": "Podpora automatick\u00e9ho oh\u0159\u00edv\u00e1n\u00ed/chlazen\u00ed", + "host": "Hostitel", + "off": "Lze vypnout" + }, + "title": "Nastavte podrobnosti p\u0159ipojen\u00ed CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/da.json b/homeassistant/components/coolmaster/translations/da.json new file mode 100644 index 00000000000..5cd4b98faf8 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Kunne ikke oprette forbindelse til CoolMasterNet-instansen. Tjek din v\u00e6rt.", + "no_units": "Kunne ikke finde nogen klimaanl\u00e6g i CoolMasterNet-v\u00e6rt." + }, + "step": { + "user": { + "data": { + "cool": "Underst\u00f8tter k\u00f8lingstilstand", + "dry": "Underst\u00f8tter t\u00f8rringstilstand", + "fan_only": "Underst\u00f8tter kun-bl\u00e6ser-tilstand", + "heat": "Underst\u00f8tter varmetilstand", + "heat_cool": "Underst\u00f8tter automatisk varm/k\u00f8l-tilstand", + "host": "V\u00e6rt", + "off": "Kan slukkes" + }, + "title": "Ops\u00e6t dine CoolMasterNet-forbindelsesdetaljer." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/de.json b/homeassistant/components/coolmaster/translations/de.json new file mode 100644 index 00000000000..b29decd38bc --- /dev/null +++ b/homeassistant/components/coolmaster/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Verbindung zur CoolMasterNet-Instanz fehlgeschlagen. Bitte \u00fcberpr\u00fcfe deinen Host.", + "no_units": "Es wurden keine HVAC-Ger\u00e4te im CoolMasterNet-Host gefunden." + }, + "step": { + "user": { + "data": { + "cool": "Unterst\u00fctzt K\u00fchl-Modus", + "dry": "Unterst\u00fctzt Trockenmodus", + "fan_only": "Unterst\u00fctzt Fan-Only-Modus", + "heat": "Unterst\u00fctzt Heiz-Modus", + "heat_cool": "Unterst\u00fctzung automatische Heiz-/K\u00fchlmodus", + "host": "Host", + "off": "Kann ausgeschaltet werden" + }, + "title": "Richte deine CoolMasterNet-Verbindungsdaten ein." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/en.json b/homeassistant/components/coolmaster/translations/en.json new file mode 100644 index 00000000000..6c09ceb725b --- /dev/null +++ b/homeassistant/components/coolmaster/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Failed to connect to CoolMasterNet instance. Please check your host.", + "no_units": "Could not find any HVAC units in CoolMasterNet host." + }, + "step": { + "user": { + "data": { + "cool": "Support cool mode", + "dry": "Support dry mode", + "fan_only": "Support fan only mode", + "heat": "Support heat mode", + "heat_cool": "Support automatic heat/cool mode", + "host": "Host", + "off": "Can be turned off" + }, + "title": "Setup your CoolMasterNet connection details." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/es-419.json b/homeassistant/components/coolmaster/translations/es-419.json new file mode 100644 index 00000000000..e1da9263a0c --- /dev/null +++ b/homeassistant/components/coolmaster/translations/es-419.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "off": "Puede ser apagado" + }, + "title": "Configure los detalles de su conexi\u00f3n CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/es.json b/homeassistant/components/coolmaster/translations/es.json new file mode 100644 index 00000000000..6835914c513 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Error al conectarse a la instancia de CoolMasterNet. Por favor revise su anfitri\u00f3n.", + "no_units": "No se ha encontrado ninguna unidad HVAC en el host CoolMasterNet." + }, + "step": { + "user": { + "data": { + "cool": "Soporta el modo de enfriamiento", + "dry": "Soporta el modo seco", + "fan_only": "Soporta modo solo ventilador", + "heat": "Soporta modo calor", + "heat_cool": "Soporta el modo autom\u00e1tico de calor/fr\u00edo", + "host": "Host", + "off": "Se puede apagar" + }, + "title": "Configure los detalles de su conexi\u00f3n a CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/fr.json b/homeassistant/components/coolmaster/translations/fr.json new file mode 100644 index 00000000000..f790e018718 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/fr.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "\u00c9chec de la connexion \u00e0 l'instance CoolMasterNet. S'il vous pla\u00eet v\u00e9rifier votre h\u00f4te.", + "no_units": "Impossible de trouver des unit\u00e9s HVAC dans l'h\u00f4te CoolMasterNet." + }, + "step": { + "user": { + "data": { + "cool": "Prise en charge du mode refroidissement", + "dry": "Prise en charge du mode d\u00e9shumidification", + "fan_only": "Prise en charge du mode ventilateur uniquement", + "heat": "Prise en charge du mode chauffage", + "heat_cool": "Prise en charge du mode chauffage / refroidissement automatique", + "host": "H\u00f4te", + "off": "Peut \u00eatre \u00e9teint" + }, + "title": "Configurez les d\u00e9tails de votre connexion CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/hu.json b/homeassistant/components/coolmaster/translations/hu.json similarity index 100% rename from homeassistant/components/coolmaster/.translations/hu.json rename to homeassistant/components/coolmaster/translations/hu.json diff --git a/homeassistant/components/coolmaster/translations/it.json b/homeassistant/components/coolmaster/translations/it.json new file mode 100644 index 00000000000..33ac306ce1a --- /dev/null +++ b/homeassistant/components/coolmaster/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Impossibile connettersi all'istanza CoolMasterNet. Controlla il tuo host.", + "no_units": "Impossibile trovare alcuna unit\u00e0 HVAC nell'host CoolMasterNet." + }, + "step": { + "user": { + "data": { + "cool": "Supporta la modalit\u00e0 fresco", + "dry": "Supporta la modalit\u00e0 asciutto", + "fan_only": "Supporta la modalit\u00e0 solo ventilatore", + "heat": "Supporta la modalit\u00e0 di riscaldamento", + "heat_cool": "Supporta la modalit\u00e0 di riscaldamento/raffreddamento automatica", + "host": "Host", + "off": "Pu\u00f2 essere spento" + }, + "title": "Impostare i dettagli della connessione CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/ko.json b/homeassistant/components/coolmaster/translations/ko.json new file mode 100644 index 00000000000..cd9ac7a3970 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "CoolMasterNet \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "no_units": "CoolMasterNet \ud638\uc2a4\ud2b8\uc5d0\uc11c HVAC \uae30\uae30\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "cool": "\ub0c9\ubc29 \ubaa8\ub4dc \uc9c0\uc6d0", + "dry": "\uc81c\uc2b5 \ubaa8\ub4dc \uc9c0\uc6d0", + "fan_only": "\uc1a1\ud48d \ubaa8\ub4dc \uc9c0\uc6d0", + "heat": "\ub09c\ubc29 \ubaa8\ub4dc \uc9c0\uc6d0", + "heat_cool": "\uc790\ub3d9 \ub0c9/\ub09c\ubc29 \ubaa8\ub4dc \uc9c0\uc6d0", + "host": "\ud638\uc2a4\ud2b8", + "off": "\uc804\uc6d0 \ub044\uae30 \ud5c8\uc6a9" + }, + "title": "CoolMasterNet \uc5f0\uacb0 \uc0c1\uc138\uc815\ubcf4\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/lb.json b/homeassistant/components/coolmaster/translations/lb.json new file mode 100644 index 00000000000..e010aeb3e66 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Feeler beim verbanne mat der CoolMasterNet Instanz. Iwwerpr\u00e9ift w.e.g. \u00e4ren Apparat.", + "no_units": "Konnt keng HVAC Eenheeten am CoolMasterNet Apparat fannen." + }, + "step": { + "user": { + "data": { + "cool": "\u00cbnnerst\u00ebtzt KillModus", + "dry": "\u00cbnnerst\u00ebtzt Dr\u00e9che Modus", + "fan_only": "\u00cbnnerst\u00ebtzt n\u00ebmmen Ventilatiouns Modus", + "heat": "\u00cbnnerst\u00ebtzt H\u00ebtzt Modus", + "heat_cool": "\u00cbnnerst\u00ebtzt automateschen H\u00ebtzt/Kill Modus", + "host": "Apparat", + "off": "Kann ausgeschalt ginn" + }, + "title": "CoolMasterNet Verbindungs Detailer ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/nl.json b/homeassistant/components/coolmaster/translations/nl.json new file mode 100644 index 00000000000..46fb120375a --- /dev/null +++ b/homeassistant/components/coolmaster/translations/nl.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Kan geen verbinding maken met CoolMasterNet-instantie. Controleer uw host", + "no_units": "Kon geen HVAC units vinden in CoolMasterNet host." + }, + "step": { + "user": { + "data": { + "cool": "Ondersteuning afkoelen modus", + "dry": "Ondersteuning droog modus", + "fan_only": "Ondersteunt alleen ventilatormodus", + "heat": "Ondersteuning warmtemodus", + "heat_cool": "Ondersteuning van automatische warmte/koelmodus", + "host": "Host", + "off": "Kan uitgeschakeld worden" + }, + "title": "Stel uw CoolMasterNet-verbindingsgegevens in." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/no.json b/homeassistant/components/coolmaster/translations/no.json new file mode 100644 index 00000000000..328b113a182 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Kunne ikke koble til CoolMasterNet-forekomsten. Sjekk verten din.", + "no_units": "Kunne ikke finne noen HVAC-enheter i CoolMasterNet vert." + }, + "step": { + "user": { + "data": { + "cool": "St\u00f8tte kj\u00f8lemodus", + "dry": "St\u00f8tt t\u00f8rr modus", + "fan_only": "St\u00f8tt kun modus for vifte", + "heat": "St\u00f8tt varmemodus", + "heat_cool": "St\u00f8tter automatisk varme/kj\u00f8l-modus", + "host": "Vert", + "off": "Kan sl\u00e5s av" + }, + "title": "Konfigurer informasjonen om CoolMasterNet-tilkoblingen." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/pl.json b/homeassistant/components/coolmaster/translations/pl.json new file mode 100644 index 00000000000..9b0e4bc5846 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 z CoolMasterNet. Sprawd\u017a adres hosta.", + "no_units": "Nie mo\u017cna znale\u017a\u0107 urz\u0105dze\u0144 HVAC na ho\u015bcie CoolMasterNet." + }, + "step": { + "user": { + "data": { + "cool": "Obs\u0142uga trybu ch\u0142odzenia", + "dry": "Obs\u0142uga trybu osuszania", + "fan_only": "Obs\u0142uga trybu \"tylko wentylator\"", + "heat": "Obs\u0142uga trybu grzania", + "heat_cool": "Obs\u0142uga automatycznego trybu grzanie/ch\u0142odzenie", + "host": "Nazwa hosta lub adres IP", + "off": "Mo\u017ce by\u0107 wy\u0142\u0105czone" + }, + "title": "Skonfiguruj szczeg\u00f3\u0142y po\u0142\u0105czenia CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/.translations/pt-BR.json b/homeassistant/components/coolmaster/translations/pt-BR.json similarity index 100% rename from homeassistant/components/coolmaster/.translations/pt-BR.json rename to homeassistant/components/coolmaster/translations/pt-BR.json diff --git a/homeassistant/components/coolmaster/translations/ru.json b/homeassistant/components/coolmaster/translations/ru.json new file mode 100644 index 00000000000..993a66539b2 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "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\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430.", + "no_units": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u044f, \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043a\u043e\u043d\u0434\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f." + }, + "step": { + "user": { + "data": { + "cool": "\u0420\u0435\u0436\u0438\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u044f", + "dry": "\u0420\u0435\u0436\u0438\u043c \u043e\u0441\u0443\u0448\u0435\u043d\u0438\u044f", + "fan_only": "\u0420\u0435\u0436\u0438\u043c \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u0438", + "heat": "\u0420\u0435\u0436\u0438\u043c \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430", + "heat_cool": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c", + "host": "\u0425\u043e\u0441\u0442", + "off": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435" + }, + "title": "CoolMasterNet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/sl.json b/homeassistant/components/coolmaster/translations/sl.json new file mode 100644 index 00000000000..d97fe244cda --- /dev/null +++ b/homeassistant/components/coolmaster/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Povezava s CoolMasterNet ni uspela. Preverite svojega gostitelja.", + "no_units": "V gostitelju CoolMasterNet ni bilo mogo\u010de najti nobenih enot HVAC." + }, + "step": { + "user": { + "data": { + "cool": "Podpira na\u010din hlajenja", + "dry": "Podpira na\u010din su\u0161enja", + "fan_only": "Podpira samo na\u010din ventilacije", + "heat": "Podpira na\u010din ogrevanja", + "heat_cool": "Podpira samodejni na\u010din ogrevanja / hlajenja", + "host": "Gostitelj", + "off": "Lahko se izklopi" + }, + "title": "Nastavite svoje podatke CoolMasterNet." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/sv.json b/homeassistant/components/coolmaster/translations/sv.json new file mode 100644 index 00000000000..60a26c21023 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "Det gick inte att ansluta till CoolMasterNet-instansen. Kontrollera din v\u00e4rd.", + "no_units": "Det gick inte att hitta n\u00e5gra HVAC-enheter i CoolMasterNet-v\u00e4rden." + }, + "step": { + "user": { + "data": { + "cool": "St\u00f6d svalt l\u00e4ge", + "dry": "St\u00f6d torrl\u00e4ge", + "fan_only": "St\u00f6d endast fl\u00e4ktl\u00e4ge", + "heat": "St\u00f6d v\u00e4rmel\u00e4ge", + "heat_cool": "St\u00f6d automatiskt v\u00e4rme/kyl-l\u00e4ge", + "host": "V\u00e4rd", + "off": "Kan st\u00e4ngas av" + }, + "title": "St\u00e4ll in dina CoolMasterNet-anslutningsdetaljer." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/zh-Hant.json b/homeassistant/components/coolmaster/translations/zh-Hant.json new file mode 100644 index 00000000000..a96bf8bd432 --- /dev/null +++ b/homeassistant/components/coolmaster/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "connection_error": "\u9023\u7dda\u81f3 CoolMasterNet \u5931\u6557\uff0c\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u3002", + "no_units": "\u7121\u6cd5\u65bc CoolMasterNet \u4e3b\u6a5f\u627e\u5230\u4efb\u4f55 HVAC \u8a2d\u5099\u3002" + }, + "step": { + "user": { + "data": { + "cool": "\u652f\u63f4\u5236\u51b7\u6a21\u5f0f", + "dry": "\u652f\u63f4\u9664\u6fd5\u6a21\u5f0f", + "fan_only": "\u652f\u63f4\u50c5\u9001\u98a8\u6a21\u5f0f", + "heat": "\u652f\u63f4\u4fdd\u6696\u6a21\u5f0f", + "heat_cool": "\u652f\u63f4\u81ea\u52d5\u4fdd\u6696/\u5236\u51b7\u6a21\u5f0f", + "host": "\u4e3b\u6a5f\u7aef", + "off": "\u53ef\u4ee5\u95dc\u9589" + }, + "title": "\u8a2d\u5b9a CoolMasterNet \u9023\u7dda\u8cc7\u8a0a\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/ca.json b/homeassistant/components/coronavirus/.translations/ca.json deleted file mode 100644 index 43bd868d0c4..00000000000 --- a/homeassistant/components/coronavirus/.translations/ca.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest pa\u00eds ja est\u00e0 configurat." - }, - "step": { - "user": { - "data": { - "country": "Pa\u00eds" - }, - "title": "Tria un pa\u00eds a monitoritzar" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/da.json b/homeassistant/components/coronavirus/.translations/da.json deleted file mode 100644 index 5f3dc09cf20..00000000000 --- a/homeassistant/components/coronavirus/.translations/da.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dette land er allerede konfigureret." - }, - "step": { - "user": { - "data": { - "country": "Land" - }, - "title": "V\u00e6lg et land at overv\u00e5ge" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/de.json b/homeassistant/components/coronavirus/.translations/de.json deleted file mode 100644 index d3602540349..00000000000 --- a/homeassistant/components/coronavirus/.translations/de.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses Land ist bereits konfiguriert." - }, - "step": { - "user": { - "data": { - "country": "Land" - }, - "title": "W\u00e4hlen Sie ein Land aus, das \u00fcberwacht werden soll" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/en.json b/homeassistant/components/coronavirus/.translations/en.json deleted file mode 100644 index b19e42cdf27..00000000000 --- a/homeassistant/components/coronavirus/.translations/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This country is already configured." - }, - "step": { - "user": { - "data": { - "country": "Country" - }, - "title": "Pick a country to monitor" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/es.json b/homeassistant/components/coronavirus/.translations/es.json deleted file mode 100644 index edc31f48761..00000000000 --- a/homeassistant/components/coronavirus/.translations/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este pa\u00eds ya est\u00e1 configurado." - }, - "step": { - "user": { - "data": { - "country": "Pa\u00eds" - }, - "title": "Elige un pa\u00eds para monitorizar" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/fr.json b/homeassistant/components/coronavirus/.translations/fr.json deleted file mode 100644 index 923a4cdc819..00000000000 --- a/homeassistant/components/coronavirus/.translations/fr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce pays est d\u00e9j\u00e0 configur\u00e9." - }, - "step": { - "user": { - "data": { - "country": "Pays" - }, - "title": "Choisissez un pays \u00e0 surveiller" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/hu.json b/homeassistant/components/coronavirus/.translations/hu.json deleted file mode 100644 index 171aedc801d..00000000000 --- a/homeassistant/components/coronavirus/.translations/hu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ez az orsz\u00e1g m\u00e1r konfigur\u00e1lva van." - }, - "step": { - "user": { - "data": { - "country": "Orsz\u00e1g" - }, - "title": "V\u00e1lassz egy orsz\u00e1got a megfigyel\u00e9shez" - } - }, - "title": "Koronav\u00edrus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/it.json b/homeassistant/components/coronavirus/.translations/it.json deleted file mode 100644 index 6fc6bd8f811..00000000000 --- a/homeassistant/components/coronavirus/.translations/it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questa Nazione \u00e8 gi\u00e0 configurata." - }, - "step": { - "user": { - "data": { - "country": "Nazione" - }, - "title": "Scegliere una Nazione da monitorare" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/ko.json b/homeassistant/components/coronavirus/.translations/ko.json deleted file mode 100644 index 8c03db18527..00000000000 --- a/homeassistant/components/coronavirus/.translations/ko.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uad6d\uac00\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "country": "\uad6d\uac00" - }, - "title": "\ubaa8\ub2c8\ud130\ub9c1 \ud560 \uad6d\uac00\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694" - } - }, - "title": "\ucf54\ub85c\ub098 \ubc14\uc774\ub7ec\uc2a4" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/lb.json b/homeassistant/components/coronavirus/.translations/lb.json deleted file mode 100644 index dbd56e461bb..00000000000 --- a/homeassistant/components/coronavirus/.translations/lb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebst Land ass scho konfigur\u00e9iert" - }, - "step": { - "user": { - "data": { - "country": "Land" - }, - "title": "Wiel ee Land aus fir z'iwwerwaachen" - } - }, - "title": "Coronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/no.json b/homeassistant/components/coronavirus/.translations/no.json deleted file mode 100644 index 03a3ff49916..00000000000 --- a/homeassistant/components/coronavirus/.translations/no.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dette landet er allerede konfigurert." - }, - "step": { - "user": { - "data": { - "country": "Land" - }, - "title": "Velg et land du vil overv\u00e5ke" - } - }, - "title": "Koronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/pl.json b/homeassistant/components/coronavirus/.translations/pl.json deleted file mode 100644 index 9862d924ca4..00000000000 --- a/homeassistant/components/coronavirus/.translations/pl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ten kraj jest ju\u017c skonfigurowany." - }, - "step": { - "user": { - "data": { - "country": "Kraj" - }, - "title": "Wybierz kraj do monitorowania" - } - }, - "title": "Koronawirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/ru.json b/homeassistant/components/coronavirus/.translations/ru.json deleted file mode 100644 index b8e5a069e4a..00000000000 --- a/homeassistant/components/coronavirus/.translations/ru.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "user": { - "data": { - "country": "\u0421\u0442\u0440\u0430\u043d\u0430" - }, - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0443 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430" - } - }, - "title": "\u041a\u043e\u0440\u043e\u043d\u0430\u0432\u0438\u0440\u0443\u0441" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/sl.json b/homeassistant/components/coronavirus/.translations/sl.json deleted file mode 100644 index 180de6d8c18..00000000000 --- a/homeassistant/components/coronavirus/.translations/sl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta dr\u017eava je \u017ee nastavljena." - }, - "step": { - "user": { - "data": { - "country": "Dr\u017eava" - }, - "title": "Izberite dr\u017eavo za spremljanje" - } - }, - "title": "Koronavirus" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/zh-Hans.json b/homeassistant/components/coronavirus/.translations/zh-Hans.json deleted file mode 100644 index f122e794424..00000000000 --- a/homeassistant/components/coronavirus/.translations/zh-Hans.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u56fd\u5bb6/\u5730\u533a\u5df2\u914d\u7f6e\u5b8c\u6210\u3002" - }, - "step": { - "user": { - "data": { - "country": "\u56fd\u5bb6/\u5730\u533a" - }, - "title": "\u8bf7\u9009\u62e9\u8981\u76d1\u63a7\u7684\u56fd\u5bb6/\u5730\u533a" - } - }, - "title": "\u65b0\u578b\u51a0\u72b6\u75c5\u6bd2" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/.translations/zh-Hant.json b/homeassistant/components/coronavirus/.translations/zh-Hant.json deleted file mode 100644 index 7286694fd9b..00000000000 --- a/homeassistant/components/coronavirus/.translations/zh-Hant.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u570b\u5bb6\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "step": { - "user": { - "data": { - "country": "\u570b\u5bb6" - }, - "title": "\u9078\u64c7\u6240\u8981\u76e3\u8996\u7684\u570b\u5bb6" - } - }, - "title": "\u65b0\u51a0\u72c0\u75c5\u6bd2" - } -} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/manifest.json b/homeassistant/components/coronavirus/manifest.json index 68e73525291..5248cf38221 100644 --- a/homeassistant/components/coronavirus/manifest.json +++ b/homeassistant/components/coronavirus/manifest.json @@ -4,9 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/coronavirus", "requirements": ["coronavirus==1.1.0"], - "ssdp": [], - "zeroconf": [], - "homekit": {}, - "dependencies": [], "codeowners": ["@home_assistant/core"] } diff --git a/homeassistant/components/coronavirus/strings.json b/homeassistant/components/coronavirus/strings.json index fd4873c808c..949034e6bc7 100644 --- a/homeassistant/components/coronavirus/strings.json +++ b/homeassistant/components/coronavirus/strings.json @@ -1,16 +1,11 @@ { "config": { - "title": "Coronavirus", "step": { "user": { "title": "Pick a country to monitor", - "data": { - "country": "Country" - } + "data": { "country": "Country" } } }, - "abort": { - "already_configured": "This country is already configured." - } + "abort": { "already_configured": "This country is already configured." } } } diff --git a/homeassistant/components/coronavirus/translations/ca.json b/homeassistant/components/coronavirus/translations/ca.json new file mode 100644 index 00000000000..c44da0ab21a --- /dev/null +++ b/homeassistant/components/coronavirus/translations/ca.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest pa\u00eds ja est\u00e0 configurat." + }, + "step": { + "user": { + "data": { + "country": "Pa\u00eds" + }, + "title": "Tria un pa\u00eds a monitoritzar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/da.json b/homeassistant/components/coronavirus/translations/da.json new file mode 100644 index 00000000000..c368b5af561 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/da.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Dette land er allerede konfigureret." + }, + "step": { + "user": { + "data": { + "country": "Land" + }, + "title": "V\u00e6lg et land at overv\u00e5ge" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/de.json b/homeassistant/components/coronavirus/translations/de.json new file mode 100644 index 00000000000..f2aee659bc0 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/de.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses Land ist bereits konfiguriert." + }, + "step": { + "user": { + "data": { + "country": "Land" + }, + "title": "W\u00e4hlen Sie ein Land aus, das \u00fcberwacht werden soll" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/en.json b/homeassistant/components/coronavirus/translations/en.json new file mode 100644 index 00000000000..f388c734351 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/en.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "This country is already configured." + }, + "step": { + "user": { + "data": { + "country": "Country" + }, + "title": "Pick a country to monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/es.json b/homeassistant/components/coronavirus/translations/es.json new file mode 100644 index 00000000000..91bd835de7e --- /dev/null +++ b/homeassistant/components/coronavirus/translations/es.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Este pa\u00eds ya est\u00e1 configurado." + }, + "step": { + "user": { + "data": { + "country": "Pa\u00eds" + }, + "title": "Elige un pa\u00eds para monitorizar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/fr.json b/homeassistant/components/coronavirus/translations/fr.json new file mode 100644 index 00000000000..21a72d80f61 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/fr.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Ce pays est d\u00e9j\u00e0 configur\u00e9." + }, + "step": { + "user": { + "data": { + "country": "Pays" + }, + "title": "Choisissez un pays \u00e0 surveiller" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/hu.json b/homeassistant/components/coronavirus/translations/hu.json new file mode 100644 index 00000000000..fcee85c40e8 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/hu.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Ez az orsz\u00e1g m\u00e1r konfigur\u00e1lva van." + }, + "step": { + "user": { + "data": { + "country": "Orsz\u00e1g" + }, + "title": "V\u00e1lassz egy orsz\u00e1got a megfigyel\u00e9shez" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/it.json b/homeassistant/components/coronavirus/translations/it.json new file mode 100644 index 00000000000..26b40e06ebd --- /dev/null +++ b/homeassistant/components/coronavirus/translations/it.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Questa Nazione \u00e8 gi\u00e0 configurata." + }, + "step": { + "user": { + "data": { + "country": "Nazione" + }, + "title": "Scegliere una Nazione da monitorare" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/ko.json b/homeassistant/components/coronavirus/translations/ko.json new file mode 100644 index 00000000000..e549a674693 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/ko.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uad6d\uac00\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "country": "\uad6d\uac00" + }, + "title": "\ubaa8\ub2c8\ud130\ub9c1 \ud560 \uad6d\uac00\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/lb.json b/homeassistant/components/coronavirus/translations/lb.json new file mode 100644 index 00000000000..916a3e1d20e --- /dev/null +++ b/homeassistant/components/coronavirus/translations/lb.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebst Land ass scho konfigur\u00e9iert" + }, + "step": { + "user": { + "data": { + "country": "Land" + }, + "title": "Wiel ee Land aus fir z'iwwerwaachen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/nl.json b/homeassistant/components/coronavirus/translations/nl.json new file mode 100644 index 00000000000..d306894f7d0 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/nl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Dit land is al geconfigureerd." + }, + "step": { + "user": { + "data": { + "country": "Land" + }, + "title": "Kies een land om te monitoren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/no.json b/homeassistant/components/coronavirus/translations/no.json new file mode 100644 index 00000000000..359f15b3323 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/no.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Dette landet er allerede konfigurert." + }, + "step": { + "user": { + "data": { + "country": "Land" + }, + "title": "Velg et land du vil overv\u00e5ke" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/pl.json b/homeassistant/components/coronavirus/translations/pl.json new file mode 100644 index 00000000000..4660aa81ca6 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/pl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Ten kraj jest ju\u017c skonfigurowany." + }, + "step": { + "user": { + "data": { + "country": "Kraj" + }, + "title": "Wybierz kraj do monitorowania" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/ru.json b/homeassistant/components/coronavirus/translations/ru.json new file mode 100644 index 00000000000..7a39c547c82 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/ru.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "data": { + "country": "\u0421\u0442\u0440\u0430\u043d\u0430" + }, + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0443 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/sl.json b/homeassistant/components/coronavirus/translations/sl.json new file mode 100644 index 00000000000..4ac4358dfc9 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/sl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Ta dr\u017eava je \u017ee nastavljena." + }, + "step": { + "user": { + "data": { + "country": "Dr\u017eava" + }, + "title": "Izberite dr\u017eavo za spremljanje" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/zh-Hans.json b/homeassistant/components/coronavirus/translations/zh-Hans.json new file mode 100644 index 00000000000..5bb92ac1172 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/zh-Hans.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u56fd\u5bb6/\u5730\u533a\u5df2\u914d\u7f6e\u5b8c\u6210\u3002" + }, + "step": { + "user": { + "data": { + "country": "\u56fd\u5bb6/\u5730\u533a" + }, + "title": "\u8bf7\u9009\u62e9\u8981\u76d1\u63a7\u7684\u56fd\u5bb6/\u5730\u533a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/coronavirus/translations/zh-Hant.json b/homeassistant/components/coronavirus/translations/zh-Hant.json new file mode 100644 index 00000000000..22d5b893e42 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/zh-Hant.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u570b\u5bb6\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "step": { + "user": { + "data": { + "country": "\u570b\u5bb6" + }, + "title": "\u9078\u64c7\u6240\u8981\u76e3\u8996\u7684\u570b\u5bb6" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/counter/manifest.json b/homeassistant/components/counter/manifest.json index f22c7b252df..ab1a4bf0438 100644 --- a/homeassistant/components/counter/manifest.json +++ b/homeassistant/components/counter/manifest.json @@ -2,8 +2,6 @@ "domain": "counter", "name": "Counter", "documentation": "https://www.home-assistant.io/integrations/counter", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/counter/reproduce_state.py b/homeassistant/components/counter/reproduce_state.py index b37fcea719e..b2dd63adedc 100644 --- a/homeassistant/components/counter/reproduce_state.py +++ b/homeassistant/components/counter/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Counter state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import Context, State @@ -21,7 +21,11 @@ _LOGGER = logging.getLogger(__name__) async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -63,9 +67,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Counter states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/counter/services.yaml b/homeassistant/components/counter/services.yaml index 449ae6841ff..960424df0ca 100644 --- a/homeassistant/components/counter/services.yaml +++ b/homeassistant/components/counter/services.yaml @@ -5,25 +5,25 @@ decrement: fields: entity_id: description: Entity id of the counter to decrement. - example: 'counter.count0' + example: "counter.count0" increment: description: Increment a counter. fields: entity_id: description: Entity id of the counter to increment. - example: 'counter.count0' + example: "counter.count0" reset: description: Reset a counter. fields: entity_id: description: Entity id of the counter to reset. - example: 'counter.count0' + example: "counter.count0" configure: description: Change counter parameters fields: entity_id: description: Entity id of the counter to change. - example: 'counter.count0' + example: "counter.count0" minimum: description: New minimum value for the counter or None to remove minimum example: 0 diff --git a/homeassistant/components/cover/.translations/bg.json b/homeassistant/components/cover/.translations/bg.json deleted file mode 100644 index 4651fb4aebe..00000000000 --- a/homeassistant/components/cover/.translations/bg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_closed": "{entity_name} \u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", - "is_closing": "{entity_name} \u0441\u0435 \u0437\u0430\u0442\u0432\u0430\u0440\u044f", - "is_open": "{entity_name} \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d", - "is_opening": "{entity_name} \u0441\u0435 \u043e\u0442\u0432\u0430\u0440\u044f", - "is_position": "\u0422\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0430 {entity_name} \u0435", - "is_tilt_position": "\u0422\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0430 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u043d\u0430 {entity_name} \u0435" - }, - "trigger_type": { - "closed": "{entity_name} \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", - "closing": "{entity_name} \u0441\u0435 \u0437\u0430\u0442\u0432\u0430\u0440\u044f", - "opened": "{entity_name} \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d", - "opening": "{entity_name} \u0441\u0435 \u043e\u0442\u0432\u0430\u0440\u044f", - "position": "{entity_name} \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0442\u0430 \u0441\u0438", - "tilt_position": "{entity_name} \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u0441\u0438" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/ca.json b/homeassistant/components/cover/.translations/ca.json deleted file mode 100644 index 1a0f0544698..00000000000 --- a/homeassistant/components/cover/.translations/ca.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Tanca {entity_name}", - "close_tilt": "Inclinaci\u00f3 {entity_name} tancat/ada", - "open": "Obre {entity_name}", - "open_tilt": "Inclinaci\u00f3 {entity_name} obert/a", - "set_position": "Estableix la posici\u00f3 de {entity_name}", - "set_tilt_position": "Estableix la inclinaci\u00f3 de {entity_name}" - }, - "condition_type": { - "is_closed": "{entity_name} est\u00e0 tancat/da", - "is_closing": "{entity_name} est\u00e0 tancant-se", - "is_open": "{entity_name} est\u00e0 obert/a", - "is_opening": "{entity_name} s'est\u00e0 obrint", - "is_position": "La posici\u00f3 de {entity_name} \u00e9s", - "is_tilt_position": "La posici\u00f3 d'inclinaci\u00f3 de {entity_name} \u00e9s" - }, - "trigger_type": { - "closed": "{entity_name} tancat/da", - "closing": "{entity_name} tancant-se", - "opened": "{entity_name} s'ha obert", - "opening": "{entity_name} obrint-se", - "position": "Canvia la posici\u00f3 de {entity_name}", - "tilt_position": "Canvia la inclinaci\u00f3 de {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/cs.json b/homeassistant/components/cover/.translations/cs.json deleted file mode 100644 index bed9bc976d3..00000000000 --- a/homeassistant/components/cover/.translations/cs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_closed": "{entity_name} je zav\u0159eno", - "is_closing": "{entity_name} se zav\u00edr\u00e1", - "is_open": "{entity_name} je otev\u0159eno", - "is_opening": "{entity_name} se otev\u00edr\u00e1", - "is_position": "pozice {entity_name} je", - "is_tilt_position": "pozice naklon\u011bn\u00ed {entity_name} je" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/da.json b/homeassistant/components/cover/.translations/da.json deleted file mode 100644 index 29691b4154b..00000000000 --- a/homeassistant/components/cover/.translations/da.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Luk {entity_name}", - "close_tilt": "Luk vippeposition for {entity_name}", - "open": "\u00c5bn {entity_name}", - "open_tilt": "\u00c5bn vippeposition for {entity_name}", - "set_position": "Indstil {entity_name}-position", - "set_tilt_position": "Angiv vippeposition for {entity_name}" - }, - "condition_type": { - "is_closed": "{entity_name} er lukket", - "is_closing": "{entity_name} lukker", - "is_open": "{entity_name} er \u00e5ben", - "is_opening": "{entity_name} \u00e5bnes", - "is_position": "Aktuel {entity_name} position er", - "is_tilt_position": "Aktuel {entity_name} vippeposition er" - }, - "trigger_type": { - "closed": "{entity_name} lukket", - "closing": "{entity_name} lukning", - "opened": "{entity_name} \u00e5bnet", - "opening": "{entity_name} \u00e5bning", - "position": "{entity_name} position \u00e6ndres", - "tilt_position": "{entity_name} vippeposition \u00e6ndres" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/de.json b/homeassistant/components/cover/.translations/de.json deleted file mode 100644 index 9a9f0be21e2..00000000000 --- a/homeassistant/components/cover/.translations/de.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Schlie\u00dfe {entity_name}", - "close_tilt": "{entity_name} gekippt schlie\u00dfen", - "open": "\u00d6ffne {entity_name}", - "open_tilt": "{entity_name} gekippt \u00f6ffnen", - "set_position": "Position von {entity_name} setzen", - "set_tilt_position": "Neigeposition von {entity_name} einstellen" - }, - "condition_type": { - "is_closed": "{entity_name} ist geschlossen", - "is_closing": "{entity_name} wird geschlossen", - "is_open": "{entity_name} ist offen", - "is_opening": "{entity_name} wird ge\u00f6ffnet", - "is_position": "Die Aktuelle Position von {entity_name} ist", - "is_tilt_position": "Die Aktuelle Neigungsposition von {entity_name} ist" - }, - "trigger_type": { - "closed": "{entity_name} geschlossen", - "closing": "{entity_name} wird geschlossen", - "opened": "{entity_name} ge\u00f6ffnet", - "opening": "{entity_name} wird ge\u00f6ffnet", - "position": "{entity_name} ver\u00e4ndert die Position", - "tilt_position": "{entity_name} ver\u00e4ndert die Neigungsposition" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/en.json b/homeassistant/components/cover/.translations/en.json deleted file mode 100644 index e529d6e77d7..00000000000 --- a/homeassistant/components/cover/.translations/en.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Close {entity_name}", - "close_tilt": "Close {entity_name} tilt", - "open": "Open {entity_name}", - "open_tilt": "Open {entity_name} tilt", - "set_position": "Set {entity_name} position", - "set_tilt_position": "Set {entity_name} tilt position" - }, - "condition_type": { - "is_closed": "{entity_name} is closed", - "is_closing": "{entity_name} is closing", - "is_open": "{entity_name} is open", - "is_opening": "{entity_name} is opening", - "is_position": "Current {entity_name} position is", - "is_tilt_position": "Current {entity_name} tilt position is" - }, - "trigger_type": { - "closed": "{entity_name} closed", - "closing": "{entity_name} closing", - "opened": "{entity_name} opened", - "opening": "{entity_name} opening", - "position": "{entity_name} position changes", - "tilt_position": "{entity_name} tilt position changes" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/es.json b/homeassistant/components/cover/.translations/es.json deleted file mode 100644 index 04efe4964e8..00000000000 --- a/homeassistant/components/cover/.translations/es.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Cerrar {entity_name}", - "close_tilt": "Cerrar inclinaci\u00f3n de {entity_name}", - "open": "Abrir {entity_name}", - "open_tilt": "Abrir inclinaci\u00f3n de {entity_name}", - "set_position": "Ajustar la posici\u00f3n de {entity_name}", - "set_tilt_position": "Ajustar la posici\u00f3n de inclinaci\u00f3n de {entity_name}" - }, - "condition_type": { - "is_closed": "{entity_name} est\u00e1 cerrado", - "is_closing": "{entity_name} se est\u00e1 cerrando", - "is_open": "{entity_name} est\u00e1 abierto", - "is_opening": "{entity_name} se est\u00e1 abriendo", - "is_position": "La posici\u00f3n actual de {entity_name} es", - "is_tilt_position": "La posici\u00f3n de inclinaci\u00f3n actual de {entity_name} es" - }, - "trigger_type": { - "closed": "{entity_name} cerrado", - "closing": "{entity_name} cerrando", - "opened": "abierto {entity_name}", - "opening": "abriendo {entity_name}", - "position": "Posici\u00f3n cambiada de {entity_name}", - "tilt_position": "Cambia la posici\u00f3n de inclinaci\u00f3n de {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/fr.json b/homeassistant/components/cover/.translations/fr.json deleted file mode 100644 index 83bd5df826e..00000000000 --- a/homeassistant/components/cover/.translations/fr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Fermer {entity_name}" - }, - "condition_type": { - "is_closed": "{entity_name} est ferm\u00e9", - "is_closing": "{entity_name} se ferme", - "is_open": "{entity_name} est ouvert", - "is_opening": "{entity_name} est en train de s'ouvrir", - "is_position": "La position de {entity_name} est", - "is_tilt_position": "La position d'inclinaison de {entity_name} est" - }, - "trigger_type": { - "closed": "{entity_name} ferm\u00e9", - "closing": "{entity_name} fermeture", - "opened": "{entity_name} ouvert", - "opening": "{entity_name} ouverture", - "position": "{entity_name} changement de position", - "tilt_position": "{entity_name} changement d'inclinaison" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/hu.json b/homeassistant/components/cover/.translations/hu.json deleted file mode 100644 index 5e91736a263..00000000000 --- a/homeassistant/components/cover/.translations/hu.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "{entity_name} z\u00e1r\u00e1sa", - "close_tilt": "{entity_name} d\u00f6nt\u00e9s z\u00e1r\u00e1sa", - "open": "{entity_name} nyit\u00e1sa", - "open_tilt": "{entity_name} d\u00f6nt\u00e9s nyit\u00e1sa", - "set_position": "{entity_name} poz\u00edci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa", - "set_tilt_position": "{entity_name} d\u00f6nt\u00e9si poz\u00edci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa" - }, - "condition_type": { - "is_closed": "{entity_name} z\u00e1rva van", - "is_closing": "{entity_name} z\u00e1r\u00f3dik", - "is_open": "{entity_name} nyitva van", - "is_opening": "{entity_name} ny\u00edlik", - "is_position": "{entity_name} jelenlegi poz\u00edci\u00f3ja", - "is_tilt_position": "{entity_name} jelenlegi d\u00f6nt\u00e9si poz\u00edci\u00f3ja" - }, - "trigger_type": { - "closed": "{entity_name} bez\u00e1r\u00f3dott", - "closing": "{entity_name} z\u00e1r\u00f3dik", - "opened": "{entity_name} kiny\u00edlt", - "opening": "{entity_name} ny\u00edlik", - "position": "{entity_name} poz\u00edci\u00f3ja v\u00e1ltozik", - "tilt_position": "{entity_name} d\u00f6nt\u00e9si poz\u00edci\u00f3ja v\u00e1ltozik" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/it.json b/homeassistant/components/cover/.translations/it.json deleted file mode 100644 index 1e2e85821a9..00000000000 --- a/homeassistant/components/cover/.translations/it.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Chiudi {entity_name}", - "close_tilt": "Chiudi l'inclinazione di {entity_name}", - "open": "Apri {entity_name}", - "open_tilt": "Apri l'inclinazione di {entity_name}", - "set_position": "Imposta la posizione di {entity_name}", - "set_tilt_position": "Imposta la posizione di inclinazione di {entity_name}" - }, - "condition_type": { - "is_closed": "{entity_name} \u00e8 chiuso", - "is_closing": "{entity_name} si sta chiudendo", - "is_open": "{entity_name} \u00e8 aperto", - "is_opening": "{entity_name} si sta aprendo", - "is_position": "La posizione attuale di {entity_name} \u00e8", - "is_tilt_position": "La posizione d'inclinazione attuale di {entity_name} \u00e8" - }, - "trigger_type": { - "closed": "{entity_name} chiuso", - "closing": "{entity_name} in chiusura", - "opened": "{entity_name} aperto", - "opening": "{entity_name} in apertura", - "position": "{entity_name} cambiamenti della posizione", - "tilt_position": "{entity_name} cambiamenti della posizione d'inclinazione" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/ko.json b/homeassistant/components/cover/.translations/ko.json deleted file mode 100644 index ae67663f46f..00000000000 --- a/homeassistant/components/cover/.translations/ko.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "{entity_name} \ub2eb\uae30", - "close_tilt": "{entity_name} \ub2eb\uae30", - "open": "{entity_name} \uc5f4\uae30", - "open_tilt": "{entity_name} \uc5f4\uae30", - "set_position": "{entity_name} \uac1c\ud3d0 \uc704\uce58 \uc124\uc815\ud558\uae30", - "set_tilt_position": "{entity_name} \uac1c\ud3d0 \uae30\uc6b8\uae30 \uc124\uc815\ud558\uae30" - }, - "condition_type": { - "is_closed": "{entity_name} \uc774(\uac00) \ub2eb\ud600 \uc788\uc73c\uba74", - "is_closing": "{entity_name} \uc774(\uac00) \ub2eb\ud788\ub294 \uc911\uc774\uba74", - "is_open": "{entity_name} \uc774(\uac00) \uc5f4\ub824 \uc788\uc73c\uba74", - "is_opening": "{entity_name} \uc774(\uac00) \uc5f4\ub9ac\ub294 \uc911\uc774\uba74", - "is_position": "\ud604\uc7ac {entity_name} \uac1c\ud3d0 \uc704\uce58\uac00 ~ \uc774\uba74", - "is_tilt_position": "\ud604\uc7ac {entity_name} \uac1c\ud3d0 \uae30\uc6b8\uae30\uac00 ~ \uc774\uba74" - }, - "trigger_type": { - "closed": "{entity_name} \uc774(\uac00) \ub2eb\ud790 \ub54c", - "closing": "{entity_name} \uc774(\uac00) \ub2eb\ud788\ub294 \uc911\uc77c \ub54c", - "opened": "{entity_name} \uc774(\uac00) \uc5f4\ub9b4 \ub54c", - "opening": "{entity_name} \uc774(\uac00) \uc5f4\ub9ac\ub294 \uc911\uc77c \ub54c", - "position": "{entity_name} \uac1c\ud3d0 \uc704\uce58\uac00 \ubcc0\ud560 \ub54c", - "tilt_position": "{entity_name} \uac1c\ud3d0 \uae30\uc6b8\uae30\uac00 \ubcc0\ud560 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/lb.json b/homeassistant/components/cover/.translations/lb.json deleted file mode 100644 index 4cbbf348872..00000000000 --- a/homeassistant/components/cover/.translations/lb.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "{entity_name} zoumaachen", - "close_tilt": "{entity_name} Kipp zoumaachen", - "open": "{entity_name} opmaachen", - "open_tilt": "{entity_name} op Kipp stelle", - "set_position": "{entity_name} positioun programm\u00e9ieren", - "set_tilt_position": "{entity_name} kipp positioun programm\u00e9ieren" - }, - "condition_type": { - "is_closed": "{entity_name} ass zou", - "is_closing": "{entity_name} g\u00ebtt zougemaach", - "is_open": "{entity_name} ass op", - "is_opening": "{entity_name} g\u00ebtt opgemaach", - "is_position": "Aktuell {entity_name} positioun ass", - "is_tilt_position": "Aktuell {entity_name} kipp positioun ass" - }, - "trigger_type": { - "closed": "{entity_name} gouf zougemaach", - "closing": "{entity_name} mecht zou", - "opened": "{entity_name} gouf opgemaach", - "opening": "{entity_name} mecht op", - "position": "{entity_name} positioun \u00e4nnert", - "tilt_position": "{entity_name} kipp positioun ge\u00e4nnert" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/nl.json b/homeassistant/components/cover/.translations/nl.json deleted file mode 100644 index 472583687dd..00000000000 --- a/homeassistant/components/cover/.translations/nl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_closed": "{entity_name} is gesloten", - "is_closing": "{entity_name} wordt gesloten", - "is_open": "{entity_name} is open", - "is_opening": "{entity_name} wordt geopend", - "is_position": "Huidige {entity_name} positie is", - "is_tilt_position": "Huidige {entity_name} kantel positie is" - }, - "trigger_type": { - "closed": "{entity_name} gesloten", - "closing": "{entity_name} wordt gesloten", - "opened": "{entity_name} geopend", - "opening": "{entity_name} wordt geopend", - "position": "{entity_name} positiewijzigingen", - "tilt_position": "{entity_name} kantel positiewijzigingen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/no.json b/homeassistant/components/cover/.translations/no.json deleted file mode 100644 index 369d6b30cb8..00000000000 --- a/homeassistant/components/cover/.translations/no.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Lukk {entity_name}", - "close_tilt": "Lukk {entity_name} tilt", - "open": "\u00c5pne {entity_name}", - "open_tilt": "\u00c5pne {entity_name} tilt", - "set_position": "Angi {entity_name} posisjon", - "set_tilt_position": "Angi {entity_name} tilt posisjon" - }, - "condition_type": { - "is_closed": "{entity_name} er stengt", - "is_closing": "{entity_name} stenges", - "is_open": "{entity_name} er \u00e5pen", - "is_opening": "{entity_name} \u00e5pnes", - "is_position": "{entity_name}-posisjonen er", - "is_tilt_position": "{entity_name} vippeposisjon er" - }, - "trigger_type": { - "closed": "{entity_name} lukket", - "closing": "{entity_name} lukkes", - "opened": "{entity_name} \u00e5pnet", - "opening": "{entity_name} \u00e5pning", - "position": "{entity_name} posisjon endringer", - "tilt_position": "{entity_name} endringer i vippeposisjon" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/pl.json b/homeassistant/components/cover/.translations/pl.json deleted file mode 100644 index ce035b2533e..00000000000 --- a/homeassistant/components/cover/.translations/pl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "zamknij {entity_name}", - "close_tilt": "zamknij pochylenie {entity_name}", - "open": "otw\u00f3rz {entity_name}", - "open_tilt": "otw\u00f3rz {entity_name} do pochylenia", - "set_position": "ustaw pozycj\u0119 {entity_name}", - "set_tilt_position": "ustaw pochylenie {entity_name}" - }, - "condition_type": { - "is_closed": "pokrywa {entity_name} jest zamkni\u0119ta", - "is_closing": "{entity_name} si\u0119 zamyka", - "is_open": "pokrywa {entity_name} jest otwarta", - "is_opening": "{entity_name} si\u0119 otwiera", - "is_position": "pozycja pokrywy {entity_name} to", - "is_tilt_position": "pochylenie pokrywy {entity_name} to" - }, - "trigger_type": { - "closed": "nast\u0105pi zamkni\u0119cie {entity_name}", - "closing": "{entity_name} si\u0119 zamyka", - "opened": "nast\u0105pi otwarcie {entity_name}", - "opening": "{entity_name} si\u0119 otwiera", - "position": "zmieni si\u0119 pozycja pokrywy {entity_name}", - "tilt_position": "zmieni si\u0119 pochylenie pokrywy {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/pt.json b/homeassistant/components/cover/.translations/pt.json deleted file mode 100644 index 6234d2685f4..00000000000 --- a/homeassistant/components/cover/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_closed": "{entity_name} est\u00e1 fechada", - "is_closing": "{entity_name} est\u00e1 a fechar", - "is_open": "{entity_name} est\u00e1 aberta", - "is_opening": "{entity_name} est\u00e1 a abrir", - "is_position": "A posi\u00e7\u00e3o atual de {entity_name} \u00e9", - "is_tilt_position": "A inclina\u00e7\u00e3o actual de {entity_name} \u00e9" - }, - "trigger_type": { - "closed": "{entity_name} fechou", - "closing": "{entity_name} est\u00e1 a fechar", - "opened": "{entity_name} abriu", - "opening": "{entity_name} est\u00e1 a abrir" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/ru.json b/homeassistant/components/cover/.translations/ru.json deleted file mode 100644 index 97a8a8ba1bb..00000000000 --- a/homeassistant/components/cover/.translations/ru.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c {entity_name}", - "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c {entity_name}", - "set_position": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 {entity_name}", - "set_tilt_position": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 {entity_name}" - }, - "condition_type": { - "is_closed": "{entity_name} \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_closing": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "is_open": "{entity_name} \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_opening": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "is_position": "{entity_name} \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438", - "is_tilt_position": "{entity_name} \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u0430" - }, - "trigger_type": { - "closed": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0442\u043e", - "closing": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "opened": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0442\u043e", - "opening": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "position": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435", - "tilt_position": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u043a\u043b\u043e\u043d" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/sl.json b/homeassistant/components/cover/.translations/sl.json deleted file mode 100644 index 818f17d58fe..00000000000 --- a/homeassistant/components/cover/.translations/sl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "Zapri {entity_name}", - "close_tilt": "Zapri {entity_name} nagib", - "open": "Odprite {entity_name}", - "open_tilt": "Odprite {entity_name} nagib", - "set_position": "Nastavite polo\u017eaj {entity_name}", - "set_tilt_position": "Nastavite {entity_name} nagibni polo\u017eaj" - }, - "condition_type": { - "is_closed": "{entity_name} je/so zaprt/a", - "is_closing": "{entity_name} se zapira/jo", - "is_open": "{entity_name} je odprt/a/o", - "is_opening": "{entity_name} se odpira/jo", - "is_position": "Trenutna pozicija {entity_name} je", - "is_tilt_position": "Trenutni polo\u017eaj nagiba {entity_name} je" - }, - "trigger_type": { - "closed": "{entity_name} se je/so se zaprla", - "closing": "{entity_name} se zapira/jo", - "opened": "{entity_name} se/so je odprla", - "opening": "{entity_name} se odpira/jo", - "position": "{entity_name} spremembe polo\u017eaja", - "tilt_position": "{entity_name} spremembe nagiba" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/sv.json b/homeassistant/components/cover/.translations/sv.json deleted file mode 100644 index 906768d3eb3..00000000000 --- a/homeassistant/components/cover/.translations/sv.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_closed": "{entity_name} \u00e4r st\u00e4ngd", - "is_closing": "{entity_name} st\u00e4ngs", - "is_open": "{entity_name} \u00e4r \u00f6ppen", - "is_opening": "{entity_name} \u00f6ppnas", - "is_position": "Aktuell position f\u00f6r {entity_name} \u00e4r", - "is_tilt_position": "Aktuell {entity_name} lutningsposition \u00e4r" - }, - "trigger_type": { - "closed": "{entity_name} st\u00e4ngd", - "closing": "{entity_name} st\u00e4nger", - "opened": "{entity_name} \u00f6ppnades", - "opening": "{entity_name} \u00f6ppnas", - "position": "{entity_name} position \u00e4ndras", - "tilt_position": "{entity_name} lutningsposition \u00e4ndras" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/.translations/zh-Hant.json b/homeassistant/components/cover/.translations/zh-Hant.json deleted file mode 100644 index d91010e974e..00000000000 --- a/homeassistant/components/cover/.translations/zh-Hant.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "device_automation": { - "action_type": { - "close": "\u95dc\u9589{entity_name}", - "close_tilt": "\u95dc\u9589{entity_name}\u7a97\u7c3e", - "open": "\u958b\u555f{entity_name}", - "open_tilt": "\u958b\u555f{entity_name}\u7a97\u7c3e", - "set_position": "\u8a2d\u5b9a{entity_name}\u4f4d\u7f6e", - "set_tilt_position": "\u8a2d\u5b9a{entity_name}\u5e8a\u7c3e\u4f4d\u7f6e" - }, - "condition_type": { - "is_closed": "{entity_name}\u5df2\u95dc\u9589", - "is_closing": "{entity_name}\u6b63\u5728\u95dc\u9589", - "is_open": "{entity_name}\u5df2\u958b\u555f", - "is_opening": "{entity_name}\u6b63\u5728\u958b\u555f", - "is_position": "\u76ee\u524d{entity_name}\u4f4d\u7f6e\u70ba", - "is_tilt_position": "\u76ee\u524d{entity_name}\u6a19\u984c\u4f4d\u7f6e\u70ba" - }, - "trigger_type": { - "closed": "{entity_name}\u5df2\u95dc\u9589", - "closing": "{entity_name}\u6b63\u5728\u95dc\u9589", - "opened": "{entity_name}\u5df2\u958b\u555f", - "opening": "{entity_name}\u6b63\u5728\u958b\u555f", - "position": "{entity_name}\u4f4d\u7f6e\u8b8a\u66f4", - "tilt_position": "{entity_name}\u6a19\u984c\u4f4d\u7f6e\u8b8a\u66f4" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/cover/__init__.py b/homeassistant/components/cover/__init__.py index e63054d23b2..cb2812f319b 100644 --- a/homeassistant/components/cover/__init__.py +++ b/homeassistant/components/cover/__init__.py @@ -162,7 +162,6 @@ class CoverDevice(Entity): None is unknown, 0 is closed, 100 is fully open. """ - pass @property def current_cover_tilt_position(self): @@ -170,7 +169,6 @@ class CoverDevice(Entity): None is unknown, 0 is closed, 100 is fully open. """ - pass @property def state(self): @@ -223,12 +221,10 @@ class CoverDevice(Entity): @property def is_opening(self): """Return if the cover is opening or not.""" - pass @property def is_closing(self): """Return if the cover is closing or not.""" - pass @property def is_closed(self): @@ -267,7 +263,6 @@ class CoverDevice(Entity): def set_cover_position(self, **kwargs): """Move the cover to a specific position.""" - pass async def async_set_cover_position(self, **kwargs): """Move the cover to a specific position.""" @@ -275,7 +270,6 @@ class CoverDevice(Entity): def stop_cover(self, **kwargs): """Stop the cover.""" - pass async def async_stop_cover(self, **kwargs): """Stop the cover.""" @@ -283,7 +277,6 @@ class CoverDevice(Entity): def open_cover_tilt(self, **kwargs: Any) -> None: """Open the cover tilt.""" - pass async def async_open_cover_tilt(self, **kwargs): """Open the cover tilt.""" @@ -291,7 +284,6 @@ class CoverDevice(Entity): def close_cover_tilt(self, **kwargs: Any) -> None: """Close the cover tilt.""" - pass async def async_close_cover_tilt(self, **kwargs): """Close the cover tilt.""" @@ -299,7 +291,6 @@ class CoverDevice(Entity): def set_cover_tilt_position(self, **kwargs): """Move the cover tilt to a specific position.""" - pass async def async_set_cover_tilt_position(self, **kwargs): """Move the cover tilt to a specific position.""" @@ -309,7 +300,6 @@ class CoverDevice(Entity): def stop_cover_tilt(self, **kwargs): """Stop the cover.""" - pass async def async_stop_cover_tilt(self, **kwargs): """Stop the cover.""" diff --git a/homeassistant/components/cover/device_condition.py b/homeassistant/components/cover/device_condition.py index 7c6dc5fed72..0bcec2a6e43 100644 --- a/homeassistant/components/cover/device_condition.py +++ b/homeassistant/components/cover/device_condition.py @@ -191,8 +191,8 @@ def async_condition_from_config( position = "current_position" if config[CONF_TYPE] == "is_tilt_position": position = "current_tilt_position" - min_pos = config.get(CONF_ABOVE, None) - max_pos = config.get(CONF_BELOW, None) + min_pos = config.get(CONF_ABOVE) + max_pos = config.get(CONF_BELOW) value_template = template.Template( # type: ignore f"{{{{ state.attributes.{position} }}}}" ) diff --git a/homeassistant/components/cover/manifest.json b/homeassistant/components/cover/manifest.json index 788d72b707f..3da130fd799 100644 --- a/homeassistant/components/cover/manifest.json +++ b/homeassistant/components/cover/manifest.json @@ -2,8 +2,6 @@ "domain": "cover", "name": "Cover", "documentation": "https://www.home-assistant.io/integrations/cover", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/cover/reproduce_state.py b/homeassistant/components/cover/reproduce_state.py index 64ea410ce93..2a12172bdab 100644 --- a/homeassistant/components/cover/reproduce_state.py +++ b/homeassistant/components/cover/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Cover state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.components.cover import ( ATTR_CURRENT_POSITION, @@ -33,7 +33,11 @@ VALID_STATES = {STATE_CLOSED, STATE_CLOSING, STATE_OPEN, STATE_OPENING} async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -61,13 +65,15 @@ async def _async_reproduce_state( service_data = {ATTR_ENTITY_ID: state.entity_id} service_data_tilting = {ATTR_ENTITY_ID: state.entity_id} - if cur_state.state != state.state or cur_state.attributes.get( - ATTR_CURRENT_POSITION - ) != state.attributes.get(ATTR_CURRENT_POSITION): + if not ( + cur_state.state == state.state + and cur_state.attributes.get(ATTR_CURRENT_POSITION) + == state.attributes.get(ATTR_CURRENT_POSITION) + ): # Open/Close - if state.state == STATE_CLOSED or state.state == STATE_CLOSING: + if state.state in [STATE_CLOSED, STATE_CLOSING]: service = SERVICE_CLOSE_COVER - elif state.state == STATE_OPEN or state.state == STATE_OPENING: + elif state.state in [STATE_OPEN, STATE_OPENING]: if ( ATTR_CURRENT_POSITION in cur_state.attributes and ATTR_CURRENT_POSITION in state.attributes @@ -108,10 +114,19 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Cover states.""" # Reproduce states in parallel. await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/cover/services.yaml b/homeassistant/components/cover/services.yaml index 64534e40974..604955aa199 100644 --- a/homeassistant/components/cover/services.yaml +++ b/homeassistant/components/cover/services.yaml @@ -5,28 +5,28 @@ open_cover: fields: entity_id: description: Name(s) of cover(s) to open. - example: 'cover.living_room' + example: "cover.living_room" close_cover: description: Close all or specified cover. fields: entity_id: description: Name(s) of cover(s) to close. - example: 'cover.living_room' + example: "cover.living_room" toggle: description: Toggles a cover open/closed. fields: entity_id: description: Name(s) of cover(s) to toggle. - example: 'cover.garage_door' + example: "cover.garage_door" set_cover_position: description: Move to specific position all or specified cover. fields: entity_id: description: Name(s) of cover(s) to set cover position. - example: 'cover.living_room' + example: "cover.living_room" position: description: Position of the cover (0 to 100). example: 30 @@ -36,35 +36,35 @@ stop_cover: fields: entity_id: description: Name(s) of cover(s) to stop. - example: 'cover.living_room' + example: "cover.living_room" open_cover_tilt: description: Open all or specified cover tilt. fields: entity_id: description: Name(s) of cover(s) tilt to open. - example: 'cover.living_room_blinds' + example: "cover.living_room_blinds" close_cover_tilt: description: Close all or specified cover tilt. fields: entity_id: description: Name(s) of cover(s) to close tilt. - example: 'cover.living_room_blinds' + example: "cover.living_room_blinds" toggle_cover_tilt: description: Toggles a cover tilt open/closed. fields: entity_id: description: Name(s) of cover(s) to toggle tilt. - example: 'cover.living_room_blinds' + example: "cover.living_room_blinds" set_cover_tilt_position: description: Move to specific position all or specified cover tilt. fields: entity_id: description: Name(s) of cover(s) to set cover tilt position. - example: 'cover.living_room_blinds' + example: "cover.living_room_blinds" tilt_position: description: Tilt position of the cover (0 to 100). example: 30 @@ -74,4 +74,4 @@ stop_cover_tilt: fields: entity_id: description: Name(s) of cover(s) to stop. - example: 'cover.living_room_blinds' + example: "cover.living_room_blinds" diff --git a/homeassistant/components/cover/strings.json b/homeassistant/components/cover/strings.json index 90dac7c7d02..de52614891f 100644 --- a/homeassistant/components/cover/strings.json +++ b/homeassistant/components/cover/strings.json @@ -1,4 +1,5 @@ { + "title": "Cover", "device_automation": { "action_type": { "open": "Open {entity_name}", @@ -24,5 +25,14 @@ "position": "{entity_name} position changes", "tilt_position": "{entity_name} tilt position changes" } + }, + "state": { + "_": { + "open": "[%key:common::state::open%]", + "opening": "Opening", + "closed": "[%key:common::state::closed%]", + "closing": "Closing", + "stopped": "Stopped" + } } } diff --git a/homeassistant/components/cover/translations/af.json b/homeassistant/components/cover/translations/af.json new file mode 100644 index 00000000000..581cc0b6919 --- /dev/null +++ b/homeassistant/components/cover/translations/af.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Toe", + "closing": "Sluiting", + "open": "Oop", + "opening": "Opening", + "stopped": "Gestop" + } + }, + "title": "Dekking" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ar.json b/homeassistant/components/cover/translations/ar.json new file mode 100644 index 00000000000..5fecd1da06e --- /dev/null +++ b/homeassistant/components/cover/translations/ar.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0645\u063a\u0644\u0642", + "closing": "\u062c\u0627\u0631\u064a \u0627\u0644\u0627\u063a\u0644\u0627\u0642", + "open": "\u0645\u0641\u062a\u0648\u062d", + "opening": "\u062c\u0627\u0631\u064a \u0627\u0644\u0641\u062a\u062d", + "stopped": "\u0645\u0648\u0642\u0641" + } + }, + "title": "\u0633\u062a\u0627\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/bg.json b/homeassistant/components/cover/translations/bg.json new file mode 100644 index 00000000000..99b9240f2ae --- /dev/null +++ b/homeassistant/components/cover/translations/bg.json @@ -0,0 +1,30 @@ +{ + "device_automation": { + "condition_type": { + "is_closed": "{entity_name} \u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", + "is_closing": "{entity_name} \u0441\u0435 \u0437\u0430\u0442\u0432\u0430\u0440\u044f", + "is_open": "{entity_name} \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d", + "is_opening": "{entity_name} \u0441\u0435 \u043e\u0442\u0432\u0430\u0440\u044f", + "is_position": "\u0422\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0430 {entity_name} \u0435", + "is_tilt_position": "\u0422\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0430 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u043d\u0430 {entity_name} \u0435" + }, + "trigger_type": { + "closed": "{entity_name} \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d", + "closing": "{entity_name} \u0441\u0435 \u0437\u0430\u0442\u0432\u0430\u0440\u044f", + "opened": "{entity_name} \u0435 \u043e\u0442\u0432\u043e\u0440\u0435\u043d", + "opening": "{entity_name} \u0441\u0435 \u043e\u0442\u0432\u0430\u0440\u044f", + "position": "{entity_name} \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0442\u0430 \u0441\u0438", + "tilt_position": "{entity_name} \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u0441\u0438" + } + }, + "state": { + "_": { + "closed": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430", + "closing": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435", + "open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430", + "opening": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435", + "stopped": "\u0421\u043f\u0440\u044f\u043d\u0430" + } + }, + "title": "\u041f\u0430\u0440\u0430\u0432\u0430\u043d" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/bs.json b/homeassistant/components/cover/translations/bs.json new file mode 100644 index 00000000000..fba4be0c94f --- /dev/null +++ b/homeassistant/components/cover/translations/bs.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Zatvoren", + "closing": "Zatvoreno", + "open": "Otvoren", + "opening": "Otvoreno", + "stopped": "Zaustavljen" + } + }, + "title": "Poklopac" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ca.json b/homeassistant/components/cover/translations/ca.json new file mode 100644 index 00000000000..e54cc563da5 --- /dev/null +++ b/homeassistant/components/cover/translations/ca.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Tanca {entity_name}", + "close_tilt": "Inclinaci\u00f3 {entity_name} tancat/ada", + "open": "Obre {entity_name}", + "open_tilt": "Inclinaci\u00f3 {entity_name} obert/a", + "set_position": "Estableix la posici\u00f3 de {entity_name}", + "set_tilt_position": "Estableix la inclinaci\u00f3 de {entity_name}" + }, + "condition_type": { + "is_closed": "{entity_name} est\u00e0 tancat/da", + "is_closing": "{entity_name} est\u00e0 tancant-se", + "is_open": "{entity_name} est\u00e0 obert/a", + "is_opening": "{entity_name} s'est\u00e0 obrint", + "is_position": "La posici\u00f3 de {entity_name} \u00e9s", + "is_tilt_position": "La posici\u00f3 d'inclinaci\u00f3 de {entity_name} \u00e9s" + }, + "trigger_type": { + "closed": "{entity_name} tancat/da", + "closing": "{entity_name} tancant-se", + "opened": "{entity_name} s'ha obert", + "opening": "{entity_name} obrint-se", + "position": "Canvia la posici\u00f3 de {entity_name}", + "tilt_position": "Canvia la inclinaci\u00f3 de {entity_name}" + } + }, + "state": { + "_": { + "closed": "Tancada", + "closing": "Tancant", + "open": "Oberta", + "opening": "Obrint", + "stopped": "Aturat" + } + }, + "title": "Coberta" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/cs.json b/homeassistant/components/cover/translations/cs.json new file mode 100644 index 00000000000..c32db1e8b97 --- /dev/null +++ b/homeassistant/components/cover/translations/cs.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_closed": "{entity_name} je zav\u0159eno", + "is_closing": "{entity_name} se zav\u00edr\u00e1", + "is_open": "{entity_name} je otev\u0159eno", + "is_opening": "{entity_name} se otev\u00edr\u00e1", + "is_position": "pozice {entity_name} je", + "is_tilt_position": "pozice naklon\u011bn\u00ed {entity_name} je" + } + }, + "state": { + "_": { + "closed": "Zav\u0159eno", + "closing": "Zav\u00edr\u00e1n\u00ed", + "open": "Otev\u0159eno", + "opening": "Otev\u00edr\u00e1n\u00ed", + "stopped": "Zastaveno" + } + }, + "title": "Roleta" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/cy.json b/homeassistant/components/cover/translations/cy.json new file mode 100644 index 00000000000..508364501ba --- /dev/null +++ b/homeassistant/components/cover/translations/cy.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Ar gau", + "closing": "Cau", + "open": "Agor", + "opening": "Yn agor", + "stopped": "Stopio" + } + }, + "title": "Clawr" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/da.json b/homeassistant/components/cover/translations/da.json new file mode 100644 index 00000000000..a79f3ddd1dc --- /dev/null +++ b/homeassistant/components/cover/translations/da.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Luk {entity_name}", + "close_tilt": "Luk vippeposition for {entity_name}", + "open": "\u00c5bn {entity_name}", + "open_tilt": "\u00c5bn vippeposition for {entity_name}", + "set_position": "Indstil {entity_name}-position", + "set_tilt_position": "Angiv vippeposition for {entity_name}" + }, + "condition_type": { + "is_closed": "{entity_name} er lukket", + "is_closing": "{entity_name} lukker", + "is_open": "{entity_name} er \u00e5ben", + "is_opening": "{entity_name} \u00e5bnes", + "is_position": "Aktuel {entity_name} position er", + "is_tilt_position": "Aktuel {entity_name} vippeposition er" + }, + "trigger_type": { + "closed": "{entity_name} lukket", + "closing": "{entity_name} lukning", + "opened": "{entity_name} \u00e5bnet", + "opening": "{entity_name} \u00e5bning", + "position": "{entity_name} position \u00e6ndres", + "tilt_position": "{entity_name} vippeposition \u00e6ndres" + } + }, + "state": { + "_": { + "closed": "Lukket", + "closing": "Lukker", + "open": "\u00c5ben", + "opening": "\u00c5bner", + "stopped": "Stoppet" + } + }, + "title": "Gardin/port" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/de.json b/homeassistant/components/cover/translations/de.json new file mode 100644 index 00000000000..a90ec822adc --- /dev/null +++ b/homeassistant/components/cover/translations/de.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Schlie\u00dfe {entity_name}", + "close_tilt": "{entity_name} gekippt schlie\u00dfen", + "open": "\u00d6ffne {entity_name}", + "open_tilt": "{entity_name} gekippt \u00f6ffnen", + "set_position": "Position von {entity_name} setzen", + "set_tilt_position": "Neigeposition von {entity_name} einstellen" + }, + "condition_type": { + "is_closed": "{entity_name} ist geschlossen", + "is_closing": "{entity_name} wird geschlossen", + "is_open": "{entity_name} ist offen", + "is_opening": "{entity_name} wird ge\u00f6ffnet", + "is_position": "Die Aktuelle Position von {entity_name} ist", + "is_tilt_position": "Die Aktuelle Neigungsposition von {entity_name} ist" + }, + "trigger_type": { + "closed": "{entity_name} geschlossen", + "closing": "{entity_name} wird geschlossen", + "opened": "{entity_name} ge\u00f6ffnet", + "opening": "{entity_name} wird ge\u00f6ffnet", + "position": "{entity_name} ver\u00e4ndert die Position", + "tilt_position": "{entity_name} ver\u00e4ndert die Neigungsposition" + } + }, + "state": { + "_": { + "closed": "Geschlossen", + "closing": "Schlie\u00dft", + "open": "Offen", + "opening": "\u00d6ffnet", + "stopped": "Angehalten" + } + }, + "title": "Abdeckung" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/el.json b/homeassistant/components/cover/translations/el.json new file mode 100644 index 00000000000..258b57716d3 --- /dev/null +++ b/homeassistant/components/cover/translations/el.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "closing": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf", + "open": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc", + "opening": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1", + "stopped": "\u03a3\u03c4\u03b1\u03bc\u03ac\u03c4\u03b7\u03c3\u03b5" + } + }, + "title": "\u039a\u03ac\u03bb\u03c5\u03c8\u03b7" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/en.json b/homeassistant/components/cover/translations/en.json new file mode 100644 index 00000000000..de2ad4e0b15 --- /dev/null +++ b/homeassistant/components/cover/translations/en.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Close {entity_name}", + "close_tilt": "Close {entity_name} tilt", + "open": "Open {entity_name}", + "open_tilt": "Open {entity_name} tilt", + "set_position": "Set {entity_name} position", + "set_tilt_position": "Set {entity_name} tilt position" + }, + "condition_type": { + "is_closed": "{entity_name} is closed", + "is_closing": "{entity_name} is closing", + "is_open": "{entity_name} is open", + "is_opening": "{entity_name} is opening", + "is_position": "Current {entity_name} position is", + "is_tilt_position": "Current {entity_name} tilt position is" + }, + "trigger_type": { + "closed": "{entity_name} closed", + "closing": "{entity_name} closing", + "opened": "{entity_name} opened", + "opening": "{entity_name} opening", + "position": "{entity_name} position changes", + "tilt_position": "{entity_name} tilt position changes" + } + }, + "state": { + "_": { + "closed": "Closed", + "closing": "Closing", + "open": "Open", + "opening": "Opening", + "stopped": "Stopped" + } + }, + "title": "Cover" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/es-419.json b/homeassistant/components/cover/translations/es-419.json new file mode 100644 index 00000000000..3593ba28960 --- /dev/null +++ b/homeassistant/components/cover/translations/es-419.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Cerrado", + "closing": "Cerrando", + "open": "Abierto", + "opening": "Abriendo", + "stopped": "Detenido" + } + }, + "title": "Portada" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/es.json b/homeassistant/components/cover/translations/es.json new file mode 100644 index 00000000000..857813eefb5 --- /dev/null +++ b/homeassistant/components/cover/translations/es.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Cerrar {entity_name}", + "close_tilt": "Cerrar inclinaci\u00f3n de {entity_name}", + "open": "Abrir {entity_name}", + "open_tilt": "Abrir inclinaci\u00f3n de {entity_name}", + "set_position": "Ajustar la posici\u00f3n de {entity_name}", + "set_tilt_position": "Ajustar la posici\u00f3n de inclinaci\u00f3n de {entity_name}" + }, + "condition_type": { + "is_closed": "{entity_name} est\u00e1 cerrado", + "is_closing": "{entity_name} se est\u00e1 cerrando", + "is_open": "{entity_name} est\u00e1 abierto", + "is_opening": "{entity_name} se est\u00e1 abriendo", + "is_position": "La posici\u00f3n actual de {entity_name} es", + "is_tilt_position": "La posici\u00f3n de inclinaci\u00f3n actual de {entity_name} es" + }, + "trigger_type": { + "closed": "{entity_name} cerrado", + "closing": "{entity_name} cerrando", + "opened": "abierto {entity_name}", + "opening": "abriendo {entity_name}", + "position": "Posici\u00f3n cambiada de {entity_name}", + "tilt_position": "Cambia la posici\u00f3n de inclinaci\u00f3n de {entity_name}" + } + }, + "state": { + "_": { + "closed": "Cerrado", + "closing": "Cerrando", + "open": "Abierto", + "opening": "Abriendo", + "stopped": "Detenido" + } + }, + "title": "Persiana" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/et.json b/homeassistant/components/cover/translations/et.json new file mode 100644 index 00000000000..96d81b3a7b6 --- /dev/null +++ b/homeassistant/components/cover/translations/et.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Suletud", + "closing": "Sulgub", + "open": "Avatud", + "opening": "Avaneb", + "stopped": "Peatatud" + } + }, + "title": "Kate" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/eu.json b/homeassistant/components/cover/translations/eu.json new file mode 100644 index 00000000000..e9cc846746e --- /dev/null +++ b/homeassistant/components/cover/translations/eu.json @@ -0,0 +1,11 @@ +{ + "state": { + "_": { + "closed": "Itxita", + "closing": "Ixten", + "open": "Irekita", + "opening": "Irekitzen", + "stopped": "Geldituta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/fa.json b/homeassistant/components/cover/translations/fa.json new file mode 100644 index 00000000000..950172ad183 --- /dev/null +++ b/homeassistant/components/cover/translations/fa.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0628\u0633\u062a\u0647 \u0634\u062f\u0647", + "closing": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646", + "open": "\u0628\u0627\u0632", + "opening": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0632 \u0634\u062f\u0646", + "stopped": "\u0645\u062a\u0648\u0642\u0641" + } + }, + "title": "\u067e\u0648\u0634\u0634" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/fi.json b/homeassistant/components/cover/translations/fi.json new file mode 100644 index 00000000000..282a3d9928c --- /dev/null +++ b/homeassistant/components/cover/translations/fi.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Suljettu", + "closing": "Suljetaan", + "open": "Auki", + "opening": "Avataan", + "stopped": "Pys\u00e4ytetty" + } + }, + "title": "Kaihtimet" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/fr.json b/homeassistant/components/cover/translations/fr.json new file mode 100644 index 00000000000..d9ceb569753 --- /dev/null +++ b/homeassistant/components/cover/translations/fr.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "action_type": { + "close": "Fermer {entity_name}" + }, + "condition_type": { + "is_closed": "{entity_name} est ferm\u00e9", + "is_closing": "{entity_name} se ferme", + "is_open": "{entity_name} est ouvert", + "is_opening": "{entity_name} est en train de s'ouvrir", + "is_position": "La position de {entity_name} est", + "is_tilt_position": "La position d'inclinaison de {entity_name} est" + }, + "trigger_type": { + "closed": "{entity_name} ferm\u00e9", + "closing": "{entity_name} fermeture", + "opened": "{entity_name} ouvert", + "opening": "{entity_name} ouverture", + "position": "{entity_name} changement de position", + "tilt_position": "{entity_name} changement d'inclinaison" + } + }, + "state": { + "_": { + "closed": "Ferm\u00e9", + "closing": "Fermeture", + "open": "Ouvert", + "opening": "Ouverture", + "stopped": "Arr\u00eat\u00e9" + } + }, + "title": "Volets" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/gsw.json b/homeassistant/components/cover/translations/gsw.json new file mode 100644 index 00000000000..2f85109e0cb --- /dev/null +++ b/homeassistant/components/cover/translations/gsw.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Gschloss\u00e4", + "closing": "Am schliesse", + "open": "Off\u00e4", + "opening": "Am \u00f6ffn\u00e4", + "stopped": "Gstoppt" + } + }, + "title": "Roulade" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/he.json b/homeassistant/components/cover/translations/he.json new file mode 100644 index 00000000000..ebc7d39b450 --- /dev/null +++ b/homeassistant/components/cover/translations/he.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u05e0\u05e1\u05d2\u05e8", + "closing": "\u05e1\u05d5\u05d2\u05e8", + "open": "\u05e4\u05ea\u05d5\u05d7", + "opening": "\u05e4\u05d5\u05ea\u05d7", + "stopped": "\u05e2\u05e6\u05d5\u05e8" + } + }, + "title": "\u05d5\u05d9\u05dc\u05d5\u05df" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/hr.json b/homeassistant/components/cover/translations/hr.json new file mode 100644 index 00000000000..5b9e285566c --- /dev/null +++ b/homeassistant/components/cover/translations/hr.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Zatvoreno", + "closing": "Zatvaranje", + "open": "Otvoreno", + "opening": "Otvaranje", + "stopped": "zaustavljen" + } + }, + "title": "Poklopac" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/hu.json b/homeassistant/components/cover/translations/hu.json new file mode 100644 index 00000000000..6d48cca1251 --- /dev/null +++ b/homeassistant/components/cover/translations/hu.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "{entity_name} z\u00e1r\u00e1sa", + "close_tilt": "{entity_name} d\u00f6nt\u00e9s z\u00e1r\u00e1sa", + "open": "{entity_name} nyit\u00e1sa", + "open_tilt": "{entity_name} d\u00f6nt\u00e9s nyit\u00e1sa", + "set_position": "{entity_name} poz\u00edci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa", + "set_tilt_position": "{entity_name} d\u00f6nt\u00e9si poz\u00edci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa" + }, + "condition_type": { + "is_closed": "{entity_name} z\u00e1rva van", + "is_closing": "{entity_name} z\u00e1r\u00f3dik", + "is_open": "{entity_name} nyitva van", + "is_opening": "{entity_name} ny\u00edlik", + "is_position": "{entity_name} jelenlegi poz\u00edci\u00f3ja", + "is_tilt_position": "{entity_name} jelenlegi d\u00f6nt\u00e9si poz\u00edci\u00f3ja" + }, + "trigger_type": { + "closed": "{entity_name} bez\u00e1r\u00f3dott", + "closing": "{entity_name} z\u00e1r\u00f3dik", + "opened": "{entity_name} kiny\u00edlt", + "opening": "{entity_name} ny\u00edlik", + "position": "{entity_name} poz\u00edci\u00f3ja v\u00e1ltozik", + "tilt_position": "{entity_name} d\u00f6nt\u00e9si poz\u00edci\u00f3ja v\u00e1ltozik" + } + }, + "state": { + "_": { + "closed": "Z\u00e1rva", + "closing": "Z\u00e1r\u00e1s", + "open": "Nyitva", + "opening": "Nyit\u00e1s", + "stopped": "Meg\u00e1ll\u00edtva" + } + }, + "title": "Bor\u00edt\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/hy.json b/homeassistant/components/cover/translations/hy.json new file mode 100644 index 00000000000..6352c9d25f4 --- /dev/null +++ b/homeassistant/components/cover/translations/hy.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0553\u0561\u056f\u057e\u0561\u056e", + "closing": "\u0553\u0561\u056f\u0578\u0582\u0574", + "open": "\u0532\u0561\u0581", + "opening": "\u0532\u0561\u0581\u0578\u0582\u0574", + "stopped": "\u0534\u0561\u0564\u0561\u0580\u0565\u0581" + } + }, + "title": "\u053e\u0561\u056e\u056f\u0565\u056c" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/id.json b/homeassistant/components/cover/translations/id.json new file mode 100644 index 00000000000..b38fcf86a17 --- /dev/null +++ b/homeassistant/components/cover/translations/id.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Tertutup", + "closing": "Menutup", + "open": "Buka", + "opening": "Membuka", + "stopped": "Terhenti" + } + }, + "title": "Penutup" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/is.json b/homeassistant/components/cover/translations/is.json new file mode 100644 index 00000000000..4a61c4f7cc5 --- /dev/null +++ b/homeassistant/components/cover/translations/is.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Loka\u00f0", + "closing": "Loka", + "open": "Opin", + "opening": "Opna", + "stopped": "St\u00f6\u00f0vu\u00f0" + } + }, + "title": "Gluggatj\u00f6ld" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/it.json b/homeassistant/components/cover/translations/it.json new file mode 100644 index 00000000000..70589da242c --- /dev/null +++ b/homeassistant/components/cover/translations/it.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Chiudi {entity_name}", + "close_tilt": "Chiudi l'inclinazione di {entity_name}", + "open": "Apri {entity_name}", + "open_tilt": "Apri l'inclinazione di {entity_name}", + "set_position": "Imposta la posizione di {entity_name}", + "set_tilt_position": "Imposta la posizione di inclinazione di {entity_name}" + }, + "condition_type": { + "is_closed": "{entity_name} \u00e8 chiuso", + "is_closing": "{entity_name} si sta chiudendo", + "is_open": "{entity_name} \u00e8 aperto", + "is_opening": "{entity_name} si sta aprendo", + "is_position": "La posizione attuale di {entity_name} \u00e8", + "is_tilt_position": "La posizione d'inclinazione attuale di {entity_name} \u00e8" + }, + "trigger_type": { + "closed": "{entity_name} chiuso", + "closing": "{entity_name} in chiusura", + "opened": "{entity_name} aperto", + "opening": "{entity_name} in apertura", + "position": "{entity_name} cambiamenti della posizione", + "tilt_position": "{entity_name} cambiamenti della posizione d'inclinazione" + } + }, + "state": { + "_": { + "closed": "Chiuso", + "closing": "In chiusura", + "open": "Aperto", + "opening": "In apertura", + "stopped": "Arrestato" + } + }, + "title": "Chiusure" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ja.json b/homeassistant/components/cover/translations/ja.json new file mode 100644 index 00000000000..859240315bf --- /dev/null +++ b/homeassistant/components/cover/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "closed": "\u9589\u9396", + "opening": "\u6249" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ko.json b/homeassistant/components/cover/translations/ko.json new file mode 100644 index 00000000000..0a666a8bd82 --- /dev/null +++ b/homeassistant/components/cover/translations/ko.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "{entity_name} \ub2eb\uae30", + "close_tilt": "{entity_name} \ub2eb\uae30", + "open": "{entity_name} \uc5f4\uae30", + "open_tilt": "{entity_name} \uc5f4\uae30", + "set_position": "{entity_name} \uac1c\ud3d0 \uc704\uce58 \uc124\uc815\ud558\uae30", + "set_tilt_position": "{entity_name} \uac1c\ud3d0 \uae30\uc6b8\uae30 \uc124\uc815\ud558\uae30" + }, + "condition_type": { + "is_closed": "{entity_name} \uc774(\uac00) \ub2eb\ud600 \uc788\uc73c\uba74", + "is_closing": "{entity_name} \uc774(\uac00) \ub2eb\ud788\ub294 \uc911\uc774\uba74", + "is_open": "{entity_name} \uc774(\uac00) \uc5f4\ub824 \uc788\uc73c\uba74", + "is_opening": "{entity_name} \uc774(\uac00) \uc5f4\ub9ac\ub294 \uc911\uc774\uba74", + "is_position": "\ud604\uc7ac {entity_name} \uac1c\ud3d0 \uc704\uce58\uac00 ~ \uc774\uba74", + "is_tilt_position": "\ud604\uc7ac {entity_name} \uac1c\ud3d0 \uae30\uc6b8\uae30\uac00 ~ \uc774\uba74" + }, + "trigger_type": { + "closed": "{entity_name} \uc774(\uac00) \ub2eb\ud790 \ub54c", + "closing": "{entity_name} \uc774(\uac00) \ub2eb\ud788\ub294 \uc911\uc77c \ub54c", + "opened": "{entity_name} \uc774(\uac00) \uc5f4\ub9b4 \ub54c", + "opening": "{entity_name} \uc774(\uac00) \uc5f4\ub9ac\ub294 \uc911\uc77c \ub54c", + "position": "{entity_name} \uac1c\ud3d0 \uc704\uce58\uac00 \ubcc0\ud560 \ub54c", + "tilt_position": "{entity_name} \uac1c\ud3d0 \uae30\uc6b8\uae30\uac00 \ubcc0\ud560 \ub54c" + } + }, + "state": { + "_": { + "closed": "\ub2eb\ud798", + "closing": "\ub2eb\ub294\uc911", + "open": "\uc5f4\ub9bc", + "opening": "\uc5ec\ub294\uc911", + "stopped": "\uba48\ucda4" + } + }, + "title": "\uc5ec\ub2eb\uc774" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/lb.json b/homeassistant/components/cover/translations/lb.json new file mode 100644 index 00000000000..4aff8a3f329 --- /dev/null +++ b/homeassistant/components/cover/translations/lb.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "{entity_name} zoumaachen", + "close_tilt": "{entity_name} Kipp zoumaachen", + "open": "{entity_name} opmaachen", + "open_tilt": "{entity_name} op Kipp stelle", + "set_position": "{entity_name} positioun programm\u00e9ieren", + "set_tilt_position": "{entity_name} kipp positioun programm\u00e9ieren" + }, + "condition_type": { + "is_closed": "{entity_name} ass zou", + "is_closing": "{entity_name} g\u00ebtt zougemaach", + "is_open": "{entity_name} ass op", + "is_opening": "{entity_name} g\u00ebtt opgemaach", + "is_position": "Aktuell {entity_name} positioun ass", + "is_tilt_position": "Aktuell {entity_name} kipp positioun ass" + }, + "trigger_type": { + "closed": "{entity_name} gouf zougemaach", + "closing": "{entity_name} mecht zou", + "opened": "{entity_name} gouf opgemaach", + "opening": "{entity_name} mecht op", + "position": "{entity_name} positioun \u00e4nnert", + "tilt_position": "{entity_name} kipp positioun ge\u00e4nnert" + } + }, + "state": { + "_": { + "closed": "Zou", + "closing": "G\u00ebtt zougemaach", + "open": "Op", + "opening": "G\u00ebtt opgemaach", + "stopped": "Gestoppt" + } + }, + "title": "Paart" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/lv.json b/homeassistant/components/cover/translations/lv.json new file mode 100644 index 00000000000..618e81b970d --- /dev/null +++ b/homeassistant/components/cover/translations/lv.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Sl\u0113gts", + "closing": "Sl\u0113dzas", + "open": "Atv\u0113rts", + "opening": "Atveras", + "stopped": "Aptur\u0113ts" + } + }, + "title": "Nosegi" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/nb.json b/homeassistant/components/cover/translations/nb.json new file mode 100644 index 00000000000..c92cb789d03 --- /dev/null +++ b/homeassistant/components/cover/translations/nb.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Lukket", + "closing": "Lukker", + "open": "\u00c5pen", + "opening": "\u00c5pner", + "stopped": "Stoppet" + } + }, + "title": "Cover" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/nl.json b/homeassistant/components/cover/translations/nl.json new file mode 100644 index 00000000000..f29132c3f18 --- /dev/null +++ b/homeassistant/components/cover/translations/nl.json @@ -0,0 +1,30 @@ +{ + "device_automation": { + "condition_type": { + "is_closed": "{entity_name} is gesloten", + "is_closing": "{entity_name} wordt gesloten", + "is_open": "{entity_name} is open", + "is_opening": "{entity_name} wordt geopend", + "is_position": "Huidige {entity_name} positie is", + "is_tilt_position": "Huidige {entity_name} kantel positie is" + }, + "trigger_type": { + "closed": "{entity_name} gesloten", + "closing": "{entity_name} wordt gesloten", + "opened": "{entity_name} geopend", + "opening": "{entity_name} wordt geopend", + "position": "{entity_name} positiewijzigingen", + "tilt_position": "{entity_name} kantel positiewijzigingen" + } + }, + "state": { + "_": { + "closed": "Gesloten", + "closing": "Sluit", + "open": "Open", + "opening": "Opent", + "stopped": "Gestopt" + } + }, + "title": "Bedekking" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/nn.json b/homeassistant/components/cover/translations/nn.json new file mode 100644 index 00000000000..5be3b853018 --- /dev/null +++ b/homeassistant/components/cover/translations/nn.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Lukka", + "closing": "Lukkar", + "open": "Open", + "opening": "Opnar", + "stopped": "Stoppa" + } + }, + "title": "Dekke" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/no.json b/homeassistant/components/cover/translations/no.json new file mode 100644 index 00000000000..4d898ec75f8 --- /dev/null +++ b/homeassistant/components/cover/translations/no.json @@ -0,0 +1,36 @@ +{ + "device_automation": { + "action_type": { + "close": "Lukk {entity_name}", + "close_tilt": "Lukk {entity_name} tilt", + "open": "\u00c5pne {entity_name}", + "open_tilt": "\u00c5pne {entity_name} tilt", + "set_position": "Angi {entity_name} posisjon", + "set_tilt_position": "Angi {entity_name} tilt posisjon" + }, + "condition_type": { + "is_closed": "{entity_name} er stengt", + "is_closing": "{entity_name} stenges", + "is_open": "{entity_name} er \u00e5pen", + "is_opening": "{entity_name} \u00e5pnes", + "is_position": "{entity_name}-posisjonen er", + "is_tilt_position": "{entity_name} vippeposisjon er" + }, + "trigger_type": { + "closed": "{entity_name} lukket", + "closing": "{entity_name} lukkes", + "opened": "{entity_name} \u00e5pnet", + "opening": "{entity_name} \u00e5pning", + "position": "{entity_name} posisjon endringer", + "tilt_position": "{entity_name} endringer i vippeposisjon" + } + }, + "state": { + "_": { + "closing": "Lukker", + "opening": "\u00c5pner", + "stopped": "Stoppet" + } + }, + "title": "Dekke" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/pl.json b/homeassistant/components/cover/translations/pl.json new file mode 100644 index 00000000000..501b2f78d7a --- /dev/null +++ b/homeassistant/components/cover/translations/pl.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "zamknij {entity_name}", + "close_tilt": "zamknij pochylenie {entity_name}", + "open": "otw\u00f3rz {entity_name}", + "open_tilt": "otw\u00f3rz {entity_name} do pochylenia", + "set_position": "ustaw pozycj\u0119 {entity_name}", + "set_tilt_position": "ustaw pochylenie {entity_name}" + }, + "condition_type": { + "is_closed": "pokrywa {entity_name} jest zamkni\u0119ta", + "is_closing": "{entity_name} si\u0119 zamyka", + "is_open": "pokrywa {entity_name} jest otwarta", + "is_opening": "{entity_name} si\u0119 otwiera", + "is_position": "pozycja pokrywy {entity_name} to", + "is_tilt_position": "pochylenie pokrywy {entity_name} to" + }, + "trigger_type": { + "closed": "nast\u0105pi zamkni\u0119cie {entity_name}", + "closing": "{entity_name} si\u0119 zamyka", + "opened": "nast\u0105pi otwarcie {entity_name}", + "opening": "{entity_name} si\u0119 otwiera", + "position": "zmieni si\u0119 pozycja pokrywy {entity_name}", + "tilt_position": "zmieni si\u0119 pochylenie pokrywy {entity_name}" + } + }, + "state": { + "_": { + "closed": "zamkni\u0119ta", + "closing": "zamykanie", + "open": "otwarta", + "opening": "otwieranie", + "stopped": "zatrzymany" + } + }, + "title": "Pokrywa" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/pt-BR.json b/homeassistant/components/cover/translations/pt-BR.json new file mode 100644 index 00000000000..3403666dfb9 --- /dev/null +++ b/homeassistant/components/cover/translations/pt-BR.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Fechado", + "closing": "Fechando", + "open": "Aberto", + "opening": "Abrindo", + "stopped": "Parado" + } + }, + "title": "Cobertura" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/pt.json b/homeassistant/components/cover/translations/pt.json new file mode 100644 index 00000000000..7c50b7a63cd --- /dev/null +++ b/homeassistant/components/cover/translations/pt.json @@ -0,0 +1,28 @@ +{ + "device_automation": { + "condition_type": { + "is_closed": "{entity_name} est\u00e1 fechada", + "is_closing": "{entity_name} est\u00e1 a fechar", + "is_open": "{entity_name} est\u00e1 aberta", + "is_opening": "{entity_name} est\u00e1 a abrir", + "is_position": "A posi\u00e7\u00e3o atual de {entity_name} \u00e9", + "is_tilt_position": "A inclina\u00e7\u00e3o actual de {entity_name} \u00e9" + }, + "trigger_type": { + "closed": "{entity_name} fechou", + "closing": "{entity_name} est\u00e1 a fechar", + "opened": "{entity_name} abriu", + "opening": "{entity_name} est\u00e1 a abrir" + } + }, + "state": { + "_": { + "closed": "Fechada", + "closing": "A fechar", + "open": "Aberta", + "opening": "A abrir", + "stopped": "Parado" + } + }, + "title": "Cobertura" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ro.json b/homeassistant/components/cover/translations/ro.json new file mode 100644 index 00000000000..8c6d371c2bb --- /dev/null +++ b/homeassistant/components/cover/translations/ro.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u00cenchis", + "closing": "\u00cenchidere", + "open": "Deschis", + "opening": "Deschidere", + "stopped": "Oprit" + } + }, + "title": "Jaluzea" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ru.json b/homeassistant/components/cover/translations/ru.json new file mode 100644 index 00000000000..df35c58b7dd --- /dev/null +++ b/homeassistant/components/cover/translations/ru.json @@ -0,0 +1,36 @@ +{ + "device_automation": { + "action_type": { + "close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c {entity_name}", + "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c {entity_name}", + "set_position": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 {entity_name}", + "set_tilt_position": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u043a\u043b\u043e\u043d\u0430 {entity_name}" + }, + "condition_type": { + "is_closed": "{entity_name} \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_closing": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "is_open": "{entity_name} \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_opening": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "is_position": "{entity_name} \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438", + "is_tilt_position": "{entity_name} \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u0430" + }, + "trigger_type": { + "closed": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0442\u043e", + "closing": "{entity_name} \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "opened": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0442\u043e", + "opening": "{entity_name} \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "position": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435", + "tilt_position": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u043a\u043b\u043e\u043d" + } + }, + "state": { + "_": { + "closed": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e", + "closing": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e", + "opening": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "stopped": "\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e" + } + }, + "title": "\u0416\u0430\u043b\u044e\u0437\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/sk.json b/homeassistant/components/cover/translations/sk.json new file mode 100644 index 00000000000..57379849b32 --- /dev/null +++ b/homeassistant/components/cover/translations/sk.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Zatvoren\u00e9", + "closing": "Zatv\u00e1ra sa", + "open": "Otvoren\u00e9", + "opening": "Otv\u00e1ra sa", + "stopped": "Zastaven\u00e9" + } + }, + "title": "Kryt" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/sl.json b/homeassistant/components/cover/translations/sl.json new file mode 100644 index 00000000000..d3f29a78044 --- /dev/null +++ b/homeassistant/components/cover/translations/sl.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "Zapri {entity_name}", + "close_tilt": "Zapri {entity_name} nagib", + "open": "Odprite {entity_name}", + "open_tilt": "Odprite {entity_name} nagib", + "set_position": "Nastavite polo\u017eaj {entity_name}", + "set_tilt_position": "Nastavite {entity_name} nagibni polo\u017eaj" + }, + "condition_type": { + "is_closed": "{entity_name} je/so zaprt/a", + "is_closing": "{entity_name} se zapira/jo", + "is_open": "{entity_name} je odprt/a/o", + "is_opening": "{entity_name} se odpira/jo", + "is_position": "Trenutna pozicija {entity_name} je", + "is_tilt_position": "Trenutni polo\u017eaj nagiba {entity_name} je" + }, + "trigger_type": { + "closed": "{entity_name} se je/so se zaprla", + "closing": "{entity_name} se zapira/jo", + "opened": "{entity_name} se/so je odprla", + "opening": "{entity_name} se odpira/jo", + "position": "{entity_name} spremembe polo\u017eaja", + "tilt_position": "{entity_name} spremembe nagiba" + } + }, + "state": { + "_": { + "closed": "Zaprto", + "closing": "Zapiranje", + "open": "Odprto", + "opening": "Odpiranje", + "stopped": "Ustavljeno" + } + }, + "title": "Cover" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/sv.json b/homeassistant/components/cover/translations/sv.json new file mode 100644 index 00000000000..0a8dbecf124 --- /dev/null +++ b/homeassistant/components/cover/translations/sv.json @@ -0,0 +1,30 @@ +{ + "device_automation": { + "condition_type": { + "is_closed": "{entity_name} \u00e4r st\u00e4ngd", + "is_closing": "{entity_name} st\u00e4ngs", + "is_open": "{entity_name} \u00e4r \u00f6ppen", + "is_opening": "{entity_name} \u00f6ppnas", + "is_position": "Aktuell position f\u00f6r {entity_name} \u00e4r", + "is_tilt_position": "Aktuell {entity_name} lutningsposition \u00e4r" + }, + "trigger_type": { + "closed": "{entity_name} st\u00e4ngd", + "closing": "{entity_name} st\u00e4nger", + "opened": "{entity_name} \u00f6ppnades", + "opening": "{entity_name} \u00f6ppnas", + "position": "{entity_name} position \u00e4ndras", + "tilt_position": "{entity_name} lutningsposition \u00e4ndras" + } + }, + "state": { + "_": { + "closed": "St\u00e4ngd", + "closing": "St\u00e4nger", + "open": "\u00d6ppen", + "opening": "\u00d6ppnar", + "stopped": "Stoppad" + } + }, + "title": "Rullgardin" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/ta.json b/homeassistant/components/cover/translations/ta.json new file mode 100644 index 00000000000..4107fa9a18f --- /dev/null +++ b/homeassistant/components/cover/translations/ta.json @@ -0,0 +1,11 @@ +{ + "state": { + "_": { + "closed": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "closing": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1", + "open": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1", + "opening": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1", + "stopped": "\u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/te.json b/homeassistant/components/cover/translations/te.json new file mode 100644 index 00000000000..41042d98977 --- /dev/null +++ b/homeassistant/components/cover/translations/te.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f", + "closing": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f", + "open": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f", + "opening": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f", + "stopped": "\u0c06\u0c17\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f" + } + }, + "title": "\u0c15\u0c35\u0c30\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/th.json b/homeassistant/components/cover/translations/th.json new file mode 100644 index 00000000000..8213c7c1e12 --- /dev/null +++ b/homeassistant/components/cover/translations/th.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0e1b\u0e34\u0e14", + "closing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1b\u0e34\u0e14", + "open": "\u0e40\u0e1b\u0e34\u0e14", + "opening": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e1b\u0e34\u0e14", + "stopped": "\u0e2b\u0e22\u0e38\u0e14" + } + }, + "title": "\u0e21\u0e48\u0e32\u0e19" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/tr.json b/homeassistant/components/cover/translations/tr.json new file mode 100644 index 00000000000..98bc8cdb18d --- /dev/null +++ b/homeassistant/components/cover/translations/tr.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "Kapal\u0131", + "closing": "Kapan\u0131yor", + "open": "A\u00e7\u0131k", + "opening": "A\u00e7\u0131l\u0131yor", + "stopped": "Durduruldu" + } + }, + "title": "Panjur" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/uk.json b/homeassistant/components/cover/translations/uk.json new file mode 100644 index 00000000000..0e0917177e6 --- /dev/null +++ b/homeassistant/components/cover/translations/uk.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u043e", + "closing": "\u0417\u0430\u043a\u0440\u0438\u0432\u0430\u0454\u0442\u044c\u0441\u044f", + "open": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u043e", + "opening": "\u0412\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0454\u0442\u044c\u0441\u044f", + "stopped": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e" + } + }, + "title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/vi.json b/homeassistant/components/cover/translations/vi.json new file mode 100644 index 00000000000..4cdf974d0b6 --- /dev/null +++ b/homeassistant/components/cover/translations/vi.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u0110\u00e3 \u0111\u00f3ng", + "closing": "\u0110ang \u0111\u00f3ng", + "open": "M\u1edf", + "opening": "\u0110ang m\u1edf", + "stopped": "\u0110\u00e3 d\u1eebng" + } + }, + "title": "R\u00e8m, c\u1eeda cu\u1ed1n" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/zh-Hans.json b/homeassistant/components/cover/translations/zh-Hans.json new file mode 100644 index 00000000000..2929a2cd33e --- /dev/null +++ b/homeassistant/components/cover/translations/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "closed": "\u5df2\u5173\u95ed", + "closing": "\u6b63\u5728\u5173\u95ed", + "open": "\u5df2\u6253\u5f00", + "opening": "\u6b63\u5728\u6253\u5f00", + "stopped": "\u5df2\u505c\u6b62" + } + }, + "title": "\u5377\u5e18" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/zh-Hant.json b/homeassistant/components/cover/translations/zh-Hant.json new file mode 100644 index 00000000000..31c0900af9a --- /dev/null +++ b/homeassistant/components/cover/translations/zh-Hant.json @@ -0,0 +1,38 @@ +{ + "device_automation": { + "action_type": { + "close": "\u95dc\u9589{entity_name}", + "close_tilt": "\u95dc\u9589{entity_name}\u7a97\u7c3e", + "open": "\u958b\u555f{entity_name}", + "open_tilt": "\u958b\u555f{entity_name}\u7a97\u7c3e", + "set_position": "\u8a2d\u5b9a{entity_name}\u4f4d\u7f6e", + "set_tilt_position": "\u8a2d\u5b9a{entity_name}\u5e8a\u7c3e\u4f4d\u7f6e" + }, + "condition_type": { + "is_closed": "{entity_name}\u5df2\u95dc\u9589", + "is_closing": "{entity_name}\u6b63\u5728\u95dc\u9589", + "is_open": "{entity_name}\u5df2\u958b\u555f", + "is_opening": "{entity_name}\u6b63\u5728\u958b\u555f", + "is_position": "\u76ee\u524d{entity_name}\u4f4d\u7f6e\u70ba", + "is_tilt_position": "\u76ee\u524d{entity_name}\u6a19\u984c\u4f4d\u7f6e\u70ba" + }, + "trigger_type": { + "closed": "{entity_name}\u5df2\u95dc\u9589", + "closing": "{entity_name}\u6b63\u5728\u95dc\u9589", + "opened": "{entity_name}\u5df2\u958b\u555f", + "opening": "{entity_name}\u6b63\u5728\u958b\u555f", + "position": "{entity_name}\u4f4d\u7f6e\u8b8a\u66f4", + "tilt_position": "{entity_name}\u6a19\u984c\u4f4d\u7f6e\u8b8a\u66f4" + } + }, + "state": { + "_": { + "closed": "\u95dc\u9589", + "closing": "\u95dc\u9589\u4e2d", + "open": "\u958b\u555f", + "opening": "\u958b\u555f\u4e2d", + "stopped": "\u505c\u6b62" + } + }, + "title": "\u6372\u7c3e/\u9580" +} \ No newline at end of file diff --git a/homeassistant/components/cppm_tracker/manifest.json b/homeassistant/components/cppm_tracker/manifest.json index 8407aee07d5..053e0ea0ba1 100644 --- a/homeassistant/components/cppm_tracker/manifest.json +++ b/homeassistant/components/cppm_tracker/manifest.json @@ -3,6 +3,5 @@ "name": "Aruba ClearPass", "documentation": "https://www.home-assistant.io/integrations/cppm_tracker", "requirements": ["clearpasspy==1.0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/cpuspeed/manifest.json b/homeassistant/components/cpuspeed/manifest.json index 7e8f44648f1..3cd4be6f9d3 100644 --- a/homeassistant/components/cpuspeed/manifest.json +++ b/homeassistant/components/cpuspeed/manifest.json @@ -3,6 +3,5 @@ "name": "CPU Speed", "documentation": "https://www.home-assistant.io/integrations/cpuspeed", "requirements": ["py-cpuinfo==5.0.0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/cpuspeed/sensor.py b/homeassistant/components/cpuspeed/sensor.py index 53598e24c70..34e9c5fee25 100644 --- a/homeassistant/components/cpuspeed/sensor.py +++ b/homeassistant/components/cpuspeed/sensor.py @@ -5,7 +5,7 @@ from cpuinfo import cpuinfo import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, FREQUENCY_GIGAHERTZ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -29,7 +29,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the CPU speed sensor.""" - name = config.get(CONF_NAME) + name = config[CONF_NAME] add_entities([CpuSpeedSensor(name)], True) @@ -42,7 +42,6 @@ class CpuSpeedSensor(Entity): self._name = name self._state = None self.info = None - self._unit_of_measurement = "GHz" @property def name(self): @@ -57,7 +56,7 @@ class CpuSpeedSensor(Entity): @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" - return self._unit_of_measurement + return FREQUENCY_GIGAHERTZ @property def device_state_attributes(self): diff --git a/homeassistant/components/crimereports/manifest.json b/homeassistant/components/crimereports/manifest.json index 6d64c313039..624d812f5f3 100644 --- a/homeassistant/components/crimereports/manifest.json +++ b/homeassistant/components/crimereports/manifest.json @@ -3,6 +3,5 @@ "name": "Crime Reports", "documentation": "https://www.home-assistant.io/integrations/crimereports", "requirements": ["crimereports==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/crimereports/sensor.py b/homeassistant/components/crimereports/sensor.py index cf5b2e374e2..ff65658073f 100644 --- a/homeassistant/components/crimereports/sensor.py +++ b/homeassistant/components/crimereports/sensor.py @@ -50,8 +50,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Crime Reports platform.""" latitude = config.get(CONF_LATITUDE, hass.config.latitude) longitude = config.get(CONF_LONGITUDE, hass.config.longitude) - name = config.get(CONF_NAME) - radius = config.get(CONF_RADIUS) + name = config[CONF_NAME] + radius = config[CONF_RADIUS] include = config.get(CONF_INCLUDE) exclude = config.get(CONF_EXCLUDE) diff --git a/homeassistant/components/cups/manifest.json b/homeassistant/components/cups/manifest.json index d9b193e6dc6..5f63e7c6a50 100644 --- a/homeassistant/components/cups/manifest.json +++ b/homeassistant/components/cups/manifest.json @@ -3,6 +3,5 @@ "name": "CUPS", "documentation": "https://www.home-assistant.io/integrations/cups", "requirements": ["pycups==1.9.73"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/cups/sensor.py b/homeassistant/components/cups/sensor.py index ac158388242..bc6cdbe8ba1 100644 --- a/homeassistant/components/cups/sensor.py +++ b/homeassistant/components/cups/sensor.py @@ -53,10 +53,10 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the CUPS sensor.""" - host = config.get(CONF_HOST) - port = config.get(CONF_PORT) - printers = config.get(CONF_PRINTERS) - is_cups = config.get(CONF_IS_CUPS_SERVER) + host = config[CONF_HOST] + port = config[CONF_PORT] + printers = config[CONF_PRINTERS] + is_cups = config[CONF_IS_CUPS_SERVER] if is_cups: data = CupsData(host, port, None) diff --git a/homeassistant/components/currencylayer/manifest.json b/homeassistant/components/currencylayer/manifest.json index 162091de9ad..508483732fc 100644 --- a/homeassistant/components/currencylayer/manifest.json +++ b/homeassistant/components/currencylayer/manifest.json @@ -2,7 +2,5 @@ "domain": "currencylayer", "name": "currencylayer", "documentation": "https://www.home-assistant.io/integrations/currencylayer", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/currencylayer/sensor.py b/homeassistant/components/currencylayer/sensor.py index cbad07c0284..f2cb29515b0 100644 --- a/homeassistant/components/currencylayer/sensor.py +++ b/homeassistant/components/currencylayer/sensor.py @@ -26,7 +26,7 @@ DEFAULT_NAME = "CurrencyLayer Sensor" ICON = "mdi:currency" -SCAN_INTERVAL = timedelta(hours=2) +SCAN_INTERVAL = timedelta(hours=4) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -40,15 +40,15 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Currencylayer sensor.""" - base = config.get(CONF_BASE) - api_key = config.get(CONF_API_KEY) + base = config[CONF_BASE] + api_key = config[CONF_API_KEY] parameters = {"source": base, "access_key": api_key, "format": 1} rest = CurrencylayerData(_RESOURCE, parameters) response = requests.get(_RESOURCE, params=parameters, timeout=10) sensors = [] - for variable in config["quote"]: + for variable in config[CONF_QUOTE]: sensors.append(CurrencylayerSensor(rest, base, variable)) if "error" in response.json(): return False diff --git a/homeassistant/components/daikin/.translations/bg.json b/homeassistant/components/daikin/.translations/bg.json deleted file mode 100644 index b0ddcbf4903..00000000000 --- a/homeassistant/components/daikin/.translations/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", - "device_fail": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.", - "device_timeout": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e." - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441" - }, - "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 IP \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0432\u0430\u0448\u0438\u044f \u043a\u043b\u0438\u043c\u0430\u0442\u0438\u043a Daikin.", - "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043b\u0438\u043c\u0430\u0442\u0438\u043a Daikin" - } - }, - "title": "\u041a\u043b\u0438\u043c\u0430\u0442\u0438\u043a Daikin" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/ca.json b/homeassistant/components/daikin/.translations/ca.json deleted file mode 100644 index 2fa60015ca3..00000000000 --- a/homeassistant/components/daikin/.translations/ca.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat", - "device_fail": "S'ha produ\u00eft un error inesperat al crear el dispositiu.", - "device_timeout": "S'ha acabat el temps d'espera en la connexi\u00f3 amb el dispositiu." - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3" - }, - "description": "Introdueix l'adre\u00e7a IP del teu Daikin AC.", - "title": "Configuraci\u00f3 de Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/da.json b/homeassistant/components/daikin/.translations/da.json deleted file mode 100644 index 856bb1445c7..00000000000 --- a/homeassistant/components/daikin/.translations/da.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheden er allerede konfigureret", - "device_fail": "Uventet fejl ved oprettelse af enhed.", - "device_timeout": "Timeout ved tilslutning til enheden." - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt" - }, - "description": "Indtast IP-adresse p\u00e5 dit Daikin AC.", - "title": "Konfigurer Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/de.json b/homeassistant/components/daikin/.translations/de.json deleted file mode 100644 index b3e775fadf4..00000000000 --- a/homeassistant/components/daikin/.translations/de.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert", - "device_fail": "Unerwarteter Fehler beim Erstellen des Ger\u00e4ts.", - "device_timeout": "Zeit\u00fcberschreitung beim Verbinden mit dem Ger\u00e4t." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Gib die IP-Adresse deiner Daikin AC ein.", - "title": "Daikin AC konfigurieren" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/en.json b/homeassistant/components/daikin/.translations/en.json deleted file mode 100644 index 1605e1dc8f6..00000000000 --- a/homeassistant/components/daikin/.translations/en.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured", - "device_fail": "Unexpected error creating device.", - "device_timeout": "Timeout connecting to the device." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Enter IP address of your Daikin AC.", - "title": "Configure Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/es-419.json b/homeassistant/components/daikin/.translations/es-419.json deleted file mode 100644 index 6fa2b664a30..00000000000 --- a/homeassistant/components/daikin/.translations/es-419.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "device_fail": "Error inesperado al crear el dispositivo.", - "device_timeout": "Tiempo de espera de conexi\u00f3n al dispositivo." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Introduzca la direcci\u00f3n IP de su Daikin AC.", - "title": "Configurar Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/es.json b/homeassistant/components/daikin/.translations/es.json deleted file mode 100644 index d3a733a3f9b..00000000000 --- a/homeassistant/components/daikin/.translations/es.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "device_fail": "Error inesperado al crear el dispositivo.", - "device_timeout": "Tiempo de espera agotado al conectar con el dispositivo." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Introduce la IP de tu aire acondicionado Daikin", - "title": "Configurar aire acondicionado Daikin" - } - }, - "title": "Aire acondicionado Daikin" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/fr.json b/homeassistant/components/daikin/.translations/fr.json deleted file mode 100644 index cfd4b7442d6..00000000000 --- a/homeassistant/components/daikin/.translations/fr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", - "device_fail": "Erreur inattendue lors de la cr\u00e9ation du p\u00e9riph\u00e9rique.", - "device_timeout": "D\u00e9lai de connexion au p\u00e9riph\u00e9rique expir\u00e9." - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te" - }, - "description": "Entrez l'adresse IP de votre Daikin AC.", - "title": "Configurer Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/hu.json b/homeassistant/components/daikin/.translations/hu.json deleted file mode 100644 index f433a6215b8..00000000000 --- a/homeassistant/components/daikin/.translations/hu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Az eszk\u00f6zt m\u00e1r konfigur\u00e1ltuk", - "device_fail": "Az eszk\u00f6z l\u00e9trehoz\u00e1sakor v\u00e1ratlan hiba l\u00e9pett fel.", - "device_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s a k\u00e9sz\u00fcl\u00e9k csatlakoz\u00e1sakor." - }, - "step": { - "user": { - "data": { - "host": "Hoszt" - }, - "description": "Add meg a Daikin l\u00e9gkond\u00edcion\u00e1l\u00f3 IP-c\u00edm\u00e9t.", - "title": "A Daikin l\u00e9gkond\u00edcion\u00e1l\u00f3 konfigur\u00e1l\u00e1sa" - } - }, - "title": "Daikin L\u00e9gkond\u00edci\u00f3n\u00e1l\u00f3" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/it.json b/homeassistant/components/daikin/.translations/it.json deleted file mode 100644 index 0b8151d23f6..00000000000 --- a/homeassistant/components/daikin/.translations/it.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", - "device_fail": "Errore inatteso durante la creazione del dispositivo.", - "device_timeout": "Tempo scaduto per la connessione al dispositivo." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Inserisci l'indirizzo IP del tuo Daikin AC.", - "title": "Configura Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/ko.json b/homeassistant/components/daikin/.translations/ko.json deleted file mode 100644 index 4b1d1bd86e5..00000000000 --- a/homeassistant/components/daikin/.translations/ko.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "device_fail": "\uae30\uae30\ub97c \uad6c\uc131\ud558\ub294 \ub3c4\uc911 \uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", - "device_timeout": "\uae30\uae30 \uc5f0\uacb0 \uc2dc\uac04\uc774 \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8" - }, - "description": "\ub2e4\uc774\ud0a8 \uc5d0\uc5b4\ucee8\uc758 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "\ub2e4\uc774\ud0a8 \uc5d0\uc5b4\ucee8 \uad6c\uc131" - } - }, - "title": "\ub2e4\uc774\ud0a8 \uc5d0\uc5b4\ucee8" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/lb.json b/homeassistant/components/daikin/.translations/lb.json deleted file mode 100644 index cdf98f5e597..00000000000 --- a/homeassistant/components/daikin/.translations/lb.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert", - "device_fail": "Onerwaarte Feeler beim erstelle vum Apparat.", - "device_timeout": "Z\u00e4it Iwwerschreidung beim verbannen mam Apparat." - }, - "step": { - "user": { - "data": { - "host": "Apparat" - }, - "description": "Gitt d'IP Adresse vum Daikin AC an:", - "title": "Daikin AC konfigur\u00e9ieren" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/nl.json b/homeassistant/components/daikin/.translations/nl.json deleted file mode 100644 index 683bb61dd44..00000000000 --- a/homeassistant/components/daikin/.translations/nl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparaat is al geconfigureerd", - "device_fail": "Onverwachte fout bij het aanmaken van een apparaat.", - "device_timeout": "Time-out voor verbinding met het apparaat." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Voer het IP-adres van uw Daikin AC in.", - "title": "Daikin AC instellen" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/nn.json b/homeassistant/components/daikin/.translations/nn.json deleted file mode 100644 index 67d4f852625..00000000000 --- a/homeassistant/components/daikin/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/no.json b/homeassistant/components/daikin/.translations/no.json deleted file mode 100644 index 30feb3b5acc..00000000000 --- a/homeassistant/components/daikin/.translations/no.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert", - "device_fail": "Uventet feil under oppretting av enheten.", - "device_timeout": "Tidsavbrudd for tilkobling til enheten." - }, - "step": { - "user": { - "data": { - "host": "Vert" - }, - "description": "Angi IP-adressen til din Daikin AC.", - "title": "Konfigurer Daikin AC" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/pl.json b/homeassistant/components/daikin/.translations/pl.json deleted file mode 100644 index 3caea70c4de..00000000000 --- a/homeassistant/components/daikin/.translations/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "device_fail": "Nieoczekiwany b\u0142\u0105d tworzenia urz\u0105dzenia.", - "device_timeout": "Przekroczono limit czasu \u0142\u0105czenia z urz\u0105dzeniem." - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Wprowad\u017a adres IP Daikin AC.", - "title": "Konfiguracja Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/pt-BR.json b/homeassistant/components/daikin/.translations/pt-BR.json deleted file mode 100644 index bbdf68ed794..00000000000 --- a/homeassistant/components/daikin/.translations/pt-BR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", - "device_fail": "Erro inesperado ao criar dispositivo.", - "device_timeout": "Excedido tempo limite conectando ao dispositivo" - }, - "step": { - "user": { - "data": { - "host": "Host" - }, - "description": "Digite o endere\u00e7o IP do seu AC Daikin.", - "title": "Configurar o AC Daikin" - } - }, - "title": "AC Daikin" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/pt.json b/homeassistant/components/daikin/.translations/pt.json deleted file mode 100644 index 34b4c86e77d..00000000000 --- a/homeassistant/components/daikin/.translations/pt.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", - "device_fail": "Erro inesperado ao criar dispositivo.", - "device_timeout": "Tempo excedido a tentar ligar ao dispositivo." - }, - "step": { - "user": { - "data": { - "host": "Servidor" - }, - "description": "Introduza o endere\u00e7o IP do seu Daikin AC.", - "title": "Configurar o Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/ru.json b/homeassistant/components/daikin/.translations/ru.json deleted file mode 100644 index c9ab31597d7..00000000000 --- a/homeassistant/components/daikin/.translations/ru.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "device_fail": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", - "device_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 IP-\u0430\u0434\u0440\u0435\u0441 \u0412\u0430\u0448\u0435\u0433\u043e Daikin AC.", - "title": "Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/sl.json b/homeassistant/components/daikin/.translations/sl.json deleted file mode 100644 index 088b354fbb1..00000000000 --- a/homeassistant/components/daikin/.translations/sl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana", - "device_fail": "Nepri\u010dakovana napaka pri ustvarjanju naprave.", - "device_timeout": "\u010casovna omejitev za priklop na napravo je potekla." - }, - "step": { - "user": { - "data": { - "host": "Gostitelj" - }, - "description": "Vnesite naslov IP va\u0161e Daikin klime.", - "title": "Nastavite Daikin klimo" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/sv.json b/homeassistant/components/daikin/.translations/sv.json deleted file mode 100644 index 0f1247197aa..00000000000 --- a/homeassistant/components/daikin/.translations/sv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten \u00e4r redan konfigurerad", - "device_fail": "Ov\u00e4ntat fel vid skapande av enhet.", - "device_timeout": "Timeout f\u00f6r anslutning till enheten." - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rddatorn" - }, - "description": "Ange IP-adressen f\u00f6r din Daikin AC.", - "title": "Konfigurera Daikin AC" - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/th.json b/homeassistant/components/daikin/.translations/th.json deleted file mode 100644 index 8f0fdda3711..00000000000 --- a/homeassistant/components/daikin/.translations/th.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "host": "\u0e42\u0e2e\u0e2a\u0e15\u0e4c" - } - } - }, - "title": "Daikin AC" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/zh-Hans.json b/homeassistant/components/daikin/.translations/zh-Hans.json deleted file mode 100644 index 5123dc2366b..00000000000 --- a/homeassistant/components/daikin/.translations/zh-Hans.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u8bbe\u5907\u5df2\u914d\u7f6e\u5b8c\u6210", - "device_fail": "\u521b\u5efa\u8bbe\u5907\u65f6\u51fa\u73b0\u610f\u5916\u9519\u8bef\u3002", - "device_timeout": "\u8fde\u63a5\u8bbe\u5907\u8d85\u65f6\u3002" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u673a" - }, - "description": "\u8f93\u5165\u60a8\u7684 Daikin \u7a7a\u8c03\u7684 IP \u5730\u5740\u3002", - "title": "\u914d\u7f6e Daikin \u7a7a\u8c03" - } - }, - "title": "Daikin \u7a7a\u8c03" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/.translations/zh-Hant.json b/homeassistant/components/daikin/.translations/zh-Hant.json deleted file mode 100644 index 457b7d1b89c..00000000000 --- a/homeassistant/components/daikin/.translations/zh-Hant.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "device_fail": "\u5275\u5efa\u8a2d\u5099\u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002", - "device_timeout": "\u9023\u7dda\u81f3\u8a2d\u5099\u903e\u6642\u3002" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef" - }, - "description": "\u8f38\u5165\u60a8\u7684\u5927\u91d1\u7a7a\u8abf IP \u4f4d\u5740\u3002", - "title": "\u8a2d\u5b9a\u5927\u91d1\u7a7a\u8abf" - } - }, - "title": "\u5927\u91d1\u7a7a\u8abf\uff08Daikin AC\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/daikin/__init__.py b/homeassistant/components/daikin/__init__.py index f6384cfd4b8..ad4d30358c2 100644 --- a/homeassistant/components/daikin/__init__.py +++ b/homeassistant/components/daikin/__init__.py @@ -43,7 +43,7 @@ async def async_setup(hass, config): if DOMAIN not in config: return True - hosts = config[DOMAIN].get(CONF_HOSTS) + hosts = config[DOMAIN][CONF_HOSTS] if not hosts: hass.async_create_task( hass.config_entries.flow.async_init( diff --git a/homeassistant/components/daikin/climate.py b/homeassistant/components/daikin/climate.py index cd45fbdd74b..5455bd6f670 100644 --- a/homeassistant/components/daikin/climate.py +++ b/homeassistant/components/daikin/climate.py @@ -78,7 +78,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= Can only be called when a user accidentally mentions the platform in their config. But even in that case it would have been ignored. """ - pass async def async_setup_entry(hass, entry, async_add_entities): diff --git a/homeassistant/components/daikin/sensor.py b/homeassistant/components/daikin/sensor.py index 2982abd261c..d0d8e4b0fda 100644 --- a/homeassistant/components/daikin/sensor.py +++ b/homeassistant/components/daikin/sensor.py @@ -16,7 +16,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= Can only be called when a user accidentally mentions the platform in their config. But even in that case it would have been ignored. """ - pass async def async_setup_entry(hass, entry, async_add_entities): diff --git a/homeassistant/components/daikin/strings.json b/homeassistant/components/daikin/strings.json index 4badc8b72d7..1e82d285eee 100644 --- a/homeassistant/components/daikin/strings.json +++ b/homeassistant/components/daikin/strings.json @@ -1,19 +1,16 @@ { - "config": { - "title": "Daikin AC", - "step": { - "user": { - "title": "Configure Daikin AC", - "description": "Enter IP address of your Daikin AC.", - "data": { - "host": "Host" - } - } - }, - "abort": { - "device_timeout": "Timeout connecting to the device.", - "device_fail": "Unexpected error creating device.", - "already_configured": "Device is already configured" - } + "config": { + "step": { + "user": { + "title": "Configure Daikin AC", + "description": "Enter IP address of your Daikin AC.", + "data": { "host": "Host" } + } + }, + "abort": { + "device_timeout": "Timeout connecting to the device.", + "device_fail": "Unexpected error creating device.", + "already_configured": "Device is already configured" } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/daikin/switch.py b/homeassistant/components/daikin/switch.py index e22c0b04995..b7131c29bdd 100644 --- a/homeassistant/components/daikin/switch.py +++ b/homeassistant/components/daikin/switch.py @@ -16,7 +16,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= Can only be called when a user accidentally mentions the platform in their config. But even in that case it would have been ignored. """ - pass async def async_setup_entry(hass, entry, async_add_entities): diff --git a/homeassistant/components/daikin/translations/bg.json b/homeassistant/components/daikin/translations/bg.json new file mode 100644 index 00000000000..dd80874adaa --- /dev/null +++ b/homeassistant/components/daikin/translations/bg.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", + "device_fail": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.", + "device_timeout": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e." + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441" + }, + "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 IP \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0432\u0430\u0448\u0438\u044f \u043a\u043b\u0438\u043c\u0430\u0442\u0438\u043a Daikin.", + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043b\u0438\u043c\u0430\u0442\u0438\u043a Daikin" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/ca.json b/homeassistant/components/daikin/translations/ca.json new file mode 100644 index 00000000000..35d2dafd338 --- /dev/null +++ b/homeassistant/components/daikin/translations/ca.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat", + "device_fail": "S'ha produ\u00eft un error inesperat al crear el dispositiu.", + "device_timeout": "S'ha acabat el temps d'espera en la connexi\u00f3 amb el dispositiu." + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3" + }, + "description": "Introdueix l'adre\u00e7a IP del teu Daikin AC.", + "title": "Configuraci\u00f3 de Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/da.json b/homeassistant/components/daikin/translations/da.json new file mode 100644 index 00000000000..230bd7ecbd8 --- /dev/null +++ b/homeassistant/components/daikin/translations/da.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Enheden er allerede konfigureret", + "device_fail": "Uventet fejl ved oprettelse af enhed.", + "device_timeout": "Timeout ved tilslutning til enheden." + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt" + }, + "description": "Indtast IP-adresse p\u00e5 dit Daikin AC.", + "title": "Konfigurer Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/de.json b/homeassistant/components/daikin/translations/de.json new file mode 100644 index 00000000000..ac7df0863bf --- /dev/null +++ b/homeassistant/components/daikin/translations/de.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert", + "device_fail": "Unerwarteter Fehler beim Erstellen des Ger\u00e4ts.", + "device_timeout": "Zeit\u00fcberschreitung beim Verbinden mit dem Ger\u00e4t." + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Gib die IP-Adresse deiner Daikin AC ein.", + "title": "Daikin AC konfigurieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/en.json b/homeassistant/components/daikin/translations/en.json new file mode 100644 index 00000000000..f66f360d096 --- /dev/null +++ b/homeassistant/components/daikin/translations/en.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured", + "device_fail": "Unexpected error creating device.", + "device_timeout": "Timeout connecting to the device." + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Enter IP address of your Daikin AC.", + "title": "Configure Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/es-419.json b/homeassistant/components/daikin/translations/es-419.json new file mode 100644 index 00000000000..3facdce66d4 --- /dev/null +++ b/homeassistant/components/daikin/translations/es-419.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "device_fail": "Error inesperado al crear el dispositivo.", + "device_timeout": "Tiempo de espera de conexi\u00f3n al dispositivo." + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Introduzca la direcci\u00f3n IP de su Daikin AC.", + "title": "Configurar Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/es.json b/homeassistant/components/daikin/translations/es.json new file mode 100644 index 00000000000..b774ac67ed3 --- /dev/null +++ b/homeassistant/components/daikin/translations/es.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "device_fail": "Error inesperado al crear el dispositivo.", + "device_timeout": "Tiempo de espera agotado al conectar con el dispositivo." + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Introduce la IP de tu aire acondicionado Daikin", + "title": "Configurar aire acondicionado Daikin" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/fr.json b/homeassistant/components/daikin/translations/fr.json new file mode 100644 index 00000000000..b15a9fae262 --- /dev/null +++ b/homeassistant/components/daikin/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", + "device_fail": "Erreur inattendue lors de la cr\u00e9ation du p\u00e9riph\u00e9rique.", + "device_timeout": "D\u00e9lai de connexion au p\u00e9riph\u00e9rique expir\u00e9." + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te" + }, + "description": "Entrez l'adresse IP de votre Daikin AC.", + "title": "Configurer Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/hu.json b/homeassistant/components/daikin/translations/hu.json new file mode 100644 index 00000000000..eef3afdc5ee --- /dev/null +++ b/homeassistant/components/daikin/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Az eszk\u00f6zt m\u00e1r konfigur\u00e1ltuk", + "device_fail": "Az eszk\u00f6z l\u00e9trehoz\u00e1sakor v\u00e1ratlan hiba l\u00e9pett fel.", + "device_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s a k\u00e9sz\u00fcl\u00e9k csatlakoz\u00e1sakor." + }, + "step": { + "user": { + "data": { + "host": "Hoszt" + }, + "description": "Add meg a Daikin l\u00e9gkond\u00edcion\u00e1l\u00f3 IP-c\u00edm\u00e9t.", + "title": "A Daikin l\u00e9gkond\u00edcion\u00e1l\u00f3 konfigur\u00e1l\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/it.json b/homeassistant/components/daikin/translations/it.json new file mode 100644 index 00000000000..72d5acd97a8 --- /dev/null +++ b/homeassistant/components/daikin/translations/it.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", + "device_fail": "Errore inatteso durante la creazione del dispositivo.", + "device_timeout": "Tempo scaduto per la connessione al dispositivo." + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Inserisci l'indirizzo IP del tuo Daikin AC.", + "title": "Configura Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/ko.json b/homeassistant/components/daikin/translations/ko.json new file mode 100644 index 00000000000..129da9b87d0 --- /dev/null +++ b/homeassistant/components/daikin/translations/ko.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "device_fail": "\uae30\uae30\ub97c \uad6c\uc131\ud558\ub294 \ub3c4\uc911 \uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "device_timeout": "\uae30\uae30 \uc5f0\uacb0 \uc2dc\uac04\uc774 \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8" + }, + "description": "\ub2e4\uc774\ud0a8 \uc5d0\uc5b4\ucee8\uc758 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "\ub2e4\uc774\ud0a8 \uc5d0\uc5b4\ucee8 \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/lb.json b/homeassistant/components/daikin/translations/lb.json new file mode 100644 index 00000000000..4fab38c9115 --- /dev/null +++ b/homeassistant/components/daikin/translations/lb.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert", + "device_fail": "Onerwaarte Feeler beim erstelle vum Apparat.", + "device_timeout": "Z\u00e4it Iwwerschreidung beim verbannen mam Apparat." + }, + "step": { + "user": { + "data": { + "host": "Apparat" + }, + "description": "Gitt d'IP Adresse vum Daikin AC an:", + "title": "Daikin AC konfigur\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/nl.json b/homeassistant/components/daikin/translations/nl.json new file mode 100644 index 00000000000..0e0db0c907c --- /dev/null +++ b/homeassistant/components/daikin/translations/nl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd", + "device_fail": "Onverwachte fout bij het aanmaken van een apparaat.", + "device_timeout": "Time-out voor verbinding met het apparaat." + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Voer het IP-adres van uw Daikin AC in.", + "title": "Daikin AC instellen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/nn.json b/homeassistant/components/daikin/translations/nn.json new file mode 100644 index 00000000000..fb8f82824c2 --- /dev/null +++ b/homeassistant/components/daikin/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Daikin AC" +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/no.json b/homeassistant/components/daikin/translations/no.json new file mode 100644 index 00000000000..42d13cf6844 --- /dev/null +++ b/homeassistant/components/daikin/translations/no.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert", + "device_fail": "Uventet feil under oppretting av enheten.", + "device_timeout": "Tidsavbrudd for tilkobling til enheten." + }, + "step": { + "user": { + "data": { + "host": "Vert" + }, + "description": "Angi IP-adressen til din Daikin AC.", + "title": "Konfigurer Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/pl.json b/homeassistant/components/daikin/translations/pl.json new file mode 100644 index 00000000000..2e2f65bc008 --- /dev/null +++ b/homeassistant/components/daikin/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "device_fail": "Nieoczekiwany b\u0142\u0105d tworzenia urz\u0105dzenia.", + "device_timeout": "Przekroczono limit czasu \u0142\u0105czenia z urz\u0105dzeniem." + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP" + }, + "description": "Wprowad\u017a adres IP Daikin AC.", + "title": "Konfiguracja Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/pt-BR.json b/homeassistant/components/daikin/translations/pt-BR.json new file mode 100644 index 00000000000..294e14b1071 --- /dev/null +++ b/homeassistant/components/daikin/translations/pt-BR.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", + "device_fail": "Erro inesperado ao criar dispositivo.", + "device_timeout": "Excedido tempo limite conectando ao dispositivo" + }, + "step": { + "user": { + "data": { + "host": "Host" + }, + "description": "Digite o endere\u00e7o IP do seu AC Daikin.", + "title": "Configurar o AC Daikin" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/pt.json b/homeassistant/components/daikin/translations/pt.json new file mode 100644 index 00000000000..7e8f0086194 --- /dev/null +++ b/homeassistant/components/daikin/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado", + "device_fail": "Erro inesperado ao criar dispositivo.", + "device_timeout": "Tempo excedido a tentar ligar ao dispositivo." + }, + "step": { + "user": { + "data": { + "host": "Servidor" + }, + "description": "Introduza o endere\u00e7o IP do seu Daikin AC.", + "title": "Configurar o Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/ru.json b/homeassistant/components/daikin/translations/ru.json new file mode 100644 index 00000000000..a7b57fcb757 --- /dev/null +++ b/homeassistant/components/daikin/translations/ru.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "device_fail": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "device_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 IP-\u0430\u0434\u0440\u0435\u0441 \u0412\u0430\u0448\u0435\u0433\u043e Daikin AC.", + "title": "Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/sl.json b/homeassistant/components/daikin/translations/sl.json new file mode 100644 index 00000000000..f48d729b83c --- /dev/null +++ b/homeassistant/components/daikin/translations/sl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana", + "device_fail": "Nepri\u010dakovana napaka pri ustvarjanju naprave.", + "device_timeout": "\u010casovna omejitev za priklop na napravo je potekla." + }, + "step": { + "user": { + "data": { + "host": "Gostitelj" + }, + "description": "Vnesite naslov IP va\u0161e Daikin klime.", + "title": "Nastavite Daikin klimo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/sv.json b/homeassistant/components/daikin/translations/sv.json new file mode 100644 index 00000000000..0825d6ed396 --- /dev/null +++ b/homeassistant/components/daikin/translations/sv.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten \u00e4r redan konfigurerad", + "device_fail": "Ov\u00e4ntat fel vid skapande av enhet.", + "device_timeout": "Timeout f\u00f6r anslutning till enheten." + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rddatorn" + }, + "description": "Ange IP-adressen f\u00f6r din Daikin AC.", + "title": "Konfigurera Daikin AC" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/th.json b/homeassistant/components/daikin/translations/th.json similarity index 100% rename from homeassistant/components/tellduslive/.translations/th.json rename to homeassistant/components/daikin/translations/th.json diff --git a/homeassistant/components/daikin/translations/zh-Hans.json b/homeassistant/components/daikin/translations/zh-Hans.json new file mode 100644 index 00000000000..57b891d1adf --- /dev/null +++ b/homeassistant/components/daikin/translations/zh-Hans.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "\u8bbe\u5907\u5df2\u914d\u7f6e\u5b8c\u6210", + "device_fail": "\u521b\u5efa\u8bbe\u5907\u65f6\u51fa\u73b0\u610f\u5916\u9519\u8bef\u3002", + "device_timeout": "\u8fde\u63a5\u8bbe\u5907\u8d85\u65f6\u3002" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u673a" + }, + "description": "\u8f93\u5165\u60a8\u7684 Daikin \u7a7a\u8c03\u7684 IP \u5730\u5740\u3002", + "title": "\u914d\u7f6e Daikin \u7a7a\u8c03" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/daikin/translations/zh-Hant.json b/homeassistant/components/daikin/translations/zh-Hant.json new file mode 100644 index 00000000000..bab54118687 --- /dev/null +++ b/homeassistant/components/daikin/translations/zh-Hant.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "device_fail": "\u5275\u5efa\u8a2d\u5099\u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002", + "device_timeout": "\u9023\u7dda\u81f3\u8a2d\u5099\u903e\u6642\u3002" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef" + }, + "description": "\u8f38\u5165\u60a8\u7684\u5927\u91d1\u7a7a\u8abf IP \u4f4d\u5740\u3002", + "title": "\u8a2d\u5b9a\u5927\u91d1\u7a7a\u8abf" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/danfoss_air/binary_sensor.py b/homeassistant/components/danfoss_air/binary_sensor.py index d5aab8b35bb..caac12c1b20 100644 --- a/homeassistant/components/danfoss_air/binary_sensor.py +++ b/homeassistant/components/danfoss_air/binary_sensor.py @@ -1,4 +1,6 @@ """Support for the for Danfoss Air HRV binary sensors.""" +from pydanfossair.commands import ReadCommand + from homeassistant.components.binary_sensor import BinarySensorDevice from . import DOMAIN as DANFOSS_AIR_DOMAIN @@ -6,8 +8,6 @@ from . import DOMAIN as DANFOSS_AIR_DOMAIN def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the available Danfoss Air sensors etc.""" - from pydanfossair.commands import ReadCommand - data = hass.data[DANFOSS_AIR_DOMAIN] sensors = [ diff --git a/homeassistant/components/danfoss_air/manifest.json b/homeassistant/components/danfoss_air/manifest.json index bbfbd3791b2..bbecccf2a91 100644 --- a/homeassistant/components/danfoss_air/manifest.json +++ b/homeassistant/components/danfoss_air/manifest.json @@ -3,6 +3,5 @@ "name": "Danfoss Air", "documentation": "https://www.home-assistant.io/integrations/danfoss_air", "requirements": ["pydanfossair==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/danfoss_air/sensor.py b/homeassistant/components/danfoss_air/sensor.py index 73305d5c625..f03c74ae78b 100644 --- a/homeassistant/components/danfoss_air/sensor.py +++ b/homeassistant/components/danfoss_air/sensor.py @@ -1,6 +1,8 @@ """Support for the for Danfoss Air HRV sensors.""" import logging +from pydanfossair.commands import ReadCommand + from homeassistant.const import ( DEVICE_CLASS_BATTERY, DEVICE_CLASS_HUMIDITY, @@ -17,8 +19,6 @@ _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the available Danfoss Air sensors etc.""" - from pydanfossair.commands import ReadCommand - data = hass.data[DANFOSS_AIR_DOMAIN] sensors = [ diff --git a/homeassistant/components/danfoss_air/switch.py b/homeassistant/components/danfoss_air/switch.py index 8a1e0f9c746..96e363951c8 100644 --- a/homeassistant/components/danfoss_air/switch.py +++ b/homeassistant/components/danfoss_air/switch.py @@ -1,6 +1,8 @@ """Support for the for Danfoss Air HRV sswitches.""" import logging +from pydanfossair.commands import ReadCommand, UpdateCommand + from homeassistant.components.switch import SwitchDevice from . import DOMAIN as DANFOSS_AIR_DOMAIN @@ -10,8 +12,6 @@ _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Danfoss Air HRV switch platform.""" - from pydanfossair.commands import ReadCommand, UpdateCommand - data = hass.data[DANFOSS_AIR_DOMAIN] switches = [ diff --git a/homeassistant/components/darksky/manifest.json b/homeassistant/components/darksky/manifest.json index 94123ceba85..53f05388817 100644 --- a/homeassistant/components/darksky/manifest.json +++ b/homeassistant/components/darksky/manifest.json @@ -3,6 +3,5 @@ "name": "Dark Sky", "documentation": "https://www.home-assistant.io/integrations/darksky", "requirements": ["python-forecastio==1.4.0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/darksky/sensor.py b/homeassistant/components/darksky/sensor.py index 26ba590888f..e3742231e1e 100644 --- a/homeassistant/components/darksky/sensor.py +++ b/homeassistant/components/darksky/sensor.py @@ -15,12 +15,17 @@ from homeassistant.const import ( CONF_MONITORED_CONDITIONS, CONF_NAME, CONF_SCAN_INTERVAL, + DEGREE, + LENGTH_CENTIMETERS, + LENGTH_KILOMETERS, SPEED_KILOMETERS_PER_HOUR, SPEED_METERS_PER_SECOND, SPEED_MILES_PER_HOUR, + TEMP_CELSIUS, + TEMP_FAHRENHEIT, TIME_HOURS, UNIT_PERCENTAGE, - UNIT_UV_INDEX, + UV_INDEX, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -74,21 +79,21 @@ SENSOR_TYPES = { ], "nearest_storm_distance": [ "Nearest Storm Distance", - "km", + LENGTH_KILOMETERS, "mi", - "km", - "km", + LENGTH_KILOMETERS, + LENGTH_KILOMETERS, "mi", "mdi:weather-lightning", ["currently"], ], "nearest_storm_bearing": [ "Nearest Storm Bearing", - "°", - "°", - "°", - "°", - "°", + DEGREE, + DEGREE, + DEGREE, + DEGREE, + DEGREE, "mdi:weather-lightning", ["currently"], ], @@ -124,41 +129,41 @@ SENSOR_TYPES = { ], "precip_accumulation": [ "Precip Accumulation", - "cm", + LENGTH_CENTIMETERS, "in", - "cm", - "cm", - "cm", + LENGTH_CENTIMETERS, + LENGTH_CENTIMETERS, + LENGTH_CENTIMETERS, "mdi:weather-snowy", ["hourly", "daily"], ], "temperature": [ "Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["currently", "hourly"], ], "apparent_temperature": [ "Apparent Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["currently", "hourly"], ], "dew_point": [ "Dew Point", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["currently", "hourly", "daily"], ], @@ -174,11 +179,11 @@ SENSOR_TYPES = { ], "wind_bearing": [ "Wind Bearing", - "°", - "°", - "°", - "°", - "°", + DEGREE, + DEGREE, + DEGREE, + DEGREE, + DEGREE, "mdi:compass", ["currently", "hourly", "daily"], ], @@ -224,10 +229,10 @@ SENSOR_TYPES = { ], "visibility": [ "Visibility", - "km", + LENGTH_KILOMETERS, "mi", - "km", - "km", + LENGTH_KILOMETERS, + LENGTH_KILOMETERS, "mi", "mdi:eye", ["currently", "hourly", "daily"], @@ -244,81 +249,81 @@ SENSOR_TYPES = { ], "apparent_temperature_max": [ "Daily High Apparent Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "apparent_temperature_high": [ "Daytime High Apparent Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "apparent_temperature_min": [ "Daily Low Apparent Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "apparent_temperature_low": [ "Overnight Low Apparent Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "temperature_max": [ "Daily High Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "temperature_high": [ "Daytime High Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "temperature_min": [ "Daily Low Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], "temperature_low": [ "Overnight Low Temperature", - "°C", - "°F", - "°C", - "°C", - "°C", + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_CELSIUS, + TEMP_CELSIUS, + TEMP_CELSIUS, "mdi:thermometer", ["daily"], ], @@ -334,11 +339,11 @@ SENSOR_TYPES = { ], "uv_index": [ "UV Index", - UNIT_UV_INDEX, - UNIT_UV_INDEX, - UNIT_UV_INDEX, - UNIT_UV_INDEX, - UNIT_UV_INDEX, + UV_INDEX, + UV_INDEX, + UV_INDEX, + UV_INDEX, + UV_INDEX, "mdi:weather-sunny", ["currently", "hourly", "daily"], ], @@ -492,7 +497,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): units = "us" forecast_data = DarkSkyData( - api_key=config.get(CONF_API_KEY, None), + api_key=config.get(CONF_API_KEY), latitude=latitude, longitude=longitude, units=units, @@ -771,7 +776,8 @@ def convert_to_camel(data): This is not pythonic, but needed for certain situations. """ components = data.split("_") - return components[0] + "".join(x.title() for x in components[1:]) + capital_components = "".join(x.title() for x in components[1:]) + return f"{components[0]}{capital_components}" class DarkSkyData: diff --git a/homeassistant/components/datadog/__init__.py b/homeassistant/components/datadog/__init__.py index 52cbe906402..36b4037f70a 100644 --- a/homeassistant/components/datadog/__init__.py +++ b/homeassistant/components/datadog/__init__.py @@ -45,10 +45,10 @@ def setup(hass, config): """Set up the Datadog component.""" conf = config[DOMAIN] - host = conf.get(CONF_HOST) - port = conf.get(CONF_PORT) - sample_rate = conf.get(CONF_RATE) - prefix = conf.get(CONF_PREFIX) + host = conf[CONF_HOST] + port = conf[CONF_PORT] + sample_rate = conf[CONF_RATE] + prefix = conf[CONF_PREFIX] initialize(statsd_host=host, statsd_port=port) diff --git a/homeassistant/components/datadog/manifest.json b/homeassistant/components/datadog/manifest.json index 4df780b200f..7394c60804a 100644 --- a/homeassistant/components/datadog/manifest.json +++ b/homeassistant/components/datadog/manifest.json @@ -3,6 +3,5 @@ "name": "Datadog", "documentation": "https://www.home-assistant.io/integrations/datadog", "requirements": ["datadog==0.15.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ddwrt/device_tracker.py b/homeassistant/components/ddwrt/device_tracker.py index bd2728d03dc..27f6895fc43 100644 --- a/homeassistant/components/ddwrt/device_tracker.py +++ b/homeassistant/components/ddwrt/device_tracker.py @@ -16,6 +16,7 @@ from homeassistant.const import ( CONF_SSL, CONF_USERNAME, CONF_VERIFY_SSL, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv @@ -86,7 +87,7 @@ class DdWrtDeviceScanner(DeviceScanner): if not data: return None - dhcp_leases = data.get("dhcp_leases", None) + dhcp_leases = data.get("dhcp_leases") if not dhcp_leases: return None @@ -124,9 +125,9 @@ class DdWrtDeviceScanner(DeviceScanner): self.last_results = [] if self.wireless_only: - active_clients = data.get("active_wireless", None) + active_clients = data.get("active_wireless") else: - active_clients = data.get("arp_table", None) + active_clients = data.get("arp_table") if not active_clients: return False @@ -152,7 +153,7 @@ class DdWrtDeviceScanner(DeviceScanner): except requests.exceptions.Timeout: _LOGGER.exception("Connection to the router timed out") return - if response.status_code == 200: + if response.status_code == HTTP_OK: return _parse_ddwrt_response(response.text) if response.status_code == 401: # Authentication error diff --git a/homeassistant/components/ddwrt/manifest.json b/homeassistant/components/ddwrt/manifest.json index d50fd262729..4c716929a86 100644 --- a/homeassistant/components/ddwrt/manifest.json +++ b/homeassistant/components/ddwrt/manifest.json @@ -2,7 +2,5 @@ "domain": "ddwrt", "name": "DD-WRT", "documentation": "https://www.home-assistant.io/integrations/ddwrt", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/deconz/.translations/bg.json b/homeassistant/components/deconz/.translations/bg.json deleted file mode 100644 index 3bcbb592301..00000000000 --- a/homeassistant/components/deconz/.translations/bg.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041c\u043e\u0441\u0442\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f.", - "no_bridges": "\u041d\u0435 \u0441\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u043c\u043e\u0441\u0442\u043e\u0432\u0435 deCONZ", - "not_deconz_bridge": "\u041d\u0435 \u0435 deCONZ \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", - "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u043e \u043a\u043e\u043f\u0438\u0435 \u043d\u0430 deCONZ", - "updated_instance": "\u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 deCONZ \u0441 \u043d\u043e\u0432 \u0430\u0434\u0440\u0435\u0441" - }, - "error": { - "no_key": "\u041d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 API \u043a\u043b\u044e\u0447" - }, - "flow_title": "deCONZ Zigbee \u0448\u043b\u044e\u0437 ({host})", - "step": { - "hassio_confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0437\u0432\u0430 \u0441 deCONZ \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 hass.io {addon}?", - "title": "deCONZ Zigbee \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0447\u0440\u0435\u0437 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430" - }, - "init": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "port": "\u041f\u043e\u0440\u0442" - }, - "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 deCONZ \u0448\u043b\u044e\u0437" - }, - "link": { - "description": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438 deCONZ \u0448\u043b\u044e\u0437\u0430 \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430 \u0441 Home Assistant.\n\n1. \u041e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 deCONZ Settings -> Gateway -> Advanced\n2. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \"Authenticate app\"", - "title": "\u0412\u0440\u044a\u0437\u043a\u0430 \u0441 deCONZ" - } - }, - "title": "deCONZ Zigbee \u0448\u043b\u044e\u0437" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "\u0418 \u0434\u0432\u0430\u0442\u0430 \u0431\u0443\u0442\u043e\u043d\u0430", - "button_1": "\u041f\u044a\u0440\u0432\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_2": "\u0412\u0442\u043e\u0440\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_3": "\u0422\u0440\u0435\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_4": "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", - "close": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435", - "dim_down": "\u0417\u0430\u0442\u044a\u043c\u043d\u044f\u0432\u0430\u043d\u0435", - "dim_up": "\u041e\u0441\u0432\u0435\u0442\u044f\u0432\u0430\u043d\u0435", - "left": "\u041b\u044f\u0432\u043e", - "open": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435", - "right": "\u0414\u044f\u0441\u043d\u043e", - "side_1": "\u0421\u0442\u0440\u0430\u043d\u0430 1", - "side_2": "\u0421\u0442\u0440\u0430\u043d\u0430 2", - "side_3": "\u0421\u0442\u0440\u0430\u043d\u0430 3", - "side_4": "\u0421\u0442\u0440\u0430\u043d\u0430 4", - "side_5": "\u0421\u0442\u0440\u0430\u043d\u0430 5", - "side_6": "\u0421\u0442\u0440\u0430\u043d\u0430 6", - "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438" - }, - "trigger_type": { - "remote_awakened": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0441\u0435 \u0441\u044a\u0431\u0443\u0434\u0438", - "remote_button_double_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_button_long_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e", - "remote_button_long_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442 \u0441\u043b\u0435\u0434 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u043d\u0435", - "remote_button_quadruple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0447\u0435\u0442\u0438\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_button_quintuple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0435\u0442\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_button_rotated": "\u0417\u0430\u0432\u044a\u0440\u0442\u044f\u043d \u0431\u0443\u0442\u043e\u043d \"{subtype}\"", - "remote_button_rotation_stopped": "\u0421\u043f\u0440\u044f \u0432\u044a\u0440\u0442\u0435\u043d\u0435\u0442\u043e \u043d\u0430 \u0431\u0443\u0442\u043e\u043d \"{subtype}\"", - "remote_button_short_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442", - "remote_button_short_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442", - "remote_button_triple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0442\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_double_tap": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \"{subtype}\" \u0435 \u043f\u043e\u0447\u0443\u043a\u0430\u043d\u043e \u0434\u0432\u0430 \u043f\u044a\u0442\u0438", - "remote_falling": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043f\u0430\u0434\u0430", - "remote_gyro_activated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0440\u0430\u0437\u043a\u043b\u0430\u0442\u0435\u043d\u043e", - "remote_moved": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043f\u0440\u0435\u043c\u0435\u0441\u0442\u0435\u043d\u043e \u0441 \"{subtype}\" \u043d\u0430\u0433\u043e\u0440\u0435", - "remote_rotate_from_side_1": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 1\" \u043a\u044a\u043c \" {subtype} \"", - "remote_rotate_from_side_2": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 2\" \u043a\u044a\u043c \" {subtype} \"", - "remote_rotate_from_side_3": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 3\" \u043a\u044a\u043c \" {subtype} \"", - "remote_rotate_from_side_4": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 4\" \u043a\u044a\u043c \" {subtype} \"", - "remote_rotate_from_side_5": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 5\" \u043a\u044a\u043c \" {subtype} \"", - "remote_rotate_from_side_6": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 6\" \u043a\u044a\u043c \" {subtype} \"" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 deCONZ CLIP \u0441\u0435\u043d\u0437\u043e\u0440\u0438", - "allow_deconz_groups": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438 deCONZ \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u043d\u0438 \u0433\u0440\u0443\u043f\u0438" - }, - "description": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 \u0442\u0438\u043f\u043e\u0432\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/ca.json b/homeassistant/components/deconz/.translations/ca.json deleted file mode 100644 index ee386bece55..00000000000 --- a/homeassistant/components/deconz/.translations/ca.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'enlla\u00e7 ja est\u00e0 configurat", - "already_in_progress": "El flux de dades de configuraci\u00f3 per l'enlla\u00e7 ja est\u00e0 en curs.", - "no_bridges": "No s'han descobert enlla\u00e7os amb deCONZ", - "not_deconz_bridge": "No \u00e9s un enlla\u00e7 deCONZ", - "one_instance_only": "El component nom\u00e9s admet una inst\u00e0ncia deCONZ", - "updated_instance": "S'ha actualitzat la inst\u00e0ncia de deCONZ amb una nova adre\u00e7a" - }, - "error": { - "no_key": "No s'ha pogut obtenir una clau API" - }, - "flow_title": "Passarel\u00b7la d'enlla\u00e7 deCONZ Zigbee ({host})", - "step": { - "hassio_confirm": { - "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb la passarel\u00b7la deCONZ proporcionada pel complement de Hass.io: {addon}?", - "title": "Passarel\u00b7la d'enlla\u00e7 deCONZ Zigbee (complement de Hass.io)" - }, - "init": { - "data": { - "host": "Amfitri\u00f3", - "port": "Port" - }, - "title": "Definici\u00f3 de la passarel\u00b7la deCONZ" - }, - "link": { - "description": "Desbloqueja la teva passarel\u00b7la d'enlla\u00e7 deCONZ per a registrar-te amb Home Assistant.\n\n1. V\u00e9s a la configuraci\u00f3 del sistema deCONZ -> Passarel\u00b7la -> Avan\u00e7at\n2. Prem el bot\u00f3 \"Autenticar applicaci\u00f3\"", - "title": "Vincular amb deCONZ" - } - }, - "title": "Passarel\u00b7la d'enlla\u00e7 deCONZ Zigbee" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Ambd\u00f3s botons", - "button_1": "Primer bot\u00f3", - "button_2": "Segon bot\u00f3", - "button_3": "Tercer bot\u00f3", - "button_4": "Quart bot\u00f3", - "close": "Tanca", - "dim_down": "Atenua la brillantor", - "dim_up": "Augmenta la brillantor", - "left": "Esquerra", - "open": "Obert", - "right": "Dreta", - "side_1": "cara 1", - "side_2": "cara 2", - "side_3": "cara 3", - "side_4": "cara 4", - "side_5": "cara 5", - "side_6": "cara 6", - "turn_off": "Desactiva", - "turn_on": "Activa" - }, - "trigger_type": { - "remote_awakened": "Dispositiu despertat", - "remote_button_double_press": "Bot\u00f3 \"{subtype}\" clicat dues vegades", - "remote_button_long_press": "Bot\u00f3 \"{subtype}\" premut cont\u00ednuament", - "remote_button_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut", - "remote_button_quadruple_press": "Bot\u00f3 \"{subtype}\" clicat quatre vegades", - "remote_button_quintuple_press": "Bot\u00f3 \"{subtype}\" clicat cinc vegades", - "remote_button_rotated": "Bot\u00f3 \"{subtype}\" girat", - "remote_button_rotation_stopped": "La rotaci\u00f3 del bot\u00f3 \"{subtype}\" s'ha aturat", - "remote_button_short_press": "Bot\u00f3 \"{subtype}\" premut", - "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat", - "remote_button_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades", - "remote_double_tap": "Dispositiu \"{subtype}\" tocat dues vegades", - "remote_double_tap_any_side": "Dispositiu tocat dues vegades a alguna cara", - "remote_falling": "Dispositiu en caiguda lliure", - "remote_flip_180_degrees": "Dispositiu voltejat 180 graus", - "remote_flip_90_degrees": "Dispositiu voltejat 90 graus", - "remote_gyro_activated": "Dispositiu sacsejat", - "remote_moved": "Dispositiu mogut amb la \"{subtype}\" amunt", - "remote_moved_any_side": "Dispositiu mogut amb alguna cara amunt", - "remote_rotate_from_side_1": "Dispositiu rotat de la \"cara 1\" a la \"{subtype}\"", - "remote_rotate_from_side_2": "Dispositiu rotat de la \"cara 2\" a la \"{subtype}\"", - "remote_rotate_from_side_3": "Dispositiu rotat de la \"cara 3\" a la \"{subtype}\"", - "remote_rotate_from_side_4": "Dispositiu rotat de la \"cara 4\" a la \"{subtype}\"", - "remote_rotate_from_side_5": "Dispositiu rotat de la \"cara 5\" a la \"{subtype}\"", - "remote_rotate_from_side_6": "Dispositiu rotat de la \"cara 6\" a la \"{subtype}\"", - "remote_turned_clockwise": "Dispositiu girat en sentit horari", - "remote_turned_counter_clockwise": "Dispositiu girat en sentit antihorari" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Permet sensors deCONZ CLIP", - "allow_deconz_groups": "Permet grups de llums deCONZ" - }, - "description": "Configura la visibilitat dels tipus dels dispositius deCONZ", - "title": "Opcions de deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/cs.json b/homeassistant/components/deconz/.translations/cs.json deleted file mode 100644 index 544ab0ff2ed..00000000000 --- a/homeassistant/components/deconz/.translations/cs.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "P\u0159emost\u011bn\u00ed je ji\u017e nakonfigurov\u00e1no", - "no_bridges": "\u017d\u00e1dn\u00e9 deCONZ p\u0159emost\u011bn\u00ed nebyly nalezeny", - "one_instance_only": "Komponent podporuje pouze jednu instanci deCONZ" - }, - "error": { - "no_key": "Nelze z\u00edskat kl\u00ed\u010d API" - }, - "flow_title": "Br\u00e1na deCONZ ZigBee ({host})", - "step": { - "hassio_confirm": { - "description": "Chcete nakonfigurovat slu\u017ebu Home Assistant pro p\u0159ipojen\u00ed k deCONZ br\u00e1n\u011b pomoc\u00ed hass.io {addon}?", - "title": "deCONZ Zigbee br\u00e1na prost\u0159ednictv\u00edm dopl\u0148ku Hass.io" - }, - "init": { - "data": { - "host": "Hostitel", - "port": "Port" - }, - "title": "Definujte br\u00e1nu deCONZ" - }, - "link": { - "description": "Odemkn\u011bte br\u00e1nu deCONZ, pro registraci v Home Assistant. \n\n 1. P\u0159ejd\u011bte do nastaven\u00ed syst\u00e9mu deCONZ \n 2. Stiskn\u011bte tla\u010d\u00edtko \"Unlock Gateway\"", - "title": "Propojit s deCONZ" - } - }, - "title": "Br\u00e1na deCONZ Zigbee" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/cy.json b/homeassistant/components/deconz/.translations/cy.json deleted file mode 100644 index fff54bb3f6c..00000000000 --- a/homeassistant/components/deconz/.translations/cy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Pont eisoes wedi'i ffurfweddu", - "no_bridges": "Dim pontydd deCONZ wedi eu darganfod", - "one_instance_only": "Elfen dim ond yn cefnogi enghraifft deCONZ" - }, - "error": { - "no_key": "Methu cael allwedd API" - }, - "step": { - "init": { - "data": { - "host": "Gwesteiwr", - "port": "Port (gwerth diofyn: '80')" - }, - "title": "Diffiniwch porth dad-adeiladu" - }, - "link": { - "description": "Datgloi eich porth deCONZ i gofrestru gyda Cynorthwydd Cartref.\n\n1. Ewch i osodiadau system deCONZ \n2. Bwyso botwm \"Datgloi porth\"", - "title": "Cysylltu \u00e2 deCONZ" - } - }, - "title": "deCONZ" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/da.json b/homeassistant/components/deconz/.translations/da.json deleted file mode 100644 index 91dd0ea9a54..00000000000 --- a/homeassistant/components/deconz/.translations/da.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge er allerede konfigureret", - "already_in_progress": "Konfigurationsflow for bro er allerede i gang.", - "no_bridges": "Ingen deConz-bridge fundet", - "not_deconz_bridge": "Ikke en deCONZ-bro", - "one_instance_only": "Komponenten underst\u00f8tter kun \u00e9n deCONZ-instans", - "updated_instance": "Opdaterede deCONZ-instans med ny v\u00e6rtadresse" - }, - "error": { - "no_key": "Kunne ikke f\u00e5 en API-n\u00f8gle" - }, - "flow_title": "deCONZ Zigbee gateway ({host})", - "step": { - "hassio_confirm": { - "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til deCONZ-gateway'en leveret af Hass.io-tilf\u00f8jelsen {addon}?", - "title": "deCONZ Zigbee-gateway via Hass.io-tilf\u00f8jelse" - }, - "init": { - "data": { - "host": "V\u00e6rt", - "port": "Port" - }, - "title": "Definer deCONZ-gateway" - }, - "link": { - "description": "L\u00e5s din deCONZ-gateway op for at registrere dig med Home Assistant. \n\n 1. G\u00e5 til deCONZ settings -> Gateway -> Advanced\n 2. Tryk p\u00e5 knappen \"Authenticate app\"", - "title": "Forbind med deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Begge knapper", - "button_1": "F\u00f8rste knap", - "button_2": "Anden knap", - "button_3": "Tredje knap", - "button_4": "Fjerde knap", - "close": "Luk", - "dim_down": "D\u00e6mp ned", - "dim_up": "D\u00e6mp op", - "left": "Venstre", - "open": "\u00c5ben", - "right": "H\u00f8jre", - "side_1": "Side 1", - "side_2": "Side 2", - "side_3": "Side 3", - "side_4": "Side 4", - "side_5": "Side 5", - "side_6": "Side 6", - "turn_off": "Sluk", - "turn_on": "T\u00e6nd" - }, - "trigger_type": { - "remote_awakened": "Enheden v\u00e6kket", - "remote_button_double_press": "\"{subtype}\"-knappen er dobbeltklikket", - "remote_button_long_press": "\"{subtype}\"-knappen trykket p\u00e5 konstant", - "remote_button_long_release": "\"{subtype}\"-knappen frigivet efter langt tryk", - "remote_button_quadruple_press": "\"{subtype}\"-knappen firedobbelt-klikket", - "remote_button_quintuple_press": "\"{subtype}\"-knappen femdobbelt-klikket", - "remote_button_rotated": "Knap roteret \"{subtype}\"", - "remote_button_rotation_stopped": "Knaprotation \"{subtype}\" er stoppet", - "remote_button_short_press": "\"{subtype}\"-knappen trykket p\u00e5", - "remote_button_short_release": "\"{subtype}\"-knappen frigivet", - "remote_button_triple_press": "\"{subtype}\"-knappen tredobbeltklikkes", - "remote_double_tap": "Enheden \"{subtype}\" dobbelttappet", - "remote_double_tap_any_side": "Enhed dobbelttappet p\u00e5 enhver side", - "remote_falling": "Enheden er i frit fald", - "remote_flip_180_degrees": "Enhed vendt 180 grader", - "remote_flip_90_degrees": "Enhed vendt 90 grader", - "remote_gyro_activated": "Enhed rystet", - "remote_moved": "Enheden flyttede med \"{subtype}\" op", - "remote_moved_any_side": "Enhed flyttet med enhver side opad", - "remote_rotate_from_side_1": "Enhed roteret fra \"side 1\" til \"{subtype}\"", - "remote_rotate_from_side_2": "Enhed roteret fra \"side 2\" til \"{subtype}\"", - "remote_rotate_from_side_3": "Enhed roteret fra \"side 3\" til \"{subtype}\"", - "remote_rotate_from_side_4": "Enhed roteret fra \"side 4\" til \"{subtype}\"", - "remote_rotate_from_side_5": "Enhed roteret fra \"side 5\" til \"{subtype}\"", - "remote_rotate_from_side_6": "Enhed roteret fra \"side 6\" til \"{subtype}\"", - "remote_turned_clockwise": "Enhed drejet med uret", - "remote_turned_counter_clockwise": "Enhed drejet mod uret" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Tillad deCONZ CLIP-sensorer", - "allow_deconz_groups": "Tillad deCONZ-lysgrupper" - }, - "description": "Konfigurer synligheden af deCONZ-enhedstyper", - "title": "deCONZ-indstillinger" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/de.json b/homeassistant/components/deconz/.translations/de.json deleted file mode 100644 index 1b2daecbc4e..00000000000 --- a/homeassistant/components/deconz/.translations/de.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge ist bereits konfiguriert", - "already_in_progress": "Der Konfigurationsablauf f\u00fcr die Bridge wird bereits ausgef\u00fchrt.", - "no_bridges": "Keine deCON-Bridges entdeckt", - "not_deconz_bridge": "Keine deCONZ Bridge entdeckt", - "one_instance_only": "Komponente unterst\u00fctzt nur eine deCONZ-Instanz", - "updated_instance": "deCONZ-Instanz mit neuer Host-Adresse aktualisiert" - }, - "error": { - "no_key": "Es konnte kein API-Schl\u00fcssel abgerufen werden" - }, - "flow_title": "deCONZ Zigbee Gateway", - "step": { - "hassio_confirm": { - "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass er eine Verbindung mit dem deCONZ Gateway herstellt, der vom Add-on hass.io {addon} bereitgestellt wird?", - "title": "deCONZ Zigbee Gateway \u00fcber das Hass.io Add-on" - }, - "init": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "Definiere das deCONZ-Gateway" - }, - "link": { - "description": "Entsperre dein deCONZ-Gateway, um es bei Home Assistant zu registrieren. \n\n 1. Gehe in die deCONZ-Systemeinstellungen \n 2. Dr\u00fccke die Taste \"Gateway entsperren\"", - "title": "Mit deCONZ verbinden" - } - }, - "title": "deCONZ Zigbee Gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Beide Tasten", - "button_1": "Erste Taste", - "button_2": "Zweite Taste", - "button_3": "Dritte Taste", - "button_4": "Vierte Taste", - "close": "Schlie\u00dfen", - "dim_down": "Dimmer runter", - "dim_up": "Dimmer hoch", - "left": "Links", - "open": "Offen", - "right": "Rechts", - "side_1": "Seite 1", - "side_2": "Seite 2", - "side_3": "Seite 3", - "side_4": "Seite 4", - "side_5": "Seite 5", - "side_6": "Seite 6", - "turn_off": "Ausschalten", - "turn_on": "Einschalten" - }, - "trigger_type": { - "remote_awakened": "Ger\u00e4t aufgeweckt", - "remote_button_double_press": "\"{subtype}\" Taste doppelt angeklickt", - "remote_button_long_press": "\"{subtype}\" Taste kontinuierlich gedr\u00fcckt", - "remote_button_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen", - "remote_button_quadruple_press": "\"{subtype}\" Taste vierfach geklickt", - "remote_button_quintuple_press": "\"{subtype}\" Taste f\u00fcnffach geklickt", - "remote_button_rotated": "Button gedreht \"{subtype}\".", - "remote_button_rotation_stopped": "Die Tastendrehung \"{subtype}\" wurde gestoppt", - "remote_button_short_press": "\"{subtype}\" Taste gedr\u00fcckt", - "remote_button_short_release": "\"{subtype}\" Taste losgelassen", - "remote_button_triple_press": "\"{subtype}\" Taste dreimal geklickt", - "remote_double_tap": "Ger\u00e4t \"{subtype}\" doppelt getippt", - "remote_double_tap_any_side": "Ger\u00e4t auf beliebiger Seite doppelt angetippt", - "remote_falling": "Ger\u00e4t im freien Fall", - "remote_flip_180_degrees": "Ger\u00e4t um 180 Grad gekippt", - "remote_flip_90_degrees": "Ger\u00e4t um 90 Grad gekippt", - "remote_gyro_activated": "Ger\u00e4t ersch\u00fcttert", - "remote_moved": "Ger\u00e4t mit \"{subtype}\" nach oben bewegt", - "remote_moved_any_side": "Ger\u00e4t mit beliebiger Seite nach oben bewegt", - "remote_rotate_from_side_1": "Ger\u00e4t von \"Seite 1\" auf \"{subtype}\" gedreht", - "remote_rotate_from_side_2": "Ger\u00e4t von \"Seite 2\" auf \"{subtype}\" gedreht", - "remote_rotate_from_side_3": "Ger\u00e4t von \"Seite 3\" auf \"{subtype}\" gedreht", - "remote_rotate_from_side_4": "Ger\u00e4t von \"Seite 4\" auf \"{subtype}\" gedreht", - "remote_rotate_from_side_5": "Ger\u00e4t von \"Seite 5\" auf \"{subtype}\" gedreht", - "remote_rotate_from_side_6": "Ger\u00e4t von \"Seite 6\" auf \"{subtype}\" gedreht", - "remote_turned_clockwise": "Ger\u00e4t im Uhrzeigersinn gedreht", - "remote_turned_counter_clockwise": "Ger\u00e4t gegen den Uhrzeigersinn gedreht" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "deCONZ CLIP-Sensoren zulassen", - "allow_deconz_groups": "deCONZ-Lichtgruppen zulassen" - }, - "description": "Sichtbarkeit der deCONZ-Ger\u00e4tetypen konfigurieren", - "title": "deCONZ-Optionen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/en.json b/homeassistant/components/deconz/.translations/en.json deleted file mode 100644 index 2c9562359f5..00000000000 --- a/homeassistant/components/deconz/.translations/en.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge is already configured", - "already_in_progress": "Config flow for bridge is already in progress.", - "no_bridges": "No deCONZ bridges discovered", - "not_deconz_bridge": "Not a deCONZ bridge", - "one_instance_only": "Component only supports one deCONZ instance", - "updated_instance": "Updated deCONZ instance with new host address" - }, - "error": { - "no_key": "Couldn't get an API key" - }, - "flow_title": "deCONZ Zigbee gateway ({host})", - "step": { - "hassio_confirm": { - "description": "Do you want to configure Home Assistant to connect to the deCONZ gateway provided by the Hass.io add-on {addon}?", - "title": "deCONZ Zigbee gateway via Hass.io add-on" - }, - "init": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "Define deCONZ gateway" - }, - "link": { - "description": "Unlock your deCONZ gateway to register with Home Assistant.\n\n1. Go to deCONZ Settings -> Gateway -> Advanced\n2. Press \"Authenticate app\" button", - "title": "Link with deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Both buttons", - "button_1": "First button", - "button_2": "Second button", - "button_3": "Third button", - "button_4": "Fourth button", - "close": "Close", - "dim_down": "Dim down", - "dim_up": "Dim up", - "left": "Left", - "open": "Open", - "right": "Right", - "side_1": "Side 1", - "side_2": "Side 2", - "side_3": "Side 3", - "side_4": "Side 4", - "side_5": "Side 5", - "side_6": "Side 6", - "turn_off": "Turn off", - "turn_on": "Turn on" - }, - "trigger_type": { - "remote_awakened": "Device awakened", - "remote_button_double_press": "\"{subtype}\" button double clicked", - "remote_button_long_press": "\"{subtype}\" button continuously pressed", - "remote_button_long_release": "\"{subtype}\" button released after long press", - "remote_button_quadruple_press": "\"{subtype}\" button quadruple clicked", - "remote_button_quintuple_press": "\"{subtype}\" button quintuple clicked", - "remote_button_rotated": "Button rotated \"{subtype}\"", - "remote_button_rotation_stopped": "Button rotation \"{subtype}\" stopped", - "remote_button_short_press": "\"{subtype}\" button pressed", - "remote_button_short_release": "\"{subtype}\" button released", - "remote_button_triple_press": "\"{subtype}\" button triple clicked", - "remote_double_tap": "Device \"{subtype}\" double tapped", - "remote_double_tap_any_side": "Device double tapped on any side", - "remote_falling": "Device in free fall", - "remote_flip_180_degrees": "Device flipped 180 degrees", - "remote_flip_90_degrees": "Device flipped 90 degrees", - "remote_gyro_activated": "Device shaken", - "remote_moved": "Device moved with \"{subtype}\" up", - "remote_moved_any_side": "Device moved with any side up", - "remote_rotate_from_side_1": "Device rotated from \"side 1\" to \"{subtype}\"", - "remote_rotate_from_side_2": "Device rotated from \"side 2\" to \"{subtype}\"", - "remote_rotate_from_side_3": "Device rotated from \"side 3\" to \"{subtype}\"", - "remote_rotate_from_side_4": "Device rotated from \"side 4\" to \"{subtype}\"", - "remote_rotate_from_side_5": "Device rotated from \"side 5\" to \"{subtype}\"", - "remote_rotate_from_side_6": "Device rotated from \"side 6\" to \"{subtype}\"", - "remote_turned_clockwise": "Device turned clockwise", - "remote_turned_counter_clockwise": "Device turned counter clockwise" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Allow deCONZ CLIP sensors", - "allow_deconz_groups": "Allow deCONZ light groups" - }, - "description": "Configure visibility of deCONZ device types", - "title": "deCONZ options" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/es-419.json b/homeassistant/components/deconz/.translations/es-419.json deleted file mode 100644 index ea65ffbab33..00000000000 --- a/homeassistant/components/deconz/.translations/es-419.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El Bridge ya est\u00e1 configurado", - "already_in_progress": "El flujo de configuraci\u00f3n para el puente ya est\u00e1 en progreso.", - "no_bridges": "No se descubrieron puentes deCONZ", - "not_deconz_bridge": "No es un puente deCONZ", - "one_instance_only": "El componente solo admite una instancia deCONZ", - "updated_instance": "Instancia deCONZ actualizada con nueva direcci\u00f3n de host" - }, - "error": { - "no_key": "No se pudo obtener una clave de API" - }, - "step": { - "hassio_confirm": { - "description": "\u00bfDesea configurar Home Assistant para conectarse a la puerta de enlace deCONZ proporcionada por el complemento hass.io {addon}?", - "title": "deCONZ Zigbee gateway a trav\u00e9s del complemento Hass.io" - }, - "init": { - "data": { - "host": "Host", - "port": "Puerto" - }, - "title": "Definir el gateway deCONZ" - }, - "link": { - "description": "Desbloquee su puerta de enlace deCONZ para registrarse con Home Assistant. \n\n 1. Vaya a Configuraci\u00f3n deCONZ - > Gateway - > Avanzado \n 2. Presione el bot\u00f3n \"Autenticar aplicaci\u00f3n\"", - "title": "Enlazar con deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Ambos botones", - "button_1": "Primer bot\u00f3n", - "button_2": "Segundo bot\u00f3n", - "button_3": "Tercer bot\u00f3n", - "button_4": "Cuarto bot\u00f3n", - "close": "Cerrar", - "left": "Izquierda", - "open": "Abrir", - "right": "Derecha", - "turn_off": "Apagar", - "turn_on": "Encender" - }, - "trigger_type": { - "remote_button_rotated": "Bot\u00f3n girado \"{subtype}\"", - "remote_gyro_activated": "Dispositivo agitado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/es.json b/homeassistant/components/deconz/.translations/es.json deleted file mode 100644 index 517170fe225..00000000000 --- a/homeassistant/components/deconz/.translations/es.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El puente ya esta configurado", - "already_in_progress": "El flujo de configuraci\u00f3n para el puente ya est\u00e1 en curso.", - "no_bridges": "No se han descubierto puentes deCONZ", - "not_deconz_bridge": "No es un puente deCONZ", - "one_instance_only": "El componente solo admite una instancia de deCONZ", - "updated_instance": "Instancia deCONZ actualizada con nueva direcci\u00f3n de host" - }, - "error": { - "no_key": "No se pudo obtener una clave API" - }, - "flow_title": "pasarela deCONZ Zigbee ({host})", - "step": { - "hassio_confirm": { - "description": "\u00bfQuieres configurar Home Assistant para que se conecte al gateway de deCONZ proporcionado por el add-on {addon} de hass.io?", - "title": "Add-on deCONZ Zigbee v\u00eda Hass.io" - }, - "init": { - "data": { - "host": "Host", - "port": "Puerto" - }, - "title": "Definir pasarela deCONZ" - }, - "link": { - "description": "Desbloquea tu gateway de deCONZ para registrarte con Home Assistant.\n\n1. Dir\u00edgete a deCONZ Settings -> Gateway -> Advanced\n2. Pulsa el bot\u00f3n \"Authenticate app\"", - "title": "Enlazar con deCONZ" - } - }, - "title": "Pasarela Zigbee deCONZ" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Ambos botones", - "button_1": "Primer bot\u00f3n", - "button_2": "Segundo bot\u00f3n", - "button_3": "Tercer bot\u00f3n", - "button_4": "Cuarto bot\u00f3n", - "close": "Cerrar", - "dim_down": "Bajar la intensidad", - "dim_up": "Subir la intensidad", - "left": "Izquierda", - "open": "Abierto", - "right": "Derecha", - "side_1": "Lado 1", - "side_2": "Lado 2", - "side_3": "Lado 3", - "side_4": "Lado 4", - "side_5": "Lado 5", - "side_6": "Lado 6", - "turn_off": "Apagar", - "turn_on": "Encender" - }, - "trigger_type": { - "remote_awakened": "Dispositivo despertado", - "remote_button_double_press": "Bot\u00f3n \"{subtype}\" doble pulsaci\u00f3n", - "remote_button_long_press": "Bot\u00f3n \"{subtype}\" pulsado continuamente", - "remote_button_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga", - "remote_button_quadruple_press": "Bot\u00f3n \"{subtype}\" cu\u00e1druple pulsaci\u00f3n", - "remote_button_quintuple_press": "Bot\u00f3n \"{subtype}\" qu\u00edntuple pulsaci\u00f3n", - "remote_button_rotated": "Bot\u00f3n \"{subtype}\" girado", - "remote_button_rotation_stopped": "Bot\u00f3n rotativo \"{subtype}\" detenido", - "remote_button_short_press": "Bot\u00f3n \"{subtype}\" pulsado", - "remote_button_short_release": "Bot\u00f3n \"{subtype}\" soltado", - "remote_button_triple_press": "Bot\u00f3n \"{subtype}\" triple pulsaci\u00f3n", - "remote_double_tap": "Dispositivo \" {subtype} \" doble pulsaci\u00f3n", - "remote_double_tap_any_side": "Dispositivo con doble toque en cualquier lado", - "remote_falling": "Dispositivo en ca\u00edda libre", - "remote_flip_180_degrees": "Dispositivo volteado 180 grados", - "remote_flip_90_degrees": "Dispositivo volteado 90 grados", - "remote_gyro_activated": "Dispositivo sacudido", - "remote_moved": "Dispositivo movido con \"{subtipo}\" hacia arriba", - "remote_moved_any_side": "Dispositivo movido con cualquier lado hacia arriba", - "remote_rotate_from_side_1": "Dispositivo girado del \"lado 1\" al \" {subtype} \"", - "remote_rotate_from_side_2": "Dispositivo girado del \"lado 2\" al \" {subtype} \"", - "remote_rotate_from_side_3": "Dispositivo girado del \"lado 3\" al \" {subtype} \"", - "remote_rotate_from_side_4": "Dispositivo girado del \"lado 4\" al \" {subtype} \"", - "remote_rotate_from_side_5": "Dispositivo girado del \"lado 5\" al \" {subtype} \"", - "remote_rotate_from_side_6": "Dispositivo girado de \"lado 6\" a \" {subtype} \"", - "remote_turned_clockwise": "Dispositivo girado en el sentido de las agujas del reloj", - "remote_turned_counter_clockwise": "Dispositivo girado en sentido contrario a las agujas del reloj" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Permitir sensores deCONZ CLIP", - "allow_deconz_groups": "Permitir grupos de luz deCONZ" - }, - "description": "Configurar la visibilidad de los tipos de dispositivos deCONZ", - "title": "Opciones deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/et.json b/homeassistant/components/deconz/.translations/et.json deleted file mode 100644 index 93c54b3915c..00000000000 --- a/homeassistant/components/deconz/.translations/et.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "init": { - "data": { - "host": "", - "port": "" - } - } - }, - "title": "deCONZ Zigbee l\u00fc\u00fcs" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/fr.json b/homeassistant/components/deconz/.translations/fr.json deleted file mode 100644 index 0c2ecf9edb8..00000000000 --- a/homeassistant/components/deconz/.translations/fr.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce pont est d\u00e9j\u00e0 configur\u00e9", - "already_in_progress": "Le flux de configuration pour le pont est d\u00e9j\u00e0 en cours.", - "no_bridges": "Aucun pont deCONZ n'a \u00e9t\u00e9 d\u00e9couvert", - "not_deconz_bridge": "Pas un pont deCONZ", - "one_instance_only": "Le composant prend uniquement en charge une instance deCONZ", - "updated_instance": "Instance deCONZ mise \u00e0 jour avec la nouvelle adresse d'h\u00f4te" - }, - "error": { - "no_key": "Impossible d'obtenir une cl\u00e9 d'API" - }, - "flow_title": "Passerelle deCONZ Zigbee ({host})", - "step": { - "hassio_confirm": { - "description": "Voulez-vous configurer Home Assistant pour qu'il se connecte \u00e0 la passerelle deCONZ fournie par l'add-on hass.io {addon} ?", - "title": "Passerelle deCONZ Zigbee via l'add-on Hass.io" - }, - "init": { - "data": { - "host": "H\u00f4te", - "port": "Port" - }, - "title": "Initialiser la passerelle deCONZ" - }, - "link": { - "description": "D\u00e9verrouillez votre passerelle deCONZ pour vous enregistrer avec Home Assistant. \n\n 1. Acc\u00e9dez aux param\u00e8tres avanc\u00e9s du syst\u00e8me deCONZ \n 2. Cliquez sur \"D\u00e9verrouiller la passerelle\"", - "title": "Lien vers deCONZ" - } - }, - "title": "Passerelle deCONZ Zigbee" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Les deux boutons", - "button_1": "Premier bouton", - "button_2": "Deuxi\u00e8me bouton", - "button_3": "Troisi\u00e8me bouton", - "button_4": "Quatri\u00e8me bouton", - "close": "Ferm\u00e9", - "dim_down": "Assombrir", - "dim_up": "\u00c9claircir", - "left": "Gauche", - "open": "Ouvert", - "right": "Droite", - "side_1": "Face 1", - "side_2": "Face 2", - "side_3": "Face 3", - "side_4": "Face 4", - "side_5": "Face 5", - "side_6": "Face 6", - "turn_off": "\u00c9teint", - "turn_on": "Allumer" - }, - "trigger_type": { - "remote_awakened": "Appareil r\u00e9veill\u00e9", - "remote_button_double_press": "Double clic sur le bouton \" {subtype} \"", - "remote_button_long_press": "Appuyer en continu sur le bouton \" {subtype} \"", - "remote_button_long_release": "Bouton \"{subtype}\" rel\u00e2ch\u00e9 apr\u00e8s appui long", - "remote_button_quadruple_press": "Quadruple clic sur le bouton \" {subtype} \"", - "remote_button_quintuple_press": "Quintuple clic sur le bouton \" {subtype} \"", - "remote_button_rotated": "Bouton \"{subtype}\" tourn\u00e9", - "remote_button_rotation_stopped": "La rotation du bouton \" {subtype} \" s'est arr\u00eat\u00e9e", - "remote_button_short_press": "Bouton \"{subtype}\" appuy\u00e9", - "remote_button_short_release": "Bouton \"{subtype}\" rel\u00e2ch\u00e9", - "remote_button_triple_press": "Triple clic sur le bouton \" {subtype} \"", - "remote_double_tap": "Appareil \"{subtype}\" tapot\u00e9 deux fois", - "remote_double_tap_any_side": "Appareil double tap\u00e9 de n\u2019importe quel c\u00f4t\u00e9", - "remote_falling": "Appareil en chute libre", - "remote_flip_180_degrees": "Dispositif retourn\u00e9 \u00e0 180 degr\u00e9s", - "remote_flip_90_degrees": "Dispositif retourn\u00e9 \u00e0 90 degr\u00e9s", - "remote_gyro_activated": "Appareil secou\u00e9", - "remote_moved": "Appareil d\u00e9plac\u00e9 avec \"{subtype}\" vers le haut", - "remote_moved_any_side": "Dispositif d\u00e9plac\u00e9 avec un c\u00f4t\u00e9 quelconque vers le haut", - "remote_rotate_from_side_1": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 1\" \u00e0 \"{subtype}\"", - "remote_rotate_from_side_2": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 2\" \u00e0 \"{subtype}\"", - "remote_rotate_from_side_3": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 3\" \u00e0 \"{subtype}\"", - "remote_rotate_from_side_4": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 4\" \u00e0 \"{subtype}\"", - "remote_rotate_from_side_5": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 5\" \u00e0 \"{subtype}\"", - "remote_rotate_from_side_6": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 6\" \u00e0 \"{subtype}\"", - "remote_turned_clockwise": "Appareil tourn\u00e9 dans le sens horaire", - "remote_turned_counter_clockwise": "Appareil tourn\u00e9 dans le sens antihoraire" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Autoriser les capteurs deCONZ CLIP", - "allow_deconz_groups": "Autoriser les groupes de lumi\u00e8res deCONZ" - }, - "description": "Configurer la visibilit\u00e9 des appareils de type deCONZ", - "title": "Options deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/he.json b/homeassistant/components/deconz/.translations/he.json deleted file mode 100644 index da7878e94af..00000000000 --- a/homeassistant/components/deconz/.translations/he.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", - "no_bridges": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05d2\u05e9\u05e8\u05d9 deCONZ", - "one_instance_only": "\u05d4\u05e8\u05db\u05d9\u05d1 \u05ea\u05d5\u05de\u05da \u05e8\u05e7 \u05d0\u05d7\u05d3 deCONZ \u05dc\u05de\u05e9\u05dc" - }, - "error": { - "no_key": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05e7\u05d1\u05dc \u05de\u05e4\u05ea\u05d7 API" - }, - "step": { - "init": { - "data": { - "host": "\u05de\u05d0\u05e8\u05d7", - "port": "\u05e4\u05d5\u05e8\u05d8 (\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc: '80')" - }, - "title": "\u05d4\u05d2\u05d3\u05e8 \u05de\u05d2\u05e9\u05e8 deCONZ Zigbee" - }, - "link": { - "description": "\u05d1\u05d8\u05dc \u05d0\u05ea \u05e0\u05e2\u05d9\u05dc\u05ea \u05d4\u05de\u05e9\u05e8 deCONZ \u05e9\u05dc\u05da \u05db\u05d3\u05d9 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd Home Assistant.\n\n 1. \u05e2\u05d1\u05d5\u05e8 \u05d0\u05dc \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05de\u05e2\u05e8\u05db\u05ea deCONZ \n .2 \u05dc\u05d7\u05e5 \u05e2\u05dc \"Unlock Gateway\"", - "title": "\u05e7\u05e9\u05e8 \u05e2\u05dd deCONZ" - } - }, - "title": "\u05de\u05d2\u05e9\u05e8 deCONZ Zigbee" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/hr.json b/homeassistant/components/deconz/.translations/hr.json deleted file mode 100644 index 1700ec050bf..00000000000 --- a/homeassistant/components/deconz/.translations/hr.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "init": { - "data": { - "host": "Host", - "port": "Port" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/hu.json b/homeassistant/components/deconz/.translations/hu.json deleted file mode 100644 index 31148c80e30..00000000000 --- a/homeassistant/components/deconz/.translations/hu.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A bridge m\u00e1r konfigur\u00e1lva van", - "already_in_progress": "Az \u00e1tj\u00e1r\u00f3 konfigur\u00e1ci\u00f3s folyamata m\u00e1r folyamatban van.", - "no_bridges": "Nem tal\u00e1ltam deCONZ bridget", - "not_deconz_bridge": "Nem egy deCONZ \u00e1tj\u00e1r\u00f3", - "one_instance_only": "Ez a komponens csak egy deCONZ egys\u00e9get t\u00e1mogat", - "updated_instance": "A deCONZ-p\u00e9ld\u00e1ny \u00faj \u00e1llom\u00e1sc\u00edmmel friss\u00edtve" - }, - "error": { - "no_key": "API kulcs lek\u00e9r\u00e9se nem siker\u00fclt" - }, - "flow_title": "deCONZ Zigbee \u00e1tj\u00e1r\u00f3 ({host})", - "step": { - "hassio_confirm": { - "title": "deCONZ Zigbee \u00e1tj\u00e1r\u00f3 a Hass.io kieg\u00e9sz\u00edt\u0151 seg\u00edts\u00e9g\u00e9vel" - }, - "init": { - "data": { - "host": "Hoszt", - "port": "Port" - }, - "title": "deCONZ \u00e1tj\u00e1r\u00f3 megad\u00e1sa" - }, - "link": { - "description": "Oldja fel a deCONZ \u00e1tj\u00e1r\u00f3t a Home Assistant-ban val\u00f3 regisztr\u00e1l\u00e1shoz.\n\n1. Menjen a deCONZ rendszer be\u00e1ll\u00edt\u00e1sokhoz\n2. Nyomja meg az \"\u00c1tj\u00e1r\u00f3 felold\u00e1sa\" gombot", - "title": "Kapcsol\u00f3d\u00e1s a deCONZ-hoz" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Mindk\u00e9t gomb", - "button_1": "Els\u0151 gomb", - "button_2": "M\u00e1sodik gomb", - "button_3": "Harmadik gomb", - "button_4": "Negyedik gomb", - "close": "Bez\u00e1r\u00e1s", - "dim_down": "S\u00f6t\u00e9t\u00edt", - "dim_up": "Vil\u00e1gos\u00edt", - "left": "Balra", - "open": "Nyitva", - "right": "Jobbra", - "side_1": "1. oldal", - "side_2": "2. oldal", - "side_3": "3. oldal", - "side_4": "4. oldal", - "side_5": "5. oldal", - "side_6": "6. oldal", - "turn_off": "Kikapcsolva", - "turn_on": "Bekapcsolva" - }, - "trigger_type": { - "remote_awakened": "A k\u00e9sz\u00fcl\u00e9k fel\u00e9bredt", - "remote_button_double_press": "\" {subtype} \" gombra k\u00e9tszer kattintottak", - "remote_button_long_press": "A \" {subtype} \" gomb folyamatosan lenyomva", - "remote_button_long_release": "A \" {subtype} \" gomb hossz\u00fa megnyom\u00e1s ut\u00e1n elengedve", - "remote_button_quadruple_press": "\" {subtype} \" gombra n\u00e9gyszer kattintottak", - "remote_button_quintuple_press": "\" {subtype} \" gombra \u00f6tsz\u00f6r kattintottak", - "remote_button_rotated": "A gomb elforgatva: \" {subtype} \"", - "remote_button_rotation_stopped": "A (z) \" {subtype} \" gomb forg\u00e1sa le\u00e1llt", - "remote_button_short_press": "\" {subtype} \" gomb lenyomva", - "remote_button_short_release": "\"{alt\u00edpus}\" gomb elengedve", - "remote_button_triple_press": "\" {subtype} \" gombra h\u00e1romszor kattintottak", - "remote_double_tap": "Az \" {subtype} \" eszk\u00f6z dupla kattint\u00e1sa", - "remote_double_tap_any_side": "A k\u00e9sz\u00fcl\u00e9k b\u00e1rmelyik oldal\u00e1n dupl\u00e1n koppint.", - "remote_falling": "K\u00e9sz\u00fcl\u00e9k szabades\u00e9sben", - "remote_flip_180_degrees": "180 fokkal megd\u00f6nt\u00f6tt eszk\u00f6z", - "remote_flip_90_degrees": "90 fokkal megd\u00f6nt\u00f6tt eszk\u00f6z", - "remote_gyro_activated": "A k\u00e9sz\u00fcl\u00e9k meg lett r\u00e1zva", - "remote_moved": "Az eszk\u00f6z a \" {subtype} \"-lal felfel\u00e9 mozgatva", - "remote_moved_any_side": "A k\u00e9sz\u00fcl\u00e9k valamelyik oldal\u00e1val felfel\u00e9 mozogott", - "remote_rotate_from_side_1": "Az eszk\u00f6z a \"1. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", - "remote_rotate_from_side_2": "Az eszk\u00f6z a \"2. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", - "remote_rotate_from_side_3": "Az eszk\u00f6z a \"3. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", - "remote_rotate_from_side_4": "Az eszk\u00f6z a \"4. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", - "remote_rotate_from_side_5": "Az eszk\u00f6z a \"5. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", - "remote_rotate_from_side_6": "Az eszk\u00f6z a \"6. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", - "remote_turned_clockwise": "A k\u00e9sz\u00fcl\u00e9k az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val megegyez\u0151en fordult", - "remote_turned_counter_clockwise": "A k\u00e9sz\u00fcl\u00e9k az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val ellent\u00e9tes ir\u00e1nyban fordult" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Enged\u00e9lyezze a deCONZ CLIP \u00e9rz\u00e9kel\u0151ket", - "allow_deconz_groups": "DeCONZ f\u00e9nycsoportok enged\u00e9lyez\u00e9se" - }, - "description": "A deCONZ eszk\u00f6zt\u00edpusok l\u00e1that\u00f3s\u00e1g\u00e1nak konfigur\u00e1l\u00e1sa" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/id.json b/homeassistant/components/deconz/.translations/id.json deleted file mode 100644 index 72aaa84e70d..00000000000 --- a/homeassistant/components/deconz/.translations/id.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge sudah dikonfigurasi", - "no_bridges": "deCONZ bridges tidak ditemukan", - "one_instance_only": "Komponen hanya mendukung satu instance deCONZ" - }, - "error": { - "no_key": "Tidak bisa mendapatkan kunci API" - }, - "step": { - "init": { - "data": { - "host": "Host", - "port": "Port (nilai default: '80')" - }, - "title": "Tentukan deCONZ gateway" - }, - "link": { - "description": "Buka gerbang deCONZ Anda untuk mendaftar dengan Home Assistant. \n\n 1. Pergi ke pengaturan sistem deCONZ \n 2. Tekan tombol \"Buka Kunci Gateway\"", - "title": "Tautan dengan deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/it.json b/homeassistant/components/deconz/.translations/it.json deleted file mode 100644 index e12668f082c..00000000000 --- a/homeassistant/components/deconz/.translations/it.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il Bridge \u00e8 gi\u00e0 configurato", - "already_in_progress": "Il flusso di configurazione per bridge \u00e8 gi\u00e0 in corso.", - "no_bridges": "Nessun bridge deCONZ rilevato", - "not_deconz_bridge": "Non \u00e8 un bridge deCONZ", - "one_instance_only": "Il componente supporto solo un'istanza di deCONZ", - "updated_instance": "Istanza deCONZ aggiornata con nuovo indirizzo host" - }, - "error": { - "no_key": "Impossibile ottenere una API key" - }, - "flow_title": "Gateway Zigbee deCONZ ({host})", - "step": { - "hassio_confirm": { - "description": "Vuoi configurare Home Assistant per connettersi al gateway deCONZ fornito dal componente aggiuntivo di Hass.io: {addon}?", - "title": "Gateway Pigmee deCONZ tramite il componente aggiuntivo di Hass.io" - }, - "init": { - "data": { - "host": "Host", - "port": "Porta" - }, - "title": "Definisci il gateway deCONZ" - }, - "link": { - "description": "Sblocca il tuo gateway deCONZ per registrarti con Home Assistant.\n\n1. Vai a Impostazioni deCONZ -> Gateway -> Avanzate\n2. Premere il pulsante \"Autentica app\"", - "title": "Collega con deCONZ" - } - }, - "title": "Gateway Zigbee deCONZ" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Entrambi", - "button_1": "Primo", - "button_2": "Secondo pulsante", - "button_3": "Terzo pulsante", - "button_4": "Quarto pulsante", - "close": "Chiudere", - "dim_down": "Diminuire luminosit\u00e0", - "dim_up": "Aumentare luminosit\u00e0", - "left": "Sinistra", - "open": "Aperto", - "right": "Destra", - "side_1": "Lato 1", - "side_2": "Lato 2", - "side_3": "Lato 3", - "side_4": "Lato 4", - "side_5": "Lato 5", - "side_6": "Lato 6", - "turn_off": "Spegnere", - "turn_on": "Accendere" - }, - "trigger_type": { - "remote_awakened": "Dispositivo risvegliato", - "remote_button_double_press": "Pulsante \"{subtype}\" cliccato due volte", - "remote_button_long_press": "Pulsante \"{subtype}\" premuto continuamente", - "remote_button_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione", - "remote_button_quadruple_press": "Pulsante \"{subtype}\" cliccato quattro volte", - "remote_button_quintuple_press": "Pulsante \"{subtype}\" cliccato cinque volte", - "remote_button_rotated": "Pulsante ruotato \"{subtype}\"", - "remote_button_rotation_stopped": "La rotazione dei pulsanti \"{subtype}\" si \u00e8 arrestata", - "remote_button_short_press": "Pulsante \"{subtype}\" premuto", - "remote_button_short_release": "Pulsante \"{subtype}\" rilasciato", - "remote_button_triple_press": "Pulsante \"{subtype}\" cliccato tre volte", - "remote_double_tap": "Dispositivo \"{subtype}\" toccato due volte", - "remote_double_tap_any_side": "Dispositivo toccato due volte su qualsiasi lato", - "remote_falling": "Dispositivo in caduta libera", - "remote_flip_180_degrees": "Dispositivo capovolto di 180 gradi", - "remote_flip_90_degrees": "Dispositivo capovolto di 90 gradi", - "remote_gyro_activated": "Dispositivo in vibrazione", - "remote_moved": "Dispositivo spostato con \"{subtype}\" verso l'alto", - "remote_moved_any_side": "Dispositivo spostato con qualsiasi lato verso l'alto", - "remote_rotate_from_side_1": "Dispositivo ruotato da \"lato 1\" a \"{subtype}\"", - "remote_rotate_from_side_2": "Dispositivo ruotato da \"lato 2\" a \"{subtype}\"", - "remote_rotate_from_side_3": "Dispositivo ruotato da \"lato 3\" a \"{subtype}\"", - "remote_rotate_from_side_4": "Dispositivo ruotato da \"lato 4\" a \"{subtype}\"", - "remote_rotate_from_side_5": "Dispositivo ruotato da \"lato 5\" a \"{subtype}\"", - "remote_rotate_from_side_6": "Dispositivo ruotato da \"lato 6\" a \"{subtype}\"", - "remote_turned_clockwise": "Dispositivo ruotato in senso orario", - "remote_turned_counter_clockwise": "Dispositivo ruotato in senso antiorario" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Consentire sensori CLIP deCONZ", - "allow_deconz_groups": "Consentire gruppi luce deCONZ" - }, - "description": "Configurare la visibilit\u00e0 dei tipi di dispositivi deCONZ", - "title": "Opzioni deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/ja.json b/homeassistant/components/deconz/.translations/ja.json deleted file mode 100644 index 5148ebeaa86..00000000000 --- a/homeassistant/components/deconz/.translations/ja.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "error": { - "no_key": "API\u30ad\u30fc\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f" - }, - "step": { - "init": { - "data": { - "host": "\u30db\u30b9\u30c8", - "port": "\u30dd\u30fc\u30c8\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\uff1a'80'\uff09" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/ko.json b/homeassistant/components/deconz/.translations/ko.json deleted file mode 100644 index 00b9c1f437a..00000000000 --- a/homeassistant/components/deconz/.translations/ko.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "\ube0c\ub9bf\uc9c0 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", - "no_bridges": "\ubc1c\uacac\ub41c deCONZ \ube0c\ub9bf\uc9c0\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", - "not_deconz_bridge": "deCONZ \ube0c\ub9bf\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4", - "one_instance_only": "\uad6c\uc131\uc694\uc18c\ub294 \ud558\ub098\uc758 deCONZ \uc778\uc2a4\ud134\uc2a4\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4", - "updated_instance": "deCONZ \uc778\uc2a4\ud134\uc2a4\ub97c \uc0c8\ub85c\uc6b4 \ud638\uc2a4\ud2b8 \uc8fc\uc18c\ub85c \uc5c5\ub370\uc774\ud2b8\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "no_key": "API \ud0a4\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" - }, - "flow_title": "deCONZ Zigbee \uac8c\uc774\ud2b8\uc6e8\uc774 ({host})", - "step": { - "hassio_confirm": { - "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc5d0\uc11c \uc81c\uacf5\ub41c deCONZ \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Hass.io \uc560\ub4dc\uc628\uc758 deCONZ Zigbee \uac8c\uc774\ud2b8\uc6e8\uc774" - }, - "init": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "port": "\ud3ec\ud2b8" - }, - "title": "deCONZ \uac8c\uc774\ud2b8\uc6e8\uc774 \uc815\uc758" - }, - "link": { - "description": "deCONZ \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc5b8\ub77d\ud558\uc5ec Home Assistant \uc5d0 \uc5f0\uacb0\ud558\uae30.\n\n1. deCONZ \uc2dc\uc2a4\ud15c \uc124\uc815\uc73c\ub85c \uc774\ub3d9\ud558\uc138\uc694\n2. \"Authenticate app\" \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694", - "title": "deCONZ\uc640 \uc5f0\uacb0" - } - }, - "title": "deCONZ Zigbee \uac8c\uc774\ud2b8\uc6e8\uc774" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "\ub450 \uac1c", - "button_1": "\uccab \ubc88\uc9f8", - "button_2": "\ub450 \ubc88\uc9f8", - "button_3": "\uc138 \ubc88\uc9f8", - "button_4": "\ub124 \ubc88\uc9f8", - "close": "\ub2eb\uae30", - "dim_down": "\uc5b4\ub461\uac8c \ud558\uae30", - "dim_up": "\ubc1d\uac8c \ud558\uae30", - "left": "\uc67c\ucabd", - "open": "\uc5f4\uae30", - "right": "\uc624\ub978\ucabd", - "side_1": "\uba74 1", - "side_2": "\uba74 2", - "side_3": "\uba74 3", - "side_4": "\uba74 4", - "side_5": "\uba74 5", - "side_6": "\uba74 6", - "turn_off": "\ub044\uae30", - "turn_on": "\ucf1c\uae30" - }, - "trigger_type": { - "remote_awakened": "\uae30\uae30 \uc808\uc804 \ubaa8\ub4dc \ud574\uc81c\ub420 \ub54c", - "remote_button_double_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c", - "remote_button_long_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c", - "remote_button_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", - "remote_button_quadruple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c", - "remote_button_quintuple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \ub54c", - "remote_button_rotated": "\"{subtype}\" \ub85c \ubc84\ud2bc\uc774 \ud68c\uc804\ub420 \ub54c", - "remote_button_rotation_stopped": "\"{subtype}\" \ub85c \ubc84\ud2bc\uc774 \ud68c\uc804\uc744 \uba48\ucd9c \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_triple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c", - "remote_double_tap": "\uae30\uae30\uc758 \"{subtype}\" \uac00 \ub354\ube14 \ud0ed \ub420 \ub54c", - "remote_double_tap_any_side": "\uae30\uae30\uc758 \uc544\ubb34 \uba74\uc774 \ub354\ube14 \ud0ed \ub420 \ub54c", - "remote_falling": "\uae30\uae30\uac00 \ub5a8\uc5b4\uc9c8 \ub54c", - "remote_flip_180_degrees": "\uae30\uae30\uac00 180\ub3c4\ub85c \ub4a4\uc9d1\uc5b4\uc9c8 \ub54c", - "remote_flip_90_degrees": "\uae30\uae30\uac00 90\ub3c4\ub85c \ub4a4\uc9d1\uc5b4\uc9c8 \ub54c", - "remote_gyro_activated": "\uae30\uae30\uac00 \ud754\ub4e4\ub9b4 \ub54c", - "remote_moved": "\uae30\uae30\uc758 \"{subtype}\" \uac00 \uc704\ub85c \ud5a5\ud55c\ucc44\ub85c \uc6c0\uc9c1\uc77c \ub54c", - "remote_moved_any_side": "\uae30\uae30\uc758 \uc544\ubb34 \uba74\uc774\ub098 \uc704\ub85c \ud5a5\ud55c\ucc44\ub85c \uc6c0\uc9c1\uc77c \ub54c", - "remote_rotate_from_side_1": "\"\uba74 1\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_rotate_from_side_2": "\"\uba74 2\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_rotate_from_side_3": "\"\uba74 3\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_rotate_from_side_4": "\"\uba74 4\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_rotate_from_side_5": "\"\uba74 5\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_rotate_from_side_6": "\"\uba74 6\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_turned_clockwise": "\uc2dc\uacc4 \ubc29\ud5a5\uc73c\ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "remote_turned_counter_clockwise": "\ubc18\uc2dc\uacc4 \ubc29\ud5a5\uc73c\ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "deCONZ CLIP \uc13c\uc11c \ud5c8\uc6a9", - "allow_deconz_groups": "deCONZ \ub77c\uc774\ud2b8 \uadf8\ub8f9 \ud5c8\uc6a9" - }, - "description": "deCONZ \uae30\uae30 \uc720\ud615\uc758 \ud45c\uc2dc \uc5ec\ubd80 \uad6c\uc131", - "title": "deCONZ \uc635\uc158" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/lb.json b/homeassistant/components/deconz/.translations/lb.json deleted file mode 100644 index 61479cb78e2..00000000000 --- a/homeassistant/components/deconz/.translations/lb.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge ass schon konfigur\u00e9iert", - "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", - "no_bridges": "Keng dECONZ bridges fonnt", - "not_deconz_bridge": "Keng deCONZ Bridge", - "one_instance_only": "Komponent \u00ebnnerst\u00ebtzt n\u00ebmmen eng deCONZ Instanz", - "updated_instance": "deCONZ Instanz gouf mat der neier Adress vum Apparat ge\u00e4nnert" - }, - "error": { - "no_key": "Konnt keen API Schl\u00ebssel kr\u00e9ien" - }, - "flow_title": "deCONZ Zigbee gateway ({host})", - "step": { - "hassio_confirm": { - "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mat der deCONZ gateway ze verbannen d\u00e9i vum hass.io add-on {addon} bereet gestallt g\u00ebtt?", - "title": "deCONZ Zigbee gateway via Hass.io add-on" - }, - "init": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "deCONZ gateway d\u00e9fin\u00e9ieren" - }, - "link": { - "description": "Entsperrt \u00e4r deCONZ gateway fir se mat Home Assistant ze registr\u00e9ieren.\n\n1. Gidd op deCONZ System Astellungen\n2. Dr\u00e9ckt \"Unlock\" Gateway Kn\u00e4ppchen", - "title": "Link mat deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "B\u00e9id Kn\u00e4ppchen", - "button_1": "\u00c9ischte Kn\u00e4ppchen", - "button_2": "Zweete Kn\u00e4ppchen", - "button_3": "Dr\u00ebtte Kn\u00e4ppchen", - "button_4": "V\u00e9ierte Kn\u00e4ppchen", - "close": "Zoumaachen", - "dim_down": "Verd\u00e4ischteren", - "dim_up": "Erhellen", - "left": "L\u00e9nks", - "open": "Op", - "right": "Riets", - "side_1": "S\u00e4it 1", - "side_2": "S\u00e4it 2", - "side_3": "S\u00e4it 3", - "side_4": "S\u00e4it 4", - "side_5": "S\u00e4it 5", - "side_6": "S\u00e4it 6", - "turn_off": "Ausschalten", - "turn_on": "Uschalten" - }, - "trigger_type": { - "remote_awakened": "Apparat erw\u00e4cht", - "remote_button_double_press": "\"{subtype}\" Kn\u00e4ppche zwee mol gedr\u00e9ckt", - "remote_button_long_press": "\"{subtype}\" Kn\u00e4ppche permanent gedr\u00e9ckt", - "remote_button_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss", - "remote_button_quadruple_press": "\"{subtype}\" Kn\u00e4ppche v\u00e9ier mol gedr\u00e9ckt", - "remote_button_quintuple_press": "\"{subtype}\" Kn\u00e4ppche f\u00ebnnef mol gedr\u00e9ckt", - "remote_button_rotated": "Kn\u00e4ppche gedr\u00e9int \"{subtype}\"", - "remote_button_rotation_stopped": "Kn\u00e4ppchen Rotatioun \"{subtype}\" gestoppt", - "remote_button_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt", - "remote_button_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss", - "remote_button_triple_press": "\"{subtype}\" Kn\u00e4ppche dr\u00e4imol gedr\u00e9ckt", - "remote_double_tap": "Apparat \"{subtype}\" zwee mol gedr\u00e9ckt", - "remote_double_tap_any_side": "Apparat gouf 2 mol ugetippt op enger S\u00e4it", - "remote_falling": "Apparat am fr\u00e4ie Fall", - "remote_flip_180_degrees": "Apparat \u00ebm 180 Grad gedr\u00e9int", - "remote_flip_90_degrees": "Apparat \u00ebm 90 Grad gedr\u00e9int", - "remote_gyro_activated": "Apparat ger\u00ebselt", - "remote_moved": "Apparat beweegt mat \"{subtype}\" erop", - "remote_moved_any_side": "Apparat gouf mat enger S\u00e4it bewegt", - "remote_rotate_from_side_1": "Apparat rot\u00e9iert vun der \"S\u00e4it 1\" op \"{subtype}\"", - "remote_rotate_from_side_2": "Apparat rot\u00e9iert vun der \"S\u00e4it 2\" op \"{subtype}\"", - "remote_rotate_from_side_3": "Apparat rot\u00e9iert vun der \"S\u00e4it 3\" op \"{subtype}\"", - "remote_rotate_from_side_4": "Apparat rot\u00e9iert vun der \"S\u00e4it 4\" op \"{subtype}\"", - "remote_rotate_from_side_5": "Apparat rot\u00e9iert vun der \"S\u00e4it 5\" op \"{subtype}\"", - "remote_rotate_from_side_6": "Apparat rot\u00e9iert vun der \"S\u00e4it\" 6 op \"{subtype}\"", - "remote_turned_clockwise": "Apparat mam Auere Wee gedr\u00e9int", - "remote_turned_counter_clockwise": "Apparat g\u00e9int den Auere Wee gedr\u00e9int" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "deCONZ Clip Sensoren erlaben", - "allow_deconz_groups": "deCONZ Luucht Gruppen erlaben" - }, - "description": "Visibilit\u00e9it vun deCONZ Apparater konfigur\u00e9ieren", - "title": "deCONZ Optiounen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/nl.json b/homeassistant/components/deconz/.translations/nl.json deleted file mode 100644 index 611d38ba950..00000000000 --- a/homeassistant/components/deconz/.translations/nl.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge is al geconfigureerd", - "already_in_progress": "Configuratiestroom voor bridge wordt al ingesteld.", - "no_bridges": "Geen deCONZ bruggen ontdekt", - "not_deconz_bridge": "Dit is geen deCONZ bridge", - "one_instance_only": "Component ondersteunt slechts \u00e9\u00e9n deCONZ instance", - "updated_instance": "DeCONZ-instantie bijgewerkt met nieuw host-adres" - }, - "error": { - "no_key": "Kon geen API-sleutel ophalen" - }, - "flow_title": "deCONZ Zigbee gateway ( {host} )", - "step": { - "hassio_confirm": { - "description": "Wilt u de Home Assistant configureren om verbinding te maken met de deCONZ gateway van de hass.io add-on {addon}?", - "title": "deCONZ Zigbee Gateway via Hass.io add-on" - }, - "init": { - "data": { - "host": "Host", - "port": "Poort" - }, - "title": "Definieer deCONZ gateway" - }, - "link": { - "description": "Ontgrendel je deCONZ gateway om te registreren met Home Assistant.\n\n1. Ga naar deCONZ systeeminstellingen (Instellingen -> Gateway -> Geavanceerd)\n2. Druk op de knop \"Gateway ontgrendelen\"", - "title": "Koppel met deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Beide knoppen", - "button_1": "Eerste knop", - "button_2": "Tweede knop", - "button_3": "Derde knop", - "button_4": "Vierde knop", - "close": "Sluiten", - "dim_down": "Dim omlaag", - "dim_up": "Dim omhoog", - "left": "Links", - "open": "Open", - "right": "Rechts", - "side_1": "Zijde 1", - "side_2": "Zijde 2", - "side_3": "Zijde 3", - "side_4": "Zijde 4", - "side_5": "Zijde 5", - "side_6": "Zijde 6", - "turn_off": "Uitschakelen", - "turn_on": "Inschakelen" - }, - "trigger_type": { - "remote_awakened": "Apparaat is gewekt", - "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", - "remote_button_quadruple_press": "\" {subtype} \" knop viervoudig aangeklikt", - "remote_button_quintuple_press": "\" {subtype} \" knop vijf keer aangeklikt", - "remote_button_rotated": "Knop gedraaid \" {subtype} \"", - "remote_button_rotation_stopped": "Knoprotatie \" {subtype} \" gestopt", - "remote_button_short_press": "\" {subtype} \" knop ingedrukt", - "remote_button_short_release": "\"{subtype}\" knop losgelaten", - "remote_button_triple_press": "\" {subtype} \" knop driemaal geklikt", - "remote_double_tap": "Apparaat \"{subtype}\" dubbel getikt", - "remote_double_tap_any_side": "Apparaat dubbel getikt aan elke kant", - "remote_falling": "Apparaat in vrije val", - "remote_flip_180_degrees": "Apparaat 180 graden omgedraaid", - "remote_flip_90_degrees": "Apparaat 90 graden omgedraaid", - "remote_gyro_activated": "Apparaat geschud", - "remote_moved": "Apparaat verplaatst met \"{subtype}\" omhoog", - "remote_moved_any_side": "Apparaat gedraaid met elke kant naar boven", - "remote_rotate_from_side_1": "Apparaat gedraaid van \"zijde 1\" naar \"{subtype}\"\".", - "remote_rotate_from_side_2": "Apparaat gedraaid van \"zijde 2\" naar \"{subtype}\"\".", - "remote_rotate_from_side_3": "Apparaat gedraaid van \"zijde 3\" naar \" {subtype} \"", - "remote_rotate_from_side_4": "Apparaat gedraaid van \"zijde 4\" naar \" {subtype} \"", - "remote_rotate_from_side_5": "Apparaat gedraaid van \"zijde 5\" naar \" {subtype} \"", - "remote_rotate_from_side_6": "Apparaat gedraaid van \"zijde 6\" naar \" {subtype} \"", - "remote_turned_clockwise": "Apparaat met de klok mee gedraaid", - "remote_turned_counter_clockwise": "Apparaat tegen de klok in gedraaid" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "DeCONZ CLIP sensoren toestaan", - "allow_deconz_groups": "Sta deCONZ-lichtgroepen toe" - }, - "description": "Configureer de zichtbaarheid van deCONZ-apparaattypen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/nn.json b/homeassistant/components/deconz/.translations/nn.json deleted file mode 100644 index 986795e11c9..00000000000 --- a/homeassistant/components/deconz/.translations/nn.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Brua er allereie konfigurert", - "no_bridges": "Oppdaga ingen deCONZ-bruer", - "one_instance_only": "Komponenten st\u00f8ttar berre \u00e9in deCONZ-instans" - }, - "error": { - "no_key": "Kunne ikkje f\u00e5 ein API-n\u00f8kkel" - }, - "step": { - "init": { - "data": { - "host": "Vert", - "port": "Port (standardverdi: '80')" - }, - "title": "Definer deCONZ-gateway" - }, - "link": { - "description": "L\u00e5s opp deCONZ-gatewayen din for \u00e5 registrere den med Home Assistant.\n\n1. G\u00e5 til systeminnstillingane til deCONZ\n2. Trykk p\u00e5 \"L\u00e5s opp gateway\"-knappen", - "title": "Link med deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/no.json b/homeassistant/components/deconz/.translations/no.json deleted file mode 100644 index a10ae01e25f..00000000000 --- a/homeassistant/components/deconz/.translations/no.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Broen er allerede konfigurert", - "already_in_progress": "Konfigurasjonsflyt for bro p\u00e5g\u00e5r allerede.", - "no_bridges": "Ingen deCONZ broer oppdaget", - "not_deconz_bridge": "Ikke en deCONZ bro", - "one_instance_only": "Komponenten st\u00f8tter bare \u00e9n deCONZ forekomst", - "updated_instance": "Oppdatert deCONZ forekomst med ny vertsadresse" - }, - "error": { - "no_key": "Kunne ikke f\u00e5 en API-n\u00f8kkel" - }, - "flow_title": "deCONZ Zigbee gateway ({host})", - "step": { - "hassio_confirm": { - "description": "Vil du konfigurere Home Assistant til \u00e5 koble seg til deCONZ-gateway levert av Hass.io-tillegget {addon} ?", - "title": "deCONZ Zigbee gateway via Hass.io tillegg" - }, - "init": { - "data": { - "host": "Vert", - "port": "" - }, - "title": "Definer deCONZ-gatewayen" - }, - "link": { - "description": "L\u00e5s opp deCONZ-gatewayen din for \u00e5 registrere deg med Home Assistant. \n\n 1. G\u00e5 til deCONZ-systeminnstillinger -> Gateway -> Avansert \n 2. Trykk p\u00e5 \"L\u00e5s opp gateway\" knappen", - "title": "Koble til deCONZ" - } - }, - "title": "deCONZ Zigbee gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Begge knappene", - "button_1": "F\u00f8rste knapp", - "button_2": "Andre knapp", - "button_3": "Tredje knapp", - "button_4": "Fjerde knapp", - "close": "Lukk", - "dim_down": "Dimm ned", - "dim_up": "Dimm opp", - "left": "Venstre", - "open": "\u00c5pen", - "right": "H\u00f8yre", - "side_1": "Side 1", - "side_2": "Side 2", - "side_3": "Side 3", - "side_4": "Side 4", - "side_5": "Side 5", - "side_6": "Side 6", - "turn_off": "Skru av", - "turn_on": "Sl\u00e5 p\u00e5" - }, - "trigger_type": { - "remote_awakened": "Enheten ble vekket", - "remote_button_double_press": "\"{subtype}\"-knappen ble dobbeltklikket", - "remote_button_long_press": "\"{subtype}\"-knappen ble kontinuerlig trykket", - "remote_button_long_release": "\"{subtype}\"-knappen sluppet etter langt trykk", - "remote_button_quadruple_press": "\"{subtype}\"-knappen ble firedoblet klikket", - "remote_button_quintuple_press": "\"{subtype}\"-knappen femdobbelt klikket", - "remote_button_rotated": "Knappen roterte \"{subtype}\"", - "remote_button_rotation_stopped": "Knapperotasjon \"{subtype}\" stoppet", - "remote_button_short_press": "\"{subtype}\" -knappen ble trykket", - "remote_button_short_release": "\"{subtype}\"-knappen sluppet", - "remote_button_triple_press": "\"{subtype}\"-knappen trippel klikket", - "remote_double_tap": "Enheten \" {subtype} \" dobbeltklikket", - "remote_double_tap_any_side": "Enheten dobbeltklikket p\u00e5 alle sider", - "remote_falling": "Enheten er i fritt fall", - "remote_flip_180_degrees": "Enheten er snudd 180 grader", - "remote_flip_90_degrees": "Enheten er snudd 90 grader", - "remote_gyro_activated": "Enhet er ristet", - "remote_moved": "Enheten ble flyttet med \"{under type}\" opp", - "remote_moved_any_side": "Enheten flyttet med alle sider opp", - "remote_rotate_from_side_1": "Enheten rotert fra \"side 1\" til \" {subtype} \"", - "remote_rotate_from_side_2": "Enheten rotert fra \"side 2\" til \" {subtype} \"", - "remote_rotate_from_side_3": "Enheten rotert fra \"side 3\" til \" {subtype} \"", - "remote_rotate_from_side_4": "Enheten rotert fra \"side 4\" til \" {subtype} \"", - "remote_rotate_from_side_5": "Enheten rotert fra \"side 5\" til \" {subtype} \"", - "remote_rotate_from_side_6": "Enheten rotert fra \"side 6\" til \" {subtype} \"", - "remote_turned_clockwise": "Enheten dreide med klokken", - "remote_turned_counter_clockwise": "Enheten dreide mot klokken" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Tillat deCONZ CLIP-sensorer", - "allow_deconz_groups": "Tillat deCONZ lys grupper" - }, - "description": "Konfigurere synlighet av deCONZ enhetstyper", - "title": "deCONZ alternativer" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/pl.json b/homeassistant/components/deconz/.translations/pl.json deleted file mode 100644 index ace1f4182a4..00000000000 --- a/homeassistant/components/deconz/.translations/pl.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mostek jest ju\u017c skonfigurowany.", - "already_in_progress": "Konfiguracja mostka jest ju\u017c w toku.", - "no_bridges": "Nie odkryto mostk\u00f3w deCONZ", - "not_deconz_bridge": "To nie jest mostek deCONZ", - "one_instance_only": "Komponent obs\u0142uguje tylko jedn\u0105 instancj\u0119 deCONZ", - "updated_instance": "Zaktualizowano instancj\u0119 deCONZ o nowy adres hosta" - }, - "error": { - "no_key": "Nie mo\u017cna uzyska\u0107 klucza API" - }, - "flow_title": "Bramka deCONZ Zigbee ({host})", - "step": { - "hassio_confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Home Assistant, aby po\u0142\u0105czy\u0142 si\u0119 z bramk\u0105 deCONZ dostarczon\u0105 przez dodatek Hass.io {addon}?", - "title": "Bramka deCONZ Zigbee przez dodatek Hass.io" - }, - "init": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "Zdefiniuj bramk\u0119 deCONZ" - }, - "link": { - "description": "Odblokuj bramk\u0119 deCONZ, aby zarejestrowa\u0107 j\u0105 w Home Assistant. \n\n 1. Przejd\u017a do ustawienia deCONZ > bramka > Zaawansowane\n 2. Naci\u015bnij przycisk \"Uwierzytelnij aplikacj\u0119\"", - "title": "Po\u0142\u0105cz z deCONZ" - } - }, - "title": "Brama deCONZ Zigbee" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "oba przyciski", - "button_1": "pierwszy przycisk", - "button_2": "drugi przycisk", - "button_3": "trzeci przycisk", - "button_4": "czwarty przycisk", - "close": "nast\u0105pi zamkni\u0119cie", - "dim_down": "nast\u0105pi zmniejszenie jasno\u015bci", - "dim_up": "nast\u0105pi zwi\u0119kszenie jasno\u015bci", - "left": "w lewo", - "open": "otwarcie", - "right": "w prawo", - "side_1": "strona 1", - "side_2": "strona 2", - "side_3": "strona 3", - "side_4": "strona 4", - "side_5": "strona 5", - "side_6": "strona 6", - "turn_off": "nast\u0105pi wy\u0142\u0105czenie", - "turn_on": "nast\u0105pi w\u0142\u0105czenie" - }, - "trigger_type": { - "remote_awakened": "urz\u0105dzenie si\u0119 obudzi", - "remote_button_double_press": "przycisk \"{subtype}\" zostanie podw\u00f3jnie naci\u015bni\u0119ty", - "remote_button_long_press": "przycisk \"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y", - "remote_button_long_release": "przycisk \"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", - "remote_button_quadruple_press": "przycisk \"{subtype}\" zostanie czterokrotnie naci\u015bni\u0119ty", - "remote_button_quintuple_press": "przycisk \"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty", - "remote_button_rotated": "przycisk zostanie obr\u00f3cony \"{subtype}\"", - "remote_button_rotation_stopped": "nast\u0105pi zatrzymanie obrotu przycisku \"{subtype}\"", - "remote_button_short_press": "przycisk \"{subtype}\" zostanie naci\u015bni\u0119ty", - "remote_button_short_release": "przycisk \"{subtype}\" zostanie zwolniony", - "remote_button_triple_press": "przycisk \"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty", - "remote_double_tap": "urz\u0105dzenie \"{subtype}\" zostanie dwukrotnie pukni\u0119te", - "remote_double_tap_any_side": "urz\u0105dzenie dwukrotnie pukni\u0119te z dowolnej strony", - "remote_falling": "urz\u0105dzenie zarejestruje swobodny spadek", - "remote_flip_180_degrees": "urz\u0105dzenie odwr\u00f3cone o 180 stopni", - "remote_flip_90_degrees": "urz\u0105dzenie odwr\u00f3cone o 90 stopni", - "remote_gyro_activated": "nast\u0105pi potrz\u0105\u015bni\u0119cie urz\u0105dzeniem", - "remote_moved": "urz\u0105dzenie poruszone z \"{subtype}\" w g\u00f3r\u0119", - "remote_moved_any_side": "urz\u0105dzenie przesuni\u0119te dowoln\u0105 stron\u0105 do g\u00f3ry", - "remote_rotate_from_side_1": "urz\u0105dzenie obr\u00f3cone ze \"strona 1\" na \"{subtype}\"", - "remote_rotate_from_side_2": "urz\u0105dzenie obr\u00f3cone ze \"strona 2\" na \"{subtype}\"", - "remote_rotate_from_side_3": "urz\u0105dzenie obr\u00f3cone ze \"strona 3\" na \"{subtype}\"", - "remote_rotate_from_side_4": "urz\u0105dzenie obr\u00f3cone ze \"strona 4\" na \"{subtype}\"", - "remote_rotate_from_side_5": "urz\u0105dzenie obr\u00f3cone ze \"strona 5\" na \"{subtype}\"", - "remote_rotate_from_side_6": "urz\u0105dzenie obr\u00f3cone ze \"strona 6\" na \"{subtype}\"", - "remote_turned_clockwise": "urz\u0105dzenie obr\u00f3cone zgodnie z ruchem wskaz\u00f3wek zegara", - "remote_turned_counter_clockwise": "urz\u0105dzenie obr\u00f3cone przeciwnie do ruchu wskaz\u00f3wek zegara" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Zezwalaj na czujniki deCONZ CLIP", - "allow_deconz_groups": "Zezwalaj na grupy \u015bwiate\u0142 deCONZ" - }, - "description": "Skonfiguruj widoczno\u015b\u0107 typ\u00f3w urz\u0105dze\u0144 deCONZ", - "title": "Opcje deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/pt-BR.json b/homeassistant/components/deconz/.translations/pt-BR.json deleted file mode 100644 index 6d800bb0269..00000000000 --- a/homeassistant/components/deconz/.translations/pt-BR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A ponte j\u00e1 est\u00e1 configurada", - "already_in_progress": "Fluxo de configura\u00e7\u00e3o para ponte j\u00e1 est\u00e1 em andamento.", - "no_bridges": "N\u00e3o h\u00e1 pontes de deCONZ descobertas", - "not_deconz_bridge": "N\u00e3o \u00e9 uma ponte deCONZ", - "one_instance_only": "Componente suporta apenas uma inst\u00e2ncia deCONZ", - "updated_instance": "Atualiza\u00e7\u00e3o da inst\u00e2ncia deCONZ com novo endere\u00e7o de host" - }, - "error": { - "no_key": "N\u00e3o foi poss\u00edvel obter uma chave de API" - }, - "step": { - "hassio_confirm": { - "description": "Deseja configurar o Home Assistant para conectar-se ao gateway deCONZ fornecido pelo add-on hass.io {addon} ?", - "title": "Gateway deCONZ Zigbee via add-on Hass.io" - }, - "init": { - "data": { - "host": "Hospedeiro", - "port": "Porta (valor padr\u00e3o: '80')" - }, - "title": "Defina o gateway deCONZ" - }, - "link": { - "description": "Desbloqueie o seu gateway deCONZ para se registar no Home Assistant. \n\n 1. V\u00e1 para as configura\u00e7\u00f5es do sistema deCONZ \n 2. Pressione o bot\u00e3o \"Desbloquear Gateway\"", - "title": "Linkar com deCONZ" - } - }, - "title": "Gateway deCONZ Zigbee" - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/pt.json b/homeassistant/components/deconz/.translations/pt.json deleted file mode 100644 index f0ea9e57ca0..00000000000 --- a/homeassistant/components/deconz/.translations/pt.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge j\u00e1 est\u00e1 configurada", - "no_bridges": "Nenhum deCONZ descoberto", - "one_instance_only": "Componente suporta apenas uma conex\u00e3o deCONZ" - }, - "error": { - "no_key": "N\u00e3o foi poss\u00edvel obter uma chave de API" - }, - "step": { - "init": { - "data": { - "host": "Servidor", - "port": "Porta" - }, - "title": "Defina o gateway deCONZ" - }, - "link": { - "description": "Desbloqueie o seu gateway deCONZ para se registar no Home Assistant. \n\n 1. V\u00e1 para as configura\u00e7\u00f5es do sistema deCONZ \n 2. Pressione o bot\u00e3o \"Desbloquear Gateway\"", - "title": "Liga\u00e7\u00e3o com deCONZ" - } - }, - "title": "Gateway Zigbee deCONZ" - }, - "device_automation": { - "trigger_subtype": { - "left": "Esquerda", - "side_1": "Lado 1", - "side_2": "Lado 2", - "side_3": "Lado 3", - "side_4": "Lado 4", - "side_5": "Lado 5", - "side_6": "Lado 6" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/ro.json b/homeassistant/components/deconz/.translations/ro.json deleted file mode 100644 index 2d6fc6a39fb..00000000000 --- a/homeassistant/components/deconz/.translations/ro.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "init": { - "data": { - "port": "Port" - } - }, - "link": { - "description": "Debloca\u021bi gateway-ul DECONZ pentru a v\u0103 \u00eenregistra la Home Assistant. \n\n 1. Accesa\u021bi Set\u0103rile deCONZ - > Gateway - > Avansat \n 2. Ap\u0103sa\u021bi butonul \u201eAutentifica\u021bi aplica\u021bia\u201d" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/ru.json b/homeassistant/components/deconz/.translations/ru.json deleted file mode 100644 index 4d89f5ff8e0..00000000000 --- a/homeassistant/components/deconz/.translations/ru.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", - "no_bridges": "\u0428\u043b\u044e\u0437\u044b deCONZ \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", - "not_deconz_bridge": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u043b\u044e\u0437\u043e\u043c deCONZ.", - "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 deCONZ.", - "updated_instance": "\u0410\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d." - }, - "error": { - "no_key": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u044e\u0447 API." - }, - "flow_title": "\u0428\u043b\u044e\u0437 Zigbee deCONZ ({host})", - "step": { - "hassio_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a deCONZ (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", - "title": "Zigbee \u0448\u043b\u044e\u0437 deCONZ (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" - }, - "init": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "port": "\u041f\u043e\u0440\u0442" - }, - "title": "deCONZ" - }, - "link": { - "description": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439\u0442\u0435 \u0448\u043b\u044e\u0437 deCONZ \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 Home Assistant:\n\n1. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b deCONZ -> Gateway -> Advanced.\n2. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u00abAuthenticate app\u00bb.", - "title": "\u0421\u0432\u044f\u0437\u044c \u0441 deCONZ" - } - }, - "title": "deCONZ" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "\u041e\u0431\u0435 \u043a\u043d\u043e\u043f\u043a\u0438", - "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "close": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "dim_down": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f", - "dim_up": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f", - "left": "\u041d\u0430\u043b\u0435\u0432\u043e", - "open": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "right": "\u041d\u0430\u043f\u0440\u0430\u0432\u043e", - "side_1": "\u0413\u0440\u0430\u043d\u044c 1", - "side_2": "\u0413\u0440\u0430\u043d\u044c 2", - "side_3": "\u0413\u0440\u0430\u043d\u044c 3", - "side_4": "\u0413\u0440\u0430\u043d\u044c 4", - "side_5": "\u0413\u0440\u0430\u043d\u044c 5", - "side_6": "\u0413\u0440\u0430\u043d\u044c 6", - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - }, - "trigger_type": { - "remote_awakened": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u043b\u0438", - "remote_button_double_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430", - "remote_button_long_press": "\"{subtype}\" \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430", - "remote_button_long_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", - "remote_button_quadruple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430", - "remote_button_quintuple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437", - "remote_button_rotated": "\"{subtype}\" \u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f", - "remote_button_rotation_stopped": "\"{subtype}\" \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u043b\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435", - "remote_button_short_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430", - "remote_button_short_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", - "remote_button_triple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430", - "remote_double_tap": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \"{subtype}\" \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0438 \u0434\u0432\u0430\u0436\u0434\u044b", - "remote_double_tap_any_side": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0438 \u0434\u0432\u0430\u0436\u0434\u044b", - "remote_falling": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u043f\u0430\u0434\u0435\u043d\u0438\u0438", - "remote_flip_180_degrees": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043d\u0430 180 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432", - "remote_flip_90_degrees": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432", - "remote_gyro_activated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u044f\u0445\u043d\u0443\u043b\u0438", - "remote_moved": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 \"{subtype}\" \u0441\u0432\u0435\u0440\u0445\u0443", - "remote_moved_any_side": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438", - "remote_rotate_from_side_1": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 1 \u043d\u0430 \"{subtype}\"", - "remote_rotate_from_side_2": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 2 \u043d\u0430 \"{subtype}\"", - "remote_rotate_from_side_3": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 3 \u043d\u0430 \"{subtype}\"", - "remote_rotate_from_side_4": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 4 \u043d\u0430 \"{subtype}\"", - "remote_rotate_from_side_5": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 5 \u043d\u0430 \"{subtype}\"", - "remote_rotate_from_side_6": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 6 \u043d\u0430 \"{subtype}\"", - "remote_turned_clockwise": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435", - "remote_turned_counter_clockwise": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u044b deCONZ CLIP", - "allow_deconz_groups": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f deCONZ" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 deCONZ", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/sl.json b/homeassistant/components/deconz/.translations/sl.json deleted file mode 100644 index 15927059d32..00000000000 --- a/homeassistant/components/deconz/.translations/sl.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Most je \u017ee nastavljen", - "already_in_progress": "Konfiguracijski tok za most je \u017ee v teku.", - "no_bridges": "Ni odkritih mostov deCONZ", - "not_deconz_bridge": "Ni deCONZ most", - "one_instance_only": "Komponenta podpira le en primerek deCONZ", - "updated_instance": "Posodobljen deCONZ z novim naslovom gostitelja" - }, - "error": { - "no_key": "Klju\u010da API ni mogo\u010de dobiti" - }, - "flow_title": "deCONZ Zigbee prehod ({host})", - "step": { - "hassio_confirm": { - "description": "Ali \u017eelite konfigurirati Home Assistant za povezavo s prehodom deCONZ, ki ga ponuja dodatek Hass.io {addon} ?", - "title": "deCONZ Zigbee prehod preko dodatka Hass.io" - }, - "init": { - "data": { - "host": "Gostitelj", - "port": "Vrata" - }, - "title": "Dolo\u010dite deCONZ prehod" - }, - "link": { - "description": "Odklenite va\u0161 deCONZ gateway za registracijo s Home Assistant-om. \n1. Pojdite v deCONZ sistemske nastavitve\n2. Pritisnite tipko \"odkleni prehod\"", - "title": "Povezava z deCONZ" - } - }, - "title": "deCONZ Zigbee prehod" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "Oba gumba", - "button_1": "Prvi gumb", - "button_2": "Drugi gumb", - "button_3": "Tretji gumb", - "button_4": "\u010cetrti gumb", - "close": "Zapri", - "dim_down": "Zatemnite", - "dim_up": "pove\u010dajte mo\u010d", - "left": "Levo", - "open": "Odprto", - "right": "Desno", - "side_1": "Stran 1", - "side_2": "Stran 2", - "side_3": "Stran 3", - "side_4": "Stran 4", - "side_5": "Stran 5", - "side_6": "Stran 6", - "turn_off": "Ugasni", - "turn_on": "Pri\u017egi" - }, - "trigger_type": { - "remote_awakened": "Naprava se je prebudila", - "remote_button_double_press": "Dvakrat kliknete gumb \"{subtype}\"", - "remote_button_long_press": "\"{subtype}\" gumb neprekinjeno pritisnjen", - "remote_button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", - "remote_button_quadruple_press": "\"{subtype}\" gumb \u0161tirikrat kliknjen", - "remote_button_quintuple_press": "\"{subtype}\" gumb petkrat kliknjen", - "remote_button_rotated": "Gumb \"{subtype}\" zasukan", - "remote_button_rotation_stopped": "Vrtenje \"{subtype}\" gumba se je ustavilo", - "remote_button_short_press": "Pritisnjen \"{subtype}\" gumb", - "remote_button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den", - "remote_button_triple_press": "Gumb \"{subtype}\" trikrat kliknjen", - "remote_double_tap": "Naprava \"{subtype}\" dvakrat dotaknjena", - "remote_double_tap_any_side": "Naprava je bila dvojno tapnjena na katerokoli stran", - "remote_falling": "Naprava v prostem padu", - "remote_flip_180_degrees": "Naprava se je obrnila za 180 stopinj", - "remote_flip_90_degrees": "Naprava se je obrnila za 90 stopinj", - "remote_gyro_activated": "Naprava se je pretresla", - "remote_moved": "Naprava je premaknjena s \"{subtype}\" navzgor", - "remote_moved_any_side": "Naprava se je premikala s katero koli stranjo navzgor", - "remote_rotate_from_side_1": "Naprava je zasukana iz \"strani 1\" v \"{subtype}\"", - "remote_rotate_from_side_2": "Naprava je zasukana iz \"strani 2\" v \"{subtype}\"", - "remote_rotate_from_side_3": "Naprava je zasukana iz \"strani 3\" v \"{subtype}\"", - "remote_rotate_from_side_4": "Naprava je zasukana iz \"strani 4\" v \"{subtype}\"", - "remote_rotate_from_side_5": "Naprava je zasukana iz \"strani 5\" v \"{subtype}\"", - "remote_rotate_from_side_6": "Naprava je zasukana iz \"strani 6\" v \"{subtype}\"", - "remote_turned_clockwise": "Naprava se je obrnila v smeri urinega kazalca", - "remote_turned_counter_clockwise": "Naprava se je obrnila v nasprotni smeri urinega kazalca" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Dovoli deCONZ CLIP senzorje", - "allow_deconz_groups": "Dovolite deCONZ skupine lu\u010di" - }, - "description": "Konfiguracija vidnosti tipov naprav deCONZ", - "title": "mo\u017enosti deCONZ" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/sv.json b/homeassistant/components/deconz/.translations/sv.json deleted file mode 100644 index 11a8aac485a..00000000000 --- a/homeassistant/components/deconz/.translations/sv.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bryggan \u00e4r redan konfigurerad", - "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r bryggan p\u00e5g\u00e5r redan.", - "no_bridges": "Inga deCONZ-bryggor uppt\u00e4cktes", - "not_deconz_bridge": "Inte en deCONZ-brygga", - "one_instance_only": "Komponenten st\u00f6djer endast en deCONZ-instans", - "updated_instance": "Uppdaterad deCONZ-instans med ny v\u00e4rdadress" - }, - "error": { - "no_key": "Det gick inte att ta emot en API-nyckel" - }, - "flow_title": "deCONZ Zigbee gateway ({host})", - "step": { - "hassio_confirm": { - "description": "Vill du konfigurera Home Assistant att ansluta till den deCONZ-gateway som tillhandah\u00e5lls av Hass.io-till\u00e4gget {addon}?", - "title": "deCONZ Zigbee gateway via Hass.io till\u00e4gg" - }, - "init": { - "data": { - "host": "V\u00e4rd", - "port": "Port (standardv\u00e4rde: '80')" - }, - "title": "Definiera deCONZ-gatewaye" - }, - "link": { - "description": "L\u00e5s upp din deCONZ-gateway f\u00f6r att registrera dig med Home Assistant. \n\n 1. G\u00e5 till deCONZ-systeminst\u00e4llningarna \n 2. Tryck p\u00e5 \"L\u00e5s upp gateway\"-knappen", - "title": "L\u00e4nka med deCONZ" - } - }, - "title": "deCONZ Zigbee Gateway" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "B\u00e5da knapparna", - "button_1": "F\u00f6rsta knappen", - "button_2": "Andra knappen", - "button_3": "Tredje knappen", - "button_4": "Fj\u00e4rde knappen", - "close": "St\u00e4ng", - "dim_down": "Dimma ned", - "dim_up": "Dimma upp", - "left": "V\u00e4nster", - "open": "\u00d6ppen", - "right": "H\u00f6ger", - "side_1": "Sida 1", - "side_2": "Sida 2", - "side_3": "Sida 3", - "side_4": "Sida 4", - "side_5": "Sida 5", - "side_6": "Sida 6", - "turn_off": "St\u00e4ng av", - "turn_on": "Starta" - }, - "trigger_type": { - "remote_awakened": "Enheten v\u00e4cktes", - "remote_button_double_press": "\"{subtype}\"-knappen dubbelklickades", - "remote_button_long_press": "\"{subtype}\"-knappen kontinuerligt nedtryckt", - "remote_button_long_release": "\"{subtype}\"-knappen sl\u00e4pptes efter ett l\u00e5ngttryck", - "remote_button_quadruple_press": "\"{subtype}\"-knappen klickades \nfyrfaldigt", - "remote_button_quintuple_press": "\"{subtype}\"-knappen klickades \nfemfaldigt", - "remote_button_rotated": "Knappen roterade \"{subtype}\"", - "remote_button_rotation_stopped": "Knapprotationen \"{subtype}\" stoppades", - "remote_button_short_press": "\"{subtype}\"-knappen trycktes in", - "remote_button_short_release": "\"{subtype}\"-knappen sl\u00e4ppt", - "remote_button_triple_press": "\"{subtype}\"-knappen trippelklickad", - "remote_double_tap": "Enheten \"{subtype}\" dubbeltryckt", - "remote_double_tap_any_side": "Enheten dubbeltryckt p\u00e5 valfri sida", - "remote_falling": "Enhet i fritt fall", - "remote_flip_180_degrees": "Enheten v\u00e4nd 180 grader", - "remote_flip_90_degrees": "Enheten v\u00e4nd 90 grader", - "remote_gyro_activated": "Enhet skakad", - "remote_moved": "Enheten flyttades med \"{subtype}\" upp", - "remote_moved_any_side": "Enheten flyttades med valfri sida upp\u00e5t", - "remote_rotate_from_side_1": "Enheten roterades fr\u00e5n \"sida 1\" till \"{subtype}\"", - "remote_rotate_from_side_2": "Enheten roterades fr\u00e5n \"sida 2\" till \"{subtype}\"", - "remote_rotate_from_side_3": "Enheten roterades fr\u00e5n \"sida 3\" till \"{subtype}\"", - "remote_rotate_from_side_4": "Enheten roterades fr\u00e5n \"sida 4\" till \"{subtype}\"", - "remote_rotate_from_side_5": "Enheten roterades fr\u00e5n \"sida 5\" till \"{subtype}\"", - "remote_rotate_from_side_6": "Enheten roterades fr\u00e5n \"sida 6\" till \"{subtype}\"", - "remote_turned_clockwise": "Enheten vriden medurs", - "remote_turned_counter_clockwise": "Enheten v\u00e4nde moturs" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "Till\u00e5t deCONZ CLIP-sensorer", - "allow_deconz_groups": "Till\u00e5t deCONZ ljusgrupper" - }, - "description": "Konfigurera synlighet f\u00f6r deCONZ-enhetstyper" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/th.json b/homeassistant/components/deconz/.translations/th.json deleted file mode 100644 index e40765e8220..00000000000 --- a/homeassistant/components/deconz/.translations/th.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "step": { - "init": { - "data": { - "port": "Port" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/vi.json b/homeassistant/components/deconz/.translations/vi.json deleted file mode 100644 index 75d8969495b..00000000000 --- a/homeassistant/components/deconz/.translations/vi.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "C\u1ea7u \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh", - "no_bridges": "Kh\u00f4ng t\u00ecm th\u1ea5y c\u1ea7u deCONZ n\u00e0o", - "one_instance_only": "Th\u00e0nh ph\u1ea7n ch\u1ec9 h\u1ed7 tr\u1ee3 m\u1ed9t c\u00e1 th\u1ec3 deCONZ" - }, - "error": { - "no_key": "Kh\u00f4ng th\u1ec3 l\u1ea5y kh\u00f3a API" - }, - "step": { - "init": { - "data": { - "port": "C\u1ed5ng (gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh: '80')" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/zh-Hans.json b/homeassistant/components/deconz/.translations/zh-Hans.json deleted file mode 100644 index ada31494619..00000000000 --- a/homeassistant/components/deconz/.translations/zh-Hans.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6865\u63a5\u5668\u5df2\u914d\u7f6e\u5b8c\u6210", - "no_bridges": "\u6ca1\u6709\u53d1\u73b0 deCONZ \u7684\u6865\u63a5\u8bbe\u5907", - "one_instance_only": "\u7ec4\u4ef6\u53ea\u652f\u6301\u4e00\u4e2a deCONZ \u5b9e\u4f8b" - }, - "error": { - "no_key": "\u65e0\u6cd5\u83b7\u53d6 API \u5bc6\u94a5" - }, - "step": { - "init": { - "data": { - "host": "\u4e3b\u673a", - "port": "\u7aef\u53e3\uff08\u9ed8\u8ba4\u503c\uff1a'80'\uff09" - }, - "title": "\u5b9a\u4e49 deCONZ \u7f51\u5173" - }, - "link": { - "description": "\u89e3\u9501\u60a8\u7684 deCONZ \u7f51\u5173\u4ee5\u6ce8\u518c\u5230 Home Assistant\u3002 \n\n 1. \u524d\u5f80 deCONZ \u7cfb\u7edf\u8bbe\u7f6e\n 2. \u70b9\u51fb\u201c\u89e3\u9501\u7f51\u5173\u201d\u6309\u94ae", - "title": "\u8fde\u63a5 deCONZ" - } - }, - "title": "deCONZ" - }, - "device_automation": { - "trigger_subtype": { - "side_1": "\u7b2c 1 \u9762", - "side_2": "\u7b2c 2 \u9762", - "side_3": "\u7b2c 3 \u9762", - "side_4": "\u7b2c 4 \u9762", - "side_5": "\u7b2c 5 \u9762", - "side_6": "\u7b2c 6 \u9762" - }, - "trigger_type": { - "remote_awakened": "\u8bbe\u5907\u5524\u9192", - "remote_double_tap": "\u8bbe\u5907\u7684\u201c{subtype}\u201d\u88ab\u8f7b\u6572\u4e24\u6b21", - "remote_falling": "\u8bbe\u5907\u81ea\u7531\u843d\u4f53", - "remote_gyro_activated": "\u8bbe\u5907\u6447\u6643", - "remote_moved": "\u8bbe\u5907\u6c34\u5e73\u79fb\u52a8\u4e14\u201c{subtype}\u201d\u671d\u4e0a", - "remote_rotate_from_side_1": "\u8bbe\u5907\u4ece\u201c\u7b2c 1 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", - "remote_rotate_from_side_2": "\u8bbe\u5907\u4ece\u201c\u7b2c 2 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", - "remote_rotate_from_side_3": "\u8bbe\u5907\u4ece\u201c\u7b2c 3 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", - "remote_rotate_from_side_4": "\u8bbe\u5907\u4ece\u201c\u7b2c 4 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", - "remote_rotate_from_side_5": "\u8bbe\u5907\u4ece\u201c\u7b2c 5 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", - "remote_rotate_from_side_6": "\u8bbe\u5907\u4ece\u201c\u7b2c 6 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d" - } - }, - "options": { - "step": { - "deconz_devices": { - "title": "deCONZ \u9009\u9879" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/zh-Hant.json b/homeassistant/components/deconz/.translations/zh-Hant.json deleted file mode 100644 index 07b7c6e997b..00000000000 --- a/homeassistant/components/deconz/.translations/zh-Hant.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "Bridge \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", - "no_bridges": "\u672a\u641c\u5c0b\u5230 deCONZ Bridfe", - "not_deconz_bridge": "\u975e deCONZ Bridge \u8a2d\u5099", - "one_instance_only": "\u7d44\u4ef6\u50c5\u652f\u63f4\u4e00\u7d44 deCONZ \u7269\u4ef6", - "updated_instance": "\u4f7f\u7528\u65b0\u4e3b\u6a5f\u7aef\u4f4d\u5740\u66f4\u65b0 deCONZ \u7269\u4ef6" - }, - "error": { - "no_key": "\u7121\u6cd5\u53d6\u5f97 API key" - }, - "flow_title": "deCONZ Zigbee \u9598\u9053\u5668\uff08{host}\uff09", - "step": { - "hassio_confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u9023\u7dda\u81f3 Hass.io \u9644\u52a0\u6574\u5408 {addon} \u4e4b deCONZ \u9598\u9053\u5668\uff1f", - "title": "\u900f\u904e Hass.io \u9644\u52a0\u7d44\u4ef6 deCONZ Zigbee \u9598\u9053\u5668" - }, - "init": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "port": "\u901a\u8a0a\u57e0" - }, - "title": "\u5b9a\u7fa9 deCONZ \u9598\u9053\u5668" - }, - "link": { - "description": "\u89e3\u9664 deCONZ \u9598\u9053\u5668\u9396\u5b9a\uff0c\u4ee5\u65bc Home Assistant \u9032\u884c\u8a3b\u518a\u3002\n\n1. \u9032\u5165 deCONZ \u7cfb\u7d71\u8a2d\u5b9a -> \u9598\u9053\u5668 -> \u9032\u968e\u8a2d\u5b9a\n2. \u6309\u4e0b\u300c\u8a8d\u8b49\u7a0b\u5f0f\uff08Authenticate app\uff09\u300d\u6309\u9215", - "title": "\u9023\u7d50\u81f3 deCONZ" - } - }, - "title": "deCONZ Zigbee \u9598\u9053\u5668" - }, - "device_automation": { - "trigger_subtype": { - "both_buttons": "\u5169\u500b\u6309\u9215", - "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", - "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", - "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", - "button_4": "\u7b2c\u56db\u500b\u6309\u9215", - "close": "\u95dc\u9589", - "dim_down": "\u8abf\u6697", - "dim_up": "\u8abf\u4eae", - "left": "\u5de6", - "open": "\u958b\u555f", - "right": "\u53f3", - "side_1": "\u7b2c 1 \u9762", - "side_2": "\u7b2c 2 \u9762", - "side_3": "\u7b2c 3 \u9762", - "side_4": "\u7b2c 4 \u9762", - "side_5": "\u7b2c 5 \u9762", - "side_6": "\u7b2c 6 \u9762", - "turn_off": "\u95dc\u9589", - "turn_on": "\u958b\u555f" - }, - "trigger_type": { - "remote_awakened": "\u8a2d\u5099\u5df2\u559a\u9192", - "remote_button_double_press": "\"{subtype}\" \u6309\u9215\u96d9\u64ca", - "remote_button_long_press": "\"{subtype}\" \u6309\u9215\u6301\u7e8c\u6309\u4e0b", - "remote_button_long_release": "\u9577\u6309\u5f8c\u91cb\u653e \"{subtype}\" \u6309\u9215", - "remote_button_quadruple_press": "\"{subtype}\" \u6309\u9215\u56db\u9023\u9ede\u64ca", - "remote_button_quintuple_press": "\"{subtype}\" \u6309\u9215\u4e94\u9023\u9ede\u64ca", - "remote_button_rotated": "\u65cb\u8f49 \"{subtype}\" \u6309\u9215", - "remote_button_rotation_stopped": "\u65cb\u8f49 \"{subtype}\" \u6309\u9215\u5df2\u505c\u6b62", - "remote_button_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b", - "remote_button_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e", - "remote_button_triple_press": "\"{subtype}\" \u6309\u9215\u4e09\u9023\u9ede\u64ca", - "remote_double_tap": "\u8a2d\u5099 \"{subtype}\" \u96d9\u6572", - "remote_double_tap_any_side": "\u8a2d\u5099\u4efb\u4e00\u9762\u96d9\u9ede\u9078", - "remote_falling": "\u8a2d\u5099\u81ea\u7531\u843d\u4e0b", - "remote_flip_180_degrees": "\u8a2d\u5099\u65cb\u8f49 180 \u5ea6", - "remote_flip_90_degrees": "\u8a2d\u5099\u65cb\u8f49 90 \u5ea6", - "remote_gyro_activated": "\u8a2d\u5099\u6416\u6643", - "remote_moved": "\u8a2d\u5099\u79fb\u52d5\u81f3 \"{subtype}\" \u671d\u4e0a", - "remote_moved_any_side": "\u8a2d\u5099\u4efb\u4e00\u9762\u671d\u4e0a", - "remote_rotate_from_side_1": "\u8a2d\u5099\u7531\u300c\u7b2c 1 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", - "remote_rotate_from_side_2": "\u8a2d\u5099\u7531\u300c\u7b2c 2 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", - "remote_rotate_from_side_3": "\u8a2d\u5099\u7531\u300c\u7b2c 3 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", - "remote_rotate_from_side_4": "\u8a2d\u5099\u7531\u300c\u7b2c 4 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", - "remote_rotate_from_side_5": "\u8a2d\u5099\u7531\u300c\u7b2c 5 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", - "remote_rotate_from_side_6": "\u8a2d\u5099\u7531\u300c\u7b2c 6 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", - "remote_turned_clockwise": "\u8a2d\u5099\u9806\u6642\u91dd\u65cb\u8f49", - "remote_turned_counter_clockwise": "\u8a2d\u5099\u9006\u6642\u91dd\u65cb\u8f49" - } - }, - "options": { - "step": { - "deconz_devices": { - "data": { - "allow_clip_sensor": "\u5141\u8a31 deCONZ CLIP \u611f\u61c9\u5668", - "allow_deconz_groups": "\u5141\u8a31 deCONZ \u71c8\u5149\u7fa4\u7d44" - }, - "description": "\u8a2d\u5b9a deCONZ \u53ef\u8996\u8a2d\u5099\u985e\u578b", - "title": "deCONZ \u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/deconz/binary_sensor.py b/homeassistant/components/deconz/binary_sensor.py index 6a528a66ba6..d16722525f9 100644 --- a/homeassistant/components/deconz/binary_sensor.py +++ b/homeassistant/components/deconz/binary_sensor.py @@ -64,7 +64,7 @@ class DeconzBinarySensor(DeconzDevice, BinarySensorDevice): keys = {"on", "reachable", "state"} if force_update or self._device.changed_keys.intersection(keys): - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self): diff --git a/homeassistant/components/deconz/config_flow.py b/homeassistant/components/deconz/config_flow.py index 3a38a67f0c6..f52a18bbd07 100644 --- a/homeassistant/components/deconz/config_flow.py +++ b/homeassistant/components/deconz/config_flow.py @@ -32,6 +32,7 @@ from .const import ( DECONZ_MANUFACTURERURL = "http://www.dresden-elektronik.de" CONF_SERIAL = "serial" +CONF_MANUAL_INPUT = "Manually define gateway" @callback @@ -62,18 +63,17 @@ class DeconzFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self.bridges = [] self.deconz_config = {} - async def async_step_init(self, user_input=None): - """Needed in order to not require re-translation of strings.""" - return await self.async_step_user(user_input) - async def async_step_user(self, user_input=None): """Handle a deCONZ config flow start. - If only one bridge is found go to link step. - If more than one bridge is found let user choose bridge to link. + Let user choose between discovered bridges and manual configuration. If no bridge is found allow user to manually input configuration. """ if user_input is not None: + + if CONF_MANUAL_INPUT == user_input[CONF_HOST]: + return await self.async_step_manual_input() + for bridge in self.bridges: if bridge[CONF_HOST] == user_input[CONF_HOST]: self.bridge_id = bridge[CONF_BRIDGE_ID] @@ -83,9 +83,6 @@ class DeconzFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): } return await self.async_step_link() - self.deconz_config = user_input - return await self.async_step_link() - session = aiohttp_client.async_get_clientsession(self.hass) try: @@ -97,22 +94,29 @@ class DeconzFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): LOGGER.debug("Discovered deCONZ gateways %s", pformat(self.bridges)) - if len(self.bridges) == 1: - return await self.async_step_user(self.bridges[0]) - - if len(self.bridges) > 1: + if self.bridges: hosts = [] for bridge in self.bridges: hosts.append(bridge[CONF_HOST]) + hosts.append(CONF_MANUAL_INPUT) + return self.async_show_form( - step_id="init", - data_schema=vol.Schema({vol.Required(CONF_HOST): vol.In(hosts)}), + step_id="user", + data_schema=vol.Schema({vol.Optional(CONF_HOST): vol.In(hosts)}), ) + return await self.async_step_manual_input() + + async def async_step_manual_input(self, user_input=None): + """Manual configuration.""" + if user_input: + self.deconz_config = user_input + return await self.async_step_link() + return self.async_show_form( - step_id="init", + step_id="manual_input", data_schema=vol.Schema( { vol.Required(CONF_HOST): str, diff --git a/homeassistant/components/deconz/deconz_device.py b/homeassistant/components/deconz/deconz_device.py index 0724f9f9b45..80557caeca6 100644 --- a/homeassistant/components/deconz/deconz_device.py +++ b/homeassistant/components/deconz/deconz_device.py @@ -106,7 +106,7 @@ class DeconzDevice(DeconzBase, Entity): if ignore_update: return - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def available(self): diff --git a/homeassistant/components/deconz/device_trigger.py b/homeassistant/components/deconz/device_trigger.py index 654bcfd43db..a146552f14e 100644 --- a/homeassistant/components/deconz/device_trigger.py +++ b/homeassistant/components/deconz/device_trigger.py @@ -99,8 +99,8 @@ HUE_TAP_REMOTE = { (CONF_SHORT_PRESS, CONF_BUTTON_4): {CONF_EVENT: 18}, } -SENIC_FRIENDS_OF_HUE_MODEL = "FOHSWITCH" -SENIC_FRIENDS_OF_HUE = { +FRIENDS_OF_HUE_SWITCH_MODEL = "FOHSWITCH" +FRIENDS_OF_HUE_SWITCH = { (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1000}, (CONF_SHORT_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 1002}, (CONF_LONG_PRESS, CONF_BUTTON_1): {CONF_EVENT: 1001}, @@ -304,7 +304,7 @@ REMOTES = { HUE_DIMMER_REMOTE_MODEL_GEN1: HUE_DIMMER_REMOTE, HUE_DIMMER_REMOTE_MODEL_GEN2: HUE_DIMMER_REMOTE, HUE_TAP_REMOTE_MODEL: HUE_TAP_REMOTE, - SENIC_FRIENDS_OF_HUE_MODEL: SENIC_FRIENDS_OF_HUE, + FRIENDS_OF_HUE_SWITCH_MODEL: FRIENDS_OF_HUE_SWITCH, SYMFONISK_SOUND_CONTROLLER_MODEL: SYMFONISK_SOUND_CONTROLLER, TRADFRI_ON_OFF_SWITCH_MODEL: TRADFRI_ON_OFF_SWITCH, TRADFRI_OPEN_CLOSE_REMOTE_MODEL: TRADFRI_OPEN_CLOSE_REMOTE, diff --git a/homeassistant/components/deconz/manifest.json b/homeassistant/components/deconz/manifest.json index 425a44bf042..5ff4a303b0c 100644 --- a/homeassistant/components/deconz/manifest.json +++ b/homeassistant/components/deconz/manifest.json @@ -3,17 +3,12 @@ "name": "deCONZ", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/deconz", - "requirements": [ - "pydeconz==70" - ], + "requirements": ["pydeconz==70"], "ssdp": [ { "manufacturer": "Royal Philips Electronics" } ], - "dependencies": [], - "codeowners": [ - "@kane610" - ], + "codeowners": ["@kane610"], "quality_scale": "platinum" -} \ No newline at end of file +} diff --git a/homeassistant/components/deconz/scene.py b/homeassistant/components/deconz/scene.py index a84e799d44d..fdeb1d43acc 100644 --- a/homeassistant/components/deconz/scene.py +++ b/homeassistant/components/deconz/scene.py @@ -1,4 +1,6 @@ """Support for deCONZ scenes.""" +from typing import Any + from homeassistant.components.scene import Scene from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -18,10 +20,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): @callback def async_add_scene(scenes): """Add scene from deCONZ.""" - entities = [] - - for scene in scenes: - entities.append(DeconzScene(scene, gateway)) + entities = [DeconzScene(scene, gateway) for scene in scenes] async_add_entities(entities) @@ -51,7 +50,7 @@ class DeconzScene(Scene): del self.gateway.deconz_ids[self.entity_id] self._scene = None - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate the scene.""" await self._scene.async_set_state({}) diff --git a/homeassistant/components/deconz/sensor.py b/homeassistant/components/deconz/sensor.py index fd8ffeeaaf0..ae0e55ae51f 100644 --- a/homeassistant/components/deconz/sensor.py +++ b/homeassistant/components/deconz/sensor.py @@ -109,7 +109,7 @@ class DeconzSensor(DeconzDevice): keys = {"on", "reachable", "state"} if force_update or self._device.changed_keys.intersection(keys): - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def state(self): @@ -174,7 +174,7 @@ class DeconzBattery(DeconzDevice): keys = {"battery", "reachable"} if force_update or self._device.changed_keys.intersection(keys): - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def unique_id(self): diff --git a/homeassistant/components/deconz/services.yaml b/homeassistant/components/deconz/services.yaml index bd5c2eb6a0c..d8bf3e4d994 100644 --- a/homeassistant/components/deconz/services.yaml +++ b/homeassistant/components/deconz/services.yaml @@ -3,7 +3,7 @@ configure: fields: entity: description: Entity id representing a specific device in deCONZ. - example: 'light.rgb_light' + example: "light.rgb_light" field: description: >- Field is a string representing a full path to deCONZ endpoint (when @@ -15,11 +15,11 @@ configure: example: '{"on": true}' bridgeid: description: (Optional) Bridgeid is a string unique for each deCONZ hardware. It can be found as part of the integration name. - example: '00212EFFFF012345' + example: "00212EFFFF012345" device_refresh: description: Refresh device lists from deCONZ. fields: bridgeid: description: (Optional) Bridgeid is a string unique for each deCONZ hardware. It can be found as part of the integration name. - example: '00212EFFFF012345' + example: "00212EFFFF012345" diff --git a/homeassistant/components/deconz/strings.json b/homeassistant/components/deconz/strings.json index 52cd90e54a1..2042c36c859 100644 --- a/homeassistant/components/deconz/strings.json +++ b/homeassistant/components/deconz/strings.json @@ -1,10 +1,13 @@ { "config": { - "title": "deCONZ Zigbee gateway", "flow_title": "deCONZ Zigbee gateway ({host})", "step": { - "init": { - "title": "Define deCONZ gateway", + "user": { + "data": { + "host": "Select discovered deCONZ gateway" + } + }, + "manual_input": { "data": { "host": "Host", "port": "Port" @@ -19,9 +22,7 @@ "description": "Do you want to configure Home Assistant to connect to the deCONZ gateway provided by the Hass.io add-on {addon}?" } }, - "error": { - "no_key": "Couldn't get an API key" - }, + "error": { "no_key": "Couldn't get an API key" }, "abort": { "already_configured": "Bridge is already configured", "already_in_progress": "Config flow for bridge is already in progress.", @@ -83,6 +84,8 @@ "open": "Open", "close": "Close", "both_buttons": "Both buttons", + "top_buttons": "Top buttons", + "bottom_buttons": "Bottom buttons", "button_1": "First button", "button_2": "Second button", "button_3": "Third button", @@ -95,4 +98,4 @@ "side_6": "Side 6" } } -} \ No newline at end of file +} diff --git a/homeassistant/components/deconz/translations/bg.json b/homeassistant/components/deconz/translations/bg.json new file mode 100644 index 00000000000..ad79cb9d584 --- /dev/null +++ b/homeassistant/components/deconz/translations/bg.json @@ -0,0 +1,92 @@ +{ + "config": { + "abort": { + "already_configured": "\u041c\u043e\u0441\u0442\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f.", + "no_bridges": "\u041d\u0435 \u0441\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u043c\u043e\u0441\u0442\u043e\u0432\u0435 deCONZ", + "not_deconz_bridge": "\u041d\u0435 \u0435 deCONZ \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", + "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u043e \u043a\u043e\u043f\u0438\u0435 \u043d\u0430 deCONZ", + "updated_instance": "\u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 deCONZ \u0441 \u043d\u043e\u0432 \u0430\u0434\u0440\u0435\u0441" + }, + "error": { + "no_key": "\u041d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 API \u043a\u043b\u044e\u0447" + }, + "flow_title": "deCONZ Zigbee \u0448\u043b\u044e\u0437 ({host})", + "step": { + "hassio_confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0437\u0432\u0430 \u0441 deCONZ \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 hass.io {addon}?", + "title": "deCONZ Zigbee \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0447\u0440\u0435\u0437 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430" + }, + "init": { + "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 deCONZ \u0448\u043b\u044e\u0437" + }, + "link": { + "description": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438 deCONZ \u0448\u043b\u044e\u0437\u0430 \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430 \u0441 Home Assistant.\n\n1. \u041e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 deCONZ Settings -> Gateway -> Advanced\n2. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \"Authenticate app\"", + "title": "\u0412\u0440\u044a\u0437\u043a\u0430 \u0441 deCONZ" + }, + "manual_confirm": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "port": "\u041f\u043e\u0440\u0442" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "\u0418 \u0434\u0432\u0430\u0442\u0430 \u0431\u0443\u0442\u043e\u043d\u0430", + "button_1": "\u041f\u044a\u0440\u0432\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_2": "\u0412\u0442\u043e\u0440\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_3": "\u0422\u0440\u0435\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_4": "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", + "close": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435", + "dim_down": "\u0417\u0430\u0442\u044a\u043c\u043d\u044f\u0432\u0430\u043d\u0435", + "dim_up": "\u041e\u0441\u0432\u0435\u0442\u044f\u0432\u0430\u043d\u0435", + "left": "\u041b\u044f\u0432\u043e", + "open": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435", + "right": "\u0414\u044f\u0441\u043d\u043e", + "side_1": "\u0421\u0442\u0440\u0430\u043d\u0430 1", + "side_2": "\u0421\u0442\u0440\u0430\u043d\u0430 2", + "side_3": "\u0421\u0442\u0440\u0430\u043d\u0430 3", + "side_4": "\u0421\u0442\u0440\u0430\u043d\u0430 4", + "side_5": "\u0421\u0442\u0440\u0430\u043d\u0430 5", + "side_6": "\u0421\u0442\u0440\u0430\u043d\u0430 6", + "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438" + }, + "trigger_type": { + "remote_awakened": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0441\u0435 \u0441\u044a\u0431\u0443\u0434\u0438", + "remote_button_double_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_button_long_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e", + "remote_button_long_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442 \u0441\u043b\u0435\u0434 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u043d\u0435", + "remote_button_quadruple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0447\u0435\u0442\u0438\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_button_quintuple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0435\u0442\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_button_rotated": "\u0417\u0430\u0432\u044a\u0440\u0442\u044f\u043d \u0431\u0443\u0442\u043e\u043d \"{subtype}\"", + "remote_button_rotation_stopped": "\u0421\u043f\u0440\u044f \u0432\u044a\u0440\u0442\u0435\u043d\u0435\u0442\u043e \u043d\u0430 \u0431\u0443\u0442\u043e\u043d \"{subtype}\"", + "remote_button_short_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442", + "remote_button_short_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442", + "remote_button_triple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0442\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_double_tap": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \"{subtype}\" \u0435 \u043f\u043e\u0447\u0443\u043a\u0430\u043d\u043e \u0434\u0432\u0430 \u043f\u044a\u0442\u0438", + "remote_falling": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043f\u0430\u0434\u0430", + "remote_gyro_activated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0440\u0430\u0437\u043a\u043b\u0430\u0442\u0435\u043d\u043e", + "remote_moved": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043f\u0440\u0435\u043c\u0435\u0441\u0442\u0435\u043d\u043e \u0441 \"{subtype}\" \u043d\u0430\u0433\u043e\u0440\u0435", + "remote_rotate_from_side_1": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 1\" \u043a\u044a\u043c \" {subtype} \"", + "remote_rotate_from_side_2": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 2\" \u043a\u044a\u043c \" {subtype} \"", + "remote_rotate_from_side_3": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 3\" \u043a\u044a\u043c \" {subtype} \"", + "remote_rotate_from_side_4": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 4\" \u043a\u044a\u043c \" {subtype} \"", + "remote_rotate_from_side_5": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 5\" \u043a\u044a\u043c \" {subtype} \"", + "remote_rotate_from_side_6": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \u043e\u0442 \"\u0441\u0442\u0440\u0430\u043d\u0430 6\" \u043a\u044a\u043c \" {subtype} \"" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 deCONZ CLIP \u0441\u0435\u043d\u0437\u043e\u0440\u0438", + "allow_deconz_groups": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438 deCONZ \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u043d\u0438 \u0433\u0440\u0443\u043f\u0438" + }, + "description": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 \u0442\u0438\u043f\u043e\u0432\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/ca.json b/homeassistant/components/deconz/translations/ca.json new file mode 100644 index 00000000000..9559dcfb211 --- /dev/null +++ b/homeassistant/components/deconz/translations/ca.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "L'enlla\u00e7 ja est\u00e0 configurat", + "already_in_progress": "El flux de dades de configuraci\u00f3 per l'enlla\u00e7 ja est\u00e0 en curs.", + "no_bridges": "No s'han descobert enlla\u00e7os amb deCONZ", + "not_deconz_bridge": "No \u00e9s un enlla\u00e7 deCONZ", + "one_instance_only": "El component nom\u00e9s admet una inst\u00e0ncia deCONZ", + "updated_instance": "S'ha actualitzat la inst\u00e0ncia de deCONZ amb una nova adre\u00e7a" + }, + "error": { + "no_key": "No s'ha pogut obtenir una clau API" + }, + "flow_title": "Passarel\u00b7la d'enlla\u00e7 deCONZ Zigbee ({host})", + "step": { + "hassio_confirm": { + "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb la passarel\u00b7la deCONZ proporcionada pel complement de Hass.io: {addon}?", + "title": "Passarel\u00b7la d'enlla\u00e7 deCONZ Zigbee (complement de Hass.io)" + }, + "init": { + "title": "Definici\u00f3 de la passarel\u00b7la deCONZ" + }, + "link": { + "description": "Desbloqueja la teva passarel\u00b7la d'enlla\u00e7 deCONZ per a registrar-te amb Home Assistant.\n\n1. V\u00e9s a la configuraci\u00f3 del sistema deCONZ -> Passarel\u00b7la -> Avan\u00e7at\n2. Prem el bot\u00f3 \"Autenticar applicaci\u00f3\"", + "title": "Vincular amb deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port" + } + }, + "manual_input": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port" + }, + "title": "Configuraci\u00f3 de la passarel\u00b7la deCONZ" + }, + "user": { + "data": { + "host": "Selecciona la passarel\u00b7la deCONZ descoberta" + }, + "title": "Selecci\u00f3 de la passarel\u00b7la deCONZ" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Ambd\u00f3s botons", + "bottom_buttons": "Botons inferiors", + "button_1": "Primer bot\u00f3", + "button_2": "Segon bot\u00f3", + "button_3": "Tercer bot\u00f3", + "button_4": "Quart bot\u00f3", + "close": "Tanca", + "dim_down": "Atenua la brillantor", + "dim_up": "Augmenta la brillantor", + "left": "Esquerra", + "open": "Obert", + "right": "Dreta", + "side_1": "cara 1", + "side_2": "cara 2", + "side_3": "cara 3", + "side_4": "cara 4", + "side_5": "cara 5", + "side_6": "cara 6", + "top_buttons": "Botons superiors", + "turn_off": "Desactiva", + "turn_on": "Activa" + }, + "trigger_type": { + "remote_awakened": "Dispositiu despertat", + "remote_button_double_press": "Bot\u00f3 \"{subtype}\" clicat dues vegades", + "remote_button_long_press": "Bot\u00f3 \"{subtype}\" premut cont\u00ednuament", + "remote_button_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut", + "remote_button_quadruple_press": "Bot\u00f3 \"{subtype}\" clicat quatre vegades", + "remote_button_quintuple_press": "Bot\u00f3 \"{subtype}\" clicat cinc vegades", + "remote_button_rotated": "Bot\u00f3 \"{subtype}\" girat", + "remote_button_rotation_stopped": "La rotaci\u00f3 del bot\u00f3 \"{subtype}\" s'ha aturat", + "remote_button_short_press": "Bot\u00f3 \"{subtype}\" premut", + "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat", + "remote_button_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades", + "remote_double_tap": "Dispositiu \"{subtype}\" tocat dues vegades", + "remote_double_tap_any_side": "Dispositiu tocat dues vegades a alguna cara", + "remote_falling": "Dispositiu en caiguda lliure", + "remote_flip_180_degrees": "Dispositiu voltejat 180 graus", + "remote_flip_90_degrees": "Dispositiu voltejat 90 graus", + "remote_gyro_activated": "Dispositiu sacsejat", + "remote_moved": "Dispositiu mogut amb la \"{subtype}\" amunt", + "remote_moved_any_side": "Dispositiu mogut amb alguna cara amunt", + "remote_rotate_from_side_1": "Dispositiu rotat de la \"cara 1\" a la \"{subtype}\"", + "remote_rotate_from_side_2": "Dispositiu rotat de la \"cara 2\" a la \"{subtype}\"", + "remote_rotate_from_side_3": "Dispositiu rotat de la \"cara 3\" a la \"{subtype}\"", + "remote_rotate_from_side_4": "Dispositiu rotat de la \"cara 4\" a la \"{subtype}\"", + "remote_rotate_from_side_5": "Dispositiu rotat de la \"cara 5\" a la \"{subtype}\"", + "remote_rotate_from_side_6": "Dispositiu rotat de la \"cara 6\" a la \"{subtype}\"", + "remote_turned_clockwise": "Dispositiu girat en sentit horari", + "remote_turned_counter_clockwise": "Dispositiu girat en sentit antihorari" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Permet sensors deCONZ CLIP", + "allow_deconz_groups": "Permet grups de llums deCONZ" + }, + "description": "Configura la visibilitat dels tipus dels dispositius deCONZ", + "title": "Opcions de deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/cs.json b/homeassistant/components/deconz/translations/cs.json new file mode 100644 index 00000000000..360cc9e113f --- /dev/null +++ b/homeassistant/components/deconz/translations/cs.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "P\u0159emost\u011bn\u00ed je ji\u017e nakonfigurov\u00e1no", + "no_bridges": "\u017d\u00e1dn\u00e9 deCONZ p\u0159emost\u011bn\u00ed nebyly nalezeny", + "one_instance_only": "Komponent podporuje pouze jednu instanci deCONZ" + }, + "error": { + "no_key": "Nelze z\u00edskat kl\u00ed\u010d API" + }, + "flow_title": "Br\u00e1na deCONZ ZigBee ({host})", + "step": { + "hassio_confirm": { + "description": "Chcete nakonfigurovat slu\u017ebu Home Assistant pro p\u0159ipojen\u00ed k deCONZ br\u00e1n\u011b pomoc\u00ed hass.io {addon}?", + "title": "deCONZ Zigbee br\u00e1na prost\u0159ednictv\u00edm dopl\u0148ku Hass.io" + }, + "init": { + "title": "Definujte br\u00e1nu deCONZ" + }, + "link": { + "description": "Odemkn\u011bte br\u00e1nu deCONZ, pro registraci v Home Assistant. \n\n 1. P\u0159ejd\u011bte do nastaven\u00ed syst\u00e9mu deCONZ \n 2. Stiskn\u011bte tla\u010d\u00edtko \"Unlock Gateway\"", + "title": "Propojit s deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Hostitel", + "port": "Port" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/cy.json b/homeassistant/components/deconz/translations/cy.json new file mode 100644 index 00000000000..594ea26ee6f --- /dev/null +++ b/homeassistant/components/deconz/translations/cy.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "Pont eisoes wedi'i ffurfweddu", + "no_bridges": "Dim pontydd deCONZ wedi eu darganfod", + "one_instance_only": "Elfen dim ond yn cefnogi enghraifft deCONZ" + }, + "error": { + "no_key": "Methu cael allwedd API" + }, + "step": { + "init": { + "title": "Diffiniwch porth dad-adeiladu" + }, + "link": { + "description": "Datgloi eich porth deCONZ i gofrestru gyda Cynorthwydd Cartref.\n\n1. Ewch i osodiadau system deCONZ \n2. Bwyso botwm \"Datgloi porth\"", + "title": "Cysylltu \u00e2 deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Gwesteiwr", + "port": "Port (gwerth diofyn: '80')" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/da.json b/homeassistant/components/deconz/translations/da.json new file mode 100644 index 00000000000..348eba18ae3 --- /dev/null +++ b/homeassistant/components/deconz/translations/da.json @@ -0,0 +1,99 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge er allerede konfigureret", + "already_in_progress": "Konfigurationsflow for bro er allerede i gang.", + "no_bridges": "Ingen deConz-bridge fundet", + "not_deconz_bridge": "Ikke en deCONZ-bro", + "one_instance_only": "Komponenten underst\u00f8tter kun \u00e9n deCONZ-instans", + "updated_instance": "Opdaterede deCONZ-instans med ny v\u00e6rtadresse" + }, + "error": { + "no_key": "Kunne ikke f\u00e5 en API-n\u00f8gle" + }, + "flow_title": "deCONZ Zigbee gateway ({host})", + "step": { + "hassio_confirm": { + "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til deCONZ-gateway'en leveret af Hass.io-tilf\u00f8jelsen {addon}?", + "title": "deCONZ Zigbee-gateway via Hass.io-tilf\u00f8jelse" + }, + "init": { + "title": "Definer deCONZ-gateway" + }, + "link": { + "description": "L\u00e5s din deCONZ-gateway op for at registrere dig med Home Assistant. \n\n 1. G\u00e5 til deCONZ settings -> Gateway -> Advanced\n 2. Tryk p\u00e5 knappen \"Authenticate app\"", + "title": "Forbind med deCONZ" + }, + "manual_confirm": { + "data": { + "host": "V\u00e6rt", + "port": "Port" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Begge knapper", + "button_1": "F\u00f8rste knap", + "button_2": "Anden knap", + "button_3": "Tredje knap", + "button_4": "Fjerde knap", + "close": "Luk", + "dim_down": "D\u00e6mp ned", + "dim_up": "D\u00e6mp op", + "left": "Venstre", + "open": "\u00c5ben", + "right": "H\u00f8jre", + "side_1": "Side 1", + "side_2": "Side 2", + "side_3": "Side 3", + "side_4": "Side 4", + "side_5": "Side 5", + "side_6": "Side 6", + "turn_off": "Sluk", + "turn_on": "T\u00e6nd" + }, + "trigger_type": { + "remote_awakened": "Enheden v\u00e6kket", + "remote_button_double_press": "\"{subtype}\"-knappen er dobbeltklikket", + "remote_button_long_press": "\"{subtype}\"-knappen trykket p\u00e5 konstant", + "remote_button_long_release": "\"{subtype}\"-knappen frigivet efter langt tryk", + "remote_button_quadruple_press": "\"{subtype}\"-knappen firedobbelt-klikket", + "remote_button_quintuple_press": "\"{subtype}\"-knappen femdobbelt-klikket", + "remote_button_rotated": "Knap roteret \"{subtype}\"", + "remote_button_rotation_stopped": "Knaprotation \"{subtype}\" er stoppet", + "remote_button_short_press": "\"{subtype}\"-knappen trykket p\u00e5", + "remote_button_short_release": "\"{subtype}\"-knappen frigivet", + "remote_button_triple_press": "\"{subtype}\"-knappen tredobbeltklikkes", + "remote_double_tap": "Enheden \"{subtype}\" dobbelttappet", + "remote_double_tap_any_side": "Enhed dobbelttappet p\u00e5 enhver side", + "remote_falling": "Enheden er i frit fald", + "remote_flip_180_degrees": "Enhed vendt 180 grader", + "remote_flip_90_degrees": "Enhed vendt 90 grader", + "remote_gyro_activated": "Enhed rystet", + "remote_moved": "Enheden flyttede med \"{subtype}\" op", + "remote_moved_any_side": "Enhed flyttet med enhver side opad", + "remote_rotate_from_side_1": "Enhed roteret fra \"side 1\" til \"{subtype}\"", + "remote_rotate_from_side_2": "Enhed roteret fra \"side 2\" til \"{subtype}\"", + "remote_rotate_from_side_3": "Enhed roteret fra \"side 3\" til \"{subtype}\"", + "remote_rotate_from_side_4": "Enhed roteret fra \"side 4\" til \"{subtype}\"", + "remote_rotate_from_side_5": "Enhed roteret fra \"side 5\" til \"{subtype}\"", + "remote_rotate_from_side_6": "Enhed roteret fra \"side 6\" til \"{subtype}\"", + "remote_turned_clockwise": "Enhed drejet med uret", + "remote_turned_counter_clockwise": "Enhed drejet mod uret" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Tillad deCONZ CLIP-sensorer", + "allow_deconz_groups": "Tillad deCONZ-lysgrupper" + }, + "description": "Konfigurer synligheden af deCONZ-enhedstyper", + "title": "deCONZ-indstillinger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/de.json b/homeassistant/components/deconz/translations/de.json new file mode 100644 index 00000000000..be359a00ca8 --- /dev/null +++ b/homeassistant/components/deconz/translations/de.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge ist bereits konfiguriert", + "already_in_progress": "Der Konfigurationsablauf f\u00fcr die Bridge wird bereits ausgef\u00fchrt.", + "no_bridges": "Keine deCON-Bridges entdeckt", + "not_deconz_bridge": "Keine deCONZ Bridge entdeckt", + "one_instance_only": "Komponente unterst\u00fctzt nur eine deCONZ-Instanz", + "updated_instance": "deCONZ-Instanz mit neuer Host-Adresse aktualisiert" + }, + "error": { + "no_key": "Es konnte kein API-Schl\u00fcssel abgerufen werden" + }, + "flow_title": "deCONZ Zigbee Gateway", + "step": { + "hassio_confirm": { + "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass er eine Verbindung mit dem deCONZ Gateway herstellt, der vom Add-on hass.io {addon} bereitgestellt wird?", + "title": "deCONZ Zigbee Gateway \u00fcber das Hass.io Add-on" + }, + "init": { + "title": "Definiere das deCONZ-Gateway" + }, + "link": { + "description": "Entsperre dein deCONZ-Gateway, um es bei Home Assistant zu registrieren. \n\n 1. Gehe in die deCONZ-Systemeinstellungen \n 2. Dr\u00fccke die Taste \"Gateway entsperren\"", + "title": "Mit deCONZ verbinden" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Port" + } + }, + "manual_input": { + "data": { + "host": "Host", + "port": "Port" + }, + "title": "Konfigurieren Sie das deCONZ-Gateway" + }, + "user": { + "data": { + "host": "W\u00e4hlen Sie das erkannte deCONZ-Gateway aus" + }, + "title": "W\u00e4hlen Sie das deCONZ-Gateway" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Beide Tasten", + "bottom_buttons": "Untere Tasten", + "button_1": "Erste Taste", + "button_2": "Zweite Taste", + "button_3": "Dritte Taste", + "button_4": "Vierte Taste", + "close": "Schlie\u00dfen", + "dim_down": "Dimmer runter", + "dim_up": "Dimmer hoch", + "left": "Links", + "open": "Offen", + "right": "Rechts", + "side_1": "Seite 1", + "side_2": "Seite 2", + "side_3": "Seite 3", + "side_4": "Seite 4", + "side_5": "Seite 5", + "side_6": "Seite 6", + "top_buttons": "Obere Tasten", + "turn_off": "Ausschalten", + "turn_on": "Einschalten" + }, + "trigger_type": { + "remote_awakened": "Ger\u00e4t aufgeweckt", + "remote_button_double_press": "\"{subtype}\" Taste doppelt angeklickt", + "remote_button_long_press": "\"{subtype}\" Taste kontinuierlich gedr\u00fcckt", + "remote_button_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen", + "remote_button_quadruple_press": "\"{subtype}\" Taste vierfach geklickt", + "remote_button_quintuple_press": "\"{subtype}\" Taste f\u00fcnffach geklickt", + "remote_button_rotated": "Button gedreht \"{subtype}\".", + "remote_button_rotation_stopped": "Die Tastendrehung \"{subtype}\" wurde gestoppt", + "remote_button_short_press": "\"{subtype}\" Taste gedr\u00fcckt", + "remote_button_short_release": "\"{subtype}\" Taste losgelassen", + "remote_button_triple_press": "\"{subtype}\" Taste dreimal geklickt", + "remote_double_tap": "Ger\u00e4t \"{subtype}\" doppelt getippt", + "remote_double_tap_any_side": "Ger\u00e4t auf beliebiger Seite doppelt angetippt", + "remote_falling": "Ger\u00e4t im freien Fall", + "remote_flip_180_degrees": "Ger\u00e4t um 180 Grad gekippt", + "remote_flip_90_degrees": "Ger\u00e4t um 90 Grad gekippt", + "remote_gyro_activated": "Ger\u00e4t ersch\u00fcttert", + "remote_moved": "Ger\u00e4t mit \"{subtype}\" nach oben bewegt", + "remote_moved_any_side": "Ger\u00e4t mit beliebiger Seite nach oben bewegt", + "remote_rotate_from_side_1": "Ger\u00e4t von \"Seite 1\" auf \"{subtype}\" gedreht", + "remote_rotate_from_side_2": "Ger\u00e4t von \"Seite 2\" auf \"{subtype}\" gedreht", + "remote_rotate_from_side_3": "Ger\u00e4t von \"Seite 3\" auf \"{subtype}\" gedreht", + "remote_rotate_from_side_4": "Ger\u00e4t von \"Seite 4\" auf \"{subtype}\" gedreht", + "remote_rotate_from_side_5": "Ger\u00e4t von \"Seite 5\" auf \"{subtype}\" gedreht", + "remote_rotate_from_side_6": "Ger\u00e4t von \"Seite 6\" auf \"{subtype}\" gedreht", + "remote_turned_clockwise": "Ger\u00e4t im Uhrzeigersinn gedreht", + "remote_turned_counter_clockwise": "Ger\u00e4t gegen den Uhrzeigersinn gedreht" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "deCONZ CLIP-Sensoren zulassen", + "allow_deconz_groups": "deCONZ-Lichtgruppen zulassen" + }, + "description": "Sichtbarkeit der deCONZ-Ger\u00e4tetypen konfigurieren", + "title": "deCONZ-Optionen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/en.json b/homeassistant/components/deconz/translations/en.json new file mode 100644 index 00000000000..159171a65d2 --- /dev/null +++ b/homeassistant/components/deconz/translations/en.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge is already configured", + "already_in_progress": "Config flow for bridge is already in progress.", + "no_bridges": "No deCONZ bridges discovered", + "not_deconz_bridge": "Not a deCONZ bridge", + "one_instance_only": "Component only supports one deCONZ instance", + "updated_instance": "Updated deCONZ instance with new host address" + }, + "error": { + "no_key": "Couldn't get an API key" + }, + "flow_title": "deCONZ Zigbee gateway ({host})", + "step": { + "hassio_confirm": { + "description": "Do you want to configure Home Assistant to connect to the deCONZ gateway provided by the Hass.io add-on {addon}?", + "title": "deCONZ Zigbee gateway via Hass.io add-on" + }, + "init": { + "title": "Define deCONZ gateway" + }, + "link": { + "description": "Unlock your deCONZ gateway to register with Home Assistant.\n\n1. Go to deCONZ Settings -> Gateway -> Advanced\n2. Press \"Authenticate app\" button", + "title": "Link with deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Port" + } + }, + "manual_input": { + "data": { + "host": "Host", + "port": "Port" + }, + "title": "Configure deCONZ gateway" + }, + "user": { + "data": { + "host": "Select discovered deCONZ gateway" + }, + "title": "Select deCONZ gateway" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Both buttons", + "bottom_buttons": "Bottom buttons", + "button_1": "First button", + "button_2": "Second button", + "button_3": "Third button", + "button_4": "Fourth button", + "close": "Close", + "dim_down": "Dim down", + "dim_up": "Dim up", + "left": "Left", + "open": "Open", + "right": "Right", + "side_1": "Side 1", + "side_2": "Side 2", + "side_3": "Side 3", + "side_4": "Side 4", + "side_5": "Side 5", + "side_6": "Side 6", + "top_buttons": "Top buttons", + "turn_off": "Turn off", + "turn_on": "Turn on" + }, + "trigger_type": { + "remote_awakened": "Device awakened", + "remote_button_double_press": "\"{subtype}\" button double clicked", + "remote_button_long_press": "\"{subtype}\" button continuously pressed", + "remote_button_long_release": "\"{subtype}\" button released after long press", + "remote_button_quadruple_press": "\"{subtype}\" button quadruple clicked", + "remote_button_quintuple_press": "\"{subtype}\" button quintuple clicked", + "remote_button_rotated": "Button rotated \"{subtype}\"", + "remote_button_rotation_stopped": "Button rotation \"{subtype}\" stopped", + "remote_button_short_press": "\"{subtype}\" button pressed", + "remote_button_short_release": "\"{subtype}\" button released", + "remote_button_triple_press": "\"{subtype}\" button triple clicked", + "remote_double_tap": "Device \"{subtype}\" double tapped", + "remote_double_tap_any_side": "Device double tapped on any side", + "remote_falling": "Device in free fall", + "remote_flip_180_degrees": "Device flipped 180 degrees", + "remote_flip_90_degrees": "Device flipped 90 degrees", + "remote_gyro_activated": "Device shaken", + "remote_moved": "Device moved with \"{subtype}\" up", + "remote_moved_any_side": "Device moved with any side up", + "remote_rotate_from_side_1": "Device rotated from \"side 1\" to \"{subtype}\"", + "remote_rotate_from_side_2": "Device rotated from \"side 2\" to \"{subtype}\"", + "remote_rotate_from_side_3": "Device rotated from \"side 3\" to \"{subtype}\"", + "remote_rotate_from_side_4": "Device rotated from \"side 4\" to \"{subtype}\"", + "remote_rotate_from_side_5": "Device rotated from \"side 5\" to \"{subtype}\"", + "remote_rotate_from_side_6": "Device rotated from \"side 6\" to \"{subtype}\"", + "remote_turned_clockwise": "Device turned clockwise", + "remote_turned_counter_clockwise": "Device turned counter clockwise" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Allow deCONZ CLIP sensors", + "allow_deconz_groups": "Allow deCONZ light groups" + }, + "description": "Configure visibility of deCONZ device types", + "title": "deCONZ options" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/es-419.json b/homeassistant/components/deconz/translations/es-419.json new file mode 100644 index 00000000000..9d867b0c8e7 --- /dev/null +++ b/homeassistant/components/deconz/translations/es-419.json @@ -0,0 +1,53 @@ +{ + "config": { + "abort": { + "already_configured": "El Bridge ya est\u00e1 configurado", + "already_in_progress": "El flujo de configuraci\u00f3n para el puente ya est\u00e1 en progreso.", + "no_bridges": "No se descubrieron puentes deCONZ", + "not_deconz_bridge": "No es un puente deCONZ", + "one_instance_only": "El componente solo admite una instancia deCONZ", + "updated_instance": "Instancia deCONZ actualizada con nueva direcci\u00f3n de host" + }, + "error": { + "no_key": "No se pudo obtener una clave de API" + }, + "step": { + "hassio_confirm": { + "description": "\u00bfDesea configurar Home Assistant para conectarse a la puerta de enlace deCONZ proporcionada por el complemento hass.io {addon}?", + "title": "deCONZ Zigbee gateway a trav\u00e9s del complemento Hass.io" + }, + "init": { + "title": "Definir el gateway deCONZ" + }, + "link": { + "description": "Desbloquee su puerta de enlace deCONZ para registrarse con Home Assistant. \n\n 1. Vaya a Configuraci\u00f3n deCONZ - > Gateway - > Avanzado \n 2. Presione el bot\u00f3n \"Autenticar aplicaci\u00f3n\"", + "title": "Enlazar con deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Puerto" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Ambos botones", + "button_1": "Primer bot\u00f3n", + "button_2": "Segundo bot\u00f3n", + "button_3": "Tercer bot\u00f3n", + "button_4": "Cuarto bot\u00f3n", + "close": "Cerrar", + "left": "Izquierda", + "open": "Abrir", + "right": "Derecha", + "turn_off": "Apagar", + "turn_on": "Encender" + }, + "trigger_type": { + "remote_button_rotated": "Bot\u00f3n girado \"{subtype}\"", + "remote_gyro_activated": "Dispositivo agitado" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/es.json b/homeassistant/components/deconz/translations/es.json new file mode 100644 index 00000000000..5ef7c0cc5d9 --- /dev/null +++ b/homeassistant/components/deconz/translations/es.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "El puente ya esta configurado", + "already_in_progress": "El flujo de configuraci\u00f3n para el puente ya est\u00e1 en curso.", + "no_bridges": "No se han descubierto puentes deCONZ", + "not_deconz_bridge": "No es un puente deCONZ", + "one_instance_only": "El componente solo admite una instancia de deCONZ", + "updated_instance": "Instancia deCONZ actualizada con nueva direcci\u00f3n de host" + }, + "error": { + "no_key": "No se pudo obtener una clave API" + }, + "flow_title": "pasarela deCONZ Zigbee ({host})", + "step": { + "hassio_confirm": { + "description": "\u00bfQuieres configurar Home Assistant para que se conecte al gateway de deCONZ proporcionado por el add-on {addon} de hass.io?", + "title": "Add-on deCONZ Zigbee v\u00eda Hass.io" + }, + "init": { + "title": "Definir pasarela deCONZ" + }, + "link": { + "description": "Desbloquea tu gateway de deCONZ para registrarte con Home Assistant.\n\n1. Dir\u00edgete a deCONZ Settings -> Gateway -> Advanced\n2. Pulsa el bot\u00f3n \"Authenticate app\"", + "title": "Enlazar con deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Puerto" + } + }, + "manual_input": { + "data": { + "host": "Host", + "port": "Puerto" + }, + "title": "Configurar la puerta de enlace deCONZ" + }, + "user": { + "data": { + "host": "Seleccione la puerta de enlace descubierta deCONZ" + }, + "title": "Seleccione la puerta de enlace deCONZ" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Ambos botones", + "bottom_buttons": "Botones inferiores", + "button_1": "Primer bot\u00f3n", + "button_2": "Segundo bot\u00f3n", + "button_3": "Tercer bot\u00f3n", + "button_4": "Cuarto bot\u00f3n", + "close": "Cerrar", + "dim_down": "Bajar la intensidad", + "dim_up": "Subir la intensidad", + "left": "Izquierda", + "open": "Abierto", + "right": "Derecha", + "side_1": "Lado 1", + "side_2": "Lado 2", + "side_3": "Lado 3", + "side_4": "Lado 4", + "side_5": "Lado 5", + "side_6": "Lado 6", + "top_buttons": "Botones superiores", + "turn_off": "Apagar", + "turn_on": "Encender" + }, + "trigger_type": { + "remote_awakened": "Dispositivo despertado", + "remote_button_double_press": "Bot\u00f3n \"{subtype}\" doble pulsaci\u00f3n", + "remote_button_long_press": "Bot\u00f3n \"{subtype}\" pulsado continuamente", + "remote_button_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga", + "remote_button_quadruple_press": "Bot\u00f3n \"{subtype}\" cu\u00e1druple pulsaci\u00f3n", + "remote_button_quintuple_press": "Bot\u00f3n \"{subtype}\" qu\u00edntuple pulsaci\u00f3n", + "remote_button_rotated": "Bot\u00f3n \"{subtype}\" girado", + "remote_button_rotation_stopped": "Bot\u00f3n rotativo \"{subtype}\" detenido", + "remote_button_short_press": "Bot\u00f3n \"{subtype}\" pulsado", + "remote_button_short_release": "Bot\u00f3n \"{subtype}\" soltado", + "remote_button_triple_press": "Bot\u00f3n \"{subtype}\" triple pulsaci\u00f3n", + "remote_double_tap": "Dispositivo \" {subtype} \" doble pulsaci\u00f3n", + "remote_double_tap_any_side": "Dispositivo con doble toque en cualquier lado", + "remote_falling": "Dispositivo en ca\u00edda libre", + "remote_flip_180_degrees": "Dispositivo volteado 180 grados", + "remote_flip_90_degrees": "Dispositivo volteado 90 grados", + "remote_gyro_activated": "Dispositivo sacudido", + "remote_moved": "Dispositivo movido con \"{subtipo}\" hacia arriba", + "remote_moved_any_side": "Dispositivo movido con cualquier lado hacia arriba", + "remote_rotate_from_side_1": "Dispositivo girado del \"lado 1\" al \" {subtype} \"", + "remote_rotate_from_side_2": "Dispositivo girado del \"lado 2\" al \" {subtype} \"", + "remote_rotate_from_side_3": "Dispositivo girado del \"lado 3\" al \" {subtype} \"", + "remote_rotate_from_side_4": "Dispositivo girado del \"lado 4\" al \" {subtype} \"", + "remote_rotate_from_side_5": "Dispositivo girado del \"lado 5\" al \" {subtype} \"", + "remote_rotate_from_side_6": "Dispositivo girado de \"lado 6\" a \" {subtype} \"", + "remote_turned_clockwise": "Dispositivo girado en el sentido de las agujas del reloj", + "remote_turned_counter_clockwise": "Dispositivo girado en sentido contrario a las agujas del reloj" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Permitir sensores deCONZ CLIP", + "allow_deconz_groups": "Permitir grupos de luz deCONZ" + }, + "description": "Configurar la visibilidad de los tipos de dispositivos deCONZ", + "title": "Opciones deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/et.json b/homeassistant/components/deconz/translations/et.json new file mode 100644 index 00000000000..45bb3967060 --- /dev/null +++ b/homeassistant/components/deconz/translations/et.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "manual_confirm": { + "data": { + "host": "", + "port": "" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/fr.json b/homeassistant/components/deconz/translations/fr.json new file mode 100644 index 00000000000..b7d77ad7b1e --- /dev/null +++ b/homeassistant/components/deconz/translations/fr.json @@ -0,0 +1,105 @@ +{ + "config": { + "abort": { + "already_configured": "Ce pont est d\u00e9j\u00e0 configur\u00e9", + "already_in_progress": "Le flux de configuration pour le pont est d\u00e9j\u00e0 en cours.", + "no_bridges": "Aucun pont deCONZ n'a \u00e9t\u00e9 d\u00e9couvert", + "not_deconz_bridge": "Pas un pont deCONZ", + "one_instance_only": "Le composant prend uniquement en charge une instance deCONZ", + "updated_instance": "Instance deCONZ mise \u00e0 jour avec la nouvelle adresse d'h\u00f4te" + }, + "error": { + "no_key": "Impossible d'obtenir une cl\u00e9 d'API" + }, + "flow_title": "Passerelle deCONZ Zigbee ({host})", + "step": { + "hassio_confirm": { + "description": "Voulez-vous configurer Home Assistant pour qu'il se connecte \u00e0 la passerelle deCONZ fournie par l'add-on hass.io {addon} ?", + "title": "Passerelle deCONZ Zigbee via l'add-on Hass.io" + }, + "init": { + "title": "Initialiser la passerelle deCONZ" + }, + "link": { + "description": "D\u00e9verrouillez votre passerelle deCONZ pour vous enregistrer avec Home Assistant. \n\n 1. Acc\u00e9dez aux param\u00e8tres avanc\u00e9s du syst\u00e8me deCONZ \n 2. Cliquez sur \"D\u00e9verrouiller la passerelle\"", + "title": "Lien vers deCONZ" + }, + "manual_confirm": { + "data": { + "host": "H\u00f4te", + "port": "Port" + } + }, + "manual_input": { + "data": { + "host": "H\u00f4te", + "port": "Port" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Les deux boutons", + "button_1": "Premier bouton", + "button_2": "Deuxi\u00e8me bouton", + "button_3": "Troisi\u00e8me bouton", + "button_4": "Quatri\u00e8me bouton", + "close": "Ferm\u00e9", + "dim_down": "Assombrir", + "dim_up": "\u00c9claircir", + "left": "Gauche", + "open": "Ouvert", + "right": "Droite", + "side_1": "Face 1", + "side_2": "Face 2", + "side_3": "Face 3", + "side_4": "Face 4", + "side_5": "Face 5", + "side_6": "Face 6", + "turn_off": "\u00c9teint", + "turn_on": "Allumer" + }, + "trigger_type": { + "remote_awakened": "Appareil r\u00e9veill\u00e9", + "remote_button_double_press": "Double clic sur le bouton \" {subtype} \"", + "remote_button_long_press": "Appuyer en continu sur le bouton \" {subtype} \"", + "remote_button_long_release": "Bouton \"{subtype}\" rel\u00e2ch\u00e9 apr\u00e8s appui long", + "remote_button_quadruple_press": "Quadruple clic sur le bouton \" {subtype} \"", + "remote_button_quintuple_press": "Quintuple clic sur le bouton \" {subtype} \"", + "remote_button_rotated": "Bouton \"{subtype}\" tourn\u00e9", + "remote_button_rotation_stopped": "La rotation du bouton \" {subtype} \" s'est arr\u00eat\u00e9e", + "remote_button_short_press": "Bouton \"{subtype}\" appuy\u00e9", + "remote_button_short_release": "Bouton \"{subtype}\" rel\u00e2ch\u00e9", + "remote_button_triple_press": "Triple clic sur le bouton \" {subtype} \"", + "remote_double_tap": "Appareil \"{subtype}\" tapot\u00e9 deux fois", + "remote_double_tap_any_side": "Appareil double tap\u00e9 de n\u2019importe quel c\u00f4t\u00e9", + "remote_falling": "Appareil en chute libre", + "remote_flip_180_degrees": "Dispositif retourn\u00e9 \u00e0 180 degr\u00e9s", + "remote_flip_90_degrees": "Dispositif retourn\u00e9 \u00e0 90 degr\u00e9s", + "remote_gyro_activated": "Appareil secou\u00e9", + "remote_moved": "Appareil d\u00e9plac\u00e9 avec \"{subtype}\" vers le haut", + "remote_moved_any_side": "Dispositif d\u00e9plac\u00e9 avec un c\u00f4t\u00e9 quelconque vers le haut", + "remote_rotate_from_side_1": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 1\" \u00e0 \"{subtype}\"", + "remote_rotate_from_side_2": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 2\" \u00e0 \"{subtype}\"", + "remote_rotate_from_side_3": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 3\" \u00e0 \"{subtype}\"", + "remote_rotate_from_side_4": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 4\" \u00e0 \"{subtype}\"", + "remote_rotate_from_side_5": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 5\" \u00e0 \"{subtype}\"", + "remote_rotate_from_side_6": "Appareil tourn\u00e9 de \"c\u00f4t\u00e9 6\" \u00e0 \"{subtype}\"", + "remote_turned_clockwise": "Appareil tourn\u00e9 dans le sens horaire", + "remote_turned_counter_clockwise": "Appareil tourn\u00e9 dans le sens antihoraire" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Autoriser les capteurs deCONZ CLIP", + "allow_deconz_groups": "Autoriser les groupes de lumi\u00e8res deCONZ" + }, + "description": "Configurer la visibilit\u00e9 des appareils de type deCONZ", + "title": "Options deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/he.json b/homeassistant/components/deconz/translations/he.json new file mode 100644 index 00000000000..3a6dff48933 --- /dev/null +++ b/homeassistant/components/deconz/translations/he.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", + "no_bridges": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05d2\u05e9\u05e8\u05d9 deCONZ", + "one_instance_only": "\u05d4\u05e8\u05db\u05d9\u05d1 \u05ea\u05d5\u05de\u05da \u05e8\u05e7 \u05d0\u05d7\u05d3 deCONZ \u05dc\u05de\u05e9\u05dc" + }, + "error": { + "no_key": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05e7\u05d1\u05dc \u05de\u05e4\u05ea\u05d7 API" + }, + "step": { + "init": { + "title": "\u05d4\u05d2\u05d3\u05e8 \u05de\u05d2\u05e9\u05e8 deCONZ Zigbee" + }, + "link": { + "description": "\u05d1\u05d8\u05dc \u05d0\u05ea \u05e0\u05e2\u05d9\u05dc\u05ea \u05d4\u05de\u05e9\u05e8 deCONZ \u05e9\u05dc\u05da \u05db\u05d3\u05d9 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd Home Assistant.\n\n 1. \u05e2\u05d1\u05d5\u05e8 \u05d0\u05dc \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05de\u05e2\u05e8\u05db\u05ea deCONZ \n .2 \u05dc\u05d7\u05e5 \u05e2\u05dc \"Unlock Gateway\"", + "title": "\u05e7\u05e9\u05e8 \u05e2\u05dd deCONZ" + }, + "manual_confirm": { + "data": { + "host": "\u05de\u05d0\u05e8\u05d7", + "port": "\u05e4\u05d5\u05e8\u05d8 (\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc: '80')" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/hr.json b/homeassistant/components/deconz/translations/hr.json new file mode 100644 index 00000000000..50fec879cb6 --- /dev/null +++ b/homeassistant/components/deconz/translations/hr.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "manual_confirm": { + "data": { + "host": "Host", + "port": "Port" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/hu.json b/homeassistant/components/deconz/translations/hu.json new file mode 100644 index 00000000000..216d7ddf1a0 --- /dev/null +++ b/homeassistant/components/deconz/translations/hu.json @@ -0,0 +1,97 @@ +{ + "config": { + "abort": { + "already_configured": "A bridge m\u00e1r konfigur\u00e1lva van", + "already_in_progress": "Az \u00e1tj\u00e1r\u00f3 konfigur\u00e1ci\u00f3s folyamata m\u00e1r folyamatban van.", + "no_bridges": "Nem tal\u00e1ltam deCONZ bridget", + "not_deconz_bridge": "Nem egy deCONZ \u00e1tj\u00e1r\u00f3", + "one_instance_only": "Ez a komponens csak egy deCONZ egys\u00e9get t\u00e1mogat", + "updated_instance": "A deCONZ-p\u00e9ld\u00e1ny \u00faj \u00e1llom\u00e1sc\u00edmmel friss\u00edtve" + }, + "error": { + "no_key": "API kulcs lek\u00e9r\u00e9se nem siker\u00fclt" + }, + "flow_title": "deCONZ Zigbee \u00e1tj\u00e1r\u00f3 ({host})", + "step": { + "hassio_confirm": { + "title": "deCONZ Zigbee \u00e1tj\u00e1r\u00f3 a Hass.io kieg\u00e9sz\u00edt\u0151 seg\u00edts\u00e9g\u00e9vel" + }, + "init": { + "title": "deCONZ \u00e1tj\u00e1r\u00f3 megad\u00e1sa" + }, + "link": { + "description": "Oldja fel a deCONZ \u00e1tj\u00e1r\u00f3t a Home Assistant-ban val\u00f3 regisztr\u00e1l\u00e1shoz.\n\n1. Menjen a deCONZ rendszer be\u00e1ll\u00edt\u00e1sokhoz\n2. Nyomja meg az \"\u00c1tj\u00e1r\u00f3 felold\u00e1sa\" gombot", + "title": "Kapcsol\u00f3d\u00e1s a deCONZ-hoz" + }, + "manual_confirm": { + "data": { + "host": "Hoszt", + "port": "Port" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Mindk\u00e9t gomb", + "button_1": "Els\u0151 gomb", + "button_2": "M\u00e1sodik gomb", + "button_3": "Harmadik gomb", + "button_4": "Negyedik gomb", + "close": "Bez\u00e1r\u00e1s", + "dim_down": "S\u00f6t\u00e9t\u00edt", + "dim_up": "Vil\u00e1gos\u00edt", + "left": "Balra", + "open": "Nyitva", + "right": "Jobbra", + "side_1": "1. oldal", + "side_2": "2. oldal", + "side_3": "3. oldal", + "side_4": "4. oldal", + "side_5": "5. oldal", + "side_6": "6. oldal", + "turn_off": "Kikapcsolva", + "turn_on": "Bekapcsolva" + }, + "trigger_type": { + "remote_awakened": "A k\u00e9sz\u00fcl\u00e9k fel\u00e9bredt", + "remote_button_double_press": "\" {subtype} \" gombra k\u00e9tszer kattintottak", + "remote_button_long_press": "A \" {subtype} \" gomb folyamatosan lenyomva", + "remote_button_long_release": "A \" {subtype} \" gomb hossz\u00fa megnyom\u00e1s ut\u00e1n elengedve", + "remote_button_quadruple_press": "\" {subtype} \" gombra n\u00e9gyszer kattintottak", + "remote_button_quintuple_press": "\" {subtype} \" gombra \u00f6tsz\u00f6r kattintottak", + "remote_button_rotated": "A gomb elforgatva: \" {subtype} \"", + "remote_button_rotation_stopped": "A (z) \" {subtype} \" gomb forg\u00e1sa le\u00e1llt", + "remote_button_short_press": "\" {subtype} \" gomb lenyomva", + "remote_button_short_release": "\"{alt\u00edpus}\" gomb elengedve", + "remote_button_triple_press": "\" {subtype} \" gombra h\u00e1romszor kattintottak", + "remote_double_tap": "Az \" {subtype} \" eszk\u00f6z dupla kattint\u00e1sa", + "remote_double_tap_any_side": "A k\u00e9sz\u00fcl\u00e9k b\u00e1rmelyik oldal\u00e1n dupl\u00e1n koppint.", + "remote_falling": "K\u00e9sz\u00fcl\u00e9k szabades\u00e9sben", + "remote_flip_180_degrees": "180 fokkal megd\u00f6nt\u00f6tt eszk\u00f6z", + "remote_flip_90_degrees": "90 fokkal megd\u00f6nt\u00f6tt eszk\u00f6z", + "remote_gyro_activated": "A k\u00e9sz\u00fcl\u00e9k meg lett r\u00e1zva", + "remote_moved": "Az eszk\u00f6z a \" {subtype} \"-lal felfel\u00e9 mozgatva", + "remote_moved_any_side": "A k\u00e9sz\u00fcl\u00e9k valamelyik oldal\u00e1val felfel\u00e9 mozogott", + "remote_rotate_from_side_1": "Az eszk\u00f6z a \"1. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", + "remote_rotate_from_side_2": "Az eszk\u00f6z a \"2. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", + "remote_rotate_from_side_3": "Az eszk\u00f6z a \"3. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", + "remote_rotate_from_side_4": "Az eszk\u00f6z a \"4. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", + "remote_rotate_from_side_5": "Az eszk\u00f6z a \"5. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", + "remote_rotate_from_side_6": "Az eszk\u00f6z a \"6. oldalr\u00f3l\" a \" {subtype} \" -ra fordult", + "remote_turned_clockwise": "A k\u00e9sz\u00fcl\u00e9k az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val megegyez\u0151en fordult", + "remote_turned_counter_clockwise": "A k\u00e9sz\u00fcl\u00e9k az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val ellent\u00e9tes ir\u00e1nyban fordult" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Enged\u00e9lyezze a deCONZ CLIP \u00e9rz\u00e9kel\u0151ket", + "allow_deconz_groups": "DeCONZ f\u00e9nycsoportok enged\u00e9lyez\u00e9se" + }, + "description": "A deCONZ eszk\u00f6zt\u00edpusok l\u00e1that\u00f3s\u00e1g\u00e1nak konfigur\u00e1l\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/id.json b/homeassistant/components/deconz/translations/id.json new file mode 100644 index 00000000000..ba8b5d76869 --- /dev/null +++ b/homeassistant/components/deconz/translations/id.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge sudah dikonfigurasi", + "no_bridges": "deCONZ bridges tidak ditemukan", + "one_instance_only": "Komponen hanya mendukung satu instance deCONZ" + }, + "error": { + "no_key": "Tidak bisa mendapatkan kunci API" + }, + "step": { + "init": { + "title": "Tentukan deCONZ gateway" + }, + "link": { + "description": "Buka gerbang deCONZ Anda untuk mendaftar dengan Home Assistant. \n\n 1. Pergi ke pengaturan sistem deCONZ \n 2. Tekan tombol \"Buka Kunci Gateway\"", + "title": "Tautan dengan deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Port (nilai default: '80')" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/it.json b/homeassistant/components/deconz/translations/it.json new file mode 100644 index 00000000000..55f20056020 --- /dev/null +++ b/homeassistant/components/deconz/translations/it.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Il Bridge \u00e8 gi\u00e0 configurato", + "already_in_progress": "Il flusso di configurazione per bridge \u00e8 gi\u00e0 in corso.", + "no_bridges": "Nessun bridge deCONZ rilevato", + "not_deconz_bridge": "Non \u00e8 un bridge deCONZ", + "one_instance_only": "Il componente supporto solo un'istanza di deCONZ", + "updated_instance": "Istanza deCONZ aggiornata con nuovo indirizzo host" + }, + "error": { + "no_key": "Impossibile ottenere una API key" + }, + "flow_title": "Gateway Zigbee deCONZ ({host})", + "step": { + "hassio_confirm": { + "description": "Vuoi configurare Home Assistant per connettersi al gateway deCONZ fornito dal componente aggiuntivo di Hass.io: {addon}?", + "title": "Gateway Pigmee deCONZ tramite il componente aggiuntivo di Hass.io" + }, + "init": { + "title": "Definisci il gateway deCONZ" + }, + "link": { + "description": "Sblocca il tuo gateway deCONZ per registrarti con Home Assistant.\n\n1. Vai a Impostazioni deCONZ -> Gateway -> Avanzate\n2. Premere il pulsante \"Autentica app\"", + "title": "Collega con deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Porta" + } + }, + "manual_input": { + "data": { + "host": "Host", + "port": "Porta" + }, + "title": "Configurare il gateway deCONZ" + }, + "user": { + "data": { + "host": "Selezionare il gateway deCONZ rilevato" + }, + "title": "Selezionare il gateway deCONZ" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Entrambi", + "bottom_buttons": "Pulsanti inferiori", + "button_1": "Primo", + "button_2": "Secondo pulsante", + "button_3": "Terzo pulsante", + "button_4": "Quarto pulsante", + "close": "Chiudere", + "dim_down": "Diminuire luminosit\u00e0", + "dim_up": "Aumentare luminosit\u00e0", + "left": "Sinistra", + "open": "Aperto", + "right": "Destra", + "side_1": "Lato 1", + "side_2": "Lato 2", + "side_3": "Lato 3", + "side_4": "Lato 4", + "side_5": "Lato 5", + "side_6": "Lato 6", + "top_buttons": "Pulsanti superiori", + "turn_off": "Spegnere", + "turn_on": "Accendere" + }, + "trigger_type": { + "remote_awakened": "Dispositivo risvegliato", + "remote_button_double_press": "Pulsante \"{subtype}\" cliccato due volte", + "remote_button_long_press": "Pulsante \"{subtype}\" premuto continuamente", + "remote_button_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione", + "remote_button_quadruple_press": "Pulsante \"{subtype}\" cliccato quattro volte", + "remote_button_quintuple_press": "Pulsante \"{subtype}\" cliccato cinque volte", + "remote_button_rotated": "Pulsante ruotato \"{subtype}\"", + "remote_button_rotation_stopped": "La rotazione dei pulsanti \"{subtype}\" si \u00e8 arrestata", + "remote_button_short_press": "Pulsante \"{subtype}\" premuto", + "remote_button_short_release": "Pulsante \"{subtype}\" rilasciato", + "remote_button_triple_press": "Pulsante \"{subtype}\" cliccato tre volte", + "remote_double_tap": "Dispositivo \"{subtype}\" toccato due volte", + "remote_double_tap_any_side": "Dispositivo toccato due volte su qualsiasi lato", + "remote_falling": "Dispositivo in caduta libera", + "remote_flip_180_degrees": "Dispositivo capovolto di 180 gradi", + "remote_flip_90_degrees": "Dispositivo capovolto di 90 gradi", + "remote_gyro_activated": "Dispositivo in vibrazione", + "remote_moved": "Dispositivo spostato con \"{subtype}\" verso l'alto", + "remote_moved_any_side": "Dispositivo spostato con qualsiasi lato verso l'alto", + "remote_rotate_from_side_1": "Dispositivo ruotato da \"lato 1\" a \"{subtype}\"", + "remote_rotate_from_side_2": "Dispositivo ruotato da \"lato 2\" a \"{subtype}\"", + "remote_rotate_from_side_3": "Dispositivo ruotato da \"lato 3\" a \"{subtype}\"", + "remote_rotate_from_side_4": "Dispositivo ruotato da \"lato 4\" a \"{subtype}\"", + "remote_rotate_from_side_5": "Dispositivo ruotato da \"lato 5\" a \"{subtype}\"", + "remote_rotate_from_side_6": "Dispositivo ruotato da \"lato 6\" a \"{subtype}\"", + "remote_turned_clockwise": "Dispositivo ruotato in senso orario", + "remote_turned_counter_clockwise": "Dispositivo ruotato in senso antiorario" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Consentire sensori CLIP deCONZ", + "allow_deconz_groups": "Consentire gruppi luce deCONZ" + }, + "description": "Configurare la visibilit\u00e0 dei tipi di dispositivi deCONZ", + "title": "Opzioni deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/ja.json b/homeassistant/components/deconz/translations/ja.json new file mode 100644 index 00000000000..a1d40f49d34 --- /dev/null +++ b/homeassistant/components/deconz/translations/ja.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "no_key": "API\u30ad\u30fc\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f" + }, + "step": { + "manual_confirm": { + "data": { + "host": "\u30db\u30b9\u30c8", + "port": "\u30dd\u30fc\u30c8\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\uff1a'80'\uff09" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/ko.json b/homeassistant/components/deconz/translations/ko.json new file mode 100644 index 00000000000..e6e22abc332 --- /dev/null +++ b/homeassistant/components/deconz/translations/ko.json @@ -0,0 +1,107 @@ +{ + "config": { + "abort": { + "already_configured": "\ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "\ube0c\ub9bf\uc9c0 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", + "no_bridges": "\ubc1c\uacac\ub41c deCONZ \ube0c\ub9bf\uc9c0\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", + "not_deconz_bridge": "deCONZ \ube0c\ub9bf\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4", + "one_instance_only": "\uad6c\uc131\uc694\uc18c\ub294 \ud558\ub098\uc758 deCONZ \uc778\uc2a4\ud134\uc2a4\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4", + "updated_instance": "deCONZ \uc778\uc2a4\ud134\uc2a4\ub97c \uc0c8\ub85c\uc6b4 \ud638\uc2a4\ud2b8 \uc8fc\uc18c\ub85c \uc5c5\ub370\uc774\ud2b8\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "no_key": "API \ud0a4\ub97c \uac00\uc838\uc62c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" + }, + "flow_title": "deCONZ Zigbee \uac8c\uc774\ud2b8\uc6e8\uc774 ({host})", + "step": { + "hassio_confirm": { + "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc5d0\uc11c \uc81c\uacf5\ub41c deCONZ \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Hass.io \uc560\ub4dc\uc628\uc758 deCONZ Zigbee \uac8c\uc774\ud2b8\uc6e8\uc774" + }, + "init": { + "title": "deCONZ \uac8c\uc774\ud2b8\uc6e8\uc774 \uc815\uc758" + }, + "link": { + "description": "deCONZ \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \uc5b8\ub77d\ud558\uc5ec Home Assistant \uc5d0 \uc5f0\uacb0\ud558\uae30.\n\n1. deCONZ \uc2dc\uc2a4\ud15c \uc124\uc815\uc73c\ub85c \uc774\ub3d9\ud558\uc138\uc694\n2. \"Authenticate app\" \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694", + "title": "deCONZ\uc640 \uc5f0\uacb0" + }, + "manual_confirm": { + "data": { + "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", + "button_4": "\ub124 \ubc88\uc9f8", + "close": "\ub2eb\uae30", + "dim_down": "\uc5b4\ub461\uac8c \ud558\uae30", + "dim_up": "\ubc1d\uac8c \ud558\uae30", + "left": "\uc67c\ucabd", + "open": "\uc5f4\uae30", + "right": "\uc624\ub978\ucabd", + "side_1": "\uba74 1", + "side_2": "\uba74 2", + "side_3": "\uba74 3", + "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" + }, + "trigger_type": { + "remote_awakened": "\uae30\uae30 \uc808\uc804 \ubaa8\ub4dc \ud574\uc81c\ub420 \ub54c", + "remote_button_double_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c", + "remote_button_long_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c", + "remote_button_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", + "remote_button_quadruple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c", + "remote_button_quintuple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \ub54c", + "remote_button_rotated": "\"{subtype}\" \ub85c \ubc84\ud2bc\uc774 \ud68c\uc804\ub420 \ub54c", + "remote_button_rotation_stopped": "\"{subtype}\" \ub85c \ubc84\ud2bc\uc774 \ud68c\uc804\uc744 \uba48\ucd9c \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_triple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c", + "remote_double_tap": "\uae30\uae30\uc758 \"{subtype}\" \uac00 \ub354\ube14 \ud0ed \ub420 \ub54c", + "remote_double_tap_any_side": "\uae30\uae30\uc758 \uc544\ubb34 \uba74\uc774 \ub354\ube14 \ud0ed \ub420 \ub54c", + "remote_falling": "\uae30\uae30\uac00 \ub5a8\uc5b4\uc9c8 \ub54c", + "remote_flip_180_degrees": "\uae30\uae30\uac00 180\ub3c4\ub85c \ub4a4\uc9d1\uc5b4\uc9c8 \ub54c", + "remote_flip_90_degrees": "\uae30\uae30\uac00 90\ub3c4\ub85c \ub4a4\uc9d1\uc5b4\uc9c8 \ub54c", + "remote_gyro_activated": "\uae30\uae30\uac00 \ud754\ub4e4\ub9b4 \ub54c", + "remote_moved": "\uae30\uae30\uc758 \"{subtype}\" \uac00 \uc704\ub85c \ud5a5\ud55c\ucc44\ub85c \uc6c0\uc9c1\uc77c \ub54c", + "remote_moved_any_side": "\uae30\uae30\uc758 \uc544\ubb34 \uba74\uc774\ub098 \uc704\ub85c \ud5a5\ud55c\ucc44\ub85c \uc6c0\uc9c1\uc77c \ub54c", + "remote_rotate_from_side_1": "\"\uba74 1\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_rotate_from_side_2": "\"\uba74 2\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_rotate_from_side_3": "\"\uba74 3\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_rotate_from_side_4": "\"\uba74 4\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_rotate_from_side_5": "\"\uba74 5\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_rotate_from_side_6": "\"\uba74 6\" \uc5d0\uc11c \"{subtype}\" \ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_turned_clockwise": "\uc2dc\uacc4 \ubc29\ud5a5\uc73c\ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "remote_turned_counter_clockwise": "\ubc18\uc2dc\uacc4 \ubc29\ud5a5\uc73c\ub85c \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "deCONZ CLIP \uc13c\uc11c \ud5c8\uc6a9", + "allow_deconz_groups": "deCONZ \ub77c\uc774\ud2b8 \uadf8\ub8f9 \ud5c8\uc6a9" + }, + "description": "deCONZ \uae30\uae30 \uc720\ud615\uc758 \ud45c\uc2dc \uc5ec\ubd80 \uad6c\uc131", + "title": "deCONZ \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/lb.json b/homeassistant/components/deconz/translations/lb.json new file mode 100644 index 00000000000..c6f2dfbf189 --- /dev/null +++ b/homeassistant/components/deconz/translations/lb.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge ass schon konfigur\u00e9iert", + "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", + "no_bridges": "Keng dECONZ bridges fonnt", + "not_deconz_bridge": "Keng deCONZ Bridge", + "one_instance_only": "Komponent \u00ebnnerst\u00ebtzt n\u00ebmmen eng deCONZ Instanz", + "updated_instance": "deCONZ Instanz gouf mat der neier Adress vum Apparat ge\u00e4nnert" + }, + "error": { + "no_key": "Konnt keen API Schl\u00ebssel kr\u00e9ien" + }, + "flow_title": "deCONZ Zigbee gateway ({host})", + "step": { + "hassio_confirm": { + "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mat der deCONZ gateway ze verbannen d\u00e9i vum hass.io add-on {addon} bereet gestallt g\u00ebtt?", + "title": "deCONZ Zigbee gateway via Hass.io add-on" + }, + "init": { + "title": "deCONZ gateway d\u00e9fin\u00e9ieren" + }, + "link": { + "description": "Entsperrt \u00e4r deCONZ gateway fir se mat Home Assistant ze registr\u00e9ieren.\n\n1. Gidd op deCONZ System Astellungen\n2. Dr\u00e9ckt \"Unlock\" Gateway Kn\u00e4ppchen", + "title": "Link mat deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Port" + } + }, + "manual_input": { + "data": { + "host": "Apparat", + "port": "Port" + }, + "title": "deCONZ Gateway ariichten" + }, + "user": { + "data": { + "host": "Entdeckte deCONZ Gateway auswielen" + }, + "title": "deCONZ Gateway auswielen" + } + } + }, + "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", + "button_4": "V\u00e9ierte Kn\u00e4ppchen", + "close": "Zoumaachen", + "dim_down": "Verd\u00e4ischteren", + "dim_up": "Erhellen", + "left": "L\u00e9nks", + "open": "Op", + "right": "Riets", + "side_1": "S\u00e4it 1", + "side_2": "S\u00e4it 2", + "side_3": "S\u00e4it 3", + "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" + }, + "trigger_type": { + "remote_awakened": "Apparat erw\u00e4cht", + "remote_button_double_press": "\"{subtype}\" Kn\u00e4ppche zwee mol gedr\u00e9ckt", + "remote_button_long_press": "\"{subtype}\" Kn\u00e4ppche permanent gedr\u00e9ckt", + "remote_button_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss", + "remote_button_quadruple_press": "\"{subtype}\" Kn\u00e4ppche v\u00e9ier mol gedr\u00e9ckt", + "remote_button_quintuple_press": "\"{subtype}\" Kn\u00e4ppche f\u00ebnnef mol gedr\u00e9ckt", + "remote_button_rotated": "Kn\u00e4ppche gedr\u00e9int \"{subtype}\"", + "remote_button_rotation_stopped": "Kn\u00e4ppchen Rotatioun \"{subtype}\" gestoppt", + "remote_button_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt", + "remote_button_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss", + "remote_button_triple_press": "\"{subtype}\" Kn\u00e4ppche dr\u00e4imol gedr\u00e9ckt", + "remote_double_tap": "Apparat \"{subtype}\" zwee mol gedr\u00e9ckt", + "remote_double_tap_any_side": "Apparat gouf 2 mol ugetippt op enger S\u00e4it", + "remote_falling": "Apparat am fr\u00e4ie Fall", + "remote_flip_180_degrees": "Apparat \u00ebm 180 Grad gedr\u00e9int", + "remote_flip_90_degrees": "Apparat \u00ebm 90 Grad gedr\u00e9int", + "remote_gyro_activated": "Apparat ger\u00ebselt", + "remote_moved": "Apparat beweegt mat \"{subtype}\" erop", + "remote_moved_any_side": "Apparat gouf mat enger S\u00e4it bewegt", + "remote_rotate_from_side_1": "Apparat rot\u00e9iert vun der \"S\u00e4it 1\" op \"{subtype}\"", + "remote_rotate_from_side_2": "Apparat rot\u00e9iert vun der \"S\u00e4it 2\" op \"{subtype}\"", + "remote_rotate_from_side_3": "Apparat rot\u00e9iert vun der \"S\u00e4it 3\" op \"{subtype}\"", + "remote_rotate_from_side_4": "Apparat rot\u00e9iert vun der \"S\u00e4it 4\" op \"{subtype}\"", + "remote_rotate_from_side_5": "Apparat rot\u00e9iert vun der \"S\u00e4it 5\" op \"{subtype}\"", + "remote_rotate_from_side_6": "Apparat rot\u00e9iert vun der \"S\u00e4it\" 6 op \"{subtype}\"", + "remote_turned_clockwise": "Apparat mam Auere Wee gedr\u00e9int", + "remote_turned_counter_clockwise": "Apparat g\u00e9int den Auere Wee gedr\u00e9int" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "deCONZ Clip Sensoren erlaben", + "allow_deconz_groups": "deCONZ Luucht Gruppen erlaben" + }, + "description": "Visibilit\u00e9it vun deCONZ Apparater konfigur\u00e9ieren", + "title": "deCONZ Optiounen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/.translations/lv.json b/homeassistant/components/deconz/translations/lv.json similarity index 100% rename from homeassistant/components/deconz/.translations/lv.json rename to homeassistant/components/deconz/translations/lv.json diff --git a/homeassistant/components/deconz/translations/nl.json b/homeassistant/components/deconz/translations/nl.json new file mode 100644 index 00000000000..d9d64070c88 --- /dev/null +++ b/homeassistant/components/deconz/translations/nl.json @@ -0,0 +1,112 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge is al geconfigureerd", + "already_in_progress": "Configuratiestroom voor bridge wordt al ingesteld.", + "no_bridges": "Geen deCONZ bruggen ontdekt", + "not_deconz_bridge": "Dit is geen deCONZ bridge", + "one_instance_only": "Component ondersteunt slechts \u00e9\u00e9n deCONZ instance", + "updated_instance": "DeCONZ-instantie bijgewerkt met nieuw host-adres" + }, + "error": { + "no_key": "Kon geen API-sleutel ophalen" + }, + "flow_title": "deCONZ Zigbee gateway ( {host} )", + "step": { + "hassio_confirm": { + "description": "Wilt u de Home Assistant configureren om verbinding te maken met de deCONZ gateway van de hass.io add-on {addon}?", + "title": "deCONZ Zigbee Gateway via Hass.io add-on" + }, + "init": { + "title": "Definieer deCONZ gateway" + }, + "link": { + "description": "Ontgrendel je deCONZ gateway om te registreren met Home Assistant.\n\n1. Ga naar deCONZ systeeminstellingen (Instellingen -> Gateway -> Geavanceerd)\n2. Druk op de knop \"Gateway ontgrendelen\"", + "title": "Koppel met deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Host", + "port": "Poort" + } + }, + "manual_input": { + "data": { + "host": "Host", + "port": "Poort" + }, + "title": "Configureer deCONZ gateway" + }, + "user": { + "data": { + "host": "Selecteer gevonden deCONZ gateway" + }, + "title": "Selecteer DeCONZ gateway" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Beide knoppen", + "button_1": "Eerste knop", + "button_2": "Tweede knop", + "button_3": "Derde knop", + "button_4": "Vierde knop", + "close": "Sluiten", + "dim_down": "Dim omlaag", + "dim_up": "Dim omhoog", + "left": "Links", + "open": "Open", + "right": "Rechts", + "side_1": "Zijde 1", + "side_2": "Zijde 2", + "side_3": "Zijde 3", + "side_4": "Zijde 4", + "side_5": "Zijde 5", + "side_6": "Zijde 6", + "turn_off": "Uitschakelen", + "turn_on": "Inschakelen" + }, + "trigger_type": { + "remote_awakened": "Apparaat is gewekt", + "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", + "remote_button_quadruple_press": "\" {subtype} \" knop viervoudig aangeklikt", + "remote_button_quintuple_press": "\" {subtype} \" knop vijf keer aangeklikt", + "remote_button_rotated": "Knop gedraaid \" {subtype} \"", + "remote_button_rotation_stopped": "Knoprotatie \" {subtype} \" gestopt", + "remote_button_short_press": "\" {subtype} \" knop ingedrukt", + "remote_button_short_release": "\"{subtype}\" knop losgelaten", + "remote_button_triple_press": "\" {subtype} \" knop driemaal geklikt", + "remote_double_tap": "Apparaat \"{subtype}\" dubbel getikt", + "remote_double_tap_any_side": "Apparaat dubbel getikt aan elke kant", + "remote_falling": "Apparaat in vrije val", + "remote_flip_180_degrees": "Apparaat 180 graden omgedraaid", + "remote_flip_90_degrees": "Apparaat 90 graden omgedraaid", + "remote_gyro_activated": "Apparaat geschud", + "remote_moved": "Apparaat verplaatst met \"{subtype}\" omhoog", + "remote_moved_any_side": "Apparaat gedraaid met elke kant naar boven", + "remote_rotate_from_side_1": "Apparaat gedraaid van \"zijde 1\" naar \"{subtype}\"\".", + "remote_rotate_from_side_2": "Apparaat gedraaid van \"zijde 2\" naar \"{subtype}\"\".", + "remote_rotate_from_side_3": "Apparaat gedraaid van \"zijde 3\" naar \" {subtype} \"", + "remote_rotate_from_side_4": "Apparaat gedraaid van \"zijde 4\" naar \" {subtype} \"", + "remote_rotate_from_side_5": "Apparaat gedraaid van \"zijde 5\" naar \" {subtype} \"", + "remote_rotate_from_side_6": "Apparaat gedraaid van \"zijde 6\" naar \" {subtype} \"", + "remote_turned_clockwise": "Apparaat met de klok mee gedraaid", + "remote_turned_counter_clockwise": "Apparaat tegen de klok in gedraaid" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "DeCONZ CLIP sensoren toestaan", + "allow_deconz_groups": "Sta deCONZ-lichtgroepen toe" + }, + "description": "Configureer de zichtbaarheid van deCONZ-apparaattypen", + "title": "deCONZ opties" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/nn.json b/homeassistant/components/deconz/translations/nn.json new file mode 100644 index 00000000000..d6d73478a0b --- /dev/null +++ b/homeassistant/components/deconz/translations/nn.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "Brua er allereie konfigurert", + "no_bridges": "Oppdaga ingen deCONZ-bruer", + "one_instance_only": "Komponenten st\u00f8ttar berre \u00e9in deCONZ-instans" + }, + "error": { + "no_key": "Kunne ikkje f\u00e5 ein API-n\u00f8kkel" + }, + "step": { + "init": { + "title": "Definer deCONZ-gateway" + }, + "link": { + "description": "L\u00e5s opp deCONZ-gatewayen din for \u00e5 registrere den med Home Assistant.\n\n1. G\u00e5 til systeminnstillingane til deCONZ\n2. Trykk p\u00e5 \"L\u00e5s opp gateway\"-knappen", + "title": "Link med deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Vert", + "port": "Port (standardverdi: '80')" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/no.json b/homeassistant/components/deconz/translations/no.json new file mode 100644 index 00000000000..c743774c41b --- /dev/null +++ b/homeassistant/components/deconz/translations/no.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Broen er allerede konfigurert", + "already_in_progress": "Konfigurasjonsflyt for bro p\u00e5g\u00e5r allerede.", + "no_bridges": "Ingen deCONZ broer oppdaget", + "not_deconz_bridge": "Ikke en deCONZ bro", + "one_instance_only": "Komponenten st\u00f8tter bare \u00e9n deCONZ forekomst", + "updated_instance": "Oppdatert deCONZ forekomst med ny vertsadresse" + }, + "error": { + "no_key": "Kunne ikke f\u00e5 en API-n\u00f8kkel" + }, + "flow_title": "deCONZ Zigbee gateway ({host})", + "step": { + "hassio_confirm": { + "description": "Vil du konfigurere Home Assistant til \u00e5 koble seg til deCONZ-gateway levert av Hass.io-tillegget {addon} ?", + "title": "deCONZ Zigbee gateway via Hass.io tillegg" + }, + "init": { + "title": "Definer deCONZ-gatewayen" + }, + "link": { + "description": "L\u00e5s opp deCONZ-gatewayen din for \u00e5 registrere deg med Home Assistant. \n\n 1. G\u00e5 til deCONZ-systeminnstillinger -> Gateway -> Avansert \n 2. Trykk p\u00e5 \"L\u00e5s opp gateway\" knappen", + "title": "Koble til deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Vert", + "port": "" + } + }, + "manual_input": { + "data": { + "host": "Vert", + "port": "Port" + }, + "title": "Konfigurer deCONZ gateway" + }, + "user": { + "data": { + "host": "Velg oppdaget deCONZ gateway" + }, + "title": "Velg deCONZ gateway" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Begge knappene", + "bottom_buttons": "Nederste knappene", + "button_1": "F\u00f8rste knapp", + "button_2": "Andre knapp", + "button_3": "Tredje knapp", + "button_4": "Fjerde knapp", + "close": "Lukk", + "dim_down": "Dimm ned", + "dim_up": "Dimm opp", + "left": "Venstre", + "open": "\u00c5pen", + "right": "H\u00f8yre", + "side_1": "Side 1", + "side_2": "Side 2", + "side_3": "Side 3", + "side_4": "Side 4", + "side_5": "Side 5", + "side_6": "Side 6", + "top_buttons": "\u00d8verste knappene", + "turn_off": "Skru av", + "turn_on": "Sl\u00e5 p\u00e5" + }, + "trigger_type": { + "remote_awakened": "Enheten ble vekket", + "remote_button_double_press": "\"{subtype}\"-knappen ble dobbeltklikket", + "remote_button_long_press": "\"{subtype}\"-knappen ble kontinuerlig trykket", + "remote_button_long_release": "\"{subtype}\"-knappen sluppet etter langt trykk", + "remote_button_quadruple_press": "\"{subtype}\"-knappen ble firedoblet klikket", + "remote_button_quintuple_press": "\"{subtype}\"-knappen femdobbelt klikket", + "remote_button_rotated": "Knappen roterte \"{subtype}\"", + "remote_button_rotation_stopped": "Knapperotasjon \"{subtype}\" stoppet", + "remote_button_short_press": "\"{subtype}\" -knappen ble trykket", + "remote_button_short_release": "\"{subtype}\"-knappen sluppet", + "remote_button_triple_press": "\"{subtype}\"-knappen trippel klikket", + "remote_double_tap": "Enheten \" {subtype} \" dobbeltklikket", + "remote_double_tap_any_side": "Enheten dobbeltklikket p\u00e5 alle sider", + "remote_falling": "Enheten er i fritt fall", + "remote_flip_180_degrees": "Enheten er snudd 180 grader", + "remote_flip_90_degrees": "Enheten er snudd 90 grader", + "remote_gyro_activated": "Enhet er ristet", + "remote_moved": "Enheten ble flyttet med \"{under type}\" opp", + "remote_moved_any_side": "Enheten flyttet med alle sider opp", + "remote_rotate_from_side_1": "Enheten rotert fra \"side 1\" til \" {subtype} \"", + "remote_rotate_from_side_2": "Enheten rotert fra \"side 2\" til \" {subtype} \"", + "remote_rotate_from_side_3": "Enheten rotert fra \"side 3\" til \" {subtype} \"", + "remote_rotate_from_side_4": "Enheten rotert fra \"side 4\" til \" {subtype} \"", + "remote_rotate_from_side_5": "Enheten rotert fra \"side 5\" til \" {subtype} \"", + "remote_rotate_from_side_6": "Enheten rotert fra \"side 6\" til \" {subtype} \"", + "remote_turned_clockwise": "Enheten dreide med klokken", + "remote_turned_counter_clockwise": "Enheten dreide mot klokken" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Tillat deCONZ CLIP-sensorer", + "allow_deconz_groups": "Tillat deCONZ lys grupper" + }, + "description": "Konfigurere synlighet av deCONZ enhetstyper", + "title": "deCONZ alternativer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/pl.json b/homeassistant/components/deconz/translations/pl.json new file mode 100644 index 00000000000..a9bff098644 --- /dev/null +++ b/homeassistant/components/deconz/translations/pl.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Mostek jest ju\u017c skonfigurowany.", + "already_in_progress": "Konfiguracja mostka jest ju\u017c w toku.", + "no_bridges": "Nie odkryto mostk\u00f3w deCONZ", + "not_deconz_bridge": "To nie jest mostek deCONZ", + "one_instance_only": "Komponent obs\u0142uguje tylko jedn\u0105 instancj\u0119 deCONZ", + "updated_instance": "Zaktualizowano instancj\u0119 deCONZ o nowy adres hosta" + }, + "error": { + "no_key": "Nie mo\u017cna uzyska\u0107 klucza API" + }, + "flow_title": "Bramka deCONZ Zigbee ({host})", + "step": { + "hassio_confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Home Assistant, aby po\u0142\u0105czy\u0142 si\u0119 z bramk\u0105 deCONZ dostarczon\u0105 przez dodatek Hass.io {addon}?", + "title": "Bramka deCONZ Zigbee przez dodatek Hass.io" + }, + "init": { + "title": "Zdefiniuj bramk\u0119 deCONZ" + }, + "link": { + "description": "Odblokuj bramk\u0119 deCONZ, aby zarejestrowa\u0107 j\u0105 w Home Assistant. \n\n 1. Przejd\u017a do ustawienia deCONZ > bramka > Zaawansowane\n 2. Naci\u015bnij przycisk \"Uwierzytelnij aplikacj\u0119\"", + "title": "Po\u0142\u0105cz z deCONZ" + }, + "manual_confirm": { + "data": { + "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", + "button_4": "czwarty przycisk", + "close": "nast\u0105pi zamkni\u0119cie", + "dim_down": "nast\u0105pi zmniejszenie jasno\u015bci", + "dim_up": "nast\u0105pi zwi\u0119kszenie jasno\u015bci", + "left": "w lewo", + "open": "otwarcie", + "right": "w prawo", + "side_1": "strona 1", + "side_2": "strona 2", + "side_3": "strona 3", + "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" + }, + "trigger_type": { + "remote_awakened": "urz\u0105dzenie si\u0119 obudzi", + "remote_button_double_press": "przycisk \"{subtype}\" zostanie podw\u00f3jnie naci\u015bni\u0119ty", + "remote_button_long_press": "przycisk \"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y", + "remote_button_long_release": "przycisk \"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", + "remote_button_quadruple_press": "przycisk \"{subtype}\" zostanie czterokrotnie naci\u015bni\u0119ty", + "remote_button_quintuple_press": "przycisk \"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty", + "remote_button_rotated": "przycisk zostanie obr\u00f3cony \"{subtype}\"", + "remote_button_rotation_stopped": "nast\u0105pi zatrzymanie obrotu przycisku \"{subtype}\"", + "remote_button_short_press": "przycisk \"{subtype}\" zostanie naci\u015bni\u0119ty", + "remote_button_short_release": "przycisk \"{subtype}\" zostanie zwolniony", + "remote_button_triple_press": "przycisk \"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty", + "remote_double_tap": "urz\u0105dzenie \"{subtype}\" zostanie dwukrotnie pukni\u0119te", + "remote_double_tap_any_side": "urz\u0105dzenie dwukrotnie pukni\u0119te z dowolnej strony", + "remote_falling": "urz\u0105dzenie zarejestruje swobodny spadek", + "remote_flip_180_degrees": "urz\u0105dzenie odwr\u00f3cone o 180 stopni", + "remote_flip_90_degrees": "urz\u0105dzenie odwr\u00f3cone o 90 stopni", + "remote_gyro_activated": "nast\u0105pi potrz\u0105\u015bni\u0119cie urz\u0105dzeniem", + "remote_moved": "urz\u0105dzenie poruszone z \"{subtype}\" w g\u00f3r\u0119", + "remote_moved_any_side": "urz\u0105dzenie przesuni\u0119te dowoln\u0105 stron\u0105 do g\u00f3ry", + "remote_rotate_from_side_1": "urz\u0105dzenie obr\u00f3cone ze \"strona 1\" na \"{subtype}\"", + "remote_rotate_from_side_2": "urz\u0105dzenie obr\u00f3cone ze \"strona 2\" na \"{subtype}\"", + "remote_rotate_from_side_3": "urz\u0105dzenie obr\u00f3cone ze \"strona 3\" na \"{subtype}\"", + "remote_rotate_from_side_4": "urz\u0105dzenie obr\u00f3cone ze \"strona 4\" na \"{subtype}\"", + "remote_rotate_from_side_5": "urz\u0105dzenie obr\u00f3cone ze \"strona 5\" na \"{subtype}\"", + "remote_rotate_from_side_6": "urz\u0105dzenie obr\u00f3cone ze \"strona 6\" na \"{subtype}\"", + "remote_turned_clockwise": "urz\u0105dzenie obr\u00f3cone zgodnie z ruchem wskaz\u00f3wek zegara", + "remote_turned_counter_clockwise": "urz\u0105dzenie obr\u00f3cone przeciwnie do ruchu wskaz\u00f3wek zegara" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Zezwalaj na czujniki deCONZ CLIP", + "allow_deconz_groups": "Zezwalaj na grupy \u015bwiate\u0142 deCONZ" + }, + "description": "Skonfiguruj widoczno\u015b\u0107 typ\u00f3w urz\u0105dze\u0144 deCONZ", + "title": "Opcje deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/pt-BR.json b/homeassistant/components/deconz/translations/pt-BR.json new file mode 100644 index 00000000000..f548b187103 --- /dev/null +++ b/homeassistant/components/deconz/translations/pt-BR.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "A ponte j\u00e1 est\u00e1 configurada", + "already_in_progress": "Fluxo de configura\u00e7\u00e3o para ponte j\u00e1 est\u00e1 em andamento.", + "no_bridges": "N\u00e3o h\u00e1 pontes de deCONZ descobertas", + "not_deconz_bridge": "N\u00e3o \u00e9 uma ponte deCONZ", + "one_instance_only": "Componente suporta apenas uma inst\u00e2ncia deCONZ", + "updated_instance": "Atualiza\u00e7\u00e3o da inst\u00e2ncia deCONZ com novo endere\u00e7o de host" + }, + "error": { + "no_key": "N\u00e3o foi poss\u00edvel obter uma chave de API" + }, + "step": { + "hassio_confirm": { + "description": "Deseja configurar o Home Assistant para conectar-se ao gateway deCONZ fornecido pelo add-on hass.io {addon} ?", + "title": "Gateway deCONZ Zigbee via add-on Hass.io" + }, + "init": { + "title": "Defina o gateway deCONZ" + }, + "link": { + "description": "Desbloqueie o seu gateway deCONZ para se registar no Home Assistant. \n\n 1. V\u00e1 para as configura\u00e7\u00f5es do sistema deCONZ \n 2. Pressione o bot\u00e3o \"Desbloquear Gateway\"", + "title": "Linkar com deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Hospedeiro", + "port": "Porta (valor padr\u00e3o: '80')" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/pt.json b/homeassistant/components/deconz/translations/pt.json new file mode 100644 index 00000000000..b385af86ce5 --- /dev/null +++ b/homeassistant/components/deconz/translations/pt.json @@ -0,0 +1,61 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge j\u00e1 est\u00e1 configurada", + "no_bridges": "Nenhum hub deCONZ descoberto", + "one_instance_only": "Componente suporta apenas uma conex\u00e3o deCONZ" + }, + "error": { + "no_key": "N\u00e3o foi poss\u00edvel obter uma chave de API" + }, + "step": { + "init": { + "title": "Defina o gateway deCONZ" + }, + "link": { + "description": "Desbloqueie o seu gateway deCONZ para se registar no Home Assistant. \n\n 1. V\u00e1 para as configura\u00e7\u00f5es do sistema deCONZ \n 2. Pressione o bot\u00e3o \"Desbloquear Gateway\"", + "title": "Liga\u00e7\u00e3o com deCONZ" + }, + "manual_confirm": { + "data": { + "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", + "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/deconz/translations/ro.json b/homeassistant/components/deconz/translations/ro.json new file mode 100644 index 00000000000..a997db44380 --- /dev/null +++ b/homeassistant/components/deconz/translations/ro.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "link": { + "description": "Debloca\u021bi gateway-ul DECONZ pentru a v\u0103 \u00eenregistra la Home Assistant. \n\n 1. Accesa\u021bi Set\u0103rile deCONZ - > Gateway - > Avansat \n 2. Ap\u0103sa\u021bi butonul \u201eAutentifica\u021bi aplica\u021bia\u201d" + }, + "manual_confirm": { + "data": { + "port": "Port" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/ru.json b/homeassistant/components/deconz/translations/ru.json new file mode 100644 index 00000000000..6e42969eb29 --- /dev/null +++ b/homeassistant/components/deconz/translations/ru.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "no_bridges": "\u0428\u043b\u044e\u0437\u044b deCONZ \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", + "not_deconz_bridge": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u043b\u044e\u0437\u043e\u043c deCONZ.", + "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 deCONZ.", + "updated_instance": "\u0410\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d." + }, + "error": { + "no_key": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u044e\u0447 API." + }, + "flow_title": "\u0428\u043b\u044e\u0437 Zigbee deCONZ ({host})", + "step": { + "hassio_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a deCONZ (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", + "title": "Zigbee \u0448\u043b\u044e\u0437 deCONZ (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" + }, + "init": { + "title": "deCONZ" + }, + "link": { + "description": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439\u0442\u0435 \u0448\u043b\u044e\u0437 deCONZ \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 Home Assistant:\n\n1. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b deCONZ -> Gateway -> Advanced.\n2. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u00abAuthenticate app\u00bb.", + "title": "\u0421\u0432\u044f\u0437\u044c \u0441 deCONZ" + }, + "manual_confirm": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442" + } + }, + "manual_input": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u043b\u044e\u0437\u0430 deCONZ" + }, + "user": { + "data": { + "host": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0448\u043b\u044e\u0437 deCONZ" + }, + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u043b\u044e\u0437 deCONZ" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "\u041e\u0431\u0435 \u043a\u043d\u043e\u043f\u043a\u0438", + "bottom_buttons": "\u041d\u0438\u0436\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438", + "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "close": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "dim_down": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f", + "dim_up": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f", + "left": "\u041d\u0430\u043b\u0435\u0432\u043e", + "open": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "right": "\u041d\u0430\u043f\u0440\u0430\u0432\u043e", + "side_1": "\u0413\u0440\u0430\u043d\u044c 1", + "side_2": "\u0413\u0440\u0430\u043d\u044c 2", + "side_3": "\u0413\u0440\u0430\u043d\u044c 3", + "side_4": "\u0413\u0440\u0430\u043d\u044c 4", + "side_5": "\u0413\u0440\u0430\u043d\u044c 5", + "side_6": "\u0413\u0440\u0430\u043d\u044c 6", + "top_buttons": "\u0412\u0435\u0440\u0445\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438", + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + }, + "trigger_type": { + "remote_awakened": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u043b\u0438", + "remote_button_double_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430", + "remote_button_long_press": "{subtype} \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430", + "remote_button_long_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", + "remote_button_quadruple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430", + "remote_button_quintuple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437", + "remote_button_rotated": "{subtype} \u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f", + "remote_button_rotation_stopped": "{subtype} \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u043b\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435", + "remote_button_short_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430", + "remote_button_short_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", + "remote_button_triple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430", + "remote_double_tap": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c {subtype} \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0438 \u0434\u0432\u0430\u0436\u0434\u044b", + "remote_double_tap_any_side": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0438 \u0434\u0432\u0430\u0436\u0434\u044b", + "remote_falling": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u043f\u0430\u0434\u0435\u043d\u0438\u0438", + "remote_flip_180_degrees": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043d\u0430 180 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432", + "remote_flip_90_degrees": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432", + "remote_gyro_activated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u0440\u044f\u0441\u043b\u0438", + "remote_moved": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 {subtype} \u0441\u0432\u0435\u0440\u0445\u0443", + "remote_moved_any_side": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438", + "remote_rotate_from_side_1": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 1 \u043d\u0430 {subtype}", + "remote_rotate_from_side_2": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 2 \u043d\u0430 {subtype}", + "remote_rotate_from_side_3": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 3 \u043d\u0430 {subtype}", + "remote_rotate_from_side_4": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 4 \u043d\u0430 {subtype}", + "remote_rotate_from_side_5": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 5 \u043d\u0430 {subtype}", + "remote_rotate_from_side_6": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441 \u0413\u0440\u0430\u043d\u0438 6 \u043d\u0430 {subtype}", + "remote_turned_clockwise": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435", + "remote_turned_counter_clockwise": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u044b deCONZ CLIP", + "allow_deconz_groups": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f deCONZ" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 deCONZ", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/sl.json b/homeassistant/components/deconz/translations/sl.json new file mode 100644 index 00000000000..3d7902ef1a0 --- /dev/null +++ b/homeassistant/components/deconz/translations/sl.json @@ -0,0 +1,101 @@ +{ + "config": { + "abort": { + "already_configured": "Most je \u017ee nastavljen", + "already_in_progress": "Konfiguracijski tok za most je \u017ee v teku.", + "no_bridges": "Ni odkritih mostov deCONZ", + "not_deconz_bridge": "Ni deCONZ most", + "one_instance_only": "Komponenta podpira le en primerek deCONZ", + "updated_instance": "Posodobljen deCONZ z novim naslovom gostitelja" + }, + "error": { + "no_key": "Klju\u010da API ni mogo\u010de dobiti" + }, + "flow_title": "deCONZ Zigbee prehod ({host})", + "step": { + "hassio_confirm": { + "description": "Ali \u017eelite konfigurirati Home Assistant za povezavo s prehodom deCONZ, ki ga ponuja dodatek Hass.io {addon} ?", + "title": "deCONZ Zigbee prehod preko dodatka Hass.io" + }, + "init": { + "title": "Dolo\u010dite deCONZ prehod" + }, + "link": { + "description": "Odklenite va\u0161 deCONZ gateway za registracijo s Home Assistant-om. \n1. Pojdite v deCONZ sistemske nastavitve\n2. Pritisnite tipko \"odkleni prehod\"", + "title": "Povezava z deCONZ" + }, + "manual_confirm": { + "data": { + "host": "Gostitelj", + "port": "Vrata" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "Oba gumba", + "bottom_buttons": "Spodnji gumbi", + "button_1": "Prvi gumb", + "button_2": "Drugi gumb", + "button_3": "Tretji gumb", + "button_4": "\u010cetrti gumb", + "close": "Zapri", + "dim_down": "Zatemnite", + "dim_up": "pove\u010dajte mo\u010d", + "left": "Levo", + "open": "Odprto", + "right": "Desno", + "side_1": "Stran 1", + "side_2": "Stran 2", + "side_3": "Stran 3", + "side_4": "Stran 4", + "side_5": "Stran 5", + "side_6": "Stran 6", + "top_buttons": "Zgornji gumbi", + "turn_off": "Ugasni", + "turn_on": "Pri\u017egi" + }, + "trigger_type": { + "remote_awakened": "Naprava se je prebudila", + "remote_button_double_press": "Dvakrat kliknete gumb \"{subtype}\"", + "remote_button_long_press": "\"{subtype}\" gumb neprekinjeno pritisnjen", + "remote_button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", + "remote_button_quadruple_press": "\"{subtype}\" gumb \u0161tirikrat kliknjen", + "remote_button_quintuple_press": "\"{subtype}\" gumb petkrat kliknjen", + "remote_button_rotated": "Gumb \"{subtype}\" zasukan", + "remote_button_rotation_stopped": "Vrtenje \"{subtype}\" gumba se je ustavilo", + "remote_button_short_press": "Pritisnjen \"{subtype}\" gumb", + "remote_button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den", + "remote_button_triple_press": "Gumb \"{subtype}\" trikrat kliknjen", + "remote_double_tap": "Naprava \"{subtype}\" dvakrat dotaknjena", + "remote_double_tap_any_side": "Naprava je bila dvojno tapnjena na katerokoli stran", + "remote_falling": "Naprava v prostem padu", + "remote_flip_180_degrees": "Naprava se je obrnila za 180 stopinj", + "remote_flip_90_degrees": "Naprava se je obrnila za 90 stopinj", + "remote_gyro_activated": "Naprava se je pretresla", + "remote_moved": "Naprava je premaknjena s \"{subtype}\" navzgor", + "remote_moved_any_side": "Naprava se je premikala s katero koli stranjo navzgor", + "remote_rotate_from_side_1": "Naprava je zasukana iz \"strani 1\" v \"{subtype}\"", + "remote_rotate_from_side_2": "Naprava je zasukana iz \"strani 2\" v \"{subtype}\"", + "remote_rotate_from_side_3": "Naprava je zasukana iz \"strani 3\" v \"{subtype}\"", + "remote_rotate_from_side_4": "Naprava je zasukana iz \"strani 4\" v \"{subtype}\"", + "remote_rotate_from_side_5": "Naprava je zasukana iz \"strani 5\" v \"{subtype}\"", + "remote_rotate_from_side_6": "Naprava je zasukana iz \"strani 6\" v \"{subtype}\"", + "remote_turned_clockwise": "Naprava se je obrnila v smeri urinega kazalca", + "remote_turned_counter_clockwise": "Naprava se je obrnila v nasprotni smeri urinega kazalca" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Dovoli deCONZ CLIP senzorje", + "allow_deconz_groups": "Dovolite deCONZ skupine lu\u010di" + }, + "description": "Konfiguracija vidnosti tipov naprav deCONZ", + "title": "mo\u017enosti deCONZ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/sv.json b/homeassistant/components/deconz/translations/sv.json new file mode 100644 index 00000000000..559581b8ad8 --- /dev/null +++ b/homeassistant/components/deconz/translations/sv.json @@ -0,0 +1,98 @@ +{ + "config": { + "abort": { + "already_configured": "Bryggan \u00e4r redan konfigurerad", + "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r bryggan p\u00e5g\u00e5r redan.", + "no_bridges": "Inga deCONZ-bryggor uppt\u00e4cktes", + "not_deconz_bridge": "Inte en deCONZ-brygga", + "one_instance_only": "Komponenten st\u00f6djer endast en deCONZ-instans", + "updated_instance": "Uppdaterad deCONZ-instans med ny v\u00e4rdadress" + }, + "error": { + "no_key": "Det gick inte att ta emot en API-nyckel" + }, + "flow_title": "deCONZ Zigbee gateway ({host})", + "step": { + "hassio_confirm": { + "description": "Vill du konfigurera Home Assistant att ansluta till den deCONZ-gateway som tillhandah\u00e5lls av Hass.io-till\u00e4gget {addon}?", + "title": "deCONZ Zigbee gateway via Hass.io till\u00e4gg" + }, + "init": { + "title": "Definiera deCONZ-gatewaye" + }, + "link": { + "description": "L\u00e5s upp din deCONZ-gateway f\u00f6r att registrera dig med Home Assistant. \n\n 1. G\u00e5 till deCONZ-systeminst\u00e4llningarna \n 2. Tryck p\u00e5 \"L\u00e5s upp gateway\"-knappen", + "title": "L\u00e4nka med deCONZ" + }, + "manual_confirm": { + "data": { + "host": "V\u00e4rd", + "port": "Port (standardv\u00e4rde: '80')" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "B\u00e5da knapparna", + "button_1": "F\u00f6rsta knappen", + "button_2": "Andra knappen", + "button_3": "Tredje knappen", + "button_4": "Fj\u00e4rde knappen", + "close": "St\u00e4ng", + "dim_down": "Dimma ned", + "dim_up": "Dimma upp", + "left": "V\u00e4nster", + "open": "\u00d6ppen", + "right": "H\u00f6ger", + "side_1": "Sida 1", + "side_2": "Sida 2", + "side_3": "Sida 3", + "side_4": "Sida 4", + "side_5": "Sida 5", + "side_6": "Sida 6", + "turn_off": "St\u00e4ng av", + "turn_on": "Starta" + }, + "trigger_type": { + "remote_awakened": "Enheten v\u00e4cktes", + "remote_button_double_press": "\"{subtype}\"-knappen dubbelklickades", + "remote_button_long_press": "\"{subtype}\"-knappen kontinuerligt nedtryckt", + "remote_button_long_release": "\"{subtype}\"-knappen sl\u00e4pptes efter ett l\u00e5ngttryck", + "remote_button_quadruple_press": "\"{subtype}\"-knappen klickades \nfyrfaldigt", + "remote_button_quintuple_press": "\"{subtype}\"-knappen klickades \nfemfaldigt", + "remote_button_rotated": "Knappen roterade \"{subtype}\"", + "remote_button_rotation_stopped": "Knapprotationen \"{subtype}\" stoppades", + "remote_button_short_press": "\"{subtype}\"-knappen trycktes in", + "remote_button_short_release": "\"{subtype}\"-knappen sl\u00e4ppt", + "remote_button_triple_press": "\"{subtype}\"-knappen trippelklickad", + "remote_double_tap": "Enheten \"{subtype}\" dubbeltryckt", + "remote_double_tap_any_side": "Enheten dubbeltryckt p\u00e5 valfri sida", + "remote_falling": "Enhet i fritt fall", + "remote_flip_180_degrees": "Enheten v\u00e4nd 180 grader", + "remote_flip_90_degrees": "Enheten v\u00e4nd 90 grader", + "remote_gyro_activated": "Enhet skakad", + "remote_moved": "Enheten flyttades med \"{subtype}\" upp", + "remote_moved_any_side": "Enheten flyttades med valfri sida upp\u00e5t", + "remote_rotate_from_side_1": "Enheten roterades fr\u00e5n \"sida 1\" till \"{subtype}\"", + "remote_rotate_from_side_2": "Enheten roterades fr\u00e5n \"sida 2\" till \"{subtype}\"", + "remote_rotate_from_side_3": "Enheten roterades fr\u00e5n \"sida 3\" till \"{subtype}\"", + "remote_rotate_from_side_4": "Enheten roterades fr\u00e5n \"sida 4\" till \"{subtype}\"", + "remote_rotate_from_side_5": "Enheten roterades fr\u00e5n \"sida 5\" till \"{subtype}\"", + "remote_rotate_from_side_6": "Enheten roterades fr\u00e5n \"sida 6\" till \"{subtype}\"", + "remote_turned_clockwise": "Enheten vriden medurs", + "remote_turned_counter_clockwise": "Enheten v\u00e4nde moturs" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "Till\u00e5t deCONZ CLIP-sensorer", + "allow_deconz_groups": "Till\u00e5t deCONZ ljusgrupper" + }, + "description": "Konfigurera synlighet f\u00f6r deCONZ-enhetstyper" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/th.json b/homeassistant/components/deconz/translations/th.json new file mode 100644 index 00000000000..db5e0efae10 --- /dev/null +++ b/homeassistant/components/deconz/translations/th.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "manual_confirm": { + "data": { + "port": "Port" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/vi.json b/homeassistant/components/deconz/translations/vi.json new file mode 100644 index 00000000000..95880d43e39 --- /dev/null +++ b/homeassistant/components/deconz/translations/vi.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "C\u1ea7u \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh", + "no_bridges": "Kh\u00f4ng t\u00ecm th\u1ea5y c\u1ea7u deCONZ n\u00e0o", + "one_instance_only": "Th\u00e0nh ph\u1ea7n ch\u1ec9 h\u1ed7 tr\u1ee3 m\u1ed9t c\u00e1 th\u1ec3 deCONZ" + }, + "error": { + "no_key": "Kh\u00f4ng th\u1ec3 l\u1ea5y kh\u00f3a API" + }, + "step": { + "manual_confirm": { + "data": { + "port": "C\u1ed5ng (gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh: '80')" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/zh-Hans.json b/homeassistant/components/deconz/translations/zh-Hans.json new file mode 100644 index 00000000000..1152d5c394d --- /dev/null +++ b/homeassistant/components/deconz/translations/zh-Hans.json @@ -0,0 +1,57 @@ +{ + "config": { + "abort": { + "already_configured": "\u6865\u63a5\u5668\u5df2\u914d\u7f6e\u5b8c\u6210", + "no_bridges": "\u6ca1\u6709\u53d1\u73b0 deCONZ \u7684\u6865\u63a5\u8bbe\u5907", + "one_instance_only": "\u7ec4\u4ef6\u53ea\u652f\u6301\u4e00\u4e2a deCONZ \u5b9e\u4f8b" + }, + "error": { + "no_key": "\u65e0\u6cd5\u83b7\u53d6 API \u5bc6\u94a5" + }, + "step": { + "init": { + "title": "\u5b9a\u4e49 deCONZ \u7f51\u5173" + }, + "link": { + "description": "\u89e3\u9501\u60a8\u7684 deCONZ \u7f51\u5173\u4ee5\u6ce8\u518c\u5230 Home Assistant\u3002 \n\n 1. \u524d\u5f80 deCONZ \u7cfb\u7edf\u8bbe\u7f6e\n 2. \u70b9\u51fb\u201c\u89e3\u9501\u7f51\u5173\u201d\u6309\u94ae", + "title": "\u8fde\u63a5 deCONZ" + }, + "manual_confirm": { + "data": { + "host": "\u4e3b\u673a", + "port": "\u7aef\u53e3\uff08\u9ed8\u8ba4\u503c\uff1a'80'\uff09" + } + } + } + }, + "device_automation": { + "trigger_subtype": { + "side_1": "\u7b2c 1 \u9762", + "side_2": "\u7b2c 2 \u9762", + "side_3": "\u7b2c 3 \u9762", + "side_4": "\u7b2c 4 \u9762", + "side_5": "\u7b2c 5 \u9762", + "side_6": "\u7b2c 6 \u9762" + }, + "trigger_type": { + "remote_awakened": "\u8bbe\u5907\u5524\u9192", + "remote_double_tap": "\u8bbe\u5907\u7684\u201c{subtype}\u201d\u88ab\u8f7b\u6572\u4e24\u6b21", + "remote_falling": "\u8bbe\u5907\u81ea\u7531\u843d\u4f53", + "remote_gyro_activated": "\u8bbe\u5907\u6447\u6643", + "remote_moved": "\u8bbe\u5907\u6c34\u5e73\u79fb\u52a8\u4e14\u201c{subtype}\u201d\u671d\u4e0a", + "remote_rotate_from_side_1": "\u8bbe\u5907\u4ece\u201c\u7b2c 1 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", + "remote_rotate_from_side_2": "\u8bbe\u5907\u4ece\u201c\u7b2c 2 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", + "remote_rotate_from_side_3": "\u8bbe\u5907\u4ece\u201c\u7b2c 3 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", + "remote_rotate_from_side_4": "\u8bbe\u5907\u4ece\u201c\u7b2c 4 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", + "remote_rotate_from_side_5": "\u8bbe\u5907\u4ece\u201c\u7b2c 5 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d", + "remote_rotate_from_side_6": "\u8bbe\u5907\u4ece\u201c\u7b2c 6 \u9762\u201d\u7ffb\u8f6c\u5230\u201c{subtype}\u201d" + } + }, + "options": { + "step": { + "deconz_devices": { + "title": "deCONZ \u9009\u9879" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/zh-Hant.json b/homeassistant/components/deconz/translations/zh-Hant.json new file mode 100644 index 00000000000..e80524ce23f --- /dev/null +++ b/homeassistant/components/deconz/translations/zh-Hant.json @@ -0,0 +1,114 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "Bridge \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "no_bridges": "\u672a\u641c\u5c0b\u5230 deCONZ Bridfe", + "not_deconz_bridge": "\u975e deCONZ Bridge \u8a2d\u5099", + "one_instance_only": "\u7d44\u4ef6\u50c5\u652f\u63f4\u4e00\u7d44 deCONZ \u7269\u4ef6", + "updated_instance": "\u4f7f\u7528\u65b0\u4e3b\u6a5f\u7aef\u4f4d\u5740\u66f4\u65b0 deCONZ \u7269\u4ef6" + }, + "error": { + "no_key": "\u7121\u6cd5\u53d6\u5f97 API key" + }, + "flow_title": "deCONZ Zigbee \u9598\u9053\u5668\uff08{host}\uff09", + "step": { + "hassio_confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u9023\u7dda\u81f3 Hass.io \u9644\u52a0\u6574\u5408 {addon} \u4e4b deCONZ \u9598\u9053\u5668\uff1f", + "title": "\u900f\u904e Hass.io \u9644\u52a0\u7d44\u4ef6 deCONZ Zigbee \u9598\u9053\u5668" + }, + "init": { + "title": "\u5b9a\u7fa9 deCONZ \u9598\u9053\u5668" + }, + "link": { + "description": "\u89e3\u9664 deCONZ \u9598\u9053\u5668\u9396\u5b9a\uff0c\u4ee5\u65bc Home Assistant \u9032\u884c\u8a3b\u518a\u3002\n\n1. \u9032\u5165 deCONZ \u7cfb\u7d71\u8a2d\u5b9a -> \u9598\u9053\u5668 -> \u9032\u968e\u8a2d\u5b9a\n2. \u6309\u4e0b\u300c\u8a8d\u8b49\u7a0b\u5f0f\uff08Authenticate app\uff09\u300d\u6309\u9215", + "title": "\u9023\u7d50\u81f3 deCONZ" + }, + "manual_confirm": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0" + } + }, + "manual_input": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0" + }, + "title": "\u8a2d\u5b9a deCONZ \u9598\u9053\u5668" + }, + "user": { + "data": { + "host": "\u9078\u64c7\u6240\u63a2\u7d22\u5230\u7684 deCONZ \u9598\u9053\u5668" + }, + "title": "\u9078\u64c7 deCONZ \u9598\u9053\u5668" + } + } + }, + "device_automation": { + "trigger_subtype": { + "both_buttons": "\u5169\u500b\u6309\u9215", + "bottom_buttons": "\u4e0b\u65b9\u6309\u9215", + "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", + "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", + "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", + "button_4": "\u7b2c\u56db\u500b\u6309\u9215", + "close": "\u95dc\u9589", + "dim_down": "\u8abf\u6697", + "dim_up": "\u8abf\u4eae", + "left": "\u5de6", + "open": "\u958b\u555f", + "right": "\u53f3", + "side_1": "\u7b2c 1 \u9762", + "side_2": "\u7b2c 2 \u9762", + "side_3": "\u7b2c 3 \u9762", + "side_4": "\u7b2c 4 \u9762", + "side_5": "\u7b2c 5 \u9762", + "side_6": "\u7b2c 6 \u9762", + "top_buttons": "\u4e0a\u65b9\u6309\u9215", + "turn_off": "\u95dc\u9589", + "turn_on": "\u958b\u555f" + }, + "trigger_type": { + "remote_awakened": "\u8a2d\u5099\u5df2\u559a\u9192", + "remote_button_double_press": "\"{subtype}\" \u6309\u9215\u96d9\u64ca", + "remote_button_long_press": "\"{subtype}\" \u6309\u9215\u6301\u7e8c\u6309\u4e0b", + "remote_button_long_release": "\u9577\u6309\u5f8c\u91cb\u653e \"{subtype}\" \u6309\u9215", + "remote_button_quadruple_press": "\"{subtype}\" \u6309\u9215\u56db\u9023\u9ede\u64ca", + "remote_button_quintuple_press": "\"{subtype}\" \u6309\u9215\u4e94\u9023\u9ede\u64ca", + "remote_button_rotated": "\u65cb\u8f49 \"{subtype}\" \u6309\u9215", + "remote_button_rotation_stopped": "\u65cb\u8f49 \"{subtype}\" \u6309\u9215\u5df2\u505c\u6b62", + "remote_button_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b", + "remote_button_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e", + "remote_button_triple_press": "\"{subtype}\" \u6309\u9215\u4e09\u9023\u9ede\u64ca", + "remote_double_tap": "\u8a2d\u5099 \"{subtype}\" \u96d9\u6572", + "remote_double_tap_any_side": "\u8a2d\u5099\u4efb\u4e00\u9762\u96d9\u9ede\u9078", + "remote_falling": "\u8a2d\u5099\u81ea\u7531\u843d\u4e0b", + "remote_flip_180_degrees": "\u8a2d\u5099\u65cb\u8f49 180 \u5ea6", + "remote_flip_90_degrees": "\u8a2d\u5099\u65cb\u8f49 90 \u5ea6", + "remote_gyro_activated": "\u8a2d\u5099\u6416\u6643", + "remote_moved": "\u8a2d\u5099\u79fb\u52d5\u81f3 \"{subtype}\" \u671d\u4e0a", + "remote_moved_any_side": "\u8a2d\u5099\u4efb\u4e00\u9762\u671d\u4e0a", + "remote_rotate_from_side_1": "\u8a2d\u5099\u7531\u300c\u7b2c 1 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", + "remote_rotate_from_side_2": "\u8a2d\u5099\u7531\u300c\u7b2c 2 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", + "remote_rotate_from_side_3": "\u8a2d\u5099\u7531\u300c\u7b2c 3 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", + "remote_rotate_from_side_4": "\u8a2d\u5099\u7531\u300c\u7b2c 4 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", + "remote_rotate_from_side_5": "\u8a2d\u5099\u7531\u300c\u7b2c 5 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", + "remote_rotate_from_side_6": "\u8a2d\u5099\u7531\u300c\u7b2c 6 \u9762\u300d\u65cb\u8f49\u81f3\u300c{subtype}\u300d", + "remote_turned_clockwise": "\u8a2d\u5099\u9806\u6642\u91dd\u65cb\u8f49", + "remote_turned_counter_clockwise": "\u8a2d\u5099\u9006\u6642\u91dd\u65cb\u8f49" + } + }, + "options": { + "step": { + "deconz_devices": { + "data": { + "allow_clip_sensor": "\u5141\u8a31 deCONZ CLIP \u611f\u61c9\u5668", + "allow_deconz_groups": "\u5141\u8a31 deCONZ \u71c8\u5149\u7fa4\u7d44" + }, + "description": "\u8a2d\u5b9a deCONZ \u53ef\u8996\u8a2d\u5099\u985e\u578b", + "title": "deCONZ \u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/decora/manifest.json b/homeassistant/components/decora/manifest.json index e16632718d1..247422bee73 100644 --- a/homeassistant/components/decora/manifest.json +++ b/homeassistant/components/decora/manifest.json @@ -3,6 +3,5 @@ "name": "Leviton Decora", "documentation": "https://www.home-assistant.io/integrations/decora", "requirements": ["bluepy==1.3.0", "decora==0.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/decora_wifi/light.py b/homeassistant/components/decora_wifi/light.py index 7d8aa104bb0..9071da9707d 100644 --- a/homeassistant/components/decora_wifi/light.py +++ b/homeassistant/components/decora_wifi/light.py @@ -34,8 +34,8 @@ NOTIFICATION_TITLE = "myLeviton Decora Setup" def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Decora WiFi platform.""" - email = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) + email = config[CONF_USERNAME] + password = config[CONF_PASSWORD] session = DecoraWiFiSession() try: diff --git a/homeassistant/components/decora_wifi/manifest.json b/homeassistant/components/decora_wifi/manifest.json index d340fb00d94..c2a7dc63e00 100644 --- a/homeassistant/components/decora_wifi/manifest.json +++ b/homeassistant/components/decora_wifi/manifest.json @@ -3,6 +3,5 @@ "name": "Leviton Decora Wi-Fi", "documentation": "https://www.home-assistant.io/integrations/decora_wifi", "requirements": ["decora_wifi==1.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/default_config/manifest.json b/homeassistant/components/default_config/manifest.json index be9cb8dcc97..d324ac862e3 100644 --- a/homeassistant/components/default_config/manifest.json +++ b/homeassistant/components/default_config/manifest.json @@ -2,7 +2,6 @@ "domain": "default_config", "name": "Default Config", "documentation": "https://www.home-assistant.io/integrations/default_config", - "requirements": [], "dependencies": [ "automation", "cloud", diff --git a/homeassistant/components/delijn/manifest.json b/homeassistant/components/delijn/manifest.json index 2d550a0851f..3f6efd0a3d7 100644 --- a/homeassistant/components/delijn/manifest.json +++ b/homeassistant/components/delijn/manifest.json @@ -2,7 +2,6 @@ "domain": "delijn", "name": "De Lijn", "documentation": "https://www.home-assistant.io/integrations/delijn", - "dependencies": [], "codeowners": ["@bollewolle"], "requirements": ["pydelijn==0.5.1"] } diff --git a/homeassistant/components/deluge/manifest.json b/homeassistant/components/deluge/manifest.json index cefc645725e..53210a17f17 100644 --- a/homeassistant/components/deluge/manifest.json +++ b/homeassistant/components/deluge/manifest.json @@ -3,6 +3,5 @@ "name": "Deluge", "documentation": "https://www.home-assistant.io/integrations/deluge", "requirements": ["deluge-client==1.7.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/deluge/sensor.py b/homeassistant/components/deluge/sensor.py index 55309ea8b31..4a24e979607 100644 --- a/homeassistant/components/deluge/sensor.py +++ b/homeassistant/components/deluge/sensor.py @@ -49,11 +49,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Deluge sensors.""" - name = config.get(CONF_NAME) - host = config.get(CONF_HOST) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - port = config.get(CONF_PORT) + name = config[CONF_NAME] + host = config[CONF_HOST] + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] + port = config[CONF_PORT] deluge_api = DelugeRPCClient(host, port, username, password) try: diff --git a/homeassistant/components/deluge/switch.py b/homeassistant/components/deluge/switch.py index 7ac98f284c8..04acf6a9dd9 100644 --- a/homeassistant/components/deluge/switch.py +++ b/homeassistant/components/deluge/switch.py @@ -37,11 +37,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Deluge switch.""" - name = config.get(CONF_NAME) - host = config.get(CONF_HOST) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - port = config.get(CONF_PORT) + name = config[CONF_NAME] + host = config[CONF_HOST] + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] + port = config[CONF_PORT] deluge_api = DelugeRPCClient(host, port, username, password) try: diff --git a/homeassistant/components/demo/.translations/bg.json b/homeassistant/components/demo/.translations/bg.json deleted file mode 100644 index 3b1f5f8a8d2..00000000000 --- a/homeassistant/components/demo/.translations/bg.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/ca.json b/homeassistant/components/demo/.translations/ca.json deleted file mode 100644 index a29718fea7a..00000000000 --- a/homeassistant/components/demo/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "Demostraci\u00f3" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "Entrada booleana opcional", - "int": "Entrada num\u00e8rica" - } - }, - "options_2": { - "data": { - "multi": "Selecci\u00f3 m\u00faltiple", - "select": "Selecciona una opci\u00f3", - "string": "Valor de cadena (string)" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/da.json b/homeassistant/components/demo/.translations/da.json deleted file mode 100644 index fd2764e5ec9..00000000000 --- a/homeassistant/components/demo/.translations/da.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "en", - "other": "anden" - } - }, - "options_1": { - "data": { - "bool": "Valgfri boolsk", - "int": "Numerisk input" - } - }, - "options_2": { - "data": { - "multi": "Multimarkering", - "select": "V\u00e6lg en mulighed", - "string": "Strengv\u00e6rdi" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/de.json b/homeassistant/components/demo/.translations/de.json deleted file mode 100644 index 658a39246d9..00000000000 --- a/homeassistant/components/demo/.translations/de.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "eins", - "other": "andere" - } - }, - "options_1": { - "data": { - "bool": "Optionaler Boolescher Wert", - "int": "Numerische Eingabe" - } - }, - "options_2": { - "data": { - "multi": "Mehrfachauswahl", - "select": "W\u00e4hlen Sie eine Option", - "string": "String-Wert" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/en.json b/homeassistant/components/demo/.translations/en.json deleted file mode 100644 index e49671c88c8..00000000000 --- a/homeassistant/components/demo/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "Optional boolean", - "int": "Numeric input" - } - }, - "options_2": { - "data": { - "multi": "Multiselect", - "select": "Select an option", - "string": "String value" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/es-419.json b/homeassistant/components/demo/.translations/es-419.json deleted file mode 100644 index ef01fcb4f3c..00000000000 --- a/homeassistant/components/demo/.translations/es-419.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Demo" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/es.json b/homeassistant/components/demo/.translations/es.json deleted file mode 100644 index 9fd9b61dda1..00000000000 --- a/homeassistant/components/demo/.translations/es.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "Vacio", - "other": "Vacio" - } - }, - "options_1": { - "data": { - "bool": "Booleano opcional", - "int": "Entrada num\u00e9rica" - } - }, - "options_2": { - "data": { - "multi": "Multiselecci\u00f3n", - "select": "Selecciona una opci\u00f3n", - "string": "Valor de cadena" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/fr.json b/homeassistant/components/demo/.translations/fr.json deleted file mode 100644 index 3621cd1c404..00000000000 --- a/homeassistant/components/demo/.translations/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "D\u00e9mo" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "Bool\u00e9en facultatif", - "int": "Entr\u00e9e num\u00e9rique" - } - }, - "options_2": { - "data": { - "multi": "S\u00e9lection multiple", - "select": "S\u00e9lectionnez une option", - "string": "Valeur de cha\u00eene" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/hu.json b/homeassistant/components/demo/.translations/hu.json deleted file mode 100644 index 51f0cd00642..00000000000 --- a/homeassistant/components/demo/.translations/hu.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Dem\u00f3" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/it.json b/homeassistant/components/demo/.translations/it.json deleted file mode 100644 index 1173cc48e04..00000000000 --- a/homeassistant/components/demo/.translations/it.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "uno", - "other": "altri" - } - }, - "options_1": { - "data": { - "bool": "Valore booleano facoltativo", - "int": "Input numerico" - } - }, - "options_2": { - "data": { - "multi": "Selezione multipla", - "select": "Selezionare un'opzione", - "string": "Valore stringa" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/ja.json b/homeassistant/components/demo/.translations/ja.json deleted file mode 100644 index 529170b111d..00000000000 --- a/homeassistant/components/demo/.translations/ja.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "\u30c7\u30e2" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/ko.json b/homeassistant/components/demo/.translations/ko.json deleted file mode 100644 index efe69b575fb..00000000000 --- a/homeassistant/components/demo/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "\ub370\ubaa8" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "\ub17c\ub9ac \uc120\ud0dd", - "int": "\uc22b\uc790 \uc785\ub825" - } - }, - "options_2": { - "data": { - "multi": "\ub2e4\uc911 \uc120\ud0dd", - "select": "\uc635\uc158 \uc120\ud0dd", - "string": "\ubb38\uc790\uc5f4 \uac12" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/lb.json b/homeassistant/components/demo/.translations/lb.json deleted file mode 100644 index 05b4ba93427..00000000000 --- a/homeassistant/components/demo/.translations/lb.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "Een", - "other": "Aner" - } - }, - "options_1": { - "data": { - "bool": "Optionelle Boolean", - "int": "Numeresch Agab" - } - }, - "options_2": { - "data": { - "multi": "Multiple Auswiel", - "select": "Eng Optioun auswielen", - "string": "String W\u00e4ert" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/lv.json b/homeassistant/components/demo/.translations/lv.json deleted file mode 100644 index b7bbb906508..00000000000 --- a/homeassistant/components/demo/.translations/lv.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Demonstr\u0101cija" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/nl.json b/homeassistant/components/demo/.translations/nl.json deleted file mode 100644 index cb932a0d9d6..00000000000 --- a/homeassistant/components/demo/.translations/nl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "Empty", - "other": "" - } - }, - "options_1": { - "data": { - "bool": "Optioneel Boolean", - "int": "Numerieke invoer" - } - }, - "options_2": { - "data": { - "multi": "Meerkeuze selectie", - "select": "Kies een optie", - "string": "String waarde" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/no.json b/homeassistant/components/demo/.translations/no.json deleted file mode 100644 index a46606621b9..00000000000 --- a/homeassistant/components/demo/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "Valgfri boolean", - "int": "Numerisk inndata" - } - }, - "options_2": { - "data": { - "multi": "Flervalg", - "select": "Velg et alternativ", - "string": "Strengverdi" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/pl.json b/homeassistant/components/demo/.translations/pl.json deleted file mode 100644 index f224d100929..00000000000 --- a/homeassistant/components/demo/.translations/pl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "few": "kilka", - "many": "wiele", - "one": "jedena", - "other": "inne" - } - }, - "options_1": { - "data": { - "bool": "Warto\u015b\u0107 logiczna", - "int": "Warto\u015b\u0107 numeryczna" - } - }, - "options_2": { - "data": { - "multi": "Wielokrotny wyb\u00f3r", - "select": "Wybierz opcj\u0119", - "string": "Warto\u015b\u0107 tekstowa" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/pt-BR.json b/homeassistant/components/demo/.translations/pt-BR.json deleted file mode 100644 index 8183f28aed3..00000000000 --- a/homeassistant/components/demo/.translations/pt-BR.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Demonstra\u00e7\u00e3o" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/pt.json b/homeassistant/components/demo/.translations/pt.json deleted file mode 100644 index 8183f28aed3..00000000000 --- a/homeassistant/components/demo/.translations/pt.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Demonstra\u00e7\u00e3o" - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/ru.json b/homeassistant/components/demo/.translations/ru.json deleted file mode 100644 index 22ea3d2e196..00000000000 --- a/homeassistant/components/demo/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "\u0414\u0435\u043c\u043e" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439", - "int": "\u0427\u0438\u0441\u043b\u043e\u0432\u043e\u0439" - } - }, - "options_2": { - "data": { - "multi": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e", - "select": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e", - "string": "\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/sl.json b/homeassistant/components/demo/.translations/sl.json deleted file mode 100644 index b67d4d56fb1..00000000000 --- a/homeassistant/components/demo/.translations/sl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "few": "prazni", - "one": "prazen", - "other": "prazni", - "two": "prazna" - } - }, - "options_1": { - "data": { - "bool": "Izbirna logi\u010dna vrednost", - "int": "\u0160tevil\u010dni vnos" - } - }, - "options_2": { - "data": { - "multi": "Multiselect", - "select": "Izberite mo\u017enost", - "string": "Vrednost niza" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/sv.json b/homeassistant/components/demo/.translations/sv.json deleted file mode 100644 index 4c5f477cc1c..00000000000 --- a/homeassistant/components/demo/.translations/sv.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "title": "Demo" - }, - "options": { - "step": { - "init": { - "data": { - "one": "Tom", - "other": "Tomma" - } - }, - "options_1": { - "data": { - "bool": "Valfritt boolesk", - "int": "Numerisk inmatning" - } - }, - "options_2": { - "data": { - "multi": "Flera val", - "select": "V\u00e4lj ett alternativ", - "string": "Str\u00e4ngv\u00e4rde" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/zh-Hant.json b/homeassistant/components/demo/.translations/zh-Hant.json deleted file mode 100644 index 7f6ac42d609..00000000000 --- a/homeassistant/components/demo/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "title": "\u5c55\u793a" - }, - "options": { - "step": { - "options_1": { - "data": { - "bool": "\u9078\u9805\u5e03\u6797", - "int": "\u6578\u503c\u8f38\u5165" - } - }, - "options_2": { - "data": { - "multi": "\u591a\u91cd\u9078\u64c7", - "select": "\u9078\u64c7\u9078\u9805", - "string": "\u5b57\u4e32\u503c" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/demo/camera.py b/homeassistant/components/demo/camera.py index f639dae9757..ce211a47594 100644 --- a/homeassistant/components/demo/camera.py +++ b/homeassistant/components/demo/camera.py @@ -1,6 +1,6 @@ """Demo camera platform that has a fake camera.""" import logging -import os +from pathlib import Path from homeassistant.components.camera import SUPPORT_ON_OFF, Camera @@ -28,16 +28,12 @@ class DemoCamera(Camera): self.is_streaming = True self._images_index = 0 - def camera_image(self): + async def async_camera_image(self): """Return a faked still image response.""" self._images_index = (self._images_index + 1) % 4 + image_path = Path(__file__).parent / f"demo_{self._images_index}.jpg" - image_path = os.path.join( - os.path.dirname(__file__), f"demo_{self._images_index}.jpg" - ) - _LOGGER.debug("Loading camera_image: %s", image_path) - with open(image_path, "rb") as file: - return file.read() + return await self.hass.async_add_executor_job(image_path.read_bytes) @property def name(self): @@ -48,7 +44,7 @@ class DemoCamera(Camera): def should_poll(self): """Demo camera doesn't need poll. - Need explicitly call schedule_update_ha_state() after state changed. + Need explicitly call async_write_ha_state() after state changed. """ return False @@ -67,22 +63,22 @@ class DemoCamera(Camera): """Camera Motion Detection Status.""" return self._motion_status - def enable_motion_detection(self): + async def async_enable_motion_detection(self): """Enable the Motion detection in base station (Arm).""" self._motion_status = True - self.schedule_update_ha_state() + self.async_write_ha_state() - def disable_motion_detection(self): + async def async_disable_motion_detection(self): """Disable the motion detection in base station (Disarm).""" self._motion_status = False - self.schedule_update_ha_state() + self.async_write_ha_state() - def turn_off(self): + async def async_turn_off(self): """Turn off camera.""" self.is_streaming = False - self.schedule_update_ha_state() + self.async_write_ha_state() - def turn_on(self): + async def async_turn_on(self): """Turn on camera.""" self.is_streaming = True - self.schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/demo/geo_location.py b/homeassistant/components/demo/geo_location.py index 6fc8e9c2e89..76dea52e846 100644 --- a/homeassistant/components/demo/geo_location.py +++ b/homeassistant/components/demo/geo_location.py @@ -6,12 +6,12 @@ import random from typing import Optional from homeassistant.components.geo_location import GeolocationEvent +from homeassistant.const import LENGTH_KILOMETERS from homeassistant.helpers.event import track_time_interval _LOGGER = logging.getLogger(__name__) AVG_KM_PER_DEGREE = 111.0 -DEFAULT_UNIT_OF_MEASUREMENT = "km" DEFAULT_UPDATE_INTERVAL = timedelta(minutes=1) MAX_RADIUS_IN_KM = 50 NUMBER_OF_DEMO_DEVICES = 5 @@ -71,7 +71,7 @@ class DemoManager: event_name = random.choice(EVENT_NAMES) return DemoGeolocationEvent( - event_name, radius_in_km, latitude, longitude, DEFAULT_UNIT_OF_MEASUREMENT + event_name, radius_in_km, latitude, longitude, LENGTH_KILOMETERS ) def _init_regular_updates(self): diff --git a/homeassistant/components/demo/light.py b/homeassistant/components/demo/light.py index ac7e53826b9..e6747fee2df 100644 --- a/homeassistant/components/demo/light.py +++ b/homeassistant/components/demo/light.py @@ -84,10 +84,7 @@ class DemoLight(Light): self._effect_list = effect_list self._effect = effect self._available = True - if ct is not None and hs_color is None: - self._color_mode = "ct" - else: - self._color_mode = "hs" + self._color_mode = "ct" if ct is not None and hs_color is None else "hs" @property def device_info(self): @@ -166,7 +163,7 @@ class DemoLight(Light): """Flag supported features.""" return SUPPORT_DEMO - def turn_on(self, **kwargs) -> None: + async def async_turn_on(self, **kwargs) -> None: """Turn the light on.""" self._state = True @@ -189,12 +186,12 @@ class DemoLight(Light): # As we have disabled polling, we need to inform # Home Assistant about updates in our state ourselves. - self.schedule_update_ha_state() + self.async_write_ha_state() - def turn_off(self, **kwargs) -> None: + async def async_turn_off(self, **kwargs) -> None: """Turn the light off.""" self._state = False # As we have disabled polling, we need to inform # Home Assistant about updates in our state ourselves. - self.schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/demo/manifest.json b/homeassistant/components/demo/manifest.json index a3a647e0974..0abe5fb3347 100644 --- a/homeassistant/components/demo/manifest.json +++ b/homeassistant/components/demo/manifest.json @@ -2,7 +2,6 @@ "domain": "demo", "name": "Demo", "documentation": "https://www.home-assistant.io/integrations/demo", - "requirements": [], "dependencies": ["conversation", "zone", "group", "configurator"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/demo/services.yaml b/homeassistant/components/demo/services.yaml index a8a96b21c19..aed23eed95a 100644 --- a/homeassistant/components/demo/services.yaml +++ b/homeassistant/components/demo/services.yaml @@ -1,2 +1,2 @@ randomize_device_tracker_data: - description: Demonstrates using a device tracker to see where devices are located \ No newline at end of file + description: Demonstrates using a device tracker to see where devices are located diff --git a/homeassistant/components/demo/strings.json b/homeassistant/components/demo/strings.json index 33f3b4229dc..95497b8bf19 100644 --- a/homeassistant/components/demo/strings.json +++ b/homeassistant/components/demo/strings.json @@ -1,7 +1,5 @@ { - "config": { - "title": "Demo" - }, + "title": "Demo", "options": { "step": { "init": { diff --git a/homeassistant/components/demo/translations/bg.json b/homeassistant/components/demo/translations/bg.json new file mode 100644 index 00000000000..9609b0e64d9 --- /dev/null +++ b/homeassistant/components/demo/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/ca.json b/homeassistant/components/demo/translations/ca.json new file mode 100644 index 00000000000..a4176a43085 --- /dev/null +++ b/homeassistant/components/demo/translations/ca.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "Entrada booleana opcional", + "int": "Entrada num\u00e8rica" + } + }, + "options_2": { + "data": { + "multi": "Selecci\u00f3 m\u00faltiple", + "select": "Selecciona una opci\u00f3", + "string": "Valor de cadena (string)" + } + } + } + }, + "title": "Demostraci\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/da.json b/homeassistant/components/demo/translations/da.json new file mode 100644 index 00000000000..7017d075a8e --- /dev/null +++ b/homeassistant/components/demo/translations/da.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "en", + "other": "anden" + } + }, + "options_1": { + "data": { + "bool": "Valgfri boolsk", + "int": "Numerisk input" + } + }, + "options_2": { + "data": { + "multi": "Multimarkering", + "select": "V\u00e6lg en mulighed", + "string": "Strengv\u00e6rdi" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/de.json b/homeassistant/components/demo/translations/de.json new file mode 100644 index 00000000000..30778b4490b --- /dev/null +++ b/homeassistant/components/demo/translations/de.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "eins", + "other": "andere" + } + }, + "options_1": { + "data": { + "bool": "Optionaler Boolescher Wert", + "int": "Numerische Eingabe" + } + }, + "options_2": { + "data": { + "multi": "Mehrfachauswahl", + "select": "W\u00e4hlen Sie eine Option", + "string": "String-Wert" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/en.json b/homeassistant/components/demo/translations/en.json new file mode 100644 index 00000000000..6c1d1c1b3e6 --- /dev/null +++ b/homeassistant/components/demo/translations/en.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "Optional boolean", + "int": "Numeric input" + } + }, + "options_2": { + "data": { + "multi": "Multiselect", + "select": "Select an option", + "string": "String value" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/es-419.json b/homeassistant/components/demo/translations/es-419.json new file mode 100644 index 00000000000..a9abb4aacd9 --- /dev/null +++ b/homeassistant/components/demo/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/es.json b/homeassistant/components/demo/translations/es.json new file mode 100644 index 00000000000..a60aee6a42b --- /dev/null +++ b/homeassistant/components/demo/translations/es.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "Vacio", + "other": "Vacio" + } + }, + "options_1": { + "data": { + "bool": "Booleano opcional", + "int": "Entrada num\u00e9rica" + } + }, + "options_2": { + "data": { + "multi": "Multiselecci\u00f3n", + "select": "Selecciona una opci\u00f3n", + "string": "Valor de cadena" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/fr.json b/homeassistant/components/demo/translations/fr.json new file mode 100644 index 00000000000..941f04f5c9e --- /dev/null +++ b/homeassistant/components/demo/translations/fr.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "Bool\u00e9en facultatif", + "int": "Entr\u00e9e num\u00e9rique" + } + }, + "options_2": { + "data": { + "multi": "S\u00e9lection multiple", + "select": "S\u00e9lectionnez une option", + "string": "Valeur de cha\u00eene" + } + } + } + }, + "title": "D\u00e9mo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/hu.json b/homeassistant/components/demo/translations/hu.json new file mode 100644 index 00000000000..996b9c138ef --- /dev/null +++ b/homeassistant/components/demo/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Dem\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/it.json b/homeassistant/components/demo/translations/it.json new file mode 100644 index 00000000000..16477633de2 --- /dev/null +++ b/homeassistant/components/demo/translations/it.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "uno", + "other": "altri" + } + }, + "options_1": { + "data": { + "bool": "Valore booleano facoltativo", + "int": "Input numerico" + } + }, + "options_2": { + "data": { + "multi": "Selezione multipla", + "select": "Selezionare un'opzione", + "string": "Valore stringa" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/ja.json b/homeassistant/components/demo/translations/ja.json new file mode 100644 index 00000000000..713cdd6ae35 --- /dev/null +++ b/homeassistant/components/demo/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "\u30c7\u30e2" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/ko.json b/homeassistant/components/demo/translations/ko.json new file mode 100644 index 00000000000..e9e02a6e1b9 --- /dev/null +++ b/homeassistant/components/demo/translations/ko.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "\ub17c\ub9ac \uc120\ud0dd", + "int": "\uc22b\uc790 \uc785\ub825" + } + }, + "options_2": { + "data": { + "multi": "\ub2e4\uc911 \uc120\ud0dd", + "select": "\uc635\uc158 \uc120\ud0dd", + "string": "\ubb38\uc790\uc5f4 \uac12" + } + } + } + }, + "title": "\ub370\ubaa8" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/lb.json b/homeassistant/components/demo/translations/lb.json new file mode 100644 index 00000000000..864a3603f3d --- /dev/null +++ b/homeassistant/components/demo/translations/lb.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "Een", + "other": "M\u00e9i" + } + }, + "options_1": { + "data": { + "bool": "Optionelle Boolean", + "int": "Numeresch Agab" + } + }, + "options_2": { + "data": { + "multi": "Multiple Auswiel", + "select": "Eng Optioun auswielen", + "string": "String W\u00e4ert" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/lv.json b/homeassistant/components/demo/translations/lv.json new file mode 100644 index 00000000000..a13903a0f66 --- /dev/null +++ b/homeassistant/components/demo/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Demonstr\u0101cija" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/nl.json b/homeassistant/components/demo/translations/nl.json new file mode 100644 index 00000000000..ac10172933f --- /dev/null +++ b/homeassistant/components/demo/translations/nl.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "Empty", + "other": "" + } + }, + "options_1": { + "data": { + "bool": "Optioneel Boolean", + "int": "Numerieke invoer" + } + }, + "options_2": { + "data": { + "multi": "Meerkeuze selectie", + "select": "Kies een optie", + "string": "String waarde" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/no.json b/homeassistant/components/demo/translations/no.json new file mode 100644 index 00000000000..ed813c9e505 --- /dev/null +++ b/homeassistant/components/demo/translations/no.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "Valgfri boolean", + "int": "Numerisk inndata" + } + }, + "options_2": { + "data": { + "multi": "Flervalg", + "select": "Velg et alternativ", + "string": "Strengverdi" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/pl.json b/homeassistant/components/demo/translations/pl.json new file mode 100644 index 00000000000..ea46ae807c6 --- /dev/null +++ b/homeassistant/components/demo/translations/pl.json @@ -0,0 +1,28 @@ +{ + "options": { + "step": { + "init": { + "data": { + "few": "kilka", + "many": "wiele", + "one": "jedena", + "other": "inne" + } + }, + "options_1": { + "data": { + "bool": "Warto\u015b\u0107 logiczna", + "int": "Warto\u015b\u0107 numeryczna" + } + }, + "options_2": { + "data": { + "multi": "Wielokrotny wyb\u00f3r", + "select": "Wybierz opcj\u0119", + "string": "Warto\u015b\u0107 tekstowa" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/pt-BR.json b/homeassistant/components/demo/translations/pt-BR.json new file mode 100644 index 00000000000..9a07b5ebc50 --- /dev/null +++ b/homeassistant/components/demo/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Demonstra\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/pt.json b/homeassistant/components/demo/translations/pt.json new file mode 100644 index 00000000000..9a07b5ebc50 --- /dev/null +++ b/homeassistant/components/demo/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Demonstra\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/ru.json b/homeassistant/components/demo/translations/ru.json new file mode 100644 index 00000000000..a793985702f --- /dev/null +++ b/homeassistant/components/demo/translations/ru.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439", + "int": "\u0427\u0438\u0441\u043b\u043e\u0432\u043e\u0439" + } + }, + "options_2": { + "data": { + "multi": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e", + "select": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e", + "string": "\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435" + } + } + } + }, + "title": "\u0414\u0435\u043c\u043e" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/sl.json b/homeassistant/components/demo/translations/sl.json new file mode 100644 index 00000000000..33e4ece832c --- /dev/null +++ b/homeassistant/components/demo/translations/sl.json @@ -0,0 +1,28 @@ +{ + "options": { + "step": { + "init": { + "data": { + "few": "prazni", + "one": "prazen", + "other": "prazni", + "two": "prazna" + } + }, + "options_1": { + "data": { + "bool": "Izbirna logi\u010dna vrednost", + "int": "\u0160tevil\u010dni vnos" + } + }, + "options_2": { + "data": { + "multi": "Multiselect", + "select": "Izberite mo\u017enost", + "string": "Vrednost niza" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/translations/sv.json b/homeassistant/components/demo/translations/sv.json new file mode 100644 index 00000000000..b577b02e25b --- /dev/null +++ b/homeassistant/components/demo/translations/sv.json @@ -0,0 +1,26 @@ +{ + "options": { + "step": { + "init": { + "data": { + "one": "Tom", + "other": "Tomma" + } + }, + "options_1": { + "data": { + "bool": "Valfritt boolesk", + "int": "Numerisk inmatning" + } + }, + "options_2": { + "data": { + "multi": "Flera val", + "select": "V\u00e4lj ett alternativ", + "string": "Str\u00e4ngv\u00e4rde" + } + } + } + }, + "title": "Demo" +} \ No newline at end of file diff --git a/homeassistant/components/demo/.translations/zh-Hans.json b/homeassistant/components/demo/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/demo/.translations/zh-Hans.json rename to homeassistant/components/demo/translations/zh-Hans.json diff --git a/homeassistant/components/demo/translations/zh-Hant.json b/homeassistant/components/demo/translations/zh-Hant.json new file mode 100644 index 00000000000..084db6adfa2 --- /dev/null +++ b/homeassistant/components/demo/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "options": { + "step": { + "options_1": { + "data": { + "bool": "\u9078\u9805\u5e03\u6797", + "int": "\u6578\u503c\u8f38\u5165" + } + }, + "options_2": { + "data": { + "multi": "\u591a\u91cd\u9078\u64c7", + "select": "\u9078\u64c7\u9078\u9805", + "string": "\u5b57\u4e32\u503c" + } + } + } + }, + "title": "\u5c55\u793a" +} \ No newline at end of file diff --git a/homeassistant/components/denon/manifest.json b/homeassistant/components/denon/manifest.json index 1c4e8b652f5..e1f8f309e60 100644 --- a/homeassistant/components/denon/manifest.json +++ b/homeassistant/components/denon/manifest.json @@ -2,7 +2,5 @@ "domain": "denon", "name": "Denon Network Receivers", "documentation": "https://www.home-assistant.io/integrations/denon", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/denon/media_player.py b/homeassistant/components/denon/media_player.py index cd9d6e8feb7..1fbd4885f43 100644 --- a/homeassistant/components/denon/media_player.py +++ b/homeassistant/components/denon/media_player.py @@ -80,7 +80,7 @@ MEDIA_MODES = { def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Denon platform.""" - denon = DenonDevice(config.get(CONF_NAME), config.get(CONF_HOST)) + denon = DenonDevice(config[CONF_NAME], config[CONF_HOST]) if denon.update(): add_entities([denon]) @@ -187,7 +187,7 @@ class DenonDevice(MediaPlayerDevice): "NSE8", ] for line in self.telnet_request(telnet, "NSE", all_lines=True): - self._mediainfo += line[len(answer_codes.pop(0)) :] + "\n" + self._mediainfo += f"{line[len(answer_codes.pop(0)) :]}\n" else: self._mediainfo = self.source @@ -257,11 +257,12 @@ class DenonDevice(MediaPlayerDevice): def set_volume_level(self, volume): """Set volume level, range 0..1.""" - self.telnet_command("MV" + str(round(volume * self._volume_max)).zfill(2)) + self.telnet_command(f"MV{round(volume * self._volume_max):02}") def mute_volume(self, mute): """Mute (true) or unmute (false) media player.""" - self.telnet_command("MU" + ("ON" if mute else "OFF")) + mute_status = "ON" if mute else "OFF" + self.telnet_command(f"MU{mute_status})") def media_play(self): """Play media player.""" @@ -289,4 +290,4 @@ class DenonDevice(MediaPlayerDevice): def select_source(self, source): """Select input source.""" - self.telnet_command("SI" + self._source_list.get(source)) + self.telnet_command(f"SI{self._source_list.get(source)}") diff --git a/homeassistant/components/denonavr/manifest.json b/homeassistant/components/denonavr/manifest.json index 7e06e781563..a26bbdd58ab 100644 --- a/homeassistant/components/denonavr/manifest.json +++ b/homeassistant/components/denonavr/manifest.json @@ -3,6 +3,5 @@ "name": "Denon AVR Network Receivers", "documentation": "https://www.home-assistant.io/integrations/denonavr", "requirements": ["denonavr==0.8.1"], - "dependencies": [], "codeowners": ["@scarface-4711", "@starkillerOG"] } diff --git a/homeassistant/components/denonavr/media_player.py b/homeassistant/components/denonavr/media_player.py index b14592d1b78..7713354b14a 100644 --- a/homeassistant/components/denonavr/media_player.py +++ b/homeassistant/components/denonavr/media_player.py @@ -103,8 +103,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): cache = hass.data[KEY_DENON_CACHE] = set() # Get config option for show_all_sources and timeout - show_all_sources = config.get(CONF_SHOW_ALL_SOURCES) - timeout = config.get(CONF_TIMEOUT) + show_all_sources = config[CONF_SHOW_ALL_SOURCES] + timeout = config[CONF_TIMEOUT] # Get config option for additional zones zones = config.get(CONF_ZONES) @@ -197,7 +197,9 @@ class DenonDevice(MediaPlayerDevice): async def async_added_to_hass(self): """Register signal handler.""" - async_dispatcher_connect(self.hass, DOMAIN, self.signal_handler) + self.async_on_remove( + async_dispatcher_connect(self.hass, DOMAIN, self.signal_handler) + ) def signal_handler(self, data): """Handle domain-specific signal by calling appropriate method.""" diff --git a/homeassistant/components/denonavr/services.yaml b/homeassistant/components/denonavr/services.yaml index 889adc3af05..c9831a68aa5 100644 --- a/homeassistant/components/denonavr/services.yaml +++ b/homeassistant/components/denonavr/services.yaml @@ -1,11 +1,11 @@ # Describes the format for available webostv services get_command: - description: 'Send a generic http get command.' + description: "Send a generic http get command." fields: entity_id: description: Name(s) of the denonavr entities where to run the API method. - example: 'media_player.living_room_receiver' + example: "media_player.living_room_receiver" command: description: Endpoint of the command, including associated parameters. - example: '/goform/formiPhoneAppDirect.xml?RCKSK0410370' + example: "/goform/formiPhoneAppDirect.xml?RCKSK0410370" diff --git a/homeassistant/components/derivative/manifest.json b/homeassistant/components/derivative/manifest.json index ae7eb4234b0..15f5b71d5cb 100644 --- a/homeassistant/components/derivative/manifest.json +++ b/homeassistant/components/derivative/manifest.json @@ -2,9 +2,5 @@ "domain": "derivative", "name": "Derivative", "documentation": "https://www.home-assistant.io/integrations/derivative", - "requirements": [], - "dependencies": [], - "codeowners": [ - "@afaucogney" - ] -} \ No newline at end of file + "codeowners": ["@afaucogney"] +} diff --git a/homeassistant/components/derivative/sensor.py b/homeassistant/components/derivative/sensor.py index 202c5885887..65bbd9affee 100644 --- a/homeassistant/components/derivative/sensor.py +++ b/homeassistant/components/derivative/sensor.py @@ -182,7 +182,7 @@ class DerivativeSensor(RestoreEntity): _LOGGER.error("Could not calculate derivative: %s", err) else: self._state = derivative - self.async_schedule_update_ha_state() + self.async_write_ha_state() async_track_state_change(self.hass, self._sensor_source_id, calc_derivative) diff --git a/homeassistant/components/deutsche_bahn/manifest.json b/homeassistant/components/deutsche_bahn/manifest.json index 7bca10f761d..fa382b1b6a5 100644 --- a/homeassistant/components/deutsche_bahn/manifest.json +++ b/homeassistant/components/deutsche_bahn/manifest.json @@ -3,6 +3,5 @@ "name": "Deutsche Bahn", "documentation": "https://www.home-assistant.io/integrations/deutsche_bahn", "requirements": ["schiene==0.23"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/deutsche_bahn/sensor.py b/homeassistant/components/deutsche_bahn/sensor.py index fd7496b1316..bb5adb943e9 100644 --- a/homeassistant/components/deutsche_bahn/sensor.py +++ b/homeassistant/components/deutsche_bahn/sensor.py @@ -36,9 +36,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Deutsche Bahn Sensor.""" start = config.get(CONF_START) - destination = config.get(CONF_DESTINATION) - offset = config.get(CONF_OFFSET) - only_direct = config.get(CONF_ONLY_DIRECT) + destination = config[CONF_DESTINATION] + offset = config[CONF_OFFSET] + only_direct = config[CONF_ONLY_DIRECT] add_entities([DeutscheBahnSensor(start, destination, offset, only_direct)], True) diff --git a/homeassistant/components/device_automation/__init__.py b/homeassistant/components/device_automation/__init__.py index 95b3fc9fdb3..33685b2bc1c 100644 --- a/homeassistant/components/device_automation/__init__.py +++ b/homeassistant/components/device_automation/__init__.py @@ -13,7 +13,8 @@ from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity_registry import async_entries_for_device -from homeassistant.loader import IntegrationNotFound, async_get_integration +from homeassistant.loader import IntegrationNotFound +from homeassistant.requirements import async_get_integration_with_requirements from .exceptions import DeviceNotFound, InvalidDeviceAutomationConfig @@ -80,7 +81,7 @@ async def async_get_device_automation_platform( """ platform_name = TYPES[automation_type][0] try: - integration = await async_get_integration(hass, domain) + integration = await async_get_integration_with_requirements(hass, domain) platform = integration.get_platform(platform_name) except IntegrationNotFound: raise InvalidDeviceAutomationConfig(f"Integration '{domain}' not found") diff --git a/homeassistant/components/device_automation/manifest.json b/homeassistant/components/device_automation/manifest.json index 291ade0f607..2eadd214bc1 100644 --- a/homeassistant/components/device_automation/manifest.json +++ b/homeassistant/components/device_automation/manifest.json @@ -2,7 +2,6 @@ "domain": "device_automation", "name": "Device Automation", "documentation": "https://www.home-assistant.io/integrations/device_automation", - "requirements": [], "dependencies": ["webhook"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/device_automation/toggle_entity.py b/homeassistant/components/device_automation/toggle_entity.py index a2dcd62db8c..e9a65f7bedd 100644 --- a/homeassistant/components/device_automation/toggle_entity.py +++ b/homeassistant/components/device_automation/toggle_entity.py @@ -186,15 +186,13 @@ async def _async_get_automations( for entry in entries: automations.extend( - ( - { - **template, - "device_id": device_id, - "entity_id": entry.entity_id, - "domain": domain, - } - for template in automation_templates - ) + { + **template, + "device_id": device_id, + "entity_id": entry.entity_id, + "domain": domain, + } + for template in automation_templates ) return automations diff --git a/homeassistant/components/device_sun_light_trigger/__init__.py b/homeassistant/components/device_sun_light_trigger/__init__.py index d7986fbb5b4..fcf61dfe097 100644 --- a/homeassistant/components/device_sun_light_trigger/__init__.py +++ b/homeassistant/components/device_sun_light_trigger/__init__.py @@ -65,9 +65,9 @@ async def async_setup(hass, config): light = hass.components.light person = hass.components.person conf = config[DOMAIN] - disable_turn_off = conf.get(CONF_DISABLE_TURN_OFF) + disable_turn_off = conf[CONF_DISABLE_TURN_OFF] light_group = conf.get(CONF_LIGHT_GROUP) - light_profile = conf.get(CONF_LIGHT_PROFILE) + light_profile = conf[CONF_LIGHT_PROFILE] device_group = conf.get(CONF_DEVICE_GROUP) diff --git a/homeassistant/components/device_sun_light_trigger/manifest.json b/homeassistant/components/device_sun_light_trigger/manifest.json index edeb10dcec2..777e8c5181e 100644 --- a/homeassistant/components/device_sun_light_trigger/manifest.json +++ b/homeassistant/components/device_sun_light_trigger/manifest.json @@ -2,8 +2,6 @@ "domain": "device_sun_light_trigger", "name": "Presence-based Lights", "documentation": "https://www.home-assistant.io/integrations/device_sun_light_trigger", - "requirements": [], - "dependencies": [], "after_dependencies": ["device_tracker", "group", "light", "person"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/device_tracker/.translations/bg.json b/homeassistant/components/device_tracker/.translations/bg.json deleted file mode 100644 index 68affa5afd0..00000000000 --- a/homeassistant/components/device_tracker/.translations/bg.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \u0435 \u0443 \u0434\u043e\u043c\u0430", - "is_not_home": "{entity_name} \u043d\u0435 \u0435 \u0443 \u0434\u043e\u043c\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/ca.json b/homeassistant/components/device_tracker/.translations/ca.json deleted file mode 100644 index 3a95841559b..00000000000 --- a/homeassistant/components/device_tracker/.translations/ca.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \u00e9s a casa", - "is_not_home": "{entity_name} no \u00e9s a casa" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/cs.json b/homeassistant/components/device_tracker/.translations/cs.json deleted file mode 100644 index 7e82f1a34f8..00000000000 --- a/homeassistant/components/device_tracker/.translations/cs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} je doma", - "is_not_home": "{entity_name} nen\u00ed doma" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/da.json b/homeassistant/components/device_tracker/.translations/da.json deleted file mode 100644 index d714b5b7d31..00000000000 --- a/homeassistant/components/device_tracker/.translations/da.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} er hjemme", - "is_not_home": "{entity_name} er ikke hjemme" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/de.json b/homeassistant/components/device_tracker/.translations/de.json deleted file mode 100644 index 90a81db6b90..00000000000 --- a/homeassistant/components/device_tracker/.translations/de.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} ist Zuhause", - "is_not_home": "{entity_name} ist nicht zu Hause" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/en.json b/homeassistant/components/device_tracker/.translations/en.json deleted file mode 100644 index 1022608477e..00000000000 --- a/homeassistant/components/device_tracker/.translations/en.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} is home", - "is_not_home": "{entity_name} is not home" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/es-419.json b/homeassistant/components/device_tracker/.translations/es-419.json deleted file mode 100644 index cfbf7bcfe3e..00000000000 --- a/homeassistant/components/device_tracker/.translations/es-419.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} est\u00e1 en casa", - "is_not_home": "{entity_name} no est\u00e1 en casa" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/es.json b/homeassistant/components/device_tracker/.translations/es.json deleted file mode 100644 index cfbf7bcfe3e..00000000000 --- a/homeassistant/components/device_tracker/.translations/es.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} est\u00e1 en casa", - "is_not_home": "{entity_name} no est\u00e1 en casa" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/fr.json b/homeassistant/components/device_tracker/.translations/fr.json deleted file mode 100644 index 4c59d5ea1c8..00000000000 --- a/homeassistant/components/device_tracker/.translations/fr.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} est \u00e0 la maison", - "is_not_home": "{entity_name} n'est pas \u00e0 la maison" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/hu.json b/homeassistant/components/device_tracker/.translations/hu.json deleted file mode 100644 index 7302f40df9e..00000000000 --- a/homeassistant/components/device_tracker/.translations/hu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} otthon van", - "is_not_home": "{entity_name} nincs otthon" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/it.json b/homeassistant/components/device_tracker/.translations/it.json deleted file mode 100644 index 112afc6689f..00000000000 --- a/homeassistant/components/device_tracker/.translations/it.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \u00e8 in casa", - "is_not_home": "{entity_name} non \u00e8 in casa" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/ko.json b/homeassistant/components/device_tracker/.translations/ko.json deleted file mode 100644 index 1834767222a..00000000000 --- a/homeassistant/components/device_tracker/.translations/ko.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \uc774(\uac00) \uc9d1\uc5d0 \uc788\uc73c\uba74", - "is_not_home": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uc911\uc774\uba74" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/lb.json b/homeassistant/components/device_tracker/.translations/lb.json deleted file mode 100644 index 2c49f692662..00000000000 --- a/homeassistant/components/device_tracker/.translations/lb.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} ass doheem", - "is_not_home": "{entity_name} ass net doheem" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/nl.json b/homeassistant/components/device_tracker/.translations/nl.json deleted file mode 100644 index 31ab788f171..00000000000 --- a/homeassistant/components/device_tracker/.translations/nl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} is thuis", - "is_not_home": "{entity_name} is niet thuis" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/no.json b/homeassistant/components/device_tracker/.translations/no.json deleted file mode 100644 index d714b5b7d31..00000000000 --- a/homeassistant/components/device_tracker/.translations/no.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} er hjemme", - "is_not_home": "{entity_name} er ikke hjemme" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/pl.json b/homeassistant/components/device_tracker/.translations/pl.json deleted file mode 100644 index 3930031ad38..00000000000 --- a/homeassistant/components/device_tracker/.translations/pl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "urz\u0105dzenie {entity_name} jest w domu", - "is_not_home": "urz\u0105dzenie {entity_name} jest poza domem" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/pt.json b/homeassistant/components/device_tracker/.translations/pt.json deleted file mode 100644 index 8a8f662183a..00000000000 --- a/homeassistant/components/device_tracker/.translations/pt.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} est\u00e1 em casa", - "is_not_home": "{entity_name} n\u00e3o est\u00e1 em casa" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/ru.json b/homeassistant/components/device_tracker/.translations/ru.json deleted file mode 100644 index 58767361fd4..00000000000 --- a/homeassistant/components/device_tracker/.translations/ru.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \u0434\u043e\u043c\u0430", - "is_not_home": "{entity_name} \u043d\u0435 \u0434\u043e\u043c\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/sl.json b/homeassistant/components/device_tracker/.translations/sl.json deleted file mode 100644 index 11d876883d3..00000000000 --- a/homeassistant/components/device_tracker/.translations/sl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} je doma", - "is_not_home": "{entity_name} ni doma" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/sv.json b/homeassistant/components/device_tracker/.translations/sv.json deleted file mode 100644 index 70287ad318a..00000000000 --- a/homeassistant/components/device_tracker/.translations/sv.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \u00e4r hemma", - "is_not_home": "{entity_name} \u00e4r inte hemma" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/zh-Hans.json b/homeassistant/components/device_tracker/.translations/zh-Hans.json deleted file mode 100644 index 456e09ebf0e..00000000000 --- a/homeassistant/components/device_tracker/.translations/zh-Hans.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name} \u5728\u5bb6", - "is_not_home": "{entity_name} \u4e0d\u5728\u5bb6" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/.translations/zh-Hant.json b/homeassistant/components/device_tracker/.translations/zh-Hant.json deleted file mode 100644 index 6611cb0c279..00000000000 --- a/homeassistant/components/device_tracker/.translations/zh-Hant.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_home": "{entity_name}\u5728\u5bb6", - "is_not_home": "{entity_name}\u4e0d\u5728\u5bb6" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/legacy.py b/homeassistant/components/device_tracker/legacy.py index 515b7cbc614..3157a00aa9f 100644 --- a/homeassistant/components/device_tracker/legacy.py +++ b/homeassistant/components/device_tracker/legacy.py @@ -175,7 +175,7 @@ class DeviceTracker: consider_home, ) if device.track: - await device.async_update_ha_state() + device.async_write_ha_state() return # Guard from calling see on entity registry entities. @@ -212,7 +212,7 @@ class DeviceTracker: ) if device.track: - await device.async_update_ha_state() + device.async_write_ha_state() self.hass.bus.async_fire( EVENT_NEW_DEVICE, @@ -259,7 +259,7 @@ class DeviceTracker: async def async_init_single_device(dev): """Init a single device_tracker entity.""" await dev.async_added_to_hass() - await dev.async_update_ha_state() + dev.async_write_ha_state() tasks = [] for device in self.devices.values(): diff --git a/homeassistant/components/device_tracker/manifest.json b/homeassistant/components/device_tracker/manifest.json index 4bd9846f76d..6e29d977f66 100644 --- a/homeassistant/components/device_tracker/manifest.json +++ b/homeassistant/components/device_tracker/manifest.json @@ -2,7 +2,6 @@ "domain": "device_tracker", "name": "Device Tracker", "documentation": "https://www.home-assistant.io/integrations/device_tracker", - "requirements": [], "dependencies": ["zone"], "after_dependencies": [], "codeowners": [], diff --git a/homeassistant/components/device_tracker/services.yaml b/homeassistant/components/device_tracker/services.yaml index 51865034b00..63435d0ac9d 100644 --- a/homeassistant/components/device_tracker/services.yaml +++ b/homeassistant/components/device_tracker/services.yaml @@ -5,22 +5,22 @@ see: fields: mac: description: MAC address of device - example: 'FF:FF:FF:FF:FF:FF' + example: "FF:FF:FF:FF:FF:FF" dev_id: description: Id of device (find id in known_devices.yaml). - example: 'phonedave' + example: "phonedave" host_name: description: Hostname of device - example: 'Dave' + example: "Dave" location_name: description: Name of location where device is located (not_home is away). - example: 'home' + example: "home" gps: description: GPS coordinates where device is located (latitude, longitude). - example: '[51.509802, -0.086692]' + example: "[51.509802, -0.086692]" gps_accuracy: description: Accuracy of GPS coordinates. - example: '80' + example: "80" battery: description: Battery level of device. - example: '100' + example: "100" diff --git a/homeassistant/components/device_tracker/setup.py b/homeassistant/components/device_tracker/setup.py index 595e36ef07c..3b7afbe25ee 100644 --- a/homeassistant/components/device_tracker/setup.py +++ b/homeassistant/components/device_tracker/setup.py @@ -170,7 +170,7 @@ def async_setup_scanner_platform( try: extra_attributes = await scanner.async_get_extra_attributes(mac) except NotImplementedError: - extra_attributes = dict() + extra_attributes = {} kwargs = { "mac": mac, diff --git a/homeassistant/components/device_tracker/strings.json b/homeassistant/components/device_tracker/strings.json index 285bac2cb4b..58aef884536 100644 --- a/homeassistant/components/device_tracker/strings.json +++ b/homeassistant/components/device_tracker/strings.json @@ -1,8 +1,15 @@ { + "title": "Device tracker", "device_automation": { "condition_type": { "is_home": "{entity_name} is home", "is_not_home": "{entity_name} is not home" } + }, + "state": { + "_": { + "home": "[%key:common::state::home%]", + "not_home": "[%key:common::state::not_home%]" + } } } diff --git a/homeassistant/components/device_tracker/translations/af.json b/homeassistant/components/device_tracker/translations/af.json new file mode 100644 index 00000000000..b0e60d5aef3 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Tuis", + "not_home": "Elders" + } + }, + "title": "Toestel opspoorder" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ar.json b/homeassistant/components/device_tracker/translations/ar.json new file mode 100644 index 00000000000..a8f82c90ae1 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644", + "not_home": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644" + } + }, + "title": "\u062a\u0639\u0642\u0628 \u0627\u0644\u062c\u0647\u0627\u0632" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/bg.json b/homeassistant/components/device_tracker/translations/bg.json new file mode 100644 index 00000000000..a687290cdac --- /dev/null +++ b/homeassistant/components/device_tracker/translations/bg.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \u0435 \u0443 \u0434\u043e\u043c\u0430", + "is_not_home": "{entity_name} \u043d\u0435 \u0435 \u0443 \u0434\u043e\u043c\u0430" + } + }, + "state": { + "_": { + "home": "\u0412\u043a\u044a\u0449\u0438", + "not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430" + } + }, + "title": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/bs.json b/homeassistant/components/device_tracker/translations/bs.json new file mode 100644 index 00000000000..3221e7edc84 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Kod ku\u0107e", + "not_home": "Odsutan" + } + }, + "title": "Pra\u0107enje ure\u0111aja" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ca.json b/homeassistant/components/device_tracker/translations/ca.json new file mode 100644 index 00000000000..d2fc2103691 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ca.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \u00e9s a casa", + "is_not_home": "{entity_name} no \u00e9s a casa" + } + }, + "state": { + "_": { + "home": "A casa", + "not_home": "Fora" + } + }, + "title": "Seguiment de dispositius" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/cs.json b/homeassistant/components/device_tracker/translations/cs.json new file mode 100644 index 00000000000..ed1923ceb07 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/cs.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} je doma", + "is_not_home": "{entity_name} nen\u00ed doma" + } + }, + "state": { + "_": { + "home": "Doma", + "not_home": "Pry\u010d" + } + }, + "title": "Sledova\u010d za\u0159\u00edzen\u00ed" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/cy.json b/homeassistant/components/device_tracker/translations/cy.json new file mode 100644 index 00000000000..373281bf897 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Gartref", + "not_home": "Diim gartref" + } + }, + "title": "Traciwr dyfais" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/da.json b/homeassistant/components/device_tracker/translations/da.json new file mode 100644 index 00000000000..c663c9028a0 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/da.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} er hjemme", + "is_not_home": "{entity_name} er ikke hjemme" + } + }, + "state": { + "_": { + "home": "Hjemme", + "not_home": "Ude" + } + }, + "title": "Enhedssporing" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/de.json b/homeassistant/components/device_tracker/translations/de.json new file mode 100644 index 00000000000..651805dcb14 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/de.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} ist Zuhause", + "is_not_home": "{entity_name} ist nicht zu Hause" + } + }, + "state": { + "_": { + "home": "Zu Hause", + "not_home": "Abwesend" + } + }, + "title": "Ger\u00e4te-Tracker" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/el.json b/homeassistant/components/device_tracker/translations/el.json new file mode 100644 index 00000000000..6a6c0969eb2 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u03a3\u03c0\u03af\u03c4\u03b9", + "not_home": "\u0395\u03ba\u03c4\u03cc\u03c2 \u03a3\u03c0\u03b9\u03c4\u03b9\u03bf\u03cd" + } + }, + "title": "\u03a3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae \u03b1\u03bd\u03b9\u03c7\u03bd\u03b5\u03c5\u03c4\u03ae" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/en.json b/homeassistant/components/device_tracker/translations/en.json new file mode 100644 index 00000000000..dad3e1d52b7 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/en.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} is home", + "is_not_home": "{entity_name} is not home" + } + }, + "state": { + "_": { + "home": "Home", + "not_home": "Away" + } + }, + "title": "Device tracker" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/es-419.json b/homeassistant/components/device_tracker/translations/es-419.json new file mode 100644 index 00000000000..8a8b7197dcb --- /dev/null +++ b/homeassistant/components/device_tracker/translations/es-419.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} est\u00e1 en casa", + "is_not_home": "{entity_name} no est\u00e1 en casa" + } + }, + "state": { + "_": { + "home": "En Casa", + "not_home": "Fuera de Casa" + } + }, + "title": "Rastreador de dispositivos" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/es.json b/homeassistant/components/device_tracker/translations/es.json new file mode 100644 index 00000000000..60bb86fbd27 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/es.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} est\u00e1 en casa", + "is_not_home": "{entity_name} no est\u00e1 en casa" + } + }, + "state": { + "_": { + "home": "En casa", + "not_home": "Fuera de casa" + } + }, + "title": "Rastreador de dispositivo" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/et.json b/homeassistant/components/device_tracker/translations/et.json new file mode 100644 index 00000000000..340c03665ff --- /dev/null +++ b/homeassistant/components/device_tracker/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Kodus", + "not_home": "Eemal" + } + }, + "title": "Seadme tr\u00e4kker" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/eu.json b/homeassistant/components/device_tracker/translations/eu.json new file mode 100644 index 00000000000..179a4448f5f --- /dev/null +++ b/homeassistant/components/device_tracker/translations/eu.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "Etxean", + "not_home": "Kanpoan" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/fa.json b/homeassistant/components/device_tracker/translations/fa.json new file mode 100644 index 00000000000..2354717bdcd --- /dev/null +++ b/homeassistant/components/device_tracker/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u062e\u0627\u0646\u0647", + "not_home": "\u0628\u06cc\u0631\u0648\u0646" + } + }, + "title": "\u0631\u062f\u06cc\u0627\u0628" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/fi.json b/homeassistant/components/device_tracker/translations/fi.json new file mode 100644 index 00000000000..922e5eb5560 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Kotona", + "not_home": "Poissa" + } + }, + "title": "Laiteseuranta" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/fr.json b/homeassistant/components/device_tracker/translations/fr.json new file mode 100644 index 00000000000..14cbd04871c --- /dev/null +++ b/homeassistant/components/device_tracker/translations/fr.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} est \u00e0 la maison", + "is_not_home": "{entity_name} n'est pas \u00e0 la maison" + } + }, + "state": { + "_": { + "home": "Pr\u00e9sent", + "not_home": "Absent" + } + }, + "title": "Dispositif de suivi" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/gsw.json b/homeassistant/components/device_tracker/translations/gsw.json new file mode 100644 index 00000000000..2f52ef016e6 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/gsw.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "Dahei", + "not_home": "Nid Dahei" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/he.json b/homeassistant/components/device_tracker/translations/he.json new file mode 100644 index 00000000000..5db22ed4071 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u05d1\u05d1\u05d9\u05ea", + "not_home": "\u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea" + } + }, + "title": "\u05de\u05e2\u05e7\u05d1 \u05de\u05db\u05e9\u05d9\u05e8" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/hi.json b/homeassistant/components/device_tracker/translations/hi.json new file mode 100644 index 00000000000..df8c83c1091 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "\u0918\u0930" + } + }, + "title": "\u0921\u093f\u0935\u093e\u0907\u0938 \u091f\u094d\u0930\u0948\u0915\u0930" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/hr.json b/homeassistant/components/device_tracker/translations/hr.json new file mode 100644 index 00000000000..eaef3d43c4f --- /dev/null +++ b/homeassistant/components/device_tracker/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doma", + "not_home": "Odsutan" + } + }, + "title": "Pra\u0107enje ure\u0111aja" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/hu.json b/homeassistant/components/device_tracker/translations/hu.json new file mode 100644 index 00000000000..2954376e314 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/hu.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} otthon van", + "is_not_home": "{entity_name} nincs otthon" + } + }, + "state": { + "_": { + "home": "Otthon", + "not_home": "T\u00e1vol" + } + }, + "title": "Eszk\u00f6z nyomk\u00f6vet\u0151" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/hy.json b/homeassistant/components/device_tracker/translations/hy.json new file mode 100644 index 00000000000..48730500a19 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u054f\u0578\u0582\u0576", + "not_home": "\u0540\u0565\u057c\u0578\u0582" + } + }, + "title": "\u054d\u0561\u0580\u0584\u056b \u0578\u0580\u0578\u0576\u056b\u0579" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/id.json b/homeassistant/components/device_tracker/translations/id.json new file mode 100644 index 00000000000..99baa5e1a76 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Rumah", + "not_home": "Keluar" + } + }, + "title": "Pelacak perangkat" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/is.json b/homeassistant/components/device_tracker/translations/is.json new file mode 100644 index 00000000000..433d2a6afb8 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Heima", + "not_home": "Fjarverandi" + } + }, + "title": "Rekja t\u00e6ki" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/it.json b/homeassistant/components/device_tracker/translations/it.json new file mode 100644 index 00000000000..bcb97536310 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/it.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \u00e8 in casa", + "is_not_home": "{entity_name} non \u00e8 in casa" + } + }, + "state": { + "_": { + "home": "A casa", + "not_home": "Fuori casa" + } + }, + "title": "Tracciatore dispositivo" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ja.json b/homeassistant/components/device_tracker/translations/ja.json new file mode 100644 index 00000000000..6679d6cca06 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "\u5728\u5b85", + "not_home": "\u5916\u51fa" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ko.json b/homeassistant/components/device_tracker/translations/ko.json new file mode 100644 index 00000000000..e3e72d49c89 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ko.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \uc774(\uac00) \uc9d1\uc5d0 \uc788\uc73c\uba74", + "is_not_home": "{entity_name} \uc774(\uac00) \uc678\ucd9c \uc911\uc774\uba74" + } + }, + "state": { + "_": { + "home": "\uc7ac\uc2e4", + "not_home": "\uc678\ucd9c" + } + }, + "title": "\ucd94\uc801 \uae30\uae30" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/lb.json b/homeassistant/components/device_tracker/translations/lb.json new file mode 100644 index 00000000000..88d1b40b7ba --- /dev/null +++ b/homeassistant/components/device_tracker/translations/lb.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} ass doheem", + "is_not_home": "{entity_name} ass net doheem" + } + }, + "state": { + "_": { + "home": "Doheem", + "not_home": "\u00cbnnerwee" + } + }, + "title": "Apparat Verfolgung" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/lv.json b/homeassistant/components/device_tracker/translations/lv.json new file mode 100644 index 00000000000..5ebb6b99979 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "M\u0101j\u0101s", + "not_home": "Prom" + } + }, + "title": "Ier\u012b\u010du izsekot\u0101js" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/nb.json b/homeassistant/components/device_tracker/translations/nb.json new file mode 100644 index 00000000000..6a9e073ca7d --- /dev/null +++ b/homeassistant/components/device_tracker/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Hjemme", + "not_home": "Borte" + } + }, + "title": "Enhetssporing" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/nl.json b/homeassistant/components/device_tracker/translations/nl.json new file mode 100644 index 00000000000..99c0652d982 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/nl.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} is thuis", + "is_not_home": "{entity_name} is niet thuis" + } + }, + "state": { + "_": { + "home": "Thuis", + "not_home": "Afwezig" + } + }, + "title": "Apparaat tracker" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/nn.json b/homeassistant/components/device_tracker/translations/nn.json new file mode 100644 index 00000000000..6dff5626992 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Heime", + "not_home": "Borte" + } + }, + "title": "Einingssporing" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/no.json b/homeassistant/components/device_tracker/translations/no.json new file mode 100644 index 00000000000..8073a7f5871 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/no.json @@ -0,0 +1,9 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} er hjemme", + "is_not_home": "{entity_name} er ikke hjemme" + } + }, + "title": "Enhetssporing" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/pl.json b/homeassistant/components/device_tracker/translations/pl.json new file mode 100644 index 00000000000..94cc3d97138 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/pl.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "urz\u0105dzenie {entity_name} jest w domu", + "is_not_home": "urz\u0105dzenie {entity_name} jest poza domem" + } + }, + "state": { + "_": { + "home": "w domu", + "not_home": "poza domem" + } + }, + "title": "\u015aledzenie urz\u0105dze\u0144" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/pt-BR.json b/homeassistant/components/device_tracker/translations/pt-BR.json new file mode 100644 index 00000000000..c20638a4a61 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Em casa", + "not_home": "Ausente" + } + }, + "title": "Rastreador de dispositivo" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/pt.json b/homeassistant/components/device_tracker/translations/pt.json new file mode 100644 index 00000000000..420a2a5ed36 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/pt.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} est\u00e1 em casa", + "is_not_home": "{entity_name} n\u00e3o est\u00e1 em casa" + } + }, + "state": { + "_": { + "home": "Casa", + "not_home": "Fora" + } + }, + "title": "Monitorizador de dispositivos" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ro.json b/homeassistant/components/device_tracker/translations/ro.json new file mode 100644 index 00000000000..a2f6bb3d08c --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Acas\u0103", + "not_home": "Plecat" + } + }, + "title": "Dispozitiv tracker" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ru.json b/homeassistant/components/device_tracker/translations/ru.json new file mode 100644 index 00000000000..8ea3398e3e2 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ru.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \u0434\u043e\u043c\u0430", + "is_not_home": "{entity_name} \u043d\u0435 \u0434\u043e\u043c\u0430" + } + }, + "state": { + "_": { + "home": "\u0414\u043e\u043c\u0430", + "not_home": "\u041d\u0435 \u0434\u043e\u043c\u0430" + } + }, + "title": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/sk.json b/homeassistant/components/device_tracker/translations/sk.json new file mode 100644 index 00000000000..9d52c35e2cb --- /dev/null +++ b/homeassistant/components/device_tracker/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doma", + "not_home": "Pre\u010d" + } + }, + "title": "Sledovanie zariadenia" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/sl.json b/homeassistant/components/device_tracker/translations/sl.json new file mode 100644 index 00000000000..d5ba84f5e29 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/sl.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} je doma", + "is_not_home": "{entity_name} ni doma" + } + }, + "state": { + "_": { + "home": "Doma", + "not_home": "Odsoten" + } + }, + "title": "Sledilnik naprave" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/sv.json b/homeassistant/components/device_tracker/translations/sv.json new file mode 100644 index 00000000000..7ef1cc7b2f8 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/sv.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \u00e4r hemma", + "is_not_home": "{entity_name} \u00e4r inte hemma" + } + }, + "state": { + "_": { + "home": "Hemma", + "not_home": "Borta" + } + }, + "title": "Enhetssp\u00e5rare" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/ta.json b/homeassistant/components/device_tracker/translations/ta.json new file mode 100644 index 00000000000..f3c6966ab99 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "\u0bae\u0bc1\u0b95\u0baa\u0bcd\u0baa\u0bc1", + "not_home": "\u0ba4\u0bca\u0bb2\u0bc8\u0bb5\u0bbf\u0bb2\u0bcd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/te.json b/homeassistant/components/device_tracker/translations/te.json new file mode 100644 index 00000000000..89bc428d2f9 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0c07\u0c02\u0c1f", + "not_home": "\u0c2c\u0c2f\u0c1f" + } + }, + "title": "\u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c02 \u0c1f\u0c4d\u0c30\u0c3e\u0c15\u0c30\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/th.json b/homeassistant/components/device_tracker/translations/th.json new file mode 100644 index 00000000000..26db63ab4d4 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19", + "not_home": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48" + } + }, + "title": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/tr.json b/homeassistant/components/device_tracker/translations/tr.json new file mode 100644 index 00000000000..6bb5ae14603 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Evde", + "not_home": "D\u0131\u015far\u0131da" + } + }, + "title": "Cihaz izleyici" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/uk.json b/homeassistant/components/device_tracker/translations/uk.json new file mode 100644 index 00000000000..f49c7acc0e3 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0412\u0434\u043e\u043c\u0430", + "not_home": "\u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439" + } + }, + "title": "\u0422\u0440\u0435\u043a\u0435\u0440 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/vi.json b/homeassistant/components/device_tracker/translations/vi.json new file mode 100644 index 00000000000..7b0be26d4ad --- /dev/null +++ b/homeassistant/components/device_tracker/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u1ede nh\u00e0", + "not_home": "\u0110i v\u1eafng" + } + }, + "title": "Tr\u00ecnh theo d\u00f5i thi\u1ebft b\u1ecb" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/zh-Hans.json b/homeassistant/components/device_tracker/translations/zh-Hans.json new file mode 100644 index 00000000000..28adcdbdd1a --- /dev/null +++ b/homeassistant/components/device_tracker/translations/zh-Hans.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name} \u5728\u5bb6", + "is_not_home": "{entity_name} \u4e0d\u5728\u5bb6" + } + }, + "state": { + "_": { + "home": "\u5728\u5bb6", + "not_home": "\u79bb\u5f00" + } + }, + "title": "\u8bbe\u5907\u8ddf\u8e2a\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/device_tracker/translations/zh-Hant.json b/homeassistant/components/device_tracker/translations/zh-Hant.json new file mode 100644 index 00000000000..b1d3e1a1779 --- /dev/null +++ b/homeassistant/components/device_tracker/translations/zh-Hant.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_home": "{entity_name}\u5728\u5bb6", + "is_not_home": "{entity_name}\u4e0d\u5728\u5bb6" + } + }, + "state": { + "_": { + "home": "\u5728\u5bb6", + "not_home": "\u96e2\u5bb6" + } + }, + "title": "\u8a2d\u5099\u8ffd\u8e64\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/dht/manifest.json b/homeassistant/components/dht/manifest.json index bb0e2b8f248..5e747d94732 100644 --- a/homeassistant/components/dht/manifest.json +++ b/homeassistant/components/dht/manifest.json @@ -3,6 +3,5 @@ "name": "DHT Sensor", "documentation": "https://www.home-assistant.io/integrations/dht", "requirements": ["Adafruit-DHT==1.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dht/sensor.py b/homeassistant/components/dht/sensor.py index b9461fae7d7..6f3e58d4ad4 100644 --- a/homeassistant/components/dht/sensor.py +++ b/homeassistant/components/dht/sensor.py @@ -63,10 +63,10 @@ def setup_platform(hass, config, add_entities, discovery_info=None): "DHT11": Adafruit_DHT.DHT11, "DHT22": Adafruit_DHT.DHT22, } - sensor = available_sensors.get(config.get(CONF_SENSOR)) - pin = config.get(CONF_PIN) - temperature_offset = config.get(CONF_TEMPERATURE_OFFSET) - humidity_offset = config.get(CONF_HUMIDITY_OFFSET) + sensor = available_sensors.get(config[CONF_SENSOR]) + pin = config[CONF_PIN] + temperature_offset = config[CONF_TEMPERATURE_OFFSET] + humidity_offset = config[CONF_HUMIDITY_OFFSET] if not sensor: _LOGGER.error("DHT sensor type is not supported") @@ -74,7 +74,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): data = DHTClient(Adafruit_DHT, sensor, pin) dev = [] - name = config.get(CONF_NAME) + name = config[CONF_NAME] try: for variable in config[CONF_MONITORED_CONDITIONS]: @@ -165,7 +165,7 @@ class DHTClient: self.adafruit_dht = adafruit_dht self.sensor = sensor self.pin = pin - self.data = dict() + self.data = {} @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): diff --git a/homeassistant/components/dialogflow/.translations/bg.json b/homeassistant/components/dialogflow/.translations/bg.json deleted file mode 100644 index af1237ce211..00000000000 --- a/homeassistant/components/dialogflow/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Dialogflow.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 [\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Dialogflow]({dialogflow_url}). \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST\n - Content Type: application/json\n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Dialogflow?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/ca.json b/homeassistant/components/dialogflow/.translations/ca.json deleted file mode 100644 index f6dfc9399c2..00000000000 --- a/homeassistant/components/dialogflow/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Dialogflow.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar la [integraci\u00f3 webhook de Dialogflow]({dialogflow_url}). \n\n Completa la seg\u00fcent informaci\u00f3: \n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n- Tipus de contingut: application/json\n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar Dialogflow?", - "title": "Configuraci\u00f3 del Webhook de Dialogflow" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/cs.json b/homeassistant/components/dialogflow/.translations/cs.json deleted file mode 100644 index db41ee98e01..00000000000 --- a/homeassistant/components/dialogflow/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy Dialogflow.", - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset nastavit [integraci Dialogflow]({dialogflow_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}' \n - Metoda: POST \n - Typ obsahu: application/json\n\n Podrobn\u011bj\u0161\u00ed informace naleznete v [dokumentaci]({docs_url})." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit Dialogflow?", - "title": "Nastavit Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/da.json b/homeassistant/components/dialogflow/.translations/da.json deleted file mode 100644 index c682c07a8b9..00000000000 --- a/homeassistant/components/dialogflow/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Dialogflow-meddelelser", - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere [webhook-integration med Dialogflow]({dialogflow_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/json\n\nSe [dokumentationen]({docs_url}) for yderligere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Dialogflow?", - "title": "Konfigurer Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/de.json b/homeassistant/components/dialogflow/.translations/de.json deleted file mode 100644 index 1dbf1fa0c8a..00000000000 --- a/homeassistant/components/dialogflow/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Dialogflow-Nachrichten empfangen zu k\u00f6nnen.", - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "Um Ereignisse an den Home Assistant zu senden, musst du [Webhook-Integration von Dialogflow]({dialogflow_url}) einrichten. \n\nF\u00fclle die folgenden Informationen aus: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhaltstyp: application / json \n\nWeitere Informationen findest du in der [Dokumentation]({docs_url})." - }, - "step": { - "user": { - "description": "M\u00f6chtest du Dialogflow wirklich einrichten?", - "title": "Dialogflow Webhook einrichten" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/en.json b/homeassistant/components/dialogflow/.translations/en.json deleted file mode 100644 index 9e1cbbb636e..00000000000 --- a/homeassistant/components/dialogflow/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive Dialogflow messages.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup [webhook integration of Dialogflow]({dialogflow_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) for further details." - }, - "step": { - "user": { - "description": "Are you sure you want to set up Dialogflow?", - "title": "Set up the Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/es-419.json b/homeassistant/components/dialogflow/.translations/es-419.json deleted file mode 100644 index 41a66b038f5..00000000000 --- a/homeassistant/components/dialogflow/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Dialogflow.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar [integraci\u00f3n de webhook de Dialogflow] ( {dialogflow_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: aplicaci\u00f3n / json \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1 seguro de que desea configurar Dialogflow?", - "title": "Configurar el Webhook de Dialogflow" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/es.json b/homeassistant/components/dialogflow/.translations/es.json deleted file mode 100644 index c106543e158..00000000000 --- a/homeassistant/components/dialogflow/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Dialogflow.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, necesitas configurar [Integraci\u00f3n de flujos de dialogo de webhook]({dialogflow_url}).\n\nRellena la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nVer [Documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar Dialogflow?", - "title": "Configurar el Webhook de Dialogflow" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/fr.json b/homeassistant/components/dialogflow/.translations/fr.json deleted file mode 100644 index 0be75b94be9..00000000000 --- a/homeassistant/components/dialogflow/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages Dialogflow.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer [Webhooks avec Dialogflow] ( {dialogflow_url} ). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / json \n\n Voir [la documentation] ( {docs_url} ) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer Dialogflow?", - "title": "Configurer le Webhook Dialogflow" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/hu.json b/homeassistant/components/dialogflow/.translations/hu.json deleted file mode 100644 index 89889fd6048..00000000000 --- a/homeassistant/components/dialogflow/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A Home Assistant rendszerednek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l a Dialogflow \u00fczenetek fogad\u00e1s\u00e1hoz.", - "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani az Dialogflowt?", - "title": "Dialogflow Webhook be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/it.json b/homeassistant/components/dialogflow/.translations/it.json deleted file mode 100644 index cc1a7ac8510..00000000000 --- a/homeassistant/components/dialogflow/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Dialogflow.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai configurare [l'integrazione webhook di Dialogflow]({dialogflow_url})\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n - Content Type: application/json \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare Dialogflow?", - "title": "Configura il webhook di Dialogflow" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/ko.json b/homeassistant/components/dialogflow/.translations/ko.json deleted file mode 100644 index 2010495d959..00000000000 --- a/homeassistant/components/dialogflow/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Dialogflow \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 [Dialogflow Webhook]({dialogflow_url}) \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n - Content Type: application/json\n \n\uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Dialogflow \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Dialogflow Webhook \uc124\uc815" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/lb.json b/homeassistant/components/dialogflow/.translations/lb.json deleted file mode 100644 index 752acbdecd3..00000000000 --- a/homeassistant/components/dialogflow/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Dialogflow Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss [Webhook Integratioun mat Dialogflow]({dialogflow_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}) fir w\u00e9ider D\u00e9tailer." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Dialogflowanzeriichten?", - "title": "Dialogflow Webhook ariichten" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/nl.json b/homeassistant/components/dialogflow/.translations/nl.json deleted file mode 100644 index 9871df0d262..00000000000 --- a/homeassistant/components/dialogflow/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Dialogflow-berichten te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Om evenementen naar de Home Assistant te verzenden, moet u [webhookintegratie van Dialogflow]({dialogflow_url}) instellen. \n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json \n\nZie [de documentatie]({docs_url}) voor verdere informatie." - }, - "step": { - "user": { - "description": "Weet u zeker dat u Dialogflow wilt instellen?", - "title": "Stel de Twilio Dialogflow in" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/nn.json b/homeassistant/components/dialogflow/.translations/nn.json deleted file mode 100644 index 5a96b853eb0..00000000000 --- a/homeassistant/components/dialogflow/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/no.json b/homeassistant/components/dialogflow/.translations/no.json deleted file mode 100644 index 4d23ac8aaba..00000000000 --- a/homeassistant/components/dialogflow/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant forekomst m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta Dialogflow meldinger.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp [webhook integrasjon av Dialogflow]({dialogflow_url}). \n\nFyll ut f\u00f8lgende informasjon: \n\n- URL: `{webhook_url}` \n- Metode: POST\n- Innholdstype: application/json\n\nSe [dokumentasjonen]({docs_url}) for ytterligere detaljer." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du \u00f8nsker \u00e5 sette opp Dialogflow?", - "title": "Sett opp Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/pl.json b/homeassistant/components/dialogflow/.translations/pl.json deleted file mode 100644 index c555a3e09b3..00000000000 --- a/homeassistant/components/dialogflow/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty Dialogflow.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 [Dialogflow Webhook]({dialogflow_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n - Typ zawarto\u015bci: application/json\n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Dialogflow?", - "title": "Konfiguracja Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/pt-BR.json b/homeassistant/components/dialogflow/.translations/pt-BR.json deleted file mode 100644 index 6d709875771..00000000000 --- a/homeassistant/components/dialogflow/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens da Dialogflow.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar [Integra\u00e7\u00e3o do webhook da Dialogflow] ( {dialogflow_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / json \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Dialogflow?", - "title": "Configurar o Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/pt.json b/homeassistant/components/dialogflow/.translations/pt.json deleted file mode 100644 index de754080f17..00000000000 --- a/homeassistant/components/dialogflow/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens Dialogflow.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar o [Dialogflow Webhook] ({dialogflow_url}). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application/json\n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) para obter mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Dialogflow?", - "title": "Configurar o Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/ru.json b/homeassistant/components/dialogflow/.translations/ru.json deleted file mode 100644 index 88405328896..00000000000 --- a/homeassistant/components/dialogflow/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Dialogflow.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f [Dialogflow]({dialogflow_url}).\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Dialogflow?", - "title": "Dialogflow" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/sl.json b/homeassistant/components/dialogflow/.translations/sl.json deleted file mode 100644 index b6bd30f7997..00000000000 --- a/homeassistant/components/dialogflow/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u010ce \u017eelite prejemati sporo\u010dila dialogflow, mora biti Home Assistant dostopen prek interneta.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "Za po\u0161iljanje dogodkov Home Assistant-u, boste morali nastaviti [webhook z Dialogflow]({twilio_url}).\n\nIzpolnite naslednje informacije:\n\n- URL: `{webhook_url}`\n- Metoda: POST\n- Vrsta vsebine: application/x-www-form-urlencoded\n\nGlej [dokumentacijo]({docs_url}) za nadaljna navodila." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti dialogflow?", - "title": "Nastavite Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/sv.json b/homeassistant/components/dialogflow/.translations/sv.json deleted file mode 100644 index 07fe5e11217..00000000000 --- a/homeassistant/components/dialogflow/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot Dialogflow meddelanden.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera [webhook funktionen i Dialogflow]({dialogflow_url}).\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Dialogflow?", - "title": "Konfigurera Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/zh-Hans.json b/homeassistant/components/dialogflow/.translations/zh-Hans.json deleted file mode 100644 index 8a542dd0d62..00000000000 --- a/homeassistant/components/dialogflow/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u63a5\u5165\u4e92\u8054\u7f51\u4ee5\u63a5\u6536 Dialogflow \u6d88\u606f\u3002", - "one_instance_allowed": "\u4ec5\u9700\u4e00\u4e2a\u5b9e\u4f8b" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e [Dialogflow \u7684 Webhook \u96c6\u6210]({dialogflow_url})\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Dialogflow \u5417?", - "title": "\u8bbe\u7f6e Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/.translations/zh-Hant.json b/homeassistant/components/dialogflow/.translations/zh-Hant.json deleted file mode 100644 index 3cb54145ad8..00000000000 --- a/homeassistant/components/dialogflow/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Dialogflow \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8a2d\u5b9a [webhook integration of Dialogflow]({dialogflow_url})\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Dialogflow\uff1f", - "title": "\u8a2d\u5b9a Dialogflow Webhook" - } - }, - "title": "Dialogflow" - } -} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/manifest.json b/homeassistant/components/dialogflow/manifest.json index 493351c2641..53aed42afaa 100644 --- a/homeassistant/components/dialogflow/manifest.json +++ b/homeassistant/components/dialogflow/manifest.json @@ -3,7 +3,6 @@ "name": "Dialogflow", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/dialogflow", - "requirements": [], "dependencies": ["webhook"], "codeowners": [] } diff --git a/homeassistant/components/dialogflow/strings.json b/homeassistant/components/dialogflow/strings.json index 4a3e91a3e50..d1a691dc92b 100644 --- a/homeassistant/components/dialogflow/strings.json +++ b/homeassistant/components/dialogflow/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Dialogflow", "step": { "user": { "title": "Set up the Dialogflow Webhook", diff --git a/homeassistant/components/dialogflow/translations/bg.json b/homeassistant/components/dialogflow/translations/bg.json new file mode 100644 index 00000000000..069545d93c8 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Dialogflow.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 [\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Dialogflow]({dialogflow_url}). \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST\n - Content Type: application/json\n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Dialogflow?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/ca.json b/homeassistant/components/dialogflow/translations/ca.json new file mode 100644 index 00000000000..17dd38ffb20 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Dialogflow.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar la [integraci\u00f3 webhook de Dialogflow]({dialogflow_url}). \n\n Completa la seg\u00fcent informaci\u00f3: \n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n- Tipus de contingut: application/json\n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar Dialogflow?", + "title": "Configuraci\u00f3 del Webhook de Dialogflow" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/cs.json b/homeassistant/components/dialogflow/translations/cs.json new file mode 100644 index 00000000000..3ad8ba78c72 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy Dialogflow.", + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset nastavit [integraci Dialogflow]({dialogflow_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}' \n - Metoda: POST \n - Typ obsahu: application/json\n\n Podrobn\u011bj\u0161\u00ed informace naleznete v [dokumentaci]({docs_url})." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit Dialogflow?", + "title": "Nastavit Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/da.json b/homeassistant/components/dialogflow/translations/da.json new file mode 100644 index 00000000000..bcab485a51a --- /dev/null +++ b/homeassistant/components/dialogflow/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Dialogflow-meddelelser", + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere [webhook-integration med Dialogflow]({dialogflow_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/json\n\nSe [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Dialogflow?", + "title": "Konfigurer Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/de.json b/homeassistant/components/dialogflow/translations/de.json new file mode 100644 index 00000000000..cc65084d5ae --- /dev/null +++ b/homeassistant/components/dialogflow/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Dialogflow-Nachrichten empfangen zu k\u00f6nnen.", + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "Um Ereignisse an den Home Assistant zu senden, musst du [Webhook-Integration von Dialogflow]({dialogflow_url}) einrichten. \n\nF\u00fclle die folgenden Informationen aus: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhaltstyp: application / json \n\nWeitere Informationen findest du in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "M\u00f6chtest du Dialogflow wirklich einrichten?", + "title": "Dialogflow Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/en.json b/homeassistant/components/dialogflow/translations/en.json new file mode 100644 index 00000000000..cc9eda6a968 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive Dialogflow messages.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup [webhook integration of Dialogflow]({dialogflow_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up Dialogflow?", + "title": "Set up the Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/es-419.json b/homeassistant/components/dialogflow/translations/es-419.json new file mode 100644 index 00000000000..1aa3d23cb7e --- /dev/null +++ b/homeassistant/components/dialogflow/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Dialogflow.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar [integraci\u00f3n de webhook de Dialogflow] ( {dialogflow_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: aplicaci\u00f3n / json \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1 seguro de que desea configurar Dialogflow?", + "title": "Configurar el Webhook de Dialogflow" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/es.json b/homeassistant/components/dialogflow/translations/es.json new file mode 100644 index 00000000000..f7131348499 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Dialogflow.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, necesitas configurar [Integraci\u00f3n de flujos de dialogo de webhook]({dialogflow_url}).\n\nRellena la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nVer [Documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar Dialogflow?", + "title": "Configurar el Webhook de Dialogflow" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/fr.json b/homeassistant/components/dialogflow/translations/fr.json new file mode 100644 index 00000000000..81de11edbd5 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages Dialogflow.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer [Webhooks avec Dialogflow] ( {dialogflow_url} ). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / json \n\n Voir [la documentation] ( {docs_url} ) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer Dialogflow?", + "title": "Configurer le Webhook Dialogflow" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/hu.json b/homeassistant/components/dialogflow/translations/hu.json new file mode 100644 index 00000000000..d44e7f60cc6 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A Home Assistant rendszerednek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l a Dialogflow \u00fczenetek fogad\u00e1s\u00e1hoz.", + "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani az Dialogflowt?", + "title": "Dialogflow Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/it.json b/homeassistant/components/dialogflow/translations/it.json new file mode 100644 index 00000000000..fe31d88e5c4 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Dialogflow.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai configurare [l'integrazione webhook di Dialogflow]({dialogflow_url})\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n - Content Type: application/json \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare Dialogflow?", + "title": "Configura il webhook di Dialogflow" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/ko.json b/homeassistant/components/dialogflow/translations/ko.json new file mode 100644 index 00000000000..ef49094efdb --- /dev/null +++ b/homeassistant/components/dialogflow/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Dialogflow \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 [Dialogflow Webhook]({dialogflow_url}) \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n - Content Type: application/json\n \n\uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Dialogflow \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Dialogflow Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/lb.json b/homeassistant/components/dialogflow/translations/lb.json new file mode 100644 index 00000000000..a10adda6702 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Dialogflow Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss [Webhook Integratioun mat Dialogflow]({dialogflow_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}) fir w\u00e9ider D\u00e9tailer." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Dialogflowanzeriichten?", + "title": "Dialogflow Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/nl.json b/homeassistant/components/dialogflow/translations/nl.json new file mode 100644 index 00000000000..47395371797 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Dialogflow-berichten te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Om evenementen naar de Home Assistant te verzenden, moet u [webhookintegratie van Dialogflow]({dialogflow_url}) instellen. \n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json \n\nZie [de documentatie]({docs_url}) voor verdere informatie." + }, + "step": { + "user": { + "description": "Weet u zeker dat u Dialogflow wilt instellen?", + "title": "Stel de Twilio Dialogflow in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/nn.json b/homeassistant/components/dialogflow/translations/nn.json new file mode 100644 index 00000000000..81b7a05690d --- /dev/null +++ b/homeassistant/components/dialogflow/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Dialogflow" +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/no.json b/homeassistant/components/dialogflow/translations/no.json new file mode 100644 index 00000000000..8abbc221b7c --- /dev/null +++ b/homeassistant/components/dialogflow/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant forekomst m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta Dialogflow meldinger.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp [webhook integrasjon av Dialogflow]({dialogflow_url}). \n\nFyll ut f\u00f8lgende informasjon: \n\n- URL: `{webhook_url}` \n- Metode: POST\n- Innholdstype: application/json\n\nSe [dokumentasjonen]({docs_url}) for ytterligere detaljer." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du \u00f8nsker \u00e5 sette opp Dialogflow?", + "title": "Sett opp Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/pl.json b/homeassistant/components/dialogflow/translations/pl.json new file mode 100644 index 00000000000..3b939a9f369 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty Dialogflow.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 [Dialogflow Webhook]({dialogflow_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n - Typ zawarto\u015bci: application/json\n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Dialogflow?", + "title": "Konfiguracja Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/pt-BR.json b/homeassistant/components/dialogflow/translations/pt-BR.json new file mode 100644 index 00000000000..3d4ad4ca34b --- /dev/null +++ b/homeassistant/components/dialogflow/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens da Dialogflow.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar [Integra\u00e7\u00e3o do webhook da Dialogflow] ( {dialogflow_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / json \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Dialogflow?", + "title": "Configurar o Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/pt.json b/homeassistant/components/dialogflow/translations/pt.json new file mode 100644 index 00000000000..e6ed255e6c0 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens Dialogflow.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar o [Dialogflow Webhook] ({dialogflow_url}). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application/json\n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) para obter mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Dialogflow?", + "title": "Configurar o Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/ru.json b/homeassistant/components/dialogflow/translations/ru.json new file mode 100644 index 00000000000..15ecb63392e --- /dev/null +++ b/homeassistant/components/dialogflow/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Dialogflow.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f [Dialogflow]({dialogflow_url}).\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Dialogflow?", + "title": "Dialogflow" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/sl.json b/homeassistant/components/dialogflow/translations/sl.json new file mode 100644 index 00000000000..742302dcd17 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u010ce \u017eelite prejemati sporo\u010dila dialogflow, mora biti Home Assistant dostopen prek interneta.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "Za po\u0161iljanje dogodkov Home Assistant-u, boste morali nastaviti [webhook z Dialogflow]({twilio_url}).\n\nIzpolnite naslednje informacije:\n\n- URL: `{webhook_url}`\n- Metoda: POST\n- Vrsta vsebine: application/x-www-form-urlencoded\n\nGlej [dokumentacijo]({docs_url}) za nadaljna navodila." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti dialogflow?", + "title": "Nastavite Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/sv.json b/homeassistant/components/dialogflow/translations/sv.json new file mode 100644 index 00000000000..bd3ae17ae74 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot Dialogflow meddelanden.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera [webhook funktionen i Dialogflow]({dialogflow_url}).\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Dialogflow?", + "title": "Konfigurera Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/zh-Hans.json b/homeassistant/components/dialogflow/translations/zh-Hans.json new file mode 100644 index 00000000000..8ae8cb6f78e --- /dev/null +++ b/homeassistant/components/dialogflow/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u63a5\u5165\u4e92\u8054\u7f51\u4ee5\u63a5\u6536 Dialogflow \u6d88\u606f\u3002", + "one_instance_allowed": "\u4ec5\u9700\u4e00\u4e2a\u5b9e\u4f8b" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e [Dialogflow \u7684 Webhook \u96c6\u6210]({dialogflow_url})\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Dialogflow \u5417?", + "title": "\u8bbe\u7f6e Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dialogflow/translations/zh-Hant.json b/homeassistant/components/dialogflow/translations/zh-Hant.json new file mode 100644 index 00000000000..a9c9316e600 --- /dev/null +++ b/homeassistant/components/dialogflow/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Dialogflow \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8a2d\u5b9a [webhook integration of Dialogflow]({dialogflow_url})\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Dialogflow\uff1f", + "title": "\u8a2d\u5b9a Dialogflow Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/digital_ocean/__init__.py b/homeassistant/components/digital_ocean/__init__.py index 33663f121d1..9ae61ed9b84 100644 --- a/homeassistant/components/digital_ocean/__init__.py +++ b/homeassistant/components/digital_ocean/__init__.py @@ -41,7 +41,7 @@ def setup(hass, config): """Set up the Digital Ocean component.""" conf = config[DOMAIN] - access_token = conf.get(CONF_ACCESS_TOKEN) + access_token = conf[CONF_ACCESS_TOKEN] digital = DigitalOcean(access_token) diff --git a/homeassistant/components/digital_ocean/binary_sensor.py b/homeassistant/components/digital_ocean/binary_sensor.py index 50c87907774..c3515177535 100644 --- a/homeassistant/components/digital_ocean/binary_sensor.py +++ b/homeassistant/components/digital_ocean/binary_sensor.py @@ -37,7 +37,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if not digital: return False - droplets = config.get(CONF_DROPLETS) + droplets = config[CONF_DROPLETS] dev = [] for droplet in droplets: diff --git a/homeassistant/components/digital_ocean/manifest.json b/homeassistant/components/digital_ocean/manifest.json index 8bf916a802d..217803ef195 100644 --- a/homeassistant/components/digital_ocean/manifest.json +++ b/homeassistant/components/digital_ocean/manifest.json @@ -3,6 +3,5 @@ "name": "Digital Ocean", "documentation": "https://www.home-assistant.io/integrations/digital_ocean", "requirements": ["python-digitalocean==1.13.2"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/digital_ocean/switch.py b/homeassistant/components/digital_ocean/switch.py index 95d2e15a510..9b9b8157bce 100644 --- a/homeassistant/components/digital_ocean/switch.py +++ b/homeassistant/components/digital_ocean/switch.py @@ -37,7 +37,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if not digital: return False - droplets = config.get(CONF_DROPLETS) + droplets = config[CONF_DROPLETS] dev = [] for droplet in droplets: diff --git a/homeassistant/components/digitalloggers/manifest.json b/homeassistant/components/digitalloggers/manifest.json index 723930666c4..9e6bd5b7e5f 100644 --- a/homeassistant/components/digitalloggers/manifest.json +++ b/homeassistant/components/digitalloggers/manifest.json @@ -3,6 +3,5 @@ "name": "Digital Loggers", "documentation": "https://www.home-assistant.io/integrations/digitalloggers", "requirements": ["dlipower==0.7.165"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/digitalloggers/switch.py b/homeassistant/components/digitalloggers/switch.py index 824af441688..268ec581c00 100644 --- a/homeassistant/components/digitalloggers/switch.py +++ b/homeassistant/components/digitalloggers/switch.py @@ -47,12 +47,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Find and return DIN III Relay switch.""" - host = config.get(CONF_HOST) - controller_name = config.get(CONF_NAME) - user = config.get(CONF_USERNAME) - pswd = config.get(CONF_PASSWORD) - tout = config.get(CONF_TIMEOUT) - cycl = config.get(CONF_CYCLETIME) + host = config[CONF_HOST] + controller_name = config[CONF_NAME] + user = config[CONF_USERNAME] + pswd = config[CONF_PASSWORD] + tout = config[CONF_TIMEOUT] + cycl = config[CONF_CYCLETIME] power_switch = dlipower.PowerSwitch( hostname=host, userid=user, password=pswd, timeout=tout, cycletime=cycl diff --git a/homeassistant/components/directv/.translations/ca.json b/homeassistant/components/directv/.translations/ca.json deleted file mode 100644 index 4bdc104e7de..00000000000 --- a/homeassistant/components/directv/.translations/ca.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El receptor DirecTV ja est\u00e0 configurat", - "unknown": "Error inesperat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar" - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "description": "Vols configurar {name}?", - "title": "Connexi\u00f3 amb el receptor DirecTV" - }, - "user": { - "data": { - "host": "Amfitri\u00f3 o adre\u00e7a IP" - }, - "title": "Connexi\u00f3 amb el receptor DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/de.json b/homeassistant/components/directv/.translations/de.json deleted file mode 100644 index 98a9e81f661..00000000000 --- a/homeassistant/components/directv/.translations/de.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Der DirecTV-Empf\u00e4nger ist bereits konfiguriert", - "unknown": "Unerwarteter Fehler" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut" - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "data": { - "one": "eins", - "other": "andere" - }, - "description": "M\u00f6chten Sie {name} einrichten?", - "title": "Stellen Sie eine Verbindung zum DirecTV-Empf\u00e4nger her" - }, - "user": { - "data": { - "host": "Host oder IP-Adresse" - }, - "title": "Schlie\u00dfen Sie den DirecTV-Empf\u00e4nger an" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/en.json b/homeassistant/components/directv/.translations/en.json deleted file mode 100644 index 774ce1f2035..00000000000 --- a/homeassistant/components/directv/.translations/en.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "DirecTV receiver is already configured", - "unknown": "Unexpected error" - }, - "error": { - "cannot_connect": "Failed to connect, please try again" - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "description": "Do you want to set up {name}?", - "title": "Connect to the DirecTV receiver" - }, - "user": { - "data": { - "host": "Host or IP address" - }, - "title": "Connect to the DirecTV receiver" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/es.json b/homeassistant/components/directv/.translations/es.json deleted file mode 100644 index f23f83481e5..00000000000 --- a/homeassistant/components/directv/.translations/es.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El receptor DirecTV ya est\u00e1 configurado", - "unknown": "Error inesperado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo." - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "description": "\u00bfQuieres configurar {name}?", - "title": "Conectar con el receptor DirecTV" - }, - "user": { - "data": { - "host": "Host o direcci\u00f3n IP" - }, - "title": "Conectar con el receptor DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/fr.json b/homeassistant/components/directv/.translations/fr.json deleted file mode 100644 index d7262f50eaf..00000000000 --- a/homeassistant/components/directv/.translations/fr.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le r\u00e9cepteur DirecTV est d\u00e9j\u00e0 configur\u00e9", - "unknown": "Erreur inattendue" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer" - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "description": "Voulez-vous configurer {name} ?", - "title": "Connectez-vous au r\u00e9cepteur DirecTV" - }, - "user": { - "data": { - "host": "H\u00f4te ou adresse IP" - }, - "title": "Connectez-vous au r\u00e9cepteur DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/it.json b/homeassistant/components/directv/.translations/it.json deleted file mode 100644 index 777b66d5c91..00000000000 --- a/homeassistant/components/directv/.translations/it.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il ricevitore DirecTV \u00e8 gi\u00e0 configurato", - "unknown": "Errore imprevisto" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare" - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "data": { - "one": "uno", - "other": "altri" - }, - "description": "Vuoi impostare {name} ?", - "title": "Connettersi al ricevitore DirecTV" - }, - "user": { - "data": { - "host": "Host o indirizzo IP" - }, - "title": "Collegamento al ricevitore DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/ko.json b/homeassistant/components/directv/.translations/ko.json deleted file mode 100644 index 5099b264085..00000000000 --- a/homeassistant/components/directv/.translations/ko.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "DirecTV \ub9ac\uc2dc\ubc84\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "description": "{name} \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "DirecTV \ub9ac\uc2dc\ubc84\uc5d0 \uc5f0\uacb0\ud558\uae30" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c" - }, - "title": "DirecTV \ub9ac\uc2dc\ubc84\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/lb.json b/homeassistant/components/directv/.translations/lb.json deleted file mode 100644 index 4e2a09c6bef..00000000000 --- a/homeassistant/components/directv/.translations/lb.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "DirecTV ass scho konfigur\u00e9iert", - "unknown": "Onerwaarte Feeler" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol." - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "data": { - "one": "Een", - "other": "Aner" - }, - "description": "Soll {name} konfigur\u00e9iert ginn?", - "title": "Mam DirecTV Receiver verbannen" - }, - "user": { - "data": { - "host": "Numm oder IP Adresse" - }, - "title": "Mam DirecTV Receiver verbannen" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/no.json b/homeassistant/components/directv/.translations/no.json deleted file mode 100644 index be2500b38b3..00000000000 --- a/homeassistant/components/directv/.translations/no.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "DirecTV-mottaker er allerede konfigurert", - "unknown": "Uventet feil" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen" - }, - "flow_title": "", - "step": { - "ssdp_confirm": { - "description": "Vil du sette opp {name} ?", - "title": "Koble til DirecTV-mottakeren" - }, - "user": { - "data": { - "host": "Vert eller IP-adresse" - }, - "title": "Koble til DirecTV-mottakeren" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/pl.json b/homeassistant/components/directv/.translations/pl.json deleted file mode 100644 index d9de1368ec5..00000000000 --- a/homeassistant/components/directv/.translations/pl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Odbiornik DirecTV jest ju\u017c skonfigurowany.", - "unknown": "Niespodziewany b\u0142\u0105d." - }, - "error": { - "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie." - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "data": { - "few": "kilka", - "many": "wiele", - "one": "jeden", - "other": "inne" - }, - "description": "Czy chcesz skonfigurowa\u0107 {name}?", - "title": "Po\u0142\u0105czenie z odbiornikiem DirecTV" - }, - "user": { - "data": { - "host": "Nazwa hosta lub adres IP" - }, - "title": "Po\u0142\u0105czenie z odbiornikiem DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/ru.json b/homeassistant/components/directv/.translations/ru.json deleted file mode 100644 index 08e18b89bf1..00000000000 --- a/homeassistant/components/directv/.translations/ru.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "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." - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name}?", - "title": "DirecTV" - }, - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" - }, - "title": "DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/sl.json b/homeassistant/components/directv/.translations/sl.json deleted file mode 100644 index ab20a6ec424..00000000000 --- a/homeassistant/components/directv/.translations/sl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sprejemnik DirecTV je \u017ee konfiguriran", - "unknown": "Nepri\u010dakovana napaka" - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova" - }, - "flow_title": "DirecTV: {name}", - "step": { - "ssdp_confirm": { - "data": { - "few": "nekaj", - "one": "ena", - "other": "drugo", - "two": "dva" - }, - "description": "Ali \u017eelite nastaviti {name} ?", - "title": "Pove\u017eite se s sprejemnikom DirecTV" - }, - "user": { - "data": { - "host": "Gostitelj ali IP naslov" - }, - "title": "Pove\u017eite se s sprejemnikom DirecTV" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/.translations/zh-Hant.json b/homeassistant/components/directv/.translations/zh-Hant.json deleted file mode 100644 index b7a1bb41f53..00000000000 --- a/homeassistant/components/directv/.translations/zh-Hant.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "DirectTV \u63a5\u6536\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21" - }, - "flow_title": "DirecTV\uff1a{name}", - "step": { - "ssdp_confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name}\uff1f", - "title": "\u9023\u7dda\u81f3 DirecTV \u63a5\u6536\u5668" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740" - }, - "title": "\u9023\u7dda\u81f3 DirecTV \u63a5\u6536\u5668" - } - }, - "title": "DirecTV" - } -} \ No newline at end of file diff --git a/homeassistant/components/directv/__init__.py b/homeassistant/components/directv/__init__.py index 0be5957a29a..677487945be 100644 --- a/homeassistant/components/directv/__init__.py +++ b/homeassistant/components/directv/__init__.py @@ -32,7 +32,7 @@ CONFIG_SCHEMA = vol.Schema( extra=vol.ALLOW_EXTRA, ) -PLATFORMS = ["media_player"] +PLATFORMS = ["media_player", "remote"] SCAN_INTERVAL = timedelta(seconds=30) diff --git a/homeassistant/components/directv/manifest.json b/homeassistant/components/directv/manifest.json index 4a712ba053e..e4be9cc3e25 100644 --- a/homeassistant/components/directv/manifest.json +++ b/homeassistant/components/directv/manifest.json @@ -2,8 +2,7 @@ "domain": "directv", "name": "DirecTV", "documentation": "https://www.home-assistant.io/integrations/directv", - "requirements": ["directv==0.2.0"], - "dependencies": [], + "requirements": ["directv==0.3.0"], "codeowners": ["@ctalkington"], "quality_scale": "gold", "config_flow": true, diff --git a/homeassistant/components/directv/media_player.py b/homeassistant/components/directv/media_player.py index b93577a03d6..ec39734573b 100644 --- a/homeassistant/components/directv/media_player.py +++ b/homeassistant/components/directv/media_player.py @@ -8,6 +8,7 @@ from homeassistant.components.media_player import MediaPlayerDevice from homeassistant.components.media_player.const import ( MEDIA_TYPE_CHANNEL, MEDIA_TYPE_MOVIE, + MEDIA_TYPE_MUSIC, MEDIA_TYPE_TVSHOW, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, @@ -34,6 +35,8 @@ from .const import ( _LOGGER = logging.getLogger(__name__) +KNOWN_MEDIA_TYPES = [MEDIA_TYPE_MOVIE, MEDIA_TYPE_MUSIC, MEDIA_TYPE_TVSHOW] + SUPPORT_DTV = ( SUPPORT_PAUSE | SUPPORT_TURN_ON @@ -177,8 +180,7 @@ class DIRECTVMediaPlayer(DIRECTVEntity, MediaPlayerDevice): if self._is_standby or self._program is None: return None - known_types = [MEDIA_TYPE_MOVIE, MEDIA_TYPE_TVSHOW] - if self._program.program_type in known_types: + if self._program.program_type in KNOWN_MEDIA_TYPES: return self._program.program_type return MEDIA_TYPE_MOVIE @@ -213,8 +215,27 @@ class DIRECTVMediaPlayer(DIRECTVEntity, MediaPlayerDevice): if self._is_standby or self._program is None: return None + if self.media_content_type == MEDIA_TYPE_MUSIC: + return self._program.music_title + return self._program.title + @property + def media_artist(self): + """Artist of current playing media, music track only.""" + if self._is_standby or self._program is None: + return None + + return self._program.music_artist + + @property + def media_album_name(self): + """Album name of current playing media, music track only.""" + if self._is_standby or self._program is None: + return None + + return self._program.music_album + @property def media_series_title(self): """Return the title of current episode of TV show.""" diff --git a/homeassistant/components/directv/remote.py b/homeassistant/components/directv/remote.py new file mode 100644 index 00000000000..8bc7c220833 --- /dev/null +++ b/homeassistant/components/directv/remote.py @@ -0,0 +1,106 @@ +"""Support for the DIRECTV remote.""" +from datetime import timedelta +import logging +from typing import Any, Callable, Iterable, List + +from directv import DIRECTV, DIRECTVError + +from homeassistant.components.remote import RemoteDevice +from homeassistant.config_entries import ConfigEntry +from homeassistant.helpers.typing import HomeAssistantType + +from . import DIRECTVEntity +from .const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + +SCAN_INTERVAL = timedelta(minutes=2) + + +async def async_setup_entry( + hass: HomeAssistantType, + entry: ConfigEntry, + async_add_entities: Callable[[List, bool], None], +) -> bool: + """Load DirecTV remote based on a config entry.""" + dtv = hass.data[DOMAIN][entry.entry_id] + entities = [] + + for location in dtv.device.locations: + entities.append( + DIRECTVRemote( + dtv=dtv, name=str.title(location.name), address=location.address, + ) + ) + + async_add_entities(entities, True) + + +class DIRECTVRemote(DIRECTVEntity, RemoteDevice): + """Device that sends commands to a DirecTV receiver.""" + + def __init__(self, *, dtv: DIRECTV, name: str, address: str = "0") -> None: + """Initialize DirecTV remote.""" + super().__init__( + dtv=dtv, name=name, address=address, + ) + + self._available = False + self._is_on = True + + @property + def available(self): + """Return if able to retrieve information from device or not.""" + return self._available + + @property + def unique_id(self): + """Return a unique ID.""" + if self._address == "0": + return self.dtv.device.info.receiver_id + + return self._address + + @property + def is_on(self) -> bool: + """Return True if entity is on.""" + return self._is_on + + async def async_update(self) -> None: + """Update device state.""" + status = await self.dtv.status(self._address) + + if status in ("active", "standby"): + self._available = True + self._is_on = status == "active" + else: + self._available = False + self._is_on = False + + async def async_turn_on(self, **kwargs: Any) -> None: + """Turn the device on.""" + await self.dtv.remote("poweron", self._address) + + async def async_turn_off(self, **kwargs: Any) -> None: + """Turn the device off.""" + await self.dtv.remote("poweroff", self._address) + + async def async_send_command(self, command: Iterable[str], **kwargs: Any) -> None: + """Send a command to a device. + + Supported keys: power, poweron, poweroff, format, + pause, rew, replay, stop, advance, ffwd, record, + play, guide, active, list, exit, back, menu, info, + up, down, left, right, select, red, green, yellow, + blue, chanup, chandown, prev, 0, 1, 2, 3, 4, 5, + 6, 7, 8, 9, dash, enter + """ + for single_command in command: + try: + await self.dtv.remote(single_command, self._address) + except DIRECTVError: + _LOGGER.exception( + "Sending command %s to device %s failed", + single_command, + self._device_id, + ) diff --git a/homeassistant/components/directv/strings.json b/homeassistant/components/directv/strings.json index e0a5a477ad2..24b97165513 100644 --- a/homeassistant/components/directv/strings.json +++ b/homeassistant/components/directv/strings.json @@ -1,23 +1,16 @@ { "config": { - "title": "DirecTV", "flow_title": "DirecTV: {name}", "step": { "ssdp_confirm": { "data": {}, - "description": "Do you want to set up {name}?", - "title": "Connect to the DirecTV receiver" + "description": "Do you want to set up {name}?" }, "user": { - "title": "Connect to the DirecTV receiver", - "data": { - "host": "Host or IP address" - } + "data": { "host": "Host or IP address" } } }, - "error": { - "cannot_connect": "Failed to connect, please try again" - }, + "error": { "cannot_connect": "Failed to connect, please try again" }, "abort": { "already_configured": "DirecTV receiver is already configured", "unknown": "Unexpected error" diff --git a/homeassistant/components/directv/translations/ca.json b/homeassistant/components/directv/translations/ca.json new file mode 100644 index 00000000000..98156c3c701 --- /dev/null +++ b/homeassistant/components/directv/translations/ca.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "El receptor DirecTV ja est\u00e0 configurat", + "unknown": "Error inesperat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar" + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "description": "Vols configurar {name}?", + "title": "Connexi\u00f3 amb el receptor DirecTV" + }, + "user": { + "data": { + "host": "Amfitri\u00f3 o adre\u00e7a IP" + }, + "title": "Connexi\u00f3 amb el receptor DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/de.json b/homeassistant/components/directv/translations/de.json new file mode 100644 index 00000000000..0b3fa8f29e8 --- /dev/null +++ b/homeassistant/components/directv/translations/de.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "Der DirecTV-Empf\u00e4nger ist bereits konfiguriert", + "unknown": "Unerwarteter Fehler" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut" + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "data": { + "one": "eins", + "other": "andere" + }, + "description": "M\u00f6chten Sie {name} einrichten?", + "title": "Stellen Sie eine Verbindung zum DirecTV-Empf\u00e4nger her" + }, + "user": { + "data": { + "host": "Host oder IP-Adresse" + }, + "title": "Schlie\u00dfen Sie den DirecTV-Empf\u00e4nger an" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/en.json b/homeassistant/components/directv/translations/en.json new file mode 100644 index 00000000000..e271497ae34 --- /dev/null +++ b/homeassistant/components/directv/translations/en.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "DirecTV receiver is already configured", + "unknown": "Unexpected error" + }, + "error": { + "cannot_connect": "Failed to connect, please try again" + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "description": "Do you want to set up {name}?", + "title": "Connect to the DirecTV receiver" + }, + "user": { + "data": { + "host": "Host or IP address" + }, + "title": "Connect to the DirecTV receiver" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/es.json b/homeassistant/components/directv/translations/es.json new file mode 100644 index 00000000000..a69cc9c32dd --- /dev/null +++ b/homeassistant/components/directv/translations/es.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "El receptor DirecTV ya est\u00e1 configurado", + "unknown": "Error inesperado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo." + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "description": "\u00bfQuieres configurar {name}?", + "title": "Conectar con el receptor DirecTV" + }, + "user": { + "data": { + "host": "Host o direcci\u00f3n IP" + }, + "title": "Conectar con el receptor DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/fr.json b/homeassistant/components/directv/translations/fr.json new file mode 100644 index 00000000000..d165476de66 --- /dev/null +++ b/homeassistant/components/directv/translations/fr.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Le r\u00e9cepteur DirecTV est d\u00e9j\u00e0 configur\u00e9", + "unknown": "Erreur inattendue" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer" + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "description": "Voulez-vous configurer {name} ?", + "title": "Connectez-vous au r\u00e9cepteur DirecTV" + }, + "user": { + "data": { + "host": "H\u00f4te ou adresse IP" + }, + "title": "Connectez-vous au r\u00e9cepteur DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/it.json b/homeassistant/components/directv/translations/it.json new file mode 100644 index 00000000000..3c740c8966c --- /dev/null +++ b/homeassistant/components/directv/translations/it.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "Il ricevitore DirecTV \u00e8 gi\u00e0 configurato", + "unknown": "Errore imprevisto" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare" + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "data": { + "one": "uno", + "other": "altri" + }, + "description": "Vuoi impostare {name} ?", + "title": "Connettersi al ricevitore DirecTV" + }, + "user": { + "data": { + "host": "Host o indirizzo IP" + }, + "title": "Collegamento al ricevitore DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/ko.json b/homeassistant/components/directv/translations/ko.json new file mode 100644 index 00000000000..8c3bbb94a8d --- /dev/null +++ b/homeassistant/components/directv/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "DirecTV \ub9ac\uc2dc\ubc84\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "description": "{name} \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "DirecTV \ub9ac\uc2dc\ubc84\uc5d0 \uc5f0\uacb0\ud558\uae30" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c" + }, + "title": "DirecTV \ub9ac\uc2dc\ubc84\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/lb.json b/homeassistant/components/directv/translations/lb.json new file mode 100644 index 00000000000..1fb8b72cde8 --- /dev/null +++ b/homeassistant/components/directv/translations/lb.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "DirecTV ass scho konfigur\u00e9iert", + "unknown": "Onerwaarte Feeler" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol." + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "data": { + "one": "Een", + "other": "Aner" + }, + "description": "Soll {name} konfigur\u00e9iert ginn?", + "title": "Mam DirecTV Receiver verbannen" + }, + "user": { + "data": { + "host": "Numm oder IP Adresse" + }, + "title": "Mam DirecTV Receiver verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/no.json b/homeassistant/components/directv/translations/no.json new file mode 100644 index 00000000000..9e0906ea2ac --- /dev/null +++ b/homeassistant/components/directv/translations/no.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "DirecTV-mottaker er allerede konfigurert", + "unknown": "Uventet feil" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen" + }, + "flow_title": "", + "step": { + "ssdp_confirm": { + "description": "Vil du sette opp {name} ?", + "title": "Koble til DirecTV-mottakeren" + }, + "user": { + "data": { + "host": "Vert eller IP-adresse" + }, + "title": "Koble til DirecTV-mottakeren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/pl.json b/homeassistant/components/directv/translations/pl.json new file mode 100644 index 00000000000..23010c90c1f --- /dev/null +++ b/homeassistant/components/directv/translations/pl.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Odbiornik DirecTV jest ju\u017c skonfigurowany.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie." + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "data": { + "few": "kilka", + "many": "wiele", + "one": "jeden", + "other": "inne" + }, + "description": "Czy chcesz skonfigurowa\u0107 {name}?", + "title": "Po\u0142\u0105czenie z odbiornikiem DirecTV" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP" + }, + "title": "Po\u0142\u0105czenie z odbiornikiem DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/ru.json b/homeassistant/components/directv/translations/ru.json new file mode 100644 index 00000000000..a4538099480 --- /dev/null +++ b/homeassistant/components/directv/translations/ru.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "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." + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name}?", + "title": "DirecTV" + }, + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" + }, + "title": "DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/sl.json b/homeassistant/components/directv/translations/sl.json new file mode 100644 index 00000000000..19387c68db0 --- /dev/null +++ b/homeassistant/components/directv/translations/sl.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Sprejemnik DirecTV je \u017ee konfiguriran", + "unknown": "Nepri\u010dakovana napaka" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova" + }, + "flow_title": "DirecTV: {name}", + "step": { + "ssdp_confirm": { + "data": { + "few": "nekaj", + "one": "ena", + "other": "drugo", + "two": "dva" + }, + "description": "Ali \u017eelite nastaviti {name} ?", + "title": "Pove\u017eite se s sprejemnikom DirecTV" + }, + "user": { + "data": { + "host": "Gostitelj ali IP naslov" + }, + "title": "Pove\u017eite se s sprejemnikom DirecTV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/directv/translations/zh-Hant.json b/homeassistant/components/directv/translations/zh-Hant.json new file mode 100644 index 00000000000..6546dafc133 --- /dev/null +++ b/homeassistant/components/directv/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "DirectTV \u63a5\u6536\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21" + }, + "flow_title": "DirecTV\uff1a{name}", + "step": { + "ssdp_confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name}\uff1f", + "title": "\u9023\u7dda\u81f3 DirecTV \u63a5\u6536\u5668" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740" + }, + "title": "\u9023\u7dda\u81f3 DirecTV \u63a5\u6536\u5668" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/discogs/manifest.json b/homeassistant/components/discogs/manifest.json index 61080b12c20..53dc30d6b39 100644 --- a/homeassistant/components/discogs/manifest.json +++ b/homeassistant/components/discogs/manifest.json @@ -3,6 +3,5 @@ "name": "Discogs", "documentation": "https://www.home-assistant.io/integrations/discogs", "requirements": ["discogs_client==2.2.2"], - "dependencies": [], "codeowners": ["@thibmaek"] } diff --git a/homeassistant/components/discogs/sensor.py b/homeassistant/components/discogs/sensor.py index b5e488cc19c..40f27135be1 100644 --- a/homeassistant/components/discogs/sensor.py +++ b/homeassistant/components/discogs/sensor.py @@ -83,7 +83,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): return sensors = [] - for sensor_type in config.get(CONF_MONITORED_CONDITIONS): + for sensor_type in config[CONF_MONITORED_CONDITIONS]: sensors.append(DiscogsSensor(discogs_data, name, sensor_type)) add_entities(sensors, True) diff --git a/homeassistant/components/discord/manifest.json b/homeassistant/components/discord/manifest.json index 939138bf999..7f03e52ca62 100644 --- a/homeassistant/components/discord/manifest.json +++ b/homeassistant/components/discord/manifest.json @@ -2,7 +2,6 @@ "domain": "discord", "name": "Discord", "documentation": "https://www.home-assistant.io/integrations/discord", - "requirements": ["discord.py==1.3.2"], - "dependencies": [], + "requirements": ["discord.py==1.3.3"], "codeowners": [] } diff --git a/homeassistant/components/discord/notify.py b/homeassistant/components/discord/notify.py index 864b7da5e55..fb36a60eecc 100644 --- a/homeassistant/components/discord/notify.py +++ b/homeassistant/components/discord/notify.py @@ -23,7 +23,7 @@ ATTR_IMAGES = "images" def get_service(hass, config, discovery_info=None): """Get the Discord notification service.""" - token = config.get(CONF_TOKEN) + token = config[CONF_TOKEN] return DiscordNotificationService(hass, token) @@ -39,7 +39,6 @@ class DiscordNotificationService(BaseNotificationService): """Check if a file exists on disk and is in authorized path.""" if not self.hass.config.is_allowed_path(filename): return False - return os.path.isfile(filename) async def async_send_message(self, message, **kwargs): @@ -52,11 +51,10 @@ class DiscordNotificationService(BaseNotificationService): if ATTR_TARGET not in kwargs: _LOGGER.error("No target specified") return None - data = kwargs.get(ATTR_DATA) or {} if ATTR_IMAGES in data: - images = list() + images = [] for image in data.get(ATTR_IMAGES): image_exists = await self.hass.async_add_executor_job( @@ -67,7 +65,6 @@ class DiscordNotificationService(BaseNotificationService): images.append(image) else: _LOGGER.warning("Image not found: %s", image) - # pylint: disable=unused-variable @discord_bot.event async def on_ready(): @@ -75,19 +72,19 @@ class DiscordNotificationService(BaseNotificationService): try: for channelid in kwargs[ATTR_TARGET]: channelid = int(channelid) - channel = discord_bot.get_channel(channelid) + channel = discord_bot.get_channel( + channelid + ) or discord_bot.get_user(channelid) if channel is None: _LOGGER.warning("Channel not found for id: %s", channelid) continue - # Must create new instances of File for each channel. files = None if images: - files = list() + files = [] for image in images: files.append(discord.File(image)) - await channel.send(message, files=files) except (discord.errors.HTTPException, discord.errors.NotFound) as error: _LOGGER.warning("Communication error: %s", error) diff --git a/homeassistant/components/discovery/__init__.py b/homeassistant/components/discovery/__init__.py index 64816acaaf3..b9b3f51f60d 100644 --- a/homeassistant/components/discovery/__init__.py +++ b/homeassistant/components/discovery/__init__.py @@ -37,7 +37,6 @@ SERVICE_KONNECTED = "konnected" SERVICE_MOBILE_APP = "hass_mobile_app" SERVICE_NETGEAR = "netgear_router" SERVICE_OCTOPRINT = "octoprint" -SERVICE_ROKU = "roku" SERVICE_SABNZBD = "sabnzbd" SERVICE_SAMSUNG_PRINTER = "samsung_printer" SERVICE_TELLDUSLIVE = "tellstick" @@ -59,7 +58,6 @@ SERVICE_HANDLERS = { SERVICE_HASSIO: ("hassio", None), SERVICE_APPLE_TV: ("apple_tv", None), SERVICE_ENIGMA2: ("media_player", "enigma2"), - SERVICE_ROKU: ("roku", None), SERVICE_WINK: ("wink", None), SERVICE_XIAOMI_GW: ("xiaomi_aqara", None), SERVICE_SABNZBD: ("sabnzbd", None), @@ -71,7 +69,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"), diff --git a/homeassistant/components/discovery/manifest.json b/homeassistant/components/discovery/manifest.json index 83a6222d357..76e4ff701c5 100644 --- a/homeassistant/components/discovery/manifest.json +++ b/homeassistant/components/discovery/manifest.json @@ -3,7 +3,6 @@ "name": "Discovery", "documentation": "https://www.home-assistant.io/integrations/discovery", "requirements": ["netdisco==2.6.0"], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/dlib_face_detect/manifest.json b/homeassistant/components/dlib_face_detect/manifest.json index 672368e0f8c..e7bd53560bf 100644 --- a/homeassistant/components/dlib_face_detect/manifest.json +++ b/homeassistant/components/dlib_face_detect/manifest.json @@ -3,6 +3,5 @@ "name": "Dlib Face Detect", "documentation": "https://www.home-assistant.io/integrations/dlib_face_detect", "requirements": ["face_recognition==1.2.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dlib_face_identify/manifest.json b/homeassistant/components/dlib_face_identify/manifest.json index f6c85a7e9a7..a1e47f967c0 100644 --- a/homeassistant/components/dlib_face_identify/manifest.json +++ b/homeassistant/components/dlib_face_identify/manifest.json @@ -3,6 +3,5 @@ "name": "Dlib Face Identify", "documentation": "https://www.home-assistant.io/integrations/dlib_face_identify", "requirements": ["face_recognition==1.2.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dlink/manifest.json b/homeassistant/components/dlink/manifest.json index 754a9ec5e03..81a89c8e397 100644 --- a/homeassistant/components/dlink/manifest.json +++ b/homeassistant/components/dlink/manifest.json @@ -3,6 +3,5 @@ "name": "D-Link Wi-Fi Smart Plugs", "documentation": "https://www.home-assistant.io/integrations/dlink", "requirements": ["pyW215==0.7.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dlink/switch.py b/homeassistant/components/dlink/switch.py index 7fa391e8060..1cc0e16f30f 100644 --- a/homeassistant/components/dlink/switch.py +++ b/homeassistant/components/dlink/switch.py @@ -44,11 +44,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up a D-Link Smart Plug.""" - host = config.get(CONF_HOST) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - use_legacy_protocol = config.get(CONF_USE_LEGACY_PROTOCOL) - name = config.get(CONF_NAME) + host = config[CONF_HOST] + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] + use_legacy_protocol = config[CONF_USE_LEGACY_PROTOCOL] + name = config[CONF_NAME] smartplug = SmartPlug(host, password, username, use_legacy_protocol) data = SmartPlugData(smartplug) diff --git a/homeassistant/components/dlna_dmr/manifest.json b/homeassistant/components/dlna_dmr/manifest.json index 8380c3b10fb..ac7a4b22e58 100644 --- a/homeassistant/components/dlna_dmr/manifest.json +++ b/homeassistant/components/dlna_dmr/manifest.json @@ -2,7 +2,6 @@ "domain": "dlna_dmr", "name": "DLNA Digital Media Renderer", "documentation": "https://www.home-assistant.io/integrations/dlna_dmr", - "requirements": ["async-upnp-client==0.14.12"], - "dependencies": [], + "requirements": ["async-upnp-client==0.14.13"], "codeowners": [] } diff --git a/homeassistant/components/dnsip/manifest.json b/homeassistant/components/dnsip/manifest.json index 75d747da4ea..6aeac70b4f3 100644 --- a/homeassistant/components/dnsip/manifest.json +++ b/homeassistant/components/dnsip/manifest.json @@ -3,6 +3,5 @@ "name": "DNS IP", "documentation": "https://www.home-assistant.io/integrations/dnsip", "requirements": ["aiodns==2.0.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dnsip/sensor.py b/homeassistant/components/dnsip/sensor.py index fb57040f2c2..b202ff8485c 100644 --- a/homeassistant/components/dnsip/sensor.py +++ b/homeassistant/components/dnsip/sensor.py @@ -39,18 +39,18 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the DNS IP sensor.""" - hostname = config.get(CONF_HOSTNAME) + hostname = config[CONF_HOSTNAME] name = config.get(CONF_NAME) if not name: if hostname == DEFAULT_HOSTNAME: name = DEFAULT_NAME else: name = hostname - ipv6 = config.get(CONF_IPV6) + ipv6 = config[CONF_IPV6] if ipv6: - resolver = config.get(CONF_RESOLVER_IPV6) + resolver = config[CONF_RESOLVER_IPV6] else: - resolver = config.get(CONF_RESOLVER) + resolver = config[CONF_RESOLVER] async_add_devices([WanIpSensor(hass, name, hostname, resolver, ipv6)], True) diff --git a/homeassistant/components/dominos/__init__.py b/homeassistant/components/dominos/__init__.py index 78852fa2699..d3977384255 100644 --- a/homeassistant/components/dominos/__init__.py +++ b/homeassistant/components/dominos/__init__.py @@ -113,7 +113,7 @@ class Dominos: def handle_order(self, call): """Handle ordering pizza.""" - entity_ids = call.data.get(ATTR_ORDER_ENTITY, None) + entity_ids = call.data.get(ATTR_ORDER_ENTITY) target_orders = [ order diff --git a/homeassistant/components/doods/manifest.json b/homeassistant/components/doods/manifest.json index 1ac905feac2..3fa20f2eea4 100644 --- a/homeassistant/components/doods/manifest.json +++ b/homeassistant/components/doods/manifest.json @@ -2,10 +2,6 @@ "domain": "doods", "name": "DOODS - Distributed Outside Object Detection Service", "documentation": "https://www.home-assistant.io/integrations/doods", - "requirements": [ - "pydoods==1.0.2", - "pillow==7.0.0" - ], - "dependencies": [], + "requirements": ["pydoods==1.0.2", "pillow==7.1.1"], "codeowners": [] -} \ No newline at end of file +} diff --git a/homeassistant/components/doorbird/.translations/ca.json b/homeassistant/components/doorbird/.translations/ca.json deleted file mode 100644 index d26da82ad1e..00000000000 --- a/homeassistant/components/doorbird/.translations/ca.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest dispositiu DoorBird ja est\u00e0 configurat", - "link_local_address": "L'enlla\u00e7 amb adreces locals no est\u00e0 perm\u00e8s", - "not_doorbird_device": "Aquest dispositiu no \u00e9s DoorBird" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3 (adre\u00e7a IP)", - "name": "Nom del dispositiu", - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "title": "Connexi\u00f3 amb DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Llista d'esdeveniments separats per comes." - }, - "description": "Afegeix el/s noms del/s esdeveniment/s que vulguis seguir separats per comes. Despr\u00e9s d\u2019introduir-los, utilitzeu l\u2019aplicaci\u00f3 de DoorBird per assignar-los a un esdeveniment espec\u00edfic. Consulta la documentaci\u00f3 a https://www.home-assistant.io/integrations/doorbird/#events.\nExemple: algu_ha_premut_el_boto, moviment_detectat" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/de.json b/homeassistant/components/doorbird/.translations/de.json deleted file mode 100644 index 2992d066d4a..00000000000 --- a/homeassistant/components/doorbird/.translations/de.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser DoorBird ist bereits konfiguriert", - "link_local_address": "Lokale Linkadressen werden nicht unterst\u00fctzt", - "not_doorbird_device": "Dieses Ger\u00e4t ist kein DoorBird" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host (IP-Adresse)", - "name": "Ger\u00e4tename", - "password": "Passwort", - "username": "Benutzername" - }, - "title": "Stellen Sie eine Verbindung zu DoorBird her" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Durch Kommas getrennte Liste von Ereignissen." - }, - "description": "F\u00fcgen Sie f\u00fcr jedes Ereignis, das Sie verfolgen m\u00f6chten, einen durch Kommas getrennten Ereignisnamen hinzu. Nachdem Sie sie hier eingegeben haben, verwenden Sie die DoorBird-App, um sie einem bestimmten Ereignis zuzuweisen. Weitere Informationen finden Sie in der Dokumentation unter https://www.home-assistant.io/integrations/doorbird/#events. Beispiel: jemand_hat_den_knopf_gedr\u00fcckt, bewegung" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/en.json b/homeassistant/components/doorbird/.translations/en.json deleted file mode 100644 index 87524cd7dd6..00000000000 --- a/homeassistant/components/doorbird/.translations/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This DoorBird is already configured", - "link_local_address": "Link local addresses are not supported", - "not_doorbird_device": "This device is not a DoorBird" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host (IP Address)", - "name": "Device Name", - "password": "Password", - "username": "Username" - }, - "title": "Connect to the DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Comma separated list of events." - }, - "description": "Add an comma separated event name for each event you wish to track. After entering them here, use the DoorBird app to assign them to a specific event. See the documentation at https://www.home-assistant.io/integrations/doorbird/#events. Example: somebody_pressed_the_button, motion" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/es.json b/homeassistant/components/doorbird/.translations/es.json deleted file mode 100644 index 4e2aa0414dc..00000000000 --- a/homeassistant/components/doorbird/.translations/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "DoorBird ya est\u00e1 configurado", - "link_local_address": "No se admiten direcciones locales", - "not_doorbird_device": "Este dispositivo no es un DoorBird" - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor int\u00e9ntalo de nuevo", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "unknown": "Error inesperado" - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "Host (Direcci\u00f3n IP)", - "name": "Nombre del dispositivo", - "password": "Contrase\u00f1a", - "username": "Nombre de usuario" - }, - "title": "Conectar con DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Lista de eventos separados por comas." - }, - "description": "A\u00f1ade un nombre de evento separado por comas para cada evento del que deseas realizar un seguimiento. Despu\u00e9s de introducirlos aqu\u00ed, utiliza la aplicaci\u00f3n DoorBird para asignarlos a un evento espec\u00edfico. Consulta la documentaci\u00f3n en https://www.home-assistant.io/integrations/doorbird/#events. Ejemplo: somebody_pressed_the_button, motion" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/fr.json b/homeassistant/components/doorbird/.translations/fr.json deleted file mode 100644 index 21f67a9471e..00000000000 --- a/homeassistant/components/doorbird/.translations/fr.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce DoorBird est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification non valide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te (adresse IP)", - "name": "Nom de l'appareil", - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "title": "Connectez-vous au DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Liste d'\u00e9v\u00e9nements s\u00e9par\u00e9s par des virgules." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/it.json b/homeassistant/components/doorbird/.translations/it.json deleted file mode 100644 index 6d1a80424bf..00000000000 --- a/homeassistant/components/doorbird/.translations/it.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo DoorBird \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "host": "Host (indirizzo IP)", - "name": "Nome del dispositivo", - "password": "Password", - "username": "Nome utente" - }, - "title": "Connetti a DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Elenco di eventi separati da virgole." - }, - "description": "Aggiungere un nome di evento separato da virgola per ogni evento che si desidera monitorare. Dopo averli inseriti qui, usa l'applicazione DoorBird per assegnarli a un evento specifico. Consultare la documentazione su https://www.home-assistant.io/integrations/doorbird/#events. Esempio: qualcuno_premuto_il_pulsante, movimento" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/ko.json b/homeassistant/components/doorbird/.translations/ko.json deleted file mode 100644 index fff92c32188..00000000000 --- a/homeassistant/components/doorbird/.translations/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 DoorBird \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "link_local_address": "\ub85c\uceec \uc8fc\uc18c \uc5f0\uacb0\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "not_doorbird_device": "\uc774 \uae30\uae30\ub294 DoorBird \uac00 \uc544\ub2d9\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" - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 (IP \uc8fc\uc18c)", - "name": "\uae30\uae30 \uc774\ub984", - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "title": "DoorBird \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "\uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \uc774\ubca4\ud2b8 \ubaa9\ub85d." - }, - "description": "\ucd94\uc801\ud558\ub824\ub294 \uac01 \uc774\ubca4\ud2b8\uc5d0 \ub300\ud574 \uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \uc774\ubca4\ud2b8 \uc774\ub984\uc744 \ucd94\uac00\ud574\uc8fc\uc138\uc694. \uc5ec\uae30\uc5d0 \uc785\ub825\ud55c \ud6c4 DoorBird \uc571\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud2b9\uc815 \uc774\ubca4\ud2b8\uc5d0 \ud560\ub2f9\ud574\uc8fc\uc138\uc694. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 https://www.home-assistant.io/integrations/doorbird/#event \uc124\uba85\uc11c\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694. \uc608: someone_pressed_the_button, motion" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/lb.json b/homeassistant/components/doorbird/.translations/lb.json deleted file mode 100644 index ba29b19df8a..00000000000 --- a/homeassistant/components/doorbird/.translations/lb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse DoorBird ass scho konfigur\u00e9iert", - "link_local_address": "Lokal Link Adressen ginn net \u00ebnnerst\u00ebtzt", - "not_doorbird_device": "D\u00ebsen Apparat ass kee DoorBird" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "flow_title": "DoorBird {name{ ({host})", - "step": { - "user": { - "data": { - "host": "Numm (IP Adresse)", - "name": "Numm vum Apparat", - "password": "Passwuert", - "username": "Benotzernumm" - }, - "title": "Mat DoorBird verbannen" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Komma getrennte L\u00ebscht vun Evenementer" - }, - "description": "Setzt ee mat Komma getrennten Evenement Numm fir all Evenement dob\u00e4i d\u00e9i sollt suiv\u00e9iert ginn. Wann's du se hei aginn hues, benotz d'DoorBird App fir se zu engem spezifeschen Evenement dob\u00e4i ze setzen. Kuckt d'Dokumentatioun op https://www.home-assistant.io/integrations/doorbird/#events. Beispill: somebody_pressed_the_button, motion" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/no.json b/homeassistant/components/doorbird/.translations/no.json deleted file mode 100644 index 29fb34672c8..00000000000 --- a/homeassistant/components/doorbird/.translations/no.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne DoorBird er allerede konfigurert", - "link_local_address": "Linking av lokale adresser st\u00f8ttes ikke", - "not_doorbird_device": "Denne enheten er ikke en DoorBird" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "host": "Vert (IP-adresse)", - "name": "Enhetsnavn", - "password": "Passord", - "username": "Brukernavn" - }, - "title": "Koble til DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "Kommaseparert liste over hendelser." - }, - "description": "Legg til et kommaseparert hendelsesnavn for hvert arrangement du \u00f8nsker \u00e5 spore. Etter \u00e5 ha skrevet dem inn her, bruker du DoorBird-appen til \u00e5 tilordne dem til en bestemt hendelse. Se dokumentasjonen p\u00e5 https://www.home-assistant.io/integrations/doorbird/#events. Eksempel: noen_trykket_knappen, bevegelse" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/ru.json b/homeassistant/components/doorbird/.translations/ru.json deleted file mode 100644 index 1c034d6d68b..00000000000 --- a/homeassistant/components/doorbird/.translations/ru.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "link_local_address": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", - "not_doorbird_device": "\u042d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 DoorBird." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e." - }, - "description": "\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 DoorBird, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044e. \u041f\u0440\u0438\u043c\u0435\u0440: somebody_pressed_the_button, motion. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: https://www.home-assistant.io/integrations/doorbird/#events." - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/zh-Hant.json b/homeassistant/components/doorbird/.translations/zh-Hant.json deleted file mode 100644 index bb8b291f86b..00000000000 --- a/homeassistant/components/doorbird/.translations/zh-Hant.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64 DoorBird \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "link_local_address": "\u4e0d\u652f\u63f4\u9023\u7d50\u672c\u5730\u7aef\u4f4d\u5740", - "not_doorbird_device": "\u6b64\u8a2d\u5099\u4e26\u975e DoorBird" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "flow_title": "DoorBird {name} ({host})", - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\uff08IP \u4f4d\u5740\uff09", - "name": "\u8a2d\u5099\u540d\u7a31", - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "title": "\u9023\u7dda\u81f3 DoorBird" - } - }, - "title": "DoorBird" - }, - "options": { - "step": { - "init": { - "data": { - "events": "\u4ee5\u9017\u865f\u5206\u5225\u4e8b\u4ef6\u5217\u8868\u3002" - }, - "description": "\u4ee5\u9017\u865f\u5206\u5225\u6240\u8981\u8ffd\u8e64\u7684\u4e8b\u4ef6\u540d\u7a31\u3002\u65bc\u6b64\u8f38\u5165\u5f8c\uff0c\u4f7f\u7528 DoorBird App \u6307\u5b9a\u81f3\u7279\u5b9a\u4e8b\u4ef6\u3002\u8acb\u53c3\u95b1\u6587\u4ef6\uff1ahttps://www.home-assistant.io/integrations/doorbird/#events\u3002\u4f8b\u5982\uff1asomebody_pressed_the_button, motion" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/doorbird/__init__.py b/homeassistant/components/doorbird/__init__.py index f762a722f2f..b70b0a3061c 100644 --- a/homeassistant/components/doorbird/__init__.py +++ b/homeassistant/components/doorbird/__init__.py @@ -4,6 +4,7 @@ import logging import urllib from urllib.error import HTTPError +from aiohttp import web from doorbirdpy import DoorBird import voluptuous as vol @@ -17,6 +18,7 @@ from homeassistant.const import ( CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME, + HTTP_OK, ) from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import ConfigEntryNotReady @@ -58,7 +60,6 @@ CONFIG_SCHEMA = vol.Schema( async def async_setup(hass: HomeAssistant, config: dict): """Set up the DoorBird component.""" - hass.data.setdefault(DOMAIN, {}) # Provide an endpoint for the doorstations to call to trigger events @@ -71,7 +72,7 @@ async def async_setup(hass: HomeAssistant, config: dict): hass.async_create_task( hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=doorstation_config, + DOMAIN, context={"source": SOURCE_IMPORT}, data=doorstation_config ) ) @@ -341,8 +342,6 @@ class DoorBirdRequestView(HomeAssistantView): async def get(self, request, event): """Respond to requests from the device.""" - from aiohttp import web - hass = request.app["hass"] token = request.query.get("token") @@ -361,10 +360,10 @@ class DoorBirdRequestView(HomeAssistantView): hass.bus.async_fire(RESET_DEVICE_FAVORITES, {"token": token}) message = f"HTTP Favorites cleared for {device.slug}" - return web.Response(status=200, text=message) + return web.Response(status=HTTP_OK, text=message) hass.bus.async_fire(f"{DOMAIN}_{event}", event_data) log_entry(hass, f"Doorbird {event}", "event was fired.", DOMAIN) - return web.Response(status=200, text="OK") + return web.Response(status=HTTP_OK, text="OK") diff --git a/homeassistant/components/doorbird/manifest.json b/homeassistant/components/doorbird/manifest.json index e0aef80ab61..6c1c75ff328 100644 --- a/homeassistant/components/doorbird/manifest.json +++ b/homeassistant/components/doorbird/manifest.json @@ -2,16 +2,9 @@ "domain": "doorbird", "name": "DoorBird", "documentation": "https://www.home-assistant.io/integrations/doorbird", - "requirements": [ - "doorbirdpy==2.0.8" - ], - "dependencies": [ - "http", - "logbook" - ], + "requirements": ["doorbirdpy==2.0.8"], + "dependencies": ["http", "logbook"], "zeroconf": ["_axis-video._tcp.local."], - "codeowners": [ - "@oblogic7", "@bdraco" - ], + "codeowners": ["@oblogic7", "@bdraco"], "config_flow": true } diff --git a/homeassistant/components/doorbird/strings.json b/homeassistant/components/doorbird/strings.json index e4fb72db91b..e27083d2e09 100644 --- a/homeassistant/components/doorbird/strings.json +++ b/homeassistant/components/doorbird/strings.json @@ -1,37 +1,34 @@ { - "options" : { - "step" : { - "init" : { - "data" : { - "events" : "Comma separated list of events." - }, - "description" : "Add an comma separated event name for each event you wish to track. After entering them here, use the DoorBird app to assign them to a specific event. See the documentation at https://www.home-assistant.io/integrations/doorbird/#events. Example: somebody_pressed_the_button, motion" - } + "options": { + "step": { + "init": { + "data": { "events": "Comma separated list of events." }, + "description": "Add an comma separated event name for each event you wish to track. After entering them here, use the DoorBird app to assign them to a specific event. See the documentation at https://www.home-assistant.io/integrations/doorbird/#events. Example: somebody_pressed_the_button, motion" } - }, - "config" : { - "step" : { - "user" : { - "title" : "Connect to the DoorBird", - "data" : { - "password" : "Password", - "host" : "Host (IP Address)", - "name" : "Device Name", - "username" : "Username" - } - } - }, - "abort" : { - "already_configured" : "This DoorBird is already configured", - "link_local_address": "Link local addresses are not supported", - "not_doorbird_device": "This device is not a DoorBird" - }, - "title" : "DoorBird", - "flow_title" : "DoorBird {name} ({host})", - "error" : { - "invalid_auth" : "Invalid authentication", - "unknown" : "Unexpected error", - "cannot_connect" : "Failed to connect, please try again" + } + }, + "config": { + "step": { + "user": { + "title": "Connect to the DoorBird", + "data": { + "password": "Password", + "host": "Host (IP Address)", + "name": "Device Name", + "username": "Username" + } } - } + }, + "abort": { + "already_configured": "This DoorBird is already configured", + "link_local_address": "Link local addresses are not supported", + "not_doorbird_device": "This device is not a DoorBird" + }, + "flow_title": "DoorBird {name} ({host})", + "error": { + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error", + "cannot_connect": "Failed to connect, please try again" + } + } } diff --git a/homeassistant/components/doorbird/translations/ca.json b/homeassistant/components/doorbird/translations/ca.json new file mode 100644 index 00000000000..9bd469ee4e1 --- /dev/null +++ b/homeassistant/components/doorbird/translations/ca.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest dispositiu DoorBird ja est\u00e0 configurat", + "link_local_address": "L'enlla\u00e7 amb adreces locals no est\u00e0 perm\u00e8s", + "not_doorbird_device": "Aquest dispositiu no \u00e9s DoorBird" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3 (adre\u00e7a IP)", + "name": "Nom del dispositiu", + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "title": "Connexi\u00f3 amb DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Llista d'esdeveniments separats per comes." + }, + "description": "Afegeix el/s noms del/s esdeveniment/s que vulguis seguir separats per comes. Despr\u00e9s d\u2019introduir-los, utilitzeu l\u2019aplicaci\u00f3 de DoorBird per assignar-los a un esdeveniment espec\u00edfic. Consulta la documentaci\u00f3 a https://www.home-assistant.io/integrations/doorbird/#events.\nExemple: algu_ha_premut_el_boto, moviment_detectat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/.translations/da.json b/homeassistant/components/doorbird/translations/da.json similarity index 100% rename from homeassistant/components/doorbird/.translations/da.json rename to homeassistant/components/doorbird/translations/da.json diff --git a/homeassistant/components/doorbird/translations/de.json b/homeassistant/components/doorbird/translations/de.json new file mode 100644 index 00000000000..ad9d99e555d --- /dev/null +++ b/homeassistant/components/doorbird/translations/de.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser DoorBird ist bereits konfiguriert", + "link_local_address": "Lokale Linkadressen werden nicht unterst\u00fctzt", + "not_doorbird_device": "Dieses Ger\u00e4t ist kein DoorBird" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host (IP-Adresse)", + "name": "Ger\u00e4tename", + "password": "Passwort", + "username": "Benutzername" + }, + "title": "Stellen Sie eine Verbindung zu DoorBird her" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Durch Kommas getrennte Liste von Ereignissen." + }, + "description": "F\u00fcgen Sie f\u00fcr jedes Ereignis, das Sie verfolgen m\u00f6chten, einen durch Kommas getrennten Ereignisnamen hinzu. Nachdem Sie sie hier eingegeben haben, verwenden Sie die DoorBird-App, um sie einem bestimmten Ereignis zuzuweisen. Weitere Informationen finden Sie in der Dokumentation unter https://www.home-assistant.io/integrations/doorbird/#events. Beispiel: jemand_hat_den_knopf_gedr\u00fcckt, bewegung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/en.json b/homeassistant/components/doorbird/translations/en.json new file mode 100644 index 00000000000..7e3ba803771 --- /dev/null +++ b/homeassistant/components/doorbird/translations/en.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "This DoorBird is already configured", + "link_local_address": "Link local addresses are not supported", + "not_doorbird_device": "This device is not a DoorBird" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host (IP Address)", + "name": "Device Name", + "password": "Password", + "username": "Username" + }, + "title": "Connect to the DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Comma separated list of events." + }, + "description": "Add an comma separated event name for each event you wish to track. After entering them here, use the DoorBird app to assign them to a specific event. See the documentation at https://www.home-assistant.io/integrations/doorbird/#events. Example: somebody_pressed_the_button, motion" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/es.json b/homeassistant/components/doorbird/translations/es.json new file mode 100644 index 00000000000..70717aef6ad --- /dev/null +++ b/homeassistant/components/doorbird/translations/es.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "DoorBird ya est\u00e1 configurado", + "link_local_address": "No se admiten direcciones locales", + "not_doorbird_device": "Este dispositivo no es un DoorBird" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor int\u00e9ntalo de nuevo", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host (Direcci\u00f3n IP)", + "name": "Nombre del dispositivo", + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "title": "Conectar con DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Lista de eventos separados por comas." + }, + "description": "A\u00f1ade un nombre de evento separado por comas para cada evento del que deseas realizar un seguimiento. Despu\u00e9s de introducirlos aqu\u00ed, utiliza la aplicaci\u00f3n DoorBird para asignarlos a un evento espec\u00edfico. Consulta la documentaci\u00f3n en https://www.home-assistant.io/integrations/doorbird/#events. Ejemplo: somebody_pressed_the_button, motion" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/fr.json b/homeassistant/components/doorbird/translations/fr.json new file mode 100644 index 00000000000..c208e035d5a --- /dev/null +++ b/homeassistant/components/doorbird/translations/fr.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "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", + "invalid_auth": "Authentification non valide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te (adresse IP)", + "name": "Nom de l'appareil", + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "title": "Connectez-vous au DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Liste d'\u00e9v\u00e9nements s\u00e9par\u00e9s par des virgules." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/it.json b/homeassistant/components/doorbird/translations/it.json new file mode 100644 index 00000000000..c08c666d6f8 --- /dev/null +++ b/homeassistant/components/doorbird/translations/it.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Questo DoorBird \u00e8 gi\u00e0 configurato", + "link_local_address": "Gli indirizzi locali di collegamento non sono supportati", + "not_doorbird_device": "Questo dispositivo non \u00e8 un DoorBird" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Host (indirizzo IP)", + "name": "Nome del dispositivo", + "password": "Password", + "username": "Nome utente" + }, + "title": "Connetti a DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Elenco di eventi separati da virgole." + }, + "description": "Aggiungere un nome di evento separato da virgola per ogni evento che si desidera monitorare. Dopo averli inseriti qui, usa l'applicazione DoorBird per assegnarli a un evento specifico. Consultare la documentazione su https://www.home-assistant.io/integrations/doorbird/#events. Esempio: qualcuno_premuto_il_pulsante, movimento" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/ko.json b/homeassistant/components/doorbird/translations/ko.json new file mode 100644 index 00000000000..72632afed89 --- /dev/null +++ b/homeassistant/components/doorbird/translations/ko.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 DoorBird \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "link_local_address": "\ub85c\uceec \uc8fc\uc18c \uc5f0\uacb0\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "not_doorbird_device": "\uc774 \uae30\uae30\ub294 DoorBird \uac00 \uc544\ub2d9\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" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 (IP \uc8fc\uc18c)", + "name": "\uae30\uae30 \uc774\ub984", + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "DoorBird \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "\uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \uc774\ubca4\ud2b8 \ubaa9\ub85d." + }, + "description": "\ucd94\uc801\ud558\ub824\ub294 \uac01 \uc774\ubca4\ud2b8\uc5d0 \ub300\ud574 \uc27c\ud45c\ub85c \uad6c\ubd84\ub41c \uc774\ubca4\ud2b8 \uc774\ub984\uc744 \ucd94\uac00\ud574\uc8fc\uc138\uc694. \uc5ec\uae30\uc5d0 \uc785\ub825\ud55c \ud6c4 DoorBird \uc571\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud2b9\uc815 \uc774\ubca4\ud2b8\uc5d0 \ud560\ub2f9\ud574\uc8fc\uc138\uc694. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 https://www.home-assistant.io/integrations/doorbird/#event \uc124\uba85\uc11c\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694. \uc608: someone_pressed_the_button, motion" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/lb.json b/homeassistant/components/doorbird/translations/lb.json new file mode 100644 index 00000000000..b41931be828 --- /dev/null +++ b/homeassistant/components/doorbird/translations/lb.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse DoorBird ass scho konfigur\u00e9iert", + "link_local_address": "Lokal Link Adressen ginn net \u00ebnnerst\u00ebtzt", + "not_doorbird_device": "D\u00ebsen Apparat ass kee DoorBird" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Numm (IP Adresse)", + "name": "Numm vum Apparat", + "password": "Passwuert", + "username": "Benotzernumm" + }, + "title": "Mat DoorBird verbannen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Komma getrennte L\u00ebscht vun Evenementer" + }, + "description": "Setzt ee mat Komma getrennten Evenement Numm fir all Evenement dob\u00e4i d\u00e9i sollt suiv\u00e9iert ginn. Wann's du se hei aginn hues, benotz d'DoorBird App fir se zu engem spezifeschen Evenement dob\u00e4i ze setzen. Kuckt d'Dokumentatioun op https://www.home-assistant.io/integrations/doorbird/#events. Beispill: somebody_pressed_the_button, motion" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/no.json b/homeassistant/components/doorbird/translations/no.json new file mode 100644 index 00000000000..158b783406a --- /dev/null +++ b/homeassistant/components/doorbird/translations/no.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Denne DoorBird er allerede konfigurert", + "link_local_address": "Linking av lokale adresser st\u00f8ttes ikke", + "not_doorbird_device": "Denne enheten er ikke en DoorBird" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "flow_title": "DoorBird {name} ( {host} )", + "step": { + "user": { + "data": { + "host": "Vert (IP-adresse)", + "name": "Enhetsnavn", + "password": "Passord", + "username": "Brukernavn" + }, + "title": "Koble til DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Kommaseparert liste over hendelser." + }, + "description": "Legg til et kommaseparert hendelsesnavn for hvert arrangement du \u00f8nsker \u00e5 spore. Etter \u00e5 ha skrevet dem inn her, bruker du DoorBird-appen til \u00e5 tilordne dem til en bestemt hendelse. Se dokumentasjonen p\u00e5 https://www.home-assistant.io/integrations/doorbird/#events. Eksempel: noen_trykket_knappen, bevegelse" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/pl.json b/homeassistant/components/doorbird/translations/pl.json new file mode 100644 index 00000000000..61511297468 --- /dev/null +++ b/homeassistant/components/doorbird/translations/pl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "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": { + "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/doorbird/translations/pt.json b/homeassistant/components/doorbird/translations/pt.json new file mode 100644 index 00000000000..6515658d6a7 --- /dev/null +++ b/homeassistant/components/doorbird/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida", + "unknown": "Erro inesperado" + }, + "step": { + "user": { + "data": { + "name": "Nome do dispositivo", + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/ru.json b/homeassistant/components/doorbird/translations/ru.json new file mode 100644 index 00000000000..c6a638f2530 --- /dev/null +++ b/homeassistant/components/doorbird/translations/ru.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "link_local_address": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", + "not_doorbird_device": "\u042d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 DoorBird." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e." + }, + "description": "\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 DoorBird, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044e. \u041f\u0440\u0438\u043c\u0435\u0440: somebody_pressed_the_button, motion. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: https://www.home-assistant.io/integrations/doorbird/#events." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/sl.json b/homeassistant/components/doorbird/translations/sl.json new file mode 100644 index 00000000000..336a40904d2 --- /dev/null +++ b/homeassistant/components/doorbird/translations/sl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Ta DoorBird je \u017ee nastavljen", + "link_local_address": "Lokalni naslovi povezav niso podprti", + "not_doorbird_device": "Ta naprava ni DoorBird" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "Gostitelj (IP naslov)", + "name": "Ime naprave", + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "title": "Pove\u017eite se z DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Seznam dogodkov, lo\u010denih z vejico." + }, + "description": "Za vsak dogodek, ki ga \u017eelite spremljati, dodajte ime, lo\u010deno z vejico. Ko jih tukaj vnesete, uporabite aplikacijo DoorBird, da jih dodelite dolo\u010denemu dogodku. Glej dokumentacijo na strani https://www.home-assistant.io/integrations/doorbird/#events. Primer: nekdo_pritisnil_gumb, gibanje" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/zh-Hant.json b/homeassistant/components/doorbird/translations/zh-Hant.json new file mode 100644 index 00000000000..b751d1bcf83 --- /dev/null +++ b/homeassistant/components/doorbird/translations/zh-Hant.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64 DoorBird \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "link_local_address": "\u4e0d\u652f\u63f4\u9023\u7d50\u672c\u5730\u7aef\u4f4d\u5740", + "not_doorbird_device": "\u6b64\u8a2d\u5099\u4e26\u975e DoorBird" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "flow_title": "DoorBird {name} ({host})", + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\uff08IP \u4f4d\u5740\uff09", + "name": "\u8a2d\u5099\u540d\u7a31", + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u9023\u7dda\u81f3 DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "\u4ee5\u9017\u865f\u5206\u5225\u4e8b\u4ef6\u5217\u8868\u3002" + }, + "description": "\u4ee5\u9017\u865f\u5206\u5225\u6240\u8981\u8ffd\u8e64\u7684\u4e8b\u4ef6\u540d\u7a31\u3002\u65bc\u6b64\u8f38\u5165\u5f8c\uff0c\u4f7f\u7528 DoorBird App \u6307\u5b9a\u81f3\u7279\u5b9a\u4e8b\u4ef6\u3002\u8acb\u53c3\u95b1\u6587\u4ef6\uff1ahttps://www.home-assistant.io/integrations/doorbird/#events\u3002\u4f8b\u5982\uff1asomebody_pressed_the_button, motion" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/dovado/__init__.py b/homeassistant/components/dovado/__init__.py index b8d18d90833..8e4c712e8b4 100644 --- a/homeassistant/components/dovado/__init__.py +++ b/homeassistant/components/dovado/__init__.py @@ -41,8 +41,8 @@ def setup(hass, config): hass.data[DOMAIN] = DovadoData( dovado.Dovado( - config[DOMAIN].get(CONF_USERNAME), - config[DOMAIN].get(CONF_PASSWORD), + config[DOMAIN][CONF_USERNAME], + config[DOMAIN][CONF_PASSWORD], config[DOMAIN].get(CONF_HOST), config[DOMAIN].get(CONF_PORT), ) diff --git a/homeassistant/components/dovado/manifest.json b/homeassistant/components/dovado/manifest.json index cc18e48d3b5..0a2a52cb21d 100644 --- a/homeassistant/components/dovado/manifest.json +++ b/homeassistant/components/dovado/manifest.json @@ -3,6 +3,5 @@ "name": "Dovado", "documentation": "https://www.home-assistant.io/integrations/dovado", "requirements": ["dovado==0.4.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/downloader/__init__.py b/homeassistant/components/downloader/__init__.py index 9054943ca52..0c87f04e3ab 100644 --- a/homeassistant/components/downloader/__init__.py +++ b/homeassistant/components/downloader/__init__.py @@ -7,6 +7,7 @@ import threading import requests import voluptuous as vol +from homeassistant.const import HTTP_OK import homeassistant.helpers.config_validation as cv from homeassistant.util import sanitize_filename @@ -76,7 +77,7 @@ def setup(hass, config): req = requests.get(url, stream=True, timeout=10) - if req.status_code != 200: + if req.status_code != HTTP_OK: _LOGGER.warning( "downloading '%s' failed, status_code=%d", url, req.status_code ) diff --git a/homeassistant/components/downloader/manifest.json b/homeassistant/components/downloader/manifest.json index fde980fa5ca..6b447f270cc 100644 --- a/homeassistant/components/downloader/manifest.json +++ b/homeassistant/components/downloader/manifest.json @@ -2,8 +2,6 @@ "domain": "downloader", "name": "Downloader", "documentation": "https://www.home-assistant.io/integrations/downloader", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/downloader/services.yaml b/homeassistant/components/downloader/services.yaml index d16b2788c70..6e16e00432f 100644 --- a/homeassistant/components/downloader/services.yaml +++ b/homeassistant/components/downloader/services.yaml @@ -1,15 +1,15 @@ download_file: description: Downloads a file to the download location. fields: - url: + url: description: The URL of the file to download. - example: 'http://example.org/myfile' + example: "http://example.org/myfile" subdir: description: Download into subdirectory. - example: 'download_dir' + example: "download_dir" filename: description: Determine the filename. - example: 'my_file_name' + example: "my_file_name" overwrite: description: Whether to overwrite the file or not. - example: 'false' \ No newline at end of file + example: "false" diff --git a/homeassistant/components/dsmr/manifest.json b/homeassistant/components/dsmr/manifest.json index 743bad148f0..42e6b81dc1f 100644 --- a/homeassistant/components/dsmr/manifest.json +++ b/homeassistant/components/dsmr/manifest.json @@ -3,6 +3,5 @@ "name": "DSMR Slimme Meter", "documentation": "https://www.home-assistant.io/integrations/dsmr", "requirements": ["dsmr_parser==0.18"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dsmr/sensor.py b/homeassistant/components/dsmr/sensor.py index 257407bb763..484bd708489 100644 --- a/homeassistant/components/dsmr/sensor.py +++ b/homeassistant/components/dsmr/sensor.py @@ -15,8 +15,12 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_STOP, TIME_HOURS, ) -from homeassistant.core import CoreState -import homeassistant.helpers.config_validation as cv +from homeassistant.core import CoreState, callback +from homeassistant.helpers import config_validation as cv +from homeassistant.helpers.dispatcher import ( + async_dispatcher_connect, + async_dispatcher_send, +) from homeassistant.helpers.entity import Entity _LOGGER = logging.getLogger(__name__) @@ -109,12 +113,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async_add_entities(devices) - def update_entities_telegram(telegram): - """Update entities with latest telegram and trigger state update.""" - # Make all device entities aware of new telegram - for device in devices: - device.telegram = telegram - hass.async_create_task(device.async_update_ha_state()) + update_entities_telegram = partial(async_dispatcher_send, hass, DOMAIN) # Creates an asyncio.Protocol factory for reading DSMR telegrams from # serial and calls update_entities_telegram to update entities on arrival @@ -188,6 +187,18 @@ class DSMREntity(Entity): self._config = config self.telegram = {} + async def async_added_to_hass(self): + """When entity is added to hass.""" + self.async_on_remove( + async_dispatcher_connect(self.hass, DOMAIN, self.update_data) + ) + + @callback + def update_data(self, telegram): + """Update data.""" + self.telegram = telegram + self.async_write_ha_state() + def get_dsmr_object_attr(self, attribute): """Read attribute from last received telegram for this DSMR object.""" # Make sure telegram contains an object for this entities obis diff --git a/homeassistant/components/dsmr_reader/definitions.py b/homeassistant/components/dsmr_reader/definitions.py index bd583be37f4..b6740655434 100644 --- a/homeassistant/components/dsmr_reader/definitions.py +++ b/homeassistant/components/dsmr_reader/definitions.py @@ -1,6 +1,6 @@ """Definitions for DSMR Reader sensors added to MQTT.""" -from homeassistant.const import VOLUME_CUBIC_METERS +from homeassistant.const import ENERGY_KILO_WATT_HOUR, VOLT, VOLUME_CUBIC_METERS def dsmr_transform(value): @@ -21,22 +21,22 @@ DEFINITIONS = { "dsmr/reading/electricity_delivered_1": { "name": "Low tariff usage", "icon": "mdi:flash", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/reading/electricity_returned_1": { "name": "Low tariff returned", "icon": "mdi:flash-outline", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/reading/electricity_delivered_2": { "name": "High tariff usage", "icon": "mdi:flash", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/reading/electricity_returned_2": { "name": "High tariff returned", "icon": "mdi:flash-outline", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/reading/electricity_currently_delivered": { "name": "Current power usage", @@ -86,17 +86,17 @@ DEFINITIONS = { "dsmr/reading/phase_voltage_l1": { "name": "Current voltage L1", "icon": "mdi:flash", - "unit": "V", + "unit": VOLT, }, "dsmr/reading/phase_voltage_l2": { "name": "Current voltage L2", "icon": "mdi:flash", - "unit": "V", + "unit": VOLT, }, "dsmr/reading/phase_voltage_l3": { "name": "Current voltage L3", "icon": "mdi:flash", - "unit": "V", + "unit": VOLT, }, "dsmr/consumption/gas/delivered": { "name": "Gas usage", @@ -116,32 +116,32 @@ DEFINITIONS = { "dsmr/day-consumption/electricity1": { "name": "Low tariff usage", "icon": "mdi:counter", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/day-consumption/electricity2": { "name": "High tariff usage", "icon": "mdi:counter", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/day-consumption/electricity1_returned": { "name": "Low tariff return", "icon": "mdi:counter", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/day-consumption/electricity2_returned": { "name": "High tariff return", "icon": "mdi:counter", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/day-consumption/electricity_merged": { "name": "Power usage total", "icon": "mdi:counter", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/day-consumption/electricity_returned_merged": { "name": "Power return total", "icon": "mdi:counter", - "unit": "kWh", + "unit": ENERGY_KILO_WATT_HOUR, }, "dsmr/day-consumption/electricity1_cost": { "name": "Low tariff cost", diff --git a/homeassistant/components/dsmr_reader/manifest.json b/homeassistant/components/dsmr_reader/manifest.json index 0ec70b027ba..59096d626e3 100644 --- a/homeassistant/components/dsmr_reader/manifest.json +++ b/homeassistant/components/dsmr_reader/manifest.json @@ -2,7 +2,6 @@ "domain": "dsmr_reader", "name": "DSMR Reader", "documentation": "https://www.home-assistant.io/integrations/dsmr_reader", - "requirements": [], "dependencies": ["mqtt"], "codeowners": ["@depl0y"] } diff --git a/homeassistant/components/dsmr_reader/sensor.py b/homeassistant/components/dsmr_reader/sensor.py index 01c010c4971..341451522d4 100644 --- a/homeassistant/components/dsmr_reader/sensor.py +++ b/homeassistant/components/dsmr_reader/sensor.py @@ -48,7 +48,7 @@ class DSMRSensor(Entity): else: self._state = message.payload - self.async_schedule_update_ha_state() + self.async_write_ha_state() await mqtt.async_subscribe(self.hass, self._topic, message_received, 1) diff --git a/homeassistant/components/dte_energy_bridge/manifest.json b/homeassistant/components/dte_energy_bridge/manifest.json index c056c7cbeb6..a6383149888 100644 --- a/homeassistant/components/dte_energy_bridge/manifest.json +++ b/homeassistant/components/dte_energy_bridge/manifest.json @@ -2,7 +2,5 @@ "domain": "dte_energy_bridge", "name": "DTE Energy Bridge", "documentation": "https://www.home-assistant.io/integrations/dte_energy_bridge", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dte_energy_bridge/sensor.py b/homeassistant/components/dte_energy_bridge/sensor.py index 826f9cf5acb..efd00b3da1e 100644 --- a/homeassistant/components/dte_energy_bridge/sensor.py +++ b/homeassistant/components/dte_energy_bridge/sensor.py @@ -5,7 +5,7 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, HTTP_OK import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -32,9 +32,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the DTE energy bridge sensor.""" - name = config.get(CONF_NAME) - ip_address = config.get(CONF_IP_ADDRESS) - version = config.get(CONF_VERSION, 1) + name = config[CONF_NAME] + ip_address = config[CONF_IP_ADDRESS] + version = config[CONF_VERSION] add_entities([DteEnergyBridgeSensor(ip_address, name, version)], True) @@ -85,7 +85,7 @@ class DteEnergyBridgeSensor(Entity): ) return - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.warning( "Invalid status_code from DTE Energy Bridge: %s (%s)", response.status_code, diff --git a/homeassistant/components/dublin_bus_transport/manifest.json b/homeassistant/components/dublin_bus_transport/manifest.json index f4412b6933e..a8ed951b1d9 100644 --- a/homeassistant/components/dublin_bus_transport/manifest.json +++ b/homeassistant/components/dublin_bus_transport/manifest.json @@ -2,7 +2,5 @@ "domain": "dublin_bus_transport", "name": "Dublin Bus", "documentation": "https://www.home-assistant.io/integrations/dublin_bus_transport", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dublin_bus_transport/sensor.py b/homeassistant/components/dublin_bus_transport/sensor.py index 5de0b62a4a9..0c0d6c53ed1 100644 --- a/homeassistant/components/dublin_bus_transport/sensor.py +++ b/homeassistant/components/dublin_bus_transport/sensor.py @@ -11,7 +11,7 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES +from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, HTTP_OK, TIME_MINUTES import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity import homeassistant.util.dt as dt_util @@ -59,9 +59,9 @@ def due_in_minutes(timestamp): def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Dublin public transport sensor.""" - name = config.get(CONF_NAME) - stop = config.get(CONF_STOP_ID) - route = config.get(CONF_ROUTE) + name = config[CONF_NAME] + stop = config[CONF_STOP_ID] + route = config[CONF_ROUTE] data = PublicTransportData(stop, route) add_entities([DublinPublicTransportSensor(data, stop, route, name)], True) @@ -94,7 +94,7 @@ class DublinPublicTransportSensor(Entity): if self._times is not None: next_up = "None" if len(self._times) > 1: - next_up = self._times[1][ATTR_ROUTE] + " in " + next_up = f"{self._times[1][ATTR_ROUTE]} in " next_up += self._times[1][ATTR_DUE_IN] return { @@ -148,7 +148,7 @@ class PublicTransportData: response = requests.get(_RESOURCE, params, timeout=10) - if response.status_code != 200: + if response.status_code != HTTP_OK: self.info = [ {ATTR_DUE_AT: "n/a", ATTR_ROUTE: self.route, ATTR_DUE_IN: "n/a"} ] diff --git a/homeassistant/components/duckdns/manifest.json b/homeassistant/components/duckdns/manifest.json index f6ab4e3a570..bfa692c80f3 100644 --- a/homeassistant/components/duckdns/manifest.json +++ b/homeassistant/components/duckdns/manifest.json @@ -2,7 +2,5 @@ "domain": "duckdns", "name": "Duck DNS", "documentation": "https://www.home-assistant.io/integrations/duckdns", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/duckdns/services.yaml b/homeassistant/components/duckdns/services.yaml index 8c353a0b3cd..e0ba27390df 100644 --- a/homeassistant/components/duckdns/services.yaml +++ b/homeassistant/components/duckdns/services.yaml @@ -3,4 +3,4 @@ set_txt: fields: txt: description: Payload for the TXT record. - example: 'This domain name is reserved for use in documentation' + example: "This domain name is reserved for use in documentation" diff --git a/homeassistant/components/dunehd/manifest.json b/homeassistant/components/dunehd/manifest.json index 0160d5ec918..2dfafdf0451 100644 --- a/homeassistant/components/dunehd/manifest.json +++ b/homeassistant/components/dunehd/manifest.json @@ -3,6 +3,5 @@ "name": "DuneHD", "documentation": "https://www.home-assistant.io/integrations/dunehd", "requirements": ["pdunehd==1.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/dwd_weather_warnings/manifest.json b/homeassistant/components/dwd_weather_warnings/manifest.json index 0a9f972c84e..52173f001e7 100644 --- a/homeassistant/components/dwd_weather_warnings/manifest.json +++ b/homeassistant/components/dwd_weather_warnings/manifest.json @@ -2,8 +2,6 @@ "domain": "dwd_weather_warnings", "name": "Deutsche Wetter Dienst (DWD) Weather Warnings", "documentation": "https://www.home-assistant.io/integrations/dwd_weather_warnings", - "requirements": [], - "dependencies": [], "after_dependencies": ["rest"], "codeowners": [] } diff --git a/homeassistant/components/dwd_weather_warnings/sensor.py b/homeassistant/components/dwd_weather_warnings/sensor.py index 966ec407ce8..152c757424c 100644 --- a/homeassistant/components/dwd_weather_warnings/sensor.py +++ b/homeassistant/components/dwd_weather_warnings/sensor.py @@ -133,11 +133,14 @@ class DwdWeatherWarningsSensor(Entity): else: raise Exception("Unknown warning type") - data["warning_count"] = self._api.data[prefix + "_warning_count"] + data["warning_count"] = self._api.data[f"{prefix}_warning_count"] i = 0 - for event in self._api.data[prefix + "_warnings"]: + for event in self._api.data[f"{prefix}_warnings"]: i = i + 1 + # dictionary for the attribute containing the complete warning as json + event_json = event.copy() + data[f"warning_{i}_name"] = event["event"] data[f"warning_{i}_level"] = event["level"] data[f"warning_{i}_type"] = event["type"] @@ -152,11 +155,15 @@ class DwdWeatherWarningsSensor(Entity): data[f"warning_{i}_start"] = dt_util.as_local( dt_util.utc_from_timestamp(event["start"] / 1000) ) + event_json["start"] = data[f"warning_{i}_start"] if event["end"] is not None: data[f"warning_{i}_end"] = dt_util.as_local( dt_util.utc_from_timestamp(event["end"] / 1000) ) + event_json["end"] = data[f"warning_{i}_end"] + + data[f"warning_{i}"] = event_json return data diff --git a/homeassistant/components/dweet/manifest.json b/homeassistant/components/dweet/manifest.json index be21605196a..7849b2b3346 100644 --- a/homeassistant/components/dweet/manifest.json +++ b/homeassistant/components/dweet/manifest.json @@ -3,6 +3,5 @@ "name": "dweet.io", "documentation": "https://www.home-assistant.io/integrations/dweet", "requirements": ["dweepy==0.3.0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/dynalite/__init__.py b/homeassistant/components/dynalite/__init__.py old mode 100755 new mode 100644 index 973d09a384f..2f2ed8f2fa2 --- a/homeassistant/components/dynalite/__init__.py +++ b/homeassistant/components/dynalite/__init__.py @@ -1,43 +1,55 @@ """Support for the Dynalite networks.""" import asyncio +from typing import Any, Dict, Union import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import CONF_HOST +from homeassistant.components.cover import DEVICE_CLASSES_SCHEMA +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, CONF_TYPE +from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import config_validation as cv # Loading the config flow file will register the flow from .bridge import DynaliteBridge from .const import ( + ACTIVE_INIT, + ACTIVE_OFF, + ACTIVE_ON, CONF_ACTIVE, - CONF_ACTIVE_INIT, - CONF_ACTIVE_OFF, - CONF_ACTIVE_ON, CONF_AREA, CONF_AUTO_DISCOVER, CONF_BRIDGES, CONF_CHANNEL, - CONF_CHANNEL_TYPE, + CONF_CHANNEL_COVER, + CONF_CLOSE_PRESET, CONF_DEFAULT, + CONF_DEVICE_CLASS, + CONF_DURATION, CONF_FADE, - CONF_NAME, CONF_NO_DEFAULT, - CONF_POLLTIMER, - CONF_PORT, + CONF_OPEN_PRESET, + CONF_POLL_TIMER, CONF_PRESET, + CONF_ROOM_OFF, + CONF_ROOM_ON, + CONF_STOP_PRESET, + CONF_TEMPLATE, + CONF_TILT_TIME, DEFAULT_CHANNEL_TYPE, DEFAULT_NAME, DEFAULT_PORT, + DEFAULT_TEMPLATES, DOMAIN, ENTITY_PLATFORMS, LOGGER, ) -def num_string(value): +def num_string(value: Union[int, str]) -> str: """Test if value is a string of digits, aka an integer.""" new_value = str(value) if new_value.isdigit(): @@ -49,7 +61,7 @@ CHANNEL_DATA_SCHEMA = vol.Schema( { vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_FADE): vol.Coerce(float), - vol.Optional(CONF_CHANNEL_TYPE, default=DEFAULT_CHANNEL_TYPE): vol.Any( + vol.Optional(CONF_TYPE, default=DEFAULT_CHANNEL_TYPE): vol.Any( "light", "switch" ), } @@ -63,15 +75,66 @@ PRESET_DATA_SCHEMA = vol.Schema( PRESET_SCHEMA = vol.Schema({num_string: vol.Any(PRESET_DATA_SCHEMA, None)}) +TEMPLATE_ROOM_SCHEMA = vol.Schema( + {vol.Optional(CONF_ROOM_ON): num_string, vol.Optional(CONF_ROOM_OFF): num_string} +) + +TEMPLATE_TIMECOVER_SCHEMA = vol.Schema( + { + vol.Optional(CONF_CHANNEL_COVER): num_string, + vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, + vol.Optional(CONF_OPEN_PRESET): num_string, + vol.Optional(CONF_CLOSE_PRESET): num_string, + vol.Optional(CONF_STOP_PRESET): num_string, + vol.Optional(CONF_DURATION): vol.Coerce(float), + vol.Optional(CONF_TILT_TIME): vol.Coerce(float), + } +) + +TEMPLATE_DATA_SCHEMA = vol.Any(TEMPLATE_ROOM_SCHEMA, TEMPLATE_TIMECOVER_SCHEMA) + +TEMPLATE_SCHEMA = vol.Schema({str: TEMPLATE_DATA_SCHEMA}) + + +def validate_area(config: Dict[str, Any]) -> Dict[str, Any]: + """Validate that template parameters are only used if area is using the relevant template.""" + conf_set = set() + for template in DEFAULT_TEMPLATES: + for conf in DEFAULT_TEMPLATES[template]: + conf_set.add(conf) + if config.get(CONF_TEMPLATE): + for conf in DEFAULT_TEMPLATES[config[CONF_TEMPLATE]]: + conf_set.remove(conf) + for conf in conf_set: + if config.get(conf): + raise vol.Invalid( + f"{conf} should not be part of area {config[CONF_NAME]} config" + ) + return config + AREA_DATA_SCHEMA = vol.Schema( - { - vol.Required(CONF_NAME): cv.string, - vol.Optional(CONF_FADE): vol.Coerce(float), - vol.Optional(CONF_NO_DEFAULT): vol.Coerce(bool), - vol.Optional(CONF_CHANNEL): CHANNEL_SCHEMA, - vol.Optional(CONF_PRESET): PRESET_SCHEMA, - }, + vol.All( + { + vol.Required(CONF_NAME): cv.string, + vol.Optional(CONF_TEMPLATE): cv.string, + vol.Optional(CONF_FADE): vol.Coerce(float), + vol.Optional(CONF_NO_DEFAULT): cv.boolean, + vol.Optional(CONF_CHANNEL): CHANNEL_SCHEMA, + vol.Optional(CONF_PRESET): PRESET_SCHEMA, + # the next ones can be part of the templates + vol.Optional(CONF_ROOM_ON): num_string, + vol.Optional(CONF_ROOM_OFF): num_string, + vol.Optional(CONF_CHANNEL_COVER): num_string, + vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA, + vol.Optional(CONF_OPEN_PRESET): num_string, + vol.Optional(CONF_CLOSE_PRESET): num_string, + vol.Optional(CONF_STOP_PRESET): num_string, + vol.Optional(CONF_DURATION): vol.Coerce(float), + vol.Optional(CONF_TILT_TIME): vol.Coerce(float), + }, + validate_area, + ) ) AREA_SCHEMA = vol.Schema({num_string: vol.Any(AREA_DATA_SCHEMA, None)}) @@ -85,13 +148,14 @@ BRIDGE_SCHEMA = vol.Schema( vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT, default=DEFAULT_PORT): int, vol.Optional(CONF_AUTO_DISCOVER, default=False): vol.Coerce(bool), - vol.Optional(CONF_POLLTIMER, default=1.0): vol.Coerce(float), + vol.Optional(CONF_POLL_TIMER, default=1.0): vol.Coerce(float), vol.Optional(CONF_AREA): AREA_SCHEMA, vol.Optional(CONF_DEFAULT): PLATFORM_DEFAULTS_SCHEMA, vol.Optional(CONF_ACTIVE, default=False): vol.Any( - CONF_ACTIVE_ON, CONF_ACTIVE_OFF, CONF_ACTIVE_INIT, cv.boolean + ACTIVE_ON, ACTIVE_OFF, ACTIVE_INIT, cv.boolean ), vol.Optional(CONF_PRESET): PRESET_SCHEMA, + vol.Optional(CONF_TEMPLATE): TEMPLATE_SCHEMA, } ) @@ -105,7 +169,7 @@ CONFIG_SCHEMA = vol.Schema( ) -async def async_setup(hass, config): +async def async_setup(hass: HomeAssistant, config: Dict[str, Any]) -> bool: """Set up the Dynalite platform.""" conf = config.get(DOMAIN) @@ -137,7 +201,7 @@ async def async_setup(hass, config): return True -async def async_entry_changed(hass, entry): +async def async_entry_changed(hass: HomeAssistant, entry: ConfigEntry) -> None: """Reload entry since the data has changed.""" LOGGER.debug("Reconfiguring entry %s", entry.data) bridge = hass.data[DOMAIN][entry.entry_id] @@ -145,7 +209,7 @@ async def async_entry_changed(hass, entry): LOGGER.debug("Reconfiguring entry finished %s", entry.data) -async def async_setup_entry(hass, entry): +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up a bridge from a config entry.""" LOGGER.debug("Setting up entry %s", entry.data) bridge = DynaliteBridge(hass, entry.data) @@ -163,7 +227,7 @@ async def async_setup_entry(hass, entry): return True -async def async_unload_entry(hass, entry): +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Unload a config entry.""" LOGGER.debug("Unloading entry %s", entry.data) hass.data[DOMAIN].pop(entry.entry_id) diff --git a/homeassistant/components/dynalite/bridge.py b/homeassistant/components/dynalite/bridge.py old mode 100755 new mode 100644 index fa0a91bfab1..09cf8e25a10 --- a/homeassistant/components/dynalite/bridge.py +++ b/homeassistant/components/dynalite/bridge.py @@ -1,17 +1,26 @@ """Code to handle a Dynalite bridge.""" +from typing import TYPE_CHECKING, Any, Callable, Dict, List + from dynalite_devices_lib.dynalite_devices import DynaliteDevices -from homeassistant.core import callback +from homeassistant.const import CONF_HOST +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_send -from .const import CONF_ALL, CONF_HOST, ENTITY_PLATFORMS, LOGGER +from .const import CONF_ALL, ENTITY_PLATFORMS, LOGGER +from .convert_config import convert_config + +if TYPE_CHECKING: # pragma: no cover + from dynalite_devices_lib.dynalite_devices import ( # pylint: disable=ungrouped-imports + DynaliteBaseDevice, + ) class DynaliteBridge: """Manages a single Dynalite bridge.""" - def __init__(self, hass, config): + def __init__(self, hass: HomeAssistant, config: Dict[str, Any]) -> None: """Initialize the system based on host parameter.""" self.hass = hass self.area = {} @@ -23,20 +32,20 @@ class DynaliteBridge: new_device_func=self.add_devices_when_registered, update_device_func=self.update_device, ) - self.dynalite_devices.configure(config) + self.dynalite_devices.configure(convert_config(config)) - async def async_setup(self): + async def async_setup(self) -> bool: """Set up a Dynalite bridge.""" # Configure the dynalite devices LOGGER.debug("Setting up bridge - host %s", self.host) return await self.dynalite_devices.async_setup() - def reload_config(self, config): + def reload_config(self, config: Dict[str, Any]) -> None: """Reconfigure a bridge when config changes.""" LOGGER.debug("Reloading bridge - host %s, config %s", self.host, config) - self.dynalite_devices.configure(config) + self.dynalite_devices.configure(convert_config(config)) - def update_signal(self, device=None): + def update_signal(self, device: "DynaliteBaseDevice" = None) -> str: """Create signal to use to trigger entity update.""" if device: signal = f"dynalite-update-{self.host}-{device.unique_id}" @@ -45,12 +54,12 @@ class DynaliteBridge: return signal @callback - def update_device(self, device): + def update_device(self, device: "DynaliteBaseDevice") -> None: """Call when a device or all devices should be updated.""" if device == CONF_ALL: # This is used to signal connection or disconnection, so all devices may become available or not. log_string = ( - "Connected" if self.dynalite_devices.available else "Disconnected" + "Connected" if self.dynalite_devices.connected else "Disconnected" ) LOGGER.info("%s to dynalite host", log_string) async_dispatcher_send(self.hass, self.update_signal()) @@ -58,13 +67,13 @@ class DynaliteBridge: async_dispatcher_send(self.hass, self.update_signal(device)) @callback - def register_add_devices(self, platform, async_add_devices): + def register_add_devices(self, platform: str, async_add_devices: Callable) -> None: """Add an async_add_entities for a category.""" self.async_add_devices[platform] = async_add_devices if platform in self.waiting_devices: self.async_add_devices[platform](self.waiting_devices[platform]) - def add_devices_when_registered(self, devices): + def add_devices_when_registered(self, devices: List["DynaliteBaseDevice"]) -> None: """Add the devices to HA if the add devices callback was registered, otherwise queue until it is.""" for platform in ENTITY_PLATFORMS: platform_devices = [ diff --git a/homeassistant/components/dynalite/config_flow.py b/homeassistant/components/dynalite/config_flow.py old mode 100755 new mode 100644 index ca95c0754a6..4c5b2ceb7d8 --- a/homeassistant/components/dynalite/config_flow.py +++ b/homeassistant/components/dynalite/config_flow.py @@ -1,4 +1,6 @@ """Config flow to configure Dynalite hub.""" +from typing import Any, Dict + from homeassistant import config_entries from homeassistant.const import CONF_HOST @@ -12,11 +14,11 @@ class DynaliteFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): VERSION = 1 CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL - def __init__(self): + def __init__(self) -> None: """Initialize the Dynalite flow.""" self.host = None - async def async_step_import(self, import_info): + async def async_step_import(self, import_info: Dict[str, Any]) -> Any: """Import a new bridge as a config entry.""" LOGGER.debug("Starting async_step_import - %s", import_info) host = import_info[CONF_HOST] diff --git a/homeassistant/components/dynalite/const.py b/homeassistant/components/dynalite/const.py old mode 100755 new mode 100644 index 267b5727b83..ade167e1b3e --- a/homeassistant/components/dynalite/const.py +++ b/homeassistant/components/dynalite/const.py @@ -1,31 +1,54 @@ """Constants for the Dynalite component.""" import logging +from homeassistant.components.cover import DEVICE_CLASS_SHUTTER +from homeassistant.const import CONF_ROOM + LOGGER = logging.getLogger(__package__) DOMAIN = "dynalite" -ENTITY_PLATFORMS = ["light", "switch"] +ENTITY_PLATFORMS = ["light", "switch", "cover"] CONF_ACTIVE = "active" -CONF_ACTIVE_INIT = "init" -CONF_ACTIVE_OFF = "off" -CONF_ACTIVE_ON = "on" +ACTIVE_INIT = "init" +ACTIVE_OFF = "off" +ACTIVE_ON = "on" CONF_ALL = "ALL" CONF_AREA = "area" CONF_AUTO_DISCOVER = "autodiscover" CONF_BRIDGES = "bridges" CONF_CHANNEL = "channel" -CONF_CHANNEL_TYPE = "type" +CONF_CHANNEL_COVER = "channel_cover" +CONF_CLOSE_PRESET = "close" CONF_DEFAULT = "default" +CONF_DEVICE_CLASS = "class" +CONF_DURATION = "duration" CONF_FADE = "fade" -CONF_HOST = "host" -CONF_NAME = "name" CONF_NO_DEFAULT = "nodefault" -CONF_POLLTIMER = "polltimer" -CONF_PORT = "port" +CONF_OPEN_PRESET = "open" +CONF_POLL_TIMER = "polltimer" CONF_PRESET = "preset" +CONF_ROOM_OFF = "room_off" +CONF_ROOM_ON = "room_on" +CONF_STOP_PRESET = "stop" +CONF_TEMPLATE = "template" +CONF_TILT_TIME = "tilt" +CONF_TIME_COVER = "time_cover" DEFAULT_CHANNEL_TYPE = "light" +DEFAULT_COVER_CLASS = DEVICE_CLASS_SHUTTER DEFAULT_NAME = "dynalite" DEFAULT_PORT = 12345 +DEFAULT_TEMPLATES = { + CONF_ROOM: [CONF_ROOM_ON, CONF_ROOM_OFF], + CONF_TIME_COVER: [ + CONF_CHANNEL_COVER, + CONF_DEVICE_CLASS, + CONF_OPEN_PRESET, + CONF_CLOSE_PRESET, + CONF_STOP_PRESET, + CONF_DURATION, + CONF_TILT_TIME, + ], +} diff --git a/homeassistant/components/dynalite/convert_config.py b/homeassistant/components/dynalite/convert_config.py new file mode 100644 index 00000000000..03ece744d41 --- /dev/null +++ b/homeassistant/components/dynalite/convert_config.py @@ -0,0 +1,78 @@ +"""Convert the HA config to the dynalite config.""" + +from typing import Any, Dict + +from dynalite_devices_lib import const as dyn_const + +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, CONF_ROOM, CONF_TYPE + +from .const import ( + ACTIVE_INIT, + ACTIVE_OFF, + ACTIVE_ON, + CONF_ACTIVE, + CONF_AREA, + CONF_AUTO_DISCOVER, + CONF_CHANNEL, + CONF_CHANNEL_COVER, + CONF_CLOSE_PRESET, + CONF_DEFAULT, + CONF_DEVICE_CLASS, + CONF_DURATION, + CONF_FADE, + CONF_NO_DEFAULT, + CONF_OPEN_PRESET, + CONF_POLL_TIMER, + CONF_PRESET, + CONF_ROOM_OFF, + CONF_ROOM_ON, + CONF_STOP_PRESET, + CONF_TEMPLATE, + CONF_TILT_TIME, + CONF_TIME_COVER, +) + +CONF_MAP = { + CONF_ACTIVE: dyn_const.CONF_ACTIVE, + ACTIVE_INIT: dyn_const.CONF_ACTIVE_INIT, + ACTIVE_OFF: dyn_const.CONF_ACTIVE_OFF, + ACTIVE_ON: dyn_const.CONF_ACTIVE_ON, + CONF_AREA: dyn_const.CONF_AREA, + CONF_AUTO_DISCOVER: dyn_const.CONF_AUTO_DISCOVER, + CONF_CHANNEL: dyn_const.CONF_CHANNEL, + CONF_CHANNEL_COVER: dyn_const.CONF_CHANNEL_COVER, + CONF_TYPE: dyn_const.CONF_CHANNEL_TYPE, + CONF_CLOSE_PRESET: dyn_const.CONF_CLOSE_PRESET, + CONF_DEFAULT: dyn_const.CONF_DEFAULT, + CONF_DEVICE_CLASS: dyn_const.CONF_DEVICE_CLASS, + CONF_DURATION: dyn_const.CONF_DURATION, + CONF_FADE: dyn_const.CONF_FADE, + CONF_HOST: dyn_const.CONF_HOST, + CONF_NAME: dyn_const.CONF_NAME, + CONF_NO_DEFAULT: dyn_const.CONF_NO_DEFAULT, + CONF_OPEN_PRESET: dyn_const.CONF_OPEN_PRESET, + CONF_POLL_TIMER: dyn_const.CONF_POLL_TIMER, + CONF_PORT: dyn_const.CONF_PORT, + CONF_PRESET: dyn_const.CONF_PRESET, + CONF_ROOM: dyn_const.CONF_ROOM, + CONF_ROOM_OFF: dyn_const.CONF_ROOM_OFF, + CONF_ROOM_ON: dyn_const.CONF_ROOM_ON, + CONF_STOP_PRESET: dyn_const.CONF_STOP_PRESET, + CONF_TEMPLATE: dyn_const.CONF_TEMPLATE, + CONF_TILT_TIME: dyn_const.CONF_TILT_TIME, + CONF_TIME_COVER: dyn_const.CONF_TIME_COVER, +} + + +def convert_config(config: Dict[str, Any]) -> Dict[str, Any]: + """Convert a config dict by replacing component consts with library consts.""" + result = {} + for (key, value) in config.items(): + if isinstance(value, dict): + new_value = convert_config(value) + elif isinstance(value, str): + new_value = CONF_MAP.get(value, value) + else: + new_value = value + result[CONF_MAP.get(key, key)] = new_value + return result diff --git a/homeassistant/components/dynalite/cover.py b/homeassistant/components/dynalite/cover.py new file mode 100644 index 00000000000..dcf16ede58c --- /dev/null +++ b/homeassistant/components/dynalite/cover.py @@ -0,0 +1,98 @@ +"""Support for the Dynalite channels as covers.""" +from typing import Callable + +from homeassistant.components.cover import DEVICE_CLASSES, CoverDevice +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant, callback + +from .const import DEFAULT_COVER_CLASS +from .dynalitebase import DynaliteBase, async_setup_entry_base + + +async def async_setup_entry( + hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: Callable +) -> None: + """Record the async_add_entities function to add them later when received from Dynalite.""" + + @callback + def cover_from_device(device, bridge): + if device.has_tilt: + return DynaliteCoverWithTilt(device, bridge) + return DynaliteCover(device, bridge) + + async_setup_entry_base( + hass, config_entry, async_add_entities, "cover", cover_from_device + ) + + +class DynaliteCover(DynaliteBase, CoverDevice): + """Representation of a Dynalite Channel as a Home Assistant Cover.""" + + @property + def device_class(self) -> str: + """Return the class of the device.""" + dev_cls = self._device.device_class + if dev_cls in DEVICE_CLASSES: + return dev_cls + return DEFAULT_COVER_CLASS + + @property + def current_cover_position(self) -> int: + """Return the position of the cover from 0 to 100.""" + return self._device.current_cover_position + + @property + def is_opening(self) -> bool: + """Return true if cover is opening.""" + return self._device.is_opening + + @property + def is_closing(self) -> bool: + """Return true if cover is closing.""" + return self._device.is_closing + + @property + def is_closed(self) -> bool: + """Return true if cover is closed.""" + return self._device.is_closed + + async def async_open_cover(self, **kwargs) -> None: + """Open the cover.""" + await self._device.async_open_cover(**kwargs) + + async def async_close_cover(self, **kwargs) -> None: + """Close the cover.""" + await self._device.async_close_cover(**kwargs) + + async def async_set_cover_position(self, **kwargs) -> None: + """Set the cover position.""" + await self._device.async_set_cover_position(**kwargs) + + async def async_stop_cover(self, **kwargs) -> None: + """Stop the cover.""" + await self._device.async_stop_cover(**kwargs) + + +class DynaliteCoverWithTilt(DynaliteCover): + """Representation of a Dynalite Channel as a Home Assistant Cover that uses up and down for tilt.""" + + @property + def current_cover_tilt_position(self) -> int: + """Return the current tilt position.""" + return self._device.current_cover_tilt_position + + async def async_open_cover_tilt(self, **kwargs) -> None: + """Open cover tilt.""" + await self._device.async_open_cover_tilt(**kwargs) + + async def async_close_cover_tilt(self, **kwargs) -> None: + """Close cover tilt.""" + await self._device.async_close_cover_tilt(**kwargs) + + async def async_set_cover_tilt_position(self, **kwargs) -> None: + """Set the cover tilt position.""" + await self._device.async_set_cover_tilt_position(**kwargs) + + async def async_stop_cover_tilt(self, **kwargs) -> None: + """Stop the cover tilt.""" + await self._device.async_stop_cover_tilt(**kwargs) diff --git a/homeassistant/components/dynalite/dynalitebase.py b/homeassistant/components/dynalite/dynalitebase.py old mode 100755 new mode 100644 index 8bb1ab2dc42..31879c5c118 --- a/homeassistant/components/dynalite/dynalitebase.py +++ b/homeassistant/components/dynalite/dynalitebase.py @@ -1,5 +1,9 @@ """Support for the Dynalite devices as entities.""" -from homeassistant.core import callback +from typing import Any, Callable, Dict + +from homeassistant.components.dynalite.bridge import DynaliteBridge +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity @@ -7,8 +11,12 @@ from .const import DOMAIN, LOGGER def async_setup_entry_base( - hass, config_entry, async_add_entities, platform, entity_from_device -): + hass: HomeAssistant, + config_entry: ConfigEntry, + async_add_entities: Callable, + platform: str, + entity_from_device: Callable, +) -> None: """Record the async_add_entities function to add them later when received from Dynalite.""" LOGGER.debug("Setting up %s entry = %s", platform, config_entry.data) bridge = hass.data[DOMAIN][config_entry.entry_id] @@ -18,8 +26,7 @@ def async_setup_entry_base( # assumes it is called with a single platform added_entities = [] for device in devices: - if device.category == platform: - added_entities.append(entity_from_device(device, bridge)) + added_entities.append(entity_from_device(device, bridge)) if added_entities: async_add_entities(added_entities) @@ -29,29 +36,29 @@ def async_setup_entry_base( class DynaliteBase(Entity): """Base class for the Dynalite entities.""" - def __init__(self, device, bridge): + def __init__(self, device: Any, bridge: DynaliteBridge) -> None: """Initialize the base class.""" self._device = device self._bridge = bridge self._unsub_dispatchers = [] @property - def name(self): + def name(self) -> str: """Return the name of the entity.""" return self._device.name @property - def unique_id(self): + def unique_id(self) -> str: """Return the unique ID of the entity.""" return self._device.unique_id @property - def available(self): + def available(self) -> bool: """Return if entity is available.""" return self._device.available @property - def device_info(self): + def device_info(self) -> Dict[str, Any]: """Device info for this entity.""" return { "identifiers": {(DOMAIN, self._device.unique_id)}, @@ -59,7 +66,7 @@ class DynaliteBase(Entity): "manufacturer": "Dynalite", } - async def async_added_to_hass(self): + async def async_added_to_hass(self) -> None: """Added to hass so need to register to dispatch.""" # register for device specific update self._unsub_dispatchers.append( @@ -78,7 +85,7 @@ class DynaliteBase(Entity): ) ) - async def async_will_remove_from_hass(self): + async def async_will_remove_from_hass(self) -> None: """Unregister signal dispatch listeners when being removed.""" for unsub in self._unsub_dispatchers: unsub() diff --git a/homeassistant/components/dynalite/light.py b/homeassistant/components/dynalite/light.py old mode 100755 new mode 100644 index a5b7139803c..283b1ee2286 --- a/homeassistant/components/dynalite/light.py +++ b/homeassistant/components/dynalite/light.py @@ -1,10 +1,16 @@ """Support for Dynalite channels as lights.""" +from typing import Callable + from homeassistant.components.light import SUPPORT_BRIGHTNESS, Light +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant from .dynalitebase import DynaliteBase, async_setup_entry_base -async def async_setup_entry(hass, config_entry, async_add_entities): +async def async_setup_entry( + hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: Callable +) -> None: """Record the async_add_entities function to add them later when received from Dynalite.""" async_setup_entry_base( @@ -16,24 +22,24 @@ class DynaliteLight(DynaliteBase, Light): """Representation of a Dynalite Channel as a Home Assistant Light.""" @property - def brightness(self): + def brightness(self) -> int: """Return the brightness of this light between 0..255.""" return self._device.brightness @property - def is_on(self): + def is_on(self) -> bool: """Return true if device is on.""" return self._device.is_on - async def async_turn_on(self, **kwargs): + async def async_turn_on(self, **kwargs) -> None: """Turn the light on.""" await self._device.async_turn_on(**kwargs) - async def async_turn_off(self, **kwargs): + async def async_turn_off(self, **kwargs) -> None: """Turn the light off.""" await self._device.async_turn_off(**kwargs) @property - def supported_features(self): + def supported_features(self) -> int: """Flag supported features.""" return SUPPORT_BRIGHTNESS diff --git a/homeassistant/components/dynalite/manifest.json b/homeassistant/components/dynalite/manifest.json old mode 100755 new mode 100644 index d6351db17b2..39f72f57b06 --- a/homeassistant/components/dynalite/manifest.json +++ b/homeassistant/components/dynalite/manifest.json @@ -1,9 +1,8 @@ { - "domain": "dynalite", - "name": "Philips Dynalite", - "config_flow": true, - "documentation": "https://www.home-assistant.io/integrations/dynalite", - "dependencies": [], - "codeowners": ["@ziv1234"], - "requirements": ["dynalite_devices==0.1.32"] + "domain": "dynalite", + "name": "Philips Dynalite", + "config_flow": true, + "documentation": "https://www.home-assistant.io/integrations/dynalite", + "codeowners": ["@ziv1234"], + "requirements": ["dynalite_devices==0.1.39"] } diff --git a/homeassistant/components/dynalite/switch.py b/homeassistant/components/dynalite/switch.py old mode 100755 new mode 100644 index 84be74cee36..45e24d8193a --- a/homeassistant/components/dynalite/switch.py +++ b/homeassistant/components/dynalite/switch.py @@ -1,10 +1,16 @@ """Support for the Dynalite channels and presets as switches.""" +from typing import Callable + from homeassistant.components.switch import SwitchDevice +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant from .dynalitebase import DynaliteBase, async_setup_entry_base -async def async_setup_entry(hass, config_entry, async_add_entities): +async def async_setup_entry( + hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: Callable +) -> None: """Record the async_add_entities function to add them later when received from Dynalite.""" async_setup_entry_base( @@ -16,14 +22,14 @@ class DynaliteSwitch(DynaliteBase, SwitchDevice): """Representation of a Dynalite Channel as a Home Assistant Switch.""" @property - def is_on(self): + def is_on(self) -> bool: """Return true if switch is on.""" return self._device.is_on - async def async_turn_on(self, **kwargs): + async def async_turn_on(self, **kwargs) -> None: """Turn the switch on.""" await self._device.async_turn_on() - async def async_turn_off(self, **kwargs): + async def async_turn_off(self, **kwargs) -> None: """Turn the switch off.""" await self._device.async_turn_off() diff --git a/homeassistant/components/dyson/manifest.json b/homeassistant/components/dyson/manifest.json index f6c0c187c8c..60800963842 100644 --- a/homeassistant/components/dyson/manifest.json +++ b/homeassistant/components/dyson/manifest.json @@ -3,6 +3,5 @@ "name": "Dyson", "documentation": "https://www.home-assistant.io/integrations/dyson", "requirements": ["libpurecool==0.6.1"], - "dependencies": [], "codeowners": ["@etheralm"] } diff --git a/homeassistant/components/dyson/services.yaml b/homeassistant/components/dyson/services.yaml index 1b59217f6ab..73f7bc75874 100644 --- a/homeassistant/components/dyson/services.yaml +++ b/homeassistant/components/dyson/services.yaml @@ -5,7 +5,7 @@ set_night_mode: fields: entity_id: description: Name(s) of the entities to enable/disable night mode - example: 'fan.living_room' + example: "fan.living_room" night_mode: description: Night mode status example: true @@ -15,7 +15,7 @@ set_auto_mode: fields: entity_id: description: Name(s) of the entities to enable/disable auto mode - example: 'fan.living_room' + example: "fan.living_room" auto_mode: description: Auto mode status example: true @@ -25,7 +25,7 @@ set_angle: fields: entity_id: description: Name(s) of the entities for which to set the angle - example: 'fan.living_room' + example: "fan.living_room" angle_low: description: The angle at which the oscillation should start example: 1 @@ -38,7 +38,7 @@ flow_direction_front: fields: entity_id: description: Name(s) of the entities to set frontal flow direction for - example: 'fan.living_room' + example: "fan.living_room" flow_direction_front: description: Frontal flow direction example: true @@ -48,7 +48,7 @@ set_timer: fields: entity_id: description: Name(s) of the entities to set the sleep timer for - example: 'fan.living_room' + example: "fan.living_room" timer: description: The value in minutes to set the timer to, 0 to disable it example: 30 @@ -58,7 +58,7 @@ set_speed: fields: entity_id: description: Name(s) of the entities to set the speed for - example: 'fan.living_room' + example: "fan.living_room" dyson_speed: description: Speed - example: 1 \ No newline at end of file + example: 1 diff --git a/homeassistant/components/ebox/manifest.json b/homeassistant/components/ebox/manifest.json index 706bca862df..18f26436981 100644 --- a/homeassistant/components/ebox/manifest.json +++ b/homeassistant/components/ebox/manifest.json @@ -3,6 +3,5 @@ "name": "EBox", "documentation": "https://www.home-assistant.io/integrations/ebox", "requirements": ["pyebox==1.1.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ebusd/__init__.py b/homeassistant/components/ebusd/__init__.py index eafa42ba22a..a1a7fc88086 100644 --- a/homeassistant/components/ebusd/__init__.py +++ b/homeassistant/components/ebusd/__init__.py @@ -82,7 +82,7 @@ def setup(hass, config): _LOGGER.debug("Ebusd integration setup completed") return True - except (socket.timeout, socket.error): + except (socket.timeout, OSError): return False diff --git a/homeassistant/components/ebusd/manifest.json b/homeassistant/components/ebusd/manifest.json index dc3f34e9ed9..482b6918518 100644 --- a/homeassistant/components/ebusd/manifest.json +++ b/homeassistant/components/ebusd/manifest.json @@ -3,6 +3,5 @@ "name": "ebusd", "documentation": "https://www.home-assistant.io/integrations/ebusd", "requirements": ["ebusdpy==0.0.16"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ebusd/services.yaml b/homeassistant/components/ebusd/services.yaml index 0f64533f7f1..eee9896da10 100644 --- a/homeassistant/components/ebusd/services.yaml +++ b/homeassistant/components/ebusd/services.yaml @@ -3,4 +3,4 @@ write: fields: call: description: Property name and value to set - example: '{"name": "Hc1MaxFlowTempDesired", "value": 21}' \ No newline at end of file + example: '{"name": "Hc1MaxFlowTempDesired", "value": 21}' diff --git a/homeassistant/components/ebusd/strings.json b/homeassistant/components/ebusd/strings.json deleted file mode 100644 index ee62df8ddad..00000000000 --- a/homeassistant/components/ebusd/strings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "state": { - "day": "Day", - "night": "Night" - } -} \ No newline at end of file diff --git a/homeassistant/components/ebusd/.translations/bg.json b/homeassistant/components/ebusd/translations/bg.json similarity index 100% rename from homeassistant/components/ebusd/.translations/bg.json rename to homeassistant/components/ebusd/translations/bg.json diff --git a/homeassistant/components/ebusd/.translations/ca.json b/homeassistant/components/ebusd/translations/ca.json similarity index 100% rename from homeassistant/components/ebusd/.translations/ca.json rename to homeassistant/components/ebusd/translations/ca.json diff --git a/homeassistant/components/ebusd/.translations/cs.json b/homeassistant/components/ebusd/translations/cs.json similarity index 100% rename from homeassistant/components/ebusd/.translations/cs.json rename to homeassistant/components/ebusd/translations/cs.json diff --git a/homeassistant/components/ebusd/.translations/da.json b/homeassistant/components/ebusd/translations/da.json similarity index 100% rename from homeassistant/components/ebusd/.translations/da.json rename to homeassistant/components/ebusd/translations/da.json diff --git a/homeassistant/components/ebusd/.translations/de.json b/homeassistant/components/ebusd/translations/de.json similarity index 100% rename from homeassistant/components/ebusd/.translations/de.json rename to homeassistant/components/ebusd/translations/de.json diff --git a/homeassistant/components/ebusd/.translations/ebusd.en.json b/homeassistant/components/ebusd/translations/ebusd.en.json similarity index 100% rename from homeassistant/components/ebusd/.translations/ebusd.en.json rename to homeassistant/components/ebusd/translations/ebusd.en.json diff --git a/homeassistant/components/ebusd/.translations/ebusd.it.json b/homeassistant/components/ebusd/translations/ebusd.it.json similarity index 100% rename from homeassistant/components/ebusd/.translations/ebusd.it.json rename to homeassistant/components/ebusd/translations/ebusd.it.json diff --git a/homeassistant/components/ebusd/.translations/en.json b/homeassistant/components/ebusd/translations/en.json similarity index 100% rename from homeassistant/components/ebusd/.translations/en.json rename to homeassistant/components/ebusd/translations/en.json diff --git a/homeassistant/components/ebusd/.translations/es-419.json b/homeassistant/components/ebusd/translations/es-419.json similarity index 100% rename from homeassistant/components/ebusd/.translations/es-419.json rename to homeassistant/components/ebusd/translations/es-419.json diff --git a/homeassistant/components/ebusd/.translations/es.json b/homeassistant/components/ebusd/translations/es.json similarity index 100% rename from homeassistant/components/ebusd/.translations/es.json rename to homeassistant/components/ebusd/translations/es.json diff --git a/homeassistant/components/ebusd/.translations/fr.json b/homeassistant/components/ebusd/translations/fr.json similarity index 100% rename from homeassistant/components/ebusd/.translations/fr.json rename to homeassistant/components/ebusd/translations/fr.json diff --git a/homeassistant/components/ebusd/.translations/he.json b/homeassistant/components/ebusd/translations/he.json similarity index 100% rename from homeassistant/components/ebusd/.translations/he.json rename to homeassistant/components/ebusd/translations/he.json diff --git a/homeassistant/components/ebusd/.translations/hu.json b/homeassistant/components/ebusd/translations/hu.json similarity index 100% rename from homeassistant/components/ebusd/.translations/hu.json rename to homeassistant/components/ebusd/translations/hu.json diff --git a/homeassistant/components/ebusd/.translations/it.json b/homeassistant/components/ebusd/translations/it.json similarity index 100% rename from homeassistant/components/ebusd/.translations/it.json rename to homeassistant/components/ebusd/translations/it.json diff --git a/homeassistant/components/ebusd/.translations/ko.json b/homeassistant/components/ebusd/translations/ko.json similarity index 100% rename from homeassistant/components/ebusd/.translations/ko.json rename to homeassistant/components/ebusd/translations/ko.json diff --git a/homeassistant/components/ebusd/.translations/lb.json b/homeassistant/components/ebusd/translations/lb.json similarity index 100% rename from homeassistant/components/ebusd/.translations/lb.json rename to homeassistant/components/ebusd/translations/lb.json diff --git a/homeassistant/components/ebusd/.translations/nl.json b/homeassistant/components/ebusd/translations/nl.json similarity index 100% rename from homeassistant/components/ebusd/.translations/nl.json rename to homeassistant/components/ebusd/translations/nl.json diff --git a/homeassistant/components/ebusd/.translations/no.json b/homeassistant/components/ebusd/translations/no.json similarity index 100% rename from homeassistant/components/ebusd/.translations/no.json rename to homeassistant/components/ebusd/translations/no.json diff --git a/homeassistant/components/ebusd/.translations/pl.json b/homeassistant/components/ebusd/translations/pl.json similarity index 100% rename from homeassistant/components/ebusd/.translations/pl.json rename to homeassistant/components/ebusd/translations/pl.json diff --git a/homeassistant/components/ebusd/.translations/pt-BR.json b/homeassistant/components/ebusd/translations/pt-BR.json similarity index 100% rename from homeassistant/components/ebusd/.translations/pt-BR.json rename to homeassistant/components/ebusd/translations/pt-BR.json diff --git a/homeassistant/components/ebusd/.translations/pt.json b/homeassistant/components/ebusd/translations/pt.json similarity index 100% rename from homeassistant/components/ebusd/.translations/pt.json rename to homeassistant/components/ebusd/translations/pt.json diff --git a/homeassistant/components/ebusd/.translations/ru.json b/homeassistant/components/ebusd/translations/ru.json similarity index 100% rename from homeassistant/components/ebusd/.translations/ru.json rename to homeassistant/components/ebusd/translations/ru.json diff --git a/homeassistant/components/ebusd/.translations/sl.json b/homeassistant/components/ebusd/translations/sl.json similarity index 100% rename from homeassistant/components/ebusd/.translations/sl.json rename to homeassistant/components/ebusd/translations/sl.json diff --git a/homeassistant/components/ebusd/.translations/sv.json b/homeassistant/components/ebusd/translations/sv.json similarity index 100% rename from homeassistant/components/ebusd/.translations/sv.json rename to homeassistant/components/ebusd/translations/sv.json diff --git a/homeassistant/components/ebusd/.translations/th.json b/homeassistant/components/ebusd/translations/th.json similarity index 100% rename from homeassistant/components/ebusd/.translations/th.json rename to homeassistant/components/ebusd/translations/th.json diff --git a/homeassistant/components/ebusd/.translations/uk.json b/homeassistant/components/ebusd/translations/uk.json similarity index 100% rename from homeassistant/components/ebusd/.translations/uk.json rename to homeassistant/components/ebusd/translations/uk.json diff --git a/homeassistant/components/ebusd/.translations/zh-Hans.json b/homeassistant/components/ebusd/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/ebusd/.translations/zh-Hans.json rename to homeassistant/components/ebusd/translations/zh-Hans.json diff --git a/homeassistant/components/ebusd/.translations/zh-Hant.json b/homeassistant/components/ebusd/translations/zh-Hant.json similarity index 100% rename from homeassistant/components/ebusd/.translations/zh-Hant.json rename to homeassistant/components/ebusd/translations/zh-Hant.json diff --git a/homeassistant/components/ecoal_boiler/manifest.json b/homeassistant/components/ecoal_boiler/manifest.json index 11820f781d7..c51f737cfd8 100644 --- a/homeassistant/components/ecoal_boiler/manifest.json +++ b/homeassistant/components/ecoal_boiler/manifest.json @@ -3,6 +3,5 @@ "name": "eSterownik eCoal.pl Boiler", "documentation": "https://www.home-assistant.io/integrations/ecoal_boiler", "requirements": ["ecoaliface==0.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ecobee/.translations/bg.json b/homeassistant/components/ecobee/.translations/bg.json deleted file mode 100644 index bd8503fabd8..00000000000 --- a/homeassistant/components/ecobee/.translations/bg.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "\u0422\u0430\u0437\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u043e \u043a\u043e\u043f\u0438\u0435 \u043d\u0430 ecobee." - }, - "error": { - "pin_request_failed": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u041f\u0418\u041d \u043e\u0442 ecobee; \u043c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u043b\u0438 API \u043a\u043b\u044e\u0447\u044a\u0442 \u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d.", - "token_request_failed": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u043e\u0432\u0435 \u043e\u0442 ecobee; \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e." - }, - "step": { - "authorize": { - "description": "\u041c\u043e\u043b\u044f, \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u0442\u043e\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 https://www.ecobee.com/consumerportal/index.html \u0441 \u043f\u0438\u043d \u043a\u043e\u0434: \n\n {pin} \n \n \u0421\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435.", - "title": "\u041e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 ecobee.com" - }, - "user": { - "data": { - "api_key": "API \u043a\u043b\u044e\u0447" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 API \u043a\u043b\u044e\u0447\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043e\u0442 ecobee.com.", - "title": "ecobee API \u043a\u043b\u044e\u0447" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/ca.json b/homeassistant/components/ecobee/.translations/ca.json deleted file mode 100644 index 2c4d16b5787..00000000000 --- a/homeassistant/components/ecobee/.translations/ca.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Aquesta integraci\u00f3 nom\u00e9s admet una sola inst\u00e0ncia ecobee." - }, - "error": { - "pin_request_failed": "Error al sol\u00b7licitar els PIN d'ecobee; verifica que la clau API \u00e9s correcta.", - "token_request_failed": "Error al sol\u00b7licitar els testimonis d'autenticaci\u00f3 d'ecobee; torna-ho a provar." - }, - "step": { - "authorize": { - "description": "Autoritza aquesta aplicaci\u00f3 a https://www.ecobee.com/consumerportal/index.html amb el codi pin seg\u00fcent: \n\n {pin} \n \n A continuaci\u00f3, prem Enviar.", - "title": "Autoritzaci\u00f3 de l'aplicaci\u00f3 a ecobee.com" - }, - "user": { - "data": { - "api_key": "Clau API" - }, - "description": "Introdueix la clau API obteinguda a trav\u00e9s del lloc web ecobee.com.", - "title": "Clau API d'ecobee" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/da.json b/homeassistant/components/ecobee/.translations/da.json deleted file mode 100644 index 614811db45a..00000000000 --- a/homeassistant/components/ecobee/.translations/da.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Denne integration underst\u00f8tter i \u00f8jeblikket kun en ecobee-instans." - }, - "error": { - "pin_request_failed": "Fejl ved anmodning om pinkode fra ecobee. Kontroller at API-n\u00f8glen er korrekt.", - "token_request_failed": "Fejl ved anmodning om tokens fra ecobee. Pr\u00f8v igen." - }, - "step": { - "authorize": { - "description": "Godkend denne app p\u00e5 https://www.ecobee.com/consumerportal/index.html med PIN-kode:\n\n{pin}\n\nTryk derefter p\u00e5 Indsend.", - "title": "Godkend app p\u00e5 ecobee.com" - }, - "user": { - "data": { - "api_key": "API-n\u00f8gle" - }, - "description": "Indtast API-n\u00f8glen, du har f\u00e5et fra ecobee.com.", - "title": "ecobee API-n\u00f8gle" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/de.json b/homeassistant/components/ecobee/.translations/de.json deleted file mode 100644 index 818783813fe..00000000000 --- a/homeassistant/components/ecobee/.translations/de.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Diese Integration unterst\u00fctzt derzeit nur eine Ecobee-Instanz." - }, - "error": { - "pin_request_failed": "Fehler beim Anfordern der PIN von ecobee; Bitte \u00fcberpr\u00fcfe, ob der API-Schl\u00fcssel korrekt ist.", - "token_request_failed": "Fehler beim Anfordern eines Token von ecobee; Bitte versuche es erneut." - }, - "step": { - "authorize": { - "description": "Bitte autorisiere diese App unter https://www.ecobee.com/consumerportal/index.html mit Pincode:\n\n{pin}\n\nDr\u00fccke dann auf Senden.", - "title": "App auf ecobee.com autorisieren" - }, - "user": { - "data": { - "api_key": "API Key" - }, - "description": "Bitte gib den von ecobee.com erhaltenen API-Schl\u00fcssel ein.", - "title": "ecobee API-Schl\u00fcssel" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/en.json b/homeassistant/components/ecobee/.translations/en.json deleted file mode 100644 index 39072f70d82..00000000000 --- a/homeassistant/components/ecobee/.translations/en.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "This integration currently supports only one ecobee instance." - }, - "error": { - "pin_request_failed": "Error requesting PIN from ecobee; please verify API key is correct.", - "token_request_failed": "Error requesting tokens from ecobee; please try again." - }, - "step": { - "authorize": { - "description": "Please authorize this app at https://www.ecobee.com/consumerportal/index.html with pin code:\n\n{pin}\n\nThen, press Submit.", - "title": "Authorize app on ecobee.com" - }, - "user": { - "data": { - "api_key": "API Key" - }, - "description": "Please enter the API key obtained from ecobee.com.", - "title": "ecobee API key" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/es.json b/homeassistant/components/ecobee/.translations/es.json deleted file mode 100644 index 5544d2e7f7b..00000000000 --- a/homeassistant/components/ecobee/.translations/es.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Esta integraci\u00f3n actualmente solo admite una instancia de ecobee." - }, - "error": { - "pin_request_failed": "Error al solicitar el PIN de ecobee; verifique que la clave API sea correcta.", - "token_request_failed": "Error al solicitar tokens de ecobee; Int\u00e9ntalo de nuevo." - }, - "step": { - "authorize": { - "description": "Por favor, autorizar esta aplicaci\u00f3n en https://www.ecobee.com/consumerportal/index.html con c\u00f3digo pin:\n\n{pin}\n\nA continuaci\u00f3n, pulse Enviar.", - "title": "Autorizar aplicaci\u00f3n en ecobee.com" - }, - "user": { - "data": { - "api_key": "Clave API" - }, - "description": "Introduzca la clave de API obtenida de ecobee.com.", - "title": "Clave API de ecobee" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/fr.json b/homeassistant/components/ecobee/.translations/fr.json deleted file mode 100644 index 7f308fdf3a3..00000000000 --- a/homeassistant/components/ecobee/.translations/fr.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Cette int\u00e9gration ne prend actuellement en charge qu'une seule instance ecobee." - }, - "error": { - "pin_request_failed": "Erreur lors de la demande du code PIN \u00e0 ecobee; veuillez v\u00e9rifier que la cl\u00e9 API est correcte.", - "token_request_failed": "Erreur lors de la demande de jetons \u00e0 ecobee; Veuillez r\u00e9essayer." - }, - "step": { - "authorize": { - "description": "Veuillez autoriser cette application \u00e0 https://www.ecobee.com/consumerportal/index.html avec un code PIN :\n\n{pin}\n\nEnsuite, appuyez sur Soumettre.", - "title": "Autoriser l'application sur ecobee.com" - }, - "user": { - "data": { - "api_key": "Cl\u00e9 API" - }, - "description": "Veuillez entrer la cl\u00e9 API obtenue aupr\u00e8s d'ecobee.com.", - "title": "Cl\u00e9 API ecobee" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/hu.json b/homeassistant/components/ecobee/.translations/hu.json deleted file mode 100644 index 0950d52bd0e..00000000000 --- a/homeassistant/components/ecobee/.translations/hu.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Ez az integr\u00e1ci\u00f3 jelenleg csak egy ecobee p\u00e9ld\u00e1nyt t\u00e1mogat." - }, - "error": { - "pin_request_failed": "Hiba t\u00f6rt\u00e9nt a PIN-k\u00f3d ecobee-t\u0151l t\u00f6rt\u00e9n\u0151 k\u00e9r\u00e9sekor; ellen\u0151rizze, hogy az API-kulcs helyes-e.", - "token_request_failed": "Hiba t\u00f6rt\u00e9nt a tokenek ecobee-t\u0151l t\u00f6rt\u00e9n\u0151 ig\u00e9nyl\u00e9se k\u00f6zben; pr\u00f3b\u00e1lkozzon \u00fajra." - }, - "step": { - "authorize": { - "description": "K\u00e9rj\u00fck, enged\u00e9lyezze ezt az alkalmaz\u00e1st a https://www.ecobee.com/consumerportal/index.html c\u00edmen a k\u00f6vetkez\u0151 PIN-k\u00f3ddal: \n\n {pin} \n \n Ezut\u00e1n nyomja meg a K\u00fcld\u00e9s gombot.", - "title": "Alkalmaz\u00e1s enged\u00e9lyez\u00e9se ecobee.com-on" - }, - "user": { - "data": { - "api_key": "API kulcs" - }, - "description": "Adja meg az ecobee.com webhelyr\u0151l beszerzett API-kulcsot.", - "title": "ecobee API kulcs" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/it.json b/homeassistant/components/ecobee/.translations/it.json deleted file mode 100644 index 2ecb587f19e..00000000000 --- a/homeassistant/components/ecobee/.translations/it.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Questa integrazione supporta attualmente una sola istanza ecobee." - }, - "error": { - "pin_request_failed": "Errore durante la richiesta del PIN da ecobee; verificare che la chiave API sia corretta.", - "token_request_failed": "Errore durante la richiesta di token da ecobee; per favore riprova." - }, - "step": { - "authorize": { - "description": "Autorizza questa app su https://www.ecobee.com/consumerportal/index.html con il codice PIN: \n\n {pin} \n \n Quindi, premi Invia.", - "title": "Autorizza l'app su ecobee.com" - }, - "user": { - "data": { - "api_key": "API Key" - }, - "description": "Inserisci la chiave API ottenuta da ecobee.com.", - "title": "chiave API ecobee" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/ko.json b/homeassistant/components/ecobee/.translations/ko.json deleted file mode 100644 index 2fea66a9d38..00000000000 --- a/homeassistant/components/ecobee/.translations/ko.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "\uc774 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \ud604\uc7ac \ud558\ub098\uc758 ecobee \uc778\uc2a4\ud134\uc2a4\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4." - }, - "error": { - "pin_request_failed": "ecobee \ub85c\ubd80\ud130 PIN \uc694\uccad\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4; API \ud0a4\uac00 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", - "token_request_failed": "ecobee \ub85c\ubd80\ud130 \ud1a0\ud070 \uc694\uccad\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4; \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "step": { - "authorize": { - "description": "https://www.ecobee.com/consumerportal/index.html \uc5d0\uc11c PIN \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc774 \uc571\uc744 \uc2b9\uc778\ud574\uc8fc\uc138\uc694:\n\n {pin} \n \n \uadf8\ub7f0 \ub2e4\uc74c Submit \uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.", - "title": "ecobee.com \uc5d0\uc11c \uc571 \uc2b9\uc778\ud558\uae30" - }, - "user": { - "data": { - "api_key": "API \ud0a4" - }, - "description": "ecobee.com \uc5d0\uc11c \uc5bb\uc740 API \ud0a4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "ecobee API \ud0a4" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/lb.json b/homeassistant/components/ecobee/.translations/lb.json deleted file mode 100644 index ee1fd5246c0..00000000000 --- a/homeassistant/components/ecobee/.translations/lb.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "D\u00ebs Integratioun \u00ebnnerst\u00ebtzt n\u00ebmmen eng ecobee Instanz." - }, - "error": { - "pin_request_failed": "Feeler beim ufroe vum PIN vun ecobee; iwwerpr\u00e9ift op den API Schl\u00ebssel korrekt ass.", - "token_request_failed": "Feeler beim ufroe vum Jeton vun ecobee; prob\u00e9iert nach emol." - }, - "step": { - "authorize": { - "description": "Autoris\u00e9iert d\u00ebs App op https://www.ecobee.com/consumerportal/index.html mam Pin Code:\n\n{pin}\n\nKlickt dann op ofsch\u00e9cken.", - "title": "App autoris\u00e9ieren op ecobee.com" - }, - "user": { - "data": { - "api_key": "API Schl\u00ebssel" - }, - "description": "Gitt den API Schl\u00ebssel vun ecobee.com an:", - "title": "ecobee API Schl\u00ebssel" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/nl.json b/homeassistant/components/ecobee/.translations/nl.json deleted file mode 100644 index 56bb3ace26f..00000000000 --- a/homeassistant/components/ecobee/.translations/nl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Deze integratie ondersteunt momenteel slechts \u00e9\u00e9n ecobee-instantie." - }, - "error": { - "pin_request_failed": "Fout bij het aanvragen van pincode bij ecobee; Controleer of de API-sleutel correct is.", - "token_request_failed": "Fout bij het aanvragen van tokens bij ecobee; probeer het opnieuw." - }, - "step": { - "authorize": { - "description": "Autoriseer deze app op https://www.ecobee.com/consumerportal/index.html met pincode: \n\n {pin} \n \nDruk vervolgens op Submit.", - "title": "Autoriseer app op ecobee.com" - }, - "user": { - "data": { - "api_key": "API-sleutel" - }, - "description": "Voer de API-sleutel in die u van ecobee.com hebt gekregen.", - "title": "ecobee API-sleutel" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/nn.json b/homeassistant/components/ecobee/.translations/nn.json deleted file mode 100644 index 301239cf31a..00000000000 --- a/homeassistant/components/ecobee/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/no.json b/homeassistant/components/ecobee/.translations/no.json deleted file mode 100644 index 6658c3ac2e9..00000000000 --- a/homeassistant/components/ecobee/.translations/no.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Denne integrasjonen st\u00f8tter forel\u00f8pig bare \u00e9n ecobee-forekomst." - }, - "error": { - "pin_request_failed": "Feil under foresp\u00f8rsel om PIN-kode fra ecobee. Kontroller at API-n\u00f8kkelen er riktig.", - "token_request_failed": "Feil ved foresp\u00f8rsel om tokener fra ecobee: Pr\u00f8v p\u00e5 nytt." - }, - "step": { - "authorize": { - "description": "Vennligst autoriser denne appen p\u00e5 https://www.ecobee.com/consumerportal/index.html med pin-kode:\n\n{pin}\n\nTrykk deretter p\u00e5 Send.", - "title": "Autoriser app p\u00e5 ecobee.com" - }, - "user": { - "data": { - "api_key": "API-n\u00f8kkel" - }, - "description": "Vennligst skriv inn API-n\u00f8kkel som er innhentet fra ecobee.com.", - "title": "ecobee API-n\u00f8kkel" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/pl.json b/homeassistant/components/ecobee/.translations/pl.json deleted file mode 100644 index bd4e7aa1ddc..00000000000 --- a/homeassistant/components/ecobee/.translations/pl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Komponent obs\u0142uguje tylko jedn\u0105 instancj\u0119 ecobee" - }, - "error": { - "pin_request_failed": "B\u0142\u0105d podczas \u017c\u0105dania kodu PIN od ecobee; sprawd\u017a, czy klucz API jest poprawny.", - "token_request_failed": "B\u0142\u0105d podczas \u017c\u0105dania token\u00f3w od ecobee. Spr\u00f3buj ponownie." - }, - "step": { - "authorize": { - "description": "Autoryzuj t\u0119 aplikacj\u0119 na https://www.ecobee.com/consumerportal/index.html za pomoc\u0105 kodu PIN: \n\n {pin} \n \n Nast\u0119pnie naci\u015bnij przycisk Prze\u015blij.", - "title": "Autoryzuj aplikacj\u0119 na ecobee.com" - }, - "user": { - "data": { - "api_key": "Klucz API" - }, - "description": "Prosz\u0119 wprowadzi\u0107 klucz API uzyskany na ecobee.com.", - "title": "Klucz API" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/pt-BR.json b/homeassistant/components/ecobee/.translations/pt-BR.json deleted file mode 100644 index 65394faba17..00000000000 --- a/homeassistant/components/ecobee/.translations/pt-BR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Essa integra\u00e7\u00e3o atualmente suporta apenas uma inst\u00e2ncia ecobee." - }, - "error": { - "token_request_failed": "Erro ao solicitar tokens da ecobee; Por favor, tente novamente." - }, - "step": { - "authorize": { - "description": "Por favor, autorize este aplicativo em https://www.ecobee.com/consumerportal/index.html com c\u00f3digo PIN:\n\n{pin}\n\nEm seguida, pressione Submit.", - "title": "Autorizar aplicativo em ecobee.com" - }, - "user": { - "data": { - "api_key": "Chave API" - }, - "description": "Por favor, insira a chave de API obtida em ecobee.com.", - "title": "chave da API ecobee" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/ru.json b/homeassistant/components/ecobee/.translations/ru.json deleted file mode 100644 index 660e0064bb6..00000000000 --- a/homeassistant/components/ecobee/.translations/ru.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "\u042d\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 ecobee." - }, - "error": { - "pin_request_failed": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 PIN-\u043a\u043e\u0434\u0430 \u0443 ecobee; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u044e\u0447\u0430 API.", - "token_request_failed": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0443 ecobee; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437." - }, - "step": { - "authorize": { - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 https://www.ecobee.com/consumerportal/index.html \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PIN-\u043a\u043e\u0434\u0430: \n\n {pin} \n \n \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c.", - "title": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 ecobee.com" - }, - "user": { - "data": { - "api_key": "\u041a\u043b\u044e\u0447 API" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 API, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 ecobee.com.", - "title": "ecobee" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/sl.json b/homeassistant/components/ecobee/.translations/sl.json deleted file mode 100644 index d70be59afb5..00000000000 --- a/homeassistant/components/ecobee/.translations/sl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Ta integracija trenutno podpira samo en primerek ecobee." - }, - "error": { - "pin_request_failed": "Napaka pri zahtevi PIN-a od ecobee; preverite, ali je klju\u010d API pravilen.", - "token_request_failed": "Napaka pri zahtevanju \u017eetonov od ecobeeja; prosim poskusite ponovno." - }, - "step": { - "authorize": { - "description": "Prosimo, pooblastite to aplikacijo na https://www.ecobee.com/consumerportal/index.html s kodo PIN:\n\n{pin}\n\nNato pritisnite Po\u0161lji.", - "title": "Pooblasti aplikacijo na ecobee.com" - }, - "user": { - "data": { - "api_key": "API Klju\u010d" - }, - "description": "Prosimo vnesite API klju\u010d, pridobljen iz ecobee.com.", - "title": "ecobee API klju\u010d" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/sv.json b/homeassistant/components/ecobee/.translations/sv.json deleted file mode 100644 index da62172dc10..00000000000 --- a/homeassistant/components/ecobee/.translations/sv.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "Denna integration st\u00f6der f\u00f6r n\u00e4rvarande endast en ecobee-instans." - }, - "error": { - "pin_request_failed": "Fel vid beg\u00e4ran av PIN-kod fr\u00e5n ecobee. kontrollera API-nyckeln \u00e4r korrekt.", - "token_request_failed": "Fel vid beg\u00e4ran av tokens fr\u00e5n ecobee; v\u00e4nligen f\u00f6rs\u00f6k igen." - }, - "step": { - "authorize": { - "description": "V\u00e4nligen auktorisera denna app p\u00e5 https://www.ecobee.com/consumerportal/index.html med pin-kod:\n\n{pin}\n\nTryck sedan p\u00e5 Skicka.", - "title": "Auktorisera app p\u00e5 ecobee.com" - }, - "user": { - "data": { - "api_key": "API-nyckel" - }, - "description": "V\u00e4nligen ange API-nyckeln som erh\u00e5llits fr\u00e5n ecobee.com.", - "title": "ecobee API-nyckel" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/zh-Hant.json b/homeassistant/components/ecobee/.translations/zh-Hant.json deleted file mode 100644 index e1eb6ebd357..00000000000 --- a/homeassistant/components/ecobee/.translations/zh-Hant.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_only": "\u6b64\u6574\u5408\u76ee\u524d\u50c5\u652f\u63f4\u4e00\u7d44 ecobee \u7269\u4ef6" - }, - "error": { - "pin_request_failed": "ecobee \u6240\u9700\u4ee3\u78bc\u932f\u8aa4\uff0c\u8acb\u78ba\u8a8d\u5bc6\u9470\u6b63\u78ba\u6027\u3002", - "token_request_failed": "ecobee \u6240\u9700\u5bc6\u9470\u932f\u8aa4\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" - }, - "step": { - "authorize": { - "description": "\u8acb\u65bc https://www.ecobee.com/consumerportal/index.html \u8f38\u5165\u4e0b\u65b9\u4ee3\u78bc\uff0c\u8a8d\u8b49\u6b64 App\uff1a\n\n{pin}\n\n\u7136\u5f8c\u6309\u4e0b\u300cSubmit\u300d\u3002", - "title": "\u65bc ecobee.com \u4e0a\u8a8d\u8b49 App" - }, - "user": { - "data": { - "api_key": "API \u5bc6\u9470" - }, - "description": "\u8acb\u8f38\u5165\u7531 ecobee.com \u6240\u7372\u5f97\u7684 API \u5bc6\u9470\u3002", - "title": "ecobee API \u5bc6\u9470" - } - }, - "title": "ecobee" - } -} \ No newline at end of file diff --git a/homeassistant/components/ecobee/binary_sensor.py b/homeassistant/components/ecobee/binary_sensor.py index a4062905eaa..2f422007ff4 100644 --- a/homeassistant/components/ecobee/binary_sensor.py +++ b/homeassistant/components/ecobee/binary_sensor.py @@ -10,7 +10,7 @@ from .const import _LOGGER, DOMAIN, ECOBEE_MODEL_TO_NAME, MANUFACTURER async def async_setup_entry(hass, config_entry, async_add_entities): """Set up ecobee binary (occupancy) sensors.""" data = hass.data[DOMAIN] - dev = list() + dev = [] for index in range(len(data.ecobee.thermostats)): for sensor in data.ecobee.get_remote_sensors(index): for item in sensor["capability"]: @@ -28,7 +28,7 @@ class EcobeeBinarySensor(BinarySensorDevice): def __init__(self, data, sensor_name, sensor_index): """Initialize the Ecobee sensor.""" self.data = data - self._name = sensor_name + " Occupancy" + self._name = f"{sensor_name} Occupancy" self.sensor_name = sensor_name self.index = sensor_index self._state = None diff --git a/homeassistant/components/ecobee/climate.py b/homeassistant/components/ecobee/climate.py index 6746192b840..89f464452f8 100644 --- a/homeassistant/components/ecobee/climate.py +++ b/homeassistant/components/ecobee/climate.py @@ -15,9 +15,9 @@ from homeassistant.components.climate.const import ( CURRENT_HVAC_IDLE, FAN_AUTO, FAN_ON, - HVAC_MODE_AUTO, HVAC_MODE_COOL, HVAC_MODE_HEAT, + HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF, PRESET_AWAY, PRESET_NONE, @@ -64,7 +64,7 @@ ECOBEE_HVAC_TO_HASS = collections.OrderedDict( [ ("heat", HVAC_MODE_HEAT), ("cool", HVAC_MODE_COOL), - ("auto", HVAC_MODE_AUTO), + ("auto", HVAC_MODE_HEAT_COOL), ("off", HVAC_MODE_OFF), ("auxHeatOnly", HVAC_MODE_HEAT), ] @@ -259,7 +259,7 @@ class Thermostat(ClimateDevice): self.thermostat = self.data.ecobee.get_thermostat(self.thermostat_index) self._name = self.thermostat["name"] self.vacation = None - self._last_active_hvac_mode = HVAC_MODE_AUTO + self._last_active_hvac_mode = HVAC_MODE_HEAT_COOL self._operation_list = [] if ( @@ -270,7 +270,7 @@ class Thermostat(ClimateDevice): if self.thermostat["settings"]["coolStages"]: self._operation_list.append(HVAC_MODE_COOL) if len(self._operation_list) == 2: - self._operation_list.insert(0, HVAC_MODE_AUTO) + self._operation_list.insert(0, HVAC_MODE_HEAT_COOL) self._operation_list.append(HVAC_MODE_OFF) self._preset_modes = { @@ -347,21 +347,21 @@ class Thermostat(ClimateDevice): @property def target_temperature_low(self): """Return the lower bound temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_AUTO: + if self.hvac_mode == HVAC_MODE_HEAT_COOL: return self.thermostat["runtime"]["desiredHeat"] / 10.0 return None @property def target_temperature_high(self): """Return the upper bound temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_AUTO: + if self.hvac_mode == HVAC_MODE_HEAT_COOL: return self.thermostat["runtime"]["desiredCool"] / 10.0 return None @property def target_temperature(self): """Return the temperature we try to reach.""" - if self.hvac_mode == HVAC_MODE_AUTO: + if self.hvac_mode == HVAC_MODE_HEAT_COOL: return None if self.hvac_mode == HVAC_MODE_HEAT: return self.thermostat["runtime"]["desiredHeat"] / 10.0 @@ -556,7 +556,7 @@ class Thermostat(ClimateDevice): def set_fan_mode(self, fan_mode): """Set the fan mode. Valid values are "on" or "auto".""" - if fan_mode.lower() != STATE_ON and fan_mode.lower() != HVAC_MODE_AUTO: + if fan_mode.lower() not in (FAN_ON, FAN_AUTO): error = "Invalid fan_mode value: Valid values are 'on' or 'auto'" _LOGGER.error(error) return @@ -599,7 +599,7 @@ class Thermostat(ClimateDevice): high_temp = kwargs.get(ATTR_TARGET_TEMP_HIGH) temp = kwargs.get(ATTR_TEMPERATURE) - if self.hvac_mode == HVAC_MODE_AUTO and ( + if self.hvac_mode == HVAC_MODE_HEAT_COOL and ( low_temp is not None or high_temp is not None ): self.set_auto_temp_hold(low_temp, high_temp) diff --git a/homeassistant/components/ecobee/manifest.json b/homeassistant/components/ecobee/manifest.json index d6bc3b1eaa1..f25bdca2fe6 100644 --- a/homeassistant/components/ecobee/manifest.json +++ b/homeassistant/components/ecobee/manifest.json @@ -3,7 +3,6 @@ "name": "ecobee", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/ecobee", - "dependencies": [], "requirements": ["python-ecobee-api==0.2.5"], "codeowners": ["@marthoc"] } diff --git a/homeassistant/components/ecobee/sensor.py b/homeassistant/components/ecobee/sensor.py index e510cc976a6..4fd1a061cff 100644 --- a/homeassistant/components/ecobee/sensor.py +++ b/homeassistant/components/ecobee/sensor.py @@ -20,7 +20,7 @@ SENSOR_TYPES = { async def async_setup_entry(hass, config_entry, async_add_entities): """Set up ecobee (temperature and humidity) sensors.""" data = hass.data[DOMAIN] - dev = list() + dev = [] for index in range(len(data.ecobee.thermostats)): for sensor in data.ecobee.get_remote_sensors(index): for item in sensor["capability"]: diff --git a/homeassistant/components/ecobee/services.yaml b/homeassistant/components/ecobee/services.yaml index 2155d3cf7d2..88137bd9530 100644 --- a/homeassistant/components/ecobee/services.yaml +++ b/homeassistant/components/ecobee/services.yaml @@ -55,7 +55,7 @@ resume_program: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" resume_all: description: Resume all events and return to the scheduled program. This default to false which removes only the top event. example: true @@ -65,7 +65,7 @@ set_fan_min_on_time: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" fan_min_on_time: description: New value of fan min on time. example: 5 diff --git a/homeassistant/components/ecobee/strings.json b/homeassistant/components/ecobee/strings.json index 9e7e9fed396..6e3a5687db1 100644 --- a/homeassistant/components/ecobee/strings.json +++ b/homeassistant/components/ecobee/strings.json @@ -1,23 +1,22 @@ { - "config": { - "title": "ecobee", - "step": { - "user": { - "title": "ecobee API key", - "description": "Please enter the API key obtained from ecobee.com.", - "data": {"api_key": "API Key"} - }, - "authorize": { - "title": "Authorize app on ecobee.com", - "description": "Please authorize this app at https://www.ecobee.com/consumerportal/index.html with pin code:\n\n{pin}\n\nThen, press Submit." - } - }, - "error": { - "pin_request_failed": "Error requesting PIN from ecobee; please verify API key is correct.", - "token_request_failed": "Error requesting tokens from ecobee; please try again." - }, - "abort": { - "one_instance_only": "This integration currently supports only one ecobee instance." - } + "config": { + "step": { + "user": { + "title": "ecobee API key", + "description": "Please enter the API key obtained from ecobee.com.", + "data": { "api_key": "API Key" } + }, + "authorize": { + "title": "Authorize app on ecobee.com", + "description": "Please authorize this app at https://www.ecobee.com/consumerportal/index.html with pin code:\n\n{pin}\n\nThen, press Submit." + } + }, + "error": { + "pin_request_failed": "Error requesting PIN from ecobee; please verify API key is correct.", + "token_request_failed": "Error requesting tokens from ecobee; please try again." + }, + "abort": { + "one_instance_only": "This integration currently supports only one ecobee instance." } + } } diff --git a/homeassistant/components/ecobee/translations/bg.json b/homeassistant/components/ecobee/translations/bg.json new file mode 100644 index 00000000000..773bc6bd11f --- /dev/null +++ b/homeassistant/components/ecobee/translations/bg.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "\u0422\u0430\u0437\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u043e \u043a\u043e\u043f\u0438\u0435 \u043d\u0430 ecobee." + }, + "error": { + "pin_request_failed": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u041f\u0418\u041d \u043e\u0442 ecobee; \u043c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u043b\u0438 API \u043a\u043b\u044e\u0447\u044a\u0442 \u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d.", + "token_request_failed": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0441\u043a\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u043e\u0432\u0435 \u043e\u0442 ecobee; \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e." + }, + "step": { + "authorize": { + "description": "\u041c\u043e\u043b\u044f, \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u0442\u043e\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 https://www.ecobee.com/consumerportal/index.html \u0441 \u043f\u0438\u043d \u043a\u043e\u0434: \n\n {pin} \n \n \u0421\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435.", + "title": "\u041e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 ecobee.com" + }, + "user": { + "data": { + "api_key": "API \u043a\u043b\u044e\u0447" + }, + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 API \u043a\u043b\u044e\u0447\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043e\u0442 ecobee.com.", + "title": "ecobee API \u043a\u043b\u044e\u0447" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/ca.json b/homeassistant/components/ecobee/translations/ca.json new file mode 100644 index 00000000000..916c700a183 --- /dev/null +++ b/homeassistant/components/ecobee/translations/ca.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Aquesta integraci\u00f3 nom\u00e9s admet una sola inst\u00e0ncia ecobee." + }, + "error": { + "pin_request_failed": "Error al sol\u00b7licitar els PIN d'ecobee; verifica que la clau API \u00e9s correcta.", + "token_request_failed": "Error al sol\u00b7licitar els testimonis d'autenticaci\u00f3 d'ecobee; torna-ho a provar." + }, + "step": { + "authorize": { + "description": "Autoritza aquesta aplicaci\u00f3 a https://www.ecobee.com/consumerportal/index.html amb el codi pin seg\u00fcent: \n\n {pin} \n \n A continuaci\u00f3, prem Enviar.", + "title": "Autoritzaci\u00f3 de l'aplicaci\u00f3 a ecobee.com" + }, + "user": { + "data": { + "api_key": "Clau API" + }, + "description": "Introdueix la clau API obteinguda a trav\u00e9s del lloc web ecobee.com.", + "title": "Clau API d'ecobee" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/da.json b/homeassistant/components/ecobee/translations/da.json new file mode 100644 index 00000000000..27af2cc0987 --- /dev/null +++ b/homeassistant/components/ecobee/translations/da.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Denne integration underst\u00f8tter i \u00f8jeblikket kun en ecobee-instans." + }, + "error": { + "pin_request_failed": "Fejl ved anmodning om pinkode fra ecobee. Kontroller at API-n\u00f8glen er korrekt.", + "token_request_failed": "Fejl ved anmodning om tokens fra ecobee. Pr\u00f8v igen." + }, + "step": { + "authorize": { + "description": "Godkend denne app p\u00e5 https://www.ecobee.com/consumerportal/index.html med PIN-kode:\n\n{pin}\n\nTryk derefter p\u00e5 Indsend.", + "title": "Godkend app p\u00e5 ecobee.com" + }, + "user": { + "data": { + "api_key": "API-n\u00f8gle" + }, + "description": "Indtast API-n\u00f8glen, du har f\u00e5et fra ecobee.com.", + "title": "ecobee API-n\u00f8gle" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/de.json b/homeassistant/components/ecobee/translations/de.json new file mode 100644 index 00000000000..d0be33847c2 --- /dev/null +++ b/homeassistant/components/ecobee/translations/de.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Diese Integration unterst\u00fctzt derzeit nur eine Ecobee-Instanz." + }, + "error": { + "pin_request_failed": "Fehler beim Anfordern der PIN von ecobee; Bitte \u00fcberpr\u00fcfe, ob der API-Schl\u00fcssel korrekt ist.", + "token_request_failed": "Fehler beim Anfordern eines Token von ecobee; Bitte versuche es erneut." + }, + "step": { + "authorize": { + "description": "Bitte autorisiere diese App unter https://www.ecobee.com/consumerportal/index.html mit Pincode:\n\n{pin}\n\nDr\u00fccke dann auf Senden.", + "title": "App auf ecobee.com autorisieren" + }, + "user": { + "data": { + "api_key": "API Key" + }, + "description": "Bitte gib den von ecobee.com erhaltenen API-Schl\u00fcssel ein.", + "title": "ecobee API-Schl\u00fcssel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/en.json b/homeassistant/components/ecobee/translations/en.json new file mode 100644 index 00000000000..a105296f813 --- /dev/null +++ b/homeassistant/components/ecobee/translations/en.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "This integration currently supports only one ecobee instance." + }, + "error": { + "pin_request_failed": "Error requesting PIN from ecobee; please verify API key is correct.", + "token_request_failed": "Error requesting tokens from ecobee; please try again." + }, + "step": { + "authorize": { + "description": "Please authorize this app at https://www.ecobee.com/consumerportal/index.html with pin code:\n\n{pin}\n\nThen, press Submit.", + "title": "Authorize app on ecobee.com" + }, + "user": { + "data": { + "api_key": "API Key" + }, + "description": "Please enter the API key obtained from ecobee.com.", + "title": "ecobee API key" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/es-419.json b/homeassistant/components/ecobee/translations/es-419.json similarity index 100% rename from homeassistant/components/ecobee/.translations/es-419.json rename to homeassistant/components/ecobee/translations/es-419.json diff --git a/homeassistant/components/ecobee/translations/es.json b/homeassistant/components/ecobee/translations/es.json new file mode 100644 index 00000000000..26260e38ca7 --- /dev/null +++ b/homeassistant/components/ecobee/translations/es.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Esta integraci\u00f3n actualmente solo admite una instancia de ecobee." + }, + "error": { + "pin_request_failed": "Error al solicitar el PIN de ecobee; verifique que la clave API sea correcta.", + "token_request_failed": "Error al solicitar tokens de ecobee; Int\u00e9ntalo de nuevo." + }, + "step": { + "authorize": { + "description": "Por favor, autorizar esta aplicaci\u00f3n en https://www.ecobee.com/consumerportal/index.html con c\u00f3digo pin:\n\n{pin}\n\nA continuaci\u00f3n, pulse Enviar.", + "title": "Autorizar aplicaci\u00f3n en ecobee.com" + }, + "user": { + "data": { + "api_key": "Clave API" + }, + "description": "Introduzca la clave de API obtenida de ecobee.com.", + "title": "Clave API de ecobee" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/fr.json b/homeassistant/components/ecobee/translations/fr.json new file mode 100644 index 00000000000..46e56ce8a16 --- /dev/null +++ b/homeassistant/components/ecobee/translations/fr.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Cette int\u00e9gration ne prend actuellement en charge qu'une seule instance ecobee." + }, + "error": { + "pin_request_failed": "Erreur lors de la demande du code PIN \u00e0 ecobee; veuillez v\u00e9rifier que la cl\u00e9 API est correcte.", + "token_request_failed": "Erreur lors de la demande de jetons \u00e0 ecobee; Veuillez r\u00e9essayer." + }, + "step": { + "authorize": { + "description": "Veuillez autoriser cette application \u00e0 https://www.ecobee.com/consumerportal/index.html avec un code PIN :\n\n{pin}\n\nEnsuite, appuyez sur Soumettre.", + "title": "Autoriser l'application sur ecobee.com" + }, + "user": { + "data": { + "api_key": "Cl\u00e9 API" + }, + "description": "Veuillez entrer la cl\u00e9 API obtenue aupr\u00e8s d'ecobee.com.", + "title": "Cl\u00e9 API ecobee" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/hu.json b/homeassistant/components/ecobee/translations/hu.json new file mode 100644 index 00000000000..4910991e738 --- /dev/null +++ b/homeassistant/components/ecobee/translations/hu.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Ez az integr\u00e1ci\u00f3 jelenleg csak egy ecobee p\u00e9ld\u00e1nyt t\u00e1mogat." + }, + "error": { + "pin_request_failed": "Hiba t\u00f6rt\u00e9nt a PIN-k\u00f3d ecobee-t\u0151l t\u00f6rt\u00e9n\u0151 k\u00e9r\u00e9sekor; ellen\u0151rizze, hogy az API-kulcs helyes-e.", + "token_request_failed": "Hiba t\u00f6rt\u00e9nt a tokenek ecobee-t\u0151l t\u00f6rt\u00e9n\u0151 ig\u00e9nyl\u00e9se k\u00f6zben; pr\u00f3b\u00e1lkozzon \u00fajra." + }, + "step": { + "authorize": { + "description": "K\u00e9rj\u00fck, enged\u00e9lyezze ezt az alkalmaz\u00e1st a https://www.ecobee.com/consumerportal/index.html c\u00edmen a k\u00f6vetkez\u0151 PIN-k\u00f3ddal: \n\n {pin} \n \n Ezut\u00e1n nyomja meg a K\u00fcld\u00e9s gombot.", + "title": "Alkalmaz\u00e1s enged\u00e9lyez\u00e9se ecobee.com-on" + }, + "user": { + "data": { + "api_key": "API kulcs" + }, + "description": "Adja meg az ecobee.com webhelyr\u0151l beszerzett API-kulcsot.", + "title": "ecobee API kulcs" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/it.json b/homeassistant/components/ecobee/translations/it.json new file mode 100644 index 00000000000..428ce782291 --- /dev/null +++ b/homeassistant/components/ecobee/translations/it.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Questa integrazione supporta attualmente una sola istanza ecobee." + }, + "error": { + "pin_request_failed": "Errore durante la richiesta del PIN da ecobee; verificare che la chiave API sia corretta.", + "token_request_failed": "Errore durante la richiesta di token da ecobee; per favore riprova." + }, + "step": { + "authorize": { + "description": "Autorizza questa app su https://www.ecobee.com/consumerportal/index.html con il codice PIN: \n\n {pin} \n \n Quindi, premi Invia.", + "title": "Autorizza l'app su ecobee.com" + }, + "user": { + "data": { + "api_key": "API Key" + }, + "description": "Inserisci la chiave API ottenuta da ecobee.com.", + "title": "chiave API ecobee" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/ko.json b/homeassistant/components/ecobee/translations/ko.json new file mode 100644 index 00000000000..1973c3ab8a3 --- /dev/null +++ b/homeassistant/components/ecobee/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "\uc774 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \ud604\uc7ac \ud558\ub098\uc758 ecobee \uc778\uc2a4\ud134\uc2a4\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4." + }, + "error": { + "pin_request_failed": "ecobee \ub85c\ubd80\ud130 PIN \uc694\uccad\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4; API \ud0a4\uac00 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "token_request_failed": "ecobee \ub85c\ubd80\ud130 \ud1a0\ud070 \uc694\uccad\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4; \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "step": { + "authorize": { + "description": "https://www.ecobee.com/consumerportal/index.html \uc5d0\uc11c PIN \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc774 \uc571\uc744 \uc2b9\uc778\ud574\uc8fc\uc138\uc694:\n\n {pin} \n \n \uadf8\ub7f0 \ub2e4\uc74c Submit \uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.", + "title": "ecobee.com \uc5d0\uc11c \uc571 \uc2b9\uc778\ud558\uae30" + }, + "user": { + "data": { + "api_key": "API \ud0a4" + }, + "description": "ecobee.com \uc5d0\uc11c \uc5bb\uc740 API \ud0a4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "ecobee API \ud0a4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/lb.json b/homeassistant/components/ecobee/translations/lb.json new file mode 100644 index 00000000000..adcee0b0849 --- /dev/null +++ b/homeassistant/components/ecobee/translations/lb.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "D\u00ebs Integratioun \u00ebnnerst\u00ebtzt n\u00ebmmen eng ecobee Instanz." + }, + "error": { + "pin_request_failed": "Feeler beim ufroe vum PIN vun ecobee; iwwerpr\u00e9ift op den API Schl\u00ebssel korrekt ass.", + "token_request_failed": "Feeler beim ufroe vum Jeton vun ecobee; prob\u00e9iert nach emol." + }, + "step": { + "authorize": { + "description": "Autoris\u00e9iert d\u00ebs App op https://www.ecobee.com/consumerportal/index.html mam Pin Code:\n\n{pin}\n\nKlickt dann op ofsch\u00e9cken.", + "title": "App autoris\u00e9ieren op ecobee.com" + }, + "user": { + "data": { + "api_key": "API Schl\u00ebssel" + }, + "description": "Gitt den API Schl\u00ebssel vun ecobee.com an:", + "title": "ecobee API Schl\u00ebssel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/nl.json b/homeassistant/components/ecobee/translations/nl.json new file mode 100644 index 00000000000..9bb62c258c8 --- /dev/null +++ b/homeassistant/components/ecobee/translations/nl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Deze integratie ondersteunt momenteel slechts \u00e9\u00e9n ecobee-instantie." + }, + "error": { + "pin_request_failed": "Fout bij het aanvragen van pincode bij ecobee; Controleer of de API-sleutel correct is.", + "token_request_failed": "Fout bij het aanvragen van tokens bij ecobee; probeer het opnieuw." + }, + "step": { + "authorize": { + "description": "Autoriseer deze app op https://www.ecobee.com/consumerportal/index.html met pincode: \n\n {pin} \n \nDruk vervolgens op Submit.", + "title": "Autoriseer app op ecobee.com" + }, + "user": { + "data": { + "api_key": "API-sleutel" + }, + "description": "Voer de API-sleutel in die u van ecobee.com hebt gekregen.", + "title": "ecobee API-sleutel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/nn.json b/homeassistant/components/ecobee/translations/nn.json new file mode 100644 index 00000000000..b23da4e97d1 --- /dev/null +++ b/homeassistant/components/ecobee/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "ecobee" +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/no.json b/homeassistant/components/ecobee/translations/no.json new file mode 100644 index 00000000000..560fe4cf4e1 --- /dev/null +++ b/homeassistant/components/ecobee/translations/no.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Denne integrasjonen st\u00f8tter forel\u00f8pig bare \u00e9n ecobee-forekomst." + }, + "error": { + "pin_request_failed": "Feil under foresp\u00f8rsel om PIN-kode fra ecobee. Kontroller at API-n\u00f8kkelen er riktig.", + "token_request_failed": "Feil ved foresp\u00f8rsel om tokener fra ecobee: Pr\u00f8v p\u00e5 nytt." + }, + "step": { + "authorize": { + "description": "Vennligst autoriser denne appen p\u00e5 https://www.ecobee.com/consumerportal/index.html med pin-kode:\n\n{pin}\n\nTrykk deretter p\u00e5 Send.", + "title": "Autoriser app p\u00e5 ecobee.com" + }, + "user": { + "data": { + "api_key": "API-n\u00f8kkel" + }, + "description": "Vennligst skriv inn API-n\u00f8kkel som er innhentet fra ecobee.com.", + "title": "ecobee API-n\u00f8kkel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/pl.json b/homeassistant/components/ecobee/translations/pl.json new file mode 100644 index 00000000000..c0fed1d075c --- /dev/null +++ b/homeassistant/components/ecobee/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Komponent obs\u0142uguje tylko jedn\u0105 instancj\u0119 ecobee" + }, + "error": { + "pin_request_failed": "B\u0142\u0105d podczas \u017c\u0105dania kodu PIN od ecobee; sprawd\u017a, czy klucz API jest poprawny.", + "token_request_failed": "B\u0142\u0105d podczas \u017c\u0105dania token\u00f3w od ecobee. Spr\u00f3buj ponownie." + }, + "step": { + "authorize": { + "description": "Autoryzuj t\u0119 aplikacj\u0119 na https://www.ecobee.com/consumerportal/index.html za pomoc\u0105 kodu PIN: \n\n {pin} \n \n Nast\u0119pnie naci\u015bnij przycisk \"Zatwierd\u017a\".", + "title": "Autoryzuj aplikacj\u0119 na ecobee.com" + }, + "user": { + "data": { + "api_key": "Klucz API" + }, + "description": "Prosz\u0119 wprowadzi\u0107 klucz API uzyskany na ecobee.com.", + "title": "Klucz API" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/pt-BR.json b/homeassistant/components/ecobee/translations/pt-BR.json new file mode 100644 index 00000000000..8b970c140be --- /dev/null +++ b/homeassistant/components/ecobee/translations/pt-BR.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_only": "Essa integra\u00e7\u00e3o atualmente suporta apenas uma inst\u00e2ncia ecobee." + }, + "error": { + "token_request_failed": "Erro ao solicitar tokens da ecobee; Por favor, tente novamente." + }, + "step": { + "authorize": { + "description": "Por favor, autorize este aplicativo em https://www.ecobee.com/consumerportal/index.html com c\u00f3digo PIN:\n\n{pin}\n\nEm seguida, pressione Submit.", + "title": "Autorizar aplicativo em ecobee.com" + }, + "user": { + "data": { + "api_key": "Chave API" + }, + "description": "Por favor, insira a chave de API obtida em ecobee.com.", + "title": "chave da API ecobee" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/.translations/pt.json b/homeassistant/components/ecobee/translations/pt.json similarity index 100% rename from homeassistant/components/ecobee/.translations/pt.json rename to homeassistant/components/ecobee/translations/pt.json diff --git a/homeassistant/components/ecobee/translations/ru.json b/homeassistant/components/ecobee/translations/ru.json new file mode 100644 index 00000000000..37c1f63822c --- /dev/null +++ b/homeassistant/components/ecobee/translations/ru.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "\u042d\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 ecobee." + }, + "error": { + "pin_request_failed": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 PIN-\u043a\u043e\u0434\u0430 \u0443 ecobee; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u044e\u0447\u0430 API.", + "token_request_failed": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0443 ecobee; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437." + }, + "step": { + "authorize": { + "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 https://www.ecobee.com/consumerportal/index.html \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PIN-\u043a\u043e\u0434\u0430: \n\n {pin} \n \n \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c.", + "title": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 ecobee.com" + }, + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 API, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 ecobee.com.", + "title": "ecobee" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/sl.json b/homeassistant/components/ecobee/translations/sl.json new file mode 100644 index 00000000000..ee84a98cf34 --- /dev/null +++ b/homeassistant/components/ecobee/translations/sl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Ta integracija trenutno podpira samo en primerek ecobee." + }, + "error": { + "pin_request_failed": "Napaka pri zahtevi PIN-a od ecobee; preverite, ali je klju\u010d API pravilen.", + "token_request_failed": "Napaka pri zahtevanju \u017eetonov od ecobeeja; prosim poskusite ponovno." + }, + "step": { + "authorize": { + "description": "Prosimo, pooblastite to aplikacijo na https://www.ecobee.com/consumerportal/index.html s kodo PIN:\n\n{pin}\n\nNato pritisnite Po\u0161lji.", + "title": "Pooblasti aplikacijo na ecobee.com" + }, + "user": { + "data": { + "api_key": "API Klju\u010d" + }, + "description": "Prosimo vnesite API klju\u010d, pridobljen iz ecobee.com.", + "title": "ecobee API klju\u010d" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/sv.json b/homeassistant/components/ecobee/translations/sv.json new file mode 100644 index 00000000000..4bfb4e0ec12 --- /dev/null +++ b/homeassistant/components/ecobee/translations/sv.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "Denna integration st\u00f6der f\u00f6r n\u00e4rvarande endast en ecobee-instans." + }, + "error": { + "pin_request_failed": "Fel vid beg\u00e4ran av PIN-kod fr\u00e5n ecobee. kontrollera API-nyckeln \u00e4r korrekt.", + "token_request_failed": "Fel vid beg\u00e4ran av tokens fr\u00e5n ecobee; v\u00e4nligen f\u00f6rs\u00f6k igen." + }, + "step": { + "authorize": { + "description": "V\u00e4nligen auktorisera denna app p\u00e5 https://www.ecobee.com/consumerportal/index.html med pin-kod:\n\n{pin}\n\nTryck sedan p\u00e5 Skicka.", + "title": "Auktorisera app p\u00e5 ecobee.com" + }, + "user": { + "data": { + "api_key": "API-nyckel" + }, + "description": "V\u00e4nligen ange API-nyckeln som erh\u00e5llits fr\u00e5n ecobee.com.", + "title": "ecobee API-nyckel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/translations/zh-Hant.json b/homeassistant/components/ecobee/translations/zh-Hant.json new file mode 100644 index 00000000000..db1ffa56c81 --- /dev/null +++ b/homeassistant/components/ecobee/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "one_instance_only": "\u6b64\u6574\u5408\u76ee\u524d\u50c5\u652f\u63f4\u4e00\u7d44 ecobee \u7269\u4ef6" + }, + "error": { + "pin_request_failed": "ecobee \u6240\u9700\u4ee3\u78bc\u932f\u8aa4\uff0c\u8acb\u78ba\u8a8d\u5bc6\u9470\u6b63\u78ba\u6027\u3002", + "token_request_failed": "ecobee \u6240\u9700\u5bc6\u9470\u932f\u8aa4\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "authorize": { + "description": "\u8acb\u65bc https://www.ecobee.com/consumerportal/index.html \u8f38\u5165\u4e0b\u65b9\u4ee3\u78bc\uff0c\u8a8d\u8b49\u6b64 App\uff1a\n\n{pin}\n\n\u7136\u5f8c\u6309\u4e0b\u300cSubmit\u300d\u3002", + "title": "\u65bc ecobee.com \u4e0a\u8a8d\u8b49 App" + }, + "user": { + "data": { + "api_key": "API \u5bc6\u9470" + }, + "description": "\u8acb\u8f38\u5165\u7531 ecobee.com \u6240\u7372\u5f97\u7684 API \u5bc6\u9470\u3002", + "title": "ecobee API \u5bc6\u9470" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ecobee/weather.py b/homeassistant/components/ecobee/weather.py index b8d23b3e379..a7fe8d8a0f8 100644 --- a/homeassistant/components/ecobee/weather.py +++ b/homeassistant/components/ecobee/weather.py @@ -26,7 +26,7 @@ from .const import ( async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the ecobee weather platform.""" data = hass.data[DOMAIN] - dev = list() + dev = [] for index in range(len(data.ecobee.thermostats)): thermostat = data.ecobee.get_thermostat(index) if "weather" in thermostat: @@ -164,7 +164,7 @@ class EcobeeWeather(WeatherEntity): if "forecasts" not in self.weather: return None - forecasts = list() + forecasts = [] for day in range(1, 5): forecast = _process_forecast(self.weather["forecasts"][day]) if forecast is None: @@ -179,12 +179,12 @@ class EcobeeWeather(WeatherEntity): """Get the latest weather data.""" await self.data.update() thermostat = self.data.ecobee.get_thermostat(self._index) - self.weather = thermostat.get("weather", None) + self.weather = thermostat.get("weather") def _process_forecast(json): """Process a single ecobee API forecast to return expected values.""" - forecast = dict() + forecast = {} try: forecast[ATTR_FORECAST_TIME] = datetime.strptime( json["dateTime"], "%Y-%m-%d %H:%M:%S" diff --git a/homeassistant/components/econet/manifest.json b/homeassistant/components/econet/manifest.json index d9ce5253e95..21476d2b7ff 100644 --- a/homeassistant/components/econet/manifest.json +++ b/homeassistant/components/econet/manifest.json @@ -3,6 +3,5 @@ "name": "Rheem EcoNET Water Products", "documentation": "https://www.home-assistant.io/integrations/econet", "requirements": ["pyeconet==0.0.11"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/econet/services.yaml b/homeassistant/components/econet/services.yaml index 9f489165c22..b531764c290 100644 --- a/homeassistant/components/econet/services.yaml +++ b/homeassistant/components/econet/services.yaml @@ -3,7 +3,7 @@ add_vacation: fields: entity_id: description: Name(s) of entities to change. - example: 'water_heater.econet' + example: "water_heater.econet" start_date: description: The timestamp of when the vacation should start. (Optional, defaults to now) example: 1513186320 @@ -16,4 +16,4 @@ delete_vacation: fields: entity_id: description: Name(s) of entities to change. - example: 'water_heater.econet' \ No newline at end of file + example: "water_heater.econet" diff --git a/homeassistant/components/econet/water_heater.py b/homeassistant/components/econet/water_heater.py index 26ee7cb8bd4..59afe1351f5 100644 --- a/homeassistant/components/econet/water_heater.py +++ b/homeassistant/components/econet/water_heater.py @@ -40,6 +40,10 @@ ATTR_IN_USE = "in_use" ATTR_START_DATE = "start_date" ATTR_END_DATE = "end_date" +ATTR_LOWER_TEMP = "lower_temp" +ATTR_UPPER_TEMP = "upper_temp" +ATTR_IS_ENABLED = "is_enabled" + SUPPORT_FLAGS_HEATER = SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE ADD_VACATION_SCHEMA = vol.Schema( @@ -132,11 +136,7 @@ class EcoNetWaterHeater(WaterHeaterDevice): self.ha_state_to_econet[value] = key for mode in self.supported_modes: if mode not in ECONET_STATE_TO_HA: - error = ( - "Invalid operation mode mapping. " - + mode - + " doesn't map. Please report this." - ) + error = f"Invalid operation mode mapping. {mode} doesn't map. Please report this." _LOGGER.error(error) @property @@ -168,6 +168,13 @@ class EcoNetWaterHeater(WaterHeaterDevice): data[ATTR_TODAYS_ENERGY_USAGE] = todays_usage data[ATTR_IN_USE] = self.water_heater.in_use + if self.water_heater.lower_temp is not None: + data[ATTR_LOWER_TEMP] = round(self.water_heater.lower_temp, 2) + if self.water_heater.upper_temp is not None: + data[ATTR_UPPER_TEMP] = round(self.water_heater.upper_temp, 2) + if self.water_heater.is_enabled is not None: + data[ATTR_IS_ENABLED] = self.water_heater.is_enabled + return data @property diff --git a/homeassistant/components/ecovacs/manifest.json b/homeassistant/components/ecovacs/manifest.json index 637ee001ca3..aa67be422c5 100644 --- a/homeassistant/components/ecovacs/manifest.json +++ b/homeassistant/components/ecovacs/manifest.json @@ -3,6 +3,5 @@ "name": "Ecovacs", "documentation": "https://www.home-assistant.io/integrations/ecovacs", "requirements": ["sucks==0.9.4"], - "dependencies": [], "codeowners": ["@OverloadUT"] } diff --git a/homeassistant/components/ecovacs/vacuum.py b/homeassistant/components/ecovacs/vacuum.py index 806c0b41285..8b6115970bb 100644 --- a/homeassistant/components/ecovacs/vacuum.py +++ b/homeassistant/components/ecovacs/vacuum.py @@ -55,7 +55,7 @@ class EcovacsVacuum(VacuumDevice): """Initialize the Ecovacs Vacuum.""" self.device = device self.device.connect_and_wait_until_ready() - if self.device.vacuum.get("nick", None) is not None: + if self.device.vacuum.get("nick") is not None: self._name = str(self.device.vacuum["nick"]) else: # In case there is no nickname defined, use the device id @@ -96,7 +96,7 @@ class EcovacsVacuum(VacuumDevice): @property def unique_id(self) -> str: """Return an unique ID.""" - return self.device.vacuum.get("did", None) + return self.device.vacuum.get("did") @property def is_on(self): diff --git a/homeassistant/components/eddystone_temperature/manifest.json b/homeassistant/components/eddystone_temperature/manifest.json index 7cc210c7053..c59cb6a9c7f 100644 --- a/homeassistant/components/eddystone_temperature/manifest.json +++ b/homeassistant/components/eddystone_temperature/manifest.json @@ -3,6 +3,5 @@ "name": "Eddystone", "documentation": "https://www.home-assistant.io/integrations/eddystone_temperature", "requirements": ["beacontools[scan]==1.2.3", "construct==2.9.45"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/edimax/manifest.json b/homeassistant/components/edimax/manifest.json index de8b978b9f9..20d72b30a6a 100644 --- a/homeassistant/components/edimax/manifest.json +++ b/homeassistant/components/edimax/manifest.json @@ -3,6 +3,5 @@ "name": "Edimax", "documentation": "https://www.home-assistant.io/integrations/edimax", "requirements": ["pyedimax==0.2.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/edl21/manifest.json b/homeassistant/components/edl21/manifest.json index 313ac2c262e..3e469e44601 100644 --- a/homeassistant/components/edl21/manifest.json +++ b/homeassistant/components/edl21/manifest.json @@ -2,11 +2,6 @@ "domain": "edl21", "name": "EDL21", "documentation": "https://www.home-assistant.io/integrations/edl21", - "requirements": [ - "pysml==0.0.2" - ], - "dependencies": [], - "codeowners": [ - "@mtdcr" - ] + "requirements": ["pysml==0.0.2"], + "codeowners": ["@mtdcr"] } diff --git a/homeassistant/components/ee_brightbox/manifest.json b/homeassistant/components/ee_brightbox/manifest.json index b0a313a939f..361df9575df 100644 --- a/homeassistant/components/ee_brightbox/manifest.json +++ b/homeassistant/components/ee_brightbox/manifest.json @@ -3,6 +3,5 @@ "name": "EE Bright Box", "documentation": "https://www.home-assistant.io/integrations/ee_brightbox", "requirements": ["eebrightbox==0.0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/efergy/manifest.json b/homeassistant/components/efergy/manifest.json index 99b966c6c50..cb9cfb17ac5 100644 --- a/homeassistant/components/efergy/manifest.json +++ b/homeassistant/components/efergy/manifest.json @@ -2,7 +2,5 @@ "domain": "efergy", "name": "Efergy", "documentation": "https://www.home-assistant.io/integrations/efergy", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/egardia/manifest.json b/homeassistant/components/egardia/manifest.json index b0dfc63d929..94953a773c2 100644 --- a/homeassistant/components/egardia/manifest.json +++ b/homeassistant/components/egardia/manifest.json @@ -3,6 +3,5 @@ "name": "Egardia", "documentation": "https://www.home-assistant.io/integrations/egardia", "requirements": ["pythonegardia==1.0.40"], - "dependencies": [], "codeowners": ["@jeroenterheerdt"] } diff --git a/homeassistant/components/eight_sleep/__init__.py b/homeassistant/components/eight_sleep/__init__.py index 595144013b6..022878c8276 100644 --- a/homeassistant/components/eight_sleep/__init__.py +++ b/homeassistant/components/eight_sleep/__init__.py @@ -214,7 +214,11 @@ class EightSleepUserEntity(Entity): """Update callback.""" self.async_schedule_update_ha_state(True) - async_dispatcher_connect(self.hass, SIGNAL_UPDATE_USER, async_eight_user_update) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_USER, async_eight_user_update + ) + ) @property def should_poll(self): @@ -237,7 +241,11 @@ class EightSleepHeatEntity(Entity): """Update callback.""" self.async_schedule_update_ha_state(True) - async_dispatcher_connect(self.hass, SIGNAL_UPDATE_HEAT, async_eight_heat_update) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_HEAT, async_eight_heat_update + ) + ) @property def should_poll(self): diff --git a/homeassistant/components/eight_sleep/manifest.json b/homeassistant/components/eight_sleep/manifest.json index ac7a11eed3c..b8be5757df9 100644 --- a/homeassistant/components/eight_sleep/manifest.json +++ b/homeassistant/components/eight_sleep/manifest.json @@ -3,6 +3,5 @@ "name": "Eight Sleep", "documentation": "https://www.home-assistant.io/integrations/eight_sleep", "requirements": ["pyeight==0.1.4"], - "dependencies": [], "codeowners": ["@mezz64"] } diff --git a/homeassistant/components/eight_sleep/sensor.py b/homeassistant/components/eight_sleep/sensor.py index dcee52db592..ff6dff85aca 100644 --- a/homeassistant/components/eight_sleep/sensor.py +++ b/homeassistant/components/eight_sleep/sensor.py @@ -1,7 +1,7 @@ """Support for Eight Sleep sensors.""" import logging -from homeassistant.const import UNIT_PERCENTAGE +from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE from . import ( CONF_SENSORS, @@ -166,8 +166,8 @@ class EightUserSensor(EightSleepUserEntity): return "Score" if "bed_temp" in self._sensor: if self._units == "si": - return "°C" - return "°F" + return TEMP_CELSIUS + return TEMP_FAHRENHEIT return None @property @@ -329,8 +329,8 @@ class EightRoomSensor(EightSleepUserEntity): def unit_of_measurement(self): """Return the unit the value is expressed in.""" if self._units == "si": - return "°C" - return "°F" + return TEMP_CELSIUS + return TEMP_FAHRENHEIT @property def icon(self): diff --git a/homeassistant/components/eight_sleep/services.yaml b/homeassistant/components/eight_sleep/services.yaml index 49a3c67d604..05354bccc68 100644 --- a/homeassistant/components/eight_sleep/services.yaml +++ b/homeassistant/components/eight_sleep/services.yaml @@ -1,6 +1,12 @@ heat_set: description: Set heating/cooling level for eight sleep. fields: - duration: {description: Duration to heat/cool at the target level in seconds., example: 3600} - entity_id: {description: Entity id of the bed state to adjust., example: sensor.eight_left_bed_state} - target: {description: Target cooling/heating level from -100 to 100., example: 35} + duration: + description: Duration to heat/cool at the target level in seconds. + example: 3600 + entity_id: + description: Entity id of the bed state to adjust. + example: sensor.eight_left_bed_state + target: + description: Target cooling/heating level from -100 to 100. + example: 35 diff --git a/homeassistant/components/elgato/.translations/ca.json b/homeassistant/components/elgato/.translations/ca.json deleted file mode 100644 index 3ba9029eb00..00000000000 --- a/homeassistant/components/elgato/.translations/ca.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest dispositiu Elgato Key Light ja est\u00e0 configurat.", - "connection_error": "No s'ha pogut connectar amb el dispositiu Elgato Key Light." - }, - "error": { - "connection_error": "No s'ha pogut connectar amb el dispositiu Elgato Key Light." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3 o adre\u00e7a IP", - "port": "N\u00famero de port" - }, - "description": "Configura l'Elgato Key Light per integrar-lo amb Home Assistant.", - "title": "Enlla\u00e7 amb Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Vols afegir l'Elgato Key Light amb n\u00famero de s\u00e8rie `{serial_number}` a Home Assistant?", - "title": "S'ha descobert un dispositiu Elgato Key Light" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/da.json b/homeassistant/components/elgato/.translations/da.json deleted file mode 100644 index a10e4d9e89f..00000000000 --- a/homeassistant/components/elgato/.translations/da.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne Elgato Key Light-enhed er allerede konfigureret.", - "connection_error": "Kunne ikke oprette forbindelse til Elgato Key Light-enheden." - }, - "error": { - "connection_error": "Kunne ikke oprette forbindelse til Elgato Key Light-enheden." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "V\u00e6rt eller IP-adresse", - "port": "Portnummer" - }, - "description": "Indstil din Elgato Key Light til at integrere med Home Assistant.", - "title": "Forbind din Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Vil du tilf\u00f8je Elgato Key Light med serienummer `{serial_number}` til Home Assistant?", - "title": "Fandt Elgato Key Light-enhed" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/de.json b/homeassistant/components/elgato/.translations/de.json deleted file mode 100644 index f5bca5e8416..00000000000 --- a/homeassistant/components/elgato/.translations/de.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses Elgato Key Light-Ger\u00e4t ist bereits konfiguriert.", - "connection_error": "Verbindung zum Elgato Key Light-Ger\u00e4t fehlgeschlagen." - }, - "error": { - "connection_error": "Verbindung zum Elgato Key Light-Ger\u00e4t fehlgeschlagen." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Host oder IP-Adresse", - "port": "Port-Nummer" - }, - "description": "Richten dein Elgato Key Light f\u00fcr die Integration mit Home Assistant ein.", - "title": "Verkn\u00fcpfe dein Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "M\u00f6chtest du das Elgato Key Light mit der Seriennummer \"{serial_number} \" zu Home Assistant hinzuf\u00fcgen?", - "title": "Elgato Key Light Ger\u00e4t entdeckt" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/en.json b/homeassistant/components/elgato/.translations/en.json deleted file mode 100644 index d52003d10e1..00000000000 --- a/homeassistant/components/elgato/.translations/en.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This Elgato Key Light device is already configured.", - "connection_error": "Failed to connect to Elgato Key Light device." - }, - "error": { - "connection_error": "Failed to connect to Elgato Key Light device." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Host or IP address", - "port": "Port number" - }, - "description": "Set up your Elgato Key Light to integrate with Home Assistant.", - "title": "Link your Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Do you want to add the Elgato Key Light with serial number `{serial_number}` to Home Assistant?", - "title": "Discovered Elgato Key Light device" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/es-419.json b/homeassistant/components/elgato/.translations/es-419.json deleted file mode 100644 index 2653060030a..00000000000 --- a/homeassistant/components/elgato/.translations/es-419.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "host": "Host o direcci\u00f3n IP", - "port": "N\u00famero de puerto" - }, - "description": "Configure su Elgato Key Light para integrarse con Home Assistant." - }, - "zeroconf_confirm": { - "title": "Dispositivo Elgato Key Light descubierto" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/es.json b/homeassistant/components/elgato/.translations/es.json deleted file mode 100644 index 2e689b5e064..00000000000 --- a/homeassistant/components/elgato/.translations/es.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este dispositivo Elgato Key Light ya est\u00e1 configurado.", - "connection_error": "No se pudo conectar al dispositivo Elgato Key Light." - }, - "error": { - "connection_error": "No se pudo conectar al dispositivo Elgato Key Light." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Host o direcci\u00f3n IP", - "port": "N\u00famero de puerto" - }, - "description": "Configura tu Elgato Key Light para integrarlo con Home Assistant.", - "title": "Conecte su Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "\u00bfDesea agregar Elgato Key Light con el n\u00famero de serie `{serial_number}` a Home Assistant?", - "title": "Descubierto dispositivo Elgato Key Light" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/fr.json b/homeassistant/components/elgato/.translations/fr.json deleted file mode 100644 index e8465a56728..00000000000 --- a/homeassistant/components/elgato/.translations/fr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cet appareil Elgato Key Light est d\u00e9j\u00e0 configur\u00e9.", - "connection_error": "Impossible de se connecter au p\u00e9riph\u00e9rique Elgato Key Light." - }, - "error": { - "connection_error": "Impossible de se connecter au p\u00e9riph\u00e9rique Elgato Key Light." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "H\u00f4te ou adresse IP", - "port": "Port" - }, - "description": "Configurez votre Elgato Key Light pour l'int\u00e9grer \u00e0 Home Assistant.", - "title": "Associez votre Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Voulez-vous ajouter l'Elgato Key Light avec le num\u00e9ro de s\u00e9rie `{serial_number}` \u00e0 Home Assistant?", - "title": "Appareil Elgato Key Light d\u00e9couvert" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/it.json b/homeassistant/components/elgato/.translations/it.json deleted file mode 100644 index 81e363aa01b..00000000000 --- a/homeassistant/components/elgato/.translations/it.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo dispositivo Elgato Key Light \u00e8 gi\u00e0 configurato.", - "connection_error": "Impossibile connettersi al dispositivo Elgato Key Light." - }, - "error": { - "connection_error": "Impossibile connettersi al dispositivo Elgato Key Light." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Host o indirizzo IP", - "port": "Numero porta" - }, - "description": "Configura Elgato Key Light per l'integrazione con Home Assistant.", - "title": "Collega il tuo Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Vuoi aggiungere il dispositivo Elgato Key Light con il numero di serie {serial_number} a Home Assistant?", - "title": "Dispositivo Elgato Key Light rilevato" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/ko.json b/homeassistant/components/elgato/.translations/ko.json deleted file mode 100644 index 9d7ab4ef2b0..00000000000 --- a/homeassistant/components/elgato/.translations/ko.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Elgato Key Light \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "connection_error": "Elgato Key Light \uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." - }, - "error": { - "connection_error": "Elgato Key Light \uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c", - "port": "\ud3ec\ud2b8 \ubc88\ud638" - }, - "description": "Home Assistant \uc5d0 Elgato Key Light \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.", - "title": "Elgato Key Light \uc5f0\uacb0" - }, - "zeroconf_confirm": { - "description": "Elgato Key Light \uc2dc\ub9ac\uc5bc \ubc88\ud638 `{serial_number}` \uc744(\ub97c) Home Assistant \uc5d0 \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\ubc1c\uacac\ub41c Elgato Key Light \uae30\uae30" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/lb.json b/homeassistant/components/elgato/.translations/lb.json deleted file mode 100644 index e46fc4364d2..00000000000 --- a/homeassistant/components/elgato/.translations/lb.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebsen Elgato Key Light Apparat ass scho konfigur\u00e9iert.", - "connection_error": "Feeler beim verbannen mam Elgato key Light Apparat." - }, - "error": { - "connection_error": "Feeler beim verbannen mam Elgato key Light Apparat." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Numm oder IP Adresse", - "port": "Port Nummer" - }, - "description": "\u00c4ren Elgator Key Light als Integratioun mam Home Assistant ariichten.", - "title": "\u00c4ren Elgato Key Light verbannen" - }, - "zeroconf_confirm": { - "description": "W\u00ebllt dir den Elgato Key Light mat der Seriennummer `{serial_number}` am Home Assistant dob\u00e4isetzen?", - "title": "Entdeckten Elgato Key Light Apparat" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/nl.json b/homeassistant/components/elgato/.translations/nl.json deleted file mode 100644 index ca05983eeb5..00000000000 --- a/homeassistant/components/elgato/.translations/nl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dit Elgato Key Light apparaat is al geconfigureerd.", - "connection_error": "Kan geen verbinding maken met het Elgato Key Light apparaat." - }, - "error": { - "connection_error": "Kan geen verbinding maken met het Elgato Key Light apparaat." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Hostnaam of IP-adres", - "port": "Poortnummer" - }, - "description": "Stel uw Elgato Key Light in om te integreren met Home Assistant.", - "title": "Koppel uw Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Wilt u de Elgato Key Light met serienummer ` {serial_number} ` toevoegen aan Home Assistant?", - "title": "Elgato Key Light apparaat ontdekt" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/no.json b/homeassistant/components/elgato/.translations/no.json deleted file mode 100644 index 8642ae75025..00000000000 --- a/homeassistant/components/elgato/.translations/no.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne Elgato Key Light-enheten er allerede konfigurert.", - "connection_error": "Kunne ikke koble til Elgato Key Light-enheten." - }, - "error": { - "connection_error": "Kunne ikke koble til Elgato Key Light-enheten." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Vert eller IP-adresse", - "port": "Portnummer" - }, - "description": "Sett opp Elgato Key Light for \u00e5 integrere med Home Assistant.", - "title": "Linken ditt Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Vil du legge Elgato Key Light med serienummer ` {serial_number} til Home Assistant?", - "title": "Oppdaget Elgato Key Light-enheten" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/pl.json b/homeassistant/components/elgato/.translations/pl.json deleted file mode 100644 index 97e10b451f0..00000000000 --- a/homeassistant/components/elgato/.translations/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "To urz\u0105dzenie Elgato Key Light jest ju\u017c skonfigurowane.", - "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z urz\u0105dzeniem Elgato Key Light." - }, - "error": { - "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z urz\u0105dzeniem Elgato Key Light." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Nazwa hosta lub adres IP", - "port": "Port" - }, - "description": "Konfiguracja Elgato Key Light w celu integracji z Home Assistant'em.", - "title": "Po\u0142\u0105cz swoje Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Czy chcesz doda\u0107 urz\u0105dzenie Elgato Key Light o numerze seryjnym `{serial_number}` do Home Assistant'a?", - "title": "Wykryto urz\u0105dzenie Elgato Key Light" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/pt-BR.json b/homeassistant/components/elgato/.translations/pt-BR.json deleted file mode 100644 index d809647c99f..00000000000 --- a/homeassistant/components/elgato/.translations/pt-BR.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "step": { - "zeroconf_confirm": { - "description": "Deseja adicionar o Elgato Key Light n\u00famero de s\u00e9rie ` {serial_number} ` ao Home Assistant?", - "title": "Dispositivo Elgato Key Light descoberto" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/ru.json b/homeassistant/components/elgato/.translations/ru.json deleted file mode 100644 index 1663ea4d23a..00000000000 --- a/homeassistant/components/elgato/.translations/ru.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "connection_error": "\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 Elgato Key Light." - }, - "error": { - "connection_error": "\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 Elgato Key Light." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "port": "\u041d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 Elgato Key Light \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Home Assistant.", - "title": "Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Elgato Key Light \u0441 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c `{serial_number}`?", - "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Elgato Key Light" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/sl.json b/homeassistant/components/elgato/.translations/sl.json deleted file mode 100644 index f05b0bcbd8f..00000000000 --- a/homeassistant/components/elgato/.translations/sl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta naprava Elgato Key Light je \u017ee nastavljena.", - "connection_error": "Povezava z napravo Elgato Key Light ni uspela." - }, - "error": { - "connection_error": "Povezava z napravo Elgato Key Light ni uspela." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "Gostitelj ali IP naslov", - "port": "\u0160tevilka vrat" - }, - "description": "Nastavite svojo Elgato Key Light tako, da se bo vklju\u010dila v Home Assistant.", - "title": "Pove\u017eite svojo Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Ali \u017eelite dodati Elgato Key Light s serijsko \u0161tevilko ' {serial_number} ' v Home Assistant-a?", - "title": "Odkrita naprava Elgato Key Light" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/sv.json b/homeassistant/components/elgato/.translations/sv.json deleted file mode 100644 index 83850c186c7..00000000000 --- a/homeassistant/components/elgato/.translations/sv.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den h\u00e4r Elgato Key Light-enheten \u00e4r redan konfigurerad.", - "connection_error": "Det gick inte att ansluta till Elgato Key Light-enheten." - }, - "error": { - "connection_error": "Det gick inte att ansluta till Elgato Key Light-enheten." - }, - "flow_title": "Elgato Key Light: {serial_number}", - "step": { - "user": { - "data": { - "host": "V\u00e4rd eller IP-adress", - "port": "Portnummer" - }, - "description": "St\u00e4ll in ditt Elgato Key Light f\u00f6r att integrera med Home Assistant.", - "title": "L\u00e4nk din Elgato Key Light" - }, - "zeroconf_confirm": { - "description": "Vill du l\u00e4gga till Elgato Key Light med serienummer `{serial_number}` till Home Assistant?", - "title": "Uppt\u00e4ckte Elgato Key Light-enhet" - } - }, - "title": "Elgato Key Light" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/zh-Hant.json b/homeassistant/components/elgato/.translations/zh-Hant.json deleted file mode 100644 index c0c638851a1..00000000000 --- a/homeassistant/components/elgato/.translations/zh-Hant.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Elgato Key \u7167\u660e\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", - "connection_error": "Elgato Key \u7167\u660e\u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" - }, - "error": { - "connection_error": "Elgato Key \u7167\u660e\u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" - }, - "flow_title": "Elgato Key \u7167\u660e\uff1a{serial_number}", - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", - "port": "\u901a\u8a0a\u57e0" - }, - "description": "\u8a2d\u5b9a Elgato Key \u7167\u660e\u4ee5\u6574\u5408\u81f3 Home Assistant\u3002", - "title": "\u9023\u7d50 Elgato Key \u7167\u660e\u3002" - }, - "zeroconf_confirm": { - "description": "\u662f\u5426\u8981\u5c07 Elgato Key \u7167\u660e\u5e8f\u865f `{serial_number}` \u65b0\u589e\u81f3 Home Assistant\uff1f", - "title": "\u81ea\u52d5\u63a2\u7d22\u5230 Elgato Key \u7167\u660e\u8a2d\u5099" - } - }, - "title": "Elgato Key \u7167\u660e" - } -} \ No newline at end of file diff --git a/homeassistant/components/elgato/manifest.json b/homeassistant/components/elgato/manifest.json index 039b125e988..f1a92ec727f 100644 --- a/homeassistant/components/elgato/manifest.json +++ b/homeassistant/components/elgato/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/elgato", "requirements": ["elgato==0.2.0"], - "dependencies": [], "zeroconf": ["_elg._tcp.local."], "codeowners": ["@frenck"], "quality_scale": "platinum" diff --git a/homeassistant/components/elgato/strings.json b/homeassistant/components/elgato/strings.json index 03c46f02efc..f2123731412 100644 --- a/homeassistant/components/elgato/strings.json +++ b/homeassistant/components/elgato/strings.json @@ -1,15 +1,10 @@ { "config": { - "title": "Elgato Key Light", "flow_title": "Elgato Key Light: {serial_number}", "step": { "user": { - "title": "Link your Elgato Key Light", "description": "Set up your Elgato Key Light to integrate with Home Assistant.", - "data": { - "host": "Host or IP address", - "port": "Port number" - } + "data": { "host": "Host or IP address", "port": "Port number" } }, "zeroconf_confirm": { "description": "Do you want to add the Elgato Key Light with serial number `{serial_number}` to Home Assistant?", diff --git a/homeassistant/components/elgato/translations/ca.json b/homeassistant/components/elgato/translations/ca.json new file mode 100644 index 00000000000..0a15bb12573 --- /dev/null +++ b/homeassistant/components/elgato/translations/ca.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest dispositiu Elgato Key Light ja est\u00e0 configurat.", + "connection_error": "No s'ha pogut connectar amb el dispositiu Elgato Key Light." + }, + "error": { + "connection_error": "No s'ha pogut connectar amb el dispositiu Elgato Key Light." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3 o adre\u00e7a IP", + "port": "N\u00famero de port" + }, + "description": "Configura l'Elgato Key Light per integrar-lo amb Home Assistant.", + "title": "Enlla\u00e7 amb Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Vols afegir l'Elgato Key Light amb n\u00famero de s\u00e8rie `{serial_number}` a Home Assistant?", + "title": "Dispositiu Elgato Key Light descobert" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/da.json b/homeassistant/components/elgato/translations/da.json new file mode 100644 index 00000000000..99ae908db6b --- /dev/null +++ b/homeassistant/components/elgato/translations/da.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Elgato Key Light-enhed er allerede konfigureret.", + "connection_error": "Kunne ikke oprette forbindelse til Elgato Key Light-enheden." + }, + "error": { + "connection_error": "Kunne ikke oprette forbindelse til Elgato Key Light-enheden." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "V\u00e6rt eller IP-adresse", + "port": "Portnummer" + }, + "description": "Indstil din Elgato Key Light til at integrere med Home Assistant.", + "title": "Forbind din Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Vil du tilf\u00f8je Elgato Key Light med serienummer `{serial_number}` til Home Assistant?", + "title": "Fandt Elgato Key Light-enhed" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/de.json b/homeassistant/components/elgato/translations/de.json new file mode 100644 index 00000000000..fcebb7aaa05 --- /dev/null +++ b/homeassistant/components/elgato/translations/de.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses Elgato Key Light-Ger\u00e4t ist bereits konfiguriert.", + "connection_error": "Verbindung zum Elgato Key Light-Ger\u00e4t fehlgeschlagen." + }, + "error": { + "connection_error": "Verbindung zum Elgato Key Light-Ger\u00e4t fehlgeschlagen." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Host oder IP-Adresse", + "port": "Port-Nummer" + }, + "description": "Richten dein Elgato Key Light f\u00fcr die Integration mit Home Assistant ein.", + "title": "Verkn\u00fcpfe dein Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "M\u00f6chtest du das Elgato Key Light mit der Seriennummer \"{serial_number} \" zu Home Assistant hinzuf\u00fcgen?", + "title": "Elgato Key Light Ger\u00e4t entdeckt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/en.json b/homeassistant/components/elgato/translations/en.json new file mode 100644 index 00000000000..1a2ff6d97f0 --- /dev/null +++ b/homeassistant/components/elgato/translations/en.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "This Elgato Key Light device is already configured.", + "connection_error": "Failed to connect to Elgato Key Light device." + }, + "error": { + "connection_error": "Failed to connect to Elgato Key Light device." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Host or IP address", + "port": "Port number" + }, + "description": "Set up your Elgato Key Light to integrate with Home Assistant.", + "title": "Link your Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Do you want to add the Elgato Key Light with serial number `{serial_number}` to Home Assistant?", + "title": "Discovered Elgato Key Light device" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/es-419.json b/homeassistant/components/elgato/translations/es-419.json new file mode 100644 index 00000000000..46a008009b9 --- /dev/null +++ b/homeassistant/components/elgato/translations/es-419.json @@ -0,0 +1,16 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "Host o direcci\u00f3n IP", + "port": "N\u00famero de puerto" + }, + "description": "Configure su Elgato Key Light para integrarse con Home Assistant." + }, + "zeroconf_confirm": { + "title": "Dispositivo Elgato Key Light descubierto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/es.json b/homeassistant/components/elgato/translations/es.json new file mode 100644 index 00000000000..3860a09de92 --- /dev/null +++ b/homeassistant/components/elgato/translations/es.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Este dispositivo Elgato Key Light ya est\u00e1 configurado.", + "connection_error": "No se pudo conectar al dispositivo Elgato Key Light." + }, + "error": { + "connection_error": "No se pudo conectar al dispositivo Elgato Key Light." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Host o direcci\u00f3n IP", + "port": "N\u00famero de puerto" + }, + "description": "Configura tu Elgato Key Light para integrarlo con Home Assistant.", + "title": "Conecte su Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "\u00bfDesea agregar Elgato Key Light con el n\u00famero de serie `{serial_number}` a Home Assistant?", + "title": "Descubierto dispositivo Elgato Key Light" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/fr.json b/homeassistant/components/elgato/translations/fr.json new file mode 100644 index 00000000000..7eca88dc2bd --- /dev/null +++ b/homeassistant/components/elgato/translations/fr.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Cet appareil Elgato Key Light est d\u00e9j\u00e0 configur\u00e9.", + "connection_error": "Impossible de se connecter au p\u00e9riph\u00e9rique Elgato Key Light." + }, + "error": { + "connection_error": "Impossible de se connecter au p\u00e9riph\u00e9rique Elgato Key Light." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "H\u00f4te ou adresse IP", + "port": "Port" + }, + "description": "Configurez votre Elgato Key Light pour l'int\u00e9grer \u00e0 Home Assistant.", + "title": "Associez votre Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Voulez-vous ajouter l'Elgato Key Light avec le num\u00e9ro de s\u00e9rie `{serial_number}` \u00e0 Home Assistant?", + "title": "Appareil Elgato Key Light d\u00e9couvert" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/hu.json b/homeassistant/components/elgato/translations/hu.json similarity index 100% rename from homeassistant/components/elgato/.translations/hu.json rename to homeassistant/components/elgato/translations/hu.json diff --git a/homeassistant/components/elgato/translations/it.json b/homeassistant/components/elgato/translations/it.json new file mode 100644 index 00000000000..6d9e8607676 --- /dev/null +++ b/homeassistant/components/elgato/translations/it.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Questo dispositivo Elgato Key Light \u00e8 gi\u00e0 configurato.", + "connection_error": "Impossibile connettersi al dispositivo Elgato Key Light." + }, + "error": { + "connection_error": "Impossibile connettersi al dispositivo Elgato Key Light." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Host o indirizzo IP", + "port": "Numero porta" + }, + "description": "Configura Elgato Key Light per l'integrazione con Home Assistant.", + "title": "Collega il tuo Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Vuoi aggiungere il dispositivo Elgato Key Light con il numero di serie {serial_number} a Home Assistant?", + "title": "Dispositivo Elgato Key Light rilevato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/ko.json b/homeassistant/components/elgato/translations/ko.json new file mode 100644 index 00000000000..50b8536ea05 --- /dev/null +++ b/homeassistant/components/elgato/translations/ko.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Elgato Key Light \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "connection_error": "Elgato Key Light \uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." + }, + "error": { + "connection_error": "Elgato Key Light \uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c", + "port": "\ud3ec\ud2b8 \ubc88\ud638" + }, + "description": "Home Assistant \uc5d0 Elgato Key Light \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.", + "title": "Elgato Key Light \uc5f0\uacb0" + }, + "zeroconf_confirm": { + "description": "Elgato Key Light \uc2dc\ub9ac\uc5bc \ubc88\ud638 `{serial_number}` \uc744(\ub97c) Home Assistant \uc5d0 \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "\ubc1c\uacac\ub41c Elgato Key Light \uae30\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/lb.json b/homeassistant/components/elgato/translations/lb.json new file mode 100644 index 00000000000..7c2e3cf4e9f --- /dev/null +++ b/homeassistant/components/elgato/translations/lb.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebsen Elgato Key Light Apparat ass scho konfigur\u00e9iert.", + "connection_error": "Feeler beim verbannen mam Elgato key Light Apparat." + }, + "error": { + "connection_error": "Feeler beim verbannen mam Elgato key Light Apparat." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Numm oder IP Adresse", + "port": "Port Nummer" + }, + "description": "\u00c4ren Elgator Key Light als Integratioun mam Home Assistant ariichten.", + "title": "\u00c4ren Elgato Key Light verbannen" + }, + "zeroconf_confirm": { + "description": "W\u00ebllt dir den Elgato Key Light mat der Seriennummer `{serial_number}` am Home Assistant dob\u00e4isetzen?", + "title": "Entdeckten Elgato Key Light Apparat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/.translations/lv.json b/homeassistant/components/elgato/translations/lv.json similarity index 100% rename from homeassistant/components/elgato/.translations/lv.json rename to homeassistant/components/elgato/translations/lv.json diff --git a/homeassistant/components/elgato/translations/nl.json b/homeassistant/components/elgato/translations/nl.json new file mode 100644 index 00000000000..7f027b63f8d --- /dev/null +++ b/homeassistant/components/elgato/translations/nl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Dit Elgato Key Light apparaat is al geconfigureerd.", + "connection_error": "Kan geen verbinding maken met het Elgato Key Light apparaat." + }, + "error": { + "connection_error": "Kan geen verbinding maken met het Elgato Key Light apparaat." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Hostnaam of IP-adres", + "port": "Poortnummer" + }, + "description": "Stel uw Elgato Key Light in om te integreren met Home Assistant.", + "title": "Koppel uw Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Wilt u de Elgato Key Light met serienummer ` {serial_number} ` toevoegen aan Home Assistant?", + "title": "Elgato Key Light apparaat ontdekt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/no.json b/homeassistant/components/elgato/translations/no.json new file mode 100644 index 00000000000..2d60155cbb8 --- /dev/null +++ b/homeassistant/components/elgato/translations/no.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Elgato Key Light-enheten er allerede konfigurert.", + "connection_error": "Kunne ikke koble til Elgato Key Light-enheten." + }, + "error": { + "connection_error": "Kunne ikke koble til Elgato Key Light-enheten." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Vert eller IP-adresse", + "port": "Portnummer" + }, + "description": "Sett opp Elgato Key Light for \u00e5 integrere med Home Assistant.", + "title": "Linken ditt Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Vil du legge Elgato Key Light med serienummer ` {serial_number} til Home Assistant?", + "title": "Oppdaget Elgato Key Light-enheten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/pl.json b/homeassistant/components/elgato/translations/pl.json new file mode 100644 index 00000000000..344c2c086ea --- /dev/null +++ b/homeassistant/components/elgato/translations/pl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "To urz\u0105dzenie Elgato Key Light jest ju\u017c skonfigurowane.", + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z urz\u0105dzeniem Elgato Key Light." + }, + "error": { + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z urz\u0105dzeniem Elgato Key Light." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port" + }, + "description": "Konfiguracja Elgato Key Light w celu integracji z Home Assistant'em.", + "title": "Po\u0142\u0105cz swoje Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Czy chcesz doda\u0107 urz\u0105dzenie Elgato Key Light o numerze seryjnym `{serial_number}` do Home Assistant'a?", + "title": "Wykryto urz\u0105dzenie Elgato Key Light" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/pt-BR.json b/homeassistant/components/elgato/translations/pt-BR.json new file mode 100644 index 00000000000..1684ce82433 --- /dev/null +++ b/homeassistant/components/elgato/translations/pt-BR.json @@ -0,0 +1,10 @@ +{ + "config": { + "step": { + "zeroconf_confirm": { + "description": "Deseja adicionar o Elgato Key Light n\u00famero de s\u00e9rie ` {serial_number} ` ao Home Assistant?", + "title": "Dispositivo Elgato Key Light descoberto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/pt.json b/homeassistant/components/elgato/translations/pt.json new file mode 100644 index 00000000000..89c332cea25 --- /dev/null +++ b/homeassistant/components/elgato/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "Nome servidor ou endere\u00e7o IP", + "port": "N\u00famero da porta" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/ru.json b/homeassistant/components/elgato/translations/ru.json new file mode 100644 index 00000000000..a09a00b840c --- /dev/null +++ b/homeassistant/components/elgato/translations/ru.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "connection_error": "\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 Elgato Key Light." + }, + "error": { + "connection_error": "\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 Elgato Key Light." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "port": "\u041d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 Elgato Key Light \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Home Assistant.", + "title": "Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Elgato Key Light \u0441 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c `{serial_number}`?", + "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Elgato Key Light" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/sl.json b/homeassistant/components/elgato/translations/sl.json new file mode 100644 index 00000000000..eac8bcdb295 --- /dev/null +++ b/homeassistant/components/elgato/translations/sl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ta naprava Elgato Key Light je \u017ee nastavljena.", + "connection_error": "Povezava z napravo Elgato Key Light ni uspela." + }, + "error": { + "connection_error": "Povezava z napravo Elgato Key Light ni uspela." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "Gostitelj ali IP naslov", + "port": "\u0160tevilka vrat" + }, + "description": "Nastavite svojo Elgato Key Light tako, da se bo vklju\u010dila v Home Assistant.", + "title": "Pove\u017eite svojo Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Ali \u017eelite dodati Elgato Key Light s serijsko \u0161tevilko ' {serial_number} ' v Home Assistant-a?", + "title": "Odkrita naprava Elgato Key Light" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/sv.json b/homeassistant/components/elgato/translations/sv.json new file mode 100644 index 00000000000..f2b3001ae14 --- /dev/null +++ b/homeassistant/components/elgato/translations/sv.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Den h\u00e4r Elgato Key Light-enheten \u00e4r redan konfigurerad.", + "connection_error": "Det gick inte att ansluta till Elgato Key Light-enheten." + }, + "error": { + "connection_error": "Det gick inte att ansluta till Elgato Key Light-enheten." + }, + "flow_title": "Elgato Key Light: {serial_number}", + "step": { + "user": { + "data": { + "host": "V\u00e4rd eller IP-adress", + "port": "Portnummer" + }, + "description": "St\u00e4ll in ditt Elgato Key Light f\u00f6r att integrera med Home Assistant.", + "title": "L\u00e4nk din Elgato Key Light" + }, + "zeroconf_confirm": { + "description": "Vill du l\u00e4gga till Elgato Key Light med serienummer `{serial_number}` till Home Assistant?", + "title": "Uppt\u00e4ckte Elgato Key Light-enhet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/zh-Hant.json b/homeassistant/components/elgato/translations/zh-Hant.json new file mode 100644 index 00000000000..87fe1df0633 --- /dev/null +++ b/homeassistant/components/elgato/translations/zh-Hant.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Elgato Key \u7167\u660e\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", + "connection_error": "Elgato Key \u7167\u660e\u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" + }, + "error": { + "connection_error": "Elgato Key \u7167\u660e\u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" + }, + "flow_title": "Elgato Key \u7167\u660e\uff1a{serial_number}", + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", + "port": "\u901a\u8a0a\u57e0" + }, + "description": "\u8a2d\u5b9a Elgato Key \u7167\u660e\u4ee5\u6574\u5408\u81f3 Home Assistant\u3002", + "title": "\u9023\u7d50 Elgato Key \u7167\u660e\u3002" + }, + "zeroconf_confirm": { + "description": "\u662f\u5426\u8981\u5c07 Elgato Key \u7167\u660e\u5e8f\u865f `{serial_number}` \u65b0\u589e\u81f3 Home Assistant\uff1f", + "title": "\u81ea\u52d5\u63a2\u7d22\u5230 Elgato Key \u7167\u660e\u8a2d\u5099" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/eliqonline/manifest.json b/homeassistant/components/eliqonline/manifest.json index 1cbaa5fa156..6860ff003c4 100644 --- a/homeassistant/components/eliqonline/manifest.json +++ b/homeassistant/components/eliqonline/manifest.json @@ -3,6 +3,5 @@ "name": "Eliqonline", "documentation": "https://www.home-assistant.io/integrations/eliqonline", "requirements": ["eliqonline==1.2.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/elkm1/.translations/ca.json b/homeassistant/components/elkm1/.translations/ca.json deleted file mode 100644 index a426b7a3433..00000000000 --- a/homeassistant/components/elkm1/.translations/ca.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "Ja hi ha un Elk-M1 configurat amb aquesta adre\u00e7a", - "already_configured": "Ja hi ha un Elk-M1 configurat amb aquest prefix" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "address": "Adre\u00e7a IP, domini o port s\u00e8rie (si es est\u00e0 connectat amb una connexi\u00f3 s\u00e8rie).", - "password": "Contrasenya (nom\u00e9s segur).", - "prefix": "Prefix \u00fanic (deixa-ho en blanc si nom\u00e9s tens un \u00fanic controlador Elk-M1).", - "protocol": "Protocol", - "temperature_unit": "Unitats de temperatura que utilitza l'Elk-M1.", - "username": "Nom d'usuari (nom\u00e9s segur)." - }, - "description": "La cadena de car\u00e0cters (string) de l'adre\u00e7a ha de tenir el format: 'adre\u00e7a[:port]' tant per al mode 'segur' com el 'no segur'. Exemple: '192.168.1.1'. El port \u00e9s opcional, per defecte \u00e9s el 2101 pel mode 'no segur' i el 2601 pel 'segur'. Per al protocol s\u00e8rie, l'adre\u00e7a ha de tenir el format 'tty[:baud]'. Exemple: '/dev/ttyS1'. La velocitat en bauds \u00e9s opcional (115200 per defecte).", - "title": "Connexi\u00f3 amb el controlador Elk-M1" - } - }, - "title": "Controlador Elk-M1" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/de.json b/homeassistant/components/elkm1/.translations/de.json deleted file mode 100644 index 40e6cff4460..00000000000 --- a/homeassistant/components/elkm1/.translations/de.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "Ein ElkM1 mit dieser Adresse ist bereits konfiguriert", - "already_configured": "Ein ElkM1 mit diesem Pr\u00e4fix ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "address": "Die IP-Adresse, die Domain oder der serielle Port bei einer seriellen Verbindung.", - "password": "Passwort (Nur sicher).", - "prefix": "Ein eindeutiges Pr\u00e4fix (leer lassen, wenn Sie nur einen ElkM1 haben).", - "protocol": "Protokoll", - "temperature_unit": "Die von ElkM1 verwendete Temperatureinheit.", - "username": "Benutzername (Nur sicher)." - }, - "description": "Die Adresszeichenfolge muss in der Form 'adresse[:port]' f\u00fcr 'sicher' und 'nicht sicher' vorliegen. Beispiel: '192.168.1.1'. Der Port ist optional und standardm\u00e4\u00dfig 2101 f\u00fcr \"nicht sicher\" und 2601 f\u00fcr \"sicher\". F\u00fcr das serielle Protokoll muss die Adresse die Form 'tty[:baud]' haben. Beispiel: '/dev/ttyS1'. Der Baudrate ist optional und standardm\u00e4\u00dfig 115200.", - "title": "Stellen Sie eine Verbindung zur Elk-M1-Steuerung her" - } - }, - "title": "Elk-M1-Steuerung" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/en.json b/homeassistant/components/elkm1/.translations/en.json deleted file mode 100644 index 7671e250bf3..00000000000 --- a/homeassistant/components/elkm1/.translations/en.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "An ElkM1 with this address is already configured", - "already_configured": "An ElkM1 with this prefix is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "address": "The IP address or domain or serial port if connecting via serial.", - "password": "Password (secure only).", - "prefix": "A unique prefix (leave blank if you only have one ElkM1).", - "protocol": "Protocol", - "temperature_unit": "The temperature unit ElkM1 uses.", - "username": "Username (secure only)." - }, - "description": "The address string must be in the form 'address[:port]' for 'secure' and 'non-secure'. Example: '192.168.1.1'. The port is optional and defaults to 2101 for 'non-secure' and 2601 for 'secure'. For the serial protocol, the address must be in the form 'tty[:baud]'. Example: '/dev/ttyS1'. The baud is optional and defaults to 115200.", - "title": "Connect to Elk-M1 Control" - } - }, - "title": "Elk-M1 Control" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/es.json b/homeassistant/components/elkm1/.translations/es.json deleted file mode 100644 index 8fdce004c41..00000000000 --- a/homeassistant/components/elkm1/.translations/es.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "Ya est\u00e1 configurado un Elk-M1 con esta direcci\u00f3n", - "already_configured": "Ya est\u00e1 configurado un Elk-M1 con este prefijo" - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "address": "La direcci\u00f3n IP o dominio o puerto serie si se conecta a trav\u00e9s de serie.", - "password": "Contrase\u00f1a (s\u00f3lo seguro)", - "prefix": "Un prefijo \u00fanico (d\u00e9jalo en blanco si s\u00f3lo tienes un Elk-M1).", - "protocol": "Protocolo", - "temperature_unit": "La temperatura que usa la unidad Elk-M1", - "username": "Usuario (s\u00f3lo seguro)" - }, - "description": "La cadena de direcci\u00f3n debe estar en el formato 'direcci\u00f3n[:puerto]' para 'seguro' y 'no-seguro'. Ejemplo: '192.168.1.1'. El puerto es opcional y el valor predeterminado es 2101 para 'no-seguro' y 2601 para 'seguro'. Para el protocolo serie, la direcci\u00f3n debe tener la forma 'tty[:baudios]'. Ejemplo: '/dev/ttyS1'. Los baudios son opcionales y el valor predeterminado es 115200.", - "title": "Conectar con Control Elk-M1" - } - }, - "title": "Control Elk-M1" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/fr.json b/homeassistant/components/elkm1/.translations/fr.json deleted file mode 100644 index 20ad7b8b007..00000000000 --- a/homeassistant/components/elkm1/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification non valide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "address": "L'adresse IP ou le domaine ou le port s\u00e9rie si vous vous connectez via s\u00e9rie.", - "password": "Mot de passe (s\u00e9curis\u00e9 uniquement).", - "protocol": "Protocole", - "username": "Nom d'utilisateur (s\u00e9curis\u00e9 uniquement)." - }, - "title": "Se connecter a Elk-M1 Control" - } - }, - "title": "Elk-M1 Control" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/it.json b/homeassistant/components/elkm1/.translations/it.json deleted file mode 100644 index c3f1941d8b5..00000000000 --- a/homeassistant/components/elkm1/.translations/it.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "Un ElkM1 con questo indirizzo \u00e8 gi\u00e0 configurato", - "already_configured": "Un ElkM1 con questo prefisso \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "address": "L'indirizzo IP o il dominio o la porta seriale se ci si connette tramite seriale.", - "password": "Password (solo sicura).", - "prefix": "Un prefisso univoco (lasciare vuoto se si dispone di un solo ElkM1).", - "protocol": "Protocollo", - "temperature_unit": "L'unit\u00e0 di temperatura utilizzata da ElkM1.", - "username": "Nome utente (solo sicuro)." - }, - "description": "La stringa di indirizzi deve essere nella forma \"address[:port]\" per \"secure\" e \"non secure\". Esempio: '192.168.1.1.1'. La porta \u00e8 facoltativa e il valore predefinito \u00e8 2101 per 'non sicuro' e 2601 per 'sicuro'. Per il protocollo seriale, l'indirizzo deve essere nella forma 'tty[:baud]'. Esempio: '/dev/ttyS1'. Il baud \u00e8 opzionale e il valore predefinito \u00e8 115200.", - "title": "Collegamento al controllo Elk-M1" - } - }, - "title": "Controllo Elk-M1" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/ko.json b/homeassistant/components/elkm1/.translations/ko.json deleted file mode 100644 index 4ef1e528c22..00000000000 --- a/homeassistant/components/elkm1/.translations/ko.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "\uc774 \uc8fc\uc18c\ub85c ElkM1 \uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_configured": "\uc774 \uc811\ub450\uc0ac\ub85c ElkM1 \uc774 \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": { - "address": "\uc2dc\ub9ac\uc5bc\uc744 \ud1b5\ud574 \uc5f0\uacb0\ud558\ub294 \uacbd\uc6b0\uc758 IP \uc8fc\uc18c \ub098 \ub3c4\uba54\uc778 \ub610\ub294 \uc2dc\ub9ac\uc5bc \ud3ec\ud2b8", - "password": "\ube44\ubc00\ubc88\ud638 (\ubcf4\uc548 \uc804\uc6a9).", - "prefix": "\uace0\uc720\ud55c \uc811\ub450\uc0ac (ElkM1 \uc774 \ud558\ub098\ub9cc \uc788\uc73c\uba74 \ube44\uc6cc\ub450\uc138\uc694).", - "protocol": "\ud504\ub85c\ud1a0\ucf5c", - "temperature_unit": "ElkM1 \uc774 \uc0ac\uc6a9\ud558\ub294 \uc628\ub3c4 \ub2e8\uc704", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984 (\ubcf4\uc548 \uc804\uc6a9)." - }, - "description": "\uc8fc\uc18c \ubb38\uc790\uc5f4\uc740 '\ubcf4\uc548' \ubc0f '\ube44\ubcf4\uc548' \uc758 \uacbd\uc6b0 'address[:port]' \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc608: '192.168.1.1'. \ud3ec\ud2b8\ub294 \uc120\ud0dd \uc0ac\ud56d\uc774\uba70 \uae30\ubcf8\uac12\uc740 '\ube44\ubcf4\uc548' \uc758 \uacbd\uc6b0 2101 \uc774\uace0 '\ubcf4\uc548' \uc758 \uacbd\uc6b0 2601 \uc785\ub2c8\ub2e4. \uc2dc\ub9ac\uc5bc \ud504\ub85c\ud1a0\ucf5c\uc758 \uacbd\uc6b0 \uc8fc\uc18c\ub294 'tty[:baud]' \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc608: '/dev/ttyS1'. \ud1b5\uc2e0\uc18d\ub3c4 \ubc14\uc6b0\ub4dc\ub294 \uc120\ud0dd \uc0ac\ud56d\uc774\uba70 \uae30\ubcf8\uac12\uc740 115200 \uc785\ub2c8\ub2e4.", - "title": "Elk-M1 \uc81c\uc5b4\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Elk-M1 \uc81c\uc5b4" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/lb.json b/homeassistant/components/elkm1/.translations/lb.json deleted file mode 100644 index bb56b4c8154..00000000000 --- a/homeassistant/components/elkm1/.translations/lb.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "Een ElkM1 mat d\u00ebser Adress ass scho konfigur\u00e9iert", - "already_configured": "Een ElkM1 mat d\u00ebsem Prefix ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "address": "IP Adress oder Domain oder Serielle Port falls d'Verbindung seriell ass.", - "password": "Passwuert (n\u00ebmmen ges\u00e9chert)", - "prefix": "Een eenzegaartege Pr\u00e4fix (eidel lossen wann et n\u00ebmmen 1 ElkM1 g\u00ebtt)", - "protocol": "Protokoll", - "temperature_unit": "Temperatur Eenheet d\u00e9i den ElkM1 benotzt.", - "username": "Benotzernumm (n\u00ebmmen ges\u00e9chert)" - }, - "description": "D'Adress muss an der Form 'adress[:port]' fir 'ges\u00e9chert' an 'onges\u00e9chert' sinn. Beispill: '192.168.1.1'. De Port os optionell an ass standardm\u00e9isseg op 2101 fir 'onges\u00e9chert' an op 2601 fir 'ges\u00e9chert' d\u00e9fin\u00e9iert. Fir de serielle Protokoll, muss d'Adress an der Form 'tty[:baud]' sinn. Beispill: '/dev/ttyS1'. Baud Rate ass optionell an ass standardmlisseg op 115200 d\u00e9fin\u00e9iert.", - "title": "Mat Elk-M1 Control verbannen" - } - }, - "title": "Elk-M1 Control" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/no.json b/homeassistant/components/elkm1/.translations/no.json deleted file mode 100644 index 86a4e67801b..00000000000 --- a/homeassistant/components/elkm1/.translations/no.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "En ElkM1 med denne adressen er allerede konfigurert", - "already_configured": "En ElkM1 med dette prefikset er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "address": "IP-adressen eller domenet eller seriell port hvis du kobler til via seriell.", - "password": "Passord (bare sikkert).", - "prefix": "Et unikt prefiks (la v\u00e6re tomt hvis du bare har en ElkM1).", - "protocol": "protokoll", - "temperature_unit": "Temperaturenheten ElkM1 bruker.", - "username": "Brukernavn (bare sikkert)." - }, - "description": "Adressestrengen m\u00e5 v\u00e6re i formen 'adresse [: port]' for 'sikker' og 'ikke-sikker'. Eksempel: '192.168.1.1'. Porten er valgfri og er standard til 2101 for 'ikke-sikker' og 2601 for 'sikker'. For den serielle protokollen m\u00e5 adressen v\u00e6re i formen 'tty [: baud]'. Eksempel: '/ dev / ttyS1'. Baud er valgfri og er standard til 115200.", - "title": "Koble til Elk-M1-kontroll" - } - }, - "title": "Elk-M1 kontroll" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/ru.json b/homeassistant/components/elkm1/.translations/ru.json deleted file mode 100644 index 11e04ad816c..00000000000 --- a/homeassistant/components/elkm1/.translations/ru.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u044d\u0442\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "address": "IP-\u0430\u0434\u0440\u0435\u0441, \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442.", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0446\u0438\u0438 'secure')", - "prefix": "\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 (\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0435\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d ElkM1).", - "protocol": "\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b", - "temperature_unit": "\u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b", - "username": "\u041b\u043e\u0433\u0438\u043d (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0446\u0438\u0438 'secure')" - }, - "description": "\u0421\u0442\u0440\u043e\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0435 'addres[:port]' \u0434\u043b\u044f \u043e\u043f\u0446\u0438\u0439 'secure' \u0438 'non-secure'. \u041f\u0440\u0438\u043c\u0435\u0440: '192.168.1.1'. \u041f\u043e\u0440\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 2101 \u0434\u043b\u044f \u043e\u043f\u0446\u0438\u0438 'non-secure'\u00bb \u0438 2601 \u0434\u043b\u044f \u043e\u043f\u0446\u0438\u0438 'secure'\u00bb. \u0414\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0435 'tty[:baud]'. \u041f\u0440\u0438\u043c\u0435\u0440: '/dev/ttyS1'. Baud \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u0435\u043d 115200.", - "title": "Elk-M1 Control" - } - }, - "title": "Elk-M1 Control" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/.translations/zh-Hant.json b/homeassistant/components/elkm1/.translations/zh-Hant.json deleted file mode 100644 index d40d927ae8f..00000000000 --- a/homeassistant/components/elkm1/.translations/zh-Hant.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "address_already_configured": "\u4f7f\u7528\u6b64\u4f4d\u5740\u7684\u4e00\u7d44 ElkM1 \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_configured": "\u4f7f\u7528\u6b64 Prefix \u7684\u4e00\u7d44 ElkM1 \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "address": "IP \u6216\u7db2\u57df\u540d\u7a31\u3001\u5e8f\u5217\u57e0\uff08\u5047\u5982\u900f\u904e\u5e8f\u5217\u9023\u7dda\uff09\u3002", - "password": "\u5bc6\u78bc\uff08\u50c5\u52a0\u5bc6\uff09\u3002", - "prefix": "\u7368\u4e00\u7684 Prefix\uff08\u5047\u5982\u50c5\u6709\u4e00\u7d44 ElkM1 \u5247\u4fdd\u7559\u7a7a\u767d\uff09\u3002", - "protocol": "\u901a\u8a0a\u5354\u5b9a", - "temperature_unit": "ElkM1 \u4f7f\u7528\u6eab\u5ea6\u55ae\u4f4d\u3002", - "username": "\u4f7f\u7528\u8005\u540d\u7a31\uff08\u50c5\u52a0\u5bc6\uff09\u3002" - }, - "description": "\u52a0\u5bc6\u8207\u975e\u52a0\u5bc6\u4e4b\u4f4d\u5740\u5b57\u4e32\u683c\u5f0f\u5fc5\u9808\u70ba 'address[:port]'\u3002\u4f8b\u5982\uff1a'192.168.1.1'\u3002\u901a\u8a0a\u57e0\u70ba\u9078\u9805\u8f38\u5165\uff0c\u975e\u52a0\u5bc6\u9810\u8a2d\u503c\u70ba 2101\u3001\u52a0\u5bc6\u5247\u70ba 2601\u3002\u5e8f\u5217\u901a\u8a0a\u5354\u5b9a\u3001\u4f4d\u5740\u683c\u5f0f\u5fc5\u9808\u70ba 'tty[:baud]'\u3002\u4f8b\u5982\uff1a'/dev/ttyS1'\u3002\u50b3\u8f38\u7387\u70ba\u9078\u9805\u8f38\u5165\uff0c\u9810\u8a2d\u503c\u70ba 115200\u3002", - "title": "\u9023\u7dda\u81f3 Elk-M1 Control" - } - }, - "title": "Elk-M1 Control" - } -} \ No newline at end of file diff --git a/homeassistant/components/elkm1/alarm_control_panel.py b/homeassistant/components/elkm1/alarm_control_panel.py index d7cd5cf2ad0..b217988f8d8 100644 --- a/homeassistant/components/elkm1/alarm_control_panel.py +++ b/homeassistant/components/elkm1/alarm_control_panel.py @@ -2,9 +2,11 @@ import logging from elkm1_lib.const import AlarmState, ArmedStatus, ArmLevel, ArmUpState +from elkm1_lib.util import username import voluptuous as vol from homeassistant.components.alarm_control_panel import ( + ATTR_CHANGED_BY, FORMAT_NUMBER, AlarmControlPanel, ) @@ -26,6 +28,7 @@ from homeassistant.const import ( ) from homeassistant.helpers import entity_platform import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.restore_state import RestoreEntity from . import ( SERVICE_ALARM_ARM_HOME_INSTANT, @@ -35,7 +38,12 @@ from . import ( ElkAttachedEntity, create_elk_entities, ) -from .const import DOMAIN +from .const import ( + ATTR_CHANGED_BY_ID, + ATTR_CHANGED_BY_KEYPAD, + ATTR_CHANGED_BY_TIME, + DOMAIN, +) ELK_ALARM_SERVICE_SCHEMA = vol.Schema( { @@ -101,13 +109,17 @@ async def async_setup_entry(hass, config_entry, async_add_entities): ) -class ElkArea(ElkAttachedEntity, AlarmControlPanel): +class ElkArea(ElkAttachedEntity, AlarmControlPanel, RestoreEntity): """Representation of an Area / Partition within the ElkM1 alarm panel.""" def __init__(self, element, elk, elk_data): """Initialize Area as Alarm Control Panel.""" super().__init__(element, elk, elk_data) + self._elk = elk self._changed_by_keypad = None + self._changed_by_time = None + self._changed_by_id = None + self._changed_by = None self._state = None async def async_added_to_hass(self): @@ -116,11 +128,28 @@ class ElkArea(ElkAttachedEntity, AlarmControlPanel): for keypad in self._elk.keypads: keypad.add_callback(self._watch_keypad) + # We do not get changed_by back from resync. + last_state = await self.async_get_last_state() + if not last_state: + return + + if ATTR_CHANGED_BY_KEYPAD in last_state.attributes: + self._changed_by_keypad = last_state.attributes[ATTR_CHANGED_BY_KEYPAD] + if ATTR_CHANGED_BY_TIME in last_state.attributes: + self._changed_by_time = last_state.attributes[ATTR_CHANGED_BY_TIME] + if ATTR_CHANGED_BY_ID in last_state.attributes: + self._changed_by_id = last_state.attributes[ATTR_CHANGED_BY_ID] + if ATTR_CHANGED_BY in last_state.attributes: + self._changed_by = last_state.attributes[ATTR_CHANGED_BY] + def _watch_keypad(self, keypad, changeset): if keypad.area != self._element.index: return if changeset.get("last_user") is not None: self._changed_by_keypad = keypad.name + self._changed_by_time = keypad.last_user_time.isoformat() + self._changed_by_id = keypad.last_user + 1 + self._changed_by = username(self._elk, keypad.last_user) self.async_write_ha_state() @property @@ -152,9 +181,16 @@ class ElkArea(ElkAttachedEntity, AlarmControlPanel): attrs["arm_up_state"] = ArmUpState(elmt.arm_up_state).name.lower() if elmt.alarm_state is not None: attrs["alarm_state"] = AlarmState(elmt.alarm_state).name.lower() - attrs["changed_by_keypad"] = self._changed_by_keypad + attrs[ATTR_CHANGED_BY_KEYPAD] = self._changed_by_keypad + attrs[ATTR_CHANGED_BY_TIME] = self._changed_by_time + attrs[ATTR_CHANGED_BY_ID] = self._changed_by_id return attrs + @property + def changed_by(self): + """Last change triggered by.""" + return self._changed_by + def _element_changed(self, element, changeset): elk_state_to_hass_state = { ArmedStatus.DISARMED.value: STATE_ALARM_DISARMED, diff --git a/homeassistant/components/elkm1/const.py b/homeassistant/components/elkm1/const.py index 3d9d433617d..27b6445a4c1 100644 --- a/homeassistant/components/elkm1/const.py +++ b/homeassistant/components/elkm1/const.py @@ -32,3 +32,8 @@ ELK_ELEMENTS = { CONF_THERMOSTAT: Max.THERMOSTATS.value, CONF_ZONE: Max.ZONES.value, } + + +ATTR_CHANGED_BY_KEYPAD = "changed_by_keypad" +ATTR_CHANGED_BY_ID = "changed_by_id" +ATTR_CHANGED_BY_TIME = "changed_by_time" diff --git a/homeassistant/components/elkm1/manifest.json b/homeassistant/components/elkm1/manifest.json index 17b016fcb8b..5a88792208a 100644 --- a/homeassistant/components/elkm1/manifest.json +++ b/homeassistant/components/elkm1/manifest.json @@ -2,12 +2,7 @@ "domain": "elkm1", "name": "Elk-M1 Control", "documentation": "https://www.home-assistant.io/integrations/elkm1", - "requirements": [ - "elkm1-lib==0.7.17" - ], - "dependencies": [], - "codeowners": [ - "@bdraco" - ], + "requirements": ["elkm1-lib==0.7.17"], + "codeowners": ["@bdraco"], "config_flow": true } diff --git a/homeassistant/components/elkm1/scene.py b/homeassistant/components/elkm1/scene.py index 1f894cc7681..208779b99d0 100644 --- a/homeassistant/components/elkm1/scene.py +++ b/homeassistant/components/elkm1/scene.py @@ -1,4 +1,6 @@ """Support for control of ElkM1 tasks ("macros").""" +from typing import Any + from homeassistant.components.scene import Scene from . import ElkAttachedEntity, create_elk_entities @@ -17,6 +19,6 @@ async def async_setup_entry(hass, config_entry, async_add_entities): class ElkTask(ElkAttachedEntity, Scene): """Elk-M1 task as scene.""" - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate the task.""" self._element.activate() diff --git a/homeassistant/components/elkm1/sensor.py b/homeassistant/components/elkm1/sensor.py index 79987d806a1..20efb3e956d 100644 --- a/homeassistant/components/elkm1/sensor.py +++ b/homeassistant/components/elkm1/sensor.py @@ -7,6 +7,8 @@ from elkm1_lib.const import ( ) from elkm1_lib.util import pretty_const, username +from homeassistant.const import VOLT + from . import ElkAttachedEntity, create_elk_entities from .const import DOMAIN @@ -195,7 +197,7 @@ class ElkZone(ElkSensor): if self._element.definition == ZoneType.TEMPERATURE.value: return self._temperature_unit if self._element.definition == ZoneType.ANALOG_ZONE.value: - return "V" + return VOLT return None def _element_changed(self, element, changeset): diff --git a/homeassistant/components/elkm1/services.yaml b/homeassistant/components/elkm1/services.yaml index fbcbf7edc6d..beb4427d14c 100644 --- a/homeassistant/components/elkm1/services.yaml +++ b/homeassistant/components/elkm1/services.yaml @@ -3,7 +3,7 @@ alarm_arm_home_instant: fields: entity_id: description: Name of alarm control panel to arm. - example: 'alarm_control_panel.main' + example: "alarm_control_panel.main" code: description: An code to arm the alarm control panel. example: 1234 @@ -13,7 +13,7 @@ alarm_arm_night_instant: fields: entity_id: description: Name of alarm control panel to arm. - example: 'alarm_control_panel.main' + example: "alarm_control_panel.main" code: description: An code to arm the alarm control panel. example: 1234 @@ -23,7 +23,7 @@ alarm_arm_vacation: fields: entity_id: description: Name of alarm control panel to arm. - example: 'alarm_control_panel.main' + example: "alarm_control_panel.main" code: description: An code to arm the alarm control panel. example: 1234 @@ -33,7 +33,7 @@ alarm_display_message: fields: entity_id: description: Name of alarm control panel to display messages on. - example: 'alarm_control_panel.main' + example: "alarm_control_panel.main" clear: description: 0=clear message, 1=clear message with * key, 2=Display until timeout; default 2 example: 1 diff --git a/homeassistant/components/elkm1/strings.json b/homeassistant/components/elkm1/strings.json index a5246a004c3..be7d0aa1d74 100644 --- a/homeassistant/components/elkm1/strings.json +++ b/homeassistant/components/elkm1/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Elk-M1 Control", "step": { "user": { "title": "Connect to Elk-M1 Control", @@ -25,4 +24,4 @@ "address_already_configured": "An ElkM1 with this address is already configured" } } -} \ No newline at end of file +} diff --git a/homeassistant/components/elkm1/translations/ca.json b/homeassistant/components/elkm1/translations/ca.json new file mode 100644 index 00000000000..73ca29cdca0 --- /dev/null +++ b/homeassistant/components/elkm1/translations/ca.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "Ja hi ha un Elk-M1 configurat amb aquesta adre\u00e7a", + "already_configured": "Ja hi ha un Elk-M1 configurat amb aquest prefix" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "address": "Adre\u00e7a IP, domini o port s\u00e8rie (si es est\u00e0 connectat amb una connexi\u00f3 s\u00e8rie).", + "password": "Contrasenya (nom\u00e9s segur).", + "prefix": "Prefix \u00fanic (deixa-ho en blanc si nom\u00e9s tens un \u00fanic controlador Elk-M1).", + "protocol": "Protocol", + "temperature_unit": "Unitats de temperatura que utilitza l'Elk-M1.", + "username": "Nom d'usuari (nom\u00e9s segur)." + }, + "description": "La cadena de car\u00e0cters (string) de l'adre\u00e7a ha de tenir el format: 'adre\u00e7a[:port]' tant per al mode 'segur' com el 'no segur'. Exemple: '192.168.1.1'. El port \u00e9s opcional, per defecte \u00e9s el 2101 pel mode 'no segur' i el 2601 pel 'segur'. Per al protocol s\u00e8rie, l'adre\u00e7a ha de tenir el format 'tty[:baud]'. Exemple: '/dev/ttyS1'. La velocitat en bauds \u00e9s opcional (115200 per defecte).", + "title": "Connexi\u00f3 amb el controlador Elk-M1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/de.json b/homeassistant/components/elkm1/translations/de.json new file mode 100644 index 00000000000..1574af9fa6c --- /dev/null +++ b/homeassistant/components/elkm1/translations/de.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "Ein ElkM1 mit dieser Adresse ist bereits konfiguriert", + "already_configured": "Ein ElkM1 mit diesem Pr\u00e4fix ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "address": "Die IP-Adresse, die Domain oder der serielle Port bei einer seriellen Verbindung.", + "password": "Passwort (Nur sicher).", + "prefix": "Ein eindeutiges Pr\u00e4fix (leer lassen, wenn Sie nur einen ElkM1 haben).", + "protocol": "Protokoll", + "temperature_unit": "Die von ElkM1 verwendete Temperatureinheit.", + "username": "Benutzername (Nur sicher)." + }, + "description": "Die Adresszeichenfolge muss in der Form 'adresse[:port]' f\u00fcr 'sicher' und 'nicht sicher' vorliegen. Beispiel: '192.168.1.1'. Der Port ist optional und standardm\u00e4\u00dfig 2101 f\u00fcr \"nicht sicher\" und 2601 f\u00fcr \"sicher\". F\u00fcr das serielle Protokoll muss die Adresse die Form 'tty[:baud]' haben. Beispiel: '/dev/ttyS1'. Der Baudrate ist optional und standardm\u00e4\u00dfig 115200.", + "title": "Stellen Sie eine Verbindung zur Elk-M1-Steuerung her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/en.json b/homeassistant/components/elkm1/translations/en.json new file mode 100644 index 00000000000..784a9feb642 --- /dev/null +++ b/homeassistant/components/elkm1/translations/en.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "An ElkM1 with this address is already configured", + "already_configured": "An ElkM1 with this prefix is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "address": "The IP address or domain or serial port if connecting via serial.", + "password": "Password (secure only).", + "prefix": "A unique prefix (leave blank if you only have one ElkM1).", + "protocol": "Protocol", + "temperature_unit": "The temperature unit ElkM1 uses.", + "username": "Username (secure only)." + }, + "description": "The address string must be in the form 'address[:port]' for 'secure' and 'non-secure'. Example: '192.168.1.1'. The port is optional and defaults to 2101 for 'non-secure' and 2601 for 'secure'. For the serial protocol, the address must be in the form 'tty[:baud]'. Example: '/dev/ttyS1'. The baud is optional and defaults to 115200.", + "title": "Connect to Elk-M1 Control" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/es.json b/homeassistant/components/elkm1/translations/es.json new file mode 100644 index 00000000000..9dc4f4839b6 --- /dev/null +++ b/homeassistant/components/elkm1/translations/es.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "Ya est\u00e1 configurado un Elk-M1 con esta direcci\u00f3n", + "already_configured": "Ya est\u00e1 configurado un Elk-M1 con este prefijo" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "address": "La direcci\u00f3n IP o dominio o puerto serie si se conecta a trav\u00e9s de serie.", + "password": "Contrase\u00f1a (s\u00f3lo seguro)", + "prefix": "Un prefijo \u00fanico (d\u00e9jalo en blanco si s\u00f3lo tienes un Elk-M1).", + "protocol": "Protocolo", + "temperature_unit": "La temperatura que usa la unidad Elk-M1", + "username": "Usuario (s\u00f3lo seguro)" + }, + "description": "La cadena de direcci\u00f3n debe estar en el formato 'direcci\u00f3n[:puerto]' para 'seguro' y 'no-seguro'. Ejemplo: '192.168.1.1'. El puerto es opcional y el valor predeterminado es 2101 para 'no-seguro' y 2601 para 'seguro'. Para el protocolo serie, la direcci\u00f3n debe tener la forma 'tty[:baudios]'. Ejemplo: '/dev/ttyS1'. Los baudios son opcionales y el valor predeterminado es 115200.", + "title": "Conectar con Control Elk-M1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/fr.json b/homeassistant/components/elkm1/translations/fr.json new file mode 100644 index 00000000000..27eac521430 --- /dev/null +++ b/homeassistant/components/elkm1/translations/fr.json @@ -0,0 +1,24 @@ +{ + "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", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "address": "L'adresse IP ou le domaine ou le port s\u00e9rie si vous vous connectez via s\u00e9rie.", + "password": "Mot de passe (s\u00e9curis\u00e9 uniquement).", + "protocol": "Protocole", + "username": "Nom d'utilisateur (s\u00e9curis\u00e9 uniquement)." + }, + "title": "Se connecter a Elk-M1 Control" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/it.json b/homeassistant/components/elkm1/translations/it.json new file mode 100644 index 00000000000..c9f3f0e1876 --- /dev/null +++ b/homeassistant/components/elkm1/translations/it.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "Un ElkM1 con questo indirizzo \u00e8 gi\u00e0 configurato", + "already_configured": "Un ElkM1 con questo prefisso \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "address": "L'indirizzo IP o il dominio o la porta seriale se ci si connette tramite seriale.", + "password": "Password (solo sicura).", + "prefix": "Un prefisso univoco (lasciare vuoto se si dispone di un solo ElkM1).", + "protocol": "Protocollo", + "temperature_unit": "L'unit\u00e0 di temperatura utilizzata da ElkM1.", + "username": "Nome utente (solo sicuro)." + }, + "description": "La stringa di indirizzi deve essere nella forma \"address[:port]\" per \"secure\" e \"non secure\". Esempio: '192.168.1.1.1'. La porta \u00e8 facoltativa e il valore predefinito \u00e8 2101 per 'non sicuro' e 2601 per 'sicuro'. Per il protocollo seriale, l'indirizzo deve essere nella forma 'tty[:baud]'. Esempio: '/dev/ttyS1'. Il baud \u00e8 opzionale e il valore predefinito \u00e8 115200.", + "title": "Collegamento al controllo Elk-M1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/ko.json b/homeassistant/components/elkm1/translations/ko.json new file mode 100644 index 00000000000..96837972007 --- /dev/null +++ b/homeassistant/components/elkm1/translations/ko.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "\uc774 \uc8fc\uc18c\ub85c ElkM1 \uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_configured": "\uc774 \uc811\ub450\uc0ac\ub85c ElkM1 \uc774 \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": { + "address": "\uc2dc\ub9ac\uc5bc\uc744 \ud1b5\ud574 \uc5f0\uacb0\ud558\ub294 \uacbd\uc6b0\uc758 IP \uc8fc\uc18c \ub098 \ub3c4\uba54\uc778 \ub610\ub294 \uc2dc\ub9ac\uc5bc \ud3ec\ud2b8", + "password": "\ube44\ubc00\ubc88\ud638 (\ubcf4\uc548 \uc804\uc6a9).", + "prefix": "\uace0\uc720\ud55c \uc811\ub450\uc0ac (ElkM1 \uc774 \ud558\ub098\ub9cc \uc788\uc73c\uba74 \ube44\uc6cc\ub450\uc138\uc694).", + "protocol": "\ud504\ub85c\ud1a0\ucf5c", + "temperature_unit": "ElkM1 \uc774 \uc0ac\uc6a9\ud558\ub294 \uc628\ub3c4 \ub2e8\uc704", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984 (\ubcf4\uc548 \uc804\uc6a9)." + }, + "description": "\uc8fc\uc18c \ubb38\uc790\uc5f4\uc740 '\ubcf4\uc548' \ubc0f '\ube44\ubcf4\uc548' \uc758 \uacbd\uc6b0 'address[:port]' \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc608: '192.168.1.1'. \ud3ec\ud2b8\ub294 \uc120\ud0dd \uc0ac\ud56d\uc774\uba70 \uae30\ubcf8\uac12\uc740 '\ube44\ubcf4\uc548' \uc758 \uacbd\uc6b0 2101 \uc774\uace0 '\ubcf4\uc548' \uc758 \uacbd\uc6b0 2601 \uc785\ub2c8\ub2e4. \uc2dc\ub9ac\uc5bc \ud504\ub85c\ud1a0\ucf5c\uc758 \uacbd\uc6b0 \uc8fc\uc18c\ub294 'tty[:baud]' \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc608: '/dev/ttyS1'. \ud1b5\uc2e0\uc18d\ub3c4 \ubc14\uc6b0\ub4dc\ub294 \uc120\ud0dd \uc0ac\ud56d\uc774\uba70 \uae30\ubcf8\uac12\uc740 115200 \uc785\ub2c8\ub2e4.", + "title": "Elk-M1 \uc81c\uc5b4\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/lb.json b/homeassistant/components/elkm1/translations/lb.json new file mode 100644 index 00000000000..6e1af6353f8 --- /dev/null +++ b/homeassistant/components/elkm1/translations/lb.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "Een ElkM1 mat d\u00ebser Adress ass scho konfigur\u00e9iert", + "already_configured": "Een ElkM1 mat d\u00ebsem Prefix ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "address": "IP Adress oder Domain oder Serielle Port falls d'Verbindung seriell ass.", + "password": "Passwuert (n\u00ebmmen ges\u00e9chert)", + "prefix": "Een eenzegaartege Pr\u00e4fix (eidel lossen wann et n\u00ebmmen 1 ElkM1 g\u00ebtt)", + "protocol": "Protokoll", + "temperature_unit": "Temperatur Eenheet d\u00e9i den ElkM1 benotzt.", + "username": "Benotzernumm (n\u00ebmmen ges\u00e9chert)" + }, + "description": "D'Adress muss an der Form 'adress[:port]' fir 'ges\u00e9chert' an 'onges\u00e9chert' sinn. Beispill: '192.168.1.1'. De Port os optionell an ass standardm\u00e9isseg op 2101 fir 'onges\u00e9chert' an op 2601 fir 'ges\u00e9chert' d\u00e9fin\u00e9iert. Fir de serielle Protokoll, muss d'Adress an der Form 'tty[:baud]' sinn. Beispill: '/dev/ttyS1'. Baud Rate ass optionell an ass standardmlisseg op 115200 d\u00e9fin\u00e9iert.", + "title": "Mat Elk-M1 Control verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/no.json b/homeassistant/components/elkm1/translations/no.json new file mode 100644 index 00000000000..6870ca4926d --- /dev/null +++ b/homeassistant/components/elkm1/translations/no.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "En ElkM1 med denne adressen er allerede konfigurert", + "already_configured": "En ElkM1 med dette prefikset er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "address": "IP-adressen eller domenet eller seriell port hvis du kobler til via seriell.", + "password": "Passord (bare sikkert).", + "prefix": "Et unikt prefiks (la v\u00e6re tomt hvis du bare har en ElkM1).", + "protocol": "protokoll", + "temperature_unit": "Temperaturenheten ElkM1 bruker.", + "username": "Brukernavn (bare sikkert)." + }, + "description": "Adressestrengen m\u00e5 v\u00e6re i formen 'adresse [: port]' for 'sikker' og 'ikke-sikker'. Eksempel: '192.168.1.1'. Porten er valgfri og er standard til 2101 for 'ikke-sikker' og 2601 for 'sikker'. For den serielle protokollen m\u00e5 adressen v\u00e6re i formen 'tty [: baud]'. Eksempel: '/ dev / ttyS1'. Baud er valgfri og er standard til 115200.", + "title": "Koble til Elk-M1-kontroll" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/pl.json b/homeassistant/components/elkm1/translations/pl.json new file mode 100644 index 00000000000..3a445b1008c --- /dev/null +++ b/homeassistant/components/elkm1/translations/pl.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "ElkM1 z tym adresem jest ju\u017c skonfigurowany.", + "already_configured": "ElkM1 z tym prefiksem jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "address": "Adres IP, domena lub port szeregowy w przypadku po\u0142\u0105czenia szeregowego.", + "password": "Has\u0142o (tylko bezpieczne).", + "prefix": "Unikatowy prefiks (pozostaw pusty, je\u015bli masz tylko jeden ElkM1).", + "protocol": "Protok\u00f3\u0142", + "temperature_unit": "Jednostka temperatury u\u017cywanej przez ElkM1.", + "username": "Nazwa u\u017cytkownika (tylko bezpieczne)" + }, + "description": "Adres musi by\u0107 w postaci 'adres[:port]' dla tryb\u00f3w 'zabezpieczony' i 'niezabezpieczony'. Przyk\u0142ad: '192.168.1.1'. Port jest opcjonalny i domy\u015blnie ustawiony na 2101 dla po\u0142\u0105cze\u0144 'niezabezpieczonych' i 2601 dla 'zabezpieczonych'. W przypadku protoko\u0142u szeregowego adres musi by\u0107 w formie 'tty[:baudrate]'. Przyk\u0142ad: '/dev/ttyS1'. Warto\u015b\u0107 transmisji jest opcjonalna i domy\u015blnie wynosi 115200.", + "title": "Pod\u0142\u0105czenie do sterownika Elk-M1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/pt.json b/homeassistant/components/elkm1/translations/pt.json new file mode 100644 index 00000000000..83e574aa2e2 --- /dev/null +++ b/homeassistant/components/elkm1/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe (segura apenas)", + "username": "Nome de utilizador (apenas seguro)." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/ru.json b/homeassistant/components/elkm1/translations/ru.json new file mode 100644 index 00000000000..45877e16992 --- /dev/null +++ b/homeassistant/components/elkm1/translations/ru.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u044d\u0442\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "address": "IP-\u0430\u0434\u0440\u0435\u0441, \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442.", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 'secure')", + "prefix": "\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 (\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0435\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d ElkM1).", + "protocol": "\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b", + "temperature_unit": "\u0415\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b", + "username": "\u041b\u043e\u0433\u0438\u043d (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 'secure')" + }, + "description": "\u0421\u0442\u0440\u043e\u043a\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 'addres[:port]' (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: '192.168.1.1'). \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'port' \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 2101 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 'non-secure' \u0438 2601 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 'secure'. \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 'serial' \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 'tty[:baud]' (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: '/dev/ttyS1'). \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'baud' \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u0435\u043d 115200.", + "title": "Elk-M1 Control" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/sl.json b/homeassistant/components/elkm1/translations/sl.json new file mode 100644 index 00000000000..a815011988e --- /dev/null +++ b/homeassistant/components/elkm1/translations/sl.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "ElkM1 s tem naslovom je \u017ee konfiguriran", + "already_configured": "ElkM1 s to predpono je \u017ee konfiguriran" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "address": "IP naslov, domena ali serijska vrata, \u010de se povezujete prek serijske povezave.", + "password": "Geslo (samo varno).", + "prefix": "Edinstvena predpona (pustite prazno, \u010de imate samo en ElkM1).", + "protocol": "Protokol", + "temperature_unit": "Temperaturna enota, ki jo uporablja ElkM1.", + "username": "Uporabni\u0161ko ime (samo varno)." + }, + "description": "Naslov mora biti v obliki \"naslov[:port]\" za \"varno\" in \"ne-varno'. Primer: '192.168.1.1'. Vrata so neobvezna in so privzeto nastavljena na 2101 za \"non-secure\" in 2601 za 'varno'. Za serijski protokol, mora biti naslov v obliki \" tty[:baud]'. Primer: '/dev/ttyS1'. Baud je neobvezen in privzeto nastavljen na 115200.", + "title": "Pove\u017eite se z Elk-M1 Control" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/zh-Hant.json b/homeassistant/components/elkm1/translations/zh-Hant.json new file mode 100644 index 00000000000..7362ec42e93 --- /dev/null +++ b/homeassistant/components/elkm1/translations/zh-Hant.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "\u4f7f\u7528\u6b64\u4f4d\u5740\u7684\u4e00\u7d44 ElkM1 \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_configured": "\u4f7f\u7528\u6b64 Prefix \u7684\u4e00\u7d44 ElkM1 \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "address": "IP \u6216\u7db2\u57df\u540d\u7a31\u3001\u5e8f\u5217\u57e0\uff08\u5047\u5982\u900f\u904e\u5e8f\u5217\u9023\u7dda\uff09\u3002", + "password": "\u5bc6\u78bc\uff08\u50c5\u52a0\u5bc6\uff09\u3002", + "prefix": "\u7368\u4e00\u7684 Prefix\uff08\u5047\u5982\u50c5\u6709\u4e00\u7d44 ElkM1 \u5247\u4fdd\u7559\u7a7a\u767d\uff09\u3002", + "protocol": "\u901a\u8a0a\u5354\u5b9a", + "temperature_unit": "ElkM1 \u4f7f\u7528\u6eab\u5ea6\u55ae\u4f4d\u3002", + "username": "\u4f7f\u7528\u8005\u540d\u7a31\uff08\u50c5\u52a0\u5bc6\uff09\u3002" + }, + "description": "\u52a0\u5bc6\u8207\u975e\u52a0\u5bc6\u4e4b\u4f4d\u5740\u5b57\u4e32\u683c\u5f0f\u5fc5\u9808\u70ba 'address[:port]'\u3002\u4f8b\u5982\uff1a'192.168.1.1'\u3002\u901a\u8a0a\u57e0\u70ba\u9078\u9805\u8f38\u5165\uff0c\u975e\u52a0\u5bc6\u9810\u8a2d\u503c\u70ba 2101\u3001\u52a0\u5bc6\u5247\u70ba 2601\u3002\u5e8f\u5217\u901a\u8a0a\u5354\u5b9a\u3001\u4f4d\u5740\u683c\u5f0f\u5fc5\u9808\u70ba 'tty[:baud]'\u3002\u4f8b\u5982\uff1a'/dev/ttyS1'\u3002\u50b3\u8f38\u7387\u70ba\u9078\u9805\u8f38\u5165\uff0c\u9810\u8a2d\u503c\u70ba 115200\u3002", + "title": "\u9023\u7dda\u81f3 Elk-M1 Control" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elv/manifest.json b/homeassistant/components/elv/manifest.json index d5fb1eb251b..89b3751685a 100644 --- a/homeassistant/components/elv/manifest.json +++ b/homeassistant/components/elv/manifest.json @@ -2,7 +2,6 @@ "domain": "elv", "name": "ELV PCA", "documentation": "https://www.home-assistant.io/integrations/pca", - "dependencies": [], "codeowners": ["@majuss"], "requirements": ["pypca==0.0.7"] } diff --git a/homeassistant/components/emby/manifest.json b/homeassistant/components/emby/manifest.json index ec50b663c01..c639d193298 100644 --- a/homeassistant/components/emby/manifest.json +++ b/homeassistant/components/emby/manifest.json @@ -3,6 +3,5 @@ "name": "Emby", "documentation": "https://www.home-assistant.io/integrations/emby", "requirements": ["pyemby==1.6"], - "dependencies": [], "codeowners": ["@mezz64"] } diff --git a/homeassistant/components/emby/media_player.py b/homeassistant/components/emby/media_player.py index e063fc49f2f..0a14799ce24 100644 --- a/homeassistant/components/emby/media_player.py +++ b/homeassistant/components/emby/media_player.py @@ -71,7 +71,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= host = config.get(CONF_HOST) key = config.get(CONF_API_KEY) port = config.get(CONF_PORT) - ssl = config.get(CONF_SSL) + ssl = config[CONF_SSL] if port is None: port = DEFAULT_SSL_PORT if ssl else DEFAULT_PORT @@ -166,7 +166,7 @@ class EmbyDevice(MediaPlayerDevice): self.media_status_last_position = None self.media_status_received = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def available(self): diff --git a/homeassistant/components/emoncms/manifest.json b/homeassistant/components/emoncms/manifest.json index b9c012d6e73..6ea57cf3704 100644 --- a/homeassistant/components/emoncms/manifest.json +++ b/homeassistant/components/emoncms/manifest.json @@ -2,7 +2,5 @@ "domain": "emoncms", "name": "Emoncms", "documentation": "https://www.home-assistant.io/integrations/emoncms", - "requirements": [], - "dependencies": [], "codeowners": ["@borpin"] } diff --git a/homeassistant/components/emoncms/sensor.py b/homeassistant/components/emoncms/sensor.py index c0754405840..dca9c870022 100644 --- a/homeassistant/components/emoncms/sensor.py +++ b/homeassistant/components/emoncms/sensor.py @@ -13,6 +13,7 @@ from homeassistant.const import ( CONF_UNIT_OF_MEASUREMENT, CONF_URL, CONF_VALUE_TEMPLATE, + HTTP_OK, POWER_WATT, STATE_UNKNOWN, ) @@ -245,7 +246,7 @@ class EmonCmsData: _LOGGER.error(exception) return else: - if req.status_code == 200: + if req.status_code == HTTP_OK: self.data = req.json() else: _LOGGER.error( diff --git a/homeassistant/components/emoncms_history/__init__.py b/homeassistant/components/emoncms_history/__init__.py index fd38da1cac1..85b48c55755 100644 --- a/homeassistant/components/emoncms_history/__init__.py +++ b/homeassistant/components/emoncms_history/__init__.py @@ -10,6 +10,7 @@ from homeassistant.const import ( CONF_SCAN_INTERVAL, CONF_URL, CONF_WHITELIST, + HTTP_OK, STATE_UNAVAILABLE, STATE_UNKNOWN, ) @@ -58,7 +59,7 @@ def setup(hass, config): _LOGGER.error("Error saving data '%s' to '%s'", payload, fullurl) else: - if req.status_code != 200: + if req.status_code != HTTP_OK: _LOGGER.error( "Error saving data %s to %s (http status code = %d)", payload, diff --git a/homeassistant/components/emoncms_history/manifest.json b/homeassistant/components/emoncms_history/manifest.json index 34270b6e209..9c3066db215 100644 --- a/homeassistant/components/emoncms_history/manifest.json +++ b/homeassistant/components/emoncms_history/manifest.json @@ -2,7 +2,5 @@ "domain": "emoncms_history", "name": "Emoncms History", "documentation": "https://www.home-assistant.io/integrations/emoncms_history", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/emulated_hue/__init__.py b/homeassistant/components/emulated_hue/__init__.py index 6b234a9df7b..da6e7acab40 100644 --- a/homeassistant/components/emulated_hue/__init__.py +++ b/homeassistant/components/emulated_hue/__init__.py @@ -228,9 +228,9 @@ class Config: self.entities = conf.get(CONF_ENTITIES, {}) - self._entities_with_hidden_attr_in_config = dict() + self._entities_with_hidden_attr_in_config = {} for entity_id in self.entities: - hidden_value = self.entities[entity_id].get(CONF_ENTITY_HIDDEN, None) + hidden_value = self.entities[entity_id].get(CONF_ENTITY_HIDDEN) if hidden_value is not None: self._entities_with_hidden_attr_in_config[entity_id] = hidden_value diff --git a/homeassistant/components/emulated_hue/hue_api.py b/homeassistant/components/emulated_hue/hue_api.py index 06a57960898..9637b0fb371 100644 --- a/homeassistant/components/emulated_hue/hue_api.py +++ b/homeassistant/components/emulated_hue/hue_api.py @@ -367,7 +367,7 @@ class HueOneLightChangeView(HomeAssistantView): cover.DOMAIN, climate.DOMAIN, ]: - # Convert 0-255 to 0-100 + # Convert 0-254 to 0-100 level = (parsed[STATE_BRIGHTNESS] / HUE_API_STATE_BRI_MAX) * 100 parsed[STATE_BRIGHTNESS] = round(level) parsed[STATE_ON] = True @@ -390,7 +390,9 @@ class HueOneLightChangeView(HomeAssistantView): if parsed[STATE_ON]: if entity_features & SUPPORT_BRIGHTNESS: if parsed[STATE_BRIGHTNESS] is not None: - data[ATTR_BRIGHTNESS] = parsed[STATE_BRIGHTNESS] + data[ATTR_BRIGHTNESS] = hue_brightness_to_hass( + parsed[STATE_BRIGHTNESS] + ) if entity_features & SUPPORT_COLOR: if any((parsed[STATE_HUE], parsed[STATE_SATURATION])): @@ -536,8 +538,10 @@ def get_entity_state(config, entity): data[STATE_ON] = entity.state != STATE_OFF if data[STATE_ON]: - data[STATE_BRIGHTNESS] = entity.attributes.get(ATTR_BRIGHTNESS, 0) - hue_sat = entity.attributes.get(ATTR_HS_COLOR, None) + data[STATE_BRIGHTNESS] = hass_to_hue_brightness( + entity.attributes.get(ATTR_BRIGHTNESS, 0) + ) + hue_sat = entity.attributes.get(ATTR_HS_COLOR) if hue_sat is not None: hue = hue_sat[0] sat = hue_sat[1] @@ -563,32 +567,32 @@ def get_entity_state(config, entity): pass elif entity.domain == climate.DOMAIN: temperature = entity.attributes.get(ATTR_TEMPERATURE, 0) - # Convert 0-100 to 0-255 - data[STATE_BRIGHTNESS] = round(temperature * 255 / 100) + # Convert 0-100 to 0-254 + data[STATE_BRIGHTNESS] = round(temperature * HUE_API_STATE_BRI_MAX / 100) elif entity.domain == media_player.DOMAIN: level = entity.attributes.get( ATTR_MEDIA_VOLUME_LEVEL, 1.0 if data[STATE_ON] else 0.0 ) - # Convert 0.0-1.0 to 0-255 - data[STATE_BRIGHTNESS] = round(min(1.0, level) * 255) + # Convert 0.0-1.0 to 0-254 + data[STATE_BRIGHTNESS] = round(min(1.0, level) * HUE_API_STATE_BRI_MAX) elif entity.domain == fan.DOMAIN: speed = entity.attributes.get(ATTR_SPEED, 0) - # Convert 0.0-1.0 to 0-255 + # Convert 0.0-1.0 to 0-254 data[STATE_BRIGHTNESS] = 0 if speed == SPEED_LOW: data[STATE_BRIGHTNESS] = 85 elif speed == SPEED_MEDIUM: data[STATE_BRIGHTNESS] = 170 elif speed == SPEED_HIGH: - data[STATE_BRIGHTNESS] = 255 + data[STATE_BRIGHTNESS] = HUE_API_STATE_BRI_MAX elif entity.domain == cover.DOMAIN: level = entity.attributes.get(ATTR_CURRENT_POSITION, 0) - data[STATE_BRIGHTNESS] = round(level / 100 * 255) + data[STATE_BRIGHTNESS] = round(level / 100 * HUE_API_STATE_BRI_MAX) else: data = cached_state # Make sure brightness is valid if data[STATE_BRIGHTNESS] is None: - data[STATE_BRIGHTNESS] = 255 if data[STATE_ON] else 0 + data[STATE_BRIGHTNESS] = HUE_API_STATE_BRI_MAX if data[STATE_ON] else 0 # Make sure hue/saturation are valid if (data[STATE_HUE] is None) or (data[STATE_SATURATION] is None): @@ -723,3 +727,13 @@ def create_list_of_entities(config, request): json_response[number] = entity_to_json(config, entity) return json_response + + +def hue_brightness_to_hass(value): + """Convert hue brightness 1..254 to hass format 0..255.""" + return min(255, round((value / HUE_API_STATE_BRI_MAX) * 255)) + + +def hass_to_hue_brightness(value): + """Convert hass brightness 0..255 to hue 1..254 scale.""" + return max(1, round((value / 255) * HUE_API_STATE_BRI_MAX)) diff --git a/homeassistant/components/emulated_hue/manifest.json b/homeassistant/components/emulated_hue/manifest.json index 37848e6f306..fdff91630f3 100644 --- a/homeassistant/components/emulated_hue/manifest.json +++ b/homeassistant/components/emulated_hue/manifest.json @@ -3,7 +3,6 @@ "name": "Emulated Hue", "documentation": "https://www.home-assistant.io/integrations/emulated_hue", "requirements": ["aiohttp_cors==0.7.0"], - "dependencies": [], "after_dependencies": ["http"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/emulated_hue/upnp.py b/homeassistant/components/emulated_hue/upnp.py index 0ee336de670..c10fb3b826b 100644 --- a/homeassistant/components/emulated_hue/upnp.py +++ b/homeassistant/components/emulated_hue/upnp.py @@ -123,7 +123,7 @@ USN: uuid:Socket-1_0-221438K0100073::urn:schemas-upnp-org:device:basic:1 else: # most likely the timeout, so check for interrupt continue - except socket.error as ex: + except OSError as ex: if self._interrupted: clean_socket_close(ssdp_socket) return diff --git a/homeassistant/components/emulated_roku/.translations/bg.json b/homeassistant/components/emulated_roku/.translations/bg.json deleted file mode 100644 index ddb3c3a36a9..00000000000 --- a/homeassistant/components/emulated_roku/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430" - }, - "step": { - "user": { - "data": { - "advertise_ip": "\u0420\u0430\u0437\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u0439 IP \u0430\u0434\u0440\u0435\u0441", - "advertise_port": "\u0420\u0430\u0437\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u0439 \u043f\u043e\u0440\u0442", - "host_ip": "\u0410\u0434\u0440\u0435\u0441", - "listen_port": "\u0421\u043b\u0443\u0448\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442", - "name": "\u0418\u043c\u0435", - "upnp_bind_multicast": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0443\u043b\u0442\u0438\u043a\u0430\u0441\u0442 (True/False)" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/ca.json b/homeassistant/components/emulated_roku/.translations/ca.json deleted file mode 100644 index bdd38b8538c..00000000000 --- a/homeassistant/components/emulated_roku/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "El nom ja existeix" - }, - "step": { - "user": { - "data": { - "advertise_ip": "IP d'advert\u00e8ncies", - "advertise_port": "Port d'advert\u00e8ncies", - "host_ip": "IP de l'amfitri\u00f3", - "listen_port": "Port d'escolta", - "name": "Nom", - "upnp_bind_multicast": "Enlla\u00e7ar multicast (true/false)" - }, - "title": "Configuraci\u00f3 del servidor" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/da.json b/homeassistant/components/emulated_roku/.translations/da.json deleted file mode 100644 index 0da64fac623..00000000000 --- a/homeassistant/components/emulated_roku/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Navnet findes allerede" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Adviserings-IP", - "advertise_port": "Adviseringsport", - "host_ip": "V\u00e6rts-IP", - "listen_port": "Lytte-port", - "name": "Navn", - "upnp_bind_multicast": "Bind multicast (sand/falsk)" - }, - "title": "Angiv server-konfiguration" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/de.json b/homeassistant/components/emulated_roku/.translations/de.json deleted file mode 100644 index f9c8a21240a..00000000000 --- a/homeassistant/components/emulated_roku/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Name existiert bereits" - }, - "step": { - "user": { - "data": { - "advertise_ip": "IP Adresse annoncieren", - "advertise_port": "Port annoncieren", - "host_ip": "Host-IP", - "listen_port": "Listen-Port", - "name": "Name", - "upnp_bind_multicast": "Multicast binden (True/False)" - }, - "title": "Serverkonfiguration definieren" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/en.json b/homeassistant/components/emulated_roku/.translations/en.json deleted file mode 100644 index 376252966a3..00000000000 --- a/homeassistant/components/emulated_roku/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Name already exists" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Advertise IP", - "advertise_port": "Advertise port", - "host_ip": "Host IP", - "listen_port": "Listen port", - "name": "Name", - "upnp_bind_multicast": "Bind multicast (True/False)" - }, - "title": "Define server configuration" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/es-419.json b/homeassistant/components/emulated_roku/.translations/es-419.json deleted file mode 100644 index 51c18c764db..00000000000 --- a/homeassistant/components/emulated_roku/.translations/es-419.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "El nombre ya existe" - }, - "step": { - "user": { - "data": { - "host_ip": "IP del host", - "name": "Nombre" - }, - "title": "Definir la configuraci\u00f3n del servidor." - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/es.json b/homeassistant/components/emulated_roku/.translations/es.json deleted file mode 100644 index f727c8bf522..00000000000 --- a/homeassistant/components/emulated_roku/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "El nombre ya existe" - }, - "step": { - "user": { - "data": { - "advertise_ip": "IP para anunciar", - "advertise_port": "Puerto para anunciar", - "host_ip": "IP del host", - "listen_port": "Puerto de escucha", - "name": "Nombre", - "upnp_bind_multicast": "Enlazar multicast (verdadero/falso)" - }, - "title": "Definir la configuraci\u00f3n del servidor" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/et.json b/homeassistant/components/emulated_roku/.translations/et.json deleted file mode 100644 index e284f6c3732..00000000000 --- a/homeassistant/components/emulated_roku/.translations/et.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "host_ip": "", - "name": "Nimi" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/fr.json b/homeassistant/components/emulated_roku/.translations/fr.json deleted file mode 100644 index 629e006564b..00000000000 --- a/homeassistant/components/emulated_roku/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9" - }, - "step": { - "user": { - "data": { - "advertise_ip": "IP d'annonce", - "advertise_port": "Port d'annonce", - "host_ip": "IP h\u00f4te", - "listen_port": "Port d'\u00e9coute", - "name": "Nom", - "upnp_bind_multicast": "Lier la multidiffusion (True / False)" - }, - "title": "D\u00e9finir la configuration du serveur" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/hu.json b/homeassistant/components/emulated_roku/.translations/hu.json deleted file mode 100644 index 9b6f7706253..00000000000 --- a/homeassistant/components/emulated_roku/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik" - }, - "step": { - "user": { - "data": { - "host_ip": "Hoszt IP", - "listen_port": "Port figyel\u00e9se", - "name": "N\u00e9v" - }, - "title": "A kiszolg\u00e1l\u00f3 szerver konfigur\u00e1l\u00e1sa" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/it.json b/homeassistant/components/emulated_roku/.translations/it.json deleted file mode 100644 index 8f39309264a..00000000000 --- a/homeassistant/components/emulated_roku/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Il nome \u00e8 gi\u00e0 esistente" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Pubblicizza IP", - "advertise_port": "Pubblicizza porta", - "host_ip": "Indirizzo IP dell'host", - "listen_port": "Porta di ascolto", - "name": "Nome", - "upnp_bind_multicast": "Associa multicast (Vero / Falso)" - }, - "title": "Definisci la configurazione del server" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/ko.json b/homeassistant/components/emulated_roku/.translations/ko.json deleted file mode 100644 index ddee892039f..00000000000 --- a/homeassistant/components/emulated_roku/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "advertise_ip": "\uad11\uace0 IP", - "advertise_port": "\uad11\uace0 \ud3ec\ud2b8", - "host_ip": "\ud638\uc2a4\ud2b8 IP", - "listen_port": "\uc218\uc2e0 \ud3ec\ud2b8", - "name": "\uc774\ub984", - "upnp_bind_multicast": "\uba40\ud2f0 \uce90\uc2a4\ud2b8 \ud560\ub2f9 (\ucc38/\uac70\uc9d3)" - }, - "title": "\uc11c\ubc84 \uad6c\uc131 \uc815\uc758" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/lb.json b/homeassistant/components/emulated_roku/.translations/lb.json deleted file mode 100644 index 11d1aa3ff7a..00000000000 --- a/homeassistant/components/emulated_roku/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Numm g\u00ebtt et schonn" - }, - "step": { - "user": { - "data": { - "advertise_ip": "IP annonc\u00e9ieren", - "advertise_port": "Port annonc\u00e9ieren", - "host_ip": "IP vum Apparat", - "listen_port": "Port lauschteren", - "name": "Numm", - "upnp_bind_multicast": "Multicast abannen (Richteg/Falsch)" - }, - "title": "Server Konfiguratioun d\u00e9fin\u00e9ieren" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/nl.json b/homeassistant/components/emulated_roku/.translations/nl.json deleted file mode 100644 index fe26cda31e2..00000000000 --- a/homeassistant/components/emulated_roku/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Naam bestaat al" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Adverteer IP", - "advertise_port": "Adverterenpoort", - "host_ip": "Host IP", - "listen_port": "Luisterpoort", - "name": "Naam", - "upnp_bind_multicast": "Bind multicast (waar/niet waar)" - }, - "title": "Serverconfiguratie defini\u00ebren" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/nn.json b/homeassistant/components/emulated_roku/.translations/nn.json deleted file mode 100644 index fc349a0d9de..00000000000 --- a/homeassistant/components/emulated_roku/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/no.json b/homeassistant/components/emulated_roku/.translations/no.json deleted file mode 100644 index a0b8efcacd6..00000000000 --- a/homeassistant/components/emulated_roku/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Navnet eksisterer allerede" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Annonser IP", - "advertise_port": "Annonser port", - "host_ip": "Vert IP", - "listen_port": "Lytte port", - "name": "Navn", - "upnp_bind_multicast": "Bind multicast (Sant/Usant)" - }, - "title": "Definer serverkonfigurasjon" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/pl.json b/homeassistant/components/emulated_roku/.translations/pl.json deleted file mode 100644 index 0dd32f66c9f..00000000000 --- a/homeassistant/components/emulated_roku/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Nazwa ju\u017c istnieje." - }, - "step": { - "user": { - "data": { - "advertise_ip": "IP rozg\u0142aszania", - "advertise_port": "Port rozg\u0142aszania", - "host_ip": "IP hosta", - "listen_port": "Port nas\u0142uchu", - "name": "Nazwa", - "upnp_bind_multicast": "Powi\u0105\u017c multicast (prawda/fa\u0142sz)" - }, - "title": "Zdefiniuj konfiguracj\u0119 serwera" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/pt-BR.json b/homeassistant/components/emulated_roku/.translations/pt-BR.json deleted file mode 100644 index 0f82f93b383..00000000000 --- a/homeassistant/components/emulated_roku/.translations/pt-BR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "O nome j\u00e1 existe" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Anunciar IP", - "advertise_port": "Anunciar porta", - "host_ip": "IP do host", - "listen_port": "Porta de escuta", - "name": "Nome", - "upnp_bind_multicast": "Vincular multicast (Verdadeiro/Falso)" - }, - "title": "Definir configura\u00e7\u00e3o do servidor" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/pt.json b/homeassistant/components/emulated_roku/.translations/pt.json deleted file mode 100644 index 138e077d4a4..00000000000 --- a/homeassistant/components/emulated_roku/.translations/pt.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Nome j\u00e1 existe" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Anuncie o IP", - "advertise_port": "Anuncie porto", - "host_ip": "IP do host", - "listen_port": "Porta \u00e0 escuta", - "name": "Nome", - "upnp_bind_multicast": "Liga\u00e7\u00e3o multicast (Verdadeiro/Falso)" - }, - "title": "Definir configura\u00e7\u00e3o do servidor" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/ru.json b/homeassistant/components/emulated_roku/.translations/ru.json deleted file mode 100644 index 32bf473ac38..00000000000 --- a/homeassistant/components/emulated_roku/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." - }, - "step": { - "user": { - "data": { - "advertise_ip": "\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c IP", - "advertise_port": "\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0440\u0442", - "host_ip": "\u0425\u043e\u0441\u0442", - "listen_port": "\u041f\u043e\u0440\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "upnp_bind_multicast": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c multicast (True/False)" - }, - "title": "EmulatedRoku" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/sl.json b/homeassistant/components/emulated_roku/.translations/sl.json deleted file mode 100644 index 768feb83747..00000000000 --- a/homeassistant/components/emulated_roku/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Ime \u017ee obstaja" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Advertise IP", - "advertise_port": "Advertise port", - "host_ip": "IP gostitelja", - "listen_port": "Vrata naprave", - "name": "Ime", - "upnp_bind_multicast": "Vezava multicasta (True / False)" - }, - "title": "Dolo\u010dite konfiguracijo stre\u017enika" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/sv.json b/homeassistant/components/emulated_roku/.translations/sv.json deleted file mode 100644 index 4ae7a356c4c..00000000000 --- a/homeassistant/components/emulated_roku/.translations/sv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "Namnet finns redan" - }, - "step": { - "user": { - "data": { - "advertise_ip": "Annonsera med IP", - "advertise_port": "Annonsera p\u00e5 port", - "host_ip": "IP p\u00e5 v\u00e4rddatorn", - "listen_port": "Lyssna p\u00e5 port", - "name": "Namn", - "upnp_bind_multicast": "Bind multicast (True/False)" - }, - "title": "Definiera serverkonfiguration" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/zh-Hans.json b/homeassistant/components/emulated_roku/.translations/zh-Hans.json deleted file mode 100644 index 88d8a822696..00000000000 --- a/homeassistant/components/emulated_roku/.translations/zh-Hans.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "\u540d\u79f0\u5df2\u5b58\u5728" - }, - "step": { - "user": { - "data": { - "advertise_ip": "\u5e7f\u64ad IP", - "advertise_port": "\u5e7f\u64ad\u7aef\u53e3", - "host_ip": "\u4e3b\u673a IP", - "listen_port": "\u76d1\u542c\u7aef\u53e3", - "name": "\u59d3\u540d", - "upnp_bind_multicast": "\u7ed1\u5b9a\u591a\u64ad (True/False)" - }, - "title": "\u5b9a\u4e49\u670d\u52a1\u5668\u914d\u7f6e" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/zh-Hant.json b/homeassistant/components/emulated_roku/.translations/zh-Hant.json deleted file mode 100644 index 40b4307ae02..00000000000 --- a/homeassistant/components/emulated_roku/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728" - }, - "step": { - "user": { - "data": { - "advertise_ip": "\u5ee3\u64ad\u901a\u8a0a\u57e0", - "advertise_port": "\u5ee3\u64ad\u901a\u8a0a\u57e0", - "host_ip": "\u4e3b\u6a5f IP", - "listen_port": "\u76e3\u807d\u901a\u8a0a\u57e0", - "name": "\u540d\u7a31", - "upnp_bind_multicast": "\u7d81\u5b9a\u7fa4\u64ad\uff08Multicast\uff09True/False" - }, - "title": "\u5b9a\u7fa9\u4f3a\u670d\u5668\u8a2d\u5b9a" - } - }, - "title": "EmulatedRoku" - } -} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/config_flow.py b/homeassistant/components/emulated_roku/config_flow.py index 3e363e060c2..0f8a82fa893 100644 --- a/homeassistant/components/emulated_roku/config_flow.py +++ b/homeassistant/components/emulated_roku/config_flow.py @@ -11,9 +11,9 @@ from .const import CONF_LISTEN_PORT, DEFAULT_NAME, DEFAULT_PORT, DOMAIN @callback def configured_servers(hass): """Return a set of the configured servers.""" - return set( + return { entry.data[CONF_NAME] for entry in hass.config_entries.async_entries(DOMAIN) - ) + } @config_entries.HANDLERS.register(DOMAIN) diff --git a/homeassistant/components/emulated_roku/manifest.json b/homeassistant/components/emulated_roku/manifest.json index 39b8d40737d..78dfa78802f 100644 --- a/homeassistant/components/emulated_roku/manifest.json +++ b/homeassistant/components/emulated_roku/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/emulated_roku", "requirements": ["emulated_roku==0.2.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/emulated_roku/strings.json b/homeassistant/components/emulated_roku/strings.json index 376252966a3..a47c1c4799b 100644 --- a/homeassistant/components/emulated_roku/strings.json +++ b/homeassistant/components/emulated_roku/strings.json @@ -1,21 +1,19 @@ { - "config": { - "abort": { - "name_exists": "Name already exists" + "title": "Emulated Roku", + "config": { + "abort": { "name_exists": "Name already exists" }, + "step": { + "user": { + "data": { + "advertise_ip": "Advertise IP", + "advertise_port": "Advertise port", + "host_ip": "Host IP", + "listen_port": "Listen port", + "name": "Name", + "upnp_bind_multicast": "Bind multicast (True/False)" }, - "step": { - "user": { - "data": { - "advertise_ip": "Advertise IP", - "advertise_port": "Advertise port", - "host_ip": "Host IP", - "listen_port": "Listen port", - "name": "Name", - "upnp_bind_multicast": "Bind multicast (True/False)" - }, - "title": "Define server configuration" - } - }, - "title": "EmulatedRoku" + "title": "Define server configuration" + } } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/emulated_roku/translations/bg.json b/homeassistant/components/emulated_roku/translations/bg.json new file mode 100644 index 00000000000..6c1725a16b1 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/bg.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430" + }, + "step": { + "user": { + "data": { + "advertise_ip": "\u0420\u0430\u0437\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u0439 IP \u0430\u0434\u0440\u0435\u0441", + "advertise_port": "\u0420\u0430\u0437\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0432\u0430\u0439 \u043f\u043e\u0440\u0442", + "host_ip": "\u0410\u0434\u0440\u0435\u0441", + "listen_port": "\u0421\u043b\u0443\u0448\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442", + "name": "\u0418\u043c\u0435", + "upnp_bind_multicast": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0443\u043b\u0442\u0438\u043a\u0430\u0441\u0442 (True/False)" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0430" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/ca.json b/homeassistant/components/emulated_roku/translations/ca.json new file mode 100644 index 00000000000..cccea2cb77b --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/ca.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "El nom ja existeix" + }, + "step": { + "user": { + "data": { + "advertise_ip": "IP d'advert\u00e8ncies", + "advertise_port": "Port d'advert\u00e8ncies", + "host_ip": "IP de l'amfitri\u00f3", + "listen_port": "Port d'escolta", + "name": "Nom", + "upnp_bind_multicast": "Enlla\u00e7ar multicast (true/false)" + }, + "title": "Configuraci\u00f3 del servidor" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/da.json b/homeassistant/components/emulated_roku/translations/da.json new file mode 100644 index 00000000000..fbaf0d676c1 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/da.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Navnet findes allerede" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Adviserings-IP", + "advertise_port": "Adviseringsport", + "host_ip": "V\u00e6rts-IP", + "listen_port": "Lytte-port", + "name": "Navn", + "upnp_bind_multicast": "Bind multicast (sand/falsk)" + }, + "title": "Angiv server-konfiguration" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/de.json b/homeassistant/components/emulated_roku/translations/de.json new file mode 100644 index 00000000000..ce3d9e40d6c --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/de.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Name existiert bereits" + }, + "step": { + "user": { + "data": { + "advertise_ip": "IP Adresse annoncieren", + "advertise_port": "Port annoncieren", + "host_ip": "Host-IP", + "listen_port": "Listen-Port", + "name": "Name", + "upnp_bind_multicast": "Multicast binden (True/False)" + }, + "title": "Serverkonfiguration definieren" + } + } + }, + "title": "Emulated Roku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/en.json b/homeassistant/components/emulated_roku/translations/en.json new file mode 100644 index 00000000000..c061f08b178 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/en.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Name already exists" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Advertise IP", + "advertise_port": "Advertise port", + "host_ip": "Host IP", + "listen_port": "Listen port", + "name": "Name", + "upnp_bind_multicast": "Bind multicast (True/False)" + }, + "title": "Define server configuration" + } + } + }, + "title": "Emulated Roku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/es-419.json b/homeassistant/components/emulated_roku/translations/es-419.json new file mode 100644 index 00000000000..85d75c81ff3 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "name_exists": "El nombre ya existe" + }, + "step": { + "user": { + "data": { + "host_ip": "IP del host", + "name": "Nombre" + }, + "title": "Definir la configuraci\u00f3n del servidor." + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/es.json b/homeassistant/components/emulated_roku/translations/es.json new file mode 100644 index 00000000000..8cba52b9591 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/es.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "El nombre ya existe" + }, + "step": { + "user": { + "data": { + "advertise_ip": "IP para anunciar", + "advertise_port": "Puerto para anunciar", + "host_ip": "IP del host", + "listen_port": "Puerto de escucha", + "name": "Nombre", + "upnp_bind_multicast": "Enlazar multicast (verdadero/falso)" + }, + "title": "Definir la configuraci\u00f3n del servidor" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/et.json b/homeassistant/components/emulated_roku/translations/et.json new file mode 100644 index 00000000000..b94548b44af --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/et.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host_ip": "", + "name": "Nimi" + } + } + } + }, + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/fr.json b/homeassistant/components/emulated_roku/translations/fr.json new file mode 100644 index 00000000000..dd115897e4a --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/fr.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9" + }, + "step": { + "user": { + "data": { + "advertise_ip": "IP d'annonce", + "advertise_port": "Port d'annonce", + "host_ip": "IP h\u00f4te", + "listen_port": "Port d'\u00e9coute", + "name": "Nom", + "upnp_bind_multicast": "Lier la multidiffusion (True / False)" + }, + "title": "D\u00e9finir la configuration du serveur" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/hu.json b/homeassistant/components/emulated_roku/translations/hu.json new file mode 100644 index 00000000000..ce182a3f00d --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik" + }, + "step": { + "user": { + "data": { + "host_ip": "Hoszt IP", + "listen_port": "Port figyel\u00e9se", + "name": "N\u00e9v" + }, + "title": "A kiszolg\u00e1l\u00f3 szerver konfigur\u00e1l\u00e1sa" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/it.json b/homeassistant/components/emulated_roku/translations/it.json new file mode 100644 index 00000000000..b0bb5366ea2 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/it.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Il nome \u00e8 gi\u00e0 esistente" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Pubblicizza IP", + "advertise_port": "Pubblicizza porta", + "host_ip": "Indirizzo IP dell'host", + "listen_port": "Porta di ascolto", + "name": "Nome", + "upnp_bind_multicast": "Associa multicast (Vero / Falso)" + }, + "title": "Definisci la configurazione del server" + } + } + }, + "title": "Emulated Roku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/ko.json b/homeassistant/components/emulated_roku/translations/ko.json new file mode 100644 index 00000000000..3e1062e4201 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/ko.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "advertise_ip": "\uad11\uace0 IP", + "advertise_port": "\uad11\uace0 \ud3ec\ud2b8", + "host_ip": "\ud638\uc2a4\ud2b8 IP", + "listen_port": "\uc218\uc2e0 \ud3ec\ud2b8", + "name": "\uc774\ub984", + "upnp_bind_multicast": "\uba40\ud2f0 \uce90\uc2a4\ud2b8 \ud560\ub2f9 (\ucc38/\uac70\uc9d3)" + }, + "title": "\uc11c\ubc84 \uad6c\uc131 \uc815\uc758" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/lb.json b/homeassistant/components/emulated_roku/translations/lb.json new file mode 100644 index 00000000000..94ff88f9715 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/lb.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Numm g\u00ebtt et schonn" + }, + "step": { + "user": { + "data": { + "advertise_ip": "IP annonc\u00e9ieren", + "advertise_port": "Port annonc\u00e9ieren", + "host_ip": "IP vum Apparat", + "listen_port": "Port lauschteren", + "name": "Numm", + "upnp_bind_multicast": "Multicast abannen (Richteg/Falsch)" + }, + "title": "Server Konfiguratioun d\u00e9fin\u00e9ieren" + } + } + }, + "title": "Emul\u00e9ierte Roku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/nl.json b/homeassistant/components/emulated_roku/translations/nl.json new file mode 100644 index 00000000000..16c6ad1e512 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/nl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Naam bestaat al" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Adverteer IP", + "advertise_port": "Adverterenpoort", + "host_ip": "Host IP", + "listen_port": "Luisterpoort", + "name": "Naam", + "upnp_bind_multicast": "Bind multicast (waar/niet waar)" + }, + "title": "Serverconfiguratie defini\u00ebren" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/nn.json b/homeassistant/components/emulated_roku/translations/nn.json new file mode 100644 index 00000000000..ccc9f5ac21e --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/no.json b/homeassistant/components/emulated_roku/translations/no.json new file mode 100644 index 00000000000..2d4f72c50fb --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/no.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Navnet eksisterer allerede" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Annonser IP", + "advertise_port": "Annonser port", + "host_ip": "Vert IP", + "listen_port": "Lytte port", + "name": "Navn", + "upnp_bind_multicast": "Bind multicast (Sant/Usant)" + }, + "title": "Definer serverkonfigurasjon" + } + } + }, + "title": "Emulerte 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 new file mode 100644 index 00000000000..6ce1c17e5d8 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Nazwa ju\u017c istnieje." + }, + "step": { + "user": { + "data": { + "advertise_ip": "IP rozg\u0142aszania", + "advertise_port": "Port rozg\u0142aszania", + "host_ip": "Adres IP", + "listen_port": "Port nas\u0142uchu", + "name": "Nazwa", + "upnp_bind_multicast": "Powi\u0105\u017c multicast (prawda/fa\u0142sz)" + }, + "title": "Zdefiniuj konfiguracj\u0119 serwera" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/pt-BR.json b/homeassistant/components/emulated_roku/translations/pt-BR.json new file mode 100644 index 00000000000..b4111a184e9 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/pt-BR.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "O nome j\u00e1 existe" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Anunciar IP", + "advertise_port": "Anunciar porta", + "host_ip": "IP do host", + "listen_port": "Porta de escuta", + "name": "Nome", + "upnp_bind_multicast": "Vincular multicast (Verdadeiro/Falso)" + }, + "title": "Definir configura\u00e7\u00e3o do servidor" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/pt.json b/homeassistant/components/emulated_roku/translations/pt.json new file mode 100644 index 00000000000..80a08aa09b8 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/pt.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Nome j\u00e1 existe" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Anuncie o IP", + "advertise_port": "Anuncie porto", + "host_ip": "IP do host", + "listen_port": "Porta \u00e0 escuta", + "name": "Nome", + "upnp_bind_multicast": "Liga\u00e7\u00e3o multicast (Verdadeiro/Falso)" + }, + "title": "Definir configura\u00e7\u00e3o do servidor" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/ru.json b/homeassistant/components/emulated_roku/translations/ru.json new file mode 100644 index 00000000000..878575788d8 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/ru.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." + }, + "step": { + "user": { + "data": { + "advertise_ip": "\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c IP", + "advertise_port": "\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0440\u0442", + "host_ip": "\u0425\u043e\u0441\u0442", + "listen_port": "\u041f\u043e\u0440\u0442", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "upnp_bind_multicast": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c multicast (True/False)" + }, + "title": "EmulatedRoku" + } + } + }, + "title": "Emulated Roku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/sl.json b/homeassistant/components/emulated_roku/translations/sl.json new file mode 100644 index 00000000000..467d1139ea3 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/sl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Ime \u017ee obstaja" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Advertise IP", + "advertise_port": "Advertise port", + "host_ip": "IP gostitelja", + "listen_port": "Vrata naprave", + "name": "Ime", + "upnp_bind_multicast": "Vezava multicasta (True / False)" + }, + "title": "Dolo\u010dite konfiguracijo stre\u017enika" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/sv.json b/homeassistant/components/emulated_roku/translations/sv.json new file mode 100644 index 00000000000..ec12f514293 --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/sv.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "Namnet finns redan" + }, + "step": { + "user": { + "data": { + "advertise_ip": "Annonsera med IP", + "advertise_port": "Annonsera p\u00e5 port", + "host_ip": "IP p\u00e5 v\u00e4rddatorn", + "listen_port": "Lyssna p\u00e5 port", + "name": "Namn", + "upnp_bind_multicast": "Bind multicast (True/False)" + }, + "title": "Definiera serverkonfiguration" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/.translations/th.json b/homeassistant/components/emulated_roku/translations/th.json similarity index 100% rename from homeassistant/components/emulated_roku/.translations/th.json rename to homeassistant/components/emulated_roku/translations/th.json diff --git a/homeassistant/components/emulated_roku/translations/zh-Hans.json b/homeassistant/components/emulated_roku/translations/zh-Hans.json new file mode 100644 index 00000000000..cf413a3ef1f --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/zh-Hans.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "\u540d\u79f0\u5df2\u5b58\u5728" + }, + "step": { + "user": { + "data": { + "advertise_ip": "\u5e7f\u64ad IP", + "advertise_port": "\u5e7f\u64ad\u7aef\u53e3", + "host_ip": "\u4e3b\u673a IP", + "listen_port": "\u76d1\u542c\u7aef\u53e3", + "name": "\u59d3\u540d", + "upnp_bind_multicast": "\u7ed1\u5b9a\u591a\u64ad (True/False)" + }, + "title": "\u5b9a\u4e49\u670d\u52a1\u5668\u914d\u7f6e" + } + } + }, + "title": "EmulatedRoku" +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/zh-Hant.json b/homeassistant/components/emulated_roku/translations/zh-Hant.json new file mode 100644 index 00000000000..b38f471ddff --- /dev/null +++ b/homeassistant/components/emulated_roku/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728" + }, + "step": { + "user": { + "data": { + "advertise_ip": "\u5ee3\u64ad\u901a\u8a0a\u57e0", + "advertise_port": "\u5ee3\u64ad\u901a\u8a0a\u57e0", + "host_ip": "\u4e3b\u6a5f IP", + "listen_port": "\u76e3\u807d\u901a\u8a0a\u57e0", + "name": "\u540d\u7a31", + "upnp_bind_multicast": "\u7d81\u5b9a\u7fa4\u64ad\uff08Multicast\uff09True/False" + }, + "title": "\u5b9a\u7fa9\u4f3a\u670d\u5668\u8a2d\u5b9a" + } + } + }, + "title": "Emulated Roku" +} \ No newline at end of file diff --git a/homeassistant/components/enigma2/manifest.json b/homeassistant/components/enigma2/manifest.json index a49f2aa0190..86b06148977 100644 --- a/homeassistant/components/enigma2/manifest.json +++ b/homeassistant/components/enigma2/manifest.json @@ -3,6 +3,5 @@ "name": "Enigma2 (OpenWebif)", "documentation": "https://www.home-assistant.io/integrations/enigma2", "requirements": ["openwebifpy==3.1.1"], - "dependencies": [], "codeowners": ["@fbradyirl"] } diff --git a/homeassistant/components/enigma2/media_player.py b/homeassistant/components/enigma2/media_player.py index 85dec4abd94..f8a341481a8 100644 --- a/homeassistant/components/enigma2/media_player.py +++ b/homeassistant/components/enigma2/media_player.py @@ -107,7 +107,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): port=config.get(CONF_PORT), username=config.get(CONF_USERNAME), password=config.get(CONF_PASSWORD), - is_https=config.get(CONF_SSL), + is_https=config[CONF_SSL], prefer_picon=config.get(CONF_USE_CHANNEL_ICON), mac_address=config.get(CONF_MAC_ADDRESS), turn_off_to_deep=config.get(CONF_DEEP_STANDBY), diff --git a/homeassistant/components/enocean/__init__.py b/homeassistant/components/enocean/__init__.py index 876c7a1f05b..90ab4087754 100644 --- a/homeassistant/components/enocean/__init__.py +++ b/homeassistant/components/enocean/__init__.py @@ -71,8 +71,10 @@ class EnOceanDevice(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_RECEIVE_MESSAGE, self._message_received_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_RECEIVE_MESSAGE, self._message_received_callback + ) ) def _message_received_callback(self, packet): diff --git a/homeassistant/components/enocean/manifest.json b/homeassistant/components/enocean/manifest.json index a1d2c4a9260..a02661f8883 100644 --- a/homeassistant/components/enocean/manifest.json +++ b/homeassistant/components/enocean/manifest.json @@ -3,6 +3,5 @@ "name": "EnOcean", "documentation": "https://www.home-assistant.io/integrations/enocean", "requirements": ["enocean==0.50"], - "dependencies": [], "codeowners": ["@bdurrer"] } diff --git a/homeassistant/components/enphase_envoy/manifest.json b/homeassistant/components/enphase_envoy/manifest.json index 68f584c053e..bde6c16bdfe 100644 --- a/homeassistant/components/enphase_envoy/manifest.json +++ b/homeassistant/components/enphase_envoy/manifest.json @@ -3,6 +3,5 @@ "name": "Enphase Envoy", "documentation": "https://www.home-assistant.io/integrations/enphase_envoy", "requirements": ["envoy_reader==0.11.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/entur_public_transport/manifest.json b/homeassistant/components/entur_public_transport/manifest.json index 0d5f3e24f83..db5c68d2a4c 100644 --- a/homeassistant/components/entur_public_transport/manifest.json +++ b/homeassistant/components/entur_public_transport/manifest.json @@ -3,6 +3,5 @@ "name": "Entur", "documentation": "https://www.home-assistant.io/integrations/entur_public_transport", "requirements": ["enturclient==0.2.1"], - "dependencies": [], "codeowners": ["@hfurubotten"] } diff --git a/homeassistant/components/entur_public_transport/sensor.py b/homeassistant/components/entur_public_transport/sensor.py index 0425accd06b..19510337d6a 100644 --- a/homeassistant/components/entur_public_transport/sensor.py +++ b/homeassistant/components/entur_public_transport/sensor.py @@ -241,7 +241,7 @@ class EnturPublicTransportSensor(Entity): return for i, call in enumerate(calls[2:]): - key_name = "departure_#" + str(i + 3) + key_name = f"departure_#{i + 3}" self._attributes[key_name] = ( f"{'' if bool(call.is_realtime) else 'ca. '}" f"{call.expected_departure_time.strftime('%H:%M')} {call.front_display}" diff --git a/homeassistant/components/environment_canada/manifest.json b/homeassistant/components/environment_canada/manifest.json index 9b208c452e5..bdc38e90c0c 100644 --- a/homeassistant/components/environment_canada/manifest.json +++ b/homeassistant/components/environment_canada/manifest.json @@ -3,6 +3,5 @@ "name": "Environment Canada", "documentation": "https://www.home-assistant.io/integrations/environment_canada", "requirements": ["env_canada==0.0.35"], - "dependencies": [], "codeowners": ["@michaeldavie"] } diff --git a/homeassistant/components/envirophat/manifest.json b/homeassistant/components/envirophat/manifest.json index 4cf443f4de6..911e7a2fc35 100644 --- a/homeassistant/components/envirophat/manifest.json +++ b/homeassistant/components/envirophat/manifest.json @@ -3,6 +3,5 @@ "name": "Enviro pHAT", "documentation": "https://www.home-assistant.io/integrations/envirophat", "requirements": ["envirophat==0.0.6", "smbus-cffi==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/envirophat/sensor.py b/homeassistant/components/envirophat/sensor.py index ce1f154f911..1aa07c83027 100644 --- a/homeassistant/components/envirophat/sensor.py +++ b/homeassistant/components/envirophat/sensor.py @@ -6,7 +6,7 @@ import logging import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_DISPLAY_OPTIONS, CONF_NAME, TEMP_CELSIUS +from homeassistant.const import CONF_DISPLAY_OPTIONS, CONF_NAME, TEMP_CELSIUS, VOLT import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -31,10 +31,10 @@ SENSOR_TYPES = { "magnetometer_z": ["magnetometer_z", " ", "mdi:magnet"], "temperature": ["temperature", TEMP_CELSIUS, "mdi:thermometer"], "pressure": ["pressure", "hPa", "mdi:gauge"], - "voltage_0": ["voltage_0", "V", "mdi:flash"], - "voltage_1": ["voltage_1", "V", "mdi:flash"], - "voltage_2": ["voltage_2", "V", "mdi:flash"], - "voltage_3": ["voltage_3", "V", "mdi:flash"], + "voltage_0": ["voltage_0", VOLT, "mdi:flash"], + "voltage_1": ["voltage_1", VOLT, "mdi:flash"], + "voltage_2": ["voltage_2", VOLT, "mdi:flash"], + "voltage_3": ["voltage_3", VOLT, "mdi:flash"], } PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( diff --git a/homeassistant/components/envisalink/alarm_control_panel.py b/homeassistant/components/envisalink/alarm_control_panel.py index 7630169dcad..62c57daf19d 100644 --- a/homeassistant/components/envisalink/alarm_control_panel.py +++ b/homeassistant/components/envisalink/alarm_control_panel.py @@ -112,16 +112,22 @@ class EnvisalinkAlarm(EnvisalinkDevice, AlarmControlPanel): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect(self.hass, SIGNAL_KEYPAD_UPDATE, self._update_callback) - async_dispatcher_connect( - self.hass, SIGNAL_PARTITION_UPDATE, self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_KEYPAD_UPDATE, self._update_callback + ) + ) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_PARTITION_UPDATE, self._update_callback + ) ) @callback def _update_callback(self, partition): """Update Home Assistant state, if needed.""" if partition is None or int(partition) == self._partition_number: - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def code_format(self): diff --git a/homeassistant/components/envisalink/binary_sensor.py b/homeassistant/components/envisalink/binary_sensor.py index fbe9824d067..f698a9d27d9 100644 --- a/homeassistant/components/envisalink/binary_sensor.py +++ b/homeassistant/components/envisalink/binary_sensor.py @@ -94,4 +94,4 @@ class EnvisalinkBinarySensor(EnvisalinkDevice, BinarySensorDevice): def _update_callback(self, zone): """Update the zone's state, if needed.""" if zone is None or int(zone) == self._zone_number: - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/envisalink/manifest.json b/homeassistant/components/envisalink/manifest.json index 1bc9d38e998..e45f8140df6 100644 --- a/homeassistant/components/envisalink/manifest.json +++ b/homeassistant/components/envisalink/manifest.json @@ -3,6 +3,5 @@ "name": "Envisalink", "documentation": "https://www.home-assistant.io/integrations/envisalink", "requirements": ["pyenvisalink==4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/envisalink/sensor.py b/homeassistant/components/envisalink/sensor.py index 05ad0783fac..3f3711b2e40 100644 --- a/homeassistant/components/envisalink/sensor.py +++ b/homeassistant/components/envisalink/sensor.py @@ -46,7 +46,7 @@ class EnvisalinkSensor(EnvisalinkDevice, Entity): self._partition_number = partition_number _LOGGER.debug("Setting up sensor for partition: %s", partition_name) - super().__init__(partition_name + " Keypad", info, controller) + super().__init__(f"{partition_name} Keypad", info, controller) async def async_added_to_hass(self): """Register callbacks.""" @@ -74,4 +74,4 @@ class EnvisalinkSensor(EnvisalinkDevice, Entity): def _update_callback(self, partition): """Update the partition state in HA, if needed.""" if partition is None or int(partition) == self._partition_number: - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/envisalink/services.yaml b/homeassistant/components/envisalink/services.yaml index 2a5f91791df..e9229ad838d 100644 --- a/homeassistant/components/envisalink/services.yaml +++ b/homeassistant/components/envisalink/services.yaml @@ -5,10 +5,10 @@ alarm_keypress: fields: entity_id: description: Name of the alarm control panel to trigger. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" keypress: - description: 'String to send to the alarm panel (1-6 characters).' - example: '*71' + description: "String to send to the alarm panel (1-6 characters)." + example: "*71" invoke_custom_function: description: > diff --git a/homeassistant/components/ephember/manifest.json b/homeassistant/components/ephember/manifest.json index 4df302ac2dd..c03a45a5804 100644 --- a/homeassistant/components/ephember/manifest.json +++ b/homeassistant/components/ephember/manifest.json @@ -3,6 +3,5 @@ "name": "EPH Controls", "documentation": "https://www.home-assistant.io/integrations/ephember", "requirements": ["pyephember==0.3.1"], - "dependencies": [], "codeowners": ["@ttroy50"] } diff --git a/homeassistant/components/epson/manifest.json b/homeassistant/components/epson/manifest.json index 81d08d76dfb..909efd5893e 100644 --- a/homeassistant/components/epson/manifest.json +++ b/homeassistant/components/epson/manifest.json @@ -3,6 +3,5 @@ "name": "Epson", "documentation": "https://www.home-assistant.io/integrations/epson", "requirements": ["epson-projector==0.1.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/epson/media_player.py b/homeassistant/components/epson/media_player.py index b39722c39f3..6a04988bebb 100644 --- a/homeassistant/components/epson/media_player.py +++ b/homeassistant/components/epson/media_player.py @@ -90,7 +90,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= name = config.get(CONF_NAME) host = config.get(CONF_HOST) port = config.get(CONF_PORT) - ssl = config.get(CONF_SSL) + ssl = config[CONF_SSL] epson_proj = EpsonProjector( async_get_clientsession(hass, verify_ssl=False), name, host, port, ssl diff --git a/homeassistant/components/epson/services.yaml b/homeassistant/components/epson/services.yaml index 6e9724c95f7..a463cd35512 100644 --- a/homeassistant/components/epson/services.yaml +++ b/homeassistant/components/epson/services.yaml @@ -3,7 +3,7 @@ select_cmode: fields: entity_id: description: Name of projector - example: 'media_player.epson_projector' + example: "media_player.epson_projector" cmode: description: Name of Cmode - example: 'cinema' + example: "cinema" diff --git a/homeassistant/components/epsonworkforce/manifest.json b/homeassistant/components/epsonworkforce/manifest.json index 37620b66e7c..cd989b9c690 100644 --- a/homeassistant/components/epsonworkforce/manifest.json +++ b/homeassistant/components/epsonworkforce/manifest.json @@ -2,7 +2,6 @@ "domain": "epsonworkforce", "name": "Epson Workforce", "documentation": "https://www.home-assistant.io/integrations/epsonworkforce", - "dependencies": [], "codeowners": ["@ThaStealth"], "requirements": ["epsonprinter==0.0.9"] } diff --git a/homeassistant/components/eq3btsmart/manifest.json b/homeassistant/components/eq3btsmart/manifest.json index a7d9ee11f6f..e15fd8d384b 100644 --- a/homeassistant/components/eq3btsmart/manifest.json +++ b/homeassistant/components/eq3btsmart/manifest.json @@ -3,6 +3,5 @@ "name": "EQ3 Bluetooth Smart Thermostats", "documentation": "https://www.home-assistant.io/integrations/eq3btsmart", "requirements": ["construct==2.9.45", "python-eq3bt==0.1.11"], - "dependencies": [], "codeowners": ["@rytilahti"] } diff --git a/homeassistant/components/esphome/.translations/bg.json b/homeassistant/components/esphome/.translations/bg.json deleted file mode 100644 index 44a18396873..00000000000 --- a/homeassistant/components/esphome/.translations/bg.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d" - }, - "error": { - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 ESP. \u041c\u043e\u043b\u044f, \u0443\u0432\u0435\u0440\u0435\u0442\u0435 \u0441\u0435, \u0447\u0435 \u0432\u0430\u0448\u0438\u044f\u0442 YAML \u0444\u0430\u0439\u043b \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0440\u0435\u0434 \"api:\".", - "invalid_password": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430!", - "resolve_error": "\u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043e\u0442\u043a\u0440\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0430 ESP. \u0410\u043a\u043e \u0442\u0430\u0437\u0438 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0430\u0432\u0430, \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u043d IP \u0430\u0434\u0440\u0435\u0441: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430, \u043a\u043e\u044f\u0442\u043e \u0441\u0442\u0435 \u0437\u0430\u0434\u0430\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438 \u0437\u0430 {name} .", - "title": "\u041f\u0430\u0440\u043e\u043b\u0430" - }, - "discovery_confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 ESPHome \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e ` {name} ` \u043a\u044a\u043c Home Assistant?", - "title": "\u041e\u0442\u043a\u0440\u0438\u0442\u043e \u0435 ESPHome \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "port": "\u041f\u043e\u0440\u0442" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 [ESPHome](https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/ca.json b/homeassistant/components/esphome/.translations/ca.json deleted file mode 100644 index 2e6f8dc62ad..00000000000 --- a/homeassistant/components/esphome/.translations/ca.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP ja est\u00e0 configurat" - }, - "error": { - "connection_error": "No s'ha pogut connectar amb ESP. Verifica que l'arxiu YAML cont\u00e9 la l\u00ednia 'api:'.", - "invalid_password": "Contrasenya inv\u00e0lida!", - "resolve_error": "No s'ha pogut trobar l'adre\u00e7a de l'ESP. Si l'error persisteix, configura una adre\u00e7a IP est\u00e0tica: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Contrasenya" - }, - "description": "Introdueix la contrasenya que has posat en la teva configuraci\u00f3 com a {name}.", - "title": "Introdueix la contrasenya" - }, - "discovery_confirm": { - "description": "Vols afegir el node `{name}` d'ESPHome a Home Assistant?", - "title": "Node d'ESPHome descobert" - }, - "user": { - "data": { - "host": "Amfitri\u00f3", - "port": "Port" - }, - "description": "Introdueix la informaci\u00f3 de connexi\u00f3 del teu node [ESPHome](https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/cs.json b/homeassistant/components/esphome/.translations/cs.json deleted file mode 100644 index 081275d3def..00000000000 --- a/homeassistant/components/esphome/.translations/cs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "authenticate": { - "description": "Zadejte heslo, kter\u00e9 jste nastavili ve va\u0161\u00ed konfiguraci pro {name} ." - }, - "discovery_confirm": { - "description": "Chcete do domovsk\u00e9ho asistenta p\u0159idat uzel ESPHome `{name}`?", - "title": "Nalezen uzel ESPHome" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/da.json b/homeassistant/components/esphome/.translations/da.json deleted file mode 100644 index db4b4362a5e..00000000000 --- a/homeassistant/components/esphome/.translations/da.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP er allerede konfigureret" - }, - "error": { - "connection_error": "Kan ikke oprette forbindelse til ESP. S\u00f8rg for, at din YAML-fil indeholder en 'api:' linje.", - "invalid_password": "Ugyldig adgangskode!", - "resolve_error": "Kan ikke finde adressen p\u00e5 ESP. Hvis denne fejl forts\u00e6tter skal du angive en statisk IP-adresse: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Adgangskode" - }, - "description": "Indtast venligst den adgangskode du har angivet i din konfiguration for {name}.", - "title": "Indtast adgangskode" - }, - "discovery_confirm": { - "description": "Vil du tilf\u00f8je ESPHome-knudepunkt `{name}` til Home Assistant?", - "title": "Fandt ESPHome-knudepunkt" - }, - "user": { - "data": { - "host": "V\u00e6rt", - "port": "Port" - }, - "description": "Angiv forbindelsesindstillinger for din [ESPHome](https://esphomelib.com/) node.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/de.json b/homeassistant/components/esphome/.translations/de.json deleted file mode 100644 index c9852632cdd..00000000000 --- a/homeassistant/components/esphome/.translations/de.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP ist bereits konfiguriert" - }, - "error": { - "connection_error": "Keine Verbindung zum ESP m\u00f6glich. Achte darauf, dass deine YAML-Datei eine Zeile 'api:' enth\u00e4lt.", - "invalid_password": "Ung\u00fcltiges Passwort!", - "resolve_error": "Adresse des ESP kann nicht aufgel\u00f6st werden. Wenn dieser Fehler weiterhin besteht, lege eine statische IP-Adresse fest: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Passwort" - }, - "description": "Bitte gebe das Passwort der ESPHome-Konfiguration f\u00fcr {name} ein:", - "title": "Passwort eingeben" - }, - "discovery_confirm": { - "description": "Willst du den ESPHome-Knoten `{name}` zu Home Assistant hinzuf\u00fcgen?", - "title": "Gefundener ESPHome-Knoten" - }, - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Bitte gib die Verbindungseinstellungen deines [ESPHome](https://esphomelib.com/)-Knotens ein.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/en.json b/homeassistant/components/esphome/.translations/en.json deleted file mode 100644 index f5236d1735d..00000000000 --- a/homeassistant/components/esphome/.translations/en.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP is already configured" - }, - "error": { - "connection_error": "Can't connect to ESP. Please make sure your YAML file contains an 'api:' line.", - "invalid_password": "Invalid password!", - "resolve_error": "Can't resolve address of the ESP. If this error persists, please set a static IP address: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Password" - }, - "description": "Please enter the password you set in your configuration for {name}.", - "title": "Enter Password" - }, - "discovery_confirm": { - "description": "Do you want to add the ESPHome node `{name}` to Home Assistant?", - "title": "Discovered ESPHome node" - }, - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Please enter connection settings of your [ESPHome](https://esphomelib.com/) node.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/es-419.json b/homeassistant/components/esphome/.translations/es-419.json deleted file mode 100644 index a0a2d77d48c..00000000000 --- a/homeassistant/components/esphome/.translations/es-419.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP ya est\u00e1 configurado" - }, - "error": { - "connection_error": "No se puede conectar a ESP. Aseg\u00farese de que su archivo YAML contenga una l\u00ednea 'api:'.", - "invalid_password": "\u00a1Contrase\u00f1a invalida!", - "resolve_error": "No se puede resolver la direcci\u00f3n de la ESP. Si este error persiste, configure una direcci\u00f3n IP est\u00e1tica: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Contrase\u00f1a" - }, - "description": "Por favor ingrese la contrase\u00f1a que estableci\u00f3 en su configuraci\u00f3n para {name} .", - "title": "Escriba la contrase\u00f1a" - }, - "discovery_confirm": { - "description": "\u00bfDesea agregar el nodo ESPHome `{name}` a Home Assistant?", - "title": "Nodo ESPHome descubierto" - }, - "user": { - "data": { - "host": "Host", - "port": "Puerto" - }, - "description": "Por favor Ingrese la configuraci\u00f3n de conexi\u00f3n de su nodo [ESPHome] (https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/es.json b/homeassistant/components/esphome/.translations/es.json deleted file mode 100644 index be8033f316a..00000000000 --- a/homeassistant/components/esphome/.translations/es.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP ya est\u00e1 configurado" - }, - "error": { - "connection_error": "No se puede conectar a ESP. Aseg\u00farate de que tu archivo YAML contenga una l\u00ednea 'api:'.", - "invalid_password": "\u00a1Contrase\u00f1a incorrecta!", - "resolve_error": "No se puede resolver la direcci\u00f3n de ESP. Si el error persiste, configura una direcci\u00f3n IP est\u00e1tica: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Contrase\u00f1a" - }, - "description": "Escribe la contrase\u00f1a que hayas puesto en la configuraci\u00f3n para {name}.", - "title": "Escribe la contrase\u00f1a" - }, - "discovery_confirm": { - "description": "\u00bfQuieres a\u00f1adir el nodo `{name}` de ESPHome a Home Assistant?", - "title": "Nodo ESPHome descubierto" - }, - "user": { - "data": { - "host": "Host", - "port": "Puerto" - }, - "description": "Introduce la configuraci\u00f3n de la conexi\u00f3n de tu nodo [ESPHome](https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/fr.json b/homeassistant/components/esphome/.translations/fr.json deleted file mode 100644 index 26fa4ec0bd4..00000000000 --- a/homeassistant/components/esphome/.translations/fr.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "connection_error": "Impossible de se connecter \u00e0 ESP. Assurez-vous que votre fichier YAML contient une ligne 'api:'.", - "invalid_password": "Mot de passe invalide !", - "resolve_error": "Impossible de r\u00e9soudre l'adresse de l'ESP. Si cette erreur persiste, veuillez d\u00e9finir une adresse IP statique: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Mot de passe" - }, - "description": "Veuillez saisir le mot de passe que vous avez d\u00e9fini dans votre configuration pour {name}", - "title": "Entrer votre mot de passe" - }, - "discovery_confirm": { - "description": "Voulez-vous ajouter le n\u0153ud ESPHome ` {name} ` \u00e0 Home Assistant?", - "title": "N\u0153ud ESPHome d\u00e9couvert" - }, - "user": { - "data": { - "host": "H\u00f4te", - "port": "Port" - }, - "description": "Veuillez saisir les param\u00e8tres de connexion de votre n\u0153ud [ESPHome] (https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/hu.json b/homeassistant/components/esphome/.translations/hu.json deleted file mode 100644 index 628983fec03..00000000000 --- a/homeassistant/components/esphome/.translations/hu.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Az ESP-t m\u00e1r konfigur\u00e1ltad." - }, - "error": { - "connection_error": "Nem lehet csatlakozni az ESP-hez. K\u00e9rlek gy\u0151z\u0151dj meg r\u00f3la, hogy a YAML f\u00e1jl tartalmaz egy \"api:\" sort.", - "invalid_password": "\u00c9rv\u00e9nytelen jelsz\u00f3!", - "resolve_error": "Az ESP c\u00edme nem oldhat\u00f3 fel. Ha a hiba tov\u00e1bbra is fenn\u00e1ll, k\u00e9rlek, \u00e1ll\u00edts be egy statikus IP-c\u00edmet: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Jelsz\u00f3" - }, - "description": "K\u00e9rlek, add meg a konfigur\u00e1ci\u00f3ban {name} n\u00e9vhez be\u00e1ll\u00edtott jelsz\u00f3t.", - "title": "Add meg a jelsz\u00f3t" - }, - "discovery_confirm": { - "description": "Szeretn\u00e9d hozz\u00e1adni a(z) `{name}` ESPHome csom\u00f3pontot a Home Assistant-hoz?", - "title": "Felfedezett ESPHome csom\u00f3pont" - }, - "user": { - "data": { - "host": "Hoszt", - "port": "Port" - }, - "description": "K\u00e9rlek, add meg az [ESPHome](https://esphomelib.com/) csom\u00f3pontod kapcsol\u00f3d\u00e1si be\u00e1ll\u00edt\u00e1sait.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/id.json b/homeassistant/components/esphome/.translations/id.json deleted file mode 100644 index 837d18d27ad..00000000000 --- a/homeassistant/components/esphome/.translations/id.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP sudah dikonfigurasi" - }, - "step": { - "authenticate": { - "data": { - "password": "Kata kunci" - }, - "description": "Silakan masukkan kata kunci yang Anda atur di konfigurasi Anda.", - "title": "Masukkan kata kunci" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/it.json b/homeassistant/components/esphome/.translations/it.json deleted file mode 100644 index bb77e87f6a1..00000000000 --- a/homeassistant/components/esphome/.translations/it.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \u00e8 gi\u00e0 configurato" - }, - "error": { - "connection_error": "Impossibile connettersi ad ESP. Assicurati che il tuo file YAML contenga una riga \"api:\".", - "invalid_password": "Password non valida!", - "resolve_error": "Impossibile risolvere l'indirizzo dell'ESP. Se questo errore persiste, impostare un indirizzo IP statico: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Password" - }, - "description": "Inserisci la password per {name} che hai impostato nella tua configurazione.", - "title": "Inserisci la password" - }, - "discovery_confirm": { - "description": "Vuoi aggiungere il nodo ESPHome `{name}` a Home Assistant?", - "title": "Trovato nodo ESPHome" - }, - "user": { - "data": { - "host": "Host", - "port": "Porta" - }, - "description": "Inserisci le impostazioni di connessione del tuo nodo [ESPHome] (https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/ko.json b/homeassistant/components/esphome/.translations/ko.json deleted file mode 100644 index 4d8068c801b..00000000000 --- a/homeassistant/components/esphome/.translations/ko.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "connection_error": "ESP \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. YAML \ud30c\uc77c\uc5d0 'api:' \ub97c \uad6c\uc131\ud588\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", - "invalid_password": "\uc798\ubabb\ub41c \ube44\ubc00\ubc88\ud638", - "resolve_error": "ESP \uc758 \uc8fc\uc18c\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \uc624\ub958\uac00 \uacc4\uc18d \ubc1c\uc0dd\ud558\uba74 \uace0\uc815 IP \uc8fc\uc18c\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638" - }, - "description": "{name} \uc758 \uad6c\uc131\uc5d0 \uc124\uc815\ud55c \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "\ube44\ubc00\ubc88\ud638 \uc785\ub825" - }, - "discovery_confirm": { - "description": "Home Assistant \uc5d0 ESPHome node `{name}` \uc744(\ub97c) \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\ubc1c\uacac\ub41c ESPHome node" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "port": "\ud3ec\ud2b8" - }, - "description": "[ESPHome](https://esphomelib.com/) \ub178\ub4dc\uc758 \uc5f0\uacb0 \uad6c\uc131\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/lb.json b/homeassistant/components/esphome/.translations/lb.json deleted file mode 100644 index 8302d8b38c2..00000000000 --- a/homeassistant/components/esphome/.translations/lb.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP ass scho konfigur\u00e9iert" - }, - "error": { - "connection_error": "Keng Verbindung zum ESP. Iwwerpr\u00e9ift d'Pr\u00e4sens vun der Zeil api: am YAML Fichier.", - "invalid_password": "Ong\u00ebltegt Passwuert!", - "resolve_error": "Kann d'Adresse vum ESP net opl\u00e9isen. Falls d\u00ebse Problem weiderhi besteet dann defin\u00e9iert eng statesch IP Adresse:\nhttps://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Passwuert" - }, - "description": "Gitt d'Passwuert vun \u00e4rer Konfiguratioun an fir {name}.", - "title": "Passwuert aginn" - }, - "discovery_confirm": { - "description": "W\u00ebllt dir den ESPHome Provider `{name}` am Home Assistant dob\u00e4isetzen?", - "title": "Entdeckten ESPHome Provider" - }, - "user": { - "data": { - "host": "Apparat", - "port": "Port" - }, - "description": "Gitt Verbindungs Informatioune vun \u00e4rem [ESPHome](https://esphomelib.com/) an.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/nl.json b/homeassistant/components/esphome/.translations/nl.json deleted file mode 100644 index a56130b2263..00000000000 --- a/homeassistant/components/esphome/.translations/nl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP is al geconfigureerd" - }, - "error": { - "connection_error": "Kan geen verbinding maken met ESP. Zorg ervoor dat uw YAML-bestand een regel 'api:' bevat.", - "invalid_password": "Ongeldig wachtwoord!", - "resolve_error": "Kan het adres van de ESP niet vinden. Als deze fout aanhoudt, stel dan een statisch IP-adres in: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Wachtwoord" - }, - "description": "Voer het wachtwoord in dat u in uw configuratie heeft ingesteld voor {name}.", - "title": "Voer wachtwoord in" - }, - "discovery_confirm": { - "description": "Wil je de ESPHome-node `{name}` toevoegen aan de Home Assistant?", - "title": "ESPHome node ontdekt" - }, - "user": { - "data": { - "host": "Host", - "port": "Poort" - }, - "description": "Voer de verbindingsinstellingen in van uw [ESPHome](https://esphomelib.com/) node.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/nn.json b/homeassistant/components/esphome/.translations/nn.json deleted file mode 100644 index 5e40c8ec5e5..00000000000 --- a/homeassistant/components/esphome/.translations/nn.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "flow_title": "ESPHome: {name}", - "step": { - "discovery_confirm": { - "title": "Fann ESPhome node" - }, - "user": { - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/no.json b/homeassistant/components/esphome/.translations/no.json deleted file mode 100644 index b4fa669fbff..00000000000 --- a/homeassistant/components/esphome/.translations/no.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP er allerede konfigurert" - }, - "error": { - "connection_error": "Kan ikke koble til ESP. Kontroller at YAML filen din inneholder en \"api:\" linje.", - "invalid_password": "Ugyldig passord!", - "resolve_error": "Kan ikke l\u00f8se adressen til ESP. Hvis denne feilen vedvarer, m\u00e5 du [angi en statisk IP-adresse](https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips)" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Passord" - }, - "description": "Vennligst skriv inn passordet du har angitt i din konfigurasjon for {name}.", - "title": "Skriv Inn Passord" - }, - "discovery_confirm": { - "description": "\u00d8nsker du \u00e5 legge ESPHome noden `{name}` til Home Assistant?", - "title": "Oppdaget ESPHome node" - }, - "user": { - "data": { - "host": "Vert", - "port": "" - }, - "description": "Vennligst skriv inn tilkoblingsinnstillinger for din [ESPHome](https://esphomelib.com/) node.", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/pl.json b/homeassistant/components/esphome/.translations/pl.json deleted file mode 100644 index ebd201b5550..00000000000 --- a/homeassistant/components/esphome/.translations/pl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP jest ju\u017c skonfigurowane." - }, - "error": { - "connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z ESP. Upewnij si\u0119, \u017ce Tw\u00f3j plik YAML zawiera lini\u0119 'api:'.", - "invalid_password": "Nieprawid\u0142owe has\u0142o!", - "resolve_error": "Nie mo\u017cna rozpozna\u0107 adresu ESP. Je\u015bli ten b\u0142\u0105d b\u0119dzie si\u0119 powtarza\u0142, nale\u017cy ustawi\u0107 statyczny adres IP: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Has\u0142o" - }, - "description": "Wprowad\u017a has\u0142o ustawione w konfiguracji dla {name}.", - "title": "Wprowad\u017a has\u0142o" - }, - "discovery_confirm": { - "description": "Czy chcesz doda\u0107 w\u0119ze\u0142 ESPHome `{name}` do Home Assistant?", - "title": "Znaleziono w\u0119ze\u0142 ESPHome" - }, - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Wprowad\u017a ustawienia po\u0142\u0105czenia [ESPHome](https://esphomelib.com/) w\u0119z\u0142a.", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/pt-BR.json b/homeassistant/components/esphome/.translations/pt-BR.json deleted file mode 100644 index 1c2baa9e028..00000000000 --- a/homeassistant/components/esphome/.translations/pt-BR.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O ESP j\u00e1 est\u00e1 configurado" - }, - "error": { - "connection_error": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao ESP. Por favor, verifique se o seu arquivo YAML cont\u00e9m uma linha 'api:'.", - "invalid_password": "Senha inv\u00e1lida!", - "resolve_error": "N\u00e3o \u00e9 poss\u00edvel resolver o endere\u00e7o do ESP. Se este erro persistir, por favor, defina um endere\u00e7o IP est\u00e1tico: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Senha" - }, - "description": "Por favor, digite a senha que voc\u00ea definiu em sua configura\u00e7\u00e3o.", - "title": "Digite a senha" - }, - "discovery_confirm": { - "description": "Voc\u00ea quer adicionar o n\u00f3 ESPHome ` {name} ` ao Home Assistant?", - "title": "N\u00f3 ESPHome descoberto" - }, - "user": { - "data": { - "host": "Host", - "port": "Porta" - }, - "description": "Por favor insira as configura\u00e7\u00f5es de conex\u00e3o de seu n\u00f3 de [ESPHome] (https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/pt.json b/homeassistant/components/esphome/.translations/pt.json deleted file mode 100644 index 7e4a85f3514..00000000000 --- a/homeassistant/components/esphome/.translations/pt.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O ESP j\u00e1 est\u00e1 configurado" - }, - "error": { - "connection_error": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao ESP. Por favor, verifique se o seu arquivo YAML cont\u00e9m uma linha 'api:'.", - "invalid_password": "Palavra-passe inv\u00e1lida", - "resolve_error": "N\u00e3o \u00e9 poss\u00edvel resolver o endere\u00e7o do ESP. Se este erro persistir, defina um endere\u00e7o IP est\u00e1tico: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "step": { - "authenticate": { - "data": { - "password": "Palavra-passe" - }, - "description": "Por favor, insira a palavra-passe que colocou na configura\u00e7\u00e3o para {name}", - "title": "Palavra-passe" - }, - "user": { - "data": { - "host": "Servidor", - "port": "Porta" - }, - "description": "Por favor, insira as configura\u00e7\u00f5es de liga\u00e7\u00e3o ao seu n\u00f3 [ESPHome] (https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/ru.json b/homeassistant/components/esphome/.translations/ru.json deleted file mode 100644 index 27d223012c0..00000000000 --- a/homeassistant/components/esphome/.translations/ru.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a ESP. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0412\u0430\u0448 YAML-\u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 'api:'.", - "invalid_password": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c!", - "resolve_error": "\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 ESP. \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips." - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 {name}.", - "title": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c" - }, - "discovery_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c ESPHome `{name}`?", - "title": "ESPHome" - }, - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "port": "\u041f\u043e\u0440\u0442" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0412\u0430\u0448\u0435\u043c\u0443 [ESPHome](https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/sl.json b/homeassistant/components/esphome/.translations/sl.json deleted file mode 100644 index 5f4e9d3e4c4..00000000000 --- a/homeassistant/components/esphome/.translations/sl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP je \u017ee konfiguriran" - }, - "error": { - "connection_error": "Ne morem se povezati z ESP. Poskrbite, da va\u0161a datoteka YAML vsebuje vrstico \"api:\".", - "invalid_password": "Neveljavno geslo!", - "resolve_error": "Ne moremo razre\u0161iti naslova ESP. \u010ce se napaka ponovi, prosimo nastavite stati\u010dni IP naslov: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "Geslo" - }, - "description": "Vnesite geslo, ki ste ga nastavili v konfiguraciji za {name}.", - "title": "Vnesite geslo" - }, - "discovery_confirm": { - "description": "\u017delite dodati ESPHome vozli\u0161\u010de ` {name} ` v Home Assistant?", - "title": "Odkrita ESPHome vozli\u0161\u010da" - }, - "user": { - "data": { - "host": "Gostitelj", - "port": "Vrata" - }, - "description": "Prosimo, vnesite nastavitve povezave va\u0161ega vozli\u0161\u010da [ESPHome] (https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/sv.json b/homeassistant/components/esphome/.translations/sv.json deleted file mode 100644 index 37788522e4f..00000000000 --- a/homeassistant/components/esphome/.translations/sv.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \u00e4r redan konfigurerad" - }, - "error": { - "connection_error": "Kan inte ansluta till ESP. Se till att din YAML-fil inneh\u00e5ller en 'api:' line.", - "invalid_password": "Ogiltigt l\u00f6senord!", - "resolve_error": "Det g\u00e5r inte att hitta IP-adressen f\u00f6r ESP med DNS-namnet. Om det h\u00e4r felet kvarst\u00e5r anger du en statisk IP-adress: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "L\u00f6senord" - }, - "description": "Ange det l\u00f6senord du angett i din konfiguration f\u00f6r {name}.", - "title": "Ange l\u00f6senord" - }, - "discovery_confirm": { - "description": "Vill du l\u00e4gga till ESPHome noden ` {name} ` till Home Assistant?", - "title": "Uppt\u00e4ckt ESPHome-nod" - }, - "user": { - "data": { - "host": "V\u00e4rddatorn", - "port": "Port" - }, - "description": "Ange anslutningsinst\u00e4llningarna f\u00f6r noden [ESPHome](https://esphomelib.com/).", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/th.json b/homeassistant/components/esphome/.translations/th.json deleted file mode 100644 index ceab9b6e11b..00000000000 --- a/homeassistant/components/esphome/.translations/th.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "error": { - "invalid_password": "\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07!" - }, - "step": { - "authenticate": { - "data": { - "password": "\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19" - }, - "title": "\u0e43\u0e2a\u0e48\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/uk.json b/homeassistant/components/esphome/.translations/uk.json deleted file mode 100644 index 79c9e70bcc8..00000000000 --- a/homeassistant/components/esphome/.translations/uk.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \u0432\u0436\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0430\u043d\u043e" - }, - "error": { - "connection_error": "\u041d\u0435 \u0432\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0438\u0441\u044f \u0434\u043e ESP. \u041f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0439\u0442\u0435\u0441\u044f, \u0449\u043e \u0444\u0430\u0439\u043b YAML \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0440\u044f\u0434\u043e\u043a \"api:\".", - "invalid_password": "\u041d\u0435\u0432\u0456\u0440\u043d\u0438\u0439 \u043f\u0430\u0440\u043e\u043b\u044c!", - "resolve_error": "\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 ESP. \u042f\u043a\u0449\u043e \u0446\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430 \u043d\u0435 \u0437\u043d\u0438\u043a\u0430\u0454, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443 IP-\u0430\u0434\u0440\u0435\u0441\u0443: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "step": { - "authenticate": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c" - }, - "description": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c, \u044f\u043a\u0438\u0439 \u0432\u0438 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0443 \u0441\u0432\u043e\u0457\u0439 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457.", - "title": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c" - }, - "discovery_confirm": { - "description": "\u0414\u043e\u0434\u0430\u0442\u0438 ESPHome \u0432\u0443\u0437\u043e\u043b {name} \u0443 Home Assistant?", - "title": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0432\u0443\u0437\u043e\u043b ESPHome" - }, - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "port": "\u041f\u043e\u0440\u0442" - }, - "description": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044f \u0432\u0430\u0448\u043e\u0433\u043e \u0432\u0443\u0437\u043b\u0430 [ESPHome] (https://esphomelib.com/)." - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/zh-Hans.json b/homeassistant/components/esphome/.translations/zh-Hans.json deleted file mode 100644 index 4839167785d..00000000000 --- a/homeassistant/components/esphome/.translations/zh-Hans.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \u5df2\u914d\u7f6e\u5b8c\u6210" - }, - "error": { - "connection_error": "\u65e0\u6cd5\u8fde\u63a5\u5230 ESP\u3002\u8bf7\u786e\u8ba4\u60a8\u7684 YAML \u6587\u4ef6\u4e2d\u5305\u542b 'api:' \u884c\u3002", - "invalid_password": "\u65e0\u6548\u7684\u5bc6\u7801\uff01", - "resolve_error": "\u65e0\u6cd5\u89e3\u6790 ESP \u7684\u5730\u5740\u3002\u5982\u679c\u6b64\u9519\u8bef\u6301\u7eed\u5b58\u5728\uff0c\u8bf7\u8bbe\u7f6e\u9759\u6001IP\u5730\u5740\uff1ahttps://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome: {name}", - "step": { - "authenticate": { - "data": { - "password": "\u5bc6\u7801" - }, - "description": "\u8bf7\u8f93\u5165\u60a8\u5728\u914d\u7f6e\u4e2d\u4e3a\u201c{name}\u201d\u8bbe\u7f6e\u7684\u5bc6\u7801\u3002", - "title": "\u8f93\u5165\u5bc6\u7801" - }, - "discovery_confirm": { - "description": "\u662f\u5426\u8981\u5c06 ESPHome \u8282\u70b9 `{name}` \u6dfb\u52a0\u5230 Home Assistant\uff1f", - "title": "\u53d1\u73b0\u4e86 ESPHome \u8282\u70b9" - }, - "user": { - "data": { - "host": "\u4e3b\u673a", - "port": "\u7aef\u53e3" - }, - "description": "\u8bf7\u8f93\u5165\u60a8\u7684 [ESPHome](https://esphomelib.com/) \u8282\u70b9\u7684\u8fde\u63a5\u8bbe\u7f6e\u3002", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/.translations/zh-Hant.json b/homeassistant/components/esphome/.translations/zh-Hant.json deleted file mode 100644 index bc229d190a7..00000000000 --- a/homeassistant/components/esphome/.translations/zh-Hant.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "ESP \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "connection_error": "\u7121\u6cd5\u9023\u7dda\u81f3 ESP\uff0c\u8acb\u78ba\u5b9a\u60a8\u7684 YAML \u6a94\u6848\u5305\u542b\u300capi:\u300d\u8a2d\u5b9a\u5217\u3002", - "invalid_password": "\u5bc6\u78bc\u7121\u6548\uff01", - "resolve_error": "\u7121\u6cd5\u89e3\u6790 ESP \u4f4d\u5740\uff0c\u5047\u5982\u6b64\u932f\u8aa4\u6301\u7e8c\u767c\u751f\uff0c\u8acb\u53c3\u8003\u8aaa\u660e\u8a2d\u5b9a\u70ba\u975c\u614b\u56fa\u5b9a IP \uff1a https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" - }, - "flow_title": "ESPHome\uff1a{name}", - "step": { - "authenticate": { - "data": { - "password": "\u5bc6\u78bc" - }, - "description": "\u8acb\u8f38\u5165 {name} \u8a2d\u5b9a\u5167\u6240\u8a2d\u5b9a\u4e4b\u5bc6\u78bc\u3002", - "title": "\u8f38\u5165\u5bc6\u78bc" - }, - "discovery_confirm": { - "description": "\u662f\u5426\u8981\u5c07 ESPHome \u7bc0\u9ede `{name}` \u65b0\u589e\u81f3 Home Assistant\uff1f", - "title": "\u81ea\u52d5\u63a2\u7d22\u5230 ESPHome \u7bc0\u9ede" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "port": "\u901a\u8a0a\u57e0" - }, - "description": "\u8acb\u8f38\u5165 [ESPHome](https://esphomelib.com/) \u7bc0\u9ede\u9023\u7dda\u8cc7\u8a0a\u3002", - "title": "ESPHome" - } - }, - "title": "ESPHome" - } -} \ No newline at end of file diff --git a/homeassistant/components/esphome/__init__.py b/homeassistant/components/esphome/__init__.py index 9fbe3eff822..3895e172024 100644 --- a/homeassistant/components/esphome/__init__.py +++ b/homeassistant/components/esphome/__init__.py @@ -510,7 +510,7 @@ class EsphomeEntity(Entity): async def _on_state_update(self) -> None: """Update the entity state when state or static info changed.""" - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def _on_device_update(self) -> None: """Update the entity state when device info has changed.""" @@ -519,7 +519,7 @@ class EsphomeEntity(Entity): # Only update the HA state when the full state arrives # through the next entity state packet. return - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_will_remove_from_hass(self) -> None: """Unregister callbacks.""" diff --git a/homeassistant/components/esphome/manifest.json b/homeassistant/components/esphome/manifest.json index c3d87bf836d..19d00fbbff9 100644 --- a/homeassistant/components/esphome/manifest.json +++ b/homeassistant/components/esphome/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/esphome", "requirements": ["aioesphomeapi==2.6.1"], - "dependencies": [], "zeroconf": ["_esphomelib._tcp.local."], "codeowners": ["@OttoWinter"] } diff --git a/homeassistant/components/esphome/strings.json b/homeassistant/components/esphome/strings.json index 3b662441e13..0c2f0fee8d9 100644 --- a/homeassistant/components/esphome/strings.json +++ b/homeassistant/components/esphome/strings.json @@ -1,35 +1,25 @@ { - "config": { - "abort": { - "already_configured": "ESP is already configured" - }, - "error": { - "resolve_error": "Can't resolve address of the ESP. If this error persists, please set a static IP address: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips", - "connection_error": "Can't connect to ESP. Please make sure your YAML file contains an 'api:' line.", - "invalid_password": "Invalid password!" - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Please enter connection settings of your [ESPHome](https://esphomelib.com/) node.", - "title": "ESPHome" - }, - "authenticate": { - "data": { - "password": "Password" - }, - "description": "Please enter the password you set in your configuration for {name}.", - "title": "Enter Password" - }, - "discovery_confirm": { - "description": "Do you want to add the ESPHome node `{name}` to Home Assistant?", - "title": "Discovered ESPHome node" - } - }, - "title": "ESPHome", - "flow_title": "ESPHome: {name}" - } + "config": { + "abort": { "already_configured": "ESP is already configured" }, + "error": { + "resolve_error": "Can't resolve address of the ESP. If this error persists, please set a static IP address: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips", + "connection_error": "Can't connect to ESP. Please make sure your YAML file contains an 'api:' line.", + "invalid_password": "Invalid password!" + }, + "step": { + "user": { + "data": { "host": "Host", "port": "Port" }, + "description": "Please enter connection settings of your [ESPHome](https://esphomelib.com/) node." + }, + "authenticate": { + "data": { "password": "Password" }, + "description": "Please enter the password you set in your configuration for {name}." + }, + "discovery_confirm": { + "description": "Do you want to add the ESPHome node `{name}` to Home Assistant?", + "title": "Discovered ESPHome node" + } + }, + "flow_title": "ESPHome: {name}" + } } diff --git a/homeassistant/components/esphome/translations/af.json b/homeassistant/components/esphome/translations/af.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/af.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ar.json b/homeassistant/components/esphome/translations/ar.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/ar.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/bg.json b/homeassistant/components/esphome/translations/bg.json new file mode 100644 index 00000000000..f77d3957ea1 --- /dev/null +++ b/homeassistant/components/esphome/translations/bg.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d" + }, + "error": { + "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 ESP. \u041c\u043e\u043b\u044f, \u0443\u0432\u0435\u0440\u0435\u0442\u0435 \u0441\u0435, \u0447\u0435 \u0432\u0430\u0448\u0438\u044f\u0442 YAML \u0444\u0430\u0439\u043b \u0441\u044a\u0434\u044a\u0440\u0436\u0430 \u0440\u0435\u0434 \"api:\".", + "invalid_password": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430!", + "resolve_error": "\u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043e\u0442\u043a\u0440\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0430 ESP. \u0410\u043a\u043e \u0442\u0430\u0437\u0438 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0430\u0432\u0430, \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u043d IP \u0430\u0434\u0440\u0435\u0441: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430" + }, + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430, \u043a\u043e\u044f\u0442\u043e \u0441\u0442\u0435 \u0437\u0430\u0434\u0430\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438 \u0437\u0430 {name} .", + "title": "\u041f\u0430\u0440\u043e\u043b\u0430" + }, + "discovery_confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 ESPHome \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e ` {name} ` \u043a\u044a\u043c Home Assistant?", + "title": "\u041e\u0442\u043a\u0440\u0438\u0442\u043e \u0435 ESPHome \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "port": "\u041f\u043e\u0440\u0442" + }, + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 [ESPHome](https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/bs.json b/homeassistant/components/esphome/translations/bs.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/bs.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ca.json b/homeassistant/components/esphome/translations/ca.json new file mode 100644 index 00000000000..6cd1405b824 --- /dev/null +++ b/homeassistant/components/esphome/translations/ca.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP ja est\u00e0 configurat" + }, + "error": { + "connection_error": "No s'ha pogut connectar amb ESP. Verifica que l'arxiu YAML cont\u00e9 la l\u00ednia 'api:'.", + "invalid_password": "Contrasenya inv\u00e0lida!", + "resolve_error": "No s'ha pogut trobar l'adre\u00e7a de l'ESP. Si l'error persisteix, configura una adre\u00e7a IP est\u00e0tica: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Contrasenya" + }, + "description": "Introdueix la contrasenya que has posat en la teva configuraci\u00f3 com a {name}.", + "title": "Introdueix la contrasenya" + }, + "discovery_confirm": { + "description": "Vols afegir el node `{name}` d'ESPHome a Home Assistant?", + "title": "Node d'ESPHome descobert" + }, + "user": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port" + }, + "description": "Introdueix la informaci\u00f3 de connexi\u00f3 del teu node [ESPHome](https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/cs.json b/homeassistant/components/esphome/translations/cs.json new file mode 100644 index 00000000000..b8c245a66e4 --- /dev/null +++ b/homeassistant/components/esphome/translations/cs.json @@ -0,0 +1,16 @@ +{ + "config": { + "step": { + "authenticate": { + "description": "Zadejte heslo, kter\u00e9 jste nastavili ve va\u0161\u00ed konfiguraci pro {name} ." + }, + "discovery_confirm": { + "description": "Chcete do domovsk\u00e9ho asistenta p\u0159idat uzel ESPHome `{name}`?", + "title": "Nalezen uzel ESPHome" + }, + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/cy.json b/homeassistant/components/esphome/translations/cy.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/cy.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/da.json b/homeassistant/components/esphome/translations/da.json new file mode 100644 index 00000000000..c05e2d34f01 --- /dev/null +++ b/homeassistant/components/esphome/translations/da.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP er allerede konfigureret" + }, + "error": { + "connection_error": "Kan ikke oprette forbindelse til ESP. S\u00f8rg for, at din YAML-fil indeholder en 'api:' linje.", + "invalid_password": "Ugyldig adgangskode!", + "resolve_error": "Kan ikke finde adressen p\u00e5 ESP. Hvis denne fejl forts\u00e6tter skal du angive en statisk IP-adresse: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Adgangskode" + }, + "description": "Indtast venligst den adgangskode du har angivet i din konfiguration for {name}.", + "title": "Indtast adgangskode" + }, + "discovery_confirm": { + "description": "Vil du tilf\u00f8je ESPHome-knudepunkt `{name}` til Home Assistant?", + "title": "Fandt ESPHome-knudepunkt" + }, + "user": { + "data": { + "host": "V\u00e6rt", + "port": "Port" + }, + "description": "Angiv forbindelsesindstillinger for din [ESPHome](https://esphomelib.com/) node.", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/de.json b/homeassistant/components/esphome/translations/de.json new file mode 100644 index 00000000000..64262aa654a --- /dev/null +++ b/homeassistant/components/esphome/translations/de.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP ist bereits konfiguriert" + }, + "error": { + "connection_error": "Keine Verbindung zum ESP m\u00f6glich. Achte darauf, dass deine YAML-Datei eine Zeile 'api:' enth\u00e4lt.", + "invalid_password": "Ung\u00fcltiges Passwort!", + "resolve_error": "Adresse des ESP kann nicht aufgel\u00f6st werden. Wenn dieser Fehler weiterhin besteht, lege eine statische IP-Adresse fest: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Passwort" + }, + "description": "Bitte gebe das Passwort der ESPHome-Konfiguration f\u00fcr {name} ein:", + "title": "Passwort eingeben" + }, + "discovery_confirm": { + "description": "Willst du den ESPHome-Knoten `{name}` zu Home Assistant hinzuf\u00fcgen?", + "title": "Gefundener ESPHome-Knoten" + }, + "user": { + "data": { + "host": "Host", + "port": "Port" + }, + "description": "Bitte gib die Verbindungseinstellungen deines [ESPHome](https://esphomelib.com/)-Knotens ein.", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/el.json b/homeassistant/components/esphome/translations/el.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/el.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/en.json b/homeassistant/components/esphome/translations/en.json new file mode 100644 index 00000000000..b52dbc5a3f1 --- /dev/null +++ b/homeassistant/components/esphome/translations/en.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP is already configured" + }, + "error": { + "connection_error": "Can't connect to ESP. Please make sure your YAML file contains an 'api:' line.", + "invalid_password": "Invalid password!", + "resolve_error": "Can't resolve address of the ESP. If this error persists, please set a static IP address: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Password" + }, + "description": "Please enter the password you set in your configuration for {name}.", + "title": "Enter Password" + }, + "discovery_confirm": { + "description": "Do you want to add the ESPHome node `{name}` to Home Assistant?", + "title": "Discovered ESPHome node" + }, + "user": { + "data": { + "host": "Host", + "port": "Port" + }, + "description": "Please enter connection settings of your [ESPHome](https://esphomelib.com/) node.", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/eo.json b/homeassistant/components/esphome/translations/eo.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/eo.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/es-419.json b/homeassistant/components/esphome/translations/es-419.json new file mode 100644 index 00000000000..7bbe61aceb2 --- /dev/null +++ b/homeassistant/components/esphome/translations/es-419.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP ya est\u00e1 configurado" + }, + "error": { + "connection_error": "No se puede conectar a ESP. Aseg\u00farese de que su archivo YAML contenga una l\u00ednea 'api:'.", + "invalid_password": "\u00a1Contrase\u00f1a invalida!", + "resolve_error": "No se puede resolver la direcci\u00f3n de la ESP. Si este error persiste, configure una direcci\u00f3n IP est\u00e1tica: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Contrase\u00f1a" + }, + "description": "Por favor ingrese la contrase\u00f1a que estableci\u00f3 en su configuraci\u00f3n para {name} .", + "title": "Escriba la contrase\u00f1a" + }, + "discovery_confirm": { + "description": "\u00bfDesea agregar el nodo ESPHome `{name}` a Home Assistant?", + "title": "Nodo ESPHome descubierto" + }, + "user": { + "data": { + "host": "Host", + "port": "Puerto" + }, + "description": "Por favor Ingrese la configuraci\u00f3n de conexi\u00f3n de su nodo [ESPHome] (https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/es.json b/homeassistant/components/esphome/translations/es.json new file mode 100644 index 00000000000..ff2f1f093c9 --- /dev/null +++ b/homeassistant/components/esphome/translations/es.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP ya est\u00e1 configurado" + }, + "error": { + "connection_error": "No se puede conectar a ESP. Aseg\u00farate de que tu archivo YAML contenga una l\u00ednea 'api:'.", + "invalid_password": "\u00a1Contrase\u00f1a incorrecta!", + "resolve_error": "No se puede resolver la direcci\u00f3n de ESP. Si el error persiste, configura una direcci\u00f3n IP est\u00e1tica: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Contrase\u00f1a" + }, + "description": "Escribe la contrase\u00f1a que hayas puesto en la configuraci\u00f3n para {name}.", + "title": "Escribe la contrase\u00f1a" + }, + "discovery_confirm": { + "description": "\u00bfQuieres a\u00f1adir el nodo `{name}` de ESPHome a Home Assistant?", + "title": "Nodo ESPHome descubierto" + }, + "user": { + "data": { + "host": "Host", + "port": "Puerto" + }, + "description": "Introduce la configuraci\u00f3n de la conexi\u00f3n de tu nodo [ESPHome](https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/et.json b/homeassistant/components/esphome/translations/et.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/et.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/eu.json b/homeassistant/components/esphome/translations/eu.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/eu.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/fa.json b/homeassistant/components/esphome/translations/fa.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/fa.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/fi.json b/homeassistant/components/esphome/translations/fi.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/fi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/fr.json b/homeassistant/components/esphome/translations/fr.json new file mode 100644 index 00000000000..8159b3cac2e --- /dev/null +++ b/homeassistant/components/esphome/translations/fr.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "connection_error": "Impossible de se connecter \u00e0 ESP. Assurez-vous que votre fichier YAML contient une ligne 'api:'.", + "invalid_password": "Mot de passe invalide !", + "resolve_error": "Impossible de r\u00e9soudre l'adresse de l'ESP. Si cette erreur persiste, veuillez d\u00e9finir une adresse IP statique: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Mot de passe" + }, + "description": "Veuillez saisir le mot de passe que vous avez d\u00e9fini dans votre configuration pour {name}", + "title": "Entrer votre mot de passe" + }, + "discovery_confirm": { + "description": "Voulez-vous ajouter le n\u0153ud ESPHome ` {name} ` \u00e0 Home Assistant?", + "title": "N\u0153ud ESPHome d\u00e9couvert" + }, + "user": { + "data": { + "host": "H\u00f4te", + "port": "Port" + }, + "description": "Veuillez saisir les param\u00e8tres de connexion de votre n\u0153ud [ESPHome] (https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/gsw.json b/homeassistant/components/esphome/translations/gsw.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/he.json b/homeassistant/components/esphome/translations/he.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/he.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/hi.json b/homeassistant/components/esphome/translations/hi.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/hi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/hr.json b/homeassistant/components/esphome/translations/hr.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/hr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/hu.json b/homeassistant/components/esphome/translations/hu.json new file mode 100644 index 00000000000..a178860d420 --- /dev/null +++ b/homeassistant/components/esphome/translations/hu.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Az ESP-t m\u00e1r konfigur\u00e1ltad." + }, + "error": { + "connection_error": "Nem lehet csatlakozni az ESP-hez. K\u00e9rlek gy\u0151z\u0151dj meg r\u00f3la, hogy a YAML f\u00e1jl tartalmaz egy \"api:\" sort.", + "invalid_password": "\u00c9rv\u00e9nytelen jelsz\u00f3!", + "resolve_error": "Az ESP c\u00edme nem oldhat\u00f3 fel. Ha a hiba tov\u00e1bbra is fenn\u00e1ll, k\u00e9rlek, \u00e1ll\u00edts be egy statikus IP-c\u00edmet: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Jelsz\u00f3" + }, + "description": "K\u00e9rlek, add meg a konfigur\u00e1ci\u00f3ban {name} n\u00e9vhez be\u00e1ll\u00edtott jelsz\u00f3t.", + "title": "Add meg a jelsz\u00f3t" + }, + "discovery_confirm": { + "description": "Szeretn\u00e9d hozz\u00e1adni a(z) `{name}` ESPHome csom\u00f3pontot a Home Assistant-hoz?", + "title": "Felfedezett ESPHome csom\u00f3pont" + }, + "user": { + "data": { + "host": "Hoszt", + "port": "Port" + }, + "description": "K\u00e9rlek, add meg az [ESPHome](https://esphomelib.com/) csom\u00f3pontod kapcsol\u00f3d\u00e1si be\u00e1ll\u00edt\u00e1sait.", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/iba.json b/homeassistant/components/esphome/translations/iba.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/iba.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/id.json b/homeassistant/components/esphome/translations/id.json new file mode 100644 index 00000000000..9c646def82c --- /dev/null +++ b/homeassistant/components/esphome/translations/id.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "ESP sudah dikonfigurasi" + }, + "step": { + "authenticate": { + "data": { + "password": "Kata kunci" + }, + "description": "Silakan masukkan kata kunci yang Anda atur di konfigurasi Anda.", + "title": "Masukkan kata kunci" + }, + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/is.json b/homeassistant/components/esphome/translations/is.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/is.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/it.json b/homeassistant/components/esphome/translations/it.json new file mode 100644 index 00000000000..050c1222495 --- /dev/null +++ b/homeassistant/components/esphome/translations/it.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \u00e8 gi\u00e0 configurato" + }, + "error": { + "connection_error": "Impossibile connettersi ad ESP. Assicurati che il tuo file YAML contenga una riga \"api:\".", + "invalid_password": "Password non valida!", + "resolve_error": "Impossibile risolvere l'indirizzo dell'ESP. Se questo errore persiste, impostare un indirizzo IP statico: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Password" + }, + "description": "Inserisci la password per {name} che hai impostato nella tua configurazione.", + "title": "Inserisci la password" + }, + "discovery_confirm": { + "description": "Vuoi aggiungere il nodo ESPHome `{name}` a Home Assistant?", + "title": "Trovato nodo ESPHome" + }, + "user": { + "data": { + "host": "Host", + "port": "Porta" + }, + "description": "Inserisci le impostazioni di connessione del tuo nodo [ESPHome] (https://esphomelib.com/).", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ja.json b/homeassistant/components/esphome/translations/ja.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/ja.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ko.json b/homeassistant/components/esphome/translations/ko.json new file mode 100644 index 00000000000..e89f3360b32 --- /dev/null +++ b/homeassistant/components/esphome/translations/ko.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "connection_error": "ESP \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. YAML \ud30c\uc77c\uc5d0 'api:' \ub97c \uad6c\uc131\ud588\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "invalid_password": "\uc798\ubabb\ub41c \ube44\ubc00\ubc88\ud638", + "resolve_error": "ESP \uc758 \uc8fc\uc18c\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \uc624\ub958\uac00 \uacc4\uc18d \ubc1c\uc0dd\ud558\uba74 \uace0\uc815 IP \uc8fc\uc18c\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638" + }, + "description": "{name} \uc758 \uad6c\uc131\uc5d0 \uc124\uc815\ud55c \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "\ube44\ubc00\ubc88\ud638 \uc785\ub825" + }, + "discovery_confirm": { + "description": "Home Assistant \uc5d0 ESPHome node `{name}` \uc744(\ub97c) \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "\ubc1c\uacac\ub41c ESPHome node" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "port": "\ud3ec\ud2b8" + }, + "description": "[ESPHome](https://esphomelib.com/) \ub178\ub4dc\uc758 \uc5f0\uacb0 \uad6c\uc131\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/lb.json b/homeassistant/components/esphome/translations/lb.json new file mode 100644 index 00000000000..9bfc78af28c --- /dev/null +++ b/homeassistant/components/esphome/translations/lb.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP ass scho konfigur\u00e9iert" + }, + "error": { + "connection_error": "Keng Verbindung zum ESP. Iwwerpr\u00e9ift d'Pr\u00e4sens vun der Zeil api: am YAML Fichier.", + "invalid_password": "Ong\u00ebltegt Passwuert!", + "resolve_error": "Kann d'Adresse vum ESP net opl\u00e9isen. Falls d\u00ebse Problem weiderhi besteet dann defin\u00e9iert eng statesch IP Adresse:\nhttps://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Passwuert" + }, + "description": "Gitt d'Passwuert vun \u00e4rer Konfiguratioun an fir {name}.", + "title": "Passwuert aginn" + }, + "discovery_confirm": { + "description": "W\u00ebllt dir den ESPHome Provider `{name}` am Home Assistant dob\u00e4isetzen?", + "title": "Entdeckten ESPHome Provider" + }, + "user": { + "data": { + "host": "Apparat", + "port": "Port" + }, + "description": "Gitt Verbindungs Informatioune vun \u00e4rem [ESPHome](https://esphomelib.com/) an.", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/lt.json b/homeassistant/components/esphome/translations/lt.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/lt.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/lv.json b/homeassistant/components/esphome/translations/lv.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/lv.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/nl.json b/homeassistant/components/esphome/translations/nl.json new file mode 100644 index 00000000000..4edc46a372a --- /dev/null +++ b/homeassistant/components/esphome/translations/nl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP is al geconfigureerd" + }, + "error": { + "connection_error": "Kan geen verbinding maken met ESP. Zorg ervoor dat uw YAML-bestand een regel 'api:' bevat.", + "invalid_password": "Ongeldig wachtwoord!", + "resolve_error": "Kan het adres van de ESP niet vinden. Als deze fout aanhoudt, stel dan een statisch IP-adres in: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Wachtwoord" + }, + "description": "Voer het wachtwoord in dat u in uw configuratie heeft ingesteld voor {name}.", + "title": "Voer wachtwoord in" + }, + "discovery_confirm": { + "description": "Wil je de ESPHome-node `{name}` toevoegen aan de Home Assistant?", + "title": "ESPHome node ontdekt" + }, + "user": { + "data": { + "host": "Host", + "port": "Poort" + }, + "description": "Voer de verbindingsinstellingen in van uw [ESPHome](https://esphomelib.com/) node.", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/nn.json b/homeassistant/components/esphome/translations/nn.json new file mode 100644 index 00000000000..628fb01a2cc --- /dev/null +++ b/homeassistant/components/esphome/translations/nn.json @@ -0,0 +1,13 @@ +{ + "config": { + "flow_title": "ESPHome: {name}", + "step": { + "discovery_confirm": { + "title": "Fann ESPhome node" + }, + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/no.json b/homeassistant/components/esphome/translations/no.json new file mode 100644 index 00000000000..c04f0c2a09d --- /dev/null +++ b/homeassistant/components/esphome/translations/no.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP er allerede konfigurert" + }, + "error": { + "connection_error": "Kan ikke koble til ESP. Kontroller at YAML filen din inneholder en \"api:\" linje.", + "invalid_password": "Ugyldig passord!", + "resolve_error": "Kan ikke l\u00f8se adressen til ESP. Hvis denne feilen vedvarer, m\u00e5 du [angi en statisk IP-adresse](https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips)" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Passord" + }, + "description": "Vennligst skriv inn passordet du har angitt i din konfigurasjon for {name}.", + "title": "Skriv Inn Passord" + }, + "discovery_confirm": { + "description": "\u00d8nsker du \u00e5 legge ESPHome noden `{name}` til Home Assistant?", + "title": "Oppdaget ESPHome node" + }, + "user": { + "data": { + "host": "Vert", + "port": "" + }, + "description": "Vennligst skriv inn tilkoblingsinnstillinger for din [ESPHome](https://esphomelib.com/) node.", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/pl.json b/homeassistant/components/esphome/translations/pl.json new file mode 100644 index 00000000000..c74b3d57e93 --- /dev/null +++ b/homeassistant/components/esphome/translations/pl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP jest ju\u017c skonfigurowane." + }, + "error": { + "connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z ESP. Upewnij si\u0119, \u017ce Tw\u00f3j plik YAML zawiera lini\u0119 'api:'.", + "invalid_password": "Nieprawid\u0142owe has\u0142o!", + "resolve_error": "Nie mo\u017cna rozpozna\u0107 adresu ESP. Je\u015bli ten b\u0142\u0105d b\u0119dzie si\u0119 powtarza\u0142, nale\u017cy ustawi\u0107 statyczny adres IP: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Has\u0142o" + }, + "description": "Wprowad\u017a has\u0142o ustawione w konfiguracji dla {name}.", + "title": "Wprowad\u017a has\u0142o" + }, + "discovery_confirm": { + "description": "Czy chcesz doda\u0107 w\u0119ze\u0142 ESPHome `{name}` do Home Assistant?", + "title": "Znaleziono w\u0119ze\u0142 ESPHome" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port" + }, + "description": "Wprowad\u017a ustawienia po\u0142\u0105czenia [ESPHome](https://esphomelib.com/) w\u0119z\u0142a.", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/pt-BR.json b/homeassistant/components/esphome/translations/pt-BR.json new file mode 100644 index 00000000000..bbc56421899 --- /dev/null +++ b/homeassistant/components/esphome/translations/pt-BR.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "O ESP j\u00e1 est\u00e1 configurado" + }, + "error": { + "connection_error": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao ESP. Por favor, verifique se o seu arquivo YAML cont\u00e9m uma linha 'api:'.", + "invalid_password": "Senha inv\u00e1lida!", + "resolve_error": "N\u00e3o \u00e9 poss\u00edvel resolver o endere\u00e7o do ESP. Se este erro persistir, por favor, defina um endere\u00e7o IP est\u00e1tico: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Senha" + }, + "description": "Por favor, digite a senha que voc\u00ea definiu em sua configura\u00e7\u00e3o.", + "title": "Digite a senha" + }, + "discovery_confirm": { + "description": "Voc\u00ea quer adicionar o n\u00f3 ESPHome ` {name} ` ao Home Assistant?", + "title": "N\u00f3 ESPHome descoberto" + }, + "user": { + "data": { + "host": "Host", + "port": "Porta" + }, + "description": "Por favor insira as configura\u00e7\u00f5es de conex\u00e3o de seu n\u00f3 de [ESPHome] (https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/pt.json b/homeassistant/components/esphome/translations/pt.json new file mode 100644 index 00000000000..7a5e8621d4c --- /dev/null +++ b/homeassistant/components/esphome/translations/pt.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "O ESP j\u00e1 est\u00e1 configurado" + }, + "error": { + "connection_error": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao ESP. Por favor, verifique se o seu arquivo YAML cont\u00e9m uma linha 'api:'.", + "invalid_password": "Palavra-passe inv\u00e1lida", + "resolve_error": "N\u00e3o \u00e9 poss\u00edvel resolver o endere\u00e7o do ESP. Se este erro persistir, defina um endere\u00e7o IP est\u00e1tico: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "step": { + "authenticate": { + "data": { + "password": "Palavra-passe" + }, + "description": "Por favor, insira a palavra-passe que colocou na configura\u00e7\u00e3o para {name}", + "title": "Palavra-passe" + }, + "discovery_confirm": { + "description": "Deseja adicionar um n\u00f3 ESPHome `{name}` ao Home Assistant?", + "title": "N\u00f3 ESPHome descoberto" + }, + "user": { + "data": { + "host": "Servidor", + "port": "Porta" + }, + "description": "Por favor, insira as configura\u00e7\u00f5es de liga\u00e7\u00e3o ao seu n\u00f3 [ESPHome] (https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ro.json b/homeassistant/components/esphome/translations/ro.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/ro.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ru.json b/homeassistant/components/esphome/translations/ru.json new file mode 100644 index 00000000000..8361fa371a4 --- /dev/null +++ b/homeassistant/components/esphome/translations/ru.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a ESP. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0412\u0430\u0448 YAML-\u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 'api:'.", + "invalid_password": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c!", + "resolve_error": "\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 ESP. \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 IP-\u0430\u0434\u0440\u0435\u0441: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips." + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 {name}.", + "title": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c" + }, + "discovery_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c ESPHome `{name}`?", + "title": "ESPHome" + }, + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0412\u0430\u0448\u0435\u043c\u0443 [ESPHome](https://esphomelib.com/).", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/sk.json b/homeassistant/components/esphome/translations/sk.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/sk.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/sl.json b/homeassistant/components/esphome/translations/sl.json new file mode 100644 index 00000000000..64aa9716f24 --- /dev/null +++ b/homeassistant/components/esphome/translations/sl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP je \u017ee konfiguriran" + }, + "error": { + "connection_error": "Ne morem se povezati z ESP. Poskrbite, da va\u0161a datoteka YAML vsebuje vrstico \"api:\".", + "invalid_password": "Neveljavno geslo!", + "resolve_error": "Ne moremo razre\u0161iti naslova ESP. \u010ce se napaka ponovi, prosimo nastavite stati\u010dni IP naslov: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "Geslo" + }, + "description": "Vnesite geslo, ki ste ga nastavili v konfiguraciji za {name}.", + "title": "Vnesite geslo" + }, + "discovery_confirm": { + "description": "\u017delite dodati ESPHome vozli\u0161\u010de ` {name} ` v Home Assistant?", + "title": "Odkrita ESPHome vozli\u0161\u010da" + }, + "user": { + "data": { + "host": "Gostitelj", + "port": "Vrata" + }, + "description": "Prosimo, vnesite nastavitve povezave va\u0161ega vozli\u0161\u010da [ESPHome] (https://esphomelib.com/).", + "title": "ESPHome" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/sr-Latn.json b/homeassistant/components/esphome/translations/sr-Latn.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/sr-Latn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/sr.json b/homeassistant/components/esphome/translations/sr.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/sr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/sv.json b/homeassistant/components/esphome/translations/sv.json new file mode 100644 index 00000000000..3c3a4a53f64 --- /dev/null +++ b/homeassistant/components/esphome/translations/sv.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \u00e4r redan konfigurerad" + }, + "error": { + "connection_error": "Kan inte ansluta till ESP. Se till att din YAML-fil inneh\u00e5ller en 'api:' line.", + "invalid_password": "Ogiltigt l\u00f6senord!", + "resolve_error": "Det g\u00e5r inte att hitta IP-adressen f\u00f6r ESP med DNS-namnet. Om det h\u00e4r felet kvarst\u00e5r anger du en statisk IP-adress: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "L\u00f6senord" + }, + "description": "Ange det l\u00f6senord du angett i din konfiguration f\u00f6r {name}.", + "title": "Ange l\u00f6senord" + }, + "discovery_confirm": { + "description": "Vill du l\u00e4gga till ESPHome noden ` {name} ` till Home Assistant?", + "title": "Uppt\u00e4ckt ESPHome-nod" + }, + "user": { + "data": { + "host": "V\u00e4rddatorn", + "port": "Port" + }, + "description": "Ange anslutningsinst\u00e4llningarna f\u00f6r noden [ESPHome](https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ta.json b/homeassistant/components/esphome/translations/ta.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/ta.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/te.json b/homeassistant/components/esphome/translations/te.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/te.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/th.json b/homeassistant/components/esphome/translations/th.json new file mode 100644 index 00000000000..10520139bd2 --- /dev/null +++ b/homeassistant/components/esphome/translations/th.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "invalid_password": "\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07!" + }, + "step": { + "authenticate": { + "data": { + "password": "\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19" + }, + "title": "\u0e43\u0e2a\u0e48\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19" + }, + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/tr.json b/homeassistant/components/esphome/translations/tr.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/tr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/uk.json b/homeassistant/components/esphome/translations/uk.json new file mode 100644 index 00000000000..ec22664e46b --- /dev/null +++ b/homeassistant/components/esphome/translations/uk.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \u0432\u0436\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0430\u043d\u043e" + }, + "error": { + "connection_error": "\u041d\u0435 \u0432\u0434\u0430\u0454\u0442\u044c\u0441\u044f \u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0438\u0441\u044f \u0434\u043e ESP. \u041f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0439\u0442\u0435\u0441\u044f, \u0449\u043e \u0444\u0430\u0439\u043b YAML \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0440\u044f\u0434\u043e\u043a \"api:\".", + "invalid_password": "\u041d\u0435\u0432\u0456\u0440\u043d\u0438\u0439 \u043f\u0430\u0440\u043e\u043b\u044c!", + "resolve_error": "\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 ESP. \u042f\u043a\u0449\u043e \u0446\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430 \u043d\u0435 \u0437\u043d\u0438\u043a\u0430\u0454, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443 IP-\u0430\u0434\u0440\u0435\u0441\u0443: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "step": { + "authenticate": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c" + }, + "description": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c, \u044f\u043a\u0438\u0439 \u0432\u0438 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0443 \u0441\u0432\u043e\u0457\u0439 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457.", + "title": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c" + }, + "discovery_confirm": { + "description": "\u0414\u043e\u0434\u0430\u0442\u0438 ESPHome \u0432\u0443\u0437\u043e\u043b {name} \u0443 Home Assistant?", + "title": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0432\u0443\u0437\u043e\u043b ESPHome" + }, + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442" + }, + "description": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044f \u0432\u0430\u0448\u043e\u0433\u043e \u0432\u0443\u0437\u043b\u0430 [ESPHome] (https://esphomelib.com/).", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/ur.json b/homeassistant/components/esphome/translations/ur.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/ur.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/vi.json b/homeassistant/components/esphome/translations/vi.json new file mode 100644 index 00000000000..9d6d417a053 --- /dev/null +++ b/homeassistant/components/esphome/translations/vi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/zh-Hans.json b/homeassistant/components/esphome/translations/zh-Hans.json new file mode 100644 index 00000000000..8c756a69686 --- /dev/null +++ b/homeassistant/components/esphome/translations/zh-Hans.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \u5df2\u914d\u7f6e\u5b8c\u6210" + }, + "error": { + "connection_error": "\u65e0\u6cd5\u8fde\u63a5\u5230 ESP\u3002\u8bf7\u786e\u8ba4\u60a8\u7684 YAML \u6587\u4ef6\u4e2d\u5305\u542b 'api:' \u884c\u3002", + "invalid_password": "\u65e0\u6548\u7684\u5bc6\u7801\uff01", + "resolve_error": "\u65e0\u6cd5\u89e3\u6790 ESP \u7684\u5730\u5740\u3002\u5982\u679c\u6b64\u9519\u8bef\u6301\u7eed\u5b58\u5728\uff0c\u8bf7\u8bbe\u7f6e\u9759\u6001IP\u5730\u5740\uff1ahttps://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome: {name}", + "step": { + "authenticate": { + "data": { + "password": "\u5bc6\u7801" + }, + "description": "\u8bf7\u8f93\u5165\u60a8\u5728\u914d\u7f6e\u4e2d\u4e3a\u201c{name}\u201d\u8bbe\u7f6e\u7684\u5bc6\u7801\u3002", + "title": "\u8f93\u5165\u5bc6\u7801" + }, + "discovery_confirm": { + "description": "\u662f\u5426\u8981\u5c06 ESPHome \u8282\u70b9 `{name}` \u6dfb\u52a0\u5230 Home Assistant\uff1f", + "title": "\u53d1\u73b0\u4e86 ESPHome \u8282\u70b9" + }, + "user": { + "data": { + "host": "\u4e3b\u673a", + "port": "\u7aef\u53e3" + }, + "description": "\u8bf7\u8f93\u5165\u60a8\u7684 [ESPHome](https://esphomelib.com/) \u8282\u70b9\u7684\u8fde\u63a5\u8bbe\u7f6e\u3002", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/zh-Hant.json b/homeassistant/components/esphome/translations/zh-Hant.json new file mode 100644 index 00000000000..7495204945d --- /dev/null +++ b/homeassistant/components/esphome/translations/zh-Hant.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "ESP \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "connection_error": "\u7121\u6cd5\u9023\u7dda\u81f3 ESP\uff0c\u8acb\u78ba\u5b9a\u60a8\u7684 YAML \u6a94\u6848\u5305\u542b\u300capi:\u300d\u8a2d\u5b9a\u5217\u3002", + "invalid_password": "\u5bc6\u78bc\u7121\u6548\uff01", + "resolve_error": "\u7121\u6cd5\u89e3\u6790 ESP \u4f4d\u5740\uff0c\u5047\u5982\u6b64\u932f\u8aa4\u6301\u7e8c\u767c\u751f\uff0c\u8acb\u53c3\u8003\u8aaa\u660e\u8a2d\u5b9a\u70ba\u975c\u614b\u56fa\u5b9a IP \uff1a https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips" + }, + "flow_title": "ESPHome\uff1a{name}", + "step": { + "authenticate": { + "data": { + "password": "\u5bc6\u78bc" + }, + "description": "\u8acb\u8f38\u5165 {name} \u8a2d\u5b9a\u5167\u6240\u8a2d\u5b9a\u4e4b\u5bc6\u78bc\u3002", + "title": "\u8f38\u5165\u5bc6\u78bc" + }, + "discovery_confirm": { + "description": "\u662f\u5426\u8981\u5c07 ESPHome \u7bc0\u9ede `{name}` \u65b0\u589e\u81f3 Home Assistant\uff1f", + "title": "\u81ea\u52d5\u63a2\u7d22\u5230 ESPHome \u7bc0\u9ede" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0" + }, + "description": "\u8acb\u8f38\u5165 [ESPHome](https://esphomelib.com/) \u7bc0\u9ede\u9023\u7dda\u8cc7\u8a0a\u3002", + "title": "[%key:component::esphome::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/essent/manifest.json b/homeassistant/components/essent/manifest.json index 914c8f1556f..a46d37ccdc8 100644 --- a/homeassistant/components/essent/manifest.json +++ b/homeassistant/components/essent/manifest.json @@ -3,6 +3,5 @@ "name": "Essent", "documentation": "https://www.home-assistant.io/integrations/essent", "requirements": ["PyEssent==0.13"], - "dependencies": [], "codeowners": ["@TheLastProject"] } diff --git a/homeassistant/components/etherscan/manifest.json b/homeassistant/components/etherscan/manifest.json index 106ec6f1f96..b21f7d0e3fb 100644 --- a/homeassistant/components/etherscan/manifest.json +++ b/homeassistant/components/etherscan/manifest.json @@ -3,6 +3,5 @@ "name": "Etherscan", "documentation": "https://www.home-assistant.io/integrations/etherscan", "requirements": ["python-etherscan-api==0.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/eufy/manifest.json b/homeassistant/components/eufy/manifest.json index dc9176db7b0..49956b9f0b2 100644 --- a/homeassistant/components/eufy/manifest.json +++ b/homeassistant/components/eufy/manifest.json @@ -3,6 +3,5 @@ "name": "eufy", "documentation": "https://www.home-assistant.io/integrations/eufy", "requirements": ["lakeside==0.12"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/everlights/manifest.json b/homeassistant/components/everlights/manifest.json index 7ee6378af01..83cb166296d 100644 --- a/homeassistant/components/everlights/manifest.json +++ b/homeassistant/components/everlights/manifest.json @@ -3,6 +3,5 @@ "name": "EverLights", "documentation": "https://www.home-assistant.io/integrations/everlights", "requirements": ["pyeverlights==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/evohome/__init__.py b/homeassistant/components/evohome/__init__.py index f56c92d6572..e4d2cf00e71 100644 --- a/homeassistant/components/evohome/__init__.py +++ b/homeassistant/components/evohome/__init__.py @@ -86,7 +86,7 @@ SET_ZONE_OVERRIDE_SCHEMA = vol.Schema( vol.Coerce(float), vol.Range(min=4.0, max=35.0) ), vol.Optional(ATTR_DURATION_UNTIL): vol.All( - cv.time_period, vol.Range(min=timedelta(days=0), max=timedelta(days=1)), + cv.time_period, vol.Range(min=timedelta(days=0), max=timedelta(days=1)) ), } ) @@ -121,7 +121,7 @@ def convert_dict(dictionary: Dict[str, Any]) -> Dict[str, Any]: """Convert a string to snake_case.""" string = re.sub(r"[\-\.\s]", "_", str(key)) return (string[0]).lower() + re.sub( - r"[A-Z]", lambda matched: "_" + matched.group(0).lower(), string[1:] + r"[A-Z]", lambda matched: f"_{matched.group(0).lower()}", string[1:] ) return { diff --git a/homeassistant/components/evohome/manifest.json b/homeassistant/components/evohome/manifest.json index 16b27452c7c..8bcecca551b 100644 --- a/homeassistant/components/evohome/manifest.json +++ b/homeassistant/components/evohome/manifest.json @@ -3,6 +3,5 @@ "name": "Honeywell Total Connect Comfort (Europe)", "documentation": "https://www.home-assistant.io/integrations/evohome", "requirements": ["evohome-async==0.3.5.post1"], - "dependencies": [], "codeowners": ["@zxdavb"] } diff --git a/homeassistant/components/evohome/services.yaml b/homeassistant/components/evohome/services.yaml index ebc859ed9e3..04f7a3ac2aa 100644 --- a/homeassistant/components/evohome/services.yaml +++ b/homeassistant/components/evohome/services.yaml @@ -3,16 +3,16 @@ set_system_mode: description: >- - Set the system mode, either indefinitely, or for a specified period of time, after - which it will revert to Auto. Not all systems support all modes. + Set the system mode, either indefinitely, or for a specified period of time, after + which it will revert to Auto. Not all systems support all modes. fields: mode: - description: 'One of: Auto, AutoWithEco, Away, DayOff, HeatingOff, or Custom.' + description: "One of: Auto, AutoWithEco, Away, DayOff, HeatingOff, or Custom." example: Away period: description: >- - A period of time in days; used only with Away, DayOff, or Custom. The system - will revert to Auto at midnight (up to 99 days, today is day 1). + A period of time in days; used only with Away, DayOff, or Custom. The system + will revert to Auto at midnight (up to 99 days, today is day 1). example: '{"days": 28}' duration: description: The duration in hours; used only with AutoWithEco (up to 24 hours). @@ -20,18 +20,18 @@ set_system_mode: reset_system: description: >- - Set the system to Auto mode and reset all the zones to follow their schedules. - Not all Evohome systems support this feature (i.e. AutoWithReset mode). + Set the system to Auto mode and reset all the zones to follow their schedules. + Not all Evohome systems support this feature (i.e. AutoWithReset mode). refresh_system: description: >- - Pull the latest data from the vendor's servers now, rather than waiting for the - next scheduled update. + Pull the latest data from the vendor's servers now, rather than waiting for the + next scheduled update. set_zone_override: description: >- - Override a zone's setpoint, either indefinitely, or for a specified period of - time, after which it will revert to following its schedule. + Override a zone's setpoint, either indefinitely, or for a specified period of + time, after which it will revert to following its schedule. fields: entity_id: description: The entity_id of the Evohome zone. @@ -41,8 +41,8 @@ set_zone_override: example: 5.0 duration: description: >- - The zone will revert to its schedule after this time. If 0 the change is until - the next scheduled setpoint. + The zone will revert to its schedule after this time. If 0 the change is until + the next scheduled setpoint. example: '{"minutes": 135}' clear_zone_override: diff --git a/homeassistant/components/ezviz/camera.py b/homeassistant/components/ezviz/camera.py index b8ede42a508..e7e6725e455 100644 --- a/homeassistant/components/ezviz/camera.py +++ b/homeassistant/components/ezviz/camera.py @@ -219,15 +219,16 @@ class HassEzvizCamera(Camera): ffmpeg = ImageFrame(self._ffmpeg.binary, loop=self.hass.loop) image = await asyncio.shield( - ffmpeg.get_image(self._rtsp_stream, output_format=IMAGE_JPEG,) + ffmpeg.get_image(self._rtsp_stream, output_format=IMAGE_JPEG) ) return image async def stream_source(self): """Return the stream source.""" if self._local_rtsp_port: - rtsp_stream_source = "rtsp://{}:{}@{}:{}".format( - self._username, self._password, self._local_ip, self._local_rtsp_port + rtsp_stream_source = ( + f"rtsp://{self._username}:{self._password}@" + f"{self._local_ip}:{self._local_rtsp_port}" ) _LOGGER.debug( "Camera %s source stream: %s", self._serial, rtsp_stream_source diff --git a/homeassistant/components/ezviz/manifest.json b/homeassistant/components/ezviz/manifest.json index 167f063c0f7..651fd77619c 100644 --- a/homeassistant/components/ezviz/manifest.json +++ b/homeassistant/components/ezviz/manifest.json @@ -2,7 +2,6 @@ "domain": "ezviz", "name": "Ezviz", "documentation": "https://www.home-assistant.io/integrations/ezviz", - "dependencies": [], "codeowners": ["@baqs"], "requirements": ["pyezviz==0.1.5"] -} +} diff --git a/homeassistant/components/facebook/manifest.json b/homeassistant/components/facebook/manifest.json index dfdda34d39f..5d44ccc40ce 100644 --- a/homeassistant/components/facebook/manifest.json +++ b/homeassistant/components/facebook/manifest.json @@ -2,7 +2,5 @@ "domain": "facebook", "name": "Facebook Messenger", "documentation": "https://www.home-assistant.io/integrations/facebook", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/facebook/notify.py b/homeassistant/components/facebook/notify.py index 34d5b14cf25..0ce2fbfc665 100644 --- a/homeassistant/components/facebook/notify.py +++ b/homeassistant/components/facebook/notify.py @@ -12,7 +12,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONTENT_TYPE_JSON +from homeassistant.const import CONTENT_TYPE_JSON, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -76,7 +76,7 @@ class FacebookNotificationService(BaseNotificationService): headers={CONTENT_TYPE: CONTENT_TYPE_JSON}, timeout=10, ) - if resp.status_code != 200: + if resp.status_code != HTTP_OK: log_error(resp) diff --git a/homeassistant/components/facebox/manifest.json b/homeassistant/components/facebox/manifest.json index 2c911eb04ef..d8a8fb457ea 100644 --- a/homeassistant/components/facebox/manifest.json +++ b/homeassistant/components/facebox/manifest.json @@ -2,7 +2,5 @@ "domain": "facebox", "name": "Facebox", "documentation": "https://www.home-assistant.io/integrations/facebox", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/facebox/services.yaml b/homeassistant/components/facebox/services.yaml index c6b686efb85..caa2e7df2c6 100644 --- a/homeassistant/components/facebox/services.yaml +++ b/homeassistant/components/facebox/services.yaml @@ -3,10 +3,10 @@ teach_face: fields: entity_id: description: The facebox entity to teach. - example: 'image_processing.facebox' + example: "image_processing.facebox" name: description: The name of the face to teach. - example: 'my_name' + example: "my_name" file_path: description: The path to the image file. - example: '/images/my_image.jpg' + example: "/images/my_image.jpg" diff --git a/homeassistant/components/fail2ban/manifest.json b/homeassistant/components/fail2ban/manifest.json index 01afbb12b6f..4d8e50d507b 100644 --- a/homeassistant/components/fail2ban/manifest.json +++ b/homeassistant/components/fail2ban/manifest.json @@ -2,7 +2,5 @@ "domain": "fail2ban", "name": "Fail2Ban", "documentation": "https://www.home-assistant.io/integrations/fail2ban", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fail2ban/sensor.py b/homeassistant/components/fail2ban/sensor.py index 6e47cb45966..2f206dca737 100644 --- a/homeassistant/components/fail2ban/sensor.py +++ b/homeassistant/components/fail2ban/sensor.py @@ -107,14 +107,14 @@ class BanLogParser: def __init__(self, log_file): """Initialize the parser.""" self.log_file = log_file - self.data = list() - self.ip_regex = dict() + self.data = [] + self.ip_regex = {} def read_log(self, jail): """Read the fail2ban log and find entries for jail.""" - self.data = list() + self.data = [] try: - with open(self.log_file, "r", encoding="utf-8") as file_data: + with open(self.log_file, encoding="utf-8") as file_data: self.data = self.ip_regex[jail].findall(file_data.read()) except (IndexError, FileNotFoundError, IsADirectoryError, UnboundLocalError): diff --git a/homeassistant/components/familyhub/manifest.json b/homeassistant/components/familyhub/manifest.json index f0181ba79ed..06acb922eee 100644 --- a/homeassistant/components/familyhub/manifest.json +++ b/homeassistant/components/familyhub/manifest.json @@ -3,6 +3,5 @@ "name": "Samsung Family Hub", "documentation": "https://www.home-assistant.io/integrations/familyhub", "requirements": ["python-family-hub-local==0.0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fan/.translations/bg.json b/homeassistant/components/fan/.translations/bg.json deleted file mode 100644 index f678c870968..00000000000 --- a/homeassistant/components/fan/.translations/bg.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438 {entity_name}", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" - }, - "trigger_type": { - "turned_off": "{entity_name} \u0431\u044a\u0434\u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "turned_on": "{entity_name} \u0431\u044a\u0434\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/ca.json b/homeassistant/components/fan/.translations/ca.json deleted file mode 100644 index e2f3ce2b0a4..00000000000 --- a/homeassistant/components/fan/.translations/ca.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Apaga {entity_name}", - "turn_on": "Enc\u00e9n {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e0 apagat", - "is_on": "{entity_name} est\u00e0 enc\u00e8s" - }, - "trigger_type": { - "turned_off": "{entity_name} s'ha apagat", - "turned_on": "{entity_name} s'ha enc\u00e8s" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/da.json b/homeassistant/components/fan/.translations/da.json deleted file mode 100644 index 0c9556bfedb..00000000000 --- a/homeassistant/components/fan/.translations/da.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Sluk {entity_name}", - "turn_on": "T\u00e6nd for {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} er slukket", - "is_on": "{entity_name} er t\u00e6ndt" - }, - "trigger_type": { - "turned_off": "{entity_name} blev slukket", - "turned_on": "{entity_name} blev t\u00e6ndt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/de.json b/homeassistant/components/fan/.translations/de.json deleted file mode 100644 index 9c3559b7cfc..00000000000 --- a/homeassistant/components/fan/.translations/de.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Schalte {entity_name} aus.", - "turn_on": "Schalte {entity_name} ein." - }, - "condition_type": { - "is_off": "{entity_name} ist ausgeschaltet", - "is_on": "{entity_name} ist eingeschaltet" - }, - "trigger_type": { - "turned_off": "{entity_name} ausgeschaltet", - "turned_on": "{entity_name} eingeschaltet" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/en.json b/homeassistant/components/fan/.translations/en.json deleted file mode 100644 index c27d983ca2e..00000000000 --- a/homeassistant/components/fan/.translations/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Turn off {entity_name}", - "turn_on": "Turn on {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} is off", - "is_on": "{entity_name} is on" - }, - "trigger_type": { - "turned_off": "{entity_name} turned off", - "turned_on": "{entity_name} turned on" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/es-419.json b/homeassistant/components/fan/.translations/es-419.json deleted file mode 100644 index dd0c006d760..00000000000 --- a/homeassistant/components/fan/.translations/es-419.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_off": "{entity_name} est\u00e1 apagado", - "is_on": "{entity_name} est\u00e1 encendido" - }, - "trigger_type": { - "turned_off": "{entity_name} se apag\u00f3", - "turned_on": "{entity_name} se encendi\u00f3" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/es.json b/homeassistant/components/fan/.translations/es.json deleted file mode 100644 index 4ceefe9c721..00000000000 --- a/homeassistant/components/fan/.translations/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Desactivar {entity_name}", - "turn_on": "Activar {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 desactivado", - "is_on": "{entity_name} est\u00e1 activado" - }, - "trigger_type": { - "turned_off": "{entity_name} desactivado", - "turned_on": "{entity_name} activado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/fr.json b/homeassistant/components/fan/.translations/fr.json deleted file mode 100644 index e6944dab781..00000000000 --- a/homeassistant/components/fan/.translations/fr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "\u00c9teindre {entity_name}", - "turn_on": "Allumer {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est d\u00e9sactiv\u00e9", - "is_on": "{entity_name} est activ\u00e9" - }, - "trigger_type": { - "turned_off": "{entity_name} est \u00e9teint", - "turned_on": "{entity_name} allum\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/hu.json b/homeassistant/components/fan/.translations/hu.json deleted file mode 100644 index b559f29c581..00000000000 --- a/homeassistant/components/fan/.translations/hu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "{entity_name} kikapcsol\u00e1sa", - "turn_on": "{entity_name} bekapcsol\u00e1sa" - }, - "condition_type": { - "is_off": "{entity_name} ki van kapcsolva", - "is_on": "{entity_name} be van kapcsolva" - }, - "trigger_type": { - "turned_off": "{entity_name} ki lett kapcsolva", - "turned_on": "{entity_name} be lett kapcsolva" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/it.json b/homeassistant/components/fan/.translations/it.json deleted file mode 100644 index 4fab847f1cb..00000000000 --- a/homeassistant/components/fan/.translations/it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Spegnere {entity_name}", - "turn_on": "Accendere {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u00e8 spento", - "is_on": "{entity_name} \u00e8 acceso" - }, - "trigger_type": { - "turned_off": "{entity_name} disattivato", - "turned_on": "{entity_name} attivato" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/ko.json b/homeassistant/components/fan/.translations/ko.json deleted file mode 100644 index dec2a711e57..00000000000 --- a/homeassistant/components/fan/.translations/ko.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "{entity_name} \ub044\uae30", - "turn_on": "{entity_name} \ucf1c\uae30" - }, - "condition_type": { - "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", - "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74" - }, - "trigger_type": { - "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", - "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/lb.json b/homeassistant/components/fan/.translations/lb.json deleted file mode 100644 index f5170949bad..00000000000 --- a/homeassistant/components/fan/.translations/lb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "{entity_name} ausschalten", - "turn_on": "{entity_name} uschalten" - }, - "condition_type": { - "is_off": "{entity_name} ass aus", - "is_on": "{entity_name} ass un" - }, - "trigger_type": { - "turned_off": "{entity_name} gouf ausgeschalt", - "turned_on": "{entity_name} gouf ugeschalt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/nl.json b/homeassistant/components/fan/.translations/nl.json deleted file mode 100644 index 4837b301ea7..00000000000 --- a/homeassistant/components/fan/.translations/nl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Schakel {entity_name} uit", - "turn_on": "Schakel {entity_name} in" - }, - "condition_type": { - "is_off": "{entity_name} is uitgeschakeld", - "is_on": "{entity_name} is ingeschakeld" - }, - "trigger_type": { - "turned_off": "{entity_name} uitgeschakeld", - "turned_on": "{entity_name} ingeschakeld" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/no.json b/homeassistant/components/fan/.translations/no.json deleted file mode 100644 index aa6320f0a65..00000000000 --- a/homeassistant/components/fan/.translations/no.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Sl\u00e5 av {entity_name}", - "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} er av", - "is_on": "{entity_name} er p\u00e5" - }, - "trigger_type": { - "turned_off": "{entity_name} sl\u00e5tt av", - "turned_on": "{entity_name} sl\u00e5tt p\u00e5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/pl.json b/homeassistant/components/fan/.translations/pl.json deleted file mode 100644 index 709a63c2389..00000000000 --- a/homeassistant/components/fan/.translations/pl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "wy\u0142\u0105cz {entity_name}", - "turn_on": "w\u0142\u0105cz {entity_name}" - }, - "condition_type": { - "is_off": "wentylator (entity_name} jest wy\u0142\u0105czony", - "is_on": "wentylator (entity_name} jest w\u0142\u0105czony" - }, - "trigger_type": { - "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", - "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/pt-BR.json b/homeassistant/components/fan/.translations/pt-BR.json deleted file mode 100644 index 6b95464bdbc..00000000000 --- a/homeassistant/components/fan/.translations/pt-BR.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_off": "{entity_name} est\u00e1 desligado", - "is_on": "{entity_name} est\u00e1 ligado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/pt.json b/homeassistant/components/fan/.translations/pt.json deleted file mode 100644 index ab78bc776bd..00000000000 --- a/homeassistant/components/fan/.translations/pt.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Desligar {entity_name}", - "turn_on": "Ligar {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 desligada", - "is_on": "{entity_name} est\u00e1 ligada" - }, - "trigger_type": { - "turned_off": "{entity_name} desligou-se", - "turned_on": "{entity_name} ligou-se" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/ru.json b/homeassistant/components/fan/.translations/ru.json deleted file mode 100644 index 157c78975cb..00000000000 --- a/homeassistant/components/fan/.translations/ru.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" - }, - "trigger_type": { - "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/sl.json b/homeassistant/components/fan/.translations/sl.json deleted file mode 100644 index a2bca3352ab..00000000000 --- a/homeassistant/components/fan/.translations/sl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Izklopite {entity_name}", - "turn_on": "Vklopite {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} je izklopljen", - "is_on": "{entity_name} je vklopljen" - }, - "trigger_type": { - "turned_off": "{entity_name} izklopljen", - "turned_on": "{entity_name} vklopljen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/sv.json b/homeassistant/components/fan/.translations/sv.json deleted file mode 100644 index c080d1b364b..00000000000 --- a/homeassistant/components/fan/.translations/sv.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "St\u00e4ng av {entity_name}", - "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u00e4r avst\u00e4ngd", - "is_on": "{entity_name} \u00e4r p\u00e5" - }, - "trigger_type": { - "turned_off": "{entity_name} st\u00e4ngdes av", - "turned_on": "{entity_name} aktiverades" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/zh-Hans.json b/homeassistant/components/fan/.translations/zh-Hans.json deleted file mode 100644 index f909bd8ac62..00000000000 --- a/homeassistant/components/fan/.translations/zh-Hans.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "\u5173\u95ed {entity_name}", - "turn_on": "\u6253\u5f00 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u5df2\u5173\u95ed", - "is_on": "{entity_name} \u5df2\u5f00\u542f" - }, - "trigger_type": { - "turned_off": "{entity_name} \u88ab\u5173\u95ed", - "turned_on": "{entity_name} \u88ab\u5f00\u542f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/.translations/zh-Hant.json b/homeassistant/components/fan/.translations/zh-Hant.json deleted file mode 100644 index 01da8652b2f..00000000000 --- a/homeassistant/components/fan/.translations/zh-Hant.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "\u95dc\u9589{entity_name}", - "turn_on": "\u958b\u555f{entity_name}" - }, - "condition_type": { - "is_off": "{entity_name}\u95dc\u9589", - "is_on": "{entity_name}\u958b\u555f" - }, - "trigger_type": { - "turned_off": "{entity_name}\u5df2\u95dc\u9589", - "turned_on": "{entity_name}\u5df2\u958b\u555f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/fan/__init__.py b/homeassistant/components/fan/__init__.py index 76bd16a6363..a395a5da470 100644 --- a/homeassistant/components/fan/__init__.py +++ b/homeassistant/components/fan/__init__.py @@ -141,7 +141,6 @@ class FanEntity(ToggleEntity): def oscillate(self, oscillating: bool) -> None: """Oscillate the fan.""" - pass async def async_oscillate(self, oscillating: bool): """Oscillate the fan.""" diff --git a/homeassistant/components/fan/manifest.json b/homeassistant/components/fan/manifest.json index 53b7873612c..76573e08cbb 100644 --- a/homeassistant/components/fan/manifest.json +++ b/homeassistant/components/fan/manifest.json @@ -2,8 +2,6 @@ "domain": "fan", "name": "Fan", "documentation": "https://www.home-assistant.io/integrations/fan", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/fan/reproduce_state.py b/homeassistant/components/fan/reproduce_state.py index 2692ac7ee5c..55ae78d90f6 100644 --- a/homeassistant/components/fan/reproduce_state.py +++ b/homeassistant/components/fan/reproduce_state.py @@ -2,7 +2,7 @@ import asyncio import logging from types import MappingProxyType -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -35,7 +35,11 @@ ATTRIBUTES = { # attribute: service async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -85,11 +89,20 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Fan states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/fan/services.yaml b/homeassistant/components/fan/services.yaml index 1fbd9089ed7..1fb88a36d2c 100644 --- a/homeassistant/components/fan/services.yaml +++ b/homeassistant/components/fan/services.yaml @@ -1,55 +1,54 @@ # Describes the format for available fan services - set_speed: description: Sets fan speed. fields: entity_id: description: Name(s) of the entities to set - example: 'fan.living_room' + example: "fan.living_room" speed: description: Speed setting - example: 'low' + example: "low" turn_on: description: Turns fan on. fields: entity_id: description: Names(s) of the entities to turn on - example: 'fan.living_room' + example: "fan.living_room" speed: description: Speed setting - example: 'high' + example: "high" turn_off: description: Turns fan off. fields: entity_id: description: Names(s) of the entities to turn off - example: 'fan.living_room' + example: "fan.living_room" oscillate: description: Oscillates the fan. fields: entity_id: description: Name(s) of the entities to oscillate - example: 'fan.desk_fan' + example: "fan.desk_fan" oscillating: description: Flag to turn on/off oscillation - example: True + example: true toggle: description: Toggle the fan on/off. fields: entity_id: description: Name(s) of the entities to toggle - example: 'fan.living_room' + example: "fan.living_room" set_direction: description: Set the fan rotation. fields: entity_id: description: Name(s) of the entities to set - example: 'fan.living_room' + example: "fan.living_room" direction: description: The direction to rotate. Either 'forward' or 'reverse' - example: 'forward' + example: "forward" diff --git a/homeassistant/components/fan/strings.json b/homeassistant/components/fan/strings.json index 98c3012c123..7ec4eebea7e 100644 --- a/homeassistant/components/fan/strings.json +++ b/homeassistant/components/fan/strings.json @@ -1,4 +1,5 @@ { + "title": "Fan", "device_automation": { "condition_type": { "is_on": "{entity_name} is on", @@ -12,5 +13,11 @@ "turn_on": "Turn on {entity_name}", "turn_off": "Turn off {entity_name}" } + }, + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } } } diff --git a/homeassistant/components/fan/translations/af.json b/homeassistant/components/fan/translations/af.json new file mode 100644 index 00000000000..cb955a8bec9 --- /dev/null +++ b/homeassistant/components/fan/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Waaier" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ar.json b/homeassistant/components/fan/translations/ar.json new file mode 100644 index 00000000000..d20f0b68e89 --- /dev/null +++ b/homeassistant/components/fan/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0645\u0631\u0648\u062d\u0629" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/bg.json b/homeassistant/components/fan/translations/bg.json new file mode 100644 index 00000000000..34eaae0e84e --- /dev/null +++ b/homeassistant/components/fan/translations/bg.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438 {entity_name}", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" + }, + "trigger_type": { + "turned_off": "{entity_name} \u0431\u044a\u0434\u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "turned_on": "{entity_name} \u0431\u044a\u0434\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u0412\u0435\u043d\u0442\u0438\u043b\u0430\u0442\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/bs.json b/homeassistant/components/fan/translations/bs.json new file mode 100644 index 00000000000..e0cbfcbec89 --- /dev/null +++ b/homeassistant/components/fan/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ca.json b/homeassistant/components/fan/translations/ca.json new file mode 100644 index 00000000000..2c9ea5f4e70 --- /dev/null +++ b/homeassistant/components/fan/translations/ca.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Apaga {entity_name}", + "turn_on": "Enc\u00e9n {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e0 apagat", + "is_on": "{entity_name} est\u00e0 enc\u00e8s" + }, + "trigger_type": { + "turned_off": "{entity_name} s'ha apagat", + "turned_on": "{entity_name} s'ha enc\u00e8s" + } + }, + "state": { + "_": { + "off": "Apagat", + "on": "Enc\u00e8s" + } + }, + "title": "Ventiladors" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/cs.json b/homeassistant/components/fan/translations/cs.json new file mode 100644 index 00000000000..58f27535d2b --- /dev/null +++ b/homeassistant/components/fan/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Ventil\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/cy.json b/homeassistant/components/fan/translations/cy.json new file mode 100644 index 00000000000..6454924ef23 --- /dev/null +++ b/homeassistant/components/fan/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Ffan" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/da.json b/homeassistant/components/fan/translations/da.json new file mode 100644 index 00000000000..b6028ee6a18 --- /dev/null +++ b/homeassistant/components/fan/translations/da.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Sluk {entity_name}", + "turn_on": "T\u00e6nd for {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} er slukket", + "is_on": "{entity_name} er t\u00e6ndt" + }, + "trigger_type": { + "turned_off": "{entity_name} blev slukket", + "turned_on": "{entity_name} blev t\u00e6ndt" + } + }, + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Bl\u00e6ser" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/de.json b/homeassistant/components/fan/translations/de.json new file mode 100644 index 00000000000..04d15e42706 --- /dev/null +++ b/homeassistant/components/fan/translations/de.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Schalte {entity_name} aus.", + "turn_on": "Schalte {entity_name} ein." + }, + "condition_type": { + "is_off": "{entity_name} ist ausgeschaltet", + "is_on": "{entity_name} ist eingeschaltet" + }, + "trigger_type": { + "turned_off": "{entity_name} ausgeschaltet", + "turned_on": "{entity_name} eingeschaltet" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/el.json b/homeassistant/components/fan/translations/el.json new file mode 100644 index 00000000000..518f25b6b89 --- /dev/null +++ b/homeassistant/components/fan/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u0391\u03bd\u03b5\u03bc\u03b9\u03c3\u03c4\u03ae\u03c1\u03b1\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/en.json b/homeassistant/components/fan/translations/en.json new file mode 100644 index 00000000000..8ef5c8b8b4b --- /dev/null +++ b/homeassistant/components/fan/translations/en.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Turn off {entity_name}", + "turn_on": "Turn on {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} is off", + "is_on": "{entity_name} is on" + }, + "trigger_type": { + "turned_off": "{entity_name} turned off", + "turned_on": "{entity_name} turned on" + } + }, + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Fan" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/es-419.json b/homeassistant/components/fan/translations/es-419.json new file mode 100644 index 00000000000..6060cff985a --- /dev/null +++ b/homeassistant/components/fan/translations/es-419.json @@ -0,0 +1,19 @@ +{ + "device_automation": { + "condition_type": { + "is_off": "{entity_name} est\u00e1 apagado", + "is_on": "{entity_name} est\u00e1 encendido" + }, + "trigger_type": { + "turned_off": "{entity_name} se apag\u00f3", + "turned_on": "{entity_name} se encendi\u00f3" + } + }, + "state": { + "_": { + "off": "Desactivado", + "on": "Encendido" + } + }, + "title": "Ventilador" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/es.json b/homeassistant/components/fan/translations/es.json new file mode 100644 index 00000000000..645f0c820c6 --- /dev/null +++ b/homeassistant/components/fan/translations/es.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Desactivar {entity_name}", + "turn_on": "Activar {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 desactivado", + "is_on": "{entity_name} est\u00e1 activado" + }, + "trigger_type": { + "turned_off": "{entity_name} desactivado", + "turned_on": "{entity_name} activado" + } + }, + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Ventilador" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/et.json b/homeassistant/components/fan/translations/et.json new file mode 100644 index 00000000000..6652568a0a7 --- /dev/null +++ b/homeassistant/components/fan/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Ventilaator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/eu.json b/homeassistant/components/fan/translations/eu.json new file mode 100644 index 00000000000..e421d7a29f7 --- /dev/null +++ b/homeassistant/components/fan/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Haizagailua" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/fa.json b/homeassistant/components/fan/translations/fa.json new file mode 100644 index 00000000000..0cfd0f47f4f --- /dev/null +++ b/homeassistant/components/fan/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0631\u0648\u0634\u0646" + } + }, + "title": "\u0641\u0646" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/fi.json b/homeassistant/components/fan/translations/fi.json new file mode 100644 index 00000000000..20ae0a77799 --- /dev/null +++ b/homeassistant/components/fan/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Tuuletin" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/fr.json b/homeassistant/components/fan/translations/fr.json new file mode 100644 index 00000000000..88b4057a3eb --- /dev/null +++ b/homeassistant/components/fan/translations/fr.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "\u00c9teindre {entity_name}", + "turn_on": "Allumer {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est d\u00e9sactiv\u00e9", + "is_on": "{entity_name} est activ\u00e9" + }, + "trigger_type": { + "turned_off": "{entity_name} est \u00e9teint", + "turned_on": "{entity_name} allum\u00e9" + } + }, + "state": { + "_": { + "off": "\u00c9teint", + "on": "Marche" + } + }, + "title": "Ventilateur" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/gsw.json b/homeassistant/components/fan/translations/gsw.json new file mode 100644 index 00000000000..badd78cb9fe --- /dev/null +++ b/homeassistant/components/fan/translations/gsw.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/he.json b/homeassistant/components/fan/translations/he.json new file mode 100644 index 00000000000..e2081b7460e --- /dev/null +++ b/homeassistant/components/fan/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05de\u05d0\u05d5\u05d5\u05e8\u05e8" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/hi.json b/homeassistant/components/fan/translations/hi.json new file mode 100644 index 00000000000..555d17b7d3e --- /dev/null +++ b/homeassistant/components/fan/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u092a\u0902\u0916\u093e" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/hr.json b/homeassistant/components/fan/translations/hr.json new file mode 100644 index 00000000000..e0cbfcbec89 --- /dev/null +++ b/homeassistant/components/fan/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/hu.json b/homeassistant/components/fan/translations/hu.json new file mode 100644 index 00000000000..daa8f0acf97 --- /dev/null +++ b/homeassistant/components/fan/translations/hu.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "{entity_name} kikapcsol\u00e1sa", + "turn_on": "{entity_name} bekapcsol\u00e1sa" + }, + "condition_type": { + "is_off": "{entity_name} ki van kapcsolva", + "is_on": "{entity_name} be van kapcsolva" + }, + "trigger_type": { + "turned_off": "{entity_name} ki lett kapcsolva", + "turned_on": "{entity_name} be lett kapcsolva" + } + }, + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Ventil\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/hy.json b/homeassistant/components/fan/translations/hy.json new file mode 100644 index 00000000000..a1688e90b09 --- /dev/null +++ b/homeassistant/components/fan/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u0585\u0564\u0561\u0583\u0578\u056d\u056b\u0579" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/id.json b/homeassistant/components/fan/translations/id.json new file mode 100644 index 00000000000..b5324f36f6a --- /dev/null +++ b/homeassistant/components/fan/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Kipas angin" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/is.json b/homeassistant/components/fan/translations/is.json new file mode 100644 index 00000000000..f06d44366b0 --- /dev/null +++ b/homeassistant/components/fan/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Sl\u00f6kkt", + "on": "\u00cd gangi" + } + }, + "title": "Vifta" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/it.json b/homeassistant/components/fan/translations/it.json new file mode 100644 index 00000000000..2a8ca655f66 --- /dev/null +++ b/homeassistant/components/fan/translations/it.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Spegnere {entity_name}", + "turn_on": "Accendere {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u00e8 spento", + "is_on": "{entity_name} \u00e8 acceso" + }, + "trigger_type": { + "turned_off": "{entity_name} disattivato", + "turned_on": "{entity_name} attivato" + } + }, + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Ventilatore" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ja.json b/homeassistant/components/fan/translations/ja.json new file mode 100644 index 00000000000..15dd3796187 --- /dev/null +++ b/homeassistant/components/fan/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ko.json b/homeassistant/components/fan/translations/ko.json new file mode 100644 index 00000000000..5f6116d48d2 --- /dev/null +++ b/homeassistant/components/fan/translations/ko.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "{entity_name} \ub044\uae30", + "turn_on": "{entity_name} \ucf1c\uae30" + }, + "condition_type": { + "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", + "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74" + }, + "trigger_type": { + "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", + "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c" + } + }, + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc1a1\ud48d\uae30" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/lb.json b/homeassistant/components/fan/translations/lb.json new file mode 100644 index 00000000000..acac97c93cf --- /dev/null +++ b/homeassistant/components/fan/translations/lb.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "{entity_name} ausschalten", + "turn_on": "{entity_name} uschalten" + }, + "condition_type": { + "is_off": "{entity_name} ass aus", + "is_on": "{entity_name} ass un" + }, + "trigger_type": { + "turned_off": "{entity_name} gouf ausgeschalt", + "turned_on": "{entity_name} gouf ugeschalt" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/lt.json b/homeassistant/components/fan/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/fan/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/lv.json b/homeassistant/components/fan/translations/lv.json new file mode 100644 index 00000000000..0c18f8cc0eb --- /dev/null +++ b/homeassistant/components/fan/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + } + }, + "title": "Ventilators" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/nb.json b/homeassistant/components/fan/translations/nb.json new file mode 100644 index 00000000000..f9d1def352b --- /dev/null +++ b/homeassistant/components/fan/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Vifte" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/nl.json b/homeassistant/components/fan/translations/nl.json new file mode 100644 index 00000000000..07f6bbf8c7b --- /dev/null +++ b/homeassistant/components/fan/translations/nl.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Schakel {entity_name} uit", + "turn_on": "Schakel {entity_name} in" + }, + "condition_type": { + "is_off": "{entity_name} is uitgeschakeld", + "is_on": "{entity_name} is ingeschakeld" + }, + "trigger_type": { + "turned_off": "{entity_name} uitgeschakeld", + "turned_on": "{entity_name} ingeschakeld" + } + }, + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/nn.json b/homeassistant/components/fan/translations/nn.json new file mode 100644 index 00000000000..f9d1def352b --- /dev/null +++ b/homeassistant/components/fan/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Vifte" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/no.json b/homeassistant/components/fan/translations/no.json new file mode 100644 index 00000000000..094ca1bc378 --- /dev/null +++ b/homeassistant/components/fan/translations/no.json @@ -0,0 +1,17 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Sl\u00e5 av {entity_name}", + "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} er av", + "is_on": "{entity_name} er p\u00e5" + }, + "trigger_type": { + "turned_off": "{entity_name} sl\u00e5tt av", + "turned_on": "{entity_name} sl\u00e5tt p\u00e5" + } + }, + "title": "Vifte" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/pl.json b/homeassistant/components/fan/translations/pl.json new file mode 100644 index 00000000000..b90d6084ca0 --- /dev/null +++ b/homeassistant/components/fan/translations/pl.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "wy\u0142\u0105cz {entity_name}", + "turn_on": "w\u0142\u0105cz {entity_name}" + }, + "condition_type": { + "is_off": "wentylator (entity_name} jest wy\u0142\u0105czony", + "is_on": "wentylator (entity_name} jest w\u0142\u0105czony" + }, + "trigger_type": { + "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", + "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}" + } + }, + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Wentylator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/pt-BR.json b/homeassistant/components/fan/translations/pt-BR.json new file mode 100644 index 00000000000..f5e9e2f8629 --- /dev/null +++ b/homeassistant/components/fan/translations/pt-BR.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "condition_type": { + "is_off": "{entity_name} est\u00e1 desligado", + "is_on": "{entity_name} est\u00e1 ligado" + } + }, + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Ventilador" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/pt.json b/homeassistant/components/fan/translations/pt.json new file mode 100644 index 00000000000..5373dde19b1 --- /dev/null +++ b/homeassistant/components/fan/translations/pt.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Desligar {entity_name}", + "turn_on": "Ligar {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 desligada", + "is_on": "{entity_name} est\u00e1 ligada" + }, + "trigger_type": { + "turned_off": "{entity_name} desligou-se", + "turned_on": "{entity_name} ligou-se" + } + }, + "state": { + "_": { + "off": "Desligada", + "on": "Ligado" + } + }, + "title": "Vento\u00ednha" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ro.json b/homeassistant/components/fan/translations/ro.json new file mode 100644 index 00000000000..926aba2b9f4 --- /dev/null +++ b/homeassistant/components/fan/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ru.json b/homeassistant/components/fan/translations/ru.json new file mode 100644 index 00000000000..8d1bf91ed1e --- /dev/null +++ b/homeassistant/components/fan/translations/ru.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" + }, + "trigger_type": { + "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + } + }, + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u0412\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/sk.json b/homeassistant/components/fan/translations/sk.json new file mode 100644 index 00000000000..1dc17560e34 --- /dev/null +++ b/homeassistant/components/fan/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neakt\u00edvny", + "on": "Zapnut\u00fd" + } + }, + "title": "Ventil\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/sl.json b/homeassistant/components/fan/translations/sl.json new file mode 100644 index 00000000000..c987bd921c8 --- /dev/null +++ b/homeassistant/components/fan/translations/sl.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Izklopite {entity_name}", + "turn_on": "Vklopite {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} je izklopljen", + "is_on": "{entity_name} je vklopljen" + }, + "trigger_type": { + "turned_off": "{entity_name} izklopljen", + "turned_on": "{entity_name} vklopljen" + } + }, + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Ventilator" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/sv.json b/homeassistant/components/fan/translations/sv.json new file mode 100644 index 00000000000..dd1aaad4052 --- /dev/null +++ b/homeassistant/components/fan/translations/sv.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "St\u00e4ng av {entity_name}", + "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u00e4r avst\u00e4ngd", + "is_on": "{entity_name} \u00e4r p\u00e5" + }, + "trigger_type": { + "turned_off": "{entity_name} st\u00e4ngdes av", + "turned_on": "{entity_name} aktiverades" + } + }, + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Fl\u00e4kt" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/ta.json b/homeassistant/components/fan/translations/ta.json new file mode 100644 index 00000000000..02e61095e83 --- /dev/null +++ b/homeassistant/components/fan/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0bb5\u0bbf\u0b9a\u0bbf\u0bb1\u0bbf \u0b86\u0ba9\u0bcd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/te.json b/homeassistant/components/fan/translations/te.json new file mode 100644 index 00000000000..83ed200c7b1 --- /dev/null +++ b/homeassistant/components/fan/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c2b\u0c4d\u0c2f\u0c3e\u0c28\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/th.json b/homeassistant/components/fan/translations/th.json new file mode 100644 index 00000000000..8626b372d32 --- /dev/null +++ b/homeassistant/components/fan/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e1e\u0e31\u0e14\u0e25\u0e21" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/tr.json b/homeassistant/components/fan/translations/tr.json new file mode 100644 index 00000000000..4ffc57601bd --- /dev/null +++ b/homeassistant/components/fan/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Fan" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/uk.json b/homeassistant/components/fan/translations/uk.json new file mode 100644 index 00000000000..80b64c28c2f --- /dev/null +++ b/homeassistant/components/fan/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u0412\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/vi.json b/homeassistant/components/fan/translations/vi.json new file mode 100644 index 00000000000..0208c6de8cb --- /dev/null +++ b/homeassistant/components/fan/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "Qu\u1ea1t" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/zh-Hans.json b/homeassistant/components/fan/translations/zh-Hans.json new file mode 100644 index 00000000000..6dde9459c1a --- /dev/null +++ b/homeassistant/components/fan/translations/zh-Hans.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "\u5173\u95ed {entity_name}", + "turn_on": "\u6253\u5f00 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u5df2\u5173\u95ed", + "is_on": "{entity_name} \u5df2\u5f00\u542f" + }, + "trigger_type": { + "turned_off": "{entity_name} \u88ab\u5173\u95ed", + "turned_on": "{entity_name} \u88ab\u5f00\u542f" + } + }, + "state": { + "_": { + "off": "\u5173\u95ed", + "on": "\u5f00" + } + }, + "title": "\u98ce\u6247" +} \ No newline at end of file diff --git a/homeassistant/components/fan/translations/zh-Hant.json b/homeassistant/components/fan/translations/zh-Hant.json new file mode 100644 index 00000000000..aca88f36fda --- /dev/null +++ b/homeassistant/components/fan/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "\u95dc\u9589{entity_name}", + "turn_on": "\u958b\u555f{entity_name}" + }, + "condition_type": { + "is_off": "{entity_name}\u95dc\u9589", + "is_on": "{entity_name}\u958b\u555f" + }, + "trigger_type": { + "turned_off": "{entity_name}\u5df2\u95dc\u9589", + "turned_on": "{entity_name}\u5df2\u958b\u555f" + } + }, + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + } + }, + "title": "\u98a8\u6247" +} \ No newline at end of file diff --git a/homeassistant/components/fastdotcom/manifest.json b/homeassistant/components/fastdotcom/manifest.json index d6fe4a07c59..ca7a720668b 100644 --- a/homeassistant/components/fastdotcom/manifest.json +++ b/homeassistant/components/fastdotcom/manifest.json @@ -3,6 +3,5 @@ "name": "Fast.com", "documentation": "https://www.home-assistant.io/integrations/fastdotcom", "requirements": ["fastdotcom==0.0.3"], - "dependencies": [], "codeowners": ["@rohankapoorcom"] } diff --git a/homeassistant/components/fastdotcom/sensor.py b/homeassistant/components/fastdotcom/sensor.py index a6eaa21ae35..fe131e4dab4 100644 --- a/homeassistant/components/fastdotcom/sensor.py +++ b/homeassistant/components/fastdotcom/sensor.py @@ -55,15 +55,18 @@ class SpeedtestSensor(RestoreEntity): async def async_added_to_hass(self): """Handle entity which will be added.""" await super().async_added_to_hass() + + self.async_on_remove( + async_dispatcher_connect( + self.hass, DATA_UPDATED, self._schedule_immediate_update + ) + ) + state = await self.async_get_last_state() if not state: return self._state = state.state - async_dispatcher_connect( - self.hass, DATA_UPDATED, self._schedule_immediate_update - ) - def update(self): """Get the latest data and update the states.""" data = self.speedtest_client.data diff --git a/homeassistant/components/fastdotcom/services.yaml b/homeassistant/components/fastdotcom/services.yaml index fe6cb1ac12d..f0afb49dbe0 100644 --- a/homeassistant/components/fastdotcom/services.yaml +++ b/homeassistant/components/fastdotcom/services.yaml @@ -1,2 +1,2 @@ speedtest: - description: Immediately take a speedest with Fast.com \ No newline at end of file + description: Immediately take a speedest with Fast.com diff --git a/homeassistant/components/feedreader/manifest.json b/homeassistant/components/feedreader/manifest.json index 16c32bdd089..30413d10e43 100644 --- a/homeassistant/components/feedreader/manifest.json +++ b/homeassistant/components/feedreader/manifest.json @@ -3,6 +3,5 @@ "name": "Feedreader", "documentation": "https://www.home-assistant.io/integrations/feedreader", "requirements": ["feedparser-homeassistant==5.2.2.dev1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ffmpeg/__init__.py b/homeassistant/components/ffmpeg/__init__.py index bc402b46fb2..f109103a99c 100644 --- a/homeassistant/components/ffmpeg/__init__.py +++ b/homeassistant/components/ffmpeg/__init__.py @@ -140,12 +140,20 @@ class FFmpegBase(Entity): This method is a coroutine. """ - async_dispatcher_connect( - self.hass, SIGNAL_FFMPEG_START, self._async_start_ffmpeg + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_FFMPEG_START, self._async_start_ffmpeg + ) ) - async_dispatcher_connect(self.hass, SIGNAL_FFMPEG_STOP, self._async_stop_ffmpeg) - async_dispatcher_connect( - self.hass, SIGNAL_FFMPEG_RESTART, self._async_restart_ffmpeg + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_FFMPEG_STOP, self._async_stop_ffmpeg + ) + ) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_FFMPEG_RESTART, self._async_restart_ffmpeg + ) ) # register start/stop @@ -202,6 +210,6 @@ class FFmpegBase(Entity): async def async_start_handle(event): """Start FFmpeg process.""" await self._async_start_ffmpeg(None) - self.async_schedule_update_ha_state() + self.async_write_ha_state() self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, async_start_handle) diff --git a/homeassistant/components/ffmpeg/manifest.json b/homeassistant/components/ffmpeg/manifest.json index bacfa498fe1..aee0b85d056 100644 --- a/homeassistant/components/ffmpeg/manifest.json +++ b/homeassistant/components/ffmpeg/manifest.json @@ -3,6 +3,5 @@ "name": "FFmpeg", "documentation": "https://www.home-assistant.io/integrations/ffmpeg", "requirements": ["ha-ffmpeg==2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ffmpeg/services.yaml b/homeassistant/components/ffmpeg/services.yaml index 05c9c4fb180..15afa82ed0a 100644 --- a/homeassistant/components/ffmpeg/services.yaml +++ b/homeassistant/components/ffmpeg/services.yaml @@ -1,15 +1,18 @@ restart: description: Send a restart command to a ffmpeg based sensor. fields: - entity_id: {description: Name(s) of entities that will restart. Platform dependent., - example: binary_sensor.ffmpeg_noise} + entity_id: + description: Name(s) of entities that will restart. Platform dependent. + example: binary_sensor.ffmpeg_noise start: description: Send a start command to a ffmpeg based sensor. fields: - entity_id: {description: Name(s) of entities that will start. Platform dependent., - example: binary_sensor.ffmpeg_noise} + entity_id: + description: Name(s) of entities that will start. Platform dependent. + example: binary_sensor.ffmpeg_noise stop: description: Send a stop command to a ffmpeg based sensor. fields: - entity_id: {description: Name(s) of entities that will stop. Platform dependent., - example: binary_sensor.ffmpeg_noise} + entity_id: + description: Name(s) of entities that will stop. Platform dependent. + example: binary_sensor.ffmpeg_noise diff --git a/homeassistant/components/ffmpeg_motion/binary_sensor.py b/homeassistant/components/ffmpeg_motion/binary_sensor.py index 294fcc2518f..e3a9c09b5d9 100644 --- a/homeassistant/components/ffmpeg_motion/binary_sensor.py +++ b/homeassistant/components/ffmpeg_motion/binary_sensor.py @@ -70,7 +70,7 @@ class FFmpegBinarySensor(FFmpegBase, BinarySensorDevice): def _async_callback(self, state): """HA-FFmpeg callback for noise detection.""" self._state = state - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self): diff --git a/homeassistant/components/ffmpeg_motion/manifest.json b/homeassistant/components/ffmpeg_motion/manifest.json index c1ae41e0f2b..854bca7f9bd 100644 --- a/homeassistant/components/ffmpeg_motion/manifest.json +++ b/homeassistant/components/ffmpeg_motion/manifest.json @@ -2,7 +2,6 @@ "domain": "ffmpeg_motion", "name": "FFmpeg Motion", "documentation": "https://www.home-assistant.io/integrations/ffmpeg_motion", - "requirements": [], "dependencies": ["ffmpeg"], "codeowners": [] } diff --git a/homeassistant/components/ffmpeg_noise/manifest.json b/homeassistant/components/ffmpeg_noise/manifest.json index ca7043c51a5..b2b4148a022 100644 --- a/homeassistant/components/ffmpeg_noise/manifest.json +++ b/homeassistant/components/ffmpeg_noise/manifest.json @@ -2,7 +2,6 @@ "domain": "ffmpeg_noise", "name": "FFmpeg Noise", "documentation": "https://www.home-assistant.io/integrations/ffmpeg_noise", - "requirements": [], "dependencies": ["ffmpeg"], "codeowners": [] } diff --git a/homeassistant/components/fibaro/__init__.py b/homeassistant/components/fibaro/__init__.py index 89529046f85..dcbffe2a568 100644 --- a/homeassistant/components/fibaro/__init__.py +++ b/homeassistant/components/fibaro/__init__.py @@ -462,10 +462,6 @@ class FibaroDevice(Entity): """Get polling requirement from fibaro device.""" return False - def update(self): - """Call to update state.""" - pass - @property def device_state_attributes(self): """Return the state attributes of the device.""" diff --git a/homeassistant/components/fibaro/manifest.json b/homeassistant/components/fibaro/manifest.json index b4288afee71..ff6d881009d 100644 --- a/homeassistant/components/fibaro/manifest.json +++ b/homeassistant/components/fibaro/manifest.json @@ -3,6 +3,5 @@ "name": "Fibaro", "documentation": "https://www.home-assistant.io/integrations/fibaro", "requirements": ["fiblary3==0.1.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fibaro/scene.py b/homeassistant/components/fibaro/scene.py index 06d11bc1f5c..714f019168d 100644 --- a/homeassistant/components/fibaro/scene.py +++ b/homeassistant/components/fibaro/scene.py @@ -1,5 +1,6 @@ """Support for Fibaro scenes.""" import logging +from typing import Any from homeassistant.components.scene import Scene @@ -21,6 +22,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= class FibaroScene(FibaroDevice, Scene): """Representation of a Fibaro scene entity.""" - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self.fibaro_device.start() diff --git a/homeassistant/components/fido/manifest.json b/homeassistant/components/fido/manifest.json index 690fc3ed777..9c150d47915 100644 --- a/homeassistant/components/fido/manifest.json +++ b/homeassistant/components/fido/manifest.json @@ -3,6 +3,5 @@ "name": "Fido", "documentation": "https://www.home-assistant.io/integrations/fido", "requirements": ["pyfido==2.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/file/manifest.json b/homeassistant/components/file/manifest.json index b0340eb271e..cac7fc98fb1 100644 --- a/homeassistant/components/file/manifest.json +++ b/homeassistant/components/file/manifest.json @@ -2,7 +2,5 @@ "domain": "file", "name": "File", "documentation": "https://www.home-assistant.io/integrations/file", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/file/sensor.py b/homeassistant/components/file/sensor.py index 96ae885ca77..3f6d69325f0 100644 --- a/homeassistant/components/file/sensor.py +++ b/homeassistant/components/file/sensor.py @@ -77,7 +77,7 @@ class FileSensor(Entity): def update(self): """Get the latest entry from a file and updates the state.""" try: - with open(self._file_path, "r", encoding="utf-8") as file_data: + with open(self._file_path, encoding="utf-8") as file_data: for line in file_data: data = line data = data.strip() diff --git a/homeassistant/components/filesize/manifest.json b/homeassistant/components/filesize/manifest.json index 4687e074547..6ef52457eaa 100644 --- a/homeassistant/components/filesize/manifest.json +++ b/homeassistant/components/filesize/manifest.json @@ -2,7 +2,5 @@ "domain": "filesize", "name": "File Size", "documentation": "https://www.home-assistant.io/integrations/filesize", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/filter/manifest.json b/homeassistant/components/filter/manifest.json index d1933507f4d..7b474c2b53a 100644 --- a/homeassistant/components/filter/manifest.json +++ b/homeassistant/components/filter/manifest.json @@ -2,7 +2,6 @@ "domain": "filter", "name": "Filter", "documentation": "https://www.home-assistant.io/integrations/filter", - "requirements": [], "dependencies": ["history"], "codeowners": ["@dgomes"], "quality_scale": "internal" diff --git a/homeassistant/components/filter/sensor.py b/homeassistant/components/filter/sensor.py index 4d508ce2d81..7c2a35938b2 100644 --- a/homeassistant/components/filter/sensor.py +++ b/homeassistant/components/filter/sensor.py @@ -212,7 +212,7 @@ class SensorFilter(Entity): ) if update_ha: - self.async_schedule_update_ha_state() + self.async_write_ha_state() if "recorder" in self.hass.config.components: history_list = [] diff --git a/homeassistant/components/fints/manifest.json b/homeassistant/components/fints/manifest.json index 8644124fde2..4a1a7b8f89d 100644 --- a/homeassistant/components/fints/manifest.json +++ b/homeassistant/components/fints/manifest.json @@ -3,6 +3,5 @@ "name": "FinTS", "documentation": "https://www.home-assistant.io/integrations/fints", "requirements": ["fints==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fixer/manifest.json b/homeassistant/components/fixer/manifest.json index 4bb0b7ba1b7..6dbeae949f2 100644 --- a/homeassistant/components/fixer/manifest.json +++ b/homeassistant/components/fixer/manifest.json @@ -3,6 +3,5 @@ "name": "Fixer", "documentation": "https://www.home-assistant.io/integrations/fixer", "requirements": ["fixerio==1.0.0a0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/fleetgo/manifest.json b/homeassistant/components/fleetgo/manifest.json index 142d6ba00ed..148d79f45c2 100644 --- a/homeassistant/components/fleetgo/manifest.json +++ b/homeassistant/components/fleetgo/manifest.json @@ -3,6 +3,5 @@ "name": "FleetGO", "documentation": "https://www.home-assistant.io/integrations/fleetgo", "requirements": ["ritassist==0.9.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/flexit/climate.py b/homeassistant/components/flexit/climate.py index fb031359693..68e13abf8d1 100644 --- a/homeassistant/components/flexit/climate.py +++ b/homeassistant/components/flexit/climate.py @@ -36,8 +36,8 @@ SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Flexit Platform.""" - modbus_slave = config.get(CONF_SLAVE, None) - name = config.get(CONF_NAME, None) + modbus_slave = config.get(CONF_SLAVE) + name = config.get(CONF_NAME) hub = hass.data[MODBUS_DOMAIN][config.get(CONF_HUB)] add_entities([Flexit(hub, modbus_slave, name)], True) diff --git a/homeassistant/components/flic/manifest.json b/homeassistant/components/flic/manifest.json index 24170b34acf..f638908a80f 100644 --- a/homeassistant/components/flic/manifest.json +++ b/homeassistant/components/flic/manifest.json @@ -3,6 +3,5 @@ "name": "Flic", "documentation": "https://www.home-assistant.io/integrations/flic", "requirements": ["pyflic-homeassistant==0.4.dev0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/flock/manifest.json b/homeassistant/components/flock/manifest.json index 6bb3eaf9e69..29328cfd1f6 100644 --- a/homeassistant/components/flock/manifest.json +++ b/homeassistant/components/flock/manifest.json @@ -2,7 +2,5 @@ "domain": "flock", "name": "Flock", "documentation": "https://www.home-assistant.io/integrations/flock", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/flock/notify.py b/homeassistant/components/flock/notify.py index 107c837970d..7bdd1b33c5b 100644 --- a/homeassistant/components/flock/notify.py +++ b/homeassistant/components/flock/notify.py @@ -6,7 +6,7 @@ import async_timeout import voluptuous as vol from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService -from homeassistant.const import CONF_ACCESS_TOKEN +from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -44,7 +44,7 @@ class FlockNotificationService(BaseNotificationService): response = await self._session.post(self._url, json=payload) result = await response.json() - if response.status != 200 or "error" in result: + if response.status != HTTP_OK or "error" in result: _LOGGER.error( "Flock service returned HTTP status %d, response %s", response.status, diff --git a/homeassistant/components/flume/__init__.py b/homeassistant/components/flume/__init__.py index ab626e1f156..2c18864194e 100644 --- a/homeassistant/components/flume/__init__.py +++ b/homeassistant/components/flume/__init__.py @@ -1 +1,99 @@ -"""The Flume component.""" +"""The flume integration.""" +import asyncio +from functools import partial +import logging + +from pyflume import FlumeAuth, FlumeDeviceList +from requests import Session +from requests.exceptions import RequestException + +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import ConfigEntryNotReady + +from .const import ( + BASE_TOKEN_FILENAME, + CONF_CLIENT_ID, + CONF_CLIENT_SECRET, + DOMAIN, + FLUME_AUTH, + FLUME_DEVICES, + FLUME_HTTP_SESSION, + PLATFORMS, +) + +_LOGGER = logging.getLogger(__name__) + + +async def async_setup(hass: HomeAssistant, config: dict): + """Set up the flume component.""" + hass.data.setdefault(DOMAIN, {}) + return True + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): + """Set up flume from a config entry.""" + + config = entry.data + + username = config[CONF_USERNAME] + password = config[CONF_PASSWORD] + client_id = config[CONF_CLIENT_ID] + client_secret = config[CONF_CLIENT_SECRET] + flume_token_full_path = hass.config.path(f"{BASE_TOKEN_FILENAME}-{username}") + + http_session = Session() + + try: + flume_auth = await hass.async_add_executor_job( + partial( + FlumeAuth, + username, + password, + client_id, + client_secret, + flume_token_file=flume_token_full_path, + http_session=http_session, + ) + ) + flume_devices = await hass.async_add_executor_job( + partial(FlumeDeviceList, flume_auth, http_session=http_session,) + ) + except RequestException: + raise ConfigEntryNotReady + except Exception as ex: # pylint: disable=broad-except + _LOGGER.error("Invalid credentials for flume: %s", ex) + return False + + hass.data[DOMAIN][entry.entry_id] = { + FLUME_DEVICES: flume_devices, + FLUME_AUTH: flume_auth, + FLUME_HTTP_SESSION: http_session, + } + + for component in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, component) + ) + + return True + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): + """Unload a config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, component) + for component in PLATFORMS + ] + ) + ) + + hass.data[DOMAIN][entry.entry_id][FLUME_HTTP_SESSION].close() + + if unload_ok: + hass.data[DOMAIN].pop(entry.entry_id) + + return unload_ok diff --git a/homeassistant/components/flume/config_flow.py b/homeassistant/components/flume/config_flow.py new file mode 100644 index 00000000000..3232245a4a9 --- /dev/null +++ b/homeassistant/components/flume/config_flow.py @@ -0,0 +1,104 @@ +"""Config flow for flume integration.""" +from functools import partial +import logging + +from pyflume import FlumeAuth, FlumeDeviceList +from requests.exceptions import RequestException +import voluptuous as vol + +from homeassistant import config_entries, core, exceptions +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME + +from .const import BASE_TOKEN_FILENAME, CONF_CLIENT_ID, CONF_CLIENT_SECRET +from .const import DOMAIN # pylint:disable=unused-import + +_LOGGER = logging.getLogger(__name__) + +# If flume ever implements a login page for oauth +# we can use the oauth2 support built into Home Assistant. +# +# Currently they only implement the token endpoint +# +DATA_SCHEMA = vol.Schema( + { + vol.Required(CONF_USERNAME): str, + vol.Required(CONF_PASSWORD): str, + vol.Required(CONF_CLIENT_ID): str, + vol.Required(CONF_CLIENT_SECRET): str, + } +) + + +async def validate_input(hass: core.HomeAssistant, data): + """Validate the user input allows us to connect. + + Data has the keys from DATA_SCHEMA with values provided by the user. + """ + username = data[CONF_USERNAME] + password = data[CONF_PASSWORD] + client_id = data[CONF_CLIENT_ID] + client_secret = data[CONF_CLIENT_SECRET] + flume_token_full_path = hass.config.path(f"{BASE_TOKEN_FILENAME}-{username}") + + try: + flume_auth = await hass.async_add_executor_job( + partial( + FlumeAuth, + username, + password, + client_id, + client_secret, + flume_token_file=flume_token_full_path, + ) + ) + flume_devices = await hass.async_add_executor_job(FlumeDeviceList, flume_auth) + except RequestException: + raise CannotConnect + except Exception: # pylint: disable=broad-except + raise InvalidAuth + if not flume_devices or not flume_devices.device_list: + raise CannotConnect + + # Return info that you want to store in the config entry. + return {"title": username} + + +class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow for flume.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL + + async def async_step_user(self, user_input=None): + """Handle the initial step.""" + errors = {} + if user_input is not None: + await self.async_set_unique_id(user_input[CONF_USERNAME]) + self._abort_if_unique_id_configured() + + try: + info = await validate_input(self.hass, user_input) + return self.async_create_entry(title=info["title"], data=user_input) + except CannotConnect: + errors["base"] = "cannot_connect" + except InvalidAuth: + errors["base"] = "invalid_auth" + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected exception") + errors["base"] = "unknown" + + return self.async_show_form( + step_id="user", data_schema=DATA_SCHEMA, errors=errors + ) + + async def async_step_import(self, user_input): + """Handle import.""" + return await self.async_step_user(user_input) + + +class CannotConnect(exceptions.HomeAssistantError): + """Error to indicate we cannot connect.""" + + +class InvalidAuth(exceptions.HomeAssistantError): + """Error to indicate there is invalid auth.""" diff --git a/homeassistant/components/flume/const.py b/homeassistant/components/flume/const.py new file mode 100644 index 00000000000..17bbb60edb0 --- /dev/null +++ b/homeassistant/components/flume/const.py @@ -0,0 +1,24 @@ +"""The Flume component.""" +DOMAIN = "flume" + +PLATFORMS = ["sensor"] + +DEFAULT_NAME = "Flume Sensor" + +CONF_CLIENT_ID = "client_id" +CONF_CLIENT_SECRET = "client_secret" +FLUME_TYPE_SENSOR = 2 + +FLUME_AUTH = "flume_auth" +FLUME_HTTP_SESSION = "http_session" +FLUME_DEVICES = "devices" + + +CONF_TOKEN_FILE = "token_filename" +BASE_TOKEN_FILENAME = "FLUME_TOKEN_FILE" + + +KEY_DEVICE_TYPE = "type" +KEY_DEVICE_ID = "id" +KEY_DEVICE_LOCATION = "location" +KEY_DEVICE_LOCATION_NAME = "name" diff --git a/homeassistant/components/flume/manifest.json b/homeassistant/components/flume/manifest.json index 2264df2db06..f801eedf73b 100644 --- a/homeassistant/components/flume/manifest.json +++ b/homeassistant/components/flume/manifest.json @@ -1,8 +1,9 @@ { "domain": "flume", - "name": "flume", + "name": "Flume", "documentation": "https://www.home-assistant.io/integrations/flume/", - "requirements": ["pyflume==0.3.0"], + "requirements": ["pyflume==0.4.0"], "dependencies": [], - "codeowners": ["@ChrisMandich"] + "codeowners": ["@ChrisMandich", "@bdraco"], + "config_flow": true } diff --git a/homeassistant/components/flume/sensor.py b/homeassistant/components/flume/sensor.py index 2694842134f..21a19a3a56c 100644 --- a/homeassistant/components/flume/sensor.py +++ b/homeassistant/components/flume/sensor.py @@ -2,23 +2,34 @@ from datetime import timedelta import logging -from pyflume import FlumeData, FlumeDeviceList -from requests import Session +from pyflume import FlumeData import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA +from homeassistant.config_entries import SOURCE_IMPORT from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity +from homeassistant.util import Throttle -LOGGER = logging.getLogger(__name__) +from .const import ( + CONF_CLIENT_ID, + CONF_CLIENT_SECRET, + DEFAULT_NAME, + DOMAIN, + FLUME_AUTH, + FLUME_DEVICES, + FLUME_HTTP_SESSION, + FLUME_TYPE_SENSOR, + KEY_DEVICE_ID, + KEY_DEVICE_LOCATION, + KEY_DEVICE_LOCATION_NAME, + KEY_DEVICE_TYPE, +) -DEFAULT_NAME = "Flume Sensor" - -CONF_CLIENT_ID = "client_id" -CONF_CLIENT_SECRET = "client_secret" -FLUME_TYPE_SENSOR = 2 +_LOGGER = logging.getLogger(__name__) +MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=15) SCAN_INTERVAL = timedelta(minutes=1) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( @@ -27,68 +38,77 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_CLIENT_ID): cv.string, vol.Required(CONF_CLIENT_SECRET): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_NAME): cv.string, } ) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Flume sensor.""" - username = config[CONF_USERNAME] - password = config[CONF_PASSWORD] - client_id = config[CONF_CLIENT_ID] - client_secret = config[CONF_CLIENT_SECRET] - flume_token_file = hass.config.path("FLUME_TOKEN_FILE") - time_zone = str(hass.config.time_zone) - name = config[CONF_NAME] - flume_entity_list = [] +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): + """Import the platform into a config entry.""" - http_session = Session() - - flume_devices = FlumeDeviceList( - username, - password, - client_id, - client_secret, - flume_token_file, - http_session=http_session, + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_IMPORT}, data=config + ) ) - for device in flume_devices.device_list: - if device["type"] == FLUME_TYPE_SENSOR: - device_id = device["id"] - device_name = device["location"]["name"] - flume = FlumeData( - username, - password, - client_id, - client_secret, - device_id, - time_zone, - SCAN_INTERVAL, - flume_token_file, - update_on_init=False, - http_session=http_session, - ) - flume_entity_list.append( - FlumeSensor(flume, f"{name} {device_name}", device_id) - ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Flume sensor.""" + + flume_domain_data = hass.data[DOMAIN][config_entry.entry_id] + + flume_auth = flume_domain_data[FLUME_AUTH] + http_session = flume_domain_data[FLUME_HTTP_SESSION] + flume_devices = flume_domain_data[FLUME_DEVICES] + + config = config_entry.data + name = config.get(CONF_NAME, DEFAULT_NAME) + + flume_entity_list = [] + for device in flume_devices.device_list: + if device[KEY_DEVICE_TYPE] != FLUME_TYPE_SENSOR: + continue + + device_id = device[KEY_DEVICE_ID] + device_name = device[KEY_DEVICE_LOCATION][KEY_DEVICE_LOCATION_NAME] + device_friendly_name = f"{name} {device_name}" + flume_device = FlumeData( + flume_auth, + device_id, + SCAN_INTERVAL, + update_on_init=False, + http_session=http_session, + ) + flume_entity_list.append( + FlumeSensor(flume_device, device_friendly_name, device_id) + ) if flume_entity_list: - add_entities(flume_entity_list, True) + async_add_entities(flume_entity_list) class FlumeSensor(Entity): """Representation of the Flume sensor.""" - def __init__(self, flume, name, device_id): + def __init__(self, flume_device, name, device_id): """Initialize the Flume sensor.""" - self.flume = flume + self._flume_device = flume_device self._name = name self._device_id = device_id - self._state = None + self._undo_track_sensor = None self._available = False + self._state = None + + @property + def device_info(self): + """Device info for the flume sensor.""" + return { + "name": self._name, + "identifiers": {(DOMAIN, self._device_id)}, + "manufacturer": "Flume, Inc.", + "model": "Flume Smart Water Monitor", + } @property def name(self): @@ -116,11 +136,23 @@ class FlumeSensor(Entity): """Device unique ID.""" return self._device_id + @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Get the latest data and updates the states.""" - self._available = False - self.flume.update() - new_value = self.flume.value - if new_value is not None: - self._available = True - self._state = new_value + _LOGGER.debug("Updating flume sensor: %s", self._name) + try: + self._flume_device.update_force() + except Exception as ex: # pylint: disable=broad-except + if self._available: + _LOGGER.error("Update of flume sensor %s failed: %s", self._name, ex) + self._available = False + return + _LOGGER.debug("Successful update of flume sensor: %s", self._name) + self._state = self._flume_device.value + self._available = True + + async def async_added_to_hass(self): + """Request an update when added.""" + # We do ask for an update with async_add_entities() + # because it will update disabled entities + self.async_schedule_update_ha_state() diff --git a/homeassistant/components/flume/strings.json b/homeassistant/components/flume/strings.json new file mode 100644 index 00000000000..50fa03f3e93 --- /dev/null +++ b/homeassistant/components/flume/strings.json @@ -0,0 +1,22 @@ +{ + "config": { + "error": { + "unknown": "Unexpected error", + "invalid_auth": "Invalid authentication", + "cannot_connect": "Failed to connect, please try again" + }, + "step": { + "user": { + "description": "In order to access the Flume Personal API, you will need to request a 'Client ID' and 'Client Secret' at https://portal.flumetech.com/settings#token", + "title": "Connect to your Flume Account", + "data": { + "username": "Username", + "client_secret": "Client Secret", + "client_id": "Client ID", + "password": "Password" + } + } + }, + "abort": { "already_configured": "This account is already configured" } + } +} diff --git a/homeassistant/components/flume/translations/ca.json b/homeassistant/components/flume/translations/ca.json new file mode 100644 index 00000000000..71ee4fd2345 --- /dev/null +++ b/homeassistant/components/flume/translations/ca.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest compte ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "client_id": "ID de client", + "client_secret": "Secret de client", + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "description": "Per poder accedir a l'API personal de Flume, has de sol\u00b7licitar un 'ID de client' i un 'secret de client' anant a https://portal.flumetech.com/settings#token", + "title": "Connexi\u00f3 amb Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/de.json b/homeassistant/components/flume/translations/de.json new file mode 100644 index 00000000000..ecc57551a1f --- /dev/null +++ b/homeassistant/components/flume/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses Konto ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "description": "Um auf die Flume Personal API zugreifen zu k\u00f6nnen, m\u00fcssen Sie unter https://portal.flumetech.com/settings#token eine 'Client ID' und 'Client Secret' anfordern", + "title": "Stellen Sie eine Verbindung zu Ihrem Flume-Konto her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/en.json b/homeassistant/components/flume/translations/en.json new file mode 100644 index 00000000000..ed24c552d8f --- /dev/null +++ b/homeassistant/components/flume/translations/en.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "This account is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "client_id": "Client ID", + "client_secret": "Client Secret", + "password": "Password", + "username": "Username" + }, + "description": "In order to access the Flume Personal API, you will need to request a 'Client ID' and 'Client Secret' at https://portal.flumetech.com/settings#token", + "title": "Connect to your Flume Account" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/es.json b/homeassistant/components/flume/translations/es.json new file mode 100644 index 00000000000..cf872da6de3 --- /dev/null +++ b/homeassistant/components/flume/translations/es.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Esta cuenta ya est\u00e1 configurada" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "client_id": "Client ID", + "client_secret": "Client Secret", + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "description": "Para acceder a la API Personal de Flume, tendr\u00e1s que solicitar un 'Client ID' y un 'Client Secret' en https://portal.flumetech.com/settings#token", + "title": "Conectar con tu cuenta de Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/fr.json b/homeassistant/components/flume/translations/fr.json new file mode 100644 index 00000000000..a1641a24fc7 --- /dev/null +++ b/homeassistant/components/flume/translations/fr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Ce compte est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide", + "unknown": "Erreur inattendue" + }, + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/it.json b/homeassistant/components/flume/translations/it.json new file mode 100644 index 00000000000..6d9974f9481 --- /dev/null +++ b/homeassistant/components/flume/translations/it.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Questo account \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "client_id": "Client ID", + "client_secret": "Client Secret", + "password": "Password", + "username": "Nome utente" + }, + "description": "Per accedere all'API personale di Flume, \u00e8 necessario richiedere un \"Client ID\" e un \"Client Secret\" all'indirizzo https://portal.flumetech.com/settings#token.", + "title": "Collegati al tuo account Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/ko.json b/homeassistant/components/flume/translations/ko.json new file mode 100644 index 00000000000..faac5e9c579 --- /dev/null +++ b/homeassistant/components/flume/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uacc4\uc815\uc740 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "client_id": "\ud074\ub77c\uc774\uc5b8\ud2b8 ID", + "client_secret": "\ud074\ub77c\uc774\uc5b8\ud2b8 \uc2dc\ud06c\ub9bf", + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "Flume Personal API \uc5d0 \uc561\uc138\uc2a4 \ud558\ub824\uba74 https://portal.flumetech.com/settings#token \uc5d0\uc11c '\ud074\ub77c\uc774\uc5b8\ud2b8 ID'\ubc0f '\ud074\ub77c\uc774\uc5b8\ud2b8 \uc2dc\ud06c\ub9bf'\uc744 \uc694\uccad\ud574\uc57c \ud569\ub2c8\ub2e4.", + "title": "Flume \uacc4\uc815\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/lb.json b/homeassistant/components/flume/translations/lb.json new file mode 100644 index 00000000000..67f18d61547 --- /dev/null +++ b/homeassistant/components/flume/translations/lb.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Kont ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "client_id": "Client ID", + "client_secret": "Client Schl\u00ebssel", + "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." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/nl.json b/homeassistant/components/flume/translations/nl.json new file mode 100644 index 00000000000..fe67b5734d1 --- /dev/null +++ b/homeassistant/components/flume/translations/nl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Dit account is al geconfigureerd." + }, + "error": { + "cannot_connect": "Verbinding mislukt, probeer het opnieuw", + "invalid_auth": "Ongeldige authenticatie", + "unknown": "Onverwachte fout" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + }, + "title": "Verbind met uw Flume account" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/no.json b/homeassistant/components/flume/translations/no.json new file mode 100644 index 00000000000..1440d3d0477 --- /dev/null +++ b/homeassistant/components/flume/translations/no.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Denne kontoen er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "client_id": "klient-ID", + "client_secret": "Klienthemmelighet", + "password": "Passord", + "username": "Brukernavn" + }, + "description": "For \u00e5 f\u00e5 tilgang til Flume Personal API, m\u00e5 du be om en \"Klient-ID\" og \"Client Secret\" p\u00e5 https://portal.flumetech.com/settings#token", + "title": "Koble til Flume-kontoen din" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/pl.json b/homeassistant/components/flume/translations/pl.json new file mode 100644 index 00000000000..55dfceac11f --- /dev/null +++ b/homeassistant/components/flume/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "To konto jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "client_id": "Identyfikator klienta", + "client_secret": "Has\u0142o klienta", + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Aby uzyska\u0107 dost\u0119p do API Flume, musisz poprosi\u0107 o 'ID klienta\u201d i 'klucz tajny klienta' na stronie https://portal.flumetech.com/settings#token", + "title": "Po\u0142\u0105cz z kontem Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/pt.json b/homeassistant/components/flume/translations/pt.json similarity index 100% rename from homeassistant/components/neato/.translations/pt.json rename to homeassistant/components/flume/translations/pt.json diff --git a/homeassistant/components/flume/translations/ru.json b/homeassistant/components/flume/translations/ru.json new file mode 100644 index 00000000000..eb9b1261bd9 --- /dev/null +++ b/homeassistant/components/flume/translations/ru.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "client_id": "ID \u043a\u043b\u0438\u0435\u043d\u0442\u0430", + "client_secret": "\u0421\u0435\u043a\u0440\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 API Flume, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 'ID \u043a\u043b\u0438\u0435\u043d\u0442\u0430' \u0438 '\u0421\u0435\u043a\u0440\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430' \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 https://portal.flumetech.com/settings#token.", + "title": "Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/sl.json b/homeassistant/components/flume/translations/sl.json new file mode 100644 index 00000000000..9673cb6c960 --- /dev/null +++ b/homeassistant/components/flume/translations/sl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Ta ra\u010dun je \u017ee konfiguriran" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "client_id": "Client ID", + "client_secret": "Client Secret", + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "description": "\u010ce \u017eelite dostopati do osebnega API-ja Flume, boste morali na https://portal.flumetech.com/settings#token zahtevati \"Client ID\" in \"Client Secret\".", + "title": "Pove\u017eite se s svojim ra\u010dunom Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flume/translations/zh-Hant.json b/homeassistant/components/flume/translations/zh-Hant.json new file mode 100644 index 00000000000..cc7dea80e52 --- /dev/null +++ b/homeassistant/components/flume/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "client_id": "\u5ba2\u6236\u7aef ID", + "client_secret": "\u5ba2\u6236\u7aef\u5bc6\u9470", + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u6b32\u5b58\u53d6 Flume \u500b\u4eba API\u3001\u5c07\u9700\u8981\u65bc https://portal.flumetech.com/settings#token \u7372\u5f97\u5ba2\u6236\u7aef ID\uff08Client ID\u300f\u53ca\u5ba2\u6236\u7aef\u5bc6\u9470\uff08Client Secret\uff09", + "title": "\u9023\u7dda\u81f3 Flume \u5e33\u865f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/ca.json b/homeassistant/components/flunearyou/.translations/ca.json deleted file mode 100644 index dddf7dc2c88..00000000000 --- a/homeassistant/components/flunearyou/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Les coordenades ja estan registrades" - }, - "error": { - "general_error": "S'ha produ\u00eft un error desconegut." - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud" - }, - "description": "Monitoritza informes basats en usuari i CDC per a parells de coordenades.", - "title": "Configuraci\u00f3 Flu Near You" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/de.json b/homeassistant/components/flunearyou/.translations/de.json deleted file mode 100644 index 0ac83023896..00000000000 --- a/homeassistant/components/flunearyou/.translations/de.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Diese Koordinaten sind bereits registriert." - }, - "error": { - "general_error": "Es gab einen unbekannten Fehler." - }, - "step": { - "user": { - "data": { - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad" - }, - "title": "Konfigurieren Sie die Grippe in Ihrer N\u00e4he" - } - }, - "title": "Grippe in Ihrer N\u00e4he" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/en.json b/homeassistant/components/flunearyou/.translations/en.json deleted file mode 100644 index ca868b8ebd9..00000000000 --- a/homeassistant/components/flunearyou/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "These coordinates are already registered." - }, - "error": { - "general_error": "There was an unknown error." - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude" - }, - "description": "Monitor user-based and CDC repots for a pair of coordinates.", - "title": "Configure Flu Near You" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/es.json b/homeassistant/components/flunearyou/.translations/es.json deleted file mode 100644 index df104c5405e..00000000000 --- a/homeassistant/components/flunearyou/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Estas coordenadas ya est\u00e1n registradas." - }, - "error": { - "general_error": "Se ha producido un error desconocido." - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud" - }, - "description": "Monitorizar reportes de usuarios y del CDC para un par de coordenadas", - "title": "Configurar Flu Near You" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/ko.json b/homeassistant/components/flunearyou/.translations/ko.json deleted file mode 100644 index c155a7f6111..00000000000 --- a/homeassistant/components/flunearyou/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc88c\ud45c\uac12\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "general_error": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4" - }, - "description": "\uc0ac\uc6a9\uc790 \uae30\ubc18 \ub370\uc774\ud130 \ubc0f CDC \ubcf4\uace0\uc11c\uc5d0\uc11c \uc88c\ud45c\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud569\ub2c8\ub2e4.", - "title": "Flu Near You \uad6c\uc131" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/lb.json b/homeassistant/components/flunearyou/.translations/lb.json deleted file mode 100644 index 03c8d0bce09..00000000000 --- a/homeassistant/components/flunearyou/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebs Koordinate si scho registr\u00e9iert" - }, - "error": { - "general_error": "Onbekannten Feeler" - }, - "step": { - "user": { - "data": { - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad" - }, - "description": "Iwwerwach Benotzer-bas\u00e9iert an CDC Berichter fir Koordinaten.", - "title": "Flu Near You konfigur\u00e9ieren" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/ru.json b/homeassistant/components/flunearyou/.translations/ru.json deleted file mode 100644 index 8e8b050ba7a..00000000000 --- a/homeassistant/components/flunearyou/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "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." - }, - "error": { - "general_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "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 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438 CDC \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f.", - "title": "Flu Near You" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/.translations/zh-Hant.json b/homeassistant/components/flunearyou/.translations/zh-Hant.json deleted file mode 100644 index 50f31707a61..00000000000 --- a/homeassistant/components/flunearyou/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u4e9b\u5ea7\u6a19\u5df2\u8a3b\u518a\u3002" - }, - "error": { - "general_error": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "step": { - "user": { - "data": { - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6" - }, - "description": "\u76e3\u6e2c\u4f7f\u7528\u8005\u8207 CDC \u56de\u5831\u5ea7\u6a19\u3002", - "title": "\u8a2d\u5b9a Flu Near You" - } - }, - "title": "Flu Near You" - } -} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/__init__.py b/homeassistant/components/flunearyou/__init__.py index 5657e646be5..1e8e2e20b2d 100644 --- a/homeassistant/components/flunearyou/__init__.py +++ b/homeassistant/components/flunearyou/__init__.py @@ -1 +1,209 @@ """The flunearyou component.""" +import asyncio +from datetime import timedelta + +from pyflunearyou import Client +from pyflunearyou.errors import FluNearYouError +import voluptuous as vol + +from homeassistant.config_entries import SOURCE_IMPORT +from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE +from homeassistant.core import callback +from homeassistant.helpers import aiohttp_client, config_validation as cv +from homeassistant.helpers.dispatcher import async_dispatcher_send +from homeassistant.helpers.event import async_track_time_interval + +from .const import ( + CATEGORY_CDC_REPORT, + CATEGORY_USER_REPORT, + DATA_CLIENT, + DOMAIN, + LOGGER, + SENSORS, + TOPIC_UPDATE, +) + +DATA_LISTENER = "listener" + +DEFAULT_SCAN_INTERVAL = timedelta(minutes=30) + +CONFIG_SCHEMA = vol.Schema( + { + vol.Optional(DOMAIN): vol.Schema( + { + vol.Optional(CONF_LATITUDE): cv.latitude, + vol.Optional(CONF_LONGITUDE): cv.longitude, + } + ) + }, + extra=vol.ALLOW_EXTRA, +) + + +@callback +def async_get_api_category(sensor_type): + """Get the category that a particular sensor type belongs to.""" + try: + return next( + ( + category + for category, sensors in SENSORS.items() + for sensor in sensors + if sensor[0] == sensor_type + ) + ) + except StopIteration: + raise ValueError(f"Can't find category sensor type: {sensor_type}") + + +async def async_setup(hass, config): + """Set up the Flu Near You component.""" + hass.data[DOMAIN] = {DATA_CLIENT: {}, DATA_LISTENER: {}} + + if DOMAIN not in config: + return True + + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_IMPORT}, + data={ + CONF_LATITUDE: config[DOMAIN].get(CONF_LATITUDE, hass.config.latitude), + CONF_LONGITUDE: config[DOMAIN].get( + CONF_LATITUDE, hass.config.longitude + ), + }, + ) + ) + + return True + + +async def async_setup_entry(hass, config_entry): + """Set up Flu Near You as config entry.""" + websession = aiohttp_client.async_get_clientsession(hass) + + fny = FluNearYouData( + hass, + Client(websession), + config_entry.data.get(CONF_LATITUDE, hass.config.latitude), + config_entry.data.get(CONF_LONGITUDE, hass.config.longitude), + ) + await fny.async_update() + hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] = fny + + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(config_entry, "sensor") + ) + + async def refresh(event_time): + """Refresh data from Flu Near You.""" + await fny.async_update() + + hass.data[DOMAIN][DATA_LISTENER][config_entry.entry_id] = async_track_time_interval( + hass, refresh, DEFAULT_SCAN_INTERVAL + ) + + return True + + +async def async_unload_entry(hass, config_entry): + """Unload an Flu Near You config entry.""" + hass.data[DOMAIN][DATA_CLIENT].pop(config_entry.entry_id) + + remove_listener = hass.data[DOMAIN][DATA_LISTENER].pop(config_entry.entry_id) + remove_listener() + + await hass.config_entries.async_forward_entry_unload(config_entry, "sensor") + + return True + + +class FluNearYouData: + """Define a data object to retrieve info from Flu Near You.""" + + def __init__(self, hass, client, latitude, longitude): + """Initialize.""" + self._async_cancel_time_interval_listener = None + self._client = client + self._hass = hass + self.data = {} + self.latitude = latitude + self.longitude = longitude + + self._api_coros = { + CATEGORY_CDC_REPORT: self._client.cdc_reports.status_by_coordinates( + latitude, longitude + ), + CATEGORY_USER_REPORT: self._client.user_reports.status_by_coordinates( + latitude, longitude + ), + } + + self._api_category_count = { + CATEGORY_CDC_REPORT: 0, + CATEGORY_USER_REPORT: 0, + } + + self._api_category_locks = { + CATEGORY_CDC_REPORT: asyncio.Lock(), + CATEGORY_USER_REPORT: asyncio.Lock(), + } + + async def _async_get_data_from_api(self, api_category): + """Update and save data for a particular API category.""" + if self._api_category_count[api_category] == 0: + return + + try: + self.data[api_category] = await self._api_coros[api_category] + except FluNearYouError as err: + LOGGER.error("Unable to get %s data: %s", api_category, err) + self.data[api_category] = None + + async def _async_update_listener_action(self, now): + """Define an async_track_time_interval action to update data.""" + await self.async_update() + + @callback + def async_deregister_api_interest(self, sensor_type): + """Decrement the number of entities with data needs from an API category.""" + # If this deregistration should leave us with no registration at all, remove the + # time interval: + if sum(self._api_category_count.values()) == 0: + if self._async_cancel_time_interval_listener: + self._async_cancel_time_interval_listener() + self._async_cancel_time_interval_listener = None + return + + api_category = async_get_api_category(sensor_type) + self._api_category_count[api_category] -= 1 + + async def async_register_api_interest(self, sensor_type): + """Increment the number of entities with data needs from an API category.""" + # If this is the first registration we have, start a time interval: + if not self._async_cancel_time_interval_listener: + self._async_cancel_time_interval_listener = async_track_time_interval( + self._hass, self._async_update_listener_action, DEFAULT_SCAN_INTERVAL, + ) + + api_category = async_get_api_category(sensor_type) + self._api_category_count[api_category] += 1 + + # If a sensor registers interest in a particular API call and the data doesn't + # exist for it yet, make the API call and grab the data: + async with self._api_category_locks[api_category]: + if api_category not in self.data: + await self._async_get_data_from_api(api_category) + + async def async_update(self): + """Update Flu Near You data.""" + tasks = [ + self._async_get_data_from_api(api_category) + for api_category in self._api_coros + ] + + await asyncio.gather(*tasks) + + LOGGER.debug("Received new data") + async_dispatcher_send(self._hass, TOPIC_UPDATE) diff --git a/homeassistant/components/flunearyou/config_flow.py b/homeassistant/components/flunearyou/config_flow.py new file mode 100644 index 00000000000..0a55a21f6ed --- /dev/null +++ b/homeassistant/components/flunearyou/config_flow.py @@ -0,0 +1,60 @@ +"""Define a config flow manager for flunearyou.""" +from pyflunearyou import Client +from pyflunearyou.errors import FluNearYouError +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE +from homeassistant.helpers import aiohttp_client, config_validation as cv + +from .const import DOMAIN, LOGGER # pylint: disable=unused-import + + +class FluNearYouFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): + """Handle an FluNearYou config flow.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL + + @property + def data_schema(self): + """Return the data schema for integration.""" + return vol.Schema( + { + vol.Required( + CONF_LATITUDE, default=self.hass.config.latitude + ): cv.latitude, + vol.Required( + CONF_LONGITUDE, default=self.hass.config.longitude + ): cv.longitude, + } + ) + + async def async_step_import(self, import_config): + """Import a config entry from configuration.yaml.""" + return await self.async_step_user(import_config) + + async def async_step_user(self, user_input=None): + """Handle the start of the config flow.""" + if not user_input: + return self.async_show_form(step_id="user", data_schema=self.data_schema) + + unique_id = f"{user_input[CONF_LATITUDE]}, {user_input[CONF_LONGITUDE]}" + + await self.async_set_unique_id(unique_id) + self._abort_if_unique_id_configured() + + websession = aiohttp_client.async_get_clientsession(self.hass) + client = Client(websession) + + try: + await client.cdc_reports.status_by_coordinates( + user_input[CONF_LATITUDE], user_input[CONF_LONGITUDE] + ) + except FluNearYouError as err: + LOGGER.error("Error while configuring integration: %s", err) + return self.async_show_form( + step_id="user", errors={"base": "general_error"} + ) + + return self.async_create_entry(title=unique_id, data=user_input) diff --git a/homeassistant/components/flunearyou/const.py b/homeassistant/components/flunearyou/const.py new file mode 100644 index 00000000000..ac8008f7f9b --- /dev/null +++ b/homeassistant/components/flunearyou/const.py @@ -0,0 +1,38 @@ +"""Define flunearyou constants.""" +import logging + +DOMAIN = "flunearyou" +LOGGER = logging.getLogger(__package__) + +DATA_CLIENT = "client" + +CATEGORY_CDC_REPORT = "cdc_report" +CATEGORY_USER_REPORT = "user_report" + +TOPIC_UPDATE = "flunearyou_update" + +TYPE_CDC_LEVEL = "level" +TYPE_CDC_LEVEL2 = "level2" +TYPE_USER_CHICK = "chick" +TYPE_USER_DENGUE = "dengue" +TYPE_USER_FLU = "flu" +TYPE_USER_LEPTO = "lepto" +TYPE_USER_NO_SYMPTOMS = "none" +TYPE_USER_SYMPTOMS = "symptoms" +TYPE_USER_TOTAL = "total" + +SENSORS = { + CATEGORY_CDC_REPORT: [ + (TYPE_CDC_LEVEL, "CDC Level", "mdi:biohazard", None), + (TYPE_CDC_LEVEL2, "CDC Level 2", "mdi:biohazard", None), + ], + CATEGORY_USER_REPORT: [ + (TYPE_USER_CHICK, "Avian Flu Symptoms", "mdi:alert", "reports"), + (TYPE_USER_DENGUE, "Dengue Fever Symptoms", "mdi:alert", "reports"), + (TYPE_USER_FLU, "Flu Symptoms", "mdi:alert", "reports"), + (TYPE_USER_LEPTO, "Leptospirosis Symptoms", "mdi:alert", "reports"), + (TYPE_USER_NO_SYMPTOMS, "No Symptoms", "mdi:alert", "reports"), + (TYPE_USER_SYMPTOMS, "Flu-like Symptoms", "mdi:alert", "reports"), + (TYPE_USER_TOTAL, "Total Symptoms", "mdi:alert", "reports"), + ], +} diff --git a/homeassistant/components/flunearyou/manifest.json b/homeassistant/components/flunearyou/manifest.json index e7394356c64..f6cc6714a38 100644 --- a/homeassistant/components/flunearyou/manifest.json +++ b/homeassistant/components/flunearyou/manifest.json @@ -1,8 +1,8 @@ { "domain": "flunearyou", "name": "Flu Near You", + "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/flunearyou", - "requirements": ["pyflunearyou==1.0.3"], - "dependencies": [], + "requirements": ["pyflunearyou==1.0.7"], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/flunearyou/sensor.py b/homeassistant/components/flunearyou/sensor.py index e06eb3a8ef4..22c56c10038 100644 --- a/homeassistant/components/flunearyou/sensor.py +++ b/homeassistant/components/flunearyou/sensor.py @@ -1,25 +1,24 @@ """Support for user- and CDC-based flu info sensors from Flu Near You.""" -from datetime import timedelta -import logging - -from pyflunearyou import Client -from pyflunearyou.errors import FluNearYouError -import voluptuous as vol - -from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ( - ATTR_ATTRIBUTION, - ATTR_STATE, - CONF_LATITUDE, - CONF_LONGITUDE, - CONF_MONITORED_CONDITIONS, -) -from homeassistant.helpers import aiohttp_client -import homeassistant.helpers.config_validation as cv +from homeassistant.const import ATTR_ATTRIBUTION, ATTR_STATE +from homeassistant.core import callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle -_LOGGER = logging.getLogger(__name__) +from .const import ( + CATEGORY_CDC_REPORT, + CATEGORY_USER_REPORT, + DATA_CLIENT, + DOMAIN, + SENSORS, + TOPIC_UPDATE, + TYPE_USER_CHICK, + TYPE_USER_DENGUE, + TYPE_USER_FLU, + TYPE_USER_LEPTO, + TYPE_USER_NO_SYMPTOMS, + TYPE_USER_SYMPTOMS, + TYPE_USER_TOTAL, +) ATTR_CITY = "city" ATTR_REPORTED_DATE = "reported_date" @@ -31,94 +30,45 @@ ATTR_ZIP_CODE = "zip_code" DEFAULT_ATTRIBUTION = "Data provided by Flu Near You" -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=10) -SCAN_INTERVAL = timedelta(minutes=30) - -CATEGORY_CDC_REPORT = "cdc_report" -CATEGORY_USER_REPORT = "user_report" - -TYPE_CDC_LEVEL = "level" -TYPE_CDC_LEVEL2 = "level2" -TYPE_USER_CHICK = "chick" -TYPE_USER_DENGUE = "dengue" -TYPE_USER_FLU = "flu" -TYPE_USER_LEPTO = "lepto" -TYPE_USER_NO_SYMPTOMS = "none" -TYPE_USER_SYMPTOMS = "symptoms" -TYPE_USER_TOTAL = "total" - EXTENDED_TYPE_MAPPING = { TYPE_USER_FLU: "ili", TYPE_USER_NO_SYMPTOMS: "no_symptoms", TYPE_USER_TOTAL: "total_surveys", } -SENSORS = { - CATEGORY_CDC_REPORT: [ - (TYPE_CDC_LEVEL, "CDC Level", "mdi:biohazard", None), - (TYPE_CDC_LEVEL2, "CDC Level 2", "mdi:biohazard", None), - ], - CATEGORY_USER_REPORT: [ - (TYPE_USER_CHICK, "Avian Flu Symptoms", "mdi:alert", "reports"), - (TYPE_USER_DENGUE, "Dengue Fever Symptoms", "mdi:alert", "reports"), - (TYPE_USER_FLU, "Flu Symptoms", "mdi:alert", "reports"), - (TYPE_USER_LEPTO, "Leptospirosis Symptoms", "mdi:alert", "reports"), - (TYPE_USER_NO_SYMPTOMS, "No Symptoms", "mdi:alert", "reports"), - (TYPE_USER_SYMPTOMS, "Flu-like Symptoms", "mdi:alert", "reports"), - (TYPE_USER_TOTAL, "Total Symptoms", "mdi:alert", "reports"), - ], -} -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_LATITUDE): cv.latitude, - vol.Optional(CONF_LONGITUDE): cv.longitude, - vol.Required(CONF_MONITORED_CONDITIONS, default=list(SENSORS)): vol.All( - cv.ensure_list, [vol.In(SENSORS)] - ), - } -) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up Flu Near You sensors based on a config entry.""" + fny = hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] - -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Configure the platform and add the sensors.""" - websession = aiohttp_client.async_get_clientsession(hass) - - latitude = config.get(CONF_LATITUDE, hass.config.latitude) - longitude = config.get(CONF_LONGITUDE, hass.config.longitude) - - fny = FluNearYouData( - Client(websession), latitude, longitude, config[CONF_MONITORED_CONDITIONS] + async_add_entities( + [ + FluNearYouSensor(fny, sensor_type, name, category, icon, unit) + for category, sensors in SENSORS.items() + for sensor_type, name, icon, unit in sensors + ], + True, ) - await fny.async_update() - - sensors = [ - FluNearYouSensor(fny, kind, name, category, icon, unit) - for category in config[CONF_MONITORED_CONDITIONS] - for kind, name, icon, unit in SENSORS[category] - ] - - async_add_entities(sensors, True) class FluNearYouSensor(Entity): """Define a base Flu Near You sensor.""" - def __init__(self, fny, kind, name, category, icon, unit): + def __init__(self, fny, sensor_type, name, category, icon, unit): """Initialize the sensor.""" self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION} self._category = category + self._fny = fny self._icon = icon - self._kind = kind self._name = name + self._sensor_type = sensor_type self._state = None self._unit = unit - self.fny = fny @property def available(self): """Return True if entity is available.""" - return bool(self.fny.data[self._category]) + return bool(self._fny.data[self._category]) @property def device_state_attributes(self): @@ -143,19 +93,35 @@ class FluNearYouSensor(Entity): @property def unique_id(self): """Return a unique, Home Assistant friendly identifier for this entity.""" - return f"{self.fny.latitude},{self.fny.longitude}_{self._kind}" + return f"{self._fny.latitude},{self._fny.longitude}_{self._sensor_type}" @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" return self._unit - async def async_update(self): - """Update the sensor.""" - await self.fny.async_update() + async def async_added_to_hass(self): + """Register callbacks.""" - cdc_data = self.fny.data.get(CATEGORY_CDC_REPORT) - user_data = self.fny.data.get(CATEGORY_USER_REPORT) + @callback + def update(): + """Update the state.""" + self.update_from_latest_data() + self.async_write_ha_state() + + self.async_on_remove(async_dispatcher_connect(self.hass, TOPIC_UPDATE, update)) + await self._fny.async_register_api_interest(self._sensor_type) + self.update_from_latest_data() + + async def async_will_remove_from_hass(self) -> None: + """Disconnect dispatcher listener when removed.""" + self._fny.async_deregister_api_interest(self._sensor_type) + + @callback + def update_from_latest_data(self): + """Update the sensor.""" + cdc_data = self._fny.data.get(CATEGORY_CDC_REPORT) + user_data = self._fny.data.get(CATEGORY_USER_REPORT) if self._category == CATEGORY_CDC_REPORT and cdc_data: self._attrs.update( @@ -164,7 +130,7 @@ class FluNearYouSensor(Entity): ATTR_STATE: cdc_data["name"], } ) - self._state = cdc_data[self._kind] + self._state = cdc_data[self._sensor_type] elif self._category == CATEGORY_USER_REPORT and user_data: self._attrs.update( { @@ -176,10 +142,10 @@ class FluNearYouSensor(Entity): } ) - if self._kind in user_data["state"]["data"]: - states_key = self._kind - elif self._kind in EXTENDED_TYPE_MAPPING: - states_key = EXTENDED_TYPE_MAPPING[self._kind] + if self._sensor_type in user_data["state"]["data"]: + states_key = self._sensor_type + elif self._sensor_type in EXTENDED_TYPE_MAPPING: + states_key = EXTENDED_TYPE_MAPPING[self._sensor_type] self._attrs[ATTR_STATE_REPORTS_THIS_WEEK] = user_data["state"]["data"][ states_key @@ -188,7 +154,7 @@ class FluNearYouSensor(Entity): "last_week_data" ][states_key] - if self._kind == TYPE_USER_TOTAL: + if self._sensor_type == TYPE_USER_TOTAL: self._state = sum( v for k, v in user_data["local"].items() @@ -202,32 +168,4 @@ class FluNearYouSensor(Entity): ) ) else: - self._state = user_data["local"][self._kind] - - -class FluNearYouData: - """Define a data object to retrieve info from Flu Near You.""" - - def __init__(self, client, latitude, longitude, sensor_types): - """Initialize.""" - self._client = client - self._sensor_types = sensor_types - self.data = {} - self.latitude = latitude - self.longitude = longitude - - @Throttle(MIN_TIME_BETWEEN_UPDATES) - async def async_update(self): - """Update Flu Near You data.""" - for key, method in [ - (CATEGORY_CDC_REPORT, self._client.cdc_reports.status_by_coordinates), - (CATEGORY_USER_REPORT, self._client.user_reports.status_by_coordinates), - ]: - if key in self._sensor_types: - try: - self.data[key] = await method(self.latitude, self.longitude) - except FluNearYouError as err: - _LOGGER.error('There was an error with "%s" data: %s', key, err) - self.data[key] = {} - - _LOGGER.debug("New data stored: %s", self.data) + self._state = user_data["local"][self._sensor_type] diff --git a/homeassistant/components/flunearyou/strings.json b/homeassistant/components/flunearyou/strings.json new file mode 100644 index 00000000000..2a7e59989b0 --- /dev/null +++ b/homeassistant/components/flunearyou/strings.json @@ -0,0 +1,15 @@ +{ + "config": { + "step": { + "user": { + "title": "Configure Flu Near You", + "description": "Monitor user-based and CDC repots for a pair of coordinates.", + "data": { "latitude": "Latitude", "longitude": "Longitude" } + } + }, + "error": { "general_error": "There was an unknown error." }, + "abort": { + "already_configured": "These coordinates are already registered." + } + } +} diff --git a/homeassistant/components/flunearyou/translations/ca.json b/homeassistant/components/flunearyou/translations/ca.json new file mode 100644 index 00000000000..c26c1f55b2c --- /dev/null +++ b/homeassistant/components/flunearyou/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Les coordenades ja estan registrades" + }, + "error": { + "general_error": "S'ha produ\u00eft un error desconegut." + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud" + }, + "description": "Monitoritza informes basats en usuari i CDC per a parells de coordenades.", + "title": "Configuraci\u00f3 Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/de.json b/homeassistant/components/flunearyou/translations/de.json new file mode 100644 index 00000000000..69e4fc0f478 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Diese Koordinaten sind bereits registriert." + }, + "error": { + "general_error": "Es gab einen unbekannten Fehler." + }, + "step": { + "user": { + "data": { + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad" + }, + "title": "Konfigurieren Sie die Grippe in Ihrer N\u00e4he" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/en.json b/homeassistant/components/flunearyou/translations/en.json new file mode 100644 index 00000000000..88997a89c90 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "These coordinates are already registered." + }, + "error": { + "general_error": "There was an unknown error." + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude" + }, + "description": "Monitor user-based and CDC repots for a pair of coordinates.", + "title": "Configure Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/es.json b/homeassistant/components/flunearyou/translations/es.json new file mode 100644 index 00000000000..cdaa475037d --- /dev/null +++ b/homeassistant/components/flunearyou/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Estas coordenadas ya est\u00e1n registradas." + }, + "error": { + "general_error": "Se ha producido un error desconocido." + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud" + }, + "description": "Monitorizar reportes de usuarios y del CDC para un par de coordenadas", + "title": "Configurar Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/fr.json b/homeassistant/components/flunearyou/translations/fr.json new file mode 100644 index 00000000000..dddcdd64d7b --- /dev/null +++ b/homeassistant/components/flunearyou/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Coordonn\u00e9es d\u00e9j\u00e0 enregistr\u00e9es" + }, + "error": { + "general_error": "Une erreur inconnue est survenue." + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/it.json b/homeassistant/components/flunearyou/translations/it.json new file mode 100644 index 00000000000..fc90199664e --- /dev/null +++ b/homeassistant/components/flunearyou/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Queste coordinate sono gi\u00e0 registrate." + }, + "error": { + "general_error": "Si \u00e8 verificato un errore sconosciuto." + }, + "step": { + "user": { + "data": { + "latitude": "Latitudine", + "longitude": "Logitudine" + }, + "description": "Monitorare i repot basati su utenti e CDC per una coppia di coordinate.", + "title": "Configurare Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/ko.json b/homeassistant/components/flunearyou/translations/ko.json new file mode 100644 index 00000000000..a41afe3ebc7 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\uc88c\ud45c\uac12\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "general_error": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4" + }, + "description": "\uc0ac\uc6a9\uc790 \uae30\ubc18 \ub370\uc774\ud130 \ubc0f CDC \ubcf4\uace0\uc11c\uc5d0\uc11c \uc88c\ud45c\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud569\ub2c8\ub2e4.", + "title": "Flu Near You \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/lb.json b/homeassistant/components/flunearyou/translations/lb.json new file mode 100644 index 00000000000..2692e9219e9 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebs Koordinate si scho registr\u00e9iert" + }, + "error": { + "general_error": "Onbekannten Feeler" + }, + "step": { + "user": { + "data": { + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad" + }, + "description": "Iwwerwach Benotzer-bas\u00e9iert an CDC Berichter fir Koordinaten.", + "title": "Flu Near You konfigur\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/no.json b/homeassistant/components/flunearyou/translations/no.json new file mode 100644 index 00000000000..3b8a17163dc --- /dev/null +++ b/homeassistant/components/flunearyou/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Disse koordinatene er allerede registrert." + }, + "error": { + "general_error": "Det oppstod en ukjent feil." + }, + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "Lengdegrad" + }, + "description": "Overv\u00e5k brukerbaserte og CDC-repoter for et par koordinater.", + "title": "Konfigurere influensa i n\u00e6rheten av deg" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/pl.json b/homeassistant/components/flunearyou/translations/pl.json new file mode 100644 index 00000000000..e674d422903 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Wsp\u00f3\u0142rz\u0119dne s\u0105 ju\u017c zarejestrowane." + }, + "error": { + "general_error": "Nieznany b\u0142\u0105d" + }, + "step": { + "user": { + "data": { + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/pt.json b/homeassistant/components/flunearyou/translations/pt.json similarity index 100% rename from homeassistant/components/wwlln/.translations/pt.json rename to homeassistant/components/flunearyou/translations/pt.json diff --git a/homeassistant/components/flunearyou/translations/ru.json b/homeassistant/components/flunearyou/translations/ru.json new file mode 100644 index 00000000000..b4ff15d4044 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/ru.json @@ -0,0 +1,20 @@ +{ + "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." + }, + "error": { + "general_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "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 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438 CDC \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f.", + "title": "Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/sl.json b/homeassistant/components/flunearyou/translations/sl.json new file mode 100644 index 00000000000..843794b8a52 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Te koordinate so \u017ee registrirane." + }, + "error": { + "general_error": "Pri\u0161lo je do neznane napake." + }, + "step": { + "user": { + "data": { + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina" + }, + "description": "Spremljajte uporabni\u0161ke in CDC obvestila za dolo\u010dene koordinate.", + "title": "Konfigurirajte Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/zh-Hant.json b/homeassistant/components/flunearyou/translations/zh-Hant.json new file mode 100644 index 00000000000..b10552d0fe3 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u4e9b\u5ea7\u6a19\u5df2\u8a3b\u518a\u3002" + }, + "error": { + "general_error": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "step": { + "user": { + "data": { + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6" + }, + "description": "\u76e3\u6e2c\u4f7f\u7528\u8005\u8207 CDC \u56de\u5831\u5ea7\u6a19\u3002", + "title": "\u8a2d\u5b9a Flu Near You" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flux/manifest.json b/homeassistant/components/flux/manifest.json index 5195ed06bb3..400331f9f5f 100644 --- a/homeassistant/components/flux/manifest.json +++ b/homeassistant/components/flux/manifest.json @@ -2,8 +2,6 @@ "domain": "flux", "name": "Flux", "documentation": "https://www.home-assistant.io/integrations/flux", - "requirements": [], - "dependencies": [], "after_dependencies": ["light"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/flux/switch.py b/homeassistant/components/flux/switch.py index 0205bb308be..61bdb9a2862 100644 --- a/homeassistant/components/flux/switch.py +++ b/homeassistant/components/flux/switch.py @@ -233,7 +233,7 @@ class FluxSwitch(SwitchDevice, RestoreEntity): # Make initial update await self.async_flux_update() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn off flux.""" @@ -241,7 +241,7 @@ class FluxSwitch(SwitchDevice, RestoreEntity): self.unsub_tracker() self.unsub_tracker = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_flux_update(self, utcnow=None): """Update all the lights using flux.""" diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 88b8c91420d..1acd58d8e43 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -1,7 +1,6 @@ """Support for Flux lights.""" import logging import random -import socket from flux_led import BulbScanner, WifiLedBulb import voluptuous as vol @@ -363,7 +362,7 @@ class FluxLight(Light): try: self._connect() self._error_reported = False - except socket.error: + except OSError: self._disconnect() if not self._error_reported: _LOGGER.warning( diff --git a/homeassistant/components/flux_led/manifest.json b/homeassistant/components/flux_led/manifest.json index 20699139179..378860229ee 100644 --- a/homeassistant/components/flux_led/manifest.json +++ b/homeassistant/components/flux_led/manifest.json @@ -3,6 +3,5 @@ "name": "Flux LED/MagicLight", "documentation": "https://www.home-assistant.io/integrations/flux_led", "requirements": ["flux_led==0.22"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/folder/manifest.json b/homeassistant/components/folder/manifest.json index d4026e7689d..810a26bc1e0 100644 --- a/homeassistant/components/folder/manifest.json +++ b/homeassistant/components/folder/manifest.json @@ -2,7 +2,5 @@ "domain": "folder", "name": "Folder", "documentation": "https://www.home-assistant.io/integrations/folder", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/folder_watcher/manifest.json b/homeassistant/components/folder_watcher/manifest.json index 47edc4dccc0..722b60a952d 100644 --- a/homeassistant/components/folder_watcher/manifest.json +++ b/homeassistant/components/folder_watcher/manifest.json @@ -3,7 +3,6 @@ "name": "Folder Watcher", "documentation": "https://www.home-assistant.io/integrations/folder_watcher", "requirements": ["watchdog==0.8.3"], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/foobot/manifest.json b/homeassistant/components/foobot/manifest.json index c30985225f4..190d3e9837f 100644 --- a/homeassistant/components/foobot/manifest.json +++ b/homeassistant/components/foobot/manifest.json @@ -3,6 +3,5 @@ "name": "Foobot", "documentation": "https://www.home-assistant.io/integrations/foobot", "requirements": ["foobot_async==0.3.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fortigate/manifest.json b/homeassistant/components/fortigate/manifest.json index 1fdd28e256d..395f8e05890 100644 --- a/homeassistant/components/fortigate/manifest.json +++ b/homeassistant/components/fortigate/manifest.json @@ -2,7 +2,6 @@ "domain": "fortigate", "name": "FortiGate", "documentation": "https://www.home-assistant.io/integrations/fortigate", - "dependencies": [], "codeowners": ["@kifeo"], "requirements": ["pyfgt==0.5.1"] } diff --git a/homeassistant/components/fortios/manifest.json b/homeassistant/components/fortios/manifest.json index 4073f1bbb36..e0ca2671b19 100644 --- a/homeassistant/components/fortios/manifest.json +++ b/homeassistant/components/fortios/manifest.json @@ -3,6 +3,5 @@ "name": "FortiOS", "documentation": "https://www.home-assistant.io/integrations/fortios/", "requirements": ["fortiosapi==0.10.8"], - "dependencies": [], "codeowners": ["@kimfrellsen"] } diff --git a/homeassistant/components/foscam/manifest.json b/homeassistant/components/foscam/manifest.json index 63d44fc04e9..8c7e8e7d77a 100644 --- a/homeassistant/components/foscam/manifest.json +++ b/homeassistant/components/foscam/manifest.json @@ -3,6 +3,5 @@ "name": "Foscam", "documentation": "https://www.home-assistant.io/integrations/foscam", "requirements": ["libpyfoscam==1.0"], - "dependencies": [], "codeowners": ["@skgsergio"] } diff --git a/homeassistant/components/foscam/services.yaml b/homeassistant/components/foscam/services.yaml index 64e68dd5bc4..33ba82482f1 100644 --- a/homeassistant/components/foscam/services.yaml +++ b/homeassistant/components/foscam/services.yaml @@ -3,10 +3,10 @@ ptz: fields: entity_id: description: Name(s) of entities to move. - example: 'camera.living_room_camera' + example: "camera.living_room_camera" movement: description: "Direction of the movement. Allowed values: up, down, left, right, top_left, top_right, bottom_left, bottom_right." - example: 'up' + example: "up" travel_time: description: "(Optional) Travel time in seconds. Allowed values: float from 0 to 1. Default: 0.125" example: 0.125 diff --git a/homeassistant/components/foursquare/__init__.py b/homeassistant/components/foursquare/__init__.py index 07d177ebf30..bae0336a63e 100644 --- a/homeassistant/components/foursquare/__init__.py +++ b/homeassistant/components/foursquare/__init__.py @@ -5,7 +5,7 @@ import requests import voluptuous as vol from homeassistant.components.http import HomeAssistantView -from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_BAD_REQUEST +from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_BAD_REQUEST, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -55,7 +55,7 @@ def setup(hass, config): url = f"https://api.foursquare.com/v2/checkins/add?oauth_token={config[CONF_ACCESS_TOKEN]}&v=20160802&m=swarm" response = requests.post(url, data=call.data, timeout=10) - if response.status_code not in (200, 201): + if response.status_code not in (HTTP_OK, 201): _LOGGER.exception( "Error checking in user. Response %d: %s:", response.status_code, diff --git a/homeassistant/components/foursquare/manifest.json b/homeassistant/components/foursquare/manifest.json index 450759a5922..39e4f897d5f 100644 --- a/homeassistant/components/foursquare/manifest.json +++ b/homeassistant/components/foursquare/manifest.json @@ -2,7 +2,6 @@ "domain": "foursquare", "name": "Foursquare", "documentation": "https://www.home-assistant.io/integrations/foursquare", - "requirements": [], "dependencies": ["http"], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/foursquare/services.yaml b/homeassistant/components/foursquare/services.yaml index 3d15a9583f6..0fcc077c7d3 100644 --- a/homeassistant/components/foursquare/services.yaml +++ b/homeassistant/components/foursquare/services.yaml @@ -1,29 +1,45 @@ checkin: description: Check a user into a Foursquare venue. fields: - alt: {description: 'Altitude of the user''s location, in meters. [Optional]', - example: 0} - altAcc: {description: 'Vertical accuracy of the user''s location, in meters.', - example: 1} - broadcast: {description: 'Who to broadcast this check-in to. Accepts a comma-delimited + alt: + description: Altitude of the user's location, in meters. [Optional] + example: 0 + altAcc: + description: Vertical accuracy of the user's location, in meters. + example: 1 + broadcast: + description: >- + Who to broadcast this check-in to. Accepts a comma-delimited list of values: private (off the grid) or public (share with friends), facebook share on facebook, twitter share on twitter, followers share with followers (celebrity mode users only), If no valid value is found, the default is public. - [Optional]', example: 'public,twitter'} - eventId: {description: 'The event the user is checking in to. [Optional]', example: UHR8THISVNT} - ll: {description: 'Latitude and longitude of the user''s location. Only specify + [Optional] + example: "public,twitter" + eventId: + description: The event the user is checking in to. [Optional] + example: UHR8THISVNT + ll: + description: >- + Latitude and longitude of the user's location. Only specify this field if you have a GPS or other device reported location for the user - at the time of check-in. [Optional]', example: '33.7,44.2'} - llAcc: {description: 'Accuracy of the user''s latitude and longitude, in meters. - [Optional]', example: 1} - mentions: {description: 'Mentions in your check-in. This parameter is a semicolon-delimited + at the time of check-in. [Optional] + example: "33.7,44.2" + llAcc: + description: Accuracy of the user's latitude and longitude, in meters. [Optional] + example: 1 + mentions: + description: >- + Mentions in your check-in. This parameter is a semicolon-delimited list of mentions. A single mention is of the form "start,end,userid", where start is the index of the first character in the shout representing the mention, end is the index of the first character in the shout after the mention, and userid is the userid of the user being mentioned. If userid is prefixed with "fbu-", this indicates a Facebook userid that is being mention. Character - indices in shouts are 0-based. [Optional]', example: '5,10,HZXXY3Y;15,20,GZYYZ3Z;25,30,fbu-GZXY13Y'} - shout: {description: 'A message about your check-in. The maximum length of this - field is 140 characters. [Optional]', example: There are crayons! Crayons!} - venueId: {description: 'The Foursquare venue where the user is checking in. [Required]', - example: IHR8THISVNU} + indices in shouts are 0-based. [Optional] + example: "5,10,HZXXY3Y;15,20,GZYYZ3Z;25,30,fbu-GZXY13Y" + shout: + description: A message about your check-in. The maximum length of this field is 140 characters. [Optional] + example: There are crayons! Crayons! + venueId: + description: The Foursquare venue where the user is checking in. [Required] + example: IHR8THISVNU diff --git a/homeassistant/components/free_mobile/manifest.json b/homeassistant/components/free_mobile/manifest.json index 2bba216242f..1cdef3d1162 100644 --- a/homeassistant/components/free_mobile/manifest.json +++ b/homeassistant/components/free_mobile/manifest.json @@ -3,6 +3,5 @@ "name": "Free Mobile", "documentation": "https://www.home-assistant.io/integrations/free_mobile", "requirements": ["freesms==0.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/free_mobile/notify.py b/homeassistant/components/free_mobile/notify.py index 8b5273f39d1..a4351bfe678 100644 --- a/homeassistant/components/free_mobile/notify.py +++ b/homeassistant/components/free_mobile/notify.py @@ -5,7 +5,13 @@ from freesms import FreeClient import voluptuous as vol from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService -from homeassistant.const import CONF_ACCESS_TOKEN, CONF_USERNAME +from homeassistant.const import ( + CONF_ACCESS_TOKEN, + CONF_USERNAME, + HTTP_BAD_REQUEST, + HTTP_FORBIDDEN, + HTTP_INTERNAL_SERVER_ERROR, +) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -31,11 +37,11 @@ class FreeSMSNotificationService(BaseNotificationService): """Send a message to the Free Mobile user cell.""" resp = self.free_client.send_sms(message) - if resp.status_code == 400: + if resp.status_code == HTTP_BAD_REQUEST: _LOGGER.error("At least one parameter is missing") elif resp.status_code == 402: _LOGGER.error("Too much SMS send in a few time") - elif resp.status_code == 403: + elif resp.status_code == HTTP_FORBIDDEN: _LOGGER.error("Wrong Username/Password") - elif resp.status_code == 500: + elif resp.status_code == HTTP_INTERNAL_SERVER_ERROR: _LOGGER.error("Server error, try later") diff --git a/homeassistant/components/freebox/.translations/ca.json b/homeassistant/components/freebox/.translations/ca.json deleted file mode 100644 index 0abfc0ef52b..00000000000 --- a/homeassistant/components/freebox/.translations/ca.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat" - }, - "error": { - "connection_failed": "No s'ha pogut connectar, torna-ho a provar", - "register_failed": "No s'ha pogut registrar, torna-ho a provar", - "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard" - }, - "step": { - "link": { - "description": "Prem \"Envia\", a continuaci\u00f3, toca la fletxa dreta del router per registrar Freebox amb Home Assistant.\n\n![Ubicaci\u00f3 del boto del router](/static/images/config_freebox.png)", - "title": "Enlla\u00e7 amb router Freebox" - }, - "user": { - "data": { - "host": "Amfitri\u00f3", - "port": "Port" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/de.json b/homeassistant/components/freebox/.translations/de.json deleted file mode 100644 index 72caccf49dc..00000000000 --- a/homeassistant/components/freebox/.translations/de.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host bereits konfiguriert" - }, - "error": { - "connection_failed": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "register_failed": "Registrieren fehlgeschlagen, bitte versuche es erneut", - "unknown": "Unbekannter Fehler: Bitte versuchen Sie es sp\u00e4ter erneut" - }, - "step": { - "link": { - "description": "Klicken Sie auf \"Senden\" und ber\u00fchren Sie dann den Pfeil nach rechts auf dem Router, um Freebox bei Home Assistant zu registrieren. \n\n ![Position der Schaltfl\u00e4che am Router]\n (/static/images/config_freebox.png)", - "title": "Link Freebox Router" - }, - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/en.json b/homeassistant/components/freebox/.translations/en.json deleted file mode 100644 index 75d925e2f7a..00000000000 --- a/homeassistant/components/freebox/.translations/en.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host already configured" - }, - "error": { - "connection_failed": "Failed to connect, please try again", - "register_failed": "Failed to register, please try again", - "unknown": "Unknown error: please retry later" - }, - "step": { - "link": { - "description": "Click \"Submit\", then touch the right arrow on the router to register Freebox with Home Assistant.\n\n![Location of button on the router](/static/images/config_freebox.png)", - "title": "Link Freebox router" - }, - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/es.json b/homeassistant/components/freebox/.translations/es.json deleted file mode 100644 index 2c073e1d044..00000000000 --- a/homeassistant/components/freebox/.translations/es.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El host ya est\u00e1 configurado." - }, - "error": { - "connection_failed": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "register_failed": "No se pudo registrar, int\u00e9ntalo de nuevo", - "unknown": "Error desconocido: por favor, int\u00e9ntalo de nuevo m\u00e1s" - }, - "step": { - "link": { - "description": "Pulsa \"Enviar\", despu\u00e9s pulsa en la flecha derecha en el router para registrar Freebox con Home Assistant\n\n![Localizaci\u00f3n del bot\u00f3n en el router](/static/images/config_freebox.png)", - "title": "Enlazar router Freebox" - }, - "user": { - "data": { - "host": "Host", - "port": "Puerto" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/fr.json b/homeassistant/components/freebox/.translations/fr.json deleted file mode 100644 index 6a91abc7076..00000000000 --- a/homeassistant/components/freebox/.translations/fr.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "H\u00f4te d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "connection_failed": "Impossible de se connecter, veuillez r\u00e9essayer", - "register_failed": "\u00c9chec de l'inscription, veuillez r\u00e9essayer", - "unknown": "Erreur inconnue: veuillez r\u00e9essayer plus tard" - }, - "step": { - "link": { - "description": "Cliquez sur \u00abSoumettre\u00bb, puis appuyez sur la fl\u00e8che droite du routeur pour enregistrer Freebox avec Home Assistant. \n\n ! [Emplacement du bouton sur le routeur](/static/images/config_freebox.png)" - }, - "user": { - "data": { - "host": "H\u00f4te", - "port": "Port" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/it.json b/homeassistant/components/freebox/.translations/it.json deleted file mode 100644 index 6624167722b..00000000000 --- a/homeassistant/components/freebox/.translations/it.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host gi\u00e0 configurato" - }, - "error": { - "connection_failed": "Impossibile connettersi, si prega di riprovare", - "register_failed": "Errore in fase di registrazione, si prega di riprovare", - "unknown": "Errore sconosciuto: riprovare pi\u00f9 tardi" - }, - "step": { - "link": { - "description": "Fare clic su \"Invia\", quindi toccare la freccia destra sul router per registrare Freebox con Home Assistant.\n\n![Posizione del pulsante sul router](/static/images/config_freebox.png)", - "title": "Collega il router Freebox" - }, - "user": { - "data": { - "host": "Host", - "port": "Porta" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/ko.json b/homeassistant/components/freebox/.translations/ko.json deleted file mode 100644 index 56c91ad824c..00000000000 --- a/homeassistant/components/freebox/.translations/ko.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "connection_failed": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "register_failed": "\ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" - }, - "step": { - "link": { - "description": "\"Submit\" \uc744 \ud074\ub9ad\ud55c \ub2e4\uc74c \ub77c\uc6b0\ud130\uc758 \uc624\ub978\ucabd \ud654\uc0b4\ud45c\ub97c \ud130\uce58\ud558\uc5ec Home Assistant \uc5d0 Freebox \ub97c \ub4f1\ub85d\ud574\uc8fc\uc138\uc694.\n\n![\ub77c\uc6b0\ud130\uc758 \ubc84\ud2bc \uc704\uce58](/static/images/config_freebox.png)", - "title": "Freebox \ub77c\uc6b0\ud130 \uc5f0\uacb0" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "port": "\ud3ec\ud2b8" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/lb.json b/homeassistant/components/freebox/.translations/lb.json deleted file mode 100644 index 21567b8f096..00000000000 --- a/homeassistant/components/freebox/.translations/lb.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "connection_failed": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "register_failed": "Feeler beim registr\u00e9ieren, prob\u00e9ier w.e.g. nach emol", - "unknown": "Onbekannte Feeler: prob\u00e9iertsp\u00e9ider nach emol" - }, - "step": { - "link": { - "description": "Dr\u00e9ck \"Ofsch\u00e9cken\", dann dr\u00e9ck de rietse Feil um Router fir d'Freebox mam Home Assistant ze registr\u00e9ieren.\n\n![Location of button on the router](/static/images/config_freebox.png)", - "title": "Freebox Router verbannen" - }, - "user": { - "data": { - "host": "Apparat", - "port": "Port" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/no.json b/homeassistant/components/freebox/.translations/no.json deleted file mode 100644 index cf8b3e55402..00000000000 --- a/homeassistant/components/freebox/.translations/no.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Verten er allerede konfigurert" - }, - "error": { - "connection_failed": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "register_failed": "Registrering feilet, vennligst pr\u00f8v igjen", - "unknown": "Ukjent feil: pr\u00f8v p\u00e5 nytt senere" - }, - "step": { - "link": { - "description": "Klikk p\u00e5 \"Submit\", deretter trykker du p\u00e5 den h\u00f8yre pilen p\u00e5 ruteren for \u00e5 registrere Freebox med Home Assistent.\n\n![Plasseringen av knappen p\u00e5 ruteren](/statisk/bilder/config_freebox.png)", - "title": "Link Freebox-ruter" - }, - "user": { - "data": { - "host": "Vert", - "port": "" - }, - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/pl.json b/homeassistant/components/freebox/.translations/pl.json deleted file mode 100644 index 40fe7f097f1..00000000000 --- a/homeassistant/components/freebox/.translations/pl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host jest ju\u017c skonfigurowany." - }, - "error": { - "connection_failed": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", - "register_failed": "Nie uda\u0142o si\u0119 zarejestrowa\u0107. Spr\u00f3buj ponownie.", - "unknown": "Nieznany b\u0142\u0105d, spr\u00f3buj ponownie p\u00f3\u017aniej." - }, - "step": { - "link": { - "description": "Kliknij \"Prze\u015blij\", a nast\u0119pnie naci\u015bnij przycisk strza\u0142ki w prawo na routerze, aby zarejestrowa\u0107 Freebox w Home Assistan'cie. \n\n ![Lokalizacja przycisku na routerze] (/static/images/config_freebox.png)", - "title": "Po\u0142\u0105cz z routerem Freebox" - }, - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/ru.json b/homeassistant/components/freebox/.translations/ru.json deleted file mode 100644 index 4d4fdcc650d..00000000000 --- a/homeassistant/components/freebox/.translations/ru.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "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_failed": "\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.", - "register_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435." - }, - "step": { - "link": { - "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 '\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c', \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Freebox \u0432 Home Assistant. \n\n ![\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u0435](/static/images/config_freebox.png)", - "title": "Freebox" - }, - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "port": "\u041f\u043e\u0440\u0442" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/sl.json b/homeassistant/components/freebox/.translations/sl.json deleted file mode 100644 index e9865b9bf1e..00000000000 --- a/homeassistant/components/freebox/.translations/sl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Gostitelj je \u017ee konfiguriran" - }, - "error": { - "connection_failed": "Povezava ni uspela, poskusite znova", - "register_failed": "Registracija ni uspela, poskusite znova", - "unknown": "Neznana napaka: poskusite pozneje" - }, - "step": { - "link": { - "description": "Kliknite \u00bbPo\u0161lji\u00ab, nato pa se dotaknite desne pu\u0161\u010dice na usmerjevalniku, \u010de \u017eelite registrirati Freebox pri programu Home Assistant. \n\n ! [Lokacija gumba na usmerjevalniku] (/static/images/config_freebox.png)", - "title": "Povezava usmerjevalnika Freebox" - }, - "user": { - "data": { - "host": "Gostitelj", - "port": "Vrata" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/.translations/zh-Hant.json b/homeassistant/components/freebox/.translations/zh-Hant.json deleted file mode 100644 index 38da7b96e03..00000000000 --- a/homeassistant/components/freebox/.translations/zh-Hant.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "connection_failed": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "register_failed": "\u8a3b\u518a\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66", - "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66" - }, - "step": { - "link": { - "description": "\u6309\u4e0b\u50b3\u9001 \"Submit\"\u3001\u63a5\u8457\u6309\u4e0b\u8def\u7531\u5668\u4e0a\u7684\u53f3\u7bad\u982d\u4ee5\u5c07 Freebox \u8a3b\u518a\u81f3 Home Assistant\u3002\n\n![Location of button on the router](/static/images/config_freebox.png)", - "title": "\u9023\u7d50 Freebox \u8def\u7531\u5668" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "port": "\u901a\u8a0a\u57e0" - }, - "title": "Freebox" - } - }, - "title": "Freebox" - } -} \ No newline at end of file diff --git a/homeassistant/components/freebox/manifest.json b/homeassistant/components/freebox/manifest.json index 1bfb4924a78..ae96f7f6510 100644 --- a/homeassistant/components/freebox/manifest.json +++ b/homeassistant/components/freebox/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/freebox", "requirements": ["aiofreepybox==0.0.8"], - "dependencies": [], "after_dependencies": ["discovery"], "codeowners": ["@snoof85", "@Quentame"] } diff --git a/homeassistant/components/freebox/strings.json b/homeassistant/components/freebox/strings.json index 867a497d02f..72265a54558 100644 --- a/homeassistant/components/freebox/strings.json +++ b/homeassistant/components/freebox/strings.json @@ -1,26 +1,20 @@ { - "config": { + "config": { + "step": { + "user": { "title": "Freebox", - "step": { - "user": { - "title": "Freebox", - "data": { - "host": "Host", - "port": "Port" - } - }, - "link": { - "title": "Link Freebox router", - "description": "Click \"Submit\", then touch the right arrow on the router to register Freebox with Home Assistant.\n\n![Location of button on the router](/static/images/config_freebox.png)" - } - }, - "error":{ - "register_failed": "Failed to register, please try again", - "connection_failed": "Failed to connect, please try again", - "unknown": "Unknown error: please retry later" - }, - "abort":{ - "already_configured": "Host already configured" - } - } + "data": { "host": "Host", "port": "Port" } + }, + "link": { + "title": "Link Freebox router", + "description": "Click \"Submit\", then touch the right arrow on the router to register Freebox with Home Assistant.\n\n![Location of button on the router](/static/images/config_freebox.png)" + } + }, + "error": { + "register_failed": "Failed to register, please try again", + "connection_failed": "Failed to connect, please try again", + "unknown": "Unknown error: please retry later" + }, + "abort": { "already_configured": "Host already configured" } + } } diff --git a/homeassistant/components/freebox/translations/ca.json b/homeassistant/components/freebox/translations/ca.json new file mode 100644 index 00000000000..264e0ed3038 --- /dev/null +++ b/homeassistant/components/freebox/translations/ca.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat" + }, + "error": { + "connection_failed": "No s'ha pogut connectar, torna-ho a provar", + "register_failed": "No s'ha pogut registrar, torna-ho a provar", + "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard" + }, + "step": { + "link": { + "description": "Prem \"Envia\", a continuaci\u00f3, toca la fletxa dreta del router per registrar Freebox amb Home Assistant.\n\n![Ubicaci\u00f3 del boto del router](/static/images/config_freebox.png)", + "title": "Enlla\u00e7 amb router Freebox" + }, + "user": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/de.json b/homeassistant/components/freebox/translations/de.json new file mode 100644 index 00000000000..cf18dce0870 --- /dev/null +++ b/homeassistant/components/freebox/translations/de.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Host bereits konfiguriert" + }, + "error": { + "connection_failed": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "register_failed": "Registrieren fehlgeschlagen, bitte versuche es erneut", + "unknown": "Unbekannter Fehler: Bitte versuchen Sie es sp\u00e4ter erneut" + }, + "step": { + "link": { + "description": "Klicken Sie auf \"Senden\" und ber\u00fchren Sie dann den Pfeil nach rechts auf dem Router, um Freebox bei Home Assistant zu registrieren. \n\n ![Position der Schaltfl\u00e4che am Router]\n (/static/images/config_freebox.png)", + "title": "Link Freebox Router" + }, + "user": { + "data": { + "host": "Host", + "port": "Port" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/en.json b/homeassistant/components/freebox/translations/en.json new file mode 100644 index 00000000000..15e18a8982b --- /dev/null +++ b/homeassistant/components/freebox/translations/en.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Host already configured" + }, + "error": { + "connection_failed": "Failed to connect, please try again", + "register_failed": "Failed to register, please try again", + "unknown": "Unknown error: please retry later" + }, + "step": { + "link": { + "description": "Click \"Submit\", then touch the right arrow on the router to register Freebox with Home Assistant.\n\n![Location of button on the router](/static/images/config_freebox.png)", + "title": "Link Freebox router" + }, + "user": { + "data": { + "host": "Host", + "port": "Port" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/es.json b/homeassistant/components/freebox/translations/es.json new file mode 100644 index 00000000000..3c62f33c3be --- /dev/null +++ b/homeassistant/components/freebox/translations/es.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "El host ya est\u00e1 configurado." + }, + "error": { + "connection_failed": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "register_failed": "No se pudo registrar, int\u00e9ntalo de nuevo", + "unknown": "Error desconocido: por favor, int\u00e9ntalo de nuevo m\u00e1s" + }, + "step": { + "link": { + "description": "Pulsa \"Enviar\", despu\u00e9s pulsa en la flecha derecha en el router para registrar Freebox con Home Assistant\n\n![Localizaci\u00f3n del bot\u00f3n en el router](/static/images/config_freebox.png)", + "title": "Enlazar router Freebox" + }, + "user": { + "data": { + "host": "Host", + "port": "Puerto" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/fr.json b/homeassistant/components/freebox/translations/fr.json new file mode 100644 index 00000000000..3854823843b --- /dev/null +++ b/homeassistant/components/freebox/translations/fr.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "H\u00f4te d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "connection_failed": "Impossible de se connecter, veuillez r\u00e9essayer", + "register_failed": "\u00c9chec de l'inscription, veuillez r\u00e9essayer", + "unknown": "Erreur inconnue: veuillez r\u00e9essayer plus tard" + }, + "step": { + "link": { + "description": "Cliquez sur \u00abSoumettre\u00bb, puis appuyez sur la fl\u00e8che droite du routeur pour enregistrer Freebox avec Home Assistant. \n\n ! [Emplacement du bouton sur le routeur](/static/images/config_freebox.png)" + }, + "user": { + "data": { + "host": "H\u00f4te", + "port": "Port" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/it.json b/homeassistant/components/freebox/translations/it.json new file mode 100644 index 00000000000..11d27eebd69 --- /dev/null +++ b/homeassistant/components/freebox/translations/it.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Host gi\u00e0 configurato" + }, + "error": { + "connection_failed": "Impossibile connettersi, si prega di riprovare", + "register_failed": "Errore in fase di registrazione, si prega di riprovare", + "unknown": "Errore sconosciuto: riprovare pi\u00f9 tardi" + }, + "step": { + "link": { + "description": "Fare clic su \"Invia\", quindi toccare la freccia destra sul router per registrare Freebox con Home Assistant.\n\n![Posizione del pulsante sul router](/static/images/config_freebox.png)", + "title": "Collega il router Freebox" + }, + "user": { + "data": { + "host": "Host", + "port": "Porta" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/ko.json b/homeassistant/components/freebox/translations/ko.json new file mode 100644 index 00000000000..9c86ce6a775 --- /dev/null +++ b/homeassistant/components/freebox/translations/ko.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "connection_failed": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "register_failed": "\ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" + }, + "step": { + "link": { + "description": "\"Submit\" \uc744 \ud074\ub9ad\ud55c \ub2e4\uc74c \ub77c\uc6b0\ud130\uc758 \uc624\ub978\ucabd \ud654\uc0b4\ud45c\ub97c \ud130\uce58\ud558\uc5ec Home Assistant \uc5d0 Freebox \ub97c \ub4f1\ub85d\ud574\uc8fc\uc138\uc694.\n\n![\ub77c\uc6b0\ud130\uc758 \ubc84\ud2bc \uc704\uce58](/static/images/config_freebox.png)", + "title": "Freebox \ub77c\uc6b0\ud130 \uc5f0\uacb0" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "port": "\ud3ec\ud2b8" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/lb.json b/homeassistant/components/freebox/translations/lb.json new file mode 100644 index 00000000000..eccc419c79b --- /dev/null +++ b/homeassistant/components/freebox/translations/lb.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "connection_failed": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "register_failed": "Feeler beim registr\u00e9ieren, prob\u00e9ier w.e.g. nach emol", + "unknown": "Onbekannte Feeler: prob\u00e9iertsp\u00e9ider nach emol" + }, + "step": { + "link": { + "description": "Dr\u00e9ck \"Ofsch\u00e9cken\", dann dr\u00e9ck de rietse Feil um Router fir d'Freebox mam Home Assistant ze registr\u00e9ieren.\n\n![Location of button on the router](/static/images/config_freebox.png)", + "title": "Freebox Router verbannen" + }, + "user": { + "data": { + "host": "Apparat", + "port": "Port" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/no.json b/homeassistant/components/freebox/translations/no.json new file mode 100644 index 00000000000..0ec9bf70ecd --- /dev/null +++ b/homeassistant/components/freebox/translations/no.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Verten er allerede konfigurert" + }, + "error": { + "connection_failed": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "register_failed": "Registrering feilet, vennligst pr\u00f8v igjen", + "unknown": "Ukjent feil: pr\u00f8v p\u00e5 nytt senere" + }, + "step": { + "link": { + "description": "Klikk p\u00e5 \"Submit\", deretter trykker du p\u00e5 den h\u00f8yre pilen p\u00e5 ruteren for \u00e5 registrere Freebox med Home Assistent.\n\n![Plasseringen av knappen p\u00e5 ruteren](/statisk/bilder/config_freebox.png)", + "title": "Link Freebox-ruter" + }, + "user": { + "data": { + "host": "Vert", + "port": "" + }, + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/pl.json b/homeassistant/components/freebox/translations/pl.json new file mode 100644 index 00000000000..9df523af0fb --- /dev/null +++ b/homeassistant/components/freebox/translations/pl.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Host jest ju\u017c skonfigurowany." + }, + "error": { + "connection_failed": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "register_failed": "Nie uda\u0142o si\u0119 zarejestrowa\u0107. Spr\u00f3buj ponownie.", + "unknown": "Nieznany b\u0142\u0105d, spr\u00f3buj ponownie p\u00f3\u017aniej." + }, + "step": { + "link": { + "description": "Kliknij \"Zatwierd\u017a\", a nast\u0119pnie naci\u015bnij przycisk strza\u0142ki w prawo na routerze, aby zarejestrowa\u0107 Freebox w Home Assistan'cie. \n\n ![Lokalizacja przycisku na routerze] (/static/images/config_freebox.png)", + "title": "Po\u0142\u0105cz z routerem Freebox" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/ru.json b/homeassistant/components/freebox/translations/ru.json new file mode 100644 index 00000000000..1bef863e15f --- /dev/null +++ b/homeassistant/components/freebox/translations/ru.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "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_failed": "\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.", + "register_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435." + }, + "step": { + "link": { + "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 '\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c', \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Freebox \u0432 Home Assistant. \n\n ![\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u0435](/static/images/config_freebox.png)", + "title": "Freebox" + }, + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/sl.json b/homeassistant/components/freebox/translations/sl.json new file mode 100644 index 00000000000..0a36450501b --- /dev/null +++ b/homeassistant/components/freebox/translations/sl.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Gostitelj je \u017ee konfiguriran" + }, + "error": { + "connection_failed": "Povezava ni uspela, poskusite znova", + "register_failed": "Registracija ni uspela, poskusite znova", + "unknown": "Neznana napaka: poskusite pozneje" + }, + "step": { + "link": { + "description": "Kliknite \u00bbPo\u0161lji\u00ab, nato pa se dotaknite desne pu\u0161\u010dice na usmerjevalniku, \u010de \u017eelite registrirati Freebox pri programu Home Assistant. \n\n ! [Lokacija gumba na usmerjevalniku] (/static/images/config_freebox.png)", + "title": "Povezava usmerjevalnika Freebox" + }, + "user": { + "data": { + "host": "Gostitelj", + "port": "Vrata" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/zh-Hant.json b/homeassistant/components/freebox/translations/zh-Hant.json new file mode 100644 index 00000000000..be643ab9fd9 --- /dev/null +++ b/homeassistant/components/freebox/translations/zh-Hant.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "connection_failed": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "register_failed": "\u8a3b\u518a\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66", + "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66" + }, + "step": { + "link": { + "description": "\u6309\u4e0b\u50b3\u9001 \"Submit\"\u3001\u63a5\u8457\u6309\u4e0b\u8def\u7531\u5668\u4e0a\u7684\u53f3\u7bad\u982d\u4ee5\u5c07 Freebox \u8a3b\u518a\u81f3 Home Assistant\u3002\n\n![Location of button on the router](/static/images/config_freebox.png)", + "title": "\u9023\u7d50 Freebox \u8def\u7531\u5668" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0" + }, + "title": "Freebox" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freedns/manifest.json b/homeassistant/components/freedns/manifest.json index ff4f9ec9202..58e8e9fdaf8 100644 --- a/homeassistant/components/freedns/manifest.json +++ b/homeassistant/components/freedns/manifest.json @@ -2,7 +2,5 @@ "domain": "freedns", "name": "FreeDNS", "documentation": "https://www.home-assistant.io/integrations/freedns", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fritz/manifest.json b/homeassistant/components/fritz/manifest.json index 5536e8fada3..3723bd7885a 100644 --- a/homeassistant/components/fritz/manifest.json +++ b/homeassistant/components/fritz/manifest.json @@ -3,6 +3,5 @@ "name": "AVM FRITZ!Box", "documentation": "https://www.home-assistant.io/integrations/fritz", "requirements": ["fritzconnection==1.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fritzbox/__init__.py b/homeassistant/components/fritzbox/__init__.py index 40aa3a881d1..7297f514f96 100644 --- a/homeassistant/components/fritzbox/__init__.py +++ b/homeassistant/components/fritzbox/__init__.py @@ -1,7 +1,8 @@ """Support for AVM Fritz!Box smarthome devices.""" -import logging +import asyncio +import socket -from pyfritzhome import Fritzhome, LoginError +from pyfritzhome import Fritzhome import voluptuous as vol from homeassistant.const import ( @@ -11,80 +12,103 @@ from homeassistant.const import ( CONF_USERNAME, EVENT_HOMEASSISTANT_STOP, ) -from homeassistant.helpers import discovery import homeassistant.helpers.config_validation as cv -_LOGGER = logging.getLogger(__name__) +from .const import CONF_CONNECTIONS, DEFAULT_HOST, DEFAULT_USERNAME, DOMAIN, PLATFORMS -SUPPORTED_DOMAINS = ["binary_sensor", "climate", "switch", "sensor"] -DOMAIN = "fritzbox" - -ATTR_STATE_BATTERY_LOW = "battery_low" -ATTR_STATE_DEVICE_LOCKED = "device_locked" -ATTR_STATE_HOLIDAY_MODE = "holiday_mode" -ATTR_STATE_LOCKED = "locked" -ATTR_STATE_SUMMER_MODE = "summer_mode" -ATTR_STATE_WINDOW_OPEN = "window_open" +def ensure_unique_hosts(value): + """Validate that all configs have a unique host.""" + vol.Schema(vol.Unique("duplicate host entries found"))( + [socket.gethostbyname(entry[CONF_HOST]) for entry in value] + ) + return value CONFIG_SCHEMA = vol.Schema( - { - DOMAIN: vol.Schema( - { - vol.Required(CONF_DEVICES): vol.All( - cv.ensure_list, - [ - vol.Schema( - { - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Required(CONF_USERNAME): cv.string, - } - ) - ], - ) - } - ) - }, + vol.All( + cv.deprecated(DOMAIN), + { + DOMAIN: vol.Schema( + { + vol.Required(CONF_DEVICES): vol.All( + cv.ensure_list, + [ + vol.Schema( + { + vol.Required( + CONF_HOST, default=DEFAULT_HOST + ): cv.string, + vol.Required(CONF_PASSWORD): cv.string, + vol.Required( + CONF_USERNAME, default=DEFAULT_USERNAME + ): cv.string, + } + ) + ], + ensure_unique_hosts, + ) + } + ) + }, + ), extra=vol.ALLOW_EXTRA, ) -def setup(hass, config): - """Set up the fritzbox component.""" - - fritz_list = [] - - configured_devices = config[DOMAIN].get(CONF_DEVICES) - for device in configured_devices: - host = device.get(CONF_HOST) - username = device.get(CONF_USERNAME) - password = device.get(CONF_PASSWORD) - fritzbox = Fritzhome(host=host, user=username, password=password) - try: - fritzbox.login() - _LOGGER.info("Connected to device %s", device) - except LoginError: - _LOGGER.warning("Login to Fritz!Box %s as %s failed", host, username) - continue - - fritz_list.append(fritzbox) - - if not fritz_list: - _LOGGER.info("No fritzboxes configured") - return False - - hass.data[DOMAIN] = fritz_list - - def logout_fritzboxes(event): - """Close all connections to the fritzboxes.""" - for fritz in fritz_list: - fritz.logout() - - hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, logout_fritzboxes) - - for domain in SUPPORTED_DOMAINS: - discovery.load_platform(hass, domain, DOMAIN, {}, config) +async def async_setup(hass, config): + """Set up the AVM Fritz!Box integration.""" + if DOMAIN in config: + for entry_config in config[DOMAIN][CONF_DEVICES]: + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": "import"}, data=entry_config + ) + ) return True + + +async def async_setup_entry(hass, entry): + """Set up the AVM Fritz!Box platforms.""" + fritz = Fritzhome( + host=entry.data[CONF_HOST], + user=entry.data[CONF_USERNAME], + password=entry.data[CONF_PASSWORD], + ) + await hass.async_add_executor_job(fritz.login) + + hass.data.setdefault(DOMAIN, {CONF_CONNECTIONS: {}, CONF_DEVICES: set()}) + hass.data[DOMAIN][CONF_CONNECTIONS][entry.entry_id] = fritz + + for component in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, component) + ) + + def logout_fritzbox(event): + """Close connections to this fritzbox.""" + fritz.logout() + + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, logout_fritzbox) + + return True + + +async def async_unload_entry(hass, entry): + """Unloading the AVM Fritz!Box platforms.""" + fritz = hass.data[DOMAIN][CONF_CONNECTIONS][entry.entry_id] + await hass.async_add_executor_job(fritz.logout) + + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, component) + for component in PLATFORMS + ] + ) + ) + if unload_ok: + hass.data[DOMAIN][CONF_CONNECTIONS].pop(entry.entry_id) + + return unload_ok diff --git a/homeassistant/components/fritzbox/binary_sensor.py b/homeassistant/components/fritzbox/binary_sensor.py index 3d8d676d1d0..c0893b93316 100644 --- a/homeassistant/components/fritzbox/binary_sensor.py +++ b/homeassistant/components/fritzbox/binary_sensor.py @@ -1,27 +1,24 @@ """Support for Fritzbox binary sensors.""" -import logging - import requests from homeassistant.components.binary_sensor import BinarySensorDevice +from homeassistant.const import CONF_DEVICES -from . import DOMAIN as FRITZBOX_DOMAIN - -_LOGGER = logging.getLogger(__name__) +from .const import CONF_CONNECTIONS, DOMAIN as FRITZBOX_DOMAIN, LOGGER -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Fritzbox binary sensor platform.""" - devices = [] - fritz_list = hass.data[FRITZBOX_DOMAIN] +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Fritzbox binary sensor from config_entry.""" + entities = [] + devices = hass.data[FRITZBOX_DOMAIN][CONF_DEVICES] + fritz = hass.data[FRITZBOX_DOMAIN][CONF_CONNECTIONS][config_entry.entry_id] - for fritz in fritz_list: - device_list = fritz.get_devices() - for device in device_list: - if device.has_alarm: - devices.append(FritzboxBinarySensor(device, fritz)) + for device in await hass.async_add_executor_job(fritz.get_devices): + if device.has_alarm and device.ain not in devices: + entities.append(FritzboxBinarySensor(device, fritz)) + devices.add(device.ain) - add_entities(devices, True) + async_add_entities(entities, True) class FritzboxBinarySensor(BinarySensorDevice): @@ -32,6 +29,22 @@ class FritzboxBinarySensor(BinarySensorDevice): self._device = device self._fritz = fritz + @property + def device_info(self): + """Return device specific attributes.""" + return { + "name": self.name, + "identifiers": {(FRITZBOX_DOMAIN, self._device.ain)}, + "manufacturer": self._device.manufacturer, + "model": self._device.productname, + "sw_version": self._device.fw_version, + } + + @property + def unique_id(self): + """Return the unique ID of the device.""" + return self._device.ain + @property def name(self): """Return the name of the entity.""" @@ -54,5 +67,5 @@ class FritzboxBinarySensor(BinarySensorDevice): try: self._device.update() except requests.exceptions.HTTPError as ex: - _LOGGER.warning("Connection error: %s", ex) + LOGGER.warning("Connection error: %s", ex) self._fritz.login() diff --git a/homeassistant/components/fritzbox/climate.py b/homeassistant/components/fritzbox/climate.py index 115f7f8e644..1c95d918ab8 100644 --- a/homeassistant/components/fritzbox/climate.py +++ b/homeassistant/components/fritzbox/climate.py @@ -1,6 +1,4 @@ """Support for AVM Fritz!Box smarthome thermostate devices.""" -import logging - import requests from homeassistant.components.climate import ClimateDevice @@ -16,22 +14,23 @@ from homeassistant.components.climate.const import ( from homeassistant.const import ( ATTR_BATTERY_LEVEL, ATTR_TEMPERATURE, + CONF_DEVICES, PRECISION_HALVES, TEMP_CELSIUS, ) -from . import ( +from .const import ( ATTR_STATE_BATTERY_LOW, ATTR_STATE_DEVICE_LOCKED, ATTR_STATE_HOLIDAY_MODE, ATTR_STATE_LOCKED, ATTR_STATE_SUMMER_MODE, ATTR_STATE_WINDOW_OPEN, + CONF_CONNECTIONS, DOMAIN as FRITZBOX_DOMAIN, + LOGGER, ) -_LOGGER = logging.getLogger(__name__) - SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE OPERATION_LIST = [HVAC_MODE_HEAT, HVAC_MODE_OFF] @@ -48,18 +47,18 @@ ON_REPORT_SET_TEMPERATURE = 30.0 OFF_REPORT_SET_TEMPERATURE = 0.0 -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Fritzbox smarthome thermostat platform.""" - devices = [] - fritz_list = hass.data[FRITZBOX_DOMAIN] +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Fritzbox smarthome thermostat from config_entry.""" + entities = [] + devices = hass.data[FRITZBOX_DOMAIN][CONF_DEVICES] + fritz = hass.data[FRITZBOX_DOMAIN][CONF_CONNECTIONS][config_entry.entry_id] - for fritz in fritz_list: - device_list = fritz.get_devices() - for device in device_list: - if device.has_thermostat: - devices.append(FritzboxThermostat(device, fritz)) + for device in await hass.async_add_executor_job(fritz.get_devices): + if device.has_thermostat and device.ain not in devices: + entities.append(FritzboxThermostat(device, fritz)) + devices.add(device.ain) - add_entities(devices) + async_add_entities(entities) class FritzboxThermostat(ClimateDevice): @@ -74,6 +73,22 @@ class FritzboxThermostat(ClimateDevice): self._comfort_temperature = self._device.comfort_temperature self._eco_temperature = self._device.eco_temperature + @property + def device_info(self): + """Return device specific attributes.""" + return { + "name": self.name, + "identifiers": {(FRITZBOX_DOMAIN, self._device.ain)}, + "manufacturer": self._device.manufacturer, + "model": self._device.productname, + "sw_version": self._device.fw_version, + } + + @property + def unique_id(self): + """Return the unique ID of the device.""" + return self._device.ain + @property def supported_features(self): """Return the list of supported features.""" @@ -205,5 +220,5 @@ class FritzboxThermostat(ClimateDevice): self._comfort_temperature = self._device.comfort_temperature self._eco_temperature = self._device.eco_temperature except requests.exceptions.HTTPError as ex: - _LOGGER.warning("Fritzbox connection error: %s", ex) + LOGGER.warning("Fritzbox connection error: %s", ex) self._fritz.login() diff --git a/homeassistant/components/fritzbox/config_flow.py b/homeassistant/components/fritzbox/config_flow.py new file mode 100644 index 00000000000..25a81333bd6 --- /dev/null +++ b/homeassistant/components/fritzbox/config_flow.py @@ -0,0 +1,162 @@ +"""Config flow for AVM Fritz!Box.""" +from urllib.parse import urlparse + +from pyfritzhome import Fritzhome, LoginError +from requests.exceptions import HTTPError +import voluptuous as vol + +from homeassistant import config_entries +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 +from .const import DEFAULT_HOST, DEFAULT_USERNAME, DOMAIN + +DATA_SCHEMA_USER = vol.Schema( + { + vol.Required(CONF_HOST, default=DEFAULT_HOST): str, + vol.Required(CONF_USERNAME, default=DEFAULT_USERNAME): str, + vol.Required(CONF_PASSWORD): str, + } +) + +DATA_SCHEMA_CONFIRM = vol.Schema( + { + vol.Required(CONF_USERNAME, default=DEFAULT_USERNAME): str, + vol.Required(CONF_PASSWORD): str, + } +) + +RESULT_AUTH_FAILED = "auth_failed" +RESULT_NOT_FOUND = "not_found" +RESULT_NOT_SUPPORTED = "not_supported" +RESULT_SUCCESS = "success" + + +class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a AVM Fritz!Box config flow.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL + + # pylint: disable=no-member # https://github.com/PyCQA/pylint/issues/3167 + + def __init__(self): + """Initialize flow.""" + self._host = None + self._name = None + self._password = None + self._username = None + + def _get_entry(self): + return self.async_create_entry( + title=self._name, + data={ + CONF_HOST: self._host, + CONF_PASSWORD: self._password, + CONF_USERNAME: self._username, + }, + ) + + def _try_connect(self): + """Try to connect and check auth.""" + fritzbox = Fritzhome( + host=self._host, user=self._username, password=self._password + ) + try: + fritzbox.login() + fritzbox.get_device_elements() + fritzbox.logout() + return RESULT_SUCCESS + 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.""" + return await self.async_step_user(user_input) + + async def async_step_user(self, user_input=None): + """Handle a flow initialized by the user.""" + errors = {} + + 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]: + return self.async_abort(reason="already_configured") + + self._host = user_input[CONF_HOST] + self._name = user_input[CONF_HOST] + self._password = user_input[CONF_PASSWORD] + self._username = user_input[CONF_USERNAME] + + result = await self.hass.async_add_executor_job(self._try_connect) + + if result == RESULT_SUCCESS: + return self._get_entry() + if result != RESULT_AUTH_FAILED: + return self.async_abort(reason=result) + errors["base"] = result + + return self.async_show_form( + step_id="user", data_schema=DATA_SCHEMA_USER, errors=errors + ) + + async def async_step_ssdp(self, user_input): + """Handle a flow initialized by discovery.""" + 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 + self._name = user_input.get(ATTR_UPNP_FRIENDLY_NAME) or host + + self.context["title_placeholders"] = {"name": self._name} + return await self.async_step_confirm() + + async def async_step_confirm(self, user_input=None): + """Handle user-confirmation of discovered node.""" + errors = {} + + if user_input is not None: + self._password = user_input[CONF_PASSWORD] + self._username = user_input[CONF_USERNAME] + result = await self.hass.async_add_executor_job(self._try_connect) + + if result == RESULT_SUCCESS: + return self._get_entry() + if result != RESULT_AUTH_FAILED: + return self.async_abort(reason=result) + errors["base"] = result + + return self.async_show_form( + step_id="confirm", + data_schema=DATA_SCHEMA_CONFIRM, + description_placeholders={"name": self._name}, + errors=errors, + ) diff --git a/homeassistant/components/fritzbox/const.py b/homeassistant/components/fritzbox/const.py new file mode 100644 index 00000000000..32a72e8e7a6 --- /dev/null +++ b/homeassistant/components/fritzbox/const.py @@ -0,0 +1,25 @@ +"""Constants for the AVM Fritz!Box integration.""" +import logging + +ATTR_STATE_BATTERY_LOW = "battery_low" +ATTR_STATE_DEVICE_LOCKED = "device_locked" +ATTR_STATE_HOLIDAY_MODE = "holiday_mode" +ATTR_STATE_LOCKED = "locked" +ATTR_STATE_SUMMER_MODE = "summer_mode" +ATTR_STATE_WINDOW_OPEN = "window_open" + +ATTR_TEMPERATURE_UNIT = "temperature_unit" + +ATTR_TOTAL_CONSUMPTION = "total_consumption" +ATTR_TOTAL_CONSUMPTION_UNIT = "total_consumption_unit" + +CONF_CONNECTIONS = "connections" + +DEFAULT_HOST = "fritz.box" +DEFAULT_USERNAME = "admin" + +DOMAIN = "fritzbox" + +LOGGER = logging.getLogger(__package__) + +PLATFORMS = ["binary_sensor", "climate", "switch", "sensor"] diff --git a/homeassistant/components/fritzbox/manifest.json b/homeassistant/components/fritzbox/manifest.json index 494e70e8bcc..1905311a9f6 100644 --- a/homeassistant/components/fritzbox/manifest.json +++ b/homeassistant/components/fritzbox/manifest.json @@ -2,7 +2,13 @@ "domain": "fritzbox", "name": "AVM FRITZ!Box", "documentation": "https://www.home-assistant.io/integrations/fritzbox", - "requirements": ["pyfritzhome==0.4.0"], + "requirements": ["pyfritzhome==0.4.2"], + "ssdp": [ + { + "st": "urn:schemas-upnp-org:device:fritzbox:1" + } + ], "dependencies": [], - "codeowners": [] + "codeowners": [], + "config_flow": true } diff --git a/homeassistant/components/fritzbox/sensor.py b/homeassistant/components/fritzbox/sensor.py index 4454ea35bbe..85238d80f27 100644 --- a/homeassistant/components/fritzbox/sensor.py +++ b/homeassistant/components/fritzbox/sensor.py @@ -1,33 +1,35 @@ """Support for AVM Fritz!Box smarthome temperature sensor only devices.""" -import logging - import requests -from homeassistant.const import TEMP_CELSIUS +from homeassistant.const import CONF_DEVICES, TEMP_CELSIUS from homeassistant.helpers.entity import Entity -from . import ATTR_STATE_DEVICE_LOCKED, ATTR_STATE_LOCKED, DOMAIN as FRITZBOX_DOMAIN - -_LOGGER = logging.getLogger(__name__) +from .const import ( + ATTR_STATE_DEVICE_LOCKED, + ATTR_STATE_LOCKED, + CONF_CONNECTIONS, + DOMAIN as FRITZBOX_DOMAIN, + LOGGER, +) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Fritzbox smarthome sensor platform.""" - _LOGGER.debug("Initializing fritzbox temperature sensors") - devices = [] - fritz_list = hass.data[FRITZBOX_DOMAIN] +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Fritzbox smarthome sensor from config_entry.""" + entities = [] + devices = hass.data[FRITZBOX_DOMAIN][CONF_DEVICES] + fritz = hass.data[FRITZBOX_DOMAIN][CONF_CONNECTIONS][config_entry.entry_id] - for fritz in fritz_list: - device_list = fritz.get_devices() - for device in device_list: - if ( - device.has_temperature_sensor - and not device.has_switch - and not device.has_thermostat - ): - devices.append(FritzBoxTempSensor(device, fritz)) + for device in await hass.async_add_executor_job(fritz.get_devices): + if ( + device.has_temperature_sensor + and not device.has_switch + and not device.has_thermostat + and device.ain not in devices + ): + entities.append(FritzBoxTempSensor(device, fritz)) + devices.add(device.ain) - add_entities(devices) + async_add_entities(entities) class FritzBoxTempSensor(Entity): @@ -38,6 +40,22 @@ class FritzBoxTempSensor(Entity): self._device = device self._fritz = fritz + @property + def device_info(self): + """Return device specific attributes.""" + return { + "name": self.name, + "identifiers": {(FRITZBOX_DOMAIN, self._device.ain)}, + "manufacturer": self._device.manufacturer, + "model": self._device.productname, + "sw_version": self._device.fw_version, + } + + @property + def unique_id(self): + """Return the unique ID of the device.""" + return self._device.ain + @property def name(self): """Return the name of the device.""" @@ -58,7 +76,7 @@ class FritzBoxTempSensor(Entity): try: self._device.update() except requests.exceptions.HTTPError as ex: - _LOGGER.warning("Fritzhome connection error: %s", ex) + LOGGER.warning("Fritzhome connection error: %s", ex) self._fritz.login() @property diff --git a/homeassistant/components/fritzbox/strings.json b/homeassistant/components/fritzbox/strings.json new file mode 100644 index 00000000000..227aeedf84d --- /dev/null +++ b/homeassistant/components/fritzbox/strings.json @@ -0,0 +1,31 @@ +{ + "config": { + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "user": { + "description": "Enter your AVM FRITZ!Box information.", + "data": { + "host": "Host or IP address", + "username": "Username", + "password": "Password" + } + }, + "confirm": { + "description": "Do you want to set up {name}?", + "data": { + "username": "Username", + "password": "Password" + } + } + }, + "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_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/switch.py b/homeassistant/components/fritzbox/switch.py index 5b87d6e726a..6f98667304b 100644 --- a/homeassistant/components/fritzbox/switch.py +++ b/homeassistant/components/fritzbox/switch.py @@ -1,34 +1,40 @@ """Support for AVM Fritz!Box smarthome switch devices.""" -import logging - import requests from homeassistant.components.switch import SwitchDevice -from homeassistant.const import ATTR_TEMPERATURE, ENERGY_KILO_WATT_HOUR, TEMP_CELSIUS +from homeassistant.const import ( + ATTR_TEMPERATURE, + CONF_DEVICES, + ENERGY_KILO_WATT_HOUR, + TEMP_CELSIUS, +) -from . import ATTR_STATE_DEVICE_LOCKED, ATTR_STATE_LOCKED, DOMAIN as FRITZBOX_DOMAIN +from .const import ( + ATTR_STATE_DEVICE_LOCKED, + ATTR_STATE_LOCKED, + ATTR_TEMPERATURE_UNIT, + ATTR_TOTAL_CONSUMPTION, + ATTR_TOTAL_CONSUMPTION_UNIT, + CONF_CONNECTIONS, + DOMAIN as FRITZBOX_DOMAIN, + LOGGER, +) -_LOGGER = logging.getLogger(__name__) - -ATTR_TOTAL_CONSUMPTION = "total_consumption" -ATTR_TOTAL_CONSUMPTION_UNIT = "total_consumption_unit" ATTR_TOTAL_CONSUMPTION_UNIT_VALUE = ENERGY_KILO_WATT_HOUR -ATTR_TEMPERATURE_UNIT = "temperature_unit" +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Fritzbox smarthome switch from config_entry.""" + entities = [] + devices = hass.data[FRITZBOX_DOMAIN][CONF_DEVICES] + fritz = hass.data[FRITZBOX_DOMAIN][CONF_CONNECTIONS][config_entry.entry_id] -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Fritzbox smarthome switch platform.""" - devices = [] - fritz_list = hass.data[FRITZBOX_DOMAIN] + for device in await hass.async_add_executor_job(fritz.get_devices): + if device.has_switch and device.ain not in devices: + entities.append(FritzboxSwitch(device, fritz)) + devices.add(device.ain) - for fritz in fritz_list: - device_list = fritz.get_devices() - for device in device_list: - if device.has_switch: - devices.append(FritzboxSwitch(device, fritz)) - - add_entities(devices) + async_add_entities(entities) class FritzboxSwitch(SwitchDevice): @@ -39,6 +45,22 @@ class FritzboxSwitch(SwitchDevice): self._device = device self._fritz = fritz + @property + def device_info(self): + """Return device specific attributes.""" + return { + "name": self.name, + "identifiers": {(FRITZBOX_DOMAIN, self._device.ain)}, + "manufacturer": self._device.manufacturer, + "model": self._device.productname, + "sw_version": self._device.fw_version, + } + + @property + def unique_id(self): + """Return the unique ID of the device.""" + return self._device.ain + @property def available(self): """Return if switch is available.""" @@ -67,7 +89,7 @@ class FritzboxSwitch(SwitchDevice): try: self._device.update() except requests.exceptions.HTTPError as ex: - _LOGGER.warning("Fritzhome connection error: %s", ex) + LOGGER.warning("Fritzhome connection error: %s", ex) self._fritz.login() @property diff --git a/homeassistant/components/fritzbox/translations/ca.json b/homeassistant/components/fritzbox/translations/ca.json new file mode 100644 index 00000000000..44eac165110 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/ca.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest AVM FRITZ!Box ja est\u00e0 configurat.", + "already_in_progress": "La configuraci\u00f3 de l'AVM FRITZ!Box ja est\u00e0 en curs.", + "not_found": "No s'ha trobat cap AVM FRITZ!Box compatible a la xarxa." + }, + "error": { + "auth_failed": "Nom d'usuari i/o contrasenya incorrectes." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "description": "Vols configurar {name}?", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "Amfitri\u00f3 o adre\u00e7a IP", + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "description": "Introdueix la teva informaci\u00f3 de AVM FRITZ!Box.", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/de.json b/homeassistant/components/fritzbox/translations/de.json new file mode 100644 index 00000000000..5f16553c64c --- /dev/null +++ b/homeassistant/components/fritzbox/translations/de.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Diese AVM FRITZ! Box ist bereits konfiguriert.", + "already_in_progress": "Die Konfiguration der AVM FRITZ! Box ist bereits in Bearbeitung.", + "not_found": "Keine unterst\u00fctzte AVM FRITZ! Box im Netzwerk gefunden." + }, + "error": { + "auth_failed": "Benutzername und/oder Passwort sind falsch." + }, + "flow_title": "AVM FRITZ! Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "description": "M\u00f6chten Sie {name} einrichten?", + "title": "AVM FRITZ! Box" + }, + "user": { + "data": { + "host": "Host oder IP-Adresse", + "password": "Passwort", + "username": "Benutzername" + }, + "description": "Geben Sie Ihre AVM FRITZ! Box-Informationen ein.", + "title": "AVM FRITZ! Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/en.json b/homeassistant/components/fritzbox/translations/en.json new file mode 100644 index 00000000000..d5d889a9083 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/en.json @@ -0,0 +1,33 @@ +{ + "config": { + "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_supported": "Connected to AVM FRITZ!Box but it's unable to control Smart Home devices." + }, + "error": { + "auth_failed": "Username and/or password are incorrect." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Password", + "username": "Username" + }, + "description": "Do you want to set up {name}?", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "Host or IP address", + "password": "Password", + "username": "Username" + }, + "description": "Enter your AVM FRITZ!Box information.", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/es.json b/homeassistant/components/fritzbox/translations/es.json new file mode 100644 index 00000000000..05f956d2382 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/es.json @@ -0,0 +1,33 @@ +{ + "config": { + "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_supported": "Conectado a AVM FRITZ!Box pero no es capaz de controlar dispositivos Smart Home." + }, + "error": { + "auth_failed": "Usuario y/o contrase\u00f1a incorrectos." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "description": "\u00bfQuieres configurar {name}?", + "title": "AVM FRITZ! Box" + }, + "user": { + "data": { + "host": "Host o direcci\u00f3n IP", + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "description": "Introduce tu informaci\u00f3n de AVM FRITZ!Box.", + "title": "AVM FRITZ! Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/fr.json b/homeassistant/components/fritzbox/translations/fr.json new file mode 100644 index 00000000000..5072d62374b --- /dev/null +++ b/homeassistant/components/fritzbox/translations/fr.json @@ -0,0 +1,23 @@ +{ + "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" + }, + "description": "Voulez-vous configurer {name} ?" + }, + "user": { + "data": { + "host": "H\u00f4te ou adresse IP", + "password": "Mot de passe", + "username": "Nom d'utilisateur" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/hi.json b/homeassistant/components/fritzbox/translations/hi.json new file mode 100644 index 00000000000..f95cac200e9 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/hi.json @@ -0,0 +1,7 @@ +{ + "config": { + "abort": { + "not_found": "\u0915\u094b\u0908 \u0938\u092e\u0930\u094d\u0925\u093f\u0924 AVM FRITZ! \u092c\u0949\u0915\u094d\u0938 \u0928\u0947\u091f\u0935\u0930\u094d\u0915 \u092a\u0930 \u0928\u0939\u0940\u0902 \u092e\u093f\u0932\u093e\u0964" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/it.json b/homeassistant/components/fritzbox/translations/it.json new file mode 100644 index 00000000000..de0f1e0e918 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/it.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Questo AVM FRITZ!Box \u00e8 gi\u00e0 configurato.", + "already_in_progress": "La configurazione di AVM FRITZ!Box \u00e8 gi\u00e0 in corso.", + "not_found": "Nessun AVM FRITZ!Box supportato trovato sulla rete." + }, + "error": { + "auth_failed": "Nome utente e/o password non sono corretti." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "description": "Vuoi impostare {name}?", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "Host o indirizzo IP", + "password": "Password", + "username": "Nome utente" + }, + "description": "Inserisci le informazioni del tuo AVM FRITZ!Box .", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/lb.json b/homeassistant/components/fritzbox/translations/lb.json new file mode 100644 index 00000000000..4f82a03859c --- /dev/null +++ b/homeassistant/components/fritzbox/translations/lb.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebs AVM FRITZ!Box ass scho konfigur\u00e9iert", + "already_in_progress": "AVM FRITZ!Box Konfiguratioun ass schonn am gaang.", + "not_found": "Keng \u00ebnnerst\u00ebtzte AVM FRITZ!Box am Netzwierk fonnt." + }, + "error": { + "auth_failed": "Benotzernumm an/oder Passwuert inkorrekt" + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "description": "Soll {name} konfigur\u00e9iert ginn?", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "Numm oder IP Adresse", + "password": "Passwuert", + "username": "Benotzernumm" + }, + "description": "F\u00ebll d\u00e9ng AVM FRITZ!Box Informatiounen aus.", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/nl.json b/homeassistant/components/fritzbox/translations/nl.json new file mode 100644 index 00000000000..3d8c94ab5b6 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/nl.json @@ -0,0 +1,32 @@ +{ + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/no.json b/homeassistant/components/fritzbox/translations/no.json new file mode 100644 index 00000000000..b6a7fe0641f --- /dev/null +++ b/homeassistant/components/fritzbox/translations/no.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Denne AVM FRITZ!Box er allerede konfigurert.", + "already_in_progress": "AVM FRITZ!Box-konfigurasjon p\u00e5g\u00e5r allerede.", + "not_found": "Ingen st\u00f8ttet AVM FRITZ!Box funnet p\u00e5 nettverket." + }, + "error": { + "auth_failed": "Brukernavn og/eller passord er feil." + }, + "flow_title": "", + "step": { + "confirm": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "description": "Vil du sette opp {name} ?", + "title": "" + }, + "user": { + "data": { + "host": "Vert eller IP-adresse", + "password": "Passord", + "username": "Brukernavn" + }, + "description": "Skriv inn AVM FRITZ!Box informasjonen.", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/pl.json b/homeassistant/components/fritzbox/translations/pl.json new file mode 100644 index 00000000000..8c9d58c3c42 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/pl.json @@ -0,0 +1,33 @@ +{ + "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.", + "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." + }, + "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/fritzbox/translations/pt.json b/homeassistant/components/fritzbox/translations/pt.json new file mode 100644 index 00000000000..bd20deada06 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/pt.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "auth_failed": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "confirm": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + }, + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/ru.json b/homeassistant/components/fritzbox/translations/ru.json new file mode 100644 index 00000000000..9f19b4d3faa --- /dev/null +++ b/homeassistant/components/fritzbox/translations/ru.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "not_found": "\u0412 \u0441\u0435\u0442\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432." + }, + "error": { + "auth_failed": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name}?", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "\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", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0412\u0430\u0448\u0435\u043c AVM FRITZ! Box.", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/zh-Hant.json b/homeassistant/components/fritzbox/translations/zh-Hant.json new file mode 100644 index 00000000000..3bc06734e83 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/zh-Hant.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64 AVM FRITZ!Box \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "AVM FRITZ!Box \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "not_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230\u652f\u63f4\u7684 AVM FRITZ!Box\u3002" + }, + "error": { + "auth_failed": "\u4f7f\u7528\u8005\u53ca/\u6216\u5bc6\u78bc\u932f\u8aa4\u3002" + }, + "flow_title": "AVM FRITZ!Box\uff1a{name}", + "step": { + "confirm": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name}\uff1f", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u8f38\u5165 AVM FRITZ!Box \u8cc7\u8a0a\u3002", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox_callmonitor/manifest.json b/homeassistant/components/fritzbox_callmonitor/manifest.json index 777105f9143..b5fa26c096b 100644 --- a/homeassistant/components/fritzbox_callmonitor/manifest.json +++ b/homeassistant/components/fritzbox_callmonitor/manifest.json @@ -3,6 +3,5 @@ "name": "AVM FRITZ!Box Call Monitor", "documentation": "https://www.home-assistant.io/integrations/fritzbox_callmonitor", "requirements": ["fritzconnection==1.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fritzbox_callmonitor/sensor.py b/homeassistant/components/fritzbox_callmonitor/sensor.py index fe0393720dc..40791458505 100644 --- a/homeassistant/components/fritzbox_callmonitor/sensor.py +++ b/homeassistant/components/fritzbox_callmonitor/sensor.py @@ -63,7 +63,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): # Try to resolve a hostname; if it is already an IP, it will be returned as-is try: host = socket.gethostbyname(host) - except socket.error: + except OSError: _LOGGER.error("Could not resolve hostname %s", host) return port = config.get(CONF_PORT) @@ -170,7 +170,7 @@ class FritzBoxCallMonitor: try: self.sock.connect((self.host, self.port)) threading.Thread(target=self._listen).start() - except socket.error as err: + except OSError as err: self.sock = None _LOGGER.error( "Cannot connect to %s on port %s: %s", self.host, self.port, err diff --git a/homeassistant/components/fritzbox_netmonitor/manifest.json b/homeassistant/components/fritzbox_netmonitor/manifest.json index 89bc1e1fda6..dde4d634867 100644 --- a/homeassistant/components/fritzbox_netmonitor/manifest.json +++ b/homeassistant/components/fritzbox_netmonitor/manifest.json @@ -3,6 +3,5 @@ "name": "AVM FRITZ!Box Net Monitor", "documentation": "https://www.home-assistant.io/integrations/fritzbox_netmonitor", "requirements": ["fritzconnection==1.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/fronius/manifest.json b/homeassistant/components/fronius/manifest.json index c7e919c95e5..8f94e816505 100644 --- a/homeassistant/components/fronius/manifest.json +++ b/homeassistant/components/fronius/manifest.json @@ -3,6 +3,5 @@ "name": "Fronius", "documentation": "https://www.home-assistant.io/integrations/fronius", "requirements": ["pyfronius==0.4.6"], - "dependencies": [], "codeowners": ["@nielstron"] } diff --git a/homeassistant/components/fronius/sensor.py b/homeassistant/components/fronius/sensor.py index 722dc2dc659..7c966a6fa4a 100644 --- a/homeassistant/components/fronius/sensor.py +++ b/homeassistant/components/fronius/sensor.py @@ -186,7 +186,6 @@ class FroniusAdapter: async def _update(self): """Return values of interest.""" - pass async def register(self, sensor): """Register child sensor for update subscriptions.""" diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index d9a39ce5726..e5b93399c43 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -19,7 +19,7 @@ from homeassistant.core import callback from homeassistant.helpers import service import homeassistant.helpers.config_validation as cv from homeassistant.helpers.translation import async_get_translations -from homeassistant.loader import bind_hass +from homeassistant.loader import async_get_integration, bind_hass from .storage import async_setup_frontend_storage @@ -248,6 +248,7 @@ async def async_setup(hass, config): hass.components.websocket_api.async_register_command(websocket_get_panels) hass.components.websocket_api.async_register_command(websocket_get_themes) hass.components.websocket_api.async_register_command(websocket_get_translations) + hass.components.websocket_api.async_register_command(websocket_get_version) hass.http.register_view(ManifestJSONView) conf = config.get(DOMAIN, {}) @@ -421,11 +422,9 @@ class IndexView(web_urldispatcher.AbstractResource): def freeze(self) -> None: """Freeze the resource.""" - pass def raw_match(self, path: str) -> bool: """Perform a raw match against path.""" - pass def get_template(self): """Get template.""" @@ -488,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() @@ -505,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( @@ -538,15 +531,42 @@ def websocket_get_themes(hass, connection, msg): @websocket_api.websocket_command( - {"type": "frontend/get_translations", vol.Required("language"): str} + { + "type": "frontend/get_translations", + vol.Required("language"): str, + vol.Required("category"): str, + vol.Optional("integration"): str, + vol.Optional("config_flow"): bool, + } ) @websocket_api.async_response async def websocket_get_translations(hass, connection, msg): - """Handle get translations command. - - Async friendly. - """ - resources = await async_get_translations(hass, msg["language"]) + """Handle get translations command.""" + resources = await async_get_translations( + hass, + msg["language"], + msg["category"], + msg.get("integration"), + msg.get("config_flow"), + ) 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/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index 3a4919dacae..9759c38af7d 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20200407.2"], + "requirements": ["home-assistant-frontend==20200427.1"], "dependencies": [ "api", "auth", diff --git a/homeassistant/components/frontend/services.yaml b/homeassistant/components/frontend/services.yaml index dc1fb40be48..489164ce7bd 100644 --- a/homeassistant/components/frontend/services.yaml +++ b/homeassistant/components/frontend/services.yaml @@ -5,7 +5,7 @@ set_theme: fields: name: description: Name of a predefined theme or 'default'. - example: 'light' + example: "light" reload_themes: description: Reload themes from yaml configuration. diff --git a/homeassistant/components/frontier_silicon/manifest.json b/homeassistant/components/frontier_silicon/manifest.json index d8ca3148acc..4e52eee9954 100644 --- a/homeassistant/components/frontier_silicon/manifest.json +++ b/homeassistant/components/frontier_silicon/manifest.json @@ -3,6 +3,5 @@ "name": "Frontier Silicon", "documentation": "https://www.home-assistant.io/integrations/frontier_silicon", "requirements": ["afsapi==0.0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/futurenow/manifest.json b/homeassistant/components/futurenow/manifest.json index 6a4599ea942..c8f07a106e2 100644 --- a/homeassistant/components/futurenow/manifest.json +++ b/homeassistant/components/futurenow/manifest.json @@ -3,6 +3,5 @@ "name": "P5 FutureNow", "documentation": "https://www.home-assistant.io/integrations/futurenow", "requirements": ["pyfnip==0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/garadget/cover.py b/homeassistant/components/garadget/cover.py index 5a43c3c7281..a1f324be1ff 100644 --- a/homeassistant/components/garadget/cover.py +++ b/homeassistant/components/garadget/cover.py @@ -229,7 +229,7 @@ class GaradgetCover(CoverDevice): try: status = self._get_variable("doorStatus") _LOGGER.debug("Current Status: %s", status["status"]) - self._state = STATES_MAP.get(status["status"], None) + self._state = STATES_MAP.get(status["status"]) self.time_in_state = status["time"] self.signal = status["signal"] self.sensor = status["sensor"] diff --git a/homeassistant/components/garadget/manifest.json b/homeassistant/components/garadget/manifest.json index b86f4e26b11..21d33405c84 100644 --- a/homeassistant/components/garadget/manifest.json +++ b/homeassistant/components/garadget/manifest.json @@ -2,7 +2,5 @@ "domain": "garadget", "name": "Garadget", "documentation": "https://www.home-assistant.io/integrations/garadget", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/garmin_connect/.translations/ca.json b/homeassistant/components/garmin_connect/.translations/ca.json deleted file mode 100644 index 95e59cf350d..00000000000 --- a/homeassistant/components/garmin_connect/.translations/ca.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest compte ja est\u00e0 configurat." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar.", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida.", - "too_many_requests": "Massa sol\u00b7licituds, torna-ho a intentar m\u00e9s tard.", - "unknown": "Error inesperat." - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "description": "Introdueix les teves credencials.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/cs.json b/homeassistant/components/garmin_connect/.translations/cs.json deleted file mode 100644 index ed8d33cc65c..00000000000 --- a/homeassistant/components/garmin_connect/.translations/cs.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Tento \u00fa\u010det je ji\u017e nakonfigurov\u00e1n." - }, - "error": { - "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit, zkuste to znovu.", - "invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed.", - "too_many_requests": "P\u0159\u00edli\u0161 mnoho po\u017eadavk\u016f, opakujte to pozd\u011bji.", - "unknown": "Neo\u010dek\u00e1van\u00e1 chyba" - }, - "step": { - "user": { - "data": { - "password": "Heslo", - "username": "U\u017eivatelsk\u00e9 jm\u00e9no" - }, - "description": "Zadejte sv\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/da.json b/homeassistant/components/garmin_connect/.translations/da.json deleted file mode 100644 index 1bbc5e7edba..00000000000 --- a/homeassistant/components/garmin_connect/.translations/da.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne konto er allerede konfigureret." - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse - pr\u00f8v igen.", - "invalid_auth": "Ugyldig godkendelse.", - "too_many_requests": "For mange anmodninger - pr\u00f8v igen senere.", - "unknown": "Uventet fejl." - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn" - }, - "description": "Indtast dine legitimationsoplysninger.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/de.json b/homeassistant/components/garmin_connect/.translations/de.json deleted file mode 100644 index dc1dfe5e9bd..00000000000 --- a/homeassistant/components/garmin_connect/.translations/de.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses Konto ist bereits konfiguriert." - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen. Bitte versuchen Sie es erneut.", - "invalid_auth": "Ung\u00fcltige Authentifizierung.", - "too_many_requests": "Zu viele Anfragen, wiederholen Sie es sp\u00e4ter.", - "unknown": "Unerwarteter Fehler." - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername" - }, - "description": "Geben Sie Ihre Zugangsdaten ein.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/en.json b/homeassistant/components/garmin_connect/.translations/en.json deleted file mode 100644 index 5dac9131fb0..00000000000 --- a/homeassistant/components/garmin_connect/.translations/en.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This account is already configured." - }, - "error": { - "cannot_connect": "Failed to connect, please try again.", - "invalid_auth": "Invalid authentication.", - "too_many_requests": "Too many requests, retry later.", - "unknown": "Unexpected error." - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username" - }, - "description": "Enter your credentials.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/es.json b/homeassistant/components/garmin_connect/.translations/es.json deleted file mode 100644 index 989d86dbc35..00000000000 --- a/homeassistant/components/garmin_connect/.translations/es.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta cuenta ya est\u00e1 configurada." - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntelo de nuevo.", - "invalid_auth": "Autenticaci\u00f3n inv\u00e1lida", - "too_many_requests": "Demasiadas solicitudes, vuelva a intentarlo m\u00e1s tarde.", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Nombre de usuario" - }, - "description": "Introduzca sus credenciales.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/fr.json b/homeassistant/components/garmin_connect/.translations/fr.json deleted file mode 100644 index f0dd8a79e5b..00000000000 --- a/homeassistant/components/garmin_connect/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce compte est d\u00e9j\u00e0 configur\u00e9." - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer.", - "invalid_auth": "Authentification non valide.", - "too_many_requests": "Trop de demandes, r\u00e9essayez plus tard.", - "unknown": "Erreur inattendue." - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "description": "Entrez vos informations d'identification.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/hu.json b/homeassistant/components/garmin_connect/.translations/hu.json deleted file mode 100644 index 931fa295962..00000000000 --- a/homeassistant/components/garmin_connect/.translations/hu.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ez a fi\u00f3k m\u00e1r konfigur\u00e1lva van." - }, - "error": { - "cannot_connect": "Nem siker\u00fclt csatlakozni, pr\u00f3b\u00e1lkozzon \u00fajra.", - "invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s.", - "too_many_requests": "T\u00fal sok k\u00e9r\u00e9s, pr\u00f3b\u00e1lkozzon k\u00e9s\u0151bb \u00fajra.", - "unknown": "V\u00e1ratlan hiba." - }, - "step": { - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - }, - "description": "Adja meg a hiteles\u00edt\u0151 adatait.", - "title": "Garmin Csatlakoz\u00e1s" - } - }, - "title": "Garmin Csatlakoz\u00e1s" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/it.json b/homeassistant/components/garmin_connect/.translations/it.json deleted file mode 100644 index 2d942bbc6a2..00000000000 --- a/homeassistant/components/garmin_connect/.translations/it.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo account \u00e8 gi\u00e0 configurato." - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare.", - "invalid_auth": "Autenticazione non valida.", - "too_many_requests": "Troppe richieste, riprovare pi\u00f9 tardi.", - "unknown": "Errore imprevisto." - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome utente" - }, - "description": "Inserisci le tue credenziali", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/ko.json b/homeassistant/components/garmin_connect/.translations/ko.json deleted file mode 100644 index eb354821d3d..00000000000 --- a/homeassistant/components/garmin_connect/.translations/ko.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "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", - "too_many_requests": "\uc694\uccad\uc774 \ub108\ubb34 \ub9ce\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \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": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "\uc790\uaca9 \uc99d\uba85\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/lb.json b/homeassistant/components/garmin_connect/.translations/lb.json deleted file mode 100644 index 8289be66d59..00000000000 --- a/homeassistant/components/garmin_connect/.translations/lb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse Kont ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun.", - "too_many_requests": "Ze vill Ufroen, prob\u00e9iert sp\u00e9ider nach emol.", - "unknown": "Onerwaarte Feeler." - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm" - }, - "description": "F\u00ebllt \u00e4r Umeldungs Informatiounen aus.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/nl.json b/homeassistant/components/garmin_connect/.translations/nl.json deleted file mode 100644 index c7a690de6e2..00000000000 --- a/homeassistant/components/garmin_connect/.translations/nl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dit account is al geconfigureerd." - }, - "error": { - "cannot_connect": "Verbinding mislukt, probeer het opnieuw.", - "invalid_auth": "Ongeldige authenticatie", - "too_many_requests": "Te veel aanvragen, probeer het later opnieuw.", - "unknown": "Onverwachte fout" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam" - }, - "description": "Voer uw gegevens in", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/no.json b/homeassistant/components/garmin_connect/.translations/no.json deleted file mode 100644 index bc8669086b1..00000000000 --- a/homeassistant/components/garmin_connect/.translations/no.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne kontoen er allerede konfigurert." - }, - "error": { - "cannot_connect": "Kunne ikke koble til, pr\u00f8v igjen.", - "invalid_auth": "Ugyldig godkjenning.", - "too_many_requests": "For mange foresp\u00f8rsler, pr\u00f8v p\u00e5 nytt senere.", - "unknown": "Uventet feil." - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn" - }, - "description": "Angi brukeropplysninger.", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/pl.json b/homeassistant/components/garmin_connect/.translations/pl.json deleted file mode 100644 index 45d0296b668..00000000000 --- a/homeassistant/components/garmin_connect/.translations/pl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "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.", - "too_many_requests": "Zbyt wiele \u017c\u0105da\u0144, spr\u00f3buj ponownie p\u00f3\u017aniej.", - "unknown": "Niespodziewany b\u0142\u0105d." - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/ru.json b/homeassistant/components/garmin_connect/.translations/ru.json deleted file mode 100644 index f8d018e1b1e..00000000000 --- a/homeassistant/components/garmin_connect/.translations/ru.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "too_many_requests": "\u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/sl.json b/homeassistant/components/garmin_connect/.translations/sl.json deleted file mode 100644 index 5b85611d5b7..00000000000 --- a/homeassistant/components/garmin_connect/.translations/sl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta ra\u010dun je \u017ee konfiguriran." - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova.", - "invalid_auth": "Neveljavna avtentikacija.", - "too_many_requests": "Preve\u010d zahtev, poskusite pozneje.", - "unknown": "Nepri\u010dakovana napaka." - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime" - }, - "description": "Vnesite svoje poverilnice.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/sv.json b/homeassistant/components/garmin_connect/.translations/sv.json deleted file mode 100644 index 12715a97ebe..00000000000 --- a/homeassistant/components/garmin_connect/.translations/sv.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Det h\u00e4r kontot har redan konfigurerats." - }, - "error": { - "cannot_connect": "Kunde inte ansluta, var god f\u00f6rs\u00f6k igen.", - "invalid_auth": "Ogiltig autentisering.", - "too_many_requests": "F\u00f6r m\u00e5nga f\u00f6rfr\u00e5gningar, f\u00f6rs\u00f6k igen senare.", - "unknown": "Ov\u00e4ntat fel." - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn" - }, - "description": "Ange dina anv\u00e4ndaruppgifter.", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/zh-Hant.json b/homeassistant/components/garmin_connect/.translations/zh-Hant.json deleted file mode 100644 index 8ddb5e61295..00000000000 --- a/homeassistant/components/garmin_connect/.translations/zh-Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "invalid_auth": "\u9a57\u8b49\u7121\u6548\u3002", - "too_many_requests": "\u8acb\u6c42\u6b21\u6578\u904e\u591a\uff0c\u8acb\u7a0d\u5f8c\u91cd\u8a66\u3002", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4\u3002" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u8f38\u5165\u6191\u8b49\u3002", - "title": "Garmin Connect" - } - }, - "title": "Garmin Connect" - } -} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/__init__.py b/homeassistant/components/garmin_connect/__init__.py index 1536a875698..8abdbbbbae9 100644 --- a/homeassistant/components/garmin_connect/__init__.py +++ b/homeassistant/components/garmin_connect/__init__.py @@ -38,7 +38,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): garmin_client = Garmin(username, password) try: - garmin_client.login() + await hass.async_add_executor_job(garmin_client.login) except ( GarminConnectAuthenticationError, GarminConnectTooManyRequestsError, diff --git a/homeassistant/components/garmin_connect/config_flow.py b/homeassistant/components/garmin_connect/config_flow.py index 36c63c7b995..e0b50fa371b 100644 --- a/homeassistant/components/garmin_connect/config_flow.py +++ b/homeassistant/components/garmin_connect/config_flow.py @@ -42,7 +42,7 @@ class GarminConnectConfigFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors = {} try: - garmin_client.login() + await self.hass.async_add_executor_job(garmin_client.login) except GarminConnectConnectionError: errors["base"] = "cannot_connect" return await self._show_setup_form(errors) diff --git a/homeassistant/components/garmin_connect/const.py b/homeassistant/components/garmin_connect/const.py index ebf56b27a7f..3c30340fc61 100644 --- a/homeassistant/components/garmin_connect/const.py +++ b/homeassistant/components/garmin_connect/const.py @@ -1,5 +1,11 @@ """Constants for the Garmin Connect integration.""" -from homeassistant.const import DEVICE_CLASS_TIMESTAMP, TIME_MINUTES, UNIT_PERCENTAGE +from homeassistant.const import ( + DEVICE_CLASS_TIMESTAMP, + LENGTH_METERS, + MASS_KILOGRAMS, + TIME_MINUTES, + UNIT_PERCENTAGE, +) DOMAIN = "garmin_connect" ATTRIBUTION = "Data provided by garmin.com" @@ -27,7 +33,13 @@ GARMIN_ENTITY_LIST = { False, ], "netCalorieGoal": ["Net Calorie Goal", "cal", "mdi:food", None, False], - "totalDistanceMeters": ["Total Distance Mtr", "m", "mdi:walk", None, True], + "totalDistanceMeters": [ + "Total Distance Mtr", + LENGTH_METERS, + "mdi:walk", + None, + True, + ], "wellnessStartTimeLocal": [ "Wellness Start Time", "", @@ -43,7 +55,13 @@ GARMIN_ENTITY_LIST = { False, ], "wellnessDescription": ["Wellness Description", "", "mdi:clock", None, False], - "wellnessDistanceMeters": ["Wellness Distance Mtr", "m", "mdi:walk", None, False], + "wellnessDistanceMeters": [ + "Wellness Distance Mtr", + LENGTH_METERS, + "mdi:walk", + None, + False, + ], "wellnessActiveKilocalories": [ "Wellness Active KiloCalories", "kcal", @@ -76,8 +94,20 @@ GARMIN_ENTITY_LIST = { None, True, ], - "floorsAscendedInMeters": ["Floors Ascended Mtr", "m", "mdi:stairs", None, False], - "floorsDescendedInMeters": ["Floors Descended Mtr", "m", "mdi:stairs", None, False], + "floorsAscendedInMeters": [ + "Floors Ascended Mtr", + LENGTH_METERS, + "mdi:stairs", + None, + False, + ], + "floorsDescendedInMeters": [ + "Floors Descended Mtr", + LENGTH_METERS, + "mdi:stairs", + None, + False, + ], "floorsAscended": ["Floors Ascended", "floors", "mdi:stairs", None, True], "floorsDescended": ["Floors Descended", "floors", "mdi:stairs", None, True], "userFloorsAscendedGoal": [ @@ -309,12 +339,12 @@ GARMIN_ENTITY_LIST = { DEVICE_CLASS_TIMESTAMP, False, ], - "weight": ["Weight", "kg", "mdi:weight-kilogram", None, False], + "weight": ["Weight", MASS_KILOGRAMS, "mdi:weight-kilogram", None, False], "bmi": ["BMI", "", "mdi:food", None, False], - "bodyFat": ["Body Fat", "%", "mdi:food", None, False], - "bodyWater": ["Body Water", "%", "mdi:water-percent", None, False], - "bodyMass": ["Body Mass", "kg", "mdi:food", None, False], - "muscleMass": ["Muscle Mass", "kg", "mdi:dumbbell", None, False], + "bodyFat": ["Body Fat", UNIT_PERCENTAGE, "mdi:food", None, False], + "bodyWater": ["Body Water", UNIT_PERCENTAGE, "mdi:water-percent", None, False], + "bodyMass": ["Body Mass", MASS_KILOGRAMS, "mdi:food", None, False], + "muscleMass": ["Muscle Mass", MASS_KILOGRAMS, "mdi:dumbbell", None, False], "physiqueRating": ["Physique Rating", "", "mdi:numeric", None, False], "visceralFat": ["Visceral Fat", "", "mdi:food", None, False], "metabolicAge": ["Metabolic Age", "", "mdi:calendar-heart", None, False], diff --git a/homeassistant/components/garmin_connect/manifest.json b/homeassistant/components/garmin_connect/manifest.json index ee534354cb3..09c916104df 100644 --- a/homeassistant/components/garmin_connect/manifest.json +++ b/homeassistant/components/garmin_connect/manifest.json @@ -2,7 +2,6 @@ "domain": "garmin_connect", "name": "Garmin Connect", "documentation": "https://www.home-assistant.io/integrations/garmin_connect", - "dependencies": [], "requirements": ["garminconnect==0.1.10"], "codeowners": ["@cyberjunky"], "config_flow": true diff --git a/homeassistant/components/garmin_connect/strings.json b/homeassistant/components/garmin_connect/strings.json index faf463ea8db..1f14d91e04a 100644 --- a/homeassistant/components/garmin_connect/strings.json +++ b/homeassistant/components/garmin_connect/strings.json @@ -1,8 +1,6 @@ { "config": { - "abort": { - "already_configured": "This account is already configured." - }, + "abort": { "already_configured": "This account is already configured." }, "error": { "cannot_connect": "Failed to connect, please try again.", "invalid_auth": "Invalid authentication.", @@ -11,14 +9,10 @@ }, "step": { "user": { - "data": { - "password": "Password", - "username": "Username" - }, + "data": { "password": "Password", "username": "Username" }, "description": "Enter your credentials.", "title": "Garmin Connect" } - }, - "title": "Garmin Connect" + } } } diff --git a/homeassistant/components/garmin_connect/translations/ca.json b/homeassistant/components/garmin_connect/translations/ca.json new file mode 100644 index 00000000000..d128e1d2e25 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest compte ja est\u00e0 configurat." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar.", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida.", + "too_many_requests": "Massa sol\u00b7licituds, torna-ho a intentar m\u00e9s tard.", + "unknown": "Error inesperat." + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "description": "Introdueix les teves credencials.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/cs.json b/homeassistant/components/garmin_connect/translations/cs.json new file mode 100644 index 00000000000..504c95290e1 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/cs.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Tento \u00fa\u010det je ji\u017e nakonfigurov\u00e1n." + }, + "error": { + "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit, zkuste to znovu.", + "invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed.", + "too_many_requests": "P\u0159\u00edli\u0161 mnoho po\u017eadavk\u016f, opakujte to pozd\u011bji.", + "unknown": "Neo\u010dek\u00e1van\u00e1 chyba" + }, + "step": { + "user": { + "data": { + "password": "Heslo", + "username": "U\u017eivatelsk\u00e9 jm\u00e9no" + }, + "description": "Zadejte sv\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/da.json b/homeassistant/components/garmin_connect/translations/da.json new file mode 100644 index 00000000000..f664ad0e1f4 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/da.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Denne konto er allerede konfigureret." + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse - pr\u00f8v igen.", + "invalid_auth": "Ugyldig godkendelse.", + "too_many_requests": "For mange anmodninger - pr\u00f8v igen senere.", + "unknown": "Uventet fejl." + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn" + }, + "description": "Indtast dine legitimationsoplysninger.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/de.json b/homeassistant/components/garmin_connect/translations/de.json new file mode 100644 index 00000000000..54d27e9956e --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/de.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses Konto ist bereits konfiguriert." + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen. Bitte versuchen Sie es erneut.", + "invalid_auth": "Ung\u00fcltige Authentifizierung.", + "too_many_requests": "Zu viele Anfragen, wiederholen Sie es sp\u00e4ter.", + "unknown": "Unerwarteter Fehler." + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "description": "Geben Sie Ihre Zugangsdaten ein.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/en.json b/homeassistant/components/garmin_connect/translations/en.json new file mode 100644 index 00000000000..52ae403cca3 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/en.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "This account is already configured." + }, + "error": { + "cannot_connect": "Failed to connect, please try again.", + "invalid_auth": "Invalid authentication.", + "too_many_requests": "Too many requests, retry later.", + "unknown": "Unexpected error." + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "description": "Enter your credentials.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/es-419.json b/homeassistant/components/garmin_connect/translations/es-419.json similarity index 100% rename from homeassistant/components/garmin_connect/.translations/es-419.json rename to homeassistant/components/garmin_connect/translations/es-419.json diff --git a/homeassistant/components/garmin_connect/translations/es.json b/homeassistant/components/garmin_connect/translations/es.json new file mode 100644 index 00000000000..e14769bc670 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Esta cuenta ya est\u00e1 configurada." + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntelo de nuevo.", + "invalid_auth": "Autenticaci\u00f3n inv\u00e1lida", + "too_many_requests": "Demasiadas solicitudes, vuelva a intentarlo m\u00e1s tarde.", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "description": "Introduzca sus credenciales.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/fr.json b/homeassistant/components/garmin_connect/translations/fr.json new file mode 100644 index 00000000000..ce97ccccf1b --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/fr.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ce compte est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer.", + "invalid_auth": "Authentification non valide.", + "too_many_requests": "Trop de demandes, r\u00e9essayez plus tard.", + "unknown": "Erreur inattendue." + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "description": "Entrez vos informations d'identification.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/hu.json b/homeassistant/components/garmin_connect/translations/hu.json new file mode 100644 index 00000000000..fd805fc4e4d --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/hu.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ez a fi\u00f3k m\u00e1r konfigur\u00e1lva van." + }, + "error": { + "cannot_connect": "Nem siker\u00fclt csatlakozni, pr\u00f3b\u00e1lkozzon \u00fajra.", + "invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s.", + "too_many_requests": "T\u00fal sok k\u00e9r\u00e9s, pr\u00f3b\u00e1lkozzon k\u00e9s\u0151bb \u00fajra.", + "unknown": "V\u00e1ratlan hiba." + }, + "step": { + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + }, + "description": "Adja meg a hiteles\u00edt\u0151 adatait.", + "title": "Garmin Csatlakoz\u00e1s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/it.json b/homeassistant/components/garmin_connect/translations/it.json new file mode 100644 index 00000000000..70f4bf84017 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Questo account \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare.", + "invalid_auth": "Autenticazione non valida.", + "too_many_requests": "Troppe richieste, riprovare pi\u00f9 tardi.", + "unknown": "Errore imprevisto." + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "description": "Inserisci le tue credenziali", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/ko.json b/homeassistant/components/garmin_connect/translations/ko.json new file mode 100644 index 00000000000..4727a21db6a --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/ko.json @@ -0,0 +1,23 @@ +{ + "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", + "too_many_requests": "\uc694\uccad\uc774 \ub108\ubb34 \ub9ce\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \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": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "\uc790\uaca9 \uc99d\uba85\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/lb.json b/homeassistant/components/garmin_connect/translations/lb.json new file mode 100644 index 00000000000..6a5b859c3e1 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Kont ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun.", + "too_many_requests": "Ze vill Ufroen, prob\u00e9iert sp\u00e9ider nach emol.", + "unknown": "Onerwaarte Feeler." + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "description": "F\u00ebllt \u00e4r Umeldungs Informatiounen aus.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/.translations/lv.json b/homeassistant/components/garmin_connect/translations/lv.json similarity index 100% rename from homeassistant/components/garmin_connect/.translations/lv.json rename to homeassistant/components/garmin_connect/translations/lv.json diff --git a/homeassistant/components/garmin_connect/translations/nl.json b/homeassistant/components/garmin_connect/translations/nl.json new file mode 100644 index 00000000000..e9b71c49c71 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Dit account is al geconfigureerd." + }, + "error": { + "cannot_connect": "Verbinding mislukt, probeer het opnieuw.", + "invalid_auth": "Ongeldige authenticatie", + "too_many_requests": "Te veel aanvragen, probeer het later opnieuw.", + "unknown": "Onverwachte fout" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + }, + "description": "Voer uw gegevens in", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/no.json b/homeassistant/components/garmin_connect/translations/no.json new file mode 100644 index 00000000000..ae678abfe05 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Denne kontoen er allerede konfigurert." + }, + "error": { + "cannot_connect": "Kunne ikke koble til, pr\u00f8v igjen.", + "invalid_auth": "Ugyldig godkjenning.", + "too_many_requests": "For mange foresp\u00f8rsler, pr\u00f8v p\u00e5 nytt senere.", + "unknown": "Uventet feil." + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "description": "Angi brukeropplysninger.", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/pl.json b/homeassistant/components/garmin_connect/translations/pl.json new file mode 100644 index 00000000000..e144ac994f7 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/pl.json @@ -0,0 +1,23 @@ +{ + "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.", + "too_many_requests": "Zbyt wiele \u017c\u0105da\u0144, spr\u00f3buj ponownie p\u00f3\u017aniej.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/pt.json b/homeassistant/components/garmin_connect/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/ru.json b/homeassistant/components/garmin_connect/translations/ru.json new file mode 100644 index 00000000000..b3aa4e6604c --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "too_many_requests": "\u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/sl.json b/homeassistant/components/garmin_connect/translations/sl.json new file mode 100644 index 00000000000..594cbffeaa7 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/sl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ta ra\u010dun je \u017ee konfiguriran." + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova.", + "invalid_auth": "Neveljavna avtentikacija.", + "too_many_requests": "Preve\u010d zahtev, poskusite pozneje.", + "unknown": "Nepri\u010dakovana napaka." + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "description": "Vnesite svoje poverilnice.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/sv.json b/homeassistant/components/garmin_connect/translations/sv.json new file mode 100644 index 00000000000..0f11ab2a8b9 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/sv.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Det h\u00e4r kontot har redan konfigurerats." + }, + "error": { + "cannot_connect": "Kunde inte ansluta, var god f\u00f6rs\u00f6k igen.", + "invalid_auth": "Ogiltig autentisering.", + "too_many_requests": "F\u00f6r m\u00e5nga f\u00f6rfr\u00e5gningar, f\u00f6rs\u00f6k igen senare.", + "unknown": "Ov\u00e4ntat fel." + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn" + }, + "description": "Ange dina anv\u00e4ndaruppgifter.", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/zh-Hant.json b/homeassistant/components/garmin_connect/translations/zh-Hant.json new file mode 100644 index 00000000000..f13f62abbed --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "invalid_auth": "\u9a57\u8b49\u7121\u6548\u3002", + "too_many_requests": "\u8acb\u6c42\u6b21\u6578\u904e\u591a\uff0c\u8acb\u7a0d\u5f8c\u91cd\u8a66\u3002", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4\u3002" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u8f38\u5165\u6191\u8b49\u3002", + "title": "Garmin Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gc100/manifest.json b/homeassistant/components/gc100/manifest.json index e566643a4f8..e2dffb1e090 100644 --- a/homeassistant/components/gc100/manifest.json +++ b/homeassistant/components/gc100/manifest.json @@ -3,6 +3,5 @@ "name": "Global Caché GC-100", "documentation": "https://www.home-assistant.io/integrations/gc100", "requirements": ["python-gc100==1.0.3a"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/gdacs/.translations/ca.json b/homeassistant/components/gdacs/.translations/ca.json deleted file mode 100644 index 5f5acfe7ccf..00000000000 --- a/homeassistant/components/gdacs/.translations/ca.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La ubicaci\u00f3 ja est\u00e0 configurada." - }, - "step": { - "user": { - "data": { - "radius": "Radi" - }, - "title": "Introducci\u00f3 dels detalls del filtre." - } - }, - "title": "Sistema Global de Coordinaci\u00f3 i Alerta per Desastres (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/da.json b/homeassistant/components/gdacs/.translations/da.json deleted file mode 100644 index 64f3dd000c4..00000000000 --- a/homeassistant/components/gdacs/.translations/da.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Lokaliteten er allerede konfigureret." - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "Udfyld dine filteroplysninger." - } - }, - "title": "Globalt katastrofevarslings- og koordineringssystem (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/de.json b/homeassistant/components/gdacs/.translations/de.json deleted file mode 100644 index 12f94250402..00000000000 --- a/homeassistant/components/gdacs/.translations/de.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Der Standort ist bereits konfiguriert." - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "F\u00fclle deine Filterangaben aus." - } - }, - "title": "Globales Katastrophenalarm- und Koordinierungssystem (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/en.json b/homeassistant/components/gdacs/.translations/en.json deleted file mode 100644 index 4e7ceb3846c..00000000000 --- a/homeassistant/components/gdacs/.translations/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Location is already configured." - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "Fill in your filter details." - } - }, - "title": "Global Disaster Alert and Coordination System (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/es.json b/homeassistant/components/gdacs/.translations/es.json deleted file mode 100644 index 6c02b339541..00000000000 --- a/homeassistant/components/gdacs/.translations/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La ubicaci\u00f3n ya est\u00e1 configurada." - }, - "step": { - "user": { - "data": { - "radius": "Radio" - }, - "title": "Rellena los datos de tu filtro." - } - }, - "title": "Sistema Mundial de Alerta y Coordinaci\u00f3n de Desastres (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/fr.json b/homeassistant/components/gdacs/.translations/fr.json deleted file mode 100644 index a4366cb5dc7..00000000000 --- a/homeassistant/components/gdacs/.translations/fr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'emplacement est d\u00e9j\u00e0 configur\u00e9." - }, - "step": { - "user": { - "data": { - "radius": "Rayon" - }, - "title": "Remplissez les d\u00e9tails de votre filtre." - } - }, - "title": "Syst\u00e8me mondial d'alerte et de coordination en cas de catastrophe (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/hu.json b/homeassistant/components/gdacs/.translations/hu.json deleted file mode 100644 index 79bcba3388f..00000000000 --- a/homeassistant/components/gdacs/.translations/hu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A hely m\u00e1r konfigur\u00e1lva van." - }, - "step": { - "user": { - "data": { - "radius": "Sug\u00e1r" - }, - "title": "T\u00f6ltse ki a sz\u0171r\u0151 adatait." - } - }, - "title": "Glob\u00e1lis katasztr\u00f3fariaszt\u00e1si \u00e9s koordin\u00e1ci\u00f3s rendszer (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/it.json b/homeassistant/components/gdacs/.translations/it.json deleted file mode 100644 index 249b47f9f59..00000000000 --- a/homeassistant/components/gdacs/.translations/it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La posizione \u00e8 gi\u00e0 configurata." - }, - "step": { - "user": { - "data": { - "radius": "Raggio" - }, - "title": "Inserisci i tuoi dettagli del filtro." - } - }, - "title": "Sistema globale di allerta e coordinamento delle catastrofi (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/ko.json b/homeassistant/components/gdacs/.translations/ko.json deleted file mode 100644 index 10d6f73e56f..00000000000 --- a/homeassistant/components/gdacs/.translations/ko.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc704\uce58\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "radius": "\ubc18\uacbd" - }, - "title": "\ud544\ud130 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694." - } - }, - "title": "\uad6d\uc81c \uc7ac\ub09c \uacbd\ubcf4 \ubc0f \uc870\uc815 \uae30\uad6c (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/lb.json b/homeassistant/components/gdacs/.translations/lb.json deleted file mode 100644 index a4077ed630e..00000000000 --- a/homeassistant/components/gdacs/.translations/lb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Standuert ass scho konfigu\u00e9iert." - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "F\u00ebllt \u00e4r Filter D\u00e9tailer aus." - } - }, - "title": "Globale D\u00e9saster Alerte a Koordinatioun System (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/nl.json b/homeassistant/components/gdacs/.translations/nl.json deleted file mode 100644 index 62383e43e36..00000000000 --- a/homeassistant/components/gdacs/.translations/nl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Locatie is al geconfigureerd." - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "Vul uw filtergegevens in." - } - }, - "title": "Wereldwijd rampenwaarschuwings- en co\u00f6rdinatiesysteem (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/no.json b/homeassistant/components/gdacs/.translations/no.json deleted file mode 100644 index f344c47365d..00000000000 --- a/homeassistant/components/gdacs/.translations/no.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Plasseringen er allerede konfigurert." - }, - "step": { - "user": { - "data": { - "radius": "" - }, - "title": "Fyll ut filterdetaljene." - } - }, - "title": "Globalt katastrofevarslings- og koordineringssystem (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/pl.json b/homeassistant/components/gdacs/.translations/pl.json deleted file mode 100644 index f4b90cc35c7..00000000000 --- a/homeassistant/components/gdacs/.translations/pl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Lokalizacja jest ju\u017c skonfigurowana." - }, - "step": { - "user": { - "data": { - "radius": "Promie\u0144" - }, - "title": "Wprowad\u017a szczeg\u00f3\u0142owe dane filtra." - } - }, - "title": "Globalny system ostrzegania i koordynacji w przypadku katastrof (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/ru.json b/homeassistant/components/gdacs/.translations/ru.json deleted file mode 100644 index f006832b5be..00000000000 --- a/homeassistant/components/gdacs/.translations/ru.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "step": { - "user": { - "data": { - "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" - }, - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0438\u0445\u0438\u0439\u043d\u044b\u0445 \u0431\u0435\u0434\u0441\u0442\u0432\u0438\u0439 (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/sl.json b/homeassistant/components/gdacs/.translations/sl.json deleted file mode 100644 index fc522a1a263..00000000000 --- a/homeassistant/components/gdacs/.translations/sl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Lokacija je \u017ee nastavljena." - }, - "step": { - "user": { - "data": { - "radius": "Radij" - }, - "title": "Izpolnite podrobnosti filtra." - } - }, - "title": "Globalni sistem opozarjanja in koordinacije nesre\u010d (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/sv.json b/homeassistant/components/gdacs/.translations/sv.json deleted file mode 100644 index 3c7fb00056e..00000000000 --- a/homeassistant/components/gdacs/.translations/sv.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Plats \u00e4r redan konfigurerad." - }, - "step": { - "user": { - "data": { - "radius": "Radie" - }, - "title": "Fyll i filterinformation." - } - }, - "title": "Globalt katastrofvarnings- och samordningssystem (GDACS)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/.translations/zh-Hant.json b/homeassistant/components/gdacs/.translations/zh-Hant.json deleted file mode 100644 index 59f9b7be031..00000000000 --- a/homeassistant/components/gdacs/.translations/zh-Hant.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4f4d\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "step": { - "user": { - "data": { - "radius": "\u534a\u5f91" - }, - "title": "\u586b\u5beb\u904e\u6ffe\u5668\u8cc7\u8a0a\u3002" - } - }, - "title": "\u5168\u7403\u707d\u96e3\u9810\u8b66\u548c\u5354\u8abf\u7cfb\u7d71\uff08GDACS\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/gdacs/manifest.json b/homeassistant/components/gdacs/manifest.json index 45105b21ab4..630ed0a4a06 100644 --- a/homeassistant/components/gdacs/manifest.json +++ b/homeassistant/components/gdacs/manifest.json @@ -3,12 +3,7 @@ "name": "Global Disaster Alert and Coordination System (GDACS)", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/gdacs", - "requirements": [ - "aio_georss_gdacs==0.3" - ], - "dependencies": [], - "codeowners": [ - "@exxamalte" - ], + "requirements": ["aio_georss_gdacs==0.3"], + "codeowners": ["@exxamalte"], "quality_scale": "platinum" -} \ No newline at end of file +} diff --git a/homeassistant/components/gdacs/strings.json b/homeassistant/components/gdacs/strings.json index 353b1b85634..496b996823a 100644 --- a/homeassistant/components/gdacs/strings.json +++ b/homeassistant/components/gdacs/strings.json @@ -1,16 +1,11 @@ { "config": { - "title": "Global Disaster Alert and Coordination System (GDACS)", "step": { "user": { "title": "Fill in your filter details.", - "data": { - "radius": "Radius" - } + "data": { "radius": "Radius" } } }, - "abort": { - "already_configured": "Location is already configured." - } + "abort": { "already_configured": "Location is already configured." } } } diff --git a/homeassistant/components/gdacs/translations/ca.json b/homeassistant/components/gdacs/translations/ca.json new file mode 100644 index 00000000000..db6359c881b --- /dev/null +++ b/homeassistant/components/gdacs/translations/ca.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "La ubicaci\u00f3 ja est\u00e0 configurada." + }, + "step": { + "user": { + "data": { + "radius": "Radi" + }, + "title": "Introducci\u00f3 dels detalls del filtre." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/da.json b/homeassistant/components/gdacs/translations/da.json new file mode 100644 index 00000000000..cc59dfa78bb --- /dev/null +++ b/homeassistant/components/gdacs/translations/da.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Lokaliteten er allerede konfigureret." + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "Udfyld dine filteroplysninger." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/de.json b/homeassistant/components/gdacs/translations/de.json new file mode 100644 index 00000000000..07d1a4bdb79 --- /dev/null +++ b/homeassistant/components/gdacs/translations/de.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Der Standort ist bereits konfiguriert." + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "F\u00fclle deine Filterangaben aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/en.json b/homeassistant/components/gdacs/translations/en.json new file mode 100644 index 00000000000..8b4d3522ce2 --- /dev/null +++ b/homeassistant/components/gdacs/translations/en.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Location is already configured." + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "Fill in your filter details." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/es.json b/homeassistant/components/gdacs/translations/es.json new file mode 100644 index 00000000000..816b44ceef0 --- /dev/null +++ b/homeassistant/components/gdacs/translations/es.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "La ubicaci\u00f3n ya est\u00e1 configurada." + }, + "step": { + "user": { + "data": { + "radius": "Radio" + }, + "title": "Rellena los datos de tu filtro." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/fr.json b/homeassistant/components/gdacs/translations/fr.json new file mode 100644 index 00000000000..df44a1d9fa5 --- /dev/null +++ b/homeassistant/components/gdacs/translations/fr.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "L'emplacement est d\u00e9j\u00e0 configur\u00e9." + }, + "step": { + "user": { + "data": { + "radius": "Rayon" + }, + "title": "Remplissez les d\u00e9tails de votre filtre." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/hu.json b/homeassistant/components/gdacs/translations/hu.json new file mode 100644 index 00000000000..47eca9a7fac --- /dev/null +++ b/homeassistant/components/gdacs/translations/hu.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "A hely m\u00e1r konfigur\u00e1lva van." + }, + "step": { + "user": { + "data": { + "radius": "Sug\u00e1r" + }, + "title": "T\u00f6ltse ki a sz\u0171r\u0151 adatait." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/it.json b/homeassistant/components/gdacs/translations/it.json new file mode 100644 index 00000000000..3fad0146c13 --- /dev/null +++ b/homeassistant/components/gdacs/translations/it.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "La posizione \u00e8 gi\u00e0 configurata." + }, + "step": { + "user": { + "data": { + "radius": "Raggio" + }, + "title": "Inserisci i tuoi dettagli del filtro." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/ko.json b/homeassistant/components/gdacs/translations/ko.json new file mode 100644 index 00000000000..1aeaf219288 --- /dev/null +++ b/homeassistant/components/gdacs/translations/ko.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "\uc704\uce58\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "radius": "\ubc18\uacbd" + }, + "title": "\ud544\ud130 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/lb.json b/homeassistant/components/gdacs/translations/lb.json new file mode 100644 index 00000000000..5125ce8c58e --- /dev/null +++ b/homeassistant/components/gdacs/translations/lb.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Standuert ass scho konfigu\u00e9iert." + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "F\u00ebllt \u00e4r Filter D\u00e9tailer aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/nl.json b/homeassistant/components/gdacs/translations/nl.json new file mode 100644 index 00000000000..f2a09892a66 --- /dev/null +++ b/homeassistant/components/gdacs/translations/nl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Locatie is al geconfigureerd." + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "Vul uw filtergegevens in." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/no.json b/homeassistant/components/gdacs/translations/no.json new file mode 100644 index 00000000000..372a24c0b38 --- /dev/null +++ b/homeassistant/components/gdacs/translations/no.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Plasseringen er allerede konfigurert." + }, + "step": { + "user": { + "data": { + "radius": "" + }, + "title": "Fyll ut filterdetaljene." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/pl.json b/homeassistant/components/gdacs/translations/pl.json new file mode 100644 index 00000000000..406f8af58f4 --- /dev/null +++ b/homeassistant/components/gdacs/translations/pl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Lokalizacja jest ju\u017c skonfigurowana." + }, + "step": { + "user": { + "data": { + "radius": "Promie\u0144" + }, + "title": "Wprowad\u017a szczeg\u00f3\u0142owe dane filtra." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/pt.json b/homeassistant/components/gdacs/translations/pt.json new file mode 100644 index 00000000000..98180e11248 --- /dev/null +++ b/homeassistant/components/gdacs/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "radius": "Raio" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/ru.json b/homeassistant/components/gdacs/translations/ru.json new file mode 100644 index 00000000000..b9466944037 --- /dev/null +++ b/homeassistant/components/gdacs/translations/ru.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "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." + }, + "step": { + "user": { + "data": { + "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" + }, + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/sl.json b/homeassistant/components/gdacs/translations/sl.json new file mode 100644 index 00000000000..24c4e8a9b50 --- /dev/null +++ b/homeassistant/components/gdacs/translations/sl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Lokacija je \u017ee nastavljena." + }, + "step": { + "user": { + "data": { + "radius": "Radij" + }, + "title": "Izpolnite podrobnosti filtra." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/sv.json b/homeassistant/components/gdacs/translations/sv.json new file mode 100644 index 00000000000..6688b68eb57 --- /dev/null +++ b/homeassistant/components/gdacs/translations/sv.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Plats \u00e4r redan konfigurerad." + }, + "step": { + "user": { + "data": { + "radius": "Radie" + }, + "title": "Fyll i filterinformation." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/zh-Hant.json b/homeassistant/components/gdacs/translations/zh-Hant.json new file mode 100644 index 00000000000..3e643c732c8 --- /dev/null +++ b/homeassistant/components/gdacs/translations/zh-Hant.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "\u4f4d\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "step": { + "user": { + "data": { + "radius": "\u534a\u5f91" + }, + "title": "\u586b\u5beb\u904e\u6ffe\u5668\u8cc7\u8a0a\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gearbest/manifest.json b/homeassistant/components/gearbest/manifest.json index 03f2b83cf3a..4729fd6b6f3 100644 --- a/homeassistant/components/gearbest/manifest.json +++ b/homeassistant/components/gearbest/manifest.json @@ -3,6 +3,5 @@ "name": "Gearbest", "documentation": "https://www.home-assistant.io/integrations/gearbest", "requirements": ["gearbest_parser==1.0.7"], - "dependencies": [], "codeowners": ["@HerrHofrat"] } diff --git a/homeassistant/components/geizhals/manifest.json b/homeassistant/components/geizhals/manifest.json index 12ff4209820..17b4b5e9df0 100644 --- a/homeassistant/components/geizhals/manifest.json +++ b/homeassistant/components/geizhals/manifest.json @@ -3,6 +3,5 @@ "name": "Geizhals", "documentation": "https://www.home-assistant.io/integrations/geizhals", "requirements": ["geizhals==0.0.9"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/generic/manifest.json b/homeassistant/components/generic/manifest.json index 9d59d5b9919..a066333679d 100644 --- a/homeassistant/components/generic/manifest.json +++ b/homeassistant/components/generic/manifest.json @@ -2,7 +2,5 @@ "domain": "generic", "name": "Generic", "documentation": "https://www.home-assistant.io/integrations/generic", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/generic_thermostat/climate.py b/homeassistant/components/generic_thermostat/climate.py index a7ddcc08314..f153a47e2a4 100644 --- a/homeassistant/components/generic_thermostat/climate.py +++ b/homeassistant/components/generic_thermostat/climate.py @@ -325,7 +325,7 @@ class GenericThermostat(ClimateDevice, RestoreEntity): _LOGGER.error("Unrecognized hvac mode: %s", hvac_mode) return # Ensure we update the current operation after changing the mode - self.schedule_update_ha_state() + self.async_write_ha_state() async def async_set_temperature(self, **kwargs): """Set new target temperature.""" @@ -334,7 +334,7 @@ class GenericThermostat(ClimateDevice, RestoreEntity): return self._target_temp = temperature await self._async_control_heating(force=True) - await self.async_update_ha_state() + self.async_write_ha_state() @property def min_temp(self): @@ -361,14 +361,14 @@ class GenericThermostat(ClimateDevice, RestoreEntity): self._async_update_temp(new_state) await self._async_control_heating() - await self.async_update_ha_state() + self.async_write_ha_state() @callback def _async_switch_changed(self, entity_id, old_state, new_state): """Handle heater switch state changes.""" if new_state is None: return - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def _async_update_temp(self, state): @@ -468,4 +468,4 @@ class GenericThermostat(ClimateDevice, RestoreEntity): self._target_temp = self._saved_target_temp await self._async_control_heating(force=True) - await self.async_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/generic_thermostat/manifest.json b/homeassistant/components/generic_thermostat/manifest.json index c601c1297d5..011c3f59592 100644 --- a/homeassistant/components/generic_thermostat/manifest.json +++ b/homeassistant/components/generic_thermostat/manifest.json @@ -2,7 +2,6 @@ "domain": "generic_thermostat", "name": "Generic Thermostat", "documentation": "https://www.home-assistant.io/integrations/generic_thermostat", - "requirements": [], "dependencies": ["sensor", "switch"], "codeowners": [] } diff --git a/homeassistant/components/geniushub/__init__.py b/homeassistant/components/geniushub/__init__.py index bb25d2d619d..0b99224bf7f 100644 --- a/homeassistant/components/geniushub/__init__.py +++ b/homeassistant/components/geniushub/__init__.py @@ -204,7 +204,7 @@ class GeniusEntity(Entity): async def async_added_to_hass(self) -> None: """Set up a listener when this entity is added to HA.""" - async_dispatcher_connect(self.hass, DOMAIN, self._refresh) + self.async_on_remove(async_dispatcher_connect(self.hass, DOMAIN, self._refresh)) async def _refresh(self, payload: Optional[dict] = None) -> None: """Process any signals.""" diff --git a/homeassistant/components/geniushub/manifest.json b/homeassistant/components/geniushub/manifest.json index ab9349d1472..b4a72d88315 100644 --- a/homeassistant/components/geniushub/manifest.json +++ b/homeassistant/components/geniushub/manifest.json @@ -3,6 +3,5 @@ "name": "Genius Hub", "documentation": "https://www.home-assistant.io/integrations/geniushub", "requirements": ["geniushub-client==0.6.30"], - "dependencies": [], "codeowners": ["@zxdavb"] } diff --git a/homeassistant/components/geniushub/services.yaml b/homeassistant/components/geniushub/services.yaml index d7522ac2995..50cd8d7d01e 100644 --- a/homeassistant/components/geniushub/services.yaml +++ b/homeassistant/components/geniushub/services.yaml @@ -3,18 +3,18 @@ set_zone_mode: description: >- - Set the zone to an operating mode. + Set the zone to an operating mode. fields: entity_id: description: The zone's entity_id. example: climate.kitchen mode: - description: 'One of: off, timer or footprint.' + description: "One of: off, timer or footprint." example: timer set_zone_override: description: >- - Override the zone's setpoint for a given duration. + Override the zone's setpoint for a given duration. fields: entity_id: description: The zone's entity_id. @@ -24,6 +24,5 @@ set_zone_override: example: 19.2 duration: description: >- - The duration of the override. Optional, default 1 hour, maximum 24 hours. + The duration of the override. Optional, default 1 hour, maximum 24 hours. example: '{"minutes": 135}' - diff --git a/homeassistant/components/geo_json_events/geo_location.py b/homeassistant/components/geo_json_events/geo_location.py index 3435fcc50cf..2fd8466cc19 100644 --- a/homeassistant/components/geo_json_events/geo_location.py +++ b/homeassistant/components/geo_json_events/geo_location.py @@ -14,6 +14,7 @@ from homeassistant.const import ( CONF_SCAN_INTERVAL, CONF_URL, EVENT_HOMEASSISTANT_START, + LENGTH_KILOMETERS, ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv @@ -25,7 +26,6 @@ _LOGGER = logging.getLogger(__name__) ATTR_EXTERNAL_ID = "external_id" DEFAULT_RADIUS_IN_KM = 20.0 -DEFAULT_UNIT_OF_MEASUREMENT = "km" SCAN_INTERVAL = timedelta(minutes=5) @@ -198,7 +198,7 @@ class GeoJsonLocationEvent(GeolocationEvent): @property def unit_of_measurement(self): """Return the unit of measurement.""" - return DEFAULT_UNIT_OF_MEASUREMENT + return LENGTH_KILOMETERS @property def device_state_attributes(self): diff --git a/homeassistant/components/geo_json_events/manifest.json b/homeassistant/components/geo_json_events/manifest.json index bb1e8f942ad..4cf99155b37 100644 --- a/homeassistant/components/geo_json_events/manifest.json +++ b/homeassistant/components/geo_json_events/manifest.json @@ -3,6 +3,5 @@ "name": "GeoJSON", "documentation": "https://www.home-assistant.io/integrations/geo_json_events", "requirements": ["geojson_client==0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/geo_location/manifest.json b/homeassistant/components/geo_location/manifest.json index 80067b2b5b6..c5d3a6eba2e 100644 --- a/homeassistant/components/geo_location/manifest.json +++ b/homeassistant/components/geo_location/manifest.json @@ -2,7 +2,5 @@ "domain": "geo_location", "name": "Geolocation", "documentation": "https://www.home-assistant.io/integrations/geo_location", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/geo_rss_events/manifest.json b/homeassistant/components/geo_rss_events/manifest.json index 33903246463..77d38d58ad7 100644 --- a/homeassistant/components/geo_rss_events/manifest.json +++ b/homeassistant/components/geo_rss_events/manifest.json @@ -3,6 +3,5 @@ "name": "GeoRSS", "documentation": "https://www.home-assistant.io/integrations/geo_rss_events", "requirements": ["georss_generic_client==0.3"], - "dependencies": [], "codeowners": ["@exxamalte"] } diff --git a/homeassistant/components/geo_rss_events/sensor.py b/homeassistant/components/geo_rss_events/sensor.py index 22f02a4218c..5a11136fd43 100644 --- a/homeassistant/components/geo_rss_events/sensor.py +++ b/homeassistant/components/geo_rss_events/sensor.py @@ -20,6 +20,7 @@ from homeassistant.const import ( CONF_RADIUS, CONF_UNIT_OF_MEASUREMENT, CONF_URL, + LENGTH_KILOMETERS, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -152,7 +153,7 @@ class GeoRssServiceSensor(Entity): # And now compute the attributes from the filtered events. matrix = {} for entry in feed_entries: - matrix[entry.title] = f"{entry.distance_to_home:.0f}km" + matrix[entry.title] = f"{entry.distance_to_home:.0f}{LENGTH_KILOMETERS}" self._state_attributes = matrix elif status == UPDATE_OK_NO_DATA: _LOGGER.debug("Update successful, but no data received from %s", self._feed) diff --git a/homeassistant/components/geofency/.translations/bg.json b/homeassistant/components/geofency/.translations/bg.json deleted file mode 100644 index b9bfa2a3b41..00000000000 --- a/homeassistant/components/geofency/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Geofency.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Geofency. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Geofency Webhook?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/ca.json b/homeassistant/components/geofency/.translations/ca.json deleted file mode 100644 index 44377ce3021..00000000000 --- a/homeassistant/components/geofency/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Geofency.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de Geofency.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar el Webhook de Geofency?", - "title": "Configuraci\u00f3 del Webhook de Geofency" - } - }, - "title": "Webhook de Geofency" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/cs.json b/homeassistant/components/geofency/.translations/cs.json deleted file mode 100644 index 2fa1dfc9f4b..00000000000 --- a/homeassistant/components/geofency/.translations/cs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "create_entry": { - "default": "Chcete-li odes\u00edlat ud\u00e1losti do aplikace Home Assistant, mus\u00edte v aplikaci Geofency nastavit funkci webhook. \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}` \n - Metoda: POST \n\n Dal\u0161\u00ed informace viz [dokumentace]({docs_url})." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit Geofency Webhook?", - "title": "Nastavit Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/da.json b/homeassistant/components/geofency/.translations/da.json deleted file mode 100644 index 6e9443af5e8..00000000000 --- a/homeassistant/components/geofency/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Geofency-meddelelser.", - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i Geofency.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Geofency Webhook?", - "title": "Ops\u00e6tning af Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/de.json b/homeassistant/components/geofency/.translations/de.json deleted file mode 100644 index f7773f13db8..00000000000 --- a/homeassistant/components/geofency/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem internet erreichbar sein, um Nachrichten von Geofency zu erhalten.", - "one_instance_allowed": "Es ist nur eine einzige Instanz erforderlich." - }, - "create_entry": { - "default": "Um Ereignisse an den Home Assistant zu senden, musst das Webhook Feature in Geofency konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." - }, - "step": { - "user": { - "description": "M\u00f6chtest du den Geofency Webhook wirklich einrichten?", - "title": "Richte den Geofency Webhook ein" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/en.json b/homeassistant/components/geofency/.translations/en.json deleted file mode 100644 index 27b6335c6f9..00000000000 --- a/homeassistant/components/geofency/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Geofency.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup the webhook feature in Geofency.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." - }, - "step": { - "user": { - "description": "Are you sure you want to set up the Geofency Webhook?", - "title": "Set up the Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/es-419.json b/homeassistant/components/geofency/.translations/es-419.json deleted file mode 100644 index 637a430a1f8..00000000000 --- a/homeassistant/components/geofency/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Geofency.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en Geofency. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres montar el Webhook de Geofency?", - "title": "Configurar el Webhook de Geofency" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/es.json b/homeassistant/components/geofency/.translations/es.json deleted file mode 100644 index 04d5c01e03e..00000000000 --- a/homeassistant/components/geofency/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu Home Assistant debe ser accesible desde Internet para recibir mensajes de GPSLogger.", - "one_instance_allowed": "Solo se necesita una instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en Geofency.\n\nRellene la siguiente informaci\u00f3n:\n\n- URL: ``{webhook_url}``\n- M\u00e9todo: POST\n\nVer[la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de Geofency?", - "title": "Configurar el Webhook de Geofency" - } - }, - "title": "Webhook de Geofency" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/fr.json b/homeassistant/components/geofency/.translations/fr.json deleted file mode 100644 index b390f2dab44..00000000000 --- a/homeassistant/components/geofency/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages Geofency.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonctionnalit\u00e9 Webhook dans Geofency. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer le Webhook Geofency ?", - "title": "Configurer le Webhook Geofency" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/hu.json b/homeassistant/components/geofency/.translations/hu.json deleted file mode 100644 index 85f71d74434..00000000000 --- a/homeassistant/components/geofency/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Az Home Assistantnek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l, hogy megkapja a Geofency \u00fczeneteit.", - "one_instance_allowed": "Csak egy p\u00e9ld\u00e1ny sz\u00fcks\u00e9ges." - }, - "create_entry": { - "default": "Az esem\u00e9ny Home Assistantnek val\u00f3 k\u00fcld\u00e9s\u00e9hez be kell \u00e1ll\u00edtanod a webhook funkci\u00f3t a Geofencyben. \n\n Az al\u00e1bbi inform\u00e1ci\u00f3kat haszn\u00e1ld: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Tov\u00e1bbi r\u00e9szletek a [dokument\u00e1ci\u00f3] ( {docs_url} ) linken tal\u00e1lhat\u00f3k." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Geofency Webhookot?", - "title": "A Geofency Webhook be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/it.json b/homeassistant/components/geofency/.translations/it.json deleted file mode 100644 index 1adad3825a3..00000000000 --- a/homeassistant/components/geofency/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Geofency.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai configurare la funzionalit\u00e0 webhook in Geofency.\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare il webhook di Geofency?", - "title": "Configura il webhook di Geofency" - } - }, - "title": "Webhook di Geofency" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/ko.json b/homeassistant/components/geofency/.translations/ko.json deleted file mode 100644 index 37f5ef0e76a..00000000000 --- a/homeassistant/components/geofency/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Geofency \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Geofency \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Geofency Webhook \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Geofency Webhook \uc124\uc815" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/lb.json b/homeassistant/components/geofency/.translations/lb.json deleted file mode 100644 index 490026b366d..00000000000 --- a/homeassistant/components/geofency/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Geofency Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am Geofency ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Geofency Webhook anzeriichten?", - "title": "Geofency Webhook ariichten" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/nl.json b/homeassistant/components/geofency/.translations/nl.json deleted file mode 100644 index 04aec33b5d6..00000000000 --- a/homeassistant/components/geofency/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Geofency-berichten te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Om locaties naar Home Assistant te sturen, moet u de Webhook-functie instellen in Geofency.\n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Methode: POST \n\n Zie [de documentatie]({docs_url}) voor meer informatie." - }, - "step": { - "user": { - "description": "Weet u zeker dat u de Geofency Webhook wilt instellen?", - "title": "Geofency Webhook instellen" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/no.json b/homeassistant/components/geofency/.translations/no.json deleted file mode 100644 index 431c0e16e7d..00000000000 --- a/homeassistant/components/geofency/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra Geofency.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 kunne sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i Geofency. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Geofency Webhook?", - "title": "Sett opp Geofency Webhook" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/pl.json b/homeassistant/components/geofency/.translations/pl.json deleted file mode 100644 index e72e99242c1..00000000000 --- a/homeassistant/components/geofency/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty z Geofency.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 webhook w Geofency. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Geofency?", - "title": "Konfiguracja Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/pt-BR.json b/homeassistant/components/geofency/.translations/pt-BR.json deleted file mode 100644 index 20f21df5ac8..00000000000 --- a/homeassistant/components/geofency/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens da Geofency.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no Geofency. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Geofency Webhook?", - "title": "Configurar o Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/pt.json b/homeassistant/components/geofency/.translations/pt.json deleted file mode 100644 index bc68c3ec822..00000000000 --- a/homeassistant/components/geofency/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistent precisa de ser acess\u00edvel a partir da internet para receber mensagens IFTTT.", - "one_instance_allowed": "Apenas uma inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no Geofency. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Geofency Webhook?", - "title": "Configurar o Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/ru.json b/homeassistant/components/geofency/.translations/ru.json deleted file mode 100644 index 3663ff0114c..00000000000 --- a/homeassistant/components/geofency/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Geofency.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Geofency.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Geofency?", - "title": "Geofency" - } - }, - "title": "Geofency" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/sl.json b/homeassistant/components/geofency/.translations/sl.json deleted file mode 100644 index e56d41d4f1a..00000000000 --- a/homeassistant/components/geofency/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopen prek interneta, da boste lahko prejemali Geofency sporo\u010dila.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "\u010ce \u017eelite dogodke poslati v Home Assistant, morate v Geofency-ju nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti geofency webhook?", - "title": "Nastavite Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/sv.json b/homeassistant/components/geofency/.translations/sv.json deleted file mode 100644 index 88c9709147f..00000000000 --- a/homeassistant/components/geofency/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig ifr\u00e5n internet f\u00f6r att ta emot meddelanden ifr\u00e5n Geofency.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i Geofency.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Geofency Webhook?", - "title": "Konfigurera Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/zh-Hans.json b/homeassistant/components/geofency/.translations/zh-Hans.json deleted file mode 100644 index d18d8bc8280..00000000000 --- a/homeassistant/components/geofency/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u63a5\u5165\u4e92\u8054\u7f51\u4ee5\u63a5\u6536 Geofency \u6d88\u606f\u3002", - "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e Geofency \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Geofency Webhook \u5417?", - "title": "\u8bbe\u7f6e Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/.translations/zh-Hant.json b/homeassistant/components/geofency/.translations/zh-Hant.json deleted file mode 100644 index 003a3db8bf1..00000000000 --- a/homeassistant/components/geofency/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Geofency \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Geofency \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Geofency Webhook\uff1f", - "title": "\u8a2d\u5b9a Geofency Webhook" - } - }, - "title": "Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/geofency/manifest.json b/homeassistant/components/geofency/manifest.json index c48474a2927..0fbc3044455 100644 --- a/homeassistant/components/geofency/manifest.json +++ b/homeassistant/components/geofency/manifest.json @@ -3,7 +3,6 @@ "name": "Geofency", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/geofency", - "requirements": [], "dependencies": ["webhook"], "codeowners": [] } diff --git a/homeassistant/components/geofency/strings.json b/homeassistant/components/geofency/strings.json index e67af592c16..1c6a72f27c8 100644 --- a/homeassistant/components/geofency/strings.json +++ b/homeassistant/components/geofency/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Geofency Webhook", "step": { "user": { "title": "Set up the Geofency Webhook", @@ -15,4 +14,4 @@ "default": "To send events to Home Assistant, you will need to setup the webhook feature in Geofency.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/geofency/translations/bg.json b/homeassistant/components/geofency/translations/bg.json new file mode 100644 index 00000000000..1bd9cf1a818 --- /dev/null +++ b/homeassistant/components/geofency/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Geofency.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Geofency. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Geofency Webhook?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/ca.json b/homeassistant/components/geofency/translations/ca.json new file mode 100644 index 00000000000..315b1d3be8d --- /dev/null +++ b/homeassistant/components/geofency/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Geofency.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de Geofency.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar el Webhook de Geofency?", + "title": "Configuraci\u00f3 del Webhook de Geofency" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/cs.json b/homeassistant/components/geofency/translations/cs.json new file mode 100644 index 00000000000..a91fa1cbb6f --- /dev/null +++ b/homeassistant/components/geofency/translations/cs.json @@ -0,0 +1,13 @@ +{ + "config": { + "create_entry": { + "default": "Chcete-li odes\u00edlat ud\u00e1losti do aplikace Home Assistant, mus\u00edte v aplikaci Geofency nastavit funkci webhook. \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}` \n - Metoda: POST \n\n Dal\u0161\u00ed informace viz [dokumentace]({docs_url})." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit Geofency Webhook?", + "title": "Nastavit Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/da.json b/homeassistant/components/geofency/translations/da.json new file mode 100644 index 00000000000..176ba84b768 --- /dev/null +++ b/homeassistant/components/geofency/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Geofency-meddelelser.", + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i Geofency.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Geofency Webhook?", + "title": "Ops\u00e6tning af Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/de.json b/homeassistant/components/geofency/translations/de.json new file mode 100644 index 00000000000..c585ee467aa --- /dev/null +++ b/homeassistant/components/geofency/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem internet erreichbar sein, um Nachrichten von Geofency zu erhalten.", + "one_instance_allowed": "Es ist nur eine einzige Instanz erforderlich." + }, + "create_entry": { + "default": "Um Ereignisse an den Home Assistant zu senden, musst das Webhook Feature in Geofency konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "M\u00f6chtest du den Geofency Webhook wirklich einrichten?", + "title": "Richte den Geofency Webhook ein" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/en.json b/homeassistant/components/geofency/translations/en.json new file mode 100644 index 00000000000..dad5e9c77d4 --- /dev/null +++ b/homeassistant/components/geofency/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Geofency.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup the webhook feature in Geofency.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up the Geofency Webhook?", + "title": "Set up the Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/es-419.json b/homeassistant/components/geofency/translations/es-419.json new file mode 100644 index 00000000000..bb8160ed5ef --- /dev/null +++ b/homeassistant/components/geofency/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Geofency.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en Geofency. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres montar el Webhook de Geofency?", + "title": "Configurar el Webhook de Geofency" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/es.json b/homeassistant/components/geofency/translations/es.json new file mode 100644 index 00000000000..9149d6699be --- /dev/null +++ b/homeassistant/components/geofency/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu Home Assistant debe ser accesible desde Internet para recibir mensajes de GPSLogger.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en Geofency.\n\nRellene la siguiente informaci\u00f3n:\n\n- URL: ``{webhook_url}``\n- M\u00e9todo: POST\n\nVer[la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de Geofency?", + "title": "Configurar el Webhook de Geofency" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/fr.json b/homeassistant/components/geofency/translations/fr.json new file mode 100644 index 00000000000..142f40754b9 --- /dev/null +++ b/homeassistant/components/geofency/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages Geofency.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonctionnalit\u00e9 Webhook dans Geofency. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer le Webhook Geofency ?", + "title": "Configurer le Webhook Geofency" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/hu.json b/homeassistant/components/geofency/translations/hu.json new file mode 100644 index 00000000000..026912e0d3e --- /dev/null +++ b/homeassistant/components/geofency/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Az Home Assistantnek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l, hogy megkapja a Geofency \u00fczeneteit.", + "one_instance_allowed": "Csak egy p\u00e9ld\u00e1ny sz\u00fcks\u00e9ges." + }, + "create_entry": { + "default": "Az esem\u00e9ny Home Assistantnek val\u00f3 k\u00fcld\u00e9s\u00e9hez be kell \u00e1ll\u00edtanod a webhook funkci\u00f3t a Geofencyben. \n\n Az al\u00e1bbi inform\u00e1ci\u00f3kat haszn\u00e1ld: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Tov\u00e1bbi r\u00e9szletek a [dokument\u00e1ci\u00f3] ( {docs_url} ) linken tal\u00e1lhat\u00f3k." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Geofency Webhookot?", + "title": "A Geofency Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/it.json b/homeassistant/components/geofency/translations/it.json new file mode 100644 index 00000000000..0640d351e53 --- /dev/null +++ b/homeassistant/components/geofency/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Geofency.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai configurare la funzionalit\u00e0 webhook in Geofency.\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare il webhook di Geofency?", + "title": "Configura il webhook di Geofency" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/ko.json b/homeassistant/components/geofency/translations/ko.json new file mode 100644 index 00000000000..f1ed98f50cd --- /dev/null +++ b/homeassistant/components/geofency/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Geofency \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Geofency \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Geofency Webhook \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Geofency Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/lb.json b/homeassistant/components/geofency/translations/lb.json new file mode 100644 index 00000000000..16f973e5260 --- /dev/null +++ b/homeassistant/components/geofency/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Geofency Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am Geofency ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Geofency Webhook anzeriichten?", + "title": "Geofency Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/nl.json b/homeassistant/components/geofency/translations/nl.json new file mode 100644 index 00000000000..bedf5f7efb4 --- /dev/null +++ b/homeassistant/components/geofency/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Geofency-berichten te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Om locaties naar Home Assistant te sturen, moet u de Webhook-functie instellen in Geofency.\n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Methode: POST \n\n Zie [de documentatie]({docs_url}) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet u zeker dat u de Geofency Webhook wilt instellen?", + "title": "Geofency Webhook instellen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/no.json b/homeassistant/components/geofency/translations/no.json new file mode 100644 index 00000000000..ea9e1827b63 --- /dev/null +++ b/homeassistant/components/geofency/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra Geofency.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 kunne sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i Geofency. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Geofency Webhook?", + "title": "Sett opp Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/pl.json b/homeassistant/components/geofency/translations/pl.json new file mode 100644 index 00000000000..9180d3483ef --- /dev/null +++ b/homeassistant/components/geofency/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty z Geofency.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 webhook w Geofency. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Geofency?", + "title": "Konfiguracja Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/pt-BR.json b/homeassistant/components/geofency/translations/pt-BR.json new file mode 100644 index 00000000000..1f715bf4a7a --- /dev/null +++ b/homeassistant/components/geofency/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens da Geofency.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no Geofency. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Geofency Webhook?", + "title": "Configurar o Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/pt.json b/homeassistant/components/geofency/translations/pt.json new file mode 100644 index 00000000000..c5b080f0dcd --- /dev/null +++ b/homeassistant/components/geofency/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistent precisa de ser acess\u00edvel a partir da internet para receber mensagens IFTTT.", + "one_instance_allowed": "Apenas uma inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no Geofency. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Geofency Webhook?", + "title": "Configurar o Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/ru.json b/homeassistant/components/geofency/translations/ru.json new file mode 100644 index 00000000000..dd2a20ad61c --- /dev/null +++ b/homeassistant/components/geofency/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Geofency.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Geofency.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Geofency?", + "title": "Geofency" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/sl.json b/homeassistant/components/geofency/translations/sl.json new file mode 100644 index 00000000000..ba293c8c11a --- /dev/null +++ b/homeassistant/components/geofency/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopen prek interneta, da boste lahko prejemali Geofency sporo\u010dila.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "\u010ce \u017eelite dogodke poslati v Home Assistant, morate v Geofency-ju nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti geofency webhook?", + "title": "Nastavite Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/sv.json b/homeassistant/components/geofency/translations/sv.json new file mode 100644 index 00000000000..f18a7bd25bb --- /dev/null +++ b/homeassistant/components/geofency/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig ifr\u00e5n internet f\u00f6r att ta emot meddelanden ifr\u00e5n Geofency.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i Geofency.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Geofency Webhook?", + "title": "Konfigurera Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/zh-Hans.json b/homeassistant/components/geofency/translations/zh-Hans.json new file mode 100644 index 00000000000..5be88f69e41 --- /dev/null +++ b/homeassistant/components/geofency/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u63a5\u5165\u4e92\u8054\u7f51\u4ee5\u63a5\u6536 Geofency \u6d88\u606f\u3002", + "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e Geofency \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Geofency Webhook \u5417?", + "title": "\u8bbe\u7f6e Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geofency/translations/zh-Hant.json b/homeassistant/components/geofency/translations/zh-Hant.json new file mode 100644 index 00000000000..4bf9f6b7158 --- /dev/null +++ b/homeassistant/components/geofency/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Geofency \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Geofency \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Geofency Webhook\uff1f", + "title": "\u8a2d\u5b9a Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/bg.json b/homeassistant/components/geonetnz_quakes/.translations/bg.json deleted file mode 100644 index c907a6bafd9..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/bg.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0444\u0438\u043b\u0442\u044a\u0440\u0430 \u0441\u0438." - } - }, - "title": "GeoNet NZ \u0417\u0435\u043c\u0435\u0442\u0440\u0435\u0441\u0435\u043d\u0438\u044f" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/ca.json b/homeassistant/components/geonetnz_quakes/.translations/ca.json deleted file mode 100644 index c422c1768a7..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/ca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La ubicaci\u00f3 ja est\u00e0 configurada." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radi" - }, - "title": "Introdueix els detalls del filtre." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/da.json b/homeassistant/components/geonetnz_quakes/.translations/da.json deleted file mode 100644 index 15847cdadc9..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/da.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "Udfyld dine filteroplysninger." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/de.json b/homeassistant/components/geonetnz_quakes/.translations/de.json deleted file mode 100644 index a9d3c8dca79..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/de.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Der Standort ist bereits konfiguriert." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "F\u00fclle deine Filterdaten aus." - } - }, - "title": "GeoNet NZ Erdbeben" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/en.json b/homeassistant/components/geonetnz_quakes/.translations/en.json deleted file mode 100644 index 41fafa5763b..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/en.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Location is already configured." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "Fill in your filter details." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/es.json b/homeassistant/components/geonetnz_quakes/.translations/es.json deleted file mode 100644 index daab68f1111..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/es.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La ubicaci\u00f3n ya est\u00e1 configurada." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radio" - }, - "title": "Complete todos los campos requeridos" - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/fr.json b/homeassistant/components/geonetnz_quakes/.translations/fr.json deleted file mode 100644 index 0a6fb793628..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'emplacement est d\u00e9j\u00e0 configur\u00e9." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Rayon" - }, - "title": "Remplissez les d\u00e9tails de votre filtre." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/it.json b/homeassistant/components/geonetnz_quakes/.translations/it.json deleted file mode 100644 index 2b2cac02737..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/it.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La posizione \u00e8 gi\u00e0 configurata." - }, - "step": { - "user": { - "data": { - "mmi": "Intensit\u00e0 in Scala Mercalli Modificata", - "radius": "Raggio" - }, - "title": "Inserisci i tuoi dettagli del filtro." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/ko.json b/homeassistant/components/geonetnz_quakes/.translations/ko.json deleted file mode 100644 index 30c534b18e0..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/ko.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc704\uce58\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "\ubc18\uacbd" - }, - "title": "\ud544\ud130 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/lb.json b/homeassistant/components/geonetnz_quakes/.translations/lb.json deleted file mode 100644 index a4cbecc5818..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/lb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Standuert ass scho konfigu\u00e9iert." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "F\u00ebllt \u00e4r Filter D\u00e9tailer aus." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/nl.json b/homeassistant/components/geonetnz_quakes/.translations/nl.json deleted file mode 100644 index 4495dee078d..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/nl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Straal" - }, - "title": "Vul uw filtergegevens in." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/no.json b/homeassistant/components/geonetnz_quakes/.translations/no.json deleted file mode 100644 index 82160a4295f..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/no.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Plasseringen er allerede konfigurert." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "Fyll ut filterdetaljene." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/pl.json b/homeassistant/components/geonetnz_quakes/.translations/pl.json deleted file mode 100644 index b9763b61fcc..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/pl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Lokalizacja jest ju\u017c skonfigurowana." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Promie\u0144" - }, - "title": "Wprowad\u017a szczeg\u00f3\u0142owe dane filtra." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/pt-BR.json b/homeassistant/components/geonetnz_quakes/.translations/pt-BR.json deleted file mode 100644 index 1dcf264b3f6..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/pt-BR.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radius" - }, - "title": "Preencha os detalhes do filtro." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/ru.json b/homeassistant/components/geonetnz_quakes/.translations/ru.json deleted file mode 100644 index 0b3d23bfa3b..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/ru.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" - }, - "title": "GeoNet NZ Quakes" - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/sl.json b/homeassistant/components/geonetnz_quakes/.translations/sl.json deleted file mode 100644 index 03f265f2719..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/sl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Lokacija je \u017ee nastavljena." - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radij" - }, - "title": "Izpolnite podrobnosti filtra." - } - }, - "title": "GeoNet NZ Potresi" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/sv.json b/homeassistant/components/geonetnz_quakes/.translations/sv.json deleted file mode 100644 index 3e27c340808..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/sv.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "Radie" - }, - "title": "Fyll i dina filterdetaljer." - } - }, - "title": "GeoNet NZ Quakes" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/zh-Hant.json b/homeassistant/components/geonetnz_quakes/.translations/zh-Hant.json deleted file mode 100644 index f46e74a35bc..00000000000 --- a/homeassistant/components/geonetnz_quakes/.translations/zh-Hant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4f4d\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "step": { - "user": { - "data": { - "mmi": "MMI", - "radius": "\u534a\u5f91" - }, - "title": "\u586b\u5beb\u904e\u6ffe\u5668\u8cc7\u8a0a\u3002" - } - }, - "title": "\u7d10\u897f\u862d GeoNet \u5730\u9707\u9810\u8b66" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/manifest.json b/homeassistant/components/geonetnz_quakes/manifest.json index 613af313393..1e61d526047 100644 --- a/homeassistant/components/geonetnz_quakes/manifest.json +++ b/homeassistant/components/geonetnz_quakes/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/geonetnz_quakes", "requirements": ["aio_geojson_geonetnz_quakes==0.12"], - "dependencies": [], "codeowners": ["@exxamalte"], "quality_scale": "platinum" -} \ No newline at end of file +} diff --git a/homeassistant/components/geonetnz_quakes/strings.json b/homeassistant/components/geonetnz_quakes/strings.json index 9c5ea291897..fe328c05603 100644 --- a/homeassistant/components/geonetnz_quakes/strings.json +++ b/homeassistant/components/geonetnz_quakes/strings.json @@ -1,17 +1,11 @@ { "config": { - "title": "GeoNet NZ Quakes", "step": { "user": { "title": "Fill in your filter details.", - "data": { - "radius": "Radius", - "mmi": "MMI" - } + "data": { "radius": "Radius", "mmi": "MMI" } } }, - "abort": { - "already_configured": "Location is already configured." - } + "abort": { "already_configured": "Location is already configured." } } } diff --git a/homeassistant/components/geonetnz_quakes/translations/bg.json b/homeassistant/components/geonetnz_quakes/translations/bg.json new file mode 100644 index 00000000000..8b4d3e91f2c --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/bg.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0444\u0438\u043b\u0442\u044a\u0440\u0430 \u0441\u0438." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/ca.json b/homeassistant/components/geonetnz_quakes/translations/ca.json new file mode 100644 index 00000000000..e97142a6e3f --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/ca.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "La ubicaci\u00f3 ja est\u00e0 configurada." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radi" + }, + "title": "Introdueix els detalls del filtre." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/da.json b/homeassistant/components/geonetnz_quakes/translations/da.json new file mode 100644 index 00000000000..a1ef4d41469 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/da.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "Udfyld dine filteroplysninger." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/de.json b/homeassistant/components/geonetnz_quakes/translations/de.json new file mode 100644 index 00000000000..583712c6c4e --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/de.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Der Standort ist bereits konfiguriert." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "F\u00fclle deine Filterdaten aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/en.json b/homeassistant/components/geonetnz_quakes/translations/en.json new file mode 100644 index 00000000000..68f73bcf089 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/en.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Location is already configured." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "Fill in your filter details." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/es.json b/homeassistant/components/geonetnz_quakes/translations/es.json new file mode 100644 index 00000000000..0de80cf346a --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/es.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "La ubicaci\u00f3n ya est\u00e1 configurada." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radio" + }, + "title": "Complete todos los campos requeridos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/fr.json b/homeassistant/components/geonetnz_quakes/translations/fr.json new file mode 100644 index 00000000000..e448f9993bf --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/fr.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "L'emplacement est d\u00e9j\u00e0 configur\u00e9." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Rayon" + }, + "title": "Remplissez les d\u00e9tails de votre filtre." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/hu.json b/homeassistant/components/geonetnz_quakes/translations/hu.json similarity index 100% rename from homeassistant/components/geonetnz_quakes/.translations/hu.json rename to homeassistant/components/geonetnz_quakes/translations/hu.json diff --git a/homeassistant/components/geonetnz_quakes/translations/it.json b/homeassistant/components/geonetnz_quakes/translations/it.json new file mode 100644 index 00000000000..c07f04cdb64 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/it.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "La posizione \u00e8 gi\u00e0 configurata." + }, + "step": { + "user": { + "data": { + "mmi": "Intensit\u00e0 in Scala Mercalli Modificata", + "radius": "Raggio" + }, + "title": "Inserisci i tuoi dettagli del filtro." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/ko.json b/homeassistant/components/geonetnz_quakes/translations/ko.json new file mode 100644 index 00000000000..b231629e856 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/ko.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "\uc704\uce58\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "\ubc18\uacbd" + }, + "title": "\ud544\ud130 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/lb.json b/homeassistant/components/geonetnz_quakes/translations/lb.json new file mode 100644 index 00000000000..482330099b3 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/lb.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Standuert ass scho konfigu\u00e9iert." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "F\u00ebllt \u00e4r Filter D\u00e9tailer aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/nl.json b/homeassistant/components/geonetnz_quakes/translations/nl.json new file mode 100644 index 00000000000..865860a5adf --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/nl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Locatie is al geconfigureerd." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Straal" + }, + "title": "Vul uw filtergegevens in." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/nn.json b/homeassistant/components/geonetnz_quakes/translations/nn.json similarity index 100% rename from homeassistant/components/geonetnz_quakes/.translations/nn.json rename to homeassistant/components/geonetnz_quakes/translations/nn.json diff --git a/homeassistant/components/geonetnz_quakes/translations/no.json b/homeassistant/components/geonetnz_quakes/translations/no.json new file mode 100644 index 00000000000..b14e0ded378 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/no.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Plasseringen er allerede konfigurert." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "Fyll ut filterdetaljene." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/pl.json b/homeassistant/components/geonetnz_quakes/translations/pl.json new file mode 100644 index 00000000000..80d891a441a --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/pl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Lokalizacja jest ju\u017c skonfigurowana." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Promie\u0144" + }, + "title": "Wprowad\u017a szczeg\u00f3\u0142owe dane filtra." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/pt-BR.json b/homeassistant/components/geonetnz_quakes/translations/pt-BR.json new file mode 100644 index 00000000000..9f08d6b820c --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/pt-BR.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radius" + }, + "title": "Preencha os detalhes do filtro." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/ru.json b/homeassistant/components/geonetnz_quakes/translations/ru.json new file mode 100644 index 00000000000..7ee4f64431e --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/ru.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" + }, + "title": "GeoNet NZ Quakes" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/sl.json b/homeassistant/components/geonetnz_quakes/translations/sl.json new file mode 100644 index 00000000000..b1e20711463 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/sl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Lokacija je \u017ee nastavljena." + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radij" + }, + "title": "Izpolnite podrobnosti filtra." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/translations/sv.json b/homeassistant/components/geonetnz_quakes/translations/sv.json new file mode 100644 index 00000000000..b1040e9bc23 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/sv.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "Radie" + }, + "title": "Fyll i dina filterdetaljer." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_quakes/.translations/zh-Hans.json b/homeassistant/components/geonetnz_quakes/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/geonetnz_quakes/.translations/zh-Hans.json rename to homeassistant/components/geonetnz_quakes/translations/zh-Hans.json diff --git a/homeassistant/components/geonetnz_quakes/translations/zh-Hant.json b/homeassistant/components/geonetnz_quakes/translations/zh-Hant.json new file mode 100644 index 00000000000..1d697401b95 --- /dev/null +++ b/homeassistant/components/geonetnz_quakes/translations/zh-Hant.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "\u4f4d\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "step": { + "user": { + "data": { + "mmi": "MMI", + "radius": "\u534a\u5f91" + }, + "title": "\u586b\u5beb\u904e\u6ffe\u5668\u8cc7\u8a0a\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/bg.json b/homeassistant/components/geonetnz_volcano/.translations/bg.json deleted file mode 100644 index f895d282902..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/bg.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u043e" - }, - "step": { - "user": { - "data": { - "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0444\u0438\u043b\u0442\u044a\u0440\u0430 \u0441\u0438." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/ca.json b/homeassistant/components/geonetnz_volcano/.translations/ca.json deleted file mode 100644 index 6874256e5fe..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/ca.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Ubicaci\u00f3 ja registrada" - }, - "step": { - "user": { - "data": { - "radius": "Radi" - }, - "title": "Introducci\u00f3 dels detalls del filtre." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/da.json b/homeassistant/components/geonetnz_volcano/.translations/da.json deleted file mode 100644 index a8c238a60b0..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/da.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Lokalitet allerede registreret" - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "Udfyld dine filteroplysninger." - } - }, - "title": "GeoNet NZ vulkan" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/de.json b/homeassistant/components/geonetnz_volcano/.translations/de.json deleted file mode 100644 index 59396e3a440..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/de.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Standort bereits registriert" - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "F\u00fclle deine Filterangaben aus." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/en.json b/homeassistant/components/geonetnz_volcano/.translations/en.json deleted file mode 100644 index 1175597908e..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Location already registered" - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "Fill in your filter details." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/es.json b/homeassistant/components/geonetnz_volcano/.translations/es.json deleted file mode 100644 index c6b92e83089..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Lugar ya registrado" - }, - "step": { - "user": { - "data": { - "radius": "Radio" - }, - "title": "Complete los detalles de su filtro." - } - }, - "title": "GeoNet NZ Volc\u00e1n" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/fr.json b/homeassistant/components/geonetnz_volcano/.translations/fr.json deleted file mode 100644 index c93ae906a46..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/fr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Emplacement d\u00e9j\u00e0 enregistr\u00e9" - }, - "step": { - "user": { - "data": { - "radius": "Rayon" - }, - "title": "Remplissez les d\u00e9tails de votre filtre." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/hu.json b/homeassistant/components/geonetnz_volcano/.translations/hu.json deleted file mode 100644 index e53a91bcb03..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/hu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "A hely m\u00e1r regisztr\u00e1lt" - }, - "step": { - "user": { - "data": { - "radius": "Sug\u00e1r" - }, - "title": "T\u00f6ltse ki a sz\u0171r\u0151 adatait." - } - }, - "title": "GeoNet NZ vulk\u00e1n" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/it.json b/homeassistant/components/geonetnz_volcano/.translations/it.json deleted file mode 100644 index 85bfc7297ee..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Localit\u00e0 gi\u00e0 registrata" - }, - "step": { - "user": { - "data": { - "radius": "Raggio" - }, - "title": "Inserisci i tuoi dettagli del filtro." - } - }, - "title": "GeoNet NZ Vulcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/ko.json b/homeassistant/components/geonetnz_volcano/.translations/ko.json deleted file mode 100644 index d19091e75e8..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/ko.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\uc704\uce58\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "radius": "\ubc18\uacbd" - }, - "title": "\ud544\ud130 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/lb.json b/homeassistant/components/geonetnz_volcano/.translations/lb.json deleted file mode 100644 index a7ad17e6bd5..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/lb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Standuert ass scho registr\u00e9iert" - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "F\u00ebllt \u00e4r Filter D\u00e9tailer aus." - } - }, - "title": "GeoNet NZ Vulkan" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/nl.json b/homeassistant/components/geonetnz_volcano/.translations/nl.json deleted file mode 100644 index 44d814b9db2..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/nl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Locatie al geregistreerd" - }, - "step": { - "user": { - "data": { - "radius": "Straal" - }, - "title": "Vul uw filtergegevens in." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/no.json b/homeassistant/components/geonetnz_volcano/.translations/no.json deleted file mode 100644 index d66e0eb6d7d..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/no.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Beliggenhet er allerede registrert" - }, - "step": { - "user": { - "data": { - "radius": "Radius" - }, - "title": "Fyll ut filterdetaljene." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/pl.json b/homeassistant/components/geonetnz_volcano/.translations/pl.json deleted file mode 100644 index c51a69356a1..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/pl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Lokalizacja jest ju\u017c zarejestrowana." - }, - "step": { - "user": { - "data": { - "radius": "Promie\u0144" - }, - "title": "Wprowad\u017a szczeg\u00f3\u0142owe dane filtra." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/ro.json b/homeassistant/components/geonetnz_volcano/.translations/ro.json deleted file mode 100644 index 4c0cd317d48..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/ro.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "radius": "Raz\u0103" - }, - "title": "Completa\u021bi detaliile filtrului." - } - }, - "title": "Vulcanul GeoNet NZ" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/ru.json b/homeassistant/components/geonetnz_volcano/.translations/ru.json deleted file mode 100644 index 6e7411f28b9..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/ru.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\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." - }, - "step": { - "user": { - "data": { - "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" - }, - "title": "GeoNet NZ Volcano" - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/sl.json b/homeassistant/components/geonetnz_volcano/.translations/sl.json deleted file mode 100644 index e31f473c26f..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/sl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Lokacija je \u017ee registrirana" - }, - "step": { - "user": { - "data": { - "radius": "Radij" - }, - "title": "Izpolnite podrobnosti filtra." - } - }, - "title": "GeoNet NZ vulkan" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/sv.json b/homeassistant/components/geonetnz_volcano/.translations/sv.json deleted file mode 100644 index 35e7e24c926..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/sv.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Plats redan registrerad" - }, - "step": { - "user": { - "data": { - "radius": "Radie" - }, - "title": "Fyll i dina filterdetaljer." - } - }, - "title": "GeoNet NZ Volcano" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/zh-Hant.json b/homeassistant/components/geonetnz_volcano/.translations/zh-Hant.json deleted file mode 100644 index 0f74841fd7b..00000000000 --- a/homeassistant/components/geonetnz_volcano/.translations/zh-Hant.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u5ea7\u6a19\u5df2\u8a3b\u518a" - }, - "step": { - "user": { - "data": { - "radius": "\u534a\u5f91" - }, - "title": "\u586b\u5beb\u904e\u6ffe\u5668\u8cc7\u8a0a\u3002" - } - }, - "title": "\u7d10\u897f\u862d GeoNet \u706b\u5c71\u9810\u8b66" - } -} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/config_flow.py b/homeassistant/components/geonetnz_volcano/config_flow.py index 7c079c432dd..c19e7d4b303 100644 --- a/homeassistant/components/geonetnz_volcano/config_flow.py +++ b/homeassistant/components/geonetnz_volcano/config_flow.py @@ -24,10 +24,10 @@ _LOGGER = logging.getLogger(__name__) @callback def configured_instances(hass): """Return a set of configured GeoNet NZ Volcano instances.""" - return set( + return { f"{entry.data[CONF_LATITUDE]}, {entry.data[CONF_LONGITUDE]}" for entry in hass.config_entries.async_entries(DOMAIN) - ) + } class GeonetnzVolcanoFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/geonetnz_volcano/manifest.json b/homeassistant/components/geonetnz_volcano/manifest.json index e5153e9675e..13e1e9baf3e 100644 --- a/homeassistant/components/geonetnz_volcano/manifest.json +++ b/homeassistant/components/geonetnz_volcano/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/geonetnz_volcano", "requirements": ["aio_geojson_geonetnz_volcano==0.5"], - "dependencies": [], "codeowners": ["@exxamalte"] } diff --git a/homeassistant/components/geonetnz_volcano/strings.json b/homeassistant/components/geonetnz_volcano/strings.json index 93ec8603d03..d364d76b2ed 100644 --- a/homeassistant/components/geonetnz_volcano/strings.json +++ b/homeassistant/components/geonetnz_volcano/strings.json @@ -1,16 +1,11 @@ { "config": { - "title": "GeoNet NZ Volcano", "step": { "user": { "title": "Fill in your filter details.", - "data": { - "radius": "Radius" - } + "data": { "radius": "Radius" } } }, - "error": { - "identifier_exists": "Location already registered" - } + "error": { "identifier_exists": "Location already registered" } } } diff --git a/homeassistant/components/geonetnz_volcano/translations/bg.json b/homeassistant/components/geonetnz_volcano/translations/bg.json new file mode 100644 index 00000000000..e50751ad49e --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/bg.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u043e" + }, + "step": { + "user": { + "data": { + "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0437\u0430 \u0444\u0438\u043b\u0442\u044a\u0440\u0430 \u0441\u0438." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/ca.json b/homeassistant/components/geonetnz_volcano/translations/ca.json new file mode 100644 index 00000000000..8af45618a17 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/ca.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Ubicaci\u00f3 ja registrada" + }, + "step": { + "user": { + "data": { + "radius": "Radi" + }, + "title": "Introducci\u00f3 dels detalls del filtre." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/da.json b/homeassistant/components/geonetnz_volcano/translations/da.json new file mode 100644 index 00000000000..b83162e0b35 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/da.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Lokalitet allerede registreret" + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "Udfyld dine filteroplysninger." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/de.json b/homeassistant/components/geonetnz_volcano/translations/de.json new file mode 100644 index 00000000000..8c3cd960b4d --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/de.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Standort bereits registriert" + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "F\u00fclle deine Filterangaben aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/en.json b/homeassistant/components/geonetnz_volcano/translations/en.json new file mode 100644 index 00000000000..fe24b6dcea0 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/en.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Location already registered" + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "Fill in your filter details." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/es.json b/homeassistant/components/geonetnz_volcano/translations/es.json new file mode 100644 index 00000000000..c26033e1861 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/es.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Lugar ya registrado" + }, + "step": { + "user": { + "data": { + "radius": "Radio" + }, + "title": "Complete los detalles de su filtro." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/fr.json b/homeassistant/components/geonetnz_volcano/translations/fr.json new file mode 100644 index 00000000000..2692768910c --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/fr.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Emplacement d\u00e9j\u00e0 enregistr\u00e9" + }, + "step": { + "user": { + "data": { + "radius": "Rayon" + }, + "title": "Remplissez les d\u00e9tails de votre filtre." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/hu.json b/homeassistant/components/geonetnz_volcano/translations/hu.json new file mode 100644 index 00000000000..e1d2bdb9f9e --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/hu.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "A hely m\u00e1r regisztr\u00e1lt" + }, + "step": { + "user": { + "data": { + "radius": "Sug\u00e1r" + }, + "title": "T\u00f6ltse ki a sz\u0171r\u0151 adatait." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/it.json b/homeassistant/components/geonetnz_volcano/translations/it.json new file mode 100644 index 00000000000..c566cdfb81b --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/it.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Localit\u00e0 gi\u00e0 registrata" + }, + "step": { + "user": { + "data": { + "radius": "Raggio" + }, + "title": "Inserisci i tuoi dettagli del filtro." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/ko.json b/homeassistant/components/geonetnz_volcano/translations/ko.json new file mode 100644 index 00000000000..9ee235ea2b6 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/ko.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "\uc704\uce58\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "radius": "\ubc18\uacbd" + }, + "title": "\ud544\ud130 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/lb.json b/homeassistant/components/geonetnz_volcano/translations/lb.json new file mode 100644 index 00000000000..0d5108982b6 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/lb.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Standuert ass scho registr\u00e9iert" + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "F\u00ebllt \u00e4r Filter D\u00e9tailer aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/nl.json b/homeassistant/components/geonetnz_volcano/translations/nl.json new file mode 100644 index 00000000000..73c7c1eaab3 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/nl.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Locatie al geregistreerd" + }, + "step": { + "user": { + "data": { + "radius": "Straal" + }, + "title": "Vul uw filtergegevens in." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/no.json b/homeassistant/components/geonetnz_volcano/translations/no.json new file mode 100644 index 00000000000..17ce4a32b40 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/no.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Beliggenhet er allerede registrert" + }, + "step": { + "user": { + "data": { + "radius": "Radius" + }, + "title": "Fyll ut filterdetaljene." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/pl.json b/homeassistant/components/geonetnz_volcano/translations/pl.json new file mode 100644 index 00000000000..23a5640ae6f --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/pl.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Lokalizacja jest ju\u017c zarejestrowana." + }, + "step": { + "user": { + "data": { + "radius": "Promie\u0144" + }, + "title": "Wprowad\u017a szczeg\u00f3\u0142owe dane filtra." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/.translations/pt-BR.json b/homeassistant/components/geonetnz_volcano/translations/pt-BR.json similarity index 100% rename from homeassistant/components/geonetnz_volcano/.translations/pt-BR.json rename to homeassistant/components/geonetnz_volcano/translations/pt-BR.json diff --git a/homeassistant/components/geonetnz_volcano/translations/pt.json b/homeassistant/components/geonetnz_volcano/translations/pt.json new file mode 100644 index 00000000000..98180e11248 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "radius": "Raio" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/ro.json b/homeassistant/components/geonetnz_volcano/translations/ro.json new file mode 100644 index 00000000000..904bcd68310 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/ro.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "radius": "Raz\u0103" + }, + "title": "Completa\u021bi detaliile filtrului." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/ru.json b/homeassistant/components/geonetnz_volcano/translations/ru.json new file mode 100644 index 00000000000..33a7f90b6a7 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/ru.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "\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." + }, + "step": { + "user": { + "data": { + "radius": "\u0420\u0430\u0434\u0438\u0443\u0441" + }, + "title": "GeoNet NZ Volcano" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/sl.json b/homeassistant/components/geonetnz_volcano/translations/sl.json new file mode 100644 index 00000000000..885c41957f7 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/sl.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Lokacija je \u017ee registrirana" + }, + "step": { + "user": { + "data": { + "radius": "Radij" + }, + "title": "Izpolnite podrobnosti filtra." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/sv.json b/homeassistant/components/geonetnz_volcano/translations/sv.json new file mode 100644 index 00000000000..3abddb78c68 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/sv.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "Plats redan registrerad" + }, + "step": { + "user": { + "data": { + "radius": "Radie" + }, + "title": "Fyll i dina filterdetaljer." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/zh-Hant.json b/homeassistant/components/geonetnz_volcano/translations/zh-Hant.json new file mode 100644 index 00000000000..a587c9c0fd4 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/zh-Hant.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "identifier_exists": "\u5ea7\u6a19\u5df2\u8a3b\u518a" + }, + "step": { + "user": { + "data": { + "radius": "\u534a\u5f91" + }, + "title": "\u586b\u5beb\u904e\u6ffe\u5668\u8cc7\u8a0a\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/ca.json b/homeassistant/components/gios/.translations/ca.json deleted file mode 100644 index dadd38c24ae..00000000000 --- a/homeassistant/components/gios/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La integraci\u00f3 GIO\u015a per a aquesta estaci\u00f3 ja est\u00e0 configurada." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar al servidor de GIO\u015a.", - "invalid_sensors_data": "Les dades dels sensors d'aquesta estaci\u00f3 de mesura s\u00f3n inv\u00e0lides.", - "wrong_station_id": "L'ID de l'estaci\u00f3 de mesura \u00e9s incorrecte." - }, - "step": { - "user": { - "data": { - "name": "Nom de la integraci\u00f3", - "station_id": "ID de l'estaci\u00f3 de mesura" - }, - "description": "Integraci\u00f3 de mesura de qualitat de l\u2019aire GIO\u015a (Polish Chief Inspectorate Of Environmental Protection). Si necessites ajuda amb la configuraci\u00f3, fes un cop d'ull a: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/da.json b/homeassistant/components/gios/.translations/da.json deleted file mode 100644 index bd0e947f1dc..00000000000 --- a/homeassistant/components/gios/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a-integration for denne m\u00e5lestation er allerede konfigureret." - }, - "error": { - "cannot_connect": "Kan ikke oprette forbindelse til GIO\u015a-serveren.", - "invalid_sensors_data": "Ugyldige sensordata for denne m\u00e5lestation.", - "wrong_station_id": "M\u00e5lestationens ID er ikke korrekt." - }, - "step": { - "user": { - "data": { - "name": "Navn p\u00e5 integrationen", - "station_id": "ID for m\u00e5lestationen" - }, - "description": "Ops\u00e6t GIO\u015a (polsk inspektorat for milj\u00f8beskyttelse) luftkvalitet-integration. Hvis du har brug for hj\u00e6lp med konfigurationen, kig her: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/de.json b/homeassistant/components/gios/.translations/de.json deleted file mode 100644 index 5fd36f7a9fb..00000000000 --- a/homeassistant/components/gios/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a integration f\u00fcr diese Messstation ist bereits konfiguriert. " - }, - "error": { - "cannot_connect": "Es kann keine Verbindung zum GIO\u015a-Server hergestellt werden.", - "invalid_sensors_data": "Ung\u00fcltige Sensordaten f\u00fcr diese Messstation.", - "wrong_station_id": "ID der Messstation ist nicht korrekt." - }, - "step": { - "user": { - "data": { - "name": "Name der Integration", - "station_id": "ID der Messstation" - }, - "description": "Einrichtung von GIO\u015a (Polnische Hauptinspektion f\u00fcr Umweltschutz) Integration der Luftqualit\u00e4t. Wenn du Hilfe bei der Konfiguration ben\u00f6tigst, schaue hier: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polnische Hauptinspektion f\u00fcr Umweltschutz)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/en.json b/homeassistant/components/gios/.translations/en.json deleted file mode 100644 index 0a85aaa9d15..00000000000 --- a/homeassistant/components/gios/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a integration for this measuring station is already configured." - }, - "error": { - "cannot_connect": "Cannot connect to the GIO\u015a server.", - "invalid_sensors_data": "Invalid sensors' data for this measuring station.", - "wrong_station_id": "ID of the measuring station is not correct." - }, - "step": { - "user": { - "data": { - "name": "Name of the integration", - "station_id": "ID of the measuring station" - }, - "description": "Set up GIO\u015a (Polish Chief Inspectorate Of Environmental Protection) air quality integration. If you need help with the configuration have a look here: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/es.json b/homeassistant/components/gios/.translations/es.json deleted file mode 100644 index fb9eead7d2c..00000000000 --- a/homeassistant/components/gios/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La integraci\u00f3n de GIO\u015a para esta estaci\u00f3n de medici\u00f3n ya est\u00e1 configurada." - }, - "error": { - "cannot_connect": "No se puede conectar al servidor GIO\u015a.", - "invalid_sensors_data": "Datos de sensores no v\u00e1lidos para esta estaci\u00f3n de medici\u00f3n.", - "wrong_station_id": "El ID de la estaci\u00f3n de medici\u00f3n no es correcta." - }, - "step": { - "user": { - "data": { - "name": "Nombre de la integraci\u00f3n", - "station_id": "ID de la estaci\u00f3n de medici\u00f3n" - }, - "description": "Configurar la integraci\u00f3n de la calidad del aire GIO\u015a (Inspecci\u00f3n Jefe de Protecci\u00f3n Ambiental de Polonia). Si necesita ayuda con la configuraci\u00f3n, eche un vistazo aqu\u00ed: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Inspecci\u00f3n Jefe de Protecci\u00f3n del Medio Ambiente de Polonia)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/fr.json b/homeassistant/components/gios/.translations/fr.json deleted file mode 100644 index 3e870448659..00000000000 --- a/homeassistant/components/gios/.translations/fr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'int\u00e9gration GIO\u015a pour cette station de mesure est d\u00e9j\u00e0 configur\u00e9e." - }, - "error": { - "cannot_connect": "Impossible de se connecter au serveur GIOS", - "invalid_sensors_data": "Donn\u00e9es des capteurs non valides pour cette station de mesure.", - "wrong_station_id": "L'identifiant de la station de mesure n'est pas correct." - }, - "step": { - "user": { - "data": { - "name": "Nom de l'int\u00e9gration", - "station_id": "Identifiant de la station de mesure" - }, - "description": "Mettre en place l'int\u00e9gration de la qualit\u00e9 de l'air GIO\u015a (Inspection g\u00e9n\u00e9rale polonaise de la protection de l'environnement). Si vous avez besoin d'aide pour la configuration, regardez ici: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Inspection g\u00e9n\u00e9rale polonaise de la protection de l'environnement)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/hu.json b/homeassistant/components/gios/.translations/hu.json deleted file mode 100644 index 75fcb2088a5..00000000000 --- a/homeassistant/components/gios/.translations/hu.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A GIO\u015a integr\u00e1ci\u00f3 ehhez a m\u00e9r\u0151\u00e1llom\u00e1shoz m\u00e1r konfigur\u00e1lva van." - }, - "error": { - "cannot_connect": "Nem lehet csatlakozni a GIO\u015a szerverhez.", - "invalid_sensors_data": "\u00c9rv\u00e9nytelen \u00e9rz\u00e9kel\u0151k adatai ehhez a m\u00e9r\u0151\u00e1llom\u00e1shoz.", - "wrong_station_id": "A m\u00e9r\u0151\u00e1llom\u00e1s azonos\u00edt\u00f3ja nem megfelel\u0151." - }, - "step": { - "user": { - "data": { - "name": "Az integr\u00e1ci\u00f3 neve", - "station_id": "A m\u00e9r\u0151\u00e1llom\u00e1s azonos\u00edt\u00f3ja" - }, - "description": "A GIO\u015a (lengyel k\u00f6rnyezetv\u00e9delmi f\u0151fel\u00fcgyel\u0151) leveg\u0151min\u0151s\u00e9gi integr\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa. Ha seg\u00edts\u00e9gre van sz\u00fcks\u00e9ged a konfigur\u00e1ci\u00f3val kapcsolatban, l\u00e1togass ide: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Lengyel K\u00f6rnyezetv\u00e9delmi F\u0151fel\u00fcgyel\u0151s\u00e9g)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/it.json b/homeassistant/components/gios/.translations/it.json deleted file mode 100644 index b3d1b9a71cf..00000000000 --- a/homeassistant/components/gios/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'integrazione GIO\u015a per questa stazione di misurazione \u00e8 gi\u00e0 configurata." - }, - "error": { - "cannot_connect": "Impossibile connettersi al server GIO\u015a.", - "invalid_sensors_data": "Dati dei sensori non validi per questa stazione di misura.", - "wrong_station_id": "L'ID della stazione di misura non \u00e8 corretto." - }, - "step": { - "user": { - "data": { - "name": "Nome dell'integrazione", - "station_id": "ID della stazione di misura" - }, - "description": "Impostare l'integrazione della qualit\u00e0 dell'aria GIO\u015a (Ispettorato capo polacco di protezione ambientale). Se hai bisogno di aiuto con la configurazione dai un'occhiata qui: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Ispettorato capo polacco di protezione ambientale)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/ko.json b/homeassistant/components/gios/.translations/ko.json deleted file mode 100644 index cc338a82e16..00000000000 --- a/homeassistant/components/gios/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc5d0 \ub300\ud55c GIO\u015a \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "cannot_connect": "GIO\u015a \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "invalid_sensors_data": "\uc774 \uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc5d0 \ub300\ud55c \uc13c\uc11c \ub370\uc774\ud130\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "wrong_station_id": "\uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc758 ID \uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "name": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc758 \uc774\ub984", - "station_id": "\uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc758 ID" - }, - "description": "\ud3f4\ub780\ub4dc \ud658\uacbd\uccad (GIO\u015a) \ub300\uae30\uc9c8 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. \uad6c\uc131\uc5d0 \ub3c4\uc6c0\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 https://www.home-assistant.io/integrations/gios \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", - "title": "\ud3f4\ub780\ub4dc \ud658\uacbd\uccad (GIO\u015a)" - } - }, - "title": "\ud3f4\ub780\ub4dc \ud658\uacbd\uccad (GIO\u015a)" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/lb.json b/homeassistant/components/gios/.translations/lb.json deleted file mode 100644 index 3b23ba5eee5..00000000000 --- a/homeassistant/components/gios/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a Integratioun fir d\u00ebs Miess Statioun ass scho konfigur\u00e9iert." - }, - "error": { - "cannot_connect": "Konnt sech net mam GIO\u015a Server verbannen.", - "invalid_sensors_data": "Ong\u00eblteg Sensor Donn\u00e9e\u00eb fir d\u00ebs Miess Statioun", - "wrong_station_id": "ID vun der Miess Statioun ass net korrekt." - }, - "step": { - "user": { - "data": { - "name": "Numm vun der Integratioun", - "station_id": "ID vun der Miess Statioun" - }, - "description": "GIO\u015a (Polnesch Chefinspektorat vum \u00cbmweltschutz) Loft Qualit\u00e9it Integratioun ariichten. Fir w\u00e9ider H\u00ebllef mat der Konfiuratioun kuckt hei: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polnesch Chefinspektorat vum \u00cbmweltschutz)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/nl.json b/homeassistant/components/gios/.translations/nl.json deleted file mode 100644 index eb487681838..00000000000 --- a/homeassistant/components/gios/.translations/nl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a-integratie voor dit meetstation is al geconfigureerd." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met de GIO\u015a-server.", - "invalid_sensors_data": "Ongeldige sensorgegevens voor dit meetstation.", - "wrong_station_id": "ID van het meetstation is niet correct." - }, - "step": { - "user": { - "data": { - "name": "Naam van de integratie", - "station_id": "ID van het meetstation" - }, - "description": "GIO\u015a (Poolse hoofdinspectie van milieubescherming) luchtkwaliteitintegratie instellen. Als u hulp nodig hebt bij de configuratie, kijk dan hier: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Poolse hoofdinspectie van milieubescherming)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/no.json b/homeassistant/components/gios/.translations/no.json deleted file mode 100644 index 9842ae67a4b..00000000000 --- a/homeassistant/components/gios/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a-integrasjon for denne m\u00e5lestasjonen er allerede konfigurert." - }, - "error": { - "cannot_connect": "Kan ikke koble til GIO\u015a-tjeneren", - "invalid_sensors_data": "Ugyldig sensordata for denne m\u00e5lestasjonen", - "wrong_station_id": "ID for m\u00e5lestasjon er ikke korrekt" - }, - "step": { - "user": { - "data": { - "name": "Navn p\u00e5 integrasjon", - "station_id": "ID til m\u00e5lestasjon" - }, - "description": "Sett opp GIO\u015a (Polish Chief Inspectorate Of Environmental Protection) luftkvalitet integrering. Hvis du trenger hjelp med konfigurasjonen ta en titt her: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/pl.json b/homeassistant/components/gios/.translations/pl.json deleted file mode 100644 index 677762c2930..00000000000 --- a/homeassistant/components/gios/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integracja GIO\u015a dla tej stacji pomiarowej jest ju\u017c skonfigurowana." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z serwerem GIO\u015a.", - "invalid_sensors_data": "Nieprawid\u0142owe dane sensor\u00f3w dla tej stacji pomiarowej.", - "wrong_station_id": "Identyfikator stacji pomiarowej nie jest prawid\u0142owy." - }, - "step": { - "user": { - "data": { - "name": "Nazwa integracji", - "station_id": "Identyfikator stacji pomiarowej" - }, - "description": "Konfiguracja integracji jako\u015bci powietrza GIO\u015a (G\u0142\u00f3wny Inspektorat Ochrony \u015arodowiska). Je\u015bli potrzebujesz pomocy z konfiguracj\u0105, przejd\u017a na stron\u0119: https://www.home-assistant.io/integrations/gios", - "title": "G\u0142\u00f3wny Inspektorat Ochrony \u015arodowiska (GIO\u015a)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/ru.json b/homeassistant/components/gios/.translations/ru.json deleted file mode 100644 index 0045b08cec8..00000000000 --- a/homeassistant/components/gios/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 GIO\u015a.", - "invalid_sensors_data": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438.", - "wrong_station_id": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 ID \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438." - }, - "step": { - "user": { - "data": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438", - "station_id": "ID \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438" - }, - "description": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043e\u0442 \u041f\u043e\u043b\u044c\u0441\u043a\u043e\u0439 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0445\u0440\u0430\u043d\u0435 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u044b (GIO\u015a). \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: https://www.home-assistant.io/integrations/gios.", - "title": "GIO\u015a (\u041f\u043e\u043b\u044c\u0441\u043a\u0430\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043f\u043e \u043e\u0445\u0440\u0430\u043d\u0435 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u044b)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/sl.json b/homeassistant/components/gios/.translations/sl.json deleted file mode 100644 index 089435dee3f..00000000000 --- a/homeassistant/components/gios/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a integracija za to merilno postajo je \u017ee nastavljena." - }, - "error": { - "cannot_connect": "Ne morem se povezati s stre\u017enikom GIO\u015a.", - "invalid_sensors_data": "Neveljavni podatki senzorjev za to merilno postajo.", - "wrong_station_id": "ID merilne postaje ni pravilen." - }, - "step": { - "user": { - "data": { - "name": "Ime integracije", - "station_id": "ID merilne postaje" - }, - "description": "Nastavite GIO\u015a (poljski glavni in\u0161pektorat za varstvo okolja) integracijo kakovosti zraka. \u010ce potrebujete pomo\u010d pri konfiguraciji si oglejte tukaj: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (glavni poljski in\u0161pektorat za varstvo okolja)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/sv.json b/homeassistant/components/gios/.translations/sv.json deleted file mode 100644 index b5a865b5ccd..00000000000 --- a/homeassistant/components/gios/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "GIO\u015a-integration f\u00f6r denna m\u00e4tstation \u00e4r redan konfigurerad." - }, - "error": { - "cannot_connect": "Det g\u00e5r inte att ansluta till GIO\u015a-servern.", - "invalid_sensors_data": "Ogiltig sensordata f\u00f6r denna m\u00e4tstation.", - "wrong_station_id": "M\u00e4tstationens ID \u00e4r inte korrekt." - }, - "step": { - "user": { - "data": { - "name": "Integrationens namn", - "station_id": "M\u00e4tstationens ID" - }, - "description": "St\u00e4ll in luftkvalitetintegration f\u00f6r GIO\u015a (polsk chefinspektorat f\u00f6r milj\u00f6skydd). Om du beh\u00f6ver hj\u00e4lp med konfigurationen titta h\u00e4r: https://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/zh-Hant.json b/homeassistant/components/gios/.translations/zh-Hant.json deleted file mode 100644 index 3f10f2eb37b..00000000000 --- a/homeassistant/components/gios/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64 GIO\u015a \u76e3\u6e2c\u7ad9\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 GIO\u015a \u4f3a\u670d\u5668\u3002", - "invalid_sensors_data": "\u6b64\u76e3\u6e2c\u7ad9\u50b3\u611f\u5668\u8cc7\u6599\u7121\u6548\u3002", - "wrong_station_id": "\u76e3\u6e2c\u7ad9 ID \u4e0d\u6b63\u78ba\u3002" - }, - "step": { - "user": { - "data": { - "name": "\u6574\u5408\u540d\u7a31", - "station_id": "\u76e3\u6e2c\u7ad9 ID" - }, - "description": "\u8a2d\u5b9a GIO\u015a\uff08\u6ce2\u862d\u7e3d\u74b0\u5883\u4fdd\u8b77\u7763\u5bdf\u8655\uff09\u7a7a\u6c23\u54c1\u8cea\u6574\u5408\u3002\u5047\u5982\u9700\u8981\u5354\u52a9\uff0c\u8acb\u53c3\u8003\uff1ahttps://www.home-assistant.io/integrations/gios", - "title": "GIO\u015a\uff08\u6ce2\u862d\u7e3d\u74b0\u5883\u4fdd\u8b77\u7763\u5bdf\u8655\uff09" - } - }, - "title": "GIO\u015a" - } -} \ No newline at end of file diff --git a/homeassistant/components/gios/air_quality.py b/homeassistant/components/gios/air_quality.py index c8cd8be11c7..d180b0a0ddf 100644 --- a/homeassistant/components/gios/air_quality.py +++ b/homeassistant/components/gios/air_quality.py @@ -142,11 +142,9 @@ class GiosAirQuality(AirQualityEntity): async def async_added_to_hass(self): """Connect to dispatcher listening for entity data notifications.""" - self.coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Disconnect from update signal.""" - self.coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) async def async_update(self): """Update GIOS entity.""" diff --git a/homeassistant/components/gios/manifest.json b/homeassistant/components/gios/manifest.json index 3e3d63965d3..527bb7e116f 100644 --- a/homeassistant/components/gios/manifest.json +++ b/homeassistant/components/gios/manifest.json @@ -2,7 +2,6 @@ "domain": "gios", "name": "GIOŚ", "documentation": "https://www.home-assistant.io/integrations/gios", - "dependencies": [], "codeowners": ["@bieniu"], "requirements": ["gios==0.1.1"], "config_flow": true diff --git a/homeassistant/components/gios/strings.json b/homeassistant/components/gios/strings.json index 2442fa61a91..2187bcbc998 100644 --- a/homeassistant/components/gios/strings.json +++ b/homeassistant/components/gios/strings.json @@ -1,10 +1,9 @@ { "config": { - "title": "GIOŚ", "step": { "user": { - "title": "GIOŚ (Polish Chief Inspectorate Of Environmental Protection)", - "description": "Set up GIOŚ (Polish Chief Inspectorate Of Environmental Protection) air quality integration. If you need help with the configuration have a look here: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)", + "description": "Set up GIO\u015a (Polish Chief Inspectorate Of Environmental Protection) air quality integration. If you need help with the configuration have a look here: https://www.home-assistant.io/integrations/gios", "data": { "name": "Name of the integration", "station_id": "ID of the measuring station" @@ -14,10 +13,10 @@ "error": { "wrong_station_id": "ID of the measuring station is not correct.", "invalid_sensors_data": "Invalid sensors' data for this measuring station.", - "cannot_connect": "Cannot connect to the GIOŚ server." + "cannot_connect": "Cannot connect to the GIO\u015a server." }, "abort": { - "already_configured": "GIOŚ integration for this measuring station is already configured." + "already_configured": "GIO\u015a integration for this measuring station is already configured." } } } diff --git a/homeassistant/components/gios/translations/ca.json b/homeassistant/components/gios/translations/ca.json new file mode 100644 index 00000000000..1e451432be7 --- /dev/null +++ b/homeassistant/components/gios/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "La integraci\u00f3 GIO\u015a per a aquesta estaci\u00f3 ja est\u00e0 configurada." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar al servidor de GIO\u015a.", + "invalid_sensors_data": "Les dades dels sensors d'aquesta estaci\u00f3 de mesura s\u00f3n inv\u00e0lides.", + "wrong_station_id": "L'ID de l'estaci\u00f3 de mesura \u00e9s incorrecte." + }, + "step": { + "user": { + "data": { + "name": "Nom de la integraci\u00f3", + "station_id": "ID de l'estaci\u00f3 de mesura" + }, + "description": "Integraci\u00f3 de mesura de qualitat de l\u2019aire GIO\u015a (Polish Chief Inspectorate Of Environmental Protection). Si necessites ajuda amb la configuraci\u00f3, fes un cop d'ull a: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/da.json b/homeassistant/components/gios/translations/da.json new file mode 100644 index 00000000000..d4442982e1e --- /dev/null +++ b/homeassistant/components/gios/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a-integration for denne m\u00e5lestation er allerede konfigureret." + }, + "error": { + "cannot_connect": "Kan ikke oprette forbindelse til GIO\u015a-serveren.", + "invalid_sensors_data": "Ugyldige sensordata for denne m\u00e5lestation.", + "wrong_station_id": "M\u00e5lestationens ID er ikke korrekt." + }, + "step": { + "user": { + "data": { + "name": "Navn p\u00e5 integrationen", + "station_id": "ID for m\u00e5lestationen" + }, + "description": "Ops\u00e6t GIO\u015a (polsk inspektorat for milj\u00f8beskyttelse) luftkvalitet-integration. Hvis du har brug for hj\u00e6lp med konfigurationen, kig her: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/de.json b/homeassistant/components/gios/translations/de.json new file mode 100644 index 00000000000..0a5cea1819d --- /dev/null +++ b/homeassistant/components/gios/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a integration f\u00fcr diese Messstation ist bereits konfiguriert. " + }, + "error": { + "cannot_connect": "Es kann keine Verbindung zum GIO\u015a-Server hergestellt werden.", + "invalid_sensors_data": "Ung\u00fcltige Sensordaten f\u00fcr diese Messstation.", + "wrong_station_id": "ID der Messstation ist nicht korrekt." + }, + "step": { + "user": { + "data": { + "name": "Name der Integration", + "station_id": "ID der Messstation" + }, + "description": "Einrichtung von GIO\u015a (Polnische Hauptinspektion f\u00fcr Umweltschutz) Integration der Luftqualit\u00e4t. Wenn du Hilfe bei der Konfiguration ben\u00f6tigst, schaue hier: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polnische Hauptinspektion f\u00fcr Umweltschutz)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/en.json b/homeassistant/components/gios/translations/en.json new file mode 100644 index 00000000000..3d07ad843bd --- /dev/null +++ b/homeassistant/components/gios/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a integration for this measuring station is already configured." + }, + "error": { + "cannot_connect": "Cannot connect to the GIO\u015a server.", + "invalid_sensors_data": "Invalid sensors' data for this measuring station.", + "wrong_station_id": "ID of the measuring station is not correct." + }, + "step": { + "user": { + "data": { + "name": "Name of the integration", + "station_id": "ID of the measuring station" + }, + "description": "Set up GIO\u015a (Polish Chief Inspectorate Of Environmental Protection) air quality integration. If you need help with the configuration have a look here: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/es-419.json b/homeassistant/components/gios/translations/es-419.json similarity index 100% rename from homeassistant/components/gios/.translations/es-419.json rename to homeassistant/components/gios/translations/es-419.json diff --git a/homeassistant/components/gios/translations/es.json b/homeassistant/components/gios/translations/es.json new file mode 100644 index 00000000000..a7c30cd9d72 --- /dev/null +++ b/homeassistant/components/gios/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "La integraci\u00f3n de GIO\u015a para esta estaci\u00f3n de medici\u00f3n ya est\u00e1 configurada." + }, + "error": { + "cannot_connect": "No se puede conectar al servidor GIO\u015a.", + "invalid_sensors_data": "Datos de sensores no v\u00e1lidos para esta estaci\u00f3n de medici\u00f3n.", + "wrong_station_id": "El ID de la estaci\u00f3n de medici\u00f3n no es correcta." + }, + "step": { + "user": { + "data": { + "name": "Nombre de la integraci\u00f3n", + "station_id": "ID de la estaci\u00f3n de medici\u00f3n" + }, + "description": "Configurar la integraci\u00f3n de la calidad del aire GIO\u015a (Inspecci\u00f3n Jefe de Protecci\u00f3n Ambiental de Polonia). Si necesita ayuda con la configuraci\u00f3n, eche un vistazo aqu\u00ed: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Inspecci\u00f3n Jefe de Protecci\u00f3n del Medio Ambiente de Polonia)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/fr.json b/homeassistant/components/gios/translations/fr.json new file mode 100644 index 00000000000..b06c41208bc --- /dev/null +++ b/homeassistant/components/gios/translations/fr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "L'int\u00e9gration GIO\u015a pour cette station de mesure est d\u00e9j\u00e0 configur\u00e9e." + }, + "error": { + "cannot_connect": "Impossible de se connecter au serveur GIOS", + "invalid_sensors_data": "Donn\u00e9es des capteurs non valides pour cette station de mesure.", + "wrong_station_id": "L'identifiant de la station de mesure n'est pas correct." + }, + "step": { + "user": { + "data": { + "name": "Nom de l'int\u00e9gration", + "station_id": "Identifiant de la station de mesure" + }, + "description": "Mettre en place l'int\u00e9gration de la qualit\u00e9 de l'air GIO\u015a (Inspection g\u00e9n\u00e9rale polonaise de la protection de l'environnement). Si vous avez besoin d'aide pour la configuration, regardez ici: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Inspection g\u00e9n\u00e9rale polonaise de la protection de l'environnement)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/hu.json b/homeassistant/components/gios/translations/hu.json new file mode 100644 index 00000000000..5702d3b33d2 --- /dev/null +++ b/homeassistant/components/gios/translations/hu.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "A GIO\u015a integr\u00e1ci\u00f3 ehhez a m\u00e9r\u0151\u00e1llom\u00e1shoz m\u00e1r konfigur\u00e1lva van." + }, + "error": { + "cannot_connect": "Nem lehet csatlakozni a GIO\u015a szerverhez.", + "invalid_sensors_data": "\u00c9rv\u00e9nytelen \u00e9rz\u00e9kel\u0151k adatai ehhez a m\u00e9r\u0151\u00e1llom\u00e1shoz.", + "wrong_station_id": "A m\u00e9r\u0151\u00e1llom\u00e1s azonos\u00edt\u00f3ja nem megfelel\u0151." + }, + "step": { + "user": { + "data": { + "name": "Az integr\u00e1ci\u00f3 neve", + "station_id": "A m\u00e9r\u0151\u00e1llom\u00e1s azonos\u00edt\u00f3ja" + }, + "description": "A GIO\u015a (lengyel k\u00f6rnyezetv\u00e9delmi f\u0151fel\u00fcgyel\u0151) leveg\u0151min\u0151s\u00e9gi integr\u00e1ci\u00f3j\u00e1nak be\u00e1ll\u00edt\u00e1sa. Ha seg\u00edts\u00e9gre van sz\u00fcks\u00e9ged a konfigur\u00e1ci\u00f3val kapcsolatban, l\u00e1togass ide: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Lengyel K\u00f6rnyezetv\u00e9delmi F\u0151fel\u00fcgyel\u0151s\u00e9g)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/it.json b/homeassistant/components/gios/translations/it.json new file mode 100644 index 00000000000..e49fe2ebfe8 --- /dev/null +++ b/homeassistant/components/gios/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "L'integrazione GIO\u015a per questa stazione di misurazione \u00e8 gi\u00e0 configurata." + }, + "error": { + "cannot_connect": "Impossibile connettersi al server GIO\u015a.", + "invalid_sensors_data": "Dati dei sensori non validi per questa stazione di misura.", + "wrong_station_id": "L'ID della stazione di misura non \u00e8 corretto." + }, + "step": { + "user": { + "data": { + "name": "Nome dell'integrazione", + "station_id": "ID della stazione di misura" + }, + "description": "Impostare l'integrazione della qualit\u00e0 dell'aria GIO\u015a (Ispettorato capo polacco di protezione ambientale). Se hai bisogno di aiuto con la configurazione dai un'occhiata qui: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Ispettorato capo polacco di protezione ambientale)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/ko.json b/homeassistant/components/gios/translations/ko.json new file mode 100644 index 00000000000..2ad64efadc1 --- /dev/null +++ b/homeassistant/components/gios/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc5d0 \ub300\ud55c GIO\u015a \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "GIO\u015a \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "invalid_sensors_data": "\uc774 \uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc5d0 \ub300\ud55c \uc13c\uc11c \ub370\uc774\ud130\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "wrong_station_id": "\uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc758 ID \uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "name": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc758 \uc774\ub984", + "station_id": "\uce21\uc815 \uc2a4\ud14c\uc774\uc158\uc758 ID" + }, + "description": "\ud3f4\ub780\ub4dc \ud658\uacbd\uccad (GIO\u015a) \ub300\uae30\uc9c8 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. \uad6c\uc131\uc5d0 \ub3c4\uc6c0\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 https://www.home-assistant.io/integrations/gios \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", + "title": "\ud3f4\ub780\ub4dc \ud658\uacbd\uccad (GIO\u015a)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/lb.json b/homeassistant/components/gios/translations/lb.json new file mode 100644 index 00000000000..66cd2393a22 --- /dev/null +++ b/homeassistant/components/gios/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a Integratioun fir d\u00ebs Miess Statioun ass scho konfigur\u00e9iert." + }, + "error": { + "cannot_connect": "Konnt sech net mam GIO\u015a Server verbannen.", + "invalid_sensors_data": "Ong\u00eblteg Sensor Donn\u00e9e\u00eb fir d\u00ebs Miess Statioun", + "wrong_station_id": "ID vun der Miess Statioun ass net korrekt." + }, + "step": { + "user": { + "data": { + "name": "Numm vun der Integratioun", + "station_id": "ID vun der Miess Statioun" + }, + "description": "GIO\u015a (Polnesch Chefinspektorat vum \u00cbmweltschutz) Loft Qualit\u00e9it Integratioun ariichten. Fir w\u00e9ider H\u00ebllef mat der Konfiuratioun kuckt hei: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polnesch Chefinspektorat vum \u00cbmweltschutz)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/nl.json b/homeassistant/components/gios/translations/nl.json new file mode 100644 index 00000000000..09fddb56225 --- /dev/null +++ b/homeassistant/components/gios/translations/nl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a-integratie voor dit meetstation is al geconfigureerd." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met de GIO\u015a-server.", + "invalid_sensors_data": "Ongeldige sensorgegevens voor dit meetstation.", + "wrong_station_id": "ID van het meetstation is niet correct." + }, + "step": { + "user": { + "data": { + "name": "Naam van de integratie", + "station_id": "ID van het meetstation" + }, + "description": "GIO\u015a (Poolse hoofdinspectie van milieubescherming) luchtkwaliteitintegratie instellen. Als u hulp nodig hebt bij de configuratie, kijk dan hier: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Poolse hoofdinspectie van milieubescherming)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/no.json b/homeassistant/components/gios/translations/no.json new file mode 100644 index 00000000000..93c78b33db9 --- /dev/null +++ b/homeassistant/components/gios/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a-integrasjon for denne m\u00e5lestasjonen er allerede konfigurert." + }, + "error": { + "cannot_connect": "Kan ikke koble til GIO\u015a-tjeneren", + "invalid_sensors_data": "Ugyldig sensordata for denne m\u00e5lestasjonen", + "wrong_station_id": "ID for m\u00e5lestasjon er ikke korrekt" + }, + "step": { + "user": { + "data": { + "name": "Navn p\u00e5 integrasjon", + "station_id": "ID til m\u00e5lestasjon" + }, + "description": "Sett opp GIO\u015a (Polish Chief Inspectorate Of Environmental Protection) luftkvalitet integrering. Hvis du trenger hjelp med konfigurasjonen ta en titt her: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/pl.json b/homeassistant/components/gios/translations/pl.json new file mode 100644 index 00000000000..4d4b07f31cc --- /dev/null +++ b/homeassistant/components/gios/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Integracja GIO\u015a dla tej stacji pomiarowej jest ju\u017c skonfigurowana." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z serwerem GIO\u015a.", + "invalid_sensors_data": "Nieprawid\u0142owe dane sensor\u00f3w dla tej stacji pomiarowej.", + "wrong_station_id": "Identyfikator stacji pomiarowej nie jest prawid\u0142owy." + }, + "step": { + "user": { + "data": { + "name": "Nazwa integracji", + "station_id": "Identyfikator stacji pomiarowej" + }, + "description": "Konfiguracja integracji jako\u015bci powietrza GIO\u015a (G\u0142\u00f3wny Inspektorat Ochrony \u015arodowiska). Je\u015bli potrzebujesz pomocy z konfiguracj\u0105, przejd\u017a na stron\u0119: https://www.home-assistant.io/integrations/gios", + "title": "G\u0142\u00f3wny Inspektorat Ochrony \u015arodowiska (GIO\u015a)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/.translations/pt-BR.json b/homeassistant/components/gios/translations/pt-BR.json similarity index 100% rename from homeassistant/components/gios/.translations/pt-BR.json rename to homeassistant/components/gios/translations/pt-BR.json diff --git a/homeassistant/components/gios/translations/ru.json b/homeassistant/components/gios/translations/ru.json new file mode 100644 index 00000000000..ca94b617c93 --- /dev/null +++ b/homeassistant/components/gios/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 GIO\u015a.", + "invalid_sensors_data": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438.", + "wrong_station_id": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 ID \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438." + }, + "step": { + "user": { + "data": { + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438", + "station_id": "ID \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438" + }, + "description": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043e\u0442 \u041f\u043e\u043b\u044c\u0441\u043a\u043e\u0439 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0445\u0440\u0430\u043d\u0435 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u044b (GIO\u015a). \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: https://www.home-assistant.io/integrations/gios.", + "title": "GIO\u015a (\u041f\u043e\u043b\u044c\u0441\u043a\u0430\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043f\u043e \u043e\u0445\u0440\u0430\u043d\u0435 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u044b)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/sl.json b/homeassistant/components/gios/translations/sl.json new file mode 100644 index 00000000000..f01728783cc --- /dev/null +++ b/homeassistant/components/gios/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a integracija za to merilno postajo je \u017ee nastavljena." + }, + "error": { + "cannot_connect": "Ne morem se povezati s stre\u017enikom GIO\u015a.", + "invalid_sensors_data": "Neveljavni podatki senzorjev za to merilno postajo.", + "wrong_station_id": "ID merilne postaje ni pravilen." + }, + "step": { + "user": { + "data": { + "name": "Ime integracije", + "station_id": "ID merilne postaje" + }, + "description": "Nastavite GIO\u015a (poljski glavni in\u0161pektorat za varstvo okolja) integracijo kakovosti zraka. \u010ce potrebujete pomo\u010d pri konfiguraciji si oglejte tukaj: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (glavni poljski in\u0161pektorat za varstvo okolja)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/sv.json b/homeassistant/components/gios/translations/sv.json new file mode 100644 index 00000000000..a8bafa50119 --- /dev/null +++ b/homeassistant/components/gios/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "GIO\u015a-integration f\u00f6r denna m\u00e4tstation \u00e4r redan konfigurerad." + }, + "error": { + "cannot_connect": "Det g\u00e5r inte att ansluta till GIO\u015a-servern.", + "invalid_sensors_data": "Ogiltig sensordata f\u00f6r denna m\u00e4tstation.", + "wrong_station_id": "M\u00e4tstationens ID \u00e4r inte korrekt." + }, + "step": { + "user": { + "data": { + "name": "Integrationens namn", + "station_id": "M\u00e4tstationens ID" + }, + "description": "St\u00e4ll in luftkvalitetintegration f\u00f6r GIO\u015a (polsk chefinspektorat f\u00f6r milj\u00f6skydd). Om du beh\u00f6ver hj\u00e4lp med konfigurationen titta h\u00e4r: https://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a (Polish Chief Inspectorate Of Environmental Protection)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gios/translations/zh-Hant.json b/homeassistant/components/gios/translations/zh-Hant.json new file mode 100644 index 00000000000..0d75f83f9e5 --- /dev/null +++ b/homeassistant/components/gios/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64 GIO\u015a \u76e3\u6e2c\u7ad9\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 GIO\u015a \u4f3a\u670d\u5668\u3002", + "invalid_sensors_data": "\u6b64\u76e3\u6e2c\u7ad9\u50b3\u611f\u5668\u8cc7\u6599\u7121\u6548\u3002", + "wrong_station_id": "\u76e3\u6e2c\u7ad9 ID \u4e0d\u6b63\u78ba\u3002" + }, + "step": { + "user": { + "data": { + "name": "\u6574\u5408\u540d\u7a31", + "station_id": "\u76e3\u6e2c\u7ad9 ID" + }, + "description": "\u8a2d\u5b9a GIO\u015a\uff08\u6ce2\u862d\u7e3d\u74b0\u5883\u4fdd\u8b77\u7763\u5bdf\u8655\uff09\u7a7a\u6c23\u54c1\u8cea\u6574\u5408\u3002\u5047\u5982\u9700\u8981\u5354\u52a9\uff0c\u8acb\u53c3\u8003\uff1ahttps://www.home-assistant.io/integrations/gios", + "title": "GIO\u015a\uff08\u6ce2\u862d\u7e3d\u74b0\u5883\u4fdd\u8b77\u7763\u5bdf\u8655\uff09" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/github/manifest.json b/homeassistant/components/github/manifest.json index c2686346e5b..1a9cd620b0e 100644 --- a/homeassistant/components/github/manifest.json +++ b/homeassistant/components/github/manifest.json @@ -3,6 +3,5 @@ "name": "GitHub", "documentation": "https://www.home-assistant.io/integrations/github", "requirements": ["PyGithub==1.43.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/github/sensor.py b/homeassistant/components/github/sensor.py index 26199763036..dcd81dc68df 100644 --- a/homeassistant/components/github/sensor.py +++ b/homeassistant/components/github/sensor.py @@ -30,6 +30,11 @@ ATTR_LATEST_OPEN_PULL_REQUEST_URL = "latest_open_pull_request_url" ATTR_OPEN_PULL_REQUESTS = "open_pull_requests" ATTR_PATH = "path" ATTR_STARGAZERS = "stargazers" +ATTR_FORKS = "forks" +ATTR_CLONES = "clones" +ATTR_CLONES_UNIQUE = "clones_unique" +ATTR_VIEWS = "views" +ATTR_VIEWS_UNIQUE = "views_unique" DEFAULT_NAME = "GitHub" @@ -86,6 +91,11 @@ class GitHubSensor(Entity): self._pull_request_count = None self._latest_open_pr_url = None self._stargazers = None + self._forks = None + self._clones = None + self._clones_unique = None + self._views = None + self._views_unique = None self._github_data = github_data @property @@ -122,9 +132,18 @@ class GitHubSensor(Entity): ATTR_LATEST_OPEN_PULL_REQUEST_URL: self._latest_open_pr_url, ATTR_OPEN_PULL_REQUESTS: self._pull_request_count, ATTR_STARGAZERS: self._stargazers, + ATTR_FORKS: self._forks, } 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 @@ -154,6 +173,11 @@ class GitHubSensor(Entity): self._pull_request_count = self._github_data.pull_request_count self._latest_open_pr_url = self._github_data.latest_open_pr_url self._stargazers = self._github_data.stargazers + self._forks = self._github_data.forks + self._clones = self._github_data.clones + self._clones_unique = self._github_data.clones_unique + self._views = self._github_data.views + self._views_unique = self._github_data.views_unique class GitHubData: @@ -190,6 +214,11 @@ class GitHubData: self.pull_request_count = None self.latest_open_pr_url = None self.stargazers = None + self.forks = None + self.clones = None + self.clones_unique = None + self.views = None + self.views_unique = None def update(self): """Update GitHub Sensor.""" @@ -197,6 +226,7 @@ class GitHubData: repo = self._github_obj.get_repo(self.repository_path) self.stargazers = repo.stargazers_count + self.forks = repo.forks_count open_issues = repo.get_issues(state="open", sort="created") if open_issues is not None: @@ -218,6 +248,17 @@ class GitHubData: if releases and releases.totalCount > 0: self.latest_release_url = releases[0].html_url + 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") + self.available = True except self._github.GithubException as err: _LOGGER.error("GitHub error for %s: %s", self.repository_path, err) diff --git a/homeassistant/components/gitlab_ci/manifest.json b/homeassistant/components/gitlab_ci/manifest.json index ba29f56cfba..5061d35c189 100644 --- a/homeassistant/components/gitlab_ci/manifest.json +++ b/homeassistant/components/gitlab_ci/manifest.json @@ -3,6 +3,5 @@ "name": "GitLab-CI", "documentation": "https://www.home-assistant.io/integrations/gitlab_ci", "requirements": ["python-gitlab==1.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/gitter/manifest.json b/homeassistant/components/gitter/manifest.json index 35904b3a57b..c1c13af792a 100644 --- a/homeassistant/components/gitter/manifest.json +++ b/homeassistant/components/gitter/manifest.json @@ -3,6 +3,5 @@ "name": "Gitter", "documentation": "https://www.home-assistant.io/integrations/gitter", "requirements": ["gitterpy==0.1.7"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/glances/.translations/bg.json b/homeassistant/components/glances/.translations/bg.json deleted file mode 100644 index 8604dda565a..00000000000 --- a/homeassistant/components/glances/.translations/bg.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d." - }, - "error": { - "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430", - "wrong_version": "\u0412\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 (\u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u043d\u0438 \u0432\u0435\u0440\u0441\u0438\u0438: 2 \u0438\u043b\u0438 3)" - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "name": "\u0418\u043c\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442", - "ssl": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 SSL/TLS, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u043a\u044a\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 Glances", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", - "verify_ssl": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430", - "version": "Glances API \u0432\u0435\u0440\u0441\u0438\u044f (2 \u0438\u043b\u0438 3)" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\u0427\u0435\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435" - }, - "description": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0446\u0438\u0438 \u0437\u0430 Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/ca.json b/homeassistant/components/glances/.translations/ca.json deleted file mode 100644 index 2610fe156aa..00000000000 --- a/homeassistant/components/glances/.translations/ca.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar amb l'amfitri\u00f3", - "wrong_version": "Versi\u00f3 no compatible (2 o 3 necess\u00e0ria)" - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "name": "Nom", - "password": "Contrasenya", - "port": "Port", - "ssl": "Utilitza SSL/TLS per connectar-te al sistema Glances", - "username": "Nom d'usuari", - "verify_ssl": "Verifica la certificaci\u00f3 del sistema", - "version": "Versi\u00f3 de l'API de Glances (2 o 3)" - }, - "title": "Configuraci\u00f3 de Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Freq\u00fc\u00e8ncia d\u2019actualitzaci\u00f3" - }, - "description": "Opcions de configuraci\u00f3 de Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/da.json b/homeassistant/components/glances/.translations/da.json deleted file mode 100644 index 7779c6e40a0..00000000000 --- a/homeassistant/components/glances/.translations/da.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "V\u00e6rten er allerede konfigureret." - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse til v\u00e6rt", - "wrong_version": "Version underst\u00f8ttes ikke (kun 2 eller 3)" - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "name": "Navn", - "password": "Adgangskode", - "port": "Port", - "ssl": "Brug SSL/TLS til at oprette forbindelse til Glances-systemet", - "username": "Brugernavn", - "verify_ssl": "Bekr\u00e6ft certificering af systemet", - "version": "Glances API version (2 eller 3)" - }, - "title": "Ops\u00e6tning af Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Opdateringsfrekvens" - }, - "description": "Konfigurationsindstillinger for Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/de.json b/homeassistant/components/glances/.translations/de.json deleted file mode 100644 index e652ccc966b..00000000000 --- a/homeassistant/components/glances/.translations/de.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host ist bereits konfiguriert." - }, - "error": { - "cannot_connect": "Verbindung zum Host nicht m\u00f6glich", - "wrong_version": "Version nicht unterst\u00fctzt (nur 2 oder 3)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name", - "password": "Passwort", - "port": "Port", - "ssl": "Verwende SSL / TLS, um eine Verbindung zum Glances-System herzustellen", - "username": "Benutzername", - "verify_ssl": "\u00dcberpr\u00fcfe die Zertifizierung des Systems", - "version": "Glances API-Version (2 oder 3)" - }, - "title": "Glances einrichten" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Aktualisierungsfrequenz" - }, - "description": "Konfiguriere die Optionen f\u00fcr Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/en.json b/homeassistant/components/glances/.translations/en.json deleted file mode 100644 index ef1a8fb5e31..00000000000 --- a/homeassistant/components/glances/.translations/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is already configured." - }, - "error": { - "cannot_connect": "Unable to connect to host", - "wrong_version": "Version not supported (2 or 3 only)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name", - "password": "Password", - "port": "Port", - "ssl": "Use SSL/TLS to connect to the Glances system", - "username": "Username", - "verify_ssl": "Verify the certification of the system", - "version": "Glances API Version (2 or 3)" - }, - "title": "Setup Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Update frequency" - }, - "description": "Configure options for Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/es.json b/homeassistant/components/glances/.translations/es.json deleted file mode 100644 index 1b6b0335192..00000000000 --- a/homeassistant/components/glances/.translations/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El host ya est\u00e1 configurado." - }, - "error": { - "cannot_connect": "No se puede conectar al host", - "wrong_version": "Versi\u00f3n no soportada (s\u00f3lo 2 o 3)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nombre", - "password": "Contrase\u00f1a", - "port": "Puerto", - "ssl": "Utilice SSL/TLS para conectarse al sistema Glances", - "username": "Nombre de usuario", - "verify_ssl": "Verificar la certificaci\u00f3n del sistema", - "version": "Versi\u00f3n API Glances (2 o 3)" - }, - "title": "Configurar Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Frecuencia de actualizaci\u00f3n" - }, - "description": "Configurar opciones para Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/fr.json b/homeassistant/components/glances/.translations/fr.json deleted file mode 100644 index b65df092b32..00000000000 --- a/homeassistant/components/glances/.translations/fr.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'h\u00f4te est d\u00e9j\u00e0 configur\u00e9." - }, - "error": { - "cannot_connect": "Impossible de se connecter \u00e0 l'h\u00f4te", - "wrong_version": "Version non prise en charge (2 ou 3 uniquement)" - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "name": "Nom", - "password": "Mot de passe", - "port": "Port", - "ssl": "Utiliser SSL / TLS pour se connecter au syst\u00e8me Glances", - "username": "Nom d'utilisateur", - "verify_ssl": "V\u00e9rifier la certification du syst\u00e8me", - "version": "Glances API Version (2 ou 3)" - }, - "title": "Installation de Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Fr\u00e9quence de mise \u00e0 jour" - }, - "description": "Configurer les options pour Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/hu.json b/homeassistant/components/glances/.translations/hu.json deleted file mode 100644 index 1d7c2ea4023..00000000000 --- a/homeassistant/components/glances/.translations/hu.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kiszolg\u00e1l\u00f3 m\u00e1r konfigur\u00e1lva van." - }, - "error": { - "cannot_connect": "Nem lehet csatlakozni a kiszolg\u00e1l\u00f3hoz", - "wrong_version": "Nem t\u00e1mogatott verzi\u00f3 (2 vagy 3 csak)" - }, - "step": { - "user": { - "data": { - "host": "Kiszolg\u00e1l\u00f3", - "name": "N\u00e9v", - "password": "Jelsz\u00f3", - "port": "Port", - "ssl": "Az SSL / TLS haszn\u00e1lat\u00e1val csatlakozzon a Glances rendszerhez", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v", - "verify_ssl": "A rendszer tan\u00fas\u00edt\u00e1s\u00e1nak ellen\u0151rz\u00e9se", - "version": "Glances API-verzi\u00f3 (2 vagy 3)" - }, - "title": "Glances Be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Friss\u00edt\u00e9si gyakoris\u00e1g" - }, - "description": "A Glances be\u00e1ll\u00edt\u00e1sainak konfigur\u00e1l\u00e1sa" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/it.json b/homeassistant/components/glances/.translations/it.json deleted file mode 100644 index 5fbfba547d9..00000000000 --- a/homeassistant/components/glances/.translations/it.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'host \u00e8 gi\u00e0 configurato." - }, - "error": { - "cannot_connect": "Impossibile connettersi all'host", - "wrong_version": "Versione non supportata (solo 2 o 3)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nome", - "password": "Password", - "port": "Porta", - "ssl": "Utilizzare SSL/TLS per connettersi al sistema Glances", - "username": "Nome utente", - "verify_ssl": "Verificare la certificazione del sistema", - "version": "Glances API Version (2 o 3)" - }, - "title": "Impostare Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Frequenza di aggiornamento" - }, - "description": "Configura le opzioni per Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/ko.json b/homeassistant/components/glances/.translations/ko.json deleted file mode 100644 index ad19b589d5d..00000000000 --- a/homeassistant/components/glances/.translations/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "cannot_connect": "\ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "wrong_version": "\ud574\ub2f9 \ubc84\uc804\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 (2 \ub610\ub294 3\ub9cc \uc9c0\uc6d0)" - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "name": "\uc774\ub984", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "ssl": "SSL/TLS \ub97c \uc0ac\uc6a9\ud558\uc5ec Glances \uc2dc\uc2a4\ud15c\uc5d0 \uc5f0\uacb0", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", - "verify_ssl": "\uc2dc\uc2a4\ud15c \uc778\uc99d \ud655\uc778", - "version": "Glances API \ubc84\uc804 (2 \ub610\ub294 3)" - }, - "title": "Glances \uc124\uce58" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\uc5c5\ub370\uc774\ud2b8 \ube48\ub3c4" - }, - "description": "Glances \uc635\uc158 \uad6c\uc131" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/lb.json b/homeassistant/components/glances/.translations/lb.json deleted file mode 100644 index 06723a4bd12..00000000000 --- a/homeassistant/components/glances/.translations/lb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Kann sech net mam Server verbannen.", - "wrong_version": "Versioun net \u00ebnnerst\u00ebtzt (n\u00ebmmen 2 oder 3)" - }, - "step": { - "user": { - "data": { - "host": "Apparat", - "name": "Numm", - "password": "Passwuert", - "port": "Port", - "ssl": "Benotzt SSL/TLS fir sech mam Usiichte System ze verbannen", - "username": "Benotzernumm", - "verify_ssl": "Zertifikatioun vum System iwwerpr\u00e9iwen", - "version": "API Versioun vun den Usiichten (2 oder 3)" - }, - "title": "Usiichten konfigur\u00e9ieren" - } - }, - "title": "Usiichten" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Intervalle vun de Mise \u00e0 jour" - }, - "description": "Optioune konfigur\u00e9ieren fir d'Usiichten" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/nl.json b/homeassistant/components/glances/.translations/nl.json deleted file mode 100644 index 7de81bfee98..00000000000 --- a/homeassistant/components/glances/.translations/nl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is al geconfigureerd." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met host", - "wrong_version": "Versie niet ondersteund (alleen 2 of 3)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Naam", - "password": "Wachtwoord", - "port": "Poort", - "ssl": "Gebruik SSL / TLS om verbinding te maken met het Glances-systeem", - "username": "Gebruikersnaam", - "verify_ssl": "Controleer de certificering van het systeem", - "version": "Glances API-versie (2 of 3)" - }, - "title": "Glances instellen" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Update frequentie" - }, - "description": "Configureer opties voor Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/nn.json b/homeassistant/components/glances/.translations/nn.json deleted file mode 100644 index 2c9acc227bd..00000000000 --- a/homeassistant/components/glances/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Glances" - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/no.json b/homeassistant/components/glances/.translations/no.json deleted file mode 100644 index b25241e34db..00000000000 --- a/homeassistant/components/glances/.translations/no.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Verten er allerede konfigurert." - }, - "error": { - "cannot_connect": "Kan ikke koble til vert", - "wrong_version": "Versjonen st\u00f8ttes ikke (bare 2 eller 3)" - }, - "step": { - "user": { - "data": { - "host": "Vert", - "name": "Navn", - "password": "Passord", - "port": "", - "ssl": "Bruk SSL / TLS for \u00e5 koble til Glances-systemet", - "username": "Brukernavn", - "verify_ssl": "Bekreft sertifiseringen av systemet", - "version": "Glances API-versjon (2 eller 3)" - }, - "title": "Oppsett av Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Oppdater frekvens" - }, - "description": "Konfigurasjonsalternativer for Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/pl.json b/homeassistant/components/glances/.translations/pl.json deleted file mode 100644 index f53d4d413e0..00000000000 --- a/homeassistant/components/glances/.translations/pl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host jest ju\u017c skonfigurowany." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z hostem", - "wrong_version": "Wersja nieobs\u0142ugiwana (tylko 2 lub 3)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nazwa", - "password": "Has\u0142o", - "port": "Port", - "ssl": "U\u017cyj SSL/TLS, aby po\u0142\u0105czy\u0107 si\u0119 z systemem Glances", - "username": "Nazwa u\u017cytkownika", - "verify_ssl": "Sprawd\u017a certyfikacj\u0119 systemu", - "version": "Glances wersja API (2 lub 3)" - }, - "title": "Konfiguracja Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" - }, - "description": "Konfiguracja opcji dla Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/ru.json b/homeassistant/components/glances/.translations/ru.json deleted file mode 100644 index 8effcc6ab16..00000000000 --- a/homeassistant/components/glances/.translations/ru.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0445\u043e\u0441\u0442\u0443.", - "wrong_version": "\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0438 2 \u0438 3." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL / TLS \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f", - "username": "\u041b\u043e\u0433\u0438\u043d", - "verify_ssl": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b", - "version": "\u0412\u0435\u0440\u0441\u0438\u044f API Glances (2 \u0438\u043b\u0438 3)" - }, - "title": "Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f" - }, - "description": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/sl.json b/homeassistant/components/glances/.translations/sl.json deleted file mode 100644 index b1d0fda94b5..00000000000 --- a/homeassistant/components/glances/.translations/sl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Gostitelj je \u017ee konfiguriran." - }, - "error": { - "cannot_connect": "Ni mogo\u010de vzpostaviti povezave z gostiteljem", - "wrong_version": "Razli\u010dica ni podprta (samo 2 ali 3)" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Ime", - "password": "Geslo", - "port": "Vrata", - "ssl": "Za povezavo s sistemom Glances uporabite SSL/TLS", - "username": "Uporabni\u0161ko ime", - "verify_ssl": "Preverite veljavnost potrdila sistema", - "version": "Glances API Version (2 ali 3)" - }, - "title": "Nastavite Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Pogostost posodabljanja" - }, - "description": "Konfiguracija mo\u017enosti za Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/sv.json b/homeassistant/components/glances/.translations/sv.json deleted file mode 100644 index f4b95081a10..00000000000 --- a/homeassistant/components/glances/.translations/sv.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "V\u00e4rden \u00e4r redan konfigurerad." - }, - "error": { - "cannot_connect": "Det g\u00e5r inte att ansluta till v\u00e4rden", - "wrong_version": "Version st\u00f6ds inte (endast 2 eller 3)" - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rd", - "name": "Namn", - "password": "L\u00f6senord", - "port": "Port", - "ssl": "Anv\u00e4nd SSL / TLS f\u00f6r att ansluta till Glances-systemet", - "username": "Anv\u00e4ndarnamn", - "verify_ssl": "Verifiera certifieringen av systemet", - "version": "Glances API-version (2 eller 3)" - }, - "title": "St\u00e4ll in Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Uppdateringsfrekvens" - }, - "description": "Konfigurera alternativ f\u00f6r Glances" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/zh-Hant.json b/homeassistant/components/glances/.translations/zh-Hant.json deleted file mode 100644 index 12ba7670355..00000000000 --- a/homeassistant/components/glances/.translations/zh-Hant.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u4e3b\u6a5f\u7aef", - "wrong_version": "\u7248\u672c\u4e0d\u652f\u63f4\uff08\u50c5 2 \u6216 3\uff09" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "name": "\u540d\u7a31", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "ssl": "\u4f7f\u7528 SSL/TLS \u9023\u7dda\u81f3 Glances \u7cfb\u7d71", - "username": "\u4f7f\u7528\u8005\u540d\u7a31", - "verify_ssl": "\u9a57\u8b49\u7cfb\u7d71\u8a8d\u8b49", - "version": "Glances API \u7248\u672c\uff082 \u6216 3\uff09" - }, - "title": "\u8a2d\u5b9a Glances" - } - }, - "title": "Glances" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\u66f4\u65b0\u983b\u7387" - }, - "description": "Glances \u8a2d\u5b9a\u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/glances/manifest.json b/homeassistant/components/glances/manifest.json index 761f77510b6..b50601ae835 100644 --- a/homeassistant/components/glances/manifest.json +++ b/homeassistant/components/glances/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/glances", "requirements": ["glances_api==0.2.0"], - "dependencies": [], "codeowners": ["@fabaff", "@engrbm87"] } diff --git a/homeassistant/components/glances/strings.json b/homeassistant/components/glances/strings.json index 1bd7275daef..ae8ab0357f3 100644 --- a/homeassistant/components/glances/strings.json +++ b/homeassistant/components/glances/strings.json @@ -1,37 +1,32 @@ { - "config": { - "title": "Glances", - "step": { - "user": { - "title": "Setup Glances", - "data": { - "name": "Name", - "host": "Host", - "username": "Username", - "password": "Password", - "port": "Port", - "version": "Glances API Version (2 or 3)", - "ssl": "Use SSL/TLS to connect to the Glances system", - "verify_ssl": "Verify the certification of the system" - } - } - }, - "error": { - "cannot_connect": "Unable to connect to host", - "wrong_version": "Version not supported (2 or 3 only)" - }, - "abort": { - "already_configured": "Host is already configured." + "config": { + "step": { + "user": { + "title": "Setup Glances", + "data": { + "name": "Name", + "host": "Host", + "username": "Username", + "password": "Password", + "port": "Port", + "version": "Glances API Version (2 or 3)", + "ssl": "Use SSL/TLS to connect to the Glances system", + "verify_ssl": "Verify the certification of the system" } + } }, - "options": { - "step": { - "init": { - "description": "Configure options for Glances", - "data": { - "scan_interval": "Update frequency" - } - } - } + "error": { + "cannot_connect": "Unable to connect to host", + "wrong_version": "Version not supported (2 or 3 only)" + }, + "abort": { "already_configured": "Host is already configured." } + }, + "options": { + "step": { + "init": { + "description": "Configure options for Glances", + "data": { "scan_interval": "Update frequency" } + } } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/glances/translations/bg.json b/homeassistant/components/glances/translations/bg.json new file mode 100644 index 00000000000..ef60201a57f --- /dev/null +++ b/homeassistant/components/glances/translations/bg.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d." + }, + "error": { + "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430", + "wrong_version": "\u0412\u0435\u0440\u0441\u0438\u044f\u0442\u0430 \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 (\u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u043d\u0438 \u0432\u0435\u0440\u0441\u0438\u0438: 2 \u0438\u043b\u0438 3)" + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "name": "\u0418\u043c\u0435", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442", + "ssl": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 SSL/TLS, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u043a\u044a\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430 Glances", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", + "verify_ssl": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430", + "version": "Glances API \u0432\u0435\u0440\u0441\u0438\u044f (2 \u0438\u043b\u0438 3)" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\u0427\u0435\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435" + }, + "description": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0446\u0438\u0438 \u0437\u0430 Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/ca.json b/homeassistant/components/glances/translations/ca.json new file mode 100644 index 00000000000..dd9d151296f --- /dev/null +++ b/homeassistant/components/glances/translations/ca.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar amb l'amfitri\u00f3", + "wrong_version": "Versi\u00f3 no compatible (2 o 3 necess\u00e0ria)" + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "name": "Nom", + "password": "Contrasenya", + "port": "Port", + "ssl": "Utilitza SSL/TLS per connectar-te al sistema Glances", + "username": "Nom d'usuari", + "verify_ssl": "Verifica la certificaci\u00f3 del sistema", + "version": "Versi\u00f3 de l'API de Glances (2 o 3)" + }, + "title": "Configuraci\u00f3 de Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Freq\u00fc\u00e8ncia d\u2019actualitzaci\u00f3" + }, + "description": "Opcions de configuraci\u00f3 de Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/da.json b/homeassistant/components/glances/translations/da.json new file mode 100644 index 00000000000..995ae9d3bba --- /dev/null +++ b/homeassistant/components/glances/translations/da.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "V\u00e6rten er allerede konfigureret." + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse til v\u00e6rt", + "wrong_version": "Version underst\u00f8ttes ikke (kun 2 eller 3)" + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "name": "Navn", + "password": "Adgangskode", + "port": "Port", + "ssl": "Brug SSL/TLS til at oprette forbindelse til Glances-systemet", + "username": "Brugernavn", + "verify_ssl": "Bekr\u00e6ft certificering af systemet", + "version": "Glances API version (2 eller 3)" + }, + "title": "Ops\u00e6tning af Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Opdateringsfrekvens" + }, + "description": "Konfigurationsindstillinger for Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/de.json b/homeassistant/components/glances/translations/de.json new file mode 100644 index 00000000000..69c34907f19 --- /dev/null +++ b/homeassistant/components/glances/translations/de.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Host ist bereits konfiguriert." + }, + "error": { + "cannot_connect": "Verbindung zum Host nicht m\u00f6glich", + "wrong_version": "Version nicht unterst\u00fctzt (nur 2 oder 3)" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name", + "password": "Passwort", + "port": "Port", + "ssl": "Verwende SSL / TLS, um eine Verbindung zum Glances-System herzustellen", + "username": "Benutzername", + "verify_ssl": "\u00dcberpr\u00fcfe die Zertifizierung des Systems", + "version": "Glances API-Version (2 oder 3)" + }, + "title": "Glances einrichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Aktualisierungsfrequenz" + }, + "description": "Konfiguriere die Optionen f\u00fcr Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/en.json b/homeassistant/components/glances/translations/en.json new file mode 100644 index 00000000000..0330e8cef65 --- /dev/null +++ b/homeassistant/components/glances/translations/en.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Host is already configured." + }, + "error": { + "cannot_connect": "Unable to connect to host", + "wrong_version": "Version not supported (2 or 3 only)" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name", + "password": "Password", + "port": "Port", + "ssl": "Use SSL/TLS to connect to the Glances system", + "username": "Username", + "verify_ssl": "Verify the certification of the system", + "version": "Glances API Version (2 or 3)" + }, + "title": "Setup Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Update frequency" + }, + "description": "Configure options for Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/es-419.json b/homeassistant/components/glances/translations/es-419.json similarity index 100% rename from homeassistant/components/glances/.translations/es-419.json rename to homeassistant/components/glances/translations/es-419.json diff --git a/homeassistant/components/glances/translations/es.json b/homeassistant/components/glances/translations/es.json new file mode 100644 index 00000000000..16b768fd922 --- /dev/null +++ b/homeassistant/components/glances/translations/es.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "El host ya est\u00e1 configurado." + }, + "error": { + "cannot_connect": "No se puede conectar al host", + "wrong_version": "Versi\u00f3n no soportada (s\u00f3lo 2 o 3)" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nombre", + "password": "Contrase\u00f1a", + "port": "Puerto", + "ssl": "Utilice SSL/TLS para conectarse al sistema Glances", + "username": "Usuario", + "verify_ssl": "Verificar la certificaci\u00f3n del sistema", + "version": "Versi\u00f3n API Glances (2 o 3)" + }, + "title": "Configurar Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Frecuencia de actualizaci\u00f3n" + }, + "description": "Configurar opciones para Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/fi.json b/homeassistant/components/glances/translations/fi.json similarity index 100% rename from homeassistant/components/glances/.translations/fi.json rename to homeassistant/components/glances/translations/fi.json diff --git a/homeassistant/components/glances/translations/fr.json b/homeassistant/components/glances/translations/fr.json new file mode 100644 index 00000000000..cc9be2d6ce8 --- /dev/null +++ b/homeassistant/components/glances/translations/fr.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "L'h\u00f4te est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "cannot_connect": "Impossible de se connecter \u00e0 l'h\u00f4te", + "wrong_version": "Version non prise en charge (2 ou 3 uniquement)" + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "name": "Nom", + "password": "Mot de passe", + "port": "Port", + "ssl": "Utiliser SSL / TLS pour se connecter au syst\u00e8me Glances", + "username": "Nom d'utilisateur", + "verify_ssl": "V\u00e9rifier la certification du syst\u00e8me", + "version": "Glances API Version (2 ou 3)" + }, + "title": "Installation de Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Fr\u00e9quence de mise \u00e0 jour" + }, + "description": "Configurer les options pour Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/hu.json b/homeassistant/components/glances/translations/hu.json new file mode 100644 index 00000000000..ebb44dc1d6e --- /dev/null +++ b/homeassistant/components/glances/translations/hu.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Kiszolg\u00e1l\u00f3 m\u00e1r konfigur\u00e1lva van." + }, + "error": { + "cannot_connect": "Nem lehet csatlakozni a kiszolg\u00e1l\u00f3hoz", + "wrong_version": "Nem t\u00e1mogatott verzi\u00f3 (2 vagy 3 csak)" + }, + "step": { + "user": { + "data": { + "host": "Kiszolg\u00e1l\u00f3", + "name": "N\u00e9v", + "password": "Jelsz\u00f3", + "port": "Port", + "ssl": "Az SSL / TLS haszn\u00e1lat\u00e1val csatlakozzon a Glances rendszerhez", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v", + "verify_ssl": "A rendszer tan\u00fas\u00edt\u00e1s\u00e1nak ellen\u0151rz\u00e9se", + "version": "Glances API-verzi\u00f3 (2 vagy 3)" + }, + "title": "Glances Be\u00e1ll\u00edt\u00e1sa" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Friss\u00edt\u00e9si gyakoris\u00e1g" + }, + "description": "A Glances be\u00e1ll\u00edt\u00e1sainak konfigur\u00e1l\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/it.json b/homeassistant/components/glances/translations/it.json new file mode 100644 index 00000000000..7e8d5af6d8f --- /dev/null +++ b/homeassistant/components/glances/translations/it.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "L'host \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Impossibile connettersi all'host", + "wrong_version": "Versione non supportata (solo 2 o 3)" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nome", + "password": "Password", + "port": "Porta", + "ssl": "Utilizzare SSL/TLS per connettersi al sistema Glances", + "username": "Nome utente", + "verify_ssl": "Verificare la certificazione del sistema", + "version": "Glances API Version (2 o 3)" + }, + "title": "Impostare Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Frequenza di aggiornamento" + }, + "description": "Configura le opzioni per Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/ko.json b/homeassistant/components/glances/translations/ko.json new file mode 100644 index 00000000000..d0e318a0454 --- /dev/null +++ b/homeassistant/components/glances/translations/ko.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "wrong_version": "\ud574\ub2f9 \ubc84\uc804\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 (2 \ub610\ub294 3\ub9cc \uc9c0\uc6d0)" + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "name": "\uc774\ub984", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "ssl": "SSL/TLS \ub97c \uc0ac\uc6a9\ud558\uc5ec Glances \uc2dc\uc2a4\ud15c\uc5d0 \uc5f0\uacb0", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", + "verify_ssl": "\uc2dc\uc2a4\ud15c \uc778\uc99d \ud655\uc778", + "version": "Glances API \ubc84\uc804 (2 \ub610\ub294 3)" + }, + "title": "Glances \uc124\uce58" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\uc5c5\ub370\uc774\ud2b8 \ube48\ub3c4" + }, + "description": "Glances \uc635\uc158 \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/lb.json b/homeassistant/components/glances/translations/lb.json new file mode 100644 index 00000000000..4aba9293bd9 --- /dev/null +++ b/homeassistant/components/glances/translations/lb.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Kann sech net mam Server verbannen.", + "wrong_version": "Versioun net \u00ebnnerst\u00ebtzt (n\u00ebmmen 2 oder 3)" + }, + "step": { + "user": { + "data": { + "host": "Apparat", + "name": "Numm", + "password": "Passwuert", + "port": "Port", + "ssl": "Benotzt SSL/TLS fir sech mam Usiichte System ze verbannen", + "username": "Benotzernumm", + "verify_ssl": "Zertifikatioun vum System iwwerpr\u00e9iwen", + "version": "API Versioun vun den Usiichten (2 oder 3)" + }, + "title": "Usiichten konfigur\u00e9ieren" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Intervalle vun de Mise \u00e0 jour" + }, + "description": "Optioune konfigur\u00e9ieren fir d'Usiichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/nl.json b/homeassistant/components/glances/translations/nl.json new file mode 100644 index 00000000000..c2f2b9d473a --- /dev/null +++ b/homeassistant/components/glances/translations/nl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Host is al geconfigureerd." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met host", + "wrong_version": "Versie niet ondersteund (alleen 2 of 3)" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Naam", + "password": "Wachtwoord", + "port": "Poort", + "ssl": "Gebruik SSL / TLS om verbinding te maken met het Glances-systeem", + "username": "Gebruikersnaam", + "verify_ssl": "Controleer de certificering van het systeem", + "version": "Glances API-versie (2 of 3)" + }, + "title": "Glances instellen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Update frequentie" + }, + "description": "Configureer opties voor Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/nn.json b/homeassistant/components/glances/translations/nn.json new file mode 100644 index 00000000000..c392b228e89 --- /dev/null +++ b/homeassistant/components/glances/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Glances" +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/no.json b/homeassistant/components/glances/translations/no.json new file mode 100644 index 00000000000..dd593c4add6 --- /dev/null +++ b/homeassistant/components/glances/translations/no.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Verten er allerede konfigurert." + }, + "error": { + "cannot_connect": "Kan ikke koble til vert", + "wrong_version": "Versjonen st\u00f8ttes ikke (bare 2 eller 3)" + }, + "step": { + "user": { + "data": { + "host": "Vert", + "name": "Navn", + "password": "Passord", + "port": "", + "ssl": "Bruk SSL / TLS for \u00e5 koble til Glances-systemet", + "username": "Brukernavn", + "verify_ssl": "Bekreft sertifiseringen av systemet", + "version": "Glances API-versjon (2 eller 3)" + }, + "title": "Oppsett av Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Oppdater frekvens" + }, + "description": "Konfigurasjonsalternativer for Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/pl.json b/homeassistant/components/glances/translations/pl.json new file mode 100644 index 00000000000..25179e951ad --- /dev/null +++ b/homeassistant/components/glances/translations/pl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Host jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z hostem", + "wrong_version": "Wersja nieobs\u0142ugiwana (tylko 2 lub 3)" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa", + "password": "Has\u0142o", + "port": "Port", + "ssl": "U\u017cyj SSL/TLS, aby po\u0142\u0105czy\u0107 si\u0119 z systemem Glances", + "username": "Nazwa u\u017cytkownika", + "verify_ssl": "Sprawd\u017a certyfikacj\u0119 systemu", + "version": "Glances wersja API (2 lub 3)" + }, + "title": "Konfiguracja Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" + }, + "description": "Konfiguracja opcji dla Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/pt-BR.json b/homeassistant/components/glances/translations/pt-BR.json similarity index 100% rename from homeassistant/components/glances/.translations/pt-BR.json rename to homeassistant/components/glances/translations/pt-BR.json diff --git a/homeassistant/components/glances/translations/pt.json b/homeassistant/components/glances/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/glances/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/glances/translations/ru.json b/homeassistant/components/glances/translations/ru.json new file mode 100644 index 00000000000..d87bcb536cf --- /dev/null +++ b/homeassistant/components/glances/translations/ru.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0445\u043e\u0441\u0442\u0443.", + "wrong_version": "\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0438 2 \u0438 3." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL / TLS \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f", + "username": "\u041b\u043e\u0433\u0438\u043d", + "verify_ssl": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b", + "version": "\u0412\u0435\u0440\u0441\u0438\u044f API Glances (2 \u0438\u043b\u0438 3)" + }, + "title": "Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f" + }, + "description": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/sl.json b/homeassistant/components/glances/translations/sl.json new file mode 100644 index 00000000000..081b9ebfda1 --- /dev/null +++ b/homeassistant/components/glances/translations/sl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Gostitelj je \u017ee konfiguriran." + }, + "error": { + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave z gostiteljem", + "wrong_version": "Razli\u010dica ni podprta (samo 2 ali 3)" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Ime", + "password": "Geslo", + "port": "Vrata", + "ssl": "Za povezavo s sistemom Glances uporabite SSL/TLS", + "username": "Uporabni\u0161ko ime", + "verify_ssl": "Preverite veljavnost potrdila sistema", + "version": "Glances API Version (2 ali 3)" + }, + "title": "Nastavite Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Pogostost posodabljanja" + }, + "description": "Konfiguracija mo\u017enosti za Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/sv.json b/homeassistant/components/glances/translations/sv.json new file mode 100644 index 00000000000..c4ead9e6aa6 --- /dev/null +++ b/homeassistant/components/glances/translations/sv.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "V\u00e4rden \u00e4r redan konfigurerad." + }, + "error": { + "cannot_connect": "Det g\u00e5r inte att ansluta till v\u00e4rden", + "wrong_version": "Version st\u00f6ds inte (endast 2 eller 3)" + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rd", + "name": "Namn", + "password": "L\u00f6senord", + "port": "Port", + "ssl": "Anv\u00e4nd SSL / TLS f\u00f6r att ansluta till Glances-systemet", + "username": "Anv\u00e4ndarnamn", + "verify_ssl": "Verifiera certifieringen av systemet", + "version": "Glances API-version (2 eller 3)" + }, + "title": "St\u00e4ll in Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Uppdateringsfrekvens" + }, + "description": "Konfigurera alternativ f\u00f6r Glances" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/.translations/th.json b/homeassistant/components/glances/translations/th.json similarity index 100% rename from homeassistant/components/glances/.translations/th.json rename to homeassistant/components/glances/translations/th.json diff --git a/homeassistant/components/glances/translations/zh-Hant.json b/homeassistant/components/glances/translations/zh-Hant.json new file mode 100644 index 00000000000..dd7c3711e37 --- /dev/null +++ b/homeassistant/components/glances/translations/zh-Hant.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u4e3b\u6a5f\u7aef", + "wrong_version": "\u7248\u672c\u4e0d\u652f\u63f4\uff08\u50c5 2 \u6216 3\uff09" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "name": "\u540d\u7a31", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "ssl": "\u4f7f\u7528 SSL/TLS \u9023\u7dda\u81f3 Glances \u7cfb\u7d71", + "username": "\u4f7f\u7528\u8005\u540d\u7a31", + "verify_ssl": "\u9a57\u8b49\u7cfb\u7d71\u8a8d\u8b49", + "version": "Glances API \u7248\u672c\uff082 \u6216 3\uff09" + }, + "title": "\u8a2d\u5b9a Glances" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\u66f4\u65b0\u983b\u7387" + }, + "description": "Glances \u8a2d\u5b9a\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gntp/manifest.json b/homeassistant/components/gntp/manifest.json index 3433b369456..bd2a260faca 100644 --- a/homeassistant/components/gntp/manifest.json +++ b/homeassistant/components/gntp/manifest.json @@ -3,6 +3,5 @@ "name": "Growl (GnGNTP)", "documentation": "https://www.home-assistant.io/integrations/gntp", "requirements": ["gntp==1.0.3"], - "dependencies": [], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/goalfeed/manifest.json b/homeassistant/components/goalfeed/manifest.json index f0202dbb4f3..d07c7c2df7e 100644 --- a/homeassistant/components/goalfeed/manifest.json +++ b/homeassistant/components/goalfeed/manifest.json @@ -3,6 +3,5 @@ "name": "Goalfeed", "documentation": "https://www.home-assistant.io/integrations/goalfeed", "requirements": ["pysher==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/gogogate2/manifest.json b/homeassistant/components/gogogate2/manifest.json index 690f2098cac..829df5a1c37 100644 --- a/homeassistant/components/gogogate2/manifest.json +++ b/homeassistant/components/gogogate2/manifest.json @@ -3,6 +3,5 @@ "name": "Gogogate2", "documentation": "https://www.home-assistant.io/integrations/gogogate2", "requirements": ["pygogogate2==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/google/__init__.py b/homeassistant/components/google/__init__.py index f3321416b1f..93afb43cf52 100644 --- a/homeassistant/components/google/__init__.py +++ b/homeassistant/components/google/__init__.py @@ -221,7 +221,7 @@ def setup(hass, config): def check_correct_scopes(token_file): """Check for the correct scopes in file.""" - tokenfile = open(token_file, "r").read() + tokenfile = open(token_file).read() if "readonly" in tokenfile: _LOGGER.warning("Please re-authenticate with Google.") return False @@ -234,7 +234,7 @@ def setup_services(hass, hass_config, track_new_found_calendars, calendar_servic def _found_calendar(call): """Check if we know about a calendar and generate PLATFORM_DISCOVER.""" calendar = get_calendar_info(hass, call.data) - if hass.data[DATA_INDEX].get(calendar[CONF_CAL_ID], None) is not None: + if hass.data[DATA_INDEX].get(calendar[CONF_CAL_ID]) is not None: return hass.data[DATA_INDEX].update({calendar[CONF_CAL_ID]: calendar}) diff --git a/homeassistant/components/google/manifest.json b/homeassistant/components/google/manifest.json index 5c1be98bb56..1c14609f508 100644 --- a/homeassistant/components/google/manifest.json +++ b/homeassistant/components/google/manifest.json @@ -7,6 +7,5 @@ "httplib2==0.10.3", "oauth2client==4.0.0" ], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/google/services.yaml b/homeassistant/components/google/services.yaml index 048e886dc4e..702b8347676 100644 --- a/homeassistant/components/google/services.yaml +++ b/homeassistant/components/google/services.yaml @@ -7,25 +7,25 @@ add_event: fields: calendar_id: description: The id of the calendar you want. - example: 'Your email' + example: "Your email" summary: description: Acts as the title of the event. - example: 'Bowling' + example: "Bowling" description: description: The description of the event. Optional. - example: 'Birthday bowling' + example: "Birthday bowling" start_date_time: description: The date and time the event should start. - example: '2019-03-22 20:00:00' + example: "2019-03-22 20:00:00" end_date_time: description: The date and time the event should end. - example: '2019-03-22 22:00:00' + example: "2019-03-22 22:00:00" start_date: description: The date the whole day event should start. - example: '2019-03-10' + example: "2019-03-10" end_date: description: The date the whole day event should end. - example: '2019-03-11' + example: "2019-03-11" in: description: Days or weeks that you want to create the event in. - example: '"days": 2 or "weeks": 2' \ No newline at end of file + example: '"days": 2 or "weeks": 2' diff --git a/homeassistant/components/google_assistant/const.py b/homeassistant/components/google_assistant/const.py index c9f8d857b62..37fef6f2d79 100644 --- a/homeassistant/components/google_assistant/const.py +++ b/homeassistant/components/google_assistant/const.py @@ -57,29 +57,29 @@ DEFAULT_EXPOSED_DOMAINS = [ ] PREFIX_TYPES = "action.devices.types." -TYPE_CAMERA = PREFIX_TYPES + "CAMERA" -TYPE_LIGHT = PREFIX_TYPES + "LIGHT" -TYPE_SWITCH = PREFIX_TYPES + "SWITCH" -TYPE_VACUUM = PREFIX_TYPES + "VACUUM" -TYPE_SCENE = PREFIX_TYPES + "SCENE" -TYPE_FAN = PREFIX_TYPES + "FAN" -TYPE_THERMOSTAT = PREFIX_TYPES + "THERMOSTAT" -TYPE_LOCK = PREFIX_TYPES + "LOCK" -TYPE_BLINDS = PREFIX_TYPES + "BLINDS" -TYPE_GARAGE = PREFIX_TYPES + "GARAGE" -TYPE_OUTLET = PREFIX_TYPES + "OUTLET" -TYPE_SENSOR = PREFIX_TYPES + "SENSOR" -TYPE_DOOR = PREFIX_TYPES + "DOOR" -TYPE_TV = PREFIX_TYPES + "TV" -TYPE_SPEAKER = PREFIX_TYPES + "SPEAKER" -TYPE_ALARM = PREFIX_TYPES + "SECURITYSYSTEM" +TYPE_CAMERA = f"{PREFIX_TYPES}CAMERA" +TYPE_LIGHT = f"{PREFIX_TYPES}LIGHT" +TYPE_SWITCH = f"{PREFIX_TYPES}SWITCH" +TYPE_VACUUM = f"{PREFIX_TYPES}VACUUM" +TYPE_SCENE = f"{PREFIX_TYPES}SCENE" +TYPE_FAN = f"{PREFIX_TYPES}FAN" +TYPE_THERMOSTAT = f"{PREFIX_TYPES}THERMOSTAT" +TYPE_LOCK = f"{PREFIX_TYPES}LOCK" +TYPE_BLINDS = f"{PREFIX_TYPES}BLINDS" +TYPE_GARAGE = f"{PREFIX_TYPES}GARAGE" +TYPE_OUTLET = f"{PREFIX_TYPES}OUTLET" +TYPE_SENSOR = f"{PREFIX_TYPES}SENSOR" +TYPE_DOOR = f"{PREFIX_TYPES}DOOR" +TYPE_TV = f"{PREFIX_TYPES}TV" +TYPE_SPEAKER = f"{PREFIX_TYPES}SPEAKER" +TYPE_ALARM = f"{PREFIX_TYPES}SECURITYSYSTEM" SERVICE_REQUEST_SYNC = "request_sync" HOMEGRAPH_URL = "https://homegraph.googleapis.com/" HOMEGRAPH_SCOPE = "https://www.googleapis.com/auth/homegraph" HOMEGRAPH_TOKEN_URL = "https://accounts.google.com/o/oauth2/token" -REQUEST_SYNC_BASE_URL = HOMEGRAPH_URL + "v1/devices:requestSync" -REPORT_STATE_BASE_URL = HOMEGRAPH_URL + "v1/devices:reportStateAndNotification" +REQUEST_SYNC_BASE_URL = f"{HOMEGRAPH_URL}v1/devices:requestSync" +REPORT_STATE_BASE_URL = f"{HOMEGRAPH_URL}v1/devices:reportStateAndNotification" # Error codes used for SmartHomeError class # https://developers.google.com/actions/reference/smarthome/errors-exceptions diff --git a/homeassistant/components/google_assistant/helpers.py b/homeassistant/components/google_assistant/helpers.py index bbdb8a82183..6c2fa3d82e1 100644 --- a/homeassistant/components/google_assistant/helpers.py +++ b/homeassistant/components/google_assistant/helpers.py @@ -423,8 +423,9 @@ class GoogleEntity: device["otherDeviceIds"] = [{"deviceId": self.entity_id}] device["customData"] = { "webhookId": self.config.local_sdk_webhook_id, - "httpPort": self.hass.config.api.port, + "httpPort": self.hass.http.server_port, "httpSSL": self.hass.config.api.use_ssl, + "baseUrl": self.hass.config.api.base_url, "proxyDeviceId": agent_user_id, } diff --git a/homeassistant/components/google_assistant/http.py b/homeassistant/components/google_assistant/http.py index 4c16e230e92..7b75a36f8bb 100644 --- a/homeassistant/components/google_assistant/http.py +++ b/homeassistant/components/google_assistant/http.py @@ -10,7 +10,7 @@ import jwt # Typing imports from homeassistant.components.http import HomeAssistantView -from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES +from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES, HTTP_INTERNAL_SERVER_ERROR from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.util import dt as dt_util @@ -177,7 +177,7 @@ class GoogleConfig(AbstractConfig): return error.status except (asyncio.TimeoutError, ClientError): _LOGGER.error("Could not contact %s", url) - return 500 + return HTTP_INTERNAL_SERVER_ERROR async def async_call_homegraph_api(self, url, data): """Call a homegraph api with authentication.""" @@ -212,7 +212,7 @@ class GoogleConfig(AbstractConfig): return error.status except (asyncio.TimeoutError, ClientError): _LOGGER.error("Could not contact %s", url) - return 500 + return HTTP_INTERNAL_SERVER_ERROR async def async_report_state(self, message, agent_user_id: str): """Send a state report to Google.""" diff --git a/homeassistant/components/google_assistant/manifest.json b/homeassistant/components/google_assistant/manifest.json index 0f266801343..eef58106bd0 100644 --- a/homeassistant/components/google_assistant/manifest.json +++ b/homeassistant/components/google_assistant/manifest.json @@ -2,7 +2,6 @@ "domain": "google_assistant", "name": "Google Assistant", "documentation": "https://www.home-assistant.io/integrations/google_assistant", - "requirements": [], "dependencies": ["http"], "after_dependencies": ["camera"], "codeowners": ["@home-assistant/cloud"] diff --git a/homeassistant/components/google_assistant/report_state.py b/homeassistant/components/google_assistant/report_state.py index d6bcafd3bff..ad944362721 100644 --- a/homeassistant/components/google_assistant/report_state.py +++ b/homeassistant/components/google_assistant/report_state.py @@ -48,6 +48,8 @@ def async_enable_report_state(hass: HomeAssistant, google_config: AbstractConfig if entity_data == old_entity.query_serialize(): return + _LOGGER.debug("Reporting state for %s: %s", changed_entity, entity_data) + await google_config.async_report_state_all( {"devices": {"states": {changed_entity: entity_data}}} ) diff --git a/homeassistant/components/google_assistant/smart_home.py b/homeassistant/components/google_assistant/smart_home.py index 55e121e2fc7..71e0d252fe1 100644 --- a/homeassistant/components/google_assistant/smart_home.py +++ b/homeassistant/components/google_assistant/smart_home.py @@ -96,6 +96,8 @@ async def async_devices_sync(hass, data, payload): await data.config.async_connect_agent_user(agent_user_id) + _LOGGER.debug("Syncing entities response: %s", response) + return response @@ -243,7 +245,7 @@ async def async_devices_identify(hass, data: RequestData, payload): """ return { "device": { - "id": data.context.user_id, + "id": data.config.get_agent_user_id(data.context), "isLocalOnly": True, "isProxy": True, "deviceInfo": { @@ -262,7 +264,7 @@ async def async_devices_reachable(hass, data: RequestData, payload): https://developers.google.com/actions/smarthome/create#actiondevicesdisconnect """ - google_ids = set(dev["id"] for dev in (data.devices or [])) + google_ids = {dev["id"] for dev in (data.devices or [])} return { "devices": [ diff --git a/homeassistant/components/google_assistant/trait.py b/homeassistant/components/google_assistant/trait.py index 2bc5f5040d4..ab045896235 100644 --- a/homeassistant/components/google_assistant/trait.py +++ b/homeassistant/components/google_assistant/trait.py @@ -68,45 +68,45 @@ from .error import ChallengeNeeded, SmartHomeError _LOGGER = logging.getLogger(__name__) PREFIX_TRAITS = "action.devices.traits." -TRAIT_CAMERA_STREAM = PREFIX_TRAITS + "CameraStream" -TRAIT_ONOFF = PREFIX_TRAITS + "OnOff" -TRAIT_DOCK = PREFIX_TRAITS + "Dock" -TRAIT_STARTSTOP = PREFIX_TRAITS + "StartStop" -TRAIT_BRIGHTNESS = PREFIX_TRAITS + "Brightness" -TRAIT_COLOR_SETTING = PREFIX_TRAITS + "ColorSetting" -TRAIT_SCENE = PREFIX_TRAITS + "Scene" -TRAIT_TEMPERATURE_SETTING = PREFIX_TRAITS + "TemperatureSetting" -TRAIT_LOCKUNLOCK = PREFIX_TRAITS + "LockUnlock" -TRAIT_FANSPEED = PREFIX_TRAITS + "FanSpeed" -TRAIT_MODES = PREFIX_TRAITS + "Modes" -TRAIT_OPENCLOSE = PREFIX_TRAITS + "OpenClose" -TRAIT_VOLUME = PREFIX_TRAITS + "Volume" -TRAIT_ARMDISARM = PREFIX_TRAITS + "ArmDisarm" -TRAIT_HUMIDITY_SETTING = PREFIX_TRAITS + "HumiditySetting" +TRAIT_CAMERA_STREAM = f"{PREFIX_TRAITS}CameraStream" +TRAIT_ONOFF = f"{PREFIX_TRAITS}OnOff" +TRAIT_DOCK = f"{PREFIX_TRAITS}Dock" +TRAIT_STARTSTOP = f"{PREFIX_TRAITS}StartStop" +TRAIT_BRIGHTNESS = f"{PREFIX_TRAITS}Brightness" +TRAIT_COLOR_SETTING = f"{PREFIX_TRAITS}ColorSetting" +TRAIT_SCENE = f"{PREFIX_TRAITS}Scene" +TRAIT_TEMPERATURE_SETTING = f"{PREFIX_TRAITS}TemperatureSetting" +TRAIT_LOCKUNLOCK = f"{PREFIX_TRAITS}LockUnlock" +TRAIT_FANSPEED = f"{PREFIX_TRAITS}FanSpeed" +TRAIT_MODES = f"{PREFIX_TRAITS}Modes" +TRAIT_OPENCLOSE = f"{PREFIX_TRAITS}OpenClose" +TRAIT_VOLUME = f"{PREFIX_TRAITS}Volume" +TRAIT_ARMDISARM = f"{PREFIX_TRAITS}ArmDisarm" +TRAIT_HUMIDITY_SETTING = f"{PREFIX_TRAITS}HumiditySetting" PREFIX_COMMANDS = "action.devices.commands." -COMMAND_ONOFF = PREFIX_COMMANDS + "OnOff" -COMMAND_GET_CAMERA_STREAM = PREFIX_COMMANDS + "GetCameraStream" -COMMAND_DOCK = PREFIX_COMMANDS + "Dock" -COMMAND_STARTSTOP = PREFIX_COMMANDS + "StartStop" -COMMAND_PAUSEUNPAUSE = PREFIX_COMMANDS + "PauseUnpause" -COMMAND_BRIGHTNESS_ABSOLUTE = PREFIX_COMMANDS + "BrightnessAbsolute" -COMMAND_COLOR_ABSOLUTE = PREFIX_COMMANDS + "ColorAbsolute" -COMMAND_ACTIVATE_SCENE = PREFIX_COMMANDS + "ActivateScene" +COMMAND_ONOFF = f"{PREFIX_COMMANDS}OnOff" +COMMAND_GET_CAMERA_STREAM = f"{PREFIX_COMMANDS}GetCameraStream" +COMMAND_DOCK = f"{PREFIX_COMMANDS}Dock" +COMMAND_STARTSTOP = f"{PREFIX_COMMANDS}StartStop" +COMMAND_PAUSEUNPAUSE = f"{PREFIX_COMMANDS}PauseUnpause" +COMMAND_BRIGHTNESS_ABSOLUTE = f"{PREFIX_COMMANDS}BrightnessAbsolute" +COMMAND_COLOR_ABSOLUTE = f"{PREFIX_COMMANDS}ColorAbsolute" +COMMAND_ACTIVATE_SCENE = f"{PREFIX_COMMANDS}ActivateScene" COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT = ( - PREFIX_COMMANDS + "ThermostatTemperatureSetpoint" + f"{PREFIX_COMMANDS}ThermostatTemperatureSetpoint" ) COMMAND_THERMOSTAT_TEMPERATURE_SET_RANGE = ( - PREFIX_COMMANDS + "ThermostatTemperatureSetRange" + f"{PREFIX_COMMANDS}ThermostatTemperatureSetRange" ) -COMMAND_THERMOSTAT_SET_MODE = PREFIX_COMMANDS + "ThermostatSetMode" -COMMAND_LOCKUNLOCK = PREFIX_COMMANDS + "LockUnlock" -COMMAND_FANSPEED = PREFIX_COMMANDS + "SetFanSpeed" -COMMAND_MODES = PREFIX_COMMANDS + "SetModes" -COMMAND_OPENCLOSE = PREFIX_COMMANDS + "OpenClose" -COMMAND_SET_VOLUME = PREFIX_COMMANDS + "setVolume" -COMMAND_VOLUME_RELATIVE = PREFIX_COMMANDS + "volumeRelative" -COMMAND_ARMDISARM = PREFIX_COMMANDS + "ArmDisarm" +COMMAND_THERMOSTAT_SET_MODE = f"{PREFIX_COMMANDS}ThermostatSetMode" +COMMAND_LOCKUNLOCK = f"{PREFIX_COMMANDS}LockUnlock" +COMMAND_FANSPEED = f"{PREFIX_COMMANDS}SetFanSpeed" +COMMAND_MODES = f"{PREFIX_COMMANDS}SetModes" +COMMAND_OPENCLOSE = f"{PREFIX_COMMANDS}OpenClose" +COMMAND_SET_VOLUME = f"{PREFIX_COMMANDS}setVolume" +COMMAND_VOLUME_RELATIVE = f"{PREFIX_COMMANDS}volumeRelative" +COMMAND_ARMDISARM = f"{PREFIX_COMMANDS}ArmDisarm" TRAITS = [] diff --git a/homeassistant/components/google_cloud/manifest.json b/homeassistant/components/google_cloud/manifest.json index bef8a2f08a9..12d761786d3 100644 --- a/homeassistant/components/google_cloud/manifest.json +++ b/homeassistant/components/google_cloud/manifest.json @@ -3,6 +3,5 @@ "name": "Google Cloud Platform", "documentation": "https://www.home-assistant.io/integrations/google_cloud", "requirements": ["google-cloud-texttospeech==0.4.0"], - "dependencies": [], "codeowners": ["@lufton"] } diff --git a/homeassistant/components/google_cloud/tts.py b/homeassistant/components/google_cloud/tts.py index 6721520d130..96bd9e93919 100644 --- a/homeassistant/components/google_cloud/tts.py +++ b/homeassistant/components/google_cloud/tts.py @@ -22,6 +22,9 @@ CONF_GAIN = "gain" CONF_PROFILES = "profiles" SUPPORTED_LANGUAGES = [ + "ar-XA", + "bn-IN", + "cmn-CN", "cs-CZ", "da-DK", "de-DE", @@ -35,12 +38,15 @@ SUPPORTED_LANGUAGES = [ "fil-PH", "fr-CA", "fr-FR", + "gu-IN", "hi-IN", "hu-HU", "id-ID", "it-IT", "ja-JP", + "kn-IN", "ko-KR", + "ml-IN", "nb-NO", "nl-NL", "pl-PL", @@ -49,6 +55,9 @@ SUPPORTED_LANGUAGES = [ "ru-RU", "sk-SK", "sv-SE", + "ta-IN", + "te-IN", + "th-TH", "tr-TR", "uk-UA", "vi-VN", diff --git a/homeassistant/components/google_domains/manifest.json b/homeassistant/components/google_domains/manifest.json index 0d47135be50..3372bb3f97d 100644 --- a/homeassistant/components/google_domains/manifest.json +++ b/homeassistant/components/google_domains/manifest.json @@ -2,7 +2,5 @@ "domain": "google_domains", "name": "Google Domains", "documentation": "https://www.home-assistant.io/integrations/google_domains", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/google_maps/manifest.json b/homeassistant/components/google_maps/manifest.json index dc93bbe5c94..62791c212f9 100644 --- a/homeassistant/components/google_maps/manifest.json +++ b/homeassistant/components/google_maps/manifest.json @@ -3,6 +3,5 @@ "name": "Google Maps", "documentation": "https://www.home-assistant.io/integrations/google_maps", "requirements": ["locationsharinglib==4.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/google_pubsub/manifest.json b/homeassistant/components/google_pubsub/manifest.json index 1a59e453c6e..c879788f2c0 100644 --- a/homeassistant/components/google_pubsub/manifest.json +++ b/homeassistant/components/google_pubsub/manifest.json @@ -3,6 +3,5 @@ "name": "Google Pub/Sub", "documentation": "https://www.home-assistant.io/integrations/google_pubsub", "requirements": ["google-cloud-pubsub==0.39.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/google_translate/manifest.json b/homeassistant/components/google_translate/manifest.json index dba7020d076..452a5352aac 100644 --- a/homeassistant/components/google_translate/manifest.json +++ b/homeassistant/components/google_translate/manifest.json @@ -3,6 +3,5 @@ "name": "Google Translate Text-to-Speech", "documentation": "https://www.home-assistant.io/integrations/google_translate", "requirements": ["gTTS-token==1.1.3"], - "dependencies": [], "codeowners": ["@awarecan"] } diff --git a/homeassistant/components/google_translate/tts.py b/homeassistant/components/google_translate/tts.py index e35a229ab98..36543e0515e 100644 --- a/homeassistant/components/google_translate/tts.py +++ b/homeassistant/components/google_translate/tts.py @@ -11,6 +11,7 @@ import voluptuous as vol import yarl from homeassistant.components.tts import CONF_LANG, PLATFORM_SCHEMA, Provider +from homeassistant.const import HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession _LOGGER = logging.getLogger(__name__) @@ -142,7 +143,7 @@ class GoogleProvider(Provider): GOOGLE_SPEECH_URL, params=url_param, headers=self.headers ) - if request.status != 200: + if request.status != HTTP_OK: _LOGGER.error( "Error %d on load URL %s", request.status, request.url ) diff --git a/homeassistant/components/google_travel_time/manifest.json b/homeassistant/components/google_travel_time/manifest.json index ce7ca9d10ab..8f235cf9947 100644 --- a/homeassistant/components/google_travel_time/manifest.json +++ b/homeassistant/components/google_travel_time/manifest.json @@ -3,6 +3,5 @@ "name": "Google Maps Travel Time", "documentation": "https://www.home-assistant.io/integrations/google_travel_time", "requirements": ["googlemaps==2.5.1"], - "dependencies": [], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/google_travel_time/sensor.py b/homeassistant/components/google_travel_time/sensor.py index dd7d9bf8585..098c6d2d59c 100644 --- a/homeassistant/components/google_travel_time/sensor.py +++ b/homeassistant/components/google_travel_time/sensor.py @@ -321,7 +321,7 @@ class GoogleTravelTimeSensor(Entity): def _get_location_from_attributes(entity): """Get the lat/long string from an entities attributes.""" attr = entity.attributes - return "%s,%s" % (attr.get(ATTR_LATITUDE), attr.get(ATTR_LONGITUDE)) + return f"{attr.get(ATTR_LATITUDE)},{attr.get(ATTR_LONGITUDE)}" def _resolve_zone(self, friendly_name): entities = self._hass.states.all() diff --git a/homeassistant/components/google_wifi/manifest.json b/homeassistant/components/google_wifi/manifest.json index b46cea0ca46..285152239d3 100644 --- a/homeassistant/components/google_wifi/manifest.json +++ b/homeassistant/components/google_wifi/manifest.json @@ -2,7 +2,5 @@ "domain": "google_wifi", "name": "Google Wifi", "documentation": "https://www.home-assistant.io/integrations/google_wifi", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/gpsd/manifest.json b/homeassistant/components/gpsd/manifest.json index 16a1bbd51df..2a2bf0ffd36 100644 --- a/homeassistant/components/gpsd/manifest.json +++ b/homeassistant/components/gpsd/manifest.json @@ -3,6 +3,5 @@ "name": "GPSD", "documentation": "https://www.home-assistant.io/integrations/gpsd", "requirements": ["gps3==0.33.3"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/gpsd/sensor.py b/homeassistant/components/gpsd/sensor.py index 8696dde72cb..ea238269e59 100644 --- a/homeassistant/components/gpsd/sensor.py +++ b/homeassistant/components/gpsd/sensor.py @@ -58,7 +58,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): sock.connect((host, port)) sock.shutdown(2) _LOGGER.debug("Connection to GPSD possible") - except socket.error: + except OSError: _LOGGER.error("Not able to connect to GPSD") return False diff --git a/homeassistant/components/gpslogger/.translations/bg.json b/homeassistant/components/gpslogger/.translations/bg.json deleted file mode 100644 index f7ce9a67f54..00000000000 --- a/homeassistant/components/gpslogger/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 GPSLogger.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 GPSLogger. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 GPSLogger Webhook?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/ca.json b/homeassistant/components/gpslogger/.translations/ca.json deleted file mode 100644 index 296159f2e5a..00000000000 --- a/homeassistant/components/gpslogger/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de GPSLogger.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de GPSLogger.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar el Webhook de GPSLogger?", - "title": "Configuraci\u00f3 del Webhook de GPSLogger" - } - }, - "title": "Webhook de GPSLogger" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/cs.json b/homeassistant/components/gpslogger/.translations/cs.json deleted file mode 100644 index f79a9f5d739..00000000000 --- a/homeassistant/components/gpslogger/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Instalace dom\u00e1c\u00edho asistenta mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu, aby p\u0159ij\u00edmala zpr\u00e1vy od spole\u010dnosti GPSLogger.", - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset nastavit funkci Webhook v n\u00e1stroji GPSLogger. \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: ` {webhook_url} ' \n - Metoda: POST \n\n Dal\u0161\u00ed podrobnosti naleznete v [dokumentaci] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit GPSLogger Webhook?", - "title": "Nastavit GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/da.json b/homeassistant/components/gpslogger/.translations/da.json deleted file mode 100644 index b118783cd3c..00000000000 --- a/homeassistant/components/gpslogger/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage GPSLogger-meddelelser.", - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i GPSLogger.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere GPSLogger Webhook?", - "title": "Konfigurer GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/de.json b/homeassistant/components/gpslogger/.translations/de.json deleted file mode 100644 index 840cbdf234f..00000000000 --- a/homeassistant/components/gpslogger/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem internet erreichbar sein, um Nachrichten von GPSLogger zu erhalten.", - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "Um Ereignisse an Home Assistant zu senden, muss das Webhook Feature in der GPSLogger konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." - }, - "step": { - "user": { - "description": "M\u00f6chtest du den GPSLogger Webhook wirklich einrichten?", - "title": "GPSLogger Webhook einrichten" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/en.json b/homeassistant/components/gpslogger/.translations/en.json deleted file mode 100644 index ad8f978bc59..00000000000 --- a/homeassistant/components/gpslogger/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from GPSLogger.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup the webhook feature in GPSLogger.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." - }, - "step": { - "user": { - "description": "Are you sure you want to set up the GPSLogger Webhook?", - "title": "Set up the GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/es-419.json b/homeassistant/components/gpslogger/.translations/es-419.json deleted file mode 100644 index 960198eb04e..00000000000 --- a/homeassistant/components/gpslogger/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de GPSLogger.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en GPSLogger. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1 seguro de que desea configurar el Webhook de GPSLogger?", - "title": "Configurar el Webhook de GPSLogger" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/es.json b/homeassistant/components/gpslogger/.translations/es.json deleted file mode 100644 index 7b90a5c5caa..00000000000 --- a/homeassistant/components/gpslogger/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu Home Assistant debe ser accesible desde Internet para recibir mensajes de GPSLogger.", - "one_instance_allowed": "Solo se necesita una instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en GPSLogger.\n\nRellena la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nEcha un vistazo a [la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de GPSLogger?", - "title": "Configurar el webhook de GPSLogger" - } - }, - "title": "Webhook de GPSLogger" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/fr.json b/homeassistant/components/gpslogger/.translations/fr.json deleted file mode 100644 index ae2b2177712..00000000000 --- a/homeassistant/components/gpslogger/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages GPSLogger.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans GPSLogger. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer le Webhook GPSLogger ?", - "title": "Configurer le Webhook GPSLogger" - } - }, - "title": "Webhook GPSLogger" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/hu.json b/homeassistant/components/gpslogger/.translations/hu.json deleted file mode 100644 index 2d1dcad2174..00000000000 --- a/homeassistant/components/gpslogger/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Az Home Assistantnek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l, hogy megkapja a GPSLogger \u00fczeneteit.", - "one_instance_allowed": "Csak egy p\u00e9ld\u00e1ny sz\u00fcks\u00e9ges." - }, - "create_entry": { - "default": "Az esem\u00e9ny Home Assistantnek val\u00f3 k\u00fcld\u00e9s\u00e9hez be kell \u00e1ll\u00edtanod a webhook funkci\u00f3t a GPSLoggerben. \n\n Az al\u00e1bbi inform\u00e1ci\u00f3kat haszn\u00e1ld: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Tov\u00e1bbi r\u00e9szletek a [dokument\u00e1ci\u00f3] ( {docs_url} ) linken tal\u00e1lhat\u00f3k." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a GPSLogger Webhookot?", - "title": "GPSLogger Webhook be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/it.json b/homeassistant/components/gpslogger/.translations/it.json deleted file mode 100644 index aab8edbe44a..00000000000 --- a/homeassistant/components/gpslogger/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da GPSLogger.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai configurare la funzionalit\u00e0 webhook in GPSLogger.\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare il webhook di GPSLogger?", - "title": "Configura il webhook di GPSLogger" - } - }, - "title": "Webhook di GPSLogger" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/ko.json b/homeassistant/components/gpslogger/.translations/ko.json deleted file mode 100644 index 19bfc36e424..00000000000 --- a/homeassistant/components/gpslogger/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "GPSLogger \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 GPSLogger \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "GPSLogger Webhook \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "GPSLogger Webhook \uc124\uc815" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/lb.json b/homeassistant/components/gpslogger/.translations/lb.json deleted file mode 100644 index 78df911c868..00000000000 --- a/homeassistant/components/gpslogger/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir GPSLogger Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am GPSLogger ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." - }, - "step": { - "user": { - "description": "S\u00e9cher fir GPSLogger Webhook anzeriichten?", - "title": "GPSLogger Webhook ariichten" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/nl.json b/homeassistant/components/gpslogger/.translations/nl.json deleted file mode 100644 index f34a21b7897..00000000000 --- a/homeassistant/components/gpslogger/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant-instantie moet via internet toegankelijk zijn om berichten van GPSLogger te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Om evenementen naar Home Assistant te verzenden, moet u de webhook-functie instellen in GPSLogger. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n\n Zie [de documentatie] ( {docs_url} ) voor meer informatie." - }, - "step": { - "user": { - "description": "Weet je zeker dat je de GPSLogger Webhook wilt instellen?", - "title": "Configureer de GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/no.json b/homeassistant/components/gpslogger/.translations/no.json deleted file mode 100644 index 488a09c3768..00000000000 --- a/homeassistant/components/gpslogger/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra GPSLogger.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i GPSLogger. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil sette opp GPSLogger Webhook?", - "title": "Sett opp GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/pl.json b/homeassistant/components/gpslogger/.translations/pl.json deleted file mode 100644 index 434fdd2220a..00000000000 --- a/homeassistant/components/gpslogger/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z GPSlogger.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 lokalizacje do Home Assistant'a, musisz skonfigurowa\u0107 webhook w aplikacji GPSLogger. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Geofency?", - "title": "Konfiguracja Geofency Webhook" - } - }, - "title": "Konfiguracja Geofency Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/pt-BR.json b/homeassistant/components/gpslogger/.translations/pt-BR.json deleted file mode 100644 index 86c68a4cfb9..00000000000 --- a/homeassistant/components/gpslogger/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens do GPSLogger.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no GPSLogger. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." - }, - "step": { - "user": { - "description": "Tem a certeza que deseja configurar o GPSLogger Webhook?", - "title": "Configurar o GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/pt.json b/homeassistant/components/gpslogger/.translations/pt.json deleted file mode 100644 index 4dcfda52753..00000000000 --- a/homeassistant/components/gpslogger/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistent precisa de ser acess\u00edvel a partir da internet para receber mensagens GPSlogger.", - "one_instance_allowed": "Apenas uma inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no GPslogger. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o GPSLogger Webhook?", - "title": "Configurar o Geofency Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/ru.json b/homeassistant/components/gpslogger/.translations/ru.json deleted file mode 100644 index b33bde95aec..00000000000 --- a/homeassistant/components/gpslogger/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 GPSLogger.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f GPSLogger.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c GPSLogger?", - "title": "GPSLogger" - } - }, - "title": "GPSLogger" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/sl.json b/homeassistant/components/gpslogger/.translations/sl.json deleted file mode 100644 index 8e205bef437..00000000000 --- a/homeassistant/components/gpslogger/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopek prek interneta, da boste lahko prejemali GPSlogger sporo\u010dila.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "\u010ce \u017eelite dogodke poslati v Home Assistant, morate v GPSLoggerju nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti GPSloggerWebhook?", - "title": "Nastavite GPSlogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/sv.json b/homeassistant/components/gpslogger/.translations/sv.json deleted file mode 100644 index 3a927a70e61..00000000000 --- a/homeassistant/components/gpslogger/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig ifr\u00e5n internet f\u00f6r att ta emot meddelanden ifr\u00e5n GPSLogger.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i GPSLogger.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera GPSLogger Webhook?", - "title": "Konfigurera GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/zh-Hans.json b/homeassistant/components/gpslogger/.translations/zh-Hans.json deleted file mode 100644 index f99efa91c61..00000000000 --- a/homeassistant/components/gpslogger/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 GPSLogger \u6d88\u606f\u3002", - "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e GPSLogger \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e GPSLogger Webhook \u5417\uff1f", - "title": "\u8bbe\u7f6e GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/.translations/zh-Hant.json b/homeassistant/components/gpslogger/.translations/zh-Hant.json deleted file mode 100644 index c21e76a6eee..00000000000 --- a/homeassistant/components/gpslogger/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 GPSLogger \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc GPSLogger \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a GPSLogger Webhook\uff1f", - "title": "\u8a2d\u5b9a GPSLogger Webhook" - } - }, - "title": "GPSLogger Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/manifest.json b/homeassistant/components/gpslogger/manifest.json index f4fc556961b..9afbed0d684 100644 --- a/homeassistant/components/gpslogger/manifest.json +++ b/homeassistant/components/gpslogger/manifest.json @@ -3,7 +3,6 @@ "name": "GPSLogger", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/gpslogger", - "requirements": [], "dependencies": ["webhook"], "codeowners": [] } diff --git a/homeassistant/components/gpslogger/strings.json b/homeassistant/components/gpslogger/strings.json index d5641ef5db8..f3d4344cd49 100644 --- a/homeassistant/components/gpslogger/strings.json +++ b/homeassistant/components/gpslogger/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "GPSLogger Webhook", "step": { "user": { "title": "Set up the GPSLogger Webhook", @@ -15,4 +14,4 @@ "default": "To send events to Home Assistant, you will need to setup the webhook feature in GPSLogger.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/gpslogger/translations/bg.json b/homeassistant/components/gpslogger/translations/bg.json new file mode 100644 index 00000000000..56843e752c9 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 GPSLogger.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 GPSLogger. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 GPSLogger Webhook?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/ca.json b/homeassistant/components/gpslogger/translations/ca.json new file mode 100644 index 00000000000..aebd839a837 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de GPSLogger.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de GPSLogger.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar el Webhook de GPSLogger?", + "title": "Configuraci\u00f3 del Webhook de GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/cs.json b/homeassistant/components/gpslogger/translations/cs.json new file mode 100644 index 00000000000..d3420c011ca --- /dev/null +++ b/homeassistant/components/gpslogger/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Instalace dom\u00e1c\u00edho asistenta mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu, aby p\u0159ij\u00edmala zpr\u00e1vy od spole\u010dnosti GPSLogger.", + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset nastavit funkci Webhook v n\u00e1stroji GPSLogger. \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: ` {webhook_url} ' \n - Metoda: POST \n\n Dal\u0161\u00ed podrobnosti naleznete v [dokumentaci] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit GPSLogger Webhook?", + "title": "Nastavit GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/da.json b/homeassistant/components/gpslogger/translations/da.json new file mode 100644 index 00000000000..e14b3a9ceb0 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage GPSLogger-meddelelser.", + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i GPSLogger.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere GPSLogger Webhook?", + "title": "Konfigurer GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/de.json b/homeassistant/components/gpslogger/translations/de.json new file mode 100644 index 00000000000..3aab63489c3 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem internet erreichbar sein, um Nachrichten von GPSLogger zu erhalten.", + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "Um Ereignisse an Home Assistant zu senden, muss das Webhook Feature in der GPSLogger konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "M\u00f6chtest du den GPSLogger Webhook wirklich einrichten?", + "title": "GPSLogger Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/en.json b/homeassistant/components/gpslogger/translations/en.json new file mode 100644 index 00000000000..46bbb231483 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from GPSLogger.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup the webhook feature in GPSLogger.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up the GPSLogger Webhook?", + "title": "Set up the GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/es-419.json b/homeassistant/components/gpslogger/translations/es-419.json new file mode 100644 index 00000000000..a6d855dc758 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de GPSLogger.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en GPSLogger. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1 seguro de que desea configurar el Webhook de GPSLogger?", + "title": "Configurar el Webhook de GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/es.json b/homeassistant/components/gpslogger/translations/es.json new file mode 100644 index 00000000000..8ac817cacbf --- /dev/null +++ b/homeassistant/components/gpslogger/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu Home Assistant debe ser accesible desde Internet para recibir mensajes de GPSLogger.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en GPSLogger.\n\nRellena la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nEcha un vistazo a [la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de GPSLogger?", + "title": "Configurar el webhook de GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/fr.json b/homeassistant/components/gpslogger/translations/fr.json new file mode 100644 index 00000000000..65db2a5a300 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages GPSLogger.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans GPSLogger. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer le Webhook GPSLogger ?", + "title": "Configurer le Webhook GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/hu.json b/homeassistant/components/gpslogger/translations/hu.json new file mode 100644 index 00000000000..6080cf11c5e --- /dev/null +++ b/homeassistant/components/gpslogger/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Az Home Assistantnek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l, hogy megkapja a GPSLogger \u00fczeneteit.", + "one_instance_allowed": "Csak egy p\u00e9ld\u00e1ny sz\u00fcks\u00e9ges." + }, + "create_entry": { + "default": "Az esem\u00e9ny Home Assistantnek val\u00f3 k\u00fcld\u00e9s\u00e9hez be kell \u00e1ll\u00edtanod a webhook funkci\u00f3t a GPSLoggerben. \n\n Az al\u00e1bbi inform\u00e1ci\u00f3kat haszn\u00e1ld: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Tov\u00e1bbi r\u00e9szletek a [dokument\u00e1ci\u00f3] ( {docs_url} ) linken tal\u00e1lhat\u00f3k." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a GPSLogger Webhookot?", + "title": "GPSLogger Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/it.json b/homeassistant/components/gpslogger/translations/it.json new file mode 100644 index 00000000000..8c26f19ac5b --- /dev/null +++ b/homeassistant/components/gpslogger/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da GPSLogger.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai configurare la funzionalit\u00e0 webhook in GPSLogger.\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare il webhook di GPSLogger?", + "title": "Configura il webhook di GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/ko.json b/homeassistant/components/gpslogger/translations/ko.json new file mode 100644 index 00000000000..e0848849758 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "GPSLogger \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 GPSLogger \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "GPSLogger Webhook \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "GPSLogger Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/lb.json b/homeassistant/components/gpslogger/translations/lb.json new file mode 100644 index 00000000000..a69ac61bc98 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir GPSLogger Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am GPSLogger ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." + }, + "step": { + "user": { + "description": "S\u00e9cher fir GPSLogger Webhook anzeriichten?", + "title": "GPSLogger Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/nl.json b/homeassistant/components/gpslogger/translations/nl.json new file mode 100644 index 00000000000..c5cb3b737db --- /dev/null +++ b/homeassistant/components/gpslogger/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant-instantie moet via internet toegankelijk zijn om berichten van GPSLogger te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Om evenementen naar Home Assistant te verzenden, moet u de webhook-functie instellen in GPSLogger. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n\n Zie [de documentatie] ( {docs_url} ) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet je zeker dat je de GPSLogger Webhook wilt instellen?", + "title": "Configureer de GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/no.json b/homeassistant/components/gpslogger/translations/no.json new file mode 100644 index 00000000000..2b3dc0f67fc --- /dev/null +++ b/homeassistant/components/gpslogger/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra GPSLogger.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i GPSLogger. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp GPSLogger Webhook?", + "title": "Sett opp GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/pl.json b/homeassistant/components/gpslogger/translations/pl.json new file mode 100644 index 00000000000..76cac00025f --- /dev/null +++ b/homeassistant/components/gpslogger/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z GPSlogger.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 lokalizacje do Home Assistant'a, musisz skonfigurowa\u0107 webhook w aplikacji GPSLogger. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Geofency?", + "title": "Konfiguracja Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/pt-BR.json b/homeassistant/components/gpslogger/translations/pt-BR.json new file mode 100644 index 00000000000..6362914f52a --- /dev/null +++ b/homeassistant/components/gpslogger/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens do GPSLogger.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no GPSLogger. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." + }, + "step": { + "user": { + "description": "Tem a certeza que deseja configurar o GPSLogger Webhook?", + "title": "Configurar o GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/pt.json b/homeassistant/components/gpslogger/translations/pt.json new file mode 100644 index 00000000000..de430273ba5 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistent precisa de ser acess\u00edvel a partir da internet para receber mensagens GPSlogger.", + "one_instance_allowed": "Apenas uma inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no GPslogger. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o GPSLogger Webhook?", + "title": "Configurar o Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/ru.json b/homeassistant/components/gpslogger/translations/ru.json new file mode 100644 index 00000000000..fabf2477590 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 GPSLogger.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f GPSLogger.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c GPSLogger?", + "title": "GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/sl.json b/homeassistant/components/gpslogger/translations/sl.json new file mode 100644 index 00000000000..1d33f450699 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopek prek interneta, da boste lahko prejemali GPSlogger sporo\u010dila.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "\u010ce \u017eelite dogodke poslati v Home Assistant, morate v GPSLoggerju nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti GPSloggerWebhook?", + "title": "Nastavite GPSlogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/sv.json b/homeassistant/components/gpslogger/translations/sv.json new file mode 100644 index 00000000000..db53fcff973 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig ifr\u00e5n internet f\u00f6r att ta emot meddelanden ifr\u00e5n GPSLogger.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i GPSLogger.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera GPSLogger Webhook?", + "title": "Konfigurera GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/zh-Hans.json b/homeassistant/components/gpslogger/translations/zh-Hans.json new file mode 100644 index 00000000000..f6934cb5e4f --- /dev/null +++ b/homeassistant/components/gpslogger/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 GPSLogger \u6d88\u606f\u3002", + "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e GPSLogger \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e GPSLogger Webhook \u5417\uff1f", + "title": "\u8bbe\u7f6e GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gpslogger/translations/zh-Hant.json b/homeassistant/components/gpslogger/translations/zh-Hant.json new file mode 100644 index 00000000000..9e410084f81 --- /dev/null +++ b/homeassistant/components/gpslogger/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 GPSLogger \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc GPSLogger \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a GPSLogger Webhook\uff1f", + "title": "\u8a2d\u5b9a GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/graphite/__init__.py b/homeassistant/components/graphite/__init__.py index bf34bc3ddea..00dabd59d8f 100644 --- a/homeassistant/components/graphite/__init__.py +++ b/homeassistant/components/graphite/__init__.py @@ -51,7 +51,7 @@ def setup(hass, config): sock.connect((host, port)) sock.shutdown(2) _LOGGER.debug("Connection to Graphite possible") - except socket.error: + except OSError: _LOGGER.error("Not able to connect to Graphite") return False @@ -104,7 +104,7 @@ class GraphiteFeeder(threading.Thread): sock.settimeout(10) sock.connect((self._host, self._port)) sock.sendall(data.encode("ascii")) - sock.send("\n".encode("ascii")) + sock.send(b"\n") sock.close() def _report_attributes(self, entity_id, new_state): @@ -128,7 +128,7 @@ class GraphiteFeeder(threading.Thread): self._send_to_graphite("\n".join(lines)) except socket.gaierror: _LOGGER.error("Unable to connect to host %s", self._host) - except socket.error: + except OSError: _LOGGER.exception("Failed to send data to graphite") def run(self): diff --git a/homeassistant/components/graphite/manifest.json b/homeassistant/components/graphite/manifest.json index 49748128258..4fed4619077 100644 --- a/homeassistant/components/graphite/manifest.json +++ b/homeassistant/components/graphite/manifest.json @@ -2,7 +2,5 @@ "domain": "graphite", "name": "Graphite", "documentation": "https://www.home-assistant.io/integrations/graphite", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/greeneye_monitor/manifest.json b/homeassistant/components/greeneye_monitor/manifest.json index b10c4ad01a0..304233438c5 100644 --- a/homeassistant/components/greeneye_monitor/manifest.json +++ b/homeassistant/components/greeneye_monitor/manifest.json @@ -3,6 +3,5 @@ "name": "GreenEye Monitor (GEM)", "documentation": "https://www.home-assistant.io/integrations/greeneye_monitor", "requirements": ["greeneye_monitor==2.0"], - "dependencies": [], "codeowners": ["@jkeljo"] } diff --git a/homeassistant/components/greeneye_monitor/sensor.py b/homeassistant/components/greeneye_monitor/sensor.py index 1d53525ab37..06a60ab3fd7 100644 --- a/homeassistant/components/greeneye_monitor/sensor.py +++ b/homeassistant/components/greeneye_monitor/sensor.py @@ -8,6 +8,7 @@ from homeassistant.const import ( TIME_HOURS, TIME_MINUTES, TIME_SECONDS, + VOLT, ) from homeassistant.helpers.entity import Entity @@ -129,7 +130,7 @@ class GEMSensor(Entity): async def async_will_remove_from_hass(self): """Remove listener from the sensor.""" if self._sensor: - self._sensor.remove_listener(self._schedule_update) + self._sensor.remove_listener(self.async_write_ha_state) else: monitors = self.hass.data[DATA_GREENEYE_MONITOR] monitors.remove_listener(self._on_new_monitor) @@ -140,16 +141,13 @@ class GEMSensor(Entity): return False self._sensor = self._get_sensor(monitor) - self._sensor.add_listener(self._schedule_update) + self._sensor.add_listener(self.async_write_ha_state) return True def _get_sensor(self, monitor): raise NotImplementedError() - def _schedule_update(self): - self.async_schedule_update_ha_state(False) - class CurrentSensor(GEMSensor): """Entity showing power usage on one channel of the monitor.""" @@ -313,4 +311,4 @@ class VoltageSensor(GEMSensor): @property def unit_of_measurement(self): """Return the unit of measurement for this sensor.""" - return "V" + return VOLT diff --git a/homeassistant/components/greenwave/manifest.json b/homeassistant/components/greenwave/manifest.json index f0cdd6590d8..b0076058833 100644 --- a/homeassistant/components/greenwave/manifest.json +++ b/homeassistant/components/greenwave/manifest.json @@ -3,6 +3,5 @@ "name": "Greenwave Reality", "documentation": "https://www.home-assistant.io/integrations/greenwave", "requirements": ["greenwavereality==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/griddy/.translations/ca.json b/homeassistant/components/griddy/.translations/ca.json deleted file mode 100644 index 17c550636e1..00000000000 --- a/homeassistant/components/griddy/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta zona de c\u00e0rrega ja est\u00e0 configurada" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "loadzone": "Zona de c\u00e0rrega (Load Zone)" - }, - "description": "La teva zona de c\u00e0rrega (Load Zone) est\u00e0 al teu compte de Griddy v\u00e9s a \"Account > Meter > Load Zone\".", - "title": "Configuraci\u00f3 de la zona de c\u00e0rrega (Load Zone) de Griddy" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/da.json b/homeassistant/components/griddy/.translations/da.json deleted file mode 100644 index 9bb36f00ba6..00000000000 --- a/homeassistant/components/griddy/.translations/da.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/de.json b/homeassistant/components/griddy/.translations/de.json deleted file mode 100644 index f2012615267..00000000000 --- a/homeassistant/components/griddy/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Diese Ladezone ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "loadzone": "Ladezone (Abwicklungspunkt)" - }, - "description": "Ihre Ladezone befindet sich in Ihrem Griddy-Konto unter \"Konto > Messger\u00e4t > Ladezone\".", - "title": "Richten Sie Ihre Griddy Ladezone ein" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/en.json b/homeassistant/components/griddy/.translations/en.json deleted file mode 100644 index 20b3fbe21eb..00000000000 --- a/homeassistant/components/griddy/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This Load Zone is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "loadzone": "Load Zone (Settlement Point)" - }, - "description": "Your Load Zone is in your Griddy account under \u201cAccount > Meter > Load Zone.\u201d", - "title": "Setup your Griddy Load Zone" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/es.json b/homeassistant/components/griddy/.translations/es.json deleted file mode 100644 index 891564ea4ec..00000000000 --- a/homeassistant/components/griddy/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta Zona de Carga ya est\u00e1 configurada" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "loadzone": "Zona de Carga (Punto del Asentamiento)" - }, - "description": "Tu Zona de Carga est\u00e1 en tu cuenta de Griddy en \"Account > Meter > Load Zone\"", - "title": "Configurar tu Zona de Carga de Griddy" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/fr.json b/homeassistant/components/griddy/.translations/fr.json deleted file mode 100644 index 1e0c8c3e9ae..00000000000 --- a/homeassistant/components/griddy/.translations/fr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cette zone de chargement est d\u00e9j\u00e0 configur\u00e9e" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "loadzone": "Zone de charge (point d'\u00e9tablissement)" - } - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/it.json b/homeassistant/components/griddy/.translations/it.json deleted file mode 100644 index 2aacd9a4bab..00000000000 --- a/homeassistant/components/griddy/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questa Zona di Carico \u00e8 gi\u00e0 configurata" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "loadzone": "Zona di Carico (Punto di insediamento)" - }, - "description": "La tua Zona di Carico si trova nel tuo account Griddy in \"Account > Meter > Load zone\".", - "title": "Configurazione della Zona di Carico Griddy" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/ko.json b/homeassistant/components/griddy/.translations/ko.json deleted file mode 100644 index cc86f0a1b45..00000000000 --- a/homeassistant/components/griddy/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed\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.", - "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "loadzone": "\uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed (\uc815\uc0b0\uc810)" - }, - "description": "\uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed\uc740 Griddy \uacc4\uc815\uc758 \"Account > Meter > Load Zone\"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "Griddy \uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed \uc124\uc815" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/lb.json b/homeassistant/components/griddy/.translations/lb.json deleted file mode 100644 index c0ee3bc7d5a..00000000000 --- a/homeassistant/components/griddy/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebs Lued Zon ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "loadzone": "Lued Zone (Punkt vum R\u00e9glement)" - }, - "description": "Deng Lued Zon ass an dengem Griddy Kont enner \"Account > Meter > Load Zone.\"", - "title": "Griddy Lued Zon ariichten" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/no.json b/homeassistant/components/griddy/.translations/no.json deleted file mode 100644 index b47fd213ae0..00000000000 --- a/homeassistant/components/griddy/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne Load Zone er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "loadzone": "Load Zone (settlingspunkt)" - }, - "description": "Din Load Zone er p\u00e5 din Griddy-konto under \"Konto > M\u00e5ler > Lastesone.\"", - "title": "Sett opp din Griddy Load Zone" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/pl.json b/homeassistant/components/griddy/.translations/pl.json deleted file mode 100644 index 57484e84d9f..00000000000 --- a/homeassistant/components/griddy/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta strefa obci\u0105\u017cenia jest ju\u017c skonfigurowana." - }, - "error": { - "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", - "unknown": "Niespodziewany b\u0142\u0105d." - }, - "step": { - "user": { - "data": { - "loadzone": "Strefa obci\u0105\u017cenia (punkt rozliczenia)" - }, - "description": "Twoja strefa obci\u0105\u017cenia znajduje si\u0119 na twoim koncie Griddy w sekcji \"Konto > Licznik > Strefa obci\u0105\u017cenia\".", - "title": "Konfigurowanie strefy obci\u0105\u017cenia Griddy" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/ru.json b/homeassistant/components/griddy/.translations/ru.json deleted file mode 100644 index 6f03fecd58a..00000000000 --- a/homeassistant/components/griddy/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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." - }, - "step": { - "user": { - "data": { - "loadzone": "\u0417\u043e\u043d\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0440\u0430\u0441\u0447\u0435\u0442\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430)" - }, - "description": "\u0417\u043e\u043d\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Griddy \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Account > Meter > Load Zone.", - "title": "Griddy" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/sl.json b/homeassistant/components/griddy/.translations/sl.json deleted file mode 100644 index 1adbbe39f38..00000000000 --- a/homeassistant/components/griddy/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta obremenitvena cona je \u017ee konfigurirana" - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "data": { - "loadzone": "Obremenitvena cona (poselitvena to\u010dka)" - }, - "description": "Va\u0161a obremenitvena cona je v va\u0161em ra\u010dunu Griddy pod \"Ra\u010dun > Merilnik > Nalo\u017ei cono.\"", - "title": "Nastavite svojo Griddy Load Cono" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/zh-Hant.json b/homeassistant/components/griddy/.translations/zh-Hant.json deleted file mode 100644 index d3918269d13..00000000000 --- a/homeassistant/components/griddy/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u8ca0\u8f09\u5340\u57df\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "loadzone": "\u8ca0\u8f09\u5340\u57df\uff08\u5c45\u4f4f\u9ede\uff09" - }, - "description": "\u8ca0\u8f09\u5340\u57df\u986f\u793a\u65bc Griddy \u5e33\u865f\uff0c\u4f4d\u65bc \u201cAccount > Meter > Load Zone\u201d\u3002", - "title": "\u8a2d\u5b9a Griddy \u8ca0\u8f09\u5340\u57df" - } - }, - "title": "Griddy" - } -} \ No newline at end of file diff --git a/homeassistant/components/griddy/manifest.json b/homeassistant/components/griddy/manifest.json index d17ed846fd9..1e31b1b7aa8 100644 --- a/homeassistant/components/griddy/manifest.json +++ b/homeassistant/components/griddy/manifest.json @@ -4,11 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/griddy", "requirements": ["griddypower==0.1.0"], - "ssdp": [], - "zeroconf": [], - "homekit": {}, - "dependencies": [], - "codeowners": [ - "@bdraco" - ] + "codeowners": ["@bdraco"] } diff --git a/homeassistant/components/griddy/sensor.py b/homeassistant/components/griddy/sensor.py index 31488650dc2..9a58e5e3286 100644 --- a/homeassistant/components/griddy/sensor.py +++ b/homeassistant/components/griddy/sensor.py @@ -1,6 +1,7 @@ """Support for August sensors.""" import logging +from homeassistant.const import ENERGY_KILO_WATT_HOUR from homeassistant.helpers.entity import Entity from .const import CONF_LOADZONE, DOMAIN @@ -28,7 +29,7 @@ class GriddyPriceSensor(Entity): @property def unit_of_measurement(self): """Return the unit of measurement.""" - return "¢/kWh" + return f"¢/{ENERGY_KILO_WATT_HOUR}" @property def name(self): @@ -69,8 +70,6 @@ class GriddyPriceSensor(Entity): async def async_added_to_hass(self): """Subscribe to updates.""" - self._coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Undo subscription.""" - self._coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self._coordinator.async_add_listener(self.async_write_ha_state) + ) diff --git a/homeassistant/components/griddy/strings.json b/homeassistant/components/griddy/strings.json index bedd85e7508..d8ccb94fae7 100644 --- a/homeassistant/components/griddy/strings.json +++ b/homeassistant/components/griddy/strings.json @@ -1,21 +1,16 @@ { - "config" : { - "error" : { - "cannot_connect" : "Failed to connect, please try again", - "unknown" : "Unexpected error" - }, - "title" : "Griddy", - "step" : { - "user" : { - "description" : "Your Load Zone is in your Griddy account under “Account > Meter > Load Zone.”", - "data" : { - "loadzone" : "Load Zone (Settlement Point)" - }, - "title" : "Setup your Griddy Load Zone" - } - }, - "abort" : { - "already_configured" : "This Load Zone is already configured" + "config": { + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "description": "Your Load Zone is in your Griddy account under \u201cAccount > Meter > Load Zone.\u201d", + "data": { "loadzone": "Load Zone (Settlement Point)" }, + "title": "Setup your Griddy Load Zone" } - } + }, + "abort": { "already_configured": "This Load Zone is already configured" } + } } diff --git a/homeassistant/components/griddy/translations/ca.json b/homeassistant/components/griddy/translations/ca.json new file mode 100644 index 00000000000..cb363a7dfab --- /dev/null +++ b/homeassistant/components/griddy/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta zona de c\u00e0rrega ja est\u00e0 configurada" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "loadzone": "Zona de c\u00e0rrega (Load Zone)" + }, + "description": "La teva zona de c\u00e0rrega (Load Zone) est\u00e0 al teu compte de Griddy v\u00e9s a \"Account > Meter > Load Zone\".", + "title": "Configuraci\u00f3 de la zona de c\u00e0rrega (Load Zone) de Griddy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/da.json b/homeassistant/components/griddy/translations/da.json new file mode 100644 index 00000000000..639633dc14c --- /dev/null +++ b/homeassistant/components/griddy/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Griddy" +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/de.json b/homeassistant/components/griddy/translations/de.json new file mode 100644 index 00000000000..ad6a6e10ab0 --- /dev/null +++ b/homeassistant/components/griddy/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Diese Ladezone ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "loadzone": "Ladezone (Abwicklungspunkt)" + }, + "description": "Ihre Ladezone befindet sich in Ihrem Griddy-Konto unter \"Konto > Messger\u00e4t > Ladezone\".", + "title": "Richten Sie Ihre Griddy Ladezone ein" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/en.json b/homeassistant/components/griddy/translations/en.json new file mode 100644 index 00000000000..bb1e217133a --- /dev/null +++ b/homeassistant/components/griddy/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "This Load Zone is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "loadzone": "Load Zone (Settlement Point)" + }, + "description": "Your Load Zone is in your Griddy account under \u201cAccount > Meter > Load Zone.\u201d", + "title": "Setup your Griddy Load Zone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/es.json b/homeassistant/components/griddy/translations/es.json new file mode 100644 index 00000000000..a3727721b2d --- /dev/null +++ b/homeassistant/components/griddy/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Esta Zona de Carga ya est\u00e1 configurada" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "loadzone": "Zona de Carga (Punto del Asentamiento)" + }, + "description": "Tu Zona de Carga est\u00e1 en tu cuenta de Griddy en \"Account > Meter > Load Zone\"", + "title": "Configurar tu Zona de Carga de Griddy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/fr.json b/homeassistant/components/griddy/translations/fr.json new file mode 100644 index 00000000000..845c0968827 --- /dev/null +++ b/homeassistant/components/griddy/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Cette zone de chargement est d\u00e9j\u00e0 configur\u00e9e" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "loadzone": "Zone de charge (point d'\u00e9tablissement)" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/it.json b/homeassistant/components/griddy/translations/it.json new file mode 100644 index 00000000000..2b573170e69 --- /dev/null +++ b/homeassistant/components/griddy/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Questa Zona di Carico \u00e8 gi\u00e0 configurata" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "loadzone": "Zona di Carico (Punto di insediamento)" + }, + "description": "La tua Zona di Carico si trova nel tuo account Griddy in \"Account > Meter > Load zone\".", + "title": "Configurazione della Zona di Carico Griddy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/ko.json b/homeassistant/components/griddy/translations/ko.json new file mode 100644 index 00000000000..9eda02551e4 --- /dev/null +++ b/homeassistant/components/griddy/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed\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.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "loadzone": "\uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed (\uc815\uc0b0\uc810)" + }, + "description": "\uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed\uc740 Griddy \uacc4\uc815\uc758 \"Account > Meter > Load Zone\"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "Griddy \uc804\ub825 \uacf5\uae09 \uc9c0\uc5ed \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/lb.json b/homeassistant/components/griddy/translations/lb.json new file mode 100644 index 00000000000..2e2458cb8ed --- /dev/null +++ b/homeassistant/components/griddy/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebs Lued Zon ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "loadzone": "Lued Zone (Punkt vum R\u00e9glement)" + }, + "description": "Deng Lued Zon ass an dengem Griddy Kont enner \"Account > Meter > Load Zone.\"", + "title": "Griddy Lued Zon ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/no.json b/homeassistant/components/griddy/translations/no.json new file mode 100644 index 00000000000..000b5dae306 --- /dev/null +++ b/homeassistant/components/griddy/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Load Zone er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "loadzone": "Load Zone (settlingspunkt)" + }, + "description": "Din Load Zone er p\u00e5 din Griddy-konto under \"Konto > M\u00e5ler > Lastesone.\"", + "title": "Sett opp din Griddy Load Zone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/pl.json b/homeassistant/components/griddy/translations/pl.json new file mode 100644 index 00000000000..43a16be8d79 --- /dev/null +++ b/homeassistant/components/griddy/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ta strefa obci\u0105\u017cenia jest ju\u017c skonfigurowana." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "loadzone": "Strefa obci\u0105\u017cenia (punkt rozliczenia)" + }, + "description": "Twoja strefa obci\u0105\u017cenia znajduje si\u0119 na twoim koncie Griddy w sekcji \"Konto > Licznik > Strefa obci\u0105\u017cenia\".", + "title": "Konfigurowanie strefy obci\u0105\u017cenia Griddy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/ru.json b/homeassistant/components/griddy/translations/ru.json new file mode 100644 index 00000000000..9fe98107510 --- /dev/null +++ b/homeassistant/components/griddy/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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." + }, + "step": { + "user": { + "data": { + "loadzone": "\u0417\u043e\u043d\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0440\u0430\u0441\u0447\u0435\u0442\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430)" + }, + "description": "\u0417\u043e\u043d\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Griddy \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Account > Meter > Load Zone.", + "title": "Griddy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/translations/sl.json b/homeassistant/components/griddy/translations/sl.json new file mode 100644 index 00000000000..8df85c6dc67 --- /dev/null +++ b/homeassistant/components/griddy/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ta obremenitvena cona je \u017ee konfigurirana" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "loadzone": "Obremenitvena cona (poselitvena to\u010dka)" + }, + "description": "Va\u0161a obremenitvena cona je v va\u0161em ra\u010dunu Griddy pod \"Ra\u010dun > Merilnik > Nalo\u017ei cono.\"", + "title": "Nastavite svojo Griddy Load Cono" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/griddy/.translations/tr.json b/homeassistant/components/griddy/translations/tr.json similarity index 100% rename from homeassistant/components/griddy/.translations/tr.json rename to homeassistant/components/griddy/translations/tr.json diff --git a/homeassistant/components/griddy/translations/zh-Hant.json b/homeassistant/components/griddy/translations/zh-Hant.json new file mode 100644 index 00000000000..e112a2c682f --- /dev/null +++ b/homeassistant/components/griddy/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u8ca0\u8f09\u5340\u57df\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "loadzone": "\u8ca0\u8f09\u5340\u57df\uff08\u5c45\u4f4f\u9ede\uff09" + }, + "description": "\u8ca0\u8f09\u5340\u57df\u986f\u793a\u65bc Griddy \u5e33\u865f\uff0c\u4f4d\u65bc \u201cAccount > Meter > Load Zone\u201d\u3002", + "title": "\u8a2d\u5b9a Griddy \u8ca0\u8f09\u5340\u57df" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/group/__init__.py b/homeassistant/components/group/__init__.py index f8a10017cab..e4966a1a4ce 100644 --- a/homeassistant/components/group/__init__.py +++ b/homeassistant/components/group/__init__.py @@ -174,7 +174,7 @@ def get_entity_ids( if not domain_filter: return cast(List[str], entity_ids) - domain_filter = domain_filter.lower() + "." + domain_filter = f"{domain_filter.lower()}." return [ent_id for ent_id in entity_ids if ent_id.startswith(domain_filter)] @@ -289,7 +289,7 @@ async def async_setup(hass, config): need_update = True if need_update: - await group.async_update_ha_state() + group.async_write_ha_state() return @@ -364,7 +364,7 @@ class Group(Entity): if entity_ids: self.tracking = tuple(ent_id.lower() for ent_id in entity_ids) else: - self.tracking = tuple() + self.tracking = () self.group_on = None self.group_off = None self.user_defined = user_defined @@ -538,7 +538,7 @@ class Group(Entity): return self._async_update_group_state(new_state) - await self.async_update_ha_state() + self.async_write_ha_state() @property def _tracking_states(self): diff --git a/homeassistant/components/group/manifest.json b/homeassistant/components/group/manifest.json index bd117ac9a6f..692267817f9 100644 --- a/homeassistant/components/group/manifest.json +++ b/homeassistant/components/group/manifest.json @@ -2,8 +2,6 @@ "domain": "group", "name": "Group", "documentation": "https://www.home-assistant.io/integrations/group", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/group/reproduce_state.py b/homeassistant/components/group/reproduce_state.py index 78790701934..95915412e4f 100644 --- a/homeassistant/components/group/reproduce_state.py +++ b/homeassistant/components/group/reproduce_state.py @@ -1,5 +1,5 @@ """Module that groups code required to handle state restore for component.""" -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.core import Context, State from homeassistant.helpers.state import async_reproduce_state @@ -9,7 +9,11 @@ from . import get_entity_ids async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce component states.""" @@ -27,4 +31,6 @@ async def async_reproduce_states( context=state.context, ) ) - await async_reproduce_state(hass, states_copy, blocking=True, context=context) + await async_reproduce_state( + hass, states_copy, context=context, reproduce_options=reproduce_options + ) diff --git a/homeassistant/components/group/services.yaml b/homeassistant/components/group/services.yaml index 98b0cef69c3..cec4f187ca6 100644 --- a/homeassistant/components/group/services.yaml +++ b/homeassistant/components/group/services.yaml @@ -1,5 +1,4 @@ # Describes the format for available group services - reload: description: Reload group configuration. @@ -23,7 +22,7 @@ set: example: domain.entity_id1, domain.entity_id2 all: description: Enable this option if the group should only turn on when all entities are on. - example: True + example: true remove: description: Remove a user group. diff --git a/homeassistant/components/group/strings.json b/homeassistant/components/group/strings.json new file mode 100644 index 00000000000..e29407bf932 --- /dev/null +++ b/homeassistant/components/group/strings.json @@ -0,0 +1,17 @@ +{ + "title": "Group", + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]", + "home": "[%key:component::device_tracker::state::_::home%]", + "not_home": "[%key:component::device_tracker::state::_::not_home%]", + "open": "[%key:common::state::open%]", + "closed": "[%key:common::state::closed%]", + "locked": "[%key:common::state::locked%]", + "unlocked": "[%key:common::state::unlocked%]", + "ok": "[%key:component::binary_sensor::state::problem::off%]", + "problem": "[%key:component::binary_sensor::state::problem::on%]" + } + } +} diff --git a/homeassistant/components/group/translations/af.json b/homeassistant/components/group/translations/af.json new file mode 100644 index 00000000000..4ababc0a7ec --- /dev/null +++ b/homeassistant/components/group/translations/af.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Toe", + "home": "Tuis", + "locked": "Gesluit", + "not_home": "Elders", + "off": "Af", + "ok": "OK", + "on": "Aan", + "open": "Oop", + "problem": "Probleem", + "unlocked": "Oopgesluit" + } + }, + "title": "Groep" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ar.json b/homeassistant/components/group/translations/ar.json new file mode 100644 index 00000000000..26310b131c1 --- /dev/null +++ b/homeassistant/components/group/translations/ar.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0645\u063a\u0644\u0642 ", + "home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644", + "locked": "\u0645\u0642\u0641\u0644 ", + "not_home": "\u0641\u064a \u0627\u0644\u062e\u0627\u0631\u062c", + "off": "\u0625\u064a\u0642\u0627\u0641", + "ok": "\u0623\u0648\u0643\u064a", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644", + "open": "\u0645\u0641\u062a\u0648\u062d ", + "problem": "\u0645\u0634\u0643\u0644\u0629", + "unlocked": "\u063a\u064a\u0631 \u0645\u0642\u0641\u0644 " + } + }, + "title": "\u0645\u062c\u0645\u0648\u0639\u0629" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/bg.json b/homeassistant/components/group/translations/bg.json new file mode 100644 index 00000000000..c737a09216e --- /dev/null +++ b/homeassistant/components/group/translations/bg.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430", + "home": "\u0412\u043a\u044a\u0449\u0438", + "locked": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430", + "not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430", + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "ok": "\u041e\u041a", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0430", + "open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430", + "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c", + "unlocked": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430" + } + }, + "title": "\u0413\u0440\u0443\u043f\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/bs.json b/homeassistant/components/group/translations/bs.json new file mode 100644 index 00000000000..b74015e389b --- /dev/null +++ b/homeassistant/components/group/translations/bs.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Zatvoren", + "home": "Kod ku\u0107e", + "locked": "Zaklju\u010dan", + "not_home": "Odsutan", + "off": "Isklju\u010den", + "ok": "OK", + "on": "Uklju\u010den", + "open": "Otvoren", + "problem": "Problem", + "unlocked": "Otklju\u010dan" + } + }, + "title": "Grupa" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ca.json b/homeassistant/components/group/translations/ca.json new file mode 100644 index 00000000000..bbbd84b2147 --- /dev/null +++ b/homeassistant/components/group/translations/ca.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Tancat", + "home": "A casa", + "locked": "Bloquejat", + "not_home": "Fora", + "off": "Desactivat", + "ok": "Correcte", + "on": "Activat", + "open": "Obert", + "problem": "Problema", + "unlocked": "Desbloquejat" + } + }, + "title": "Grups" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/cs.json b/homeassistant/components/group/translations/cs.json new file mode 100644 index 00000000000..b33ff28448b --- /dev/null +++ b/homeassistant/components/group/translations/cs.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Zav\u0159eno", + "home": "Doma", + "locked": "Zam\u010deno", + "not_home": "Pry\u010d", + "off": "Neaktivn\u00ed", + "ok": "V po\u0159\u00e1dku", + "on": "Aktivn\u00ed", + "open": "Otev\u0159eno", + "problem": "Probl\u00e9m", + "unlocked": "Odem\u010deno" + } + }, + "title": "Skupina" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/cy.json b/homeassistant/components/group/translations/cy.json new file mode 100644 index 00000000000..51104ed48c1 --- /dev/null +++ b/homeassistant/components/group/translations/cy.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Wedi cau", + "home": "Gartref", + "locked": " Cloi", + "not_home": "Dim gartref", + "off": "i ffwrdd", + "ok": "Iawn", + "on": "Ar", + "open": "Agored", + "problem": "Problem", + "unlocked": "Dadgloi" + } + }, + "title": "Gr\u0175p" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/da.json b/homeassistant/components/group/translations/da.json new file mode 100644 index 00000000000..a0b58d0adab --- /dev/null +++ b/homeassistant/components/group/translations/da.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Lukket", + "home": "Hjemme", + "locked": "L\u00e5st", + "not_home": "Ude", + "off": "Fra", + "ok": "OK", + "on": "Til", + "open": "\u00c5ben", + "problem": "Problem", + "unlocked": "Ul\u00e5st" + } + }, + "title": "Gruppe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/de.json b/homeassistant/components/group/translations/de.json new file mode 100644 index 00000000000..80da069e72a --- /dev/null +++ b/homeassistant/components/group/translations/de.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Geschlossen", + "home": "Zu Hause", + "locked": "Verriegelt", + "not_home": "Abwesend", + "off": "Aus", + "ok": "OK", + "on": "An", + "open": "Offen", + "problem": "Problem", + "unlocked": "Entriegelt" + } + }, + "title": "Gruppe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/el.json b/homeassistant/components/group/translations/el.json new file mode 100644 index 00000000000..e22d7a788af --- /dev/null +++ b/homeassistant/components/group/translations/el.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "home": "\u03a3\u03c0\u03af\u03c4\u03b9", + "locked": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf", + "not_home": "\u0395\u03ba\u03c4\u03cc\u03c2 \u03a3\u03c0\u03b9\u03c4\u03b9\u03bf\u03cd", + "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc", + "ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc", + "open": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc", + "problem": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1", + "unlocked": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03bf" + } + }, + "title": "\u039f\u03bc\u03ac\u03b4\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/en.json b/homeassistant/components/group/translations/en.json new file mode 100644 index 00000000000..271ada378ca --- /dev/null +++ b/homeassistant/components/group/translations/en.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Closed", + "home": "Home", + "locked": "Locked", + "not_home": "Away", + "off": "Off", + "ok": "OK", + "on": "On", + "open": "Open", + "problem": "Problem", + "unlocked": "Unlocked" + } + }, + "title": "Group" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/es-419.json b/homeassistant/components/group/translations/es-419.json new file mode 100644 index 00000000000..17e89cb3c61 --- /dev/null +++ b/homeassistant/components/group/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Cerrado", + "home": "En casa", + "locked": "Cerrado", + "not_home": "Fuera de Casa", + "off": "Apagado", + "ok": "OK", + "on": "Encendido", + "open": "Abierto", + "problem": "Problema", + "unlocked": "Abierto" + } + }, + "title": "Grupo" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/es.json b/homeassistant/components/group/translations/es.json new file mode 100644 index 00000000000..9aac8e09780 --- /dev/null +++ b/homeassistant/components/group/translations/es.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Cerrado", + "home": "En casa", + "locked": "Bloqueado", + "not_home": "Fuera de casa", + "off": "Apagado", + "ok": "OK", + "on": "Encendido", + "open": "Abierto", + "problem": "Problema", + "unlocked": "Desbloqueado" + } + }, + "title": "Grupo" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/et.json b/homeassistant/components/group/translations/et.json new file mode 100644 index 00000000000..dacd0973f1d --- /dev/null +++ b/homeassistant/components/group/translations/et.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Suletud", + "home": "Kodus", + "locked": "Lukus", + "not_home": "Eemal", + "off": "V\u00e4ljas", + "ok": "OK", + "on": "Sees", + "open": "Avatud", + "problem": "Probleem", + "unlocked": "Lukustamata" + } + }, + "title": "Grupp" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/eu.json b/homeassistant/components/group/translations/eu.json new file mode 100644 index 00000000000..af90d04e5ef --- /dev/null +++ b/homeassistant/components/group/translations/eu.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "closed": "Itxita", + "home": "Etxean", + "not_home": "Kanpoan", + "off": "Itzalita", + "ok": "Itzalita", + "on": "Piztuta", + "open": "Ireki", + "problem": "Arazoa" + } + }, + "title": "Taldea" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/fa.json b/homeassistant/components/group/translations/fa.json new file mode 100644 index 00000000000..8a12e9aeed0 --- /dev/null +++ b/homeassistant/components/group/translations/fa.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0628\u0633\u062a\u0647", + "home": "\u062e\u0627\u0646\u0647", + "locked": "\u0642\u0641\u0644 \u0634\u062f\u0647", + "not_home": "\u0628\u06cc\u0631\u0648\u0646", + "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644", + "ok": "\u062e\u0648\u0628", + "on": "\u0641\u0639\u0627\u0644", + "open": "\u0628\u0627\u0632", + "problem": "\u0645\u0634\u06a9\u0644", + "unlocked": "\u0628\u0627\u0632" + } + }, + "title": "\u06af\u0631\u0648\u0647" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/fi.json b/homeassistant/components/group/translations/fi.json new file mode 100644 index 00000000000..b83d12ebd1a --- /dev/null +++ b/homeassistant/components/group/translations/fi.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Suljettu", + "home": "Kotona", + "locked": "Lukittu", + "not_home": "Poissa", + "off": "Pois", + "ok": "Ok", + "on": "P\u00e4\u00e4ll\u00e4", + "open": "Auki", + "problem": "Ongelma", + "unlocked": "Avattu" + } + }, + "title": "Ryhm\u00e4" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/fr.json b/homeassistant/components/group/translations/fr.json new file mode 100644 index 00000000000..f1ade09f650 --- /dev/null +++ b/homeassistant/components/group/translations/fr.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Ferm\u00e9", + "home": "Pr\u00e9sent", + "locked": "Verrouill\u00e9", + "not_home": "Absent", + "off": "Inactif", + "ok": "OK", + "on": "Actif", + "open": "Ouvert", + "problem": "Probl\u00e8me", + "unlocked": "D\u00e9verrouill\u00e9" + } + }, + "title": "Groupe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/gsw.json b/homeassistant/components/group/translations/gsw.json new file mode 100644 index 00000000000..57a174ab1e0 --- /dev/null +++ b/homeassistant/components/group/translations/gsw.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Gschloss\u00e4", + "home": "Dahei", + "locked": "Gsperrt", + "not_home": "Nid Dahei", + "off": "Us", + "ok": "Ok", + "on": "Ah", + "open": "Off\u00e4", + "problem": "Problem", + "unlocked": "Entsperrt" + } + }, + "title": "Gruppe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/he.json b/homeassistant/components/group/translations/he.json new file mode 100644 index 00000000000..caa6ee98ea8 --- /dev/null +++ b/homeassistant/components/group/translations/he.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u05e1\u05d2\u05d5\u05e8", + "home": "\u05d1\u05d1\u05d9\u05ea", + "locked": "\u05e0\u05e2\u05d5\u05dc", + "not_home": "\u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea", + "off": "\u05db\u05d1\u05d5\u05d9", + "ok": "\u05ea\u05e7\u05d9\u05df", + "on": "\u05d3\u05dc\u05d5\u05e7", + "open": "\u05e4\u05ea\u05d5\u05d7", + "problem": "\u05d1\u05e2\u05d9\u05d4", + "unlocked": "\u05e4\u05ea\u05d5\u05d7" + } + }, + "title": "\u05e7\u05b0\u05d1\u05d5\u05bc\u05e6\u05b8\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/hi.json b/homeassistant/components/group/translations/hi.json new file mode 100644 index 00000000000..e4b98d10301 --- /dev/null +++ b/homeassistant/components/group/translations/hi.json @@ -0,0 +1,16 @@ +{ + "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", + "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" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/hr.json b/homeassistant/components/group/translations/hr.json new file mode 100644 index 00000000000..85abe33638b --- /dev/null +++ b/homeassistant/components/group/translations/hr.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Zatvoreno", + "home": "Doma", + "locked": "Zaklju\u010dano", + "not_home": "Odsutan", + "off": "Uklju\u010deno", + "ok": "U redu", + "on": "Uklju\u010deno", + "open": "Otvoreno", + "problem": "Problem", + "unlocked": "Otklju\u010dano" + } + }, + "title": "Grupa" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/hu.json b/homeassistant/components/group/translations/hu.json new file mode 100644 index 00000000000..3c4a8ce75c5 --- /dev/null +++ b/homeassistant/components/group/translations/hu.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Z\u00e1rva", + "home": "Otthon", + "locked": "Bez\u00e1rva", + "not_home": "T\u00e1vol", + "off": "Ki", + "ok": "OK", + "on": "Be", + "open": "Nyitva", + "problem": "Probl\u00e9ma", + "unlocked": "Kinyitva" + } + }, + "title": "Csoport" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/hy.json b/homeassistant/components/group/translations/hy.json new file mode 100644 index 00000000000..7ccd318451c --- /dev/null +++ b/homeassistant/components/group/translations/hy.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0553\u0561\u056f\u057e\u0561\u056e", + "home": "\u054f\u0578\u0582\u0576", + "locked": "\u056f\u0578\u0572\u057a\u057e\u0561\u056e \u0567", + "not_home": "\u0540\u0565\u057c\u0578\u0582", + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "ok": "\u053c\u0561\u057e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e", + "open": "\u0532\u0561\u0581\u0565\u0584", + "problem": "\u053d\u0576\u0564\u056b\u0580", + "unlocked": "\u0532\u0561\u0581\u0565\u056c \u0567" + } + }, + "title": "\u053d\u0578\u0582\u0574\u0562" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/id.json b/homeassistant/components/group/translations/id.json new file mode 100644 index 00000000000..9a38f0f2de3 --- /dev/null +++ b/homeassistant/components/group/translations/id.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Tertutup", + "home": "Rumah", + "locked": "Terkunci", + "not_home": "Keluar", + "off": "Off", + "ok": "OK", + "on": "On", + "open": "Terbuka", + "problem": "Masalah", + "unlocked": "Terbuka" + } + }, + "title": "Grup" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/is.json b/homeassistant/components/group/translations/is.json new file mode 100644 index 00000000000..4e364e36f3e --- /dev/null +++ b/homeassistant/components/group/translations/is.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Loku\u00f0", + "home": "Heima", + "locked": "L\u00e6st", + "not_home": "Fjarverandi", + "off": "\u00d3virkur", + "ok": "\u00cd lagi", + "on": "Virkur", + "open": "Opin", + "problem": "Vandam\u00e1l", + "unlocked": "Afl\u00e6st" + } + }, + "title": "H\u00f3pur" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/it.json b/homeassistant/components/group/translations/it.json new file mode 100644 index 00000000000..bbc9753909b --- /dev/null +++ b/homeassistant/components/group/translations/it.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Chiuso", + "home": "A casa", + "locked": "Bloccato", + "not_home": "Fuori casa", + "off": "Spento", + "ok": "OK", + "on": "Acceso", + "open": "Aperto", + "problem": "Problema", + "unlocked": "Sbloccato" + } + }, + "title": "Gruppo" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ja.json b/homeassistant/components/group/translations/ja.json new file mode 100644 index 00000000000..d6f283d5ef6 --- /dev/null +++ b/homeassistant/components/group/translations/ja.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "closed": "\u9589\u9396", + "home": "\u5728\u5b85", + "locked": "\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f", + "not_home": "\u5916\u51fa", + "off": "\u30aa\u30d5", + "ok": "OK", + "on": "\u30aa\u30f3" + } + }, + "title": "\u30b0\u30eb\u30fc\u30d7" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ko.json b/homeassistant/components/group/translations/ko.json new file mode 100644 index 00000000000..c2adb88c7ca --- /dev/null +++ b/homeassistant/components/group/translations/ko.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\ub2eb\ud798", + "home": "\uc7ac\uc2e4", + "locked": "\uc7a0\uae40", + "not_home": "\uc678\ucd9c", + "off": "\uaebc\uc9d0", + "ok": "\ubb38\uc81c\uc5c6\uc74c", + "on": "\ucf1c\uc9d0", + "open": "\uc5f4\ub9bc", + "problem": "\ubb38\uc81c\uc788\uc74c", + "unlocked": "\ud574\uc81c" + } + }, + "title": "\uadf8\ub8f9" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/lb.json b/homeassistant/components/group/translations/lb.json new file mode 100644 index 00000000000..aaa9e7b9d81 --- /dev/null +++ b/homeassistant/components/group/translations/lb.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Zou", + "home": "Doheem", + "locked": "Gespaart", + "not_home": "\u00cbnnerwee", + "off": "Aus", + "ok": "OK", + "on": "Un", + "open": "Op", + "problem": "Problem", + "unlocked": "Net gespaart" + } + }, + "title": "Grupp" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/lt.json b/homeassistant/components/group/translations/lt.json new file mode 100644 index 00000000000..533d203663a --- /dev/null +++ b/homeassistant/components/group/translations/lt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "ok": "Ok", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/lv.json b/homeassistant/components/group/translations/lv.json new file mode 100644 index 00000000000..9d0c9518203 --- /dev/null +++ b/homeassistant/components/group/translations/lv.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Sl\u0113gta", + "home": "M\u0101j\u0101s", + "locked": "Blo\u0137\u0113ta", + "not_home": "Promb\u016btn\u0113", + "off": "Izsl\u0113gta", + "ok": "OK", + "on": "Iesl\u0113gta", + "open": "Atv\u0113rta", + "problem": "Probl\u0113ma", + "unlocked": "Atblo\u0137\u0113ta" + } + }, + "title": "Grupa" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/nb.json b/homeassistant/components/group/translations/nb.json new file mode 100644 index 00000000000..14ac7fac24f --- /dev/null +++ b/homeassistant/components/group/translations/nb.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Lukket", + "home": "Hjemme", + "locked": "L\u00e5st", + "not_home": "Borte", + "off": "Av", + "ok": "", + "on": "P\u00e5", + "open": "\u00c5pen", + "problem": "Problem", + "unlocked": "Ul\u00e5st" + } + }, + "title": "Gruppe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/nl.json b/homeassistant/components/group/translations/nl.json new file mode 100644 index 00000000000..be9b55699b0 --- /dev/null +++ b/homeassistant/components/group/translations/nl.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Gesloten", + "home": "Thuis", + "locked": "Vergrendeld", + "not_home": "Afwezig", + "off": "Uit", + "ok": "OK", + "on": "Aan", + "open": "Open", + "problem": "Probleem", + "unlocked": "Ontgrendeld" + } + }, + "title": "Groep" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/nn.json b/homeassistant/components/group/translations/nn.json new file mode 100644 index 00000000000..972c43b81d6 --- /dev/null +++ b/homeassistant/components/group/translations/nn.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Lukka", + "home": "Heime", + "locked": "L\u00e5st", + "not_home": "Borte", + "off": "Av", + "ok": "Ok", + "on": "P\u00e5", + "open": "Open", + "problem": "Problem", + "unlocked": "Ul\u00e5st" + } + }, + "title": "Gruppe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/no.json b/homeassistant/components/group/translations/no.json new file mode 100644 index 00000000000..b41c930ac9f --- /dev/null +++ b/homeassistant/components/group/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Gruppe" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/pl.json b/homeassistant/components/group/translations/pl.json new file mode 100644 index 00000000000..b72716973d8 --- /dev/null +++ b/homeassistant/components/group/translations/pl.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "zamkni\u0119te", + "home": "w domu", + "locked": "zamkni\u0119ty", + "not_home": "poza domem", + "off": "wy\u0142\u0105czony", + "ok": "ok", + "on": "w\u0142\u0105czony", + "open": "otwarte", + "problem": "problem", + "unlocked": "otwarty" + } + }, + "title": "Grupa" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/pt-BR.json b/homeassistant/components/group/translations/pt-BR.json new file mode 100644 index 00000000000..e0cbc7c02fd --- /dev/null +++ b/homeassistant/components/group/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Fechado", + "home": "Em casa", + "locked": "Trancado", + "not_home": "Ausente", + "off": "Desligado", + "ok": "OK", + "on": "Ligado", + "open": "Aberto", + "problem": "Problema", + "unlocked": "Destrancado" + } + }, + "title": "Grupo" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/pt.json b/homeassistant/components/group/translations/pt.json new file mode 100644 index 00000000000..1dfe38b7b71 --- /dev/null +++ b/homeassistant/components/group/translations/pt.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Fechada", + "home": "Casa", + "locked": "Bloqueado", + "not_home": "Fora", + "off": "Desligado", + "ok": "OK", + "on": "Ligado", + "open": "Aberta", + "problem": "Problema", + "unlocked": "Desbloqueado" + } + }, + "title": "Grupo" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ro.json b/homeassistant/components/group/translations/ro.json new file mode 100644 index 00000000000..865c08d5ab5 --- /dev/null +++ b/homeassistant/components/group/translations/ro.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u00cenchis", + "home": "Acas\u0103", + "locked": "Blocat", + "not_home": "Plecat", + "off": "Oprit", + "ok": "OK", + "on": "Pornit", + "open": "Deschis", + "problem": "Problem\u0103", + "unlocked": "Deblocat" + } + }, + "title": "Grup" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ru.json b/homeassistant/components/group/translations/ru.json new file mode 100644 index 00000000000..7103b9f75d0 --- /dev/null +++ b/homeassistant/components/group/translations/ru.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "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\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\u043e" + } + }, + "title": "\u0413\u0440\u0443\u043f\u043f\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/sk.json b/homeassistant/components/group/translations/sk.json new file mode 100644 index 00000000000..151cc1c47b0 --- /dev/null +++ b/homeassistant/components/group/translations/sk.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Zatvoren\u00e1", + "home": "Doma", + "locked": "Zamknut\u00e1", + "not_home": "Pre\u010d", + "off": "Vypnut\u00e1", + "ok": "OK", + "on": "Zapnut\u00e1", + "open": "Otvoren\u00e1", + "problem": "Probl\u00e9m", + "unlocked": "Odomknut\u00e1" + } + }, + "title": "Skupina" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/sl.json b/homeassistant/components/group/translations/sl.json new file mode 100644 index 00000000000..f810bbc6d2d --- /dev/null +++ b/homeassistant/components/group/translations/sl.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Zaprto", + "home": "Doma", + "locked": "Zaklenjeno", + "not_home": "Odsoten", + "off": "Izklju\u010den", + "ok": "OK", + "on": "Vklopljen", + "open": "Odprto", + "problem": "Te\u017eava", + "unlocked": "Odklenjeno" + } + }, + "title": "Skupina" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/sv.json b/homeassistant/components/group/translations/sv.json new file mode 100644 index 00000000000..50b3f605682 --- /dev/null +++ b/homeassistant/components/group/translations/sv.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "St\u00e4ngd", + "home": "Hemma", + "locked": "L\u00e5st", + "not_home": "Borta", + "off": "Av", + "ok": "Ok", + "on": "P\u00e5", + "open": "\u00d6ppen", + "problem": "Problem", + "unlocked": "Ol\u00e5st" + } + }, + "title": "Grupp" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/ta.json b/homeassistant/components/group/translations/ta.json new file mode 100644 index 00000000000..225ebd99fa7 --- /dev/null +++ b/homeassistant/components/group/translations/ta.json @@ -0,0 +1,16 @@ +{ + "state": { + "_": { + "closed": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ", + "home": "\u0bb5\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0bb2\u0bcd", + "locked": "\u0baa\u0bc2\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ", + "not_home": "\u0ba4\u0bca\u0bb2\u0bc8\u0bb5\u0bbf\u0bb2\u0bcd", + "off": "\u0b86\u0b83\u0baa\u0bcd", + "ok": "\u0b9a\u0bb0\u0bbf", + "on": "\u0b86\u0ba9\u0bcd", + "open": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ", + "problem": "\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb2\u0bcd", + "unlocked": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 " + } + } +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/te.json b/homeassistant/components/group/translations/te.json new file mode 100644 index 00000000000..ef4ed78af51 --- /dev/null +++ b/homeassistant/components/group/translations/te.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f", + "home": "\u0c07\u0c02\u0c1f", + "locked": "\u0c2e\u0c42\u0c38\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41", + "not_home": "\u0c2c\u0c2f\u0c1f", + "off": "\u0c06\u0c2b\u0c4d", + "ok": "\u0c05\u0c32\u0c3e\u0c17\u0c47", + "on": "\u0c06\u0c28\u0c4d", + "open": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f", + "problem": "\u0c38\u0c2e\u0c38\u0c4d\u0c2f", + "unlocked": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41" + } + }, + "title": "\u0c17\u0c4d\u0c30\u0c42\u0c2a\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/th.json b/homeassistant/components/group/translations/th.json new file mode 100644 index 00000000000..e90a6173e15 --- /dev/null +++ b/homeassistant/components/group/translations/th.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27", + "home": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19", + "locked": "\u0e25\u0e47\u0e2d\u0e04\u0e41\u0e25\u0e49\u0e27", + "not_home": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19", + "off": "\u0e1b\u0e34\u0e14", + "ok": "\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "on": "\u0e40\u0e1b\u0e34\u0e14", + "open": "\u0e40\u0e1b\u0e34\u0e14", + "problem": "\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32", + "unlocked": "\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04\u0e41\u0e25\u0e49\u0e27" + } + }, + "title": "\u0e01\u0e25\u0e38\u0e48\u0e21" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/tr.json b/homeassistant/components/group/translations/tr.json new file mode 100644 index 00000000000..5a596efdf01 --- /dev/null +++ b/homeassistant/components/group/translations/tr.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "Kapand\u0131", + "home": "Evde", + "locked": "Kilitli", + "not_home": "D\u0131\u015far\u0131da", + "off": "Kapal\u0131", + "ok": "Tamam", + "on": "A\u00e7\u0131k", + "open": "A\u00e7\u0131k", + "problem": "Problem", + "unlocked": "Kilitli de\u011fil" + } + }, + "title": "Grup" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/uk.json b/homeassistant/components/group/translations/uk.json new file mode 100644 index 00000000000..2d57686134a --- /dev/null +++ b/homeassistant/components/group/translations/uk.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u043e", + "home": "\u0412\u0434\u043e\u043c\u0430", + "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e", + "not_home": "\u041d\u0435 \u0432\u0434\u043e\u043c\u0430", + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "ok": "\u041e\u041a", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e", + "open": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u043e", + "problem": "\u0425\u0430\u043b\u0435\u043f\u0430", + "unlocked": "\u0420\u043e\u0437\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e" + } + }, + "title": "\u0413\u0440\u0443\u043f\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/vi.json b/homeassistant/components/group/translations/vi.json new file mode 100644 index 00000000000..f95e6ed506f --- /dev/null +++ b/homeassistant/components/group/translations/vi.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u0110\u00e3 \u0111\u00f3ng", + "home": "\u1ede nh\u00e0", + "locked": "Kho\u00e1", + "not_home": "\u0110i v\u1eafng", + "off": "T\u1eaft", + "ok": "OK", + "on": "B\u1eadt", + "open": "M\u1edf", + "problem": "V\u1ea5n \u0111\u1ec1", + "unlocked": "M\u1edf kho\u00e1" + } + }, + "title": "Nh\u00f3m" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/zh-Hans.json b/homeassistant/components/group/translations/zh-Hans.json new file mode 100644 index 00000000000..66577b36963 --- /dev/null +++ b/homeassistant/components/group/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u5df2\u5173\u95ed", + "home": "\u5728\u5bb6", + "locked": "\u5df2\u9501\u5b9a", + "not_home": "\u79bb\u5f00", + "off": "\u5173\u95ed", + "ok": "\u6b63\u5e38", + "on": "\u5f00\u542f", + "open": "\u5f00\u542f", + "problem": "\u5f02\u5e38", + "unlocked": "\u5df2\u89e3\u9501" + } + }, + "title": "\u7fa4\u7ec4" +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/zh-Hant.json b/homeassistant/components/group/translations/zh-Hant.json new file mode 100644 index 00000000000..790feb0c5ff --- /dev/null +++ b/homeassistant/components/group/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "state": { + "_": { + "closed": "\u95dc\u9589", + "home": "\u5728\u5bb6", + "locked": "\u5df2\u4e0a\u9396", + "not_home": "\u96e2\u5bb6", + "off": "\u95dc\u9589", + "ok": "\u6b63\u5e38", + "on": "\u958b\u555f", + "open": "\u958b\u555f", + "problem": "\u7570\u5e38", + "unlocked": "\u5df2\u89e3\u9396" + } + }, + "title": "\u7fa4\u7d44" +} \ No newline at end of file diff --git a/homeassistant/components/growatt_server/manifest.json b/homeassistant/components/growatt_server/manifest.json index 7457ef14254..7d8a8a3852f 100644 --- a/homeassistant/components/growatt_server/manifest.json +++ b/homeassistant/components/growatt_server/manifest.json @@ -3,6 +3,5 @@ "name": "Growatt", "documentation": "https://www.home-assistant.io/integrations/growatt_server/", "requirements": ["growattServer==0.0.1"], - "dependencies": [], "codeowners": ["@indykoning"] } diff --git a/homeassistant/components/growatt_server/sensor.py b/homeassistant/components/growatt_server/sensor.py index 2816b86be84..6bfdf7f2552 100644 --- a/homeassistant/components/growatt_server/sensor.py +++ b/homeassistant/components/growatt_server/sensor.py @@ -8,7 +8,15 @@ import growattServer import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + CONF_NAME, + CONF_PASSWORD, + CONF_USERNAME, + ENERGY_KILO_WATT_HOUR, + FREQUENCY_HERTZ, + POWER_WATT, + VOLT, +) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -23,30 +31,55 @@ SCAN_INTERVAL = datetime.timedelta(minutes=5) TOTAL_SENSOR_TYPES = { "total_money_today": ("Total money today", "€", "plantMoneyText", None), "total_money_total": ("Money lifetime", "€", "totalMoneyText", None), - "total_energy_today": ("Energy Today", "kWh", "todayEnergy", "power"), - "total_output_power": ("Output Power", "W", "invTodayPpv", "power"), - "total_energy_output": ("Lifetime energy output", "kWh", "totalEnergy", "power"), - "total_maximum_output": ("Maximum power", "W", "nominalPower", "power"), + "total_energy_today": ( + "Energy Today", + ENERGY_KILO_WATT_HOUR, + "todayEnergy", + "power", + ), + "total_output_power": ("Output Power", POWER_WATT, "invTodayPpv", "power"), + "total_energy_output": ( + "Lifetime energy output", + ENERGY_KILO_WATT_HOUR, + "totalEnergy", + "power", + ), + "total_maximum_output": ("Maximum power", POWER_WATT, "nominalPower", "power"), } INVERTER_SENSOR_TYPES = { - "inverter_energy_today": ("Energy today", "kWh", "e_today", "power"), - "inverter_energy_total": ("Lifetime energy output", "kWh", "e_total", "power"), - "inverter_voltage_input_1": ("Input 1 voltage", "V", "vpv1", None), + "inverter_energy_today": ( + "Energy today", + ENERGY_KILO_WATT_HOUR, + "e_today", + "power", + ), + "inverter_energy_total": ( + "Lifetime energy output", + ENERGY_KILO_WATT_HOUR, + "e_total", + "power", + ), + "inverter_voltage_input_1": ("Input 1 voltage", VOLT, "vpv1", None), "inverter_amperage_input_1": ("Input 1 Amperage", "A", "ipv1", None), - "inverter_wattage_input_1": ("Input 1 Wattage", "W", "ppv1", "power"), - "inverter_voltage_input_2": ("Input 2 voltage", "V", "vpv2", None), + "inverter_wattage_input_1": ("Input 1 Wattage", POWER_WATT, "ppv1", "power"), + "inverter_voltage_input_2": ("Input 2 voltage", VOLT, "vpv2", None), "inverter_amperage_input_2": ("Input 2 Amperage", "A", "ipv2", None), - "inverter_wattage_input_2": ("Input 2 Wattage", "W", "ppv2", "power"), - "inverter_voltage_input_3": ("Input 3 voltage", "V", "vpv3", None), + "inverter_wattage_input_2": ("Input 2 Wattage", POWER_WATT, "ppv2", "power"), + "inverter_voltage_input_3": ("Input 3 voltage", VOLT, "vpv3", None), "inverter_amperage_input_3": ("Input 3 Amperage", "A", "ipv3", None), - "inverter_wattage_input_3": ("Input 3 Wattage", "W", "ppv3", "power"), - "inverter_internal_wattage": ("Internal wattage", "W", "ppv", "power"), - "inverter_reactive_voltage": ("Reactive voltage", "V", "vacr", None), + "inverter_wattage_input_3": ("Input 3 Wattage", POWER_WATT, "ppv3", "power"), + "inverter_internal_wattage": ("Internal wattage", POWER_WATT, "ppv", "power"), + "inverter_reactive_voltage": ("Reactive voltage", VOLT, "vacr", None), "inverter_inverter_reactive_amperage": ("Reactive amperage", "A", "iacr", None), - "inverter_frequency": ("AC frequency", "Hz", "fac", None), - "inverter_current_wattage": ("Output power", "W", "pac", "power"), - "inverter_current_reactive_wattage": ("Reactive wattage", "W", "pacr", "power"), + "inverter_frequency": ("AC frequency", FREQUENCY_HERTZ, "fac", None), + "inverter_current_wattage": ("Output power", POWER_WATT, "pac", "power"), + "inverter_current_reactive_wattage": ( + "Reactive wattage", + POWER_WATT, + "pacr", + "power", + ), } SENSOR_TYPES = {**TOTAL_SENSOR_TYPES, **INVERTER_SENSOR_TYPES} diff --git a/homeassistant/components/gstreamer/manifest.json b/homeassistant/components/gstreamer/manifest.json index 81078b1a18b..691d26ce009 100644 --- a/homeassistant/components/gstreamer/manifest.json +++ b/homeassistant/components/gstreamer/manifest.json @@ -3,6 +3,5 @@ "name": "GStreamer", "documentation": "https://www.home-assistant.io/integrations/gstreamer", "requirements": ["gstreamer-player==1.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/gtfs/manifest.json b/homeassistant/components/gtfs/manifest.json index a7959584504..c3efd8cdaed 100644 --- a/homeassistant/components/gtfs/manifest.json +++ b/homeassistant/components/gtfs/manifest.json @@ -3,6 +3,5 @@ "name": "General Transit Feed Specification (GTFS)", "documentation": "https://www.home-assistant.io/integrations/gtfs", "requirements": ["pygtfs==0.1.5"], - "dependencies": [], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/gtfs/sensor.py b/homeassistant/components/gtfs/sensor.py index 08550ed80b8..e4e00c7c2ec 100644 --- a/homeassistant/components/gtfs/sensor.py +++ b/homeassistant/components/gtfs/sensor.py @@ -659,9 +659,9 @@ class GTFSDepartureSensor(Entity): @staticmethod def dict_for_table(resource: Any) -> dict: """Return a dictionary for the SQLAlchemy resource given.""" - return dict( - (col, getattr(resource, col)) for col in resource.__table__.columns.keys() - ) + return { + col: getattr(resource, col) for col in resource.__table__.columns.keys() + } def append_keys(self, resource: dict, prefix: Optional[str] = None) -> None: """Properly format key val pairs to append to attributes.""" diff --git a/homeassistant/components/habitica/manifest.json b/homeassistant/components/habitica/manifest.json index ff0d0eb27ac..50664d862ad 100644 --- a/homeassistant/components/habitica/manifest.json +++ b/homeassistant/components/habitica/manifest.json @@ -3,6 +3,5 @@ "name": "Habitica", "documentation": "https://www.home-assistant.io/integrations/habitica", "requirements": ["habitipy==0.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/habitica/services.yaml b/homeassistant/components/habitica/services.yaml index a063b1577f5..20794b4c47b 100644 --- a/homeassistant/components/habitica/services.yaml +++ b/homeassistant/components/habitica/services.yaml @@ -1,12 +1,10 @@ # Describes the format for Habitica service - ---- api_call: description: Call Habitica api fields: name: description: Habitica's username to call for - example: 'xxxNotAValidNickxxx' + example: "xxxNotAValidNickxxx" path: description: "Items from API URL in form of an array with method attached at the end. Consult https://habitica.com/apidoc/. Example uses https://habitica.com/apidoc/#api-Task-CreateUserTasks" example: '["tasks", "user", "post"]' diff --git a/homeassistant/components/hangouts/.translations/bg.json b/homeassistant/components/hangouts/.translations/bg.json deleted file mode 100644 index 10c1666074c..00000000000 --- a/homeassistant/components/hangouts/.translations/bg.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "unknown": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430." - }, - "error": { - "invalid_2fa": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 2-\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f, \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "invalid_2fa_method": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043c\u0435\u0442\u043e\u0434 2FA (\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430).", - "invalid_login": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0432\u043b\u0438\u0437\u0430\u043d\u0435, \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA PIN" - }, - "title": "\u0414\u0432\u0443-\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" - }, - "user": { - "data": { - "authorization_code": "\u041a\u043e\u0434 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f (\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0437\u0430 \u0440\u044a\u0447\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435)", - "email": "E-mail \u0430\u0434\u0440\u0435\u0441", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430" - }, - "title": "\u0412\u0445\u043e\u0434 \u0432 Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/ca.json b/homeassistant/components/hangouts/.translations/ca.json deleted file mode 100644 index 0dcc0f029c2..00000000000 --- a/homeassistant/components/hangouts/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts ja est\u00e0 configurat", - "unknown": "S'ha produ\u00eft un error desconegut." - }, - "error": { - "invalid_2fa": "La verificaci\u00f3 en dos passos no \u00e9s v\u00e0lida, torna-ho a provar.", - "invalid_2fa_method": "El m\u00e8tode de verificaci\u00f3 en dos passos no \u00e9s v\u00e0lid (verifica-ho al m\u00f2bil).", - "invalid_login": "L'inici de sessi\u00f3 no \u00e9s v\u00e0lid, torna-ho a provar." - }, - "step": { - "2fa": { - "data": { - "2fa": "Pin 2FA" - }, - "description": "buit", - "title": "Verificaci\u00f3 en dos passos" - }, - "user": { - "data": { - "authorization_code": "Codi d'autoritzaci\u00f3 (necessari per a l'autenticaci\u00f3 manual)", - "email": "Correu electr\u00f2nic", - "password": "Contrasenya" - }, - "description": "buit", - "title": "Inici de sessi\u00f3 de Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/cs.json b/homeassistant/components/hangouts/.translations/cs.json deleted file mode 100644 index badd381f2be..00000000000 --- a/homeassistant/components/hangouts/.translations/cs.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Slu\u017eba Google Hangouts je ji\u017e nakonfigurov\u00e1na", - "unknown": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b" - }, - "error": { - "invalid_2fa": "Dfoufaktorov\u00e9 ov\u011b\u0159en\u00ed se nezda\u0159ilo. Zkuste to znovu.", - "invalid_2fa_method": "Neplatn\u00e1 metoda 2FA (ov\u011b\u0159en\u00ed na telefonu).", - "invalid_login": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed jm\u00e9no, pros\u00edm zkuste to znovu." - }, - "step": { - "2fa": { - "data": { - "2fa": "Dvoufaktorov\u00fd ov\u011b\u0159ovac\u00ed k\u00f3d" - }, - "title": "Dvoufaktorov\u00e9 ov\u011b\u0159en\u00ed" - }, - "user": { - "data": { - "email": "E-mailov\u00e1 adresa", - "password": "Heslo" - }, - "title": "P\u0159ihl\u00e1\u0161en\u00ed do slu\u017eby Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/da.json b/homeassistant/components/hangouts/.translations/da.json deleted file mode 100644 index 2ceb78ddde8..00000000000 --- a/homeassistant/components/hangouts/.translations/da.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts er allerede konfigureret", - "unknown": "Ukendt fejl opstod" - }, - "error": { - "invalid_2fa": "Ugyldig tofaktor-godkendelse, pr\u00f8v igen.", - "invalid_2fa_method": "Ugyldig 2FA-metode (Bekr\u00e6ft p\u00e5 telefon).", - "invalid_login": "Ugyldig login, pr\u00f8v venligst igen." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA pin" - }, - "title": "Tofaktor-godkendelse" - }, - "user": { - "data": { - "authorization_code": "Godkendelseskode (kr\u00e6vet til manuel godkendelse)", - "email": "Emailadresse", - "password": "Adgangskode" - }, - "title": "Google Hangouts login" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/de.json b/homeassistant/components/hangouts/.translations/de.json deleted file mode 100644 index 4f48187b49b..00000000000 --- a/homeassistant/components/hangouts/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts ist bereits konfiguriert", - "unknown": "Ein unbekannter Fehler ist aufgetreten." - }, - "error": { - "invalid_2fa": "Ung\u00fcltige 2-Faktor Authentifizierung, bitte versuche es erneut.", - "invalid_2fa_method": "Ung\u00fcltige 2FA Methode (mit Telefon verifizieren)", - "invalid_login": "Ung\u00fcltige Daten, bitte erneut versuchen." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA PIN" - }, - "description": "Leer", - "title": "2-Faktor-Authentifizierung" - }, - "user": { - "data": { - "authorization_code": "Autorisierungscode (f\u00fcr die manuelle Authentifizierung erforderlich)", - "email": "E-Mail-Adresse", - "password": "Passwort" - }, - "description": "Leer", - "title": "Google Hangouts Login" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/en.json b/homeassistant/components/hangouts/.translations/en.json deleted file mode 100644 index 31e5f9894f9..00000000000 --- a/homeassistant/components/hangouts/.translations/en.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts is already configured", - "unknown": "Unknown error occurred." - }, - "error": { - "invalid_2fa": "Invalid 2 Factor Authentication, please try again.", - "invalid_2fa_method": "Invalid 2FA Method (Verify on Phone).", - "invalid_login": "Invalid Login, please try again." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "title": "2-Factor-Authentication" - }, - "user": { - "data": { - "authorization_code": "Authorization Code (required for manual authentication)", - "email": "E-Mail Address", - "password": "Password" - }, - "title": "Google Hangouts Login" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/es-419.json b/homeassistant/components/hangouts/.translations/es-419.json deleted file mode 100644 index 011060694a7..00000000000 --- a/homeassistant/components/hangouts/.translations/es-419.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts ya est\u00e1 configurado", - "unknown": "Se produjo un error desconocido." - }, - "error": { - "invalid_2fa": "Autenticaci\u00f3n de 2 factores no v\u00e1lida, intente nuevamente.", - "invalid_login": "Inicio de sesi\u00f3n no v\u00e1lido, por favor, int\u00e9ntalo de nuevo." - }, - "step": { - "2fa": { - "data": { - "2fa": "Pin 2FA" - }, - "title": "Autenticaci\u00f3n de 2 factores" - }, - "user": { - "data": { - "authorization_code": "C\u00f3digo de autorizaci\u00f3n (requerido para la autenticaci\u00f3n manual)", - "email": "Direcci\u00f3n de correo electr\u00f3nico", - "password": "Contrase\u00f1a" - }, - "title": "Inicio de sesi\u00f3n de Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/es.json b/homeassistant/components/hangouts/.translations/es.json deleted file mode 100644 index dfa463fb148..00000000000 --- a/homeassistant/components/hangouts/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts ya est\u00e1 configurado", - "unknown": "Error desconocido" - }, - "error": { - "invalid_2fa": "Autenticaci\u00f3n de 2 factores no v\u00e1lida, por favor, int\u00e9ntelo de nuevo.", - "invalid_2fa_method": "M\u00e9todo 2FA no v\u00e1lido (verificar en el tel\u00e9fono).", - "invalid_login": "Inicio de sesi\u00f3n no v\u00e1lido, por favor, int\u00e9ntalo de nuevo." - }, - "step": { - "2fa": { - "data": { - "2fa": "Pin 2FA" - }, - "description": "Vac\u00edo", - "title": "Autenticaci\u00f3n de 2 factores" - }, - "user": { - "data": { - "authorization_code": "C\u00f3digo de autorizaci\u00f3n (requerido para la autenticaci\u00f3n manual)", - "email": "Correo electr\u00f3nico", - "password": "Contrase\u00f1a" - }, - "description": "Vac\u00edo", - "title": "Iniciar sesi\u00f3n en Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/et.json b/homeassistant/components/hangouts/.translations/et.json deleted file mode 100644 index 4bd26876ac6..00000000000 --- a/homeassistant/components/hangouts/.translations/et.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "error": { - "invalid_login": "Vale Kasutajanimi, palun proovige uuesti." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA PIN" - }, - "title": "Kaheastmeline autentimine" - }, - "user": { - "data": { - "email": "E-posti aadress", - "password": "Salas\u00f5na" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/fr.json b/homeassistant/components/hangouts/.translations/fr.json deleted file mode 100644 index 13142fee513..00000000000 --- a/homeassistant/components/hangouts/.translations/fr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts est d\u00e9j\u00e0 configur\u00e9", - "unknown": "Une erreur inconnue s'est produite" - }, - "error": { - "invalid_2fa": "Authentification \u00e0 2 facteurs invalide, veuillez r\u00e9essayer.", - "invalid_2fa_method": "M\u00e9thode 2FA non valide (v\u00e9rifiez sur le t\u00e9l\u00e9phone).", - "invalid_login": "Login invalide, veuillez r\u00e9essayer." - }, - "step": { - "2fa": { - "data": { - "2fa": "Code PIN d'authentification \u00e0 2 facteurs" - }, - "description": "Vide", - "title": "Authentification \u00e0 2 facteurs" - }, - "user": { - "data": { - "authorization_code": "Code d'autorisation (requis pour l'authentification manuelle)", - "email": "Adresse e-mail", - "password": "Mot de passe" - }, - "description": "Vide", - "title": "Connexion \u00e0 Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/he.json b/homeassistant/components/hangouts/.translations/he.json deleted file mode 100644 index 28326d97142..00000000000 --- a/homeassistant/components/hangouts/.translations/he.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", - "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." - }, - "error": { - "invalid_2fa": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05d1\u05d1\u05e7\u05e9\u05d4 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", - "invalid_2fa_method": "\u05d3\u05e8\u05da \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05ea (\u05d0\u05de\u05ea \u05d1\u05d8\u05dc\u05e4\u05d5\u05df).", - "invalid_login": "\u05db\u05e0\u05d9\u05e1\u05d4 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05ea, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1." - }, - "step": { - "2fa": { - "data": { - "2fa": "\u05e7\u05d5\u05d3 \u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9" - }, - "title": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9" - }, - "user": { - "data": { - "email": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\"\u05dc", - "password": "\u05e1\u05d9\u05e1\u05de\u05d4" - }, - "title": "\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05dc- Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/hu.json b/homeassistant/components/hangouts/.translations/hu.json deleted file mode 100644 index f6e46e25985..00000000000 --- a/homeassistant/components/hangouts/.translations/hu.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A Google Hangouts m\u00e1r konfigur\u00e1lva van", - "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt." - }, - "error": { - "invalid_2fa": "\u00c9rv\u00e9nytelen K\u00e9tfaktoros hiteles\u00edt\u00e9s, pr\u00f3b\u00e1ld \u00fajra.", - "invalid_2fa_method": "\u00c9rv\u00e9nytelen 2FA M\u00f3dszer (Ellen\u0151rz\u00e9s a Telefonon).", - "invalid_login": "\u00c9rv\u00e9nytelen bejelentkez\u00e9s, pr\u00f3b\u00e1ld \u00fajra." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "description": "\u00dcres", - "title": "K\u00e9tfaktoros Hiteles\u00edt\u00e9s" - }, - "user": { - "data": { - "email": "E-Mail C\u00edm", - "password": "Jelsz\u00f3" - }, - "description": "\u00dcres", - "title": "Google Hangouts Bejelentkez\u00e9s" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/id.json b/homeassistant/components/hangouts/.translations/id.json deleted file mode 100644 index 46a574bdf8a..00000000000 --- a/homeassistant/components/hangouts/.translations/id.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts sudah dikonfigurasikan", - "unknown": "Kesalahan tidak dikenal terjadi." - }, - "error": { - "invalid_2fa": "Autentikasi 2 Faktor Tidak Valid, silakan coba lagi.", - "invalid_2fa_method": "Metode 2FA Tidak Sah (Verifikasi di Ponsel).", - "invalid_login": "Login tidak valid, silahkan coba lagi." - }, - "step": { - "2fa": { - "data": { - "2fa": "Pin 2FA" - }, - "description": "Kosong", - "title": "2-Faktor-Otentikasi" - }, - "user": { - "data": { - "email": "Alamat email", - "password": "Kata sandi" - }, - "description": "Kosong", - "title": "Google Hangouts Login" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/it.json b/homeassistant/components/hangouts/.translations/it.json deleted file mode 100644 index ff0a8238d49..00000000000 --- a/homeassistant/components/hangouts/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts \u00e8 gi\u00e0 configurato", - "unknown": "Si \u00e8 verificato un errore sconosciuto." - }, - "error": { - "invalid_2fa": "Autenticazione a 2 fattori non valida, riprovare.", - "invalid_2fa_method": "Metodo 2FA non valido (verifica sul telefono).", - "invalid_login": "Accesso non valido, si prega di riprovare." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "description": "Vuoto", - "title": "Autenticazione a due fattori" - }, - "user": { - "data": { - "authorization_code": "Codice di autorizzazione (necessario per l'autenticazione manuale)", - "email": "Indirizzo E-mail", - "password": "Password" - }, - "description": "Vuoto", - "title": "Accesso a Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/ko.json b/homeassistant/components/hangouts/.translations/ko.json deleted file mode 100644 index 385fc128b3b..00000000000 --- a/homeassistant/components/hangouts/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google \ud589\uc544\uc6c3\uc740 \uc774\ubbf8 \uc124\uc815\ub41c \uc0c1\ud0dc\uc785\ub2c8\ub2e4", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "invalid_2fa": "2\ub2e8\uacc4 \uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "invalid_2fa_method": "2\ub2e8\uacc4 \uc778\uc99d \ubc29\ubc95\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. (\uc804\ud654\uae30\uc5d0\uc11c \ud655\uc778)", - "invalid_login": "\uc798\ubabb\ub41c \ub85c\uadf8\uc778\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "step": { - "2fa": { - "data": { - "2fa": "2\ub2e8\uacc4 \uc778\uc99d PIN" - }, - "description": "\uc8c4\uc1a1\ud569\ub2c8\ub2e4. \uad00\ub828 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0 \ubc18\uc601\ub420 \uc608\uc815\uc774\ub2c8 \uc870\uae08\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694.", - "title": "2\ub2e8\uacc4 \uc778\uc99d" - }, - "user": { - "data": { - "authorization_code": "\uc778\uc99d \ucf54\ub4dc (\uc218\ub3d9 \uc778\uc99d\uc5d0 \ud544\uc694)", - "email": "\uc774\uba54\uc77c \uc8fc\uc18c", - "password": "\ube44\ubc00\ubc88\ud638" - }, - "description": "\uc8c4\uc1a1\ud569\ub2c8\ub2e4. \uad00\ub828 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0 \ubc18\uc601\ub420 \uc608\uc815\uc774\ub2c8 \uc870\uae08\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694.", - "title": "Google \ud589\uc544\uc6c3 \ub85c\uadf8\uc778" - } - }, - "title": "Google \ud589\uc544\uc6c3" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/lb.json b/homeassistant/components/hangouts/.translations/lb.json deleted file mode 100644 index c22b02fd7ed..00000000000 --- a/homeassistant/components/hangouts/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts ass scho konfigur\u00e9iert", - "unknown": "Onbekannten Feeler opgetrueden" - }, - "error": { - "invalid_2fa": "Ong\u00eblteg 2-Faktor Authentifikatioun, prob\u00e9iert w.e.g. nach emol.", - "invalid_2fa_method": "Ong\u00eblteg 2FA Methode (Iwwerpr\u00e9ift et um Telefon)", - "invalid_login": "Ong\u00ebltege Login, prob\u00e9iert w.e.g. nach emol." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "description": "Eidel", - "title": "2-Faktor-Authentifikatioun" - }, - "user": { - "data": { - "authorization_code": "Autorisatioun's Code (n\u00e9ideg fir eng manuell Authentifikatioun)", - "email": "E-Mail Adress", - "password": "Passwuert" - }, - "description": "Eidel", - "title": "Google Hangouts Login" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/nl.json b/homeassistant/components/hangouts/.translations/nl.json deleted file mode 100644 index 9f9b121a7c2..00000000000 --- a/homeassistant/components/hangouts/.translations/nl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts is al geconfigureerd", - "unknown": "Onbekende fout opgetreden." - }, - "error": { - "invalid_2fa": "Ongeldige twee-factor-authenticatie, probeer het opnieuw.", - "invalid_2fa_method": "Ongeldige 2FA-methode (verifi\u00ebren op telefoon).", - "invalid_login": "Ongeldige aanmelding, probeer het opnieuw." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA pin" - }, - "description": "Leeg", - "title": "Twee-factor-authenticatie" - }, - "user": { - "data": { - "authorization_code": "Autorisatiecode (vereist voor handmatige authenticatie)", - "email": "E-mailadres", - "password": "Wachtwoord" - }, - "description": "Leeg", - "title": "Google Hangouts inlog" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/nn.json b/homeassistant/components/hangouts/.translations/nn.json deleted file mode 100644 index c8a5fb4481b..00000000000 --- a/homeassistant/components/hangouts/.translations/nn.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts er allereie konfigurert", - "unknown": "Det hende ein ukjent feil" - }, - "error": { - "invalid_2fa": "Ugyldig to-faktor-autentisering. Ver vennleg og pr\u00f8v igjen.", - "invalid_2fa_method": "Ugyldig 2FA-metode (godkjenn p\u00e5 telefonen).", - "invalid_login": "Ugyldig innlogging. Pr\u00f8v igjen." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA PIN" - }, - "title": "To-faktor-autentisering" - }, - "user": { - "data": { - "email": "Epostadresse", - "password": "Passord" - }, - "title": "Google Hangouts Login" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/no.json b/homeassistant/components/hangouts/.translations/no.json deleted file mode 100644 index ab061ee1a80..00000000000 --- a/homeassistant/components/hangouts/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts er allerede konfigurert", - "unknown": "Ukjent feil oppstod." - }, - "error": { - "invalid_2fa": "Ugyldig tofaktorautentisering, vennligst pr\u00f8v igjen.", - "invalid_2fa_method": "Ugyldig 2FA-metode (Bekreft p\u00e5 telefon).", - "invalid_login": "Ugyldig innlogging, vennligst pr\u00f8v igjen." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "description": "Tom", - "title": "Tofaktorautentisering" - }, - "user": { - "data": { - "authorization_code": "Autorisasjonskode (kreves for manuell godkjenning)", - "email": "E-postadresse", - "password": "Passord" - }, - "description": "Tom", - "title": "Google Hangouts p\u00e5logging" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/pl.json b/homeassistant/components/hangouts/.translations/pl.json deleted file mode 100644 index 1d08296007a..00000000000 --- a/homeassistant/components/hangouts/.translations/pl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts jest ju\u017c skonfigurowany.", - "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d." - }, - "error": { - "invalid_2fa": "Nieprawid\u0142owe uwierzytelnienie dwusk\u0142adnikowe, spr\u00f3buj ponownie.", - "invalid_2fa_method": "Nieprawid\u0142owa metoda uwierzytelniania dwusk\u0142adnikowego (u\u017cyj weryfikacji przez telefon).", - "invalid_login": "Nieprawid\u0142owy login, spr\u00f3buj ponownie." - }, - "step": { - "2fa": { - "data": { - "2fa": "PIN" - }, - "description": "Pusty", - "title": "Uwierzytelnianie dwusk\u0142adnikowe" - }, - "user": { - "data": { - "authorization_code": "Kod autoryzacji (wymagany do r\u0119cznego uwierzytelnienia)", - "email": "Adres e-mail", - "password": "Has\u0142o" - }, - "description": "Pusty", - "title": "Logowanie do Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/pt-BR.json b/homeassistant/components/hangouts/.translations/pt-BR.json deleted file mode 100644 index 553360d8da6..00000000000 --- a/homeassistant/components/hangouts/.translations/pt-BR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Hangouts do Google j\u00e1 est\u00e1 configurado.", - "unknown": "Ocorreu um erro desconhecido." - }, - "error": { - "invalid_2fa": "Autentica\u00e7\u00e3o de 2 fatores inv\u00e1lida, por favor, tente novamente.", - "invalid_2fa_method": "M\u00e9todo 2FA inv\u00e1lido (verificar no telefone).", - "invalid_login": "Login inv\u00e1lido, por favor, tente novamente." - }, - "step": { - "2fa": { - "data": { - "2fa": "Pin 2FA" - }, - "description": "Vazio", - "title": "Autentica\u00e7\u00e3o de 2 Fatores" - }, - "user": { - "data": { - "authorization_code": "C\u00f3digo de Autoriza\u00e7\u00e3o (requerido para autentica\u00e7\u00e3o manual)", - "email": "Endere\u00e7o de e-mail", - "password": "Senha" - }, - "description": "Vazio", - "title": "Login do Hangouts do Google" - } - }, - "title": "Hangouts do Google" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/pt.json b/homeassistant/components/hangouts/.translations/pt.json deleted file mode 100644 index a16c60128c1..00000000000 --- a/homeassistant/components/hangouts/.translations/pt.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts j\u00e1 est\u00e1 configurado", - "unknown": "Ocorreu um erro desconhecido." - }, - "error": { - "invalid_2fa": "Autentica\u00e7\u00e3o por 2 fatores inv\u00e1lida, por favor, tente novamente.", - "invalid_2fa_method": "M\u00e9todo 2FA inv\u00e1lido (verificar no telefone).", - "invalid_login": "Login inv\u00e1lido, por favor, tente novamente." - }, - "step": { - "2fa": { - "data": { - "2fa": "Pin 2FA" - }, - "description": "Vazio", - "title": "Autentica\u00e7\u00e3o de 2 Fatores" - }, - "user": { - "data": { - "email": "Endere\u00e7o de e-mail", - "password": "Palavra-passe" - }, - "description": "Vazio", - "title": "Login Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/ro.json b/homeassistant/components/hangouts/.translations/ro.json deleted file mode 100644 index d1c3ed767ce..00000000000 --- a/homeassistant/components/hangouts/.translations/ro.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts este deja configurat", - "unknown": "Sa produs o eroare necunoscut\u0103." - }, - "error": { - "invalid_2fa_method": "Metoda 2FA invalid\u0103 (Verifica\u021bi pe telefon).", - "invalid_login": "Conectare invalid\u0103, \u00eencerca\u021bi din nou." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - } - }, - "user": { - "data": { - "email": "Adresa de email", - "password": "Parol\u0103" - }, - "description": "Gol", - "title": "Conectare Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/ru.json b/homeassistant/components/hangouts/.translations/ru.json deleted file mode 100644 index 5bb98effb9f..00000000000 --- a/homeassistant/components/hangouts/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "error": { - "invalid_2fa": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", - "invalid_2fa_method": "\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \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\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435).", - "invalid_login": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430." - }, - "step": { - "2fa": { - "data": { - "2fa": "\u041f\u0438\u043d-\u043a\u043e\u0434 \u0434\u043b\u044f \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" - }, - "description": "\u043f\u0443\u0441\u0442\u043e", - "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" - }, - "user": { - "data": { - "authorization_code": "\u041a\u043e\u0434 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438)", - "email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c" - }, - "description": "\u043f\u0443\u0441\u0442\u043e", - "title": "Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/sl.json b/homeassistant/components/hangouts/.translations/sl.json deleted file mode 100644 index 64ca6da10ac..00000000000 --- a/homeassistant/components/hangouts/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts je \u017ee konfiguriran", - "unknown": "Pri\u0161lo je do neznane napake" - }, - "error": { - "invalid_2fa": "Neveljavna 2FA avtorizacija, prosimo, poskusite znova.", - "invalid_2fa_method": "Neveljavna 2FA Metoda (Preverite na Telefonu).", - "invalid_login": "Neveljavna Prijava, prosimo, poskusite znova." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "description": "prazno", - "title": "Dvofaktorska avtorizacija" - }, - "user": { - "data": { - "authorization_code": "Koda pooblastila (potrebna za ro\u010dno overjanje)", - "email": "E-po\u0161tni naslov", - "password": "Geslo" - }, - "description": "prazno", - "title": "Prijava za Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/sv.json b/homeassistant/components/hangouts/.translations/sv.json deleted file mode 100644 index 993a191ef89..00000000000 --- a/homeassistant/components/hangouts/.translations/sv.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts \u00e4r redan inst\u00e4llt", - "unknown": "Ett ok\u00e4nt fel intr\u00e4ffade" - }, - "error": { - "invalid_2fa": "Ogiltig 2FA autentisering, f\u00f6rs\u00f6k igen.", - "invalid_2fa_method": "Ogiltig 2FA-metod (Verifiera med telefon).", - "invalid_login": "Ogiltig inloggning, f\u00f6rs\u00f6k igen." - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pinkod" - }, - "description": "Missing english translation", - "title": "Tv\u00e5faktorsautentisering" - }, - "user": { - "data": { - "authorization_code": "Auktoriseringskod (kr\u00e4vs vid manuell verifiering)", - "email": "E-postadress", - "password": "L\u00f6senord" - }, - "description": "Missing english translation", - "title": "Google Hangouts-inloggning" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/zh-Hans.json b/homeassistant/components/hangouts/.translations/zh-Hans.json deleted file mode 100644 index d4e6e360c23..00000000000 --- a/homeassistant/components/hangouts/.translations/zh-Hans.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts \u5df2\u914d\u7f6e\u5b8c\u6210", - "unknown": "\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002" - }, - "error": { - "invalid_2fa": "\u53cc\u91cd\u8ba4\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\u3002", - "invalid_2fa_method": "\u65e0\u6548\u7684\u53cc\u91cd\u8ba4\u8bc1\u65b9\u6cd5\uff08\u7535\u8bdd\u9a8c\u8bc1\uff09\u3002", - "invalid_login": "\u767b\u9646\u5931\u8d25\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002" - }, - "step": { - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "description": "\u65e0", - "title": "\u53cc\u91cd\u8ba4\u8bc1" - }, - "user": { - "data": { - "email": "\u7535\u5b50\u90ae\u4ef6\u5730\u5740", - "password": "\u5bc6\u7801" - }, - "description": "\u65e0", - "title": "\u767b\u5f55 Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/zh-Hant.json b/homeassistant/components/hangouts/.translations/zh-Hant.json deleted file mode 100644 index 5c2fd47068d..00000000000 --- a/homeassistant/components/hangouts/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Google Hangouts \u5df2\u7d93\u8a2d\u5b9a", - "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "error": { - "invalid_2fa": "\u96d9\u91cd\u9a57\u8b49\u7121\u6548\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "invalid_2fa_method": "\u8a8d\u8b49\u65b9\u5f0f\u7121\u6548\uff08\u65bc\u96fb\u8a71\u4e0a\u9a57\u8b49\uff09\u3002", - "invalid_login": "\u767b\u5165\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" - }, - "step": { - "2fa": { - "data": { - "2fa": "\u8a8d\u8b49\u78bc" - }, - "description": "\u7a7a\u767d", - "title": "\u96d9\u91cd\u9a57\u8b49" - }, - "user": { - "data": { - "authorization_code": "\u9a57\u8b49\u78bc\uff08\u624b\u52d5\u9a57\u8b49\u5fc5\u9808\uff09", - "email": "\u96fb\u5b50\u90f5\u4ef6", - "password": "\u5bc6\u78bc" - }, - "description": "\u7a7a\u767d", - "title": "\u767b\u5165 Google Hangouts" - } - }, - "title": "Google Hangouts" - } -} \ No newline at end of file diff --git a/homeassistant/components/hangouts/hangouts_bot.py b/homeassistant/components/hangouts/hangouts_bot.py index b3dfdecac2a..56045f0eb1c 100644 --- a/homeassistant/components/hangouts/hangouts_bot.py +++ b/homeassistant/components/hangouts/hangouts_bot.py @@ -7,6 +7,7 @@ import aiohttp import hangups from hangups import ChatMessageEvent, ChatMessageSegment, Client, get_auth, hangouts_pb2 +from homeassistant.const import HTTP_OK from homeassistant.core import callback from homeassistant.helpers import dispatcher, intent from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -273,7 +274,7 @@ class HangoutsBot: try: websession = async_get_clientsession(self.hass) async with websession.get(uri, timeout=5) as response: - if response.status != 200: + if response.status != HTTP_OK: _LOGGER.error( "Fetch image failed, %s, %s", response.status, response ) diff --git a/homeassistant/components/hangouts/manifest.json b/homeassistant/components/hangouts/manifest.json index b08387c7fd7..6eb62c3f590 100644 --- a/homeassistant/components/hangouts/manifest.json +++ b/homeassistant/components/hangouts/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/hangouts", "requirements": ["hangups==0.4.9"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hangouts/services.yaml b/homeassistant/components/hangouts/services.yaml index 26a7193493b..ff11762235d 100644 --- a/homeassistant/components/hangouts/services.yaml +++ b/homeassistant/components/hangouts/services.yaml @@ -15,4 +15,4 @@ send_message: example: '{ "image_file": "file" } or { "image_url": "url" }' reconnect: - description: Reconnect the bot. \ No newline at end of file + description: Reconnect the bot. diff --git a/homeassistant/components/hangouts/strings.json b/homeassistant/components/hangouts/strings.json index 8c155784ebe..8d5229c9941 100644 --- a/homeassistant/components/hangouts/strings.json +++ b/homeassistant/components/hangouts/strings.json @@ -1,30 +1,27 @@ { - "config": { - "abort": { - "already_configured": "Google Hangouts is already configured", - "unknown": "Unknown error occurred." + "config": { + "abort": { + "already_configured": "Google Hangouts is already configured", + "unknown": "Unknown error occurred." + }, + "error": { + "invalid_login": "Invalid Login, please try again.", + "invalid_2fa": "Invalid 2 Factor Authentication, please try again.", + "invalid_2fa_method": "Invalid 2FA Method (Verify on Phone)." + }, + "step": { + "user": { + "data": { + "email": "E-Mail Address", + "password": "Password", + "authorization_code": "Authorization Code (required for manual authentication)" }, - "error": { - "invalid_login": "Invalid Login, please try again.", - "invalid_2fa": "Invalid 2 Factor Authentication, please try again.", - "invalid_2fa_method": "Invalid 2FA Method (Verify on Phone)." - }, - "step": { - "user": { - "data": { - "email": "E-Mail Address", - "password": "Password", - "authorization_code": "Authorization Code (required for manual authentication)" - }, - "title": "Google Hangouts Login" - }, - "2fa": { - "data": { - "2fa": "2FA Pin" - }, - "title": "2-Factor-Authentication" - } - }, - "title": "Google Hangouts" + "title": "Google Hangouts Login" + }, + "2fa": { + "data": { "2fa": "2FA Pin" }, + "title": "2-Factor-Authentication" + } } + } } diff --git a/homeassistant/components/hangouts/translations/bg.json b/homeassistant/components/hangouts/translations/bg.json new file mode 100644 index 00000000000..09ffce392a6 --- /dev/null +++ b/homeassistant/components/hangouts/translations/bg.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "unknown": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430." + }, + "error": { + "invalid_2fa": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 2-\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f, \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "invalid_2fa_method": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043c\u0435\u0442\u043e\u0434 2FA (\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430).", + "invalid_login": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0432\u043b\u0438\u0437\u0430\u043d\u0435, \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA PIN" + }, + "title": "\u0414\u0432\u0443-\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" + }, + "user": { + "data": { + "authorization_code": "\u041a\u043e\u0434 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f (\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0437\u0430 \u0440\u044a\u0447\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435)", + "email": "E-mail \u0430\u0434\u0440\u0435\u0441", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430" + }, + "title": "\u0412\u0445\u043e\u0434 \u0432 Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/ca.json b/homeassistant/components/hangouts/translations/ca.json new file mode 100644 index 00000000000..a186723f345 --- /dev/null +++ b/homeassistant/components/hangouts/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts ja est\u00e0 configurat", + "unknown": "S'ha produ\u00eft un error desconegut." + }, + "error": { + "invalid_2fa": "La verificaci\u00f3 en dos passos no \u00e9s v\u00e0lida, torna-ho a provar.", + "invalid_2fa_method": "El m\u00e8tode de verificaci\u00f3 en dos passos no \u00e9s v\u00e0lid (verifica-ho al m\u00f2bil).", + "invalid_login": "L'inici de sessi\u00f3 no \u00e9s v\u00e0lid, torna-ho a provar." + }, + "step": { + "2fa": { + "data": { + "2fa": "Pin 2FA" + }, + "description": "buit", + "title": "Verificaci\u00f3 en dos passos" + }, + "user": { + "data": { + "authorization_code": "Codi d'autoritzaci\u00f3 (necessari per a l'autenticaci\u00f3 manual)", + "email": "Correu electr\u00f2nic", + "password": "Contrasenya" + }, + "description": "buit", + "title": "Inici de sessi\u00f3 de Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/cs.json b/homeassistant/components/hangouts/translations/cs.json new file mode 100644 index 00000000000..6b6d430307e --- /dev/null +++ b/homeassistant/components/hangouts/translations/cs.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "Slu\u017eba Google Hangouts je ji\u017e nakonfigurov\u00e1na", + "unknown": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b" + }, + "error": { + "invalid_2fa": "Dfoufaktorov\u00e9 ov\u011b\u0159en\u00ed se nezda\u0159ilo. Zkuste to znovu.", + "invalid_2fa_method": "Neplatn\u00e1 metoda 2FA (ov\u011b\u0159en\u00ed na telefonu).", + "invalid_login": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed jm\u00e9no, pros\u00edm zkuste to znovu." + }, + "step": { + "2fa": { + "data": { + "2fa": "Dvoufaktorov\u00fd ov\u011b\u0159ovac\u00ed k\u00f3d" + }, + "title": "Dvoufaktorov\u00e9 ov\u011b\u0159en\u00ed" + }, + "user": { + "data": { + "email": "E-mailov\u00e1 adresa", + "password": "Heslo" + }, + "title": "P\u0159ihl\u00e1\u0161en\u00ed do slu\u017eby Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/da.json b/homeassistant/components/hangouts/translations/da.json new file mode 100644 index 00000000000..e490c33805d --- /dev/null +++ b/homeassistant/components/hangouts/translations/da.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts er allerede konfigureret", + "unknown": "Ukendt fejl opstod" + }, + "error": { + "invalid_2fa": "Ugyldig tofaktor-godkendelse, pr\u00f8v igen.", + "invalid_2fa_method": "Ugyldig 2FA-metode (Bekr\u00e6ft p\u00e5 telefon).", + "invalid_login": "Ugyldig login, pr\u00f8v venligst igen." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA pin" + }, + "title": "Tofaktor-godkendelse" + }, + "user": { + "data": { + "authorization_code": "Godkendelseskode (kr\u00e6vet til manuel godkendelse)", + "email": "Emailadresse", + "password": "Adgangskode" + }, + "title": "Google Hangouts login" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/de.json b/homeassistant/components/hangouts/translations/de.json new file mode 100644 index 00000000000..5602713d245 --- /dev/null +++ b/homeassistant/components/hangouts/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts ist bereits konfiguriert", + "unknown": "Ein unbekannter Fehler ist aufgetreten." + }, + "error": { + "invalid_2fa": "Ung\u00fcltige 2-Faktor Authentifizierung, bitte versuche es erneut.", + "invalid_2fa_method": "Ung\u00fcltige 2FA Methode (mit Telefon verifizieren)", + "invalid_login": "Ung\u00fcltige Daten, bitte erneut versuchen." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA PIN" + }, + "description": "Leer", + "title": "2-Faktor-Authentifizierung" + }, + "user": { + "data": { + "authorization_code": "Autorisierungscode (f\u00fcr die manuelle Authentifizierung erforderlich)", + "email": "E-Mail-Adresse", + "password": "Passwort" + }, + "description": "Leer", + "title": "Google Hangouts Login" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/en.json b/homeassistant/components/hangouts/translations/en.json new file mode 100644 index 00000000000..bd2170a0f92 --- /dev/null +++ b/homeassistant/components/hangouts/translations/en.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts is already configured", + "unknown": "Unknown error occurred." + }, + "error": { + "invalid_2fa": "Invalid 2 Factor Authentication, please try again.", + "invalid_2fa_method": "Invalid 2FA Method (Verify on Phone).", + "invalid_login": "Invalid Login, please try again." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "title": "2-Factor-Authentication" + }, + "user": { + "data": { + "authorization_code": "Authorization Code (required for manual authentication)", + "email": "E-Mail Address", + "password": "Password" + }, + "title": "Google Hangouts Login" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/es-419.json b/homeassistant/components/hangouts/translations/es-419.json new file mode 100644 index 00000000000..9ff97592d91 --- /dev/null +++ b/homeassistant/components/hangouts/translations/es-419.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts ya est\u00e1 configurado", + "unknown": "Se produjo un error desconocido." + }, + "error": { + "invalid_2fa": "Autenticaci\u00f3n de 2 factores no v\u00e1lida, intente nuevamente.", + "invalid_login": "Inicio de sesi\u00f3n no v\u00e1lido, por favor, int\u00e9ntalo de nuevo." + }, + "step": { + "2fa": { + "data": { + "2fa": "Pin 2FA" + }, + "title": "Autenticaci\u00f3n de 2 factores" + }, + "user": { + "data": { + "authorization_code": "C\u00f3digo de autorizaci\u00f3n (requerido para la autenticaci\u00f3n manual)", + "email": "Direcci\u00f3n de correo electr\u00f3nico", + "password": "Contrase\u00f1a" + }, + "title": "Inicio de sesi\u00f3n de Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/es.json b/homeassistant/components/hangouts/translations/es.json new file mode 100644 index 00000000000..692df44c5bc --- /dev/null +++ b/homeassistant/components/hangouts/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts ya est\u00e1 configurado", + "unknown": "Error desconocido" + }, + "error": { + "invalid_2fa": "Autenticaci\u00f3n de 2 factores no v\u00e1lida, por favor, int\u00e9ntelo de nuevo.", + "invalid_2fa_method": "M\u00e9todo 2FA no v\u00e1lido (verificar en el tel\u00e9fono).", + "invalid_login": "Inicio de sesi\u00f3n no v\u00e1lido, por favor, int\u00e9ntalo de nuevo." + }, + "step": { + "2fa": { + "data": { + "2fa": "Pin 2FA" + }, + "description": "Vac\u00edo", + "title": "Autenticaci\u00f3n de 2 factores" + }, + "user": { + "data": { + "authorization_code": "C\u00f3digo de autorizaci\u00f3n (requerido para la autenticaci\u00f3n manual)", + "email": "Correo electr\u00f3nico", + "password": "Contrase\u00f1a" + }, + "description": "Vac\u00edo", + "title": "Iniciar sesi\u00f3n en Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/et.json b/homeassistant/components/hangouts/translations/et.json new file mode 100644 index 00000000000..b1c29f3577b --- /dev/null +++ b/homeassistant/components/hangouts/translations/et.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "invalid_login": "Vale Kasutajanimi, palun proovige uuesti." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA PIN" + }, + "title": "Kaheastmeline autentimine" + }, + "user": { + "data": { + "email": "E-posti aadress", + "password": "Salas\u00f5na" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/fr.json b/homeassistant/components/hangouts/translations/fr.json new file mode 100644 index 00000000000..2e8bec54c34 --- /dev/null +++ b/homeassistant/components/hangouts/translations/fr.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts est d\u00e9j\u00e0 configur\u00e9", + "unknown": "Une erreur inconnue s'est produite" + }, + "error": { + "invalid_2fa": "Authentification \u00e0 2 facteurs invalide, veuillez r\u00e9essayer.", + "invalid_2fa_method": "M\u00e9thode 2FA non valide (v\u00e9rifiez sur le t\u00e9l\u00e9phone).", + "invalid_login": "Login invalide, veuillez r\u00e9essayer." + }, + "step": { + "2fa": { + "data": { + "2fa": "Code PIN d'authentification \u00e0 2 facteurs" + }, + "description": "Vide", + "title": "Authentification \u00e0 2 facteurs" + }, + "user": { + "data": { + "authorization_code": "Code d'autorisation (requis pour l'authentification manuelle)", + "email": "Adresse e-mail", + "password": "Mot de passe" + }, + "description": "Vide", + "title": "Connexion \u00e0 Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/he.json b/homeassistant/components/hangouts/translations/he.json new file mode 100644 index 00000000000..c3863a860f4 --- /dev/null +++ b/homeassistant/components/hangouts/translations/he.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", + "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." + }, + "error": { + "invalid_2fa": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05d1\u05d1\u05e7\u05e9\u05d4 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", + "invalid_2fa_method": "\u05d3\u05e8\u05da \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05ea (\u05d0\u05de\u05ea \u05d1\u05d8\u05dc\u05e4\u05d5\u05df).", + "invalid_login": "\u05db\u05e0\u05d9\u05e1\u05d4 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05ea, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1." + }, + "step": { + "2fa": { + "data": { + "2fa": "\u05e7\u05d5\u05d3 \u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9" + }, + "title": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9" + }, + "user": { + "data": { + "email": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\"\u05dc", + "password": "\u05e1\u05d9\u05e1\u05de\u05d4" + }, + "title": "\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05dc- Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/hu.json b/homeassistant/components/hangouts/translations/hu.json new file mode 100644 index 00000000000..ea7fd49a548 --- /dev/null +++ b/homeassistant/components/hangouts/translations/hu.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "A Google Hangouts m\u00e1r konfigur\u00e1lva van", + "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt." + }, + "error": { + "invalid_2fa": "\u00c9rv\u00e9nytelen K\u00e9tfaktoros hiteles\u00edt\u00e9s, pr\u00f3b\u00e1ld \u00fajra.", + "invalid_2fa_method": "\u00c9rv\u00e9nytelen 2FA M\u00f3dszer (Ellen\u0151rz\u00e9s a Telefonon).", + "invalid_login": "\u00c9rv\u00e9nytelen bejelentkez\u00e9s, pr\u00f3b\u00e1ld \u00fajra." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "description": "\u00dcres", + "title": "K\u00e9tfaktoros Hiteles\u00edt\u00e9s" + }, + "user": { + "data": { + "email": "E-Mail C\u00edm", + "password": "Jelsz\u00f3" + }, + "description": "\u00dcres", + "title": "Google Hangouts Bejelentkez\u00e9s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/id.json b/homeassistant/components/hangouts/translations/id.json new file mode 100644 index 00000000000..1bcfeaeba50 --- /dev/null +++ b/homeassistant/components/hangouts/translations/id.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts sudah dikonfigurasikan", + "unknown": "Kesalahan tidak dikenal terjadi." + }, + "error": { + "invalid_2fa": "Autentikasi 2 Faktor Tidak Valid, silakan coba lagi.", + "invalid_2fa_method": "Metode 2FA Tidak Sah (Verifikasi di Ponsel).", + "invalid_login": "Login tidak valid, silahkan coba lagi." + }, + "step": { + "2fa": { + "data": { + "2fa": "Pin 2FA" + }, + "description": "Kosong", + "title": "2-Faktor-Otentikasi" + }, + "user": { + "data": { + "email": "Alamat email", + "password": "Kata sandi" + }, + "description": "Kosong", + "title": "Google Hangouts Login" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/it.json b/homeassistant/components/hangouts/translations/it.json new file mode 100644 index 00000000000..094280da4ef --- /dev/null +++ b/homeassistant/components/hangouts/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u00e8 gi\u00e0 configurato", + "unknown": "Si \u00e8 verificato un errore sconosciuto." + }, + "error": { + "invalid_2fa": "Autenticazione a 2 fattori non valida, riprovare.", + "invalid_2fa_method": "Metodo 2FA non valido (verifica sul telefono).", + "invalid_login": "Accesso non valido, si prega di riprovare." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "description": "Vuoto", + "title": "Autenticazione a due fattori" + }, + "user": { + "data": { + "authorization_code": "Codice di autorizzazione (necessario per l'autenticazione manuale)", + "email": "Indirizzo E-mail", + "password": "Password" + }, + "description": "Vuoto", + "title": "Accesso a Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/ko.json b/homeassistant/components/hangouts/translations/ko.json new file mode 100644 index 00000000000..4a5af0779a2 --- /dev/null +++ b/homeassistant/components/hangouts/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google \ud589\uc544\uc6c3\uc740 \uc774\ubbf8 \uc124\uc815\ub41c \uc0c1\ud0dc\uc785\ub2c8\ub2e4", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "invalid_2fa": "2\ub2e8\uacc4 \uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_2fa_method": "2\ub2e8\uacc4 \uc778\uc99d \ubc29\ubc95\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. (\uc804\ud654\uae30\uc5d0\uc11c \ud655\uc778)", + "invalid_login": "\uc798\ubabb\ub41c \ub85c\uadf8\uc778\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "step": { + "2fa": { + "data": { + "2fa": "2\ub2e8\uacc4 \uc778\uc99d PIN" + }, + "description": "\uc8c4\uc1a1\ud569\ub2c8\ub2e4. \uad00\ub828 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0 \ubc18\uc601\ub420 \uc608\uc815\uc774\ub2c8 \uc870\uae08\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694.", + "title": "2\ub2e8\uacc4 \uc778\uc99d" + }, + "user": { + "data": { + "authorization_code": "\uc778\uc99d \ucf54\ub4dc (\uc218\ub3d9 \uc778\uc99d\uc5d0 \ud544\uc694)", + "email": "\uc774\uba54\uc77c \uc8fc\uc18c", + "password": "\ube44\ubc00\ubc88\ud638" + }, + "description": "\uc8c4\uc1a1\ud569\ub2c8\ub2e4. \uad00\ub828 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0 \ubc18\uc601\ub420 \uc608\uc815\uc774\ub2c8 \uc870\uae08\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694.", + "title": "Google \ud589\uc544\uc6c3 \ub85c\uadf8\uc778" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/lb.json b/homeassistant/components/hangouts/translations/lb.json new file mode 100644 index 00000000000..fa146adde23 --- /dev/null +++ b/homeassistant/components/hangouts/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts ass scho konfigur\u00e9iert", + "unknown": "Onbekannten Feeler opgetrueden" + }, + "error": { + "invalid_2fa": "Ong\u00eblteg 2-Faktor Authentifikatioun, prob\u00e9iert w.e.g. nach emol.", + "invalid_2fa_method": "Ong\u00eblteg 2FA Methode (Iwwerpr\u00e9ift et um Telefon)", + "invalid_login": "Ong\u00ebltege Login, prob\u00e9iert w.e.g. nach emol." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "description": "Eidel", + "title": "2-Faktor-Authentifikatioun" + }, + "user": { + "data": { + "authorization_code": "Autorisatioun's Code (n\u00e9ideg fir eng manuell Authentifikatioun)", + "email": "E-Mail Adress", + "password": "Passwuert" + }, + "description": "Eidel", + "title": "Google Hangouts Login" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/nl.json b/homeassistant/components/hangouts/translations/nl.json new file mode 100644 index 00000000000..fac77660251 --- /dev/null +++ b/homeassistant/components/hangouts/translations/nl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts is al geconfigureerd", + "unknown": "Onbekende fout opgetreden." + }, + "error": { + "invalid_2fa": "Ongeldige twee-factor-authenticatie, probeer het opnieuw.", + "invalid_2fa_method": "Ongeldige 2FA-methode (verifi\u00ebren op telefoon).", + "invalid_login": "Ongeldige aanmelding, probeer het opnieuw." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA pin" + }, + "description": "Leeg", + "title": "Twee-factor-authenticatie" + }, + "user": { + "data": { + "authorization_code": "Autorisatiecode (vereist voor handmatige authenticatie)", + "email": "E-mailadres", + "password": "Wachtwoord" + }, + "description": "Leeg", + "title": "Google Hangouts inlog" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/nn.json b/homeassistant/components/hangouts/translations/nn.json new file mode 100644 index 00000000000..883a53441af --- /dev/null +++ b/homeassistant/components/hangouts/translations/nn.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts er allereie konfigurert", + "unknown": "Det hende ein ukjent feil" + }, + "error": { + "invalid_2fa": "Ugyldig to-faktor-autentisering. Ver vennleg og pr\u00f8v igjen.", + "invalid_2fa_method": "Ugyldig 2FA-metode (godkjenn p\u00e5 telefonen).", + "invalid_login": "Ugyldig innlogging. Pr\u00f8v igjen." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA PIN" + }, + "title": "To-faktor-autentisering" + }, + "user": { + "data": { + "email": "Epostadresse", + "password": "Passord" + }, + "title": "Google Hangouts Login" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/no.json b/homeassistant/components/hangouts/translations/no.json new file mode 100644 index 00000000000..9402687b8ff --- /dev/null +++ b/homeassistant/components/hangouts/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts er allerede konfigurert", + "unknown": "Ukjent feil oppstod." + }, + "error": { + "invalid_2fa": "Ugyldig tofaktorautentisering, vennligst pr\u00f8v igjen.", + "invalid_2fa_method": "Ugyldig 2FA-metode (Bekreft p\u00e5 telefon).", + "invalid_login": "Ugyldig innlogging, vennligst pr\u00f8v igjen." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "description": "Tom", + "title": "Tofaktorautentisering" + }, + "user": { + "data": { + "authorization_code": "Autorisasjonskode (kreves for manuell godkjenning)", + "email": "E-postadresse", + "password": "Passord" + }, + "description": "Tom", + "title": "Google Hangouts p\u00e5logging" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/pl.json b/homeassistant/components/hangouts/translations/pl.json new file mode 100644 index 00000000000..20b17ec37b7 --- /dev/null +++ b/homeassistant/components/hangouts/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts jest ju\u017c skonfigurowany.", + "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d." + }, + "error": { + "invalid_2fa": "Nieprawid\u0142owe uwierzytelnienie dwusk\u0142adnikowe, spr\u00f3buj ponownie.", + "invalid_2fa_method": "Nieprawid\u0142owa metoda uwierzytelniania dwusk\u0142adnikowego (u\u017cyj weryfikacji przez telefon).", + "invalid_login": "Nieprawid\u0142owy login, spr\u00f3buj ponownie." + }, + "step": { + "2fa": { + "data": { + "2fa": "PIN" + }, + "description": "Pusty", + "title": "Uwierzytelnianie dwusk\u0142adnikowe" + }, + "user": { + "data": { + "authorization_code": "Kod autoryzacji (wymagany do r\u0119cznego uwierzytelnienia)", + "email": "Adres e-mail", + "password": "Has\u0142o" + }, + "description": "Pusty", + "title": "Logowanie do Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/pt-BR.json b/homeassistant/components/hangouts/translations/pt-BR.json new file mode 100644 index 00000000000..3f8fd23b07c --- /dev/null +++ b/homeassistant/components/hangouts/translations/pt-BR.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Hangouts do Google j\u00e1 est\u00e1 configurado.", + "unknown": "Ocorreu um erro desconhecido." + }, + "error": { + "invalid_2fa": "Autentica\u00e7\u00e3o de 2 fatores inv\u00e1lida, por favor, tente novamente.", + "invalid_2fa_method": "M\u00e9todo 2FA inv\u00e1lido (verificar no telefone).", + "invalid_login": "Login inv\u00e1lido, por favor, tente novamente." + }, + "step": { + "2fa": { + "data": { + "2fa": "Pin 2FA" + }, + "description": "Vazio", + "title": "Autentica\u00e7\u00e3o de 2 Fatores" + }, + "user": { + "data": { + "authorization_code": "C\u00f3digo de Autoriza\u00e7\u00e3o (requerido para autentica\u00e7\u00e3o manual)", + "email": "Endere\u00e7o de e-mail", + "password": "Senha" + }, + "description": "Vazio", + "title": "Login do Hangouts do Google" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/pt.json b/homeassistant/components/hangouts/translations/pt.json new file mode 100644 index 00000000000..d85caeb2bbb --- /dev/null +++ b/homeassistant/components/hangouts/translations/pt.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts j\u00e1 est\u00e1 configurado", + "unknown": "Ocorreu um erro desconhecido." + }, + "error": { + "invalid_2fa": "Autentica\u00e7\u00e3o por 2 fatores inv\u00e1lida, por favor, tente novamente.", + "invalid_2fa_method": "M\u00e9todo 2FA inv\u00e1lido (verificar no telefone).", + "invalid_login": "Login inv\u00e1lido, por favor, tente novamente." + }, + "step": { + "2fa": { + "data": { + "2fa": "Pin 2FA" + }, + "description": "Vazio", + "title": "Autentica\u00e7\u00e3o de 2 Fatores" + }, + "user": { + "data": { + "email": "Endere\u00e7o de e-mail", + "password": "Palavra-passe" + }, + "description": "Vazio", + "title": "Login Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/ro.json b/homeassistant/components/hangouts/translations/ro.json new file mode 100644 index 00000000000..682d561929c --- /dev/null +++ b/homeassistant/components/hangouts/translations/ro.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts este deja configurat", + "unknown": "Sa produs o eroare necunoscut\u0103." + }, + "error": { + "invalid_2fa_method": "Metoda 2FA invalid\u0103 (Verifica\u021bi pe telefon).", + "invalid_login": "Conectare invalid\u0103, \u00eencerca\u021bi din nou." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + } + }, + "user": { + "data": { + "email": "Adresa de email", + "password": "Parol\u0103" + }, + "description": "Gol", + "title": "Conectare Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/ru.json b/homeassistant/components/hangouts/translations/ru.json new file mode 100644 index 00000000000..580c858d15f --- /dev/null +++ b/homeassistant/components/hangouts/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "error": { + "invalid_2fa": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", + "invalid_2fa_method": "\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \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\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435).", + "invalid_login": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430." + }, + "step": { + "2fa": { + "data": { + "2fa": "\u041f\u0438\u043d-\u043a\u043e\u0434 \u0434\u043b\u044f \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" + }, + "description": "\u043f\u0443\u0441\u0442\u043e", + "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" + }, + "user": { + "data": { + "authorization_code": "\u041a\u043e\u0434 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438)", + "email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c" + }, + "description": "\u043f\u0443\u0441\u0442\u043e", + "title": "Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/sl.json b/homeassistant/components/hangouts/translations/sl.json new file mode 100644 index 00000000000..853dfa1487a --- /dev/null +++ b/homeassistant/components/hangouts/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts je \u017ee konfiguriran", + "unknown": "Pri\u0161lo je do neznane napake" + }, + "error": { + "invalid_2fa": "Neveljavna 2FA avtorizacija, prosimo, poskusite znova.", + "invalid_2fa_method": "Neveljavna 2FA Metoda (Preverite na Telefonu).", + "invalid_login": "Neveljavna Prijava, prosimo, poskusite znova." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "description": "prazno", + "title": "Dvofaktorska avtorizacija" + }, + "user": { + "data": { + "authorization_code": "Koda pooblastila (potrebna za ro\u010dno overjanje)", + "email": "E-po\u0161tni naslov", + "password": "Geslo" + }, + "description": "prazno", + "title": "Prijava za Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/sv.json b/homeassistant/components/hangouts/translations/sv.json new file mode 100644 index 00000000000..f9e5ec14c54 --- /dev/null +++ b/homeassistant/components/hangouts/translations/sv.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u00e4r redan inst\u00e4llt", + "unknown": "Ett ok\u00e4nt fel intr\u00e4ffade" + }, + "error": { + "invalid_2fa": "Ogiltig 2FA autentisering, f\u00f6rs\u00f6k igen.", + "invalid_2fa_method": "Ogiltig 2FA-metod (Verifiera med telefon).", + "invalid_login": "Ogiltig inloggning, f\u00f6rs\u00f6k igen." + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pinkod" + }, + "description": "Missing english translation", + "title": "Tv\u00e5faktorsautentisering" + }, + "user": { + "data": { + "authorization_code": "Auktoriseringskod (kr\u00e4vs vid manuell verifiering)", + "email": "E-postadress", + "password": "L\u00f6senord" + }, + "description": "Missing english translation", + "title": "Google Hangouts-inloggning" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/th.json b/homeassistant/components/hangouts/translations/th.json similarity index 100% rename from homeassistant/components/hangouts/.translations/th.json rename to homeassistant/components/hangouts/translations/th.json diff --git a/homeassistant/components/hangouts/.translations/vi.json b/homeassistant/components/hangouts/translations/vi.json similarity index 100% rename from homeassistant/components/hangouts/.translations/vi.json rename to homeassistant/components/hangouts/translations/vi.json diff --git a/homeassistant/components/hangouts/translations/zh-Hans.json b/homeassistant/components/hangouts/translations/zh-Hans.json new file mode 100644 index 00000000000..46d1de99c73 --- /dev/null +++ b/homeassistant/components/hangouts/translations/zh-Hans.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u5df2\u914d\u7f6e\u5b8c\u6210", + "unknown": "\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002" + }, + "error": { + "invalid_2fa": "\u53cc\u91cd\u8ba4\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\u3002", + "invalid_2fa_method": "\u65e0\u6548\u7684\u53cc\u91cd\u8ba4\u8bc1\u65b9\u6cd5\uff08\u7535\u8bdd\u9a8c\u8bc1\uff09\u3002", + "invalid_login": "\u767b\u9646\u5931\u8d25\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002" + }, + "step": { + "2fa": { + "data": { + "2fa": "2FA Pin" + }, + "description": "\u65e0", + "title": "\u53cc\u91cd\u8ba4\u8bc1" + }, + "user": { + "data": { + "email": "\u7535\u5b50\u90ae\u4ef6\u5730\u5740", + "password": "\u5bc6\u7801" + }, + "description": "\u65e0", + "title": "\u767b\u5f55 Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/translations/zh-Hant.json b/homeassistant/components/hangouts/translations/zh-Hant.json new file mode 100644 index 00000000000..1619eaddb63 --- /dev/null +++ b/homeassistant/components/hangouts/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u5df2\u7d93\u8a2d\u5b9a", + "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "error": { + "invalid_2fa": "\u96d9\u91cd\u9a57\u8b49\u7121\u6548\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "invalid_2fa_method": "\u8a8d\u8b49\u65b9\u5f0f\u7121\u6548\uff08\u65bc\u96fb\u8a71\u4e0a\u9a57\u8b49\uff09\u3002", + "invalid_login": "\u767b\u5165\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "2fa": { + "data": { + "2fa": "\u8a8d\u8b49\u78bc" + }, + "description": "\u7a7a\u767d", + "title": "\u96d9\u91cd\u9a57\u8b49" + }, + "user": { + "data": { + "authorization_code": "\u9a57\u8b49\u78bc\uff08\u624b\u52d5\u9a57\u8b49\u5fc5\u9808\uff09", + "email": "\u96fb\u5b50\u90f5\u4ef6", + "password": "\u5bc6\u78bc" + }, + "description": "\u7a7a\u767d", + "title": "\u767b\u5165 Google Hangouts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harman_kardon_avr/manifest.json b/homeassistant/components/harman_kardon_avr/manifest.json index 060d78fbdee..906b8ab2662 100644 --- a/homeassistant/components/harman_kardon_avr/manifest.json +++ b/homeassistant/components/harman_kardon_avr/manifest.json @@ -3,6 +3,5 @@ "name": "Harman Kardon AVR", "documentation": "https://www.home-assistant.io/integrations/harman_kardon_avr", "requirements": ["hkavr==0.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/harmony/.translations/ca.json b/homeassistant/components/harmony/.translations/ca.json deleted file mode 100644 index f4e77752936..00000000000 --- a/homeassistant/components/harmony/.translations/ca.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "unknown": "Error inesperat" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Vols configurar {name} ({host})?", - "title": "Configuraci\u00f3 de Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP", - "name": "Nom del Hub" - }, - "title": "Configuraci\u00f3 de Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "Activitat predeterminada a executar quan no se n\u2019especifica cap.", - "delay_secs": "Retard entre l\u2019enviament d\u2019ordres." - }, - "description": "Ajusta les opcions de Harmony Hub" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/de.json b/homeassistant/components/harmony/.translations/de.json deleted file mode 100644 index 70a5c8707ce..00000000000 --- a/homeassistant/components/harmony/.translations/de.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "unknown": "Unerwarteter Fehler" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "M\u00f6chten Sie {name} ({host}) einrichten?", - "title": "Richten Sie den Logitech Harmony Hub ein" - }, - "user": { - "data": { - "host": "Hostname oder IP-Adresse", - "name": "Hub-Name" - }, - "title": "Richten Sie den Logitech Harmony Hub ein" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "Die Standardaktivit\u00e4t, die ausgef\u00fchrt werden soll, wenn keine angegeben ist.", - "delay_secs": "Die Verz\u00f6gerung zwischen dem Senden von Befehlen." - }, - "description": "Passen Sie die Harmony Hub-Optionen an" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/en.json b/homeassistant/components/harmony/.translations/en.json deleted file mode 100644 index 00054dbc51e..00000000000 --- a/homeassistant/components/harmony/.translations/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "unknown": "Unexpected error" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Do you want to setup {name} ({host})?", - "title": "Setup Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Hostname or IP Address", - "name": "Hub Name" - }, - "title": "Setup Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "The default activity to execute when none is specified.", - "delay_secs": "The delay between sending commands." - }, - "description": "Adjust Harmony Hub Options" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/es.json b/homeassistant/components/harmony/.translations/es.json deleted file mode 100644 index 300b2e4cb8d..00000000000 --- a/homeassistant/components/harmony/.translations/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo", - "unknown": "Error inesperado" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "\u00bfQuiere configurar {name} ({host})?", - "title": "Configurar Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Nombre del host o direcci\u00f3n IP", - "name": "Nombre del concentrador" - }, - "title": "Configurar Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "La actividad por defecto a ejecutar cuando no se especifica ninguna.", - "delay_secs": "El retraso entre el env\u00edo de comandos." - }, - "description": "Ajustar las opciones de Harmony Hub" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/fr.json b/homeassistant/components/harmony/.translations/fr.json deleted file mode 100644 index 60848bea459..00000000000 --- a/homeassistant/components/harmony/.translations/fr.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Voulez-vous configurer {name} ( {host} ) ?", - "title": "Configuration de Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Nom d'h\u00f4te ou adresse IP", - "name": "Nom du Hub" - }, - "title": "Configuration de Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "Activit\u00e9 par d\u00e9faut \u00e0 ex\u00e9cuter lorsqu'aucune n'est sp\u00e9cifi\u00e9e.", - "delay_secs": "Le d\u00e9lai entre l'envoi des commandes." - }, - "description": "Ajuster les options du hub Harmony" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/it.json b/homeassistant/components/harmony/.translations/it.json deleted file mode 100644 index 4b88151f3d6..00000000000 --- a/homeassistant/components/harmony/.translations/it.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "unknown": "Errore imprevisto" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Vuoi impostare {name} ({host})?", - "title": "Impostazione di Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Nome dell'host o indirizzo IP", - "name": "Nome Hub" - }, - "title": "Configurare Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "L'attivit\u00e0 predefinita da eseguire quando nessuna \u00e8 specificata.", - "delay_secs": "Il ritardo tra l'invio dei comandi." - }, - "description": "Regolare le opzioni di Harmony Hub" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/ko.json b/homeassistant/components/harmony/.translations/ko.json deleted file mode 100644 index 392c06390aa..00000000000 --- a/homeassistant/components/harmony/.translations/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "{name} ({host}) \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Logitech Harmony Hub \uc124\uc815" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", - "name": "Hub \uc774\ub984" - }, - "title": "Logitech Harmony Hub \uc124\uc815" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "\uc9c0\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \uc2e4\ud589\ud560 \uae30\ubcf8 \uc561\uc158.", - "delay_secs": "\uba85\ub839 \uc804\uc1a1 \uc0ac\uc774\uc758 \uc9c0\uc5f0 \uc2dc\uac04." - }, - "description": "Harmony Hub \uc635\uc158 \uc870\uc815" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/lb.json b/homeassistant/components/harmony/.translations/lb.json deleted file mode 100644 index 6cd2ab7d7bf..00000000000 --- a/homeassistant/components/harmony/.translations/lb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "unknown": "Onerwaarte Feeler" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Soll {name} ({host}) konfigur\u00e9iert ginn?", - "title": "Logitech Harmony Hub ariichten" - }, - "user": { - "data": { - "host": "Host Numm oder IP Adresse", - "name": "Numm vum Hub" - }, - "title": "Logitech Harmony Hub ariichten" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "Standard Aktivit\u00e9it d\u00e9i ausgef\u00e9iert g\u00ebtt wann keng uginn ass.", - "delay_secs": "Delai zw\u00ebschen dem versch\u00e9cken vun Kommandoen" - }, - "description": "Harmony Hub Optioune ajust\u00e9ieren" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/no.json b/homeassistant/components/harmony/.translations/no.json deleted file mode 100644 index 4dd86965bfd..00000000000 --- a/homeassistant/components/harmony/.translations/no.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "unknown": "Uventet feil" - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Vil du konfigurere {name} ({host})?", - "title": "Oppsett Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Vertsnavn eller IP-adresse", - "name": "Navn p\u00e5 hub" - }, - "title": "Oppsett Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "Standardaktiviteten som skal utf\u00f8res n\u00e5r ingen er angitt.", - "delay_secs": "Forsinkelsen mellom sending av kommandoer." - }, - "description": "Juster alternativene for harmonihub" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/pl.json b/homeassistant/components/harmony/.translations/pl.json deleted file mode 100644 index e5ace2e0d1d..00000000000 --- a/homeassistant/components/harmony/.translations/pl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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." - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "Czy chcesz skonfigurowa\u0107 {name} ({host})?", - "title": "Konfiguracja Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "Nazwa hosta lub adres IP", - "name": "Nazwa huba" - }, - "title": "Konfiguracja Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "Domy\u015blna aktywno\u015b\u0107 do wykonania, gdy \u017cadnej nie okre\u015blono.", - "delay_secs": "Op\u00f3\u017anienie mi\u0119dzy wysy\u0142aniem polece\u0144." - }, - "description": "Dostosuj opcje huba Harmony" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/ru.json b/homeassistant/components/harmony/.translations/ru.json deleted file mode 100644 index b89296616b3..00000000000 --- a/homeassistant/components/harmony/.translations/ru.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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." - }, - "flow_title": "Logitech Harmony Hub {name}", - "step": { - "link": { - "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name} ({host})?", - "title": "Logitech Harmony Hub" - }, - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "title": "Logitech Harmony Hub" - } - }, - "title": "Logitech Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430.", - "delay_secs": "\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434." - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 Harmony Hub" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/.translations/zh-Hant.json b/homeassistant/components/harmony/.translations/zh-Hant.json deleted file mode 100644 index 9e523c67290..00000000000 --- a/homeassistant/components/harmony/.translations/zh-Hant.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "flow_title": "\u7f85\u6280 Harmony Hub {name}", - "step": { - "link": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name} ({host})\uff1f", - "title": "\u8a2d\u5b9a\u7f85\u6280 Harmony Hub" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", - "name": "Hub \u540d\u7a31" - }, - "title": "\u8a2d\u5b9a\u7f85\u6280 Harmony Hub" - } - }, - "title": "\u7f85\u6280 Harmony Hub" - }, - "options": { - "step": { - "init": { - "data": { - "activity": "\u7576\u672a\u6307\u5b9a\u6642\u9810\u8a2d\u57f7\u884c\u6d3b\u52d5\u3002", - "delay_secs": "\u50b3\u9001\u547d\u4ee4\u9593\u9694\u79d2\u6578\u3002" - }, - "description": "\u8abf\u6574 Harmony Hub \u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/harmony/manifest.json b/homeassistant/components/harmony/manifest.json index 870e3f15044..154fd211aa8 100644 --- a/homeassistant/components/harmony/manifest.json +++ b/homeassistant/components/harmony/manifest.json @@ -3,8 +3,7 @@ "name": "Logitech Harmony Hub", "documentation": "https://www.home-assistant.io/integrations/harmony", "requirements": ["aioharmony==0.1.13"], - "dependencies": [], - "codeowners": ["@ehendrix23","@bramkragten","@bdraco"], + "codeowners": ["@ehendrix23", "@bramkragten", "@bdraco"], "ssdp": [ { "manufacturer": "Logitech", diff --git a/homeassistant/components/harmony/remote.py b/homeassistant/components/harmony/remote.py index 1d0ed66415c..147ee75a863 100644 --- a/homeassistant/components/harmony/remote.py +++ b/homeassistant/components/harmony/remote.py @@ -25,6 +25,7 @@ from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.const import ATTR_ENTITY_ID, CONF_HOST, CONF_NAME from homeassistant.core import HomeAssistant from homeassistant.exceptions import PlatformNotReady +from homeassistant.helpers import entity_platform import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -45,6 +46,9 @@ from .util import ( _LOGGER = logging.getLogger(__name__) +# We want to fire remote commands right away +PARALLEL_UPDATES = 0 + ATTR_CHANNEL = "channel" ATTR_CURRENT_ACTIVITY = "current_activity" @@ -110,44 +114,14 @@ async def async_setup_entry( _LOGGER.debug("Harmony Remote: %s", device) async_add_entities([device]) - register_services(hass) + platform = entity_platform.current_platform.get() -def register_services(hass): - """Register all services for harmony devices.""" - - async def _apply_service(service, service_func, *service_func_args): - """Handle services to apply.""" - entity_ids = service.data.get("entity_id") - - want_devices = [ - hass.data[DOMAIN][config_entry_id] for config_entry_id in hass.data[DOMAIN] - ] - - if entity_ids: - want_devices = [ - device for device in want_devices if device.entity_id in entity_ids - ] - - for device in want_devices: - await service_func(device, *service_func_args) - - async def _sync_service(service): - await _apply_service(service, HarmonyRemote.sync) - - async def _change_channel_service(service): - channel = service.data.get(ATTR_CHANNEL) - await _apply_service(service, HarmonyRemote.change_channel, channel) - - hass.services.async_register( - DOMAIN, SERVICE_SYNC, _sync_service, schema=HARMONY_SYNC_SCHEMA + platform.async_register_entity_service( + SERVICE_SYNC, HARMONY_SYNC_SCHEMA, "sync", ) - - hass.services.async_register( - DOMAIN, - SERVICE_CHANGE_CHANNEL, - _change_channel_service, - schema=HARMONY_CHANGE_CHANNEL_SCHEMA, + platform.async_register_entity_service( + SERVICE_CHANGE_CHANNEL, HARMONY_CHANGE_CHANNEL_SCHEMA, "change_channel" ) @@ -166,7 +140,6 @@ class HarmonyRemote(remote.RemoteDevice): self.delay_secs = delay_secs self._available = False self._unique_id = unique_id - self._undo_dispatch_subscription = None @property def activity_names(self): @@ -181,11 +154,6 @@ class HarmonyRemote(remote.RemoteDevice): return activities - async def async_will_remove_from_hass(self): - """Undo subscription.""" - if self._undo_dispatch_subscription: - self._undo_dispatch_subscription() - async def _async_update_options(self, data): """Change options when the options flow does.""" if ATTR_DELAY_SECS in data: @@ -205,10 +173,12 @@ class HarmonyRemote(remote.RemoteDevice): disconnect=self.got_disconnected, ) - self._undo_dispatch_subscription = async_dispatcher_connect( - self.hass, - f"{HARMONY_OPTIONS_UPDATE}-{self.unique_id}", - self._async_update_options, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + f"{HARMONY_OPTIONS_UPDATE}-{self.unique_id}", + self._async_update_options, + ) ) # Store Harmony HUB config, this will also update our current @@ -289,7 +259,7 @@ class HarmonyRemote(remote.RemoteDevice): self._current_activity = activity_name self._state = bool(activity_id != -1) self._available = True - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def new_config(self, _=None): """Call for updating the current activity.""" @@ -314,7 +284,7 @@ class HarmonyRemote(remote.RemoteDevice): if not self._available: # Still disconnected. Let the state engine know. - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self, **kwargs): """Start an activity from the Harmony device.""" @@ -331,7 +301,7 @@ class HarmonyRemote(remote.RemoteDevice): if activity_id is None: _LOGGER.debug("%s: Find activity ID based on name", self.name) - activity_id = self._client.get_activity_id(str(activity).strip()) + activity_id = self._client.get_activity_id(str(activity)) if activity_id is None: _LOGGER.error("%s: Activity %s is invalid", self.name, activity) @@ -444,7 +414,7 @@ class HarmonyRemote(remote.RemoteDevice): try: with open(self._config_path, "w+", encoding="utf-8") as file_out: json.dump(self._client.json_config, file_out, sort_keys=True, indent=4) - except IOError as exc: + except OSError as exc: _LOGGER.error( "%s: Unable to write HUB configuration to %s: %s", self.name, diff --git a/homeassistant/components/harmony/services.yaml b/homeassistant/components/harmony/services.yaml index 1b9ae225c7f..f20f0494a5f 100644 --- a/homeassistant/components/harmony/services.yaml +++ b/homeassistant/components/harmony/services.yaml @@ -3,14 +3,14 @@ sync: fields: entity_id: description: Name(s) of entities to sync. - example: 'remote.family_room' + example: "remote.family_room" change_channel: description: Sends change channel command to the Harmony HUB fields: entity_id: description: Name(s) of Harmony remote entities to send change channel command to - example: 'remote.family_room' + example: "remote.family_room" channel: description: Channel number to change to - example: '200' \ No newline at end of file + example: "200" diff --git a/homeassistant/components/harmony/strings.json b/homeassistant/components/harmony/strings.json index 8af5a5ada1a..e093d02051d 100644 --- a/homeassistant/components/harmony/strings.json +++ b/homeassistant/components/harmony/strings.json @@ -1,14 +1,10 @@ { "config": { - "title": "Logitech Harmony Hub", "flow_title": "Logitech Harmony Hub {name}", "step": { "user": { "title": "Setup Logitech Harmony Hub", - "data": { - "host": "Hostname or IP Address", - "name": "Hub Name" - } + "data": { "host": "Hostname or IP Address", "name": "Hub Name" } }, "link": { "title": "Setup Logitech Harmony Hub", @@ -19,9 +15,7 @@ "cannot_connect": "Failed to connect, please try again", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } }, "options": { "step": { diff --git a/homeassistant/components/harmony/translations/ca.json b/homeassistant/components/harmony/translations/ca.json new file mode 100644 index 00000000000..a7c520c400c --- /dev/null +++ b/homeassistant/components/harmony/translations/ca.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "unknown": "Error inesperat" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Vols configurar {name} ({host})?", + "title": "Configuraci\u00f3 de Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP", + "name": "Nom del Hub" + }, + "title": "Configuraci\u00f3 de Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Activitat predeterminada a executar quan no se n\u2019especifica cap.", + "delay_secs": "Retard entre l\u2019enviament d\u2019ordres." + }, + "description": "Ajusta les opcions de Harmony Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/de.json b/homeassistant/components/harmony/translations/de.json new file mode 100644 index 00000000000..ae640f12870 --- /dev/null +++ b/homeassistant/components/harmony/translations/de.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "M\u00f6chten Sie {name} ({host}) einrichten?", + "title": "Richten Sie den Logitech Harmony Hub ein" + }, + "user": { + "data": { + "host": "Hostname oder IP-Adresse", + "name": "Hub-Name" + }, + "title": "Richten Sie den Logitech Harmony Hub ein" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Die Standardaktivit\u00e4t, die ausgef\u00fchrt werden soll, wenn keine angegeben ist.", + "delay_secs": "Die Verz\u00f6gerung zwischen dem Senden von Befehlen." + }, + "description": "Passen Sie die Harmony Hub-Optionen an" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/en.json b/homeassistant/components/harmony/translations/en.json new file mode 100644 index 00000000000..17964db6824 --- /dev/null +++ b/homeassistant/components/harmony/translations/en.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Do you want to setup {name} ({host})?", + "title": "Setup Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Hostname or IP Address", + "name": "Hub Name" + }, + "title": "Setup Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "The default activity to execute when none is specified.", + "delay_secs": "The delay between sending commands." + }, + "description": "Adjust Harmony Hub Options" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/es.json b/homeassistant/components/harmony/translations/es.json new file mode 100644 index 00000000000..a5d96ec7ef3 --- /dev/null +++ b/homeassistant/components/harmony/translations/es.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo", + "unknown": "Error inesperado" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "\u00bfQuieres configurar {name} ({host})?", + "title": "Configurar Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Nombre del host o direcci\u00f3n IP", + "name": "Nombre del concentrador" + }, + "title": "Configurar Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "La actividad por defecto a ejecutar cuando no se especifica ninguna.", + "delay_secs": "El retraso entre el env\u00edo de comandos." + }, + "description": "Ajustar las opciones de Harmony Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/fr.json b/homeassistant/components/harmony/translations/fr.json new file mode 100644 index 00000000000..4343ec3139d --- /dev/null +++ b/homeassistant/components/harmony/translations/fr.json @@ -0,0 +1,36 @@ +{ + "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" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Voulez-vous configurer {name} ( {host} ) ?", + "title": "Configuration de Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Nom d'h\u00f4te ou adresse IP", + "name": "Nom du Hub" + }, + "title": "Configuration de Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Activit\u00e9 par d\u00e9faut \u00e0 ex\u00e9cuter lorsqu'aucune n'est sp\u00e9cifi\u00e9e.", + "delay_secs": "Le d\u00e9lai entre l'envoi des commandes." + }, + "description": "Ajuster les options du hub Harmony" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/it.json b/homeassistant/components/harmony/translations/it.json new file mode 100644 index 00000000000..8095fa05156 --- /dev/null +++ b/homeassistant/components/harmony/translations/it.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Vuoi impostare {name} ({host})?", + "title": "Impostazione di Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Nome dell'host o indirizzo IP", + "name": "Nome Hub" + }, + "title": "Configurare Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "L'attivit\u00e0 predefinita da eseguire quando nessuna \u00e8 specificata.", + "delay_secs": "Il ritardo tra l'invio dei comandi." + }, + "description": "Regolare le opzioni di Harmony Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/ko.json b/homeassistant/components/harmony/translations/ko.json new file mode 100644 index 00000000000..3272c8941c7 --- /dev/null +++ b/homeassistant/components/harmony/translations/ko.json @@ -0,0 +1,36 @@ +{ + "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" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "{name} ({host}) \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Logitech Harmony Hub \uc124\uc815" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", + "name": "Hub \uc774\ub984" + }, + "title": "Logitech Harmony Hub \uc124\uc815" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "\uc9c0\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \uc2e4\ud589\ud560 \uae30\ubcf8 \uc561\uc158.", + "delay_secs": "\uba85\ub839 \uc804\uc1a1 \uc0ac\uc774\uc758 \uc9c0\uc5f0 \uc2dc\uac04." + }, + "description": "Harmony Hub \uc635\uc158 \uc870\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/lb.json b/homeassistant/components/harmony/translations/lb.json new file mode 100644 index 00000000000..abcc0948835 --- /dev/null +++ b/homeassistant/components/harmony/translations/lb.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "unknown": "Onerwaarte Feeler" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Soll {name} ({host}) konfigur\u00e9iert ginn?", + "title": "Logitech Harmony Hub ariichten" + }, + "user": { + "data": { + "host": "Host Numm oder IP Adresse", + "name": "Numm vum Hub" + }, + "title": "Logitech Harmony Hub ariichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Standard Aktivit\u00e9it d\u00e9i ausgef\u00e9iert g\u00ebtt wann keng uginn ass.", + "delay_secs": "Delai zw\u00ebschen dem versch\u00e9cken vun Kommandoen" + }, + "description": "Harmony Hub Optioune ajust\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/nl.json b/homeassistant/components/harmony/translations/nl.json new file mode 100644 index 00000000000..a896cab0877 --- /dev/null +++ b/homeassistant/components/harmony/translations/nl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd" + }, + "error": { + "cannot_connect": "Verbinding mislukt, probeer het opnieuw" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Wil je {name} ({host}) instellen?", + "title": "Logitech Harmony Hub instellen" + }, + "user": { + "data": { + "host": "Hostnaam of IP-adres", + "name": "Naam van hub" + }, + "title": "Logitech Harmony Hub instellen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/no.json b/homeassistant/components/harmony/translations/no.json new file mode 100644 index 00000000000..9cae0663208 --- /dev/null +++ b/homeassistant/components/harmony/translations/no.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "unknown": "Uventet feil" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Vil du konfigurere {name} ({host})?", + "title": "Oppsett Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Vertsnavn eller IP-adresse", + "name": "Navn p\u00e5 hub" + }, + "title": "Oppsett Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Standardaktiviteten som skal utf\u00f8res n\u00e5r ingen er angitt.", + "delay_secs": "Forsinkelsen mellom sending av kommandoer." + }, + "description": "Juster alternativene for harmonihub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/pl.json b/homeassistant/components/harmony/translations/pl.json new file mode 100644 index 00000000000..533c14097a5 --- /dev/null +++ b/homeassistant/components/harmony/translations/pl.json @@ -0,0 +1,36 @@ +{ + "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." + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Czy chcesz skonfigurowa\u0107 {name} ({host})?", + "title": "Konfiguracja Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa huba" + }, + "title": "Konfiguracja Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Domy\u015blna aktywno\u015b\u0107 do wykonania, gdy \u017cadnej nie okre\u015blono.", + "delay_secs": "Op\u00f3\u017anienie mi\u0119dzy wysy\u0142aniem polece\u0144." + }, + "description": "Dostosuj opcje huba Harmony" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/ru.json b/homeassistant/components/harmony/translations/ru.json new file mode 100644 index 00000000000..85b61f923e1 --- /dev/null +++ b/homeassistant/components/harmony/translations/ru.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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." + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name} ({host})?", + "title": "Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "title": "Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430.", + "delay_secs": "\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434." + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 Harmony Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/sl.json b/homeassistant/components/harmony/translations/sl.json new file mode 100644 index 00000000000..9c99ba98bb2 --- /dev/null +++ b/homeassistant/components/harmony/translations/sl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "unknown": "Nepri\u010dakovana napaka" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Ali \u017eelite nastaviti {name} ({host})?", + "title": "Nastavite Logitech Harmony Hub" + }, + "user": { + "data": { + "host": "Ime gostitelja ali naslov IP", + "name": "Ime vozli\u0161\u010da" + }, + "title": "Nastavite Logitech Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "Privzeta dejavnost za izvr\u0161itev, ko ni dolo\u010dena nobena.", + "delay_secs": "Zakasnitev med po\u0161iljanjem ukazov." + }, + "description": "Prilagodite mo\u017enosti vozli\u0161\u010da Harmony" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/harmony/translations/zh-Hant.json b/homeassistant/components/harmony/translations/zh-Hant.json new file mode 100644 index 00000000000..5b4171de5cc --- /dev/null +++ b/homeassistant/components/harmony/translations/zh-Hant.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "flow_title": "\u7f85\u6280 Harmony Hub {name}", + "step": { + "link": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name} ({host})\uff1f", + "title": "\u8a2d\u5b9a\u7f85\u6280 Harmony Hub" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", + "name": "Hub \u540d\u7a31" + }, + "title": "\u8a2d\u5b9a\u7f85\u6280 Harmony Hub" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "activity": "\u7576\u672a\u6307\u5b9a\u6642\u9810\u8a2d\u57f7\u884c\u6d3b\u52d5\u3002", + "delay_secs": "\u50b3\u9001\u547d\u4ee4\u9593\u9694\u79d2\u6578\u3002" + }, + "description": "\u8abf\u6574 Harmony Hub \u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index bcb751faa64..f13db03ca4c 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -143,6 +143,14 @@ def is_hassio(hass): return DOMAIN in hass.config.components +@callback +def get_supervisor_ip(): + """Return the supervisor ip address.""" + if "SUPERVISOR" not in os.environ: + return None + return os.environ["SUPERVISOR"].partition(":")[0] + + async def async_setup(hass, config): """Set up the Hass.io component.""" # Check local setup diff --git a/homeassistant/components/hassio/addon_panel.py b/homeassistant/components/hassio/addon_panel.py index cb509cb19a1..d8616a82578 100644 --- a/homeassistant/components/hassio/addon_panel.py +++ b/homeassistant/components/hassio/addon_panel.py @@ -5,6 +5,7 @@ import logging from aiohttp import web from homeassistant.components.http import HomeAssistantView +from homeassistant.const import HTTP_BAD_REQUEST from homeassistant.helpers.typing import HomeAssistantType from .const import ATTR_ADMIN, ATTR_ENABLE, ATTR_ICON, ATTR_PANELS, ATTR_TITLE @@ -52,7 +53,7 @@ class HassIOAddonPanel(HomeAssistantView): # Panel exists for add-on slug if addon not in panels or not panels[addon][ATTR_ENABLE]: _LOGGER.error("Panel is not enable for %s", addon) - return web.Response(status=400) + return web.Response(status=HTTP_BAD_REQUEST) data = panels[addon] # Register panel diff --git a/homeassistant/components/hassio/auth.py b/homeassistant/components/hassio/auth.py index f8474e0fd24..b95690641cd 100644 --- a/homeassistant/components/hassio/auth.py +++ b/homeassistant/components/hassio/auth.py @@ -15,6 +15,7 @@ from homeassistant.auth.models import User from homeassistant.components.http import HomeAssistantView from homeassistant.components.http.const import KEY_HASS_USER, KEY_REAL_IP from homeassistant.components.http.data_validator import RequestDataValidator +from homeassistant.const import HTTP_OK from homeassistant.core import callback from homeassistant.exceptions import HomeAssistantError import homeassistant.helpers.config_validation as cv @@ -93,7 +94,7 @@ class HassIOAuth(HassIOBaseAuth): self._check_access(request) await self._check_login(data[ATTR_USERNAME], data[ATTR_PASSWORD]) - return web.Response(status=200) + return web.Response(status=HTTP_OK) async def _check_login(self, username, password): """Check User credentials.""" @@ -117,7 +118,7 @@ class HassIOPasswordReset(HassIOBaseAuth): self._check_access(request) await self._change_password(data[ATTR_USERNAME], data[ATTR_PASSWORD]) - return web.Response(status=200) + return web.Response(status=HTTP_OK) async def _change_password(self, username, password): """Check User credentials.""" diff --git a/homeassistant/components/hassio/handler.py b/homeassistant/components/hassio/handler.py index bb41e5335d7..d929f2d3e82 100644 --- a/homeassistant/components/hassio/handler.py +++ b/homeassistant/components/hassio/handler.py @@ -12,7 +12,7 @@ from homeassistant.components.http import ( CONF_SSL_CERTIFICATE, DEFAULT_SERVER_HOST, ) -from homeassistant.const import SERVER_PORT +from homeassistant.const import HTTP_BAD_REQUEST, HTTP_OK, SERVER_PORT from .const import X_HASSIO @@ -167,7 +167,7 @@ class HassIO: headers={X_HASSIO: os.environ.get("HASSIO_TOKEN", "")}, ) - if request.status not in (200, 400): + if request.status not in (HTTP_OK, HTTP_BAD_REQUEST): _LOGGER.error("%s return code %d.", command, request.status) raise HassioAPIError() diff --git a/homeassistant/components/hassio/manifest.json b/homeassistant/components/hassio/manifest.json index cd004db4c93..bc215932aa8 100644 --- a/homeassistant/components/hassio/manifest.json +++ b/homeassistant/components/hassio/manifest.json @@ -2,7 +2,6 @@ "domain": "hassio", "name": "Hass.io", "documentation": "https://www.home-assistant.io/hassio", - "requirements": [], "dependencies": ["http"], "after_dependencies": ["panel_custom"], "codeowners": ["@home-assistant/hass-io"] diff --git a/homeassistant/components/hassio/translations/af.json b/homeassistant/components/hassio/translations/af.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/bg.json b/homeassistant/components/hassio/translations/bg.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/ca.json b/homeassistant/components/hassio/translations/ca.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/cs.json b/homeassistant/components/hassio/translations/cs.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/cy.json b/homeassistant/components/hassio/translations/cy.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/da.json b/homeassistant/components/hassio/translations/da.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/de.json b/homeassistant/components/hassio/translations/de.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/el.json b/homeassistant/components/hassio/translations/el.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/en.json b/homeassistant/components/hassio/translations/en.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/es-419.json b/homeassistant/components/hassio/translations/es-419.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/es.json b/homeassistant/components/hassio/translations/es.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/et.json b/homeassistant/components/hassio/translations/et.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/eu.json b/homeassistant/components/hassio/translations/eu.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/fa.json b/homeassistant/components/hassio/translations/fa.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/fi.json b/homeassistant/components/hassio/translations/fi.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/fr.json b/homeassistant/components/hassio/translations/fr.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/he.json b/homeassistant/components/hassio/translations/he.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/hr.json b/homeassistant/components/hassio/translations/hr.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/hu.json b/homeassistant/components/hassio/translations/hu.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/hy.json b/homeassistant/components/hassio/translations/hy.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/is.json b/homeassistant/components/hassio/translations/is.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/it.json b/homeassistant/components/hassio/translations/it.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/ja.json b/homeassistant/components/hassio/translations/ja.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/ko.json b/homeassistant/components/hassio/translations/ko.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/lb.json b/homeassistant/components/hassio/translations/lb.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/lt.json b/homeassistant/components/hassio/translations/lt.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/lt.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/lv.json b/homeassistant/components/hassio/translations/lv.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/nb.json b/homeassistant/components/hassio/translations/nb.json new file mode 100644 index 00000000000..d8a4c453015 --- /dev/null +++ b/homeassistant/components/hassio/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/nl.json b/homeassistant/components/hassio/translations/nl.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/nn.json b/homeassistant/components/hassio/translations/nn.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/no.json b/homeassistant/components/hassio/translations/no.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/pl.json b/homeassistant/components/hassio/translations/pl.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/pt-BR.json b/homeassistant/components/hassio/translations/pt-BR.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/pt.json b/homeassistant/components/hassio/translations/pt.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/ro.json b/homeassistant/components/hassio/translations/ro.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/ru.json b/homeassistant/components/hassio/translations/ru.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/sk.json b/homeassistant/components/hassio/translations/sk.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/sl.json b/homeassistant/components/hassio/translations/sl.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/sv.json b/homeassistant/components/hassio/translations/sv.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/th.json b/homeassistant/components/hassio/translations/th.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/tr.json b/homeassistant/components/hassio/translations/tr.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/uk.json b/homeassistant/components/hassio/translations/uk.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/vi.json b/homeassistant/components/hassio/translations/vi.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/zh-Hans.json b/homeassistant/components/hassio/translations/zh-Hans.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/hassio/translations/zh-Hant.json b/homeassistant/components/hassio/translations/zh-Hant.json new file mode 100644 index 00000000000..981cb51c83a --- /dev/null +++ b/homeassistant/components/hassio/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "Hass.io" +} \ No newline at end of file diff --git a/homeassistant/components/haveibeenpwned/manifest.json b/homeassistant/components/haveibeenpwned/manifest.json index 0016bf586cd..255124eb133 100644 --- a/homeassistant/components/haveibeenpwned/manifest.json +++ b/homeassistant/components/haveibeenpwned/manifest.json @@ -2,7 +2,5 @@ "domain": "haveibeenpwned", "name": "HaveIBeenPwned", "documentation": "https://www.home-assistant.io/integrations/haveibeenpwned", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/haveibeenpwned/sensor.py b/homeassistant/components/haveibeenpwned/sensor.py index 00a39aae8f4..0f5a9b5ebfd 100644 --- a/homeassistant/components/haveibeenpwned/sensor.py +++ b/homeassistant/components/haveibeenpwned/sensor.py @@ -7,7 +7,13 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_EMAIL +from homeassistant.const import ( + ATTR_ATTRIBUTION, + CONF_API_KEY, + CONF_EMAIL, + HTTP_NOT_FOUND, + HTTP_OK, +) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import track_point_in_time @@ -158,7 +164,7 @@ class HaveIBeenPwnedData: _LOGGER.error("Failed fetching data for %s", self._email) return - if req.status_code == 200: + if req.status_code == HTTP_OK: self.data[self._email] = sorted( req.json(), key=lambda k: k["AddedDate"], reverse=True ) @@ -167,7 +173,7 @@ class HaveIBeenPwnedData: # the forced updates try this current email again self.set_next_email() - elif req.status_code == 404: + elif req.status_code == HTTP_NOT_FOUND: self.data[self._email] = [] # only goto next email if we had data so that diff --git a/homeassistant/components/hddtemp/manifest.json b/homeassistant/components/hddtemp/manifest.json index 6f1d10a9355..d72103f2026 100644 --- a/homeassistant/components/hddtemp/manifest.json +++ b/homeassistant/components/hddtemp/manifest.json @@ -2,7 +2,5 @@ "domain": "hddtemp", "name": "hddtemp", "documentation": "https://www.home-assistant.io/integrations/hddtemp", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hdmi_cec/__init__.py b/homeassistant/components/hdmi_cec/__init__.py index b460020546f..471a2dd0f46 100644 --- a/homeassistant/components/hdmi_cec/__init__.py +++ b/homeassistant/components/hdmi_cec/__init__.py @@ -202,7 +202,7 @@ def setup(hass: HomeAssistant, base_config): if multiprocessing.cpu_count() < 2 else None ) - host = base_config[DOMAIN].get(CONF_HOST, None) + host = base_config[DOMAIN].get(CONF_HOST) display_name = base_config[DOMAIN].get(CONF_DISPLAY_NAME, DEFAULT_DISPLAY_NAME) if host: adapter = TcpAdapter(host, name=display_name, activate_source=False) diff --git a/homeassistant/components/hdmi_cec/manifest.json b/homeassistant/components/hdmi_cec/manifest.json index 683b735ec50..3d2ea355e02 100644 --- a/homeassistant/components/hdmi_cec/manifest.json +++ b/homeassistant/components/hdmi_cec/manifest.json @@ -3,6 +3,5 @@ "name": "HDMI-CEC", "documentation": "https://www.home-assistant.io/integrations/hdmi_cec", "requirements": ["pyCEC==0.4.13"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hdmi_cec/media_player.py b/homeassistant/components/hdmi_cec/media_player.py index 42c5f0b456c..c49ee45271a 100644 --- a/homeassistant/components/hdmi_cec/media_player.py +++ b/homeassistant/components/hdmi_cec/media_player.py @@ -67,7 +67,7 @@ class CecPlayerDevice(CecDevice, MediaPlayerDevice): def __init__(self, device, logical) -> None: """Initialize the HDMI device.""" CecDevice.__init__(self, device, logical) - self.entity_id = "%s.%s_%s" % (DOMAIN, "hdmi", hex(self._logical_address)[2:]) + self.entity_id = f"{DOMAIN}.hdmi_{hex(self._logical_address)[2:]}" def send_keypress(self, key): """Send keypress to CEC adapter.""" diff --git a/homeassistant/components/hdmi_cec/services.yaml b/homeassistant/components/hdmi_cec/services.yaml index 63aee668062..aa85ffb0214 100644 --- a/homeassistant/components/hdmi_cec/services.yaml +++ b/homeassistant/components/hdmi_cec/services.yaml @@ -1,32 +1,45 @@ -power_on: {description: Power on all devices which supports it.} +power_on: + description: Power on all devices which supports it. select_device: description: Select HDMI device. fields: - device: {description: 'Address of device to select. Can be entity_id, physical - address or alias from configuration.', example: '"switch.hdmi_1" or "1.1.0.0" - or "01:10"'} + device: + description: Address of device to select. Can be entity_id, physical address or alias from configuration. + example: '"switch.hdmi_1" or "1.1.0.0" or "01:10"' send_command: description: Sends CEC command into HDMI CEC capable adapter. fields: att: description: Optional parameters. example: [0, 2] - cmd: {description: 'Command itself. Could be decimal number or string with hexadeximal - notation: "0x10".', example: 144 or "0x90"} - dst: {description: 'Destination for command. Could be decimal number or string - with hexadeximal notation: "0x10".', example: 5 or "0x5"} - raw: {description: 'Raw CEC command in format "00:00:00:00" where first two digits + cmd: + description: 'Command itself. Could be decimal number or string with hexadeximal notation: "0x10".' + example: 144 or "0x90" + dst: + description: 'Destination for command. Could be decimal number or string with hexadeximal notation: "0x10".' + example: 5 or "0x5" + raw: + description: >- + Raw CEC command in format "00:00:00:00" where first two digits are source and destination, second byte is command and optional other bytes - are command parameters. If raw command specified, other params are ignored.', - example: '"10:36"'} - src: {description: 'Source of command. Could be decimal number or string with - hexadeximal notation: "0x10".', example: 12 or "0xc"} -standby: {description: Standby all devices which supports it.} -update: {description: Update devices state from network.} + are command parameters. If raw command specified, other params are ignored. + example: '"10:36"' + src: + description: 'Source of command. Could be decimal number or string with hexadeximal notation: "0x10".' + example: 12 or "0xc" +standby: + description: Standby all devices which supports it. +update: + description: Update devices state from network. volume: description: Increase or decrease volume of system. fields: - down: {description: Decreases volume x levels., example: 3} - mute: {description: 'Mutes audio system. Value should be on, off or toggle.', - example: toggle} - up: {description: Increases volume x levels., example: 3} + down: + description: Decreases volume x levels. + example: 3 + mute: + description: Mutes audio system. Value should be on, off or toggle. + example: toggle + up: + description: Increases volume x levels. + example: 3 diff --git a/homeassistant/components/hdmi_cec/switch.py b/homeassistant/components/hdmi_cec/switch.py index 53384397cf4..0fcf9c01c8f 100644 --- a/homeassistant/components/hdmi_cec/switch.py +++ b/homeassistant/components/hdmi_cec/switch.py @@ -28,7 +28,7 @@ class CecSwitchDevice(CecDevice, SwitchDevice): def __init__(self, device, logical) -> None: """Initialize the HDMI device.""" CecDevice.__init__(self, device, logical) - self.entity_id = "%s.%s_%s" % (DOMAIN, "hdmi", hex(self._logical_address)[2:]) + self.entity_id = f"{DOMAIN}.hdmi_{hex(self._logical_address)[2:]}" def turn_on(self, **kwargs) -> None: """Turn device on.""" diff --git a/homeassistant/components/heatmiser/manifest.json b/homeassistant/components/heatmiser/manifest.json index d8ecb505390..065cfc9f6a2 100644 --- a/homeassistant/components/heatmiser/manifest.json +++ b/homeassistant/components/heatmiser/manifest.json @@ -3,6 +3,5 @@ "name": "Heatmiser", "documentation": "https://www.home-assistant.io/integrations/heatmiser", "requirements": ["heatmiserV3==1.1.18"], - "dependencies": [], "codeowners": ["@andylockran"] } diff --git a/homeassistant/components/heos/.translations/bg.json b/homeassistant/components/heos/.translations/bg.json deleted file mode 100644 index dea7dd9bb24..00000000000 --- a/homeassistant/components/heos/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 Heos \u0432\u0440\u044a\u0437\u043a\u0430, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0442\u044f \u0449\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430." - }, - "error": { - "connection_failure": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0441\u043e\u0447\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441." - }, - "step": { - "user": { - "data": { - "access_token": "\u0410\u0434\u0440\u0435\u0441", - "host": "\u0410\u0434\u0440\u0435\u0441" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0430 \u0438\u043b\u0438 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 Heos \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u0437\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0435 \u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0434\u0430 \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u043e \u0441 \u043a\u0430\u0431\u0435\u043b \u043a\u044a\u043c \u043c\u0440\u0435\u0436\u0430\u0442\u0430).", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/ca.json b/homeassistant/components/heos/.translations/ca.json deleted file mode 100644 index 0987e11430b..00000000000 --- a/homeassistant/components/heos/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar una \u00fanica connexi\u00f3 de Heos tot i que aquesta ja pot controlar tots els dispositius de la xarxa." - }, - "error": { - "connection_failure": "No s'ha pogut connectar amb l'amfitri\u00f3 especificat." - }, - "step": { - "user": { - "data": { - "access_token": "Amfitri\u00f3", - "host": "Amfitri\u00f3" - }, - "description": "Introdueix el nom de l'amfitri\u00f3 o l'adre\u00e7a IP d'un dispositiu Heos (preferiblement un connectat a la xarxa per cable).", - "title": "Connexi\u00f3 amb Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/cs.json b/homeassistant/components/heos/.translations/cs.json deleted file mode 100644 index fac6458c5b8..00000000000 --- a/homeassistant/components/heos/.translations/cs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/da.json b/homeassistant/components/heos/.translations/da.json deleted file mode 100644 index f2d9441e48a..00000000000 --- a/homeassistant/components/heos/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt Heos-forbindelse, da den underst\u00f8tter alle enheder p\u00e5 netv\u00e6rket." - }, - "error": { - "connection_failure": "Kunne ikke oprette forbindelse til den angivne v\u00e6rt." - }, - "step": { - "user": { - "data": { - "access_token": "V\u00e6rt", - "host": "V\u00e6rt" - }, - "description": "Indtast v\u00e6rtsnavnet eller IP-adressen p\u00e5 en Heos-enhed (helst en tilsluttet via ledning til netv\u00e6rket).", - "title": "Opret forbindelse til HEOS" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/de.json b/homeassistant/components/heos/.translations/de.json deleted file mode 100644 index e98df7466ff..00000000000 --- a/homeassistant/components/heos/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Es kann nur eine einzige Heos-Verbindung konfiguriert werden, da diese alle Ger\u00e4te im Netzwerk unterst\u00fctzt." - }, - "error": { - "connection_failure": "Es kann keine Verbindung zum angegebenen Host hergestellt werden." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "description": "Bitte gib den Hostnamen oder die IP-Adresse eines Heos-Ger\u00e4ts ein (vorzugsweise eines, das per Kabel mit dem Netzwerk verbunden ist).", - "title": "Mit Heos verbinden" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/en.json b/homeassistant/components/heos/.translations/en.json deleted file mode 100644 index 6d4d83192c7..00000000000 --- a/homeassistant/components/heos/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure a single Heos connection as it will support all devices on the network." - }, - "error": { - "connection_failure": "Unable to connect to the specified host." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "description": "Please enter the host name or IP address of a Heos device (preferably one connected via wire to the network).", - "title": "Connect to Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/es-419.json b/homeassistant/components/heos/.translations/es-419.json deleted file mode 100644 index b0d1d7dc3fb..00000000000 --- a/homeassistant/components/heos/.translations/es-419.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puede configurar una sola conexi\u00f3n Heos, ya que ser\u00e1 compatible con todos los dispositivos de la red." - }, - "error": { - "connection_failure": "No se puede conectar con el host especificado." - }, - "step": { - "user": { - "description": "Ingrese el nombre de host o la direcci\u00f3n IP de un dispositivo Heos (preferiblemente uno conectado por cable a la red).", - "title": "Con\u00e9ctate a Heos" - } - }, - "title": "Heos" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/es.json b/homeassistant/components/heos/.translations/es.json deleted file mode 100644 index da5d5e0ab89..00000000000 --- a/homeassistant/components/heos/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puedes configurar una \u00fanica conexi\u00f3n Heos, ya que admitir\u00e1 todos los dispositivos de la red." - }, - "error": { - "connection_failure": "No se puede conectar al host especificado." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "description": "Introduce el nombre de host o direcci\u00f3n IP de un dispositivo Heos (preferiblemente conectado por cable a la red).", - "title": "Conectar a Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/fr.json b/homeassistant/components/heos/.translations/fr.json deleted file mode 100644 index 549cd00e8e0..00000000000 --- a/homeassistant/components/heos/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'une seule connexion Heos, car celle-ci supportera tous les p\u00e9riph\u00e9riques du r\u00e9seau." - }, - "error": { - "connection_failure": "Impossible de se connecter \u00e0 l'h\u00f4te sp\u00e9cifi\u00e9." - }, - "step": { - "user": { - "data": { - "access_token": "H\u00f4te", - "host": "H\u00f4te" - }, - "description": "Veuillez saisir le nom d\u2019h\u00f4te ou l\u2019adresse IP d\u2019un p\u00e9riph\u00e9rique Heos (de pr\u00e9f\u00e9rence connect\u00e9 au r\u00e9seau filaire).", - "title": "Se connecter \u00e0 Heos" - } - }, - "title": "Heos" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/hu.json b/homeassistant/components/heos/.translations/hu.json deleted file mode 100644 index 20ae78ae316..00000000000 --- a/homeassistant/components/heos/.translations/hu.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "access_token": "Kiszolg\u00e1l\u00f3", - "host": "Kiszolg\u00e1l\u00f3" - } - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/it.json b/homeassistant/components/heos/.translations/it.json deleted file mode 100644 index 824f7c3fb50..00000000000 --- a/homeassistant/components/heos/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare una singola connessione Heos poich\u00e9 supporta tutti i dispositivi sulla rete." - }, - "error": { - "connection_failure": "Impossibile connettersi all'host specificato." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "description": "Inserire il nome host o l'indirizzo IP di un dispositivo Heos (preferibilmente uno connesso alla rete tramite cavo).", - "title": "Connetti a Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/ko.json b/homeassistant/components/heos/.translations/ko.json deleted file mode 100644 index e1cecbe35d9..00000000000 --- a/homeassistant/components/heos/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Heos \uc5f0\uacb0\uc740 \ub124\ud2b8\uc6cc\ud06c\uc0c1\uc758 \ubaa8\ub4e0 \uae30\uae30\ub97c \uc9c0\uc6d0\ud558\uae30 \ub54c\ubb38\uc5d0 \ud558\ub098\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." - }, - "error": { - "connection_failure": "\uc9c0\uc815\ub41c \ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "access_token": "\ud638\uc2a4\ud2b8", - "host": "\ud638\uc2a4\ud2b8" - }, - "description": "Heos \uae30\uae30\uc758 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. (\uc720\uc120 \ub124\ud2b8\uc6cc\ud06c\ub85c \uc5f0\uacb0\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4)", - "title": "Heos \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/lb.json b/homeassistant/components/heos/.translations/lb.json deleted file mode 100644 index cfe1d347b0c..00000000000 --- a/homeassistant/components/heos/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen eng eenzeg Heos Verbindung konfigur\u00e9ieren, well se all Apparater am Netzwierk \u00ebnnerst\u00ebtzen." - }, - "error": { - "connection_failure": "Kann sech net mat dem spezifiz\u00e9ierten Apparat verbannen." - }, - "step": { - "user": { - "data": { - "access_token": "Apparat", - "host": "Apparat" - }, - "description": "Gitt den Numm oder IP-Adress vun engem Heos-Apparat an (am beschten iwwer Kabel mam Reseau verbonnen).", - "title": "Mat Heos verbannen" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/nl.json b/homeassistant/components/heos/.translations/nl.json deleted file mode 100644 index 3e7105e8cb3..00000000000 --- a/homeassistant/components/heos/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt alleen een enkele Heos-verbinding configureren, omdat deze alle apparaten in het netwerk ondersteunt." - }, - "error": { - "connection_failure": "Kan geen verbinding maken met de opgegeven host." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "description": "Voer de hostnaam of het IP-adres van een Heos-apparaat in (bij voorkeur een die via een kabel is verbonden met het netwerk).", - "title": "Verbinding maken met Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/nn.json b/homeassistant/components/heos/.translations/nn.json deleted file mode 100644 index ec2dc294500..00000000000 --- a/homeassistant/components/heos/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "access_token": "Vert" - } - } - }, - "title": "Heos" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/no.json b/homeassistant/components/heos/.translations/no.json deleted file mode 100644 index b54b5520943..00000000000 --- a/homeassistant/components/heos/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en Heos tilkobling, da den st\u00f8tter alle enhetene p\u00e5 nettverket." - }, - "error": { - "connection_failure": "Kan ikke koble til den angitte verten." - }, - "step": { - "user": { - "data": { - "access_token": "Vert", - "host": "Vert" - }, - "description": "Vennligst skriv inn vertsnavnet eller IP-adressen til en Heos-enhet (helst en tilkoblet via kabel til nettverket).", - "title": "Koble til Heos" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/pl.json b/homeassistant/components/heos/.translations/pl.json deleted file mode 100644 index e494a6b34df..00000000000 --- a/homeassistant/components/heos/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno po\u0142\u0105czenie Heos, poniewa\u017c b\u0119dzie ono obs\u0142ugiwa\u0107 wszystkie urz\u0105dzenia w sieci." - }, - "error": { - "connection_failure": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z okre\u015blonym hostem." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "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" - } - }, - "title": "Heos" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/pt-BR.json b/homeassistant/components/heos/.translations/pt-BR.json deleted file mode 100644 index 5bcd39efd20..00000000000 --- a/homeassistant/components/heos/.translations/pt-BR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Voc\u00ea s\u00f3 pode configurar uma \u00fanica conex\u00e3o Heos, pois ela suportar\u00e1 todos os dispositivos na rede." - }, - "error": { - "connection_failure": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao host especificado." - }, - "step": { - "user": { - "data": { - "access_token": "Host", - "host": "Host" - }, - "description": "Por favor, digite o nome do host ou o endere\u00e7o IP de um dispositivo Heos (de prefer\u00eancia para conex\u00f5es conectadas por cabo \u00e0 sua rede).", - "title": "Conecte-se a Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/pt.json b/homeassistant/components/heos/.translations/pt.json deleted file mode 100644 index 099d1978436..00000000000 --- a/homeassistant/components/heos/.translations/pt.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "access_token": "Servidor", - "host": "Servidor" - } - } - }, - "title": "Heos" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/ru.json b/homeassistant/components/heos/.translations/ru.json deleted file mode 100644 index 8aacc8e165d..00000000000 --- a/homeassistant/components/heos/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 HEOS \u0432 \u0441\u0435\u0442\u0438." - }, - "error": { - "connection_failure": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0443." - }, - "step": { - "user": { - "data": { - "access_token": "\u0425\u043e\u0441\u0442", - "host": "\u0425\u043e\u0441\u0442" - }, - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u0445\u043e\u0441\u0442\u0430 \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 HEOS (\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0431\u0435\u043b\u044c).", - "title": "HEOS" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/sl.json b/homeassistant/components/heos/.translations/sl.json deleted file mode 100644 index 2978d2bbbe6..00000000000 --- a/homeassistant/components/heos/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Konfigurirate lahko samo eno povezavo Heos, le ta bo podpirala vse naprave v omre\u017eju." - }, - "error": { - "connection_failure": "Ni mogo\u010de vzpostaviti povezave z dolo\u010denim gostiteljem." - }, - "step": { - "user": { - "data": { - "access_token": "Gostitelj", - "host": "Gostitelj" - }, - "description": "Vnesite ime gostitelja ali naslov IP naprave Heos (po mo\u017enosti eno, ki je z omre\u017ejem povezana \u017ei\u010dno).", - "title": "Pove\u017eite se z Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/sv.json b/homeassistant/components/heos/.translations/sv.json deleted file mode 100644 index 96d4991a5b8..00000000000 --- a/homeassistant/components/heos/.translations/sv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bara konfigurera en enda Heos-anslutning eftersom den kommer att st\u00f6dja alla enheter i n\u00e4tverket." - }, - "error": { - "connection_failure": "Det gick inte att ansluta till den angivna v\u00e4rden." - }, - "step": { - "user": { - "data": { - "access_token": "V\u00e4rd", - "host": "V\u00e4rd" - }, - "description": "Ange v\u00e4rdnamnet eller IP-adressen f\u00f6r en Heos-enhet (helst en ansluten via kabel till n\u00e4tverket).", - "title": "Anslut till Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/.translations/zh-Hant.json b/homeassistant/components/heos/.translations/zh-Hant.json deleted file mode 100644 index 9efacaf163f..00000000000 --- a/homeassistant/components/heos/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Heos \u9023\u7dda\uff0c\u5c07\u652f\u63f4\u7db2\u8def\u4e2d\u6240\u6709\u5c0d\u61c9\u8a2d\u5099\u3002" - }, - "error": { - "connection_failure": "\u7121\u6cd5\u9023\u7dda\u81f3\u6307\u5b9a\u4e3b\u6a5f\u7aef\u3002" - }, - "step": { - "user": { - "data": { - "access_token": "\u4e3b\u6a5f\u7aef", - "host": "\u4e3b\u6a5f\u7aef" - }, - "description": "\u8acb\u8f38\u5165\u4e3b\u6a5f\u6bb5\u540d\u7a31\u6216 Heos \u8a2d\u5099 IP \u4f4d\u5740\uff08\u5df2\u900f\u904e\u6709\u7dda\u7db2\u8def\u9023\u7dda\uff09\u3002", - "title": "\u9023\u7dda\u81f3 Heos" - } - }, - "title": "HEOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/heos/manifest.json b/homeassistant/components/heos/manifest.json index 02f3d03ae52..a6da3623da7 100644 --- a/homeassistant/components/heos/manifest.json +++ b/homeassistant/components/heos/manifest.json @@ -9,6 +9,5 @@ "st": "urn:schemas-denon-com:device:ACT-Denon:1" } ], - "dependencies": [], "codeowners": ["@andrewsayre"] } diff --git a/homeassistant/components/heos/services.yaml b/homeassistant/components/heos/services.yaml index 8274240368f..0fe0518323f 100644 --- a/homeassistant/components/heos/services.yaml +++ b/homeassistant/components/heos/services.yaml @@ -3,10 +3,10 @@ sign_in: fields: username: description: The username or email of the HEOS account. [Required] - example: 'example@example.com' + example: "example@example.com" password: description: The password of the HEOS account. [Required] - example: 'password' + example: "password" sign_out: - description: Sign the controller out of the HEOS account. \ No newline at end of file + description: Sign the controller out of the HEOS account. diff --git a/homeassistant/components/heos/strings.json b/homeassistant/components/heos/strings.json index 9a00ac6a4bd..383afad1b96 100644 --- a/homeassistant/components/heos/strings.json +++ b/homeassistant/components/heos/strings.json @@ -1,21 +1,17 @@ { - "config": { - "title": "HEOS", - "step": { - "user": { - "title": "Connect to Heos", - "description": "Please enter the host name or IP address of a Heos device (preferably one connected via wire to the network).", - "data": { - "access_token": "Host", - "host": "Host" - } - } - }, - "error": { - "connection_failure": "Unable to connect to the specified host." - }, - "abort": { - "already_setup": "You can only configure a single Heos connection as it will support all devices on the network." - } + "config": { + "step": { + "user": { + "title": "Connect to Heos", + "description": "Please enter the host name or IP address of a Heos device (preferably one connected via wire to the network).", + "data": { "access_token": "Host", "host": "Host" } + } + }, + "error": { + "connection_failure": "Unable to connect to the specified host." + }, + "abort": { + "already_setup": "You can only configure a single Heos connection as it will support all devices on the network." } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/heos/translations/bg.json b/homeassistant/components/heos/translations/bg.json new file mode 100644 index 00000000000..4f52830af09 --- /dev/null +++ b/homeassistant/components/heos/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 Heos \u0432\u0440\u044a\u0437\u043a\u0430, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0442\u044f \u0449\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430." + }, + "error": { + "connection_failure": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0441\u043e\u0447\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441." + }, + "step": { + "user": { + "data": { + "access_token": "\u0410\u0434\u0440\u0435\u0441", + "host": "\u0410\u0434\u0440\u0435\u0441" + }, + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u043c\u0435\u0442\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0430 \u0438\u043b\u0438 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 Heos \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u0437\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0435 \u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0434\u0430 \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u043e \u0441 \u043a\u0430\u0431\u0435\u043b \u043a\u044a\u043c \u043c\u0440\u0435\u0436\u0430\u0442\u0430).", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/ca.json b/homeassistant/components/heos/translations/ca.json new file mode 100644 index 00000000000..02e8e22d920 --- /dev/null +++ b/homeassistant/components/heos/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar una \u00fanica connexi\u00f3 de Heos tot i que aquesta ja pot controlar tots els dispositius de la xarxa." + }, + "error": { + "connection_failure": "No s'ha pogut connectar amb l'amfitri\u00f3 especificat." + }, + "step": { + "user": { + "data": { + "access_token": "Amfitri\u00f3", + "host": "Amfitri\u00f3" + }, + "description": "Introdueix el nom de l'amfitri\u00f3 o l'adre\u00e7a IP d'un dispositiu Heos (preferiblement un connectat a la xarxa per cable).", + "title": "Connexi\u00f3 amb Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/cs.json b/homeassistant/components/heos/translations/cs.json new file mode 100644 index 00000000000..f77038cb8b6 --- /dev/null +++ b/homeassistant/components/heos/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "HEOS" +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/da.json b/homeassistant/components/heos/translations/da.json new file mode 100644 index 00000000000..b395497d67a --- /dev/null +++ b/homeassistant/components/heos/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt Heos-forbindelse, da den underst\u00f8tter alle enheder p\u00e5 netv\u00e6rket." + }, + "error": { + "connection_failure": "Kunne ikke oprette forbindelse til den angivne v\u00e6rt." + }, + "step": { + "user": { + "data": { + "access_token": "V\u00e6rt", + "host": "V\u00e6rt" + }, + "description": "Indtast v\u00e6rtsnavnet eller IP-adressen p\u00e5 en Heos-enhed (helst en tilsluttet via ledning til netv\u00e6rket).", + "title": "Opret forbindelse til HEOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/de.json b/homeassistant/components/heos/translations/de.json new file mode 100644 index 00000000000..bbd0d8beec7 --- /dev/null +++ b/homeassistant/components/heos/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Es kann nur eine einzige Heos-Verbindung konfiguriert werden, da diese alle Ger\u00e4te im Netzwerk unterst\u00fctzt." + }, + "error": { + "connection_failure": "Es kann keine Verbindung zum angegebenen Host hergestellt werden." + }, + "step": { + "user": { + "data": { + "access_token": "Host", + "host": "Host" + }, + "description": "Bitte gib den Hostnamen oder die IP-Adresse eines Heos-Ger\u00e4ts ein (vorzugsweise eines, das per Kabel mit dem Netzwerk verbunden ist).", + "title": "Mit Heos verbinden" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/en.json b/homeassistant/components/heos/translations/en.json new file mode 100644 index 00000000000..3227e5115f9 --- /dev/null +++ b/homeassistant/components/heos/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure a single Heos connection as it will support all devices on the network." + }, + "error": { + "connection_failure": "Unable to connect to the specified host." + }, + "step": { + "user": { + "data": { + "access_token": "Host", + "host": "Host" + }, + "description": "Please enter the host name or IP address of a Heos device (preferably one connected via wire to the network).", + "title": "Connect to Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/es-419.json b/homeassistant/components/heos/translations/es-419.json new file mode 100644 index 00000000000..01338dc5af3 --- /dev/null +++ b/homeassistant/components/heos/translations/es-419.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puede configurar una sola conexi\u00f3n Heos, ya que ser\u00e1 compatible con todos los dispositivos de la red." + }, + "error": { + "connection_failure": "No se puede conectar con el host especificado." + }, + "step": { + "user": { + "description": "Ingrese el nombre de host o la direcci\u00f3n IP de un dispositivo Heos (preferiblemente uno conectado por cable a la red).", + "title": "Con\u00e9ctate a Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/es.json b/homeassistant/components/heos/translations/es.json new file mode 100644 index 00000000000..b79871d487c --- /dev/null +++ b/homeassistant/components/heos/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puedes configurar una \u00fanica conexi\u00f3n Heos, ya que admitir\u00e1 todos los dispositivos de la red." + }, + "error": { + "connection_failure": "No se puede conectar al host especificado." + }, + "step": { + "user": { + "data": { + "access_token": "Host", + "host": "Host" + }, + "description": "Introduce el nombre de host o direcci\u00f3n IP de un dispositivo Heos (preferiblemente conectado por cable a la red).", + "title": "Conectar a Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/fr.json b/homeassistant/components/heos/translations/fr.json new file mode 100644 index 00000000000..7f76c932c71 --- /dev/null +++ b/homeassistant/components/heos/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'une seule connexion Heos, car celle-ci supportera tous les p\u00e9riph\u00e9riques du r\u00e9seau." + }, + "error": { + "connection_failure": "Impossible de se connecter \u00e0 l'h\u00f4te sp\u00e9cifi\u00e9." + }, + "step": { + "user": { + "data": { + "access_token": "H\u00f4te", + "host": "H\u00f4te" + }, + "description": "Veuillez saisir le nom d\u2019h\u00f4te ou l\u2019adresse IP d\u2019un p\u00e9riph\u00e9rique Heos (de pr\u00e9f\u00e9rence connect\u00e9 au r\u00e9seau filaire).", + "title": "Se connecter \u00e0 Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/hu.json b/homeassistant/components/heos/translations/hu.json new file mode 100644 index 00000000000..8cd10b3c246 --- /dev/null +++ b/homeassistant/components/heos/translations/hu.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "access_token": "Kiszolg\u00e1l\u00f3", + "host": "Kiszolg\u00e1l\u00f3" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/it.json b/homeassistant/components/heos/translations/it.json new file mode 100644 index 00000000000..2e6cfab035b --- /dev/null +++ b/homeassistant/components/heos/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare una singola connessione Heos poich\u00e9 supporta tutti i dispositivi sulla rete." + }, + "error": { + "connection_failure": "Impossibile connettersi all'host specificato." + }, + "step": { + "user": { + "data": { + "access_token": "Host", + "host": "Host" + }, + "description": "Inserire il nome host o l'indirizzo IP di un dispositivo Heos (preferibilmente uno connesso alla rete tramite cavo).", + "title": "Connetti a Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/ko.json b/homeassistant/components/heos/translations/ko.json new file mode 100644 index 00000000000..1e7902adfb3 --- /dev/null +++ b/homeassistant/components/heos/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Heos \uc5f0\uacb0\uc740 \ub124\ud2b8\uc6cc\ud06c\uc0c1\uc758 \ubaa8\ub4e0 \uae30\uae30\ub97c \uc9c0\uc6d0\ud558\uae30 \ub54c\ubb38\uc5d0 \ud558\ub098\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + }, + "error": { + "connection_failure": "\uc9c0\uc815\ub41c \ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "access_token": "\ud638\uc2a4\ud2b8", + "host": "\ud638\uc2a4\ud2b8" + }, + "description": "Heos \uae30\uae30\uc758 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. (\uc720\uc120 \ub124\ud2b8\uc6cc\ud06c\ub85c \uc5f0\uacb0\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4)", + "title": "Heos \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/lb.json b/homeassistant/components/heos/translations/lb.json new file mode 100644 index 00000000000..de124207d64 --- /dev/null +++ b/homeassistant/components/heos/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen eng eenzeg Heos Verbindung konfigur\u00e9ieren, well se all Apparater am Netzwierk \u00ebnnerst\u00ebtzen." + }, + "error": { + "connection_failure": "Kann sech net mat dem spezifiz\u00e9ierten Apparat verbannen." + }, + "step": { + "user": { + "data": { + "access_token": "Apparat", + "host": "Apparat" + }, + "description": "Gitt den Numm oder IP-Adress vun engem Heos-Apparat an (am beschten iwwer Kabel mam Reseau verbonnen).", + "title": "Mat Heos verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/nl.json b/homeassistant/components/heos/translations/nl.json new file mode 100644 index 00000000000..f3e9dfed7e3 --- /dev/null +++ b/homeassistant/components/heos/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt alleen een enkele Heos-verbinding configureren, omdat deze alle apparaten in het netwerk ondersteunt." + }, + "error": { + "connection_failure": "Kan geen verbinding maken met de opgegeven host." + }, + "step": { + "user": { + "data": { + "access_token": "Host", + "host": "Host" + }, + "description": "Voer de hostnaam of het IP-adres van een Heos-apparaat in (bij voorkeur een die via een kabel is verbonden met het netwerk).", + "title": "Verbinding maken met Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/nn.json b/homeassistant/components/heos/translations/nn.json new file mode 100644 index 00000000000..8703148b3f8 --- /dev/null +++ b/homeassistant/components/heos/translations/nn.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "access_token": "Vert" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/no.json b/homeassistant/components/heos/translations/no.json new file mode 100644 index 00000000000..25588d79e01 --- /dev/null +++ b/homeassistant/components/heos/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en Heos tilkobling, da den st\u00f8tter alle enhetene p\u00e5 nettverket." + }, + "error": { + "connection_failure": "Kan ikke koble til den angitte verten." + }, + "step": { + "user": { + "data": { + "access_token": "Vert", + "host": "Vert" + }, + "description": "Vennligst skriv inn vertsnavnet eller IP-adressen til en Heos-enhet (helst en tilkoblet via kabel til nettverket).", + "title": "Koble til Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/pl.json b/homeassistant/components/heos/translations/pl.json new file mode 100644 index 00000000000..0c0b9ade13f --- /dev/null +++ b/homeassistant/components/heos/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno po\u0142\u0105czenie Heos, poniewa\u017c b\u0119dzie ono obs\u0142ugiwa\u0107 wszystkie urz\u0105dzenia w sieci." + }, + "error": { + "connection_failure": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z okre\u015blonym hostem." + }, + "step": { + "user": { + "data": { + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/pt-BR.json b/homeassistant/components/heos/translations/pt-BR.json new file mode 100644 index 00000000000..abacf5c8ca1 --- /dev/null +++ b/homeassistant/components/heos/translations/pt-BR.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Voc\u00ea s\u00f3 pode configurar uma \u00fanica conex\u00e3o Heos, pois ela suportar\u00e1 todos os dispositivos na rede." + }, + "error": { + "connection_failure": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao host especificado." + }, + "step": { + "user": { + "data": { + "access_token": "Host", + "host": "Host" + }, + "description": "Por favor, digite o nome do host ou o endere\u00e7o IP de um dispositivo Heos (de prefer\u00eancia para conex\u00f5es conectadas por cabo \u00e0 sua rede).", + "title": "Conecte-se a Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/pt.json b/homeassistant/components/heos/translations/pt.json new file mode 100644 index 00000000000..d0c219cefa9 --- /dev/null +++ b/homeassistant/components/heos/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "access_token": "Servidor", + "host": "Servidor" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/ru.json b/homeassistant/components/heos/translations/ru.json new file mode 100644 index 00000000000..9983242b349 --- /dev/null +++ b/homeassistant/components/heos/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 HEOS \u0432 \u0441\u0435\u0442\u0438." + }, + "error": { + "connection_failure": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0443." + }, + "step": { + "user": { + "data": { + "access_token": "\u0425\u043e\u0441\u0442", + "host": "\u0425\u043e\u0441\u0442" + }, + "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u0445\u043e\u0441\u0442\u0430 \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 HEOS (\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0431\u0435\u043b\u044c).", + "title": "HEOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/sl.json b/homeassistant/components/heos/translations/sl.json new file mode 100644 index 00000000000..76fe3aadc5d --- /dev/null +++ b/homeassistant/components/heos/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Konfigurirate lahko samo eno povezavo Heos, le ta bo podpirala vse naprave v omre\u017eju." + }, + "error": { + "connection_failure": "Ni mogo\u010de vzpostaviti povezave z dolo\u010denim gostiteljem." + }, + "step": { + "user": { + "data": { + "access_token": "Gostitelj", + "host": "Gostitelj" + }, + "description": "Vnesite ime gostitelja ali naslov IP naprave Heos (po mo\u017enosti eno, ki je z omre\u017ejem povezana \u017ei\u010dno).", + "title": "Pove\u017eite se z Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/sv.json b/homeassistant/components/heos/translations/sv.json new file mode 100644 index 00000000000..8215388a161 --- /dev/null +++ b/homeassistant/components/heos/translations/sv.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bara konfigurera en enda Heos-anslutning eftersom den kommer att st\u00f6dja alla enheter i n\u00e4tverket." + }, + "error": { + "connection_failure": "Det gick inte att ansluta till den angivna v\u00e4rden." + }, + "step": { + "user": { + "data": { + "access_token": "V\u00e4rd", + "host": "V\u00e4rd" + }, + "description": "Ange v\u00e4rdnamnet eller IP-adressen f\u00f6r en Heos-enhet (helst en ansluten via kabel till n\u00e4tverket).", + "title": "Anslut till Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/heos/translations/zh-Hant.json b/homeassistant/components/heos/translations/zh-Hant.json new file mode 100644 index 00000000000..01ca002dd54 --- /dev/null +++ b/homeassistant/components/heos/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Heos \u9023\u7dda\uff0c\u5c07\u652f\u63f4\u7db2\u8def\u4e2d\u6240\u6709\u5c0d\u61c9\u8a2d\u5099\u3002" + }, + "error": { + "connection_failure": "\u7121\u6cd5\u9023\u7dda\u81f3\u6307\u5b9a\u4e3b\u6a5f\u7aef\u3002" + }, + "step": { + "user": { + "data": { + "access_token": "\u4e3b\u6a5f\u7aef", + "host": "\u4e3b\u6a5f\u7aef" + }, + "description": "\u8acb\u8f38\u5165\u4e3b\u6a5f\u6bb5\u540d\u7a31\u6216 Heos \u8a2d\u5099 IP \u4f4d\u5740\uff08\u5df2\u900f\u904e\u6709\u7dda\u7db2\u8def\u9023\u7dda\uff09\u3002", + "title": "\u9023\u7dda\u81f3 Heos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/here_travel_time/manifest.json b/homeassistant/components/here_travel_time/manifest.json index fcef464aa88..151211eef79 100644 --- a/homeassistant/components/here_travel_time/manifest.json +++ b/homeassistant/components/here_travel_time/manifest.json @@ -3,6 +3,5 @@ "name": "HERE Travel Time", "documentation": "https://www.home-assistant.io/integrations/here_travel_time", "requirements": ["herepy==2.0.0"], - "dependencies": [], "codeowners": ["@eifinger"] } diff --git a/homeassistant/components/hikvision/binary_sensor.py b/homeassistant/components/hikvision/binary_sensor.py index 140f6908dce..4d2a879bc73 100644 --- a/homeassistant/components/hikvision/binary_sensor.py +++ b/homeassistant/components/hikvision/binary_sensor.py @@ -90,10 +90,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): customize = config.get(CONF_CUSTOMIZE) - if config.get(CONF_SSL): - protocol = "https" - else: - protocol = "http" + protocol = "https" if config[CONF_SSL] else "http" url = f"{protocol}://{host}" diff --git a/homeassistant/components/hikvision/manifest.json b/homeassistant/components/hikvision/manifest.json index 45b2686ada2..e6dec7b8e89 100644 --- a/homeassistant/components/hikvision/manifest.json +++ b/homeassistant/components/hikvision/manifest.json @@ -2,7 +2,6 @@ "domain": "hikvision", "name": "Hikvision", "documentation": "https://www.home-assistant.io/integrations/hikvision", - "requirements": ["pyhik==0.2.5"], - "dependencies": [], + "requirements": ["pyhik==0.2.7"], "codeowners": ["@mezz64"] } diff --git a/homeassistant/components/hikvisioncam/manifest.json b/homeassistant/components/hikvisioncam/manifest.json index 277617a9032..1a08487fa3a 100644 --- a/homeassistant/components/hikvisioncam/manifest.json +++ b/homeassistant/components/hikvisioncam/manifest.json @@ -3,6 +3,5 @@ "name": "Hikvision", "documentation": "https://www.home-assistant.io/integrations/hikvisioncam", "requirements": ["hikvision==0.4"], - "dependencies": [], "codeowners": ["@fbradyirl"] } diff --git a/homeassistant/components/hisense_aehw4a1/.translations/bg.json b/homeassistant/components/hisense_aehw4a1/.translations/bg.json deleted file mode 100644 index c758e9cc20d..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Hisense AEH-W4A1.", - "single_instance_allowed": "\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Hisense AEH-W4A1." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/ca.json b/homeassistant/components/hisense_aehw4a1/.translations/ca.json deleted file mode 100644 index 7b237aecdab..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'ha trobat cap dispositiu AEH-W4A1 a la xarxa.", - "single_instance_allowed": "Nom\u00e9s \u00e9s possible una \u00fanica configuraci\u00f3 del AEH-W4A1 de Hisense." - }, - "step": { - "confirm": { - "description": "Vols configurar AEH-W4A1 de Hisense?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/da.json b/homeassistant/components/hisense_aehw4a1/.translations/da.json deleted file mode 100644 index 3d479543231..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen Hisense AEH-W4A1-enheder fundet p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Kun en enkelt konfiguration af Hisense AEH-W4A1 er mulig." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/de.json b/homeassistant/components/hisense_aehw4a1/.translations/de.json deleted file mode 100644 index 322c7e2f4c6..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Es wurden keine Hisense AEH-W4A1-Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Es ist nur eine einzige Konfiguration von Hisense AEH-W4A1 m\u00f6glich." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du Hisense AEH-W4A1 einrichten?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/en.json b/homeassistant/components/hisense_aehw4a1/.translations/en.json deleted file mode 100644 index b70fc8f05ec..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No Hisense AEH-W4A1 devices found on the network.", - "single_instance_allowed": "Only a single configuration of Hisense AEH-W4A1 is possible." - }, - "step": { - "confirm": { - "description": "Do you want to set up Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/es.json b/homeassistant/components/hisense_aehw4a1/.translations/es.json deleted file mode 100644 index 69f071bf5d8..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos Hisense AEH-W4A1 en la red.", - "single_instance_allowed": "Solo es posible una \u00fanica configuraci\u00f3n de Hisense AEH-W4A1." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/fr.json b/homeassistant/components/hisense_aehw4a1/.translations/fr.json deleted file mode 100644 index 50c753538c7..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun p\u00e9riph\u00e9rique AEH-W4A1 trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration de AEH-W4A1 est possible." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/hu.json b/homeassistant/components/hisense_aehw4a1/.translations/hu.json deleted file mode 100644 index 02716a96a73..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "A h\u00e1l\u00f3zaton nem tal\u00e1lhat\u00f3 Hisense AEH-W4A1 eszk\u00f6z.", - "single_instance_allowed": "Csak egy konfigur\u00e1ci\u00f3 lehet Hisense AEH-W4A1 eset\u00e9n." - }, - "step": { - "confirm": { - "description": "Szeretn\u00e9 be\u00e1ll\u00edtani Hisense AEH-W4A1-et?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/it.json b/homeassistant/components/hisense_aehw4a1/.translations/it.json deleted file mode 100644 index b584d18e8bf..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nessun dispositivo Hisense AEH-W4A1 trovato sulla rete.", - "single_instance_allowed": "\u00c8 consentita solo una configurazione di Hisense AEH-W4A1" - }, - "step": { - "confirm": { - "description": "Voui configurare Hisense AEH-W4A1", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/ko.json b/homeassistant/components/hisense_aehw4a1/.translations/ko.json deleted file mode 100644 index 6d8b6b4b44c..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "Hisense AEH-W4A1 \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/lb.json b/homeassistant/components/hisense_aehw4a1/.translations/lb.json deleted file mode 100644 index 33b93348300..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng Hisense AEH-W4A1 Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Hisense AEH-W4A1 ass m\u00e9iglech." - }, - "step": { - "confirm": { - "description": "Soll Hisense AEH-W4A1 konfigur\u00e9iert ginn?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/nl.json b/homeassistant/components/hisense_aehw4a1/.translations/nl.json deleted file mode 100644 index 7360908a11d..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen Hisense AEH-W4A1-apparaten gevonden op het netwerk.", - "single_instance_allowed": "Slechts een enkele configuratie van Hisense AEH-W4A1 is mogelijk." - }, - "step": { - "confirm": { - "description": "Wilt u Hisense AEH-W4A1 instellen?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/no.json b/homeassistant/components/hisense_aehw4a1/.translations/no.json deleted file mode 100644 index e44e818ea60..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen Hisense AEH-W4A1-enheter funnet p\u00e5 nettverket.", - "single_instance_allowed": "Bare en enkelt konfigurasjon av Hisense AEH-W4A1 er mulig." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/pl.json b/homeassistant/components/hisense_aehw4a1/.translations/pl.json deleted file mode 100644 index e0ab5cddbda..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Hisense AEH-W4A1.", - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Hisense AEH-W4A1." - }, - "step": { - "confirm": { - "description": "Chcesz skonfigurowa\u0107 AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/ru.json b/homeassistant/components/hisense_aehw4a1/.translations/ru.json deleted file mode 100644 index c65a5277f62..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Hisense AEH-W4A1e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/sl.json b/homeassistant/components/hisense_aehw4a1/.translations/sl.json deleted file mode 100644 index 3c15eecf6e1..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V omre\u017eju ni bilo najdenih naprav Hisense AEH-W4A1.", - "single_instance_allowed": "Mo\u017ena je samo ena konfiguracija Hisense AEH-W4A1." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/sv.json b/homeassistant/components/hisense_aehw4a1/.translations/sv.json deleted file mode 100644 index 6ec35452e8b..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga Hisense AEH-W4A1-enheter hittades i n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration av Hisense AEH-W4A1 \u00e4r m\u00f6jlig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera Hisense AEH-W4A1?", - "title": "Hisense AEH-W4A1" - } - }, - "title": "Hisense AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/.translations/zh-Hant.json b/homeassistant/components/hisense_aehw4a1/.translations/zh-Hant.json deleted file mode 100644 index d4f87905da9..00000000000 --- a/homeassistant/components/hisense_aehw4a1/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230\u6d77\u4fe1 AEH-W4A1 \u8a2d\u5099\u3002", - "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44\u6d77\u4fe1 AEH-W4A1\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u6d77\u4fe1 AEH-W4A1\uff1f", - "title": "\u6d77\u4fe1 AEH-W4A1" - } - }, - "title": "\u6d77\u4fe1 AEH-W4A1" - } -} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/manifest.json b/homeassistant/components/hisense_aehw4a1/manifest.json index a101ab6dd9f..02535142d1b 100644 --- a/homeassistant/components/hisense_aehw4a1/manifest.json +++ b/homeassistant/components/hisense_aehw4a1/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/hisense_aehw4a1", "requirements": ["pyaehw4a1==0.3.4"], - "dependencies": [], "codeowners": ["@bannhead"] } diff --git a/homeassistant/components/hisense_aehw4a1/strings.json b/homeassistant/components/hisense_aehw4a1/strings.json index 67031c41710..5d9b6f1ef96 100644 --- a/homeassistant/components/hisense_aehw4a1/strings.json +++ b/homeassistant/components/hisense_aehw4a1/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "Hisense AEH-W4A1", "step": { "confirm": { - "title": "Hisense AEH-W4A1", "description": "Do you want to set up Hisense AEH-W4A1?" } }, diff --git a/homeassistant/components/hisense_aehw4a1/translations/bg.json b/homeassistant/components/hisense_aehw4a1/translations/bg.json new file mode 100644 index 00000000000..607347ff9e9 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Hisense AEH-W4A1.", + "single_instance_allowed": "\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Hisense AEH-W4A1." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/ca.json b/homeassistant/components/hisense_aehw4a1/translations/ca.json new file mode 100644 index 00000000000..a0aef80e031 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'ha trobat cap dispositiu AEH-W4A1 a la xarxa.", + "single_instance_allowed": "Nom\u00e9s \u00e9s possible una \u00fanica configuraci\u00f3 del AEH-W4A1 de Hisense." + }, + "step": { + "confirm": { + "description": "Vols configurar AEH-W4A1 de Hisense?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/da.json b/homeassistant/components/hisense_aehw4a1/translations/da.json new file mode 100644 index 00000000000..d75ffed4c56 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen Hisense AEH-W4A1-enheder fundet p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Kun en enkelt konfiguration af Hisense AEH-W4A1 er mulig." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/de.json b/homeassistant/components/hisense_aehw4a1/translations/de.json new file mode 100644 index 00000000000..e42d91082e8 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Es wurden keine Hisense AEH-W4A1-Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Es ist nur eine einzige Konfiguration von Hisense AEH-W4A1 m\u00f6glich." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du Hisense AEH-W4A1 einrichten?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/en.json b/homeassistant/components/hisense_aehw4a1/translations/en.json new file mode 100644 index 00000000000..ca0738ec9a8 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No Hisense AEH-W4A1 devices found on the network.", + "single_instance_allowed": "Only a single configuration of Hisense AEH-W4A1 is possible." + }, + "step": { + "confirm": { + "description": "Do you want to set up Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/es.json b/homeassistant/components/hisense_aehw4a1/translations/es.json new file mode 100644 index 00000000000..c9c4270360a --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos Hisense AEH-W4A1 en la red.", + "single_instance_allowed": "Solo es posible una \u00fanica configuraci\u00f3n de Hisense AEH-W4A1." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/fr.json b/homeassistant/components/hisense_aehw4a1/translations/fr.json new file mode 100644 index 00000000000..dafe3836a50 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun p\u00e9riph\u00e9rique AEH-W4A1 trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration de AEH-W4A1 est possible." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/hu.json b/homeassistant/components/hisense_aehw4a1/translations/hu.json new file mode 100644 index 00000000000..389653422fd --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "A h\u00e1l\u00f3zaton nem tal\u00e1lhat\u00f3 Hisense AEH-W4A1 eszk\u00f6z.", + "single_instance_allowed": "Csak egy konfigur\u00e1ci\u00f3 lehet Hisense AEH-W4A1 eset\u00e9n." + }, + "step": { + "confirm": { + "description": "Szeretn\u00e9 be\u00e1ll\u00edtani Hisense AEH-W4A1-et?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/it.json b/homeassistant/components/hisense_aehw4a1/translations/it.json new file mode 100644 index 00000000000..3d878ed40be --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nessun dispositivo Hisense AEH-W4A1 trovato sulla rete.", + "single_instance_allowed": "\u00c8 consentita solo una configurazione di Hisense AEH-W4A1" + }, + "step": { + "confirm": { + "description": "Voui configurare Hisense AEH-W4A1", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/ko.json b/homeassistant/components/hisense_aehw4a1/translations/ko.json new file mode 100644 index 00000000000..2c472277b00 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "Hisense AEH-W4A1 \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/lb.json b/homeassistant/components/hisense_aehw4a1/translations/lb.json new file mode 100644 index 00000000000..cdfbb069c0f --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng Hisense AEH-W4A1 Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Hisense AEH-W4A1 ass m\u00e9iglech." + }, + "step": { + "confirm": { + "description": "Soll Hisense AEH-W4A1 konfigur\u00e9iert ginn?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/nl.json b/homeassistant/components/hisense_aehw4a1/translations/nl.json new file mode 100644 index 00000000000..9fef289f545 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen Hisense AEH-W4A1-apparaten gevonden op het netwerk.", + "single_instance_allowed": "Slechts een enkele configuratie van Hisense AEH-W4A1 is mogelijk." + }, + "step": { + "confirm": { + "description": "Wilt u Hisense AEH-W4A1 instellen?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/no.json b/homeassistant/components/hisense_aehw4a1/translations/no.json new file mode 100644 index 00000000000..65c9968dc1e --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen Hisense AEH-W4A1-enheter funnet p\u00e5 nettverket.", + "single_instance_allowed": "Bare en enkelt konfigurasjon av Hisense AEH-W4A1 er mulig." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/pl.json b/homeassistant/components/hisense_aehw4a1/translations/pl.json new file mode 100644 index 00000000000..77e5c6298eb --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Hisense AEH-W4A1.", + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Hisense AEH-W4A1." + }, + "step": { + "confirm": { + "description": "Chcesz skonfigurowa\u0107 AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/ru.json b/homeassistant/components/hisense_aehw4a1/translations/ru.json new file mode 100644 index 00000000000..bb406e90f92 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Hisense AEH-W4A1e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/sl.json b/homeassistant/components/hisense_aehw4a1/translations/sl.json new file mode 100644 index 00000000000..d24c8398652 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V omre\u017eju ni bilo najdenih naprav Hisense AEH-W4A1.", + "single_instance_allowed": "Mo\u017ena je samo ena konfiguracija Hisense AEH-W4A1." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/sv.json b/homeassistant/components/hisense_aehw4a1/translations/sv.json new file mode 100644 index 00000000000..01d484075e0 --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga Hisense AEH-W4A1-enheter hittades i n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration av Hisense AEH-W4A1 \u00e4r m\u00f6jlig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera Hisense AEH-W4A1?", + "title": "Hisense AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/zh-Hant.json b/homeassistant/components/hisense_aehw4a1/translations/zh-Hant.json new file mode 100644 index 00000000000..44feda4fffc --- /dev/null +++ b/homeassistant/components/hisense_aehw4a1/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230\u6d77\u4fe1 AEH-W4A1 \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44\u6d77\u4fe1 AEH-W4A1\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u6d77\u4fe1 AEH-W4A1\uff1f", + "title": "\u6d77\u4fe1 AEH-W4A1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/history/__init__.py b/homeassistant/components/history/__init__.py index 7540740a737..6fc68b2833e 100644 --- a/homeassistant/components/history/__init__.py +++ b/homeassistant/components/history/__init__.py @@ -124,9 +124,7 @@ def get_last_state_changes(hass, number_of_states, entity_id): start_time = dt_util.utcnow() with session_scope(hass=hass) as session: - query = session.query(States).filter( - (States.last_changed == States.last_updated) - ) + query = session.query(States).filter(States.last_changed == States.last_updated) if entity_id is not None: query = query.filter_by(entity_id=entity_id.lower()) diff --git a/homeassistant/components/history/manifest.json b/homeassistant/components/history/manifest.json index 47f74ec4fde..7185a8b63c4 100644 --- a/homeassistant/components/history/manifest.json +++ b/homeassistant/components/history/manifest.json @@ -2,7 +2,6 @@ "domain": "history", "name": "History", "documentation": "https://www.home-assistant.io/integrations/history", - "requirements": [], "dependencies": ["http", "recorder"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/history_stats/manifest.json b/homeassistant/components/history_stats/manifest.json index e51fa20bb65..dad7cfa6a5a 100644 --- a/homeassistant/components/history_stats/manifest.json +++ b/homeassistant/components/history_stats/manifest.json @@ -2,7 +2,6 @@ "domain": "history_stats", "name": "History Stats", "documentation": "https://www.home-assistant.io/integrations/history_stats", - "requirements": [], "dependencies": ["history"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/hitron_coda/device_tracker.py b/homeassistant/components/hitron_coda/device_tracker.py index 12b03acbcc5..a49e3cc6d21 100644 --- a/homeassistant/components/hitron_coda/device_tracker.py +++ b/homeassistant/components/hitron_coda/device_tracker.py @@ -10,7 +10,13 @@ from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DeviceScanner, ) -from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_TYPE, CONF_USERNAME +from homeassistant.const import ( + CONF_HOST, + CONF_PASSWORD, + CONF_TYPE, + CONF_USERNAME, + HTTP_OK, +) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -83,7 +89,7 @@ class HitronCODADeviceScanner(DeviceScanner): except requests.exceptions.Timeout: _LOGGER.error("Connection to the router timed out at URL %s", self._url) return False - if res.status_code != 200: + if res.status_code != HTTP_OK: _LOGGER.error("Connection failed with http code %s", res.status_code) return False try: @@ -109,7 +115,7 @@ class HitronCODADeviceScanner(DeviceScanner): except requests.exceptions.Timeout: _LOGGER.error("Connection to the router timed out at URL %s", self._url) return False - if res.status_code != 200: + if res.status_code != HTTP_OK: _LOGGER.error("Connection failed with http code %s", res.status_code) return False try: diff --git a/homeassistant/components/hitron_coda/manifest.json b/homeassistant/components/hitron_coda/manifest.json index 05f82999198..609e2171280 100644 --- a/homeassistant/components/hitron_coda/manifest.json +++ b/homeassistant/components/hitron_coda/manifest.json @@ -2,7 +2,5 @@ "domain": "hitron_coda", "name": "Rogers Hitron CODA", "documentation": "https://www.home-assistant.io/integrations/hitron_coda", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hive/__init__.py b/homeassistant/components/hive/__init__.py index edd3388e74f..98d625cbb1d 100644 --- a/homeassistant/components/hive/__init__.py +++ b/homeassistant/components/hive/__init__.py @@ -12,7 +12,6 @@ from homeassistant.const import ( CONF_SCAN_INTERVAL, CONF_USERNAME, ) -from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.discovery import load_platform from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send @@ -186,11 +185,8 @@ class HiveEntity(Entity): async def async_added_to_hass(self): """When entity is added to Home Assistant.""" - async_dispatcher_connect(self.hass, DOMAIN, self._update_callback) + self.async_on_remove( + async_dispatcher_connect(self.hass, DOMAIN, self.async_write_ha_state) + ) if self.device_type in SERVICES: self.session.entity_lookup[self.entity_id] = self.node_id - - @callback - def _update_callback(self): - """Call update method.""" - self.async_schedule_update_ha_state() diff --git a/homeassistant/components/hive/manifest.json b/homeassistant/components/hive/manifest.json index 96563d5ab3d..060a1a0a200 100644 --- a/homeassistant/components/hive/manifest.json +++ b/homeassistant/components/hive/manifest.json @@ -3,6 +3,5 @@ "name": "Hive", "documentation": "https://www.home-assistant.io/integrations/hive", "requirements": ["pyhiveapi==0.2.20.1"], - "dependencies": [], "codeowners": ["@Rendili", "@KJonline"] } diff --git a/homeassistant/components/hive/services.yaml b/homeassistant/components/hive/services.yaml index 6513d76ca89..f09baea7655 100644 --- a/homeassistant/components/hive/services.yaml +++ b/homeassistant/components/hive/services.yaml @@ -1,27 +1,24 @@ boost_heating: - description: "Set the boost mode ON defining the period of time and the desired target temperature - for the boost." + description: Set the boost mode ON defining the period of time and the desired target temperature for the boost. fields: entity_id: - { - description: Enter the entity_id for the device required to set the boost mode., - example: "climate.heating", - } + description: Enter the entity_id for the device required to set the boost mode. + example: "climate.heating" time_period: - { description: Set the time period for the boost., example: "01:30:00" } + description: Set the time period for the boost. + example: "01:30:00" temperature: - { - description: Set the target temperature for the boost period., - example: "20.5", - } + description: Set the target temperature for the boost period. + example: "20.5" boost_hot_water: - description: - "Set the boost mode ON or OFF defining the period of time for the boost." + description: "Set the boost mode ON or OFF defining the period of time for the boost." fields: entity_id: - { - description: Enter the entity_id for the device reuired to set the boost mode., - example: "water_heater.hot_water", - } - time_period: { description: Set the time period for the boost., example: "01:30:00" } - on_off: { description: Set the boost function on or off., example: "on" } + description: Enter the entity_id for the device reuired to set the boost mode. + example: "water_heater.hot_water" + time_period: + description: Set the time period for the boost. + example: "01:30:00" + on_off: + description: Set the boost function on or off. + example: "on" diff --git a/homeassistant/components/hlk_sw16/__init__.py b/homeassistant/components/hlk_sw16/__init__.py index 1750e9b0ff4..3319ce6bee7 100644 --- a/homeassistant/components/hlk_sw16/__init__.py +++ b/homeassistant/components/hlk_sw16/__init__.py @@ -136,7 +136,7 @@ class SW16Device(Entity): """Propagate changes through ha.""" _LOGGER.debug("Relay %s new state callback: %r", self._device_port, event) self._is_on = event - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def should_poll(self): @@ -156,7 +156,7 @@ class SW16Device(Entity): @callback def _availability_callback(self, availability): """Update availability state.""" - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Register update callback.""" @@ -164,8 +164,10 @@ class SW16Device(Entity): self.handle_event_callback, self._device_port ) self._is_on = await self._client.status(self._device_port) - async_dispatcher_connect( - self.hass, - f"hlk_sw16_device_available_{self._device_id}", - self._availability_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + f"hlk_sw16_device_available_{self._device_id}", + self._availability_callback, + ) ) diff --git a/homeassistant/components/hlk_sw16/manifest.json b/homeassistant/components/hlk_sw16/manifest.json index 7df3238e287..7574076fd43 100644 --- a/homeassistant/components/hlk_sw16/manifest.json +++ b/homeassistant/components/hlk_sw16/manifest.json @@ -3,6 +3,5 @@ "name": "Hi-Link HLK-SW16", "documentation": "https://www.home-assistant.io/integrations/hlk_sw16", "requirements": ["hlk-sw16==0.0.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/homeassistant/manifest.json b/homeassistant/components/homeassistant/manifest.json index 50b771611d3..027d1b9376d 100644 --- a/homeassistant/components/homeassistant/manifest.json +++ b/homeassistant/components/homeassistant/manifest.json @@ -2,8 +2,6 @@ "domain": "homeassistant", "name": "Home Assistant Core Integration", "documentation": "https://www.home-assistant.io/integrations/homeassistant", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/homeassistant/scene.py b/homeassistant/components/homeassistant/scene.py index 9dad912886d..d14ef438a66 100644 --- a/homeassistant/components/homeassistant/scene.py +++ b/homeassistant/components/homeassistant/scene.py @@ -1,11 +1,12 @@ """Allow users to set and activate scenes.""" from collections import namedtuple import logging -from typing import List +from typing import Any, List import voluptuous as vol from homeassistant import config as conf_util +from homeassistant.components.light import ATTR_TRANSITION from homeassistant.components.scene import DOMAIN as SCENE_DOMAIN, STATES, Scene from homeassistant.const import ( ATTR_ENTITY_ID, @@ -62,8 +63,8 @@ def _ensure_no_intersection(value): if ( CONF_SNAPSHOT not in value or CONF_ENTITIES not in value - or not any( - entity_id in value[CONF_SNAPSHOT] for entity_id in value[CONF_ENTITIES] + or all( + entity_id not in value[CONF_SNAPSHOT] for entity_id in value[CONF_ENTITIES] ) ): return value @@ -73,7 +74,7 @@ def _ensure_no_intersection(value): CONF_SCENE_ID = "scene_id" CONF_SNAPSHOT = "snapshot_entities" -DATA_PLATFORM = f"homeassistant_scene" +DATA_PLATFORM = "homeassistant_scene" STATES_SCHEMA = vol.All(dict, _convert_states) @@ -123,13 +124,11 @@ def scenes_with_entity(hass: HomeAssistant, entity_id: str) -> List[str]: platform = hass.data[DATA_PLATFORM] - results = [] - - for scene_entity in platform.entities.values(): - if entity_id in scene_entity.scene_config.states: - results.append(scene_entity.entity_id) - - return results + return [ + scene_entity.entity_id + for scene_entity in platform.entities.values() + if entity_id in scene_entity.scene_config.states + ] @callback @@ -171,7 +170,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= conf = await conf_util.async_process_component_config(hass, conf, integration) - if not conf or not platform: + if not (conf and platform): return await platform.async_reset() @@ -189,15 +188,30 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async def apply_service(call): """Apply a scene.""" + reproduce_options = {} + + if ATTR_TRANSITION in call.data: + reproduce_options[ATTR_TRANSITION] = call.data.get(ATTR_TRANSITION) + await async_reproduce_state( - hass, call.data[CONF_ENTITIES].values(), blocking=True, context=call.context + hass, + call.data[CONF_ENTITIES].values(), + context=call.context, + reproduce_options=reproduce_options, ) hass.services.async_register( SCENE_DOMAIN, SERVICE_APPLY, apply_service, - vol.Schema({vol.Required(CONF_ENTITIES): STATES_SCHEMA}), + vol.Schema( + { + vol.Optional(ATTR_TRANSITION): vol.All( + vol.Coerce(float), vol.Clamp(min=0, max=6553) + ), + vol.Required(CONF_ENTITIES): STATES_SCHEMA, + } + ), ) async def create_service(call): @@ -289,11 +303,11 @@ class HomeAssistantScene(Scene): attributes[CONF_ID] = unique_id return attributes - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate scene. Try to get entities into requested state.""" await async_reproduce_state( self.hass, self.scene_config.states.values(), - blocking=True, context=self._context, + reproduce_options=kwargs, ) diff --git a/homeassistant/components/homeassistant/translations/af.json b/homeassistant/components/homeassistant/translations/af.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/bg.json b/homeassistant/components/homeassistant/translations/bg.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/ca.json b/homeassistant/components/homeassistant/translations/ca.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/cs.json b/homeassistant/components/homeassistant/translations/cs.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/cy.json b/homeassistant/components/homeassistant/translations/cy.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/da.json b/homeassistant/components/homeassistant/translations/da.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/de.json b/homeassistant/components/homeassistant/translations/de.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/el.json b/homeassistant/components/homeassistant/translations/el.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/en.json b/homeassistant/components/homeassistant/translations/en.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/es-419.json b/homeassistant/components/homeassistant/translations/es-419.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/es.json b/homeassistant/components/homeassistant/translations/es.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/et.json b/homeassistant/components/homeassistant/translations/et.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/eu.json b/homeassistant/components/homeassistant/translations/eu.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/fa.json b/homeassistant/components/homeassistant/translations/fa.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/fi.json b/homeassistant/components/homeassistant/translations/fi.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/fr.json b/homeassistant/components/homeassistant/translations/fr.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/he.json b/homeassistant/components/homeassistant/translations/he.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/hr.json b/homeassistant/components/homeassistant/translations/hr.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/hu.json b/homeassistant/components/homeassistant/translations/hu.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/hy.json b/homeassistant/components/homeassistant/translations/hy.json new file mode 100644 index 00000000000..d4578360f53 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u054f\u0576\u0561\u0575\u056b\u0576 \u0585\u0563\u0576\u0561\u056f\u0561\u0576" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/is.json b/homeassistant/components/homeassistant/translations/is.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/it.json b/homeassistant/components/homeassistant/translations/it.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/ko.json b/homeassistant/components/homeassistant/translations/ko.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/lb.json b/homeassistant/components/homeassistant/translations/lb.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/lt.json b/homeassistant/components/homeassistant/translations/lt.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/lt.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/lv.json b/homeassistant/components/homeassistant/translations/lv.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/nb.json b/homeassistant/components/homeassistant/translations/nb.json new file mode 100644 index 00000000000..d8a4c453015 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/nl.json b/homeassistant/components/homeassistant/translations/nl.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/nn.json b/homeassistant/components/homeassistant/translations/nn.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/no.json b/homeassistant/components/homeassistant/translations/no.json new file mode 100644 index 00000000000..774c815a5c2 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistent" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/pl.json b/homeassistant/components/homeassistant/translations/pl.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/pt-BR.json b/homeassistant/components/homeassistant/translations/pt-BR.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/pt.json b/homeassistant/components/homeassistant/translations/pt.json new file mode 100644 index 00000000000..d8a4c453015 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/ro.json b/homeassistant/components/homeassistant/translations/ro.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/ru.json b/homeassistant/components/homeassistant/translations/ru.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/sk.json b/homeassistant/components/homeassistant/translations/sk.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/sl.json b/homeassistant/components/homeassistant/translations/sl.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/sv.json b/homeassistant/components/homeassistant/translations/sv.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/th.json b/homeassistant/components/homeassistant/translations/th.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/tr.json b/homeassistant/components/homeassistant/translations/tr.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/uk.json b/homeassistant/components/homeassistant/translations/uk.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/vi.json b/homeassistant/components/homeassistant/translations/vi.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/zh-Hans.json b/homeassistant/components/homeassistant/translations/zh-Hans.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homeassistant/translations/zh-Hant.json b/homeassistant/components/homeassistant/translations/zh-Hant.json new file mode 100644 index 00000000000..04b5b760f60 --- /dev/null +++ b/homeassistant/components/homeassistant/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "Home Assistant" +} \ No newline at end of file diff --git a/homeassistant/components/homekit/__init__.py b/homeassistant/components/homekit/__init__.py index 4fdad670f09..35620e9e11d 100644 --- a/homeassistant/components/homekit/__init__.py +++ b/homeassistant/components/homekit/__init__.py @@ -1,22 +1,29 @@ """Support for Apple HomeKit.""" import ipaddress import logging -from zlib import adler32 +from aiohttp import web import voluptuous as vol +from zeroconf import InterfaceChoice -from homeassistant.components import cover +from homeassistant.components import cover, vacuum +from homeassistant.components.binary_sensor import DEVICE_CLASS_BATTERY_CHARGING from homeassistant.components.cover import DEVICE_CLASS_GARAGE, DEVICE_CLASS_GATE +from homeassistant.components.http import HomeAssistantView from homeassistant.components.media_player import DEVICE_CLASS_TV from homeassistant.const import ( + ATTR_BATTERY_CHARGING, + ATTR_BATTERY_LEVEL, ATTR_DEVICE_CLASS, ATTR_ENTITY_ID, + ATTR_SERVICE, ATTR_SUPPORTED_FEATURES, ATTR_UNIT_OF_MEASUREMENT, CONF_IP_ADDRESS, CONF_NAME, CONF_PORT, CONF_TYPE, + DEVICE_CLASS_BATTERY, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_TEMPERATURE, @@ -26,27 +33,41 @@ from homeassistant.const import ( TEMP_FAHRENHEIT, UNIT_PERCENTAGE, ) +from homeassistant.core import callback +from homeassistant.exceptions import Unauthorized +from homeassistant.helpers import entity_registry import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entityfilter import FILTER_SCHEMA from homeassistant.util import get_local_ip from homeassistant.util.decorator import Registry +from .aidmanager import AccessoryAidStorage from .const import ( + AID_STORAGE, + ATTR_DISPLAY_NAME, + ATTR_VALUE, BRIDGE_NAME, CONF_ADVERTISE_IP, CONF_AUTO_START, CONF_ENTITY_CONFIG, CONF_FEATURE_LIST, CONF_FILTER, + CONF_LINKED_BATTERY_CHARGING_SENSOR, + CONF_LINKED_BATTERY_SENSOR, CONF_SAFE_MODE, + CONF_ZEROCONF_DEFAULT_INTERFACE, DEFAULT_AUTO_START, DEFAULT_PORT, DEFAULT_SAFE_MODE, + DEFAULT_ZEROCONF_DEFAULT_INTERFACE, DEVICE_CLASS_CO, DEVICE_CLASS_CO2, DEVICE_CLASS_PM25, DOMAIN, + EVENT_HOMEKIT_CHANGED, HOMEKIT_FILE, + HOMEKIT_PAIRING_QR, + HOMEKIT_PAIRING_QR_SECRET, SERVICE_HOMEKIT_RESET_ACCESSORY, SERVICE_HOMEKIT_START, TYPE_FAUCET, @@ -64,7 +85,7 @@ from .util import ( _LOGGER = logging.getLogger(__name__) -MAX_DEVICES = 100 +MAX_DEVICES = 150 TYPES = Registry() # #### Driver Status #### @@ -98,6 +119,10 @@ CONFIG_SCHEMA = vol.Schema( vol.Optional(CONF_SAFE_MODE, default=DEFAULT_SAFE_MODE): cv.boolean, vol.Optional(CONF_FILTER, default={}): FILTER_SCHEMA, vol.Optional(CONF_ENTITY_CONFIG, default={}): validate_entity_config, + vol.Optional( + CONF_ZEROCONF_DEFAULT_INTERFACE, + default=DEFAULT_ZEROCONF_DEFAULT_INTERFACE, + ): cv.boolean, } ) }, @@ -113,6 +138,11 @@ async def async_setup(hass, config): """Set up the HomeKit component.""" _LOGGER.debug("Begin setup HomeKit") + aid_storage = hass.data[AID_STORAGE] = AccessoryAidStorage(hass) + await aid_storage.async_initialize() + + hass.http.register_view(HomeKitPairingQRView) + conf = config[DOMAIN] name = conf[CONF_NAME] port = conf[CONF_PORT] @@ -122,6 +152,9 @@ async def async_setup(hass, config): safe_mode = conf[CONF_SAFE_MODE] entity_filter = conf[CONF_FILTER] entity_config = conf[CONF_ENTITY_CONFIG] + interface_choice = ( + InterfaceChoice.Default if conf.get(CONF_ZEROCONF_DEFAULT_INTERFACE) else None + ) homekit = HomeKit( hass, @@ -132,6 +165,7 @@ async def async_setup(hass, config): entity_config, safe_mode, advertise_ip, + interface_choice, ) await hass.async_add_executor_job(homekit.setup) @@ -154,11 +188,31 @@ async def async_setup(hass, config): schema=RESET_ACCESSORY_SERVICE_SCHEMA, ) + @callback + def async_describe_logbook_event(event): + """Describe a logbook event.""" + data = event.data + entity_id = data.get(ATTR_ENTITY_ID) + value = data.get(ATTR_VALUE) + + value_msg = f" to {value}" if value else "" + message = f"send command {data[ATTR_SERVICE]}{value_msg} for {data[ATTR_DISPLAY_NAME]}" + + return { + "name": "HomeKit", + "message": message, + "entity_id": entity_id, + } + + hass.components.logbook.async_describe_event( + DOMAIN, EVENT_HOMEKIT_CHANGED, async_describe_logbook_event + ) + if auto_start: - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, homekit.start) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, homekit.async_start) return True - def handle_homekit_service_start(service): + async def async_handle_homekit_service_start(service): """Handle start HomeKit service call.""" if homekit.status != STATUS_READY: _LOGGER.warning( @@ -166,10 +220,10 @@ async def async_setup(hass, config): "been stopped." ) return - homekit.start() + await homekit.async_start() hass.services.async_register( - DOMAIN, SERVICE_HOMEKIT_START, handle_homekit_service_start + DOMAIN, SERVICE_HOMEKIT_START, async_handle_homekit_service_start ) return True @@ -253,6 +307,13 @@ def get_accessory(hass, driver, state, aid, config): switch_type = config.get(CONF_TYPE, TYPE_SWITCH) a_type = SWITCH_TYPES[switch_type] + elif state.domain == "vacuum": + features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) + if features & (vacuum.SUPPORT_START | vacuum.SUPPORT_RETURN_HOME): + a_type = "DockVacuum" + else: + a_type = "Switch" + elif state.domain in ("automation", "input_boolean", "remote", "scene", "script"): a_type = "Switch" @@ -266,14 +327,6 @@ def get_accessory(hass, driver, state, aid, config): return TYPES[a_type](hass, driver, name, state.entity_id, aid, config) -def generate_aid(entity_id): - """Generate accessory aid with zlib adler32.""" - aid = adler32(entity_id.encode("utf-8")) - if aid in (0, 1): - return None - return aid - - class HomeKit: """Class to handle all actions between HomeKit and Home Assistant.""" @@ -287,6 +340,7 @@ class HomeKit: entity_config, safe_mode, advertise_ip=None, + interface_choice=None, ): """Initialize a HomeKit object.""" self.hass = hass @@ -297,6 +351,7 @@ class HomeKit: self._config = entity_config self._safe_mode = safe_mode self._advertise_ip = advertise_ip + self._interface_choice = interface_choice self.status = STATUS_READY self.bridge = None @@ -307,7 +362,7 @@ class HomeKit: # pylint: disable=import-outside-toplevel from .accessories import HomeBridge, HomeDriver - self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self.stop) + self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self.async_stop) ip_addr = self._ip_address or get_local_ip() path = self.hass.config.path(HOMEKIT_FILE) @@ -317,6 +372,7 @@ class HomeKit: port=self._port, persist_file=path, advertised_address=self._advertise_ip, + interface_choice=self._interface_choice, ) self.bridge = HomeBridge(self.hass, self.driver, self._name) if self._safe_mode: @@ -325,9 +381,10 @@ class HomeKit: def reset_accessories(self, entity_ids): """Reset the accessory to load the latest configuration.""" + aid_storage = self.hass.data[AID_STORAGE] removed = [] for entity_id in entity_ids: - aid = generate_aid(entity_id) + aid = aid_storage.get_or_allocate_aid_for_entity_id(entity_id) if aid not in self.bridge.accessories: _LOGGER.warning( "Could not reset accessory. entity_id not found %s", entity_id @@ -343,13 +400,33 @@ class HomeKit: def add_bridge_accessory(self, state): """Try adding accessory to bridge if configured beforehand.""" - if not state or not self._filter(state.entity_id): + if not self._filter(state.entity_id): return - aid = generate_aid(state.entity_id) + + # The bridge itself counts as an accessory + if len(self.bridge.accessories) + 1 >= MAX_DEVICES: + _LOGGER.warning( + "Cannot add %s as this would exceeded the %d device limit. Consider using the filter option.", + state.entity_id, + MAX_DEVICES, + ) + return + + aid = self.hass.data[AID_STORAGE].get_or_allocate_aid_for_entity_id( + state.entity_id + ) conf = self._config.pop(state.entity_id, {}) - acc = get_accessory(self.hass, self.driver, state, aid, conf) - if acc is not None: - self.bridge.add_accessory(acc) + # If an accessory cannot be created or added due to an exception + # of any kind (usually in pyhap) it should not prevent + # the rest of the accessories from being created + try: + acc = get_accessory(self.hass, self.driver, state, aid, conf) + if acc is not None: + self.bridge.add_accessory(acc) + except Exception: # pylint: disable=broad-except + _LOGGER.exception( + "Failed to create a HomeKit accessory for %s", state.entity_id + ) def remove_bridge_accessory(self, aid): """Try adding accessory to bridge if configured beforehand.""" @@ -358,12 +435,32 @@ class HomeKit: acc = self.bridge.accessories.pop(aid) return acc - def start(self, *args): + async def async_start(self, *args): """Start the accessory driver.""" if self.status != STATUS_READY: return self.status = STATUS_WAIT + ent_reg = await entity_registry.async_get_registry(self.hass) + + device_lookup = ent_reg.async_get_device_class_lookup( + { + ("binary_sensor", DEVICE_CLASS_BATTERY_CHARGING), + ("sensor", DEVICE_CLASS_BATTERY), + } + ) + + bridged_states = [] + for state in self.hass.states.async_all(): + if not self._filter(state.entity_id): + continue + + self._async_configure_linked_battery_sensors(ent_reg, device_lookup, state) + bridged_states.append(state) + + await self.hass.async_add_executor_job(self._start, bridged_states) + + def _start(self, bridged_states): from . import ( # noqa: F401 pylint: disable=unused-import, import-outside-toplevel type_covers, type_fans, @@ -376,28 +473,75 @@ class HomeKit: type_thermostats, ) - for state in self.hass.states.all(): + for state in bridged_states: self.add_bridge_accessory(state) + self.driver.add_accessory(self.bridge) if not self.driver.state.paired: - show_setup_message(self.hass, self.driver.state.pincode) - - if len(self.bridge.accessories) > MAX_DEVICES: - _LOGGER.warning( - "You have exceeded the device limit, which might " - "cause issues. Consider using the filter option." + show_setup_message( + self.hass, self.driver.state.pincode, self.bridge.xhm_uri() ) _LOGGER.debug("Driver start") - self.hass.add_job(self.driver.start) + self.hass.async_add_executor_job(self.driver.start) self.status = STATUS_RUNNING - def stop(self, *args): + async def async_stop(self, *args): """Stop the accessory driver.""" if self.status != STATUS_RUNNING: return self.status = STATUS_STOPPED _LOGGER.debug("Driver stop") - self.hass.add_job(self.driver.stop) + self.hass.async_add_executor_job(self.driver.stop) + + @callback + def _async_configure_linked_battery_sensors(self, ent_reg, device_lookup, state): + entry = ent_reg.async_get(state.entity_id) + + if ( + entry is None + or entry.device_id is None + or entry.device_id not in device_lookup + or entry.device_class + in (DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_BATTERY) + ): + return + + if ATTR_BATTERY_CHARGING not in state.attributes: + battery_charging_binary_sensor_entity_id = device_lookup[ + entry.device_id + ].get(("binary_sensor", DEVICE_CLASS_BATTERY_CHARGING)) + if battery_charging_binary_sensor_entity_id: + self._config.setdefault(state.entity_id, {}).setdefault( + CONF_LINKED_BATTERY_CHARGING_SENSOR, + battery_charging_binary_sensor_entity_id, + ) + + if ATTR_BATTERY_LEVEL not in state.attributes: + battery_sensor_entity_id = device_lookup[entry.device_id].get( + ("sensor", DEVICE_CLASS_BATTERY) + ) + if battery_sensor_entity_id: + self._config.setdefault(state.entity_id, {}).setdefault( + CONF_LINKED_BATTERY_SENSOR, battery_sensor_entity_id + ) + + +class HomeKitPairingQRView(HomeAssistantView): + """Display the homekit pairing code at a protected url.""" + + url = "/api/homekit/pairingqr" + name = "api:homekit:pairingqr" + requires_auth = False + + # pylint: disable=no-self-use + async def get(self, request): + """Retrieve the pairing QRCode image.""" + if request.query_string != request.app["hass"].data[HOMEKIT_PAIRING_QR_SECRET]: + raise Unauthorized() + return web.Response( + body=request.app["hass"].data[HOMEKIT_PAIRING_QR], + content_type="image/svg+xml", + ) diff --git a/homeassistant/components/homekit/accessories.py b/homeassistant/components/homekit/accessories.py index ddcc795d262..a18f42e76b6 100644 --- a/homeassistant/components/homekit/accessories.py +++ b/homeassistant/components/homekit/accessories.py @@ -13,6 +13,7 @@ from homeassistant.const import ( ATTR_BATTERY_LEVEL, ATTR_ENTITY_ID, ATTR_SERVICE, + STATE_ON, __version__, ) from homeassistant.core import callback as ha_callback, split_entity_id @@ -30,11 +31,15 @@ from .const import ( CHAR_BATTERY_LEVEL, CHAR_CHARGING_STATE, CHAR_STATUS_LOW_BATTERY, + CONF_LINKED_BATTERY_CHARGING_SENSOR, CONF_LINKED_BATTERY_SENSOR, CONF_LOW_BATTERY_THRESHOLD, DEBOUNCE_TIMEOUT, DEFAULT_LOW_BATTERY_THRESHOLD, EVENT_HOMEKIT_CHANGED, + HK_CHARGING, + HK_NOT_CHARGABLE, + HK_NOT_CHARGING, MANUFACTURER, SERV_BATTERY_SERVICE, ) @@ -94,17 +99,17 @@ class HomeAccessory(Accessory): self.entity_id = entity_id self.hass = hass self.debounce = {} - self._support_battery_level = False - self._support_battery_charging = True self.linked_battery_sensor = self.config.get(CONF_LINKED_BATTERY_SENSOR) + self.linked_battery_charging_sensor = self.config.get( + CONF_LINKED_BATTERY_CHARGING_SENSOR + ) self.low_battery_threshold = self.config.get( CONF_LOW_BATTERY_THRESHOLD, DEFAULT_LOW_BATTERY_THRESHOLD ) """Add battery service if available""" - battery_found = self.hass.states.get(self.entity_id).attributes.get( - ATTR_BATTERY_LEVEL - ) + entity_attributes = self.hass.states.get(self.entity_id).attributes + battery_found = entity_attributes.get(ATTR_BATTERY_LEVEL) if self.linked_battery_sensor: state = self.hass.states.get(self.linked_battery_sensor) @@ -118,13 +123,28 @@ class HomeAccessory(Accessory): self.linked_battery_sensor, ) - if battery_found is None: + if not battery_found: return + _LOGGER.debug("%s: Found battery level", self.entity_id) - self._support_battery_level = True + + if self.linked_battery_charging_sensor: + state = self.hass.states.get(self.linked_battery_charging_sensor) + if state is None: + self.linked_battery_charging_sensor = None + _LOGGER.warning( + "%s: Battery charging binary_sensor state missing: %s", + self.entity_id, + self.linked_battery_charging_sensor, + ) + else: + _LOGGER.debug("%s: Found battery charging", self.entity_id) + serv_battery = self.add_preload_service(SERV_BATTERY_SERVICE) self._char_battery = serv_battery.configure_char(CHAR_BATTERY_LEVEL, value=0) - self._char_charging = serv_battery.configure_char(CHAR_CHARGING_STATE, value=2) + self._char_charging = serv_battery.configure_char( + CHAR_CHARGING_STATE, value=HK_NOT_CHARGABLE + ) self._char_low_battery = serv_battery.configure_char( CHAR_STATUS_LOW_BATTERY, value=0 ) @@ -142,17 +162,41 @@ class HomeAccessory(Accessory): Run inside the Home Assistant event loop. """ state = self.hass.states.get(self.entity_id) - self.hass.async_add_job(self.update_state_callback, None, None, state) + self.hass.async_add_executor_job(self.update_state_callback, None, None, state) async_track_state_change(self.hass, self.entity_id, self.update_state_callback) + battery_charging_state = None + battery_state = None if self.linked_battery_sensor: - battery_state = self.hass.states.get(self.linked_battery_sensor) - self.hass.async_add_job( - self.update_linked_battery, None, None, battery_state + linked_battery_sensor_state = self.hass.states.get( + self.linked_battery_sensor + ) + battery_state = linked_battery_sensor_state.state + battery_charging_state = linked_battery_sensor_state.attributes.get( + ATTR_BATTERY_CHARGING ) async_track_state_change( self.hass, self.linked_battery_sensor, self.update_linked_battery ) + else: + battery_state = state.attributes.get(ATTR_BATTERY_LEVEL) + if self.linked_battery_charging_sensor: + battery_charging_state = ( + self.hass.states.get(self.linked_battery_charging_sensor).state + == STATE_ON + ) + async_track_state_change( + self.hass, + self.linked_battery_charging_sensor, + self.update_linked_battery_charging, + ) + elif battery_charging_state is None: + battery_charging_state = state.attributes.get(ATTR_BATTERY_CHARGING) + + if battery_state is not None or battery_charging_state is not None: + self.hass.async_add_executor_job( + self.update_battery, battery_state, battery_charging_state + ) @ha_callback def update_state_callback(self, entity_id=None, old_state=None, new_state=None): @@ -160,37 +204,69 @@ class HomeAccessory(Accessory): _LOGGER.debug("New_state: %s", new_state) if new_state is None: return - if self._support_battery_level and not self.linked_battery_sensor: - self.hass.async_add_executor_job(self.update_battery, new_state) + battery_state = None + battery_charging_state = None + if ( + not self.linked_battery_sensor + and ATTR_BATTERY_LEVEL in new_state.attributes + ): + battery_state = new_state.attributes.get(ATTR_BATTERY_LEVEL) + if ( + not self.linked_battery_charging_sensor + and ATTR_BATTERY_CHARGING in new_state.attributes + ): + battery_charging_state = new_state.attributes.get(ATTR_BATTERY_CHARGING) + if battery_state is not None or battery_charging_state is not None: + self.hass.async_add_executor_job( + self.update_battery, battery_state, battery_charging_state + ) self.hass.async_add_executor_job(self.update_state, new_state) @ha_callback def update_linked_battery(self, entity_id=None, old_state=None, new_state=None): """Handle linked battery sensor state change listener callback.""" - self.hass.async_add_executor_job(self.update_battery, new_state) + if self.linked_battery_charging_sensor: + battery_charging_state = None + else: + battery_charging_state = new_state.attributes.get(ATTR_BATTERY_CHARGING) + self.hass.async_add_executor_job( + self.update_battery, new_state.state, battery_charging_state, + ) - def update_battery(self, new_state): + @ha_callback + def update_linked_battery_charging( + self, entity_id=None, old_state=None, new_state=None + ): + """Handle linked battery charging sensor state change listener callback.""" + self.hass.async_add_executor_job( + self.update_battery, None, new_state.state == STATE_ON + ) + + def update_battery(self, battery_level, battery_charging): """Update battery service if available. Only call this function if self._support_battery_level is True. """ - battery_level = convert_to_float(new_state.attributes.get(ATTR_BATTERY_LEVEL)) - if self.linked_battery_sensor: - battery_level = convert_to_float(new_state.state) - if battery_level is None: + battery_level = convert_to_float(battery_level) + if battery_level is not None: + if self._char_battery.value != battery_level: + self._char_battery.set_value(battery_level) + is_low_battery = 1 if battery_level < self.low_battery_threshold else 0 + if self._char_low_battery.value != is_low_battery: + self._char_low_battery.set_value(is_low_battery) + _LOGGER.debug( + "%s: Updated battery level to %d", self.entity_id, battery_level + ) + + if battery_charging is None: return - self._char_battery.set_value(battery_level) - self._char_low_battery.set_value(battery_level < self.low_battery_threshold) - _LOGGER.debug("%s: Updated battery level to %d", self.entity_id, battery_level) - if not self._support_battery_charging: - return - charging = new_state.attributes.get(ATTR_BATTERY_CHARGING) - if charging is None: - self._support_battery_charging = False - return - hk_charging = 1 if charging is True else 0 - self._char_charging.set_value(hk_charging) - _LOGGER.debug("%s: Updated battery charging to %d", self.entity_id, hk_charging) + + hk_charging = HK_CHARGING if battery_charging else HK_NOT_CHARGING + if self._char_charging.value != hk_charging: + self._char_charging.set_value(hk_charging) + _LOGGER.debug( + "%s: Updated battery charging to %d", self.entity_id, hk_charging + ) def update_state(self, new_state): """Handle state change to update HomeKit value. @@ -235,7 +311,6 @@ class HomeBridge(Bridge): def setup_message(self): """Prevent print of pyhap setup message to terminal.""" - pass class HomeDriver(AccessoryDriver): @@ -256,4 +331,4 @@ class HomeDriver(AccessoryDriver): def unpair(self, client_uuid): """Override super function to show setup message if unpaired.""" super().unpair(client_uuid) - show_setup_message(self.hass, self.state.pincode) + show_setup_message(self.hass, self.state.pincode, self.accessory.xhm_uri()) diff --git a/homeassistant/components/homekit/aidmanager.py b/homeassistant/components/homekit/aidmanager.py new file mode 100644 index 00000000000..95181114e79 --- /dev/null +++ b/homeassistant/components/homekit/aidmanager.py @@ -0,0 +1,160 @@ +""" +Manage allocation of accessory ID's. + +HomeKit needs to allocate unique numbers to each accessory. These need to +be stable between reboots and upgrades. + +Using a hash function to generate them means collisions. It also means you +can't change the hash without causing breakages for HA users. + +This module generates and stores them in a HA storage. +""" +import logging +import random +from zlib import adler32 + +from fnvhash import fnv1a_32 + +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.entity_registry import RegistryEntry +from homeassistant.helpers.storage import Store + +from .const import DOMAIN + +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 +AID_MAX = 18446744073709551615 + +_LOGGER = logging.getLogger(__name__) + + +def get_system_unique_id(entity: RegistryEntry): + """Determine the system wide unique_id for an entity.""" + return f"{entity.platform}.{entity.domain}.{entity.unique_id}" + + +def _generate_aids(unique_id: str, entity_id: str) -> int: + """Generate accessory aid.""" + + # Backward compatibility: Previously HA used to *only* do adler32 on the entity id. + # Not stable if entity ID changes + # Not robust against collisions + yield adler32(entity_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 + # But try a few times regardless + for _ in range(5): + yield random.randrange(AID_MIN, AID_MAX) + + +class AccessoryAidStorage: + """ + Holds a map of entity ID to HomeKit ID. + + Will generate new ID's, ensure they are unique and store them to make sure they + persist over reboots. + """ + + def __init__(self, hass: HomeAssistant): + """Create a new entity map store.""" + self.hass = hass + self.store = Store(hass, AID_MANAGER_STORAGE_VERSION, AID_MANAGER_STORAGE_KEY) + self.allocations = {} + self.allocated_aids = set() + + self._entity_registry = None + + async def async_initialize(self): + """Load the latest AID data.""" + self._entity_registry = ( + await self.hass.helpers.entity_registry.async_get_registry() + ) + + raw_storage = await self.store.async_load() + if not raw_storage: + # There is no data about aid allocations yet + return + + # 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) + + 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.""" + # 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[storage_key] = aid + self.allocated_aids.add(aid) + self.async_schedule_save() + return aid + + raise ValueError( + f"Unable to generate unique aid allocation for {entity_id} [{unique_id}]" + ) + + def delete_aid(self, storage_key: str): + """Delete an aid allocation.""" + if storage_key not in self.allocations: + return + + aid = self.allocations.pop(storage_key) + self.allocated_aids.discard(aid) + self.async_schedule_save() + + @callback + def async_schedule_save(self): + """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 {ALLOCATIONS_KEY: self.allocations} diff --git a/homeassistant/components/homekit/const.py b/homeassistant/components/homekit/const.py index c0f0abe8177..f0224ce71f4 100644 --- a/homeassistant/components/homekit/const.py +++ b/homeassistant/components/homekit/const.py @@ -5,7 +5,9 @@ DEVICE_PRECISION_LEEWAY = 6 DOMAIN = "homekit" HOMEKIT_FILE = ".homekit.state" HOMEKIT_NOTIFY_ID = 4663548 - +AID_STORAGE = "homekit-aid-allocations" +HOMEKIT_PAIRING_QR = "homekit-pairing-qr" +HOMEKIT_PAIRING_QR_SECRET = "homekit-pairing-qr-secret" # #### Attributes #### ATTR_DISPLAY_NAME = "display_name" @@ -19,14 +21,17 @@ CONF_FEATURE = "feature" CONF_FEATURE_LIST = "feature_list" CONF_FILTER = "filter" CONF_LINKED_BATTERY_SENSOR = "linked_battery_sensor" +CONF_LINKED_BATTERY_CHARGING_SENSOR = "linked_battery_charging_sensor" CONF_LOW_BATTERY_THRESHOLD = "low_battery_threshold" CONF_SAFE_MODE = "safe_mode" +CONF_ZEROCONF_DEFAULT_INTERFACE = "zeroconf_default_interface" # #### Config Defaults #### DEFAULT_AUTO_START = True DEFAULT_LOW_BATTERY_THRESHOLD = 20 DEFAULT_PORT = 51827 DEFAULT_SAFE_MODE = False +DEFAULT_ZEROCONF_DEFAULT_INTERFACE = False # #### Features #### FEATURE_ON_OFF = "on_off" @@ -146,6 +151,7 @@ CHAR_TARGET_HUMIDITY = "TargetRelativeHumidity" CHAR_TARGET_SECURITY_STATE = "SecuritySystemTargetState" CHAR_TARGET_TEMPERATURE = "TargetTemperature" CHAR_TARGET_TILT_ANGLE = "TargetHorizontalTiltAngle" +CHAR_HOLD_POSITION = "HoldPosition" CHAR_TEMP_DISPLAY_UNITS = "TemperatureDisplayUnits" CHAR_VALVE_TYPE = "ValveType" CHAR_VOLUME = "Volume" @@ -180,3 +186,20 @@ THRESHOLD_CO2 = 1000 # #### Default values #### DEFAULT_MIN_TEMP_WATER_HEATER = 40 # °C DEFAULT_MAX_TEMP_WATER_HEATER = 60 # °C + +# #### Door states #### +HK_DOOR_OPEN = 0 +HK_DOOR_CLOSED = 1 +HK_DOOR_OPENING = 2 +HK_DOOR_CLOSING = 3 +HK_DOOR_STOPPED = 4 + +# ### Position State #### +HK_POSITION_GOING_TO_MIN = 0 +HK_POSITION_GOING_TO_MAX = 1 +HK_POSITION_STOPPED = 2 + +# ### Charging State ### +HK_NOT_CHARGING = 0 +HK_CHARGING = 1 +HK_NOT_CHARGABLE = 2 diff --git a/homeassistant/components/homekit/manifest.json b/homeassistant/components/homekit/manifest.json index d80fd3c5338..482cef57ca7 100644 --- a/homeassistant/components/homekit/manifest.json +++ b/homeassistant/components/homekit/manifest.json @@ -2,6 +2,8 @@ "domain": "homekit", "name": "HomeKit", "documentation": "https://www.home-assistant.io/integrations/homekit", - "requirements": ["HAP-python==2.8.2"], - "codeowners": [] + "requirements": ["HAP-python==2.8.2","fnvhash==0.1.0","PyQRCode==1.2.1","base36==0.1.1"], + "dependencies": ["http"], + "after_dependencies": ["logbook"], + "codeowners": ["@bdraco"] } diff --git a/homeassistant/components/homekit/services.yaml b/homeassistant/components/homekit/services.yaml index e30e71301b3..b33ba642c8d 100644 --- a/homeassistant/components/homekit/services.yaml +++ b/homeassistant/components/homekit/services.yaml @@ -1,4 +1,11 @@ # Describes the format for available HomeKit services start: - description: Starts the HomeKit component driver. + description: Starts the HomeKit driver. + +reset_accessory: + description: Reset a HomeKit accessory. This can be useful when changing a media_player’s device class to tv, linking a battery, or whenever Home Assistant adds support for new HomeKit features to existing entities. + fields: + entity_id: + description: Name of the entity to reset. + example: "binary_sensor.grid_status" diff --git a/homeassistant/components/homekit/type_covers.py b/homeassistant/components/homekit/type_covers.py index 97940952171..987ba900bc8 100644 --- a/homeassistant/components/homekit/type_covers.py +++ b/homeassistant/components/homekit/type_covers.py @@ -32,15 +32,44 @@ from .const import ( CHAR_CURRENT_DOOR_STATE, CHAR_CURRENT_POSITION, CHAR_CURRENT_TILT_ANGLE, + CHAR_HOLD_POSITION, CHAR_POSITION_STATE, CHAR_TARGET_DOOR_STATE, CHAR_TARGET_POSITION, CHAR_TARGET_TILT_ANGLE, DEVICE_PRECISION_LEEWAY, + HK_DOOR_CLOSED, + HK_DOOR_CLOSING, + HK_DOOR_OPEN, + HK_DOOR_OPENING, + HK_POSITION_GOING_TO_MAX, + HK_POSITION_GOING_TO_MIN, + HK_POSITION_STOPPED, SERV_GARAGE_DOOR_OPENER, SERV_WINDOW_COVERING, ) +DOOR_CURRENT_HASS_TO_HK = { + STATE_OPEN: HK_DOOR_OPEN, + STATE_CLOSED: HK_DOOR_CLOSED, + STATE_OPENING: HK_DOOR_OPENING, + STATE_CLOSING: HK_DOOR_CLOSING, +} + +# HomeKit only has two states for +# Target Door State: +# 0: Open +# 1: Closed +# Opening is mapped to 0 since the target is Open +# Closing is mapped to 1 since the target is Closed +DOOR_TARGET_HASS_TO_HK = { + STATE_OPEN: HK_DOOR_OPEN, + STATE_CLOSED: HK_DOOR_CLOSED, + STATE_OPENING: HK_DOOR_OPEN, + STATE_CLOSING: HK_DOOR_CLOSED, +} + + _LOGGER = logging.getLogger(__name__) @@ -55,7 +84,7 @@ class GarageDoorOpener(HomeAccessory): def __init__(self, *args): """Initialize a GarageDoorOpener accessory object.""" super().__init__(*args, category=CATEGORY_GARAGE_DOOR_OPENER) - self._flag_state = False + state = self.hass.states.get(self.entity_id) serv_garage_door = self.add_preload_service(SERV_GARAGE_DOOR_OPENER) self.char_current_state = serv_garage_door.configure_char( @@ -64,74 +93,83 @@ class GarageDoorOpener(HomeAccessory): self.char_target_state = serv_garage_door.configure_char( CHAR_TARGET_DOOR_STATE, value=0, setter_callback=self.set_state ) + self.update_state(state) def set_state(self, value): """Change garage state if call came from HomeKit.""" _LOGGER.debug("%s: Set state to %d", self.entity_id, value) - self._flag_state = True params = {ATTR_ENTITY_ID: self.entity_id} - if value == 0: + if value == HK_DOOR_OPEN: if self.char_current_state.value != value: - self.char_current_state.set_value(3) + self.char_current_state.set_value(HK_DOOR_OPENING) self.call_service(DOMAIN, SERVICE_OPEN_COVER, params) - elif value == 1: + elif value == HK_DOOR_CLOSED: if self.char_current_state.value != value: - self.char_current_state.set_value(2) + self.char_current_state.set_value(HK_DOOR_CLOSING) self.call_service(DOMAIN, SERVICE_CLOSE_COVER, params) def update_state(self, new_state): """Update cover state after state changed.""" hass_state = new_state.state - if hass_state in (STATE_OPEN, STATE_CLOSED): - current_state = 0 if hass_state == STATE_OPEN else 1 - self.char_current_state.set_value(current_state) - if not self._flag_state: - self.char_target_state.set_value(current_state) - self._flag_state = False + target_door_state = DOOR_TARGET_HASS_TO_HK.get(hass_state) + current_door_state = DOOR_CURRENT_HASS_TO_HK.get(hass_state) + + if ( + target_door_state is not None + and self.char_target_state.value != target_door_state + ): + self.char_target_state.set_value(target_door_state) + if ( + current_door_state is not None + and self.char_current_state.value != current_door_state + ): + self.char_current_state.set_value(current_door_state) -@TYPES.register("WindowCovering") -class WindowCovering(HomeAccessory): - """Generate a Window accessory for a cover entity. +class WindowCoveringBase(HomeAccessory): + """Generate a base Window accessory for a cover entity. - The cover entity must support: set_cover_position. + This class is used for WindowCoveringBasic and + WindowCovering """ - def __init__(self, *args): - """Initialize a WindowCovering accessory object.""" + def __init__(self, *args, category): + """Initialize a WindowCoveringBase accessory object.""" super().__init__(*args, category=CATEGORY_WINDOW_COVERING) + state = self.hass.states.get(self.entity_id) - self._homekit_target = None + self.features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) + self._supports_stop = self.features & SUPPORT_STOP self._homekit_target_tilt = None + self.chars = [] + if self._supports_stop: + self.chars.append(CHAR_HOLD_POSITION) + self._supports_tilt = self.features & SUPPORT_SET_TILT_POSITION - serv_cover = self.add_preload_service( - SERV_WINDOW_COVERING, - chars=[CHAR_TARGET_TILT_ANGLE, CHAR_CURRENT_TILT_ANGLE], - ) - - features = self.hass.states.get(self.entity_id).attributes.get( - ATTR_SUPPORTED_FEATURES, 0 - ) - - self._supports_tilt = features & SUPPORT_SET_TILT_POSITION if self._supports_tilt: - self.char_target_tilt = serv_cover.configure_char( + self.chars.extend([CHAR_TARGET_TILT_ANGLE, CHAR_CURRENT_TILT_ANGLE]) + + self.serv_cover = self.add_preload_service(SERV_WINDOW_COVERING, self.chars) + + if self._supports_stop: + self.char_hold_position = self.serv_cover.configure_char( + CHAR_HOLD_POSITION, setter_callback=self.set_stop + ) + + if self._supports_tilt: + self.char_target_tilt = self.serv_cover.configure_char( CHAR_TARGET_TILT_ANGLE, setter_callback=self.set_tilt ) - self.char_current_tilt = serv_cover.configure_char( + self.char_current_tilt = self.serv_cover.configure_char( CHAR_CURRENT_TILT_ANGLE, value=0 ) - self.char_current_position = serv_cover.configure_char( - CHAR_CURRENT_POSITION, value=0 - ) - self.char_target_position = serv_cover.configure_char( - CHAR_TARGET_POSITION, value=0, setter_callback=self.move_cover - ) - self.char_position_state = serv_cover.configure_char( - CHAR_POSITION_STATE, value=2 - ) + def set_stop(self, value): + """Stop the cover motion from HomeKit.""" + if value != 1: + return + self.call_service(DOMAIN, SERVICE_STOP_COVER, {ATTR_ENTITY_ID: self.entity_id}) @debounce def set_tilt(self, value): @@ -147,6 +185,54 @@ class WindowCovering(HomeAccessory): self.call_service(DOMAIN, SERVICE_SET_COVER_TILT_POSITION, params, value) + def update_state(self, new_state): + """Update cover position and tilt after state changed.""" + # update tilt + current_tilt = new_state.attributes.get(ATTR_CURRENT_TILT_POSITION) + if isinstance(current_tilt, (float, int)): + # HomeKit sends values between -90 and 90. + # We'll have to normalize to [0,100] + current_tilt = (current_tilt / 100.0 * 180.0) - 90.0 + current_tilt = int(current_tilt) + if self.char_current_tilt.value != current_tilt: + self.char_current_tilt.set_value(current_tilt) + + # We have to assume that the device has worse precision than HomeKit. + # If it reports back a state that is only _close_ to HK's requested + # state, we'll "fix" what HomeKit requested so that it won't appear + # out of sync. + if self._homekit_target_tilt is None or abs( + current_tilt - self._homekit_target_tilt < DEVICE_PRECISION_LEEWAY + ): + if self.char_target_tilt.value != current_tilt: + self.char_target_tilt.set_value(current_tilt) + self._homekit_target_tilt = None + + +@TYPES.register("WindowCovering") +class WindowCovering(WindowCoveringBase, HomeAccessory): + """Generate a Window accessory for a cover entity. + + The cover entity must support: set_cover_position. + """ + + def __init__(self, *args): + """Initialize a WindowCovering accessory object.""" + super().__init__(*args, category=CATEGORY_WINDOW_COVERING) + state = self.hass.states.get(self.entity_id) + self._homekit_target = None + + self.char_current_position = self.serv_cover.configure_char( + CHAR_CURRENT_POSITION, value=0 + ) + self.char_target_position = self.serv_cover.configure_char( + CHAR_TARGET_POSITION, value=0, setter_callback=self.move_cover + ) + self.char_position_state = self.serv_cover.configure_char( + CHAR_POSITION_STATE, value=HK_POSITION_STOPPED + ) + self.update_state(state) + @debounce def move_cover(self, value): """Move cover to value if call came from HomeKit.""" @@ -161,7 +247,8 @@ class WindowCovering(HomeAccessory): current_position = new_state.attributes.get(ATTR_CURRENT_POSITION) if isinstance(current_position, (float, int)): current_position = int(current_position) - self.char_current_position.set_value(current_position) + if self.char_current_position.value != current_position: + self.char_current_position.set_value(current_position) # We have to assume that the device has worse precision than HomeKit. # If it reports back a state that is only _close_ to HK's requested @@ -172,37 +259,24 @@ class WindowCovering(HomeAccessory): or abs(current_position - self._homekit_target) < DEVICE_PRECISION_LEEWAY ): - self.char_target_position.set_value(current_position) + if self.char_target_position.value != current_position: + self.char_target_position.set_value(current_position) self._homekit_target = None if new_state.state == STATE_OPENING: - self.char_position_state.set_value(1) + if self.char_position_state.value != HK_POSITION_GOING_TO_MAX: + self.char_position_state.set_value(HK_POSITION_GOING_TO_MAX) elif new_state.state == STATE_CLOSING: - self.char_position_state.set_value(0) + if self.char_position_state.value != HK_POSITION_GOING_TO_MIN: + self.char_position_state.set_value(HK_POSITION_GOING_TO_MIN) else: - self.char_position_state.set_value(2) + if self.char_position_state.value != HK_POSITION_STOPPED: + self.char_position_state.set_value(HK_POSITION_STOPPED) - # update tilt - current_tilt = new_state.attributes.get(ATTR_CURRENT_TILT_POSITION) - if isinstance(current_tilt, (float, int)): - # HomeKit sends values between -90 and 90. - # We'll have to normalize to [0,100] - current_tilt = (current_tilt / 100.0 * 180.0) - 90.0 - current_tilt = int(current_tilt) - self.char_current_tilt.set_value(current_tilt) - - # We have to assume that the device has worse precision than HomeKit. - # If it reports back a state that is only _close_ to HK's requested - # state, we'll "fix" what HomeKit requested so that it won't appear - # out of sync. - if self._homekit_target_tilt is None or abs( - current_tilt - self._homekit_target_tilt < DEVICE_PRECISION_LEEWAY - ): - self.char_target_tilt.set_value(current_tilt) - self._homekit_target_tilt = None + super().update_state(new_state) @TYPES.register("WindowCoveringBasic") -class WindowCoveringBasic(HomeAccessory): +class WindowCoveringBasic(WindowCoveringBase, HomeAccessory): """Generate a Window accessory for a cover entity. The cover entity must support: open_cover, close_cover, @@ -212,21 +286,17 @@ class WindowCoveringBasic(HomeAccessory): def __init__(self, *args): """Initialize a WindowCovering accessory object.""" super().__init__(*args, category=CATEGORY_WINDOW_COVERING) - features = self.hass.states.get(self.entity_id).attributes.get( - ATTR_SUPPORTED_FEATURES - ) - self._supports_stop = features & SUPPORT_STOP - - serv_cover = self.add_preload_service(SERV_WINDOW_COVERING) - self.char_current_position = serv_cover.configure_char( + state = self.hass.states.get(self.entity_id) + self.char_current_position = self.serv_cover.configure_char( CHAR_CURRENT_POSITION, value=0 ) - self.char_target_position = serv_cover.configure_char( + self.char_target_position = self.serv_cover.configure_char( CHAR_TARGET_POSITION, value=0, setter_callback=self.move_cover ) - self.char_position_state = serv_cover.configure_char( - CHAR_POSITION_STATE, value=2 + self.char_position_state = self.serv_cover.configure_char( + CHAR_POSITION_STATE, value=HK_POSITION_STOPPED ) + self.update_state(state) @debounce def move_cover(self, value): @@ -258,11 +328,18 @@ class WindowCoveringBasic(HomeAccessory): position_mapping = {STATE_OPEN: 100, STATE_CLOSED: 0} hk_position = position_mapping.get(new_state.state) if hk_position is not None: - self.char_current_position.set_value(hk_position) - self.char_target_position.set_value(hk_position) + if self.char_current_position.value != hk_position: + self.char_current_position.set_value(hk_position) + if self.char_target_position.value != hk_position: + self.char_target_position.set_value(hk_position) if new_state.state == STATE_OPENING: - self.char_position_state.set_value(1) + if self.char_position_state.value != HK_POSITION_GOING_TO_MAX: + self.char_position_state.set_value(HK_POSITION_GOING_TO_MAX) elif new_state.state == STATE_CLOSING: - self.char_position_state.set_value(0) + if self.char_position_state.value != HK_POSITION_GOING_TO_MIN: + self.char_position_state.set_value(HK_POSITION_GOING_TO_MIN) else: - self.char_position_state.set_value(2) + if self.char_position_state.value != HK_POSITION_STOPPED: + self.char_position_state.set_value(HK_POSITION_STOPPED) + + super().update_state(new_state) diff --git a/homeassistant/components/homekit/type_fans.py b/homeassistant/components/homekit/type_fans.py index e6d128d1e28..9167c8fcf5d 100644 --- a/homeassistant/components/homekit/type_fans.py +++ b/homeassistant/components/homekit/type_fans.py @@ -28,7 +28,7 @@ from homeassistant.const import ( ) from . import TYPES -from .accessories import HomeAccessory, debounce +from .accessories import HomeAccessory from .const import ( CHAR_ACTIVE, CHAR_ROTATION_DIRECTION, @@ -51,17 +51,11 @@ class Fan(HomeAccessory): def __init__(self, *args): """Initialize a new Light accessory object.""" super().__init__(*args, category=CATEGORY_FAN) - self._flag = { - CHAR_ACTIVE: False, - CHAR_ROTATION_DIRECTION: False, - CHAR_SWING_MODE: False, - } - self._state = 0 - chars = [] - features = self.hass.states.get(self.entity_id).attributes.get( - ATTR_SUPPORTED_FEATURES - ) + state = self.hass.states.get(self.entity_id) + + features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) + if features & SUPPORT_DIRECTION: chars.append(CHAR_ROTATION_DIRECTION) if features & SUPPORT_OSCILLATE: @@ -74,9 +68,7 @@ class Fan(HomeAccessory): chars.append(CHAR_ROTATION_SPEED) serv_fan = self.add_preload_service(SERV_FANV2, chars) - self.char_active = serv_fan.configure_char( - CHAR_ACTIVE, value=0, setter_callback=self.set_state - ) + self.char_active = serv_fan.configure_char(CHAR_ACTIVE, value=0) self.char_direction = None self.char_speed = None @@ -84,26 +76,52 @@ class Fan(HomeAccessory): if CHAR_ROTATION_DIRECTION in chars: self.char_direction = serv_fan.configure_char( - CHAR_ROTATION_DIRECTION, value=0, setter_callback=self.set_direction + CHAR_ROTATION_DIRECTION, value=0 ) if CHAR_ROTATION_SPEED in chars: # Initial value is set to 100 because 0 is a special value (off). 100 is # an arbitrary non-zero value. It is updated immediately by update_state # to set to the correct initial value. - self.char_speed = serv_fan.configure_char( - CHAR_ROTATION_SPEED, value=100, setter_callback=self.set_speed - ) + self.char_speed = serv_fan.configure_char(CHAR_ROTATION_SPEED, value=100) if CHAR_SWING_MODE in chars: - self.char_swing = serv_fan.configure_char( - CHAR_SWING_MODE, value=0, setter_callback=self.set_oscillating - ) + self.char_swing = serv_fan.configure_char(CHAR_SWING_MODE, value=0) + self.update_state(state) + serv_fan.setter_callback = self._set_chars + + def _set_chars(self, char_values): + _LOGGER.debug("Fan _set_chars: %s", char_values) + if CHAR_ACTIVE in char_values: + if char_values[CHAR_ACTIVE]: + is_on = False + state = self.hass.states.get(self.entity_id) + if state and state.state == STATE_ON: + is_on = True + # Only set the state to active if we + # did not get a rotation speed or its off + if not is_on or CHAR_ROTATION_SPEED not in char_values: + self.set_state(1) + else: + # Its off, nothing more to do as setting the + # other chars will likely turn it back on which + # is what we want to avoid + self.set_state(0) + return + + if CHAR_SWING_MODE in char_values: + self.set_oscillating(char_values[CHAR_SWING_MODE]) + if CHAR_ROTATION_DIRECTION in char_values: + self.set_direction(char_values[CHAR_ROTATION_DIRECTION]) + + # We always do this LAST to ensure they + # get the speed they asked for + if CHAR_ROTATION_SPEED in char_values: + self.set_speed(char_values[CHAR_ROTATION_SPEED]) def set_state(self, value): """Set state if call came from HomeKit.""" _LOGGER.debug("%s: Set state to %d", self.entity_id, value) - self._flag[CHAR_ACTIVE] = True service = SERVICE_TURN_ON if value == 1 else SERVICE_TURN_OFF params = {ATTR_ENTITY_ID: self.entity_id} self.call_service(DOMAIN, service, params) @@ -111,7 +129,6 @@ class Fan(HomeAccessory): def set_direction(self, value): """Set state if call came from HomeKit.""" _LOGGER.debug("%s: Set direction to %d", self.entity_id, value) - self._flag[CHAR_ROTATION_DIRECTION] = True direction = DIRECTION_REVERSE if value == 1 else DIRECTION_FORWARD params = {ATTR_ENTITY_ID: self.entity_id, ATTR_DIRECTION: direction} self.call_service(DOMAIN, SERVICE_SET_DIRECTION, params, direction) @@ -119,12 +136,10 @@ class Fan(HomeAccessory): def set_oscillating(self, value): """Set state if call came from HomeKit.""" _LOGGER.debug("%s: Set oscillating to %d", self.entity_id, value) - self._flag[CHAR_SWING_MODE] = True oscillating = value == 1 params = {ATTR_ENTITY_ID: self.entity_id, ATTR_OSCILLATING: oscillating} self.call_service(DOMAIN, SERVICE_OSCILLATE, params, oscillating) - @debounce def set_speed(self, value): """Set state if call came from HomeKit.""" _LOGGER.debug("%s: Set speed to %d", self.entity_id, value) @@ -138,21 +153,16 @@ class Fan(HomeAccessory): state = new_state.state if state in (STATE_ON, STATE_OFF): self._state = 1 if state == STATE_ON else 0 - if not self._flag[CHAR_ACTIVE] and self.char_active.value != self._state: + if self.char_active.value != self._state: self.char_active.set_value(self._state) - self._flag[CHAR_ACTIVE] = False # Handle Direction if self.char_direction is not None: direction = new_state.attributes.get(ATTR_DIRECTION) - if not self._flag[CHAR_ROTATION_DIRECTION] and direction in ( - DIRECTION_FORWARD, - DIRECTION_REVERSE, - ): + if direction in (DIRECTION_FORWARD, DIRECTION_REVERSE): hk_direction = 1 if direction == DIRECTION_REVERSE else 0 if self.char_direction.value != hk_direction: self.char_direction.set_value(hk_direction) - self._flag[CHAR_ROTATION_DIRECTION] = False # Handle Speed if self.char_speed is not None: @@ -170,17 +180,15 @@ class Fan(HomeAccessory): # Therefore, if the hk_speed_value is 0 and the device is still on, # the rotation speed is mapped to 1 otherwise the update is ignored # in order to avoid this incorrect behavior. - if hk_speed_value == 0: - if state == STATE_ON: - self.char_speed.set_value(1) - else: + if hk_speed_value == 0 and state == STATE_ON: + hk_speed_value = 1 + if self.char_speed.value != hk_speed_value: self.char_speed.set_value(hk_speed_value) # Handle Oscillating if self.char_swing is not None: oscillating = new_state.attributes.get(ATTR_OSCILLATING) - if not self._flag[CHAR_SWING_MODE] and oscillating in (True, False): + if isinstance(oscillating, bool): hk_oscillating = 1 if oscillating else 0 if self.char_swing.value != hk_oscillating: self.char_swing.set_value(hk_oscillating) - self._flag[CHAR_SWING_MODE] = False diff --git a/homeassistant/components/homekit/type_lights.py b/homeassistant/components/homekit/type_lights.py index e38af1a04eb..8458c8351da 100644 --- a/homeassistant/components/homekit/type_lights.py +++ b/homeassistant/components/homekit/type_lights.py @@ -54,9 +54,9 @@ class Light(HomeAccessory): super().__init__(*args, category=CATEGORY_LIGHTBULB) self.chars = [] - self._features = self.hass.states.get(self.entity_id).attributes.get( - ATTR_SUPPORTED_FEATURES - ) + state = self.hass.states.get(self.entity_id) + + self._features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) if self._features & SUPPORT_BRIGHTNESS: self.chars.append(CHAR_BRIGHTNESS) @@ -101,10 +101,12 @@ class Light(HomeAccessory): if CHAR_SATURATION in self.chars: self.char_saturation = serv_light.configure_char(CHAR_SATURATION, value=75) + self.update_state(state) + serv_light.setter_callback = self._set_chars def _set_chars(self, char_values): - _LOGGER.debug("_set_chars: %s", char_values) + _LOGGER.debug("Light _set_chars: %s", char_values) events = [] service = SERVICE_TURN_ON params = {ATTR_ENTITY_ID: self.entity_id} @@ -115,7 +117,7 @@ class Light(HomeAccessory): if CHAR_BRIGHTNESS in char_values: if char_values[CHAR_BRIGHTNESS] == 0: - events[-1] = f"Set state to 0" + events[-1] = "Set state to 0" service = SERVICE_TURN_OFF else: params[ATTR_BRIGHTNESS_PCT] = char_values[CHAR_BRIGHTNESS] diff --git a/homeassistant/components/homekit/type_locks.py b/homeassistant/components/homekit/type_locks.py index 3a7211ab2ad..0d2a19ef089 100644 --- a/homeassistant/components/homekit/type_locks.py +++ b/homeassistant/components/homekit/type_locks.py @@ -35,7 +35,7 @@ class Lock(HomeAccessory): """Initialize a Lock accessory object.""" super().__init__(*args, category=CATEGORY_DOOR_LOCK) self._code = self.config.get(ATTR_CODE) - self._flag_state = False + state = self.hass.states.get(self.entity_id) serv_lock_mechanism = self.add_preload_service(SERV_LOCK) self.char_current_state = serv_lock_mechanism.configure_char( @@ -46,15 +46,18 @@ class Lock(HomeAccessory): value=HASS_TO_HOMEKIT[STATE_LOCKED], setter_callback=self.set_state, ) + self.update_state(state) def set_state(self, value): """Set lock state to value if call came from HomeKit.""" _LOGGER.debug("%s: Set state to %d", self.entity_id, value) - self._flag_state = True hass_value = HOMEKIT_TO_HASS.get(value) service = STATE_TO_SERVICE[hass_value] + if self.char_current_state.value != value: + self.char_current_state.set_value(value) + params = {ATTR_ENTITY_ID: self.entity_id} if self._code: params[ATTR_CODE] = self._code @@ -65,16 +68,21 @@ class Lock(HomeAccessory): hass_state = new_state.state if hass_state in HASS_TO_HOMEKIT: current_lock_state = HASS_TO_HOMEKIT[hass_state] - self.char_current_state.set_value(current_lock_state) _LOGGER.debug( "%s: Updated current state to %s (%d)", self.entity_id, hass_state, current_lock_state, ) - # LockTargetState only supports locked and unlocked + # Must set lock target state before current state + # or there will be no notification if hass_state in (STATE_LOCKED, STATE_UNLOCKED): - if not self._flag_state: + if self.char_target_state.value != current_lock_state: self.char_target_state.set_value(current_lock_state) - self._flag_state = False + + # Set lock current state ONLY after ensuring that + # target state is correct or there will be no + # notification + if self.char_current_state.value != current_lock_state: + self.char_current_state.set_value(current_lock_state) diff --git a/homeassistant/components/homekit/type_media_players.py b/homeassistant/components/homekit/type_media_players.py index e07e9cb4749..78c11fc41f9 100644 --- a/homeassistant/components/homekit/type_media_players.py +++ b/homeassistant/components/homekit/type_media_players.py @@ -33,6 +33,7 @@ from homeassistant.const import ( STATE_OFF, STATE_PAUSED, STATE_PLAYING, + STATE_STANDBY, STATE_UNKNOWN, ) @@ -98,12 +99,7 @@ class MediaPlayer(HomeAccessory): def __init__(self, *args): """Initialize a Switch accessory object.""" super().__init__(*args, category=CATEGORY_SWITCH) - self._flag = { - FEATURE_ON_OFF: False, - FEATURE_PLAY_PAUSE: False, - FEATURE_PLAY_STOP: False, - FEATURE_TOGGLE_MUTE: False, - } + state = self.hass.states.get(self.entity_id) self.chars = { FEATURE_ON_OFF: None, FEATURE_PLAY_PAUSE: None, @@ -143,6 +139,7 @@ class MediaPlayer(HomeAccessory): self.chars[FEATURE_TOGGLE_MUTE] = serv_toggle_mute.configure_char( CHAR_ON, value=False, setter_callback=self.set_toggle_mute ) + self.update_state(state) def generate_service_name(self, mode): """Generate name for individual service.""" @@ -151,7 +148,6 @@ class MediaPlayer(HomeAccessory): def set_on_off(self, value): """Move switch state to value if call came from HomeKit.""" _LOGGER.debug('%s: Set switch state for "on_off" to %s', self.entity_id, value) - self._flag[FEATURE_ON_OFF] = True service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF params = {ATTR_ENTITY_ID: self.entity_id} self.call_service(DOMAIN, service, params) @@ -161,7 +157,6 @@ class MediaPlayer(HomeAccessory): _LOGGER.debug( '%s: Set switch state for "play_pause" to %s', self.entity_id, value ) - self._flag[FEATURE_PLAY_PAUSE] = True service = SERVICE_MEDIA_PLAY if value else SERVICE_MEDIA_PAUSE params = {ATTR_ENTITY_ID: self.entity_id} self.call_service(DOMAIN, service, params) @@ -171,7 +166,6 @@ class MediaPlayer(HomeAccessory): _LOGGER.debug( '%s: Set switch state for "play_stop" to %s', self.entity_id, value ) - self._flag[FEATURE_PLAY_STOP] = True service = SERVICE_MEDIA_PLAY if value else SERVICE_MEDIA_STOP params = {ATTR_ENTITY_ID: self.entity_id} self.call_service(DOMAIN, service, params) @@ -181,7 +175,6 @@ class MediaPlayer(HomeAccessory): _LOGGER.debug( '%s: Set switch state for "toggle_mute" to %s', self.entity_id, value ) - self._flag[FEATURE_TOGGLE_MUTE] = True params = {ATTR_ENTITY_ID: self.entity_id, ATTR_MEDIA_VOLUME_MUTED: value} self.call_service(DOMAIN, SERVICE_VOLUME_MUTE, params) @@ -190,46 +183,45 @@ class MediaPlayer(HomeAccessory): current_state = new_state.state if self.chars[FEATURE_ON_OFF]: - hk_state = current_state not in (STATE_OFF, STATE_UNKNOWN, "None") - if not self._flag[FEATURE_ON_OFF]: - _LOGGER.debug( - '%s: Set current state for "on_off" to %s', self.entity_id, hk_state - ) + hk_state = current_state not in ( + STATE_OFF, + STATE_UNKNOWN, + STATE_STANDBY, + "None", + ) + _LOGGER.debug( + '%s: Set current state for "on_off" to %s', self.entity_id, hk_state + ) + if self.chars[FEATURE_ON_OFF].value != hk_state: self.chars[FEATURE_ON_OFF].set_value(hk_state) - self._flag[FEATURE_ON_OFF] = False if self.chars[FEATURE_PLAY_PAUSE]: hk_state = current_state == STATE_PLAYING - if not self._flag[FEATURE_PLAY_PAUSE]: - _LOGGER.debug( - '%s: Set current state for "play_pause" to %s', - self.entity_id, - hk_state, - ) + _LOGGER.debug( + '%s: Set current state for "play_pause" to %s', + self.entity_id, + hk_state, + ) + if self.chars[FEATURE_PLAY_PAUSE].value != hk_state: self.chars[FEATURE_PLAY_PAUSE].set_value(hk_state) - self._flag[FEATURE_PLAY_PAUSE] = False if self.chars[FEATURE_PLAY_STOP]: hk_state = current_state == STATE_PLAYING - if not self._flag[FEATURE_PLAY_STOP]: - _LOGGER.debug( - '%s: Set current state for "play_stop" to %s', - self.entity_id, - hk_state, - ) + _LOGGER.debug( + '%s: Set current state for "play_stop" to %s', self.entity_id, hk_state, + ) + if self.chars[FEATURE_PLAY_STOP].value != hk_state: self.chars[FEATURE_PLAY_STOP].set_value(hk_state) - self._flag[FEATURE_PLAY_STOP] = False if self.chars[FEATURE_TOGGLE_MUTE]: current_state = new_state.attributes.get(ATTR_MEDIA_VOLUME_MUTED) - if not self._flag[FEATURE_TOGGLE_MUTE]: - _LOGGER.debug( - '%s: Set current state for "toggle_mute" to %s', - self.entity_id, - current_state, - ) + _LOGGER.debug( + '%s: Set current state for "toggle_mute" to %s', + self.entity_id, + current_state, + ) + if self.chars[FEATURE_TOGGLE_MUTE].value != current_state: self.chars[FEATURE_TOGGLE_MUTE].set_value(current_state) - self._flag[FEATURE_TOGGLE_MUTE] = False @TYPES.register("TelevisionMediaPlayer") @@ -239,12 +231,8 @@ class TelevisionMediaPlayer(HomeAccessory): def __init__(self, *args): """Initialize a Switch accessory object.""" super().__init__(*args, category=CATEGORY_TELEVISION) + state = self.hass.states.get(self.entity_id) - self._flag = { - CHAR_ACTIVE: False, - CHAR_ACTIVE_IDENTIFIER: False, - CHAR_MUTE: False, - } self.support_select_source = False self.sources = [] @@ -330,10 +318,11 @@ class TelevisionMediaPlayer(HomeAccessory): serv_input.configure_char(CHAR_CURRENT_VISIBILITY_STATE, value=False) _LOGGER.debug("%s: Added source %s.", self.entity_id, source) + self.update_state(state) + def set_on_off(self, value): """Move switch state to value if call came from HomeKit.""" _LOGGER.debug('%s: Set switch state for "on_off" to %s', self.entity_id, value) - self._flag[CHAR_ACTIVE] = True service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF params = {ATTR_ENTITY_ID: self.entity_id} self.call_service(DOMAIN, service, params) @@ -343,7 +332,6 @@ class TelevisionMediaPlayer(HomeAccessory): _LOGGER.debug( '%s: Set switch state for "toggle_mute" to %s', self.entity_id, value ) - self._flag[CHAR_MUTE] = True params = {ATTR_ENTITY_ID: self.entity_id, ATTR_MEDIA_VOLUME_MUTED: value} self.call_service(DOMAIN, SERVICE_VOLUME_MUTE, params) @@ -364,7 +352,6 @@ class TelevisionMediaPlayer(HomeAccessory): """Send input set value if call came from HomeKit.""" _LOGGER.debug("%s: Set current input to %s", self.entity_id, value) source = self.sources[value] - self._flag[CHAR_ACTIVE_IDENTIFIER] = True params = {ATTR_ENTITY_ID: self.entity_id, ATTR_INPUT_SOURCE: source} self.call_service(DOMAIN, SERVICE_SELECT_SOURCE, params) @@ -390,40 +377,38 @@ class TelevisionMediaPlayer(HomeAccessory): current_state = new_state.state # Power state television - hk_state = current_state not in (STATE_OFF, STATE_UNKNOWN) - if not self._flag[CHAR_ACTIVE]: - _LOGGER.debug( - "%s: Set current active state to %s", self.entity_id, hk_state - ) + hk_state = 0 + if current_state not in ("None", STATE_OFF, STATE_UNKNOWN): + hk_state = 1 + + _LOGGER.debug("%s: Set current active state to %s", self.entity_id, hk_state) + if self.char_active.value != hk_state: self.char_active.set_value(hk_state) - self._flag[CHAR_ACTIVE] = False # Set mute state if CHAR_VOLUME_SELECTOR in self.chars_speaker: current_mute_state = new_state.attributes.get(ATTR_MEDIA_VOLUME_MUTED) - if not self._flag[CHAR_MUTE]: - _LOGGER.debug( - "%s: Set current mute state to %s", - self.entity_id, - current_mute_state, - ) + _LOGGER.debug( + "%s: Set current mute state to %s", self.entity_id, current_mute_state, + ) + if self.char_mute.value != current_mute_state: self.char_mute.set_value(current_mute_state) - self._flag[CHAR_MUTE] = False # Set active input if self.support_select_source: source_name = new_state.attributes.get(ATTR_INPUT_SOURCE) - if self.sources and not self._flag[CHAR_ACTIVE_IDENTIFIER]: + if self.sources: _LOGGER.debug( "%s: Set current input to %s", self.entity_id, source_name ) if source_name in self.sources: index = self.sources.index(source_name) - self.char_input_source.set_value(index) + if self.char_input_source.value != index: + self.char_input_source.set_value(index) else: _LOGGER.warning( "%s: Sources out of sync. Restart Home Assistant", self.entity_id, ) - self.char_input_source.set_value(0) - self._flag[CHAR_ACTIVE_IDENTIFIER] = False + if self.char_input_source.value != 0: + self.char_input_source.set_value(0) diff --git a/homeassistant/components/homekit/type_security_systems.py b/homeassistant/components/homekit/type_security_systems.py index 345709eb7da..59e10a42c29 100644 --- a/homeassistant/components/homekit/type_security_systems.py +++ b/homeassistant/components/homekit/type_security_systems.py @@ -53,8 +53,8 @@ class SecuritySystem(HomeAccessory): def __init__(self, *args): """Initialize a SecuritySystem accessory object.""" super().__init__(*args, category=CATEGORY_ALARM_SYSTEM) + state = self.hass.states.get(self.entity_id) self._alarm_code = self.config.get(ATTR_CODE) - self._flag_state = False serv_alarm = self.add_preload_service(SERV_SECURITY_SYSTEM) self.char_current_state = serv_alarm.configure_char( @@ -63,11 +63,13 @@ class SecuritySystem(HomeAccessory): self.char_target_state = serv_alarm.configure_char( CHAR_TARGET_SECURITY_STATE, value=3, setter_callback=self.set_security_state ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def set_security_state(self, value): """Move security state to value if call came from HomeKit.""" _LOGGER.debug("%s: Set security state to %d", self.entity_id, value) - self._flag_state = True hass_value = HOMEKIT_TO_HASS[value] service = STATE_TO_SERVICE[hass_value] @@ -81,15 +83,18 @@ class SecuritySystem(HomeAccessory): hass_state = new_state.state if hass_state in HASS_TO_HOMEKIT: current_security_state = HASS_TO_HOMEKIT[hass_state] - self.char_current_state.set_value(current_security_state) - _LOGGER.debug( - "%s: Updated current state to %s (%d)", - self.entity_id, - hass_state, - current_security_state, - ) + if self.char_current_state.value != current_security_state: + self.char_current_state.set_value(current_security_state) + _LOGGER.debug( + "%s: Updated current state to %s (%d)", + self.entity_id, + hass_state, + current_security_state, + ) # SecuritySystemTargetState does not support triggered - if not self._flag_state and hass_state != STATE_ALARM_TRIGGERED: + if ( + hass_state != STATE_ALARM_TRIGGERED + and self.char_target_state.value != current_security_state + ): self.char_target_state.set_value(current_security_state) - self._flag_state = False diff --git a/homeassistant/components/homekit/type_sensors.py b/homeassistant/components/homekit/type_sensors.py index a1450518e0c..5bdf9a07f04 100644 --- a/homeassistant/components/homekit/type_sensors.py +++ b/homeassistant/components/homekit/type_sensors.py @@ -60,16 +60,16 @@ from .util import convert_to_float, density_to_air_quality, temperature_to_homek _LOGGER = logging.getLogger(__name__) BINARY_SENSOR_SERVICE_MAP = { - DEVICE_CLASS_CO2: (SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED), - DEVICE_CLASS_DOOR: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE), - DEVICE_CLASS_GARAGE_DOOR: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE), - DEVICE_CLASS_GAS: (SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED), - DEVICE_CLASS_MOISTURE: (SERV_LEAK_SENSOR, CHAR_LEAK_DETECTED), - DEVICE_CLASS_MOTION: (SERV_MOTION_SENSOR, CHAR_MOTION_DETECTED), - DEVICE_CLASS_OCCUPANCY: (SERV_OCCUPANCY_SENSOR, CHAR_OCCUPANCY_DETECTED), - DEVICE_CLASS_OPENING: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE), - DEVICE_CLASS_SMOKE: (SERV_SMOKE_SENSOR, CHAR_SMOKE_DETECTED), - DEVICE_CLASS_WINDOW: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE), + DEVICE_CLASS_CO2: (SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED, int), + DEVICE_CLASS_DOOR: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int), + DEVICE_CLASS_GARAGE_DOOR: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int), + DEVICE_CLASS_GAS: (SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int), + DEVICE_CLASS_MOISTURE: (SERV_LEAK_SENSOR, CHAR_LEAK_DETECTED, int), + DEVICE_CLASS_MOTION: (SERV_MOTION_SENSOR, CHAR_MOTION_DETECTED, bool), + DEVICE_CLASS_OCCUPANCY: (SERV_OCCUPANCY_SENSOR, CHAR_OCCUPANCY_DETECTED, int), + DEVICE_CLASS_OPENING: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int), + DEVICE_CLASS_SMOKE: (SERV_SMOKE_SENSOR, CHAR_SMOKE_DETECTED, int), + DEVICE_CLASS_WINDOW: (SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int), } @@ -83,10 +83,14 @@ class TemperatureSensor(HomeAccessory): def __init__(self, *args): """Initialize a TemperatureSensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) + state = self.hass.states.get(self.entity_id) serv_temp = self.add_preload_service(SERV_TEMPERATURE_SENSOR) self.char_temp = serv_temp.configure_char( CHAR_CURRENT_TEMPERATURE, value=0, properties=PROP_CELSIUS ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update temperature after state changed.""" @@ -94,10 +98,11 @@ class TemperatureSensor(HomeAccessory): temperature = convert_to_float(new_state.state) if temperature: temperature = temperature_to_homekit(temperature, unit) - self.char_temp.set_value(temperature) - _LOGGER.debug( - "%s: Current temperature set to %.1f°C", self.entity_id, temperature - ) + if self.char_temp.value != temperature: + self.char_temp.set_value(temperature) + _LOGGER.debug( + "%s: Current temperature set to %.1f°C", self.entity_id, temperature + ) @TYPES.register("HumiditySensor") @@ -107,15 +112,19 @@ class HumiditySensor(HomeAccessory): def __init__(self, *args): """Initialize a HumiditySensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) + state = self.hass.states.get(self.entity_id) serv_humidity = self.add_preload_service(SERV_HUMIDITY_SENSOR) self.char_humidity = serv_humidity.configure_char( CHAR_CURRENT_HUMIDITY, value=0 ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update accessory after state change.""" humidity = convert_to_float(new_state.state) - if humidity: + if humidity and self.char_humidity.value != humidity: self.char_humidity.set_value(humidity) _LOGGER.debug("%s: Percent set to %d%%", self.entity_id, humidity) @@ -127,7 +136,7 @@ class AirQualitySensor(HomeAccessory): def __init__(self, *args): """Initialize a AirQualitySensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) - + state = self.hass.states.get(self.entity_id) serv_air_quality = self.add_preload_service( SERV_AIR_QUALITY_SENSOR, [CHAR_AIR_PARTICULATE_DENSITY] ) @@ -135,14 +144,21 @@ class AirQualitySensor(HomeAccessory): self.char_density = serv_air_quality.configure_char( CHAR_AIR_PARTICULATE_DENSITY, value=0 ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update accessory after state change.""" density = convert_to_float(new_state.state) if density: - self.char_density.set_value(density) - self.char_quality.set_value(density_to_air_quality(density)) - _LOGGER.debug("%s: Set to %d", self.entity_id, density) + if self.char_density.value != density: + self.char_density.set_value(density) + _LOGGER.debug("%s: Set density to %d", self.entity_id, density) + air_quality = density_to_air_quality(density) + if self.char_quality.value != air_quality: + self.char_quality.set_value(air_quality) + _LOGGER.debug("%s: Set air_quality to %d", self.entity_id, air_quality) @TYPES.register("CarbonMonoxideSensor") @@ -152,7 +168,7 @@ class CarbonMonoxideSensor(HomeAccessory): def __init__(self, *args): """Initialize a CarbonMonoxideSensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) - + state = self.hass.states.get(self.entity_id) serv_co = self.add_preload_service( SERV_CARBON_MONOXIDE_SENSOR, [CHAR_CARBON_MONOXIDE_LEVEL, CHAR_CARBON_MONOXIDE_PEAK_LEVEL], @@ -164,16 +180,22 @@ class CarbonMonoxideSensor(HomeAccessory): self.char_detected = serv_co.configure_char( CHAR_CARBON_MONOXIDE_DETECTED, value=0 ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update accessory after state change.""" value = convert_to_float(new_state.state) if value: - self.char_level.set_value(value) + if self.char_level.value != value: + self.char_level.set_value(value) if value > self.char_peak.value: self.char_peak.set_value(value) - self.char_detected.set_value(value > THRESHOLD_CO) - _LOGGER.debug("%s: Set to %d", self.entity_id, value) + co_detected = value > THRESHOLD_CO + if self.char_detected.value is not co_detected: + self.char_detected.set_value(co_detected) + _LOGGER.debug("%s: Set to %d", self.entity_id, value) @TYPES.register("CarbonDioxideSensor") @@ -183,7 +205,7 @@ class CarbonDioxideSensor(HomeAccessory): def __init__(self, *args): """Initialize a CarbonDioxideSensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) - + state = self.hass.states.get(self.entity_id) serv_co2 = self.add_preload_service( SERV_CARBON_DIOXIDE_SENSOR, [CHAR_CARBON_DIOXIDE_LEVEL, CHAR_CARBON_DIOXIDE_PEAK_LEVEL], @@ -195,16 +217,22 @@ class CarbonDioxideSensor(HomeAccessory): self.char_detected = serv_co2.configure_char( CHAR_CARBON_DIOXIDE_DETECTED, value=0 ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update accessory after state change.""" value = convert_to_float(new_state.state) if value: - self.char_level.set_value(value) + if self.char_level.value != value: + self.char_level.set_value(value) if value > self.char_peak.value: self.char_peak.set_value(value) - self.char_detected.set_value(value > THRESHOLD_CO2) - _LOGGER.debug("%s: Set to %d", self.entity_id, value) + co2_detected = value > THRESHOLD_CO2 + if self.char_detected.value is not co2_detected: + self.char_detected.set_value(co2_detected) + _LOGGER.debug("%s: Set to %d", self.entity_id, value) @TYPES.register("LightSensor") @@ -214,16 +242,19 @@ class LightSensor(HomeAccessory): def __init__(self, *args): """Initialize a LightSensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) - + state = self.hass.states.get(self.entity_id) serv_light = self.add_preload_service(SERV_LIGHT_SENSOR) self.char_light = serv_light.configure_char( CHAR_CURRENT_AMBIENT_LIGHT_LEVEL, value=0 ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update accessory after state change.""" luminance = convert_to_float(new_state.state) - if luminance: + if luminance and self.char_light.value != luminance: self.char_light.set_value(luminance) _LOGGER.debug("%s: Set to %d", self.entity_id, luminance) @@ -235,21 +266,28 @@ class BinarySensor(HomeAccessory): def __init__(self, *args): """Initialize a BinarySensor accessory object.""" super().__init__(*args, category=CATEGORY_SENSOR) - device_class = self.hass.states.get(self.entity_id).attributes.get( - ATTR_DEVICE_CLASS - ) + state = self.hass.states.get(self.entity_id) + device_class = state.attributes.get(ATTR_DEVICE_CLASS) service_char = ( BINARY_SENSOR_SERVICE_MAP[device_class] if device_class in BINARY_SENSOR_SERVICE_MAP else BINARY_SENSOR_SERVICE_MAP[DEVICE_CLASS_OCCUPANCY] ) + self.format = service_char[2] service = self.add_preload_service(service_char[0]) - self.char_detected = service.configure_char(service_char[1], value=0) + initial_value = False if self.format is bool else 0 + self.char_detected = service.configure_char( + service_char[1], value=initial_value + ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def update_state(self, new_state): """Update accessory after state change.""" state = new_state.state - detected = state in (STATE_ON, STATE_HOME) - self.char_detected.set_value(detected) - _LOGGER.debug("%s: Set to %d", self.entity_id, detected) + detected = self.format(state in (STATE_ON, STATE_HOME)) + if self.char_detected.value != detected: + self.char_detected.set_value(detected) + _LOGGER.debug("%s: Set to %d", self.entity_id, detected) diff --git a/homeassistant/components/homekit/type_switches.py b/homeassistant/components/homekit/type_switches.py index 66d3037b894..a1088f110e5 100644 --- a/homeassistant/components/homekit/type_switches.py +++ b/homeassistant/components/homekit/type_switches.py @@ -11,6 +11,12 @@ from pyhap.const import ( from homeassistant.components.script import ATTR_CAN_CANCEL from homeassistant.components.switch import DOMAIN +from homeassistant.components.vacuum import ( + DOMAIN as VACUUM_DOMAIN, + SERVICE_RETURN_TO_BASE, + SERVICE_START, + STATE_CLEANING, +) from homeassistant.const import ( ATTR_ENTITY_ID, CONF_TYPE, @@ -55,7 +61,7 @@ class Outlet(HomeAccessory): def __init__(self, *args): """Initialize an Outlet accessory object.""" super().__init__(*args, category=CATEGORY_OUTLET) - self._flag_state = False + state = self.hass.states.get(self.entity_id) serv_outlet = self.add_preload_service(SERV_OUTLET) self.char_on = serv_outlet.configure_char( @@ -64,11 +70,13 @@ class Outlet(HomeAccessory): self.char_outlet_in_use = serv_outlet.configure_char( CHAR_OUTLET_IN_USE, value=True ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def set_state(self, value): """Move switch state to value if call came from HomeKit.""" _LOGGER.debug("%s: Set switch state to %s", self.entity_id, value) - self._flag_state = True params = {ATTR_ENTITY_ID: self.entity_id} service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF self.call_service(DOMAIN, service, params) @@ -76,10 +84,9 @@ class Outlet(HomeAccessory): def update_state(self, new_state): """Update switch state after state changed.""" current_state = new_state.state == STATE_ON - if not self._flag_state: + if self.char_on.value is not current_state: _LOGGER.debug("%s: Set current state to %s", self.entity_id, current_state) self.char_on.set_value(current_state) - self._flag_state = False @TYPES.register("Switch") @@ -90,7 +97,7 @@ class Switch(HomeAccessory): """Initialize a Switch accessory object.""" super().__init__(*args, category=CATEGORY_SWITCH) self._domain = split_entity_id(self.entity_id)[0] - self._flag_state = False + state = self.hass.states.get(self.entity_id) self.activate_only = self.is_activate(self.hass.states.get(self.entity_id)) @@ -98,6 +105,9 @@ class Switch(HomeAccessory): self.char_on = serv_switch.configure_char( CHAR_ON, value=False, setter_callback=self.set_state ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def is_activate(self, state): """Check if entity is activate only.""" @@ -111,15 +121,15 @@ class Switch(HomeAccessory): def reset_switch(self, *args): """Reset switch to emulate activate click.""" _LOGGER.debug("%s: Reset switch to off", self.entity_id) - self.char_on.set_value(0) + if self.char_on.value is not False: + self.char_on.set_value(False) def set_state(self, value): """Move switch state to value if call came from HomeKit.""" _LOGGER.debug("%s: Set switch state to %s", self.entity_id, value) - if self.activate_only and value == 0: + if self.activate_only and not value: _LOGGER.debug("%s: Ignoring turn_off call", self.entity_id) return - self._flag_state = True params = {ATTR_ENTITY_ID: self.entity_id} service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF self.call_service(self._domain, service, params) @@ -137,10 +147,28 @@ class Switch(HomeAccessory): return current_state = new_state.state == STATE_ON - if not self._flag_state: + if self.char_on.value is not current_state: + _LOGGER.debug("%s: Set current state to %s", self.entity_id, current_state) + self.char_on.set_value(current_state) + + +@TYPES.register("DockVacuum") +class DockVacuum(Switch): + """Generate a Switch accessory.""" + + def set_state(self, value): + """Move switch state to value if call came from HomeKit.""" + _LOGGER.debug("%s: Set switch state to %s", self.entity_id, value) + params = {ATTR_ENTITY_ID: self.entity_id} + service = SERVICE_START if value else SERVICE_RETURN_TO_BASE + self.call_service(VACUUM_DOMAIN, service, params) + + def update_state(self, new_state): + """Update switch state after state changed.""" + current_state = new_state.state in (STATE_CLEANING, STATE_ON) + if self.char_on.value is not current_state: _LOGGER.debug("%s: Set current state to %s", self.entity_id, current_state) self.char_on.set_value(current_state) - self._flag_state = False @TYPES.register("Valve") @@ -150,7 +178,7 @@ class Valve(HomeAccessory): def __init__(self, *args): """Initialize a Valve accessory object.""" super().__init__(*args) - self._flag_state = False + state = self.hass.states.get(self.entity_id) valve_type = self.config[CONF_TYPE] self.category = VALVE_TYPE[valve_type][0] @@ -162,11 +190,13 @@ class Valve(HomeAccessory): self.char_valve_type = serv_valve.configure_char( CHAR_VALVE_TYPE, value=VALVE_TYPE[valve_type][1] ) + # Set the state so it is in sync on initial + # GET to avoid an event storm after homekit startup + self.update_state(state) def set_state(self, value): """Move value state to value if call came from HomeKit.""" _LOGGER.debug("%s: Set switch state to %s", self.entity_id, value) - self._flag_state = True self.char_in_use.set_value(value) params = {ATTR_ENTITY_ID: self.entity_id} service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF @@ -174,9 +204,10 @@ class Valve(HomeAccessory): def update_state(self, new_state): """Update switch state after state changed.""" - current_state = new_state.state == STATE_ON - if not self._flag_state: - _LOGGER.debug("%s: Set current state to %s", self.entity_id, current_state) + current_state = 1 if new_state.state == STATE_ON else 0 + if self.char_active.value != current_state: + _LOGGER.debug("%s: Set active state to %s", self.entity_id, current_state) self.char_active.set_value(current_state) + if self.char_in_use.value != current_state: + _LOGGER.debug("%s: Set in_use state to %s", self.entity_id, current_state) self.char_in_use.set_value(current_state) - self._flag_state = False diff --git a/homeassistant/components/homekit/type_thermostats.py b/homeassistant/components/homekit/type_thermostats.py index b8c3b3f0197..0a488917381 100644 --- a/homeassistant/components/homekit/type_thermostats.py +++ b/homeassistant/components/homekit/type_thermostats.py @@ -16,6 +16,8 @@ from homeassistant.components.climate.const import ( ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, CURRENT_HVAC_COOL, + CURRENT_HVAC_DRY, + CURRENT_HVAC_FAN, CURRENT_HVAC_HEAT, CURRENT_HVAC_IDLE, CURRENT_HVAC_OFF, @@ -25,6 +27,7 @@ from homeassistant.components.climate.const import ( DOMAIN as DOMAIN_CLIMATE, HVAC_MODE_AUTO, HVAC_MODE_COOL, + HVAC_MODE_DRY, HVAC_MODE_FAN_ONLY, HVAC_MODE_HEAT, HVAC_MODE_HEAT_COOL, @@ -33,6 +36,7 @@ from homeassistant.components.climate.const import ( SERVICE_SET_HVAC_MODE as SERVICE_SET_HVAC_MODE_THERMOSTAT, SERVICE_SET_TEMPERATURE as SERVICE_SET_TEMPERATURE_THERMOSTAT, SUPPORT_TARGET_HUMIDITY, + SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE_RANGE, ) from homeassistant.components.water_heater import ( @@ -49,7 +53,7 @@ from homeassistant.const import ( ) from . import TYPES -from .accessories import HomeAccessory, debounce +from .accessories import HomeAccessory from .const import ( CHAR_COOLING_THRESHOLD_TEMPERATURE, CHAR_CURRENT_HEATING_COOLING, @@ -70,29 +74,40 @@ from .util import temperature_to_homekit, temperature_to_states _LOGGER = logging.getLogger(__name__) -HC_HOMEKIT_VALID_MODES_WATER_HEATER = { - "Heat": 1, -} +HC_HOMEKIT_VALID_MODES_WATER_HEATER = {"Heat": 1} UNIT_HASS_TO_HOMEKIT = {TEMP_CELSIUS: 0, TEMP_FAHRENHEIT: 1} +HC_HEAT_COOL_OFF = 0 +HC_HEAT_COOL_HEAT = 1 +HC_HEAT_COOL_COOL = 2 +HC_HEAT_COOL_AUTO = 3 + +HC_MIN_TEMP = 10 +HC_MAX_TEMP = 38 + UNIT_HOMEKIT_TO_HASS = {c: s for s, c in UNIT_HASS_TO_HOMEKIT.items()} HC_HASS_TO_HOMEKIT = { - HVAC_MODE_OFF: 0, - HVAC_MODE_HEAT: 1, - HVAC_MODE_COOL: 2, - HVAC_MODE_AUTO: 3, - HVAC_MODE_HEAT_COOL: 3, - HVAC_MODE_FAN_ONLY: 2, + HVAC_MODE_OFF: HC_HEAT_COOL_OFF, + HVAC_MODE_HEAT: HC_HEAT_COOL_HEAT, + HVAC_MODE_COOL: HC_HEAT_COOL_COOL, + HVAC_MODE_AUTO: HC_HEAT_COOL_AUTO, + HVAC_MODE_HEAT_COOL: HC_HEAT_COOL_AUTO, + HVAC_MODE_DRY: HC_HEAT_COOL_COOL, + HVAC_MODE_FAN_ONLY: HC_HEAT_COOL_COOL, } HC_HOMEKIT_TO_HASS = {c: s for s, c in HC_HASS_TO_HOMEKIT.items()} HC_HASS_TO_HOMEKIT_ACTION = { - CURRENT_HVAC_OFF: 0, - CURRENT_HVAC_IDLE: 0, - CURRENT_HVAC_HEAT: 1, - CURRENT_HVAC_COOL: 2, + CURRENT_HVAC_OFF: HC_HEAT_COOL_OFF, + CURRENT_HVAC_IDLE: HC_HEAT_COOL_OFF, + CURRENT_HVAC_HEAT: HC_HEAT_COOL_HEAT, + CURRENT_HVAC_COOL: HC_HEAT_COOL_COOL, + CURRENT_HVAC_DRY: HC_HEAT_COOL_COOL, + CURRENT_HVAC_FAN: HC_HEAT_COOL_COOL, } +HEAT_COOL_DEADBAND = 5 + @TYPES.register("Thermostat") class Thermostat(HomeAccessory): @@ -102,12 +117,14 @@ class Thermostat(HomeAccessory): """Initialize a Thermostat accessory object.""" super().__init__(*args, category=CATEGORY_THERMOSTAT) self._unit = self.hass.config.units.temperature_unit - self._flag_heat_cool = False - self._flag_temperature = False - self._flag_coolingthresh = False - self._flag_heatingthresh = False min_temp, max_temp = self.get_temperature_range() + # 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 = max_temp + min_humidity = self.hass.states.get(self.entity_id).attributes.get( ATTR_MIN_HUMIDITY, DEFAULT_MIN_HUMIDITY ) @@ -133,7 +150,7 @@ class Thermostat(HomeAccessory): ) # Target mode characteristics - hc_modes = state.attributes.get(ATTR_HVAC_MODES, None) + hc_modes = state.attributes.get(ATTR_HVAC_MODES) if hc_modes is None: _LOGGER.error( "%s: HVAC modes not yet available. Please disable auto start for homekit.", @@ -146,39 +163,47 @@ class Thermostat(HomeAccessory): HVAC_MODE_OFF, ) - # determine available modes for this entity, prefer AUTO over HEAT_COOL and COOL over FAN_ONLY + # Determine available modes for this entity, + # Prefer HEAT_COOL over AUTO and COOL over FAN_ONLY, DRY + # + # HEAT_COOL is preferred over auto because HomeKit Accessory Protocol describes + # heating or cooling comes on to maintain a target temp which is closest to + # the Home Assistant spec + # + # HVAC_MODE_HEAT_COOL: The device supports heating/cooling to a range self.hc_homekit_to_hass = { c: s for s, c in HC_HASS_TO_HOMEKIT.items() if ( s in hc_modes and not ( - (s == HVAC_MODE_HEAT_COOL and HVAC_MODE_AUTO in hc_modes) - or (s == HVAC_MODE_FAN_ONLY and HVAC_MODE_COOL in hc_modes) + (s == HVAC_MODE_AUTO and HVAC_MODE_HEAT_COOL in hc_modes) + or ( + s in (HVAC_MODE_DRY, HVAC_MODE_FAN_ONLY) + and HVAC_MODE_COOL in hc_modes + ) ) ) } hc_valid_values = {k: v for v, k in self.hc_homekit_to_hass.items()} self.char_target_heat_cool = serv_thermostat.configure_char( - CHAR_TARGET_HEATING_COOLING, - value=0, - setter_callback=self.set_heat_cool, - valid_values=hc_valid_values, + CHAR_TARGET_HEATING_COOLING, valid_values=hc_valid_values, ) # Current and target temperature characteristics + self.char_current_temp = serv_thermostat.configure_char( CHAR_CURRENT_TEMPERATURE, value=21.0 ) + self.char_target_temp = serv_thermostat.configure_char( CHAR_TARGET_TEMPERATURE, value=21.0, # We do not set PROP_MIN_STEP here and instead use the HomeKit # default of 0.1 in order to have enough precision to convert # temperature units and avoid setting to 73F will result in 74F - properties={PROP_MIN_VALUE: min_temp, PROP_MAX_VALUE: max_temp}, - setter_callback=self.set_target_temperature, + properties={PROP_MIN_VALUE: hc_min_temp, PROP_MAX_VALUE: hc_max_temp}, ) # Display units characteristic @@ -196,8 +221,7 @@ class Thermostat(HomeAccessory): # We do not set PROP_MIN_STEP here and instead use the HomeKit # default of 0.1 in order to have enough precision to convert # temperature units and avoid setting to 73F will result in 74F - properties={PROP_MIN_VALUE: min_temp, PROP_MAX_VALUE: max_temp}, - setter_callback=self.set_cooling_threshold, + properties={PROP_MIN_VALUE: hc_min_temp, PROP_MAX_VALUE: hc_max_temp}, ) if CHAR_HEATING_THRESHOLD_TEMPERATURE in self.chars: self.char_heating_thresh_temp = serv_thermostat.configure_char( @@ -206,8 +230,7 @@ class Thermostat(HomeAccessory): # We do not set PROP_MIN_STEP here and instead use the HomeKit # default of 0.1 in order to have enough precision to convert # temperature units and avoid setting to 73F will result in 74F - properties={PROP_MIN_VALUE: min_temp, PROP_MAX_VALUE: max_temp}, - setter_callback=self.set_heating_threshold, + properties={PROP_MIN_VALUE: hc_min_temp, PROP_MAX_VALUE: hc_max_temp}, ) self.char_target_humidity = None self.char_current_humidity = None @@ -221,170 +244,221 @@ class Thermostat(HomeAccessory): # of 80% homekit will give you the options 20%-100% instead # of 0-80% properties={PROP_MIN_VALUE: min_humidity}, - setter_callback=self.set_target_humidity, ) self.char_current_humidity = serv_thermostat.configure_char( - CHAR_CURRENT_HUMIDITY, value=50, + CHAR_CURRENT_HUMIDITY, value=50 ) + self.update_state(state) + + serv_thermostat.setter_callback = self._set_chars + + def _temperature_to_homekit(self, temp): + return temperature_to_homekit(temp, self._unit) + + def _temperature_to_states(self, temp): + return temperature_to_states(temp, self._unit) + + def _set_chars(self, char_values): + _LOGGER.debug("Thermostat _set_chars: %s", char_values) + events = [] + params = {} + service = None + state = self.hass.states.get(self.entity_id) + features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) + + hvac_mode = self.hass.states.get(self.entity_id).state + homekit_hvac_mode = HC_HASS_TO_HOMEKIT[hvac_mode] + + if CHAR_TARGET_HEATING_COOLING in char_values: + # Homekit will reset the mode when VIEWING the temp + # Ignore it if its the same mode + if char_values[CHAR_TARGET_HEATING_COOLING] != homekit_hvac_mode: + service = SERVICE_SET_HVAC_MODE_THERMOSTAT + hass_value = self.hc_homekit_to_hass[ + char_values[CHAR_TARGET_HEATING_COOLING] + ] + params = {ATTR_HVAC_MODE: hass_value} + events.append( + f"{CHAR_TARGET_HEATING_COOLING} to {char_values[CHAR_TARGET_HEATING_COOLING]}" + ) + + if CHAR_TARGET_TEMPERATURE in char_values: + hc_target_temp = char_values[CHAR_TARGET_TEMPERATURE] + if features & SUPPORT_TARGET_TEMPERATURE: + service = SERVICE_SET_TEMPERATURE_THERMOSTAT + temperature = self._temperature_to_states(hc_target_temp) + events.append( + f"{CHAR_TARGET_TEMPERATURE} to {char_values[CHAR_TARGET_TEMPERATURE]}°C" + ) + params[ATTR_TEMPERATURE] = temperature + elif features & SUPPORT_TARGET_TEMPERATURE_RANGE: + # Homekit will send us a target temperature + # even if the device does not support it + _LOGGER.debug( + "Homekit requested target temp: %s and the device does not support", + hc_target_temp, + ) + if ( + homekit_hvac_mode == HC_HEAT_COOL_HEAT + and CHAR_HEATING_THRESHOLD_TEMPERATURE not in char_values + ): + char_values[CHAR_HEATING_THRESHOLD_TEMPERATURE] = hc_target_temp + if ( + homekit_hvac_mode == HC_HEAT_COOL_COOL + and CHAR_COOLING_THRESHOLD_TEMPERATURE not in char_values + ): + char_values[CHAR_COOLING_THRESHOLD_TEMPERATURE] = hc_target_temp + + if ( + CHAR_HEATING_THRESHOLD_TEMPERATURE in char_values + or CHAR_COOLING_THRESHOLD_TEMPERATURE in char_values + ): + service = SERVICE_SET_TEMPERATURE_THERMOSTAT + high = self.char_cooling_thresh_temp.value + low = self.char_heating_thresh_temp.value + min_temp, max_temp = self.get_temperature_range() + if CHAR_COOLING_THRESHOLD_TEMPERATURE in char_values: + events.append( + f"{CHAR_COOLING_THRESHOLD_TEMPERATURE} to {char_values[CHAR_COOLING_THRESHOLD_TEMPERATURE]}°C" + ) + high = char_values[CHAR_COOLING_THRESHOLD_TEMPERATURE] + # If the device doesn't support TARGET_TEMPATURE + # this can happen + if high < low: + low = high - HEAT_COOL_DEADBAND + if CHAR_HEATING_THRESHOLD_TEMPERATURE in char_values: + events.append( + f"{CHAR_HEATING_THRESHOLD_TEMPERATURE} to {char_values[CHAR_HEATING_THRESHOLD_TEMPERATURE]}°C" + ) + low = char_values[CHAR_HEATING_THRESHOLD_TEMPERATURE] + # If the device doesn't support TARGET_TEMPATURE + # this can happen + if low > high: + high = low + HEAT_COOL_DEADBAND + + high = min(high, max_temp) + low = max(low, min_temp) + + params.update( + { + ATTR_TARGET_TEMP_HIGH: self._temperature_to_states(high), + ATTR_TARGET_TEMP_LOW: self._temperature_to_states(low), + } + ) + + if service: + params[ATTR_ENTITY_ID] = self.entity_id + self.call_service( + DOMAIN_CLIMATE, service, params, ", ".join(events), + ) + + if CHAR_TARGET_HUMIDITY in char_values: + self.set_target_humidity(char_values[CHAR_TARGET_HUMIDITY]) + def get_temperature_range(self): """Return min and max temperature range.""" max_temp = self.hass.states.get(self.entity_id).attributes.get(ATTR_MAX_TEMP) max_temp = ( - temperature_to_homekit(max_temp, self._unit) - if max_temp - else DEFAULT_MAX_TEMP + self._temperature_to_homekit(max_temp) if max_temp else DEFAULT_MAX_TEMP ) max_temp = round(max_temp * 2) / 2 min_temp = self.hass.states.get(self.entity_id).attributes.get(ATTR_MIN_TEMP) min_temp = ( - temperature_to_homekit(min_temp, self._unit) - if min_temp - else DEFAULT_MIN_TEMP + self._temperature_to_homekit(min_temp) if min_temp else DEFAULT_MIN_TEMP ) min_temp = round(min_temp * 2) / 2 return min_temp, max_temp - def set_heat_cool(self, value): - """Change operation mode to value if call came from HomeKit.""" - _LOGGER.debug("%s: Set heat-cool to %d", self.entity_id, value) - self._flag_heat_cool = True - hass_value = self.hc_homekit_to_hass[value] - params = {ATTR_ENTITY_ID: self.entity_id, ATTR_HVAC_MODE: hass_value} - self.call_service( - DOMAIN_CLIMATE, SERVICE_SET_HVAC_MODE_THERMOSTAT, params, hass_value - ) - - @debounce def set_target_humidity(self, value): """Set target humidity to value if call came from HomeKit.""" _LOGGER.debug("%s: Set target humidity to %d", self.entity_id, value) params = {ATTR_ENTITY_ID: self.entity_id, ATTR_HUMIDITY: value} self.call_service( - DOMAIN_CLIMATE, SERVICE_SET_HUMIDITY, params, f"{value}{UNIT_PERCENTAGE}", - ) - - @debounce - def set_cooling_threshold(self, value): - """Set cooling threshold temp to value if call came from HomeKit.""" - _LOGGER.debug( - "%s: Set cooling threshold temperature to %.1f°C", self.entity_id, value - ) - self._flag_coolingthresh = True - low = self.char_heating_thresh_temp.value - temperature = temperature_to_states(value, self._unit) - params = { - ATTR_ENTITY_ID: self.entity_id, - ATTR_TARGET_TEMP_HIGH: temperature, - ATTR_TARGET_TEMP_LOW: temperature_to_states(low, self._unit), - } - self.call_service( - DOMAIN_CLIMATE, - SERVICE_SET_TEMPERATURE_THERMOSTAT, - params, - f"cooling threshold {temperature}{self._unit}", - ) - - @debounce - def set_heating_threshold(self, value): - """Set heating threshold temp to value if call came from HomeKit.""" - _LOGGER.debug( - "%s: Set heating threshold temperature to %.1f°C", self.entity_id, value - ) - self._flag_heatingthresh = True - high = self.char_cooling_thresh_temp.value - temperature = temperature_to_states(value, self._unit) - params = { - ATTR_ENTITY_ID: self.entity_id, - ATTR_TARGET_TEMP_HIGH: temperature_to_states(high, self._unit), - ATTR_TARGET_TEMP_LOW: temperature, - } - self.call_service( - DOMAIN_CLIMATE, - SERVICE_SET_TEMPERATURE_THERMOSTAT, - params, - f"heating threshold {temperature}{self._unit}", - ) - - @debounce - def set_target_temperature(self, value): - """Set target temperature to value if call came from HomeKit.""" - _LOGGER.debug("%s: Set target temperature to %.1f°C", self.entity_id, value) - self._flag_temperature = True - temperature = temperature_to_states(value, self._unit) - params = {ATTR_ENTITY_ID: self.entity_id, ATTR_TEMPERATURE: temperature} - self.call_service( - DOMAIN_CLIMATE, - SERVICE_SET_TEMPERATURE_THERMOSTAT, - params, - f"{temperature}{self._unit}", + DOMAIN_CLIMATE, SERVICE_SET_HUMIDITY, params, f"{value}{UNIT_PERCENTAGE}" ) def update_state(self, new_state): """Update thermostat state after state changed.""" + features = new_state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) + + # Update target operation mode FIRST + hvac_mode = new_state.state + if hvac_mode and hvac_mode in HC_HASS_TO_HOMEKIT: + homekit_hvac_mode = HC_HASS_TO_HOMEKIT[hvac_mode] + if self.char_target_heat_cool.value != homekit_hvac_mode: + self.char_target_heat_cool.set_value(homekit_hvac_mode) + + # Set current operation mode for supported thermostats + hvac_action = new_state.attributes.get(ATTR_HVAC_ACTION) + if hvac_action: + homekit_hvac_action = HC_HASS_TO_HOMEKIT_ACTION[hvac_action] + if self.char_current_heat_cool.value != homekit_hvac_action: + self.char_current_heat_cool.set_value(homekit_hvac_action) + # Update current temperature current_temp = new_state.attributes.get(ATTR_CURRENT_TEMPERATURE) if isinstance(current_temp, (int, float)): - current_temp = temperature_to_homekit(current_temp, self._unit) - self.char_current_temp.set_value(current_temp) + current_temp = self._temperature_to_homekit(current_temp) + if self.char_current_temp.value != current_temp: + self.char_current_temp.set_value(current_temp) # Update current humidity if CHAR_CURRENT_HUMIDITY in self.chars: current_humdity = new_state.attributes.get(ATTR_CURRENT_HUMIDITY) if isinstance(current_humdity, (int, float)): - self.char_current_humidity.set_value(current_humdity) - - # Update target temperature - target_temp = new_state.attributes.get(ATTR_TEMPERATURE) - if isinstance(target_temp, (int, float)): - target_temp = temperature_to_homekit(target_temp, self._unit) - if not self._flag_temperature: - self.char_target_temp.set_value(target_temp) - self._flag_temperature = False + if self.char_current_humidity.value != current_humdity: + self.char_current_humidity.set_value(current_humdity) # Update target humidity if CHAR_TARGET_HUMIDITY in self.chars: target_humdity = new_state.attributes.get(ATTR_HUMIDITY) if isinstance(target_humdity, (int, float)): - self.char_target_humidity.set_value(target_humdity) + if self.char_target_humidity.value != target_humdity: + self.char_target_humidity.set_value(target_humdity) # Update cooling threshold temperature if characteristic exists if self.char_cooling_thresh_temp: cooling_thresh = new_state.attributes.get(ATTR_TARGET_TEMP_HIGH) if isinstance(cooling_thresh, (int, float)): - cooling_thresh = temperature_to_homekit(cooling_thresh, self._unit) - if not self._flag_coolingthresh: + cooling_thresh = self._temperature_to_homekit(cooling_thresh) + if self.char_heating_thresh_temp.value != cooling_thresh: self.char_cooling_thresh_temp.set_value(cooling_thresh) - self._flag_coolingthresh = False # Update heating threshold temperature if characteristic exists if self.char_heating_thresh_temp: heating_thresh = new_state.attributes.get(ATTR_TARGET_TEMP_LOW) if isinstance(heating_thresh, (int, float)): - heating_thresh = temperature_to_homekit(heating_thresh, self._unit) - if not self._flag_heatingthresh: + heating_thresh = self._temperature_to_homekit(heating_thresh) + if self.char_heating_thresh_temp.value != heating_thresh: self.char_heating_thresh_temp.set_value(heating_thresh) - self._flag_heatingthresh = False + + # Update target temperature + target_temp = new_state.attributes.get(ATTR_TEMPERATURE) + if isinstance(target_temp, (int, float)): + target_temp = self._temperature_to_homekit(target_temp) + elif features & SUPPORT_TARGET_TEMPERATURE_RANGE: + # Homekit expects a target temperature + # even if the device does not support it + hc_hvac_mode = self.char_target_heat_cool.value + if hc_hvac_mode == HC_HEAT_COOL_HEAT: + target_temp = self._temperature_to_homekit( + new_state.attributes.get(ATTR_TARGET_TEMP_LOW) + ) + elif hc_hvac_mode == HC_HEAT_COOL_COOL: + target_temp = self._temperature_to_homekit( + new_state.attributes.get(ATTR_TARGET_TEMP_HIGH) + ) + if target_temp and self.char_target_temp.value != target_temp: + self.char_target_temp.set_value(target_temp) # Update display units if self._unit and self._unit in UNIT_HASS_TO_HOMEKIT: - self.char_display_units.set_value(UNIT_HASS_TO_HOMEKIT[self._unit]) - - # Update target operation mode - hvac_mode = new_state.state - if hvac_mode and hvac_mode in HC_HASS_TO_HOMEKIT: - if not self._flag_heat_cool: - self.char_target_heat_cool.set_value(HC_HASS_TO_HOMEKIT[hvac_mode]) - self._flag_heat_cool = False - - # Set current operation mode for supported thermostats - hvac_action = new_state.attributes.get(ATTR_HVAC_ACTION) - if hvac_action: - self.char_current_heat_cool.set_value( - HC_HASS_TO_HOMEKIT_ACTION[hvac_action] - ) + unit = UNIT_HASS_TO_HOMEKIT[self._unit] + if self.char_display_units.value != unit: + self.char_display_units.set_value(unit) @TYPES.register("WaterHeater") @@ -395,8 +469,6 @@ class WaterHeater(HomeAccessory): """Initialize a WaterHeater accessory object.""" super().__init__(*args, category=CATEGORY_THERMOSTAT) self._unit = self.hass.config.units.temperature_unit - self._flag_heat_cool = False - self._flag_temperature = False min_temp, max_temp = self.get_temperature_range() serv_thermostat = self.add_preload_service(SERV_THERMOSTAT) @@ -428,6 +500,9 @@ class WaterHeater(HomeAccessory): CHAR_TEMP_DISPLAY_UNITS, value=0 ) + state = self.hass.states.get(self.entity_id) + self.update_state(state) + def get_temperature_range(self): """Return min and max temperature range.""" max_temp = self.hass.states.get(self.entity_id).attributes.get(ATTR_MAX_TEMP) @@ -451,16 +526,14 @@ class WaterHeater(HomeAccessory): def set_heat_cool(self, value): """Change operation mode to value if call came from HomeKit.""" _LOGGER.debug("%s: Set heat-cool to %d", self.entity_id, value) - self._flag_heat_cool = True hass_value = HC_HOMEKIT_TO_HASS[value] if hass_value != HVAC_MODE_HEAT: - self.char_target_heat_cool.set_value(1) # Heat + if self.char_target_heat_cool.value != 1: + self.char_target_heat_cool.set_value(1) # Heat - @debounce def set_target_temperature(self, value): """Set target temperature to value if call came from HomeKit.""" _LOGGER.debug("%s: Set target temperature to %.1f°C", self.entity_id, value) - self._flag_temperature = True temperature = temperature_to_states(value, self._unit) params = {ATTR_ENTITY_ID: self.entity_id, ATTR_TEMPERATURE: temperature} self.call_service( @@ -476,17 +549,16 @@ class WaterHeater(HomeAccessory): temperature = new_state.attributes.get(ATTR_TEMPERATURE) if isinstance(temperature, (int, float)): temperature = temperature_to_homekit(temperature, self._unit) - self.char_current_temp.set_value(temperature) - if not self._flag_temperature: + if temperature != self.char_current_temp.value: self.char_target_temp.set_value(temperature) - self._flag_temperature = False # Update display units if self._unit and self._unit in UNIT_HASS_TO_HOMEKIT: - self.char_display_units.set_value(UNIT_HASS_TO_HOMEKIT[self._unit]) + unit = UNIT_HASS_TO_HOMEKIT[self._unit] + if self.char_display_units.value != unit: + self.char_display_units.set_value(unit) # Update target operation mode operation_mode = new_state.state - if operation_mode and not self._flag_heat_cool: + if operation_mode and self.char_target_heat_cool.value != 1: self.char_target_heat_cool.set_value(1) # Heat - self._flag_heat_cool = False diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index c12f49e1b9c..0295440df49 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -1,7 +1,10 @@ """Collection of useful functions for the HomeKit component.""" from collections import OrderedDict, namedtuple +import io import logging +import secrets +import pyqrcode import voluptuous as vol from homeassistant.components import fan, media_player, sensor @@ -27,6 +30,8 @@ from .const import ( FEATURE_PLAY_STOP, FEATURE_TOGGLE_MUTE, HOMEKIT_NOTIFY_ID, + HOMEKIT_PAIRING_QR, + HOMEKIT_PAIRING_QR_SECRET, TYPE_FAUCET, TYPE_OUTLET, TYPE_SHOWER, @@ -205,13 +210,24 @@ class HomeKitSpeedMapping: return list(self.speed_ranges.keys())[0] -def show_setup_message(hass, pincode): +def show_setup_message(hass, pincode, uri): """Display persistent notification with setup information.""" pin = pincode.decode() _LOGGER.info("Pincode: %s", pin) + + buffer = io.BytesIO() + url = pyqrcode.create(uri) + url.svg(buffer, scale=5) + pairing_secret = secrets.token_hex(32) + + hass.data[HOMEKIT_PAIRING_QR] = buffer.getvalue() + hass.data[HOMEKIT_PAIRING_QR_SECRET] = pairing_secret + message = ( - f"To set up Home Assistant in the Home App, enter the " - f"following code:\n### {pin}" + f"To set up Home Assistant in the Home App, " + f"scan the QR code or enter the following code:\n" + f"### {pin}\n" + f"![image](/api/homekit/pairingqr?{pairing_secret})" ) hass.components.persistent_notification.create( message, "HomeKit Setup", HOMEKIT_NOTIFY_ID diff --git a/homeassistant/components/homekit_controller/.translations/bg.json b/homeassistant/components/homekit_controller/.translations/bg.json deleted file mode 100644 index b1909ca2ec0..00000000000 --- a/homeassistant/components/homekit_controller/.translations/bg.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "\u0421\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0434\u043e\u0431\u0430\u0432\u0435\u043d\u043e, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043e.", - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e \u0441 \u0442\u043e\u0437\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440.", - "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.", - "already_paired": "\u0422\u043e\u0437\u0438 \u0430\u043a\u0441\u0435\u0441\u043e\u0430\u0440 \u0432\u0435\u0447\u0435 \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d \u0441 \u0434\u0440\u0443\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041c\u043e\u043b\u044f, \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u0442\u0435 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0438 \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "ignored_model": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430\u0442\u0430 \u043d\u0430 HomeKit \u0437\u0430 \u0442\u043e\u0437\u0438 \u043c\u043e\u0434\u0435\u043b \u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0430\u043d\u0430, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0435 \u043d\u0430\u043b\u0438\u0446\u0435 \u043f\u043e-\u043f\u044a\u043b\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430.", - "invalid_config_entry": "\u0422\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u0432\u0430 \u043a\u0430\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u0437\u0430 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u043d\u043e \u0432\u0435\u0447\u0435 \u0438\u043c\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0437\u0430 \u043d\u0435\u0433\u043e \u0432 Home Assistant, \u043a\u043e\u044f\u0442\u043e \u043f\u044a\u0440\u0432\u043e \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0430\u0442\u0430.", - "no_devices": "\u041d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u043d\u0435\u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" - }, - "error": { - "authentication_error": "\u0413\u0440\u0435\u0448\u0435\u043d HomeKit \u043a\u043e\u0434. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0433\u043e \u0438 \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "busy_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0432\u0430 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u0435 \u0441\u0434\u0432\u043e\u044f \u0441 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440.", - "max_peers_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0430 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u043d\u044f\u043c\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0437\u0430 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435.", - "max_tries_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0432\u0430 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 100 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438 \u043e\u043f\u0438\u0442\u0430 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f.", - "pairing_failed": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0435\u043d\u043e \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u043e\u043f\u0438\u0442 \u0437\u0430 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435 \u0441 \u0442\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0422\u043e\u0432\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043d \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438\u043b\u0438 \u0432\u0430\u0448\u0435\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430.", - "unable_to_pair": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "unknown_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0441\u044a\u043e\u0431\u0449\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430. \u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u0431\u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "flow_title": "HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "\u041a\u043e\u0434 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435" - }, - "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 HomeKit \u043a\u043e\u0434\u0430 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 (\u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XXX-XX-XXX) \u0437\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0442\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "user": { - "data": { - "device": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e, \u0441 \u043a\u043e\u0435\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - } - }, - "title": "HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/ca.json b/homeassistant/components/homekit_controller/.translations/ca.json deleted file mode 100644 index 1d2331870e1..00000000000 --- a/homeassistant/components/homekit_controller/.translations/ca.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "No s'ha pogut vincular, no s'ha trobat el dispositiu.", - "already_configured": "Accessori ja configurat amb aquest controlador.", - "already_in_progress": "El flux de dades de configuraci\u00f3 pel dispositiu ja est\u00e0 en curs.", - "already_paired": "Aquest accessori ja est\u00e0 vinculat amb un altre dispositiu. Reinicia l'accessori i torna-ho a provar.", - "ignored_model": "La disponibilitat de HomeKit per aquest model est\u00e0 bloquejada ja que, de moment, no hi ha una integraci\u00f3 nativa completa.", - "invalid_config_entry": "Aquest dispositiu s'est\u00e0 mostrant com a llest per a ser vinculat per\u00f2, hi ha una entrada de configuraci\u00f3 conflictiva a Home Assistant que s'ha d'eliminar primer.", - "no_devices": "No s'han trobat dispositius desvinculats." - }, - "error": { - "authentication_error": "Codi HomeKit incorrecte. Verifica'l i torna-ho a provar.", - "busy_error": "El dispositiu ha refusat la vinculaci\u00f3 perqu\u00e8 actualment ho est\u00e0 intentant amb un altre controlador diferent.", - "max_peers_error": "El dispositiu ha refusat la vinculaci\u00f3 perqu\u00e8 no t\u00e9 suficient espai lliure.", - "max_tries_error": "El dispositiu ha refusat la vinculaci\u00f3 perqu\u00e8 ha rebut m\u00e9s de 100 intents d\u2019autenticaci\u00f3 fallits.", - "pairing_failed": "S'ha produ\u00eft un error mentre s'intentava la vinculaci\u00f3 amb el dispositiu. Pot ser que sigui un error temporal o pot ser que el teu dispositiu encara no estigui suportat.", - "unable_to_pair": "No s'ha pogut vincular, torna-ho a provar.", - "unknown_error": "El dispositiu ha em\u00e8s un error desconegut. Vinculaci\u00f3 fallida." - }, - "flow_title": "Accessori HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Codi de vinculaci\u00f3" - }, - "description": "Introdueix el codi de vinculaci\u00f3 de HomeKit per utilitzar aquest accessori (format XXX-XX-XXX)", - "title": "Vinculaci\u00f3 amb" - }, - "user": { - "data": { - "device": "Dispositiu" - }, - "description": "Selecciona el dispositiu amb el qual et vols vincular", - "title": "Vinculaci\u00f3 amb un accessori HomeKit" - } - }, - "title": "Accessori HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/cy.json b/homeassistant/components/homekit_controller/.translations/cy.json deleted file mode 100644 index 59e402080f3..00000000000 --- a/homeassistant/components/homekit_controller/.translations/cy.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "ignored_model": "Mae cymorth HomeKit ar gyfer y model hwn wedi'i rwystro gan fod integreiddiad cynhenid mwy cyflawn ar gael.", - "invalid_config_entry": "Mae'r ddyfais yn dangos bod eisoes wedi paru ond mae cofnod ffurwedd groes amdano yn Home Assistant sydd angen ei diddymu", - "no_devices": "Ni ellir ddod o hyd i ddyfeisiau heb eu paru" - }, - "error": { - "authentication_error": "Cod HomeKit anghywir. Gwiriwch a cheisiwch eto.", - "unable_to_pair": "Methu paru, pl\u00eds ceisiwch eto", - "unknown_error": "Dyfeis wedi adrodd gwall anhysbys. Methodd paru." - }, - "step": { - "pair": { - "data": { - "pairing_code": "Cod Paru" - }, - "description": "Rhowch eich cod paru HomeKit i ddefnyddio'r ategolyn hwn", - "title": "Paru gyda ategolyn HomeKit" - }, - "user": { - "data": { - "device": "Dyfais" - }, - "description": "Dewiswch y ddyfais rydych eisiau paru efo", - "title": "Paru gyda ategolyn HomeKit" - } - }, - "title": "Ategolyn HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/da.json b/homeassistant/components/homekit_controller/.translations/da.json deleted file mode 100644 index 20b209752eb..00000000000 --- a/homeassistant/components/homekit_controller/.translations/da.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Parring kan ikke tilf\u00f8jes da enheden ikke l\u00e6ngere findes.", - "already_configured": "Tilbeh\u00f8ret er allerede konfigureret med denne controller.", - "already_in_progress": "Enhedskonfiguration er allerede i gang.", - "already_paired": "Dette tilbeh\u00f8r er allerede parret med en anden enhed. Nulstil tilbeh\u00f8ret og pr\u00f8v igen.", - "ignored_model": "HomeKit-underst\u00f8ttelse af denne model er blokeret, da en mere funktionskomplet indbygget integration er tilg\u00e6ngelig.", - "invalid_config_entry": "Denne enhed vises som klar til parring, men der er allerede en modstridende konfigurationspost for den i Home Assistant, som f\u00f8rst skal fjernes.", - "no_devices": "Der blev ikke fundet nogen uparrede enheder" - }, - "error": { - "authentication_error": "Forkert HomeKit-kode. Kontroller den og pr\u00f8v igen.", - "busy_error": "Enheden n\u00e6gtede at parre da den allerede er parret med en anden controller.", - "max_peers_error": "Enheden n\u00e6gtede at parre da den ikke har nok frit parringslagerplads.", - "max_tries_error": "Enheden n\u00e6gtede at parre da den har modtaget mere end 100 mislykkede godkendelsesfors\u00f8g.", - "pairing_failed": "En uh\u00e5ndteret fejl opstod under fors\u00f8g p\u00e5 at parre med denne enhed. Dette kan v\u00e6re en midlertidig fejl eller din enhed muligvis ikke underst\u00f8ttes i \u00f8jeblikket.", - "unable_to_pair": "Kunne ikke parre, pr\u00f8v venligst igen.", - "unknown_error": "Enhed rapporterede en ukendt fejl. Parring mislykkedes." - }, - "flow_title": "HomeKit-tilbeh\u00f8r: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Parringskode" - }, - "description": "Indtast din HomeKit-parringskode (i formatet XXX-XX-XXX) for at bruge dette tilbeh\u00f8r", - "title": "Par med HomeKit-tilbeh\u00f8r" - }, - "user": { - "data": { - "device": "Enhed" - }, - "description": "V\u00e6lg den enhed du vil parre med", - "title": "Par med HomeKit-tilbeh\u00f8r" - } - }, - "title": "HomeKit-tilbeh\u00f8r" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/de.json b/homeassistant/components/homekit_controller/.translations/de.json deleted file mode 100644 index 8223616f11e..00000000000 --- a/homeassistant/components/homekit_controller/.translations/de.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Die Kopplung kann nicht durchgef\u00fchrt werden, da das Ger\u00e4t nicht mehr gefunden werden kann.", - "already_configured": "Das Zubeh\u00f6r ist mit diesem Controller bereits konfiguriert.", - "already_in_progress": "Der Konfigurationsablauf f\u00fcr das Ger\u00e4t wird bereits ausgef\u00fchrt.", - "already_paired": "Dieses Zubeh\u00f6r ist bereits mit einem anderen Ger\u00e4t gekoppelt. Setze das Zubeh\u00f6r zur\u00fcck und versuche es erneut.", - "ignored_model": "Die Unterst\u00fctzung von HomeKit f\u00fcr dieses Modell ist blockiert, da eine vollst\u00e4ndige native Integration verf\u00fcgbar ist.", - "invalid_config_entry": "Dieses Ger\u00e4t wird als bereit zum Koppeln angezeigt, es gibt jedoch bereits einen widerspr\u00fcchlichen Konfigurationseintrag in Home Assistant, der zuerst entfernt werden muss.", - "no_devices": "Keine ungekoppelten Ger\u00e4te gefunden" - }, - "error": { - "authentication_error": "Ung\u00fcltiger HomeKit Code, \u00fcberpr\u00fcfe bitte den Code und versuche es erneut.", - "busy_error": "Das Ger\u00e4t weigerte sich, das Kopplung durchzuf\u00fchren, da es bereits mit einem anderen Controller gekoppelt ist.", - "max_peers_error": "Das Ger\u00e4t weigerte sich, die Kopplung durchzuf\u00fchren, da es keinen freien Kopplungs-Speicher hat.", - "max_tries_error": "Das Ger\u00e4t hat sich geweigert die Kopplung durchzuf\u00fchren, da es mehr als 100 erfolglose Authentifizierungsversuche erhalten hat.", - "pairing_failed": "Beim Versuch dieses Ger\u00e4t zu koppeln ist ein Fehler aufgetreten. Dies kann ein vor\u00fcbergehender Fehler sein oder das Ger\u00e4t wird derzeit m\u00f6glicherweise nicht unterst\u00fctzt.", - "unable_to_pair": "Koppeln fehltgeschlagen, bitte versuche es erneut", - "unknown_error": "Das Ger\u00e4t meldete einen unbekannten Fehler. Die Kopplung ist fehlgeschlagen." - }, - "flow_title": "HomeKit-Zubeh\u00f6r: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Kopplungscode" - }, - "description": "Gib deinen HomeKit-Kopplungscode ein, um dieses Zubeh\u00f6r zu verwenden", - "title": "Mit HomeKit Zubeh\u00f6r koppeln" - }, - "user": { - "data": { - "device": "Ger\u00e4t" - }, - "description": "W\u00e4hle das Ger\u00e4t aus, mit dem du die Kopplung herstellen m\u00f6chtest", - "title": "Mit HomeKit Zubeh\u00f6r koppeln" - } - }, - "title": "HomeKit Zubeh\u00f6r" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/en.json b/homeassistant/components/homekit_controller/.translations/en.json deleted file mode 100644 index eb994289a62..00000000000 --- a/homeassistant/components/homekit_controller/.translations/en.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Cannot add pairing as device can no longer be found.", - "already_configured": "Accessory is already configured with this controller.", - "already_in_progress": "Config flow for device is already in progress.", - "already_paired": "This accessory is already paired to another device. Please reset the accessory and try again.", - "ignored_model": "HomeKit support for this model is blocked as a more feature complete native integration is available.", - "invalid_config_entry": "This device is showing as ready to pair but there is already a conflicting configuration entry for it in Home Assistant that must first be removed.", - "no_devices": "No unpaired devices could be found" - }, - "error": { - "authentication_error": "Incorrect HomeKit code. Please check it and try again.", - "busy_error": "Device refused to add pairing as it is already pairing with another controller.", - "max_peers_error": "Device refused to add pairing as it has no free pairing storage.", - "max_tries_error": "Device refused to add pairing as it has received more than 100 unsuccessful authentication attempts.", - "pairing_failed": "An unhandled error occurred while attempting to pair with this device. This may be a temporary failure or your device may not be supported currently.", - "unable_to_pair": "Unable to pair, please try again.", - "unknown_error": "Device reported an unknown error. Pairing failed." - }, - "flow_title": "HomeKit Accessory: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Pairing Code" - }, - "description": "Enter your HomeKit pairing code (in the format XXX-XX-XXX) to use this accessory", - "title": "Pair with HomeKit Accessory" - }, - "user": { - "data": { - "device": "Device" - }, - "description": "Select the device you want to pair with", - "title": "Pair with HomeKit Accessory" - } - }, - "title": "HomeKit Accessory" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/es-419.json b/homeassistant/components/homekit_controller/.translations/es-419.json deleted file mode 100644 index a99011cf8b1..00000000000 --- a/homeassistant/components/homekit_controller/.translations/es-419.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El accesorio ya est\u00e1 configurado con este controlador.", - "already_paired": "Este accesorio ya est\u00e1 emparejado con otro dispositivo. Por favor, reinicie el accesorio y vuelva a intentarlo." - }, - "error": { - "pairing_failed": "Se produjo un error no controlado al intentar vincularse con este dispositivo. Esto puede ser una falla temporal o su dispositivo puede no ser compatible actualmente.", - "unable_to_pair": "No se puede vincular, por favor intente nuevamente.", - "unknown_error": "El dispositivo inform\u00f3 un error desconocido. Vinculaci\u00f3n fallida." - }, - "flow_title": "Accesorio HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "C\u00f3digo de emparejamiento" - }, - "description": "Ingrese su c\u00f3digo de emparejamiento de HomeKit (en el formato XXX-XX-XXX) para usar este accesorio", - "title": "Vincular con el accesorio HomeKit" - }, - "user": { - "data": { - "device": "Dispositivo" - }, - "description": "Seleccione el dispositivo con el que desea vincular", - "title": "Vincular con el accesorio HomeKit" - } - }, - "title": "Accesorio HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/es.json b/homeassistant/components/homekit_controller/.translations/es.json deleted file mode 100644 index 67f6daa8469..00000000000 --- a/homeassistant/components/homekit_controller/.translations/es.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "No se puede a\u00f1adir el emparejamiento porque ya no se puede encontrar el dispositivo.", - "already_configured": "El accesorio ya est\u00e1 configurado con este controlador.", - "already_in_progress": "El flujo de configuraci\u00f3n del dispositivo ya est\u00e1 en curso.", - "already_paired": "Este accesorio ya est\u00e1 emparejado con otro dispositivo. Por favor, reinicia el accesorio e int\u00e9ntalo de nuevo.", - "ignored_model": "El soporte de HomeKit para este modelo est\u00e1 bloqueado ya que est\u00e1 disponible una integraci\u00f3n nativa m\u00e1s completa.", - "invalid_config_entry": "Este dispositivo se muestra como listo para vincular, pero ya existe una entrada que causa conflicto en Home Assistant y se debe eliminar primero.", - "no_devices": "No se encontraron dispositivos no emparejados" - }, - "error": { - "authentication_error": "C\u00f3digo HomeKit incorrecto. Por favor, compru\u00e9belo e int\u00e9ntelo de nuevo.", - "busy_error": "El dispositivo rechaz\u00f3 el emparejamiento porque ya est\u00e1 emparejado con otro controlador.", - "max_peers_error": "El dispositivo rechaz\u00f3 el emparejamiento ya que no tiene almacenamiento de emparejamientos libres.", - "max_tries_error": "El dispositivo rechaz\u00f3 el emparejamiento ya que ha recibido m\u00e1s de 100 intentos de autenticaci\u00f3n fallidos.", - "pairing_failed": "Se ha producido un error no controlado al intentar emparejarse con este dispositivo. Esto puede ser un fallo temporal o que tu dispositivo no est\u00e9 admitido en este momento.", - "unable_to_pair": "No se ha podido emparejar, por favor int\u00e9ntelo de nuevo.", - "unknown_error": "El dispositivo report\u00f3 un error desconocido. La vinculaci\u00f3n ha fallado." - }, - "flow_title": "Accesorio HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "C\u00f3digo de vinculaci\u00f3n" - }, - "description": "Introduce tu c\u00f3digo de vinculaci\u00f3n de HomeKit (en este formato XXX-XX-XXX) para usar este accesorio", - "title": "Vincular con accesorio HomeKit" - }, - "user": { - "data": { - "device": "Dispositivo" - }, - "description": "Selecciona el dispositivo que quieres vincular", - "title": "Vincular con accesorio HomeKit" - } - }, - "title": "Accesorio HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/fr.json b/homeassistant/components/homekit_controller/.translations/fr.json deleted file mode 100644 index 7f0566ddd42..00000000000 --- a/homeassistant/components/homekit_controller/.translations/fr.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Impossible d'ajouter le couplage car l'appareil est introuvable.", - "already_configured": "L'accessoire est d\u00e9j\u00e0 configur\u00e9 avec ce contr\u00f4leur.", - "already_in_progress": "Le flux de configuration de l'appareil est d\u00e9j\u00e0 en cours.", - "already_paired": "Cet accessoire est d\u00e9j\u00e0 associ\u00e9 \u00e0 un autre appareil. R\u00e9initialisez l\u2019accessoire et r\u00e9essayez.", - "ignored_model": "La prise en charge de HomeKit pour ce mod\u00e8le est bloqu\u00e9e car une int\u00e9gration native plus compl\u00e8te est disponible.", - "invalid_config_entry": "Cet appareil est pr\u00eat \u00e0 \u00eatre coupl\u00e9, mais il existe d\u00e9j\u00e0 une entr\u00e9e de configuration en conflit dans Home Assistant \u00e0 supprimer.", - "no_devices": "Aucun appareil non appair\u00e9 n'a pu \u00eatre trouv\u00e9" - }, - "error": { - "authentication_error": "Code HomeKit incorrect. S'il vous pla\u00eet v\u00e9rifier et essayez \u00e0 nouveau.", - "busy_error": "L'appareil a refus\u00e9 d'ajouter le couplage car il est d\u00e9j\u00e0 coupl\u00e9 avec un autre contr\u00f4leur.", - "max_peers_error": "L'appareil a refus\u00e9 d'ajouter le couplage car il ne dispose pas de stockage de couplage libre.", - "max_tries_error": "Le p\u00e9riph\u00e9rique a refus\u00e9 d'ajouter le couplage car il a re\u00e7u plus de 100 tentatives d'authentification infructueuses.", - "pairing_failed": "Une erreur non g\u00e9r\u00e9e s'est produite lors de la tentative d'appairage avec cet appareil. Il se peut qu'il s'agisse d'une panne temporaire ou que votre appareil ne soit pas pris en charge actuellement.", - "unable_to_pair": "Impossible d'appairer, veuillez r\u00e9essayer.", - "unknown_error": "L'appareil a signal\u00e9 une erreur inconnue. L'appairage a \u00e9chou\u00e9." - }, - "flow_title": "Accessoire HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Code d\u2019appairage" - }, - "description": "Entrez votre code de jumelage HomeKit (au format XXX-XX-XXX) pour utiliser cet accessoire.", - "title": "Appairer avec l'accessoire HomeKit" - }, - "user": { - "data": { - "device": "Appareil" - }, - "description": "S\u00e9lectionnez l'appareil avec lequel vous voulez appairer", - "title": "Appairer avec l'accessoire HomeKit" - } - }, - "title": "Accessoire HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/hu.json b/homeassistant/components/homekit_controller/.translations/hu.json deleted file mode 100644 index 53ca9a39015..00000000000 --- a/homeassistant/components/homekit_controller/.translations/hu.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Nem adhat\u00f3 hozz\u00e1 p\u00e1ros\u00edt\u00e1s, mert az eszk\u00f6z m\u00e1r nem tal\u00e1lhat\u00f3.", - "already_configured": "A tartoz\u00e9k m\u00e1r konfigur\u00e1lva van ezzel a vez\u00e9rl\u0151vel.", - "already_in_progress": "Az eszk\u00f6z konfigur\u00e1ci\u00f3ja m\u00e1r folyamatban van.", - "already_paired": "Ez a tartoz\u00e9k m\u00e1r p\u00e1ros\u00edtva van egy m\u00e1sik eszk\u00f6zzel. \u00c1ll\u00edtsa alaphelyzetbe a tartoz\u00e9kot, majd pr\u00f3b\u00e1lkozzon \u00fajra.", - "ignored_model": "A HomeKit t\u00e1mogat\u00e1sa e modelln\u00e9l blokkolva van, mivel a szolg\u00e1ltat\u00e1shoz teljes nat\u00edv integr\u00e1ci\u00f3 \u00e9rhet\u0151 el.", - "invalid_config_entry": "Ez az eszk\u00f6z k\u00e9szen \u00e1ll a p\u00e1ros\u00edt\u00e1sra, de m\u00e1r van egy \u00fctk\u00f6z\u0151 konfigur\u00e1ci\u00f3s bejegyz\u00e9s a Home Assistant-ben, amelyet el\u0151sz\u00f6r el kell t\u00e1vol\u00edtani.", - "no_devices": "Nem tal\u00e1lhat\u00f3 nem p\u00e1ros\u00edtott eszk\u00f6z" - }, - "error": { - "authentication_error": "Helytelen HomeKit k\u00f3d. K\u00e9rj\u00fck, ellen\u0151rizze, \u00e9s pr\u00f3b\u00e1lja \u00fajra.", - "busy_error": "Az eszk\u00f6z megtagadta a p\u00e1ros\u00edt\u00e1s hozz\u00e1ad\u00e1s\u00e1t, mivel m\u00e1r p\u00e1ros\u00edtva van egy m\u00e1sik vez\u00e9rl\u0151vel.", - "max_peers_error": "Az eszk\u00f6z megtagadta a p\u00e1ros\u00edt\u00e1s hozz\u00e1ad\u00e1s\u00e1t, mivel nincs ingyenes p\u00e1ros\u00edt\u00e1si t\u00e1rhely.", - "max_tries_error": "Az eszk\u00f6z megtagadta a p\u00e1ros\u00edt\u00e1s hozz\u00e1ad\u00e1s\u00e1t, mivel t\u00f6bb mint 100 sikertelen hiteles\u00edt\u00e9si k\u00eds\u00e9rletet kapott.", - "pairing_failed": "Nem kezelt hiba t\u00f6rt\u00e9nt az eszk\u00f6zzel val\u00f3 p\u00e1ros\u00edt\u00e1s sor\u00e1n. Lehet, hogy ez \u00e1tmeneti hiba, vagy az eszk\u00f6z jelenleg m\u00e9g nem t\u00e1mogatott.", - "unable_to_pair": "Nem siker\u00fclt p\u00e1ros\u00edtani, pr\u00f3b\u00e1ld \u00fajra.", - "unknown_error": "Az eszk\u00f6z ismeretlen hib\u00e1t jelentett. A p\u00e1ros\u00edt\u00e1s sikertelen." - }, - "flow_title": "HomeKit tartoz\u00e9k: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "P\u00e1ros\u00edt\u00e1si k\u00f3d" - }, - "description": "\u00cdrja be a HomeKit p\u00e1ros\u00edt\u00e1si k\u00f3dj\u00e1t (XXX-XX-XXX form\u00e1tumban) a kieg\u00e9sz\u00edt\u0151 haszn\u00e1lat\u00e1hoz", - "title": "HomeKit tartoz\u00e9k p\u00e1ros\u00edt\u00e1sa" - }, - "user": { - "data": { - "device": "Eszk\u00f6z" - }, - "description": "V\u00e1lassza ki azt az eszk\u00f6zt, amelyet p\u00e1ros\u00edtani szeretne", - "title": "HomeKit tartoz\u00e9k p\u00e1ros\u00edt\u00e1sa" - } - }, - "title": "HomeKit tartoz\u00e9k" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/it.json b/homeassistant/components/homekit_controller/.translations/it.json deleted file mode 100644 index 69bb1f13c84..00000000000 --- a/homeassistant/components/homekit_controller/.translations/it.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Impossibile aggiungere l'abbinamento in quanto non \u00e8 pi\u00f9 possibile trovare il dispositivo.", - "already_configured": "L'accessorio \u00e8 gi\u00e0 configurato con questo controller.", - "already_in_progress": "Il flusso di configurazione per il dispositivo \u00e8 gi\u00e0 in corso.", - "already_paired": "Questo accessorio \u00e8 gi\u00e0 associato a un altro dispositivo. Si prega di resettare l'accessorio e riprovare.", - "ignored_model": "Il supporto di HomeKit per questo modello \u00e8 bloccato poich\u00e9 \u00e8 disponibile un'integrazione nativa con pi\u00f9 funzionalit\u00e0.", - "invalid_config_entry": "Questo dispositivo viene visualizzato come pronto per l'associazione, ma c'\u00e8 gi\u00e0 una voce di configurazione in conflitto in Home Assistant che prima deve essere rimossa.", - "no_devices": "Non \u00e8 stato possibile trovare dispositivi non associati" - }, - "error": { - "authentication_error": "Codice HomeKit errato. Per favore, controllate e riprovate.", - "busy_error": "Il dispositivo ha rifiutato di aggiungere l'abbinamento in quanto \u00e8 gi\u00e0 associato a un altro controller.", - "max_peers_error": "Il dispositivo ha rifiutato di aggiungere l'abbinamento in quanto non dispone di una memoria libera per esso.", - "max_tries_error": "Il dispositivo ha rifiutato di aggiungere l'abbinamento poich\u00e9 ha ricevuto pi\u00f9 di 100 tentativi di autenticazione non riusciti.", - "pairing_failed": "Si \u00e8 verificato un errore non gestito durante il tentativo di abbinamento con questo dispositivo. Potrebbe trattarsi di un errore temporaneo o il dispositivo potrebbe non essere attualmente supportato.", - "unable_to_pair": "Impossibile abbinare, per favore riprova.", - "unknown_error": "Il dispositivo ha riportato un errore sconosciuto. L'abbinamento non \u00e8 riuscito." - }, - "flow_title": "Accessorio HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Codice di abbinamento" - }, - "description": "Immettere il codice di abbinamento HomeKit (nel formato XXX-XX-XXX) per utilizzare questo accessorio", - "title": "Abbina con accessorio HomeKit" - }, - "user": { - "data": { - "device": "Dispositivo" - }, - "description": "Selezionare il dispositivo che si desidera abbinare", - "title": "Abbina con accessorio HomeKit" - } - }, - "title": "Accessorio HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/ko.json b/homeassistant/components/homekit_controller/.translations/ko.json deleted file mode 100644 index 8837e501a8a..00000000000 --- a/homeassistant/components/homekit_controller/.translations/ko.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "\uae30\uae30\ub97c \ub354 \uc774\uc0c1 \ucc3e\uc744 \uc218 \uc5c6\uc73c\ubbc0\ub85c \ud398\uc5b4\ub9c1\uc744 \ucd94\uac00 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "already_configured": "\uc561\uc138\uc11c\ub9ac\uac00 \ucee8\ud2b8\ub864\ub7ec\uc5d0 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "already_in_progress": "\uae30\uae30 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", - "already_paired": "\uc774 \uc561\uc138\uc11c\ub9ac\ub294 \uc774\ubbf8 \ub2e4\ub978 \uae30\uae30\uc640 \ud398\uc5b4\ub9c1\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc561\uc138\uc11c\ub9ac\ub97c \uc7ac\uc124\uc815\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "ignored_model": "\uc774 \ubaa8\ub378\uc5d0 \ub300\ud55c HomeKit \uc9c0\uc6d0\uc740 \ub354 \ub9ce\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \uae30\ubcf8 \uad6c\uc131\uc694\uc18c\ub85c \uc778\ud574 \ucc28\ub2e8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "invalid_config_entry": "\uc774 \uae30\uae30\ub294 \ud398\uc5b4\ub9c1 \ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc9c0\ub9cc Home Assistant \uc5d0 \uc774\ubbf8 \uad6c\uc131\ub418\uc5b4 \ucda9\ub3cc\ud558\ub294 \uad6c\uc131\uc694\uc18c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uba3c\uc800 \ud574\ub2f9 \uad6c\uc131\uc694\uc18c\ub97c \uc81c\uac70\ud574\uc8fc\uc138\uc694.", - "no_devices": "\ud398\uc5b4\ub9c1\uc774 \ud544\uc694\ud55c \uae30\uae30\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" - }, - "error": { - "authentication_error": "HomeKit \ucf54\ub4dc\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud655\uc778 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "busy_error": "\uae30\uae30\uac00 \uc774\ubbf8 \ub2e4\ub978 \ucee8\ud2b8\ub864\ub7ec\uc640 \ud398\uc5b4\ub9c1 \uc911\uc774\ubbc0\ub85c \ud398\uc5b4\ub9c1 \ucd94\uac00\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "max_peers_error": "\uae30\uae30\uc5d0 \ube44\uc5b4\uc788\ub294 \ud398\uc5b4\ub9c1 \uc7a5\uc18c\uac00 \uc5c6\uc5b4 \ud398\uc5b4\ub9c1 \ucd94\uac00\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "max_tries_error": "\uae30\uae30\uac00 \uc2e4\ud328\ud55c \uc778\uc99d \uc2dc\ub3c4 \ud69f\uc218\uac00 100 \ud68c\ub97c \ucd08\uacfc\ud558\uc5ec \ud398\uc5b4\ub9c1\uc744 \ucd94\uac00\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "pairing_failed": "\uc774 \uae30\uae30\uc640 \ud398\uc5b4\ub9c1\uc744 \uc2dc\ub3c4\ud558\ub294 \uc911 \ucc98\ub9ac\ub418\uc9c0 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \uc77c\uc2dc\uc801\uc778 \uc624\ub958\uc774\uac70\ub098 \ud604\uc7ac \uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \uae30\uae30 \uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "unable_to_pair": "\ud398\uc5b4\ub9c1 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "unknown_error": "\uae30\uae30\uc5d0\uc11c \uc54c \uc218\uc5c6\ub294 \uc624\ub958\ub97c \ubcf4\uace0\ud588\uc2b5\ub2c8\ub2e4. \ud398\uc5b4\ub9c1\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4." - }, - "flow_title": "HomeKit \uc561\uc138\uc11c\ub9ac: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "\ud398\uc5b4\ub9c1 \ucf54\ub4dc" - }, - "description": "\uc774 \uc561\uc138\uc11c\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 HomeKit \ud398\uc5b4\ub9c1 \ucf54\ub4dc (XXX-XX-XXX \ud615\uc2dd) \ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "HomeKit \uc561\uc138\uc11c\ub9ac \ud398\uc5b4\ub9c1" - }, - "user": { - "data": { - "device": "\uae30\uae30" - }, - "description": "\ud398\uc5b4\ub9c1 \ud560 \uae30\uae30\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694", - "title": "HomeKit \uc561\uc138\uc11c\ub9ac \ud398\uc5b4\ub9c1" - } - }, - "title": "HomeKit \uc561\uc138\uc11c\ub9ac" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/lb.json b/homeassistant/components/homekit_controller/.translations/lb.json deleted file mode 100644 index ca7bce44508..00000000000 --- a/homeassistant/components/homekit_controller/.translations/lb.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "D'Kupplung kann net dob\u00e4igesat ginn, well den Apparat net m\u00e9i siichtbar ass", - "already_configured": "Accessoire ass schon mat d\u00ebsem Kontroller konfigur\u00e9iert.", - "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", - "already_paired": "D\u00ebsen Accessoire ass schonn mat engem aneren Apparat verbonnen. S\u00ebtzt den Apparat op Wierksastellungen zer\u00e9ck an prob\u00e9iert nach emol w.e.g.", - "ignored_model": "HomeKit Support fir d\u00ebse Modell ass block\u00e9iert well eng m\u00e9i komplett nativ Integratioun disponibel ass.", - "invalid_config_entry": "D\u00ebsen Apparat mellt sech prett fir ze verbanne mee et g\u00ebtt schonn eng Entr\u00e9e am Home Assistant d\u00e9i ee Konflikt duerstellt welch fir d'\u00e9ischt muss erausgeholl ginn.", - "no_devices": "Keng net verbonnen Apparater fonnt" - }, - "error": { - "authentication_error": "Ong\u00ebltege HomeKit Code. Iwwerpr\u00e9ift d\u00ebsen an prob\u00e9iert w.e.g. nach emol.", - "busy_error": "Den Apparat huet en Kupplungs Versuch refus\u00e9iert, well en scho mat engem anere Kontroller verbonnen ass.", - "max_peers_error": "Den Apparat huet den Kupplungs Versuch refus\u00e9iert well et keng fr\u00e4i Pairing Memoire huet.", - "max_tries_error": "Den Apparat huet den Kupplungs Versuch refus\u00e9iert well et m\u00e9i w\u00e9i 100 net erfollegr\u00e4ich Authentifikatioun's Versich erhalen huet.", - "pairing_failed": "Eng onerwaarte Feeler ass opgetruede beim Kupplung's Versuch mat d\u00ebsem Apparat. D\u00ebst kann e tempor\u00e4re Feeler sinn oder \u00c4ren Apparat g\u00ebtt aktuell net \u00ebnnerst\u00ebtzt.", - "unable_to_pair": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", - "unknown_error": "Apparat mellt een onbekannte Feeler. Verbindung net m\u00e9iglech." - }, - "flow_title": "HomeKit Accessoire: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Pairing Code" - }, - "description": "Gitt \u00e4ren HomeKit pairing Code (am Format XXX-XX-XXX) an fir d\u00ebsen Accessoire ze benotzen", - "title": "Mam HomeKit Accessoire verbannen" - }, - "user": { - "data": { - "device": "Apparat" - }, - "description": "Wielt den Apparat aus dee soll verbonne ginn", - "title": "Mam HomeKit Accessoire verbannen" - } - }, - "title": "HomeKit Accessoire" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/nl.json b/homeassistant/components/homekit_controller/.translations/nl.json deleted file mode 100644 index 30494295f0e..00000000000 --- a/homeassistant/components/homekit_controller/.translations/nl.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Kan geen koppeling toevoegen omdat het apparaat niet langer kan worden gevonden.", - "already_configured": "Accessoire is al geconfigureerd met deze controller.", - "already_in_progress": "De configuratiestroom voor het apparaat is al in volle gang.", - "already_paired": "Dit accessoire is al gekoppeld aan een ander apparaat. Reset het accessoire en probeer het opnieuw.", - "ignored_model": "HomeKit-ondersteuning voor dit model is geblokkeerd omdat er een meer functie volledige native integratie beschikbaar is.", - "invalid_config_entry": "Dit apparaat geeft aan dat het gereed is om te koppelen, maar er is al een conflicterend configuratie-item voor in de Home Assistant dat eerst moet worden verwijderd.", - "no_devices": "Er zijn geen gekoppelde apparaten gevonden" - }, - "error": { - "authentication_error": "Onjuiste HomeKit-code. Controleer het en probeer het opnieuw.", - "busy_error": "Het apparaat weigerde om koppelingen toe te voegen, omdat het al gekoppeld is met een andere controller.", - "max_peers_error": "Apparaat heeft geweigerd om koppelingen toe te voegen omdat het geen vrije koppelingsopslag heeft.", - "max_tries_error": "Apparaat weigerde pairing toe te voegen omdat het meer dan 100 niet-succesvolle authenticatiepogingen heeft ontvangen.", - "pairing_failed": "Er deed zich een fout voor tijdens het koppelen met dit apparaat. Dit kan een tijdelijke storing zijn of uw apparaat wordt mogelijk momenteel niet ondersteund.", - "unable_to_pair": "Kan niet koppelen, probeer het opnieuw.", - "unknown_error": "Apparaat meldde een onbekende fout. Koppelen mislukt." - }, - "flow_title": "HomeKit-accessoire: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Koppelingscode" - }, - "description": "Voer uw HomeKit pairing code (in het formaat XXX-XX-XXX) om dit accessoire te gebruiken", - "title": "Koppel met HomeKit accessoire" - }, - "user": { - "data": { - "device": "Apparaat" - }, - "description": "Selecteer het apparaat waarmee u wilt koppelen", - "title": "Koppel met HomeKit accessoire" - } - }, - "title": "HomeKit Accessoires" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/nn.json b/homeassistant/components/homekit_controller/.translations/nn.json deleted file mode 100644 index 995d6779238..00000000000 --- a/homeassistant/components/homekit_controller/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "pair": { - "data": { - "pairing_code": "Paringskode" - } - } - }, - "title": "HomeKit tilbeh\u00f8r" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/no.json b/homeassistant/components/homekit_controller/.translations/no.json deleted file mode 100644 index a2816fa92f0..00000000000 --- a/homeassistant/components/homekit_controller/.translations/no.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Kan ikke legge til sammenkobling da enheten ikke lenger kan bli funnet.", - "already_configured": "Tilbeh\u00f8r er allerede konfigurert med denne kontrolleren.", - "already_in_progress": "Konfigurasjonsflyt for enhet p\u00e5g\u00e5r allerede.", - "already_paired": "Dette tilbeh\u00f8ret er allerede sammenkoblet med en annen enhet. Vennligst tilbakestill tilbeh\u00f8ret og pr\u00f8v igjen.", - "ignored_model": "HomeKit st\u00f8tte for denne modellen er blokkert da en mer funksjonsrik standard integrering er tilgjengelig.", - "invalid_config_entry": "Denne enheten vises som klar til sammenkobling, men det er allerede en motstridende konfigurasjonsoppf\u00f8ring for den i Hjelpeassistenten som f\u00f8rst m\u00e5 fjernes.", - "no_devices": "Ingen ukoblede enheter ble funnet" - }, - "error": { - "authentication_error": "Ugyldig HomeKit kode. Vennligst sjekk den og pr\u00f8v igjen.", - "busy_error": "Enheten nekter \u00e5 sammenkoble da den allerede er sammenkoblet med en annen kontroller.", - "max_peers_error": "Enheten nekter \u00e5 sammenkoble da den ikke har ledig sammenkoblingslagring.", - "max_tries_error": "Enheten nekter \u00e5 sammenkoble da den har mottatt mer enn 100 mislykkede godkjenningsfors\u00f8k.", - "pairing_failed": "En uh\u00e5ndtert feil oppstod under fors\u00f8k p\u00e5 \u00e5 koble til denne enheten. Dette kan v\u00e6re en midlertidig feil, eller at enheten din kan ikke st\u00f8ttes for \u00f8yeblikket.", - "unable_to_pair": "Kunne ikke koble til, vennligst pr\u00f8v igjen.", - "unknown_error": "Enheten rapporterte en ukjent feil. Sammenkobling mislyktes." - }, - "flow_title": "HomeKit Tilbeh\u00f8r: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Sammenkoblingskode" - }, - "description": "Skriv inn din HomeKit-sammenkoblingskode (i formatet XXX-XX-XXX) for \u00e5 bruke dette tilbeh\u00f8ret", - "title": "Koble til HomeKit tilbeh\u00f8r" - }, - "user": { - "data": { - "device": "Enhet" - }, - "description": "Velg enheten du vil koble til", - "title": "Koble til HomeKit tilbeh\u00f8r" - } - }, - "title": "HomeKit tilbeh\u00f8r" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/pl.json b/homeassistant/components/homekit_controller/.translations/pl.json deleted file mode 100644 index 33cd20dc9c9..00000000000 --- a/homeassistant/components/homekit_controller/.translations/pl.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Nie mo\u017cna rozpocz\u0105\u0107 parowania, poniewa\u017c nie znaleziono urz\u0105dzenia.", - "already_configured": "Akcesorium jest ju\u017c skonfigurowane z tym kontrolerem.", - "already_in_progress": "Konfiguracja urz\u0105dzenia jest ju\u017c w toku.", - "already_paired": "To akcesorium jest ju\u017c sparowane z innym urz\u0105dzeniem. Zresetuj akcesorium i spr\u00f3buj ponownie.", - "ignored_model": "Obs\u0142uga HomeKit dla tego modelu jest zablokowana, poniewa\u017c dost\u0119pna jest pe\u0142niejsza integracja natywna.", - "invalid_config_entry": "To urz\u0105dzenie jest wy\u015bwietlane jako gotowe do sparowania, ale istnieje ju\u017c konfliktowy wpis konfiguracyjny dla niego w Home Assistant, kt\u00f3ry musi zosta\u0107 najpierw usuni\u0119ty.", - "no_devices": "Nie znaleziono niesparowanych urz\u0105dze\u0144" - }, - "error": { - "authentication_error": "Niepoprawny kod parowania HomeKit. Sprawd\u017a go i spr\u00f3buj ponownie.", - "busy_error": "Urz\u0105dzenie odm\u00f3wi\u0142o parowania, poniewa\u017c jest ju\u017c powi\u0105zane z innym kontrolerem.", - "max_peers_error": "Urz\u0105dzenie odm\u00f3wi\u0142o parowania, poniewa\u017c nie ma wolnej pami\u0119ci parowania.", - "max_tries_error": "Urz\u0105dzenie odm\u00f3wi\u0142o dodania parowania, poniewa\u017c otrzyma\u0142o ponad 100 nieudanych pr\u00f3b uwierzytelnienia.", - "pairing_failed": "Wyst\u0105pi\u0142 nieobs\u0142ugiwany b\u0142\u0105d podczas pr\u00f3by sparowania z tym urz\u0105dzeniem. Mo\u017ce to by\u0107 tymczasowa awaria lub urz\u0105dzenie mo\u017ce nie by\u0107 obecnie obs\u0142ugiwane.", - "unable_to_pair": "Nie mo\u017cna sparowa\u0107, spr\u00f3buj ponownie.", - "unknown_error": "Urz\u0105dzenie zg\u0142osi\u0142o nieznany b\u0142\u0105d. Parowanie nie powiod\u0142o si\u0119." - }, - "flow_title": "Akcesoria HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Kod parowania" - }, - "description": "Wprowad\u017a kod parowania HomeKit, aby u\u017cy\u0107 tego akcesorium", - "title": "Sparuj z akcesorium HomeKit" - }, - "user": { - "data": { - "device": "Urz\u0105dzenie" - }, - "description": "Wybierz urz\u0105dzenie, kt\u00f3re chcesz sparowa\u0107", - "title": "Sparuj z akcesorium HomeKit" - } - }, - "title": "Akcesorium HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/pt-BR.json b/homeassistant/components/homekit_controller/.translations/pt-BR.json deleted file mode 100644 index 479f6c6a97c..00000000000 --- a/homeassistant/components/homekit_controller/.translations/pt-BR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "N\u00e3o \u00e9 poss\u00edvel adicionar o emparelhamento, pois o dispositivo n\u00e3o pode mais ser encontrado.", - "already_configured": "O acess\u00f3rio j\u00e1 est\u00e1 configurado com este controlador.", - "already_in_progress": "O fluxo de configura\u00e7\u00e3o para o dispositivo j\u00e1 est\u00e1 em andamento.", - "already_paired": "Este acess\u00f3rio j\u00e1 est\u00e1 pareado com outro dispositivo. Por favor, redefina o acess\u00f3rio e tente novamente.", - "ignored_model": "O suporte do HomeKit para este modelo est\u00e1 bloqueado, j\u00e1 que uma integra\u00e7\u00e3o nativa mais completa est\u00e1 dispon\u00edvel.", - "invalid_config_entry": "Este dispositivo est\u00e1 mostrando como pronto para parear, mas existe um conflito na configura\u00e7\u00e3o de entrada para ele no Home Assistant que deve ser removida primeiro.", - "no_devices": "N\u00e3o foi poss\u00edvel encontrar dispositivos n\u00e3o pareados" - }, - "error": { - "authentication_error": "C\u00f3digo HomeKit incorreto. Por favor verifique e tente novamente.", - "busy_error": "O dispositivo recusou-se a adicionar o emparelhamento, uma vez que j\u00e1 est\u00e1 emparelhando com outro controlador.", - "max_peers_error": "O dispositivo recusou-se a adicionar o emparelhamento, pois n\u00e3o tem armazenamento de emparelhamento gratuito.", - "max_tries_error": "O dispositivo recusou-se a adicionar o emparelhamento, uma vez que recebeu mais de 100 tentativas de autentica\u00e7\u00e3o malsucedidas.", - "pairing_failed": "Ocorreu um erro sem tratamento ao tentar emparelhar com este dispositivo. Isso pode ser uma falha tempor\u00e1ria ou o dispositivo pode n\u00e3o ser suportado no momento.", - "unable_to_pair": "N\u00e3o \u00e9 poss\u00edvel parear, tente novamente.", - "unknown_error": "O dispositivo relatou um erro desconhecido. O pareamento falhou." - }, - "flow_title": "Acess\u00f3rio HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "C\u00f3digo de pareamento" - }, - "description": "Digite seu c\u00f3digo de pareamento do HomeKit (no formato XXX-XX-XXX) para usar este acess\u00f3rio", - "title": "Parear com o acess\u00f3rio HomeKit" - }, - "user": { - "data": { - "device": "Dispositivo" - }, - "description": "Selecione o dispositivo com o qual voc\u00ea deseja parear", - "title": "Parear com o acess\u00f3rio HomeKit" - } - }, - "title": "Acess\u00f3rio HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/pt.json b/homeassistant/components/homekit_controller/.translations/pt.json deleted file mode 100644 index c60ed155569..00000000000 --- a/homeassistant/components/homekit_controller/.translations/pt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "step": { - "pair": { - "data": { - "pairing_code": "C\u00f3digo de emparelhamento" - }, - "title": "Emparelhar com o acess\u00f3rio HomeKit" - }, - "user": { - "data": { - "device": "Dispositivo" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/ru.json b/homeassistant/components/homekit_controller/.translations/ru.json deleted file mode 100644 index 41393acb26b..00000000000 --- a/homeassistant/components/homekit_controller/.translations/ru.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u043e.", - "already_configured": "\u0410\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 \u0443\u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", - "already_paired": "\u042d\u0442\u043e\u0442 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 \u0443\u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u0431\u0440\u043e\u0441 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", - "ignored_model": "\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 HomeKit \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u0430\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f.", - "invalid_config_entry": "\u042d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043a \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044e, \u043d\u043e \u0432 Home Assistant \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.", - "no_devices": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b." - }, - "error": { - "authentication_error": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 HomeKit. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u0434 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", - "busy_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c.", - "max_peers_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043b\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.", - "max_tries_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043b\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0431\u043e\u043b\u0435\u0435 100 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.", - "pairing_failed": "\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0439 \u0438\u043b\u0438 \u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0449\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", - "unable_to_pair": "\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", - "unknown_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u043e \u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435. \u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c." - }, - "flow_title": "\u0410\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 HomeKit: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "\u041a\u043e\u0434 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f HomeKit (\u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XXX-XX-XXX), \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440.", - "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u043e\u043c HomeKit" - }, - "user": { - "data": { - "device": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435.", - "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u043e\u043c HomeKit" - } - }, - "title": "\u0410\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/sl.json b/homeassistant/components/homekit_controller/.translations/sl.json deleted file mode 100644 index aa7977f5bfe..00000000000 --- a/homeassistant/components/homekit_controller/.translations/sl.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Seznanjanja ni mogo\u010de dodati, ker naprave ni ve\u010d mogo\u010de najti.", - "already_configured": "Dodatna oprema je \u017ee konfigurirana s tem krmilnikom.", - "already_in_progress": "Konfiguracijski tok za to napravo je \u017ee v teku.", - "already_paired": "Ta dodatna oprema je \u017ee povezana z drugo napravo. Ponastavite dodatno opremo in poskusite znova.", - "ignored_model": "Podpora za HomeKit za ta model je blokirana, saj je na voljo ve\u010d funkcij popolne nativne integracije.", - "invalid_config_entry": "Ta naprava je prikazana kot pripravljena za seznanjanje, vendar je v programu Home Assistant zanj \u017ee vpisan konfliktni vnos konfiguracije, ki ga je treba najprej odstraniti.", - "no_devices": "Ni bilo mogo\u010de najti neuparjenih naprav" - }, - "error": { - "authentication_error": "Nepravilna koda HomeKit. Preverite in poskusite znova.", - "busy_error": "Naprava je zavrnila seznanjanje, saj se \u017ee povezuje z drugim krmilnikom.", - "max_peers_error": "Naprava je zavrnila seznanjanje, saj nima prostega pomnilnika za seznanjanje.", - "max_tries_error": "Napravaje zavrnila seznanjanje, saj je prejela ve\u010d kot 100 neuspe\u0161nih poskusov overjanja.", - "pairing_failed": "Med poskusom seznanitev s to napravo je pri\u0161lo do napake. To je lahko za\u010dasna napaka ali pa va\u0161a naprava trenutno ni podprta.", - "unable_to_pair": "Ni mogo\u010de seznaniti. Poskusite znova.", - "unknown_error": "Naprava je sporo\u010dila neznano napako. Seznanjanje ni uspelo." - }, - "flow_title": "HomeKit Oprema: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Koda za seznanjanje" - }, - "description": "\u010ce \u017eeli\u0161 uporabiti to dodatno opremo, vnesi HomeKit kodo.", - "title": "Seznanite s HomeKit Opremo" - }, - "user": { - "data": { - "device": "Naprava" - }, - "description": "Izberite napravo, s katero se \u017eelite seznaniti", - "title": "Seznanite s HomeKit Opremo" - } - }, - "title": "HomeKit oprema" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/sv.json b/homeassistant/components/homekit_controller/.translations/sv.json deleted file mode 100644 index b4b721b7ff9..00000000000 --- a/homeassistant/components/homekit_controller/.translations/sv.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "Kan inte genomf\u00f6ra parningsf\u00f6rs\u00f6ket eftersom enheten inte l\u00e4ngre kan hittas.", - "already_configured": "Tillbeh\u00f6ret \u00e4r redan konfigurerat med denna kontroller.", - "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r enheten p\u00e5g\u00e5r redan.", - "already_paired": "Det h\u00e4r tillbeh\u00f6ret \u00e4r redan kopplat till en annan enhet. \u00c5terst\u00e4ll tillbeh\u00f6ret och f\u00f6rs\u00f6k igen.", - "ignored_model": "HomeKit-st\u00f6d f\u00f6r den h\u00e4r modellen blockeras eftersom en mer komplett inbyggd integration \u00e4r tillg\u00e4nglig.", - "invalid_config_entry": "Den h\u00e4r enheten visas som redo att paras ihop, men det finns redan en motstridig konfigurations-post f\u00f6r den i Home Assistant som f\u00f6rst m\u00e5ste tas bort.", - "no_devices": "Inga oparade enheter kunde hittas" - }, - "error": { - "authentication_error": "Felaktig HomeKit-kod. V\u00e4nligen kontrollera och f\u00f6rs\u00f6k igen.", - "busy_error": "Enheten nekade parning d\u00e5 den redan \u00e4r parad med annan controller.", - "max_peers_error": "Enheten nekade parningsf\u00f6rs\u00f6ket d\u00e5 det inte finns n\u00e5got parningsminnesutrymme kvar", - "max_tries_error": "Enheten nekade parningen d\u00e5 den har emottagit mer \u00e4n 100 misslyckade autentiseringsf\u00f6rs\u00f6k", - "pairing_failed": "Ett ok\u00e4nt fel uppstod n\u00e4r parningsf\u00f6rs\u00f6ket gjordes med den h\u00e4r enheten. Det h\u00e4r kan vara ett tillf\u00e4lligt fel, eller s\u00e5 st\u00f6ds inte din enhet i nul\u00e4get.", - "unable_to_pair": "Det g\u00e5r inte att para ihop, f\u00f6rs\u00f6k igen.", - "unknown_error": "Enheten rapporterade ett ok\u00e4nt fel. Parning misslyckades." - }, - "flow_title": "HomeKit-tillbeh\u00f6r: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "Parningskod" - }, - "description": "Ange din HomeKit-parningskod (i formatet XXX-XX-XXX) f\u00f6r att anv\u00e4nda det h\u00e4r tillbeh\u00f6ret", - "title": "Para HomeKit-tillbeh\u00f6r" - }, - "user": { - "data": { - "device": "Enhet" - }, - "description": "V\u00e4lj den enhet du vill para med", - "title": "Para HomeKit-tillbeh\u00f6r" - } - }, - "title": "HomeKit-tillbeh\u00f6r" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/th.json b/homeassistant/components/homekit_controller/.translations/th.json deleted file mode 100644 index c0311b0f198..00000000000 --- a/homeassistant/components/homekit_controller/.translations/th.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e19\u0e35\u0e49\u0e41\u0e25\u0e49\u0e27", - "already_paired": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e19\u0e35\u0e49\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2d\u0e37\u0e48\u0e19\u0e41\u0e25\u0e49\u0e27 \u0e42\u0e1b\u0e23\u0e14\u0e23\u0e35\u0e40\u0e0b\u0e47\u0e15\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e41\u0e25\u0e49\u0e27\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07", - "ignored_model": "\u0e01\u0e32\u0e23\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c HomeKit \u0e23\u0e38\u0e48\u0e19\u0e19\u0e35\u0e49\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e01\u0e31\u0e49\u0e19\u0e44\u0e27\u0e49 \u0e41\u0e15\u0e48\u0e01\u0e47\u0e21\u0e35\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e1a\u0e32\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49", - "invalid_config_entry": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e19\u0e35\u0e49\u0e1a\u0e2d\u0e01\u0e27\u0e48\u0e32\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48 \u0e41\u0e15\u0e48\u0e21\u0e31\u0e19\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e02\u0e31\u0e14\u0e41\u0e22\u0e49\u0e07\u0e01\u0e31\u0e19\u0e2d\u0e22\u0e39\u0e48 Home Assistant \u0e40\u0e25\u0e22\u0e17\u0e33\u0e01\u0e32\u0e23\u0e25\u0e1a\u0e17\u0e34\u0e49\u0e07", - "no_devices": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e43\u0e14\u0e46 \u0e40\u0e25\u0e22" - }, - "error": { - "authentication_error": "\u0e23\u0e2b\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48 HomeKit \u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e30\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07", - "unable_to_pair": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e44\u0e14\u0e49 \u0e42\u0e1b\u0e23\u0e14\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07", - "unknown_error": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01 \u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27" - }, - "step": { - "pair": { - "data": { - "pairing_code": "\u0e23\u0e2b\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48" - }, - "description": "\u0e1b\u0e49\u0e2d\u0e19\u0e23\u0e2b\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48 HomeKit \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e19\u0e35\u0e49", - "title": "\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21 HomeKit" - }, - "user": { - "data": { - "device": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c" - }, - "description": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e08\u0e30\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48", - "title": "\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21 HomeKit" - } - }, - "title": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21 HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/vi.json b/homeassistant/components/homekit_controller/.translations/vi.json deleted file mode 100644 index cc16ebc70c4..00000000000 --- a/homeassistant/components/homekit_controller/.translations/vi.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "step": { - "pair": { - "data": { - "pairing_code": "M\u00e3 k\u1ebft n\u1ed1i" - }, - "title": "K\u1ebft n\u1ed1i v\u1edbi Ph\u1ee5 ki\u1ec7n HomeKit" - }, - "user": { - "data": { - "device": "Thi\u1ebft b\u1ecb" - }, - "description": "Ch\u1ecdn thi\u1ebft b\u1ecb b\u1ea1n mu\u1ed1n k\u1ebft n\u1ed1i", - "title": "K\u1ebft n\u1ed1i v\u1edbi Ph\u1ee5 ki\u1ec7n HomeKit" - } - }, - "title": "Ph\u1ee5 ki\u1ec7n HomeKit" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/zh-Hans.json b/homeassistant/components/homekit_controller/.translations/zh-Hans.json deleted file mode 100644 index d9fdc8f91c2..00000000000 --- a/homeassistant/components/homekit_controller/.translations/zh-Hans.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "\u65e0\u6cd5\u6dfb\u52a0\u914d\u5bf9\uff0c\u56e0\u4e3a\u65e0\u6cd5\u518d\u627e\u5230\u8bbe\u5907\u3002", - "already_configured": "\u914d\u4ef6\u5df2\u901a\u8fc7\u6b64\u63a7\u5236\u5668\u914d\u7f6e\u5b8c\u6210\u3002", - "already_paired": "\u6b64\u914d\u4ef6\u5df2\u4e0e\u53e6\u4e00\u53f0\u8bbe\u5907\u914d\u5bf9\u3002\u8bf7\u91cd\u7f6e\u914d\u4ef6\uff0c\u7136\u540e\u91cd\u8bd5\u3002", - "ignored_model": "HomeKit \u5bf9\u6b64\u8bbe\u5907\u7684\u652f\u6301\u5df2\u88ab\u963b\u6b62\uff0c\u56e0\u4e3a\u6709\u529f\u80fd\u66f4\u5b8c\u6574\u7684\u539f\u751f\u96c6\u6210\u53ef\u4ee5\u4f7f\u7528\u3002", - "invalid_config_entry": "\u6b64\u8bbe\u5907\u5df2\u51c6\u5907\u597d\u914d\u5bf9\uff0c\u4f46\u662f Home Assistant \u4e2d\u5b58\u5728\u4e0e\u4e4b\u51b2\u7a81\u7684\u914d\u7f6e\uff0c\u5fc5\u987b\u5148\u5c06\u5176\u5220\u9664\u3002", - "no_devices": "\u6ca1\u6709\u627e\u5230\u672a\u914d\u5bf9\u7684\u8bbe\u5907" - }, - "error": { - "authentication_error": "HomeKit \u4ee3\u7801\u4e0d\u6b63\u786e\u3002\u8bf7\u68c0\u67e5\u540e\u91cd\u8bd5\u3002", - "busy_error": "\u8bbe\u5907\u62d2\u7edd\u914d\u5bf9\uff0c\u56e0\u4e3a\u5b83\u5df2\u7ecf\u4e0e\u53e6\u4e00\u4e2a\u63a7\u5236\u5668\u914d\u5bf9\u3002", - "max_peers_error": "\u8bbe\u5907\u62d2\u7edd\u914d\u5bf9\uff0c\u56e0\u4e3a\u5b83\u6ca1\u6709\u7a7a\u95f2\u7684\u914d\u5bf9\u5b58\u50a8\u7a7a\u95f4\u3002", - "max_tries_error": "\u8bbe\u5907\u62d2\u7edd\u914d\u5bf9\uff0c\u56e0\u4e3a\u5b83\u5df2\u6536\u5230\u8d85\u8fc7 100 \u6b21\u5931\u8d25\u7684\u8eab\u4efd\u8ba4\u8bc1\u3002", - "pairing_failed": "\u5c1d\u8bd5\u4e0e\u6b64\u8bbe\u5907\u914d\u5bf9\u65f6\u53d1\u751f\u672a\u5904\u7406\u7684\u9519\u8bef\u3002\u8fd9\u53ef\u80fd\u662f\u6682\u65f6\u6027\u6545\u969c\uff0c\u4e5f\u53ef\u80fd\u662f\u60a8\u7684\u8bbe\u5907\u76ee\u524d\u4e0d\u88ab\u652f\u6301\u3002", - "unable_to_pair": "\u65e0\u6cd5\u914d\u5bf9\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002", - "unknown_error": "\u8bbe\u5907\u62a5\u544a\u4e86\u672a\u77e5\u9519\u8bef\u3002\u914d\u5bf9\u5931\u8d25\u3002" - }, - "flow_title": "HomeKit \u914d\u4ef6: {name}", - "step": { - "pair": { - "data": { - "pairing_code": "\u914d\u5bf9\u4ee3\u7801" - }, - "description": "\u8f93\u5165\u60a8\u7684HomeKit\u914d\u5bf9\u4ee3\u7801\uff08\u683c\u5f0f\u4e3aXXX-XX-XXX\uff09\u4ee5\u4f7f\u7528\u6b64\u914d\u4ef6", - "title": "\u4e0e HomeKit \u914d\u4ef6\u914d\u5bf9" - }, - "user": { - "data": { - "device": "\u8bbe\u5907" - }, - "description": "\u9009\u62e9\u60a8\u8981\u914d\u5bf9\u7684\u8bbe\u5907", - "title": "\u4e0e HomeKit \u914d\u4ef6\u914d\u5bf9" - } - }, - "title": "HomeKit \u914d\u4ef6" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/zh-Hant.json b/homeassistant/components/homekit_controller/.translations/zh-Hant.json deleted file mode 100644 index c2092c2016b..00000000000 --- a/homeassistant/components/homekit_controller/.translations/zh-Hant.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "config": { - "abort": { - "accessory_not_found_error": "\u627e\u4e0d\u5230\u8a2d\u5099\uff0c\u7121\u6cd5\u65b0\u589e\u914d\u5c0d\u3002", - "already_configured": "\u914d\u4ef6\u5df2\u7d93\u7531\u6b64\u63a7\u5236\u5668\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "\u8a2d\u5099\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", - "already_paired": "\u914d\u4ef6\u5df2\u7d93\u8207\u5176\u4ed6\u8a2d\u5099\u914d\u5c0d\uff0c\u8acb\u91cd\u7f6e\u914d\u4ef6\u5f8c\u518d\u8a66\u4e00\u6b21\u3002", - "ignored_model": "\u7531\u65bc\u6b64\u578b\u865f\u53ef\u539f\u751f\u652f\u63f4\u66f4\u5b8c\u6574\u529f\u80fd\uff0c\u56e0\u6b64 Homekit \u652f\u63f4\u5df2\u88ab\u7981\u6b62\u3002", - "invalid_config_entry": "\u6b64\u8a2d\u5099\u986f\u793a\u7b49\u5f85\u9032\u884c\u914d\u5c0d\uff0c\u4f46 Home Assistant \u986f\u793a\u6709\u76f8\u885d\u7a81\u8a2d\u5b9a\u7269\u4ef6\u5fc5\u9808\u5148\u884c\u79fb\u9664\u3002", - "no_devices": "\u627e\u4e0d\u5230\u4efb\u4f55\u672a\u914d\u5c0d\u8a2d\u5099" - }, - "error": { - "authentication_error": "Homekit \u4ee3\u78bc\u932f\u8aa4\uff0c\u8acb\u78ba\u5b9a\u5f8c\u518d\u8a66\u4e00\u6b21\u3002", - "busy_error": "\u8a2d\u5099\u5df2\u7d93\u8207\u5176\u4ed6\u63a7\u5236\u5668\u914d\u5c0d\uff0c\u62d2\u7d55\u9032\u884c\u914d\u5c0d\u3002", - "max_peers_error": "\u8a2d\u5099\u5df2\u7121\u5269\u9918\u914d\u5c0d\u7a7a\u9593\uff0c\u62d2\u7d55\u9032\u884c\u914d\u5c0d\u3002", - "max_tries_error": "\u8a2d\u5099\u6536\u5230\u8d85\u904e 100 \u6b21\u672a\u6210\u529f\u8a8d\u8b49\u5f8c\uff0c\u62d2\u7d55\u9032\u884c\u914d\u5c0d\u3002", - "pairing_failed": "\u7576\u8a66\u5716\u8207\u8a2d\u5099\u914d\u5c0d\u6642\u767c\u751f\u7121\u6cd5\u8655\u7406\u932f\u8aa4\uff0c\u53ef\u80fd\u50c5\u70ba\u66ab\u6642\u5931\u6548\u3001\u6216\u8005\u8a2d\u5099\u76ee\u524d\u4e0d\u652f\u63f4\u3002", - "unable_to_pair": "\u7121\u6cd5\u914d\u5c0d\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "unknown_error": "\u88dd\u7f6e\u56de\u5831\u672a\u77e5\u932f\u8aa4\u3002\u914d\u5c0d\u5931\u6557\u3002" - }, - "flow_title": "HomeKit \u914d\u4ef6\uff1a{name}", - "step": { - "pair": { - "data": { - "pairing_code": "\u8a2d\u5b9a\u4ee3\u78bc" - }, - "description": "\u8f38\u5165\u914d\u4ef6 Homekit \u8a2d\u5b9a\u4ee3\u78bc\uff08\u683c\u5f0f\uff1aXXX-XX-XXX\uff09\u4ee5\u4f7f\u7528\u6b64\u914d\u4ef6", - "title": "HomeKit \u914d\u4ef6\u914d\u5c0d" - }, - "user": { - "data": { - "device": "\u88dd\u7f6e" - }, - "description": "\u9078\u64c7\u6240\u8981\u65b0\u589e\u7684\u88dd\u7f6e", - "title": "HomeKit \u914d\u4ef6\u914d\u5c0d" - } - }, - "title": "HomeKit \u914d\u4ef6" - } -} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/__init__.py b/homeassistant/components/homekit_controller/__init__.py index cf1cf28fc32..47f3cf20571 100644 --- a/homeassistant/components/homekit_controller/__init__.py +++ b/homeassistant/components/homekit_controller/__init__.py @@ -1,6 +1,5 @@ """Support for Homekit device discovery.""" import logging -import os from typing import Any, Dict import aiohomekit @@ -216,16 +215,6 @@ async def async_setup(hass, config): hass.data[CONTROLLER] = aiohomekit.Controller() hass.data[KNOWN_DEVICES] = {} - dothomekit_dir = hass.config.path(".homekit") - if os.path.exists(dothomekit_dir): - _LOGGER.warning( - ( - "Legacy homekit_controller state found in %s. Support for reading " - "the folder is deprecated and will be removed in 0.109.0." - ), - dothomekit_dir, - ) - return True diff --git a/homeassistant/components/homekit_controller/config_flow.py b/homeassistant/components/homekit_controller/config_flow.py index 81dcfdc8f9a..812d10eb8c4 100644 --- a/homeassistant/components/homekit_controller/config_flow.py +++ b/homeassistant/components/homekit_controller/config_flow.py @@ -1,11 +1,8 @@ """Config flow to configure homekit_controller.""" -import json import logging -import os import re import aiohomekit -from aiohomekit.controller.ip import IpPairing import voluptuous as vol from homeassistant import config_entries @@ -23,32 +20,6 @@ PIN_FORMAT = re.compile(r"^(\d{3})-{0,1}(\d{2})-{0,1}(\d{3})$") _LOGGER = logging.getLogger(__name__) -def load_old_pairings(hass): - """Load any old pairings from on-disk json fragments.""" - old_pairings = {} - - data_dir = os.path.join(hass.config.path(), HOMEKIT_DIR) - pairing_file = os.path.join(data_dir, PAIRING_FILE) - - # Find any pairings created with in HA 0.85 / 0.86 - if os.path.exists(pairing_file): - with open(pairing_file) as pairing_file: - old_pairings.update(json.load(pairing_file)) - - # Find any pairings created in HA <= 0.84 - if os.path.exists(data_dir): - for device in os.listdir(data_dir): - if not device.startswith("hk-"): - continue - alias = device[3:] - if alias in old_pairings: - continue - with open(os.path.join(data_dir, device)) as pairing_data_fp: - old_pairings[alias] = json.load(pairing_data_fp) - - return old_pairings - - def normalize_hkid(hkid): """Normalize a hkid so that it is safe to compare with other normalized hkids.""" return hkid.lower() @@ -218,15 +189,6 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow): self.context["title_placeholders"] = {"name": name} if paired: - old_pairings = await self.hass.async_add_executor_job( - load_old_pairings, self.hass - ) - - if hkid in old_pairings: - return await self.async_import_legacy_pairing( - properties, old_pairings[hkid] - ) - # Device is paired but not to us - ignore it _LOGGER.debug("HomeKit device %s ignored as already paired", hkid) return self.async_abort(reason="already_paired") @@ -245,23 +207,6 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow): # pairing code) return self._async_step_pair_show_form() - async def async_import_legacy_pairing(self, discovery_props, pairing_data): - """Migrate a legacy pairing to config entries.""" - - hkid = discovery_props["id"] - - _LOGGER.info( - ( - "Legacy configuration %s for homekit" - "accessory migrated to configuration entries" - ), - hkid, - ) - - pairing = IpPairing(pairing_data) - - return await self._entry_from_accessory(pairing) - async def async_step_pair(self, pair_info=None): """Pair with a new HomeKit accessory.""" # If async_step_pair is called with no pairing code then we do the M1 diff --git a/homeassistant/components/homekit_controller/manifest.json b/homeassistant/components/homekit_controller/manifest.json index 009dc285150..07736f61c8e 100644 --- a/homeassistant/components/homekit_controller/manifest.json +++ b/homeassistant/components/homekit_controller/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/homekit_controller", "requirements": ["aiohomekit[IP]==0.2.37"], - "dependencies": [], "zeroconf": ["_hap._tcp.local."], "codeowners": ["@Jc2k"] } diff --git a/homeassistant/components/homekit_controller/strings.json b/homeassistant/components/homekit_controller/strings.json index 80370717183..118c3bf7f8a 100644 --- a/homeassistant/components/homekit_controller/strings.json +++ b/homeassistant/components/homekit_controller/strings.json @@ -1,40 +1,40 @@ { - "config": { - "title": "HomeKit Accessory", - "flow_title": "HomeKit Accessory: {name}", - "step": { - "user": { - "title": "Pair with HomeKit Accessory", - "description": "Select the device you want to pair with", - "data": { - "device": "Device" - } - }, - "pair": { - "title": "Pair with HomeKit Accessory", - "description": "Enter your HomeKit pairing code (in the format XXX-XX-XXX) to use this accessory", - "data": { - "pairing_code": "Pairing Code" - } - } - }, - "error": { - "unable_to_pair": "Unable to pair, please try again.", - "unknown_error": "Device reported an unknown error. Pairing failed.", - "authentication_error": "Incorrect HomeKit code. Please check it and try again.", - "max_peers_error": "Device refused to add pairing as it has no free pairing storage.", - "busy_error": "Device refused to add pairing as it is already pairing with another controller.", - "max_tries_error": "Device refused to add pairing as it has received more than 100 unsuccessful authentication attempts.", - "pairing_failed": "An unhandled error occurred while attempting to pair with this device. This may be a temporary failure or your device may not be supported currently." - }, - "abort": { - "no_devices": "No unpaired devices could be found", - "already_paired": "This accessory is already paired to another device. Please reset the accessory and try again.", - "ignored_model": "HomeKit support for this model is blocked as a more feature complete native integration is available.", - "already_configured": "Accessory is already configured with this controller.", - "invalid_config_entry": "This device is showing as ready to pair but there is already a conflicting configuration entry for it in Home Assistant that must first be removed.", - "accessory_not_found_error": "Cannot add pairing as device can no longer be found.", - "already_in_progress": "Config flow for device is already in progress." + "title": "HomeKit Controller", + "config": { + "flow_title": "HomeKit Accessory: {name}", + "step": { + "user": { + "title": "Pair with HomeKit Accessory", + "description": "Select the device you want to pair with", + "data": { + "device": "Device" } + }, + "pair": { + "title": "Pair with HomeKit Accessory", + "description": "Enter your HomeKit pairing code (in the format XXX-XX-XXX) to use this accessory", + "data": { + "pairing_code": "Pairing Code" + } + } + }, + "error": { + "unable_to_pair": "Unable to pair, please try again.", + "unknown_error": "Device reported an unknown error. Pairing failed.", + "authentication_error": "Incorrect HomeKit code. Please check it and try again.", + "max_peers_error": "Device refused to add pairing as it has no free pairing storage.", + "busy_error": "Device refused to add pairing as it is already pairing with another controller.", + "max_tries_error": "Device refused to add pairing as it has received more than 100 unsuccessful authentication attempts.", + "pairing_failed": "An unhandled error occurred while attempting to pair with this device. This may be a temporary failure or your device may not be supported currently." + }, + "abort": { + "no_devices": "No unpaired devices could be found", + "already_paired": "This accessory is already paired to another device. Please reset the accessory and try again.", + "ignored_model": "HomeKit support for this model is blocked as a more feature complete native integration is available.", + "already_configured": "Accessory is already configured with this controller.", + "invalid_config_entry": "This device is showing as ready to pair but there is already a conflicting configuration entry for it in Home Assistant that must first be removed.", + "accessory_not_found_error": "Cannot add pairing as device can no longer be found.", + "already_in_progress": "Config flow for device is already in progress." } + } } diff --git a/homeassistant/components/homekit_controller/translations/bg.json b/homeassistant/components/homekit_controller/translations/bg.json new file mode 100644 index 00000000000..bca0eeec380 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/bg.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "\u0421\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u0434\u043e\u0431\u0430\u0432\u0435\u043d\u043e, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043e.", + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e \u0441 \u0442\u043e\u0437\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440.", + "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.", + "already_paired": "\u0422\u043e\u0437\u0438 \u0430\u043a\u0441\u0435\u0441\u043e\u0430\u0440 \u0432\u0435\u0447\u0435 \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d \u0441 \u0434\u0440\u0443\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041c\u043e\u043b\u044f, \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u0442\u0435 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0438 \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "ignored_model": "\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430\u0442\u0430 \u043d\u0430 HomeKit \u0437\u0430 \u0442\u043e\u0437\u0438 \u043c\u043e\u0434\u0435\u043b \u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0430\u043d\u0430, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0435 \u043d\u0430\u043b\u0438\u0446\u0435 \u043f\u043e-\u043f\u044a\u043b\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430.", + "invalid_config_entry": "\u0422\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u0432\u0430 \u043a\u0430\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u0437\u0430 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u043d\u043e \u0432\u0435\u0447\u0435 \u0438\u043c\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0437\u0430 \u043d\u0435\u0433\u043e \u0432 Home Assistant, \u043a\u043e\u044f\u0442\u043e \u043f\u044a\u0440\u0432\u043e \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0430\u0442\u0430.", + "no_devices": "\u041d\u0435 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u043d\u0435\u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" + }, + "error": { + "authentication_error": "\u0413\u0440\u0435\u0448\u0435\u043d HomeKit \u043a\u043e\u0434. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0433\u043e \u0438 \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "busy_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0432\u0430 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u0435 \u0441\u0434\u0432\u043e\u044f \u0441 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440.", + "max_peers_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0430 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u043d\u044f\u043c\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0437\u0430 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435.", + "max_tries_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u043a\u0430\u0437\u0432\u0430 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 100 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0438 \u043e\u043f\u0438\u0442\u0430 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f.", + "pairing_failed": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0435\u043d\u043e \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u043e\u043f\u0438\u0442 \u0437\u0430 \u0441\u0434\u0432\u043e\u044f\u0432\u0430\u043d\u0435 \u0441 \u0442\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0422\u043e\u0432\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043d \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438\u043b\u0438 \u0432\u0430\u0448\u0435\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430.", + "unable_to_pair": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "unknown_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0441\u044a\u043e\u0431\u0449\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430. \u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u0431\u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "flow_title": "HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "\u041a\u043e\u0434 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435" + }, + "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 HomeKit \u043a\u043e\u0434\u0430 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 (\u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 XXX-XX-XXX) \u0437\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0442\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "user": { + "data": { + "device": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e, \u0441 \u043a\u043e\u0435\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + } + } + }, + "title": "HomeKit \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/ca.json b/homeassistant/components/homekit_controller/translations/ca.json new file mode 100644 index 00000000000..db174f049b8 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/ca.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "No s'ha pogut vincular, no s'ha trobat el dispositiu.", + "already_configured": "Accessori ja configurat amb aquest controlador.", + "already_in_progress": "El flux de dades de configuraci\u00f3 pel dispositiu ja est\u00e0 en curs.", + "already_paired": "Aquest accessori ja est\u00e0 vinculat amb un altre dispositiu. Reinicia l'accessori i torna-ho a provar.", + "ignored_model": "La disponibilitat de HomeKit per aquest model est\u00e0 bloquejada ja que, de moment, no hi ha una integraci\u00f3 nativa completa.", + "invalid_config_entry": "Aquest dispositiu s'est\u00e0 mostrant com a llest per a ser vinculat per\u00f2, hi ha una entrada de configuraci\u00f3 conflictiva a Home Assistant que s'ha d'eliminar primer.", + "no_devices": "No s'han trobat dispositius desvinculats." + }, + "error": { + "authentication_error": "Codi HomeKit incorrecte. Verifica'l i torna-ho a provar.", + "busy_error": "El dispositiu ha refusat la vinculaci\u00f3 perqu\u00e8 actualment ho est\u00e0 intentant amb un altre controlador diferent.", + "max_peers_error": "El dispositiu ha refusat la vinculaci\u00f3 perqu\u00e8 no t\u00e9 suficient espai lliure.", + "max_tries_error": "El dispositiu ha refusat la vinculaci\u00f3 perqu\u00e8 ha rebut m\u00e9s de 100 intents d\u2019autenticaci\u00f3 fallits.", + "pairing_failed": "S'ha produ\u00eft un error mentre s'intentava la vinculaci\u00f3 amb el dispositiu. Pot ser que sigui un error temporal o pot ser que el teu dispositiu encara no estigui suportat.", + "unable_to_pair": "No s'ha pogut vincular, torna-ho a provar.", + "unknown_error": "El dispositiu ha em\u00e8s un error desconegut. Vinculaci\u00f3 fallida." + }, + "flow_title": "Accessori HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Codi de vinculaci\u00f3" + }, + "description": "Introdueix el codi de vinculaci\u00f3 de HomeKit per utilitzar aquest accessori (format XXX-XX-XXX)", + "title": "Vinculaci\u00f3 amb" + }, + "user": { + "data": { + "device": "Dispositiu" + }, + "description": "Selecciona el dispositiu amb el qual et vols vincular", + "title": "Vinculaci\u00f3 amb un accessori HomeKit" + } + } + }, + "title": "Accessori HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/.translations/cs.json b/homeassistant/components/homekit_controller/translations/cs.json similarity index 100% rename from homeassistant/components/homekit_controller/.translations/cs.json rename to homeassistant/components/homekit_controller/translations/cs.json diff --git a/homeassistant/components/homekit_controller/translations/cy.json b/homeassistant/components/homekit_controller/translations/cy.json new file mode 100644 index 00000000000..eb4a68c902a --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/cy.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "ignored_model": "Mae cymorth HomeKit ar gyfer y model hwn wedi'i rwystro gan fod integreiddiad cynhenid mwy cyflawn ar gael.", + "invalid_config_entry": "Mae'r ddyfais yn dangos bod eisoes wedi paru ond mae cofnod ffurwedd groes amdano yn Home Assistant sydd angen ei diddymu", + "no_devices": "Ni ellir ddod o hyd i ddyfeisiau heb eu paru" + }, + "error": { + "authentication_error": "Cod HomeKit anghywir. Gwiriwch a cheisiwch eto.", + "unable_to_pair": "Methu paru, pl\u00eds ceisiwch eto", + "unknown_error": "Dyfeis wedi adrodd gwall anhysbys. Methodd paru." + }, + "step": { + "pair": { + "data": { + "pairing_code": "Cod Paru" + }, + "description": "Rhowch eich cod paru HomeKit i ddefnyddio'r ategolyn hwn", + "title": "Paru gyda ategolyn HomeKit" + }, + "user": { + "data": { + "device": "Dyfais" + }, + "description": "Dewiswch y ddyfais rydych eisiau paru efo", + "title": "Paru gyda ategolyn HomeKit" + } + } + }, + "title": "Ategolyn HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/da.json b/homeassistant/components/homekit_controller/translations/da.json new file mode 100644 index 00000000000..4794b5acc44 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/da.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Parring kan ikke tilf\u00f8jes da enheden ikke l\u00e6ngere findes.", + "already_configured": "Tilbeh\u00f8ret er allerede konfigureret med denne controller.", + "already_in_progress": "Enhedskonfiguration er allerede i gang.", + "already_paired": "Dette tilbeh\u00f8r er allerede parret med en anden enhed. Nulstil tilbeh\u00f8ret og pr\u00f8v igen.", + "ignored_model": "HomeKit-underst\u00f8ttelse af denne model er blokeret, da en mere funktionskomplet indbygget integration er tilg\u00e6ngelig.", + "invalid_config_entry": "Denne enhed vises som klar til parring, men der er allerede en modstridende konfigurationspost for den i Home Assistant, som f\u00f8rst skal fjernes.", + "no_devices": "Der blev ikke fundet nogen uparrede enheder" + }, + "error": { + "authentication_error": "Forkert HomeKit-kode. Kontroller den og pr\u00f8v igen.", + "busy_error": "Enheden n\u00e6gtede at parre da den allerede er parret med en anden controller.", + "max_peers_error": "Enheden n\u00e6gtede at parre da den ikke har nok frit parringslagerplads.", + "max_tries_error": "Enheden n\u00e6gtede at parre da den har modtaget mere end 100 mislykkede godkendelsesfors\u00f8g.", + "pairing_failed": "En uh\u00e5ndteret fejl opstod under fors\u00f8g p\u00e5 at parre med denne enhed. Dette kan v\u00e6re en midlertidig fejl eller din enhed muligvis ikke underst\u00f8ttes i \u00f8jeblikket.", + "unable_to_pair": "Kunne ikke parre, pr\u00f8v venligst igen.", + "unknown_error": "Enhed rapporterede en ukendt fejl. Parring mislykkedes." + }, + "flow_title": "HomeKit-tilbeh\u00f8r: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Parringskode" + }, + "description": "Indtast din HomeKit-parringskode (i formatet XXX-XX-XXX) for at bruge dette tilbeh\u00f8r", + "title": "Par med HomeKit-tilbeh\u00f8r" + }, + "user": { + "data": { + "device": "Enhed" + }, + "description": "V\u00e6lg den enhed du vil parre med", + "title": "Par med HomeKit-tilbeh\u00f8r" + } + } + }, + "title": "HomeKit-tilbeh\u00f8r" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/de.json b/homeassistant/components/homekit_controller/translations/de.json new file mode 100644 index 00000000000..b10fb6efe45 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/de.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Die Kopplung kann nicht durchgef\u00fchrt werden, da das Ger\u00e4t nicht mehr gefunden werden kann.", + "already_configured": "Das Zubeh\u00f6r ist mit diesem Controller bereits konfiguriert.", + "already_in_progress": "Der Konfigurationsablauf f\u00fcr das Ger\u00e4t wird bereits ausgef\u00fchrt.", + "already_paired": "Dieses Zubeh\u00f6r ist bereits mit einem anderen Ger\u00e4t gekoppelt. Setze das Zubeh\u00f6r zur\u00fcck und versuche es erneut.", + "ignored_model": "Die Unterst\u00fctzung von HomeKit f\u00fcr dieses Modell ist blockiert, da eine vollst\u00e4ndige native Integration verf\u00fcgbar ist.", + "invalid_config_entry": "Dieses Ger\u00e4t wird als bereit zum Koppeln angezeigt, es gibt jedoch bereits einen widerspr\u00fcchlichen Konfigurationseintrag in Home Assistant, der zuerst entfernt werden muss.", + "no_devices": "Keine ungekoppelten Ger\u00e4te gefunden" + }, + "error": { + "authentication_error": "Ung\u00fcltiger HomeKit Code, \u00fcberpr\u00fcfe bitte den Code und versuche es erneut.", + "busy_error": "Das Ger\u00e4t weigerte sich, das Kopplung durchzuf\u00fchren, da es bereits mit einem anderen Controller gekoppelt ist.", + "max_peers_error": "Das Ger\u00e4t weigerte sich, die Kopplung durchzuf\u00fchren, da es keinen freien Kopplungs-Speicher hat.", + "max_tries_error": "Das Ger\u00e4t hat sich geweigert die Kopplung durchzuf\u00fchren, da es mehr als 100 erfolglose Authentifizierungsversuche erhalten hat.", + "pairing_failed": "Beim Versuch dieses Ger\u00e4t zu koppeln ist ein Fehler aufgetreten. Dies kann ein vor\u00fcbergehender Fehler sein oder das Ger\u00e4t wird derzeit m\u00f6glicherweise nicht unterst\u00fctzt.", + "unable_to_pair": "Koppeln fehltgeschlagen, bitte versuche es erneut", + "unknown_error": "Das Ger\u00e4t meldete einen unbekannten Fehler. Die Kopplung ist fehlgeschlagen." + }, + "flow_title": "HomeKit-Zubeh\u00f6r: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Kopplungscode" + }, + "description": "Gib deinen HomeKit-Kopplungscode ein, um dieses Zubeh\u00f6r zu verwenden", + "title": "Mit HomeKit Zubeh\u00f6r koppeln" + }, + "user": { + "data": { + "device": "Ger\u00e4t" + }, + "description": "W\u00e4hle das Ger\u00e4t aus, mit dem du die Kopplung herstellen m\u00f6chtest", + "title": "Mit HomeKit Zubeh\u00f6r koppeln" + } + } + }, + "title": "HomeKit-Controller" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/en.json b/homeassistant/components/homekit_controller/translations/en.json new file mode 100644 index 00000000000..69ea4c3c351 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/en.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Cannot add pairing as device can no longer be found.", + "already_configured": "Accessory is already configured with this controller.", + "already_in_progress": "Config flow for device is already in progress.", + "already_paired": "This accessory is already paired to another device. Please reset the accessory and try again.", + "ignored_model": "HomeKit support for this model is blocked as a more feature complete native integration is available.", + "invalid_config_entry": "This device is showing as ready to pair but there is already a conflicting configuration entry for it in Home Assistant that must first be removed.", + "no_devices": "No unpaired devices could be found" + }, + "error": { + "authentication_error": "Incorrect HomeKit code. Please check it and try again.", + "busy_error": "Device refused to add pairing as it is already pairing with another controller.", + "max_peers_error": "Device refused to add pairing as it has no free pairing storage.", + "max_tries_error": "Device refused to add pairing as it has received more than 100 unsuccessful authentication attempts.", + "pairing_failed": "An unhandled error occurred while attempting to pair with this device. This may be a temporary failure or your device may not be supported currently.", + "unable_to_pair": "Unable to pair, please try again.", + "unknown_error": "Device reported an unknown error. Pairing failed." + }, + "flow_title": "HomeKit Accessory: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Pairing Code" + }, + "description": "Enter your HomeKit pairing code (in the format XXX-XX-XXX) to use this accessory", + "title": "Pair with HomeKit Accessory" + }, + "user": { + "data": { + "device": "Device" + }, + "description": "Select the device you want to pair with", + "title": "Pair with HomeKit Accessory" + } + } + }, + "title": "HomeKit Controller" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/es-419.json b/homeassistant/components/homekit_controller/translations/es-419.json new file mode 100644 index 00000000000..f3a084e7545 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/es-419.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "El accesorio ya est\u00e1 configurado con este controlador.", + "already_paired": "Este accesorio ya est\u00e1 emparejado con otro dispositivo. Por favor, reinicie el accesorio y vuelva a intentarlo." + }, + "error": { + "pairing_failed": "Se produjo un error no controlado al intentar vincularse con este dispositivo. Esto puede ser una falla temporal o su dispositivo puede no ser compatible actualmente.", + "unable_to_pair": "No se puede vincular, por favor intente nuevamente.", + "unknown_error": "El dispositivo inform\u00f3 un error desconocido. Vinculaci\u00f3n fallida." + }, + "flow_title": "Accesorio HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "C\u00f3digo de emparejamiento" + }, + "description": "Ingrese su c\u00f3digo de emparejamiento de HomeKit (en el formato XXX-XX-XXX) para usar este accesorio", + "title": "Vincular con el accesorio HomeKit" + }, + "user": { + "data": { + "device": "Dispositivo" + }, + "description": "Seleccione el dispositivo con el que desea vincular", + "title": "Vincular con el accesorio HomeKit" + } + } + }, + "title": "Accesorio HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/es.json b/homeassistant/components/homekit_controller/translations/es.json new file mode 100644 index 00000000000..b7639223f51 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/es.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "No se puede a\u00f1adir el emparejamiento porque ya no se puede encontrar el dispositivo.", + "already_configured": "El accesorio ya est\u00e1 configurado con este controlador.", + "already_in_progress": "El flujo de configuraci\u00f3n del dispositivo ya est\u00e1 en curso.", + "already_paired": "Este accesorio ya est\u00e1 emparejado con otro dispositivo. Por favor, reinicia el accesorio e int\u00e9ntalo de nuevo.", + "ignored_model": "El soporte de HomeKit para este modelo est\u00e1 bloqueado ya que est\u00e1 disponible una integraci\u00f3n nativa m\u00e1s completa.", + "invalid_config_entry": "Este dispositivo se muestra como listo para vincular, pero ya existe una entrada que causa conflicto en Home Assistant y se debe eliminar primero.", + "no_devices": "No se encontraron dispositivos no emparejados" + }, + "error": { + "authentication_error": "C\u00f3digo HomeKit incorrecto. Por favor, compru\u00e9belo e int\u00e9ntelo de nuevo.", + "busy_error": "El dispositivo rechaz\u00f3 el emparejamiento porque ya est\u00e1 emparejado con otro controlador.", + "max_peers_error": "El dispositivo rechaz\u00f3 el emparejamiento ya que no tiene almacenamiento de emparejamientos libres.", + "max_tries_error": "El dispositivo rechaz\u00f3 el emparejamiento ya que ha recibido m\u00e1s de 100 intentos de autenticaci\u00f3n fallidos.", + "pairing_failed": "Se ha producido un error no controlado al intentar emparejarse con este dispositivo. Esto puede ser un fallo temporal o que tu dispositivo no est\u00e9 admitido en este momento.", + "unable_to_pair": "No se ha podido emparejar, por favor int\u00e9ntelo de nuevo.", + "unknown_error": "El dispositivo report\u00f3 un error desconocido. La vinculaci\u00f3n ha fallado." + }, + "flow_title": "Accesorio HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "C\u00f3digo de vinculaci\u00f3n" + }, + "description": "Introduce tu c\u00f3digo de vinculaci\u00f3n de HomeKit (en este formato XXX-XX-XXX) para usar este accesorio", + "title": "Vincular con accesorio HomeKit" + }, + "user": { + "data": { + "device": "Dispositivo" + }, + "description": "Selecciona el dispositivo que quieres vincular", + "title": "Vincular con accesorio HomeKit" + } + } + }, + "title": "Accesorio HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/fr.json b/homeassistant/components/homekit_controller/translations/fr.json new file mode 100644 index 00000000000..a21ee3a53b3 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/fr.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Impossible d'ajouter le couplage car l'appareil est introuvable.", + "already_configured": "L'accessoire est d\u00e9j\u00e0 configur\u00e9 avec ce contr\u00f4leur.", + "already_in_progress": "Le flux de configuration de l'appareil est d\u00e9j\u00e0 en cours.", + "already_paired": "Cet accessoire est d\u00e9j\u00e0 associ\u00e9 \u00e0 un autre appareil. R\u00e9initialisez l\u2019accessoire et r\u00e9essayez.", + "ignored_model": "La prise en charge de HomeKit pour ce mod\u00e8le est bloqu\u00e9e car une int\u00e9gration native plus compl\u00e8te est disponible.", + "invalid_config_entry": "Cet appareil est pr\u00eat \u00e0 \u00eatre coupl\u00e9, mais il existe d\u00e9j\u00e0 une entr\u00e9e de configuration en conflit dans Home Assistant \u00e0 supprimer.", + "no_devices": "Aucun appareil non appair\u00e9 n'a pu \u00eatre trouv\u00e9" + }, + "error": { + "authentication_error": "Code HomeKit incorrect. S'il vous pla\u00eet v\u00e9rifier et essayez \u00e0 nouveau.", + "busy_error": "L'appareil a refus\u00e9 d'ajouter le couplage car il est d\u00e9j\u00e0 coupl\u00e9 avec un autre contr\u00f4leur.", + "max_peers_error": "L'appareil a refus\u00e9 d'ajouter le couplage car il ne dispose pas de stockage de couplage libre.", + "max_tries_error": "Le p\u00e9riph\u00e9rique a refus\u00e9 d'ajouter le couplage car il a re\u00e7u plus de 100 tentatives d'authentification infructueuses.", + "pairing_failed": "Une erreur non g\u00e9r\u00e9e s'est produite lors de la tentative d'appairage avec cet appareil. Il se peut qu'il s'agisse d'une panne temporaire ou que votre appareil ne soit pas pris en charge actuellement.", + "unable_to_pair": "Impossible d'appairer, veuillez r\u00e9essayer.", + "unknown_error": "L'appareil a signal\u00e9 une erreur inconnue. L'appairage a \u00e9chou\u00e9." + }, + "flow_title": "Accessoire HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Code d\u2019appairage" + }, + "description": "Entrez votre code de jumelage HomeKit (au format XXX-XX-XXX) pour utiliser cet accessoire.", + "title": "Appairer avec l'accessoire HomeKit" + }, + "user": { + "data": { + "device": "Appareil" + }, + "description": "S\u00e9lectionnez l'appareil avec lequel vous voulez appairer", + "title": "Appairer avec l'accessoire HomeKit" + } + } + }, + "title": "Accessoire HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/hu.json b/homeassistant/components/homekit_controller/translations/hu.json new file mode 100644 index 00000000000..c6d81d985bb --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/hu.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Nem adhat\u00f3 hozz\u00e1 p\u00e1ros\u00edt\u00e1s, mert az eszk\u00f6z m\u00e1r nem tal\u00e1lhat\u00f3.", + "already_configured": "A tartoz\u00e9k m\u00e1r konfigur\u00e1lva van ezzel a vez\u00e9rl\u0151vel.", + "already_in_progress": "Az eszk\u00f6z konfigur\u00e1ci\u00f3ja m\u00e1r folyamatban van.", + "already_paired": "Ez a tartoz\u00e9k m\u00e1r p\u00e1ros\u00edtva van egy m\u00e1sik eszk\u00f6zzel. \u00c1ll\u00edtsa alaphelyzetbe a tartoz\u00e9kot, majd pr\u00f3b\u00e1lkozzon \u00fajra.", + "ignored_model": "A HomeKit t\u00e1mogat\u00e1sa e modelln\u00e9l blokkolva van, mivel a szolg\u00e1ltat\u00e1shoz teljes nat\u00edv integr\u00e1ci\u00f3 \u00e9rhet\u0151 el.", + "invalid_config_entry": "Ez az eszk\u00f6z k\u00e9szen \u00e1ll a p\u00e1ros\u00edt\u00e1sra, de m\u00e1r van egy \u00fctk\u00f6z\u0151 konfigur\u00e1ci\u00f3s bejegyz\u00e9s a Home Assistant-ben, amelyet el\u0151sz\u00f6r el kell t\u00e1vol\u00edtani.", + "no_devices": "Nem tal\u00e1lhat\u00f3 nem p\u00e1ros\u00edtott eszk\u00f6z" + }, + "error": { + "authentication_error": "Helytelen HomeKit k\u00f3d. K\u00e9rj\u00fck, ellen\u0151rizze, \u00e9s pr\u00f3b\u00e1lja \u00fajra.", + "busy_error": "Az eszk\u00f6z megtagadta a p\u00e1ros\u00edt\u00e1s hozz\u00e1ad\u00e1s\u00e1t, mivel m\u00e1r p\u00e1ros\u00edtva van egy m\u00e1sik vez\u00e9rl\u0151vel.", + "max_peers_error": "Az eszk\u00f6z megtagadta a p\u00e1ros\u00edt\u00e1s hozz\u00e1ad\u00e1s\u00e1t, mivel nincs ingyenes p\u00e1ros\u00edt\u00e1si t\u00e1rhely.", + "max_tries_error": "Az eszk\u00f6z megtagadta a p\u00e1ros\u00edt\u00e1s hozz\u00e1ad\u00e1s\u00e1t, mivel t\u00f6bb mint 100 sikertelen hiteles\u00edt\u00e9si k\u00eds\u00e9rletet kapott.", + "pairing_failed": "Nem kezelt hiba t\u00f6rt\u00e9nt az eszk\u00f6zzel val\u00f3 p\u00e1ros\u00edt\u00e1s sor\u00e1n. Lehet, hogy ez \u00e1tmeneti hiba, vagy az eszk\u00f6z jelenleg m\u00e9g nem t\u00e1mogatott.", + "unable_to_pair": "Nem siker\u00fclt p\u00e1ros\u00edtani, pr\u00f3b\u00e1ld \u00fajra.", + "unknown_error": "Az eszk\u00f6z ismeretlen hib\u00e1t jelentett. A p\u00e1ros\u00edt\u00e1s sikertelen." + }, + "flow_title": "HomeKit tartoz\u00e9k: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "P\u00e1ros\u00edt\u00e1si k\u00f3d" + }, + "description": "\u00cdrja be a HomeKit p\u00e1ros\u00edt\u00e1si k\u00f3dj\u00e1t (XXX-XX-XXX form\u00e1tumban) a kieg\u00e9sz\u00edt\u0151 haszn\u00e1lat\u00e1hoz", + "title": "HomeKit tartoz\u00e9k p\u00e1ros\u00edt\u00e1sa" + }, + "user": { + "data": { + "device": "Eszk\u00f6z" + }, + "description": "V\u00e1lassza ki azt az eszk\u00f6zt, amelyet p\u00e1ros\u00edtani szeretne", + "title": "HomeKit tartoz\u00e9k p\u00e1ros\u00edt\u00e1sa" + } + } + }, + "title": "HomeKit Vez\u00e9rl\u0151" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/it.json b/homeassistant/components/homekit_controller/translations/it.json new file mode 100644 index 00000000000..033e6f937da --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/it.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Impossibile aggiungere l'abbinamento in quanto non \u00e8 pi\u00f9 possibile trovare il dispositivo.", + "already_configured": "L'accessorio \u00e8 gi\u00e0 configurato con questo controller.", + "already_in_progress": "Il flusso di configurazione per il dispositivo \u00e8 gi\u00e0 in corso.", + "already_paired": "Questo accessorio \u00e8 gi\u00e0 associato a un altro dispositivo. Si prega di resettare l'accessorio e riprovare.", + "ignored_model": "Il supporto di HomeKit per questo modello \u00e8 bloccato poich\u00e9 \u00e8 disponibile un'integrazione nativa con pi\u00f9 funzionalit\u00e0.", + "invalid_config_entry": "Questo dispositivo viene visualizzato come pronto per l'associazione, ma c'\u00e8 gi\u00e0 una voce di configurazione in conflitto in Home Assistant che prima deve essere rimossa.", + "no_devices": "Non \u00e8 stato possibile trovare dispositivi non associati" + }, + "error": { + "authentication_error": "Codice HomeKit errato. Per favore, controllate e riprovate.", + "busy_error": "Il dispositivo ha rifiutato di aggiungere l'abbinamento in quanto \u00e8 gi\u00e0 associato a un altro controller.", + "max_peers_error": "Il dispositivo ha rifiutato di aggiungere l'abbinamento in quanto non dispone di una memoria libera per esso.", + "max_tries_error": "Il dispositivo ha rifiutato di aggiungere l'abbinamento poich\u00e9 ha ricevuto pi\u00f9 di 100 tentativi di autenticazione non riusciti.", + "pairing_failed": "Si \u00e8 verificato un errore non gestito durante il tentativo di abbinamento con questo dispositivo. Potrebbe trattarsi di un errore temporaneo o il dispositivo potrebbe non essere attualmente supportato.", + "unable_to_pair": "Impossibile abbinare, per favore riprova.", + "unknown_error": "Il dispositivo ha riportato un errore sconosciuto. L'abbinamento non \u00e8 riuscito." + }, + "flow_title": "Accessorio HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Codice di abbinamento" + }, + "description": "Immettere il codice di abbinamento HomeKit (nel formato XXX-XX-XXX) per utilizzare questo accessorio", + "title": "Abbina con accessorio HomeKit" + }, + "user": { + "data": { + "device": "Dispositivo" + }, + "description": "Selezionare il dispositivo che si desidera abbinare", + "title": "Abbina con accessorio HomeKit" + } + } + }, + "title": "Controller HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/ko.json b/homeassistant/components/homekit_controller/translations/ko.json new file mode 100644 index 00000000000..d42001f629a --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/ko.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "\uae30\uae30\ub97c \ub354 \uc774\uc0c1 \ucc3e\uc744 \uc218 \uc5c6\uc73c\ubbc0\ub85c \ud398\uc5b4\ub9c1\uc744 \ucd94\uac00 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "already_configured": "\uc561\uc138\uc11c\ub9ac\uac00 \ucee8\ud2b8\ub864\ub7ec\uc5d0 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "already_in_progress": "\uae30\uae30 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", + "already_paired": "\uc774 \uc561\uc138\uc11c\ub9ac\ub294 \uc774\ubbf8 \ub2e4\ub978 \uae30\uae30\uc640 \ud398\uc5b4\ub9c1\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc561\uc138\uc11c\ub9ac\ub97c \uc7ac\uc124\uc815\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "ignored_model": "\uc774 \ubaa8\ub378\uc5d0 \ub300\ud55c HomeKit \uc9c0\uc6d0\uc740 \ub354 \ub9ce\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \uae30\ubcf8 \uad6c\uc131\uc694\uc18c\ub85c \uc778\ud574 \ucc28\ub2e8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "invalid_config_entry": "\uc774 \uae30\uae30\ub294 \ud398\uc5b4\ub9c1 \ud560 \uc900\ube44\uac00 \ub418\uc5c8\uc9c0\ub9cc Home Assistant \uc5d0 \uc774\ubbf8 \uad6c\uc131\ub418\uc5b4 \ucda9\ub3cc\ud558\ub294 \uad6c\uc131\uc694\uc18c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uba3c\uc800 \ud574\ub2f9 \uad6c\uc131\uc694\uc18c\ub97c \uc81c\uac70\ud574\uc8fc\uc138\uc694.", + "no_devices": "\ud398\uc5b4\ub9c1\uc774 \ud544\uc694\ud55c \uae30\uae30\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" + }, + "error": { + "authentication_error": "HomeKit \ucf54\ub4dc\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud655\uc778 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "busy_error": "\uae30\uae30\uac00 \uc774\ubbf8 \ub2e4\ub978 \ucee8\ud2b8\ub864\ub7ec\uc640 \ud398\uc5b4\ub9c1 \uc911\uc774\ubbc0\ub85c \ud398\uc5b4\ub9c1 \ucd94\uac00\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "max_peers_error": "\uae30\uae30\uc5d0 \ube44\uc5b4\uc788\ub294 \ud398\uc5b4\ub9c1 \uc7a5\uc18c\uac00 \uc5c6\uc5b4 \ud398\uc5b4\ub9c1 \ucd94\uac00\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "max_tries_error": "\uae30\uae30\uac00 \uc2e4\ud328\ud55c \uc778\uc99d \uc2dc\ub3c4 \ud69f\uc218\uac00 100 \ud68c\ub97c \ucd08\uacfc\ud558\uc5ec \ud398\uc5b4\ub9c1\uc744 \ucd94\uac00\ub97c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "pairing_failed": "\uc774 \uae30\uae30\uc640 \ud398\uc5b4\ub9c1\uc744 \uc2dc\ub3c4\ud558\ub294 \uc911 \ucc98\ub9ac\ub418\uc9c0 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \uc77c\uc2dc\uc801\uc778 \uc624\ub958\uc774\uac70\ub098 \ud604\uc7ac \uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \uae30\uae30 \uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "unable_to_pair": "\ud398\uc5b4\ub9c1 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown_error": "\uae30\uae30\uc5d0\uc11c \uc54c \uc218\uc5c6\ub294 \uc624\ub958\ub97c \ubcf4\uace0\ud588\uc2b5\ub2c8\ub2e4. \ud398\uc5b4\ub9c1\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4." + }, + "flow_title": "HomeKit \uc561\uc138\uc11c\ub9ac: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "\ud398\uc5b4\ub9c1 \ucf54\ub4dc" + }, + "description": "\uc774 \uc561\uc138\uc11c\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub824\uba74 HomeKit \ud398\uc5b4\ub9c1 \ucf54\ub4dc (XXX-XX-XXX \ud615\uc2dd) \ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "HomeKit \uc561\uc138\uc11c\ub9ac \ud398\uc5b4\ub9c1" + }, + "user": { + "data": { + "device": "\uae30\uae30" + }, + "description": "\ud398\uc5b4\ub9c1 \ud560 \uae30\uae30\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694", + "title": "HomeKit \uc561\uc138\uc11c\ub9ac \ud398\uc5b4\ub9c1" + } + } + }, + "title": "HomeKit \uc561\uc138\uc11c\ub9ac" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/lb.json b/homeassistant/components/homekit_controller/translations/lb.json new file mode 100644 index 00000000000..c840cb4e9fc --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/lb.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "D'Kupplung kann net dob\u00e4igesat ginn, well den Apparat net m\u00e9i siichtbar ass", + "already_configured": "Accessoire ass schon mat d\u00ebsem Kontroller konfigur\u00e9iert.", + "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", + "already_paired": "D\u00ebsen Accessoire ass schonn mat engem aneren Apparat verbonnen. S\u00ebtzt den Apparat op Wierksastellungen zer\u00e9ck an prob\u00e9iert nach emol w.e.g.", + "ignored_model": "HomeKit Support fir d\u00ebse Modell ass block\u00e9iert well eng m\u00e9i komplett nativ Integratioun disponibel ass.", + "invalid_config_entry": "D\u00ebsen Apparat mellt sech prett fir ze verbanne mee et g\u00ebtt schonn eng Entr\u00e9e am Home Assistant d\u00e9i ee Konflikt duerstellt welch fir d'\u00e9ischt muss erausgeholl ginn.", + "no_devices": "Keng net verbonnen Apparater fonnt" + }, + "error": { + "authentication_error": "Ong\u00ebltege HomeKit Code. Iwwerpr\u00e9ift d\u00ebsen an prob\u00e9iert w.e.g. nach emol.", + "busy_error": "Den Apparat huet en Kupplungs Versuch refus\u00e9iert, well en scho mat engem anere Kontroller verbonnen ass.", + "max_peers_error": "Den Apparat huet den Kupplungs Versuch refus\u00e9iert well et keng fr\u00e4i Pairing Memoire huet.", + "max_tries_error": "Den Apparat huet den Kupplungs Versuch refus\u00e9iert well et m\u00e9i w\u00e9i 100 net erfollegr\u00e4ich Authentifikatioun's Versich erhalen huet.", + "pairing_failed": "Eng onerwaarte Feeler ass opgetruede beim Kupplung's Versuch mat d\u00ebsem Apparat. D\u00ebst kann e tempor\u00e4re Feeler sinn oder D\u00e4in Apparat g\u00ebtt aktuell net \u00ebnnerst\u00ebtzt.", + "unable_to_pair": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", + "unknown_error": "Apparat mellt een onbekannte Feeler. Verbindung net m\u00e9iglech." + }, + "flow_title": "HomeKit Accessoire: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Pairing Code" + }, + "description": "Gitt \u00e4ren HomeKit pairing Code (am Format XXX-XX-XXX) an fir d\u00ebsen Accessoire ze benotzen", + "title": "Mam HomeKit Accessoire verbannen" + }, + "user": { + "data": { + "device": "Apparat" + }, + "description": "Wielt den Apparat aus dee soll verbonne ginn", + "title": "Mam HomeKit Accessoire verbannen" + } + } + }, + "title": "HomeKit Kontroller" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/nl.json b/homeassistant/components/homekit_controller/translations/nl.json new file mode 100644 index 00000000000..20013168c81 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/nl.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Kan geen koppeling toevoegen omdat het apparaat niet langer kan worden gevonden.", + "already_configured": "Accessoire is al geconfigureerd met deze controller.", + "already_in_progress": "De configuratiestroom voor het apparaat is al in volle gang.", + "already_paired": "Dit accessoire is al gekoppeld aan een ander apparaat. Reset het accessoire en probeer het opnieuw.", + "ignored_model": "HomeKit-ondersteuning voor dit model is geblokkeerd omdat er een meer functie volledige native integratie beschikbaar is.", + "invalid_config_entry": "Dit apparaat geeft aan dat het gereed is om te koppelen, maar er is al een conflicterend configuratie-item voor in de Home Assistant dat eerst moet worden verwijderd.", + "no_devices": "Er zijn geen gekoppelde apparaten gevonden" + }, + "error": { + "authentication_error": "Onjuiste HomeKit-code. Controleer het en probeer het opnieuw.", + "busy_error": "Het apparaat weigerde om koppelingen toe te voegen, omdat het al gekoppeld is met een andere controller.", + "max_peers_error": "Apparaat heeft geweigerd om koppelingen toe te voegen omdat het geen vrije koppelingsopslag heeft.", + "max_tries_error": "Apparaat weigerde pairing toe te voegen omdat het meer dan 100 niet-succesvolle authenticatiepogingen heeft ontvangen.", + "pairing_failed": "Er deed zich een fout voor tijdens het koppelen met dit apparaat. Dit kan een tijdelijke storing zijn of uw apparaat wordt mogelijk momenteel niet ondersteund.", + "unable_to_pair": "Kan niet koppelen, probeer het opnieuw.", + "unknown_error": "Apparaat meldde een onbekende fout. Koppelen mislukt." + }, + "flow_title": "HomeKit-accessoire: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Koppelingscode" + }, + "description": "Voer uw HomeKit pairing code (in het formaat XXX-XX-XXX) om dit accessoire te gebruiken", + "title": "Koppel met HomeKit accessoire" + }, + "user": { + "data": { + "device": "Apparaat" + }, + "description": "Selecteer het apparaat waarmee u wilt koppelen", + "title": "Koppel met HomeKit accessoire" + } + } + }, + "title": "HomeKit Accessoires" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/nn.json b/homeassistant/components/homekit_controller/translations/nn.json new file mode 100644 index 00000000000..a00780eb54f --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/nn.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "pair": { + "data": { + "pairing_code": "Paringskode" + } + } + } + }, + "title": "HomeKit tilbeh\u00f8r" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/no.json b/homeassistant/components/homekit_controller/translations/no.json new file mode 100644 index 00000000000..f3d93fd9e92 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/no.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Kan ikke legge til sammenkobling da enheten ikke lenger kan bli funnet.", + "already_configured": "Tilbeh\u00f8r er allerede konfigurert med denne kontrolleren.", + "already_in_progress": "Konfigurasjonsflyt for enhet p\u00e5g\u00e5r allerede.", + "already_paired": "Dette tilbeh\u00f8ret er allerede sammenkoblet med en annen enhet. Vennligst tilbakestill tilbeh\u00f8ret og pr\u00f8v igjen.", + "ignored_model": "HomeKit st\u00f8tte for denne modellen er blokkert da en mer funksjonsrik standard integrering er tilgjengelig.", + "invalid_config_entry": "Denne enheten vises som klar til sammenkobling, men det er allerede en motstridende konfigurasjonsoppf\u00f8ring for den i Hjelpeassistenten som f\u00f8rst m\u00e5 fjernes.", + "no_devices": "Ingen ukoblede enheter ble funnet" + }, + "error": { + "authentication_error": "Ugyldig HomeKit kode. Vennligst sjekk den og pr\u00f8v igjen.", + "busy_error": "Enheten nekter \u00e5 sammenkoble da den allerede er sammenkoblet med en annen kontroller.", + "max_peers_error": "Enheten nekter \u00e5 sammenkoble da den ikke har ledig sammenkoblingslagring.", + "max_tries_error": "Enheten nekter \u00e5 sammenkoble da den har mottatt mer enn 100 mislykkede godkjenningsfors\u00f8k.", + "pairing_failed": "En uh\u00e5ndtert feil oppstod under fors\u00f8k p\u00e5 \u00e5 koble til denne enheten. Dette kan v\u00e6re en midlertidig feil, eller at enheten din kan ikke st\u00f8ttes for \u00f8yeblikket.", + "unable_to_pair": "Kunne ikke koble til, vennligst pr\u00f8v igjen.", + "unknown_error": "Enheten rapporterte en ukjent feil. Sammenkobling mislyktes." + }, + "flow_title": "HomeKit Tilbeh\u00f8r: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Sammenkoblingskode" + }, + "description": "Skriv inn din HomeKit-sammenkoblingskode (i formatet XXX-XX-XXX) for \u00e5 bruke dette tilbeh\u00f8ret", + "title": "Koble til HomeKit tilbeh\u00f8r" + }, + "user": { + "data": { + "device": "Enhet" + }, + "description": "Velg enheten du vil koble til", + "title": "Koble til HomeKit tilbeh\u00f8r" + } + } + }, + "title": "HomeKit-kontroller" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/pl.json b/homeassistant/components/homekit_controller/translations/pl.json new file mode 100644 index 00000000000..498d927ffb8 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/pl.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Nie mo\u017cna rozpocz\u0105\u0107 parowania, poniewa\u017c nie znaleziono urz\u0105dzenia.", + "already_configured": "Akcesorium jest ju\u017c skonfigurowane z tym kontrolerem.", + "already_in_progress": "Konfiguracja urz\u0105dzenia jest ju\u017c w toku.", + "already_paired": "To akcesorium jest ju\u017c sparowane z innym urz\u0105dzeniem. Zresetuj akcesorium i spr\u00f3buj ponownie.", + "ignored_model": "Obs\u0142uga HomeKit dla tego modelu jest zablokowana, poniewa\u017c dost\u0119pna jest pe\u0142niejsza integracja natywna.", + "invalid_config_entry": "To urz\u0105dzenie jest wy\u015bwietlane jako gotowe do sparowania, ale istnieje ju\u017c konfliktowy wpis konfiguracyjny dla niego w Home Assistant, kt\u00f3ry musi zosta\u0107 najpierw usuni\u0119ty.", + "no_devices": "Nie znaleziono niesparowanych urz\u0105dze\u0144" + }, + "error": { + "authentication_error": "Niepoprawny kod parowania HomeKit. Sprawd\u017a go i spr\u00f3buj ponownie.", + "busy_error": "Urz\u0105dzenie odm\u00f3wi\u0142o parowania, poniewa\u017c jest ju\u017c powi\u0105zane z innym kontrolerem.", + "max_peers_error": "Urz\u0105dzenie odm\u00f3wi\u0142o parowania, poniewa\u017c nie ma wolnej pami\u0119ci parowania.", + "max_tries_error": "Urz\u0105dzenie odm\u00f3wi\u0142o dodania parowania, poniewa\u017c otrzyma\u0142o ponad 100 nieudanych pr\u00f3b uwierzytelnienia.", + "pairing_failed": "Wyst\u0105pi\u0142 nieobs\u0142ugiwany b\u0142\u0105d podczas pr\u00f3by sparowania z tym urz\u0105dzeniem. Mo\u017ce to by\u0107 tymczasowa awaria lub urz\u0105dzenie mo\u017ce nie by\u0107 obecnie obs\u0142ugiwane.", + "unable_to_pair": "Nie mo\u017cna sparowa\u0107, spr\u00f3buj ponownie.", + "unknown_error": "Urz\u0105dzenie zg\u0142osi\u0142o nieznany b\u0142\u0105d. Parowanie nie powiod\u0142o si\u0119." + }, + "flow_title": "Akcesoria HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Kod parowania" + }, + "description": "Wprowad\u017a kod parowania HomeKit, aby u\u017cy\u0107 tego akcesorium", + "title": "Sparuj z akcesorium HomeKit" + }, + "user": { + "data": { + "device": "Urz\u0105dzenie" + }, + "description": "Wybierz urz\u0105dzenie, kt\u00f3re chcesz sparowa\u0107", + "title": "Sparuj z akcesorium HomeKit" + } + } + }, + "title": "Akcesorium HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/pt-BR.json b/homeassistant/components/homekit_controller/translations/pt-BR.json new file mode 100644 index 00000000000..ff0dadf8c57 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/pt-BR.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "N\u00e3o \u00e9 poss\u00edvel adicionar o emparelhamento, pois o dispositivo n\u00e3o pode mais ser encontrado.", + "already_configured": "O acess\u00f3rio j\u00e1 est\u00e1 configurado com este controlador.", + "already_in_progress": "O fluxo de configura\u00e7\u00e3o para o dispositivo j\u00e1 est\u00e1 em andamento.", + "already_paired": "Este acess\u00f3rio j\u00e1 est\u00e1 pareado com outro dispositivo. Por favor, redefina o acess\u00f3rio e tente novamente.", + "ignored_model": "O suporte do HomeKit para este modelo est\u00e1 bloqueado, j\u00e1 que uma integra\u00e7\u00e3o nativa mais completa est\u00e1 dispon\u00edvel.", + "invalid_config_entry": "Este dispositivo est\u00e1 mostrando como pronto para parear, mas existe um conflito na configura\u00e7\u00e3o de entrada para ele no Home Assistant que deve ser removida primeiro.", + "no_devices": "N\u00e3o foi poss\u00edvel encontrar dispositivos n\u00e3o pareados" + }, + "error": { + "authentication_error": "C\u00f3digo HomeKit incorreto. Por favor verifique e tente novamente.", + "busy_error": "O dispositivo recusou-se a adicionar o emparelhamento, uma vez que j\u00e1 est\u00e1 emparelhando com outro controlador.", + "max_peers_error": "O dispositivo recusou-se a adicionar o emparelhamento, pois n\u00e3o tem armazenamento de emparelhamento gratuito.", + "max_tries_error": "O dispositivo recusou-se a adicionar o emparelhamento, uma vez que recebeu mais de 100 tentativas de autentica\u00e7\u00e3o malsucedidas.", + "pairing_failed": "Ocorreu um erro sem tratamento ao tentar emparelhar com este dispositivo. Isso pode ser uma falha tempor\u00e1ria ou o dispositivo pode n\u00e3o ser suportado no momento.", + "unable_to_pair": "N\u00e3o \u00e9 poss\u00edvel parear, tente novamente.", + "unknown_error": "O dispositivo relatou um erro desconhecido. O pareamento falhou." + }, + "flow_title": "Acess\u00f3rio HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "C\u00f3digo de pareamento" + }, + "description": "Digite seu c\u00f3digo de pareamento do HomeKit (no formato XXX-XX-XXX) para usar este acess\u00f3rio", + "title": "Parear com o acess\u00f3rio HomeKit" + }, + "user": { + "data": { + "device": "Dispositivo" + }, + "description": "Selecione o dispositivo com o qual voc\u00ea deseja parear", + "title": "Parear com o acess\u00f3rio HomeKit" + } + } + }, + "title": "Acess\u00f3rio HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/pt.json b/homeassistant/components/homekit_controller/translations/pt.json new file mode 100644 index 00000000000..f4ffbf157bd --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/pt.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "N\u00e3o \u00e9 poss\u00edvel adicionar o emparelhamento. O dispositivo n\u00e3o foi encontrado.", + "already_configured": "O acess\u00f3rio j\u00e1 est\u00e1 configurado com este controlador.", + "already_in_progress": "O fluxo de configura\u00e7\u00e3o do dispositivo j\u00e1 est\u00e1 em andamento.", + "already_paired": "Este acess\u00f3rio j\u00e1 est\u00e1 emparelhado com outro dispositivo. Por favor restaure as defini\u00e7\u00f5es de f\u00e1brica do acess\u00f3rio e tente novamente.", + "ignored_model": "O suporte do HomeKit para este modelo est\u00e1 bloqueado, uma vez que est\u00e1 dispon\u00edvel uma integra\u00e7\u00e3o nativa mais completa.", + "invalid_config_entry": "Este dispositivo est\u00e1 pronto a emparelhar, mas j\u00e1 existe uma configura\u00e7\u00e3o no Home Assistant que precisa ser removida primeiro.", + "no_devices": "N\u00e3o foram encontrados dispositivos por emparelhar" + }, + "error": { + "authentication_error": "C\u00f3digo incorreto do HomeKit. Por favor, verifique e tente novamente.", + "busy_error": "O dispositivo recusou-se a adicionar emparelhamento, pois j\u00e1 est\u00e1 emparelhado com outro controlador.", + "max_peers_error": "O dispositivo recusou-se a adicionar o emparelhamento, pois n\u00e3o possui espa\u00e7o livre para o emparelhamento.", + "max_tries_error": "O dispositivo recusou-se a emparelhar por ter recebido mais de 100 tentativas de autentica\u00e7\u00e3o mal sucedidas.", + "pairing_failed": "Ocorreu um erro n\u00e3o tratado ao tentar emparelhar com este dispositivo. Poder\u00e1 ser uma falha tempor\u00e1ria ou o dispositivo pode n\u00e3o ser suportado agora.", + "unable_to_pair": "N\u00e3o foi poss\u00edvel emparelhar, por favor, tente novamente.", + "unknown_error": "O dispositivo reportou um erro desconhecido. O emparelhamento falhou." + }, + "flow_title": "Acess\u00f3rio HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "C\u00f3digo de emparelhamento" + }, + "description": "Introduza o c\u00f3digo de emparelhamento do seu HomeKit (no formato XXX-XX-XXX) para utilizar este acess\u00f3rio", + "title": "Emparelhar com o acess\u00f3rio HomeKit" + }, + "user": { + "data": { + "device": "Dispositivo" + }, + "description": "Selecione o dispositivo com o qual deseja emparelhar", + "title": "Emparelhar com o acess\u00f3rio HomeKit" + } + } + }, + "title": "Acess\u00f3rio HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/ru.json b/homeassistant/components/homekit_controller/translations/ru.json new file mode 100644 index 00000000000..95f8a4d6efe --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/ru.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u043e.", + "already_configured": "\u0410\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 \u0443\u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "already_paired": "\u042d\u0442\u043e\u0442 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 \u0443\u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u0431\u0440\u043e\u0441 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", + "ignored_model": "\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 HomeKit \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u0430\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f.", + "invalid_config_entry": "\u042d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043a \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044e, \u043d\u043e \u0432 Home Assistant \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.", + "no_devices": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f, \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b." + }, + "error": { + "authentication_error": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 HomeKit. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u0434 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", + "busy_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c.", + "max_peers_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043b\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.", + "max_tries_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043b\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0431\u043e\u043b\u0435\u0435 100 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.", + "pairing_failed": "\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0439 \u0438\u043b\u0438 \u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0449\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.", + "unable_to_pair": "\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", + "unknown_error": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u043e \u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435. \u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c." + }, + "flow_title": "\u0410\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 HomeKit: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "\u041a\u043e\u0434 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f HomeKit (\u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XXX-XX-XXX), \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440.", + "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u043e\u043c HomeKit" + }, + "user": { + "data": { + "device": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435.", + "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u043e\u043c HomeKit" + } + } + }, + "title": "HomeKit Controller" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/sl.json b/homeassistant/components/homekit_controller/translations/sl.json new file mode 100644 index 00000000000..4dcd1d485c3 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/sl.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Seznanjanja ni mogo\u010de dodati, ker naprave ni ve\u010d mogo\u010de najti.", + "already_configured": "Dodatna oprema je \u017ee konfigurirana s tem krmilnikom.", + "already_in_progress": "Konfiguracijski tok za to napravo je \u017ee v teku.", + "already_paired": "Ta dodatna oprema je \u017ee povezana z drugo napravo. Ponastavite dodatno opremo in poskusite znova.", + "ignored_model": "Podpora za HomeKit za ta model je blokirana, saj je na voljo ve\u010d funkcij popolne nativne integracije.", + "invalid_config_entry": "Ta naprava je prikazana kot pripravljena za seznanjanje, vendar je v programu Home Assistant zanj \u017ee vpisan konfliktni vnos konfiguracije, ki ga je treba najprej odstraniti.", + "no_devices": "Ni bilo mogo\u010de najti neuparjenih naprav" + }, + "error": { + "authentication_error": "Nepravilna koda HomeKit. Preverite in poskusite znova.", + "busy_error": "Naprava je zavrnila seznanjanje, saj se \u017ee povezuje z drugim krmilnikom.", + "max_peers_error": "Naprava je zavrnila seznanjanje, saj nima prostega pomnilnika za seznanjanje.", + "max_tries_error": "Napravaje zavrnila seznanjanje, saj je prejela ve\u010d kot 100 neuspe\u0161nih poskusov overjanja.", + "pairing_failed": "Med poskusom seznanitev s to napravo je pri\u0161lo do napake. To je lahko za\u010dasna napaka ali pa va\u0161a naprava trenutno ni podprta.", + "unable_to_pair": "Ni mogo\u010de seznaniti. Poskusite znova.", + "unknown_error": "Naprava je sporo\u010dila neznano napako. Seznanjanje ni uspelo." + }, + "flow_title": "HomeKit Oprema: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Koda za seznanjanje" + }, + "description": "\u010ce \u017eeli\u0161 uporabiti to dodatno opremo, vnesi HomeKit kodo.", + "title": "Seznanite s HomeKit Opremo" + }, + "user": { + "data": { + "device": "Naprava" + }, + "description": "Izberite napravo, s katero se \u017eelite seznaniti", + "title": "Seznanite s HomeKit Opremo" + } + } + }, + "title": "HomeKit oprema" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/sv.json b/homeassistant/components/homekit_controller/translations/sv.json new file mode 100644 index 00000000000..0c57e09b09b --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/sv.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "Kan inte genomf\u00f6ra parningsf\u00f6rs\u00f6ket eftersom enheten inte l\u00e4ngre kan hittas.", + "already_configured": "Tillbeh\u00f6ret \u00e4r redan konfigurerat med denna kontroller.", + "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r enheten p\u00e5g\u00e5r redan.", + "already_paired": "Det h\u00e4r tillbeh\u00f6ret \u00e4r redan kopplat till en annan enhet. \u00c5terst\u00e4ll tillbeh\u00f6ret och f\u00f6rs\u00f6k igen.", + "ignored_model": "HomeKit-st\u00f6d f\u00f6r den h\u00e4r modellen blockeras eftersom en mer komplett inbyggd integration \u00e4r tillg\u00e4nglig.", + "invalid_config_entry": "Den h\u00e4r enheten visas som redo att paras ihop, men det finns redan en motstridig konfigurations-post f\u00f6r den i Home Assistant som f\u00f6rst m\u00e5ste tas bort.", + "no_devices": "Inga oparade enheter kunde hittas" + }, + "error": { + "authentication_error": "Felaktig HomeKit-kod. V\u00e4nligen kontrollera och f\u00f6rs\u00f6k igen.", + "busy_error": "Enheten nekade parning d\u00e5 den redan \u00e4r parad med annan controller.", + "max_peers_error": "Enheten nekade parningsf\u00f6rs\u00f6ket d\u00e5 det inte finns n\u00e5got parningsminnesutrymme kvar", + "max_tries_error": "Enheten nekade parningen d\u00e5 den har emottagit mer \u00e4n 100 misslyckade autentiseringsf\u00f6rs\u00f6k", + "pairing_failed": "Ett ok\u00e4nt fel uppstod n\u00e4r parningsf\u00f6rs\u00f6ket gjordes med den h\u00e4r enheten. Det h\u00e4r kan vara ett tillf\u00e4lligt fel, eller s\u00e5 st\u00f6ds inte din enhet i nul\u00e4get.", + "unable_to_pair": "Det g\u00e5r inte att para ihop, f\u00f6rs\u00f6k igen.", + "unknown_error": "Enheten rapporterade ett ok\u00e4nt fel. Parning misslyckades." + }, + "flow_title": "HomeKit-tillbeh\u00f6r: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "Parningskod" + }, + "description": "Ange din HomeKit-parningskod (i formatet XXX-XX-XXX) f\u00f6r att anv\u00e4nda det h\u00e4r tillbeh\u00f6ret", + "title": "Para HomeKit-tillbeh\u00f6r" + }, + "user": { + "data": { + "device": "Enhet" + }, + "description": "V\u00e4lj den enhet du vill para med", + "title": "Para HomeKit-tillbeh\u00f6r" + } + } + }, + "title": "HomeKit-tillbeh\u00f6r" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/th.json b/homeassistant/components/homekit_controller/translations/th.json new file mode 100644 index 00000000000..938d6f2aad8 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/th.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e19\u0e35\u0e49\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e19\u0e35\u0e49\u0e41\u0e25\u0e49\u0e27", + "already_paired": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e19\u0e35\u0e49\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2d\u0e37\u0e48\u0e19\u0e41\u0e25\u0e49\u0e27 \u0e42\u0e1b\u0e23\u0e14\u0e23\u0e35\u0e40\u0e0b\u0e47\u0e15\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e41\u0e25\u0e49\u0e27\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07", + "ignored_model": "\u0e01\u0e32\u0e23\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c HomeKit \u0e23\u0e38\u0e48\u0e19\u0e19\u0e35\u0e49\u0e16\u0e39\u0e01\u0e1b\u0e34\u0e14\u0e01\u0e31\u0e49\u0e19\u0e44\u0e27\u0e49 \u0e41\u0e15\u0e48\u0e01\u0e47\u0e21\u0e35\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e1a\u0e32\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49", + "invalid_config_entry": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e19\u0e35\u0e49\u0e1a\u0e2d\u0e01\u0e27\u0e48\u0e32\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48 \u0e41\u0e15\u0e48\u0e21\u0e31\u0e19\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e02\u0e31\u0e14\u0e41\u0e22\u0e49\u0e07\u0e01\u0e31\u0e19\u0e2d\u0e22\u0e39\u0e48 Home Assistant \u0e40\u0e25\u0e22\u0e17\u0e33\u0e01\u0e32\u0e23\u0e25\u0e1a\u0e17\u0e34\u0e49\u0e07", + "no_devices": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e43\u0e14\u0e46 \u0e40\u0e25\u0e22" + }, + "error": { + "authentication_error": "\u0e23\u0e2b\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48 HomeKit \u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e30\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07", + "unable_to_pair": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e44\u0e14\u0e49 \u0e42\u0e1b\u0e23\u0e14\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07", + "unknown_error": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01 \u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27" + }, + "step": { + "pair": { + "data": { + "pairing_code": "\u0e23\u0e2b\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48" + }, + "description": "\u0e1b\u0e49\u0e2d\u0e19\u0e23\u0e2b\u0e31\u0e2a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48 HomeKit \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21\u0e19\u0e35\u0e49", + "title": "\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21 HomeKit" + }, + "user": { + "data": { + "device": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c" + }, + "description": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e08\u0e30\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48", + "title": "\u0e08\u0e31\u0e1a\u0e04\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21 HomeKit" + } + } + }, + "title": "\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e40\u0e2a\u0e23\u0e34\u0e21 HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/vi.json b/homeassistant/components/homekit_controller/translations/vi.json new file mode 100644 index 00000000000..39283a733e8 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/vi.json @@ -0,0 +1,20 @@ +{ + "config": { + "step": { + "pair": { + "data": { + "pairing_code": "M\u00e3 k\u1ebft n\u1ed1i" + }, + "title": "K\u1ebft n\u1ed1i v\u1edbi Ph\u1ee5 ki\u1ec7n HomeKit" + }, + "user": { + "data": { + "device": "Thi\u1ebft b\u1ecb" + }, + "description": "Ch\u1ecdn thi\u1ebft b\u1ecb b\u1ea1n mu\u1ed1n k\u1ebft n\u1ed1i", + "title": "K\u1ebft n\u1ed1i v\u1edbi Ph\u1ee5 ki\u1ec7n HomeKit" + } + } + }, + "title": "Ph\u1ee5 ki\u1ec7n HomeKit" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/zh-Hans.json b/homeassistant/components/homekit_controller/translations/zh-Hans.json new file mode 100644 index 00000000000..4b58e4f9fb6 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/zh-Hans.json @@ -0,0 +1,39 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "\u65e0\u6cd5\u6dfb\u52a0\u914d\u5bf9\uff0c\u56e0\u4e3a\u65e0\u6cd5\u518d\u627e\u5230\u8bbe\u5907\u3002", + "already_configured": "\u914d\u4ef6\u5df2\u901a\u8fc7\u6b64\u63a7\u5236\u5668\u914d\u7f6e\u5b8c\u6210\u3002", + "already_paired": "\u6b64\u914d\u4ef6\u5df2\u4e0e\u53e6\u4e00\u53f0\u8bbe\u5907\u914d\u5bf9\u3002\u8bf7\u91cd\u7f6e\u914d\u4ef6\uff0c\u7136\u540e\u91cd\u8bd5\u3002", + "ignored_model": "HomeKit \u5bf9\u6b64\u8bbe\u5907\u7684\u652f\u6301\u5df2\u88ab\u963b\u6b62\uff0c\u56e0\u4e3a\u6709\u529f\u80fd\u66f4\u5b8c\u6574\u7684\u539f\u751f\u96c6\u6210\u53ef\u4ee5\u4f7f\u7528\u3002", + "invalid_config_entry": "\u6b64\u8bbe\u5907\u5df2\u51c6\u5907\u597d\u914d\u5bf9\uff0c\u4f46\u662f Home Assistant \u4e2d\u5b58\u5728\u4e0e\u4e4b\u51b2\u7a81\u7684\u914d\u7f6e\uff0c\u5fc5\u987b\u5148\u5c06\u5176\u5220\u9664\u3002", + "no_devices": "\u6ca1\u6709\u627e\u5230\u672a\u914d\u5bf9\u7684\u8bbe\u5907" + }, + "error": { + "authentication_error": "HomeKit \u4ee3\u7801\u4e0d\u6b63\u786e\u3002\u8bf7\u68c0\u67e5\u540e\u91cd\u8bd5\u3002", + "busy_error": "\u8bbe\u5907\u62d2\u7edd\u914d\u5bf9\uff0c\u56e0\u4e3a\u5b83\u5df2\u7ecf\u4e0e\u53e6\u4e00\u4e2a\u63a7\u5236\u5668\u914d\u5bf9\u3002", + "max_peers_error": "\u8bbe\u5907\u62d2\u7edd\u914d\u5bf9\uff0c\u56e0\u4e3a\u5b83\u6ca1\u6709\u7a7a\u95f2\u7684\u914d\u5bf9\u5b58\u50a8\u7a7a\u95f4\u3002", + "max_tries_error": "\u8bbe\u5907\u62d2\u7edd\u914d\u5bf9\uff0c\u56e0\u4e3a\u5b83\u5df2\u6536\u5230\u8d85\u8fc7 100 \u6b21\u5931\u8d25\u7684\u8eab\u4efd\u8ba4\u8bc1\u3002", + "pairing_failed": "\u5c1d\u8bd5\u4e0e\u6b64\u8bbe\u5907\u914d\u5bf9\u65f6\u53d1\u751f\u672a\u5904\u7406\u7684\u9519\u8bef\u3002\u8fd9\u53ef\u80fd\u662f\u6682\u65f6\u6027\u6545\u969c\uff0c\u4e5f\u53ef\u80fd\u662f\u60a8\u7684\u8bbe\u5907\u76ee\u524d\u4e0d\u88ab\u652f\u6301\u3002", + "unable_to_pair": "\u65e0\u6cd5\u914d\u5bf9\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002", + "unknown_error": "\u8bbe\u5907\u62a5\u544a\u4e86\u672a\u77e5\u9519\u8bef\u3002\u914d\u5bf9\u5931\u8d25\u3002" + }, + "flow_title": "HomeKit \u914d\u4ef6: {name}", + "step": { + "pair": { + "data": { + "pairing_code": "\u914d\u5bf9\u4ee3\u7801" + }, + "description": "\u8f93\u5165\u60a8\u7684HomeKit\u914d\u5bf9\u4ee3\u7801\uff08\u683c\u5f0f\u4e3aXXX-XX-XXX\uff09\u4ee5\u4f7f\u7528\u6b64\u914d\u4ef6", + "title": "\u4e0e HomeKit \u914d\u4ef6\u914d\u5bf9" + }, + "user": { + "data": { + "device": "\u8bbe\u5907" + }, + "description": "\u9009\u62e9\u60a8\u8981\u914d\u5bf9\u7684\u8bbe\u5907", + "title": "\u4e0e HomeKit \u914d\u4ef6\u914d\u5bf9" + } + } + }, + "title": "HomeKit \u914d\u4ef6" +} \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/zh-Hant.json b/homeassistant/components/homekit_controller/translations/zh-Hant.json new file mode 100644 index 00000000000..27ff273d117 --- /dev/null +++ b/homeassistant/components/homekit_controller/translations/zh-Hant.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "accessory_not_found_error": "\u627e\u4e0d\u5230\u8a2d\u5099\uff0c\u7121\u6cd5\u65b0\u589e\u914d\u5c0d\u3002", + "already_configured": "\u914d\u4ef6\u5df2\u7d93\u7531\u6b64\u63a7\u5236\u5668\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "\u8a2d\u5099\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "already_paired": "\u914d\u4ef6\u5df2\u7d93\u8207\u5176\u4ed6\u8a2d\u5099\u914d\u5c0d\uff0c\u8acb\u91cd\u7f6e\u914d\u4ef6\u5f8c\u518d\u8a66\u4e00\u6b21\u3002", + "ignored_model": "\u7531\u65bc\u6b64\u578b\u865f\u53ef\u539f\u751f\u652f\u63f4\u66f4\u5b8c\u6574\u529f\u80fd\uff0c\u56e0\u6b64 Homekit \u652f\u63f4\u5df2\u88ab\u7981\u6b62\u3002", + "invalid_config_entry": "\u6b64\u8a2d\u5099\u986f\u793a\u7b49\u5f85\u9032\u884c\u914d\u5c0d\uff0c\u4f46 Home Assistant \u986f\u793a\u6709\u76f8\u885d\u7a81\u8a2d\u5b9a\u7269\u4ef6\u5fc5\u9808\u5148\u884c\u79fb\u9664\u3002", + "no_devices": "\u627e\u4e0d\u5230\u4efb\u4f55\u672a\u914d\u5c0d\u8a2d\u5099" + }, + "error": { + "authentication_error": "Homekit \u4ee3\u78bc\u932f\u8aa4\uff0c\u8acb\u78ba\u5b9a\u5f8c\u518d\u8a66\u4e00\u6b21\u3002", + "busy_error": "\u8a2d\u5099\u5df2\u7d93\u8207\u5176\u4ed6\u63a7\u5236\u5668\u914d\u5c0d\uff0c\u62d2\u7d55\u9032\u884c\u914d\u5c0d\u3002", + "max_peers_error": "\u8a2d\u5099\u5df2\u7121\u5269\u9918\u914d\u5c0d\u7a7a\u9593\uff0c\u62d2\u7d55\u9032\u884c\u914d\u5c0d\u3002", + "max_tries_error": "\u8a2d\u5099\u6536\u5230\u8d85\u904e 100 \u6b21\u672a\u6210\u529f\u8a8d\u8b49\u5f8c\uff0c\u62d2\u7d55\u9032\u884c\u914d\u5c0d\u3002", + "pairing_failed": "\u7576\u8a66\u5716\u8207\u8a2d\u5099\u914d\u5c0d\u6642\u767c\u751f\u7121\u6cd5\u8655\u7406\u932f\u8aa4\uff0c\u53ef\u80fd\u50c5\u70ba\u66ab\u6642\u5931\u6548\u3001\u6216\u8005\u8a2d\u5099\u76ee\u524d\u4e0d\u652f\u63f4\u3002", + "unable_to_pair": "\u7121\u6cd5\u914d\u5c0d\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "unknown_error": "\u8a2d\u5099\u56de\u5831\u672a\u77e5\u932f\u8aa4\u3002\u914d\u5c0d\u5931\u6557\u3002" + }, + "flow_title": "HomeKit \u914d\u4ef6\uff1a{name}", + "step": { + "pair": { + "data": { + "pairing_code": "\u8a2d\u5b9a\u4ee3\u78bc" + }, + "description": "\u8f38\u5165\u914d\u4ef6 Homekit \u8a2d\u5b9a\u4ee3\u78bc\uff08\u683c\u5f0f\uff1aXXX-XX-XXX\uff09\u4ee5\u4f7f\u7528\u6b64\u914d\u4ef6", + "title": "HomeKit \u914d\u4ef6\u914d\u5c0d" + }, + "user": { + "data": { + "device": "\u8a2d\u5099" + }, + "description": "\u9078\u64c7\u6240\u8981\u65b0\u589e\u7684\u8a2d\u5099", + "title": "HomeKit \u914d\u4ef6\u914d\u5c0d" + } + } + }, + "title": "HomeKit \u63a7\u5236\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/homematic/__init__.py b/homeassistant/components/homematic/__init__.py index 24c9e37a3be..4dfc27650c8 100644 --- a/homeassistant/components/homematic/__init__.py +++ b/homeassistant/components/homematic/__init__.py @@ -222,7 +222,7 @@ def setup(hass, config): "password": rconfig.get(CONF_PASSWORD), "callbackip": rconfig.get(CONF_CALLBACK_IP), "callbackport": rconfig.get(CONF_CALLBACK_PORT), - "ssl": rconfig.get(CONF_SSL), + "ssl": rconfig[CONF_SSL], "verify_ssl": rconfig.get(CONF_VERIFY_SSL), "connect": True, } diff --git a/homeassistant/components/homematic/manifest.json b/homeassistant/components/homematic/manifest.json index 20ea0d6acb1..31b26bbd511 100644 --- a/homeassistant/components/homematic/manifest.json +++ b/homeassistant/components/homematic/manifest.json @@ -2,7 +2,6 @@ "domain": "homematic", "name": "Homematic", "documentation": "https://www.home-assistant.io/integrations/homematic", - "requirements": ["pyhomematic==0.1.65"], - "dependencies": [], + "requirements": ["pyhomematic==0.1.66"], "codeowners": ["@pvizeli", "@danielperna84"] } diff --git a/homeassistant/components/homematic/sensor.py b/homeassistant/components/homematic/sensor.py index e8b97477546..7c4486065b4 100644 --- a/homeassistant/components/homematic/sensor.py +++ b/homeassistant/components/homematic/sensor.py @@ -2,14 +2,18 @@ import logging from homeassistant.const import ( + DEGREE, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_POWER, DEVICE_CLASS_TEMPERATURE, ENERGY_WATT_HOUR, + FREQUENCY_HERTZ, POWER_WATT, SPEED_KILOMETERS_PER_HOUR, + TEMP_CELSIUS, UNIT_PERCENTAGE, + VOLT, VOLUME_CUBIC_METERS, ) @@ -34,12 +38,12 @@ HM_STATE_HA_CAST = { HM_UNIT_HA_CAST = { "HUMIDITY": UNIT_PERCENTAGE, - "TEMPERATURE": "°C", - "ACTUAL_TEMPERATURE": "°C", + "TEMPERATURE": TEMP_CELSIUS, + "ACTUAL_TEMPERATURE": TEMP_CELSIUS, "BRIGHTNESS": "#", "POWER": POWER_WATT, "CURRENT": "mA", - "VOLTAGE": "V", + "VOLTAGE": VOLT, "ENERGY_COUNTER": ENERGY_WATT_HOUR, "GAS_POWER": VOLUME_CUBIC_METERS, "GAS_ENERGY_COUNTER": VOLUME_CUBIC_METERS, @@ -51,11 +55,11 @@ HM_UNIT_HA_CAST = { "HIGHEST_ILLUMINATION": "lx", "RAIN_COUNTER": "mm", "WIND_SPEED": SPEED_KILOMETERS_PER_HOUR, - "WIND_DIRECTION": "°", - "WIND_DIRECTION_RANGE": "°", + "WIND_DIRECTION": DEGREE, + "WIND_DIRECTION_RANGE": DEGREE, "SUNSHINEDURATION": "#", "AIR_PRESSURE": "hPa", - "FREQUENCY": "Hz", + "FREQUENCY": FREQUENCY_HERTZ, "VALUE": "#", } diff --git a/homeassistant/components/homematic/services.yaml b/homeassistant/components/homematic/services.yaml index 044bcfa46ad..d2a14101666 100644 --- a/homeassistant/components/homematic/services.yaml +++ b/homeassistant/components/homematic/services.yaml @@ -21,10 +21,10 @@ set_variable_value: fields: entity_id: description: Name(s) of homematic central to set value. - example: 'homematic.ccu2' + example: "homematic.ccu2" name: description: Name of the variable to set. - example: 'testvariable' + example: "testvariable" value: description: New value example: 1 @@ -75,11 +75,10 @@ put_paramset: example: wireless address: description: Address of Homematic device - example: LEQ3948571 + example: LEQ3948571:0 paramset_key: description: The paramset_key argument to putParamset example: MASTER paramset: description: A paramset dictionary example: '{"WEEK_PROGRAM_POINTER": 1}' - diff --git a/homeassistant/components/homematicip_cloud/.translations/bg.json b/homeassistant/components/homematicip_cloud/.translations/bg.json deleted file mode 100644 index d2b9a1b1761..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/bg.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0411\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0430", - "connection_aborted": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 HMIP \u0441\u044a\u0440\u0432\u044a\u0440", - "unknown": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430." - }, - "error": { - "invalid_pin": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u041f\u0418\u041d \u043a\u043e\u0434, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "press_the_button": "\u041c\u043e\u043b\u044f, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0441\u0438\u043d\u0438\u044f \u0431\u0443\u0442\u043e\u043d.", - "register_failed": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "timeout_button": "\u0421\u0438\u043d\u0438\u044f \u0431\u0443\u0442\u043e\u043d \u043d\u0435 \u0431\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e." - }, - "step": { - "init": { - "data": { - "hapid": "ID \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f (SGTIN)", - "name": "\u0418\u043c\u0435 (\u043d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0441\u0435 \u043a\u0430\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430 \u0438\u043c\u0435\u043d\u0430\u0442\u0430 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)", - "pin": "\u041f\u0418\u041d \u043a\u043e\u0434 (\u043d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e)" - }, - "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 HomematicIP \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" - }, - "link": { - "description": "\u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0441\u0438\u043d\u0438\u044f \u0431\u0443\u0442\u043e\u043d \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \"\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435\", \u0437\u0430 \u0434\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435 HomematicIP \u0441 Home Assistant. \n\n![\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0443\u0442\u043e\u043d\u0430 \u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" - } - }, - "title": "HomematicIP \u041e\u0431\u043b\u0430\u043a" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/ca.json b/homeassistant/components/homematicip_cloud/.translations/ca.json deleted file mode 100644 index f7c14970982..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/ca.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El punt d'acc\u00e9s ja est\u00e0 configurat", - "connection_aborted": "No s'ha pogut connectar al servidor HMIP", - "unknown": "S'ha produ\u00eft un error desconegut." - }, - "error": { - "invalid_pin": "Codi PIN inv\u00e0lid, torna-ho a provar.", - "press_the_button": "Si us plau, prem el bot\u00f3 blau.", - "register_failed": "Error al registrar, torna-ho a provar.", - "timeout_button": "El temps d'espera m\u00e0xim per pr\u00e9mer el bot\u00f3 blau s'ha esgotat, torna-ho a provar." - }, - "step": { - "init": { - "data": { - "hapid": "Identificador del punt d'acc\u00e9s (SGTIN)", - "name": "Nom (opcional, s'utilitza com a nom prefix per a tots els dispositius)", - "pin": "Codi PIN (opcional)" - }, - "title": "Tria el punt d'acc\u00e9s HomematicIP" - }, - "link": { - "description": "Prem el bot\u00f3 blau del punt d'acc\u00e9s i el bot\u00f3 Envia per registrar HomematicIP amb Home Assistent. \n\n![Ubicaci\u00f3 del bot\u00f3 al pont](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Enlla\u00e7 amb punt d'acc\u00e9s" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/cs.json b/homeassistant/components/homematicip_cloud/.translations/cs.json deleted file mode 100644 index fa98029f6b0..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/cs.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "P\u0159\u00edstupov\u00fd bod je ji\u017e nakonfigurov\u00e1n", - "connection_aborted": "Nelze se p\u0159ipojit k HMIP serveru", - "unknown": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b" - }, - "error": { - "invalid_pin": "Neplatn\u00fd k\u00f3d PIN, zkuste to znovu.", - "press_the_button": "Stiskn\u011bte modr\u00e9 tla\u010d\u00edtko.", - "register_failed": "Registrace se nezda\u0159ila, zkuste to znovu.", - "timeout_button": "\u010casov\u00fd limit stisknut\u00ed modr\u00e9ho tla\u010d\u00edtka vypr\u0161el. Zkuste to znovu." - }, - "step": { - "init": { - "data": { - "hapid": "ID p\u0159\u00edstupov\u00e9ho bodu (SGTIN)", - "name": "N\u00e1zev (nepovinn\u00e9, pou\u017e\u00edv\u00e1 se jako p\u0159edpona n\u00e1zvu pro v\u0161echna za\u0159\u00edzen\u00ed)", - "pin": "Pin k\u00f3d (nepovinn\u00e9)" - }, - "title": "Vyberte p\u0159\u00edstupov\u00fd bod HomematicIP" - }, - "link": { - "description": "Stiskn\u011bte modr\u00e9 tla\u010d\u00edtko na p\u0159\u00edstupov\u00e9m bodu a tla\u010d\u00edtko pro registraci HomematicIP s dom\u00e1c\u00edm asistentem. \n\n ! [Um\u00edst\u011bn\u00ed tla\u010d\u00edtka na za\u0159\u00edzen\u00ed] (/static/images/config_flows/config_homematicip_cloud.png)", - "title": "P\u0159ipojit se k p\u0159\u00edstupov\u00e9mu bodu" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/da.json b/homeassistant/components/homematicip_cloud/.translations/da.json deleted file mode 100644 index 4b8371fc748..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/da.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Access point er allerede konfigureret", - "connection_aborted": "Kunne ikke oprette forbindelse til HMIP-serveren", - "unknown": "Ukendt fejl opstod" - }, - "error": { - "invalid_pin": "Ugyldig PIN, pr\u00f8v igen.", - "press_the_button": "Tryk venligst p\u00e5 den bl\u00e5 knap.", - "register_failed": "Fejl ved registrering, pr\u00f8v venligst igen.", - "timeout_button": "Tryk p\u00e5 bl\u00e5 knap timeout, pr\u00f8v venligst igen." - }, - "step": { - "init": { - "data": { - "hapid": "Access point ID (SGTIN)", - "name": "Navn (valgfrit, bruges som pr\u00e6fiks til navnet for alle enheder)", - "pin": "Pin kode (valgfri)" - }, - "title": "V\u00e6lg HomematicIP Access point" - }, - "link": { - "description": "Tryk p\u00e5 den bl\u00e5 knap p\u00e5 adgangspunktet og send knappen for at registrere HomematicIP med Home Assistant.\n\n ![Placering af knap p\u00e5 bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Link adgangspunkt" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/de.json b/homeassistant/components/homematicip_cloud/.translations/de.json deleted file mode 100644 index c2a7579e4fc..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/de.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Der Accesspoint ist bereits konfiguriert", - "connection_aborted": "Konnte nicht mit HMIP Server verbinden", - "unknown": "Ein unbekannter Fehler ist aufgetreten." - }, - "error": { - "invalid_pin": "Ung\u00fcltige PIN, bitte versuche es erneut.", - "press_the_button": "Bitte dr\u00fccke die blaue Taste.", - "register_failed": "Registrierung fehlgeschlagen, bitte versuche es erneut.", - "timeout_button": "Zeit\u00fcberschreitung beim Dr\u00fccken der blauen Taste. Bitte versuche es erneut." - }, - "step": { - "init": { - "data": { - "hapid": "Accesspoint ID (SGTIN)", - "name": "Name (optional, wird als Pr\u00e4fix f\u00fcr alle Ger\u00e4te verwendet)", - "pin": "PIN Code (optional)" - }, - "title": "HomematicIP Accesspoint ausw\u00e4hlen" - }, - "link": { - "description": "Dr\u00fccke den blauen Taster auf dem Accesspoint, sowie den Senden Button um HomematicIP mit Home Assistant zu verbinden.\n\n![Position des Tasters auf dem AP](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Verkn\u00fcpfe den Accesspoint" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/en.json b/homeassistant/components/homematicip_cloud/.translations/en.json deleted file mode 100644 index 605bb0d250b..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/en.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Access point is already configured", - "connection_aborted": "Could not connect to HMIP server", - "unknown": "Unknown error occurred." - }, - "error": { - "invalid_pin": "Invalid PIN, please try again.", - "press_the_button": "Please press the blue button.", - "register_failed": "Failed to register, please try again.", - "timeout_button": "Blue button press timeout, please try again." - }, - "step": { - "init": { - "data": { - "hapid": "Access point ID (SGTIN)", - "name": "Name (optional, used as name prefix for all devices)", - "pin": "Pin Code (optional)" - }, - "title": "Pick HomematicIP Access point" - }, - "link": { - "description": "Press the blue button on the access point and the submit button to register HomematicIP with Home Assistant.\n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Link Access point" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/es-419.json b/homeassistant/components/homematicip_cloud/.translations/es-419.json deleted file mode 100644 index 0919e211617..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/es-419.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Accesspoint ya est\u00e1 configurado", - "connection_aborted": "No se pudo conectar al servidor HMIP", - "unknown": "Se produjo un error desconocido." - }, - "error": { - "invalid_pin": "PIN no v\u00e1lido, por favor intente de nuevo.", - "press_the_button": "Por favor, presione el bot\u00f3n azul.", - "register_failed": "No se pudo registrar, por favor intente de nuevo." - }, - "step": { - "init": { - "data": { - "hapid": "ID de punto de acceso (SGTIN)", - "name": "Nombre (opcional, usado como prefijo de nombre para todos los dispositivos)", - "pin": "C\u00f3digo PIN (opcional)" - }, - "title": "Elija el punto de acceso HomematicIP" - }, - "link": { - "description": "Presione el bot\u00f3n azul en el punto de acceso y el bot\u00f3n enviar para registrar HomematicIP con Home Assistant. \n\n ! [Ubicaci\u00f3n del bot\u00f3n en el puente] (/static/images/config_flows/config_homematicip_cloud.png)" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/es.json b/homeassistant/components/homematicip_cloud/.translations/es.json deleted file mode 100644 index 206bd05a345..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/es.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El punto de acceso ya est\u00e1 configurado", - "connection_aborted": "No se pudo conectar al servidor HMIP", - "unknown": "Se ha producido un error desconocido." - }, - "error": { - "invalid_pin": "PIN no v\u00e1lido, por favor int\u00e9ntalo de nuevo.", - "press_the_button": "Por favor, pulsa el bot\u00f3n azul", - "register_failed": "No se pudo registrar, por favor intentelo de nuevo.", - "timeout_button": "Tiempo de espera agotado desde que se apret\u00f3 el bot\u00f3n azul, por favor, int\u00e9ntalo de nuevo." - }, - "step": { - "init": { - "data": { - "hapid": "ID de punto de acceso (SGTIN)", - "name": "Nombre (opcional, utilizado como prefijo para todos los dispositivos)", - "pin": "C\u00f3digo PIN (opcional)" - }, - "title": "Elegir punto de acceso HomematicIP" - }, - "link": { - "description": "Pulsa el bot\u00f3n azul en el punto de acceso y el bot\u00f3n de env\u00edo para registrar HomematicIP en Home Assistant.\n\n![Ubicaci\u00f3n del bot\u00f3n en el puente](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Enlazar punto de acceso" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/et.json b/homeassistant/components/homematicip_cloud/.translations/et.json deleted file mode 100644 index 7aedd80b5d0..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/et.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "invalid_pin": "Vale PIN, palun proovige uuesti" - }, - "step": { - "init": { - "data": { - "hapid": "P\u00e4\u00e4supunkti ID (SGTIN)", - "pin": "PIN-kood (valikuline)" - } - } - }, - "title": "HomematicIP Pilv" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/fr.json b/homeassistant/components/homematicip_cloud/.translations/fr.json deleted file mode 100644 index 0e724d62bbe..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/fr.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le point d'acc\u00e8s est d\u00e9j\u00e0 configur\u00e9", - "connection_aborted": "Impossible de se connecter au serveur HMIP", - "unknown": "Une erreur inconnue s'est produite." - }, - "error": { - "invalid_pin": "Code PIN invalide, veuillez r\u00e9essayer.", - "press_the_button": "Veuillez appuyer sur le bouton bleu.", - "register_failed": "\u00c9chec d'enregistrement. Veuillez r\u00e9essayer.", - "timeout_button": "D\u00e9lai d'attente expir\u00e9, veuillez r\u00e9\u00e9ssayer." - }, - "step": { - "init": { - "data": { - "hapid": "ID du point d'acc\u00e8s (SGTIN)", - "name": "Nom (facultatif, utilis\u00e9 comme pr\u00e9fixe de nom pour tous les p\u00e9riph\u00e9riques)", - "pin": "Code PIN (facultatif)" - }, - "title": "Choisissez le point d'acc\u00e8s HomematicIP" - }, - "link": { - "description": "Appuyez sur le bouton bleu du point d'acc\u00e8s et sur le bouton Envoyer pour enregistrer HomematicIP avec Home Assistant. \n\n ![Emplacement du bouton sur le pont](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Lier le point d'acc\u00e8s" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/he.json b/homeassistant/components/homematicip_cloud/.translations/he.json deleted file mode 100644 index c60294e21d5..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/he.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u05e0\u05e7\u05d5\u05d3\u05ea \u05d4\u05d2\u05d9\u05e9\u05d4 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea", - "connection_aborted": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05e9\u05e8\u05ea HMIP", - "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." - }, - "error": { - "invalid_pin": "PIN \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", - "press_the_button": "\u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05d7\u05d5\u05dc.", - "register_failed": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", - "timeout_button": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05dc\u05d7\u05d9\u05e6\u05d4 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05d7\u05d5\u05dc, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1" - }, - "step": { - "init": { - "data": { - "hapid": "\u05de\u05d6\u05d4\u05d4 \u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4 (SGTIN)", - "name": "\u05e9\u05dd (\u05d0\u05d5\u05e4\u05e6\u05d9\u05d5\u05e0\u05dc\u05d9, \u05de\u05e9\u05de\u05e9 \u05db\u05e7\u05d9\u05d3\u05d5\u05de\u05ea \u05e2\u05d1\u05d5\u05e8 \u05db\u05dc \u05d4\u05de\u05db\u05e9\u05d9\u05e8\u05d9\u05dd)", - "pin": "\u05e7\u05d5\u05d3 PIN (\u05d0\u05d5\u05e4\u05e6\u05d9\u05d5\u05e0\u05dc\u05d9)" - }, - "title": "\u05d1\u05d7\u05e8 \u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4 HomematicIP" - }, - "link": { - "description": "\u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05d7\u05d5\u05dc \u05d1\u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4 \u05d5\u05e2\u05dc \u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05e9\u05dc\u05d9\u05d7\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d7\u05d1\u05e8 \u05d0\u05ea HomematicIP \u05e2\u05ddHome Assistant.\n\n![\u05de\u05d9\u05e7\u05d5\u05dd \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05de\u05d2\u05e9\u05e8](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "\u05d7\u05d1\u05e8 \u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4" - } - }, - "title": "\u05e2\u05e0\u05df HomematicIP" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/hu.json b/homeassistant/components/homematicip_cloud/.translations/hu.json deleted file mode 100644 index 61ff5ac5fe2..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/hu.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A hozz\u00e1f\u00e9r\u00e9si pontot m\u00e1r konfigur\u00e1ltuk", - "connection_aborted": "Nem siker\u00fclt csatlakozni a HMIP szerverhez", - "unknown": "Unknown error occurred." - }, - "error": { - "invalid_pin": "\u00c9rv\u00e9nytelen PIN, pr\u00f3b\u00e1lkozz \u00fajra.", - "press_the_button": "Nyomd meg a k\u00e9k gombot.", - "register_failed": "Regisztr\u00e1ci\u00f3 nem siker\u00fclt, pr\u00f3b\u00e1ld \u00fajra.", - "timeout_button": "K\u00e9k gomb megnyom\u00e1s\u00e1nak id\u0151t\u00fall\u00e9p\u00e9se, pr\u00f3b\u00e1lkozz \u00fajra." - }, - "step": { - "init": { - "data": { - "hapid": "Hozz\u00e1f\u00e9r\u00e9si pont azonos\u00edt\u00f3ja (SGTIN)", - "name": "N\u00e9v (opcion\u00e1lis, minden eszk\u00f6z n\u00e9vel\u0151tagjak\u00e9nt haszn\u00e1latos)", - "pin": "Pin k\u00f3d (opcion\u00e1lis)" - }, - "title": "V\u00e1lassz HomematicIP hozz\u00e1f\u00e9r\u00e9si pontot" - }, - "link": { - "title": "Link Hozz\u00e1f\u00e9r\u00e9si pont" - } - }, - "title": "HomematicIP Felh\u0151" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/id.json b/homeassistant/components/homematicip_cloud/.translations/id.json deleted file mode 100644 index 0487434274c..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/id.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Jalur akses sudah dikonfigurasi", - "connection_aborted": "Tidak dapat terhubung ke server HMIP", - "unknown": "Kesalahan tidak dikenal terjadi." - }, - "error": { - "invalid_pin": "PIN tidak valid, silakan coba lagi.", - "press_the_button": "Silakan tekan tombol biru.", - "register_failed": "Gagal mendaftar, silakan coba lagi.", - "timeout_button": "Batas waktu tekan tombol biru berakhir, silakan coba lagi." - }, - "step": { - "init": { - "data": { - "hapid": "Titik akses ID (SGTIN)", - "name": "Nama (opsional, digunakan sebagai awalan nama untuk semua perangkat)", - "pin": "Kode Pin (opsional)" - }, - "title": "Pilih HomematicIP Access point" - }, - "link": { - "description": "Tekan tombol biru pada access point dan tombol submit untuk mendaftarkan HomematicIP dengan rumah asisten.\n\n! [Lokasi tombol di bridge] (/ static/images/config_flows/config_homematicip_cloud.png)", - "title": "Tautkan jalur akses" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/it.json b/homeassistant/components/homematicip_cloud/.translations/it.json deleted file mode 100644 index c7f1af21f22..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/it.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il punto di accesso \u00e8 gi\u00e0 configurato", - "connection_aborted": "Impossibile connettersi al server HMIP", - "unknown": "Si \u00e8 verificato un errore sconosciuto." - }, - "error": { - "invalid_pin": "PIN non valido, riprova.", - "press_the_button": "Si prega di premere il pulsante blu.", - "register_failed": "Registrazione fallita, si prega di riprovare.", - "timeout_button": "Timeout della pressione del pulsante blu, riprovare." - }, - "step": { - "init": { - "data": { - "hapid": "ID del punto di accesso (SGTIN)", - "name": "Nome (opzionale, usato come prefisso del nome per tutti i dispositivi)", - "pin": "Codice Pin (opzionale)" - }, - "title": "Scegli punto di accesso HomematicIP" - }, - "link": { - "description": "Premi il pulsante blu sull'access point ed il pulsante di invio per registrare HomematicIP con Home Assistant. \n\n ![Posizione del pulsante sul bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Collegamento access point" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/ko.json b/homeassistant/components/homematicip_cloud/.translations/ko.json deleted file mode 100644 index 2f47fcddf28..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/ko.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "connection_aborted": "HMIP \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "invalid_pin": "PIN\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "press_the_button": "\ud30c\ub780\uc0c9 \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.", - "register_failed": "\ub4f1\ub85d\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "timeout_button": "\uc815\ud574\uc9c4 \uc2dc\uac04\ub0b4\uc5d0 \ud30c\ub780\uc0c9 \ubc84\ud2bc\uc744 \ub20c\ub974\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "step": { - "init": { - "data": { - "hapid": "\uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8 ID (SGTIN)", - "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d, \ubaa8\ub4e0 \uae30\uae30 \uc774\ub984\uc758 \uc811\ub450\uc5b4\ub85c \uc0ac\uc6a9)", - "pin": "PIN \ucf54\ub4dc (\uc120\ud0dd\uc0ac\ud56d)" - }, - "title": "HomematicIP \uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8 \uc120\ud0dd" - }, - "link": { - "description": "Home Assistant \uc5d0 HomematicIP \ub97c \ub4f1\ub85d\ud558\ub824\uba74 \uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8\uc758 \ud30c\ub780\uc0c9 \ubc84\ud2bc\uacfc Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.\n\n![\ube0c\ub9bf\uc9c0\uc758 \ubc84\ud2bc \uc704\uce58 \ubcf4\uae30](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "\uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8 \uc5f0\uacb0" - } - }, - "title": "HomematicIP \ud074\ub77c\uc6b0\ub4dc" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/lb.json b/homeassistant/components/homematicip_cloud/.translations/lb.json deleted file mode 100644 index f8ae990d364..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/lb.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Acesspoint ass schon konfigur\u00e9iert", - "connection_aborted": "Konnt sech net mam HMIP Server verbannen", - "unknown": "Onbekannten Feeler opgetrueden" - }, - "error": { - "invalid_pin": "Ong\u00ebltege Pin, prob\u00e9iert w.e.g. nach emol.", - "press_the_button": "Dr\u00e9ckt w.e.g. de bloe Kn\u00e4ppchen.", - "register_failed": "Feeler beim registr\u00e9ieren, prob\u00e9iert w.e.g. nach emol.", - "timeout_button": "Z\u00e4itiwwerschreidung beim dr\u00e9cken vum bloe Kn\u00e4ppchen, prob\u00e9iert w.e.g. nach emol." - }, - "step": { - "init": { - "data": { - "hapid": "ID vum Accesspoint (SGTIN)", - "name": "Numm (optional, g\u00ebtt als prefixe fir all Apparat benotzt)", - "pin": "Pin Code (Optional)" - }, - "title": "HomematicIP Accesspoint auswielen" - }, - "link": { - "description": "Dr\u00e9ckt de bloen Kn\u00e4ppchen um Accesspoint an den Submit Kn\u00e4ppchen fir d'HomematicIP mam Home Assistant ze registr\u00e9ieren.\n\n![Standuert vum Kn\u00e4ppchen op der Bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Accesspoint verbannen" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/nl.json b/homeassistant/components/homematicip_cloud/.translations/nl.json deleted file mode 100644 index ff3e2dea2cd..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/nl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Accesspoint is al geconfigureerd", - "connection_aborted": "Kon geen verbinding maken met de HMIP-server", - "unknown": "Er is een onbekende fout opgetreden." - }, - "error": { - "invalid_pin": "Ongeldige PIN-code, probeer het nogmaals.", - "press_the_button": "Druk op de blauwe knop.", - "register_failed": "Kan niet registreren, gelieve opnieuw te proberen.", - "timeout_button": "Blauwe knop druk op timeout, probeer het opnieuw." - }, - "step": { - "init": { - "data": { - "hapid": "Accesspoint ID (SGTIN)", - "name": "Naam (optioneel, gebruikt als naamprefix voor alle apparaten)", - "pin": "Pin-Code (optioneel)" - }, - "title": "Kies HomematicIP accesspoint" - }, - "link": { - "description": "Druk op de blauwe knop op het accesspoint en de verzendknop om HomematicIP bij Home Assistant te registreren. \n\n![Locatie van knop op bridge](/static/images/config_flows/\nconfig_homematicip_cloud.png)", - "title": "Link accesspoint" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/nn.json b/homeassistant/components/homematicip_cloud/.translations/nn.json deleted file mode 100644 index da375563d91..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/nn.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Tilgangspunktet er allereie konfigurert", - "connection_aborted": "Kunne ikkje kople til HMIP-serveren", - "unknown": "Det hende ein ukjent feil." - }, - "error": { - "invalid_pin": "Ugyldig PIN. Pr\u00f8v igjen.", - "press_the_button": "Ver vennleg og trykk p\u00e5 den bl\u00e5 knappen.", - "register_failed": "Kunne ikkje registrere. Pr\u00f8v igjen.", - "timeout_button": "TIda gjekk ut for \u00e5 trykke p\u00e5 den bl\u00e5 knappen. Ver vennleg og pr\u00f8v igjen." - }, - "step": { - "init": { - "data": { - "hapid": "TilgangspunktID (SGTIN)", - "name": "Namn (valfrii. Brukt som namnprefiks for alle einingar)", - "pin": "Pinkode (valfritt)" - }, - "title": "Vel HomematicIP tilgangspunkt" - }, - "link": { - "description": "Trykk p\u00e5 den bl\u00e5 knappen p\u00e5 tilgangspunktet og sendknappen for \u00e5 registrere HomematicIP med Home Assistant.\n\n ! [Plassering av knapp p\u00e5 bro] (/ static / images / config_flows / config_homematicip_cloud.png)", - "title": "Link tilgangspunk" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/no.json b/homeassistant/components/homematicip_cloud/.translations/no.json deleted file mode 100644 index 9a4dd424bee..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/no.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Tilgangspunktet er allerede konfigurert", - "connection_aborted": "Kunne ikke koble til HMIP serveren", - "unknown": "Ukjent feil oppstod." - }, - "error": { - "invalid_pin": "Ugyldig PIN kode, pr\u00f8v igjen.", - "press_the_button": "Vennligst trykk p\u00e5 den bl\u00e5 knappen.", - "register_failed": "Kunne ikke registrere, vennligst pr\u00f8v igjen.", - "timeout_button": "Bl\u00e5 knapp-trykk tok for lang tid, vennligst pr\u00f8v igjen." - }, - "step": { - "init": { - "data": { - "hapid": "Tilgangspunkt-ID (SGTIN)", - "name": "Navn (valgfritt, brukes som prefiks for alle enheter)", - "pin": "PIN kode (valgfritt)" - }, - "title": "Velg HomematicIP tilgangspunkt" - }, - "link": { - "description": "Trykk p\u00e5 den bl\u00e5 knappen p\u00e5 tilgangspunktet og p\u00e5 send knappen for \u00e5 registrere HomematicIP med Home Assistant. \n\n![Plassering av knapp p\u00e5 bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Link tilgangspunkt" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/pl.json b/homeassistant/components/homematicip_cloud/.translations/pl.json deleted file mode 100644 index 78905da208e..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/pl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Punkt dost\u0119pu jest ju\u017c skonfigurowany.", - "connection_aborted": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z serwerem HMIP", - "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d" - }, - "error": { - "invalid_pin": "Nieprawid\u0142owy kod PIN, spr\u00f3buj ponownie.", - "press_the_button": "Prosz\u0119 nacisn\u0105\u0107 niebieski przycisk.", - "register_failed": "Nie uda\u0142o si\u0119 zarejestrowa\u0107, spr\u00f3buj ponownie.", - "timeout_button": "Oczekiwania na naci\u015bni\u0119cie niebieskiego przycisku zako\u0144czone, spr\u00f3buj ponownie." - }, - "step": { - "init": { - "data": { - "hapid": "ID punktu dost\u0119pu (SGTIN)", - "name": "Nazwa (opcjonalnie, u\u017cywana jako prefiks nazwy dla wszystkich urz\u0105dze\u0144)", - "pin": "Kod PIN (opcjonalnie)" - }, - "title": "Wybierz punkt dost\u0119pu HomematicIP" - }, - "link": { - "description": "Naci\u015bnij niebieski przycisk na punkcie dost\u0119pu i przycisk przesy\u0142ania, aby zarejestrowa\u0107 HomematicIP w Home Assistant. \n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Po\u0142\u0105cz z punktem dost\u0119pu" - } - }, - "title": "Chmura HomematicIP" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/pt-BR.json b/homeassistant/components/homematicip_cloud/.translations/pt-BR.json deleted file mode 100644 index 82166a1aaaf..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/pt-BR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O Accesspoint j\u00e1 est\u00e1 configurado", - "connection_aborted": "N\u00e3o foi poss\u00edvel conectar ao servidor HMIP", - "unknown": "Ocorreu um erro desconhecido." - }, - "error": { - "invalid_pin": "PIN inv\u00e1lido, por favor tente novamente.", - "press_the_button": "Por favor, pressione o bot\u00e3o azul.", - "register_failed": "Falha ao registrar, por favor tente novamente.", - "timeout_button": "Tempo para pressionar o Bot\u00e3o Azul expirou, por favor tente novamente." - }, - "step": { - "init": { - "data": { - "hapid": "ID do AccessPoint (SGTIN)", - "name": "Nome (opcional, usado como prefixo de nome para todos os dispositivos)", - "pin": "C\u00f3digo PIN (opcional)" - }, - "title": "Escolha um HomematicIP Accesspoint" - }, - "link": { - "description": "Pressione o bot\u00e3o azul no ponto de acesso e o bot\u00e3o enviar para registrar o HomematicIP com o Home Assistant.\n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Accesspoint link" - } - }, - "title": "Nuvem do HomematicIP" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/pt.json b/homeassistant/components/homematicip_cloud/.translations/pt.json deleted file mode 100644 index 0954f3ff4f9..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/pt.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O ponto de acesso j\u00e1 se encontra configurado", - "connection_aborted": "N\u00e3o foi poss\u00edvel ligar ao servidor HMIP", - "unknown": "Ocorreu um erro desconhecido." - }, - "error": { - "invalid_pin": "PIN inv\u00e1lido. Por favor, tente novamente.", - "press_the_button": "Por favor, pressione o bot\u00e3o azul.", - "register_failed": "Falha ao registar. Por favor, tente novamente.", - "timeout_button": "Tempo limite ultrapassado para carregar bot\u00e3o azul, por favor, tente de novo." - }, - "step": { - "init": { - "data": { - "hapid": "ID do ponto de acesso (SGTIN)", - "name": "Nome (opcional, usado como prefixo de nome para todos os dispositivos)", - "pin": "C\u00f3digo PIN (opcional)" - }, - "title": "Escolher ponto de acesso HomematicIP" - }, - "link": { - "description": "Pressione o bot\u00e3o azul no ponto de acesso e o bot\u00e3o enviar para registrar HomematicIP com o Home Assistant.\n\n![Localiza\u00e7\u00e3o do bot\u00e3o na bridge](/ static/images/config_flows/config_homematicip_cloud.png)", - "title": "Associar ponto de acesso" - } - }, - "title": "Nuvem do HomematicIP" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/ru.json b/homeassistant/components/homematicip_cloud/.translations/ru.json deleted file mode 100644 index 1ba33b0e6ee..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/ru.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "connection_aborted": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 HMIP.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "error": { - "invalid_pin": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 PIN-\u043a\u043e\u0434, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", - "press_the_button": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u0438\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443.", - "register_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", - "timeout_button": "\u0412\u044b \u043d\u0435 \u043d\u0430\u0436\u0430\u043b\u0438 \u0441\u0438\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430." - }, - "step": { - "init": { - "data": { - "hapid": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (SGTIN)", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432)", - "pin": "PIN-\u043a\u043e\u0434 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)" - }, - "title": "HomematicIP Cloud" - }, - "link": { - "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u0438\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u0442\u043e\u0447\u043a\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u043a\u043d\u043e\u043f\u043a\u0443 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c HomematicIP \u0432 Home Assistant. \n\n ![\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/sl.json b/homeassistant/components/homematicip_cloud/.translations/sl.json deleted file mode 100644 index cdde0f12d78..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/sl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dostopna to\u010dka je \u017ee nastavljena", - "connection_aborted": "Povezava s stre\u017enikom HMIP ni bila mogo\u010da", - "unknown": "Pri\u0161lo je do neznane napake" - }, - "error": { - "invalid_pin": "Neveljavna koda PIN, poskusite znova.", - "press_the_button": "Prosimo, pritisnite modri gumb.", - "register_failed": "Registracija ni uspela, poskusite znova", - "timeout_button": "Potekla je \u010dasovna omejitev za pritisk modrega gumba, poskusite znova." - }, - "step": { - "init": { - "data": { - "hapid": "ID dostopne to\u010dke (SGTIN)", - "name": "Ime (neobvezno, ki se uporablja kot predpona za vse naprave)", - "pin": "Koda PIN (neobvezno)" - }, - "title": "Izberite dostopno to\u010dko HomematicIP" - }, - "link": { - "description": "Pritisnite modro tipko na dostopni to\u010dko in gumb po\u0161lji, da registrirate homematicIP s Home Assistantom. \n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "Pove\u017eite dostopno to\u010dko" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/sv.json b/homeassistant/components/homematicip_cloud/.translations/sv.json deleted file mode 100644 index f155e8fd1c1..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/sv.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Accesspunkten \u00e4r redan konfigurerad", - "connection_aborted": "Det gick inte att ansluta till HMIP-servern", - "unknown": "Ett ok\u00e4nt fel har intr\u00e4ffat" - }, - "error": { - "invalid_pin": "Ogiltig PIN-kod, f\u00f6rs\u00f6k igen.", - "press_the_button": "V\u00e4nligen tryck p\u00e5 den bl\u00e5 knappen.", - "register_failed": "Misslyckades med att registrera, f\u00f6rs\u00f6k igen.", - "timeout_button": "Bl\u00e5 knapptryckning timeout, f\u00f6rs\u00f6k igen." - }, - "step": { - "init": { - "data": { - "hapid": "Accesspunkt-ID (SGTIN)", - "name": "Namn (frivilligt, anv\u00e4nds som namnprefix f\u00f6r alla enheter)", - "pin": "Pin-kod (frivilligt)" - }, - "title": "V\u00e4lj HomematicIP Accesspunkt" - }, - "link": { - "description": "Tryck p\u00e5 den bl\u00e5 knappen p\u00e5 accesspunkten och p\u00e5 skicka-knappen f\u00f6r att registrera HomematicIP med Home Assistant. \n\n ![Placering av knappen p\u00e5 bryggan](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "L\u00e4nka Accesspunkt" - } - }, - "title": "HomematicIP Moln" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/zh-Hans.json b/homeassistant/components/homematicip_cloud/.translations/zh-Hans.json deleted file mode 100644 index 4c2b6268eec..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/zh-Hans.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u63a5\u5165\u70b9\u5df2\u914d\u7f6e", - "connection_aborted": "\u65e0\u6cd5\u8fde\u63a5\u5230 HMIP \u670d\u52a1\u5668", - "unknown": "\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002" - }, - "error": { - "invalid_pin": "PIN \u65e0\u6548\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002", - "press_the_button": "\u8bf7\u6309\u4e0b\u84dd\u8272\u6309\u94ae\u3002", - "register_failed": "\u6ce8\u518c\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5", - "timeout_button": "\u6309\u4e0b\u84dd\u8272\u6309\u94ae\u8d85\u65f6\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002" - }, - "step": { - "init": { - "data": { - "hapid": "\u63a5\u5165\u70b9 ID (SGTIN)", - "name": "\u540d\u79f0\uff08\u53ef\u9009\uff0c\u7528\u4f5c\u6240\u6709\u8bbe\u5907\u7684\u540d\u79f0\u524d\u7f00\uff09", - "pin": "PIN \u7801\uff08\u53ef\u9009\uff09" - }, - "title": "\u9009\u62e9 HomematicIP \u63a5\u5165\u70b9" - }, - "link": { - "description": "\u6309\u4e0b\u63a5\u5165\u70b9\u4e0a\u7684\u84dd\u8272\u6309\u94ae\u7136\u540e\u70b9\u51fb\u63d0\u4ea4\u6309\u94ae\uff0c\u4ee5\u5c06 HomematicIP \u6ce8\u518c\u5230 Home Assistant\u3002\n\n![\u63a5\u5165\u70b9\u7684\u6309\u94ae\u4f4d\u7f6e]\n(/static/images/config_flows/config_homematicip_cloud.png)", - "title": "\u8fde\u63a5\u63a5\u5165\u70b9" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/zh-Hant.json b/homeassistant/components/homematicip_cloud/.translations/zh-Hant.json deleted file mode 100644 index c6a960f1a68..00000000000 --- a/homeassistant/components/homematicip_cloud/.translations/zh-Hant.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Access point \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "connection_aborted": "\u7121\u6cd5\u9023\u7dda\u81f3 HMIP \u4f3a\u670d\u5668", - "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "error": { - "invalid_pin": "PIN \u78bc\u7121\u6548\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "press_the_button": "\u8acb\u6309\u4e0b\u85cd\u8272\u6309\u9215\u3002", - "register_failed": "\u8a3b\u518a\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "timeout_button": "\u85cd\u8272\u6309\u9215\u903e\u6642\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" - }, - "step": { - "init": { - "data": { - "hapid": "Access point ID (SGTIN)", - "name": "\u540d\u7a31\uff08\u9078\u9805\uff0c\u7528\u4ee5\u4f5c\u70ba\u6240\u6709\u8a2d\u5099\u7684\u5b57\u9996\u7528\uff09", - "pin": "PIN \u78bc\uff08\u9078\u9805\uff09" - }, - "title": "\u9078\u64c7 HomematicIP Access point" - }, - "link": { - "description": "\u6309\u4e0b AP \u4e0a\u7684\u85cd\u8272\u6309\u9215\u8207\u50b3\u9001\u6309\u9215\uff0c\u4ee5\u65bc Home Assistant \u4e0a\u9032\u884c HomematicIP \u8a3b\u518a\u3002\n\n![\u6a4b\u63a5\u5668\u4e0a\u7684\u6309\u9215\u4f4d\u7f6e](/static/images/config_flows/config_homematicip_cloud.png)", - "title": "\u9023\u7d50 Access point" - } - }, - "title": "HomematicIP Cloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/__init__.py b/homeassistant/components/homematicip_cloud/__init__.py index d1982e289a3..df1f5062fce 100644 --- a/homeassistant/components/homematicip_cloud/__init__.py +++ b/homeassistant/components/homematicip_cloud/__init__.py @@ -50,10 +50,10 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType) -> bool: accesspoints = config.get(DOMAIN, []) for conf in accesspoints: - if conf[CONF_ACCESSPOINT] not in set( + if conf[CONF_ACCESSPOINT] not in { entry.data[HMIPC_HAPID] for entry in hass.config_entries.async_entries(DOMAIN) - ): + }: hass.async_add_job( hass.config_entries.flow.async_init( DOMAIN, diff --git a/homeassistant/components/homematicip_cloud/alarm_control_panel.py b/homeassistant/components/homematicip_cloud/alarm_control_panel.py index f5316350091..fd3958344f5 100644 --- a/homeassistant/components/homematicip_cloud/alarm_control_panel.py +++ b/homeassistant/components/homematicip_cloud/alarm_control_panel.py @@ -102,7 +102,7 @@ class HomematicipAlarmControlPanel(AlarmControlPanel): # Don't update disabled entities if self.enabled: _LOGGER.debug("Event %s (%s)", self.name, CONST_ALARM_CONTROL_PANEL_NAME) - self.async_schedule_update_ha_state() + self.async_write_ha_state() else: _LOGGER.debug( "Device Changed Event for %s (Alarm Control Panel) not fired. Entity is disabled.", diff --git a/homeassistant/components/homematicip_cloud/binary_sensor.py b/homeassistant/components/homematicip_cloud/binary_sensor.py index 52a4583be46..00147e1b7ec 100644 --- a/homeassistant/components/homematicip_cloud/binary_sensor.py +++ b/homeassistant/components/homematicip_cloud/binary_sensor.py @@ -50,6 +50,7 @@ ATTR_ACCELERATION_SENSOR_MODE = "acceleration_sensor_mode" ATTR_ACCELERATION_SENSOR_NEUTRAL_POSITION = "acceleration_sensor_neutral_position" ATTR_ACCELERATION_SENSOR_SENSITIVITY = "acceleration_sensor_sensitivity" ATTR_ACCELERATION_SENSOR_TRIGGER_ANGLE = "acceleration_sensor_trigger_angle" +ATTR_INTRUSION_ALARM = "intrusion_alarm" ATTR_MOISTURE_DETECTED = "moisture_detected" ATTR_MOTION_DETECTED = "motion_detected" ATTR_POWER_MAINS_FAILURE = "power_mains_failure" @@ -229,7 +230,8 @@ class HomematicipSmokeDetector(HomematicipGenericDevice, BinarySensorDevice): """Return true if smoke is detected.""" if self._device.smokeDetectorAlarmType: return ( - self._device.smokeDetectorAlarmType != SmokeDetectorAlarmType.IDLE_OFF + self._device.smokeDetectorAlarmType + == SmokeDetectorAlarmType.PRIMARY_ALARM ) return False @@ -421,9 +423,11 @@ class HomematicipSecuritySensorGroup( state_attr = super().device_state_attributes smoke_detector_at = getattr(self._device, "smokeDetectorAlarmType", None) - if smoke_detector_at and smoke_detector_at != SmokeDetectorAlarmType.IDLE_OFF: - state_attr[ATTR_SMOKE_DETECTOR_ALARM] = str(smoke_detector_at) - + if smoke_detector_at: + if smoke_detector_at == SmokeDetectorAlarmType.PRIMARY_ALARM: + state_attr[ATTR_SMOKE_DETECTOR_ALARM] = str(smoke_detector_at) + if smoke_detector_at == SmokeDetectorAlarmType.INTRUSION_ALARM: + state_attr[ATTR_INTRUSION_ALARM] = str(smoke_detector_at) return state_attr @property diff --git a/homeassistant/components/homematicip_cloud/device.py b/homeassistant/components/homematicip_cloud/device.py index 0407a1a0fe2..c2b67758152 100644 --- a/homeassistant/components/homematicip_cloud/device.py +++ b/homeassistant/components/homematicip_cloud/device.py @@ -108,7 +108,7 @@ class HomematicipGenericDevice(Entity): # Don't update disabled entities if self.enabled: _LOGGER.debug("Event %s (%s)", self.name, self._device.modelType) - self.async_schedule_update_ha_state() + self.async_write_ha_state() else: _LOGGER.debug( "Device Changed Event for %s (%s) not fired. Entity is disabled.", diff --git a/homeassistant/components/homematicip_cloud/manifest.json b/homeassistant/components/homematicip_cloud/manifest.json index 9ecdb0ad80d..ef362300c66 100644 --- a/homeassistant/components/homematicip_cloud/manifest.json +++ b/homeassistant/components/homematicip_cloud/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/homematicip_cloud", "requirements": ["homematicip==0.10.17"], - "dependencies": [], "codeowners": ["@SukramJ"], "quality_scale": "platinum" } diff --git a/homeassistant/components/homematicip_cloud/services.yaml b/homeassistant/components/homematicip_cloud/services.yaml index 750528eddf8..20447e496f7 100644 --- a/homeassistant/components/homematicip_cloud/services.yaml +++ b/homeassistant/components/homematicip_cloud/services.yaml @@ -62,13 +62,13 @@ dump_hap_config: fields: config_output_path: description: (Default is 'Your home-assistant config directory') Path where to store the config. - example: '/config' + example: "/config" config_output_file_prefix: description: (Default is 'hmip-config') Name of the config file. The SGTIN of the AP will always be appended. - example: 'hmip-config' + example: "hmip-config" anonymize: description: (Default is True) Should the Configuration be anonymized? - example: True + example: true reset_energy_counter: description: Reset the energy counter of a measuring entity. diff --git a/homeassistant/components/homematicip_cloud/strings.json b/homeassistant/components/homematicip_cloud/strings.json index f2d38a1dc7b..2b2a75ebc08 100644 --- a/homeassistant/components/homematicip_cloud/strings.json +++ b/homeassistant/components/homematicip_cloud/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "HomematicIP Cloud", "step": { "init": { "title": "Pick HomematicIP Access point", diff --git a/homeassistant/components/homematicip_cloud/translations/bg.json b/homeassistant/components/homematicip_cloud/translations/bg.json new file mode 100644 index 00000000000..dd04e1e8250 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/bg.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u0411\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0430", + "connection_aborted": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 HMIP \u0441\u044a\u0440\u0432\u044a\u0440", + "unknown": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430." + }, + "error": { + "invalid_pin": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u041f\u0418\u041d \u043a\u043e\u0434, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "press_the_button": "\u041c\u043e\u043b\u044f, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0441\u0438\u043d\u0438\u044f \u0431\u0443\u0442\u043e\u043d.", + "register_failed": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "timeout_button": "\u0421\u0438\u043d\u0438\u044f \u0431\u0443\u0442\u043e\u043d \u043d\u0435 \u0431\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e." + }, + "step": { + "init": { + "data": { + "hapid": "ID \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f (SGTIN)", + "name": "\u0418\u043c\u0435 (\u043d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0441\u0435 \u043a\u0430\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430 \u0438\u043c\u0435\u043d\u0430\u0442\u0430 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)", + "pin": "\u041f\u0418\u041d \u043a\u043e\u0434 (\u043d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e)" + }, + "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 HomematicIP \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" + }, + "link": { + "description": "\u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0441\u0438\u043d\u0438\u044f \u0431\u0443\u0442\u043e\u043d \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \"\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435\", \u0437\u0430 \u0434\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435 HomematicIP \u0441 Home Assistant. \n\n![\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0443\u0442\u043e\u043d\u0430 \u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/ca.json b/homeassistant/components/homematicip_cloud/translations/ca.json new file mode 100644 index 00000000000..4cb5e8d092d --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/ca.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "El punt d'acc\u00e9s ja est\u00e0 configurat", + "connection_aborted": "No s'ha pogut connectar al servidor HMIP", + "unknown": "S'ha produ\u00eft un error desconegut." + }, + "error": { + "invalid_pin": "Codi PIN inv\u00e0lid, torna-ho a provar.", + "press_the_button": "Si us plau, prem el bot\u00f3 blau.", + "register_failed": "Error al registrar, torna-ho a provar.", + "timeout_button": "El temps d'espera m\u00e0xim per pr\u00e9mer el bot\u00f3 blau s'ha esgotat, torna-ho a provar." + }, + "step": { + "init": { + "data": { + "hapid": "Identificador del punt d'acc\u00e9s (SGTIN)", + "name": "Nom (opcional, s'utilitza com a nom prefix per a tots els dispositius)", + "pin": "Codi PIN (opcional)" + }, + "title": "Tria el punt d'acc\u00e9s HomematicIP" + }, + "link": { + "description": "Prem el bot\u00f3 blau del punt d'acc\u00e9s i el bot\u00f3 Envia per registrar HomematicIP amb Home Assistent. \n\n![Ubicaci\u00f3 del bot\u00f3 al pont](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Enlla\u00e7 amb punt d'acc\u00e9s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/cs.json b/homeassistant/components/homematicip_cloud/translations/cs.json new file mode 100644 index 00000000000..efb73dd6e7f --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/cs.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "P\u0159\u00edstupov\u00fd bod je ji\u017e nakonfigurov\u00e1n", + "connection_aborted": "Nelze se p\u0159ipojit k HMIP serveru", + "unknown": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b" + }, + "error": { + "invalid_pin": "Neplatn\u00fd k\u00f3d PIN, zkuste to znovu.", + "press_the_button": "Stiskn\u011bte modr\u00e9 tla\u010d\u00edtko.", + "register_failed": "Registrace se nezda\u0159ila, zkuste to znovu.", + "timeout_button": "\u010casov\u00fd limit stisknut\u00ed modr\u00e9ho tla\u010d\u00edtka vypr\u0161el. Zkuste to znovu." + }, + "step": { + "init": { + "data": { + "hapid": "ID p\u0159\u00edstupov\u00e9ho bodu (SGTIN)", + "name": "N\u00e1zev (nepovinn\u00e9, pou\u017e\u00edv\u00e1 se jako p\u0159edpona n\u00e1zvu pro v\u0161echna za\u0159\u00edzen\u00ed)", + "pin": "Pin k\u00f3d (nepovinn\u00e9)" + }, + "title": "Vyberte p\u0159\u00edstupov\u00fd bod HomematicIP" + }, + "link": { + "description": "Stiskn\u011bte modr\u00e9 tla\u010d\u00edtko na p\u0159\u00edstupov\u00e9m bodu a tla\u010d\u00edtko pro registraci HomematicIP s dom\u00e1c\u00edm asistentem. \n\n ! [Um\u00edst\u011bn\u00ed tla\u010d\u00edtka na za\u0159\u00edzen\u00ed] (/static/images/config_flows/config_homematicip_cloud.png)", + "title": "P\u0159ipojit se k p\u0159\u00edstupov\u00e9mu bodu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/da.json b/homeassistant/components/homematicip_cloud/translations/da.json new file mode 100644 index 00000000000..a520aef37d7 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/da.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Access point er allerede konfigureret", + "connection_aborted": "Kunne ikke oprette forbindelse til HMIP-serveren", + "unknown": "Ukendt fejl opstod" + }, + "error": { + "invalid_pin": "Ugyldig PIN, pr\u00f8v igen.", + "press_the_button": "Tryk venligst p\u00e5 den bl\u00e5 knap.", + "register_failed": "Fejl ved registrering, pr\u00f8v venligst igen.", + "timeout_button": "Tryk p\u00e5 bl\u00e5 knap timeout, pr\u00f8v venligst igen." + }, + "step": { + "init": { + "data": { + "hapid": "Access point ID (SGTIN)", + "name": "Navn (valgfrit, bruges som pr\u00e6fiks til navnet for alle enheder)", + "pin": "Pin kode (valgfri)" + }, + "title": "V\u00e6lg HomematicIP Access point" + }, + "link": { + "description": "Tryk p\u00e5 den bl\u00e5 knap p\u00e5 adgangspunktet og send knappen for at registrere HomematicIP med Home Assistant.\n\n ![Placering af knap p\u00e5 bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Link adgangspunkt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/de.json b/homeassistant/components/homematicip_cloud/translations/de.json new file mode 100644 index 00000000000..f3ec84fe3af --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/de.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Der Accesspoint ist bereits konfiguriert", + "connection_aborted": "Konnte nicht mit HMIP Server verbinden", + "unknown": "Ein unbekannter Fehler ist aufgetreten." + }, + "error": { + "invalid_pin": "Ung\u00fcltige PIN, bitte versuche es erneut.", + "press_the_button": "Bitte dr\u00fccke die blaue Taste.", + "register_failed": "Registrierung fehlgeschlagen, bitte versuche es erneut.", + "timeout_button": "Zeit\u00fcberschreitung beim Dr\u00fccken der blauen Taste. Bitte versuche es erneut." + }, + "step": { + "init": { + "data": { + "hapid": "Accesspoint ID (SGTIN)", + "name": "Name (optional, wird als Pr\u00e4fix f\u00fcr alle Ger\u00e4te verwendet)", + "pin": "PIN Code (optional)" + }, + "title": "HomematicIP Accesspoint ausw\u00e4hlen" + }, + "link": { + "description": "Dr\u00fccke den blauen Taster auf dem Accesspoint, sowie den Senden Button um HomematicIP mit Home Assistant zu verbinden.\n\n![Position des Tasters auf dem AP](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Verkn\u00fcpfe den Accesspoint" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/en.json b/homeassistant/components/homematicip_cloud/translations/en.json new file mode 100644 index 00000000000..26ca6eb60d6 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/en.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Access point is already configured", + "connection_aborted": "Could not connect to HMIP server", + "unknown": "Unknown error occurred." + }, + "error": { + "invalid_pin": "Invalid PIN, please try again.", + "press_the_button": "Please press the blue button.", + "register_failed": "Failed to register, please try again.", + "timeout_button": "Blue button press timeout, please try again." + }, + "step": { + "init": { + "data": { + "hapid": "Access point ID (SGTIN)", + "name": "Name (optional, used as name prefix for all devices)", + "pin": "Pin Code (optional)" + }, + "title": "Pick HomematicIP Access point" + }, + "link": { + "description": "Press the blue button on the access point and the submit button to register HomematicIP with Home Assistant.\n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Link Access point" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/es-419.json b/homeassistant/components/homematicip_cloud/translations/es-419.json new file mode 100644 index 00000000000..a853d7677c8 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/es-419.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "already_configured": "Accesspoint ya est\u00e1 configurado", + "connection_aborted": "No se pudo conectar al servidor HMIP", + "unknown": "Se produjo un error desconocido." + }, + "error": { + "invalid_pin": "PIN no v\u00e1lido, por favor intente de nuevo.", + "press_the_button": "Por favor, presione el bot\u00f3n azul.", + "register_failed": "No se pudo registrar, por favor intente de nuevo." + }, + "step": { + "init": { + "data": { + "hapid": "ID de punto de acceso (SGTIN)", + "name": "Nombre (opcional, usado como prefijo de nombre para todos los dispositivos)", + "pin": "C\u00f3digo PIN (opcional)" + }, + "title": "Elija el punto de acceso HomematicIP" + }, + "link": { + "description": "Presione el bot\u00f3n azul en el punto de acceso y el bot\u00f3n enviar para registrar HomematicIP con Home Assistant. \n\n ! [Ubicaci\u00f3n del bot\u00f3n en el puente] (/static/images/config_flows/config_homematicip_cloud.png)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/es.json b/homeassistant/components/homematicip_cloud/translations/es.json new file mode 100644 index 00000000000..a017a5a1df7 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/es.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "El punto de acceso ya est\u00e1 configurado", + "connection_aborted": "No se pudo conectar al servidor HMIP", + "unknown": "Se ha producido un error desconocido." + }, + "error": { + "invalid_pin": "PIN no v\u00e1lido, por favor int\u00e9ntalo de nuevo.", + "press_the_button": "Por favor, pulsa el bot\u00f3n azul", + "register_failed": "No se pudo registrar, por favor intentelo de nuevo.", + "timeout_button": "Tiempo de espera agotado desde que se apret\u00f3 el bot\u00f3n azul, por favor, int\u00e9ntalo de nuevo." + }, + "step": { + "init": { + "data": { + "hapid": "ID de punto de acceso (SGTIN)", + "name": "Nombre (opcional, utilizado como prefijo para todos los dispositivos)", + "pin": "C\u00f3digo PIN (opcional)" + }, + "title": "Elegir punto de acceso HomematicIP" + }, + "link": { + "description": "Pulsa el bot\u00f3n azul en el punto de acceso y el bot\u00f3n de env\u00edo para registrar HomematicIP en Home Assistant.\n\n![Ubicaci\u00f3n del bot\u00f3n en el puente](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Enlazar punto de acceso" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/et.json b/homeassistant/components/homematicip_cloud/translations/et.json new file mode 100644 index 00000000000..08bd179b4f9 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/et.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "invalid_pin": "Vale PIN, palun proovige uuesti" + }, + "step": { + "init": { + "data": { + "hapid": "P\u00e4\u00e4supunkti ID (SGTIN)", + "pin": "PIN-kood (valikuline)" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/fr.json b/homeassistant/components/homematicip_cloud/translations/fr.json new file mode 100644 index 00000000000..212a6d27796 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/fr.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Le point d'acc\u00e8s est d\u00e9j\u00e0 configur\u00e9", + "connection_aborted": "Impossible de se connecter au serveur HMIP", + "unknown": "Une erreur inconnue s'est produite." + }, + "error": { + "invalid_pin": "Code PIN invalide, veuillez r\u00e9essayer.", + "press_the_button": "Veuillez appuyer sur le bouton bleu.", + "register_failed": "\u00c9chec d'enregistrement. Veuillez r\u00e9essayer.", + "timeout_button": "D\u00e9lai d'attente expir\u00e9, veuillez r\u00e9\u00e9ssayer." + }, + "step": { + "init": { + "data": { + "hapid": "ID du point d'acc\u00e8s (SGTIN)", + "name": "Nom (facultatif, utilis\u00e9 comme pr\u00e9fixe de nom pour tous les p\u00e9riph\u00e9riques)", + "pin": "Code PIN (facultatif)" + }, + "title": "Choisissez le point d'acc\u00e8s HomematicIP" + }, + "link": { + "description": "Appuyez sur le bouton bleu du point d'acc\u00e8s et sur le bouton Envoyer pour enregistrer HomematicIP avec Home Assistant. \n\n ![Emplacement du bouton sur le pont](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Lier le point d'acc\u00e8s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/he.json b/homeassistant/components/homematicip_cloud/translations/he.json new file mode 100644 index 00000000000..9e650e132fe --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/he.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u05e0\u05e7\u05d5\u05d3\u05ea \u05d4\u05d2\u05d9\u05e9\u05d4 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea", + "connection_aborted": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05e9\u05e8\u05ea HMIP", + "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." + }, + "error": { + "invalid_pin": "PIN \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", + "press_the_button": "\u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05d7\u05d5\u05dc.", + "register_failed": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", + "timeout_button": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05dc\u05d7\u05d9\u05e6\u05d4 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05d7\u05d5\u05dc, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1" + }, + "step": { + "init": { + "data": { + "hapid": "\u05de\u05d6\u05d4\u05d4 \u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4 (SGTIN)", + "name": "\u05e9\u05dd (\u05d0\u05d5\u05e4\u05e6\u05d9\u05d5\u05e0\u05dc\u05d9, \u05de\u05e9\u05de\u05e9 \u05db\u05e7\u05d9\u05d3\u05d5\u05de\u05ea \u05e2\u05d1\u05d5\u05e8 \u05db\u05dc \u05d4\u05de\u05db\u05e9\u05d9\u05e8\u05d9\u05dd)", + "pin": "\u05e7\u05d5\u05d3 PIN (\u05d0\u05d5\u05e4\u05e6\u05d9\u05d5\u05e0\u05dc\u05d9)" + }, + "title": "\u05d1\u05d7\u05e8 \u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4 HomematicIP" + }, + "link": { + "description": "\u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05db\u05d7\u05d5\u05dc \u05d1\u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4 \u05d5\u05e2\u05dc \u05db\u05e4\u05ea\u05d5\u05e8 \u05d4\u05e9\u05dc\u05d9\u05d7\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d7\u05d1\u05e8 \u05d0\u05ea HomematicIP \u05e2\u05ddHome Assistant.\n\n![\u05de\u05d9\u05e7\u05d5\u05dd \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05de\u05d2\u05e9\u05e8](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "\u05d7\u05d1\u05e8 \u05e0\u05e7\u05d5\u05d3\u05ea \u05d2\u05d9\u05e9\u05d4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/hr.json b/homeassistant/components/homematicip_cloud/translations/hr.json similarity index 100% rename from homeassistant/components/homematicip_cloud/.translations/hr.json rename to homeassistant/components/homematicip_cloud/translations/hr.json diff --git a/homeassistant/components/homematicip_cloud/translations/hu.json b/homeassistant/components/homematicip_cloud/translations/hu.json new file mode 100644 index 00000000000..a410d9e28b6 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/hu.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "already_configured": "A hozz\u00e1f\u00e9r\u00e9si pontot m\u00e1r konfigur\u00e1ltuk", + "connection_aborted": "Nem siker\u00fclt csatlakozni a HMIP szerverhez", + "unknown": "Unknown error occurred." + }, + "error": { + "invalid_pin": "\u00c9rv\u00e9nytelen PIN, pr\u00f3b\u00e1lkozz \u00fajra.", + "press_the_button": "Nyomd meg a k\u00e9k gombot.", + "register_failed": "Regisztr\u00e1ci\u00f3 nem siker\u00fclt, pr\u00f3b\u00e1ld \u00fajra.", + "timeout_button": "K\u00e9k gomb megnyom\u00e1s\u00e1nak id\u0151t\u00fall\u00e9p\u00e9se, pr\u00f3b\u00e1lkozz \u00fajra." + }, + "step": { + "init": { + "data": { + "hapid": "Hozz\u00e1f\u00e9r\u00e9si pont azonos\u00edt\u00f3ja (SGTIN)", + "name": "N\u00e9v (opcion\u00e1lis, minden eszk\u00f6z n\u00e9vel\u0151tagjak\u00e9nt haszn\u00e1latos)", + "pin": "Pin k\u00f3d (opcion\u00e1lis)" + }, + "title": "V\u00e1lassz HomematicIP hozz\u00e1f\u00e9r\u00e9si pontot" + }, + "link": { + "title": "Link Hozz\u00e1f\u00e9r\u00e9si pont" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/id.json b/homeassistant/components/homematicip_cloud/translations/id.json new file mode 100644 index 00000000000..8c99cddf6fb --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/id.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Jalur akses sudah dikonfigurasi", + "connection_aborted": "Tidak dapat terhubung ke server HMIP", + "unknown": "Kesalahan tidak dikenal terjadi." + }, + "error": { + "invalid_pin": "PIN tidak valid, silakan coba lagi.", + "press_the_button": "Silakan tekan tombol biru.", + "register_failed": "Gagal mendaftar, silakan coba lagi.", + "timeout_button": "Batas waktu tekan tombol biru berakhir, silakan coba lagi." + }, + "step": { + "init": { + "data": { + "hapid": "Titik akses ID (SGTIN)", + "name": "Nama (opsional, digunakan sebagai awalan nama untuk semua perangkat)", + "pin": "Kode Pin (opsional)" + }, + "title": "Pilih HomematicIP Access point" + }, + "link": { + "description": "Tekan tombol biru pada access point dan tombol submit untuk mendaftarkan HomematicIP dengan rumah asisten.\n\n! [Lokasi tombol di bridge] (/ static/images/config_flows/config_homematicip_cloud.png)", + "title": "Tautkan jalur akses" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/it.json b/homeassistant/components/homematicip_cloud/translations/it.json new file mode 100644 index 00000000000..d00f082d2ed --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/it.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Il punto di accesso \u00e8 gi\u00e0 configurato", + "connection_aborted": "Impossibile connettersi al server HMIP", + "unknown": "Si \u00e8 verificato un errore sconosciuto." + }, + "error": { + "invalid_pin": "PIN non valido, riprova.", + "press_the_button": "Si prega di premere il pulsante blu.", + "register_failed": "Registrazione fallita, si prega di riprovare.", + "timeout_button": "Timeout della pressione del pulsante blu, riprovare." + }, + "step": { + "init": { + "data": { + "hapid": "ID del punto di accesso (SGTIN)", + "name": "Nome (opzionale, usato come prefisso del nome per tutti i dispositivi)", + "pin": "Codice Pin (opzionale)" + }, + "title": "Scegli punto di accesso HomematicIP" + }, + "link": { + "description": "Premi il pulsante blu sull'access point ed il pulsante di invio per registrare HomematicIP con Home Assistant. \n\n ![Posizione del pulsante sul bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Collegamento access point" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/ja.json b/homeassistant/components/homematicip_cloud/translations/ja.json similarity index 100% rename from homeassistant/components/homematicip_cloud/.translations/ja.json rename to homeassistant/components/homematicip_cloud/translations/ja.json diff --git a/homeassistant/components/homematicip_cloud/translations/ko.json b/homeassistant/components/homematicip_cloud/translations/ko.json new file mode 100644 index 00000000000..954aff55b63 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/ko.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "connection_aborted": "HMIP \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "invalid_pin": "PIN\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "press_the_button": "\ud30c\ub780\uc0c9 \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.", + "register_failed": "\ub4f1\ub85d\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "timeout_button": "\uc815\ud574\uc9c4 \uc2dc\uac04\ub0b4\uc5d0 \ud30c\ub780\uc0c9 \ubc84\ud2bc\uc744 \ub20c\ub974\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "step": { + "init": { + "data": { + "hapid": "\uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8 ID (SGTIN)", + "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d, \ubaa8\ub4e0 \uae30\uae30 \uc774\ub984\uc758 \uc811\ub450\uc5b4\ub85c \uc0ac\uc6a9)", + "pin": "PIN \ucf54\ub4dc (\uc120\ud0dd\uc0ac\ud56d)" + }, + "title": "HomematicIP \uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8 \uc120\ud0dd" + }, + "link": { + "description": "Home Assistant \uc5d0 HomematicIP \ub97c \ub4f1\ub85d\ud558\ub824\uba74 \uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8\uc758 \ud30c\ub780\uc0c9 \ubc84\ud2bc\uacfc Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.\n\n![\ube0c\ub9bf\uc9c0\uc758 \ubc84\ud2bc \uc704\uce58 \ubcf4\uae30](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "\uc561\uc138\uc2a4 \ud3ec\uc778\ud2b8 \uc5f0\uacb0" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/lb.json b/homeassistant/components/homematicip_cloud/translations/lb.json new file mode 100644 index 00000000000..393a0689bff --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/lb.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Acesspoint ass schon konfigur\u00e9iert", + "connection_aborted": "Konnt sech net mam HMIP Server verbannen", + "unknown": "Onbekannten Feeler opgetrueden" + }, + "error": { + "invalid_pin": "Ong\u00ebltege Pin, prob\u00e9iert w.e.g. nach emol.", + "press_the_button": "Dr\u00e9ckt w.e.g. de bloe Kn\u00e4ppchen.", + "register_failed": "Feeler beim registr\u00e9ieren, prob\u00e9iert w.e.g. nach emol.", + "timeout_button": "Z\u00e4itiwwerschreidung beim dr\u00e9cken vum bloe Kn\u00e4ppchen, prob\u00e9iert w.e.g. nach emol." + }, + "step": { + "init": { + "data": { + "hapid": "ID vum Accesspoint (SGTIN)", + "name": "Numm (optional, g\u00ebtt als prefixe fir all Apparat benotzt)", + "pin": "Pin Code (Optional)" + }, + "title": "HomematicIP Accesspoint auswielen" + }, + "link": { + "description": "Dr\u00e9ckt de bloen Kn\u00e4ppchen um Accesspoint an den Submit Kn\u00e4ppchen fir d'HomematicIP mam Home Assistant ze registr\u00e9ieren.\n\n![Standuert vum Kn\u00e4ppchen op der Bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Accesspoint verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/nl.json b/homeassistant/components/homematicip_cloud/translations/nl.json new file mode 100644 index 00000000000..af5b37773b0 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/nl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Accesspoint is al geconfigureerd", + "connection_aborted": "Kon geen verbinding maken met de HMIP-server", + "unknown": "Er is een onbekende fout opgetreden." + }, + "error": { + "invalid_pin": "Ongeldige PIN-code, probeer het nogmaals.", + "press_the_button": "Druk op de blauwe knop.", + "register_failed": "Kan niet registreren, gelieve opnieuw te proberen.", + "timeout_button": "Blauwe knop druk op timeout, probeer het opnieuw." + }, + "step": { + "init": { + "data": { + "hapid": "Accesspoint ID (SGTIN)", + "name": "Naam (optioneel, gebruikt als naamprefix voor alle apparaten)", + "pin": "Pin-Code (optioneel)" + }, + "title": "Kies HomematicIP accesspoint" + }, + "link": { + "description": "Druk op de blauwe knop op het accesspoint en de verzendknop om HomematicIP bij Home Assistant te registreren. \n\n![Locatie van knop op bridge](/static/images/config_flows/\nconfig_homematicip_cloud.png)", + "title": "Link accesspoint" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/nn.json b/homeassistant/components/homematicip_cloud/translations/nn.json new file mode 100644 index 00000000000..c4154e74897 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/nn.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Tilgangspunktet er allereie konfigurert", + "connection_aborted": "Kunne ikkje kople til HMIP-serveren", + "unknown": "Det hende ein ukjent feil." + }, + "error": { + "invalid_pin": "Ugyldig PIN. Pr\u00f8v igjen.", + "press_the_button": "Ver vennleg og trykk p\u00e5 den bl\u00e5 knappen.", + "register_failed": "Kunne ikkje registrere. Pr\u00f8v igjen.", + "timeout_button": "TIda gjekk ut for \u00e5 trykke p\u00e5 den bl\u00e5 knappen. Ver vennleg og pr\u00f8v igjen." + }, + "step": { + "init": { + "data": { + "hapid": "TilgangspunktID (SGTIN)", + "name": "Namn (valfrii. Brukt som namnprefiks for alle einingar)", + "pin": "Pinkode (valfritt)" + }, + "title": "Vel HomematicIP tilgangspunkt" + }, + "link": { + "description": "Trykk p\u00e5 den bl\u00e5 knappen p\u00e5 tilgangspunktet og sendknappen for \u00e5 registrere HomematicIP med Home Assistant.\n\n ! [Plassering av knapp p\u00e5 bro] (/ static / images / config_flows / config_homematicip_cloud.png)", + "title": "Link tilgangspunk" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/no.json b/homeassistant/components/homematicip_cloud/translations/no.json new file mode 100644 index 00000000000..e6a506a7768 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/no.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Tilgangspunktet er allerede konfigurert", + "connection_aborted": "Kunne ikke koble til HMIP serveren", + "unknown": "Ukjent feil oppstod." + }, + "error": { + "invalid_pin": "Ugyldig PIN kode, pr\u00f8v igjen.", + "press_the_button": "Vennligst trykk p\u00e5 den bl\u00e5 knappen.", + "register_failed": "Kunne ikke registrere, vennligst pr\u00f8v igjen.", + "timeout_button": "Bl\u00e5 knapp-trykk tok for lang tid, vennligst pr\u00f8v igjen." + }, + "step": { + "init": { + "data": { + "hapid": "Tilgangspunkt-ID (SGTIN)", + "name": "Navn (valgfritt, brukes som prefiks for alle enheter)", + "pin": "PIN kode (valgfritt)" + }, + "title": "Velg HomematicIP tilgangspunkt" + }, + "link": { + "description": "Trykk p\u00e5 den bl\u00e5 knappen p\u00e5 tilgangspunktet og p\u00e5 send knappen for \u00e5 registrere HomematicIP med Home Assistant. \n\n![Plassering av knapp p\u00e5 bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Link tilgangspunkt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/pl.json b/homeassistant/components/homematicip_cloud/translations/pl.json new file mode 100644 index 00000000000..7c0497c2d43 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/pl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Punkt dost\u0119pu jest ju\u017c skonfigurowany.", + "connection_aborted": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z serwerem HMIP", + "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d" + }, + "error": { + "invalid_pin": "Nieprawid\u0142owy kod PIN, spr\u00f3buj ponownie.", + "press_the_button": "Prosz\u0119 nacisn\u0105\u0107 niebieski przycisk.", + "register_failed": "Nie uda\u0142o si\u0119 zarejestrowa\u0107, spr\u00f3buj ponownie.", + "timeout_button": "Oczekiwania na naci\u015bni\u0119cie niebieskiego przycisku zako\u0144czone, spr\u00f3buj ponownie." + }, + "step": { + "init": { + "data": { + "hapid": "ID punktu dost\u0119pu (SGTIN)", + "name": "Nazwa (opcjonalnie, u\u017cywana jako prefiks nazwy dla wszystkich urz\u0105dze\u0144)", + "pin": "Kod PIN (opcjonalnie)" + }, + "title": "Wybierz punkt dost\u0119pu HomematicIP" + }, + "link": { + "description": "Naci\u015bnij niebieski przycisk na punkcie dost\u0119pu i przycisk przesy\u0142ania, aby zarejestrowa\u0107 HomematicIP w Home Assistant. \n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Po\u0142\u0105cz z punktem dost\u0119pu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/pt-BR.json b/homeassistant/components/homematicip_cloud/translations/pt-BR.json new file mode 100644 index 00000000000..5f7fc81bd9d --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/pt-BR.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "O Accesspoint j\u00e1 est\u00e1 configurado", + "connection_aborted": "N\u00e3o foi poss\u00edvel conectar ao servidor HMIP", + "unknown": "Ocorreu um erro desconhecido." + }, + "error": { + "invalid_pin": "PIN inv\u00e1lido, por favor tente novamente.", + "press_the_button": "Por favor, pressione o bot\u00e3o azul.", + "register_failed": "Falha ao registrar, por favor tente novamente.", + "timeout_button": "Tempo para pressionar o Bot\u00e3o Azul expirou, por favor tente novamente." + }, + "step": { + "init": { + "data": { + "hapid": "ID do AccessPoint (SGTIN)", + "name": "Nome (opcional, usado como prefixo de nome para todos os dispositivos)", + "pin": "C\u00f3digo PIN (opcional)" + }, + "title": "Escolha um HomematicIP Accesspoint" + }, + "link": { + "description": "Pressione o bot\u00e3o azul no ponto de acesso e o bot\u00e3o enviar para registrar o HomematicIP com o Home Assistant.\n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Accesspoint link" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/pt.json b/homeassistant/components/homematicip_cloud/translations/pt.json new file mode 100644 index 00000000000..649530de53c --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/pt.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "O ponto de acesso j\u00e1 se encontra configurado", + "connection_aborted": "N\u00e3o foi poss\u00edvel ligar ao servidor HMIP", + "unknown": "Ocorreu um erro desconhecido." + }, + "error": { + "invalid_pin": "PIN inv\u00e1lido. Por favor, tente novamente.", + "press_the_button": "Por favor, pressione o bot\u00e3o azul.", + "register_failed": "Falha ao registar. Por favor, tente novamente.", + "timeout_button": "Tempo limite ultrapassado para carregar bot\u00e3o azul, por favor, tente de novo." + }, + "step": { + "init": { + "data": { + "hapid": "ID do ponto de acesso (SGTIN)", + "name": "Nome (opcional, usado como prefixo de nome para todos os dispositivos)", + "pin": "C\u00f3digo PIN (opcional)" + }, + "title": "Escolher ponto de acesso HomematicIP" + }, + "link": { + "description": "Pressione o bot\u00e3o azul no ponto de acesso e o bot\u00e3o enviar para registrar HomematicIP com o Home Assistant.\n\n![Localiza\u00e7\u00e3o do bot\u00e3o na bridge](/ static/images/config_flows/config_homematicip_cloud.png)", + "title": "Associar ponto de acesso" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/ro.json b/homeassistant/components/homematicip_cloud/translations/ro.json similarity index 100% rename from homeassistant/components/homematicip_cloud/.translations/ro.json rename to homeassistant/components/homematicip_cloud/translations/ro.json diff --git a/homeassistant/components/homematicip_cloud/translations/ru.json b/homeassistant/components/homematicip_cloud/translations/ru.json new file mode 100644 index 00000000000..58ee71e722b --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/ru.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "connection_aborted": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 HMIP.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "error": { + "invalid_pin": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 PIN-\u043a\u043e\u0434, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", + "press_the_button": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u0438\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443.", + "register_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", + "timeout_button": "\u0412\u044b \u043d\u0435 \u043d\u0430\u0436\u0430\u043b\u0438 \u0441\u0438\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430." + }, + "step": { + "init": { + "data": { + "hapid": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (SGTIN)", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432)", + "pin": "PIN-\u043a\u043e\u0434 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)" + }, + "title": "HomematicIP Cloud" + }, + "link": { + "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u0438\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u0442\u043e\u0447\u043a\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u043a\u043d\u043e\u043f\u043a\u0443 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c HomematicIP \u0432 Home Assistant. \n\n ![\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/sl.json b/homeassistant/components/homematicip_cloud/translations/sl.json new file mode 100644 index 00000000000..a0179dfc90d --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/sl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Dostopna to\u010dka je \u017ee nastavljena", + "connection_aborted": "Povezava s stre\u017enikom HMIP ni bila mogo\u010da", + "unknown": "Pri\u0161lo je do neznane napake" + }, + "error": { + "invalid_pin": "Neveljavna koda PIN, poskusite znova.", + "press_the_button": "Prosimo, pritisnite modri gumb.", + "register_failed": "Registracija ni uspela, poskusite znova", + "timeout_button": "Potekla je \u010dasovna omejitev za pritisk modrega gumba, poskusite znova." + }, + "step": { + "init": { + "data": { + "hapid": "ID dostopne to\u010dke (SGTIN)", + "name": "Ime (neobvezno, ki se uporablja kot predpona za vse naprave)", + "pin": "Koda PIN (neobvezno)" + }, + "title": "Izberite dostopno to\u010dko HomematicIP" + }, + "link": { + "description": "Pritisnite modro tipko na dostopni to\u010dko in gumb po\u0161lji, da registrirate homematicIP s Home Assistantom. \n\n![Location of button on bridge](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "Pove\u017eite dostopno to\u010dko" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/sv.json b/homeassistant/components/homematicip_cloud/translations/sv.json new file mode 100644 index 00000000000..85c71ca3fad --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/sv.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Accesspunkten \u00e4r redan konfigurerad", + "connection_aborted": "Det gick inte att ansluta till HMIP-servern", + "unknown": "Ett ok\u00e4nt fel har intr\u00e4ffat" + }, + "error": { + "invalid_pin": "Ogiltig PIN-kod, f\u00f6rs\u00f6k igen.", + "press_the_button": "V\u00e4nligen tryck p\u00e5 den bl\u00e5 knappen.", + "register_failed": "Misslyckades med att registrera, f\u00f6rs\u00f6k igen.", + "timeout_button": "Bl\u00e5 knapptryckning timeout, f\u00f6rs\u00f6k igen." + }, + "step": { + "init": { + "data": { + "hapid": "Accesspunkt-ID (SGTIN)", + "name": "Namn (frivilligt, anv\u00e4nds som namnprefix f\u00f6r alla enheter)", + "pin": "Pin-kod (frivilligt)" + }, + "title": "V\u00e4lj HomematicIP Accesspunkt" + }, + "link": { + "description": "Tryck p\u00e5 den bl\u00e5 knappen p\u00e5 accesspunkten och p\u00e5 skicka-knappen f\u00f6r att registrera HomematicIP med Home Assistant. \n\n ![Placering av knappen p\u00e5 bryggan](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "L\u00e4nka Accesspunkt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/.translations/th.json b/homeassistant/components/homematicip_cloud/translations/th.json similarity index 100% rename from homeassistant/components/homematicip_cloud/.translations/th.json rename to homeassistant/components/homematicip_cloud/translations/th.json diff --git a/homeassistant/components/homematicip_cloud/translations/zh-Hans.json b/homeassistant/components/homematicip_cloud/translations/zh-Hans.json new file mode 100644 index 00000000000..02781ba48f4 --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/zh-Hans.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "\u63a5\u5165\u70b9\u5df2\u914d\u7f6e", + "connection_aborted": "\u65e0\u6cd5\u8fde\u63a5\u5230 HMIP \u670d\u52a1\u5668", + "unknown": "\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002" + }, + "error": { + "invalid_pin": "PIN \u65e0\u6548\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002", + "press_the_button": "\u8bf7\u6309\u4e0b\u84dd\u8272\u6309\u94ae\u3002", + "register_failed": "\u6ce8\u518c\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5", + "timeout_button": "\u6309\u4e0b\u84dd\u8272\u6309\u94ae\u8d85\u65f6\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002" + }, + "step": { + "init": { + "data": { + "hapid": "\u63a5\u5165\u70b9 ID (SGTIN)", + "name": "\u540d\u79f0\uff08\u53ef\u9009\uff0c\u7528\u4f5c\u6240\u6709\u8bbe\u5907\u7684\u540d\u79f0\u524d\u7f00\uff09", + "pin": "PIN \u7801\uff08\u53ef\u9009\uff09" + }, + "title": "\u9009\u62e9 HomematicIP \u63a5\u5165\u70b9" + }, + "link": { + "description": "\u6309\u4e0b\u63a5\u5165\u70b9\u4e0a\u7684\u84dd\u8272\u6309\u94ae\u7136\u540e\u70b9\u51fb\u63d0\u4ea4\u6309\u94ae\uff0c\u4ee5\u5c06 HomematicIP \u6ce8\u518c\u5230 Home Assistant\u3002\n\n![\u63a5\u5165\u70b9\u7684\u6309\u94ae\u4f4d\u7f6e]\n(/static/images/config_flows/config_homematicip_cloud.png)", + "title": "\u8fde\u63a5\u63a5\u5165\u70b9" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homematicip_cloud/translations/zh-Hant.json b/homeassistant/components/homematicip_cloud/translations/zh-Hant.json new file mode 100644 index 00000000000..e457ce1631c --- /dev/null +++ b/homeassistant/components/homematicip_cloud/translations/zh-Hant.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Access point \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "connection_aborted": "\u7121\u6cd5\u9023\u7dda\u81f3 HMIP \u4f3a\u670d\u5668", + "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "error": { + "invalid_pin": "PIN \u78bc\u7121\u6548\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "press_the_button": "\u8acb\u6309\u4e0b\u85cd\u8272\u6309\u9215\u3002", + "register_failed": "\u8a3b\u518a\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "timeout_button": "\u85cd\u8272\u6309\u9215\u903e\u6642\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "init": { + "data": { + "hapid": "Access point ID (SGTIN)", + "name": "\u540d\u7a31\uff08\u9078\u9805\uff0c\u7528\u4ee5\u4f5c\u70ba\u6240\u6709\u8a2d\u5099\u7684\u5b57\u9996\u7528\uff09", + "pin": "PIN \u78bc\uff08\u9078\u9805\uff09" + }, + "title": "\u9078\u64c7 HomematicIP Access point" + }, + "link": { + "description": "\u6309\u4e0b AP \u4e0a\u7684\u85cd\u8272\u6309\u9215\u8207\u50b3\u9001\u6309\u9215\uff0c\u4ee5\u65bc Home Assistant \u4e0a\u9032\u884c HomematicIP \u8a3b\u518a\u3002\n\n![\u6a4b\u63a5\u5668\u4e0a\u7684\u6309\u9215\u4f4d\u7f6e](/static/images/config_flows/config_homematicip_cloud.png)", + "title": "\u9023\u7d50 Access point" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/homeworks/light.py b/homeassistant/components/homeworks/light.py index 56d5bcacc47..db72c87a4a3 100644 --- a/homeassistant/components/homeworks/light.py +++ b/homeassistant/components/homeworks/light.py @@ -42,7 +42,9 @@ class HomeworksLight(HomeworksDevice, Light): """Call when entity is added to hass.""" signal = f"homeworks_entity_{self._addr}" _LOGGER.debug("connecting %s", signal) - async_dispatcher_connect(self.hass, signal, self._update_callback) + self.async_on_remove( + async_dispatcher_connect(self.hass, signal, self._update_callback) + ) self._controller.request_dimmer_level(self._addr) @property @@ -93,4 +95,4 @@ class HomeworksLight(HomeworksDevice, Light): self._level = int((values[1] * 255.0) / 100.0) if self._level != 0: self._prev_level = self._level - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/homeworks/manifest.json b/homeassistant/components/homeworks/manifest.json index e28230662f8..9432e80d04e 100644 --- a/homeassistant/components/homeworks/manifest.json +++ b/homeassistant/components/homeworks/manifest.json @@ -3,6 +3,5 @@ "name": "Lutron Homeworks", "documentation": "https://www.home-assistant.io/integrations/homeworks", "requirements": ["pyhomeworks==0.0.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/honeywell/manifest.json b/homeassistant/components/honeywell/manifest.json index aed28949591..52abf20bb2f 100644 --- a/homeassistant/components/honeywell/manifest.json +++ b/homeassistant/components/honeywell/manifest.json @@ -3,6 +3,5 @@ "name": "Honeywell Total Connect Comfort (US)", "documentation": "https://www.home-assistant.io/integrations/honeywell", "requirements": ["somecomfort==0.5.2"], - "dependencies": [], "codeowners": ["@zxdavb"] } diff --git a/homeassistant/components/horizon/manifest.json b/homeassistant/components/horizon/manifest.json index 620a90d6c09..0d89adb5109 100644 --- a/homeassistant/components/horizon/manifest.json +++ b/homeassistant/components/horizon/manifest.json @@ -3,6 +3,5 @@ "name": "Unitymedia Horizon HD Recorder", "documentation": "https://www.home-assistant.io/integrations/horizon", "requirements": ["horimote==0.4.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hp_ilo/manifest.json b/homeassistant/components/hp_ilo/manifest.json index c863651699a..ea922edd59e 100644 --- a/homeassistant/components/hp_ilo/manifest.json +++ b/homeassistant/components/hp_ilo/manifest.json @@ -3,6 +3,5 @@ "name": "HP Integrated Lights-Out (ILO)", "documentation": "https://www.home-assistant.io/integrations/hp_ilo", "requirements": ["python-hpilo==4.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/html5/notify.py b/homeassistant/components/html5/notify.py index 679968d1b8d..6970ebbedb4 100644 --- a/homeassistant/components/html5/notify.py +++ b/homeassistant/components/html5/notify.py @@ -335,7 +335,7 @@ class HTML5PushCallbackView(HomeAssistantView): def check_authorization_header(self, request): """Check the authorization header.""" - auth = request.headers.get(AUTHORIZATION, None) + auth = request.headers.get(AUTHORIZATION) if not auth: return self.json_message( "Authorization header is expected", status_code=HTTP_UNAUTHORIZED diff --git a/homeassistant/components/html5/services.yaml b/homeassistant/components/html5/services.yaml index 5fd068a64dc..f3df4341594 100644 --- a/homeassistant/components/html5/services.yaml +++ b/homeassistant/components/html5/services.yaml @@ -3,7 +3,7 @@ dismiss: fields: target: description: An array of targets. Optional. - example: ['my_phone', 'my_tablet'] + example: ["my_phone", "my_tablet"] data: description: Extended information of notification. Supports tag. Optional. example: '{ "tag": "tagname" }' diff --git a/homeassistant/components/http/ban.py b/homeassistant/components/http/ban.py index 38eda8e9b3f..8b8d2bc5671 100644 --- a/homeassistant/components/http/ban.py +++ b/homeassistant/components/http/ban.py @@ -10,6 +10,7 @@ from aiohttp.web_exceptions import HTTPForbidden, HTTPUnauthorized import voluptuous as vol from homeassistant.config import load_yaml_config_file +from homeassistant.const import HTTP_BAD_REQUEST from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError import homeassistant.helpers.config_validation as cv @@ -81,7 +82,7 @@ def log_invalid_auth(func): async def handle_req(view, request, *args, **kwargs): """Try to log failed login attempts if response status >= 400.""" resp = await func(view, request, *args, **kwargs) - if resp.status >= 400: + if resp.status >= HTTP_BAD_REQUEST: await process_wrong_login(request) return resp @@ -110,6 +111,12 @@ async def process_wrong_login(request): request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr] += 1 + # Supervisor IP should never be banned + if "hassio" in hass.config.components and hass.components.hassio.get_supervisor_ip() == str( + remote_addr + ): + return + if ( request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr] >= request.app[KEY_LOGIN_THRESHOLD] diff --git a/homeassistant/components/http/data_validator.py b/homeassistant/components/http/data_validator.py index 51b3b5617e4..84bdb4e1c17 100644 --- a/homeassistant/components/http/data_validator.py +++ b/homeassistant/components/http/data_validator.py @@ -4,6 +4,8 @@ import logging import voluptuous as vol +from homeassistant.const import HTTP_BAD_REQUEST + # mypy: allow-untyped-defs _LOGGER = logging.getLogger(__name__) @@ -38,14 +40,16 @@ class RequestDataValidator: except ValueError: if not self._allow_empty or (await request.content.read()) != b"": _LOGGER.error("Invalid JSON received.") - return view.json_message("Invalid JSON.", 400) + return view.json_message("Invalid JSON.", HTTP_BAD_REQUEST) data = {} try: kwargs["data"] = self._schema(data) except vol.Invalid as err: _LOGGER.error("Data does not match schema: %s", err) - return view.json_message(f"Message format incorrect: {err}", 400) + return view.json_message( + f"Message format incorrect: {err}", HTTP_BAD_REQUEST + ) result = await method(view, request, *args, **kwargs) return result diff --git a/homeassistant/components/http/manifest.json b/homeassistant/components/http/manifest.json index 6f8328b33fb..2fd0be87a8b 100644 --- a/homeassistant/components/http/manifest.json +++ b/homeassistant/components/http/manifest.json @@ -3,7 +3,6 @@ "name": "HTTP", "documentation": "https://www.home-assistant.io/integrations/http", "requirements": ["aiohttp_cors==0.7.0"], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/http/view.py b/homeassistant/components/http/view.py index bb7c5816c77..40ca43ff695 100644 --- a/homeassistant/components/http/view.py +++ b/homeassistant/components/http/view.py @@ -13,7 +13,7 @@ from aiohttp.web_exceptions import ( import voluptuous as vol from homeassistant import exceptions -from homeassistant.const import CONTENT_TYPE_JSON +from homeassistant.const import CONTENT_TYPE_JSON, HTTP_OK from homeassistant.core import Context, is_callback from homeassistant.helpers.json import JSONEncoder @@ -44,7 +44,7 @@ class HomeAssistantView: return Context(user_id=user.id) @staticmethod - def json(result, status_code=200, headers=None): + def json(result, status_code=HTTP_OK, headers=None): """Return a JSON response.""" try: msg = json.dumps( @@ -62,7 +62,9 @@ class HomeAssistantView: response.enable_compression() return response - def json_message(self, message, status_code=200, message_code=None, headers=None): + def json_message( + self, message, status_code=HTTP_OK, message_code=None, headers=None + ): """Return a JSON message response.""" data = {"message": message} if message_code is not None: @@ -132,7 +134,7 @@ def request_handler_factory(view, handler): # The method handler returned a ready-made Response, how nice of it return result - status_code = 200 + status_code = HTTP_OK if isinstance(result, tuple): result, status_code = result diff --git a/homeassistant/components/htu21d/manifest.json b/homeassistant/components/htu21d/manifest.json index 2b36c4b66fb..18109aa40e4 100644 --- a/homeassistant/components/htu21d/manifest.json +++ b/homeassistant/components/htu21d/manifest.json @@ -3,6 +3,5 @@ "name": "HTU21D(F) Sensor", "documentation": "https://www.home-assistant.io/integrations/htu21d", "requirements": ["i2csense==0.0.4", "smbus-cffi==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/huawei_lte/.translations/bg.json b/homeassistant/components/huawei_lte/.translations/bg.json deleted file mode 100644 index 44746468b35..00000000000 --- a/homeassistant/components/huawei_lte/.translations/bg.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", - "already_in_progress": "\u0422\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0435\u0447\u0435 \u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430", - "not_huawei_lte": "\u041d\u0435 \u0435 Huawei LTE \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "error": { - "connection_failed": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e", - "connection_timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438\u0437\u0442\u0435\u0447\u0435", - "incorrect_password": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430", - "incorrect_username": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", - "incorrect_username_or_password": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430", - "invalid_url": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u0430\u0434\u0440\u0435\u0441", - "login_attempts_exceeded": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0438\u0442\u0435 \u043e\u043f\u0438\u0442\u0438 \u0437\u0430 \u0432\u043b\u0438\u0437\u0430\u043d\u0435 \u0441\u0430 \u043d\u0430\u0434\u0432\u0438\u0448\u0435\u043d\u0438. \u041c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043f\u043e-\u043a\u044a\u0441\u043d\u043e", - "response_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e", - "unknown_connection_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "url": "URL \u0410\u0434\u0440\u0435\u0441", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e. \u041f\u043e\u0441\u043e\u0447\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430 \u043d\u0435 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e, \u043d\u043e \u0434\u0430\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430\u043d\u0435. \u041e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0430, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438 \u0441 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u0443\u0435\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u0432\u044a\u043d Home Assistant, \u0434\u043e\u043a\u0430\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0442\u043e.", - "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "recipient": "\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 SMS \u0438\u0437\u0432\u0435\u0441\u0442\u0438\u044f", - "track_new_devices": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/ca.json b/homeassistant/components/huawei_lte/.translations/ca.json deleted file mode 100644 index a52d101a486..00000000000 --- a/homeassistant/components/huawei_lte/.translations/ca.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest dispositiu ja est\u00e0 configurat", - "already_in_progress": "Aquest dispositiu ja s'est\u00e0 configurant", - "not_huawei_lte": "No \u00e9s un dispositiu Huawei LTE" - }, - "error": { - "connection_failed": "La connexi\u00f3 ha fallat", - "connection_timeout": "S'ha acabat el temps d'espera de la connexi\u00f3", - "incorrect_password": "Contrasenya incorrecta", - "incorrect_username": "Nom d'usuari incorrecte", - "incorrect_username_or_password": "Nom d'usuari o contrasenya incorrectes", - "invalid_url": "URL inv\u00e0lid", - "login_attempts_exceeded": "Nombre m\u00e0xim d'intents d'inici de sessi\u00f3 superat, torna-ho a provar m\u00e9s tard", - "response_error": "S'ha produ\u00eft un error desconegut del dispositiu", - "unknown_connection_error": "S'ha produ\u00eft un error desconegut en connectar-se al dispositiu" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "url": "URL", - "username": "Nom d'usuari" - }, - "description": "Introdueix les dades d\u2019acc\u00e9s del dispositiu. El nom d\u2019usuari i contrasenya s\u00f3n opcionals, per\u00f2 habiliten m\u00e9s funcions de la integraci\u00f3. D'altra banda, (mentre la integraci\u00f3 estigui activa) l'\u00fas d'una connexi\u00f3 autoritzada pot causar problemes per accedir a la interf\u00edcie web del dispositiu des de fora de Home Assistant i viceversa.", - "title": "Configuraci\u00f3 de Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Nom del servei de notificacions (reinici necessari si canvia)", - "recipient": "Destinataris de notificacions SMS", - "track_new_devices": "Segueix dispositius nous" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/cs.json b/homeassistant/components/huawei_lte/.translations/cs.json deleted file mode 100644 index 8d7ac01c55a..00000000000 --- a/homeassistant/components/huawei_lte/.translations/cs.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Toto za\u0159\u00edzen\u00ed je ji\u017e nakonfigurov\u00e1no" - }, - "error": { - "connection_failed": "P\u0159ipojen\u00ed se nezda\u0159ilo", - "incorrect_password": "Nespr\u00e1vn\u00e9 heslo", - "incorrect_username": "Nespr\u00e1vn\u00e9 u\u017eivatelsk\u00e9 jm\u00e9no", - "incorrect_username_or_password": "Nespr\u00e1vn\u00e9 u\u017eivatelsk\u00e9 jm\u00e9no \u010di heslo", - "invalid_url": "Neplatn\u00e1 adresa URL", - "login_attempts_exceeded": "Maxim\u00e1ln\u00ed pokus o p\u0159ihl\u00e1\u0161en\u00ed byl p\u0159ekro\u010den, zkuste to znovu pozd\u011bji", - "response_error": "Nezn\u00e1m\u00e1 chyba ze za\u0159\u00edzen\u00ed", - "unknown_connection_error": "Nezn\u00e1m\u00e1 chyba p\u0159i p\u0159ipojov\u00e1n\u00ed k za\u0159\u00edzen\u00ed" - }, - "step": { - "user": { - "data": { - "password": "Heslo", - "url": "URL", - "username": "U\u017eivatelsk\u00e9 jm\u00e9no" - }, - "title": "Konfigurovat Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "recipient": "P\u0159\u00edjemci ozn\u00e1men\u00ed SMS", - "track_new_devices": "Sledovat nov\u00e1 za\u0159\u00edzen\u00ed" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/da.json b/homeassistant/components/huawei_lte/.translations/da.json deleted file mode 100644 index 19bc69b77fd..00000000000 --- a/homeassistant/components/huawei_lte/.translations/da.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne enhed er allerede konfigureret", - "already_in_progress": "Denne enhed er allerede ved at blive konfigureret", - "not_huawei_lte": "Ikke en Huawei LTE-enhed" - }, - "error": { - "connection_failed": "Forbindelsen mislykkedes", - "connection_timeout": "Timeout for forbindelse", - "incorrect_password": "Forkert adgangskode", - "incorrect_username": "Forkert brugernavn", - "incorrect_username_or_password": "Forkert brugernavn eller adgangskode", - "invalid_url": "Ugyldig webadresse", - "login_attempts_exceeded": "Maksimale loginfors\u00f8g overskredet. Pr\u00f8v igen senere", - "response_error": "Ukendt fejl fra enheden", - "unknown_connection_error": "Ukendt fejl ved tilslutning til enheden" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "url": "Webadresse", - "username": "Brugernavn" - }, - "description": "Indtast oplysninger om enhedsadgang. Det er valgfrit at specificere brugernavn og adgangskode, men muligg\u00f8r underst\u00f8ttelse af flere integrationsfunktioner. P\u00e5 den anden side kan brug af en autoriseret forbindelse for\u00e5rsage problemer med at f\u00e5 adgang til enhedens webgr\u00e6nseflade uden for Home Assistant, mens integrationen er aktiv, og omvendt.", - "title": "Konfigurer Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Navn p\u00e5 meddelelsestjeneste (\u00e6ndring kr\u00e6ver genstart)", - "recipient": "Modtagere af SMS-meddelelse", - "track_new_devices": "Spor nye enheder" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/de.json b/homeassistant/components/huawei_lte/.translations/de.json deleted file mode 100644 index a346753aeb3..00000000000 --- a/homeassistant/components/huawei_lte/.translations/de.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses Ger\u00e4t wurde bereits konfiguriert", - "already_in_progress": "Dieses Ger\u00e4t wurde bereits konfiguriert", - "not_huawei_lte": "Kein Huawei LTE-Ger\u00e4t" - }, - "error": { - "connection_failed": "Verbindung fehlgeschlagen.", - "connection_timeout": "Verbindungszeit\u00fcberschreitung", - "incorrect_password": "Ung\u00fcltiges Passwort", - "incorrect_username": "Ung\u00fcltiger Benutzername", - "incorrect_username_or_password": "Ung\u00fcltiger Benutzername oder Kennwort", - "invalid_url": "Ung\u00fcltige URL", - "login_attempts_exceeded": "Maximale Anzahl von Anmeldeversuchen \u00fcberschritten. Bitte versuche es sp\u00e4ter erneut", - "response_error": "Unbekannter Fehler vom Ger\u00e4t", - "unknown_connection_error": "Unbekannter Fehler beim Herstellen der Verbindung zum Ger\u00e4t" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "url": "URL", - "username": "Benutzername" - }, - "description": "Gib die Zugangsdaten zum Ger\u00e4t ein. Die Angabe von Benutzername und Passwort ist optional, erm\u00f6glicht aber die Unterst\u00fctzung weiterer Integrationsfunktionen. Andererseits kann die Verwendung einer autorisierten Verbindung zu Problemen beim Zugriff auf die Web-Schnittstelle des Ger\u00e4ts von au\u00dferhalb des Home Assistant f\u00fchren, w\u00e4hrend die Integration aktiv ist, und umgekehrt.", - "title": "Konfiguriere Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Name des Benachrichtigungsdienstes (\u00c4nderung erfordert Neustart)", - "recipient": "SMS-Benachrichtigungsempf\u00e4nger", - "track_new_devices": "Neue Ger\u00e4te verfolgen" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/en.json b/homeassistant/components/huawei_lte/.translations/en.json deleted file mode 100644 index c5f2b4a2a02..00000000000 --- a/homeassistant/components/huawei_lte/.translations/en.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This device has already been configured", - "already_in_progress": "This device is already being configured", - "not_huawei_lte": "Not a Huawei LTE device" - }, - "error": { - "connection_failed": "Connection failed", - "connection_timeout": "Connection timeout", - "incorrect_password": "Incorrect password", - "incorrect_username": "Incorrect username", - "incorrect_username_or_password": "Incorrect username or password", - "invalid_url": "Invalid URL", - "login_attempts_exceeded": "Maximum login attempts exceeded, please try again later", - "response_error": "Unknown error from device", - "unknown_connection_error": "Unknown error connecting to device" - }, - "step": { - "user": { - "data": { - "password": "Password", - "url": "URL", - "username": "User name" - }, - "description": "Enter device access details. Specifying username and password is optional, but enables support for more integration features. On the other hand, use of an authorized connection may cause problems accessing the device web interface from outside Home Assistant while the integration is active, and the other way around.", - "title": "Configure Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Notification service name (change requires restart)", - "recipient": "SMS notification recipients", - "track_new_devices": "Track new devices" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/es.json b/homeassistant/components/huawei_lte/.translations/es.json deleted file mode 100644 index c35d1eacf23..00000000000 --- a/homeassistant/components/huawei_lte/.translations/es.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este dispositivo ya ha sido configurado", - "already_in_progress": "Este dispositivo ya se est\u00e1 configurando", - "not_huawei_lte": "No es un dispositivo Huawei LTE" - }, - "error": { - "connection_failed": "Fallo de conexi\u00f3n", - "connection_timeout": "Tiempo de espera de la conexi\u00f3n superado", - "incorrect_password": "Contrase\u00f1a incorrecta", - "incorrect_username": "Nombre de usuario incorrecto", - "incorrect_username_or_password": "Nombre de usuario o contrase\u00f1a incorrectos", - "invalid_url": "URL no v\u00e1lida", - "login_attempts_exceeded": "Se han superado los intentos de inicio de sesi\u00f3n m\u00e1ximos, int\u00e9ntelo de nuevo m\u00e1s tarde.", - "response_error": "Error desconocido del dispositivo", - "unknown_connection_error": "Error desconocido al conectarse al dispositivo" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "url": "URL", - "username": "Nombre de usuario" - }, - "description": "Introduzca los detalles de acceso al dispositivo. La especificaci\u00f3n del nombre de usuario y la contrase\u00f1a es opcional, pero permite admitir m\u00e1s funciones de integraci\u00f3n. Por otro lado, el uso de una conexi\u00f3n autorizada puede causar problemas para acceder a la interfaz web del dispositivo desde fuera de Home Assistant mientras la integraci\u00f3n est\u00e1 activa, y viceversa.", - "title": "Configurar Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Nombre del servicio de notificaci\u00f3n", - "recipient": "Destinatarios de notificaciones por SMS", - "track_new_devices": "Rastrea nuevos dispositivos" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/fr.json b/homeassistant/components/huawei_lte/.translations/fr.json deleted file mode 100644 index 9f6ae9a09bf..00000000000 --- a/homeassistant/components/huawei_lte/.translations/fr.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cet appareil est d\u00e9j\u00e0 configur\u00e9", - "already_in_progress": "Ce p\u00e9riph\u00e9rique est d\u00e9j\u00e0 en cours de configuration", - "not_huawei_lte": "Pas un appareil Huawei LTE" - }, - "error": { - "connection_failed": "La connexion a \u00e9chou\u00e9", - "connection_timeout": "D\u00e9lai de connexion d\u00e9pass\u00e9", - "incorrect_password": "Mot de passe incorrect", - "incorrect_username": "Nom d'utilisateur incorrect", - "incorrect_username_or_password": "identifiant ou mot de passe incorrect", - "invalid_url": "URL invalide", - "login_attempts_exceeded": "Nombre maximal de tentatives de connexion d\u00e9pass\u00e9, veuillez r\u00e9essayer ult\u00e9rieurement", - "response_error": "Erreur inconnue de l'appareil", - "unknown_connection_error": "Erreur inconnue lors de la connexion \u00e0 l'appareil" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "url": "URL", - "username": "Nom d'utilisateur" - }, - "description": "Entrez les d\u00e9tails d'acc\u00e8s au p\u00e9riph\u00e9rique. La sp\u00e9cification du nom d'utilisateur et du mot de passe est facultative, mais permet de prendre en charge davantage de fonctionnalit\u00e9s d'int\u00e9gration. En revanche, l\u2019utilisation d\u2019une connexion autoris\u00e9e peut entra\u00eener des probl\u00e8mes d\u2019acc\u00e8s \u00e0 l\u2019interface Web du p\u00e9riph\u00e9rique depuis l\u2019assistant externe lorsque l\u2019int\u00e9gration est active et inversement.", - "title": "Configurer Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Nom du service de notification (red\u00e9marrage requis)", - "recipient": "Destinataires des notifications SMS", - "track_new_devices": "Suivre les nouveaux appareils" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/hu.json b/homeassistant/components/huawei_lte/.translations/hu.json deleted file mode 100644 index 9f012c1c405..00000000000 --- a/homeassistant/components/huawei_lte/.translations/hu.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ez az eszk\u00f6z m\u00e1r konfigur\u00e1lva van", - "already_in_progress": "Ez az eszk\u00f6z m\u00e1r konfigur\u00e1lva van", - "not_huawei_lte": "Nem Huawei LTE eszk\u00f6z" - }, - "error": { - "connection_failed": "Kapcsol\u00f3d\u00e1s sikertelen", - "connection_timeout": "Kapcsolat id\u0151t\u00fall\u00e9p\u00e9se", - "incorrect_password": "Hib\u00e1s jelsz\u00f3", - "incorrect_username": "Helytelen felhaszn\u00e1l\u00f3n\u00e9v", - "incorrect_username_or_password": "Helytelen felhaszn\u00e1l\u00f3n\u00e9v vagy jelsz\u00f3", - "invalid_url": "\u00c9rv\u00e9nytelen URL" - }, - "step": { - "user": { - "data": { - "password": "Jelsz\u00f3", - "url": "URL", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - }, - "title": "Huawei LTE konfigur\u00e1l\u00e1sa" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "\u00c9rtes\u00edt\u00e9si szolg\u00e1ltat\u00e1s neve (a m\u00f3dos\u00edt\u00e1s \u00fajraind\u00edt\u00e1st ig\u00e9nyel)", - "recipient": "SMS-\u00e9rtes\u00edt\u00e9s c\u00edmzettjei", - "track_new_devices": "\u00daj eszk\u00f6z\u00f6k nyomk\u00f6vet\u00e9se" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/it.json b/homeassistant/components/huawei_lte/.translations/it.json deleted file mode 100644 index 4ad17ecaa36..00000000000 --- a/homeassistant/components/huawei_lte/.translations/it.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo dispositivo \u00e8 gi\u00e0 stato configurato", - "already_in_progress": "Questo dispositivo \u00e8 gi\u00e0 in fase di configurazione", - "not_huawei_lte": "Non \u00e8 un dispositivo Huawei LTE" - }, - "error": { - "connection_failed": "Connessione fallita", - "connection_timeout": "Timeout di connessione", - "incorrect_password": "Password errata", - "incorrect_username": "Nome utente errato", - "incorrect_username_or_password": "Nome utente o password errati", - "invalid_url": "URL non valido", - "login_attempts_exceeded": "Superati i tentativi di accesso massimi, riprovare pi\u00f9 tardi", - "response_error": "Errore sconosciuto dal dispositivo", - "unknown_connection_error": "Errore sconosciuto durante la connessione al dispositivo" - }, - "step": { - "user": { - "data": { - "password": "Password", - "url": "URL", - "username": "Nome utente" - }, - "description": "Immettere i dettagli di accesso al dispositivo. La specifica di nome utente e password \u00e8 facoltativa, ma abilita il supporto per altre funzionalit\u00e0 di integrazione. D'altra parte, l'uso di una connessione autorizzata pu\u00f2 causare problemi di accesso all'interfaccia Web del dispositivo dall'esterno di Home Assistant mentre l'integrazione \u00e8 attiva e viceversa.", - "title": "Configura Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Nome del servizio di notifica (la modifica richiede il riavvio)", - "recipient": "Destinatari della notifica SMS", - "track_new_devices": "Traccia nuovi dispositivi" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/ko.json b/homeassistant/components/huawei_lte/.translations/ko.json deleted file mode 100644 index f6b3d855679..00000000000 --- a/homeassistant/components/huawei_lte/.translations/ko.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "not_huawei_lte": "\ud654\uc6e8\uc774 LTE \uae30\uae30\uac00 \uc544\ub2d8" - }, - "error": { - "connection_failed": "\uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "connection_timeout": "\uc811\uc18d \uc2dc\uac04 \ucd08\uacfc", - "incorrect_password": "\ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "incorrect_username": "\uc0ac\uc6a9\uc790 \uc774\ub984\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "incorrect_username_or_password": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "invalid_url": "URL \uc8fc\uc18c\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "login_attempts_exceeded": "\ucd5c\ub300 \ub85c\uadf8\uc778 \uc2dc\ub3c4 \ud69f\uc218\ub97c \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694", - "response_error": "\uae30\uae30\uc5d0\uc11c \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", - "unknown_connection_error": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\ub294 \uc911 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "url": "URL \uc8fc\uc18c", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "\uae30\uae30 \uc561\uc138\uc2a4 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694. \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc124\uc815\ud558\ub294 \uac83\uc740 \uc120\ud0dd \uc0ac\ud56d\uc774\uc9c0\ub9cc \ub354 \ub9ce\uc740 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc18\uba74, \uc778\uc99d \ub41c \uc5f0\uacb0\uc744 \uc0ac\uc6a9\ud558\uba74, \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uac00 \ud65c\uc131\ud654 \ub41c \uc0c1\ud0dc\uc5d0\uc11c \ub2e4\ub978 \ubc29\ubc95\uc73c\ub85c Home Assistant \uc758 \uc678\ubd80\uc5d0\uc11c \uae30\uae30\uc758 \uc6f9 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \ub370 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "Huawei LTE \uc124\uc815" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "\uc54c\ub9bc \uc11c\ube44\uc2a4 \uc774\ub984 (\ubcc0\uacbd \uc2dc \ub2e4\uc2dc \uc2dc\uc791\ud574\uc57c \ud568)", - "recipient": "SMS \uc54c\ub9bc \uc218\uc2e0\uc790", - "track_new_devices": "\uc0c8\ub85c\uc6b4 \uae30\uae30 \ucd94\uc801" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/lb.json b/homeassistant/components/huawei_lte/.translations/lb.json deleted file mode 100644 index d99c31d2d63..00000000000 --- a/homeassistant/components/huawei_lte/.translations/lb.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebsen Apparat ass scho konfigur\u00e9iert", - "already_in_progress": "D\u00ebsen Apparat g\u00ebtt scho konfigur\u00e9iert", - "not_huawei_lte": "Ken Huawei LTE Apparat" - }, - "error": { - "connection_failed": "Feeler bei der Verbindung", - "connection_timeout": "Z\u00e4it Iwwerschreidung beim verbannen", - "incorrect_password": "Ong\u00ebltegt Passwuert", - "incorrect_username": "Ong\u00ebltege Benotzernumm", - "incorrect_username_or_password": "Ong\u00ebltege Benotzernumm oder Passwuert", - "invalid_url": "Ong\u00eblteg URL", - "login_attempts_exceeded": "Maximal Login Versich iwwerschratt, w.e.g. m\u00e9i sp\u00e9it nach eng K\u00e9ier", - "response_error": "Onbekannte Feeler vum Apparat", - "unknown_connection_error": "Onbekannte Feeler beim verbannen mam Apparat" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "url": "URL", - "username": "Benotzernumm" - }, - "description": "Gitt Detailer fir den Acc\u00e8s op den Apparat an. Benotzernumm a Passwuert si fakultativ, erm\u00e9iglecht awer d'\u00cbnnerst\u00ebtzung fir m\u00e9i Integratiouns Optiounen. Op der anerer S\u00e4it kann d'Benotzung vun enger autoris\u00e9ierter Verbindung Problemer mam Acc\u00e8s zum Web Interface vum Apparat ausserhalb vum Home Assistant verursaachen, w\u00e4rend d'Integratioun aktiv ass.", - "title": "Huawei LTE ariichten" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Numm vum Notifikatioun's Service (Restart n\u00e9ideg bei \u00c4nnerung)", - "recipient": "Empf\u00e4nger vun SMS Notifikatioune", - "track_new_devices": "Nei Apparater verfollegen" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/nl.json b/homeassistant/components/huawei_lte/.translations/nl.json deleted file mode 100644 index 297ec922abf..00000000000 --- a/homeassistant/components/huawei_lte/.translations/nl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dit apparaat is reeds geconfigureerd", - "already_in_progress": "Dit apparaat wordt al geconfigureerd", - "not_huawei_lte": "Geen Huawei LTE-apparaat" - }, - "error": { - "connection_failed": "Verbinding mislukt", - "connection_timeout": "Time-out van de verbinding", - "incorrect_password": "Onjuist wachtwoord", - "incorrect_username": "Onjuiste gebruikersnaam", - "incorrect_username_or_password": "Onjuiste gebruikersnaam of wachtwoord", - "invalid_url": "Ongeldige URL", - "login_attempts_exceeded": "Maximale aanmeldingspogingen overschreden, probeer het later opnieuw.", - "response_error": "Onbekende fout van het apparaat", - "unknown_connection_error": "Onbekende fout bij verbinden met apparaat" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "url": "URL", - "username": "Gebruikersnaam" - }, - "description": "Voer de toegangsgegevens van het apparaat in. Opgeven van gebruikersnaam en wachtwoord is optioneel, maar biedt ondersteuning voor meer integratiefuncties. Aan de andere kant kan het gebruik van een geautoriseerde verbinding problemen veroorzaken bij het openen van het webinterface van het apparaat buiten de Home Assitant, terwijl de integratie actief is en andersom.", - "title": "Configureer Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Naam meldingsservice (wijziging vereist opnieuw opstarten)", - "recipient": "Ontvangers van sms-berichten", - "track_new_devices": "Volg nieuwe apparaten" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/nn.json b/homeassistant/components/huawei_lte/.translations/nn.json deleted file mode 100644 index 1a5c63f10f8..00000000000 --- a/homeassistant/components/huawei_lte/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Huawei LTE" - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/no.json b/homeassistant/components/huawei_lte/.translations/no.json deleted file mode 100644 index 606f6f96375..00000000000 --- a/homeassistant/components/huawei_lte/.translations/no.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne enheten er allerede konfigurert", - "already_in_progress": "Denne enheten blir allerede konfigurert", - "not_huawei_lte": "Ikke en Huawei LTE-enhet" - }, - "error": { - "connection_failed": "Tilkoblingen mislyktes", - "connection_timeout": "Tilkoblingsavbrudd", - "incorrect_password": "feil passord", - "incorrect_username": "Feil brukernavn", - "incorrect_username_or_password": "Feil brukernavn eller passord", - "invalid_url": "Ugyldig URL-adresse", - "login_attempts_exceeded": "Maksimalt antall p\u00e5loggingsfors\u00f8k er overskredet, vennligst pr\u00f8v igjen senere", - "response_error": "Ukjent feil fra enheten", - "unknown_connection_error": "Ukjent feil under tilkobling til enhet" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "url": "", - "username": "Brukernavn" - }, - "description": "Angi detaljer for enhetstilgang. Angivelse av brukernavn og passord er valgfritt, men gir st\u00f8tte for flere integreringsfunksjoner. P\u00e5 den annen side kan bruk av en autorisert tilkobling f\u00f8re til problemer med tilgang til enhetens webgrensesnitt utenfor Home Assistant mens integreringen er aktiv, og omvendt.", - "title": "Konfigurer Huawei LTE" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Navn p\u00e5 varslingstjeneste (endring krever omstart)", - "recipient": "Mottakere av SMS-varsling", - "track_new_devices": "Spor nye enheter" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/pl.json b/homeassistant/components/huawei_lte/.translations/pl.json deleted file mode 100644 index 17e4f7b8ef2..00000000000 --- a/homeassistant/components/huawei_lte/.translations/pl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "already_in_progress": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "not_huawei_lte": "To nie jest urz\u0105dzenie Huawei LTE" - }, - "error": { - "connection_failed": "Po\u0142\u0105czenie nie powiod\u0142o si\u0119", - "connection_timeout": "Przekroczono limit czasu pr\u00f3by po\u0142\u0105czenia.", - "incorrect_password": "Nieprawid\u0142owe has\u0142o", - "incorrect_username": "Nieprawid\u0142owa nazwa u\u017cytkownika", - "incorrect_username_or_password": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o", - "invalid_url": "Nieprawid\u0142owy URL", - "login_attempts_exceeded": "Przekroczono maksymaln\u0105 liczb\u0119 pr\u00f3b logowania. Spr\u00f3buj ponownie p\u00f3\u017aniej.", - "response_error": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d w urz\u0105dzeniu.", - "unknown_connection_error": "Nieznany b\u0142\u0105d podczas \u0142\u0105czenia z urz\u0105dzeniem" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "url": "URL", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Wprowad\u017a szczeg\u00f3\u0142y dost\u0119pu do urz\u0105dzenia. Okre\u015blenie nazwy u\u017cytkownika i has\u0142a jest opcjonalne, ale umo\u017cliwia obs\u0142ug\u0119 wi\u0119kszej liczby funkcji integracji. Z drugiej strony u\u017cycie autoryzowanego po\u0142\u0105czenia mo\u017ce powodowa\u0107 problemy z dost\u0119pem do interfejsu internetowego urz\u0105dzenia z zewn\u0105trz Home Assistant'a gdy integracja jest aktywna.", - "title": "Konfiguracja Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Nazwa us\u0142ugi powiadomie\u0144 (zmiana wymaga ponownego uruchomienia)", - "recipient": "Odbiorcy powiadomie\u0144 SMS", - "track_new_devices": "\u015aled\u017a nowe urz\u0105dzenia" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/pt.json b/homeassistant/components/huawei_lte/.translations/pt.json deleted file mode 100644 index 6e3a06ac662..00000000000 --- a/homeassistant/components/huawei_lte/.translations/pt.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este dispositivo j\u00e1 foi configurado", - "already_in_progress": "Este dispositivo j\u00e1 est\u00e1 a ser configurado" - }, - "error": { - "incorrect_password": "Palavra-passe incorreta", - "incorrect_username": "Nome de Utilizador incorreto", - "incorrect_username_or_password": "Nome de utilizador ou palavra passe incorretos" - }, - "step": { - "user": { - "data": { - "password": "Palavra-passe", - "url": "", - "username": "Utilizador" - }, - "title": "Configurar o Huawei LTE" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "recipient": "Destinat\u00e1rios de notifica\u00e7\u00e3o por SMS", - "track_new_devices": "Seguir novos dispositivos" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/ru.json b/homeassistant/components/huawei_lte/.translations/ru.json deleted file mode 100644 index c7c9e2033ef..00000000000 --- a/homeassistant/components/huawei_lte/.translations/ru.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "not_huawei_lte": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c Huawei LTE" - }, - "error": { - "connection_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", - "connection_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", - "incorrect_password": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c.", - "incorrect_username": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d.", - "incorrect_username_or_password": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", - "invalid_url": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 URL-\u0430\u0434\u0440\u0435\u0441.", - "login_attempts_exceeded": "\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0445\u043e\u0434\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.", - "response_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.", - "unknown_connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "url": "URL-\u0430\u0434\u0440\u0435\u0441", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u0438\u0437 Home Assistant, \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.", - "title": "Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 (\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a)", - "recipient": "\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 SMS-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439", - "track_new_devices": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/sl.json b/homeassistant/components/huawei_lte/.translations/sl.json deleted file mode 100644 index c2d7e0bd983..00000000000 --- a/homeassistant/components/huawei_lte/.translations/sl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta naprava je \u017ee konfigurirana", - "already_in_progress": "Ta naprava se \u017ee nastavlja", - "not_huawei_lte": "Ni naprava Huawei LTE" - }, - "error": { - "connection_failed": "Povezava ni uspela", - "connection_timeout": "\u010casovna omejitev povezave", - "incorrect_password": "Nepravilno geslo", - "incorrect_username": "Nepravilno uporabni\u0161ko ime", - "incorrect_username_or_password": "Nepravilno uporabni\u0161ko ime ali geslo", - "invalid_url": "Neveljaven URL", - "login_attempts_exceeded": "Najve\u010d poskusov prijave prese\u017eeno, prosimo, poskusite znova pozneje", - "response_error": "Neznana napaka iz naprave", - "unknown_connection_error": "Neznana napaka pri povezovanju z napravo" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "url": "URL", - "username": "Uporabni\u0161ko ime" - }, - "description": "Vnesite podatke za dostop do naprave. Dolo\u010danje uporabni\u0161kega imena in gesla je izbirno, vendar omogo\u010da podporo za ve\u010d funkcij integracije. Po drugi strani pa lahko uporaba poobla\u0161\u010dene povezave povzro\u010di te\u017eave pri dostopu do spletnega vmesnika naprave zunaj Home Assistant-a, medtem ko je integracija aktivna, in obratno.", - "title": "Konfigurirajte Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Ime storitve obve\u0161\u010danja (sprememba zahteva ponovni zagon)", - "recipient": "Prejemniki obvestil SMS", - "track_new_devices": "Sledi novim napravam" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/sv.json b/homeassistant/components/huawei_lte/.translations/sv.json deleted file mode 100644 index 16b192d16a1..00000000000 --- a/homeassistant/components/huawei_lte/.translations/sv.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den h\u00e4r enheten har redan konfigurerats", - "already_in_progress": "Den h\u00e4r enheten har redan konfigurerats", - "not_huawei_lte": "Inte en Huawei LTE-enhet" - }, - "error": { - "connection_failed": "Anslutningen misslyckades", - "connection_timeout": "Timeout f\u00f6r anslutning", - "incorrect_password": "Felaktigt l\u00f6senord", - "incorrect_username": "Felaktigt anv\u00e4ndarnamn", - "incorrect_username_or_password": "Felaktigt anv\u00e4ndarnamn eller l\u00f6senord", - "invalid_url": "Ogiltig URL", - "login_attempts_exceeded": "Maximala inloggningsf\u00f6rs\u00f6k har \u00f6verskridits, f\u00f6rs\u00f6k igen senare", - "response_error": "Ok\u00e4nt fel fr\u00e5n enheten", - "unknown_connection_error": "Ok\u00e4nt fel vid anslutning till enheten" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "url": "URL", - "username": "Anv\u00e4ndarnamn" - }, - "description": "Ange information om enhets\u00e5tkomst. Det \u00e4r valfritt att ange anv\u00e4ndarnamn och l\u00f6senord, men st\u00f6djer d\u00e5 fler integrationsfunktioner. \u00c5 andra sidan kan anv\u00e4ndning av en auktoriserad anslutning orsaka problem med att komma \u00e5t enhetens webbgr\u00e4nssnitt utanf\u00f6r Home Assistant medan integrationen \u00e4r aktiv och tv\u00e4rtom.", - "title": "Konfigurera Huawei LTE" - } - }, - "title": "Huawei LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "Namn p\u00e5 meddelandetj\u00e4nsten (\u00e4ndring kr\u00e4ver omstart)", - "recipient": "Mottagare av SMS-meddelanden", - "track_new_devices": "Sp\u00e5ra nya enheter" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/zh-Hant.json b/homeassistant/components/huawei_lte/.translations/zh-Hant.json deleted file mode 100644 index 201e9afec4b..00000000000 --- a/homeassistant/components/huawei_lte/.translations/zh-Hant.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "\u6b64\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "not_huawei_lte": "\u4e26\u975e\u83ef\u70ba LTE \u8a2d\u5099" - }, - "error": { - "connection_failed": "\u9023\u7dda\u5931\u6557", - "connection_timeout": "\u9023\u7dda\u903e\u6642", - "incorrect_password": "\u5bc6\u78bc\u932f\u8aa4", - "incorrect_username": "\u4f7f\u7528\u8005\u540d\u7a31\u932f\u8aa4", - "incorrect_username_or_password": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u932f\u8aa4", - "invalid_url": "\u7db2\u5740\u7121\u6548", - "login_attempts_exceeded": "\u5df2\u9054\u5617\u8a66\u767b\u5165\u6700\u5927\u6b21\u6578\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66", - "response_error": "\u4f86\u81ea\u8a2d\u5099\u672a\u77e5\u932f\u8aa4", - "unknown_connection_error": "\u9023\u7dda\u81f3\u8a2d\u5099\u672a\u77e5\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "url": "\u7db2\u5740", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u8f38\u5165\u8a2d\u5099\u5b58\u53d6\u8a73\u7d30\u8cc7\u6599\u3002\u6307\u5b9a\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc\u70ba\u9078\u9805\u8f38\u5165\uff0c\u4f46\u958b\u555f\u5c07\u652f\u63f4\u66f4\u591a\u6574\u5408\u529f\u80fd\u3002\u6b64\u5916\uff0c\u4f7f\u7528\u6388\u6b0a\u9023\u7dda\uff0c\u53ef\u80fd\u5c0e\u81f4\u6574\u5408\u555f\u7528\u5f8c\uff0c\u7531\u5916\u90e8\u9023\u7dda\u81f3 Home Assistant \u8a2d\u5099 Web \u4ecb\u9762\u51fa\u73fe\u67d0\u4e9b\u554f\u984c\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002", - "title": "\u8a2d\u5b9a\u83ef\u70ba LTE" - } - }, - "title": "\u83ef\u70ba LTE" - }, - "options": { - "step": { - "init": { - "data": { - "name": "\u901a\u77e5\u670d\u52d9\u540d\u7a31\uff08\u8b8a\u66f4\u5f8c\u9700\u91cd\u555f\uff09", - "recipient": "\u7c21\u8a0a\u901a\u77e5\u6536\u4ef6\u8005", - "track_new_devices": "\u8ffd\u8e64\u65b0\u8a2d\u5099" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/__init__.py b/homeassistant/components/huawei_lte/__init__.py index 5d618c1fdb5..272efa5d722 100644 --- a/homeassistant/components/huawei_lte/__init__.py +++ b/homeassistant/components/huawei_lte/__init__.py @@ -600,7 +600,6 @@ class HuaweiLteBaseEntity(Entity): async def async_update_options(self, config_entry: ConfigEntry) -> None: """Update config entry options.""" - pass async def async_added_to_hass(self) -> None: """Connect to update signals.""" diff --git a/homeassistant/components/huawei_lte/manifest.json b/homeassistant/components/huawei_lte/manifest.json index 262ee118e0f..e1e91c08e9a 100644 --- a/homeassistant/components/huawei_lte/manifest.json +++ b/homeassistant/components/huawei_lte/manifest.json @@ -4,7 +4,7 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/huawei_lte", "requirements": [ - "getmac==0.8.1", + "getmac==0.8.2", "huawei-lte-api==1.4.11", "stringcase==1.2.0", "url-normalize==1.4.1" @@ -15,6 +15,5 @@ "manufacturer": "Huawei" } ], - "dependencies": [], "codeowners": ["@scop"] } diff --git a/homeassistant/components/huawei_lte/strings.json b/homeassistant/components/huawei_lte/strings.json index c5f2b4a2a02..e3a89b8f418 100644 --- a/homeassistant/components/huawei_lte/strings.json +++ b/homeassistant/components/huawei_lte/strings.json @@ -1,43 +1,42 @@ { - "config": { - "abort": { - "already_configured": "This device has already been configured", - "already_in_progress": "This device is already being configured", - "not_huawei_lte": "Not a Huawei LTE device" - }, - "error": { - "connection_failed": "Connection failed", - "connection_timeout": "Connection timeout", - "incorrect_password": "Incorrect password", - "incorrect_username": "Incorrect username", - "incorrect_username_or_password": "Incorrect username or password", - "invalid_url": "Invalid URL", - "login_attempts_exceeded": "Maximum login attempts exceeded, please try again later", - "response_error": "Unknown error from device", - "unknown_connection_error": "Unknown error connecting to device" - }, - "step": { - "user": { - "data": { - "password": "Password", - "url": "URL", - "username": "User name" - }, - "description": "Enter device access details. Specifying username and password is optional, but enables support for more integration features. On the other hand, use of an authorized connection may cause problems accessing the device web interface from outside Home Assistant while the integration is active, and the other way around.", - "title": "Configure Huawei LTE" - } - }, - "title": "Huawei LTE" + "config": { + "abort": { + "already_configured": "This device has already been configured", + "already_in_progress": "This device is already being configured", + "not_huawei_lte": "Not a Huawei LTE device" }, - "options": { - "step": { - "init": { - "data": { - "name": "Notification service name (change requires restart)", - "recipient": "SMS notification recipients", - "track_new_devices": "Track new devices" - } - } - } + "error": { + "connection_failed": "Connection failed", + "connection_timeout": "Connection timeout", + "incorrect_password": "Incorrect password", + "incorrect_username": "Incorrect username", + "incorrect_username_or_password": "Incorrect username or password", + "invalid_url": "Invalid URL", + "login_attempts_exceeded": "Maximum login attempts exceeded, please try again later", + "response_error": "Unknown error from device", + "unknown_connection_error": "Unknown error connecting to device" + }, + "step": { + "user": { + "data": { + "password": "Password", + "url": "URL", + "username": "User name" + }, + "description": "Enter device access details. Specifying username and password is optional, but enables support for more integration features. On the other hand, use of an authorized connection may cause problems accessing the device web interface from outside Home Assistant while the integration is active, and the other way around.", + "title": "Configure Huawei LTE" + } } -} \ No newline at end of file + }, + "options": { + "step": { + "init": { + "data": { + "name": "Notification service name (change requires restart)", + "recipient": "SMS notification recipients", + "track_new_devices": "Track new devices" + } + } + } + } +} diff --git a/homeassistant/components/huawei_lte/translations/bg.json b/homeassistant/components/huawei_lte/translations/bg.json new file mode 100644 index 00000000000..5c765c83bb9 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/bg.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", + "already_in_progress": "\u0422\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0435\u0447\u0435 \u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430", + "not_huawei_lte": "\u041d\u0435 \u0435 Huawei LTE \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "error": { + "connection_failed": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e", + "connection_timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438\u0437\u0442\u0435\u0447\u0435", + "incorrect_password": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430", + "incorrect_username": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", + "incorrect_username_or_password": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430", + "invalid_url": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u0430\u0434\u0440\u0435\u0441", + "login_attempts_exceeded": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0438\u0442\u0435 \u043e\u043f\u0438\u0442\u0438 \u0437\u0430 \u0432\u043b\u0438\u0437\u0430\u043d\u0435 \u0441\u0430 \u043d\u0430\u0434\u0432\u0438\u0448\u0435\u043d\u0438. \u041c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043f\u043e-\u043a\u044a\u0441\u043d\u043e", + "response_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e", + "unknown_connection_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "url": "URL \u0410\u0434\u0440\u0435\u0441", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e. \u041f\u043e\u0441\u043e\u0447\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430 \u043d\u0435 \u0435 \u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e, \u043d\u043e \u0434\u0430\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430\u043d\u0435. \u041e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0430, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438 \u0441 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u0443\u0435\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043e\u0442\u0432\u044a\u043d Home Assistant, \u0434\u043e\u043a\u0430\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0442\u043e.", + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "recipient": "\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 SMS \u0438\u0437\u0432\u0435\u0441\u0442\u0438\u044f", + "track_new_devices": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/ca.json b/homeassistant/components/huawei_lte/translations/ca.json new file mode 100644 index 00000000000..762132a459a --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/ca.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest dispositiu ja est\u00e0 configurat", + "already_in_progress": "Aquest dispositiu ja s'est\u00e0 configurant", + "not_huawei_lte": "No \u00e9s un dispositiu Huawei LTE" + }, + "error": { + "connection_failed": "La connexi\u00f3 ha fallat", + "connection_timeout": "S'ha acabat el temps d'espera de la connexi\u00f3", + "incorrect_password": "Contrasenya incorrecta", + "incorrect_username": "Nom d'usuari incorrecte", + "incorrect_username_or_password": "Nom d'usuari o contrasenya incorrectes", + "invalid_url": "URL inv\u00e0lid", + "login_attempts_exceeded": "Nombre m\u00e0xim d'intents d'inici de sessi\u00f3 superat, torna-ho a provar m\u00e9s tard", + "response_error": "S'ha produ\u00eft un error desconegut del dispositiu", + "unknown_connection_error": "S'ha produ\u00eft un error desconegut en connectar-se al dispositiu" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "url": "URL", + "username": "Nom d'usuari" + }, + "description": "Introdueix les dades d\u2019acc\u00e9s del dispositiu. El nom d\u2019usuari i contrasenya s\u00f3n opcionals, per\u00f2 habiliten m\u00e9s funcions de la integraci\u00f3. D'altra banda, (mentre la integraci\u00f3 estigui activa) l'\u00fas d'una connexi\u00f3 autoritzada pot causar problemes per accedir a la interf\u00edcie web del dispositiu des de fora de Home Assistant i viceversa.", + "title": "Configuraci\u00f3 de Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Nom del servei de notificacions (reinici necessari si canvia)", + "recipient": "Destinataris de notificacions SMS", + "track_new_devices": "Segueix dispositius nous" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/cs.json b/homeassistant/components/huawei_lte/translations/cs.json new file mode 100644 index 00000000000..6ba708f2b0e --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/cs.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "already_configured": "Toto za\u0159\u00edzen\u00ed je ji\u017e nakonfigurov\u00e1no" + }, + "error": { + "connection_failed": "P\u0159ipojen\u00ed se nezda\u0159ilo", + "incorrect_password": "Nespr\u00e1vn\u00e9 heslo", + "incorrect_username": "Nespr\u00e1vn\u00e9 u\u017eivatelsk\u00e9 jm\u00e9no", + "incorrect_username_or_password": "Nespr\u00e1vn\u00e9 u\u017eivatelsk\u00e9 jm\u00e9no \u010di heslo", + "invalid_url": "Neplatn\u00e1 adresa URL", + "login_attempts_exceeded": "Maxim\u00e1ln\u00ed pokus o p\u0159ihl\u00e1\u0161en\u00ed byl p\u0159ekro\u010den, zkuste to znovu pozd\u011bji", + "response_error": "Nezn\u00e1m\u00e1 chyba ze za\u0159\u00edzen\u00ed", + "unknown_connection_error": "Nezn\u00e1m\u00e1 chyba p\u0159i p\u0159ipojov\u00e1n\u00ed k za\u0159\u00edzen\u00ed" + }, + "step": { + "user": { + "data": { + "password": "Heslo", + "url": "URL", + "username": "U\u017eivatelsk\u00e9 jm\u00e9no" + }, + "title": "Konfigurovat Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "recipient": "P\u0159\u00edjemci ozn\u00e1men\u00ed SMS", + "track_new_devices": "Sledovat nov\u00e1 za\u0159\u00edzen\u00ed" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/da.json b/homeassistant/components/huawei_lte/translations/da.json new file mode 100644 index 00000000000..e07499b0073 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/da.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Denne enhed er allerede konfigureret", + "already_in_progress": "Denne enhed er allerede ved at blive konfigureret", + "not_huawei_lte": "Ikke en Huawei LTE-enhed" + }, + "error": { + "connection_failed": "Forbindelsen mislykkedes", + "connection_timeout": "Timeout for forbindelse", + "incorrect_password": "Forkert adgangskode", + "incorrect_username": "Forkert brugernavn", + "incorrect_username_or_password": "Forkert brugernavn eller adgangskode", + "invalid_url": "Ugyldig webadresse", + "login_attempts_exceeded": "Maksimale loginfors\u00f8g overskredet. Pr\u00f8v igen senere", + "response_error": "Ukendt fejl fra enheden", + "unknown_connection_error": "Ukendt fejl ved tilslutning til enheden" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "url": "Webadresse", + "username": "Brugernavn" + }, + "description": "Indtast oplysninger om enhedsadgang. Det er valgfrit at specificere brugernavn og adgangskode, men muligg\u00f8r underst\u00f8ttelse af flere integrationsfunktioner. P\u00e5 den anden side kan brug af en autoriseret forbindelse for\u00e5rsage problemer med at f\u00e5 adgang til enhedens webgr\u00e6nseflade uden for Home Assistant, mens integrationen er aktiv, og omvendt.", + "title": "Konfigurer Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Navn p\u00e5 meddelelsestjeneste (\u00e6ndring kr\u00e6ver genstart)", + "recipient": "Modtagere af SMS-meddelelse", + "track_new_devices": "Spor nye enheder" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/de.json b/homeassistant/components/huawei_lte/translations/de.json new file mode 100644 index 00000000000..d3a9aa3efbc --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/de.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses Ger\u00e4t wurde bereits konfiguriert", + "already_in_progress": "Dieses Ger\u00e4t wurde bereits konfiguriert", + "not_huawei_lte": "Kein Huawei LTE-Ger\u00e4t" + }, + "error": { + "connection_failed": "Verbindung fehlgeschlagen.", + "connection_timeout": "Verbindungszeit\u00fcberschreitung", + "incorrect_password": "Ung\u00fcltiges Passwort", + "incorrect_username": "Ung\u00fcltiger Benutzername", + "incorrect_username_or_password": "Ung\u00fcltiger Benutzername oder Kennwort", + "invalid_url": "Ung\u00fcltige URL", + "login_attempts_exceeded": "Maximale Anzahl von Anmeldeversuchen \u00fcberschritten. Bitte versuche es sp\u00e4ter erneut", + "response_error": "Unbekannter Fehler vom Ger\u00e4t", + "unknown_connection_error": "Unbekannter Fehler beim Herstellen der Verbindung zum Ger\u00e4t" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "url": "URL", + "username": "Benutzername" + }, + "description": "Gib die Zugangsdaten zum Ger\u00e4t ein. Die Angabe von Benutzername und Passwort ist optional, erm\u00f6glicht aber die Unterst\u00fctzung weiterer Integrationsfunktionen. Andererseits kann die Verwendung einer autorisierten Verbindung zu Problemen beim Zugriff auf die Web-Schnittstelle des Ger\u00e4ts von au\u00dferhalb des Home Assistant f\u00fchren, w\u00e4hrend die Integration aktiv ist, und umgekehrt.", + "title": "Konfiguriere Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Name des Benachrichtigungsdienstes (\u00c4nderung erfordert Neustart)", + "recipient": "SMS-Benachrichtigungsempf\u00e4nger", + "track_new_devices": "Neue Ger\u00e4te verfolgen" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/en.json b/homeassistant/components/huawei_lte/translations/en.json new file mode 100644 index 00000000000..3a66c447e54 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/en.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "This device has already been configured", + "already_in_progress": "This device is already being configured", + "not_huawei_lte": "Not a Huawei LTE device" + }, + "error": { + "connection_failed": "Connection failed", + "connection_timeout": "Connection timeout", + "incorrect_password": "Incorrect password", + "incorrect_username": "Incorrect username", + "incorrect_username_or_password": "Incorrect username or password", + "invalid_url": "Invalid URL", + "login_attempts_exceeded": "Maximum login attempts exceeded, please try again later", + "response_error": "Unknown error from device", + "unknown_connection_error": "Unknown error connecting to device" + }, + "step": { + "user": { + "data": { + "password": "Password", + "url": "URL", + "username": "User name" + }, + "description": "Enter device access details. Specifying username and password is optional, but enables support for more integration features. On the other hand, use of an authorized connection may cause problems accessing the device web interface from outside Home Assistant while the integration is active, and the other way around.", + "title": "Configure Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Notification service name (change requires restart)", + "recipient": "SMS notification recipients", + "track_new_devices": "Track new devices" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/es.json b/homeassistant/components/huawei_lte/translations/es.json new file mode 100644 index 00000000000..495ddb81bc3 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/es.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Este dispositivo ya ha sido configurado", + "already_in_progress": "Este dispositivo ya se est\u00e1 configurando", + "not_huawei_lte": "No es un dispositivo Huawei LTE" + }, + "error": { + "connection_failed": "Fallo de conexi\u00f3n", + "connection_timeout": "Tiempo de espera de la conexi\u00f3n superado", + "incorrect_password": "Contrase\u00f1a incorrecta", + "incorrect_username": "Nombre de usuario incorrecto", + "incorrect_username_or_password": "Nombre de usuario o contrase\u00f1a incorrectos", + "invalid_url": "URL no v\u00e1lida", + "login_attempts_exceeded": "Se han superado los intentos de inicio de sesi\u00f3n m\u00e1ximos, int\u00e9ntelo de nuevo m\u00e1s tarde.", + "response_error": "Error desconocido del dispositivo", + "unknown_connection_error": "Error desconocido al conectarse al dispositivo" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "url": "URL", + "username": "Nombre de usuario" + }, + "description": "Introduzca los detalles de acceso al dispositivo. La especificaci\u00f3n del nombre de usuario y la contrase\u00f1a es opcional, pero permite admitir m\u00e1s funciones de integraci\u00f3n. Por otro lado, el uso de una conexi\u00f3n autorizada puede causar problemas para acceder a la interfaz web del dispositivo desde fuera de Home Assistant mientras la integraci\u00f3n est\u00e1 activa, y viceversa.", + "title": "Configurar Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Nombre del servicio de notificaci\u00f3n", + "recipient": "Destinatarios de notificaciones por SMS", + "track_new_devices": "Rastrea nuevos dispositivos" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/fr.json b/homeassistant/components/huawei_lte/translations/fr.json new file mode 100644 index 00000000000..39e8b1045b5 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/fr.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Cet appareil est d\u00e9j\u00e0 configur\u00e9", + "already_in_progress": "Ce p\u00e9riph\u00e9rique est d\u00e9j\u00e0 en cours de configuration", + "not_huawei_lte": "Pas un appareil Huawei LTE" + }, + "error": { + "connection_failed": "La connexion a \u00e9chou\u00e9", + "connection_timeout": "D\u00e9lai de connexion d\u00e9pass\u00e9", + "incorrect_password": "Mot de passe incorrect", + "incorrect_username": "Nom d'utilisateur incorrect", + "incorrect_username_or_password": "identifiant ou mot de passe incorrect", + "invalid_url": "URL invalide", + "login_attempts_exceeded": "Nombre maximal de tentatives de connexion d\u00e9pass\u00e9, veuillez r\u00e9essayer ult\u00e9rieurement", + "response_error": "Erreur inconnue de l'appareil", + "unknown_connection_error": "Erreur inconnue lors de la connexion \u00e0 l'appareil" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "url": "URL", + "username": "Nom d'utilisateur" + }, + "description": "Entrez les d\u00e9tails d'acc\u00e8s au p\u00e9riph\u00e9rique. La sp\u00e9cification du nom d'utilisateur et du mot de passe est facultative, mais permet de prendre en charge davantage de fonctionnalit\u00e9s d'int\u00e9gration. En revanche, l\u2019utilisation d\u2019une connexion autoris\u00e9e peut entra\u00eener des probl\u00e8mes d\u2019acc\u00e8s \u00e0 l\u2019interface Web du p\u00e9riph\u00e9rique depuis l\u2019assistant externe lorsque l\u2019int\u00e9gration est active et inversement.", + "title": "Configurer Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Nom du service de notification (red\u00e9marrage requis)", + "recipient": "Destinataires des notifications SMS", + "track_new_devices": "Suivre les nouveaux appareils" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/hu.json b/homeassistant/components/huawei_lte/translations/hu.json new file mode 100644 index 00000000000..485a29f5a77 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/hu.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Ez az eszk\u00f6z m\u00e1r konfigur\u00e1lva van", + "already_in_progress": "Ez az eszk\u00f6z m\u00e1r konfigur\u00e1lva van", + "not_huawei_lte": "Nem Huawei LTE eszk\u00f6z" + }, + "error": { + "connection_failed": "Kapcsol\u00f3d\u00e1s sikertelen", + "connection_timeout": "Kapcsolat id\u0151t\u00fall\u00e9p\u00e9se", + "incorrect_password": "Hib\u00e1s jelsz\u00f3", + "incorrect_username": "Helytelen felhaszn\u00e1l\u00f3n\u00e9v", + "incorrect_username_or_password": "Helytelen felhaszn\u00e1l\u00f3n\u00e9v vagy jelsz\u00f3", + "invalid_url": "\u00c9rv\u00e9nytelen URL" + }, + "step": { + "user": { + "data": { + "password": "Jelsz\u00f3", + "url": "URL", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + }, + "title": "Huawei LTE konfigur\u00e1l\u00e1sa" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "\u00c9rtes\u00edt\u00e9si szolg\u00e1ltat\u00e1s neve (a m\u00f3dos\u00edt\u00e1s \u00fajraind\u00edt\u00e1st ig\u00e9nyel)", + "recipient": "SMS-\u00e9rtes\u00edt\u00e9s c\u00edmzettjei", + "track_new_devices": "\u00daj eszk\u00f6z\u00f6k nyomk\u00f6vet\u00e9se" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/it.json b/homeassistant/components/huawei_lte/translations/it.json new file mode 100644 index 00000000000..9f5a2cf04b2 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/it.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Questo dispositivo \u00e8 gi\u00e0 stato configurato", + "already_in_progress": "Questo dispositivo \u00e8 gi\u00e0 in fase di configurazione", + "not_huawei_lte": "Non \u00e8 un dispositivo Huawei LTE" + }, + "error": { + "connection_failed": "Connessione fallita", + "connection_timeout": "Timeout di connessione", + "incorrect_password": "Password errata", + "incorrect_username": "Nome utente errato", + "incorrect_username_or_password": "Nome utente o password errati", + "invalid_url": "URL non valido", + "login_attempts_exceeded": "Superati i tentativi di accesso massimi, riprovare pi\u00f9 tardi", + "response_error": "Errore sconosciuto dal dispositivo", + "unknown_connection_error": "Errore sconosciuto durante la connessione al dispositivo" + }, + "step": { + "user": { + "data": { + "password": "Password", + "url": "URL", + "username": "Nome utente" + }, + "description": "Immettere i dettagli di accesso al dispositivo. La specifica di nome utente e password \u00e8 facoltativa, ma abilita il supporto per altre funzionalit\u00e0 di integrazione. D'altra parte, l'uso di una connessione autorizzata pu\u00f2 causare problemi di accesso all'interfaccia Web del dispositivo dall'esterno di Home Assistant mentre l'integrazione \u00e8 attiva e viceversa.", + "title": "Configura Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Nome del servizio di notifica (la modifica richiede il riavvio)", + "recipient": "Destinatari della notifica SMS", + "track_new_devices": "Traccia nuovi dispositivi" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/ko.json b/homeassistant/components/huawei_lte/translations/ko.json new file mode 100644 index 00000000000..28885b9435d --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/ko.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "not_huawei_lte": "\ud654\uc6e8\uc774 LTE \uae30\uae30\uac00 \uc544\ub2d8" + }, + "error": { + "connection_failed": "\uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "connection_timeout": "\uc811\uc18d \uc2dc\uac04 \ucd08\uacfc", + "incorrect_password": "\ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "incorrect_username": "\uc0ac\uc6a9\uc790 \uc774\ub984\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "incorrect_username_or_password": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "invalid_url": "URL \uc8fc\uc18c\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "login_attempts_exceeded": "\ucd5c\ub300 \ub85c\uadf8\uc778 \uc2dc\ub3c4 \ud69f\uc218\ub97c \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694", + "response_error": "\uae30\uae30\uc5d0\uc11c \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", + "unknown_connection_error": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\ub294 \uc911 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "url": "URL \uc8fc\uc18c", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "\uae30\uae30 \uc561\uc138\uc2a4 \uc138\ubd80 \uc0ac\ud56d\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694. \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc124\uc815\ud558\ub294 \uac83\uc740 \uc120\ud0dd \uc0ac\ud56d\uc774\uc9c0\ub9cc \ub354 \ub9ce\uc740 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc18\uba74, \uc778\uc99d \ub41c \uc5f0\uacb0\uc744 \uc0ac\uc6a9\ud558\uba74, \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uac00 \ud65c\uc131\ud654 \ub41c \uc0c1\ud0dc\uc5d0\uc11c \ub2e4\ub978 \ubc29\ubc95\uc73c\ub85c Home Assistant \uc758 \uc678\ubd80\uc5d0\uc11c \uae30\uae30\uc758 \uc6f9 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \ub370 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "Huawei LTE \uc124\uc815" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "\uc54c\ub9bc \uc11c\ube44\uc2a4 \uc774\ub984 (\ubcc0\uacbd \uc2dc \ub2e4\uc2dc \uc2dc\uc791\ud574\uc57c \ud568)", + "recipient": "SMS \uc54c\ub9bc \uc218\uc2e0\uc790", + "track_new_devices": "\uc0c8\ub85c\uc6b4 \uae30\uae30 \ucd94\uc801" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/lb.json b/homeassistant/components/huawei_lte/translations/lb.json new file mode 100644 index 00000000000..25846f40b7c --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/lb.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebsen Apparat ass scho konfigur\u00e9iert", + "already_in_progress": "D\u00ebsen Apparat g\u00ebtt scho konfigur\u00e9iert", + "not_huawei_lte": "Ken Huawei LTE Apparat" + }, + "error": { + "connection_failed": "Feeler bei der Verbindung", + "connection_timeout": "Z\u00e4it Iwwerschreidung beim verbannen", + "incorrect_password": "Ong\u00ebltegt Passwuert", + "incorrect_username": "Ong\u00ebltege Benotzernumm", + "incorrect_username_or_password": "Ong\u00ebltege Benotzernumm oder Passwuert", + "invalid_url": "Ong\u00eblteg URL", + "login_attempts_exceeded": "Maximal Login Versich iwwerschratt, w.e.g. m\u00e9i sp\u00e9it nach eng K\u00e9ier", + "response_error": "Onbekannte Feeler vum Apparat", + "unknown_connection_error": "Onbekannte Feeler beim verbannen mam Apparat" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "url": "URL", + "username": "Benotzernumm" + }, + "description": "Gitt Detailer fir den Acc\u00e8s op den Apparat an. Benotzernumm a Passwuert si fakultativ, erm\u00e9iglecht awer d'\u00cbnnerst\u00ebtzung fir m\u00e9i Integratiouns Optiounen. Op der anerer S\u00e4it kann d'Benotzung vun enger autoris\u00e9ierter Verbindung Problemer mam Acc\u00e8s zum Web Interface vum Apparat ausserhalb vum Home Assistant verursaachen, w\u00e4rend d'Integratioun aktiv ass.", + "title": "Huawei LTE ariichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Numm vum Notifikatioun's Service (Restart n\u00e9ideg bei \u00c4nnerung)", + "recipient": "Empf\u00e4nger vun SMS Notifikatioune", + "track_new_devices": "Nei Apparater verfollegen" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/.translations/lv.json b/homeassistant/components/huawei_lte/translations/lv.json similarity index 100% rename from homeassistant/components/huawei_lte/.translations/lv.json rename to homeassistant/components/huawei_lte/translations/lv.json diff --git a/homeassistant/components/huawei_lte/translations/nl.json b/homeassistant/components/huawei_lte/translations/nl.json new file mode 100644 index 00000000000..0a1ebbf2ea2 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/nl.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Dit apparaat is reeds geconfigureerd", + "already_in_progress": "Dit apparaat wordt al geconfigureerd", + "not_huawei_lte": "Geen Huawei LTE-apparaat" + }, + "error": { + "connection_failed": "Verbinding mislukt", + "connection_timeout": "Time-out van de verbinding", + "incorrect_password": "Onjuist wachtwoord", + "incorrect_username": "Onjuiste gebruikersnaam", + "incorrect_username_or_password": "Onjuiste gebruikersnaam of wachtwoord", + "invalid_url": "Ongeldige URL", + "login_attempts_exceeded": "Maximale aanmeldingspogingen overschreden, probeer het later opnieuw.", + "response_error": "Onbekende fout van het apparaat", + "unknown_connection_error": "Onbekende fout bij verbinden met apparaat" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "url": "URL", + "username": "Gebruikersnaam" + }, + "description": "Voer de toegangsgegevens van het apparaat in. Opgeven van gebruikersnaam en wachtwoord is optioneel, maar biedt ondersteuning voor meer integratiefuncties. Aan de andere kant kan het gebruik van een geautoriseerde verbinding problemen veroorzaken bij het openen van het webinterface van het apparaat buiten de Home Assitant, terwijl de integratie actief is en andersom.", + "title": "Configureer Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Naam meldingsservice (wijziging vereist opnieuw opstarten)", + "recipient": "Ontvangers van sms-berichten", + "track_new_devices": "Volg nieuwe apparaten" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/nn.json b/homeassistant/components/huawei_lte/translations/nn.json new file mode 100644 index 00000000000..ea06e4158e9 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Huawei LTE" +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/no.json b/homeassistant/components/huawei_lte/translations/no.json new file mode 100644 index 00000000000..77c212c10b8 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/no.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Denne enheten er allerede konfigurert", + "already_in_progress": "Denne enheten blir allerede konfigurert", + "not_huawei_lte": "Ikke en Huawei LTE-enhet" + }, + "error": { + "connection_failed": "Tilkoblingen mislyktes", + "connection_timeout": "Tilkoblingsavbrudd", + "incorrect_password": "feil passord", + "incorrect_username": "Feil brukernavn", + "incorrect_username_or_password": "Feil brukernavn eller passord", + "invalid_url": "Ugyldig URL-adresse", + "login_attempts_exceeded": "Maksimalt antall p\u00e5loggingsfors\u00f8k er overskredet, vennligst pr\u00f8v igjen senere", + "response_error": "Ukjent feil fra enheten", + "unknown_connection_error": "Ukjent feil under tilkobling til enhet" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "url": "", + "username": "Brukernavn" + }, + "description": "Angi detaljer for enhetstilgang. Angivelse av brukernavn og passord er valgfritt, men gir st\u00f8tte for flere integreringsfunksjoner. P\u00e5 den annen side kan bruk av en autorisert tilkobling f\u00f8re til problemer med tilgang til enhetens webgrensesnitt utenfor Home Assistant mens integreringen er aktiv, og omvendt.", + "title": "Konfigurer Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Navn p\u00e5 varslingstjeneste (endring krever omstart)", + "recipient": "Mottakere av SMS-varsling", + "track_new_devices": "Spor nye enheter" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/pl.json b/homeassistant/components/huawei_lte/translations/pl.json new file mode 100644 index 00000000000..86e6e4e5853 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/pl.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "already_in_progress": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "not_huawei_lte": "To nie jest urz\u0105dzenie Huawei LTE" + }, + "error": { + "connection_failed": "Po\u0142\u0105czenie nie powiod\u0142o si\u0119", + "connection_timeout": "Przekroczono limit czasu pr\u00f3by po\u0142\u0105czenia.", + "incorrect_password": "Nieprawid\u0142owe has\u0142o", + "incorrect_username": "Nieprawid\u0142owa nazwa u\u017cytkownika", + "incorrect_username_or_password": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o", + "invalid_url": "Nieprawid\u0142owy URL", + "login_attempts_exceeded": "Przekroczono maksymaln\u0105 liczb\u0119 pr\u00f3b logowania. Spr\u00f3buj ponownie p\u00f3\u017aniej.", + "response_error": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d w urz\u0105dzeniu.", + "unknown_connection_error": "Nieznany b\u0142\u0105d podczas \u0142\u0105czenia z urz\u0105dzeniem" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "url": "URL", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Wprowad\u017a szczeg\u00f3\u0142y dost\u0119pu do urz\u0105dzenia. Okre\u015blenie nazwy u\u017cytkownika i has\u0142a jest opcjonalne, ale umo\u017cliwia obs\u0142ug\u0119 wi\u0119kszej liczby funkcji integracji. Z drugiej strony u\u017cycie autoryzowanego po\u0142\u0105czenia mo\u017ce powodowa\u0107 problemy z dost\u0119pem do interfejsu internetowego urz\u0105dzenia z zewn\u0105trz Home Assistant'a gdy integracja jest aktywna.", + "title": "Konfiguracja Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Nazwa us\u0142ugi powiadomie\u0144 (zmiana wymaga ponownego uruchomienia)", + "recipient": "Odbiorcy powiadomie\u0144 SMS", + "track_new_devices": "\u015aled\u017a nowe urz\u0105dzenia" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/pt.json b/homeassistant/components/huawei_lte/translations/pt.json new file mode 100644 index 00000000000..a71678deecc --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/pt.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Este dispositivo j\u00e1 foi configurado", + "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" + }, + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "url": "", + "username": "Nome do utilizador" + }, + "title": "Configurar o Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "recipient": "Destinat\u00e1rios de notifica\u00e7\u00e3o por SMS", + "track_new_devices": "Seguir novos dispositivos" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/ru.json b/homeassistant/components/huawei_lte/translations/ru.json new file mode 100644 index 00000000000..6e4c34c095d --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/ru.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "not_huawei_lte": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c Huawei LTE" + }, + "error": { + "connection_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", + "connection_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", + "incorrect_password": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c.", + "incorrect_username": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d.", + "incorrect_username_or_password": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", + "invalid_url": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 URL-\u0430\u0434\u0440\u0435\u0441.", + "login_attempts_exceeded": "\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0445\u043e\u0434\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.", + "response_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.", + "unknown_connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "url": "URL-\u0430\u0434\u0440\u0435\u0441", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u0438\u0437 Home Assistant, \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.", + "title": "Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 (\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a)", + "recipient": "\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 SMS-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439", + "track_new_devices": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/sl.json b/homeassistant/components/huawei_lte/translations/sl.json new file mode 100644 index 00000000000..fe4a8db5d06 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/sl.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Ta naprava je \u017ee konfigurirana", + "already_in_progress": "Ta naprava se \u017ee nastavlja", + "not_huawei_lte": "Ni naprava Huawei LTE" + }, + "error": { + "connection_failed": "Povezava ni uspela", + "connection_timeout": "\u010casovna omejitev povezave", + "incorrect_password": "Nepravilno geslo", + "incorrect_username": "Nepravilno uporabni\u0161ko ime", + "incorrect_username_or_password": "Nepravilno uporabni\u0161ko ime ali geslo", + "invalid_url": "Neveljaven URL", + "login_attempts_exceeded": "Najve\u010d poskusov prijave prese\u017eeno, prosimo, poskusite znova pozneje", + "response_error": "Neznana napaka iz naprave", + "unknown_connection_error": "Neznana napaka pri povezovanju z napravo" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "url": "URL", + "username": "Uporabni\u0161ko ime" + }, + "description": "Vnesite podatke za dostop do naprave. Dolo\u010danje uporabni\u0161kega imena in gesla je izbirno, vendar omogo\u010da podporo za ve\u010d funkcij integracije. Po drugi strani pa lahko uporaba poobla\u0161\u010dene povezave povzro\u010di te\u017eave pri dostopu do spletnega vmesnika naprave zunaj Home Assistant-a, medtem ko je integracija aktivna, in obratno.", + "title": "Konfigurirajte Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Ime storitve obve\u0161\u010danja (sprememba zahteva ponovni zagon)", + "recipient": "Prejemniki obvestil SMS", + "track_new_devices": "Sledi novim napravam" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/sv.json b/homeassistant/components/huawei_lte/translations/sv.json new file mode 100644 index 00000000000..3dd267ed731 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/sv.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "Den h\u00e4r enheten har redan konfigurerats", + "already_in_progress": "Den h\u00e4r enheten har redan konfigurerats", + "not_huawei_lte": "Inte en Huawei LTE-enhet" + }, + "error": { + "connection_failed": "Anslutningen misslyckades", + "connection_timeout": "Timeout f\u00f6r anslutning", + "incorrect_password": "Felaktigt l\u00f6senord", + "incorrect_username": "Felaktigt anv\u00e4ndarnamn", + "incorrect_username_or_password": "Felaktigt anv\u00e4ndarnamn eller l\u00f6senord", + "invalid_url": "Ogiltig URL", + "login_attempts_exceeded": "Maximala inloggningsf\u00f6rs\u00f6k har \u00f6verskridits, f\u00f6rs\u00f6k igen senare", + "response_error": "Ok\u00e4nt fel fr\u00e5n enheten", + "unknown_connection_error": "Ok\u00e4nt fel vid anslutning till enheten" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "url": "URL", + "username": "Anv\u00e4ndarnamn" + }, + "description": "Ange information om enhets\u00e5tkomst. Det \u00e4r valfritt att ange anv\u00e4ndarnamn och l\u00f6senord, men st\u00f6djer d\u00e5 fler integrationsfunktioner. \u00c5 andra sidan kan anv\u00e4ndning av en auktoriserad anslutning orsaka problem med att komma \u00e5t enhetens webbgr\u00e4nssnitt utanf\u00f6r Home Assistant medan integrationen \u00e4r aktiv och tv\u00e4rtom.", + "title": "Konfigurera Huawei LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "Namn p\u00e5 meddelandetj\u00e4nsten (\u00e4ndring kr\u00e4ver omstart)", + "recipient": "Mottagare av SMS-meddelanden", + "track_new_devices": "Sp\u00e5ra nya enheter" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/zh-Hant.json b/homeassistant/components/huawei_lte/translations/zh-Hant.json new file mode 100644 index 00000000000..4094733ba62 --- /dev/null +++ b/homeassistant/components/huawei_lte/translations/zh-Hant.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "\u6b64\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "not_huawei_lte": "\u4e26\u975e\u83ef\u70ba LTE \u8a2d\u5099" + }, + "error": { + "connection_failed": "\u9023\u7dda\u5931\u6557", + "connection_timeout": "\u9023\u7dda\u903e\u6642", + "incorrect_password": "\u5bc6\u78bc\u932f\u8aa4", + "incorrect_username": "\u4f7f\u7528\u8005\u540d\u7a31\u932f\u8aa4", + "incorrect_username_or_password": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u932f\u8aa4", + "invalid_url": "\u7db2\u5740\u7121\u6548", + "login_attempts_exceeded": "\u5df2\u9054\u5617\u8a66\u767b\u5165\u6700\u5927\u6b21\u6578\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66", + "response_error": "\u4f86\u81ea\u8a2d\u5099\u672a\u77e5\u932f\u8aa4", + "unknown_connection_error": "\u9023\u7dda\u81f3\u8a2d\u5099\u672a\u77e5\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "url": "\u7db2\u5740", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u8f38\u5165\u8a2d\u5099\u5b58\u53d6\u8a73\u7d30\u8cc7\u6599\u3002\u6307\u5b9a\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc\u70ba\u9078\u9805\u8f38\u5165\uff0c\u4f46\u958b\u555f\u5c07\u652f\u63f4\u66f4\u591a\u6574\u5408\u529f\u80fd\u3002\u6b64\u5916\uff0c\u4f7f\u7528\u6388\u6b0a\u9023\u7dda\uff0c\u53ef\u80fd\u5c0e\u81f4\u6574\u5408\u555f\u7528\u5f8c\uff0c\u7531\u5916\u90e8\u9023\u7dda\u81f3 Home Assistant \u8a2d\u5099 Web \u4ecb\u9762\u51fa\u73fe\u67d0\u4e9b\u554f\u984c\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002", + "title": "\u8a2d\u5b9a\u83ef\u70ba LTE" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "name": "\u901a\u77e5\u670d\u52d9\u540d\u7a31\uff08\u8b8a\u66f4\u5f8c\u9700\u91cd\u555f\uff09", + "recipient": "\u7c21\u8a0a\u901a\u77e5\u6536\u4ef6\u8005", + "track_new_devices": "\u8ffd\u8e64\u65b0\u8a2d\u5099" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/huawei_router/manifest.json b/homeassistant/components/huawei_router/manifest.json index 32e366a5a5a..56aafe8c3f0 100644 --- a/homeassistant/components/huawei_router/manifest.json +++ b/homeassistant/components/huawei_router/manifest.json @@ -2,7 +2,5 @@ "domain": "huawei_router", "name": "Huawei Router", "documentation": "https://www.home-assistant.io/integrations/huawei_router", - "requirements": [], - "dependencies": [], "codeowners": ["@abmantis"] } diff --git a/homeassistant/components/hue/.translations/bg.json b/homeassistant/components/hue/.translations/bg.json deleted file mode 100644 index 5f28f4bde40..00000000000 --- a/homeassistant/components/hue/.translations/bg.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u0412\u0441\u0438\u0447\u043a\u0438 \u0431\u0430\u0437\u043e\u0432\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 Philips Hue \u0441\u0430 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0438", - "already_configured": "\u0411\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0430", - "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f.", - "cannot_connect": "\u041d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435 \u0441 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", - "discover_timeout": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u0435 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u0431\u0430\u0437\u043e\u0432\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Philips Hue", - "no_bridges": "\u041d\u0435 \u0441\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u0431\u0430\u0437\u043e\u0432\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Philips Hue", - "not_hue_bridge": "\u041d\u0435 \u0435 Hue \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" - }, - "error": { - "linking": "\u041f\u043e\u044f\u0432\u0438 \u0441\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435\u0442\u043e.", - "register_failed": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e" - }, - "step": { - "init": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441" - }, - "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f Philips Hue" - }, - "link": { - "description": "\u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f, \u0437\u0430 \u0434\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435 Philips Hue \u0441 Home Assistant. \n\n![\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0443\u0442\u043e\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f](/static/images/config_philips_hue.jpg)", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0445\u044a\u0431" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/ca.json b/homeassistant/components/hue/.translations/ca.json deleted file mode 100644 index 53c248fe179..00000000000 --- a/homeassistant/components/hue/.translations/ca.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Tots els enlla\u00e7os Philips Hue ja estan configurats", - "already_configured": "L'enlla\u00e7 ja est\u00e0 configurat", - "already_in_progress": "El flux de dades de configuraci\u00f3 per l'enlla\u00e7 ja est\u00e0 en curs.", - "cannot_connect": "No s'ha pogut connectar amb l'enlla\u00e7", - "discover_timeout": "No s'han pogut descobrir enlla\u00e7os Hue", - "no_bridges": "No s'han trobat enlla\u00e7os Philips Hue", - "not_hue_bridge": "No \u00e9s un enlla\u00e7 Hue", - "unknown": "S'ha produ\u00eft un error desconegut" - }, - "error": { - "linking": "S'ha produ\u00eft un error desconegut al vincular.", - "register_failed": "No s'ha pogut registrar, torna-ho a provar" - }, - "step": { - "init": { - "data": { - "host": "Amfitri\u00f3" - }, - "title": "Tria de l'enlla\u00e7 Hue" - }, - "link": { - "description": "Prem el bot\u00f3 de l'enlla\u00e7 per registrar Philips Hue amb Home Assistant. \n\n ![Ubicaci\u00f3 del bot\u00f3 al pont](/static/images/config_philips_hue.jpg)", - "title": "Vincular concentrador" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Primer bot\u00f3", - "button_2": "Segon bot\u00f3", - "button_3": "Tercer bot\u00f3", - "button_4": "Quart bot\u00f3", - "dim_down": "Atenua la brillantor", - "dim_up": "Augmenta la brillantor", - "turn_off": "Apaga", - "turn_on": "Enc\u00e9n" - }, - "trigger_type": { - "remote_button_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut", - "remote_button_short_press": "Bot\u00f3 \"{subtype}\" premut", - "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/cs.json b/homeassistant/components/hue/.translations/cs.json deleted file mode 100644 index 260dbc4021a..00000000000 --- a/homeassistant/components/hue/.translations/cs.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "V\u0161echny Philips Hue p\u0159emost\u011bn\u00ed jsou ji\u017e nakonfigurov\u00e1ny", - "already_configured": "P\u0159emost\u011bn\u00ed je ji\u017e nakonfigurov\u00e1no", - "cannot_connect": "Nelze se p\u0159ipojit k p\u0159emost\u011bn\u00ed", - "discover_timeout": "Nelze nal\u00e9zt p\u0159emost\u011bn\u00ed Hue", - "no_bridges": "Nebyly nalezeny \u017e\u00e1dn\u00e9 p\u0159emost\u011bn\u00ed Philips Hue", - "unknown": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b" - }, - "error": { - "linking": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b propojen\u00ed.", - "register_failed": "Registrace se nezda\u0159ila, zkuste to pros\u00edm znovu" - }, - "step": { - "init": { - "data": { - "host": "Hostitel" - }, - "title": "Vybrat Hue p\u0159emost\u011bn\u00ed" - }, - "link": { - "description": "Stiskn\u011bte tla\u010d\u00edtko na p\u0159emost\u011bn\u00ed k registraci Philips Hue v Home Assistant.\n\n! [Um\u00edst\u011bn\u00ed tla\u010d\u00edtka na p\u0159emost\u011bn\u00ed](/ static/images/config_philips_hue.jpg)", - "title": "P\u0159ipojit Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/cy.json b/homeassistant/components/hue/.translations/cy.json deleted file mode 100644 index f5476f73edb..00000000000 --- a/homeassistant/components/hue/.translations/cy.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Mae holl bontydd Philips Hue eisoes wedi eu ffurfweddu", - "already_configured": "Pont eisoes wedi'i ffurfweddu", - "cannot_connect": "Methu cysylltu i'r bont", - "discover_timeout": "Methu darganfod pontydd Hue", - "no_bridges": "Dim pontydd Philips Hue wedi'i ddarganfod", - "unknown": "Digwyddodd gwall anhysbys" - }, - "error": { - "linking": "Digwyddodd gwall cysylltu anhysbys.", - "register_failed": "Wedi methu \u00e2 chofrestru, pl\u00eds ceisiwch eto" - }, - "step": { - "init": { - "data": { - "host": "Gwesteiwr" - }, - "title": "Dewiswch bont Hue" - }, - "link": { - "description": "Pwyswch y botwm ar y bont i gofrestru Philips Hue gyda Cynorthwydd Cartref.\n\n![Lleoliad botwm ar bont](/static/images/config_philips_hue.jpg)", - "title": "Hwb cyswllt" - } - }, - "title": "Pont Phillips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/da.json b/homeassistant/components/hue/.translations/da.json deleted file mode 100644 index c00c19be42a..00000000000 --- a/homeassistant/components/hue/.translations/da.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle Philips Hue-broer er allerede konfigureret", - "already_configured": "Bridgen er allerede konfigureret", - "already_in_progress": "Bro-konfiguration er allerede i gang.", - "cannot_connect": "Kunne ikke oprette forbindelse til bridgen", - "discover_timeout": "Ingen Philips Hue-bro fundet", - "no_bridges": "Ingen Philips Hue-broer fundet", - "not_hue_bridge": "Ikke en Hue-bro", - "unknown": "Ukendt fejl opstod" - }, - "error": { - "linking": "Der opstod en ukendt linkfejl.", - "register_failed": "Det lykkedes ikke at registrere, pr\u00f8v igen" - }, - "step": { - "init": { - "data": { - "host": "V\u00e6rt" - }, - "title": "V\u00e6lg Hue bridge" - }, - "link": { - "description": "Tryk p\u00e5 knappen p\u00e5 broen for at registrere Philips Hue med Home Assistant. \n\n ![Placering af knap p\u00e5 bro](/static/images/config_philips_hue.jpg)", - "title": "Forbind Hub" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "F\u00f8rste knap", - "button_2": "Anden knap", - "button_3": "Tredje knap", - "button_4": "Fjerde knap", - "dim_down": "D\u00e6mp ned", - "dim_up": "D\u00e6mp op", - "turn_off": "Sluk", - "turn_on": "T\u00e6nd" - }, - "trigger_type": { - "remote_button_long_release": "\"{subtype}\"-knappen frigivet efter langt tryk", - "remote_button_short_press": "\"{subtype}\"-knappen trykket p\u00e5", - "remote_button_short_release": "\"{subtype}\"-knappen frigivet" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/de.json b/homeassistant/components/hue/.translations/de.json deleted file mode 100644 index a4ab9123b48..00000000000 --- a/homeassistant/components/hue/.translations/de.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle Philips Hue Bridges sind bereits konfiguriert", - "already_configured": "Bridge ist bereits konfiguriert", - "already_in_progress": "Der Konfigurationsablauf f\u00fcr die Bridge wird bereits ausgef\u00fchrt.", - "cannot_connect": "Verbindung zur Bridge nicht m\u00f6glich", - "discover_timeout": "Nicht in der Lage Hue Bridges zu entdecken", - "no_bridges": "Keine Philips Hue Bridges entdeckt", - "not_hue_bridge": "Keine Philips Hue Bridge entdeckt", - "unknown": "Unbekannter Fehler ist aufgetreten" - }, - "error": { - "linking": "Unbekannter Link-Fehler aufgetreten.", - "register_failed": "Registrieren fehlgeschlagen, bitte versuche es erneut" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "W\u00e4hle eine Hue Bridge" - }, - "link": { - "description": "Dr\u00fccke den Knopf auf der Bridge, um Philips Hue mit Home Assistant zu registrieren.\n\n![Position des Buttons auf der Bridge](/static/images/config_philips_hue.jpg)", - "title": "Hub verbinden" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Erste Taste", - "button_2": "Zweite Taste", - "button_3": "Dritte Taste", - "button_4": "Vierte Taste", - "dim_down": "Dimmer runter", - "dim_up": "Dimmer hoch", - "turn_off": "Ausschalten", - "turn_on": "Einschalten" - }, - "trigger_type": { - "remote_button_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen", - "remote_button_short_press": "\"{subtype}\" Taste gedr\u00fcckt", - "remote_button_short_release": "\"{subtype}\" Taste losgelassen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/en.json b/homeassistant/components/hue/.translations/en.json deleted file mode 100644 index b16213bfbf8..00000000000 --- a/homeassistant/components/hue/.translations/en.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "All Philips Hue bridges are already configured", - "already_configured": "Bridge is already configured", - "already_in_progress": "Config flow for bridge is already in progress.", - "cannot_connect": "Unable to connect to the bridge", - "discover_timeout": "Unable to discover Hue bridges", - "no_bridges": "No Philips Hue bridges discovered", - "not_hue_bridge": "Not a Hue bridge", - "unknown": "Unknown error occurred" - }, - "error": { - "linking": "Unknown linking error occurred.", - "register_failed": "Failed to register, please try again" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Pick Hue bridge" - }, - "link": { - "description": "Press the button on the bridge to register Philips Hue with Home Assistant.\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "First button", - "button_2": "Second button", - "button_3": "Third button", - "button_4": "Fourth button", - "dim_down": "Dim down", - "dim_up": "Dim up", - "turn_off": "Turn off", - "turn_on": "Turn on" - }, - "trigger_type": { - "remote_button_long_release": "\"{subtype}\" button released after long press", - "remote_button_short_press": "\"{subtype}\" button pressed", - "remote_button_short_release": "\"{subtype}\" button released" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/es-419.json b/homeassistant/components/hue/.translations/es-419.json deleted file mode 100644 index 48a2ff233da..00000000000 --- a/homeassistant/components/hue/.translations/es-419.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Todos los puentes Philips Hue ya est\u00e1n configurados", - "already_configured": "El puente ya est\u00e1 configurado", - "cannot_connect": "No se puede conectar al puente", - "discover_timeout": "Incapaz de descubrir puentes Hue", - "no_bridges": "No se descubrieron puentes Philips Hue", - "not_hue_bridge": "No es un puente Hue", - "unknown": "Se produjo un error desconocido" - }, - "error": { - "linking": "Se produjo un error de enlace desconocido.", - "register_failed": "No se pudo registrar, intente de nuevo" - }, - "step": { - "init": { - "data": { - "host": "Host" - } - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/es.json b/homeassistant/components/hue/.translations/es.json deleted file mode 100644 index 6a5074c6e4a..00000000000 --- a/homeassistant/components/hue/.translations/es.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Todos los puentes Philips Hue ya est\u00e1n configurados", - "already_configured": "El puente ya esta configurado", - "already_in_progress": "El flujo de configuraci\u00f3n para el puente ya est\u00e1 en curso.", - "cannot_connect": "No se puede conectar al puente", - "discover_timeout": "No se han descubierto puentes Philips Hue", - "no_bridges": "No se han descubierto puentes Philips Hue.", - "not_hue_bridge": "No es un puente Hue", - "unknown": "Se produjo un error desconocido" - }, - "error": { - "linking": "Se produjo un error de enlace desconocido.", - "register_failed": "No se pudo registrar, intente de nuevo" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Elige el puente de Hue" - }, - "link": { - "description": "Presione el bot\u00f3n en el puente para registrar Philips Hue con Home Assistant. \n\n![Ubicaci\u00f3n del bot\u00f3n en el puente](/static/images/config_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Primer bot\u00f3n", - "button_2": "Segundo bot\u00f3n", - "button_3": "Tercer bot\u00f3n", - "button_4": "Cuarto bot\u00f3n", - "dim_down": "Bajar la intensidad", - "dim_up": "Subir la intensidad", - "turn_off": "Apagar", - "turn_on": "Encender" - }, - "trigger_type": { - "remote_button_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga", - "remote_button_short_press": "Bot\u00f3n \"{subtype}\" pulsado", - "remote_button_short_release": "Bot\u00f3n \"{subtype}\" soltado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/et.json b/homeassistant/components/hue/.translations/et.json deleted file mode 100644 index 6bad10ed067..00000000000 --- a/homeassistant/components/hue/.translations/et.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "unknown": "Ilmnes tundmatu viga" - }, - "step": { - "init": { - "data": { - "host": "" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/fr.json b/homeassistant/components/hue/.translations/fr.json deleted file mode 100644 index de54ddb3bf3..00000000000 --- a/homeassistant/components/hue/.translations/fr.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Tous les ponts Philips Hue sont d\u00e9j\u00e0 configur\u00e9s", - "already_configured": "Ce pont est d\u00e9j\u00e0 configur\u00e9", - "already_in_progress": "Le flux de configuration pour le pont est d\u00e9j\u00e0 en cours.", - "cannot_connect": "Connexion au pont impossible", - "discover_timeout": "D\u00e9tection de ponts Philips Hue impossible", - "no_bridges": "Aucun pont Philips Hue n'a \u00e9t\u00e9 d\u00e9couvert", - "not_hue_bridge": "Pas de pont Hue", - "unknown": "Une erreur inconnue s'est produite" - }, - "error": { - "linking": "Une erreur inconnue s'est produite lors de la liaison entre le pont et Home Assistant", - "register_failed": "\u00c9chec d'enregistrement. Veuillez r\u00e9essayer." - }, - "step": { - "init": { - "data": { - "host": "H\u00f4te" - }, - "title": "Choisissez le pont Philips Hue" - }, - "link": { - "description": "Appuyez sur le bouton du pont pour lier Philips Hue avec Home Assistant. \n\n ![Emplacement du bouton sur le pont](/static/images/config_philips_hue.jpg)", - "title": "Hub de liaison" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/he.json b/homeassistant/components/hue/.translations/he.json deleted file mode 100644 index ddc91ae2266..00000000000 --- a/homeassistant/components/hue/.translations/he.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u05db\u05dc \u05d4\u05de\u05d2\u05e9\u05e8\u05d9\u05dd \u05e9\u05dc Philips Hue \u05de\u05d5\u05d2\u05d3\u05e8\u05d9\u05dd \u05db\u05d1\u05e8", - "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", - "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05de\u05d2\u05e9\u05e8", - "discover_timeout": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d2\u05dc\u05d5\u05ea \u05de\u05d2\u05e9\u05e8\u05d9\u05dd", - "no_bridges": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05d2\u05e9\u05e8\u05d9 Philips Hue", - "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." - }, - "error": { - "linking": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4.", - "register_failed": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1." - }, - "step": { - "init": { - "data": { - "host": "\u05de\u05d0\u05e8\u05d7" - }, - "title": "\u05d1\u05d7\u05e8 \u05de\u05d2\u05e9\u05e8" - }, - "link": { - "description": "\u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05e2\u05dc \u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d3\u05d9 \u05dc\u05d7\u05d1\u05e8 \u05d1\u05d9\u05df \u05d0\u05ea Philips Hue \u05e2\u05dd Home Assistant. \n\n![\u05de\u05d9\u05e7\u05d5\u05dd \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05e8\u05db\u05d6\u05ea](/static/images/config_philips_hue.jpg)", - "title": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e8\u05db\u05d6\u05ea" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/hr.json b/homeassistant/components/hue/.translations/hr.json deleted file mode 100644 index 16a1b19ff8e..00000000000 --- a/homeassistant/components/hue/.translations/hr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "linking": "Do\u0161lo je do nepoznate pogre\u0161ke u povezivanju.", - "register_failed": "Registracija nije uspjela. Poku\u0161ajte ponovo" - }, - "step": { - "init": { - "data": { - "host": "Host" - } - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/hu.json b/homeassistant/components/hue/.translations/hu.json deleted file mode 100644 index e65286b5c64..00000000000 --- a/homeassistant/components/hue/.translations/hu.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "M\u00e1r minden Philips Hue bridge konfigur\u00e1lt", - "already_configured": "A bridge m\u00e1r konfigur\u00e1lva van", - "cannot_connect": "Nem siker\u00fclt csatlakozni a bridge-hez.", - "discover_timeout": "Nem tal\u00e1ltam a Hue bridget", - "no_bridges": "Nem tal\u00e1ltam Philips Hue bridget", - "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt" - }, - "error": { - "linking": "Ismeretlen \u00f6sszekapcsol\u00e1si hiba t\u00f6rt\u00e9nt.", - "register_failed": "Regisztr\u00e1ci\u00f3 nem siker\u00fclt, k\u00e9rem pr\u00f3b\u00e1lja \u00fajra" - }, - "step": { - "init": { - "data": { - "host": "Hoszt" - }, - "title": "V\u00e1lassz Hue bridge-t" - }, - "link": { - "description": "Nyomja meg a gombot a bridge-en a Philips Hue Home Assistant-ben val\u00f3 regisztr\u00e1l\u00e1s\u00e1hoz.\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", - "title": "Kapcsol\u00f3d\u00e1s a hubhoz" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/id.json b/homeassistant/components/hue/.translations/id.json deleted file mode 100644 index 253dedb7c4d..00000000000 --- a/homeassistant/components/hue/.translations/id.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Semua Philips Hue bridges sudah dikonfigurasi", - "already_configured": "Bridge sudah dikonfigurasi", - "cannot_connect": "Tidak dapat terhubung ke bridge", - "discover_timeout": "Tidak dapat menemukan Hue Bridges.", - "no_bridges": "Bridge Philips Hue tidak ditemukan", - "unknown": "Kesalahan tidak dikenal terjadi." - }, - "error": { - "linking": "Terjadi kesalahan tautan tidak dikenal.", - "register_failed": "Gagal mendaftar, silakan coba lagi." - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Pilih Hue bridge" - }, - "link": { - "description": "Tekan tombol di bridge untuk mendaftar Philips Hue dengan Home Assistant.\n\n![Lokasi tombol di bridge](/static/images/config_philips_hue.jpg)", - "title": "Tautan Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/it.json b/homeassistant/components/hue/.translations/it.json deleted file mode 100644 index 5dd64364c10..00000000000 --- a/homeassistant/components/hue/.translations/it.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Tutti i bridge di Philips Hue sono gi\u00e0 configurati", - "already_configured": "Il bridge \u00e8 gi\u00e0 configurato", - "already_in_progress": "Il flusso di configurazione per bridge \u00e8 gi\u00e0 in corso.", - "cannot_connect": "Impossibile connettersi al bridge", - "discover_timeout": "Impossibile trovare i bridge Hue", - "no_bridges": "Nessun bridge di Philips Hue trovato", - "not_hue_bridge": "Non \u00e8 un bridge Hue", - "unknown": "Si \u00e8 verificato un errore" - }, - "error": { - "linking": "Si \u00e8 verificato un errore sconosciuto in fase di collegamento.", - "register_failed": "Errore in fase di registrazione, riprova" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Seleziona il bridge Hue" - }, - "link": { - "description": "Premi il pulsante sul bridge per registrare Philips Hue con Home Assistant\n\n![Posizione del pulsante sul bridge](/static/images/config_philips_hue.jpg)", - "title": "Collega Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/ja.json b/homeassistant/components/hue/.translations/ja.json deleted file mode 100644 index ccd260cb1cf..00000000000 --- a/homeassistant/components/hue/.translations/ja.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "unknown": "\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f" - }, - "step": { - "init": { - "data": { - "host": "\u30db\u30b9\u30c8" - } - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/ko.json b/homeassistant/components/hue/.translations/ko.json deleted file mode 100644 index 8b1c413b205..00000000000 --- a/homeassistant/components/hue/.translations/ko.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\ubaa8\ub4e0 \ud544\ub9bd\uc2a4 Hue \ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_configured": "\ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "\ube0c\ub9bf\uc9c0 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", - "cannot_connect": "\ube0c\ub9ac\uc9c0\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "discover_timeout": "Hue \ube0c\ub9bf\uc9c0\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "no_bridges": "\ubc1c\uacac\ub41c \ud544\ub9bd\uc2a4 Hue \ube0c\ub9bf\uc9c0\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", - "not_hue_bridge": "Hue \ube0c\ub9bf\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "linking": "\uc54c \uc218 \uc5c6\ub294 \uc5f0\uacb0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", - "register_failed": "\ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" - }, - "step": { - "init": { - "data": { - "host": "\ud638\uc2a4\ud2b8" - }, - "title": "Hue \ube0c\ub9bf\uc9c0 \uc120\ud0dd" - }, - "link": { - "description": "\ube0c\ub9bf\uc9c0\uc758 \ubc84\ud2bc\uc744 \ub20c\ub7ec \ud544\ub9bd\uc2a4 Hue\ub97c Home Assistant\uc5d0 \ub4f1\ub85d\ud558\uc138\uc694.\n\n![\ube0c\ub9bf\uc9c0 \ubc84\ud2bc \uc704\uce58](/static/images/config_philips_hue.jpg)", - "title": "\ud5c8\ube0c \uc5f0\uacb0" - } - }, - "title": "\ud544\ub9bd\uc2a4 Hue \ube0c\ub9bf\uc9c0" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\uccab \ubc88\uc9f8 \ubc84\ud2bc", - "button_2": "\ub450 \ubc88\uc9f8 \ubc84\ud2bc", - "button_3": "\uc138 \ubc88\uc9f8 \ubc84\ud2bc", - "button_4": "\ub124 \ubc88\uc9f8 \ubc84\ud2bc", - "dim_down": "\uc5b4\ub461\uac8c \ud558\uae30", - "dim_up": "\ubc1d\uac8c \ud558\uae30", - "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" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/lb.json b/homeassistant/components/hue/.translations/lb.json deleted file mode 100644 index 2b5b168817f..00000000000 --- a/homeassistant/components/hue/.translations/lb.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "All Philips Hue Bridge si scho\u00a0konfigur\u00e9iert", - "already_configured": "Bridge ass scho konfigur\u00e9iert", - "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", - "cannot_connect": "Keng Verbindung mat der bridge m\u00e9iglech", - "discover_timeout": "Keng Hue bridge fonnt", - "no_bridges": "Keng Philips Hue Bridge fonnt", - "not_hue_bridge": "Keng Hue Bridge", - "unknown": "Onbekannten Feeler opgetrueden" - }, - "error": { - "linking": "Onbekannte Liaisoun's Feeler opgetrueden", - "register_failed": "Feeler beim registr\u00e9ieren, prob\u00e9iert w.e.g. nach emol" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Hue Bridge auswielen" - }, - "link": { - "description": "Dr\u00e9ckt de Kn\u00e4ppchen un der Bridge fir den Philips Hue mam Home Assistant ze registr\u00e9ieren.\n\n![Kn\u00e4ppchen un der Bridge](/static/images/config_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u00c9ischte Kn\u00e4ppchen", - "button_2": "Zweete Kn\u00e4ppchen", - "button_3": "Dr\u00ebtte Kn\u00e4ppchen", - "button_4": "V\u00e9ierte Kn\u00e4ppchen", - "dim_down": "Verd\u00e4ischteren", - "dim_up": "Erhellen", - "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" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/nl.json b/homeassistant/components/hue/.translations/nl.json deleted file mode 100644 index 0c7a1bfb60d..00000000000 --- a/homeassistant/components/hue/.translations/nl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle Philips Hue bridges zijn al geconfigureerd", - "already_configured": "Bridge is al geconfigureerd", - "already_in_progress": "De configuratiestroom voor het apparaat is al in volle gang.", - "cannot_connect": "Kan geen verbinding maken met bridge", - "discover_timeout": "Hue bridges kunnen niet worden gevonden", - "no_bridges": "Geen Philips Hue bridges ontdekt", - "not_hue_bridge": "Dit is geen Hue bridge", - "unknown": "Onbekende fout opgetreden" - }, - "error": { - "linking": "Er is een onbekende verbindingsfout opgetreden.", - "register_failed": "Registratie is mislukt, probeer het opnieuw" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Kies Hue bridge" - }, - "link": { - "description": "Druk op de knop van de bridge om Philips Hue te registreren met Home Assistant. \n\n![Locatie van de knop op bridge](/static/images/config_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/nn.json b/homeassistant/components/hue/.translations/nn.json deleted file mode 100644 index 744a8e10c22..00000000000 --- a/homeassistant/components/hue/.translations/nn.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle Philips Hue-bruer er allereie konfiguert", - "already_configured": "Brua er allereie konfiguert", - "cannot_connect": "Klarte ikkje \u00e5 kople til brua", - "discover_timeout": "Klarte ikkje \u00e5 oppdage Hue-bruer", - "no_bridges": "Oppdaga ingen Philips Hue-bruer", - "unknown": "Ukjent feil oppstod" - }, - "error": { - "linking": "Ukjent linkefeil oppstod.", - "register_failed": "Kunne ikkje registrere, pr\u00f8v igjen" - }, - "step": { - "init": { - "data": { - "host": "Vert" - }, - "title": "Vel Hue bru" - }, - "link": { - "description": "Trykk p\u00e5 knappen p\u00e5 brua, for \u00e5 registrere Philips Hue med Home Assistant.\n\n![Lokasjon til knappen p\u00e5 brua](/statisk/bilete/konfiguer_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/no.json b/homeassistant/components/hue/.translations/no.json deleted file mode 100644 index 961311d7304..00000000000 --- a/homeassistant/components/hue/.translations/no.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle Philips Hue Bridger er allerede konfigurert", - "already_configured": "Bridge er allerede konfigurert", - "already_in_progress": "Konfigurasjonsflyt for bro p\u00e5g\u00e5r allerede.", - "cannot_connect": "Kan ikke koble til Bridge", - "discover_timeout": "Kunne ikke oppdage Hue Bridger", - "no_bridges": "Ingen Philips Hue Bridger oppdaget", - "not_hue_bridge": "Ikke en Hue bro", - "unknown": "Ukjent feil oppstod" - }, - "error": { - "linking": "Ukjent koblingsfeil oppstod.", - "register_failed": "Registrering feilet, vennligst pr\u00f8v igjen" - }, - "step": { - "init": { - "data": { - "host": "Vert" - }, - "title": "Velg Hue Bridge" - }, - "link": { - "description": "Trykk p\u00e5 knappen p\u00e5 Bridgen for \u00e5 registrere Philips Hue med Home Assistant. \n\n ![Knappens plassering p\u00e5 Bridgen](/static/images/config_philips_hue.jpg)", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/pl.json b/homeassistant/components/hue/.translations/pl.json deleted file mode 100644 index 00b9374459c..00000000000 --- a/homeassistant/components/hue/.translations/pl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Wszystkie mostki Hue s\u0105 ju\u017c skonfigurowane.", - "already_configured": "Mostek jest ju\u017c skonfigurowany.", - "already_in_progress": "Konfiguracja mostka jest ju\u017c w toku.", - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z mostkiem", - "discover_timeout": "Nie mo\u017cna wykry\u0107 \u017cadnych mostk\u00f3w Hue", - "no_bridges": "Nie wykryto \u017cadnych mostk\u00f3w Hue", - "not_hue_bridge": "To nie jest mostek Hue", - "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d" - }, - "error": { - "linking": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d w trakcie \u0142\u0105czenia.", - "register_failed": "Nie uda\u0142o si\u0119 zarejestrowa\u0107. Spr\u00f3buj ponownie." - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Wybierz mostek Hue" - }, - "link": { - "description": "Naci\u015bnij przycisk na mostku, aby zarejestrowa\u0107 Philips Hue w Home Assistant.\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", - "title": "Hub Link" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/pt-BR.json b/homeassistant/components/hue/.translations/pt-BR.json deleted file mode 100644 index 3f69f9803a4..00000000000 --- a/homeassistant/components/hue/.translations/pt-BR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Todas as pontes Philips Hue j\u00e1 est\u00e3o configuradas", - "already_configured": "A ponte j\u00e1 est\u00e1 configurada", - "already_in_progress": "O fluxo de configura\u00e7\u00e3o da ponte j\u00e1 est\u00e1 em andamento.", - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se \u00e0 ponte", - "discover_timeout": "Incapaz de descobrir pontes Hue", - "no_bridges": "N\u00e3o h\u00e1 pontes Philips Hue descobertas", - "not_hue_bridge": "N\u00e3o \u00e9 uma ponte Hue", - "unknown": "Ocorreu um erro desconhecido" - }, - "error": { - "linking": "Ocorreu um erro de liga\u00e7\u00e3o desconhecido.", - "register_failed": "Falhou ao registrar, por favor tente novamente" - }, - "step": { - "init": { - "data": { - "host": "Hospedeiro" - }, - "title": "Escolha a ponte Hue" - }, - "link": { - "description": "Pressione o bot\u00e3o na ponte para registrar o Philips Hue com o Home Assistant. \n\n ![Localiza\u00e7\u00e3o do bot\u00e3o na ponte](/static/images/config_philips_hue.jpg)", - "title": "Hub de links" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/pt.json b/homeassistant/components/hue/.translations/pt.json deleted file mode 100644 index a3e755fa790..00000000000 --- a/homeassistant/components/hue/.translations/pt.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Todas os Philips Hue j\u00e1 est\u00e3o configuradas", - "already_configured": "Hue j\u00e1 est\u00e1 configurado", - "cannot_connect": "N\u00e3o foi poss\u00edvel se conectar", - "discover_timeout": "Nenhum Hue bridge descoberto", - "no_bridges": "Nenhum Philips Hue descoberto", - "unknown": "Ocorreu um erro desconhecido" - }, - "error": { - "linking": "Ocorreu um erro de liga\u00e7\u00e3o desconhecido.", - "register_failed": "Falha ao registrar, por favor, tente novamente" - }, - "step": { - "init": { - "data": { - "host": "Servidor" - }, - "title": "Hue bridge" - }, - "link": { - "description": "Pressione o bot\u00e3o no Philips Hue para registrar com o Home Assistant. \n\n![Localiza\u00e7\u00e3o do bot\u00e3o] (/static/images/config_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/ro.json b/homeassistant/components/hue/.translations/ro.json deleted file mode 100644 index 4866ace08d6..00000000000 --- a/homeassistant/components/hue/.translations/ro.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Toate pun\u021bile Philips Hue sunt deja configurate", - "already_configured": "Gateway-ul este deja configurat", - "cannot_connect": "Nu se poate conecta la gateway.", - "discover_timeout": "Imposibil de descoperit podurile Hue" - }, - "error": { - "linking": "A ap\u0103rut o eroare de leg\u0103tur\u0103 necunoscut\u0103.", - "register_failed": "Nu a reu\u0219it \u00eenregistrarea, \u00eencerca\u021bi din nou" - }, - "step": { - "init": { - "data": { - "host": "Gazd\u0103" - } - }, - "link": { - "description": "Ap\u0103sa\u021bi butonul de pe pod pentru a \u00eenregistra Philips Hue cu Home Assistant. \n\n![Loca\u021bia butonului pe pod](/static/images/config_philips_hue.jpg)" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/ru.json b/homeassistant/components/hue/.translations/ru.json deleted file mode 100644 index fa2f2e55744..00000000000 --- a/homeassistant/components/hue/.translations/ru.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u0412\u0441\u0435 Philips Hue \u0448\u043b\u044e\u0437\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.", - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0448\u043b\u044e\u0437\u0443.", - "discover_timeout": "\u0428\u043b\u044e\u0437 Philips Hue \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d.", - "no_bridges": "\u0428\u043b\u044e\u0437\u044b Philips Hue \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", - "not_hue_bridge": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u043b\u044e\u0437\u043e\u043c Hue.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "error": { - "linking": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f.", - "register_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430." - }, - "step": { - "init": { - "data": { - "host": "\u0425\u043e\u0441\u0442" - }, - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u043b\u044e\u0437 Hue" - }, - "link": { - "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u0448\u043b\u044e\u0437\u0435 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 Philips Hue \u0432 Home Assistant.\n\n![\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0448\u043b\u044e\u0437\u0435](/static/images/config_philips_hue.jpg)", - "title": "Philips Hue" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "dim_down": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f", - "dim_up": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f", - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - }, - "trigger_type": { - "remote_button_long_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", - "remote_button_short_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430", - "remote_button_short_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/sl.json b/homeassistant/components/hue/.translations/sl.json deleted file mode 100644 index 09083742310..00000000000 --- a/homeassistant/components/hue/.translations/sl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Vsi mostovi Philips Hue so \u017ee konfigurirani", - "already_configured": "Most je \u017ee konfiguriran", - "already_in_progress": "Konfiguracijski tok za most je \u017ee v teku.", - "cannot_connect": "Ni mogo\u010de vzpostaviti povezave z mostom", - "discover_timeout": "Ni bilo mogo\u010de odkriti Hue mostov", - "no_bridges": "Ni odkritih mostov Philips Hue", - "not_hue_bridge": "Ni Hue most", - "unknown": "Pri\u0161lo je do neznane napake" - }, - "error": { - "linking": "Pri\u0161lo je do neznane napake pri povezavi.", - "register_failed": "Registracija ni uspela, poskusite znova" - }, - "step": { - "init": { - "data": { - "host": "Host" - }, - "title": "Izberite Hue most" - }, - "link": { - "description": "Pritisnite gumb na mostu, da registrirate Philips Hue s Home Assistantom. \n\n![Polo\u017eaj gumba na mostu](/static/images/config_philips_hue.jpg)", - "title": "Link Hub" - } - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/sv.json b/homeassistant/components/hue/.translations/sv.json deleted file mode 100644 index aedfc0c0f40..00000000000 --- a/homeassistant/components/hue/.translations/sv.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alla Philips Hue-bryggor \u00e4r redan konfigurerade", - "already_configured": "Bryggan \u00e4r redan konfigurerad", - "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r bryggan p\u00e5g\u00e5r redan.", - "cannot_connect": "Det gick inte att ansluta till bryggan", - "discover_timeout": "Det gick inte att uppt\u00e4cka n\u00e5gra Hue-bryggor", - "no_bridges": "Inga Philips Hue-bryggor uppt\u00e4cktes", - "not_hue_bridge": "Inte en Hue-brygga", - "unknown": "Ett ok\u00e4nt fel intr\u00e4ffade" - }, - "error": { - "linking": "Ett ok\u00e4nt l\u00e4nkningsfel intr\u00e4ffade.", - "register_failed": "Misslyckades med att registrera, v\u00e4nligen f\u00f6rs\u00f6k igen" - }, - "step": { - "init": { - "data": { - "host": "V\u00e4rd" - }, - "title": "V\u00e4lj Hue-brygga" - }, - "link": { - "description": "Tryck p\u00e5 knappen p\u00e5 bryggan f\u00f6r att registrera Philips Hue med Home Assistant. \n\n![Placering av knapp p\u00e5 brygga](/static/images/config_philips_hue.jpg)", - "title": "L\u00e4nka hub" - } - }, - "title": "Philips Hue Bridge" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/th.json b/homeassistant/components/hue/.translations/th.json deleted file mode 100644 index c76064c0ab6..00000000000 --- a/homeassistant/components/hue/.translations/th.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "abort": { - "unknown": "\u0e40\u0e01\u0e34\u0e14\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e17\u0e23\u0e32\u0e1a\u0e2a\u0e32\u0e40\u0e2b\u0e15\u0e38" - }, - "error": { - "register_failed": "\u0e01\u0e32\u0e23\u0e25\u0e07\u0e17\u0e30\u0e40\u0e1a\u0e35\u0e22\u0e19\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27\u0e42\u0e1b\u0e23\u0e14\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07" - }, - "title": "Philips Hue" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/zh-Hans.json b/homeassistant/components/hue/.translations/zh-Hans.json deleted file mode 100644 index 5e2f35bfea8..00000000000 --- a/homeassistant/components/hue/.translations/zh-Hans.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u5168\u90e8\u98de\u5229\u6d66 Hue \u6865\u63a5\u5668\u5df2\u914d\u7f6e", - "already_configured": "\u98de\u5229\u6d66 Hue Bridge \u5df2\u914d\u7f6e\u5b8c\u6210", - "already_in_progress": "\u7f51\u6865\u7684\u914d\u7f6e\u6d41\u5df2\u5728\u8fdb\u884c\u4e2d\u3002", - "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230 \u98de\u5229\u6d66 Hue Bridge", - "discover_timeout": "\u65e0\u6cd5\u55c5\u63a2\u5230 Hue \u6865\u63a5\u5668", - "no_bridges": "\u672a\u53d1\u73b0\u98de\u5229\u6d66 Hue Bridge", - "unknown": "\u51fa\u73b0\u672a\u77e5\u7684\u9519\u8bef" - }, - "error": { - "linking": "\u53d1\u751f\u672a\u77e5\u7684\u8fde\u63a5\u9519\u8bef\u3002", - "register_failed": "\u6ce8\u518c\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5" - }, - "step": { - "init": { - "data": { - "host": "\u4e3b\u673a" - }, - "title": "\u9009\u62e9 Hue Bridge" - }, - "link": { - "description": "\u8bf7\u6309\u4e0b\u6865\u63a5\u5668\u4e0a\u7684\u6309\u94ae\uff0c\u4ee5\u5728 Home Assistant \u4e0a\u6ce8\u518c\u98de\u5229\u6d66 Hue\u3002\n\n![\u6865\u63a5\u5668\u6309\u94ae\u4f4d\u7f6e](/static/images/config_philips_hue.jpg)", - "title": "\u8fde\u63a5\u4e2d\u67a2" - } - }, - "title": "\u98de\u5229\u6d66 Hue Bridge" - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/zh-Hant.json b/homeassistant/components/hue/.translations/zh-Hant.json deleted file mode 100644 index 0aa75438f7b..00000000000 --- a/homeassistant/components/hue/.translations/zh-Hant.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u6240\u6709 Philips Hue Bridge \u7686\u5df2\u8a2d\u5b9a\u5b8c\u6210", - "already_configured": "Bridge \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "Bridge \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Bridge", - "discover_timeout": "\u7121\u6cd5\u641c\u5c0b\u5230 Hue Bridge", - "no_bridges": "\u672a\u641c\u5c0b\u5230 Philips Hue Bridge", - "not_hue_bridge": "\u975e Hue Bridge \u8a2d\u5099", - "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4" - }, - "error": { - "linking": "\u767c\u751f\u672a\u77e5\u9023\u7d50\u932f\u8aa4\u3002", - "register_failed": "\u8a3b\u518a\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66" - }, - "step": { - "init": { - "data": { - "host": "\u4e3b\u6a5f\u7aef" - }, - "title": "\u9078\u64c7 Hue Bridge" - }, - "link": { - "description": "\u6309\u4e0b Bridge \u4e0a\u7684\u6309\u9215\uff0c\u4ee5\u5c07 Philips Hue \u8a3b\u518a\u81f3 Home Assistant\u3002\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", - "title": "\u9023\u7d50 Hub" - } - }, - "title": "Philips Hue" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", - "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", - "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", - "button_4": "\u7b2c\u56db\u500b\u6309\u9215", - "dim_down": "\u8abf\u6697", - "dim_up": "\u8abf\u4eae", - "turn_off": "\u95dc\u9589", - "turn_on": "\u958b\u555f" - }, - "trigger_type": { - "remote_button_long_release": "\"{subtype}\" \u6309\u9215\u9577\u6309\u5f8c\u91cb\u653e", - "remote_button_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b", - "remote_button_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/hue/__init__.py b/homeassistant/components/hue/__init__.py index 7510ff22f16..675fe3ae5e1 100644 --- a/homeassistant/components/hue/__init__.py +++ b/homeassistant/components/hue/__init__.py @@ -70,9 +70,9 @@ async def async_setup(hass, config): bridges = conf[CONF_BRIDGES] - configured_hosts = set( + configured_hosts = { entry.data.get("host") for entry in hass.config_entries.async_entries(DOMAIN) - ) + } for bridge_conf in bridges: host = bridge_conf[CONF_HOST] diff --git a/homeassistant/components/hue/bridge.py b/homeassistant/components/hue/bridge.py index 37089e54b00..977a6717f1b 100644 --- a/homeassistant/components/hue/bridge.py +++ b/homeassistant/components/hue/bridge.py @@ -10,6 +10,7 @@ import slugify as unicode_slug import voluptuous as vol from homeassistant import core +from homeassistant.const import HTTP_INTERNAL_SERVER_ERROR from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import aiohttp_client, config_validation as cv @@ -134,7 +135,7 @@ class HueBridge: # We only retry if it's a server error. So raise on all 4XX errors. if ( isinstance(err, client_exceptions.ClientResponseError) - and err.status < 500 + and err.status < HTTP_INTERNAL_SERVER_ERROR ): raise diff --git a/homeassistant/components/hue/device_trigger.py b/homeassistant/components/hue/device_trigger.py index 81877654746..0c90c29f4c7 100644 --- a/homeassistant/components/hue/device_trigger.py +++ b/homeassistant/components/hue/device_trigger.py @@ -26,6 +26,8 @@ CONF_SUBTYPE = "subtype" CONF_SHORT_PRESS = "remote_button_short_press" CONF_SHORT_RELEASE = "remote_button_short_release" CONF_LONG_RELEASE = "remote_button_long_release" +CONF_DOUBLE_SHORT_RELEASE = "remote_double_button_short_press" +CONF_DOUBLE_LONG_RELEASE = "remote_double_button_long_press" CONF_TURN_ON = "turn_on" CONF_TURN_OFF = "turn_off" @@ -35,7 +37,8 @@ CONF_BUTTON_1 = "button_1" CONF_BUTTON_2 = "button_2" CONF_BUTTON_3 = "button_3" CONF_BUTTON_4 = "button_4" - +CONF_DOUBLE_BUTTON_1 = "double_buttons_1_3" +CONF_DOUBLE_BUTTON_2 = "double_buttons_2_4" HUE_DIMMER_REMOTE_MODEL = "Hue dimmer switch" # RWL020/021 HUE_DIMMER_REMOTE = { @@ -57,9 +60,27 @@ HUE_TAP_REMOTE = { (CONF_SHORT_PRESS, CONF_BUTTON_4): {CONF_EVENT: 18}, } +HUE_FOHSWITCH_REMOTE_MODEL = "Friends of Hue Switch" # ZGPSWITCH +HUE_FOHSWITCH_REMOTE = { + (CONF_SHORT_PRESS, CONF_BUTTON_1): {CONF_EVENT: 20}, + (CONF_LONG_RELEASE, CONF_BUTTON_1): {CONF_EVENT: 16}, + (CONF_SHORT_PRESS, CONF_BUTTON_2): {CONF_EVENT: 21}, + (CONF_LONG_RELEASE, CONF_BUTTON_2): {CONF_EVENT: 17}, + (CONF_SHORT_PRESS, CONF_BUTTON_3): {CONF_EVENT: 23}, + (CONF_LONG_RELEASE, CONF_BUTTON_3): {CONF_EVENT: 19}, + (CONF_SHORT_PRESS, CONF_BUTTON_4): {CONF_EVENT: 22}, + (CONF_LONG_RELEASE, CONF_BUTTON_4): {CONF_EVENT: 18}, + (CONF_DOUBLE_SHORT_RELEASE, CONF_DOUBLE_BUTTON_1): {CONF_EVENT: 101}, + (CONF_DOUBLE_LONG_RELEASE, CONF_DOUBLE_BUTTON_1): {CONF_EVENT: 100}, + (CONF_DOUBLE_SHORT_RELEASE, CONF_DOUBLE_BUTTON_2): {CONF_EVENT: 99}, + (CONF_DOUBLE_LONG_RELEASE, CONF_DOUBLE_BUTTON_2): {CONF_EVENT: 98}, +} + + REMOTES = { HUE_DIMMER_REMOTE_MODEL: HUE_DIMMER_REMOTE, HUE_TAP_REMOTE_MODEL: HUE_TAP_REMOTE, + HUE_FOHSWITCH_REMOTE_MODEL: HUE_FOHSWITCH_REMOTE, } TRIGGER_SCHEMA = TRIGGER_BASE_SCHEMA.extend( diff --git a/homeassistant/components/hue/hue_event.py b/homeassistant/components/hue/hue_event.py index ed1bc1c8f7d..d3d81a6a7af 100644 --- a/homeassistant/components/hue/hue_event.py +++ b/homeassistant/components/hue/hue_event.py @@ -31,27 +31,21 @@ class HueEvent(GenericHueDevice): self.device_registry_id = None self.event_id = slugify(self.sensor.name) - # Use the 'lastupdated' string to detect new remote presses - self._last_updated = self.sensor.lastupdated + # Use the aiohue sensor 'state' dict to detect new remote presses + self._last_state = dict(self.sensor.state) # Register callback in coordinator and add job to remove it on bridge reset. - self.bridge.sensor_manager.coordinator.async_add_listener( - self.async_update_callback + self.bridge.reset_jobs.append( + self.bridge.sensor_manager.coordinator.async_add_listener( + self.async_update_callback + ) ) - self.bridge.reset_jobs.append(self.async_will_remove_from_hass) _LOGGER.debug("Hue event created: %s", self.event_id) - @callback - def async_will_remove_from_hass(self): - """Remove listener on bridge reset.""" - self.bridge.sensor_manager.coordinator.async_remove_listener( - self.async_update_callback - ) - @callback def async_update_callback(self): """Fire the event if reason is that state is updated.""" - if self.sensor.lastupdated == self._last_updated: + if self.sensor.state == self._last_state: return # Extract the press code as state @@ -60,7 +54,7 @@ class HueEvent(GenericHueDevice): else: state = self.sensor.buttonevent - self._last_updated = self.sensor.lastupdated + self._last_state = dict(self.sensor.state) # Fire event data = { diff --git a/homeassistant/components/hue/light.py b/homeassistant/components/hue/light.py index e468c516676..b808dd0594d 100644 --- a/homeassistant/components/hue/light.py +++ b/homeassistant/components/hue/light.py @@ -68,7 +68,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= Can only be called when a user accidentally mentions hue platform in their config. But even in that case it would have been ignored. """ - pass def create_light(item_class, coordinator, bridge, is_group, api, item_id): @@ -118,13 +117,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities): ) # We add a listener after fetching the data, so manually trigger listener - light_coordinator.async_add_listener(update_lights) + bridge.reset_jobs.append(light_coordinator.async_add_listener(update_lights)) update_lights() - bridge.reset_jobs.append( - lambda: light_coordinator.async_remove_listener(update_lights) - ) - api_version = tuple(int(v) for v in bridge.api.config.apiversion.split(".")) allow_groups = bridge.allow_groups @@ -155,13 +150,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities): partial(create_light, HueLight, group_coordinator, bridge, True), ) - group_coordinator.async_add_listener(update_groups) + bridge.reset_jobs.append(group_coordinator.async_add_listener(update_groups)) await group_coordinator.async_refresh() - bridge.reset_jobs.append( - lambda: group_coordinator.async_remove_listener(update_groups) - ) - async def async_safe_fetch(bridge, fetch_method): """Safely fetch data.""" @@ -193,6 +184,16 @@ def async_update_items(bridge, api, current, async_add_entities, create_item): async_add_entities(new_items) +def hue_brightness_to_hass(value): + """Convert hue brightness 1..254 to hass format 0..255.""" + return min(255, round((value / 254) * 255)) + + +def hass_to_hue_brightness(value): + """Convert hass brightness 0..255 to hue 1..254 scale.""" + return max(1, round((value / 255) * 254)) + + class HueLight(Light): """Representation of a Hue light.""" @@ -254,8 +255,11 @@ class HueLight(Light): def brightness(self): """Return the brightness of this light between 0..255.""" if self.is_group: - return self.light.action.get("bri") - return self.light.state.get("bri") + bri = self.light.action.get("bri") + else: + bri = self.light.state.get("bri") + + return hue_brightness_to_hass(bri) @property def _color_mode(self): @@ -286,6 +290,22 @@ class HueLight(Light): return self.light.action.get("ct") return self.light.state.get("ct") + @property + def min_mireds(self): + """Return the coldest color_temp that this light supports.""" + if self.is_group or "ct" not in self.light.controlcapabilities: + return super().min_mireds + + return self.light.controlcapabilities["ct"]["min"] + + @property + def max_mireds(self): + """Return the warmest color_temp that this light supports.""" + if self.is_group or "ct" not in self.light.controlcapabilities: + return super().max_mireds + + return self.light.controlcapabilities["ct"]["max"] + @property def is_on(self): """Return true if device is on.""" @@ -339,11 +359,9 @@ class HueLight(Light): async def async_added_to_hass(self): """When entity is added to hass.""" - self.coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """When entity will be removed from hass.""" - self.coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) async def async_turn_on(self, **kwargs): """Turn the specified or all lights on.""" @@ -367,7 +385,7 @@ class HueLight(Light): command["ct"] = max(self.min_mireds, min(temp, self.max_mireds)) if ATTR_BRIGHTNESS in kwargs: - command["bri"] = kwargs[ATTR_BRIGHTNESS] + command["bri"] = hass_to_hue_brightness(kwargs[ATTR_BRIGHTNESS]) flash = kwargs.get(ATTR_FLASH) diff --git a/homeassistant/components/hue/manifest.json b/homeassistant/components/hue/manifest.json index a5c801f4124..687e0a7330e 100644 --- a/homeassistant/components/hue/manifest.json +++ b/homeassistant/components/hue/manifest.json @@ -21,7 +21,6 @@ "homekit": { "models": ["BSB002"] }, - "dependencies": [], "codeowners": ["@balloob"], "quality_scale": "platinum" } diff --git a/homeassistant/components/hue/sensor_base.py b/homeassistant/components/hue/sensor_base.py index 113957d140e..93b98a7c9ce 100644 --- a/homeassistant/components/hue/sensor_base.py +++ b/homeassistant/components/hue/sensor_base.py @@ -76,9 +76,8 @@ class SensorManager: return # We have all components available, start the updating. - self.coordinator.async_add_listener(self.async_update_items) self.bridge.reset_jobs.append( - lambda: self.coordinator.async_remove_listener(self.async_update_items) + self.coordinator.async_add_listener(self.async_update_items) ) await self.coordinator.async_refresh() @@ -178,14 +177,10 @@ class GenericHueSensor(GenericHueDevice, entity.Entity): async def async_added_to_hass(self): """When entity is added to hass.""" - self.bridge.sensor_manager.coordinator.async_add_listener( - self.async_write_ha_state - ) - - async def async_will_remove_from_hass(self): - """When entity will be removed from hass.""" - self.bridge.sensor_manager.coordinator.async_remove_listener( - self.async_write_ha_state + self.async_on_remove( + self.bridge.sensor_manager.coordinator.async_add_listener( + self.async_write_ha_state + ) ) async def async_update(self): diff --git a/homeassistant/components/hue/strings.json b/homeassistant/components/hue/strings.json index 0f70c49ff2e..c912e9f7f0d 100644 --- a/homeassistant/components/hue/strings.json +++ b/homeassistant/components/hue/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Philips Hue", "step": { "init": { "title": "Pick Hue bridge", @@ -34,6 +33,8 @@ "button_2": "Second button", "button_3": "Third button", "button_4": "Fourth button", + "double_buttons_1_3": "First and Third buttons", + "double_buttons_2_4": "Second and Fourth buttons", "dim_down": "Dim down", "dim_up": "Dim up", "turn_off": "Turn off", @@ -42,7 +43,9 @@ "trigger_type": { "remote_button_long_release": "\"{subtype}\" button released after long press", "remote_button_short_press": "\"{subtype}\" button pressed", - "remote_button_short_release": "\"{subtype}\" button released" + "remote_button_short_release": "\"{subtype}\" button released", + "remote_double_button_long_press": "Both \"{subtype}\" released after long press", + "remote_double_button_short_press": "Both \"{subtype}\" released" } } -} \ No newline at end of file +} diff --git a/homeassistant/components/hue/translations/bg.json b/homeassistant/components/hue/translations/bg.json new file mode 100644 index 00000000000..76db584bae7 --- /dev/null +++ b/homeassistant/components/hue/translations/bg.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "all_configured": "\u0412\u0441\u0438\u0447\u043a\u0438 \u0431\u0430\u0437\u043e\u0432\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 Philips Hue \u0441\u0430 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0438", + "already_configured": "\u0411\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0430", + "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f.", + "cannot_connect": "\u041d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435 \u0441 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", + "discover_timeout": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e \u0435 \u0434\u0430 \u0431\u044a\u0434\u0430\u0442 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u0431\u0430\u0437\u043e\u0432\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Philips Hue", + "no_bridges": "\u041d\u0435 \u0441\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 \u0431\u0430\u0437\u043e\u0432\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430 Philips Hue", + "not_hue_bridge": "\u041d\u0435 \u0435 Hue \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" + }, + "error": { + "linking": "\u041f\u043e\u044f\u0432\u0438 \u0441\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435\u0442\u043e.", + "register_failed": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u043c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e" + }, + "step": { + "init": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441" + }, + "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f Philips Hue" + }, + "link": { + "description": "\u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f, \u0437\u0430 \u0434\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u0442\u0435 Philips Hue \u0441 Home Assistant. \n\n![\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u0443\u0442\u043e\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f](/static/images/config_philips_hue.jpg)", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0445\u044a\u0431" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/ca.json b/homeassistant/components/hue/translations/ca.json new file mode 100644 index 00000000000..77686f5a272 --- /dev/null +++ b/homeassistant/components/hue/translations/ca.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "Tots els enlla\u00e7os Philips Hue ja estan configurats", + "already_configured": "L'enlla\u00e7 ja est\u00e0 configurat", + "already_in_progress": "El flux de dades de configuraci\u00f3 per l'enlla\u00e7 ja est\u00e0 en curs.", + "cannot_connect": "No s'ha pogut connectar amb l'enlla\u00e7", + "discover_timeout": "No s'han pogut descobrir enlla\u00e7os Hue", + "no_bridges": "No s'han trobat enlla\u00e7os Philips Hue", + "not_hue_bridge": "No \u00e9s un enlla\u00e7 Hue", + "unknown": "S'ha produ\u00eft un error desconegut" + }, + "error": { + "linking": "S'ha produ\u00eft un error desconegut al vincular.", + "register_failed": "No s'ha pogut registrar, torna-ho a provar" + }, + "step": { + "init": { + "data": { + "host": "Amfitri\u00f3" + }, + "title": "Tria de l'enlla\u00e7 Hue" + }, + "link": { + "description": "Prem el bot\u00f3 de l'enlla\u00e7 per registrar Philips Hue amb Home Assistant. \n\n ![Ubicaci\u00f3 del bot\u00f3 al pont](/static/images/config_philips_hue.jpg)", + "title": "Vincular concentrador" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Primer bot\u00f3", + "button_2": "Segon bot\u00f3", + "button_3": "Tercer bot\u00f3", + "button_4": "Quart bot\u00f3", + "dim_down": "Atenua la brillantor", + "dim_up": "Augmenta la brillantor", + "double_buttons_1_3": "primer i tercer botons", + "double_buttons_2_4": "segon i quart botons", + "turn_off": "Apaga", + "turn_on": "Enc\u00e9n" + }, + "trigger_type": { + "remote_button_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut", + "remote_button_short_press": "Bot\u00f3 \"{subtype}\" premut", + "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat", + "remote_double_button_long_press": "Ambd\u00f3s \"{subtype}\" alliberats despr\u00e9s d'una estona premuts", + "remote_double_button_short_press": "Ambd\u00f3s \"{subtype}\" alliberats" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/cs.json b/homeassistant/components/hue/translations/cs.json new file mode 100644 index 00000000000..d9070c7c295 --- /dev/null +++ b/homeassistant/components/hue/translations/cs.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "V\u0161echny Philips Hue p\u0159emost\u011bn\u00ed jsou ji\u017e nakonfigurov\u00e1ny", + "already_configured": "P\u0159emost\u011bn\u00ed je ji\u017e nakonfigurov\u00e1no", + "cannot_connect": "Nelze se p\u0159ipojit k p\u0159emost\u011bn\u00ed", + "discover_timeout": "Nelze nal\u00e9zt p\u0159emost\u011bn\u00ed Hue", + "no_bridges": "Nebyly nalezeny \u017e\u00e1dn\u00e9 p\u0159emost\u011bn\u00ed Philips Hue", + "unknown": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b" + }, + "error": { + "linking": "Do\u0161lo k nezn\u00e1m\u00e9 chyb\u011b propojen\u00ed.", + "register_failed": "Registrace se nezda\u0159ila, zkuste to pros\u00edm znovu" + }, + "step": { + "init": { + "data": { + "host": "Hostitel" + }, + "title": "Vybrat Hue p\u0159emost\u011bn\u00ed" + }, + "link": { + "description": "Stiskn\u011bte tla\u010d\u00edtko na p\u0159emost\u011bn\u00ed k registraci Philips Hue v Home Assistant.\n\n! [Um\u00edst\u011bn\u00ed tla\u010d\u00edtka na p\u0159emost\u011bn\u00ed](/ static/images/config_philips_hue.jpg)", + "title": "P\u0159ipojit Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/cy.json b/homeassistant/components/hue/translations/cy.json new file mode 100644 index 00000000000..fa966b7d0f4 --- /dev/null +++ b/homeassistant/components/hue/translations/cy.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "Mae holl bontydd Philips Hue eisoes wedi eu ffurfweddu", + "already_configured": "Pont eisoes wedi'i ffurfweddu", + "cannot_connect": "Methu cysylltu i'r bont", + "discover_timeout": "Methu darganfod pontydd Hue", + "no_bridges": "Dim pontydd Philips Hue wedi'i ddarganfod", + "unknown": "Digwyddodd gwall anhysbys" + }, + "error": { + "linking": "Digwyddodd gwall cysylltu anhysbys.", + "register_failed": "Wedi methu \u00e2 chofrestru, pl\u00eds ceisiwch eto" + }, + "step": { + "init": { + "data": { + "host": "Gwesteiwr" + }, + "title": "Dewiswch bont Hue" + }, + "link": { + "description": "Pwyswch y botwm ar y bont i gofrestru Philips Hue gyda Cynorthwydd Cartref.\n\n![Lleoliad botwm ar bont](/static/images/config_philips_hue.jpg)", + "title": "Hwb cyswllt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/da.json b/homeassistant/components/hue/translations/da.json new file mode 100644 index 00000000000..031076172ac --- /dev/null +++ b/homeassistant/components/hue/translations/da.json @@ -0,0 +1,47 @@ +{ + "config": { + "abort": { + "all_configured": "Alle Philips Hue-broer er allerede konfigureret", + "already_configured": "Bridgen er allerede konfigureret", + "already_in_progress": "Bro-konfiguration er allerede i gang.", + "cannot_connect": "Kunne ikke oprette forbindelse til bridgen", + "discover_timeout": "Ingen Philips Hue-bro fundet", + "no_bridges": "Ingen Philips Hue-broer fundet", + "not_hue_bridge": "Ikke en Hue-bro", + "unknown": "Ukendt fejl opstod" + }, + "error": { + "linking": "Der opstod en ukendt linkfejl.", + "register_failed": "Det lykkedes ikke at registrere, pr\u00f8v igen" + }, + "step": { + "init": { + "data": { + "host": "V\u00e6rt" + }, + "title": "V\u00e6lg Hue bridge" + }, + "link": { + "description": "Tryk p\u00e5 knappen p\u00e5 broen for at registrere Philips Hue med Home Assistant. \n\n ![Placering af knap p\u00e5 bro](/static/images/config_philips_hue.jpg)", + "title": "Forbind Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "F\u00f8rste knap", + "button_2": "Anden knap", + "button_3": "Tredje knap", + "button_4": "Fjerde knap", + "dim_down": "D\u00e6mp ned", + "dim_up": "D\u00e6mp op", + "turn_off": "Sluk", + "turn_on": "T\u00e6nd" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\"-knappen frigivet efter langt tryk", + "remote_button_short_press": "\"{subtype}\"-knappen trykket p\u00e5", + "remote_button_short_release": "\"{subtype}\"-knappen frigivet" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/de.json b/homeassistant/components/hue/translations/de.json new file mode 100644 index 00000000000..de41d4e1a15 --- /dev/null +++ b/homeassistant/components/hue/translations/de.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "Alle Philips Hue Bridges sind bereits konfiguriert", + "already_configured": "Bridge ist bereits konfiguriert", + "already_in_progress": "Der Konfigurationsablauf f\u00fcr die Bridge wird bereits ausgef\u00fchrt.", + "cannot_connect": "Verbindung zur Bridge nicht m\u00f6glich", + "discover_timeout": "Nicht in der Lage Hue Bridges zu entdecken", + "no_bridges": "Keine Philips Hue Bridges entdeckt", + "not_hue_bridge": "Keine Philips Hue Bridge entdeckt", + "unknown": "Unbekannter Fehler ist aufgetreten" + }, + "error": { + "linking": "Unbekannter Link-Fehler aufgetreten.", + "register_failed": "Registrieren fehlgeschlagen, bitte versuche es erneut" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "W\u00e4hle eine Hue Bridge" + }, + "link": { + "description": "Dr\u00fccke den Knopf auf der Bridge, um Philips Hue mit Home Assistant zu registrieren.\n\n![Position des Buttons auf der Bridge](/static/images/config_philips_hue.jpg)", + "title": "Hub verbinden" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Erste Taste", + "button_2": "Zweite Taste", + "button_3": "Dritte Taste", + "button_4": "Vierte Taste", + "dim_down": "Dimmer runter", + "dim_up": "Dimmer hoch", + "double_buttons_1_3": "Erste und dritte Taste", + "double_buttons_2_4": "Zweite und vierte Taste", + "turn_off": "Ausschalten", + "turn_on": "Einschalten" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen", + "remote_button_short_press": "\"{subtype}\" Taste gedr\u00fcckt", + "remote_button_short_release": "\"{subtype}\" Taste losgelassen", + "remote_double_button_long_press": "Beide \"{subtype}\" nach langem Dr\u00fccken losgelassen", + "remote_double_button_short_press": "Beide \"{subtype}\" losgelassen" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/en.json b/homeassistant/components/hue/translations/en.json new file mode 100644 index 00000000000..553dc5bac83 --- /dev/null +++ b/homeassistant/components/hue/translations/en.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "All Philips Hue bridges are already configured", + "already_configured": "Bridge is already configured", + "already_in_progress": "Config flow for bridge is already in progress.", + "cannot_connect": "Unable to connect to the bridge", + "discover_timeout": "Unable to discover Hue bridges", + "no_bridges": "No Philips Hue bridges discovered", + "not_hue_bridge": "Not a Hue bridge", + "unknown": "Unknown error occurred" + }, + "error": { + "linking": "Unknown linking error occurred.", + "register_failed": "Failed to register, please try again" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Pick Hue bridge" + }, + "link": { + "description": "Press the button on the bridge to register Philips Hue with Home Assistant.\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", + "title": "Link Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "First button", + "button_2": "Second button", + "button_3": "Third button", + "button_4": "Fourth button", + "dim_down": "Dim down", + "dim_up": "Dim up", + "double_buttons_1_3": "First and Third buttons", + "double_buttons_2_4": "Second and Fourth buttons", + "turn_off": "Turn off", + "turn_on": "Turn on" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\" button released after long press", + "remote_button_short_press": "\"{subtype}\" button pressed", + "remote_button_short_release": "\"{subtype}\" button released", + "remote_double_button_long_press": "Both \"{subtype}\" released after long press", + "remote_double_button_short_press": "Both \"{subtype}\" released" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/es-419.json b/homeassistant/components/hue/translations/es-419.json new file mode 100644 index 00000000000..8b2b90456bd --- /dev/null +++ b/homeassistant/components/hue/translations/es-419.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "all_configured": "Todos los puentes Philips Hue ya est\u00e1n configurados", + "already_configured": "El puente ya est\u00e1 configurado", + "cannot_connect": "No se puede conectar al puente", + "discover_timeout": "Incapaz de descubrir puentes Hue", + "no_bridges": "No se descubrieron puentes Philips Hue", + "not_hue_bridge": "No es un puente Hue", + "unknown": "Se produjo un error desconocido" + }, + "error": { + "linking": "Se produjo un error de enlace desconocido.", + "register_failed": "No se pudo registrar, intente de nuevo" + }, + "step": { + "init": { + "data": { + "host": "Host" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/es.json b/homeassistant/components/hue/translations/es.json new file mode 100644 index 00000000000..ddaad5c424a --- /dev/null +++ b/homeassistant/components/hue/translations/es.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "Todos los puentes Philips Hue ya est\u00e1n configurados", + "already_configured": "El puente ya esta configurado", + "already_in_progress": "El flujo de configuraci\u00f3n para el puente ya est\u00e1 en curso.", + "cannot_connect": "No se puede conectar al puente", + "discover_timeout": "No se han descubierto puentes Philips Hue", + "no_bridges": "No se han descubierto puentes Philips Hue.", + "not_hue_bridge": "No es un puente Hue", + "unknown": "Se produjo un error desconocido" + }, + "error": { + "linking": "Se produjo un error de enlace desconocido.", + "register_failed": "No se pudo registrar, intente de nuevo" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Elige el puente de Hue" + }, + "link": { + "description": "Presione el bot\u00f3n en el puente para registrar Philips Hue con Home Assistant. \n\n![Ubicaci\u00f3n del bot\u00f3n en el puente](/static/images/config_philips_hue.jpg)", + "title": "Link Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Primer bot\u00f3n", + "button_2": "Segundo bot\u00f3n", + "button_3": "Tercer bot\u00f3n", + "button_4": "Cuarto bot\u00f3n", + "dim_down": "Bajar la intensidad", + "dim_up": "Subir la intensidad", + "double_buttons_1_3": "Botones Primero y Tercero", + "double_buttons_2_4": "Botones Segundo y Cuarto", + "turn_off": "Apagar", + "turn_on": "Encender" + }, + "trigger_type": { + "remote_button_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga", + "remote_button_short_press": "Bot\u00f3n \"{subtype}\" pulsado", + "remote_button_short_release": "Bot\u00f3n \"{subtype}\" soltado", + "remote_double_button_long_press": "Ambos \"{subtype}\" soltados despu\u00e9s de pulsaci\u00f3n larga", + "remote_double_button_short_press": "Ambos \"{subtype}\" soltados" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/et.json b/homeassistant/components/hue/translations/et.json new file mode 100644 index 00000000000..92553c84cfe --- /dev/null +++ b/homeassistant/components/hue/translations/et.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "unknown": "Ilmnes tundmatu viga" + }, + "step": { + "init": { + "data": { + "host": "" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/fr.json b/homeassistant/components/hue/translations/fr.json new file mode 100644 index 00000000000..b92ccd177e1 --- /dev/null +++ b/homeassistant/components/hue/translations/fr.json @@ -0,0 +1,49 @@ +{ + "config": { + "abort": { + "all_configured": "Tous les ponts Philips Hue sont d\u00e9j\u00e0 configur\u00e9s", + "already_configured": "Ce pont est d\u00e9j\u00e0 configur\u00e9", + "already_in_progress": "Le flux de configuration pour le pont est d\u00e9j\u00e0 en cours.", + "cannot_connect": "Connexion au pont impossible", + "discover_timeout": "D\u00e9tection de ponts Philips Hue impossible", + "no_bridges": "Aucun pont Philips Hue n'a \u00e9t\u00e9 d\u00e9couvert", + "not_hue_bridge": "Pas de pont Hue", + "unknown": "Une erreur inconnue s'est produite" + }, + "error": { + "linking": "Une erreur inconnue s'est produite lors de la liaison entre le pont et Home Assistant", + "register_failed": "\u00c9chec d'enregistrement. Veuillez r\u00e9essayer." + }, + "step": { + "init": { + "data": { + "host": "H\u00f4te" + }, + "title": "Choisissez le pont Philips Hue" + }, + "link": { + "description": "Appuyez sur le bouton du pont pour lier Philips Hue avec Home Assistant. \n\n ![Emplacement du bouton sur le pont](/static/images/config_philips_hue.jpg)", + "title": "Hub de liaison" + } + } + }, + "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", + "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/hue/translations/he.json b/homeassistant/components/hue/translations/he.json new file mode 100644 index 00000000000..3b03fb84bc3 --- /dev/null +++ b/homeassistant/components/hue/translations/he.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "\u05db\u05dc \u05d4\u05de\u05d2\u05e9\u05e8\u05d9\u05dd \u05e9\u05dc Philips Hue \u05de\u05d5\u05d2\u05d3\u05e8\u05d9\u05dd \u05db\u05d1\u05e8", + "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", + "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05de\u05d2\u05e9\u05e8", + "discover_timeout": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d2\u05dc\u05d5\u05ea \u05de\u05d2\u05e9\u05e8\u05d9\u05dd", + "no_bridges": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05d2\u05e9\u05e8\u05d9 Philips Hue", + "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." + }, + "error": { + "linking": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4.", + "register_failed": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1." + }, + "step": { + "init": { + "data": { + "host": "\u05de\u05d0\u05e8\u05d7" + }, + "title": "\u05d1\u05d7\u05e8 \u05de\u05d2\u05e9\u05e8" + }, + "link": { + "description": "\u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05e2\u05dc \u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d3\u05d9 \u05dc\u05d7\u05d1\u05e8 \u05d1\u05d9\u05df \u05d0\u05ea Philips Hue \u05e2\u05dd Home Assistant. \n\n![\u05de\u05d9\u05e7\u05d5\u05dd \u05d4\u05db\u05e4\u05ea\u05d5\u05e8 \u05d1\u05e8\u05db\u05d6\u05ea](/static/images/config_philips_hue.jpg)", + "title": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e8\u05db\u05d6\u05ea" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/hr.json b/homeassistant/components/hue/translations/hr.json new file mode 100644 index 00000000000..aa28e012caf --- /dev/null +++ b/homeassistant/components/hue/translations/hr.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "linking": "Do\u0161lo je do nepoznate pogre\u0161ke u povezivanju.", + "register_failed": "Registracija nije uspjela. Poku\u0161ajte ponovo" + }, + "step": { + "init": { + "data": { + "host": "Host" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/hu.json b/homeassistant/components/hue/translations/hu.json new file mode 100644 index 00000000000..80e90f16be0 --- /dev/null +++ b/homeassistant/components/hue/translations/hu.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "M\u00e1r minden Philips Hue bridge konfigur\u00e1lt", + "already_configured": "A bridge m\u00e1r konfigur\u00e1lva van", + "cannot_connect": "Nem siker\u00fclt csatlakozni a bridge-hez.", + "discover_timeout": "Nem tal\u00e1ltam a Hue bridget", + "no_bridges": "Nem tal\u00e1ltam Philips Hue bridget", + "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt" + }, + "error": { + "linking": "Ismeretlen \u00f6sszekapcsol\u00e1si hiba t\u00f6rt\u00e9nt.", + "register_failed": "Regisztr\u00e1ci\u00f3 nem siker\u00fclt, k\u00e9rem pr\u00f3b\u00e1lja \u00fajra" + }, + "step": { + "init": { + "data": { + "host": "Hoszt" + }, + "title": "V\u00e1lassz Hue bridge-t" + }, + "link": { + "description": "Nyomja meg a gombot a bridge-en a Philips Hue Home Assistant-ben val\u00f3 regisztr\u00e1l\u00e1s\u00e1hoz.\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", + "title": "Kapcsol\u00f3d\u00e1s a hubhoz" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/id.json b/homeassistant/components/hue/translations/id.json new file mode 100644 index 00000000000..2af5753f654 --- /dev/null +++ b/homeassistant/components/hue/translations/id.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "Semua Philips Hue bridges sudah dikonfigurasi", + "already_configured": "Bridge sudah dikonfigurasi", + "cannot_connect": "Tidak dapat terhubung ke bridge", + "discover_timeout": "Tidak dapat menemukan Hue Bridges.", + "no_bridges": "Bridge Philips Hue tidak ditemukan", + "unknown": "Kesalahan tidak dikenal terjadi." + }, + "error": { + "linking": "Terjadi kesalahan tautan tidak dikenal.", + "register_failed": "Gagal mendaftar, silakan coba lagi." + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Pilih Hue bridge" + }, + "link": { + "description": "Tekan tombol di bridge untuk mendaftar Philips Hue dengan Home Assistant.\n\n![Lokasi tombol di bridge](/static/images/config_philips_hue.jpg)", + "title": "Tautan Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/it.json b/homeassistant/components/hue/translations/it.json new file mode 100644 index 00000000000..272db44c0d3 --- /dev/null +++ b/homeassistant/components/hue/translations/it.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "Tutti i bridge di Philips Hue sono gi\u00e0 configurati", + "already_configured": "Il bridge \u00e8 gi\u00e0 configurato", + "already_in_progress": "Il flusso di configurazione per bridge \u00e8 gi\u00e0 in corso.", + "cannot_connect": "Impossibile connettersi al bridge", + "discover_timeout": "Impossibile trovare i bridge Hue", + "no_bridges": "Nessun bridge di Philips Hue trovato", + "not_hue_bridge": "Non \u00e8 un bridge Hue", + "unknown": "Si \u00e8 verificato un errore" + }, + "error": { + "linking": "Si \u00e8 verificato un errore sconosciuto in fase di collegamento.", + "register_failed": "Errore in fase di registrazione, riprova" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Seleziona il bridge Hue" + }, + "link": { + "description": "Premi il pulsante sul bridge per registrare Philips Hue con Home Assistant\n\n![Posizione del pulsante sul bridge](/static/images/config_philips_hue.jpg)", + "title": "Collega Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Primo pulsante", + "button_2": "Secondo pulsante", + "button_3": "Terzo pulsante", + "button_4": "Quarto pulsante", + "dim_down": "Diminuisce luminosit\u00e0", + "dim_up": "Aumenta luminosit\u00e0", + "double_buttons_1_3": "Pulsanti Primo e Terzo", + "double_buttons_2_4": "Pulsanti Secondo e Quarto", + "turn_off": "Spento", + "turn_on": "Acceso" + }, + "trigger_type": { + "remote_button_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione", + "remote_button_short_press": "Pulsante \"{subtype}\" premuto", + "remote_button_short_release": "Pulsante \"{subtype}\" rilasciato", + "remote_double_button_long_press": "Entrambi i \"{subtype}\" rilasciati dopo una lunga pressione", + "remote_double_button_short_press": "Entrambi i \"{subtype}\" rilasciati" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/ja.json b/homeassistant/components/hue/translations/ja.json new file mode 100644 index 00000000000..6c4290140dc --- /dev/null +++ b/homeassistant/components/hue/translations/ja.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "unknown": "\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f" + }, + "step": { + "init": { + "data": { + "host": "\u30db\u30b9\u30c8" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/ko.json b/homeassistant/components/hue/translations/ko.json new file mode 100644 index 00000000000..561b3442d2e --- /dev/null +++ b/homeassistant/components/hue/translations/ko.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "\ubaa8\ub4e0 \ud544\ub9bd\uc2a4 Hue \ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_configured": "\ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "\ube0c\ub9bf\uc9c0 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", + "cannot_connect": "\ube0c\ub9ac\uc9c0\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "discover_timeout": "Hue \ube0c\ub9bf\uc9c0\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "no_bridges": "\ubc1c\uacac\ub41c \ud544\ub9bd\uc2a4 Hue \ube0c\ub9bf\uc9c0\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", + "not_hue_bridge": "Hue \ube0c\ub9bf\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "linking": "\uc54c \uc218 \uc5c6\ub294 \uc5f0\uacb0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "register_failed": "\ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" + }, + "step": { + "init": { + "data": { + "host": "\ud638\uc2a4\ud2b8" + }, + "title": "Hue \ube0c\ub9bf\uc9c0 \uc120\ud0dd" + }, + "link": { + "description": "\ube0c\ub9bf\uc9c0\uc758 \ubc84\ud2bc\uc744 \ub20c\ub7ec \ud544\ub9bd\uc2a4 Hue\ub97c Home Assistant\uc5d0 \ub4f1\ub85d\ud558\uc138\uc694.\n\n![\ube0c\ub9bf\uc9c0 \ubc84\ud2bc \uc704\uce58](/static/images/config_philips_hue.jpg)", + "title": "\ud5c8\ube0c \uc5f0\uacb0" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\uccab \ubc88\uc9f8 \ubc84\ud2bc", + "button_2": "\ub450 \ubc88\uc9f8 \ubc84\ud2bc", + "button_3": "\uc138 \ubc88\uc9f8 \ubc84\ud2bc", + "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_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/hue/translations/lb.json b/homeassistant/components/hue/translations/lb.json new file mode 100644 index 00000000000..02a4924d59f --- /dev/null +++ b/homeassistant/components/hue/translations/lb.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "All Philips Hue Bridge si scho\u00a0konfigur\u00e9iert", + "already_configured": "Bridge ass scho konfigur\u00e9iert", + "already_in_progress": "Konfiguratioun fir d\u00ebsen Apparat ass schonn am gaang.", + "cannot_connect": "Keng Verbindung mat der bridge m\u00e9iglech", + "discover_timeout": "Keng Hue bridge fonnt", + "no_bridges": "Keng Philips Hue Bridge fonnt", + "not_hue_bridge": "Keng Hue Bridge", + "unknown": "Onbekannten Feeler opgetrueden" + }, + "error": { + "linking": "Onbekannte Liaisoun's Feeler opgetrueden", + "register_failed": "Feeler beim registr\u00e9ieren, prob\u00e9iert w.e.g. nach emol" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Hue Bridge auswielen" + }, + "link": { + "description": "Dr\u00e9ckt de Kn\u00e4ppchen un der Bridge fir den Philips Hue mam Home Assistant ze registr\u00e9ieren.\n\n![Kn\u00e4ppchen un der Bridge](/static/images/config_philips_hue.jpg)", + "title": "Link Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u00c9ischte Kn\u00e4ppchen", + "button_2": "Zweete Kn\u00e4ppchen", + "button_3": "Dr\u00ebtte Kn\u00e4ppchen", + "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_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/hue/translations/nl.json b/homeassistant/components/hue/translations/nl.json new file mode 100644 index 00000000000..346bc8af9ac --- /dev/null +++ b/homeassistant/components/hue/translations/nl.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "all_configured": "Alle Philips Hue bridges zijn al geconfigureerd", + "already_configured": "Bridge is al geconfigureerd", + "already_in_progress": "De configuratiestroom voor het apparaat is al in volle gang.", + "cannot_connect": "Kan geen verbinding maken met bridge", + "discover_timeout": "Hue bridges kunnen niet worden gevonden", + "no_bridges": "Geen Philips Hue bridges ontdekt", + "not_hue_bridge": "Dit is geen Hue bridge", + "unknown": "Onbekende fout opgetreden" + }, + "error": { + "linking": "Er is een onbekende verbindingsfout opgetreden.", + "register_failed": "Registratie is mislukt, probeer het opnieuw" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Kies Hue bridge" + }, + "link": { + "description": "Druk op de knop van de bridge om Philips Hue te registreren met Home Assistant. \n\n![Locatie van de knop op bridge](/static/images/config_philips_hue.jpg)", + "title": "Link Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Eerste knop", + "button_2": "Tweede knop", + "button_3": "Derde knop", + "button_4": "Vierde knop", + "turn_off": "Uitschakelen", + "turn_on": "Inschakelen" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/nn.json b/homeassistant/components/hue/translations/nn.json new file mode 100644 index 00000000000..01ca31cec2b --- /dev/null +++ b/homeassistant/components/hue/translations/nn.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "Alle Philips Hue-bruer er allereie konfiguert", + "already_configured": "Brua er allereie konfiguert", + "cannot_connect": "Klarte ikkje \u00e5 kople til brua", + "discover_timeout": "Klarte ikkje \u00e5 oppdage Hue-bruer", + "no_bridges": "Oppdaga ingen Philips Hue-bruer", + "unknown": "Ukjent feil oppstod" + }, + "error": { + "linking": "Ukjent linkefeil oppstod.", + "register_failed": "Kunne ikkje registrere, pr\u00f8v igjen" + }, + "step": { + "init": { + "data": { + "host": "Vert" + }, + "title": "Vel Hue bru" + }, + "link": { + "description": "Trykk p\u00e5 knappen p\u00e5 brua, for \u00e5 registrere Philips Hue med Home Assistant.\n\n![Lokasjon til knappen p\u00e5 brua](/statisk/bilete/konfiguer_philips_hue.jpg)", + "title": "Link Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/no.json b/homeassistant/components/hue/translations/no.json new file mode 100644 index 00000000000..93167cd6ac8 --- /dev/null +++ b/homeassistant/components/hue/translations/no.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "Alle Philips Hue Bridger er allerede konfigurert", + "already_configured": "Bridge er allerede konfigurert", + "already_in_progress": "Konfigurasjonsflyt for bro p\u00e5g\u00e5r allerede.", + "cannot_connect": "Kan ikke koble til Bridge", + "discover_timeout": "Kunne ikke oppdage Hue Bridger", + "no_bridges": "Ingen Philips Hue Bridger oppdaget", + "not_hue_bridge": "Ikke en Hue bro", + "unknown": "Ukjent feil oppstod" + }, + "error": { + "linking": "Ukjent koblingsfeil oppstod.", + "register_failed": "Registrering feilet, vennligst pr\u00f8v igjen" + }, + "step": { + "init": { + "data": { + "host": "Vert" + }, + "title": "Velg Hue Bridge" + }, + "link": { + "description": "Trykk p\u00e5 knappen p\u00e5 Bridgen for \u00e5 registrere Philips Hue med Home Assistant. \n\n ![Knappens plassering p\u00e5 Bridgen](/static/images/config_philips_hue.jpg)", + "title": "" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "F\u00f8rste knapp", + "button_2": "Andre knapp", + "button_3": "Tredje knapp", + "button_4": "Fjerde knapp", + "dim_down": "Dimm ned", + "dim_up": "Dimm opp", + "double_buttons_1_3": "F\u00f8rste og tredje knapper", + "double_buttons_2_4": "Andre og fjerde knapper", + "turn_off": "Skru av", + "turn_on": "Sl\u00e5 p\u00e5" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\"-knappen sluppet etter langt trykk", + "remote_button_short_press": "\"{subtype}\" -knappen ble trykket", + "remote_button_short_release": "\"{subtype}\"-knappen sluppet", + "remote_double_button_long_press": "Begge \" {subtype} \" utgitt etter lang trykk", + "remote_double_button_short_press": "Begge \" {subtype} \" utgitt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/pl.json b/homeassistant/components/hue/translations/pl.json new file mode 100644 index 00000000000..b1f635026e6 --- /dev/null +++ b/homeassistant/components/hue/translations/pl.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "Wszystkie mostki Hue s\u0105 ju\u017c skonfigurowane.", + "already_configured": "Mostek jest ju\u017c skonfigurowany.", + "already_in_progress": "Konfiguracja mostka jest ju\u017c w toku.", + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z mostkiem", + "discover_timeout": "Nie mo\u017cna wykry\u0107 \u017cadnych mostk\u00f3w Hue", + "no_bridges": "Nie wykryto \u017cadnych mostk\u00f3w Hue", + "not_hue_bridge": "To nie jest mostek Hue", + "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d" + }, + "error": { + "linking": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d w trakcie \u0142\u0105czenia.", + "register_failed": "Nie uda\u0142o si\u0119 zarejestrowa\u0107. Spr\u00f3buj ponownie." + }, + "step": { + "init": { + "data": { + "host": "Nazwa hosta lub adres IP" + }, + "title": "Wybierz mostek Hue" + }, + "link": { + "description": "Naci\u015bnij przycisk na mostku, aby zarejestrowa\u0107 Philips Hue w Home Assistant.\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", + "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/hue/translations/pt-BR.json b/homeassistant/components/hue/translations/pt-BR.json new file mode 100644 index 00000000000..251ee74c9de --- /dev/null +++ b/homeassistant/components/hue/translations/pt-BR.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "all_configured": "Todas as pontes Philips Hue j\u00e1 est\u00e3o configuradas", + "already_configured": "A ponte j\u00e1 est\u00e1 configurada", + "already_in_progress": "O fluxo de configura\u00e7\u00e3o da ponte j\u00e1 est\u00e1 em andamento.", + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se \u00e0 ponte", + "discover_timeout": "Incapaz de descobrir pontes Hue", + "no_bridges": "N\u00e3o h\u00e1 pontes Philips Hue descobertas", + "not_hue_bridge": "N\u00e3o \u00e9 uma ponte Hue", + "unknown": "Ocorreu um erro desconhecido" + }, + "error": { + "linking": "Ocorreu um erro de liga\u00e7\u00e3o desconhecido.", + "register_failed": "Falhou ao registrar, por favor tente novamente" + }, + "step": { + "init": { + "data": { + "host": "Hospedeiro" + }, + "title": "Escolha a ponte Hue" + }, + "link": { + "description": "Pressione o bot\u00e3o na ponte para registrar o Philips Hue com o Home Assistant. \n\n ![Localiza\u00e7\u00e3o do bot\u00e3o na ponte](/static/images/config_philips_hue.jpg)", + "title": "Hub de links" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/pt.json b/homeassistant/components/hue/translations/pt.json new file mode 100644 index 00000000000..dd465659567 --- /dev/null +++ b/homeassistant/components/hue/translations/pt.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "all_configured": "Todos os hubs Philips Hue j\u00e1 est\u00e3o configurados", + "already_configured": "Hue j\u00e1 est\u00e1 configurado", + "cannot_connect": "N\u00e3o foi poss\u00edvel conectar-se ao hub", + "discover_timeout": "Nenhum hub Hue descoberto", + "no_bridges": "Nenhum hub Philips Hue descoberto", + "unknown": "Ocorreu um erro desconhecido" + }, + "error": { + "linking": "Ocorreu um erro de liga\u00e7\u00e3o desconhecido.", + "register_failed": "Falha ao registar, por favor, tente novamente" + }, + "step": { + "init": { + "data": { + "host": "Servidor" + }, + "title": "Hue bridge" + }, + "link": { + "description": "Pressione o bot\u00e3o no Philips Hue para registar com o Home Assistant. \n\n![Localiza\u00e7\u00e3o do bot\u00e3o] (/static/images/config_philips_hue.jpg)", + "title": "Link Hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/ro.json b/homeassistant/components/hue/translations/ro.json new file mode 100644 index 00000000000..055cd02dffb --- /dev/null +++ b/homeassistant/components/hue/translations/ro.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "all_configured": "Toate pun\u021bile Philips Hue sunt deja configurate", + "already_configured": "Gateway-ul este deja configurat", + "cannot_connect": "Nu se poate conecta la gateway.", + "discover_timeout": "Imposibil de descoperit podurile Hue" + }, + "error": { + "linking": "A ap\u0103rut o eroare de leg\u0103tur\u0103 necunoscut\u0103.", + "register_failed": "Nu a reu\u0219it \u00eenregistrarea, \u00eencerca\u021bi din nou" + }, + "step": { + "init": { + "data": { + "host": "Gazd\u0103" + } + }, + "link": { + "description": "Ap\u0103sa\u021bi butonul de pe pod pentru a \u00eenregistra Philips Hue cu Home Assistant. \n\n![Loca\u021bia butonului pe pod](/static/images/config_philips_hue.jpg)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/ru.json b/homeassistant/components/hue/translations/ru.json new file mode 100644 index 00000000000..2b92391156a --- /dev/null +++ b/homeassistant/components/hue/translations/ru.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "\u0412\u0441\u0435 Philips Hue \u0448\u043b\u044e\u0437\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.", + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0448\u043b\u044e\u0437\u0443.", + "discover_timeout": "\u0428\u043b\u044e\u0437 Philips Hue \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d.", + "no_bridges": "\u0428\u043b\u044e\u0437\u044b Philips Hue \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", + "not_hue_bridge": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u043b\u044e\u0437\u043e\u043c Hue.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "error": { + "linking": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f.", + "register_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430." + }, + "step": { + "init": { + "data": { + "host": "\u0425\u043e\u0441\u0442" + }, + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u043b\u044e\u0437 Hue" + }, + "link": { + "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u0448\u043b\u044e\u0437\u0435 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 Philips Hue \u0432 Home Assistant.\n\n![\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0448\u043b\u044e\u0437\u0435](/static/images/config_philips_hue.jpg)", + "title": "Philips Hue" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "dim_down": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f", + "dim_up": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f", + "double_buttons_1_3": "\u041f\u0435\u0440\u0432\u0430\u044f \u0438 \u0442\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0438", + "double_buttons_2_4": "\u0412\u0442\u043e\u0440\u0430\u044f \u0438 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0438", + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + }, + "trigger_type": { + "remote_button_long_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", + "remote_button_short_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430", + "remote_button_short_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", + "remote_double_button_long_press": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", + "remote_double_button_short_press": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u044b" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/sl.json b/homeassistant/components/hue/translations/sl.json new file mode 100644 index 00000000000..cefd7393f2a --- /dev/null +++ b/homeassistant/components/hue/translations/sl.json @@ -0,0 +1,47 @@ +{ + "config": { + "abort": { + "all_configured": "Vsi mostovi Philips Hue so \u017ee konfigurirani", + "already_configured": "Most je \u017ee konfiguriran", + "already_in_progress": "Konfiguracijski tok za most je \u017ee v teku.", + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave z mostom", + "discover_timeout": "Ni bilo mogo\u010de odkriti Hue mostov", + "no_bridges": "Ni odkritih mostov Philips Hue", + "not_hue_bridge": "Ni Hue most", + "unknown": "Pri\u0161lo je do neznane napake" + }, + "error": { + "linking": "Pri\u0161lo je do neznane napake pri povezavi.", + "register_failed": "Registracija ni uspela, poskusite znova" + }, + "step": { + "init": { + "data": { + "host": "Host" + }, + "title": "Izberite Hue most" + }, + "link": { + "description": "Pritisnite gumb na mostu, da registrirate Philips Hue s Home Assistantom. \n\n![Polo\u017eaj gumba na mostu](/static/images/config_philips_hue.jpg)", + "title": "Link Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Prvi gumb", + "button_2": "Drugi gumb", + "button_3": "Tretji gumb", + "button_4": "\u010cetrti gumb", + "dim_down": "Zatemnite", + "dim_up": "pove\u010dajte mo\u010d", + "turn_off": "Ugasni", + "turn_on": "Pri\u017egi" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", + "remote_button_short_press": "Pritisnjen \"{subtype}\" gumb", + "remote_button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/sv.json b/homeassistant/components/hue/translations/sv.json new file mode 100644 index 00000000000..894c4f9f988 --- /dev/null +++ b/homeassistant/components/hue/translations/sv.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "all_configured": "Alla Philips Hue-bryggor \u00e4r redan konfigurerade", + "already_configured": "Bryggan \u00e4r redan konfigurerad", + "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r bryggan p\u00e5g\u00e5r redan.", + "cannot_connect": "Det gick inte att ansluta till bryggan", + "discover_timeout": "Det gick inte att uppt\u00e4cka n\u00e5gra Hue-bryggor", + "no_bridges": "Inga Philips Hue-bryggor uppt\u00e4cktes", + "not_hue_bridge": "Inte en Hue-brygga", + "unknown": "Ett ok\u00e4nt fel intr\u00e4ffade" + }, + "error": { + "linking": "Ett ok\u00e4nt l\u00e4nkningsfel intr\u00e4ffade.", + "register_failed": "Misslyckades med att registrera, v\u00e4nligen f\u00f6rs\u00f6k igen" + }, + "step": { + "init": { + "data": { + "host": "V\u00e4rd" + }, + "title": "V\u00e4lj Hue-brygga" + }, + "link": { + "description": "Tryck p\u00e5 knappen p\u00e5 bryggan f\u00f6r att registrera Philips Hue med Home Assistant. \n\n![Placering av knapp p\u00e5 brygga](/static/images/config_philips_hue.jpg)", + "title": "L\u00e4nka hub" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/th.json b/homeassistant/components/hue/translations/th.json new file mode 100644 index 00000000000..3de410802f3 --- /dev/null +++ b/homeassistant/components/hue/translations/th.json @@ -0,0 +1,10 @@ +{ + "config": { + "abort": { + "unknown": "\u0e40\u0e01\u0e34\u0e14\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e17\u0e23\u0e32\u0e1a\u0e2a\u0e32\u0e40\u0e2b\u0e15\u0e38" + }, + "error": { + "register_failed": "\u0e01\u0e32\u0e23\u0e25\u0e07\u0e17\u0e30\u0e40\u0e1a\u0e35\u0e22\u0e19\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27\u0e42\u0e1b\u0e23\u0e14\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/.translations/vi.json b/homeassistant/components/hue/translations/vi.json similarity index 100% rename from homeassistant/components/hue/.translations/vi.json rename to homeassistant/components/hue/translations/vi.json diff --git a/homeassistant/components/hue/translations/zh-Hans.json b/homeassistant/components/hue/translations/zh-Hans.json new file mode 100644 index 00000000000..f3b763c7b0c --- /dev/null +++ b/homeassistant/components/hue/translations/zh-Hans.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "all_configured": "\u5168\u90e8\u98de\u5229\u6d66 Hue \u6865\u63a5\u5668\u5df2\u914d\u7f6e", + "already_configured": "\u98de\u5229\u6d66 Hue Bridge \u5df2\u914d\u7f6e\u5b8c\u6210", + "already_in_progress": "\u7f51\u6865\u7684\u914d\u7f6e\u6d41\u5df2\u5728\u8fdb\u884c\u4e2d\u3002", + "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230 \u98de\u5229\u6d66 Hue Bridge", + "discover_timeout": "\u65e0\u6cd5\u55c5\u63a2\u5230 Hue \u6865\u63a5\u5668", + "no_bridges": "\u672a\u53d1\u73b0\u98de\u5229\u6d66 Hue Bridge", + "unknown": "\u51fa\u73b0\u672a\u77e5\u7684\u9519\u8bef" + }, + "error": { + "linking": "\u53d1\u751f\u672a\u77e5\u7684\u8fde\u63a5\u9519\u8bef\u3002", + "register_failed": "\u6ce8\u518c\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5" + }, + "step": { + "init": { + "data": { + "host": "\u4e3b\u673a" + }, + "title": "\u9009\u62e9 Hue Bridge" + }, + "link": { + "description": "\u8bf7\u6309\u4e0b\u6865\u63a5\u5668\u4e0a\u7684\u6309\u94ae\uff0c\u4ee5\u5728 Home Assistant \u4e0a\u6ce8\u518c\u98de\u5229\u6d66 Hue\u3002\n\n![\u6865\u63a5\u5668\u6309\u94ae\u4f4d\u7f6e](/static/images/config_philips_hue.jpg)", + "title": "\u8fde\u63a5\u4e2d\u67a2" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/zh-Hant.json b/homeassistant/components/hue/translations/zh-Hant.json new file mode 100644 index 00000000000..ff0cf55f2e9 --- /dev/null +++ b/homeassistant/components/hue/translations/zh-Hant.json @@ -0,0 +1,51 @@ +{ + "config": { + "abort": { + "all_configured": "\u6240\u6709 Philips Hue Bridge \u7686\u5df2\u8a2d\u5b9a\u5b8c\u6210", + "already_configured": "Bridge \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "Bridge \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Bridge", + "discover_timeout": "\u7121\u6cd5\u641c\u5c0b\u5230 Hue Bridge", + "no_bridges": "\u672a\u641c\u5c0b\u5230 Philips Hue Bridge", + "not_hue_bridge": "\u975e Hue Bridge \u8a2d\u5099", + "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4" + }, + "error": { + "linking": "\u767c\u751f\u672a\u77e5\u9023\u7d50\u932f\u8aa4\u3002", + "register_failed": "\u8a3b\u518a\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66" + }, + "step": { + "init": { + "data": { + "host": "\u4e3b\u6a5f\u7aef" + }, + "title": "\u9078\u64c7 Hue Bridge" + }, + "link": { + "description": "\u6309\u4e0b Bridge \u4e0a\u7684\u6309\u9215\uff0c\u4ee5\u5c07 Philips Hue \u8a3b\u518a\u81f3 Home Assistant\u3002\n\n![Location of button on bridge](/static/images/config_philips_hue.jpg)", + "title": "\u9023\u7d50 Hub" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", + "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", + "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", + "button_4": "\u7b2c\u56db\u500b\u6309\u9215", + "dim_down": "\u8abf\u6697", + "dim_up": "\u8abf\u4eae", + "double_buttons_1_3": "\u7b2c\u4e00\u8207\u7b2c\u4e09\u500b\u6309\u9215", + "double_buttons_2_4": "\u7b2c\u4e8c\u8207\u7b2c\u56db\u500b\u6309\u9215", + "turn_off": "\u95dc\u9589", + "turn_on": "\u958b\u555f" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\" \u6309\u9215\u9577\u6309\u5f8c\u91cb\u653e", + "remote_button_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b", + "remote_button_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e", + "remote_double_button_long_press": "\"{subtype}\" \u4e00\u8d77\u9577\u6309\u5f8c\u91cb\u653e", + "remote_double_button_short_press": "\"{subtype}\" \u4e00\u8d77\u91cb\u653e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hunterdouglas_powerview/manifest.json b/homeassistant/components/hunterdouglas_powerview/manifest.json index b72efc431c3..68fc6118a34 100644 --- a/homeassistant/components/hunterdouglas_powerview/manifest.json +++ b/homeassistant/components/hunterdouglas_powerview/manifest.json @@ -3,6 +3,5 @@ "name": "Hunter Douglas PowerView", "documentation": "https://www.home-assistant.io/integrations/hunterdouglas_powerview", "requirements": ["aiopvapi==1.6.14"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hunterdouglas_powerview/scene.py b/homeassistant/components/hunterdouglas_powerview/scene.py index 1ee82ce165c..b73ce8fd7d5 100644 --- a/homeassistant/components/hunterdouglas_powerview/scene.py +++ b/homeassistant/components/hunterdouglas_powerview/scene.py @@ -1,5 +1,6 @@ """Support for Powerview scenes from a Powerview hub.""" import logging +from typing import Any from aiopvapi.helpers.aiorequest import AioRequest from aiopvapi.resources.scene import Scene as PvScene @@ -97,6 +98,6 @@ class PowerViewScene(Scene): """Icon to use in the frontend.""" return "mdi:blinds" - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate scene. Try to get entities into requested state.""" await self._scene.activate() diff --git a/homeassistant/components/hydrawise/__init__.py b/homeassistant/components/hydrawise/__init__.py index 65b7b1f6f6e..28b577354d2 100644 --- a/homeassistant/components/hydrawise/__init__.py +++ b/homeassistant/components/hydrawise/__init__.py @@ -127,8 +127,10 @@ class HydrawiseEntity(Entity): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect( - self.hass, SIGNAL_UPDATE_HYDRAWISE, self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_HYDRAWISE, self._update_callback + ) ) @callback diff --git a/homeassistant/components/hydrawise/manifest.json b/homeassistant/components/hydrawise/manifest.json index a9555beaa7b..1d6a2ee85ea 100644 --- a/homeassistant/components/hydrawise/manifest.json +++ b/homeassistant/components/hydrawise/manifest.json @@ -3,6 +3,5 @@ "name": "Hunter Hydrawise", "documentation": "https://www.home-assistant.io/integrations/hydrawise", "requirements": ["hydrawiser==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/hydrawise/sensor.py b/homeassistant/components/hydrawise/sensor.py index 53bca799657..88146dbeb0d 100644 --- a/homeassistant/components/hydrawise/sensor.py +++ b/homeassistant/components/hydrawise/sensor.py @@ -58,11 +58,7 @@ class HydrawiseSensor(HydrawiseEntity): if relay["nicetime"] == "Not scheduled": self._state = "not_scheduled" else: - self._state = ( - relay["nicetime"].split(",")[0] - + " " - + relay["nicetime"].split(" ")[3] - ) + self._state = f"{relay['nicetime'].split(',')[0]} {relay['nicetime'].split(' ')[3]}" @property def icon(self): diff --git a/homeassistant/components/hyperion/light.py b/homeassistant/components/hyperion/light.py index fa5d58fb385..fc96f672afb 100644 --- a/homeassistant/components/hyperion/light.py +++ b/homeassistant/components/hyperion/light.py @@ -285,7 +285,7 @@ class Hyperion(Light): sock.close() return False - sock.send(bytearray(json.dumps(request) + "\n", "utf-8")) + sock.send(bytearray(f"{json.dumps(request)}\n", "utf-8")) try: buf = sock.recv(4096) except socket.timeout: diff --git a/homeassistant/components/hyperion/manifest.json b/homeassistant/components/hyperion/manifest.json index e4ac9c0897b..6d9d0ae4d9d 100644 --- a/homeassistant/components/hyperion/manifest.json +++ b/homeassistant/components/hyperion/manifest.json @@ -2,7 +2,5 @@ "domain": "hyperion", "name": "Hyperion", "documentation": "https://www.home-assistant.io/integrations/hyperion", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ialarm/manifest.json b/homeassistant/components/ialarm/manifest.json index 5ddb0a1f907..d5d32e28c59 100644 --- a/homeassistant/components/ialarm/manifest.json +++ b/homeassistant/components/ialarm/manifest.json @@ -3,6 +3,5 @@ "name": "Antifurto365 iAlarm", "documentation": "https://www.home-assistant.io/integrations/ialarm", "requirements": ["pyialarm==0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/iammeter/manifest.json b/homeassistant/components/iammeter/manifest.json index e1b021c8ce0..a5893c54f5a 100644 --- a/homeassistant/components/iammeter/manifest.json +++ b/homeassistant/components/iammeter/manifest.json @@ -2,11 +2,6 @@ "domain": "iammeter", "name": "IamMeter", "documentation": "https://www.home-assistant.io/integrations/iammeter", - "codeowners": [ - "@lewei50" - ], - "requirements": [ - "iammeter==0.1.3" - ], - "dependencies": [] + "codeowners": ["@lewei50"], + "requirements": ["iammeter==0.1.7"] } diff --git a/homeassistant/components/iaqualink/.translations/bg.json b/homeassistant/components/iaqualink/.translations/bg.json deleted file mode 100644 index 5b37bde3ee3..00000000000 --- a/homeassistant/components/iaqualink/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 iAqualink." - }, - "error": { - "connection_failure": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 iAqualink. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 / \u0438\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441" - }, - "description": "\u041c\u043e\u043b\u044f \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043d\u0430 \u0432\u0430\u0448\u0438\u044f iAqualink \u0430\u043a\u0430\u0443\u043d\u0442.", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/ca.json b/homeassistant/components/iaqualink/.translations/ca.json deleted file mode 100644 index a5456c7b0cd..00000000000 --- a/homeassistant/components/iaqualink/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar una \u00fanica connexi\u00f3 d'iAqualink." - }, - "error": { - "connection_failure": "No s'ha pogut connectar amb iAqualink. Comprova el nom d'usuari i la contrasenya." - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari / Correu electr\u00f2nic" - }, - "description": "Introdueix el nom d'usuari i la contrasenya del teu compte d'iAqualink.", - "title": "Connexi\u00f3 amb iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/da.json b/homeassistant/components/iaqualink/.translations/da.json deleted file mode 100644 index a1e1c20cbc5..00000000000 --- a/homeassistant/components/iaqualink/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt iAqualink-forbindelse." - }, - "error": { - "connection_failure": "Kan ikke oprette forbindelse til iAqualink. Kontroller dit brugernavn og din adgangskode." - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn / e-mail-adresse" - }, - "description": "Indtast brugernavn og adgangskode til din iAqualink-konto.", - "title": "Opret forbindelse til iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/de.json b/homeassistant/components/iaqualink/.translations/de.json deleted file mode 100644 index 26ff4b9dcf5..00000000000 --- a/homeassistant/components/iaqualink/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Es kann nur eine einzige iAqualink-Verbindung konfiguriert werden." - }, - "error": { - "connection_failure": "Die Verbindung zu iAqualink ist nicht m\u00f6glich. Bitte \u00fcberpr\u00fcfe den Benutzernamen und das Passwort." - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername/E-Mail-Adresse" - }, - "description": "Bitte gib den Benutzernamen und das Passwort f\u00fcr dein iAqualink-Konto ein.", - "title": "Mit iAqualink verbinden" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/en.json b/homeassistant/components/iaqualink/.translations/en.json deleted file mode 100644 index 4972c3d3ff7..00000000000 --- a/homeassistant/components/iaqualink/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure a single iAqualink connection." - }, - "error": { - "connection_failure": "Unable to connect to iAqualink. Check your username and password." - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username / Email Address" - }, - "description": "Please enter the username and password for your iAqualink account.", - "title": "Connect to iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/es.json b/homeassistant/components/iaqualink/.translations/es.json deleted file mode 100644 index 698be68bd78..00000000000 --- a/homeassistant/components/iaqualink/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puede configurar una \u00fanica conexi\u00f3n iAqualink." - }, - "error": { - "connection_failure": "No se puede conectar a iAqualink. Verifica tu nombre de usuario y contrase\u00f1a." - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario / correo electr\u00f3nico" - }, - "description": "Por favor, introduzca el nombre de usuario y la contrase\u00f1a de su cuenta de iAqualink.", - "title": "Con\u00e9ctese a iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/fr.json b/homeassistant/components/iaqualink/.translations/fr.json deleted file mode 100644 index 97971b99e9f..00000000000 --- a/homeassistant/components/iaqualink/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'une seule connexion iAqualink." - }, - "error": { - "connection_failure": "Impossible de se connecter \u00e0 iAqualink. V\u00e9rifiez votre nom d'utilisateur et votre mot de passe." - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur / adresse e-mail" - }, - "description": "Veuillez saisir le nom d'utilisateur et le mot de passe de votre compte iAqualink.", - "title": "Se connecter \u00e0 iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/it.json b/homeassistant/components/iaqualink/.translations/it.json deleted file mode 100644 index 73d840bdbd3..00000000000 --- a/homeassistant/components/iaqualink/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare una sola connessione iAqualink." - }, - "error": { - "connection_failure": "Impossibile connettersi a iAqualink. Controllare il nome utente e la password." - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome Utente / Indirizzo E-mail" - }, - "description": "Inserisci il nome utente e la password del tuo account iAqualink.", - "title": "Collegati a iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/ko.json b/homeassistant/components/iaqualink/.translations/ko.json deleted file mode 100644 index 26bfa37d6be..00000000000 --- a/homeassistant/components/iaqualink/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984 / \uc774\uba54\uc77c \uc8fc\uc18c" - }, - "description": "iAqualink \uacc4\uc815\uc758 \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "iAqualink \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/lb.json b/homeassistant/components/iaqualink/.translations/lb.json deleted file mode 100644 index db8d67eea75..00000000000 --- a/homeassistant/components/iaqualink/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen eng eenzeg iAqualink Verbindung konfigur\u00e9ieren." - }, - "error": { - "connection_failure": "Kann sech net mat iAqualink verbannen. Iwwerpr\u00e9ift \u00e4ren Benotzernumm an Passwuert" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm / E-Mail Adresse" - }, - "description": "Gitt den Benotzernumm an d'Passwuert fir \u00e4ren iAqualink Kont un.", - "title": "Mat iAqualink verbannen" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/nl.json b/homeassistant/components/iaqualink/.translations/nl.json deleted file mode 100644 index c0a515bb741..00000000000 --- a/homeassistant/components/iaqualink/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n iAqualink-verbinding configureren." - }, - "error": { - "connection_failure": "Kan geen verbinding maken met iAqualink. Controleer je gebruikersnaam en wachtwoord." - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam/E-mailadres" - }, - "description": "Voer de gebruikersnaam en het wachtwoord voor uw iAqualink-account in.", - "title": "Verbinding maken met iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/nn.json b/homeassistant/components/iaqualink/.translations/nn.json deleted file mode 100644 index ea78f0d0d5d..00000000000 --- a/homeassistant/components/iaqualink/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/no.json b/homeassistant/components/iaqualink/.translations/no.json deleted file mode 100644 index 0647f2ecfb8..00000000000 --- a/homeassistant/components/iaqualink/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bare konfigurere en enkel iAqualink-tilkobling." - }, - "error": { - "connection_failure": "Kan ikke koble til iAqualink. Sjekk brukernavnet og passordet ditt." - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn / E-postadresse" - }, - "description": "Vennligst skriv inn brukernavn og passord for iAqualink-kontoen din.", - "title": "Koble til iAqualink" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/pl.json b/homeassistant/components/iaqualink/.translations/pl.json deleted file mode 100644 index d14a2775c15..00000000000 --- a/homeassistant/components/iaqualink/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno po\u0142\u0105czenie iAqualink." - }, - "error": { - "connection_failure": "Nie mo\u017cna po\u0142\u0105czy\u0107 z iAqualink. Sprawd\u017a nazw\u0119 u\u017cytkownika i has\u0142o." - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika/adres e-mail" - }, - "description": "Wprowad\u017a nazw\u0119 u\u017cytkownika i has\u0142o do konta iAqualink.", - "title": "Po\u0142\u0105cz z iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/ru.json b/homeassistant/components/iaqualink/.translations/ru.json deleted file mode 100644 index 8c8e30fe067..00000000000 --- a/homeassistant/components/iaqualink/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "connection_failure": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a iAqualink. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0412\u0430\u0448 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d / \u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 iAqualink.", - "title": "Jandy iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/sl.json b/homeassistant/components/iaqualink/.translations/sl.json deleted file mode 100644 index e2a7f94b3d8..00000000000 --- a/homeassistant/components/iaqualink/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Konfigurirate lahko samo eno povezavo iAqualink." - }, - "error": { - "connection_failure": "Ne morete vzpostaviti povezave z iAqualink. Preverite va\u0161e uporabni\u0161ko ime in geslo." - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime / e-po\u0161tni naslov" - }, - "description": "Prosimo, vnesite uporabni\u0161ko ime in geslo za iAqualink ra\u010dun.", - "title": "Pove\u017eite se z iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/sv.json b/homeassistant/components/iaqualink/.translations/sv.json deleted file mode 100644 index aa2b4142616..00000000000 --- a/homeassistant/components/iaqualink/.translations/sv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bara konfigurera en enda iAqualink-anslutning." - }, - "error": { - "connection_failure": "Det g\u00e5r inte att ansluta till iAqualink. Kontrollera ditt anv\u00e4ndarnamn och l\u00f6senord." - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn / E-postadress" - }, - "description": "V\u00e4nligen ange anv\u00e4ndarnamn och l\u00f6senord f\u00f6r ditt iAqualink-konto.", - "title": "Anslut till iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/zh-Hant.json b/homeassistant/components/iaqualink/.translations/zh-Hant.json deleted file mode 100644 index 146088b4eff..00000000000 --- a/homeassistant/components/iaqualink/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 iAqualink \u9023\u7dda\u3002" - }, - "error": { - "connection_failure": "\u7121\u6cd5\u9023\u7dda\u81f3 iAqualink\uff0c\u8acb\u78ba\u8a8d\u60a8\u7684\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc\u3002" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31 / \u96fb\u5b50\u90f5\u4ef6" - }, - "description": "\u8acb\u8f38\u5165 iAqualink \u5e33\u865f\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc\u3002", - "title": "\u9023\u7dda\u81f3 iAqualink" - } - }, - "title": "Jandy iAqualink" - } -} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/__init__.py b/homeassistant/components/iaqualink/__init__.py index 16c8deac72e..97ddd95f50c 100644 --- a/homeassistant/components/iaqualink/__init__.py +++ b/homeassistant/components/iaqualink/__init__.py @@ -25,7 +25,6 @@ from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.core import callback from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -206,11 +205,9 @@ class AqualinkEntity(Entity): async def async_added_to_hass(self) -> None: """Set up a listener when this entity is added to HA.""" - async_dispatcher_connect(self.hass, DOMAIN, self._update_callback) - - @callback - def _update_callback(self) -> None: - self.async_schedule_update_ha_state() + self.async_on_remove( + async_dispatcher_connect(self.hass, DOMAIN, self.async_write_ha_state) + ) @property def should_poll(self) -> bool: diff --git a/homeassistant/components/iaqualink/manifest.json b/homeassistant/components/iaqualink/manifest.json index ea3b1eef8d0..d9d16038d19 100644 --- a/homeassistant/components/iaqualink/manifest.json +++ b/homeassistant/components/iaqualink/manifest.json @@ -3,7 +3,6 @@ "name": "Jandy iAqualink", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/iaqualink/", - "dependencies": [], "codeowners": ["@flz"], "requirements": ["iaqualink==0.3.1"] } diff --git a/homeassistant/components/iaqualink/strings.json b/homeassistant/components/iaqualink/strings.json index 4c706522198..f4ad099be83 100644 --- a/homeassistant/components/iaqualink/strings.json +++ b/homeassistant/components/iaqualink/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Jandy iAqualink", "step": { "user": { "title": "Connect to iAqualink", diff --git a/homeassistant/components/iaqualink/translations/bg.json b/homeassistant/components/iaqualink/translations/bg.json new file mode 100644 index 00000000000..4da913f8e24 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 iAqualink." + }, + "error": { + "connection_failure": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 iAqualink. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 / \u0438\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441" + }, + "description": "\u041c\u043e\u043b\u044f \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e\u0442\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u043d\u0430 \u0432\u0430\u0448\u0438\u044f iAqualink \u0430\u043a\u0430\u0443\u043d\u0442.", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/ca.json b/homeassistant/components/iaqualink/translations/ca.json new file mode 100644 index 00000000000..b86dd4358b0 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar una \u00fanica connexi\u00f3 d'iAqualink." + }, + "error": { + "connection_failure": "No s'ha pogut connectar amb iAqualink. Comprova el nom d'usuari i la contrasenya." + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari / Correu electr\u00f2nic" + }, + "description": "Introdueix el nom d'usuari i la contrasenya del teu compte d'iAqualink.", + "title": "Connexi\u00f3 amb iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/da.json b/homeassistant/components/iaqualink/translations/da.json new file mode 100644 index 00000000000..1988db1767f --- /dev/null +++ b/homeassistant/components/iaqualink/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt iAqualink-forbindelse." + }, + "error": { + "connection_failure": "Kan ikke oprette forbindelse til iAqualink. Kontroller dit brugernavn og din adgangskode." + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn / e-mail-adresse" + }, + "description": "Indtast brugernavn og adgangskode til din iAqualink-konto.", + "title": "Opret forbindelse til iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/de.json b/homeassistant/components/iaqualink/translations/de.json new file mode 100644 index 00000000000..2b9e1068b60 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Es kann nur eine einzige iAqualink-Verbindung konfiguriert werden." + }, + "error": { + "connection_failure": "Die Verbindung zu iAqualink ist nicht m\u00f6glich. Bitte \u00fcberpr\u00fcfe den Benutzernamen und das Passwort." + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername/E-Mail-Adresse" + }, + "description": "Bitte gib den Benutzernamen und das Passwort f\u00fcr dein iAqualink-Konto ein.", + "title": "Mit iAqualink verbinden" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/en.json b/homeassistant/components/iaqualink/translations/en.json new file mode 100644 index 00000000000..bebad01c319 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure a single iAqualink connection." + }, + "error": { + "connection_failure": "Unable to connect to iAqualink. Check your username and password." + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username / Email Address" + }, + "description": "Please enter the username and password for your iAqualink account.", + "title": "Connect to iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/es-419.json b/homeassistant/components/iaqualink/translations/es-419.json similarity index 100% rename from homeassistant/components/iaqualink/.translations/es-419.json rename to homeassistant/components/iaqualink/translations/es-419.json diff --git a/homeassistant/components/iaqualink/translations/es.json b/homeassistant/components/iaqualink/translations/es.json new file mode 100644 index 00000000000..74ae609c0d2 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puede configurar una \u00fanica conexi\u00f3n iAqualink." + }, + "error": { + "connection_failure": "No se puede conectar a iAqualink. Verifica tu nombre de usuario y contrase\u00f1a." + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario / correo electr\u00f3nico" + }, + "description": "Por favor, introduzca el nombre de usuario y la contrase\u00f1a de su cuenta de iAqualink.", + "title": "Con\u00e9ctese a iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/fr.json b/homeassistant/components/iaqualink/translations/fr.json new file mode 100644 index 00000000000..60e9634acce --- /dev/null +++ b/homeassistant/components/iaqualink/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'une seule connexion iAqualink." + }, + "error": { + "connection_failure": "Impossible de se connecter \u00e0 iAqualink. V\u00e9rifiez votre nom d'utilisateur et votre mot de passe." + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur / adresse e-mail" + }, + "description": "Veuillez saisir le nom d'utilisateur et le mot de passe de votre compte iAqualink.", + "title": "Se connecter \u00e0 iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/hu.json b/homeassistant/components/iaqualink/translations/hu.json similarity index 100% rename from homeassistant/components/iaqualink/.translations/hu.json rename to homeassistant/components/iaqualink/translations/hu.json diff --git a/homeassistant/components/iaqualink/translations/it.json b/homeassistant/components/iaqualink/translations/it.json new file mode 100644 index 00000000000..471b21cdc9e --- /dev/null +++ b/homeassistant/components/iaqualink/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare una sola connessione iAqualink." + }, + "error": { + "connection_failure": "Impossibile connettersi a iAqualink. Controllare il nome utente e la password." + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome Utente / Indirizzo E-mail" + }, + "description": "Inserisci il nome utente e la password del tuo account iAqualink.", + "title": "Collegati a iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/ko.json b/homeassistant/components/iaqualink/translations/ko.json new file mode 100644 index 00000000000..3399960dd33 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "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." + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984 / \uc774\uba54\uc77c \uc8fc\uc18c" + }, + "description": "iAqualink \uacc4\uc815\uc758 \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "iAqualink \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/lb.json b/homeassistant/components/iaqualink/translations/lb.json new file mode 100644 index 00000000000..b0d193254fa --- /dev/null +++ b/homeassistant/components/iaqualink/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen eng eenzeg iAqualink Verbindung konfigur\u00e9ieren." + }, + "error": { + "connection_failure": "Kann sech net mat iAqualink verbannen. Iwwerpr\u00e9ift \u00e4ren Benotzernumm an Passwuert" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm / E-Mail Adresse" + }, + "description": "Gitt den Benotzernumm an d'Passwuert fir \u00e4ren iAqualink Kont un.", + "title": "Mat iAqualink verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/lv.json b/homeassistant/components/iaqualink/translations/lv.json similarity index 100% rename from homeassistant/components/iaqualink/.translations/lv.json rename to homeassistant/components/iaqualink/translations/lv.json diff --git a/homeassistant/components/iaqualink/translations/nl.json b/homeassistant/components/iaqualink/translations/nl.json new file mode 100644 index 00000000000..a83dfe806e7 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n iAqualink-verbinding configureren." + }, + "error": { + "connection_failure": "Kan geen verbinding maken met iAqualink. Controleer je gebruikersnaam en wachtwoord." + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam/E-mailadres" + }, + "description": "Voer de gebruikersnaam en het wachtwoord voor uw iAqualink-account in.", + "title": "Verbinding maken met iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/nn.json b/homeassistant/components/iaqualink/translations/nn.json new file mode 100644 index 00000000000..57b177c0572 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Jandy iAqualink" +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/no.json b/homeassistant/components/iaqualink/translations/no.json new file mode 100644 index 00000000000..622cf931cba --- /dev/null +++ b/homeassistant/components/iaqualink/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bare konfigurere en enkel iAqualink-tilkobling." + }, + "error": { + "connection_failure": "Kan ikke koble til iAqualink. Sjekk brukernavnet og passordet ditt." + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn / E-postadresse" + }, + "description": "Vennligst skriv inn brukernavn og passord for iAqualink-kontoen din.", + "title": "Koble til iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/pl.json b/homeassistant/components/iaqualink/translations/pl.json new file mode 100644 index 00000000000..dd8ca0adc30 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno po\u0142\u0105czenie iAqualink." + }, + "error": { + "connection_failure": "Nie mo\u017cna po\u0142\u0105czy\u0107 z iAqualink. Sprawd\u017a nazw\u0119 u\u017cytkownika i has\u0142o." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika/adres e-mail" + }, + "description": "Wprowad\u017a nazw\u0119 u\u017cytkownika i has\u0142o do konta iAqualink.", + "title": "Po\u0142\u0105cz z iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/.translations/pt.json b/homeassistant/components/iaqualink/translations/pt.json similarity index 100% rename from homeassistant/components/iaqualink/.translations/pt.json rename to homeassistant/components/iaqualink/translations/pt.json diff --git a/homeassistant/components/iaqualink/translations/ru.json b/homeassistant/components/iaqualink/translations/ru.json new file mode 100644 index 00000000000..a5d75662546 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "connection_failure": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a iAqualink. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0412\u0430\u0448 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d / \u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 iAqualink.", + "title": "Jandy iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/sl.json b/homeassistant/components/iaqualink/translations/sl.json new file mode 100644 index 00000000000..73e988139f9 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Konfigurirate lahko samo eno povezavo iAqualink." + }, + "error": { + "connection_failure": "Ne morete vzpostaviti povezave z iAqualink. Preverite va\u0161e uporabni\u0161ko ime in geslo." + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime / e-po\u0161tni naslov" + }, + "description": "Prosimo, vnesite uporabni\u0161ko ime in geslo za iAqualink ra\u010dun.", + "title": "Pove\u017eite se z iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/sv.json b/homeassistant/components/iaqualink/translations/sv.json new file mode 100644 index 00000000000..4bab2dda632 --- /dev/null +++ b/homeassistant/components/iaqualink/translations/sv.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bara konfigurera en enda iAqualink-anslutning." + }, + "error": { + "connection_failure": "Det g\u00e5r inte att ansluta till iAqualink. Kontrollera ditt anv\u00e4ndarnamn och l\u00f6senord." + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn / E-postadress" + }, + "description": "V\u00e4nligen ange anv\u00e4ndarnamn och l\u00f6senord f\u00f6r ditt iAqualink-konto.", + "title": "Anslut till iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/zh-Hant.json b/homeassistant/components/iaqualink/translations/zh-Hant.json new file mode 100644 index 00000000000..7161fec645f --- /dev/null +++ b/homeassistant/components/iaqualink/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 iAqualink \u9023\u7dda\u3002" + }, + "error": { + "connection_failure": "\u7121\u6cd5\u9023\u7dda\u81f3 iAqualink\uff0c\u8acb\u78ba\u8a8d\u60a8\u7684\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc\u3002" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31 / \u96fb\u5b50\u90f5\u4ef6" + }, + "description": "\u8acb\u8f38\u5165 iAqualink \u5e33\u865f\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc\u3002", + "title": "\u9023\u7dda\u81f3 iAqualink" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/ca.json b/homeassistant/components/icloud/.translations/ca.json deleted file mode 100644 index c9e6f046d8a..00000000000 --- a/homeassistant/components/icloud/.translations/ca.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El compte ja ha estat configurat", - "no_device": "Cap dels teus dispositius t\u00e9 activada la opci\u00f3 \"Troba el meu iPhone\"" - }, - "error": { - "login": "Error d\u2019inici de sessi\u00f3: comprova el correu electr\u00f2nic i la contrasenya", - "send_verification_code": "No s'ha pogut enviar el codi de verificaci\u00f3", - "validate_verification_code": "No s'ha pogut verificar el codi de verificaci\u00f3, tria un dispositiu de confian\u00e7a i torna a iniciar el proc\u00e9s" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Dispositiu de confian\u00e7a" - }, - "description": "Selecciona el teu dispositiu de confian\u00e7a", - "title": "Dispositiu de confian\u00e7a iCloud" - }, - "user": { - "data": { - "password": "Contrasenya", - "username": "Correu electr\u00f2nic", - "with_family": "Amb fam\u00edlia" - }, - "description": "Introdueix les teves credencials", - "title": "Credencials d'iCloud" - }, - "verification_code": { - "data": { - "verification_code": "Codi de verificaci\u00f3" - }, - "description": "Introdueix el codi de verificaci\u00f3 que rebis d'iCloud", - "title": "Codi de verificaci\u00f3 iCloud" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/da.json b/homeassistant/components/icloud/.translations/da.json deleted file mode 100644 index 49d1a82a753..00000000000 --- a/homeassistant/components/icloud/.translations/da.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontoen er allerede konfigureret", - "no_device": "Ingen af dine enheder har aktiveret \"Find min iPhone\"" - }, - "error": { - "login": "Loginfejl: Kontroller din email og adgangskode", - "send_verification_code": "Bekr\u00e6ftelseskoden kunne ikke sendes", - "validate_verification_code": "Bekr\u00e6ftelseskoden kunne ikke bekr\u00e6ftes, V\u00e6lg en betroet enhed, og start bekr\u00e6ftelsen igen" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Betroet enhed" - }, - "description": "V\u00e6lg din betroede enhed", - "title": "iCloud-enhed, der er tillid til" - }, - "user": { - "data": { - "password": "Adgangskode", - "username": "Email", - "with_family": "Med familien" - }, - "description": "Indtast dine legitimationsoplysninger", - "title": "iCloud-legitimationsoplysninger" - }, - "verification_code": { - "data": { - "verification_code": "Bekr\u00e6ftelseskode" - }, - "description": "Indtast venligst den bekr\u00e6ftelseskode, du lige har modtaget fra iCloud", - "title": "iCloud-bekr\u00e6ftelseskode" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/de.json b/homeassistant/components/icloud/.translations/de.json deleted file mode 100644 index e317741a0a2..00000000000 --- a/homeassistant/components/icloud/.translations/de.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Konto bereits konfiguriert", - "no_device": "Auf keinem Ihrer Ger\u00e4te ist \"Find my iPhone\" aktiviert" - }, - "error": { - "login": "Login-Fehler: Bitte \u00fcberpr\u00fcfe deine E-Mail & Passwort", - "send_verification_code": "Fehler beim Senden des Best\u00e4tigungscodes", - "validate_verification_code": "Verifizierung des Verifizierungscodes fehlgeschlagen. W\u00e4hle ein vertrauensw\u00fcrdiges Ger\u00e4t aus und starte die Verifizierung erneut" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Vertrauensw\u00fcrdiges Ger\u00e4t" - }, - "description": "W\u00e4hle dein vertrauensw\u00fcrdiges Ger\u00e4t aus", - "title": "iCloud vertrauensw\u00fcrdiges Ger\u00e4t" - }, - "user": { - "data": { - "password": "Passwort", - "username": "E-Mail", - "with_family": "Mit Familie" - }, - "description": "Gib deine Zugangsdaten ein", - "title": "iCloud-Anmeldeinformationen" - }, - "verification_code": { - "data": { - "verification_code": "Verifizierungscode" - }, - "description": "Bitte gib den Best\u00e4tigungscode ein, den du gerade von iCloud erhalten hast", - "title": "iCloud-Best\u00e4tigungscode" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/en.json b/homeassistant/components/icloud/.translations/en.json deleted file mode 100644 index 19a07a19c68..00000000000 --- a/homeassistant/components/icloud/.translations/en.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account already configured", - "no_device": "None of your devices have \"Find my iPhone\" activated" - }, - "error": { - "login": "Login error: please check your email & password", - "send_verification_code": "Failed to send verification code", - "validate_verification_code": "Failed to verify your verification code, choose a trust device and start the verification again" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Trusted device" - }, - "description": "Select your trusted device", - "title": "iCloud trusted device" - }, - "user": { - "data": { - "password": "Password", - "username": "Email", - "with_family": "With family" - }, - "description": "Enter your credentials", - "title": "iCloud credentials" - }, - "verification_code": { - "data": { - "verification_code": "Verification code" - }, - "description": "Please enter the verification code you just received from iCloud", - "title": "iCloud verification code" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/es.json b/homeassistant/components/icloud/.translations/es.json deleted file mode 100644 index 02f07e5d492..00000000000 --- a/homeassistant/components/icloud/.translations/es.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cuenta ya configurada", - "no_device": "Ninguno de tus dispositivos tiene activado \"Buscar mi iPhone\"" - }, - "error": { - "login": "Error de inicio de sesi\u00f3n: compruebe su direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a", - "send_verification_code": "Error al enviar el c\u00f3digo de verificaci\u00f3n", - "validate_verification_code": "No se pudo verificar el c\u00f3digo de verificaci\u00f3n, elegir un dispositivo de confianza e iniciar la verificaci\u00f3n de nuevo" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Dispositivo de confianza" - }, - "description": "Seleccione su dispositivo de confianza", - "title": "Dispositivo de confianza iCloud" - }, - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Correo electr\u00f3nico", - "with_family": "Con la familia" - }, - "description": "Ingrese sus credenciales", - "title": "Credenciales iCloud" - }, - "verification_code": { - "data": { - "verification_code": "C\u00f3digo de verificaci\u00f3n" - }, - "description": "Por favor, introduzca el c\u00f3digo de verificaci\u00f3n que acaba de recibir de iCloud", - "title": "C\u00f3digo de verificaci\u00f3n de iCloud" - } - }, - "title": "iCloud de Apple" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/fr.json b/homeassistant/components/icloud/.translations/fr.json deleted file mode 100644 index e1a2517e4d7..00000000000 --- a/homeassistant/components/icloud/.translations/fr.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Compte d\u00e9j\u00e0 configur\u00e9", - "no_device": "Aucun de vos appareils n'a activ\u00e9 \"Find my iPhone\"" - }, - "error": { - "login": "Erreur de connexion: veuillez v\u00e9rifier votre e-mail et votre mot de passe", - "send_verification_code": "\u00c9chec de l'envoi du code de v\u00e9rification", - "validate_verification_code": "Impossible de v\u00e9rifier votre code de v\u00e9rification, choisissez un appareil de confiance et recommencez la v\u00e9rification" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Appareil de confiance" - }, - "description": "S\u00e9lectionnez votre appareil de confiance", - "title": "Appareil de confiance iCloud" - }, - "user": { - "data": { - "password": "Mot de passe", - "username": "Email" - }, - "description": "Entrez vos identifiants", - "title": "Identifiants iCloud" - }, - "verification_code": { - "data": { - "verification_code": "Code de v\u00e9rification" - }, - "description": "Veuillez entrer le code de v\u00e9rification que vous venez de recevoir d'iCloud", - "title": "Code de v\u00e9rification iCloud" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/hu.json b/homeassistant/components/icloud/.translations/hu.json deleted file mode 100644 index 14c8c8e4e2f..00000000000 --- a/homeassistant/components/icloud/.translations/hu.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "error": { - "login": "Bejelentkez\u00e9si hiba: k\u00e9rj\u00fck, ellen\u0151rizze e-mail c\u00edm\u00e9t \u00e9s jelszav\u00e1t", - "send_verification_code": "Nem siker\u00fclt elk\u00fcldeni az ellen\u0151rz\u0151 k\u00f3dot", - "validate_verification_code": "Nem siker\u00fclt ellen\u0151rizni az ellen\u0151rz\u0151 k\u00f3dot, ki kell v\u00e1lasztania egy megb\u00edzhat\u00f3s\u00e1gi eszk\u00f6zt, \u00e9s \u00fajra kell ind\u00edtania az ellen\u0151rz\u00e9st" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Megb\u00edzhat\u00f3 eszk\u00f6z" - }, - "description": "V\u00e1lassza ki a megb\u00edzhat\u00f3 eszk\u00f6zt", - "title": "iCloud megb\u00edzhat\u00f3 eszk\u00f6z" - }, - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "E-mail" - }, - "description": "Adja meg hiteles\u00edt\u0151 adatait", - "title": "iCloud hiteles\u00edt\u0151 adatok" - }, - "verification_code": { - "data": { - "verification_code": "Ellen\u0151rz\u0151 k\u00f3d" - }, - "description": "K\u00e9rj\u00fck, \u00edrja be az iCloud-t\u00f3l \u00e9ppen kapott ellen\u0151rz\u0151 k\u00f3dot", - "title": "iCloud ellen\u0151rz\u0151 k\u00f3d" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/it.json b/homeassistant/components/icloud/.translations/it.json deleted file mode 100644 index 61cd4690179..00000000000 --- a/homeassistant/components/icloud/.translations/it.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account gi\u00e0 configurato", - "no_device": "Nessuno dei tuoi dispositivi ha attivato \"Trova il mio iPhone\"" - }, - "error": { - "login": "Errore di accesso: si prega di controllare la tua e-mail e la password", - "send_verification_code": "Impossibile inviare il codice di verifica", - "validate_verification_code": "Impossibile verificare il codice di verifica, scegliere un dispositivo attendibile e riavviare la verifica" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Dispositivo attendibile" - }, - "description": "Selezionare il dispositivo attendibile", - "title": "Dispositivo attendibile iCloud" - }, - "user": { - "data": { - "password": "Password", - "username": "E-mail", - "with_family": "Con la famiglia" - }, - "description": "Inserisci le tue credenziali", - "title": "Credenziali iCloud" - }, - "verification_code": { - "data": { - "verification_code": "Codice di verifica" - }, - "description": "Inserisci il codice di verifica che hai appena ricevuto da iCloud", - "title": "Codice di verifica iCloud" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/ko.json b/homeassistant/components/icloud/.translations/ko.json deleted file mode 100644 index 8bc26c300e0..00000000000 --- a/homeassistant/components/icloud/.translations/ko.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "no_device": "\"\ub098\uc758 iPhone \ucc3e\uae30\"\uac00 \ud65c\uc131\ud654\ub41c \uae30\uae30\uac00 \uc5c6\uc2b5\ub2c8\ub2e4" - }, - "error": { - "login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc774\uba54\uc77c \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694", - "send_verification_code": "\uc778\uc99d \ucf54\ub4dc\ub97c \ubcf4\ub0b4\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4", - "validate_verification_code": "\uc778\uc99d \ucf54\ub4dc\ub97c \ud655\uc778\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30\ub97c \uc120\ud0dd\ud558\uace0 \uc778\uc99d\uc744 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "\uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30" - }, - "description": "\uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694", - "title": "iCloud \uac00 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30" - }, - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc774\uba54\uc77c", - "with_family": "\uac00\uc871\uc6a9" - }, - "description": "\uc790\uaca9 \uc99d\uba85\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "iCloud \uc790\uaca9 \uc99d\uba85" - }, - "verification_code": { - "data": { - "verification_code": "\uc778\uc99d \ucf54\ub4dc" - }, - "description": "iCloud \uc5d0\uc11c \ubc1b\uc740 \uc778\uc99d \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "iCloud \uc778\uc99d \ucf54\ub4dc" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/lb.json b/homeassistant/components/icloud/.translations/lb.json deleted file mode 100644 index 0aa3c90eff0..00000000000 --- a/homeassistant/components/icloud/.translations/lb.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kont ass scho konfigur\u00e9iert", - "no_device": "Kee vun dengen Apparater huet \"Find my iPhone\" aktiv\u00e9iert" - }, - "error": { - "login": "Feeler beim Login: iwwerpr\u00e9ift \u00e4r E-Mail & Passwuert", - "send_verification_code": "Feeler beim sch\u00e9cken vum Verifikatiouns Code", - "validate_verification_code": "Feeler beim iwwerpr\u00e9iwe vum Verifikatiouns Code, wielt ee vertrauten Apparat aus a start d'Iwwerpr\u00e9iwung nei" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Vertrauten Apparat" - }, - "description": "Wielt \u00e4ren vertrauten Apparat aus", - "title": "iCloud vertrauten Apparat" - }, - "user": { - "data": { - "password": "Passwuert", - "username": "E-Mail", - "with_family": "Mat der Famill" - }, - "description": "F\u00ebllt \u00e4r Umeldungs Informatiounen aus", - "title": "iCloud Umeldungs Informatiounen" - }, - "verification_code": { - "data": { - "verification_code": "Verifikatiouns Code" - }, - "description": "Gitt de Verifikatiouns Code an deen dir elo grad vun iCloud kritt hutt", - "title": "iCloud Verifikatiouns Code" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/lv.json b/homeassistant/components/icloud/.translations/lv.json deleted file mode 100644 index 6e642b85933..00000000000 --- a/homeassistant/components/icloud/.translations/lv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "step": { - "trusted_device": { - "data": { - "trusted_device": "Uzticama ier\u012bce" - } - }, - "user": { - "data": { - "password": "Parole", - "username": "E-pasts" - } - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/nl.json b/homeassistant/components/icloud/.translations/nl.json deleted file mode 100644 index fe0e7d07572..00000000000 --- a/homeassistant/components/icloud/.translations/nl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account reeds geconfigureerd" - }, - "error": { - "login": "Aanmeldingsfout: controleer uw e-mailadres en wachtwoord", - "send_verification_code": "Kan verificatiecode niet verzenden", - "validate_verification_code": "Kan uw verificatiecode niet verifi\u00ebren, kies een vertrouwensapparaat en start de verificatie opnieuw" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Vertrouwd apparaat" - }, - "description": "Selecteer uw vertrouwde apparaat", - "title": "iCloud vertrouwd apparaat" - }, - "user": { - "data": { - "password": "Wachtwoord", - "username": "E-mail" - }, - "description": "Voer uw gegevens in", - "title": "iCloud inloggegevens" - }, - "verification_code": { - "data": { - "verification_code": "Verificatiecode" - }, - "description": "Voer de verificatiecode in die u zojuist van iCloud hebt ontvangen", - "title": "iCloud verificatiecode" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/no.json b/homeassistant/components/icloud/.translations/no.json deleted file mode 100644 index 3ba3207cc24..00000000000 --- a/homeassistant/components/icloud/.translations/no.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontoen er allerede konfigurert", - "no_device": "Ingen av enhetene dine har \"Finn min iPhone\" aktivert" - }, - "error": { - "login": "Innloggingsfeil: vennligst sjekk e-postadressen og passordet ditt", - "send_verification_code": "Kunne ikke sende bekreftelseskode", - "validate_verification_code": "Kunne ikke bekrefte bekreftelseskoden din, velg en tillitsenhet og start bekreftelsen p\u00e5 nytt" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "P\u00e5litelig enhet" - }, - "description": "Velg den p\u00e5litelige enheten din", - "title": "iCloud p\u00e5litelig enhet" - }, - "user": { - "data": { - "password": "Passord", - "username": "E-post", - "with_family": "Med familie" - }, - "description": "Angi legitimasjonsbeskrivelsen", - "title": "iCloud-legitimasjon" - }, - "verification_code": { - "data": { - "verification_code": "iCloud-bekreftelseskode" - }, - "description": "Vennligst skriv inn bekreftelseskoden du nettopp har f\u00e5tt fra iCloud", - "title": "iCloud-bekreftelseskode" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/pl.json b/homeassistant/components/icloud/.translations/pl.json deleted file mode 100644 index 9c65891d261..00000000000 --- a/homeassistant/components/icloud/.translations/pl.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Konto jest ju\u017c skonfigurowane.", - "no_device": "\u017badne z Twoich urz\u0105dze\u0144 nie ma aktywowanej funkcji \"Znajd\u017a m\u00f3j iPhone\"" - }, - "error": { - "login": "B\u0142\u0105d logowania: sprawd\u017a adres e-mail i has\u0142o", - "send_verification_code": "Nie uda\u0142o si\u0119 wys\u0142a\u0107 kodu weryfikacyjnego", - "validate_verification_code": "Nie uda\u0142o si\u0119 zweryfikowa\u0107 kodu weryfikacyjnego, wybierz urz\u0105dzenie zaufane i ponownie rozpocznij weryfikacj\u0119" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Zaufane urz\u0105dzenie" - }, - "description": "Wybierz zaufane urz\u0105dzenie", - "title": "Zaufane urz\u0105dzenie iCloud" - }, - "user": { - "data": { - "password": "Has\u0142o", - "username": "E-mail", - "with_family": "Z rodzin\u0105" - }, - "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", - "title": "Dane uwierzytelniaj\u0105ce iCloud" - }, - "verification_code": { - "data": { - "verification_code": "Kod weryfikacyjny" - }, - "description": "Wprowad\u017a kod weryfikacyjny, kt\u00f3ry w\u0142a\u015bnie otrzyma\u0142e\u015b z iCloud", - "title": "Kod weryfikacyjny iCloud" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/pt-BR.json b/homeassistant/components/icloud/.translations/pt-BR.json deleted file mode 100644 index 4e45568ae68..00000000000 --- a/homeassistant/components/icloud/.translations/pt-BR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Conta j\u00e1 configurada" - }, - "error": { - "login": "Erro de login: verifique seu e-mail e senha", - "send_verification_code": "Falha ao enviar c\u00f3digo de verifica\u00e7\u00e3o", - "validate_verification_code": "Falha ao verificar seu c\u00f3digo de verifica\u00e7\u00e3o, escolha um dispositivo confi\u00e1vel e inicie a verifica\u00e7\u00e3o novamente" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Dispositivo confi\u00e1vel" - }, - "description": "Selecione seu dispositivo confi\u00e1vel", - "title": "Dispositivo confi\u00e1vel iCloud" - }, - "user": { - "data": { - "password": "Senha", - "username": "Email" - }, - "description": "Insira suas credenciais", - "title": "credenciais do iCloud" - }, - "verification_code": { - "data": { - "verification_code": "C\u00f3digo de verifica\u00e7\u00e3o" - }, - "description": "Digite o c\u00f3digo de verifica\u00e7\u00e3o que voc\u00ea acabou de receber do iCloud", - "title": "c\u00f3digo de verifica\u00e7\u00e3o do iCloud" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/ru.json b/homeassistant/components/icloud/.translations/ru.json deleted file mode 100644 index b0869df14b1..00000000000 --- a/homeassistant/components/icloud/.translations/ru.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430.", - "no_device": "\u041d\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0412\u0430\u0448\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \"\u041d\u0430\u0439\u0442\u0438 iPhone\"." - }, - "error": { - "login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", - "send_verification_code": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f.", - "validate_verification_code": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u043d\u043e\u0432\u0430." - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "\u0414\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", - "title": "\u0414\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e iCloud" - }, - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", - "with_family": "\u0421 \u0441\u0435\u043c\u044c\u0451\u0439" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "title": "\u0423\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 iCloud" - }, - "verification_code": { - "data": { - "verification_code": "\u041a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 iCloud", - "title": "\u041a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f iCloud" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/sl.json b/homeassistant/components/icloud/.translations/sl.json deleted file mode 100644 index 6887eddde66..00000000000 --- a/homeassistant/components/icloud/.translations/sl.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ra\u010dun \u017ee nastavljen", - "no_device": "V nobeni od va\u0161ih naprav ni aktiviran \u00bbFind my iPhone\u00ab" - }, - "error": { - "login": "Napaka pri prijavi: preverite svoj e-po\u0161tni naslov in geslo", - "send_verification_code": "Kode za preverjanje ni bilo mogo\u010de poslati", - "validate_verification_code": "Kode za preverjanje ni bilo mogo\u010de preveriti, izberi napravo za zaupanje in znova za\u017eeni preverjanje" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Zaupanja vredna naprava" - }, - "description": "Izberite svojo zaupanja vredno napravo", - "title": "iCloud zaupanja vredna naprava" - }, - "user": { - "data": { - "password": "Geslo", - "username": "E-po\u0161tni naslov", - "with_family": "Z dru\u017eino" - }, - "description": "Vnesite svoje poverilnice", - "title": "iCloud poverilnice" - }, - "verification_code": { - "data": { - "verification_code": "Koda za preverjanje" - }, - "description": "Prosimo, vnesite kodo za preverjanje, ki ste jo pravkar prejeli od iCloud", - "title": "iCloud koda za preverjanje" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/sv.json b/homeassistant/components/icloud/.translations/sv.json deleted file mode 100644 index fc5b81b6591..00000000000 --- a/homeassistant/components/icloud/.translations/sv.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontot har redan konfigurerats" - }, - "error": { - "login": "Inloggningsfel: var god att kontrollera din e-postadress och l\u00f6senord", - "send_verification_code": "Det gick inte att skicka verifieringskod", - "validate_verification_code": "Det gick inte att verifiera verifieringskoden, v\u00e4lj en betrodd enhet och starta verifieringen igen" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "Betrodd enhet" - }, - "description": "V\u00e4lj din betrodda enhet", - "title": "Betrodd iCloud-enhet" - }, - "user": { - "data": { - "password": "L\u00f6senord", - "username": "E-post" - }, - "description": "Ange dina autentiseringsuppgifter", - "title": "iCloud-autentiseringsuppgifter" - }, - "verification_code": { - "data": { - "verification_code": "Verifieringskod" - }, - "description": "V\u00e4nligen ange verifieringskoden som du just f\u00e5tt fr\u00e5n iCloud", - "title": "iCloud-verifieringskod" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/zh-Hans.json b/homeassistant/components/icloud/.translations/zh-Hans.json deleted file mode 100644 index dd5592884be..00000000000 --- a/homeassistant/components/icloud/.translations/zh-Hans.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u8d26\u6237\u5df2\u914d\u7f6e\u5b8c\u6210" - }, - "error": { - "login": "\u767b\u5f55\u51fa\u9519\uff1a\u8bf7\u68c0\u67e5\u60a8\u7684\u7535\u5b50\u90ae\u7bb1\u548c\u5bc6\u7801", - "send_verification_code": "\u65e0\u6cd5\u53d1\u9001\u9a8c\u8bc1\u7801", - "validate_verification_code": "\u65e0\u6cd5\u9a8c\u8bc1\u9a8c\u8bc1\u7801\uff0c\u8bf7\u9009\u62e9\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907\u5e76\u91cd\u65b0\u5f00\u59cb\u9a8c\u8bc1" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907" - }, - "description": "\u9009\u62e9\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907", - "title": "iCloud \u53d7\u4fe1\u4efb\u7684\u8bbe\u5907" - }, - "user": { - "data": { - "password": "\u5bc6\u7801" - }, - "description": "\u8bf7\u8f93\u5165\u51ed\u636e", - "title": "iCloud \u51ed\u636e" - }, - "verification_code": { - "data": { - "verification_code": "\u9a8c\u8bc1\u7801" - }, - "description": "\u8bf7\u8f93\u5165\u60a8\u521a\u521a\u4ece iCloud \u6536\u5230\u7684\u9a8c\u8bc1\u7801", - "title": "iCloud \u9a8c\u8bc1\u7801" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/zh-Hant.json b/homeassistant/components/icloud/.translations/zh-Hant.json deleted file mode 100644 index cdaff703be7..00000000000 --- a/homeassistant/components/icloud/.translations/zh-Hant.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "no_device": "\u8a2d\u5099\u7686\u672a\u958b\u555f\u300c\u5c0b\u627e\u6211\u7684 iPhone\u300d\u529f\u80fd\u3002" - }, - "error": { - "login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u79d8\u5bc6\u6b63\u78ba\u6027", - "send_verification_code": "\u50b3\u9001\u9a57\u8b49\u78bc\u5931\u6557", - "validate_verification_code": "\u7121\u6cd5\u9a57\u8b49\u8f38\u5165\u9a57\u8b49\u78bc\uff0c\u9078\u64c7\u4e00\u90e8\u4fe1\u4efb\u8a2d\u5099\u3001\u7136\u5f8c\u91cd\u65b0\u57f7\u884c\u9a57\u8b49\u3002" - }, - "step": { - "trusted_device": { - "data": { - "trusted_device": "\u4fe1\u4efb\u8a2d\u5099" - }, - "description": "\u9078\u64c7\u4fe1\u4efb\u8a2d\u5099", - "title": "iCloud \u4fe1\u4efb\u8a2d\u5099" - }, - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u96fb\u5b50\u90f5\u4ef6", - "with_family": "\u8207\u5bb6\u4eba\u5171\u4eab" - }, - "description": "\u8f38\u5165\u6191\u8b49", - "title": "iCloud \u6191\u8b49" - }, - "verification_code": { - "data": { - "verification_code": "\u9a57\u8b49\u78bc" - }, - "description": "\u8acb\u8f38\u5165\u6240\u6536\u5230\u7684 iCloud \u9a57\u8b49\u78bc", - "title": "iCloud \u9a57\u8b49\u78bc" - } - }, - "title": "Apple iCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/icloud/__init__.py b/homeassistant/components/icloud/__init__.py index ba0f42432cc..3879d15cda8 100644 --- a/homeassistant/components/icloud/__init__.py +++ b/homeassistant/components/icloud/__init__.py @@ -186,7 +186,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool if account_identifier is None: return None - icloud_account = hass.data[DOMAIN].get(account_identifier, None) + icloud_account = hass.data[DOMAIN].get(account_identifier) if icloud_account is None: for account in hass.data[DOMAIN].values(): if account.name == account_identifier: diff --git a/homeassistant/components/icloud/account.py b/homeassistant/components/icloud/account.py index 50a3e74f78f..e0d9a608605 100644 --- a/homeassistant/components/icloud/account.py +++ b/homeassistant/components/icloud/account.py @@ -167,7 +167,7 @@ class IcloudAccount: ): continue - if self._devices.get(device_id, None) is not None: + if self._devices.get(device_id) is not None: # Seen device -> updating _LOGGER.debug("Updating iCloud device: %s", device_name) self._devices[device_id].update(status) diff --git a/homeassistant/components/icloud/device_tracker.py b/homeassistant/components/icloud/device_tracker.py index 47a302e2f26..0b245416887 100644 --- a/homeassistant/components/icloud/device_tracker.py +++ b/homeassistant/components/icloud/device_tracker.py @@ -24,7 +24,6 @@ async def async_setup_scanner( hass: HomeAssistantType, config, see, discovery_info=None ): """Old way of setting up the iCloud tracker.""" - pass async def async_setup_entry( diff --git a/homeassistant/components/icloud/manifest.json b/homeassistant/components/icloud/manifest.json index fd970ce4441..2b8bc2fccae 100644 --- a/homeassistant/components/icloud/manifest.json +++ b/homeassistant/components/icloud/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/icloud", "requirements": ["pyicloud==0.9.6.1"], - "dependencies": [], "codeowners": ["@Quentame"] } diff --git a/homeassistant/components/icloud/services.yaml b/homeassistant/components/icloud/services.yaml index ce239df7564..3013b04943d 100644 --- a/homeassistant/components/icloud/services.yaml +++ b/homeassistant/components/icloud/services.yaml @@ -3,47 +3,46 @@ update: fields: account: description: Your iCloud account username (email) or account name. - example: 'steve@apple.com' + example: "steve@apple.com" play_sound: description: Play sound on an Apple device. fields: account: description: (required) Your iCloud account username (email) or account name. - example: 'steve@apple.com' + example: "steve@apple.com" device_name: description: (required) The name of the Apple device to play a sound. - example: 'stevesiphone' + example: "stevesiphone" display_message: description: Display a message on an Apple device. fields: account: description: (required) Your iCloud account username (email) or account name. - example: 'steve@apple.com' + example: "steve@apple.com" device_name: description: (required) The name of the Apple device to display the message. - example: 'stevesiphone' + example: "stevesiphone" message: description: (required) The content of your message. - example: 'Hey Steve !' + example: "Hey Steve !" sound: description: To make a sound when displaying the message (boolean). - example: 'true' + example: "true" lost_device: description: Make an Apple device in lost state. fields: account: description: (required) Your iCloud account username (email) or account name. - example: 'steve@apple.com' + example: "steve@apple.com" device_name: description: (required) The name of the Apple device to set lost. - example: 'stevesiphone' + example: "stevesiphone" number: description: (required) The phone number to call in lost mode (must contain country code). - example: '+33450020100' + example: "+33450020100" message: description: (required) The message to display in lost mode. - example: 'Call me' - + example: "Call me" diff --git a/homeassistant/components/icloud/strings.json b/homeassistant/components/icloud/strings.json index 6cea7dc1175..b9e22a7b042 100644 --- a/homeassistant/components/icloud/strings.json +++ b/homeassistant/components/icloud/strings.json @@ -1,39 +1,34 @@ { - "config": { - "title": "Apple iCloud", - "step": { - "user": { - "title": "iCloud credentials", - "description": "Enter your credentials", - "data": { - "username": "Email", - "password": "Password", - "with_family": "With family" - } - }, - "trusted_device": { - "title": "iCloud trusted device", - "description": "Select your trusted device", - "data": { - "trusted_device": "Trusted device" - } - }, - "verification_code": { - "title": "iCloud verification code", - "description": "Please enter the verification code you just received from iCloud", - "data": { - "verification_code": "Verification code" - } - } - }, - "error": { - "login": "Login error: please check your email & password", - "send_verification_code": "Failed to send verification code", - "validate_verification_code": "Failed to verify your verification code, choose a trust device and start the verification again" - }, - "abort": { - "already_configured": "Account already configured", - "no_device": "None of your devices have \"Find my iPhone\" activated" + "config": { + "step": { + "user": { + "title": "iCloud credentials", + "description": "Enter your credentials", + "data": { + "username": "Email", + "password": "Password", + "with_family": "With family" } + }, + "trusted_device": { + "title": "iCloud trusted device", + "description": "Select your trusted device", + "data": { "trusted_device": "Trusted device" } + }, + "verification_code": { + "title": "iCloud verification code", + "description": "Please enter the verification code you just received from iCloud", + "data": { "verification_code": "Verification code" } + } + }, + "error": { + "login": "Login error: please check your email & password", + "send_verification_code": "Failed to send verification code", + "validate_verification_code": "Failed to verify your verification code, choose a trust device and start the verification again" + }, + "abort": { + "already_configured": "Account already configured", + "no_device": "None of your devices have \"Find my iPhone\" activated" } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/icloud/translations/ca.json b/homeassistant/components/icloud/translations/ca.json new file mode 100644 index 00000000000..ade0c4a3bd3 --- /dev/null +++ b/homeassistant/components/icloud/translations/ca.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "El compte ja ha estat configurat", + "no_device": "Cap dels teus dispositius t\u00e9 activada la opci\u00f3 \"Troba el meu iPhone\"" + }, + "error": { + "login": "Error d\u2019inici de sessi\u00f3: comprova el correu electr\u00f2nic i la contrasenya", + "send_verification_code": "No s'ha pogut enviar el codi de verificaci\u00f3", + "validate_verification_code": "No s'ha pogut verificar el codi de verificaci\u00f3, tria un dispositiu de confian\u00e7a i torna a iniciar el proc\u00e9s" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Dispositiu de confian\u00e7a" + }, + "description": "Selecciona el teu dispositiu de confian\u00e7a", + "title": "Dispositiu de confian\u00e7a iCloud" + }, + "user": { + "data": { + "password": "Contrasenya", + "username": "Correu electr\u00f2nic", + "with_family": "Amb fam\u00edlia" + }, + "description": "Introdueix les teves credencials", + "title": "Credencials d'iCloud" + }, + "verification_code": { + "data": { + "verification_code": "Codi de verificaci\u00f3" + }, + "description": "Introdueix el codi de verificaci\u00f3 que rebis d'iCloud", + "title": "Codi de verificaci\u00f3 iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/da.json b/homeassistant/components/icloud/translations/da.json new file mode 100644 index 00000000000..1c179b25322 --- /dev/null +++ b/homeassistant/components/icloud/translations/da.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigureret", + "no_device": "Ingen af dine enheder har aktiveret \"Find min iPhone\"" + }, + "error": { + "login": "Loginfejl: Kontroller din email og adgangskode", + "send_verification_code": "Bekr\u00e6ftelseskoden kunne ikke sendes", + "validate_verification_code": "Bekr\u00e6ftelseskoden kunne ikke bekr\u00e6ftes, V\u00e6lg en betroet enhed, og start bekr\u00e6ftelsen igen" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Betroet enhed" + }, + "description": "V\u00e6lg din betroede enhed", + "title": "iCloud-enhed, der er tillid til" + }, + "user": { + "data": { + "password": "Adgangskode", + "username": "Email", + "with_family": "Med familien" + }, + "description": "Indtast dine legitimationsoplysninger", + "title": "iCloud-legitimationsoplysninger" + }, + "verification_code": { + "data": { + "verification_code": "Bekr\u00e6ftelseskode" + }, + "description": "Indtast venligst den bekr\u00e6ftelseskode, du lige har modtaget fra iCloud", + "title": "iCloud-bekr\u00e6ftelseskode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/de.json b/homeassistant/components/icloud/translations/de.json new file mode 100644 index 00000000000..0b06ae422d0 --- /dev/null +++ b/homeassistant/components/icloud/translations/de.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Konto bereits konfiguriert", + "no_device": "Auf keinem Ihrer Ger\u00e4te ist \"Find my iPhone\" aktiviert" + }, + "error": { + "login": "Login-Fehler: Bitte \u00fcberpr\u00fcfe deine E-Mail & Passwort", + "send_verification_code": "Fehler beim Senden des Best\u00e4tigungscodes", + "validate_verification_code": "Verifizierung des Verifizierungscodes fehlgeschlagen. W\u00e4hle ein vertrauensw\u00fcrdiges Ger\u00e4t aus und starte die Verifizierung erneut" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Vertrauensw\u00fcrdiges Ger\u00e4t" + }, + "description": "W\u00e4hle dein vertrauensw\u00fcrdiges Ger\u00e4t aus", + "title": "iCloud vertrauensw\u00fcrdiges Ger\u00e4t" + }, + "user": { + "data": { + "password": "Passwort", + "username": "E-Mail", + "with_family": "Mit Familie" + }, + "description": "Gib deine Zugangsdaten ein", + "title": "iCloud-Anmeldeinformationen" + }, + "verification_code": { + "data": { + "verification_code": "Verifizierungscode" + }, + "description": "Bitte gib den Best\u00e4tigungscode ein, den du gerade von iCloud erhalten hast", + "title": "iCloud-Best\u00e4tigungscode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/en.json b/homeassistant/components/icloud/translations/en.json new file mode 100644 index 00000000000..0e944188222 --- /dev/null +++ b/homeassistant/components/icloud/translations/en.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Account already configured", + "no_device": "None of your devices have \"Find my iPhone\" activated" + }, + "error": { + "login": "Login error: please check your email & password", + "send_verification_code": "Failed to send verification code", + "validate_verification_code": "Failed to verify your verification code, choose a trust device and start the verification again" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Trusted device" + }, + "description": "Select your trusted device", + "title": "iCloud trusted device" + }, + "user": { + "data": { + "password": "Password", + "username": "Email", + "with_family": "With family" + }, + "description": "Enter your credentials", + "title": "iCloud credentials" + }, + "verification_code": { + "data": { + "verification_code": "Verification code" + }, + "description": "Please enter the verification code you just received from iCloud", + "title": "iCloud verification code" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/es.json b/homeassistant/components/icloud/translations/es.json new file mode 100644 index 00000000000..49bd9d612eb --- /dev/null +++ b/homeassistant/components/icloud/translations/es.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Cuenta ya configurada", + "no_device": "Ninguno de tus dispositivos tiene activado \"Buscar mi iPhone\"" + }, + "error": { + "login": "Error de inicio de sesi\u00f3n: comprueba tu direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a", + "send_verification_code": "Error al enviar el c\u00f3digo de verificaci\u00f3n", + "validate_verification_code": "No se pudo verificar el c\u00f3digo de verificaci\u00f3n, elegir un dispositivo de confianza e iniciar la verificaci\u00f3n de nuevo" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Dispositivo de confianza" + }, + "description": "Seleccione su dispositivo de confianza", + "title": "Dispositivo de confianza iCloud" + }, + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Correo electr\u00f3nico", + "with_family": "Con la familia" + }, + "description": "Ingrese sus credenciales", + "title": "Credenciales iCloud" + }, + "verification_code": { + "data": { + "verification_code": "C\u00f3digo de verificaci\u00f3n" + }, + "description": "Por favor, introduzca el c\u00f3digo de verificaci\u00f3n que acaba de recibir de iCloud", + "title": "C\u00f3digo de verificaci\u00f3n de iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/fr.json b/homeassistant/components/icloud/translations/fr.json new file mode 100644 index 00000000000..cce095e0298 --- /dev/null +++ b/homeassistant/components/icloud/translations/fr.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "already_configured": "Compte d\u00e9j\u00e0 configur\u00e9", + "no_device": "Aucun de vos appareils n'a activ\u00e9 \"Find my iPhone\"" + }, + "error": { + "login": "Erreur de connexion: veuillez v\u00e9rifier votre e-mail et votre mot de passe", + "send_verification_code": "\u00c9chec de l'envoi du code de v\u00e9rification", + "validate_verification_code": "Impossible de v\u00e9rifier votre code de v\u00e9rification, choisissez un appareil de confiance et recommencez la v\u00e9rification" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Appareil de confiance" + }, + "description": "S\u00e9lectionnez votre appareil de confiance", + "title": "Appareil de confiance iCloud" + }, + "user": { + "data": { + "password": "Mot de passe", + "username": "Email" + }, + "description": "Entrez vos identifiants", + "title": "Identifiants iCloud" + }, + "verification_code": { + "data": { + "verification_code": "Code de v\u00e9rification" + }, + "description": "Veuillez entrer le code de v\u00e9rification que vous venez de recevoir d'iCloud", + "title": "Code de v\u00e9rification iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/hu.json b/homeassistant/components/icloud/translations/hu.json new file mode 100644 index 00000000000..4dcf547619c --- /dev/null +++ b/homeassistant/components/icloud/translations/hu.json @@ -0,0 +1,33 @@ +{ + "config": { + "error": { + "login": "Bejelentkez\u00e9si hiba: k\u00e9rj\u00fck, ellen\u0151rizze e-mail c\u00edm\u00e9t \u00e9s jelszav\u00e1t", + "send_verification_code": "Nem siker\u00fclt elk\u00fcldeni az ellen\u0151rz\u0151 k\u00f3dot", + "validate_verification_code": "Nem siker\u00fclt ellen\u0151rizni az ellen\u0151rz\u0151 k\u00f3dot, ki kell v\u00e1lasztania egy megb\u00edzhat\u00f3s\u00e1gi eszk\u00f6zt, \u00e9s \u00fajra kell ind\u00edtania az ellen\u0151rz\u00e9st" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Megb\u00edzhat\u00f3 eszk\u00f6z" + }, + "description": "V\u00e1lassza ki a megb\u00edzhat\u00f3 eszk\u00f6zt", + "title": "iCloud megb\u00edzhat\u00f3 eszk\u00f6z" + }, + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "E-mail" + }, + "description": "Adja meg hiteles\u00edt\u0151 adatait", + "title": "iCloud hiteles\u00edt\u0151 adatok" + }, + "verification_code": { + "data": { + "verification_code": "Ellen\u0151rz\u0151 k\u00f3d" + }, + "description": "K\u00e9rj\u00fck, \u00edrja be az iCloud-t\u00f3l \u00e9ppen kapott ellen\u0151rz\u0151 k\u00f3dot", + "title": "iCloud ellen\u0151rz\u0151 k\u00f3d" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/it.json b/homeassistant/components/icloud/translations/it.json new file mode 100644 index 00000000000..27429081e1e --- /dev/null +++ b/homeassistant/components/icloud/translations/it.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Account gi\u00e0 configurato", + "no_device": "Nessuno dei tuoi dispositivi ha attivato \"Trova il mio iPhone\"" + }, + "error": { + "login": "Errore di accesso: si prega di controllare la tua e-mail e la password", + "send_verification_code": "Impossibile inviare il codice di verifica", + "validate_verification_code": "Impossibile verificare il codice di verifica, scegliere un dispositivo attendibile e riavviare la verifica" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Dispositivo attendibile" + }, + "description": "Selezionare il dispositivo attendibile", + "title": "Dispositivo attendibile iCloud" + }, + "user": { + "data": { + "password": "Password", + "username": "E-mail", + "with_family": "Con la famiglia" + }, + "description": "Inserisci le tue credenziali", + "title": "Credenziali iCloud" + }, + "verification_code": { + "data": { + "verification_code": "Codice di verifica" + }, + "description": "Inserisci il codice di verifica che hai appena ricevuto da iCloud", + "title": "Codice di verifica iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/ja.json b/homeassistant/components/icloud/translations/ja.json similarity index 100% rename from homeassistant/components/icloud/.translations/ja.json rename to homeassistant/components/icloud/translations/ja.json diff --git a/homeassistant/components/icloud/translations/ko.json b/homeassistant/components/icloud/translations/ko.json new file mode 100644 index 00000000000..a39940d42ed --- /dev/null +++ b/homeassistant/components/icloud/translations/ko.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "no_device": "\"\ub098\uc758 iPhone \ucc3e\uae30\"\uac00 \ud65c\uc131\ud654\ub41c \uae30\uae30\uac00 \uc5c6\uc2b5\ub2c8\ub2e4" + }, + "error": { + "login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc774\uba54\uc77c \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694", + "send_verification_code": "\uc778\uc99d \ucf54\ub4dc\ub97c \ubcf4\ub0b4\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4", + "validate_verification_code": "\uc778\uc99d \ucf54\ub4dc\ub97c \ud655\uc778\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30\ub97c \uc120\ud0dd\ud558\uace0 \uc778\uc99d\uc744 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "\uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30" + }, + "description": "\uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694", + "title": "iCloud \uac00 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uae30\uae30" + }, + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc774\uba54\uc77c", + "with_family": "\uac00\uc871\uc6a9" + }, + "description": "\uc790\uaca9 \uc99d\uba85\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "iCloud \uc790\uaca9 \uc99d\uba85" + }, + "verification_code": { + "data": { + "verification_code": "\uc778\uc99d \ucf54\ub4dc" + }, + "description": "iCloud \uc5d0\uc11c \ubc1b\uc740 \uc778\uc99d \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "iCloud \uc778\uc99d \ucf54\ub4dc" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/lb.json b/homeassistant/components/icloud/translations/lb.json new file mode 100644 index 00000000000..b6e9abe94bc --- /dev/null +++ b/homeassistant/components/icloud/translations/lb.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Kont ass scho konfigur\u00e9iert", + "no_device": "Kee vun dengen Apparater huet \"Find my iPhone\" aktiv\u00e9iert" + }, + "error": { + "login": "Feeler beim Login: iwwerpr\u00e9ift \u00e4r E-Mail & Passwuert", + "send_verification_code": "Feeler beim sch\u00e9cken vum Verifikatiouns Code", + "validate_verification_code": "Feeler beim iwwerpr\u00e9iwe vum Verifikatiouns Code, wielt ee vertrauten Apparat aus a start d'Iwwerpr\u00e9iwung nei" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Vertrauten Apparat" + }, + "description": "Wielt \u00e4ren vertrauten Apparat aus", + "title": "iCloud vertrauten Apparat" + }, + "user": { + "data": { + "password": "Passwuert", + "username": "E-Mail", + "with_family": "Mat der Famill" + }, + "description": "F\u00ebllt \u00e4r Umeldungs Informatiounen aus", + "title": "iCloud Umeldungs Informatiounen" + }, + "verification_code": { + "data": { + "verification_code": "Verifikatiouns Code" + }, + "description": "Gitt de Verifikatiouns Code an deen dir elo grad vun iCloud kritt hutt", + "title": "iCloud Verifikatiouns Code" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/lv.json b/homeassistant/components/icloud/translations/lv.json new file mode 100644 index 00000000000..bbfb1fe32b1 --- /dev/null +++ b/homeassistant/components/icloud/translations/lv.json @@ -0,0 +1,17 @@ +{ + "config": { + "step": { + "trusted_device": { + "data": { + "trusted_device": "Uzticama ier\u012bce" + } + }, + "user": { + "data": { + "password": "Parole", + "username": "E-pasts" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/nl.json b/homeassistant/components/icloud/translations/nl.json new file mode 100644 index 00000000000..84691ebd134 --- /dev/null +++ b/homeassistant/components/icloud/translations/nl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Account reeds geconfigureerd" + }, + "error": { + "login": "Aanmeldingsfout: controleer uw e-mailadres en wachtwoord", + "send_verification_code": "Kan verificatiecode niet verzenden", + "validate_verification_code": "Kan uw verificatiecode niet verifi\u00ebren, kies een vertrouwensapparaat en start de verificatie opnieuw" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Vertrouwd apparaat" + }, + "description": "Selecteer uw vertrouwde apparaat", + "title": "iCloud vertrouwd apparaat" + }, + "user": { + "data": { + "password": "Wachtwoord", + "username": "E-mail" + }, + "description": "Voer uw gegevens in", + "title": "iCloud inloggegevens" + }, + "verification_code": { + "data": { + "verification_code": "Verificatiecode" + }, + "description": "Voer de verificatiecode in die u zojuist van iCloud hebt ontvangen", + "title": "iCloud verificatiecode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/no.json b/homeassistant/components/icloud/translations/no.json new file mode 100644 index 00000000000..f1384df73b9 --- /dev/null +++ b/homeassistant/components/icloud/translations/no.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigurert", + "no_device": "Ingen av enhetene dine har \"Finn min iPhone\" aktivert" + }, + "error": { + "login": "Innloggingsfeil: vennligst sjekk e-postadressen og passordet ditt", + "send_verification_code": "Kunne ikke sende bekreftelseskode", + "validate_verification_code": "Kunne ikke bekrefte bekreftelseskoden din, velg en tillitsenhet og start bekreftelsen p\u00e5 nytt" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "P\u00e5litelig enhet" + }, + "description": "Velg den p\u00e5litelige enheten din", + "title": "iCloud p\u00e5litelig enhet" + }, + "user": { + "data": { + "password": "Passord", + "username": "E-post", + "with_family": "Med familie" + }, + "description": "Angi legitimasjonsbeskrivelsen", + "title": "iCloud-legitimasjon" + }, + "verification_code": { + "data": { + "verification_code": "iCloud-bekreftelseskode" + }, + "description": "Vennligst skriv inn bekreftelseskoden du nettopp har f\u00e5tt fra iCloud", + "title": "iCloud-bekreftelseskode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/pl.json b/homeassistant/components/icloud/translations/pl.json new file mode 100644 index 00000000000..20e3f8c2fb4 --- /dev/null +++ b/homeassistant/components/icloud/translations/pl.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Konto jest ju\u017c skonfigurowane.", + "no_device": "\u017badne z Twoich urz\u0105dze\u0144 nie ma aktywowanej funkcji \"Znajd\u017a m\u00f3j iPhone\"" + }, + "error": { + "login": "B\u0142\u0105d logowania: sprawd\u017a adres e-mail i has\u0142o", + "send_verification_code": "Nie uda\u0142o si\u0119 wys\u0142a\u0107 kodu weryfikacyjnego", + "validate_verification_code": "Nie uda\u0142o si\u0119 zweryfikowa\u0107 kodu weryfikacyjnego, wybierz urz\u0105dzenie zaufane i ponownie rozpocznij weryfikacj\u0119" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Zaufane urz\u0105dzenie" + }, + "description": "Wybierz zaufane urz\u0105dzenie", + "title": "Zaufane urz\u0105dzenie iCloud" + }, + "user": { + "data": { + "password": "Has\u0142o", + "username": "Adres e-mail", + "with_family": "Z rodzin\u0105" + }, + "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", + "title": "Dane uwierzytelniaj\u0105ce iCloud" + }, + "verification_code": { + "data": { + "verification_code": "Kod weryfikacyjny" + }, + "description": "Wprowad\u017a kod weryfikacyjny, kt\u00f3ry w\u0142a\u015bnie otrzyma\u0142e\u015b z iCloud", + "title": "Kod weryfikacyjny iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/pt-BR.json b/homeassistant/components/icloud/translations/pt-BR.json new file mode 100644 index 00000000000..53a0e0090dd --- /dev/null +++ b/homeassistant/components/icloud/translations/pt-BR.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Conta j\u00e1 configurada" + }, + "error": { + "login": "Erro de login: verifique seu e-mail e senha", + "send_verification_code": "Falha ao enviar c\u00f3digo de verifica\u00e7\u00e3o", + "validate_verification_code": "Falha ao verificar seu c\u00f3digo de verifica\u00e7\u00e3o, escolha um dispositivo confi\u00e1vel e inicie a verifica\u00e7\u00e3o novamente" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Dispositivo confi\u00e1vel" + }, + "description": "Selecione seu dispositivo confi\u00e1vel", + "title": "Dispositivo confi\u00e1vel iCloud" + }, + "user": { + "data": { + "password": "Senha", + "username": "Email" + }, + "description": "Insira suas credenciais", + "title": "credenciais do iCloud" + }, + "verification_code": { + "data": { + "verification_code": "C\u00f3digo de verifica\u00e7\u00e3o" + }, + "description": "Digite o c\u00f3digo de verifica\u00e7\u00e3o que voc\u00ea acabou de receber do iCloud", + "title": "c\u00f3digo de verifica\u00e7\u00e3o do iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/pt.json b/homeassistant/components/icloud/translations/pt.json new file mode 100644 index 00000000000..420196bb050 --- /dev/null +++ b/homeassistant/components/icloud/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "step": { + "trusted_device": { + "data": { + "trusted_device": "Dispositivo confi\u00e1vel" + } + }, + "user": { + "data": { + "password": "Palavra-passe", + "username": "Email" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/ru.json b/homeassistant/components/icloud/translations/ru.json new file mode 100644 index 00000000000..c8949bdc16c --- /dev/null +++ b/homeassistant/components/icloud/translations/ru.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430.", + "no_device": "\u041d\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0412\u0430\u0448\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \"\u041d\u0430\u0439\u0442\u0438 iPhone\"." + }, + "error": { + "login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", + "send_verification_code": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f.", + "validate_verification_code": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u043d\u043e\u0432\u0430." + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "\u0414\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", + "title": "\u0414\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e iCloud" + }, + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", + "with_family": "\u0421 \u0441\u0435\u043c\u044c\u0451\u0439" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "title": "\u0423\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 iCloud" + }, + "verification_code": { + "data": { + "verification_code": "\u041a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 iCloud", + "title": "\u041a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f iCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/sl.json b/homeassistant/components/icloud/translations/sl.json new file mode 100644 index 00000000000..18ffb070948 --- /dev/null +++ b/homeassistant/components/icloud/translations/sl.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "Ra\u010dun \u017ee nastavljen", + "no_device": "V nobeni od va\u0161ih naprav ni aktiviran \u00bbFind my iPhone\u00ab" + }, + "error": { + "login": "Napaka pri prijavi: preverite svoj e-po\u0161tni naslov in geslo", + "send_verification_code": "Kode za preverjanje ni bilo mogo\u010de poslati", + "validate_verification_code": "Kode za preverjanje ni bilo mogo\u010de preveriti, izberi napravo za zaupanje in znova za\u017eeni preverjanje" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Zaupanja vredna naprava" + }, + "description": "Izberite svojo zaupanja vredno napravo", + "title": "iCloud zaupanja vredna naprava" + }, + "user": { + "data": { + "password": "Geslo", + "username": "E-po\u0161tni naslov", + "with_family": "Z dru\u017eino" + }, + "description": "Vnesite svoje poverilnice", + "title": "iCloud poverilnice" + }, + "verification_code": { + "data": { + "verification_code": "Koda za preverjanje" + }, + "description": "Prosimo, vnesite kodo za preverjanje, ki ste jo pravkar prejeli od iCloud", + "title": "iCloud koda za preverjanje" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/sv.json b/homeassistant/components/icloud/translations/sv.json new file mode 100644 index 00000000000..3ca8252a558 --- /dev/null +++ b/homeassistant/components/icloud/translations/sv.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Kontot har redan konfigurerats" + }, + "error": { + "login": "Inloggningsfel: var god att kontrollera din e-postadress och l\u00f6senord", + "send_verification_code": "Det gick inte att skicka verifieringskod", + "validate_verification_code": "Det gick inte att verifiera verifieringskoden, v\u00e4lj en betrodd enhet och starta verifieringen igen" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "Betrodd enhet" + }, + "description": "V\u00e4lj din betrodda enhet", + "title": "Betrodd iCloud-enhet" + }, + "user": { + "data": { + "password": "L\u00f6senord", + "username": "E-post" + }, + "description": "Ange dina autentiseringsuppgifter", + "title": "iCloud-autentiseringsuppgifter" + }, + "verification_code": { + "data": { + "verification_code": "Verifieringskod" + }, + "description": "V\u00e4nligen ange verifieringskoden som du just f\u00e5tt fr\u00e5n iCloud", + "title": "iCloud-verifieringskod" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/.translations/tr.json b/homeassistant/components/icloud/translations/tr.json similarity index 100% rename from homeassistant/components/icloud/.translations/tr.json rename to homeassistant/components/icloud/translations/tr.json diff --git a/homeassistant/components/icloud/translations/zh-Hans.json b/homeassistant/components/icloud/translations/zh-Hans.json new file mode 100644 index 00000000000..0fed17b7ce1 --- /dev/null +++ b/homeassistant/components/icloud/translations/zh-Hans.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "\u8d26\u6237\u5df2\u914d\u7f6e\u5b8c\u6210" + }, + "error": { + "login": "\u767b\u5f55\u51fa\u9519\uff1a\u8bf7\u68c0\u67e5\u60a8\u7684\u7535\u5b50\u90ae\u7bb1\u548c\u5bc6\u7801", + "send_verification_code": "\u65e0\u6cd5\u53d1\u9001\u9a8c\u8bc1\u7801", + "validate_verification_code": "\u65e0\u6cd5\u9a8c\u8bc1\u9a8c\u8bc1\u7801\uff0c\u8bf7\u9009\u62e9\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907\u5e76\u91cd\u65b0\u5f00\u59cb\u9a8c\u8bc1" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907" + }, + "description": "\u9009\u62e9\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907", + "title": "iCloud \u53d7\u4fe1\u4efb\u7684\u8bbe\u5907" + }, + "user": { + "data": { + "password": "\u5bc6\u7801" + }, + "description": "\u8bf7\u8f93\u5165\u51ed\u636e", + "title": "iCloud \u51ed\u636e" + }, + "verification_code": { + "data": { + "verification_code": "\u9a8c\u8bc1\u7801" + }, + "description": "\u8bf7\u8f93\u5165\u60a8\u521a\u521a\u4ece iCloud \u6536\u5230\u7684\u9a8c\u8bc1\u7801", + "title": "iCloud \u9a8c\u8bc1\u7801" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/zh-Hant.json b/homeassistant/components/icloud/translations/zh-Hant.json new file mode 100644 index 00000000000..f917bfedd60 --- /dev/null +++ b/homeassistant/components/icloud/translations/zh-Hant.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "no_device": "\u8a2d\u5099\u7686\u672a\u958b\u555f\u300c\u5c0b\u627e\u6211\u7684 iPhone\u300d\u529f\u80fd\u3002" + }, + "error": { + "login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u5bc6\u78bc", + "send_verification_code": "\u50b3\u9001\u9a57\u8b49\u78bc\u5931\u6557", + "validate_verification_code": "\u7121\u6cd5\u9a57\u8b49\u8f38\u5165\u9a57\u8b49\u78bc\uff0c\u9078\u64c7\u4e00\u90e8\u4fe1\u4efb\u8a2d\u5099\u3001\u7136\u5f8c\u91cd\u65b0\u57f7\u884c\u9a57\u8b49\u3002" + }, + "step": { + "trusted_device": { + "data": { + "trusted_device": "\u4fe1\u4efb\u8a2d\u5099" + }, + "description": "\u9078\u64c7\u4fe1\u4efb\u8a2d\u5099", + "title": "iCloud \u4fe1\u4efb\u8a2d\u5099" + }, + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u96fb\u5b50\u90f5\u4ef6", + "with_family": "\u8207\u5bb6\u4eba\u5171\u4eab" + }, + "description": "\u8f38\u5165\u6191\u8b49", + "title": "iCloud \u6191\u8b49" + }, + "verification_code": { + "data": { + "verification_code": "\u9a57\u8b49\u78bc" + }, + "description": "\u8acb\u8f38\u5165\u6240\u6536\u5230\u7684 iCloud \u9a57\u8b49\u78bc", + "title": "iCloud \u9a57\u8b49\u78bc" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/idteck_prox/manifest.json b/homeassistant/components/idteck_prox/manifest.json index a82cfc50263..8eb95f2d083 100644 --- a/homeassistant/components/idteck_prox/manifest.json +++ b/homeassistant/components/idteck_prox/manifest.json @@ -3,6 +3,5 @@ "name": "IDTECK Proximity Reader", "documentation": "https://www.home-assistant.io/integrations/idteck_prox", "requirements": ["rfk101py==0.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ifttt/.translations/bg.json b/homeassistant/components/ifttt/.translations/bg.json deleted file mode 100644 index 683105db868..00000000000 --- a/homeassistant/components/ifttt/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 IFTTT.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \"Make a web request\" \u043e\u0442 [IFTTT Webhook \u0430\u043f\u043b\u0435\u0442]({applet_url}). \n\n\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json\n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u0442\u043e\u0432\u0430 \u043a\u0430\u043a \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438 \u0434\u0430\u043d\u043d\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 IFTTT?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 IFTTT Webhook \u0430\u043f\u043b\u0435\u0442" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/ca.json b/homeassistant/components/ifttt/.translations/ca.json deleted file mode 100644 index 979ed3cd71f..00000000000 --- a/homeassistant/components/ifttt/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de IFTTT.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, necessitar\u00e0s utilitzar l'acci\u00f3 \"Make a web resquest\" de [IFTTT Webhook applet]({applet_url}). \n\nCompleta la seg\u00fcent informaci\u00f3: \n\n- URL: `{webhook_url}` \n- Method: POST \n- Content Type: application/json \n\nConsulta la [documentaci\u00f3]({docs_url}) sobre com configurar les automatitzacions per gestionar dades entrants." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar IFTTT?", - "title": "Configuraci\u00f3 de la miniaplicaci\u00f3 Webhook de IFTTT" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/cs.json b/homeassistant/components/ifttt/.translations/cs.json deleted file mode 100644 index 091ea9bc352..00000000000 --- a/homeassistant/components/ifttt/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy IFTTT.", - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset pou\u017e\u00edt akci \"Vytvo\u0159it webovou \u017e\u00e1dost\" z [IFTTT Webhook appletu]({applet_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: ` {webhook_url} ' \n - Metoda: POST \n - Typ obsahu: aplikace/json \n\n Viz [dokumentace]({docs_url}), jak konfigurovat automatizace pro zpracov\u00e1n\u00ed p\u0159\u00edchoz\u00edch dat." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit IFTTT?", - "title": "Nastavte applet IFTTT Webhook" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/da.json b/homeassistant/components/ifttt/.translations/da.json deleted file mode 100644 index 0e0c735eb89..00000000000 --- a/homeassistant/components/ifttt/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage IFTTT-meddelelser", - "one_instance_allowed": "Kun en enkelt instans er n\u00f8dvendig." - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du bruge handlingen \"Foretag en web-foresp\u00f8rgsel\" fra [IFTTT Webhook-applet] ({applet_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/json\n\nSe [dokumentationen] ({docs_url}) om hvordan du konfigurerer automatiseringer til at h\u00e5ndtere indg\u00e5ende data." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5, at du vil konfigurere IFTTT?", - "title": "Konfigurer IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/de.json b/homeassistant/components/ifttt/.translations/de.json deleted file mode 100644 index a5b66156389..00000000000 --- a/homeassistant/components/ifttt/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Auf Ihre Home Assistant-Instanz muss vom Internet aus zugegriffen werden k\u00f6nnen, um IFTTT-Nachrichten zu empfangen.", - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "Um Ereignisse an Home Assistant zu senden, musst du die Aktion \"Eine Webanforderung erstellen\" aus dem [IFTTT Webhook Applet]({applet_url}) ausw\u00e4hlen.\n\nF\u00fclle folgende Informationen aus: \n- URL: `{webhook_url}`\n- Methode: POST\n- Inhaltstyp: application/json\n\nIn der Dokumentation ({docs_url}) findest du Informationen zur Konfiguration der Automation eingehender Daten." - }, - "step": { - "user": { - "description": "Bist du sicher, dass du IFTTT einrichten m\u00f6chtest?", - "title": "Einrichten des IFTTT Webhook Applets" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/en.json b/homeassistant/components/ifttt/.translations/en.json deleted file mode 100644 index dae4b24de47..00000000000 --- a/homeassistant/components/ifttt/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive IFTTT messages.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to use the \"Make a web request\" action from the [IFTTT Webhook applet]({applet_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data." - }, - "step": { - "user": { - "description": "Are you sure you want to set up IFTTT?", - "title": "Set up the IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/es-419.json b/homeassistant/components/ifttt/.translations/es-419.json deleted file mode 100644 index 46096bbe631..00000000000 --- a/homeassistant/components/ifttt/.translations/es-419.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes IFTTT.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 usar la acci\u00f3n \"Realizar una solicitud web\" del [applet de IFTTT Webhook] ( {applet_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: aplicaci\u00f3n / json \n\n Consulte [la documentaci\u00f3n] ( {docs_url} ) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar IFTTT?" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/es.json b/homeassistant/components/ifttt/.translations/es.json deleted file mode 100644 index 4d09e697150..00000000000 --- a/homeassistant/components/ifttt/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes IFTTT.", - "one_instance_allowed": "S\u00f3lo se necesita una sola instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant debes usar la acci\u00f3n \"Make a web request\" del [applet IFTTT Webhook]({applet_url}).\n\nCompleta la siguiente informaci\u00f3n: \n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n- Tipo de contenido: application/json\n\nConsulta [la documentaci\u00f3n]({docs_url}) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar IFTTT?", - "title": "Configurar el applet de webhook IFTTT" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/et.json b/homeassistant/components/ifttt/.translations/et.json deleted file mode 100644 index 8c4c45f9c89..00000000000 --- a/homeassistant/components/ifttt/.translations/et.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/fr.json b/homeassistant/components/ifttt/.translations/fr.json deleted file mode 100644 index 659b11ae98a..00000000000 --- a/homeassistant/components/ifttt/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages IFTTT.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez utiliser l'action \"Effectuer une demande Web\" \u00e0 partir de [l'applet IFTTT Webhook]({applet_url}). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / json \n\n Voir [la documentation]({docs_url}) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer IFTTT?", - "title": "Configurer l'applet IFTTT Webhook" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/hr.json b/homeassistant/components/ifttt/.translations/hr.json deleted file mode 100644 index 077956287b3..00000000000 --- a/homeassistant/components/ifttt/.translations/hr.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/hu.json b/homeassistant/components/ifttt/.translations/hu.json deleted file mode 100644 index 3c4ec66e9a3..00000000000 --- a/homeassistant/components/ifttt/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A Home Assistant-nek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l az IFTTT \u00fczenetek fogad\u00e1s\u00e1hoz.", - "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani az IFTTT-t?", - "title": "IFTTT Webhook Applet be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/it.json b/homeassistant/components/ifttt/.translations/it.json deleted file mode 100644 index d6faf60d618..00000000000 --- a/homeassistant/components/ifttt/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi IFTTT.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai utilizzare l'azione \"Esegui una richiesta web\" dall'applet [Weblet di IFTTT] ( {applet_url} ). \n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Metodo: POST \n - Tipo di contenuto: application / json \n\n Vedi [la documentazione] ( {docs_url} ) su come configurare le automazioni per gestire i dati in arrivo." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare IFTTT?", - "title": "Configura l'applet WebHook IFTTT" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/ko.json b/homeassistant/components/ifttt/.translations/ko.json deleted file mode 100644 index 9c8083a1d94..00000000000 --- a/homeassistant/components/ifttt/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "IFTTT \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\uae30 \uc704\ud574\uc11c\ub294 [IFTTT Webhook \uc560\ud50c\ub9bf]({applet_url}) \uc5d0\uc11c \"Make a web request\" \ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c\uc758 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.\n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json \n\nHome Assistant \ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc790\ub3d9\ud654\ub97c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "IFTTT \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "IFTTT Webhook \uc560\ud50c\ub9bf \uc124\uc815" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/lb.json b/homeassistant/components/ifttt/.translations/lb.json deleted file mode 100644 index 74e6b4926ef..00000000000 --- a/homeassistant/components/ifttt/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir IFTTT Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9ckemusst dir d'Aktioun \"Make a web request\" vum [IFTTT Webhook applet] ({applet_url}) benotzen.\n\nGitt folgend Informatiounen un:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nKuckt iech [Dokumentatioun]({docs_url}) w\u00e9i een Automatisatioune mat empfaangene Donn\u00e9e konfigur\u00e9iert." - }, - "step": { - "user": { - "description": "S\u00e9cher fir IFTTT anzeriichten?", - "title": "IFTTT Webhook Applet ariichten" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/nl.json b/homeassistant/components/ifttt/.translations/nl.json deleted file mode 100644 index 9188b1f6b08..00000000000 --- a/homeassistant/components/ifttt/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant-instantie moet via internet toegankelijk zijn om IFTTT-berichten te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Om evenementen naar de Home Assistant te verzenden, moet u de actie \"Een webverzoek doen\" gebruiken vanuit de [IFTTT Webhook-applet]({applet_url}). \n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json \n\nZie [the documentation]({docs_url}) voor informatie over het configureren van automatiseringen om inkomende gegevens te verwerken." - }, - "step": { - "user": { - "description": "Weet je zeker dat u IFTTT wilt instellen?", - "title": "Stel de IFTTT Webhook-applet in" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/nn.json b/homeassistant/components/ifttt/.translations/nn.json deleted file mode 100644 index e3bef7270e5..00000000000 --- a/homeassistant/components/ifttt/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du \u00f8nskjer \u00e5 setta opp IFTTT?" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/no.json b/homeassistant/components/ifttt/.translations/no.json deleted file mode 100644 index 2fe38659fad..00000000000 --- a/homeassistant/components/ifttt/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant enhet m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta IFTTT-meldinger.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du bruke \"Make a web request\" handlingen fra [IFTTT Webhook applet]({applet_url}).\n\nFyll ut f\u00f8lgende informasjon:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSe [dokumentasjonen]({docs_url}) om hvordan du konfigurerer automatiseringer for \u00e5 h\u00e5ndtere innkommende data." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil sette opp IFTTT?", - "title": "Sett opp IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/pl.json b/homeassistant/components/ifttt/.translations/pl.json deleted file mode 100644 index 206702eb593..00000000000 --- a/homeassistant/components/ifttt/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty IFTTT.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz u\u017cy\u0107 akcji \"Make a web request\" z [IFTTT Webhook apletu]({applet_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}`\n - Metoda: POST\n - Typ zawarto\u015bci: application/json\n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}) na temat konfiguracji automatyzacji, by obs\u0142u\u017cy\u0107 przychodz\u0105ce dane." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 IFTTT?", - "title": "Konfiguracja apletu Webhook IFTTT" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/pt-BR.json b/homeassistant/components/ifttt/.translations/pt-BR.json deleted file mode 100644 index 9e91de08307..00000000000 --- a/homeassistant/components/ifttt/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens IFTTT.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 usar a a\u00e7\u00e3o \"Fazer uma solicita\u00e7\u00e3o Web\" no [applet IFTTT Webhook] ( {applet_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / json \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o IFTTT?", - "title": "Configurar o IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/pt.json b/homeassistant/components/ifttt/.translations/pt.json deleted file mode 100644 index e18541fcab9..00000000000 --- a/homeassistant/components/ifttt/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens IFTTT.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, precisa de utilizar a a\u00e7\u00e3o \"Make a web request\" no [IFTTT Webhook applet]({applet_url}).\n\nPreencha com a seguinte informa\u00e7\u00e3o:\n\n- URL: `{webhook_url}`\n- Method: POST \n- Content Type: application/json \n\nConsulte [a documenta\u00e7\u00e3o]({docs_url}) sobre como configurar automa\u00e7\u00f5es para lidar com dados de entrada." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o IFTTT?", - "title": "Configurar o IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/ro.json b/homeassistant/components/ifttt/.translations/ro.json deleted file mode 100644 index dd7ae5f72cb..00000000000 --- a/homeassistant/components/ifttt/.translations/ro.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Instan\u021ba Home Assistant trebuie s\u0103 fie accesibil\u0103 de pe internet pentru a primi mesaje IFTTT.", - "one_instance_allowed": "Este necesar\u0103 o singur\u0103 instan\u021b\u0103." - }, - "step": { - "user": { - "description": "Sigur dori\u021bi s\u0103 configura\u021bi IFTTT?" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/ru.json b/homeassistant/components/ifttt/.translations/ru.json deleted file mode 100644 index 128db247150..00000000000 --- a/homeassistant/components/ifttt/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 IFTTT.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \"Make a web request\" \u0438\u0437 [IFTTT Webhook applet]({applet_url}).\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c IFTTT?", - "title": "IFTTT" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/sl.json b/homeassistant/components/ifttt/.translations/sl.json deleted file mode 100644 index efb966880eb..00000000000 --- a/homeassistant/components/ifttt/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopek prek interneta, da boste lahko prejemali IFTTT sporo\u010dila.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "\u010ce \u017eelite poslati dogodke Home Assistant-u, boste morali uporabiti akcijo \u00bbNaredi spletno zahtevo\u00ab iz orodja [IFTTT Webhook applet] ( {applet_url} ). \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n - Vrsta vsebine: application/json \n\n Poglejte si [dokumentacijo] ( {docs_url} ) o tem, kako konfigurirati avtomatizacijo za obdelavo dohodnih podatkov." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti IFTTT?", - "title": "Nastavite IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/sv.json b/homeassistant/components/ifttt/.translations/sv.json deleted file mode 100644 index 883bb042822..00000000000 --- a/homeassistant/components/ifttt/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot IFTTT meddelanden.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du anv\u00e4nda \u00e5tg\u00e4rden \"G\u00f6r en webbf\u00f6rfr\u00e5gan\" fr\u00e5n [IFTTT Webhook applet] ( {applet_url} ).\n\n Fyll i f\u00f6ljande information:\n \n - URL: ` {webhook_url} `\n - Metod: POST\n - Inneh\u00e5llstyp: application / json\n\n Se [dokumentationen] ( {docs_url} ) om hur du konfigurerar automatiseringar f\u00f6r att hantera inkommande data." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill st\u00e4lla in IFTTT?", - "title": "St\u00e4lla in IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/th.json b/homeassistant/components/ifttt/.translations/th.json deleted file mode 100644 index 077956287b3..00000000000 --- a/homeassistant/components/ifttt/.translations/th.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/tr.json b/homeassistant/components/ifttt/.translations/tr.json deleted file mode 100644 index 80188b637f9..00000000000 --- a/homeassistant/components/ifttt/.translations/tr.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "IFTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/zh-Hans.json b/homeassistant/components/ifttt/.translations/zh-Hans.json deleted file mode 100644 index e9f7aeb36d4..00000000000 --- a/homeassistant/components/ifttt/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 IFTTT \u6d88\u606f\u3002", - "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u4f7f\u7528 [IFTTT Webhook applet]({applet_url}) \u4e2d\u7684 \"Make a web request\" \u52a8\u4f5c\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u6709\u5173\u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u5316\u4ee5\u5904\u7406\u4f20\u5165\u7684\u6570\u636e\uff0c\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e IFTTT \u5417\uff1f", - "title": "\u8bbe\u7f6e IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/.translations/zh-Hant.json b/homeassistant/components/ifttt/.translations/zh-Hant.json deleted file mode 100644 index 8610351f43b..00000000000 --- a/homeassistant/components/ifttt/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 IFTTT \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8981\u7531 [IFTTT Webhook applet]({applet_url}) \u547c\u53eb\u300c\u9032\u884c Web \u8acb\u6c42\u300d\u52d5\u4f5c\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u95dc\u65bc\u5982\u4f55\u50b3\u5165\u8cc7\u6599\u81ea\u52d5\u5316\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1[\u6587\u4ef6]({docs_url})\u4ee5\u9032\u884c\u4e86\u89e3\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a IFTTT\uff1f", - "title": "\u8a2d\u5b9a IFTTT Webhook Applet" - } - }, - "title": "IFTTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/ifttt/__init__.py b/homeassistant/components/ifttt/__init__.py index 72c905497c0..cb1bb9f64cf 100644 --- a/homeassistant/components/ifttt/__init__.py +++ b/homeassistant/components/ifttt/__init__.py @@ -6,7 +6,7 @@ import pyfttt import requests import voluptuous as vol -from homeassistant.const import CONF_WEBHOOK_ID +from homeassistant.const import CONF_WEBHOOK_ID, HTTP_OK from homeassistant.helpers import config_entry_flow import homeassistant.helpers.config_validation as cv @@ -64,7 +64,7 @@ async def async_setup(hass, config): value2 = call.data.get(ATTR_VALUE2) value3 = call.data.get(ATTR_VALUE3) - target_keys = dict() + target_keys = {} for target in targets: if target not in api_keys: _LOGGER.error("No IFTTT api key for %s", target) @@ -75,7 +75,7 @@ async def async_setup(hass, config): for target, key in target_keys.items(): res = pyfttt.send_event(key, event, value1, value2, value3) - if res.status_code != 200: + if res.status_code != HTTP_OK: _LOGGER.error("IFTTT reported error sending event to %s.", target) except requests.exceptions.RequestException: _LOGGER.exception("Error communicating with IFTTT") diff --git a/homeassistant/components/ifttt/services.yaml b/homeassistant/components/ifttt/services.yaml index 693c654f258..80bf72e5290 100644 --- a/homeassistant/components/ifttt/services.yaml +++ b/homeassistant/components/ifttt/services.yaml @@ -5,23 +5,23 @@ push_alarm_state: fields: entity_id: description: Name of the alarm control panel which state has to be updated. - example: 'alarm_control_panel.downstairs' + example: "alarm_control_panel.downstairs" state: description: The state to which the alarm control panel has to be set. - example: 'armed_night' + example: "armed_night" trigger: description: Triggers the configured IFTTT Webhook. fields: event: description: The name of the event to sent. - example: 'MY_HA_EVENT' + example: "MY_HA_EVENT" value1: description: Generic field to send data via the event. - example: 'Hello World' + example: "Hello World" value2: description: Generic field to send data via the event. - example: 'some additional data' + example: "some additional data" value3: description: Generic field to send data via the event. - example: 'even more data' + example: "even more data" diff --git a/homeassistant/components/ifttt/strings.json b/homeassistant/components/ifttt/strings.json index 9fc47504b9b..b637e0de13d 100644 --- a/homeassistant/components/ifttt/strings.json +++ b/homeassistant/components/ifttt/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "IFTTT", "step": { "user": { "title": "Set up the IFTTT Webhook Applet", diff --git a/homeassistant/components/ifttt/translations/bg.json b/homeassistant/components/ifttt/translations/bg.json new file mode 100644 index 00000000000..674757b92b9 --- /dev/null +++ b/homeassistant/components/ifttt/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 IFTTT.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \"Make a web request\" \u043e\u0442 [IFTTT Webhook \u0430\u043f\u043b\u0435\u0442]({applet_url}). \n\n\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json\n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u0442\u043e\u0432\u0430 \u043a\u0430\u043a \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438 \u0434\u0430\u043d\u043d\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 IFTTT?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 IFTTT Webhook \u0430\u043f\u043b\u0435\u0442" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/ca.json b/homeassistant/components/ifttt/translations/ca.json new file mode 100644 index 00000000000..29f9fa29fe9 --- /dev/null +++ b/homeassistant/components/ifttt/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de IFTTT.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, necessitar\u00e0s utilitzar l'acci\u00f3 \"Make a web resquest\" de [IFTTT Webhook applet]({applet_url}). \n\nCompleta la seg\u00fcent informaci\u00f3: \n\n- URL: `{webhook_url}` \n- Method: POST \n- Content Type: application/json \n\nConsulta la [documentaci\u00f3]({docs_url}) sobre com configurar les automatitzacions per gestionar dades entrants." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar IFTTT?", + "title": "Configuraci\u00f3 de la miniaplicaci\u00f3 Webhook de IFTTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/cs.json b/homeassistant/components/ifttt/translations/cs.json new file mode 100644 index 00000000000..1f14283a05e --- /dev/null +++ b/homeassistant/components/ifttt/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy IFTTT.", + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset pou\u017e\u00edt akci \"Vytvo\u0159it webovou \u017e\u00e1dost\" z [IFTTT Webhook appletu]({applet_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: ` {webhook_url} ' \n - Metoda: POST \n - Typ obsahu: aplikace/json \n\n Viz [dokumentace]({docs_url}), jak konfigurovat automatizace pro zpracov\u00e1n\u00ed p\u0159\u00edchoz\u00edch dat." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit IFTTT?", + "title": "Nastavte applet IFTTT Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/da.json b/homeassistant/components/ifttt/translations/da.json new file mode 100644 index 00000000000..109be40acca --- /dev/null +++ b/homeassistant/components/ifttt/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage IFTTT-meddelelser", + "one_instance_allowed": "Kun en enkelt instans er n\u00f8dvendig." + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du bruge handlingen \"Foretag en web-foresp\u00f8rgsel\" fra [IFTTT Webhook-applet] ({applet_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/json\n\nSe [dokumentationen] ({docs_url}) om hvordan du konfigurerer automatiseringer til at h\u00e5ndtere indg\u00e5ende data." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5, at du vil konfigurere IFTTT?", + "title": "Konfigurer IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/de.json b/homeassistant/components/ifttt/translations/de.json new file mode 100644 index 00000000000..1633f091a6e --- /dev/null +++ b/homeassistant/components/ifttt/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Auf Ihre Home Assistant-Instanz muss vom Internet aus zugegriffen werden k\u00f6nnen, um IFTTT-Nachrichten zu empfangen.", + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "Um Ereignisse an Home Assistant zu senden, musst du die Aktion \"Eine Webanforderung erstellen\" aus dem [IFTTT Webhook Applet]({applet_url}) ausw\u00e4hlen.\n\nF\u00fclle folgende Informationen aus: \n- URL: `{webhook_url}`\n- Methode: POST\n- Inhaltstyp: application/json\n\nIn der Dokumentation ({docs_url}) findest du Informationen zur Konfiguration der Automation eingehender Daten." + }, + "step": { + "user": { + "description": "Bist du sicher, dass du IFTTT einrichten m\u00f6chtest?", + "title": "Einrichten des IFTTT Webhook Applets" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/en.json b/homeassistant/components/ifttt/translations/en.json new file mode 100644 index 00000000000..5a54f5a9aa5 --- /dev/null +++ b/homeassistant/components/ifttt/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive IFTTT messages.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to use the \"Make a web request\" action from the [IFTTT Webhook applet]({applet_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data." + }, + "step": { + "user": { + "description": "Are you sure you want to set up IFTTT?", + "title": "Set up the IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/es-419.json b/homeassistant/components/ifttt/translations/es-419.json new file mode 100644 index 00000000000..097ecad5b79 --- /dev/null +++ b/homeassistant/components/ifttt/translations/es-419.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes IFTTT.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 usar la acci\u00f3n \"Realizar una solicitud web\" del [applet de IFTTT Webhook] ( {applet_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: aplicaci\u00f3n / json \n\n Consulte [la documentaci\u00f3n] ( {docs_url} ) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar IFTTT?" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/es.json b/homeassistant/components/ifttt/translations/es.json new file mode 100644 index 00000000000..713cff93847 --- /dev/null +++ b/homeassistant/components/ifttt/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes IFTTT.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant debes usar la acci\u00f3n \"Make a web request\" del [applet IFTTT Webhook]({applet_url}).\n\nCompleta la siguiente informaci\u00f3n: \n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n- Tipo de contenido: application/json\n\nConsulta [la documentaci\u00f3n]({docs_url}) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar IFTTT?", + "title": "Configurar el applet de webhook IFTTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/et.json b/homeassistant/components/ifttt/translations/et.json new file mode 100644 index 00000000000..d8a4c453015 --- /dev/null +++ b/homeassistant/components/ifttt/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/fr.json b/homeassistant/components/ifttt/translations/fr.json new file mode 100644 index 00000000000..823801e9743 --- /dev/null +++ b/homeassistant/components/ifttt/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages IFTTT.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez utiliser l'action \"Effectuer une demande Web\" \u00e0 partir de [l'applet IFTTT Webhook]({applet_url}). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / json \n\n Voir [la documentation]({docs_url}) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer IFTTT?", + "title": "Configurer l'applet IFTTT Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/hr.json b/homeassistant/components/ifttt/translations/hr.json new file mode 100644 index 00000000000..8e00d0bfe2d --- /dev/null +++ b/homeassistant/components/ifttt/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "IFTTT" +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/hu.json b/homeassistant/components/ifttt/translations/hu.json new file mode 100644 index 00000000000..560c2c84064 --- /dev/null +++ b/homeassistant/components/ifttt/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A Home Assistant-nek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l az IFTTT \u00fczenetek fogad\u00e1s\u00e1hoz.", + "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani az IFTTT-t?", + "title": "IFTTT Webhook Applet be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/it.json b/homeassistant/components/ifttt/translations/it.json new file mode 100644 index 00000000000..ce037f1c5c3 --- /dev/null +++ b/homeassistant/components/ifttt/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi IFTTT.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai utilizzare l'azione \"Esegui una richiesta web\" dall'applet [Weblet di IFTTT] ( {applet_url} ). \n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Metodo: POST \n - Tipo di contenuto: application / json \n\n Vedi [la documentazione] ( {docs_url} ) su come configurare le automazioni per gestire i dati in arrivo." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare IFTTT?", + "title": "Configura l'applet WebHook IFTTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/ko.json b/homeassistant/components/ifttt/translations/ko.json new file mode 100644 index 00000000000..30dd8b04c11 --- /dev/null +++ b/homeassistant/components/ifttt/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "IFTTT \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\uae30 \uc704\ud574\uc11c\ub294 [IFTTT Webhook \uc560\ud50c\ub9bf]({applet_url}) \uc5d0\uc11c \"Make a web request\" \ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c\uc758 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.\n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json \n\nHome Assistant \ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc790\ub3d9\ud654\ub97c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "IFTTT \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "IFTTT Webhook \uc560\ud50c\ub9bf \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/lb.json b/homeassistant/components/ifttt/translations/lb.json new file mode 100644 index 00000000000..a13dd946a3e --- /dev/null +++ b/homeassistant/components/ifttt/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir IFTTT Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9ckemusst dir d'Aktioun \"Make a web request\" vum [IFTTT Webhook applet] ({applet_url}) benotzen.\n\nGitt folgend Informatiounen un:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nKuckt iech [Dokumentatioun]({docs_url}) w\u00e9i een Automatisatioune mat empfaangene Donn\u00e9e konfigur\u00e9iert." + }, + "step": { + "user": { + "description": "S\u00e9cher fir IFTTT anzeriichten?", + "title": "IFTTT Webhook Applet ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/nl.json b/homeassistant/components/ifttt/translations/nl.json new file mode 100644 index 00000000000..f6ebaa0e7c4 --- /dev/null +++ b/homeassistant/components/ifttt/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant-instantie moet via internet toegankelijk zijn om IFTTT-berichten te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Om evenementen naar de Home Assistant te verzenden, moet u de actie \"Een webverzoek doen\" gebruiken vanuit de [IFTTT Webhook-applet]({applet_url}). \n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json \n\nZie [the documentation]({docs_url}) voor informatie over het configureren van automatiseringen om inkomende gegevens te verwerken." + }, + "step": { + "user": { + "description": "Weet je zeker dat u IFTTT wilt instellen?", + "title": "Stel de IFTTT Webhook-applet in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/nn.json b/homeassistant/components/ifttt/translations/nn.json new file mode 100644 index 00000000000..23bf7895ade --- /dev/null +++ b/homeassistant/components/ifttt/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du \u00f8nskjer \u00e5 setta opp IFTTT?" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/no.json b/homeassistant/components/ifttt/translations/no.json new file mode 100644 index 00000000000..54c2f71f40b --- /dev/null +++ b/homeassistant/components/ifttt/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant enhet m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta IFTTT-meldinger.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du bruke \"Make a web request\" handlingen fra [IFTTT Webhook applet]({applet_url}).\n\nFyll ut f\u00f8lgende informasjon:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSe [dokumentasjonen]({docs_url}) om hvordan du konfigurerer automatiseringer for \u00e5 h\u00e5ndtere innkommende data." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp IFTTT?", + "title": "Sett opp IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/pl.json b/homeassistant/components/ifttt/translations/pl.json new file mode 100644 index 00000000000..47bf2c29a16 --- /dev/null +++ b/homeassistant/components/ifttt/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty IFTTT.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz u\u017cy\u0107 akcji \"Make a web request\" z [IFTTT Webhook apletu]({applet_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}`\n - Metoda: POST\n - Typ zawarto\u015bci: application/json\n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}) na temat konfiguracji automatyzacji, by obs\u0142u\u017cy\u0107 przychodz\u0105ce dane." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 IFTTT?", + "title": "Konfiguracja apletu Webhook IFTTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/pt-BR.json b/homeassistant/components/ifttt/translations/pt-BR.json new file mode 100644 index 00000000000..18e0791b187 --- /dev/null +++ b/homeassistant/components/ifttt/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens IFTTT.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 usar a a\u00e7\u00e3o \"Fazer uma solicita\u00e7\u00e3o Web\" no [applet IFTTT Webhook] ( {applet_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / json \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o IFTTT?", + "title": "Configurar o IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/pt.json b/homeassistant/components/ifttt/translations/pt.json new file mode 100644 index 00000000000..f32ced997d3 --- /dev/null +++ b/homeassistant/components/ifttt/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens IFTTT.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, precisa de utilizar a a\u00e7\u00e3o \"Make a web request\" no [IFTTT Webhook applet]({applet_url}).\n\nPreencha com a seguinte informa\u00e7\u00e3o:\n\n- URL: `{webhook_url}`\n- Method: POST \n- Content Type: application/json \n\nConsulte [a documenta\u00e7\u00e3o]({docs_url}) sobre como configurar automa\u00e7\u00f5es para lidar com dados de entrada." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o IFTTT?", + "title": "Configurar o IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/ro.json b/homeassistant/components/ifttt/translations/ro.json new file mode 100644 index 00000000000..36e75204e92 --- /dev/null +++ b/homeassistant/components/ifttt/translations/ro.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Instan\u021ba Home Assistant trebuie s\u0103 fie accesibil\u0103 de pe internet pentru a primi mesaje IFTTT.", + "one_instance_allowed": "Este necesar\u0103 o singur\u0103 instan\u021b\u0103." + }, + "step": { + "user": { + "description": "Sigur dori\u021bi s\u0103 configura\u021bi IFTTT?" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/ru.json b/homeassistant/components/ifttt/translations/ru.json new file mode 100644 index 00000000000..c78fd1090ad --- /dev/null +++ b/homeassistant/components/ifttt/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 IFTTT.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \"Make a web request\" \u0438\u0437 [IFTTT Webhook applet]({applet_url}).\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c IFTTT?", + "title": "IFTTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/sl.json b/homeassistant/components/ifttt/translations/sl.json new file mode 100644 index 00000000000..83a5a4567de --- /dev/null +++ b/homeassistant/components/ifttt/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopek prek interneta, da boste lahko prejemali IFTTT sporo\u010dila.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "\u010ce \u017eelite poslati dogodke Home Assistant-u, boste morali uporabiti akcijo \u00bbNaredi spletno zahtevo\u00ab iz orodja [IFTTT Webhook applet] ( {applet_url} ). \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n - Vrsta vsebine: application/json \n\n Poglejte si [dokumentacijo] ( {docs_url} ) o tem, kako konfigurirati avtomatizacijo za obdelavo dohodnih podatkov." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti IFTTT?", + "title": "Nastavite IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/sv.json b/homeassistant/components/ifttt/translations/sv.json new file mode 100644 index 00000000000..6de7b1f4f27 --- /dev/null +++ b/homeassistant/components/ifttt/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot IFTTT meddelanden.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du anv\u00e4nda \u00e5tg\u00e4rden \"G\u00f6r en webbf\u00f6rfr\u00e5gan\" fr\u00e5n [IFTTT Webhook applet] ( {applet_url} ).\n\n Fyll i f\u00f6ljande information:\n \n - URL: ` {webhook_url} `\n - Metod: POST\n - Inneh\u00e5llstyp: application / json\n\n Se [dokumentationen] ( {docs_url} ) om hur du konfigurerar automatiseringar f\u00f6r att hantera inkommande data." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill st\u00e4lla in IFTTT?", + "title": "St\u00e4lla in IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/th.json b/homeassistant/components/ifttt/translations/th.json new file mode 100644 index 00000000000..8e00d0bfe2d --- /dev/null +++ b/homeassistant/components/ifttt/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "IFTTT" +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/tr.json b/homeassistant/components/ifttt/translations/tr.json new file mode 100644 index 00000000000..0061b9f6166 --- /dev/null +++ b/homeassistant/components/ifttt/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "IFTT" +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/zh-Hans.json b/homeassistant/components/ifttt/translations/zh-Hans.json new file mode 100644 index 00000000000..e58bd80af7c --- /dev/null +++ b/homeassistant/components/ifttt/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 IFTTT \u6d88\u606f\u3002", + "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u4f7f\u7528 [IFTTT Webhook applet]({applet_url}) \u4e2d\u7684 \"Make a web request\" \u52a8\u4f5c\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u6709\u5173\u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u5316\u4ee5\u5904\u7406\u4f20\u5165\u7684\u6570\u636e\uff0c\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e IFTTT \u5417\uff1f", + "title": "\u8bbe\u7f6e IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ifttt/translations/zh-Hant.json b/homeassistant/components/ifttt/translations/zh-Hant.json new file mode 100644 index 00000000000..8337aa82479 --- /dev/null +++ b/homeassistant/components/ifttt/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 IFTTT \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8981\u7531 [IFTTT Webhook applet]({applet_url}) \u547c\u53eb\u300c\u9032\u884c Web \u8acb\u6c42\u300d\u52d5\u4f5c\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u95dc\u65bc\u5982\u4f55\u50b3\u5165\u8cc7\u6599\u81ea\u52d5\u5316\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1[\u6587\u4ef6]({docs_url})\u4ee5\u9032\u884c\u4e86\u89e3\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a IFTTT\uff1f", + "title": "\u8a2d\u5b9a IFTTT Webhook Applet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iglo/manifest.json b/homeassistant/components/iglo/manifest.json index 5263d5db8bc..98a1f8c4ee0 100644 --- a/homeassistant/components/iglo/manifest.json +++ b/homeassistant/components/iglo/manifest.json @@ -3,6 +3,5 @@ "name": "iGlo", "documentation": "https://www.home-assistant.io/integrations/iglo", "requirements": ["iglo==1.2.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ign_sismologia/geo_location.py b/homeassistant/components/ign_sismologia/geo_location.py index 21e8e1c7412..6ed3af285a3 100644 --- a/homeassistant/components/ign_sismologia/geo_location.py +++ b/homeassistant/components/ign_sismologia/geo_location.py @@ -14,6 +14,7 @@ from homeassistant.const import ( CONF_RADIUS, CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_START, + LENGTH_KILOMETERS, ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv @@ -33,7 +34,6 @@ CONF_MINIMUM_MAGNITUDE = "minimum_magnitude" DEFAULT_MINIMUM_MAGNITUDE = 0.0 DEFAULT_RADIUS_IN_KM = 50.0 -DEFAULT_UNIT_OF_MEASUREMENT = "km" SCAN_INTERVAL = timedelta(minutes=5) @@ -235,7 +235,7 @@ class IgnSismologiaLocationEvent(GeolocationEvent): @property def unit_of_measurement(self): """Return the unit of measurement.""" - return DEFAULT_UNIT_OF_MEASUREMENT + return LENGTH_KILOMETERS @property def device_state_attributes(self): diff --git a/homeassistant/components/ign_sismologia/manifest.json b/homeassistant/components/ign_sismologia/manifest.json index 3a969e7fa3f..ba70cbcddf1 100644 --- a/homeassistant/components/ign_sismologia/manifest.json +++ b/homeassistant/components/ign_sismologia/manifest.json @@ -3,6 +3,5 @@ "name": "IGN Sismología", "documentation": "https://www.home-assistant.io/integrations/ign_sismologia", "requirements": ["georss_ign_sismologia_client==0.2"], - "dependencies": [], "codeowners": ["@exxamalte"] } diff --git a/homeassistant/components/ihc/ihc_auto_setup.yaml b/homeassistant/components/ihc/ihc_auto_setup.yaml index 6b5003a04b5..d5f8d26e2b7 100644 --- a/homeassistant/components/ihc/ihc_auto_setup.yaml +++ b/homeassistant/components/ihc/ihc_auto_setup.yaml @@ -3,96 +3,95 @@ # folder and make your changes. binary_sensor: - # Magnet contact - - xpath: './/product_dataline[@product_identifier="_0x2109"]' - node: 'dataline_input' - type: 'opening' - inverting: True - # Pir sensors - - xpath: './/product_dataline[@product_identifier="_0x210e"]' - node: 'dataline_input[1]' - type: 'motion' - # Pir sensors twilight sensor - - xpath: './/product_dataline[@product_identifier="_0x0"]' - node: 'dataline_input[1]' - type: 'motion' - # Pir sensors alarm - - xpath: './/product_dataline[@product_identifier="_0x210f"]' - node: 'dataline_input' - type: 'motion' - # Smoke detector - - xpath: './/product_dataline[@product_identifier="_0x210a"]' - node: 'dataline_input' - type: 'smoke' - # leak detector - - xpath: './/product_dataline[@product_identifier="_0x210c"]' - node: 'dataline_input' - type: 'moisture' - # light detector - - xpath: './/product_dataline[@product_identifier="_0x2110"]' - node: 'dataline_input' - type: 'light' + # Magnet contact + - xpath: './/product_dataline[@product_identifier="_0x2109"]' + node: "dataline_input" + type: "opening" + inverting: true + # Pir sensors + - xpath: './/product_dataline[@product_identifier="_0x210e"]' + node: "dataline_input[1]" + type: "motion" + # Pir sensors twilight sensor + - xpath: './/product_dataline[@product_identifier="_0x0"]' + node: "dataline_input[1]" + type: "motion" + # Pir sensors alarm + - xpath: './/product_dataline[@product_identifier="_0x210f"]' + node: "dataline_input" + type: "motion" + # Smoke detector + - xpath: './/product_dataline[@product_identifier="_0x210a"]' + node: "dataline_input" + type: "smoke" + # leak detector + - xpath: './/product_dataline[@product_identifier="_0x210c"]' + node: "dataline_input" + type: "moisture" + # light detector + - xpath: './/product_dataline[@product_identifier="_0x2110"]' + node: "dataline_input" + type: "light" light: - # Wireless Combi dimmer 4 buttons - - xpath: './/product_airlink[@product_identifier="_0x4406"]' - node: 'airlink_dimming' - dimmable: True - # Wireless Lamp outlet dimmer - - xpath: './/product_airlink[@product_identifier="_0x4304"]' - node: 'airlink_dimming' - dimmable: True - # Wireless universal dimmer - - xpath: './/product_airlink[@product_identifier="_0x4306"]' - node: 'airlink_dimming' - dimmable: True - # Wireless Lamp outlet relay - - xpath: './/product_airlink[@product_identifier="_0x4202"]' - node: 'airlink_relay' - # Wireless Combi relay 4 buttons - - xpath: './/product_airlink[@product_identifier="_0x4404"]' - node: 'airlink_relay' - # Dataline Lamp outlet - - xpath: './/product_dataline[@product_identifier="_0x2202"]' - node: 'dataline_output' - # Mobile Wireless dimmer - - xpath: './/product_airlink[@product_identifier="_0x4303"]' - node: 'airlink_dimming' - dimmable: True + # Wireless Combi dimmer 4 buttons + - xpath: './/product_airlink[@product_identifier="_0x4406"]' + node: "airlink_dimming" + dimmable: true + # Wireless Lamp outlet dimmer + - xpath: './/product_airlink[@product_identifier="_0x4304"]' + node: "airlink_dimming" + dimmable: true + # Wireless universal dimmer + - xpath: './/product_airlink[@product_identifier="_0x4306"]' + node: "airlink_dimming" + dimmable: true + # Wireless Lamp outlet relay + - xpath: './/product_airlink[@product_identifier="_0x4202"]' + node: "airlink_relay" + # Wireless Combi relay 4 buttons + - xpath: './/product_airlink[@product_identifier="_0x4404"]' + node: "airlink_relay" + # Dataline Lamp outlet + - xpath: './/product_dataline[@product_identifier="_0x2202"]' + node: "dataline_output" + # Mobile Wireless dimmer + - xpath: './/product_airlink[@product_identifier="_0x4303"]' + node: "airlink_dimming" + dimmable: true sensor: - # Temperature sensor - - xpath: './/product_dataline[@product_identifier="_0x2124"]' - node: 'resource_temperature' - unit_of_measurement: '°C' - # Humidity/temperature - - xpath: './/product_dataline[@product_identifier="_0x2135"]' - node: 'resource_humidity_level' - unit_of_measurement: '%' - # Humidity/temperature - - xpath: './/product_dataline[@product_identifier="_0x2135"]' - node: 'resource_temperature' - unit_of_measurement: '°C' - # Lux/temperature - - xpath: './/product_dataline[@product_identifier="_0x2136"]' - node: 'resource_light' - unit_of_measurement: 'Lux' - # Lux/temperature - - xpath: './/product_dataline[@product_identifier="_0x2136"]' - node: 'resource_temperature' - unit_of_measurement: '°C' + # Temperature sensor + - xpath: './/product_dataline[@product_identifier="_0x2124"]' + node: "resource_temperature" + unit_of_measurement: "°C" + # Humidity/temperature + - xpath: './/product_dataline[@product_identifier="_0x2135"]' + node: "resource_humidity_level" + unit_of_measurement: "%" + # Humidity/temperature + - xpath: './/product_dataline[@product_identifier="_0x2135"]' + node: "resource_temperature" + unit_of_measurement: "°C" + # Lux/temperature + - xpath: './/product_dataline[@product_identifier="_0x2136"]' + node: "resource_light" + unit_of_measurement: "Lux" + # Lux/temperature + - xpath: './/product_dataline[@product_identifier="_0x2136"]' + node: "resource_temperature" + unit_of_measurement: "°C" switch: - # Wireless Plug outlet - - xpath: './/product_airlink[@product_identifier="_0x4201"]' - node: 'airlink_relay' - # Dataline universal relay - - xpath: './/product_airlink[@product_identifier="_0x4203"]' - node: 'airlink_relay' - # Dataline plug outlet - - xpath: './/product_dataline[@product_identifier="_0x2201"]' - node: 'dataline_output' - # Wireless mobile relay - - xpath: './/product_airlink[@product_identifier="_0x4204"]' - node: 'airlink_relay' - + # Wireless Plug outlet + - xpath: './/product_airlink[@product_identifier="_0x4201"]' + node: "airlink_relay" + # Dataline universal relay + - xpath: './/product_airlink[@product_identifier="_0x4203"]' + node: "airlink_relay" + # Dataline plug outlet + - xpath: './/product_dataline[@product_identifier="_0x2201"]' + node: "dataline_output" + # Wireless mobile relay + - xpath: './/product_airlink[@product_identifier="_0x4204"]' + node: "airlink_relay" diff --git a/homeassistant/components/ihc/manifest.json b/homeassistant/components/ihc/manifest.json index 559ed7c9060..6403d800a16 100644 --- a/homeassistant/components/ihc/manifest.json +++ b/homeassistant/components/ihc/manifest.json @@ -2,10 +2,6 @@ "domain": "ihc", "name": "IHC Controller", "documentation": "https://www.home-assistant.io/integrations/ihc", - "requirements": [ - "defusedxml==0.6.0", - "ihcsdk==2.6.0" - ], - "dependencies": [], + "requirements": ["defusedxml==0.6.0", "ihcsdk==2.6.0"], "codeowners": [] } diff --git a/homeassistant/components/ihc/services.yaml b/homeassistant/components/ihc/services.yaml index 0a78c45d7b2..ad41539162c 100644 --- a/homeassistant/components/ihc/services.yaml +++ b/homeassistant/components/ihc/services.yaml @@ -28,4 +28,4 @@ pulse: description: Pulses an input on the IHC controller. fields: ihc_id: - description: The integer IHC resource ID. \ No newline at end of file + description: The integer IHC resource ID. diff --git a/homeassistant/components/image_processing/manifest.json b/homeassistant/components/image_processing/manifest.json index e50ea8d25fd..3ff3fb37254 100644 --- a/homeassistant/components/image_processing/manifest.json +++ b/homeassistant/components/image_processing/manifest.json @@ -2,7 +2,6 @@ "domain": "image_processing", "name": "Image Processing", "documentation": "https://www.home-assistant.io/integrations/image_processing", - "requirements": [], "dependencies": ["camera"], "codeowners": [] } diff --git a/homeassistant/components/image_processing/services.yaml b/homeassistant/components/image_processing/services.yaml index 1f1fa347dc9..69e455344b0 100644 --- a/homeassistant/components/image_processing/services.yaml +++ b/homeassistant/components/image_processing/services.yaml @@ -5,4 +5,4 @@ scan: fields: entity_id: description: Name(s) of entities to scan immediately. - example: 'image_processing.alpr_garage' + example: "image_processing.alpr_garage" diff --git a/homeassistant/components/image_processing/strings.json b/homeassistant/components/image_processing/strings.json new file mode 100644 index 00000000000..b635fb6aaea --- /dev/null +++ b/homeassistant/components/image_processing/strings.json @@ -0,0 +1 @@ +{ "title": "Image processing" } diff --git a/homeassistant/components/image_processing/translations/af.json b/homeassistant/components/image_processing/translations/af.json new file mode 100644 index 00000000000..15f4ee4a228 --- /dev/null +++ b/homeassistant/components/image_processing/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Beeldverwerking" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/ar.json b/homeassistant/components/image_processing/translations/ar.json new file mode 100644 index 00000000000..06862b4a626 --- /dev/null +++ b/homeassistant/components/image_processing/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u0635\u0648\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/bg.json b/homeassistant/components/image_processing/translations/bg.json new file mode 100644 index 00000000000..8bce5cce6d4 --- /dev/null +++ b/homeassistant/components/image_processing/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438e" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/bs.json b/homeassistant/components/image_processing/translations/bs.json new file mode 100644 index 00000000000..fcfae2b4d67 --- /dev/null +++ b/homeassistant/components/image_processing/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Obrada slike" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/ca.json b/homeassistant/components/image_processing/translations/ca.json new file mode 100644 index 00000000000..ecd84483d1d --- /dev/null +++ b/homeassistant/components/image_processing/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Processament d'imatges" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/cs.json b/homeassistant/components/image_processing/translations/cs.json new file mode 100644 index 00000000000..86c01e96a9f --- /dev/null +++ b/homeassistant/components/image_processing/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Zpracov\u00e1n\u00ed obrazu" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/cy.json b/homeassistant/components/image_processing/translations/cy.json new file mode 100644 index 00000000000..ed5077cdca2 --- /dev/null +++ b/homeassistant/components/image_processing/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Prosesu delwedd" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/da.json b/homeassistant/components/image_processing/translations/da.json new file mode 100644 index 00000000000..c191ba65252 --- /dev/null +++ b/homeassistant/components/image_processing/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Billedbehandling" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/de.json b/homeassistant/components/image_processing/translations/de.json new file mode 100644 index 00000000000..dbac7284832 --- /dev/null +++ b/homeassistant/components/image_processing/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Bildverarbeitung" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/el.json b/homeassistant/components/image_processing/translations/el.json new file mode 100644 index 00000000000..dab56cff29b --- /dev/null +++ b/homeassistant/components/image_processing/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/en.json b/homeassistant/components/image_processing/translations/en.json new file mode 100644 index 00000000000..54e00868393 --- /dev/null +++ b/homeassistant/components/image_processing/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Image processing" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/es-419.json b/homeassistant/components/image_processing/translations/es-419.json new file mode 100644 index 00000000000..abbb60ec223 --- /dev/null +++ b/homeassistant/components/image_processing/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Procesamiento de im\u00e1genes" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/es.json b/homeassistant/components/image_processing/translations/es.json new file mode 100644 index 00000000000..abbb60ec223 --- /dev/null +++ b/homeassistant/components/image_processing/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Procesamiento de im\u00e1genes" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/et.json b/homeassistant/components/image_processing/translations/et.json new file mode 100644 index 00000000000..add6434b024 --- /dev/null +++ b/homeassistant/components/image_processing/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Pildit\u00f6\u00f6tlus" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/fa.json b/homeassistant/components/image_processing/translations/fa.json new file mode 100644 index 00000000000..0782c872fc9 --- /dev/null +++ b/homeassistant/components/image_processing/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "\u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/fi.json b/homeassistant/components/image_processing/translations/fi.json new file mode 100644 index 00000000000..113626f41ec --- /dev/null +++ b/homeassistant/components/image_processing/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Kuvantunnistus" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/fr.json b/homeassistant/components/image_processing/translations/fr.json new file mode 100644 index 00000000000..d902beb7479 --- /dev/null +++ b/homeassistant/components/image_processing/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Traitement d\u2019image" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/he.json b/homeassistant/components/image_processing/translations/he.json new file mode 100644 index 00000000000..5a5fb880a27 --- /dev/null +++ b/homeassistant/components/image_processing/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e2\u05d9\u05d1\u05d5\u05d3 \u05ea\u05de\u05d5\u05e0\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/hi.json b/homeassistant/components/image_processing/translations/hi.json new file mode 100644 index 00000000000..b54f9ef1afc --- /dev/null +++ b/homeassistant/components/image_processing/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0907\u092e\u0947\u091c \u092a\u094d\u0930\u094b\u0938\u0947\u0938\u093f\u0902\u0917" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/hr.json b/homeassistant/components/image_processing/translations/hr.json new file mode 100644 index 00000000000..fcfae2b4d67 --- /dev/null +++ b/homeassistant/components/image_processing/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Obrada slike" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/hu.json b/homeassistant/components/image_processing/translations/hu.json new file mode 100644 index 00000000000..8e6fc147065 --- /dev/null +++ b/homeassistant/components/image_processing/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "K\u00e9pfeldolgoz\u00e1s" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/hy.json b/homeassistant/components/image_processing/translations/hy.json new file mode 100644 index 00000000000..5911e500645 --- /dev/null +++ b/homeassistant/components/image_processing/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u054a\u0561\u057f\u056f\u0565\u0580\u056b \u0574\u0577\u0561\u056f\u0578\u0582\u0574" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/id.json b/homeassistant/components/image_processing/translations/id.json new file mode 100644 index 00000000000..19e3a64dcba --- /dev/null +++ b/homeassistant/components/image_processing/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Pengolahan gambar" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/it.json b/homeassistant/components/image_processing/translations/it.json new file mode 100644 index 00000000000..cfb4b6144e6 --- /dev/null +++ b/homeassistant/components/image_processing/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Elaborazione immagini" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/ja.json b/homeassistant/components/image_processing/translations/ja.json new file mode 100644 index 00000000000..ec0bd86fe87 --- /dev/null +++ b/homeassistant/components/image_processing/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "\u753b\u50cf\u51e6\u7406" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/ko.json b/homeassistant/components/image_processing/translations/ko.json new file mode 100644 index 00000000000..0f90ef2df51 --- /dev/null +++ b/homeassistant/components/image_processing/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc774\ubbf8\uc9c0\ucc98\ub9ac" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/lb.json b/homeassistant/components/image_processing/translations/lb.json new file mode 100644 index 00000000000..baf495d13ad --- /dev/null +++ b/homeassistant/components/image_processing/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Bildveraarbechtung" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/lv.json b/homeassistant/components/image_processing/translations/lv.json new file mode 100644 index 00000000000..0ae600eeb16 --- /dev/null +++ b/homeassistant/components/image_processing/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Att\u0113lu apstr\u0101de" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/nb.json b/homeassistant/components/image_processing/translations/nb.json new file mode 100644 index 00000000000..cdaf3b4128b --- /dev/null +++ b/homeassistant/components/image_processing/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Bildebehandling" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/nl.json b/homeassistant/components/image_processing/translations/nl.json new file mode 100644 index 00000000000..15f4ee4a228 --- /dev/null +++ b/homeassistant/components/image_processing/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Beeldverwerking" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/nn.json b/homeassistant/components/image_processing/translations/nn.json new file mode 100644 index 00000000000..e5e3c7ffe98 --- /dev/null +++ b/homeassistant/components/image_processing/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Biletehandsaming" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/no.json b/homeassistant/components/image_processing/translations/no.json new file mode 100644 index 00000000000..cdaf3b4128b --- /dev/null +++ b/homeassistant/components/image_processing/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Bildebehandling" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/pl.json b/homeassistant/components/image_processing/translations/pl.json new file mode 100644 index 00000000000..c8a2c98ee1f --- /dev/null +++ b/homeassistant/components/image_processing/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Przetwarzanie obrazu" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/pt-BR.json b/homeassistant/components/image_processing/translations/pt-BR.json new file mode 100644 index 00000000000..96c31ffda19 --- /dev/null +++ b/homeassistant/components/image_processing/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Processamento de imagem" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/pt.json b/homeassistant/components/image_processing/translations/pt.json new file mode 100644 index 00000000000..96c31ffda19 --- /dev/null +++ b/homeassistant/components/image_processing/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Processamento de imagem" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/ro.json b/homeassistant/components/image_processing/translations/ro.json new file mode 100644 index 00000000000..f5c041230d0 --- /dev/null +++ b/homeassistant/components/image_processing/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Procesarea imaginii" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/ru.json b/homeassistant/components/image_processing/translations/ru.json new file mode 100644 index 00000000000..351f89c4343 --- /dev/null +++ b/homeassistant/components/image_processing/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/sk.json b/homeassistant/components/image_processing/translations/sk.json new file mode 100644 index 00000000000..4d38e1f8c4f --- /dev/null +++ b/homeassistant/components/image_processing/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Spracovanie obrazu" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/sl.json b/homeassistant/components/image_processing/translations/sl.json new file mode 100644 index 00000000000..b20e427a352 --- /dev/null +++ b/homeassistant/components/image_processing/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Obdelava slike" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/sv.json b/homeassistant/components/image_processing/translations/sv.json new file mode 100644 index 00000000000..9aa4622a971 --- /dev/null +++ b/homeassistant/components/image_processing/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Bildbehandling" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/te.json b/homeassistant/components/image_processing/translations/te.json new file mode 100644 index 00000000000..a00e3b6a8e0 --- /dev/null +++ b/homeassistant/components/image_processing/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c07\u0c2e\u0c47\u0c1c\u0c4d \u0c2a\u0c4d\u0c30\u0c3e\u0c38\u0c46\u0c38\u0c3f\u0c02\u0c17\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/th.json b/homeassistant/components/image_processing/translations/th.json new file mode 100644 index 00000000000..97c0283501d --- /dev/null +++ b/homeassistant/components/image_processing/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25\u0e20\u0e32\u0e1e" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/tr.json b/homeassistant/components/image_processing/translations/tr.json new file mode 100644 index 00000000000..ecba43fe4de --- /dev/null +++ b/homeassistant/components/image_processing/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "G\u00f6r\u00fcnt\u00fc i\u015fleme" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/uk.json b/homeassistant/components/image_processing/translations/uk.json new file mode 100644 index 00000000000..fc353e04967 --- /dev/null +++ b/homeassistant/components/image_processing/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u0431\u0440\u043e\u0431\u043a\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/vi.json b/homeassistant/components/image_processing/translations/vi.json new file mode 100644 index 00000000000..de0ffe51490 --- /dev/null +++ b/homeassistant/components/image_processing/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "X\u1eed l\u00fd \u1ea3nh" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/zh-Hans.json b/homeassistant/components/image_processing/translations/zh-Hans.json new file mode 100644 index 00000000000..9d4f10ce0a3 --- /dev/null +++ b/homeassistant/components/image_processing/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u56fe\u50cf\u5904\u7406" +} \ No newline at end of file diff --git a/homeassistant/components/image_processing/translations/zh-Hant.json b/homeassistant/components/image_processing/translations/zh-Hant.json new file mode 100644 index 00000000000..9e4bd590859 --- /dev/null +++ b/homeassistant/components/image_processing/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u5716\u50cf\u8655\u7406" +} \ No newline at end of file diff --git a/homeassistant/components/imap/manifest.json b/homeassistant/components/imap/manifest.json index c861588771e..b2064742a92 100644 --- a/homeassistant/components/imap/manifest.json +++ b/homeassistant/components/imap/manifest.json @@ -3,6 +3,5 @@ "name": "IMAP", "documentation": "https://www.home-assistant.io/integrations/imap", "requirements": ["aioimaplib==0.7.15"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/imap/sensor.py b/homeassistant/components/imap/sensor.py index ceef8acf7c3..a824d5f8ee9 100644 --- a/homeassistant/components/imap/sensor.py +++ b/homeassistant/components/imap/sensor.py @@ -130,7 +130,7 @@ class ImapSensor(Entity): try: if await self.connection(): await self.refresh_email_count() - await self.async_update_ha_state() + self.async_write_ha_state() idle = await self._connection.idle_start() await self._connection.wait_server_push() @@ -138,7 +138,7 @@ class ImapSensor(Entity): with async_timeout.timeout(10): await idle else: - await self.async_update_ha_state() + self.async_write_ha_state() except (AioImapException, asyncio.TimeoutError): self.disconnected() diff --git a/homeassistant/components/imap_email_content/manifest.json b/homeassistant/components/imap_email_content/manifest.json index c11d6f49edb..869d465b1b7 100644 --- a/homeassistant/components/imap_email_content/manifest.json +++ b/homeassistant/components/imap_email_content/manifest.json @@ -2,7 +2,5 @@ "domain": "imap_email_content", "name": "IMAP Email Content", "documentation": "https://www.home-assistant.io/integrations/imap_email_content", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/incomfort/__init__.py b/homeassistant/components/incomfort/__init__.py index bb115650061..cec550d24d9 100644 --- a/homeassistant/components/incomfort/__init__.py +++ b/homeassistant/components/incomfort/__init__.py @@ -83,7 +83,7 @@ class IncomfortChild(IncomfortEntity): async def async_added_to_hass(self) -> None: """Set up a listener when this entity is added to HA.""" - async_dispatcher_connect(self.hass, DOMAIN, self._refresh) + self.async_on_remove(async_dispatcher_connect(self.hass, DOMAIN, self._refresh)) @callback def _refresh(self) -> None: diff --git a/homeassistant/components/incomfort/climate.py b/homeassistant/components/incomfort/climate.py index 7d91ca012b9..464ff989941 100644 --- a/homeassistant/components/incomfort/climate.py +++ b/homeassistant/components/incomfort/climate.py @@ -90,4 +90,3 @@ class InComfortClimate(IncomfortChild, ClimateDevice): async def async_set_hvac_mode(self, hvac_mode: str) -> None: """Set new target hvac mode.""" - pass diff --git a/homeassistant/components/incomfort/manifest.json b/homeassistant/components/incomfort/manifest.json index d69c916bda3..80b6952c383 100644 --- a/homeassistant/components/incomfort/manifest.json +++ b/homeassistant/components/incomfort/manifest.json @@ -3,6 +3,5 @@ "name": "Intergas InComfort/Intouch Lan2RF gateway", "documentation": "https://www.home-assistant.io/integrations/incomfort", "requirements": ["incomfort-client==0.4.0"], - "dependencies": [], "codeowners": ["@zxdavb"] } diff --git a/homeassistant/components/influxdb/__init__.py b/homeassistant/components/influxdb/__init__.py index 48852f27910..922a0197cf1 100644 --- a/homeassistant/components/influxdb/__init__.py +++ b/homeassistant/components/influxdb/__init__.py @@ -239,7 +239,7 @@ def setup(hass, config): elif key != "unit_of_measurement" or include_uom: # If the key is already in fields if key in json["fields"]: - key = key + "_" + key = f"{key}_" # Prevent column data errors in influxDB. # For each value we try to cast it as float # But if we can not do it we store the value @@ -355,7 +355,7 @@ class InfluxThread(threading.Thread): except ( exceptions.InfluxDBClientError, exceptions.InfluxDBServerError, - IOError, + OSError, ) as err: if retry < self.max_tries: time.sleep(RETRY_DELAY) diff --git a/homeassistant/components/influxdb/manifest.json b/homeassistant/components/influxdb/manifest.json index bd5249a3858..94577f5735f 100644 --- a/homeassistant/components/influxdb/manifest.json +++ b/homeassistant/components/influxdb/manifest.json @@ -3,6 +3,5 @@ "name": "InfluxDB", "documentation": "https://www.home-assistant.io/integrations/influxdb", "requirements": ["influxdb==5.2.3"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/influxdb/sensor.py b/homeassistant/components/influxdb/sensor.py index 9d0eaa84340..64ab1174b8b 100644 --- a/homeassistant/components/influxdb/sensor.py +++ b/homeassistant/components/influxdb/sensor.py @@ -75,7 +75,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): "host": config[CONF_HOST], "password": config.get(CONF_PASSWORD), "port": config.get(CONF_PORT), - "ssl": config.get(CONF_SSL), + "ssl": config[CONF_SSL], "username": config.get(CONF_USERNAME), "verify_ssl": config.get(CONF_VERIFY_SSL), } @@ -203,7 +203,7 @@ class InfluxSensorData: points = list(self.influx.query(self.query).get_points()) if not points: _LOGGER.warning( - "Query returned no points, sensor state set to UNKNOWN: %s", self.query, + "Query returned no points, sensor state set to UNKNOWN: %s", self.query ) self.value = None else: diff --git a/homeassistant/components/input_boolean/__init__.py b/homeassistant/components/input_boolean/__init__.py index 603aa826123..88fe94eac48 100644 --- a/homeassistant/components/input_boolean/__init__.py +++ b/homeassistant/components/input_boolean/__init__.py @@ -198,12 +198,12 @@ class InputBoolean(ToggleEntity, RestoreEntity): async def async_turn_on(self, **kwargs): """Turn the entity on.""" self._state = True - await self.async_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the entity off.""" self._state = False - await self.async_update_ha_state() + self.async_write_ha_state() async def async_update_config(self, config: typing.Dict) -> None: """Handle when the config is updated.""" diff --git a/homeassistant/components/input_boolean/manifest.json b/homeassistant/components/input_boolean/manifest.json index f697d94c893..7a27d475e6e 100644 --- a/homeassistant/components/input_boolean/manifest.json +++ b/homeassistant/components/input_boolean/manifest.json @@ -2,8 +2,6 @@ "domain": "input_boolean", "name": "Input Boolean", "documentation": "https://www.home-assistant.io/integrations/input_boolean", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/input_boolean/reproduce_state.py b/homeassistant/components/input_boolean/reproduce_state.py index 558d57ae862..d01e931c5cc 100644 --- a/homeassistant/components/input_boolean/reproduce_state.py +++ b/homeassistant/components/input_boolean/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an input boolean state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -19,7 +19,11 @@ _LOGGER = logging.getLogger(__name__) async def _async_reproduce_states( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce input boolean states.""" cur_state = hass.states.get(state.entity_id) @@ -49,9 +53,18 @@ async def _async_reproduce_states( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce component states.""" await asyncio.gather( - *(_async_reproduce_states(hass, state, context) for state in states) + *( + _async_reproduce_states( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/input_boolean/services.yaml b/homeassistant/components/input_boolean/services.yaml index e391c15d3a8..5ab5e7a9b82 100644 --- a/homeassistant/components/input_boolean/services.yaml +++ b/homeassistant/components/input_boolean/services.yaml @@ -1,15 +1,20 @@ toggle: description: Toggles an input boolean. fields: - entity_id: {description: Entity id of the input boolean to toggle., example: input_boolean.notify_alerts} + entity_id: + description: Entity id of the input boolean to toggle. + example: input_boolean.notify_alerts turn_off: description: Turns off an input boolean fields: - entity_id: {description: Entity id of the input boolean to turn off., example: input_boolean.notify_alerts} + entity_id: + description: Entity id of the input boolean to turn off. + example: input_boolean.notify_alerts turn_on: description: Turns on an input boolean. fields: - entity_id: {description: Entity id of the input boolean to turn on., example: input_boolean.notify_alerts} + entity_id: + description: Entity id of the input boolean to turn on. + example: input_boolean.notify_alerts reload: description: Reload the input_boolean configuration. - diff --git a/homeassistant/components/input_boolean/strings.json b/homeassistant/components/input_boolean/strings.json new file mode 100644 index 00000000000..a32958592f2 --- /dev/null +++ b/homeassistant/components/input_boolean/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Input boolean", + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } + } +} diff --git a/homeassistant/components/input_boolean/translations/af.json b/homeassistant/components/input_boolean/translations/af.json new file mode 100644 index 00000000000..8f6ff68a763 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Invoer boole" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ar.json b/homeassistant/components/input_boolean/translations/ar.json new file mode 100644 index 00000000000..924577b69cd --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0645\u062f\u062e\u0644 \u0628\u0648\u0644\u064a\u0646\u064a" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/bg.json b/homeassistant/components/input_boolean/translations/bg.json new file mode 100644 index 00000000000..6aa0b4ac4f4 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u0411\u0443\u043b\u0435\u0432\u0438 \u043f\u0440\u043e\u043c\u0435\u043b\u0438\u0432\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/bs.json b/homeassistant/components/input_boolean/translations/bs.json new file mode 100644 index 00000000000..b0220158f0f --- /dev/null +++ b/homeassistant/components/input_boolean/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Unos boolean" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ca.json b/homeassistant/components/input_boolean/translations/ca.json new file mode 100644 index 00000000000..0ef459d9bb5 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desactivat", + "on": "Activat" + } + }, + "title": "Entrada booleana" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/cs.json b/homeassistant/components/input_boolean/translations/cs.json new file mode 100644 index 00000000000..3db899fd093 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Zad\u00e1n\u00ed ano/ne" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/cy.json b/homeassistant/components/input_boolean/translations/cy.json new file mode 100644 index 00000000000..b953772ef08 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Mewnbynnu boolean" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/da.json b/homeassistant/components/input_boolean/translations/da.json new file mode 100644 index 00000000000..6eca48943aa --- /dev/null +++ b/homeassistant/components/input_boolean/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Boolsk valg" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/de.json b/homeassistant/components/input_boolean/translations/de.json new file mode 100644 index 00000000000..fb70ba80257 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Boolescher Wert eingeben" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/el.json b/homeassistant/components/input_boolean/translations/el.json new file mode 100644 index 00000000000..41fcd83a349 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bb\u03bf\u03b3\u03b9\u03ba\u03ae\u03c2 \u03c0\u03c1\u03ac\u03be\u03b7\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/en.json b/homeassistant/components/input_boolean/translations/en.json new file mode 100644 index 00000000000..4401df1f453 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Input boolean" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/es-419.json b/homeassistant/components/input_boolean/translations/es-419.json new file mode 100644 index 00000000000..ba414294502 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Entrada booleana" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/es.json b/homeassistant/components/input_boolean/translations/es.json new file mode 100644 index 00000000000..ba414294502 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Entrada booleana" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/et.json b/homeassistant/components/input_boolean/translations/et.json new file mode 100644 index 00000000000..3edfbf3cb5d --- /dev/null +++ b/homeassistant/components/input_boolean/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Sisesta t\u00f5ev\u00e4\u00e4rtus" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/eu.json b/homeassistant/components/input_boolean/translations/eu.json new file mode 100644 index 00000000000..379e0449b17 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Sarrera boolearra" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/fa.json b/homeassistant/components/input_boolean/translations/fa.json new file mode 100644 index 00000000000..555d47da048 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644", + "on": "\u0641\u0639\u0627\u0644" + } + }, + "title": "\u0648\u0631\u0648\u062f\u06cc \u0628\u0648\u0644\u06cc\u0646" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/fi.json b/homeassistant/components/input_boolean/translations/fi.json new file mode 100644 index 00000000000..321056098be --- /dev/null +++ b/homeassistant/components/input_boolean/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Sy\u00f6t\u00e4 totuusarvo" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/fr.json b/homeassistant/components/input_boolean/translations/fr.json new file mode 100644 index 00000000000..5bd2cf2891c --- /dev/null +++ b/homeassistant/components/input_boolean/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Arr\u00eat\u00e9", + "on": "Marche" + } + }, + "title": "Entr\u00e9e logique" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/gsw.json b/homeassistant/components/input_boolean/translations/gsw.json new file mode 100644 index 00000000000..badd78cb9fe --- /dev/null +++ b/homeassistant/components/input_boolean/translations/gsw.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/he.json b/homeassistant/components/input_boolean/translations/he.json new file mode 100644 index 00000000000..08bdc30a602 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05e7\u05dc\u05d8 \u05d1\u05d5\u05dc\u05d9\u05d0\u05e0\u05d9" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/hi.json b/homeassistant/components/input_boolean/translations/hi.json new file mode 100644 index 00000000000..10c1cc40051 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u0907\u0928\u092a\u0941\u091f \u092c\u0942\u0932\u093f\u092f\u0928" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/hr.json b/homeassistant/components/input_boolean/translations/hr.json new file mode 100644 index 00000000000..c9386653b7e --- /dev/null +++ b/homeassistant/components/input_boolean/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Input boolean" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/hu.json b/homeassistant/components/input_boolean/translations/hu.json new file mode 100644 index 00000000000..bdf99ca8f47 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Logikai bemenet" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/hy.json b/homeassistant/components/input_boolean/translations/hy.json new file mode 100644 index 00000000000..65e85a6a7e0 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u057f\u0580\u0561\u0574\u0561\u0562\u0561\u0576\u0561\u056f\u0561\u0576 \u0561\u0580\u056a\u0565\u0584" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/id.json b/homeassistant/components/input_boolean/translations/id.json new file mode 100644 index 00000000000..4401df1f453 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Input boolean" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/is.json b/homeassistant/components/input_boolean/translations/is.json new file mode 100644 index 00000000000..d26336b8060 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/is.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "\u00c1" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/it.json b/homeassistant/components/input_boolean/translations/it.json new file mode 100644 index 00000000000..84168c161aa --- /dev/null +++ b/homeassistant/components/input_boolean/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Input booleano" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ja.json b/homeassistant/components/input_boolean/translations/ja.json new file mode 100644 index 00000000000..15dd3796187 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ko.json b/homeassistant/components/input_boolean/translations/ko.json new file mode 100644 index 00000000000..712051d04a4 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\ub17c\ub9ac\uc785\ub825" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/lb.json b/homeassistant/components/input_boolean/translations/lb.json new file mode 100644 index 00000000000..03f385e8fca --- /dev/null +++ b/homeassistant/components/input_boolean/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Boolean-Agab" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/lt.json b/homeassistant/components/input_boolean/translations/lt.json new file mode 100644 index 00000000000..b9ad676cc08 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/lt.json @@ -0,0 +1,7 @@ +{ + "state": { + "_": { + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/lv.json b/homeassistant/components/input_boolean/translations/lv.json new file mode 100644 index 00000000000..540a4a3fc93 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gta", + "on": "Iesl\u0113gta" + } + }, + "title": "Ieejas boolean" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/nb.json b/homeassistant/components/input_boolean/translations/nb.json new file mode 100644 index 00000000000..30fd5804d33 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Angi boolsk" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/nl.json b/homeassistant/components/input_boolean/translations/nl.json new file mode 100644 index 00000000000..da3df8382ca --- /dev/null +++ b/homeassistant/components/input_boolean/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Boolean invoer" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/nn.json b/homeassistant/components/input_boolean/translations/nn.json new file mode 100644 index 00000000000..bed9ea4b31b --- /dev/null +++ b/homeassistant/components/input_boolean/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Angje boolsk" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/no.json b/homeassistant/components/input_boolean/translations/no.json new file mode 100644 index 00000000000..b6ffe9f30ef --- /dev/null +++ b/homeassistant/components/input_boolean/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Valgt boolsk" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/pl.json b/homeassistant/components/input_boolean/translations/pl.json new file mode 100644 index 00000000000..031c361aeec --- /dev/null +++ b/homeassistant/components/input_boolean/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Pole warto\u015bci logicznej" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/pt-BR.json b/homeassistant/components/input_boolean/translations/pt-BR.json new file mode 100644 index 00000000000..cea7b4fdb59 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Entrada booleana" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/pt.json b/homeassistant/components/input_boolean/translations/pt.json new file mode 100644 index 00000000000..0a9c7466a4b --- /dev/null +++ b/homeassistant/components/input_boolean/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Introduzir booleano" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ro.json b/homeassistant/components/input_boolean/translations/ro.json new file mode 100644 index 00000000000..f196d0cf338 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Selectie On/Off" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ru.json b/homeassistant/components/input_boolean/translations/ru.json new file mode 100644 index 00000000000..2aa6a382570 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/sk.json b/homeassistant/components/input_boolean/translations/sk.json new file mode 100644 index 00000000000..29ada82c064 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Vypnut\u00e9", + "on": "Zapnut\u00e9" + } + }, + "title": "Logick\u00fd vstup" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/sl.json b/homeassistant/components/input_boolean/translations/sl.json new file mode 100644 index 00000000000..e0f7eb97344 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "vnesite logi\u010dno vrednost" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/sv.json b/homeassistant/components/input_boolean/translations/sv.json new file mode 100644 index 00000000000..204857de817 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "V\u00e4lj av eller p\u00e5" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/ta.json b/homeassistant/components/input_boolean/translations/ta.json new file mode 100644 index 00000000000..e18bb7afcbb --- /dev/null +++ b/homeassistant/components/input_boolean/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/te.json b/homeassistant/components/input_boolean/translations/te.json new file mode 100644 index 00000000000..d1ed197565a --- /dev/null +++ b/homeassistant/components/input_boolean/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c07\u0c28\u0c4d\u0c2a\u0c41\u0c1f\u0c4d \u0c2c\u0c42\u0c32\u0c3f\u0c2f\u0c28\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/th.json b/homeassistant/components/input_boolean/translations/th.json new file mode 100644 index 00000000000..c06c074bf3b --- /dev/null +++ b/homeassistant/components/input_boolean/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e1b\u0e49\u0e2d\u0e19\u0e04\u0e48\u0e32\u0e15\u0e23\u0e23\u0e01\u0e30" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/tr.json b/homeassistant/components/input_boolean/translations/tr.json new file mode 100644 index 00000000000..ad1792af7c4 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Do\u011fru/Yanl\u0131\u015f giriniz" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/uk.json b/homeassistant/components/input_boolean/translations/uk.json new file mode 100644 index 00000000000..c677957de47 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u043b\u043e\u0433\u0456\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/vi.json b/homeassistant/components/input_boolean/translations/vi.json new file mode 100644 index 00000000000..c703018ab76 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "\u0110\u1ea7u v\u00e0o l\u00f4gic" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/zh-Hans.json b/homeassistant/components/input_boolean/translations/zh-Hans.json new file mode 100644 index 00000000000..596d9486244 --- /dev/null +++ b/homeassistant/components/input_boolean/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u4e8c\u5143\u9009\u62e9\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/input_boolean/translations/zh-Hant.json b/homeassistant/components/input_boolean/translations/zh-Hant.json new file mode 100644 index 00000000000..fd1e761d02f --- /dev/null +++ b/homeassistant/components/input_boolean/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u555f" + } + }, + "title": "\u958b\u95dc\u6846" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/manifest.json b/homeassistant/components/input_datetime/manifest.json index bde5b6e6b90..a394b77b72e 100644 --- a/homeassistant/components/input_datetime/manifest.json +++ b/homeassistant/components/input_datetime/manifest.json @@ -2,8 +2,6 @@ "domain": "input_datetime", "name": "Input Datetime", "documentation": "https://www.home-assistant.io/integrations/input_datetime", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/input_datetime/reproduce_state.py b/homeassistant/components/input_datetime/reproduce_state.py index 17c7fcb9d56..b9eb9800adf 100644 --- a/homeassistant/components/input_datetime/reproduce_state.py +++ b/homeassistant/components/input_datetime/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Input datetime state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import Context, State @@ -40,7 +40,11 @@ def is_valid_time(string: str) -> bool: async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -97,9 +101,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Input datetime states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/input_datetime/services.yaml b/homeassistant/components/input_datetime/services.yaml index 4c5c998d0a5..26b2d088aea 100644 --- a/homeassistant/components/input_datetime/services.yaml +++ b/homeassistant/components/input_datetime/services.yaml @@ -1,14 +1,18 @@ set_datetime: description: This can be used to dynamically set the date and/or time. fields: - entity_id: {description: Entity id of the input datetime to set the new value., - example: input_datetime.test_date_time} - date: {description: The target date the entity should be set to. Do not use with datetime., - example: '"2019-04-20"'} - time: {description: The target time the entity should be set to. Do not use with datetime., - example: '"05:04:20"'} - datetime: {description: The target date & time the entity should be set to. Do not use with date or time., - example: '"2019-04-20 05:04:20"'} + entity_id: + description: Entity id of the input datetime to set the new value. + example: input_datetime.test_date_time + date: + description: The target date the entity should be set to. Do not use with datetime. + example: '"2019-04-20"' + time: + description: The target time the entity should be set to. Do not use with datetime. + example: '"05:04:20"' + datetime: + description: The target date & time the entity should be set to. Do not use with date or time. + example: '"2019-04-20 05:04:20"' reload: description: Reload the input_datetime configuration. diff --git a/homeassistant/components/input_datetime/strings.json b/homeassistant/components/input_datetime/strings.json new file mode 100644 index 00000000000..8d51025070e --- /dev/null +++ b/homeassistant/components/input_datetime/strings.json @@ -0,0 +1 @@ +{ "title": "Input datetime" } diff --git a/homeassistant/components/input_datetime/translations/af.json b/homeassistant/components/input_datetime/translations/af.json new file mode 100644 index 00000000000..af6bb4e8dcf --- /dev/null +++ b/homeassistant/components/input_datetime/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Invoer datum/tyd" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/ar.json b/homeassistant/components/input_datetime/translations/ar.json new file mode 100644 index 00000000000..110852b9142 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u062e\u0627\u0646\u0629 \u0627\u0644\u062a\u0627\u0631\u064a\u062e \u0648\u0627\u0644\u0648\u0642\u062a" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/bg.json b/homeassistant/components/input_datetime/translations/bg.json new file mode 100644 index 00000000000..8946ef71fdd --- /dev/null +++ b/homeassistant/components/input_datetime/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0434\u0430\u0442\u0430 \u0438 \u0447\u0430\u0441" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/bs.json b/homeassistant/components/input_datetime/translations/bs.json new file mode 100644 index 00000000000..dd819183296 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Unos datuma" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/ca.json b/homeassistant/components/input_datetime/translations/ca.json new file mode 100644 index 00000000000..570c7b17592 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de data i hora" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/cs.json b/homeassistant/components/input_datetime/translations/cs.json new file mode 100644 index 00000000000..810b63fdcf9 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Zad\u00e1n\u00ed \u010dasu" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/cy.json b/homeassistant/components/input_datetime/translations/cy.json new file mode 100644 index 00000000000..08ff0bf4e65 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Mewnbynnu dyddiad/amser" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/da.json b/homeassistant/components/input_datetime/translations/da.json new file mode 100644 index 00000000000..ffff2a6597f --- /dev/null +++ b/homeassistant/components/input_datetime/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Indtast dato og tid" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/de.json b/homeassistant/components/input_datetime/translations/de.json new file mode 100644 index 00000000000..79c01a21fc0 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Eingabe Datum/Uhrzeit" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/el.json b/homeassistant/components/input_datetime/translations/el.json new file mode 100644 index 00000000000..9de1e52eeee --- /dev/null +++ b/homeassistant/components/input_datetime/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/en.json b/homeassistant/components/input_datetime/translations/en.json new file mode 100644 index 00000000000..54c8ad79368 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Input datetime" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/es-419.json b/homeassistant/components/input_datetime/translations/es-419.json new file mode 100644 index 00000000000..e86a07db952 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Fecha de entrada" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/es.json b/homeassistant/components/input_datetime/translations/es.json new file mode 100644 index 00000000000..025943ee4fb --- /dev/null +++ b/homeassistant/components/input_datetime/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de fecha" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/et.json b/homeassistant/components/input_datetime/translations/et.json new file mode 100644 index 00000000000..e72e7b10288 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Sisesta kuup\u00e4ev ja kellaaeg" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/eu.json b/homeassistant/components/input_datetime/translations/eu.json new file mode 100644 index 00000000000..2e81fb69eeb --- /dev/null +++ b/homeassistant/components/input_datetime/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Data sarrera" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/fi.json b/homeassistant/components/input_datetime/translations/fi.json new file mode 100644 index 00000000000..385584a5e8e --- /dev/null +++ b/homeassistant/components/input_datetime/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Sy\u00f6t\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/fr.json b/homeassistant/components/input_datetime/translations/fr.json new file mode 100644 index 00000000000..26c1983d162 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Entr\u00e9e calendrier" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/he.json b/homeassistant/components/input_datetime/translations/he.json new file mode 100644 index 00000000000..14c37289ac3 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e7\u05dc\u05d8 \u05ea\u05d0\u05e8\u05d9\u05da \u05d5\u05d6\u05de\u05df" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/hi.json b/homeassistant/components/input_datetime/translations/hi.json new file mode 100644 index 00000000000..43f76822683 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0907\u0928\u092a\u0941\u091f \u0926\u093f\u0928\u093e\u0902\u0915 \u0938\u092e\u092f" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/hr.json b/homeassistant/components/input_datetime/translations/hr.json new file mode 100644 index 00000000000..99600fedc7d --- /dev/null +++ b/homeassistant/components/input_datetime/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Unos datuma i vremena" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/hu.json b/homeassistant/components/input_datetime/translations/hu.json new file mode 100644 index 00000000000..9d9d0cdb3d7 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Id\u0151pont bemenet" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/hy.json b/homeassistant/components/input_datetime/translations/hy.json new file mode 100644 index 00000000000..fa1b82196bc --- /dev/null +++ b/homeassistant/components/input_datetime/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u0565\u0584 \u056a\u0561\u0574\u0561\u0576\u0561\u056f\u056b \u057f\u057e\u0575\u0561\u056c\u0576\u0565\u0580\u0568" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/id.json b/homeassistant/components/input_datetime/translations/id.json new file mode 100644 index 00000000000..c5835319547 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Input tanggal waktu" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/is.json b/homeassistant/components/input_datetime/translations/is.json new file mode 100644 index 00000000000..22c089f8f0f --- /dev/null +++ b/homeassistant/components/input_datetime/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Innsl\u00e1ttar dagsetning/t\u00edmi" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/it.json b/homeassistant/components/input_datetime/translations/it.json new file mode 100644 index 00000000000..214cfa6395e --- /dev/null +++ b/homeassistant/components/input_datetime/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Input di data/ora" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/ko.json b/homeassistant/components/input_datetime/translations/ko.json new file mode 100644 index 00000000000..a5984527e15 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\ub0a0\uc9dc / \uc2dc\uac04\uc785\ub825" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/lb.json b/homeassistant/components/input_datetime/translations/lb.json new file mode 100644 index 00000000000..f3970ce802a --- /dev/null +++ b/homeassistant/components/input_datetime/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Datum-/Z\u00e4it-Agab" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/lv.json b/homeassistant/components/input_datetime/translations/lv.json new file mode 100644 index 00000000000..d3641924ce2 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Ievades datuma laiks" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/nb.json b/homeassistant/components/input_datetime/translations/nb.json new file mode 100644 index 00000000000..c22fa606524 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Angi datotid" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/nl.json b/homeassistant/components/input_datetime/translations/nl.json new file mode 100644 index 00000000000..a8c4d08abd0 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Voer datum en tijd in" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/nn.json b/homeassistant/components/input_datetime/translations/nn.json new file mode 100644 index 00000000000..673793f919a --- /dev/null +++ b/homeassistant/components/input_datetime/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Angje dato" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/no.json b/homeassistant/components/input_datetime/translations/no.json new file mode 100644 index 00000000000..d86f7180c81 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Angi dato" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/pl.json b/homeassistant/components/input_datetime/translations/pl.json new file mode 100644 index 00000000000..9e990791ed8 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Pole daty i czasu" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/pt-BR.json b/homeassistant/components/input_datetime/translations/pt-BR.json new file mode 100644 index 00000000000..ede9ff7bd1a --- /dev/null +++ b/homeassistant/components/input_datetime/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de data e hora" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/pt.json b/homeassistant/components/input_datetime/translations/pt.json new file mode 100644 index 00000000000..b4d83e081fb --- /dev/null +++ b/homeassistant/components/input_datetime/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Introduzir data/hora" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/ro.json b/homeassistant/components/input_datetime/translations/ro.json new file mode 100644 index 00000000000..6b9dfbd7717 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Selecta\u021bi o data" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/ru.json b/homeassistant/components/input_datetime/translations/ru.json new file mode 100644 index 00000000000..51eb69a073e --- /dev/null +++ b/homeassistant/components/input_datetime/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/sk.json b/homeassistant/components/input_datetime/translations/sk.json new file mode 100644 index 00000000000..65becd11953 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Vstupn\u00fd d\u00e1tum a \u010das" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/sl.json b/homeassistant/components/input_datetime/translations/sl.json new file mode 100644 index 00000000000..13933457561 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Vnos datuma in \u010dasa" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/sv.json b/homeassistant/components/input_datetime/translations/sv.json new file mode 100644 index 00000000000..c3657e30efb --- /dev/null +++ b/homeassistant/components/input_datetime/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Mata in datum och tid" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/te.json b/homeassistant/components/input_datetime/translations/te.json new file mode 100644 index 00000000000..8df80264846 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c07\u0c28\u0c4d\u0c2a\u0c41\u0c1f\u0c4d \u0c24\u0c47\u0c26\u0c40\u0c38\u0c2e\u0c2f\u0c02" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/th.json b/homeassistant/components/input_datetime/translations/th.json new file mode 100644 index 00000000000..944a288f773 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e1b\u0e49\u0e2d\u0e19\u0e27\u0e31\u0e19\u0e40\u0e27\u0e25\u0e32" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/tr.json b/homeassistant/components/input_datetime/translations/tr.json new file mode 100644 index 00000000000..1b0c21d3029 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Giri\u015f Tarih/Saat" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/uk.json b/homeassistant/components/input_datetime/translations/uk.json new file mode 100644 index 00000000000..bd087e535a5 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0434\u0430\u0442\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/vi.json b/homeassistant/components/input_datetime/translations/vi.json new file mode 100644 index 00000000000..f1bb56d3bf0 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0110\u1ea7u v\u00e0o ng\u00e0y gi\u1edd" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/zh-Hans.json b/homeassistant/components/input_datetime/translations/zh-Hans.json new file mode 100644 index 00000000000..7b80fb16d4e --- /dev/null +++ b/homeassistant/components/input_datetime/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u65e5\u671f\u9009\u62e9\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/input_datetime/translations/zh-Hant.json b/homeassistant/components/input_datetime/translations/zh-Hant.json new file mode 100644 index 00000000000..631f486d463 --- /dev/null +++ b/homeassistant/components/input_datetime/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u8f38\u5165\u65e5\u671f" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/manifest.json b/homeassistant/components/input_number/manifest.json index 98376e77d04..93081a7ed49 100644 --- a/homeassistant/components/input_number/manifest.json +++ b/homeassistant/components/input_number/manifest.json @@ -2,8 +2,6 @@ "domain": "input_number", "name": "Input Number", "documentation": "https://www.home-assistant.io/integrations/input_number", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/input_number/reproduce_state.py b/homeassistant/components/input_number/reproduce_state.py index a81c7041607..5a6324c4333 100644 --- a/homeassistant/components/input_number/reproduce_state.py +++ b/homeassistant/components/input_number/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Input number state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional import voluptuous as vol @@ -15,7 +15,11 @@ _LOGGER = logging.getLogger(__name__) async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -49,10 +53,19 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Input number states.""" # Reproduce states in parallel. await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/input_number/services.yaml b/homeassistant/components/input_number/services.yaml index 9cd1b913ccd..76526b73e92 100644 --- a/homeassistant/components/input_number/services.yaml +++ b/homeassistant/components/input_number/services.yaml @@ -1,18 +1,23 @@ decrement: description: Decrement the value of an input number entity by its stepping. fields: - entity_id: {description: Entity id of the input number the should be decremented., - example: input_number.threshold} + entity_id: + description: Entity id of the input number the should be decremented. + example: input_number.threshold increment: description: Increment the value of an input number entity by its stepping. fields: - entity_id: {description: Entity id of the input number the should be incremented., - example: input_number.threshold} + entity_id: + description: Entity id of the input number the should be incremented. + example: input_number.threshold set_value: description: Set the value of an input number entity. fields: - entity_id: {description: Entity id of the input number to set the new value., - example: input_number.threshold} - value: {description: The target value the entity should be set to., example: 42} + entity_id: + description: Entity id of the input number to set the new value. + example: input_number.threshold + value: + description: The target value the entity should be set to. + example: 42 reload: description: Reload the input_number configuration. diff --git a/homeassistant/components/input_number/strings.json b/homeassistant/components/input_number/strings.json new file mode 100644 index 00000000000..35bbbebbdd7 --- /dev/null +++ b/homeassistant/components/input_number/strings.json @@ -0,0 +1 @@ +{ "title": "Input number" } diff --git a/homeassistant/components/input_number/translations/af.json b/homeassistant/components/input_number/translations/af.json new file mode 100644 index 00000000000..21588860453 --- /dev/null +++ b/homeassistant/components/input_number/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Invoer nommer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/ar.json b/homeassistant/components/input_number/translations/ar.json new file mode 100644 index 00000000000..972b4007387 --- /dev/null +++ b/homeassistant/components/input_number/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u062e\u0627\u0646\u0629 \u0627\u0644\u0623\u0631\u0642\u0627\u0645" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/bg.json b/homeassistant/components/input_number/translations/bg.json new file mode 100644 index 00000000000..3d9ca48933e --- /dev/null +++ b/homeassistant/components/input_number/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/bs.json b/homeassistant/components/input_number/translations/bs.json new file mode 100644 index 00000000000..32be17c859a --- /dev/null +++ b/homeassistant/components/input_number/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Unos broja" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/ca.json b/homeassistant/components/input_number/translations/ca.json new file mode 100644 index 00000000000..cd3606e03a9 --- /dev/null +++ b/homeassistant/components/input_number/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada num\u00e8rica" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/cs.json b/homeassistant/components/input_number/translations/cs.json new file mode 100644 index 00000000000..c639bae22f0 --- /dev/null +++ b/homeassistant/components/input_number/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Zad\u00e1n\u00ed \u010d\u00edsla" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/cy.json b/homeassistant/components/input_number/translations/cy.json new file mode 100644 index 00000000000..d9cb424783d --- /dev/null +++ b/homeassistant/components/input_number/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Mewnbynnu rhif" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/da.json b/homeassistant/components/input_number/translations/da.json new file mode 100644 index 00000000000..5108e16efcb --- /dev/null +++ b/homeassistant/components/input_number/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Indtast nummer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/de.json b/homeassistant/components/input_number/translations/de.json new file mode 100644 index 00000000000..51a7a178a09 --- /dev/null +++ b/homeassistant/components/input_number/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Numerische Eingabe" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/el.json b/homeassistant/components/input_number/translations/el.json new file mode 100644 index 00000000000..04e57ee945e --- /dev/null +++ b/homeassistant/components/input_number/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/en.json b/homeassistant/components/input_number/translations/en.json new file mode 100644 index 00000000000..4f474990db0 --- /dev/null +++ b/homeassistant/components/input_number/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Input number" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/es-419.json b/homeassistant/components/input_number/translations/es-419.json new file mode 100644 index 00000000000..dd280ee7c6f --- /dev/null +++ b/homeassistant/components/input_number/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00famero de entrada" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/es.json b/homeassistant/components/input_number/translations/es.json new file mode 100644 index 00000000000..e05a9130580 --- /dev/null +++ b/homeassistant/components/input_number/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de n\u00famero" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/et.json b/homeassistant/components/input_number/translations/et.json new file mode 100644 index 00000000000..f4182fbb3d5 --- /dev/null +++ b/homeassistant/components/input_number/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Sisendi number" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/eu.json b/homeassistant/components/input_number/translations/eu.json new file mode 100644 index 00000000000..a5a7b0c35dd --- /dev/null +++ b/homeassistant/components/input_number/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Zenbaki sarrera" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/fi.json b/homeassistant/components/input_number/translations/fi.json new file mode 100644 index 00000000000..b521ec9fed3 --- /dev/null +++ b/homeassistant/components/input_number/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Sy\u00f6t\u00e4 numero" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/fr.json b/homeassistant/components/input_number/translations/fr.json new file mode 100644 index 00000000000..22045841160 --- /dev/null +++ b/homeassistant/components/input_number/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Entr\u00e9e num\u00e9rique" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/he.json b/homeassistant/components/input_number/translations/he.json new file mode 100644 index 00000000000..6fff8ef5e31 --- /dev/null +++ b/homeassistant/components/input_number/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e7\u05dc\u05d8 \u05de\u05e1\u05e4\u05e8" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/hi.json b/homeassistant/components/input_number/translations/hi.json new file mode 100644 index 00000000000..abcbfa4f52e --- /dev/null +++ b/homeassistant/components/input_number/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0907\u0928\u092a\u0941\u091f \u0938\u0902\u0916\u094d\u092f\u093e" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/hr.json b/homeassistant/components/input_number/translations/hr.json new file mode 100644 index 00000000000..0a909c435f0 --- /dev/null +++ b/homeassistant/components/input_number/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Unesite broj" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/hu.json b/homeassistant/components/input_number/translations/hu.json new file mode 100644 index 00000000000..766e7458244 --- /dev/null +++ b/homeassistant/components/input_number/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Sz\u00e1m bemenet" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/hy.json b/homeassistant/components/input_number/translations/hy.json new file mode 100644 index 00000000000..e39ed6234f1 --- /dev/null +++ b/homeassistant/components/input_number/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580\u0568" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/id.json b/homeassistant/components/input_number/translations/id.json new file mode 100644 index 00000000000..4c533f5eac5 --- /dev/null +++ b/homeassistant/components/input_number/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Input bilangan" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/is.json b/homeassistant/components/input_number/translations/is.json new file mode 100644 index 00000000000..677efd751f0 --- /dev/null +++ b/homeassistant/components/input_number/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Innsl\u00e1ttarn\u00famer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/it.json b/homeassistant/components/input_number/translations/it.json new file mode 100644 index 00000000000..c635f1d295c --- /dev/null +++ b/homeassistant/components/input_number/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Input numerico" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/ko.json b/homeassistant/components/input_number/translations/ko.json new file mode 100644 index 00000000000..68960733dd8 --- /dev/null +++ b/homeassistant/components/input_number/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc22b\uc790\uc785\ub825" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/lb.json b/homeassistant/components/input_number/translations/lb.json new file mode 100644 index 00000000000..7d2ec79080e --- /dev/null +++ b/homeassistant/components/input_number/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Zuelen-Agab" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/lv.json b/homeassistant/components/input_number/translations/lv.json new file mode 100644 index 00000000000..6268cf2df3e --- /dev/null +++ b/homeassistant/components/input_number/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Ievades numurs" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/nb.json b/homeassistant/components/input_number/translations/nb.json new file mode 100644 index 00000000000..c36d2b6aafc --- /dev/null +++ b/homeassistant/components/input_number/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Angi nummer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/nl.json b/homeassistant/components/input_number/translations/nl.json new file mode 100644 index 00000000000..c5cc3712430 --- /dev/null +++ b/homeassistant/components/input_number/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Numerieke invoer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/nn.json b/homeassistant/components/input_number/translations/nn.json new file mode 100644 index 00000000000..65240785840 --- /dev/null +++ b/homeassistant/components/input_number/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Angje nummer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/no.json b/homeassistant/components/input_number/translations/no.json new file mode 100644 index 00000000000..c36d2b6aafc --- /dev/null +++ b/homeassistant/components/input_number/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Angi nummer" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/pl.json b/homeassistant/components/input_number/translations/pl.json new file mode 100644 index 00000000000..4ef827032d0 --- /dev/null +++ b/homeassistant/components/input_number/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Pole numeryczne" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/pt-BR.json b/homeassistant/components/input_number/translations/pt-BR.json new file mode 100644 index 00000000000..e31e0ccc72f --- /dev/null +++ b/homeassistant/components/input_number/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada num\u00e9rica" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/pt.json b/homeassistant/components/input_number/translations/pt.json new file mode 100644 index 00000000000..5c6efb211e2 --- /dev/null +++ b/homeassistant/components/input_number/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Introduzir n\u00famero" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/ro.json b/homeassistant/components/input_number/translations/ro.json new file mode 100644 index 00000000000..d519b992eb8 --- /dev/null +++ b/homeassistant/components/input_number/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Selecta\u021bi numarul" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/ru.json b/homeassistant/components/input_number/translations/ru.json new file mode 100644 index 00000000000..64c8e55f836 --- /dev/null +++ b/homeassistant/components/input_number/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0427\u0438\u0441\u043b\u043e" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/sk.json b/homeassistant/components/input_number/translations/sk.json new file mode 100644 index 00000000000..c2449db709f --- /dev/null +++ b/homeassistant/components/input_number/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "\u010c\u00edseln\u00fd vstup" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/sl.json b/homeassistant/components/input_number/translations/sl.json new file mode 100644 index 00000000000..09988294d46 --- /dev/null +++ b/homeassistant/components/input_number/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Vnesite \u0161tevilko" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/sv.json b/homeassistant/components/input_number/translations/sv.json new file mode 100644 index 00000000000..981034c73b9 --- /dev/null +++ b/homeassistant/components/input_number/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Mata in tal" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/te.json b/homeassistant/components/input_number/translations/te.json new file mode 100644 index 00000000000..1ca8fbd4ec4 --- /dev/null +++ b/homeassistant/components/input_number/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c07\u0c28\u0c4d\u0c2a\u0c41\u0c1f\u0c4d \u0c38\u0c02\u0c16\u0c4d\u0c2f" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/th.json b/homeassistant/components/input_number/translations/th.json new file mode 100644 index 00000000000..ec93697dc3b --- /dev/null +++ b/homeassistant/components/input_number/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e1b\u0e49\u0e2d\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/tr.json b/homeassistant/components/input_number/translations/tr.json new file mode 100644 index 00000000000..c1805180884 --- /dev/null +++ b/homeassistant/components/input_number/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Numara giriniz" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/uk.json b/homeassistant/components/input_number/translations/uk.json new file mode 100644 index 00000000000..0e4265d7ca0 --- /dev/null +++ b/homeassistant/components/input_number/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043d\u043e\u043c\u0435\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/vi.json b/homeassistant/components/input_number/translations/vi.json new file mode 100644 index 00000000000..0fcc548a682 --- /dev/null +++ b/homeassistant/components/input_number/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0110\u1ea7u v\u00e0o s\u1ed1" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/zh-Hans.json b/homeassistant/components/input_number/translations/zh-Hans.json new file mode 100644 index 00000000000..b230db9fc60 --- /dev/null +++ b/homeassistant/components/input_number/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u6570\u503c\u9009\u62e9\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/input_number/translations/zh-Hant.json b/homeassistant/components/input_number/translations/zh-Hant.json new file mode 100644 index 00000000000..76806d23a5c --- /dev/null +++ b/homeassistant/components/input_number/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u6578\u5b57\u6846" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/manifest.json b/homeassistant/components/input_select/manifest.json index 892794c2616..614ee18390d 100644 --- a/homeassistant/components/input_select/manifest.json +++ b/homeassistant/components/input_select/manifest.json @@ -2,8 +2,6 @@ "domain": "input_select", "name": "Input Select", "documentation": "https://www.home-assistant.io/integrations/input_select", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/input_select/reproduce_state.py b/homeassistant/components/input_select/reproduce_state.py index 818510bee4a..bf687738740 100644 --- a/homeassistant/components/input_select/reproduce_state.py +++ b/homeassistant/components/input_select/reproduce_state.py @@ -2,7 +2,7 @@ import asyncio import logging from types import MappingProxyType -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import Context, State @@ -22,7 +22,11 @@ _LOGGER = logging.getLogger(__name__) async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -64,12 +68,21 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Input select states.""" # Reproduce states in parallel. await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/input_select/services.yaml b/homeassistant/components/input_select/services.yaml index 2cce496d0b6..f4aa44f3de0 100644 --- a/homeassistant/components/input_select/services.yaml +++ b/homeassistant/components/input_select/services.yaml @@ -1,24 +1,32 @@ select_next: description: Select the next options of an input select entity. fields: - entity_id: {description: Entity id of the input select to select the next value - for., example: input_select.my_select} + entity_id: + description: Entity id of the input select to select the next value for. + example: input_select.my_select select_option: description: Select an option of an input select entity. fields: - entity_id: {description: Entity id of the input select to select the value., example: input_select.my_select} - option: {description: Option to be selected., example: '"Item A"'} + entity_id: + description: Entity id of the input select to select the value. + example: input_select.my_select + option: + description: Option to be selected. + example: '"Item A"' select_previous: description: Select the previous options of an input select entity. fields: - entity_id: {description: Entity id of the input select to select the previous - value for., example: input_select.my_select} + entity_id: + description: Entity id of the input select to select the previous value for. + example: input_select.my_select set_options: description: Set the options of an input select entity. fields: - entity_id: {description: Entity id of the input select to set the new options - for., example: input_select.my_select} - options: {description: Options for the input select entity., example: '["Item - A", "Item B", "Item C"]'} + entity_id: + description: Entity id of the input select to set the new options for. + example: input_select.my_select + options: + description: Options for the input select entity. + example: '["Item A", "Item B", "Item C"]' reload: description: Reload the input_select configuration. diff --git a/homeassistant/components/input_select/strings.json b/homeassistant/components/input_select/strings.json new file mode 100644 index 00000000000..c3cd5c0c71c --- /dev/null +++ b/homeassistant/components/input_select/strings.json @@ -0,0 +1 @@ +{ "title": "Input select" } diff --git a/homeassistant/components/input_select/translations/af.json b/homeassistant/components/input_select/translations/af.json new file mode 100644 index 00000000000..3c6b44d43d6 --- /dev/null +++ b/homeassistant/components/input_select/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Invoer seleksie" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/ar.json b/homeassistant/components/input_select/translations/ar.json new file mode 100644 index 00000000000..af85b8135ec --- /dev/null +++ b/homeassistant/components/input_select/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0644\u0627\u0626\u062d\u0629 \u0625\u062e\u062a\u064a\u0627\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/bg.json b/homeassistant/components/input_select/translations/bg.json new file mode 100644 index 00000000000..73689e0e6d6 --- /dev/null +++ b/homeassistant/components/input_select/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0418\u0437\u0431\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/bs.json b/homeassistant/components/input_select/translations/bs.json new file mode 100644 index 00000000000..34a36e0cd81 --- /dev/null +++ b/homeassistant/components/input_select/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Unos izbora" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/ca.json b/homeassistant/components/input_select/translations/ca.json new file mode 100644 index 00000000000..8a20dd83cf5 --- /dev/null +++ b/homeassistant/components/input_select/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de selecci\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/cs.json b/homeassistant/components/input_select/translations/cs.json new file mode 100644 index 00000000000..c36a4687fda --- /dev/null +++ b/homeassistant/components/input_select/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Zad\u00e1n\u00ed volby" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/cy.json b/homeassistant/components/input_select/translations/cy.json new file mode 100644 index 00000000000..0558e76de4b --- /dev/null +++ b/homeassistant/components/input_select/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Mewnbynnu dewis" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/da.json b/homeassistant/components/input_select/translations/da.json new file mode 100644 index 00000000000..7354ebf3d77 --- /dev/null +++ b/homeassistant/components/input_select/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "V\u00e6lg mulighed" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/de.json b/homeassistant/components/input_select/translations/de.json new file mode 100644 index 00000000000..8b58030eded --- /dev/null +++ b/homeassistant/components/input_select/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Auswahlfeld" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/el.json b/homeassistant/components/input_select/translations/el.json new file mode 100644 index 00000000000..0832123d47f --- /dev/null +++ b/homeassistant/components/input_select/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b5\u03b9\u03c3\u03cc\u03b4\u03bf\u03c5" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/en.json b/homeassistant/components/input_select/translations/en.json new file mode 100644 index 00000000000..e74785ed24f --- /dev/null +++ b/homeassistant/components/input_select/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Input select" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/es-419.json b/homeassistant/components/input_select/translations/es-419.json new file mode 100644 index 00000000000..ad5d4266d2c --- /dev/null +++ b/homeassistant/components/input_select/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Selecci\u00f3n de entrada" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/es.json b/homeassistant/components/input_select/translations/es.json new file mode 100644 index 00000000000..ad5d4266d2c --- /dev/null +++ b/homeassistant/components/input_select/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Selecci\u00f3n de entrada" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/et.json b/homeassistant/components/input_select/translations/et.json new file mode 100644 index 00000000000..22378cd35a0 --- /dev/null +++ b/homeassistant/components/input_select/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Vali sisend" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/eu.json b/homeassistant/components/input_select/translations/eu.json new file mode 100644 index 00000000000..d55843eddae --- /dev/null +++ b/homeassistant/components/input_select/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Aukeraketa sarrera" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/fi.json b/homeassistant/components/input_select/translations/fi.json new file mode 100644 index 00000000000..4f9dfdbf6c1 --- /dev/null +++ b/homeassistant/components/input_select/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Valinta" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/fr.json b/homeassistant/components/input_select/translations/fr.json new file mode 100644 index 00000000000..e93b725dc49 --- /dev/null +++ b/homeassistant/components/input_select/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "S\u00e9lection" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/he.json b/homeassistant/components/input_select/translations/he.json new file mode 100644 index 00000000000..6fb50ef1c67 --- /dev/null +++ b/homeassistant/components/input_select/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e7\u05dc\u05d8 \u05d1\u05d7\u05d9\u05e8\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/hi.json b/homeassistant/components/input_select/translations/hi.json new file mode 100644 index 00000000000..822ba13d9a4 --- /dev/null +++ b/homeassistant/components/input_select/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0907\u0928\u092a\u0941\u091f \u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/hr.json b/homeassistant/components/input_select/translations/hr.json new file mode 100644 index 00000000000..9927fb325f1 --- /dev/null +++ b/homeassistant/components/input_select/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Izbor unosa" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/hu.json b/homeassistant/components/input_select/translations/hu.json new file mode 100644 index 00000000000..d528d526afc --- /dev/null +++ b/homeassistant/components/input_select/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "V\u00e1laszt\u00e1si bemenet" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/hy.json b/homeassistant/components/input_select/translations/hy.json new file mode 100644 index 00000000000..296e047ba06 --- /dev/null +++ b/homeassistant/components/input_select/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u0565\u0584 \u0568\u0576\u057f\u0580\u0561\u056e\u0568" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/id.json b/homeassistant/components/input_select/translations/id.json new file mode 100644 index 00000000000..fb8243c7f3d --- /dev/null +++ b/homeassistant/components/input_select/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Input pilihan" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/is.json b/homeassistant/components/input_select/translations/is.json new file mode 100644 index 00000000000..87462c94213 --- /dev/null +++ b/homeassistant/components/input_select/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Innsl\u00e1ttarval" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/it.json b/homeassistant/components/input_select/translations/it.json new file mode 100644 index 00000000000..80f397dd89e --- /dev/null +++ b/homeassistant/components/input_select/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Input selezione" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/ko.json b/homeassistant/components/input_select/translations/ko.json new file mode 100644 index 00000000000..5620635d903 --- /dev/null +++ b/homeassistant/components/input_select/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc120\ud0dd\uc785\ub825" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/lb.json b/homeassistant/components/input_select/translations/lb.json new file mode 100644 index 00000000000..4e1ceb45c94 --- /dev/null +++ b/homeassistant/components/input_select/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Auswiel-Agab" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/lv.json b/homeassistant/components/input_select/translations/lv.json new file mode 100644 index 00000000000..bd5971875f2 --- /dev/null +++ b/homeassistant/components/input_select/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Ievades izv\u0113le" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/nb.json b/homeassistant/components/input_select/translations/nb.json new file mode 100644 index 00000000000..6840f1416c8 --- /dev/null +++ b/homeassistant/components/input_select/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Angi valg" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/nl.json b/homeassistant/components/input_select/translations/nl.json new file mode 100644 index 00000000000..9abccb1411b --- /dev/null +++ b/homeassistant/components/input_select/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Invoer selectie" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/nn.json b/homeassistant/components/input_select/translations/nn.json new file mode 100644 index 00000000000..45abc169e44 --- /dev/null +++ b/homeassistant/components/input_select/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Angje val" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/no.json b/homeassistant/components/input_select/translations/no.json new file mode 100644 index 00000000000..6840f1416c8 --- /dev/null +++ b/homeassistant/components/input_select/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Angi valg" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/pl.json b/homeassistant/components/input_select/translations/pl.json new file mode 100644 index 00000000000..9a1b05e3234 --- /dev/null +++ b/homeassistant/components/input_select/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Pole wyboru" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/pt-BR.json b/homeassistant/components/input_select/translations/pt-BR.json new file mode 100644 index 00000000000..129d8326824 --- /dev/null +++ b/homeassistant/components/input_select/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de sele\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/pt.json b/homeassistant/components/input_select/translations/pt.json new file mode 100644 index 00000000000..6d9b589e7af --- /dev/null +++ b/homeassistant/components/input_select/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Escolher" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/ro.json b/homeassistant/components/input_select/translations/ro.json new file mode 100644 index 00000000000..b745ad43594 --- /dev/null +++ b/homeassistant/components/input_select/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Selecta\u021bi" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/ru.json b/homeassistant/components/input_select/translations/ru.json new file mode 100644 index 00000000000..51cc2815b26 --- /dev/null +++ b/homeassistant/components/input_select/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0421\u043f\u0438\u0441\u043e\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/sk.json b/homeassistant/components/input_select/translations/sk.json new file mode 100644 index 00000000000..3d6843727de --- /dev/null +++ b/homeassistant/components/input_select/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "V\u00fdber z mo\u017enost\u00ed" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/sl.json b/homeassistant/components/input_select/translations/sl.json new file mode 100644 index 00000000000..94e92eb924f --- /dev/null +++ b/homeassistant/components/input_select/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Izbira vnosa" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/sv.json b/homeassistant/components/input_select/translations/sv.json new file mode 100644 index 00000000000..e16183afa01 --- /dev/null +++ b/homeassistant/components/input_select/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "V\u00e4lj" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/te.json b/homeassistant/components/input_select/translations/te.json new file mode 100644 index 00000000000..94afe97c81e --- /dev/null +++ b/homeassistant/components/input_select/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c07\u0c28\u0c4d\u0c2a\u0c41\u0c1f\u0c4d \u0c0e\u0c02\u0c1a\u0c41\u0c15\u0c4b" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/th.json b/homeassistant/components/input_select/translations/th.json new file mode 100644 index 00000000000..4e92c4d99e1 --- /dev/null +++ b/homeassistant/components/input_select/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/tr.json b/homeassistant/components/input_select/translations/tr.json new file mode 100644 index 00000000000..76026f5c0d5 --- /dev/null +++ b/homeassistant/components/input_select/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Girdi se\u00e7iniz" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/uk.json b/homeassistant/components/input_select/translations/uk.json new file mode 100644 index 00000000000..ace44f8d7a7 --- /dev/null +++ b/homeassistant/components/input_select/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/vi.json b/homeassistant/components/input_select/translations/vi.json new file mode 100644 index 00000000000..84306384eeb --- /dev/null +++ b/homeassistant/components/input_select/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Ch\u1ecdn \u0111\u1ea7u v\u00e0o" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/zh-Hans.json b/homeassistant/components/input_select/translations/zh-Hans.json new file mode 100644 index 00000000000..49380782fbd --- /dev/null +++ b/homeassistant/components/input_select/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u591a\u9879\u9009\u62e9\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/input_select/translations/zh-Hant.json b/homeassistant/components/input_select/translations/zh-Hant.json new file mode 100644 index 00000000000..8fd89f7392c --- /dev/null +++ b/homeassistant/components/input_select/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u9078\u64c7\u6846" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/manifest.json b/homeassistant/components/input_text/manifest.json index 34fd0681e16..3ca9a0b961a 100644 --- a/homeassistant/components/input_text/manifest.json +++ b/homeassistant/components/input_text/manifest.json @@ -2,8 +2,6 @@ "domain": "input_text", "name": "Input Text", "documentation": "https://www.home-assistant.io/integrations/input_text", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/input_text/reproduce_state.py b/homeassistant/components/input_text/reproduce_state.py index 28a2f27ee84..abd28195d8d 100644 --- a/homeassistant/components/input_text/reproduce_state.py +++ b/homeassistant/components/input_text/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Input text state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import Context, State @@ -13,7 +13,11 @@ _LOGGER = logging.getLogger(__name__) async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -37,10 +41,19 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Input text states.""" # Reproduce states in parallel. await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/input_text/services.yaml b/homeassistant/components/input_text/services.yaml index e9b709b0c03..0f74cd8940e 100644 --- a/homeassistant/components/input_text/services.yaml +++ b/homeassistant/components/input_text/services.yaml @@ -1,8 +1,11 @@ set_value: description: Set the value of an input text entity. fields: - entity_id: {description: Entity id of the input text to set the new value., example: input_text.text1} - value: {description: The target value the entity should be set to., example: This - is an example text} + entity_id: + description: Entity id of the input text to set the new value. + example: input_text.text1 + value: + description: The target value the entity should be set to. + example: This is an example text reload: description: Reload the input_text configuration. diff --git a/homeassistant/components/input_text/strings.json b/homeassistant/components/input_text/strings.json new file mode 100644 index 00000000000..dac5995acad --- /dev/null +++ b/homeassistant/components/input_text/strings.json @@ -0,0 +1 @@ +{ "title": "Input text" } diff --git a/homeassistant/components/input_text/translations/af.json b/homeassistant/components/input_text/translations/af.json new file mode 100644 index 00000000000..9d35992c729 --- /dev/null +++ b/homeassistant/components/input_text/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Invoer teks" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/ar.json b/homeassistant/components/input_text/translations/ar.json new file mode 100644 index 00000000000..e348970b1f7 --- /dev/null +++ b/homeassistant/components/input_text/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u062e\u0627\u0646\u0629 \u0628\u064a\u0627\u0646\u0627\u062a" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/bg.json b/homeassistant/components/input_text/translations/bg.json new file mode 100644 index 00000000000..3bbafad402a --- /dev/null +++ b/homeassistant/components/input_text/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/bs.json b/homeassistant/components/input_text/translations/bs.json new file mode 100644 index 00000000000..022ceeff507 --- /dev/null +++ b/homeassistant/components/input_text/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Unos teksta" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/ca.json b/homeassistant/components/input_text/translations/ca.json new file mode 100644 index 00000000000..2648fa7e910 --- /dev/null +++ b/homeassistant/components/input_text/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de text" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/cs.json b/homeassistant/components/input_text/translations/cs.json new file mode 100644 index 00000000000..a0e09f9fe84 --- /dev/null +++ b/homeassistant/components/input_text/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Zad\u00e1n\u00ed textu" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/cy.json b/homeassistant/components/input_text/translations/cy.json new file mode 100644 index 00000000000..fedd3397d0e --- /dev/null +++ b/homeassistant/components/input_text/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Mewnbynnu testun" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/da.json b/homeassistant/components/input_text/translations/da.json new file mode 100644 index 00000000000..c0f3910152c --- /dev/null +++ b/homeassistant/components/input_text/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Indtast tekst" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/de.json b/homeassistant/components/input_text/translations/de.json new file mode 100644 index 00000000000..b9c5f81e9b7 --- /dev/null +++ b/homeassistant/components/input_text/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Texteingabe" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/el.json b/homeassistant/components/input_text/translations/el.json new file mode 100644 index 00000000000..f657840f1cb --- /dev/null +++ b/homeassistant/components/input_text/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/en.json b/homeassistant/components/input_text/translations/en.json new file mode 100644 index 00000000000..dea91ea03a7 --- /dev/null +++ b/homeassistant/components/input_text/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Input text" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/es-419.json b/homeassistant/components/input_text/translations/es-419.json new file mode 100644 index 00000000000..a44a36a38e7 --- /dev/null +++ b/homeassistant/components/input_text/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Texto de entrada" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/es.json b/homeassistant/components/input_text/translations/es.json new file mode 100644 index 00000000000..1b39d854665 --- /dev/null +++ b/homeassistant/components/input_text/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de texto" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/et.json b/homeassistant/components/input_text/translations/et.json new file mode 100644 index 00000000000..047874d6328 --- /dev/null +++ b/homeassistant/components/input_text/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Teksti sisestamine" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/eu.json b/homeassistant/components/input_text/translations/eu.json new file mode 100644 index 00000000000..0e331395185 --- /dev/null +++ b/homeassistant/components/input_text/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Testu sarrera" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/fi.json b/homeassistant/components/input_text/translations/fi.json new file mode 100644 index 00000000000..6c530bc7e54 --- /dev/null +++ b/homeassistant/components/input_text/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Sy\u00f6t\u00e4 teksti" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/fr.json b/homeassistant/components/input_text/translations/fr.json new file mode 100644 index 00000000000..5ba2ca12a76 --- /dev/null +++ b/homeassistant/components/input_text/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Saisie de texte" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/he.json b/homeassistant/components/input_text/translations/he.json new file mode 100644 index 00000000000..31c429c04bb --- /dev/null +++ b/homeassistant/components/input_text/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e7\u05dc\u05d8 \u05d8\u05e7\u05e1\u05d8" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/hi.json b/homeassistant/components/input_text/translations/hi.json new file mode 100644 index 00000000000..66ad4c1e7ce --- /dev/null +++ b/homeassistant/components/input_text/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0907\u0928\u092a\u0941\u091f \u091f\u0947\u0915\u094d\u0938\u094d\u091f" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/hr.json b/homeassistant/components/input_text/translations/hr.json new file mode 100644 index 00000000000..1883aae18b2 --- /dev/null +++ b/homeassistant/components/input_text/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Unesite tekst" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/hu.json b/homeassistant/components/input_text/translations/hu.json new file mode 100644 index 00000000000..e4970693949 --- /dev/null +++ b/homeassistant/components/input_text/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Sz\u00f6veg bemenet" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/hy.json b/homeassistant/components/input_text/translations/hy.json new file mode 100644 index 00000000000..a729614ea9f --- /dev/null +++ b/homeassistant/components/input_text/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u0565\u0584 \u057f\u0565\u0584\u057d\u057f\u0568" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/id.json b/homeassistant/components/input_text/translations/id.json new file mode 100644 index 00000000000..8f8d4e036e4 --- /dev/null +++ b/homeassistant/components/input_text/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Input teks" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/is.json b/homeassistant/components/input_text/translations/is.json new file mode 100644 index 00000000000..31b0f430193 --- /dev/null +++ b/homeassistant/components/input_text/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Innsl\u00e1ttartexti" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/it.json b/homeassistant/components/input_text/translations/it.json new file mode 100644 index 00000000000..e2795fdc36f --- /dev/null +++ b/homeassistant/components/input_text/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Input di testo" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/ko.json b/homeassistant/components/input_text/translations/ko.json new file mode 100644 index 00000000000..6f8e3a04f2a --- /dev/null +++ b/homeassistant/components/input_text/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\ubb38\uc790\uc785\ub825" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/lb.json b/homeassistant/components/input_text/translations/lb.json new file mode 100644 index 00000000000..713f325e404 --- /dev/null +++ b/homeassistant/components/input_text/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Text-Agab" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/lv.json b/homeassistant/components/input_text/translations/lv.json new file mode 100644 index 00000000000..e35d6931232 --- /dev/null +++ b/homeassistant/components/input_text/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Ievades teksts" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/nb.json b/homeassistant/components/input_text/translations/nb.json new file mode 100644 index 00000000000..a643fa15fda --- /dev/null +++ b/homeassistant/components/input_text/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Angi tekst" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/nl.json b/homeassistant/components/input_text/translations/nl.json new file mode 100644 index 00000000000..13826884fa0 --- /dev/null +++ b/homeassistant/components/input_text/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Tekstinvoer" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/nn.json b/homeassistant/components/input_text/translations/nn.json new file mode 100644 index 00000000000..fec4d20c339 --- /dev/null +++ b/homeassistant/components/input_text/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Angje tekst" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/no.json b/homeassistant/components/input_text/translations/no.json new file mode 100644 index 00000000000..a643fa15fda --- /dev/null +++ b/homeassistant/components/input_text/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Angi tekst" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/pl.json b/homeassistant/components/input_text/translations/pl.json new file mode 100644 index 00000000000..5a08514f41c --- /dev/null +++ b/homeassistant/components/input_text/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Pole tekstowe" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/pt-BR.json b/homeassistant/components/input_text/translations/pt-BR.json new file mode 100644 index 00000000000..1b39d854665 --- /dev/null +++ b/homeassistant/components/input_text/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Entrada de texto" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/pt.json b/homeassistant/components/input_text/translations/pt.json new file mode 100644 index 00000000000..d4f0554e653 --- /dev/null +++ b/homeassistant/components/input_text/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Introduzir texto" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/ro.json b/homeassistant/components/input_text/translations/ro.json new file mode 100644 index 00000000000..e5fc063ceda --- /dev/null +++ b/homeassistant/components/input_text/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Introduceti un text" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/ru.json b/homeassistant/components/input_text/translations/ru.json new file mode 100644 index 00000000000..87a2a7629be --- /dev/null +++ b/homeassistant/components/input_text/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0422\u0435\u043a\u0441\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/sk.json b/homeassistant/components/input_text/translations/sk.json new file mode 100644 index 00000000000..3799a441e41 --- /dev/null +++ b/homeassistant/components/input_text/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Vstupn\u00fd text" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/sl.json b/homeassistant/components/input_text/translations/sl.json new file mode 100644 index 00000000000..c0954d42ea5 --- /dev/null +++ b/homeassistant/components/input_text/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Vnesite besedilo" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/sv.json b/homeassistant/components/input_text/translations/sv.json new file mode 100644 index 00000000000..d93e6d62627 --- /dev/null +++ b/homeassistant/components/input_text/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Mata in text" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/ta.json b/homeassistant/components/input_text/translations/ta.json new file mode 100644 index 00000000000..6a7d984a3e2 --- /dev/null +++ b/homeassistant/components/input_text/translations/ta.json @@ -0,0 +1,3 @@ +{ + "title": "\u0b89\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bc1" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/te.json b/homeassistant/components/input_text/translations/te.json new file mode 100644 index 00000000000..b2e6fe41a41 --- /dev/null +++ b/homeassistant/components/input_text/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c07\u0c28\u0c4d\u0c2a\u0c41\u0c1f\u0c4d \u0c1f\u0c46\u0c15\u0c4d\u0c38\u0c4d\u0c1f\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/th.json b/homeassistant/components/input_text/translations/th.json new file mode 100644 index 00000000000..943e1247709 --- /dev/null +++ b/homeassistant/components/input_text/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e1b\u0e49\u0e2d\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/tr.json b/homeassistant/components/input_text/translations/tr.json new file mode 100644 index 00000000000..378d9d5ad3b --- /dev/null +++ b/homeassistant/components/input_text/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Metin giriniz" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/uk.json b/homeassistant/components/input_text/translations/uk.json new file mode 100644 index 00000000000..a80f4325203 --- /dev/null +++ b/homeassistant/components/input_text/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/vi.json b/homeassistant/components/input_text/translations/vi.json new file mode 100644 index 00000000000..d23f7f1eaf9 --- /dev/null +++ b/homeassistant/components/input_text/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0110\u1ea7u v\u00e0o k\u00fd t\u1ef1" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/zh-Hans.json b/homeassistant/components/input_text/translations/zh-Hans.json new file mode 100644 index 00000000000..fb1c570b7f6 --- /dev/null +++ b/homeassistant/components/input_text/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u6587\u5b57\u8f93\u5165" +} \ No newline at end of file diff --git a/homeassistant/components/input_text/translations/zh-Hant.json b/homeassistant/components/input_text/translations/zh-Hant.json new file mode 100644 index 00000000000..2d8af029612 --- /dev/null +++ b/homeassistant/components/input_text/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u8f38\u5165\u6846" +} \ No newline at end of file diff --git a/homeassistant/components/insteon/binary_sensor.py b/homeassistant/components/insteon/binary_sensor.py index 395c0a3ac20..b96feb21831 100644 --- a/homeassistant/components/insteon/binary_sensor.py +++ b/homeassistant/components/insteon/binary_sensor.py @@ -30,7 +30,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= _LOGGER.debug( "Adding device %s entity %s to Binary Sensor platform", device.address.hex, - device.states[state_key].name, + name, ) new_entity = InsteonBinarySensor(device, state_key) diff --git a/homeassistant/components/insteon/insteon_entity.py b/homeassistant/components/insteon/insteon_entity.py index c489dd8e382..b453cad2e07 100644 --- a/homeassistant/components/insteon/insteon_entity.py +++ b/homeassistant/components/insteon/insteon_entity.py @@ -55,21 +55,18 @@ class InsteonEntity(Entity): """Return the name of the node (used for Entity_ID).""" # Set a base description description = self._insteon_device.description - if self._insteon_device.description is None: + if description is None: description = "Unknown Device" - # Get an extension label if there is one extension = self._get_label() if extension: extension = f" {extension}" - name = f"{description} {self._insteon_device.address.human}{extension}" - return name + return f"{description} {self._insteon_device.address.human}{extension}" @property def device_state_attributes(self): """Provide attributes for display on device card.""" - attributes = {"insteon_address": self.address, "insteon_group": self.group} - return attributes + return {"insteon_address": self.address, "insteon_group": self.group} @callback def async_entity_update(self, deviceid, group, val): @@ -80,7 +77,7 @@ class InsteonEntity(Entity): group, val, ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Register INSTEON update events.""" @@ -93,9 +90,13 @@ class InsteonEntity(Entity): self._insteon_device_state.register_updates(self.async_entity_update) self.hass.data[DOMAIN][INSTEON_ENTITIES].add(self.entity_id) load_signal = f"{self.entity_id}_{SIGNAL_LOAD_ALDB}" - async_dispatcher_connect(self.hass, load_signal, self._load_aldb) + self.async_on_remove( + async_dispatcher_connect(self.hass, load_signal, self._load_aldb) + ) print_signal = f"{self.entity_id}_{SIGNAL_PRINT_ALDB}" - async_dispatcher_connect(self.hass, print_signal, self._print_aldb) + self.async_on_remove( + async_dispatcher_connect(self.hass, print_signal, self._print_aldb) + ) def _load_aldb(self, reload=False): """Load the device All-Link Database.""" diff --git a/homeassistant/components/insteon/ipdb.py b/homeassistant/components/insteon/ipdb.py index 1618518a0eb..6aba40d6df9 100644 --- a/homeassistant/components/insteon/ipdb.py +++ b/homeassistant/components/insteon/ipdb.py @@ -71,8 +71,7 @@ class IPDB: def __iter__(self): """Itterate through the INSTEON state types to HA platforms.""" - for product in self.states: - yield product + yield from self.states def __getitem__(self, key): """Return a Home Assistant platform from an INSTEON state type.""" diff --git a/homeassistant/components/insteon/manifest.json b/homeassistant/components/insteon/manifest.json index 64c4b6a67be..8410c6b6ef4 100644 --- a/homeassistant/components/insteon/manifest.json +++ b/homeassistant/components/insteon/manifest.json @@ -3,6 +3,5 @@ "name": "Insteon", "documentation": "https://www.home-assistant.io/integrations/insteon", "requirements": ["insteonplm==0.16.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/insteon/schemas.py b/homeassistant/components/insteon/schemas.py index 20399195365..e3f2644ac56 100644 --- a/homeassistant/components/insteon/schemas.py +++ b/homeassistant/components/insteon/schemas.py @@ -52,10 +52,7 @@ def set_default_port(schema: Dict) -> Dict: if not ip_port: hub_version = schema.get(CONF_HUB_VERSION) # Found hub_version but not ip_port - if hub_version == 1: - schema[CONF_IP_PORT] = 9761 - else: - schema[CONF_IP_PORT] = 25105 + schema[CONF_IP_PORT] = 9761 if hub_version == 1 else 25105 return schema diff --git a/homeassistant/components/insteon/services.yaml b/homeassistant/components/insteon/services.yaml index 9c8d3237114..3d232569e9c 100644 --- a/homeassistant/components/insteon/services.yaml +++ b/homeassistant/components/insteon/services.yaml @@ -6,7 +6,7 @@ add_all_link: example: 1 mode: description: Linking mode controller - IM is controller responder - IM is responder - example: 'controller' + example: "controller" delete_all_link: description: Tells the Insteon Modem (IM) to remove an All-Link record from the All-Link Database of the IM and a device. Once the IM is set to delete the link, press the link button on the corresponding device to complete the process. fields: @@ -18,16 +18,16 @@ load_all_link_database: fields: entity_id: description: Name of the device to load. Use "all" to load the database of all devices. - example: 'light.1a2b3c' + example: "light.1a2b3c" reload: description: Reload all records. If true the current records are cleared from memory (does not effect the device) and the records are reloaded. If false the existing records are left in place and only missing records are added. Default is false. - example: 'true' + example: "true" print_all_link_database: description: Print the All-Link Database for a device. Requires that the All-Link Database is loaded into memory. fields: entity_id: description: Name of the device to print - example: 'light.1a2b3c' + example: "light.1a2b3c" print_im_all_link_database: description: Print the All-Link Database for the INSTEON Modem (IM). x10_all_units_off: @@ -59,4 +59,4 @@ scene_off: fields: group: description: INSTEON group or scene number - example: 26 \ No newline at end of file + example: 26 diff --git a/homeassistant/components/insteon/switch.py b/homeassistant/components/insteon/switch.py index eec7874c7fb..c88d31d2f91 100644 --- a/homeassistant/components/insteon/switch.py +++ b/homeassistant/components/insteon/switch.py @@ -19,9 +19,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= state_name = device.states[state_key].name _LOGGER.debug( - "Adding device %s entity %s to Switch platform", - device.address.hex, - device.states[state_key].name, + "Adding device %s entity %s to Switch platform", device.address.hex, state_name, ) new_entity = None diff --git a/homeassistant/components/insteon/utils.py b/homeassistant/components/insteon/utils.py index 339189d3564..26768936291 100644 --- a/homeassistant/components/insteon/utils.py +++ b/homeassistant/components/insteon/utils.py @@ -58,12 +58,9 @@ def register_new_device_callback(hass, config, insteon_modem): "" if state_name == BUTTON_PRESSED_STATE_NAME else state_name[-1].lower() ) schema = {CONF_ADDRESS: address.hex} - if button != "": + if button: schema[EVENT_CONF_BUTTON] = button - if val: - event = EVENT_BUTTON_ON - else: - event = EVENT_BUTTON_OFF + event = EVENT_BUTTON_ON if val else EVENT_BUTTON_OFF _LOGGER.debug( "Firing event %s with address %s and button %s", event, address.hex, button ) diff --git a/homeassistant/components/integration/manifest.json b/homeassistant/components/integration/manifest.json index d7063e12e9b..8d70a26ff7e 100644 --- a/homeassistant/components/integration/manifest.json +++ b/homeassistant/components/integration/manifest.json @@ -2,8 +2,6 @@ "domain": "integration", "name": "Integration - Riemann sum integral", "documentation": "https://www.home-assistant.io/integrations/integration", - "requirements": [], - "dependencies": [], "codeowners": ["@dgomes"], "quality_scale": "internal" } diff --git a/homeassistant/components/integration/sensor.py b/homeassistant/components/integration/sensor.py index 6201348f21c..3365e5b10c8 100644 --- a/homeassistant/components/integration/sensor.py +++ b/homeassistant/components/integration/sensor.py @@ -172,7 +172,7 @@ class IntegrationSensor(RestoreEntity): _LOGGER.error("Could not calculate integral: %s", err) else: self._state += integral - self.async_schedule_update_ha_state() + self.async_write_ha_state() async_track_state_change(self.hass, self._sensor_source_id, calc_integration) diff --git a/homeassistant/components/intent/manifest.json b/homeassistant/components/intent/manifest.json index 005abde47d6..a0d5d0fca23 100644 --- a/homeassistant/components/intent/manifest.json +++ b/homeassistant/components/intent/manifest.json @@ -3,9 +3,6 @@ "name": "Intent", "config_flow": false, "documentation": "https://www.home-assistant.io/integrations/intent", - "requirements": [], - "ssdp": [], - "homekit": {}, "dependencies": ["http"], "codeowners": ["@home-assistant/core"] } diff --git a/homeassistant/components/intent_script/manifest.json b/homeassistant/components/intent_script/manifest.json index 6b204d0e83c..af64fda5677 100644 --- a/homeassistant/components/intent_script/manifest.json +++ b/homeassistant/components/intent_script/manifest.json @@ -2,8 +2,6 @@ "domain": "intent_script", "name": "Intent Script", "documentation": "https://www.home-assistant.io/integrations/intent_script", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/intesishome/manifest.json b/homeassistant/components/intesishome/manifest.json index e38e1a7dd3b..b6170225320 100644 --- a/homeassistant/components/intesishome/manifest.json +++ b/homeassistant/components/intesishome/manifest.json @@ -2,7 +2,6 @@ "domain": "intesishome", "name": "IntesisHome", "documentation": "https://www.home-assistant.io/integrations/intesishome", - "dependencies": [], "codeowners": ["@jnimmo"], - "requirements": ["pyintesishome==1.7.3"] + "requirements": ["pyintesishome==1.7.4"] } diff --git a/homeassistant/components/ios/.translations/bg.json b/homeassistant/components/ios/.translations/bg.json deleted file mode 100644 index 58028d1caae..00000000000 --- a/homeassistant/components/ios/.translations/bg.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Home Assistant iOS \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/ca.json b/homeassistant/components/ios/.translations/ca.json deleted file mode 100644 index dcbffdcebd0..00000000000 --- a/homeassistant/components/ios/.translations/ca.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "Vols configurar el component Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/cs.json b/homeassistant/components/ios/.translations/cs.json deleted file mode 100644 index 3f6c634f38f..00000000000 --- a/homeassistant/components/ios/.translations/cs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Povolena je pouze jedna instance Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "Chcete nastavit komponenty Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/da.json b/homeassistant/components/ios/.translations/da.json deleted file mode 100644 index 4a900097b14..00000000000 --- a/homeassistant/components/ios/.translations/da.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Home Assistant iOS" - }, - "step": { - "confirm": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/de.json b/homeassistant/components/ios/.translations/de.json deleted file mode 100644 index 18ffda135ee..00000000000 --- a/homeassistant/components/ios/.translations/de.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Es wird nur eine Konfiguration von Home Assistant iOS ben\u00f6tigt" - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du die Home Assistant iOS-Komponente einrichten?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/en.json b/homeassistant/components/ios/.translations/en.json deleted file mode 100644 index ae2e4e03f74..00000000000 --- a/homeassistant/components/ios/.translations/en.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Only a single configuration of Home Assistant iOS is necessary." - }, - "step": { - "confirm": { - "description": "Do you want to set up the Home Assistant iOS component?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/es-419.json b/homeassistant/components/ios/.translations/es-419.json deleted file mode 100644 index 38a12e7411a..00000000000 --- a/homeassistant/components/ios/.translations/es-419.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "S\u00f3lo es necesaria una \u00fanica configuraci\u00f3n de Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar el componente iOS de Home Assistant?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/es.json b/homeassistant/components/ios/.translations/es.json deleted file mode 100644 index afd4fedc97e..00000000000 --- a/homeassistant/components/ios/.translations/es.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Solo se necesita una \u00fanica configuraci\u00f3n de Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar el componente iOS de Home Assistant?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/et.json b/homeassistant/components/ios/.translations/et.json deleted file mode 100644 index 987c54955f2..00000000000 --- a/homeassistant/components/ios/.translations/et.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/fr.json b/homeassistant/components/ios/.translations/fr.json deleted file mode 100644 index 934849549e7..00000000000 --- a/homeassistant/components/ios/.translations/fr.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Seule une configuration de Home Assistant iOS est n\u00e9cessaire." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer le composant Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/he.json b/homeassistant/components/ios/.translations/he.json deleted file mode 100644 index e786e5ae843..00000000000 --- a/homeassistant/components/ios/.translations/he.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Home Assistant iOS \u05e0\u05d7\u05d5\u05e6\u05d4." - }, - "step": { - "confirm": { - "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/hu.json b/homeassistant/components/ios/.translations/hu.json deleted file mode 100644 index 5ee001db3c5..00000000000 --- a/homeassistant/components/ios/.translations/hu.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Csak egyetlen Home Assistant iOS konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "confirm": { - "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a Home Assistant iOS komponenst?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/id.json b/homeassistant/components/ios/.translations/id.json deleted file mode 100644 index 5813d9488f0..00000000000 --- a/homeassistant/components/ios/.translations/id.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Hanya satu konfigurasi Home Assistant iOS yang diperlukan." - }, - "step": { - "confirm": { - "description": "Apakah Anda ingin mengatur komponen iOS Home Assistant?", - "title": "Home Asisten iOS" - } - }, - "title": "Home Asisten iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/it.json b/homeassistant/components/ios/.translations/it.json deleted file mode 100644 index c2c5042e295..00000000000 --- a/homeassistant/components/ios/.translations/it.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u00c8 necessaria una sola configurazione di Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "Vuoi configurare il componente Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant per iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/ko.json b/homeassistant/components/ios/.translations/ko.json deleted file mode 100644 index 283594a45b5..00000000000 --- a/homeassistant/components/ios/.translations/ko.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\ud558\ub098\uc758 Home Assistant iOS \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." - }, - "step": { - "confirm": { - "description": "Home Assistant iOS \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/lb.json b/homeassistant/components/ios/.translations/lb.json deleted file mode 100644 index 731371cada9..00000000000 --- a/homeassistant/components/ios/.translations/lb.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Home Assistant iOS ass n\u00e9ideg." - }, - "step": { - "confirm": { - "description": "W\u00ebllt dir d'Home Assistant iOS Komponent ariichten?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/nl.json b/homeassistant/components/ios/.translations/nl.json deleted file mode 100644 index 8e5c46692a0..00000000000 --- a/homeassistant/components/ios/.translations/nl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van Home Assistant iOS nodig." - }, - "step": { - "confirm": { - "description": "Wilt u het Home Assistant iOS component instellen?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/nn.json b/homeassistant/components/ios/.translations/nn.json deleted file mode 100644 index 9d2cf692006..00000000000 --- a/homeassistant/components/ios/.translations/nn.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Du treng berre \u00e9in Home Assistant iOS-konfigurasjon." - }, - "step": { - "confirm": { - "description": "Vil du sette opp Home Assistant iOS-komponenten?", - "title": "Home Assistant Ios" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/no.json b/homeassistant/components/ios/.translations/no.json deleted file mode 100644 index 798ae93d33b..00000000000 --- a/homeassistant/components/ios/.translations/no.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Kun en konfigurasjon av Home Assistant iOS er n\u00f8dvendig." - }, - "step": { - "confirm": { - "description": "\u00d8nsker du \u00e5 konfigurere Home Assistant iOS-komponenten?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/pl.json b/homeassistant/components/ios/.translations/pl.json deleted file mode 100644 index 6240f074cfc..00000000000 --- a/homeassistant/components/ios/.translations/pl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/pt-BR.json b/homeassistant/components/ios/.translations/pt-BR.json deleted file mode 100644 index 77efc04b817..00000000000 --- a/homeassistant/components/ios/.translations/pt-BR.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do Home Assistant iOS \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar o componente iOS do Home Assistant?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/pt.json b/homeassistant/components/ios/.translations/pt.json deleted file mode 100644 index d38b9abb70b..00000000000 --- a/homeassistant/components/ios/.translations/pt.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do componente iOS do Home Assistante \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar o componente iOS do Home Assistant?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/ro.json b/homeassistant/components/ios/.translations/ro.json deleted file mode 100644 index 5a83b5cd732..00000000000 --- a/homeassistant/components/ios/.translations/ro.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Este necesar\u0103 numai o singur\u0103 configurare a aplica\u021biei Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "Dori\u021bi s\u0103 configura\u021bi componenta Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/ru.json b/homeassistant/components/ios/.translations/ru.json deleted file mode 100644 index 282715ebb3b..00000000000 --- a/homeassistant/components/ios/.translations/ru.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/sl.json b/homeassistant/components/ios/.translations/sl.json deleted file mode 100644 index 28e9102aafd..00000000000 --- a/homeassistant/components/ios/.translations/sl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Potrebna je samo ena konfiguracija Home Assistant iOS." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti komponento za Home Assistant iOS?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/sv.json b/homeassistant/components/ios/.translations/sv.json deleted file mode 100644 index 5a605ed8987..00000000000 --- a/homeassistant/components/ios/.translations/sv.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Endast en enda konfiguration av Home Assistant iOS \u00e4r n\u00f6dv\u00e4ndig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera Home Assistants iOS komponent?", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/zh-Hans.json b/homeassistant/components/ios/.translations/zh-Hans.json deleted file mode 100644 index 0de30f0f3da..00000000000 --- a/homeassistant/components/ios/.translations/zh-Hans.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Home Assistant iOS \u53ea\u9700\u8981\u914d\u7f6e\u4e00\u6b21\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8bbe\u7f6e Home Assistant iOS \u7ec4\u4ef6\uff1f", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/zh-Hant.json b/homeassistant/components/ios/.translations/zh-Hant.json deleted file mode 100644 index 8cfedf31673..00000000000 --- a/homeassistant/components/ios/.translations/zh-Hant.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 Home Assistant iOS \u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant iOS \u5143\u4ef6\uff1f", - "title": "Home Assistant iOS" - } - }, - "title": "Home Assistant iOS" - } -} \ No newline at end of file diff --git a/homeassistant/components/ios/__init__.py b/homeassistant/components/ios/__init__.py index 3f193993c2b..9eec508bbd5 100644 --- a/homeassistant/components/ios/__init__.py +++ b/homeassistant/components/ios/__init__.py @@ -195,7 +195,7 @@ def devices_with_push(hass): def enabled_push_ids(hass): """Return a list of push enabled target push IDs.""" - push_ids = list() + push_ids = [] for device in hass.data[DOMAIN][ATTR_DEVICES].values(): if device.get(ATTR_PUSH_ID) is not None: push_ids.append(device.get(ATTR_PUSH_ID)) diff --git a/homeassistant/components/ios/manifest.json b/homeassistant/components/ios/manifest.json index d55b1ef5c74..3ab8573edc8 100644 --- a/homeassistant/components/ios/manifest.json +++ b/homeassistant/components/ios/manifest.json @@ -1,9 +1,8 @@ { "domain": "ios", - "name": "Apple iOS", + "name": "Home Assistant iOS", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/ios", - "requirements": [], "dependencies": ["device_tracker", "http", "zeroconf"], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/ios/sensor.py b/homeassistant/components/ios/sensor.py index e12ab9b4a40..1a655e242f9 100644 --- a/homeassistant/components/ios/sensor.py +++ b/homeassistant/components/ios/sensor.py @@ -20,7 +20,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): async def async_setup_entry(hass, config_entry, async_add_entities): """Set up iOS from a config entry.""" - dev = list() + dev = [] for device_name, device in ios.devices(hass).items(): for sensor_type in ("level", "state"): dev.append(IOSSensor(sensor_type, device_name, device)) diff --git a/homeassistant/components/ios/strings.json b/homeassistant/components/ios/strings.json index cbb63cf8229..b09bd4a777f 100644 --- a/homeassistant/components/ios/strings.json +++ b/homeassistant/components/ios/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "Home Assistant iOS", "step": { "confirm": { - "title": "Home Assistant iOS", "description": "Do you want to set up the Home Assistant iOS component?" } }, diff --git a/homeassistant/components/ios/translations/bg.json b/homeassistant/components/ios/translations/bg.json new file mode 100644 index 00000000000..69e1523ac1f --- /dev/null +++ b/homeassistant/components/ios/translations/bg.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Home Assistant iOS \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/ca.json b/homeassistant/components/ios/translations/ca.json new file mode 100644 index 00000000000..3f16dbc2204 --- /dev/null +++ b/homeassistant/components/ios/translations/ca.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Vols configurar el component Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/cs.json b/homeassistant/components/ios/translations/cs.json new file mode 100644 index 00000000000..afb0307492d --- /dev/null +++ b/homeassistant/components/ios/translations/cs.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Povolena je pouze jedna instance Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Chcete nastavit komponenty Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/da.json b/homeassistant/components/ios/translations/da.json new file mode 100644 index 00000000000..37db62d1205 --- /dev/null +++ b/homeassistant/components/ios/translations/da.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Home Assistant iOS" + }, + "step": { + "confirm": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/de.json b/homeassistant/components/ios/translations/de.json new file mode 100644 index 00000000000..337ed3ad7c0 --- /dev/null +++ b/homeassistant/components/ios/translations/de.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Es wird nur eine Konfiguration von Home Assistant iOS ben\u00f6tigt" + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du die Home Assistant iOS-Komponente einrichten?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/en.json b/homeassistant/components/ios/translations/en.json new file mode 100644 index 00000000000..6352142e717 --- /dev/null +++ b/homeassistant/components/ios/translations/en.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Only a single configuration of Home Assistant iOS is necessary." + }, + "step": { + "confirm": { + "description": "Do you want to set up the Home Assistant iOS component?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/es-419.json b/homeassistant/components/ios/translations/es-419.json new file mode 100644 index 00000000000..5938e27930e --- /dev/null +++ b/homeassistant/components/ios/translations/es-419.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "S\u00f3lo es necesaria una \u00fanica configuraci\u00f3n de Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar el componente iOS de Home Assistant?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/es.json b/homeassistant/components/ios/translations/es.json new file mode 100644 index 00000000000..9e94d536718 --- /dev/null +++ b/homeassistant/components/ios/translations/es.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Solo se necesita una \u00fanica configuraci\u00f3n de Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar el componente iOS de Home Assistant?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/et.json b/homeassistant/components/ios/translations/et.json new file mode 100644 index 00000000000..0e652624ef6 --- /dev/null +++ b/homeassistant/components/ios/translations/et.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/fr.json b/homeassistant/components/ios/translations/fr.json new file mode 100644 index 00000000000..02fb127e363 --- /dev/null +++ b/homeassistant/components/ios/translations/fr.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Seule une configuration de Home Assistant iOS est n\u00e9cessaire." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer le composant Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/he.json b/homeassistant/components/ios/translations/he.json new file mode 100644 index 00000000000..fd0c5c7c470 --- /dev/null +++ b/homeassistant/components/ios/translations/he.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Home Assistant iOS \u05e0\u05d7\u05d5\u05e6\u05d4." + }, + "step": { + "confirm": { + "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/hu.json b/homeassistant/components/ios/translations/hu.json new file mode 100644 index 00000000000..77bbc56e392 --- /dev/null +++ b/homeassistant/components/ios/translations/hu.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Csak egyetlen Home Assistant iOS konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "confirm": { + "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a Home Assistant iOS komponenst?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/id.json b/homeassistant/components/ios/translations/id.json new file mode 100644 index 00000000000..1c69ea0a48a --- /dev/null +++ b/homeassistant/components/ios/translations/id.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Hanya satu konfigurasi Home Assistant iOS yang diperlukan." + }, + "step": { + "confirm": { + "description": "Apakah Anda ingin mengatur komponen iOS Home Assistant?", + "title": "Home Asisten iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/it.json b/homeassistant/components/ios/translations/it.json new file mode 100644 index 00000000000..e41382ea62e --- /dev/null +++ b/homeassistant/components/ios/translations/it.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u00c8 necessaria una sola configurazione di Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Vuoi configurare il componente Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/ko.json b/homeassistant/components/ios/translations/ko.json new file mode 100644 index 00000000000..fdd036f26a8 --- /dev/null +++ b/homeassistant/components/ios/translations/ko.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\ud558\ub098\uc758 Home Assistant iOS \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + }, + "step": { + "confirm": { + "description": "Home Assistant iOS \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/lb.json b/homeassistant/components/ios/translations/lb.json new file mode 100644 index 00000000000..bb6ec7b9f8a --- /dev/null +++ b/homeassistant/components/ios/translations/lb.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Home Assistant iOS ass n\u00e9ideg." + }, + "step": { + "confirm": { + "description": "W\u00ebllt dir d'Home Assistant iOS Komponent ariichten?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/nl.json b/homeassistant/components/ios/translations/nl.json new file mode 100644 index 00000000000..34050865768 --- /dev/null +++ b/homeassistant/components/ios/translations/nl.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van Home Assistant iOS nodig." + }, + "step": { + "confirm": { + "description": "Wilt u het Home Assistant iOS component instellen?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/nn.json b/homeassistant/components/ios/translations/nn.json new file mode 100644 index 00000000000..2fc5a3f1c52 --- /dev/null +++ b/homeassistant/components/ios/translations/nn.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Du treng berre \u00e9in Home Assistant iOS-konfigurasjon." + }, + "step": { + "confirm": { + "description": "Vil du sette opp Home Assistant iOS-komponenten?", + "title": "Home Assistant Ios" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/no.json b/homeassistant/components/ios/translations/no.json new file mode 100644 index 00000000000..5645bd91e2a --- /dev/null +++ b/homeassistant/components/ios/translations/no.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Kun en konfigurasjon av Home Assistant iOS er n\u00f8dvendig." + }, + "step": { + "confirm": { + "description": "\u00d8nsker du \u00e5 konfigurere Home Assistant iOS-komponenten?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/pl.json b/homeassistant/components/ios/translations/pl.json new file mode 100644 index 00000000000..58b02fe8cad --- /dev/null +++ b/homeassistant/components/ios/translations/pl.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/pt-BR.json b/homeassistant/components/ios/translations/pt-BR.json new file mode 100644 index 00000000000..8eee79de746 --- /dev/null +++ b/homeassistant/components/ios/translations/pt-BR.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do Home Assistant iOS \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar o componente iOS do Home Assistant?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/pt.json b/homeassistant/components/ios/translations/pt.json new file mode 100644 index 00000000000..52a1a66ba32 --- /dev/null +++ b/homeassistant/components/ios/translations/pt.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do componente iOS do Home Assistante \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar o componente iOS do Home Assistant?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/ro.json b/homeassistant/components/ios/translations/ro.json new file mode 100644 index 00000000000..b4b13d3955a --- /dev/null +++ b/homeassistant/components/ios/translations/ro.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Este necesar\u0103 numai o singur\u0103 configurare a aplica\u021biei Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Dori\u021bi s\u0103 configura\u021bi componenta Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/ru.json b/homeassistant/components/ios/translations/ru.json new file mode 100644 index 00000000000..d19343acc89 --- /dev/null +++ b/homeassistant/components/ios/translations/ru.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/sl.json b/homeassistant/components/ios/translations/sl.json new file mode 100644 index 00000000000..e0958432a6e --- /dev/null +++ b/homeassistant/components/ios/translations/sl.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Potrebna je samo ena konfiguracija Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti komponento za Home Assistant iOS?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/sv.json b/homeassistant/components/ios/translations/sv.json new file mode 100644 index 00000000000..03d91e02193 --- /dev/null +++ b/homeassistant/components/ios/translations/sv.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Endast en enda konfiguration av Home Assistant iOS \u00e4r n\u00f6dv\u00e4ndig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera Home Assistants iOS komponent?", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/zh-Hans.json b/homeassistant/components/ios/translations/zh-Hans.json new file mode 100644 index 00000000000..8e659dbadc1 --- /dev/null +++ b/homeassistant/components/ios/translations/zh-Hans.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Home Assistant iOS \u53ea\u9700\u8981\u914d\u7f6e\u4e00\u6b21\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8bbe\u7f6e Home Assistant iOS \u7ec4\u4ef6\uff1f", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/translations/zh-Hant.json b/homeassistant/components/ios/translations/zh-Hant.json new file mode 100644 index 00000000000..ba85332cb7f --- /dev/null +++ b/homeassistant/components/ios/translations/zh-Hant.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 Home Assistant iOS \u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant iOS \u5143\u4ef6\uff1f", + "title": "Home Assistant iOS" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iota/manifest.json b/homeassistant/components/iota/manifest.json index b49553dabd9..456f77a3690 100644 --- a/homeassistant/components/iota/manifest.json +++ b/homeassistant/components/iota/manifest.json @@ -3,6 +3,5 @@ "name": "IOTA", "documentation": "https://www.home-assistant.io/integrations/iota", "requirements": ["pyota==2.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/iperf3/manifest.json b/homeassistant/components/iperf3/manifest.json index d98472f8236..6820953dc5d 100644 --- a/homeassistant/components/iperf3/manifest.json +++ b/homeassistant/components/iperf3/manifest.json @@ -3,6 +3,5 @@ "name": "Iperf3", "documentation": "https://www.home-assistant.io/integrations/iperf3", "requirements": ["iperf3==0.1.11"], - "dependencies": [], "codeowners": ["@rohankapoorcom"] } diff --git a/homeassistant/components/iperf3/sensor.py b/homeassistant/components/iperf3/sensor.py index 70a15a0dac5..749a3e83217 100644 --- a/homeassistant/components/iperf3/sensor.py +++ b/homeassistant/components/iperf3/sensor.py @@ -73,15 +73,18 @@ class Iperf3Sensor(RestoreEntity): async def async_added_to_hass(self): """Handle entity which will be added.""" await super().async_added_to_hass() + + self.async_on_remove( + async_dispatcher_connect( + self.hass, DATA_UPDATED, self._schedule_immediate_update + ) + ) + state = await self.async_get_last_state() if not state: return self._state = state.state - async_dispatcher_connect( - self.hass, DATA_UPDATED, self._schedule_immediate_update - ) - def update(self): """Get the latest data and update the states.""" data = self._iperf3_data.data.get(self._sensor_type) diff --git a/homeassistant/components/iperf3/services.yaml b/homeassistant/components/iperf3/services.yaml index c333d7c74c8..a3f645f5085 100644 --- a/homeassistant/components/iperf3/services.yaml +++ b/homeassistant/components/iperf3/services.yaml @@ -3,4 +3,4 @@ speedtest: fields: host: description: The host name of the iperf3 server (already configured) to run a test with. - example: 'iperf.he.net' \ No newline at end of file + example: "iperf.he.net" diff --git a/homeassistant/components/ipma/.translations/bg.json b/homeassistant/components/ipma/.translations/bg.json deleted file mode 100644 index 70d2c6ef6bc..00000000000 --- a/homeassistant/components/ipma/.translations/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430" - }, - "step": { - "user": { - "data": { - "latitude": "\u0428\u0438\u0440\u0438\u043d\u0430", - "longitude": "\u0414\u044a\u043b\u0436\u0438\u043d\u0430", - "name": "\u0418\u043c\u0435" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0441\u043a\u0430 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u0441\u043b\u0443\u0436\u0431\u0430 (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/ca.json b/homeassistant/components/ipma/.translations/ca.json deleted file mode 100644 index ad2d37524c5..00000000000 --- a/homeassistant/components/ipma/.translations/ca.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nom ja existeix" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "mode": "Mode", - "name": "Nom" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Ubicaci\u00f3" - } - }, - "title": "Servei meteorol\u00f2gic portugu\u00e8s (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/da.json b/homeassistant/components/ipma/.translations/da.json deleted file mode 100644 index e2f72db7c4d..00000000000 --- a/homeassistant/components/ipma/.translations/da.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Navnet findes allerede" - }, - "step": { - "user": { - "data": { - "latitude": "Breddegrad", - "longitude": "L\u00e6ngdegrad", - "mode": "Tilstand", - "name": "Navn" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Lokalitet" - } - }, - "title": "Portugisisk vejrservice (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/de.json b/homeassistant/components/ipma/.translations/de.json deleted file mode 100644 index 977b69576de..00000000000 --- a/homeassistant/components/ipma/.translations/de.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Name existiert bereits" - }, - "step": { - "user": { - "data": { - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad", - "mode": "Modus", - "name": "Name" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Standort" - } - }, - "title": "Portugiesischer Wetterdienst (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/en.json b/homeassistant/components/ipma/.translations/en.json deleted file mode 100644 index d47f0dfb501..00000000000 --- a/homeassistant/components/ipma/.translations/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Name already exists" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "mode": "Mode", - "name": "Name" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Location" - } - }, - "title": "Portuguese weather service (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/es-419.json b/homeassistant/components/ipma/.translations/es-419.json deleted file mode 100644 index acb8b51a44c..00000000000 --- a/homeassistant/components/ipma/.translations/es-419.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nombre ya existe" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Ubicaci\u00f3n" - } - }, - "title": "Servicio meteorol\u00f3gico portugu\u00e9s (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/es.json b/homeassistant/components/ipma/.translations/es.json deleted file mode 100644 index d6a43fc790b..00000000000 --- a/homeassistant/components/ipma/.translations/es.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nombre ya existe" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "mode": "Modo", - "name": "Nombre" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Ubicaci\u00f3n" - } - }, - "title": "Servicio meteorol\u00f3gico portugu\u00e9s (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/fr.json b/homeassistant/components/ipma/.translations/fr.json deleted file mode 100644 index 46b99e6651a..00000000000 --- a/homeassistant/components/ipma/.translations/fr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "mode": "Mode", - "name": "Nom" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Emplacement" - } - }, - "title": "Service m\u00e9t\u00e9orologique portugais (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/he.json b/homeassistant/components/ipma/.translations/he.json deleted file mode 100644 index 4931fcaf94c..00000000000 --- a/homeassistant/components/ipma/.translations/he.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u05d4\u05e9\u05dd \u05db\u05d1\u05e8 \u05e7\u05d9\u05d9\u05dd" - }, - "step": { - "user": { - "data": { - "latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1", - "longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da", - "name": "\u05e9\u05dd" - }, - "title": "\u05de\u05d9\u05e7\u05d5\u05dd" - } - }, - "title": "\u05e9\u05d9\u05e8\u05d5\u05ea \u05de\u05d6\u05d2 \u05d0\u05d5\u05d5\u05d9\u05e8 \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d6\u05d9\u05ea (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/hu.json b/homeassistant/components/ipma/.translations/hu.json deleted file mode 100644 index 5165fec9d90..00000000000 --- a/homeassistant/components/ipma/.translations/hu.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik" - }, - "step": { - "user": { - "data": { - "latitude": "Sz\u00e9less\u00e9g", - "longitude": "Hossz\u00fas\u00e1g", - "mode": "M\u00f3d", - "name": "N\u00e9v" - }, - "description": "Portug\u00e1l Atmoszf\u00e9ra Int\u00e9zet", - "title": "Hely" - } - }, - "title": "Portug\u00e1l Meteorol\u00f3giai Szolg\u00e1lat (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/it.json b/homeassistant/components/ipma/.translations/it.json deleted file mode 100644 index 6e89d425934..00000000000 --- a/homeassistant/components/ipma/.translations/it.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Il nome \u00e8 gi\u00e0 esistente" - }, - "step": { - "user": { - "data": { - "latitude": "Latitudine", - "longitude": "Longitudine", - "mode": "Modalit\u00e0", - "name": "Nome" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Localit\u00e0" - } - }, - "title": "Servizio meteo portoghese (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/ko.json b/homeassistant/components/ipma/.translations/ko.json deleted file mode 100644 index c5614e17034..00000000000 --- a/homeassistant/components/ipma/.translations/ko.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4", - "mode": "\ubaa8\ub4dc", - "name": "\uc774\ub984" - }, - "description": "\ud3ec\ub974\ud22c\uac08 \ud574\uc591 \ubc0f \ub300\uae30 \uc5f0\uad6c\uc18c (Instituto Portugu\u00eas do Mar e Atmosfera)", - "title": "\uc704\uce58" - } - }, - "title": "\ud3ec\ub974\ud22c\uac08 \uae30\uc0c1 \uc11c\ube44\uc2a4 (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/lb.json b/homeassistant/components/ipma/.translations/lb.json deleted file mode 100644 index 7d8280998fe..00000000000 --- a/homeassistant/components/ipma/.translations/lb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Numm g\u00ebtt et schonn" - }, - "step": { - "user": { - "data": { - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad", - "mode": "Modus", - "name": "Numm" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Uertschaft" - } - }, - "title": "Portugisesche Wieder D\u00e9ngscht (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/nl.json b/homeassistant/components/ipma/.translations/nl.json deleted file mode 100644 index 00b9881fd97..00000000000 --- a/homeassistant/components/ipma/.translations/nl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Naam bestaat al" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "mode": "Mode", - "name": "Naam" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Locatie" - } - }, - "title": "Portugese weerservice (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/no.json b/homeassistant/components/ipma/.translations/no.json deleted file mode 100644 index d7261732431..00000000000 --- a/homeassistant/components/ipma/.translations/no.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Navnet eksisterer allerede" - }, - "step": { - "user": { - "data": { - "latitude": "Breddegrad", - "longitude": "Lengdegrad", - "mode": "Modus", - "name": "Navn" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Plassering" - } - }, - "title": "Portugisisk v\u00e6rtjeneste (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/pl.json b/homeassistant/components/ipma/.translations/pl.json deleted file mode 100644 index 267b4e79137..00000000000 --- a/homeassistant/components/ipma/.translations/pl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Nazwa ju\u017c istnieje." - }, - "step": { - "user": { - "data": { - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna", - "mode": "Tryb", - "name": "Nazwa" - }, - "description": "Portugalski Instytut Morza i Atmosfery", - "title": "Lokalizacja" - } - }, - "title": "Portugalski serwis pogodowy (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/pt-BR.json b/homeassistant/components/ipma/.translations/pt-BR.json deleted file mode 100644 index 1f9aa1a324e..00000000000 --- a/homeassistant/components/ipma/.translations/pt-BR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "O nome j\u00e1 existe" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nome" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Localiza\u00e7\u00e3o" - } - }, - "title": "Servi\u00e7o Meteorol\u00f3gico Portugu\u00eas (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/pt.json b/homeassistant/components/ipma/.translations/pt.json deleted file mode 100644 index 2ddeb9a4b33..00000000000 --- a/homeassistant/components/ipma/.translations/pt.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Nome j\u00e1 existente" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nome" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Localiza\u00e7\u00e3o" - } - }, - "title": "Servi\u00e7o Meteorol\u00f3gico Portugu\u00eas (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/ru.json b/homeassistant/components/ipma/.translations/ru.json deleted file mode 100644 index 96d4ee90407..00000000000 --- a/homeassistant/components/ipma/.translations/ru.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." - }, - "step": { - "user": { - "data": { - "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", - "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", - "mode": "\u0420\u0435\u0436\u0438\u043c", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "description": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u043c\u043e\u0440\u044f \u0438 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u044b.", - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u041c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430 \u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u0438 (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/sl.json b/homeassistant/components/ipma/.translations/sl.json deleted file mode 100644 index 2dcfcde7404..00000000000 --- a/homeassistant/components/ipma/.translations/sl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Ime \u017ee obstaja" - }, - "step": { - "user": { - "data": { - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina", - "mode": "Na\u010din", - "name": "Ime" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "Lokacija" - } - }, - "title": "Portugalska vremenska storitev (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/sv.json b/homeassistant/components/ipma/.translations/sv.json deleted file mode 100644 index e8cba56a0a0..00000000000 --- a/homeassistant/components/ipma/.translations/sv.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Namnet finns redan" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "mode": "L\u00e4ge", - "name": "Namn" - }, - "description": "Portugisiska institutet f\u00f6r hav och atmosf\u00e4ren", - "title": "Location" - } - }, - "title": "Portugisiska weather service (IPMA)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/zh-Hans.json b/homeassistant/components/ipma/.translations/zh-Hans.json deleted file mode 100644 index 10d51832964..00000000000 --- a/homeassistant/components/ipma/.translations/zh-Hans.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u540d\u79f0\u5df2\u5b58\u5728" - }, - "step": { - "user": { - "data": { - "latitude": "\u7eac\u5ea6", - "longitude": "\u7ecf\u5ea6", - "mode": "\u6a21\u5f0f", - "name": "\u540d\u79f0" - }, - "description": "\u8461\u8404\u7259\u56fd\u5bb6\u5927\u6c14\u7814\u7a76\u6240", - "title": "\u4f4d\u7f6e" - } - }, - "title": "\u8461\u8404\u7259\u6c14\u8c61\u670d\u52a1\uff08IPMA\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/zh-Hant.json b/homeassistant/components/ipma/.translations/zh-Hant.json deleted file mode 100644 index de36336f2c4..00000000000 --- a/homeassistant/components/ipma/.translations/zh-Hant.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728" - }, - "step": { - "user": { - "data": { - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6", - "mode": "\u6a21\u5f0f", - "name": "\u540d\u7a31" - }, - "description": "Instituto Portugu\u00eas do Mar e Atmosfera", - "title": "\u5ea7\u6a19" - } - }, - "title": "\u8461\u8404\u7259\u6c23\u8c61\u670d\u52d9\uff08IPMA\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipma/manifest.json b/homeassistant/components/ipma/manifest.json index 63c041f28c3..3358bbe45e9 100644 --- a/homeassistant/components/ipma/manifest.json +++ b/homeassistant/components/ipma/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/ipma", "requirements": ["pyipma==2.0.5"], - "dependencies": [], "codeowners": ["@dgomes", "@abmantis"] } diff --git a/homeassistant/components/ipma/strings.json b/homeassistant/components/ipma/strings.json index ea8b9edcc86..5b325938411 100644 --- a/homeassistant/components/ipma/strings.json +++ b/homeassistant/components/ipma/strings.json @@ -1,20 +1,17 @@ { - "config": { - "title": "Portuguese weather service (IPMA)", - "step": { - "user": { - "title": "Location", - "description": "Instituto Português do Mar e Atmosfera", - "data": { - "name": "Name", - "latitude": "Latitude", - "longitude": "Longitude", - "mode": "Mode" - } - } - }, - "error": { - "name_exists": "Name already exists" + "config": { + "step": { + "user": { + "title": "Location", + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "data": { + "name": "Name", + "latitude": "Latitude", + "longitude": "Longitude", + "mode": "Mode" } - } + } + }, + "error": { "name_exists": "Name already exists" } + } } diff --git a/homeassistant/components/ipma/translations/bg.json b/homeassistant/components/ipma/translations/bg.json new file mode 100644 index 00000000000..fcabe7be75c --- /dev/null +++ b/homeassistant/components/ipma/translations/bg.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430" + }, + "step": { + "user": { + "data": { + "latitude": "\u0428\u0438\u0440\u0438\u043d\u0430", + "longitude": "\u0414\u044a\u043b\u0436\u0438\u043d\u0430", + "name": "\u0418\u043c\u0435" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/ca.json b/homeassistant/components/ipma/translations/ca.json new file mode 100644 index 00000000000..2318a5eba05 --- /dev/null +++ b/homeassistant/components/ipma/translations/ca.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "El nom ja existeix" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "mode": "Mode", + "name": "Nom" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Ubicaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/da.json b/homeassistant/components/ipma/translations/da.json new file mode 100644 index 00000000000..dca37f61782 --- /dev/null +++ b/homeassistant/components/ipma/translations/da.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Navnet findes allerede" + }, + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "L\u00e6ngdegrad", + "mode": "Tilstand", + "name": "Navn" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Lokalitet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/de.json b/homeassistant/components/ipma/translations/de.json new file mode 100644 index 00000000000..62e2e1e59c5 --- /dev/null +++ b/homeassistant/components/ipma/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Name existiert bereits" + }, + "step": { + "user": { + "data": { + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "mode": "Modus", + "name": "Name" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Standort" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/en.json b/homeassistant/components/ipma/translations/en.json new file mode 100644 index 00000000000..823bf9ab93b --- /dev/null +++ b/homeassistant/components/ipma/translations/en.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Name already exists" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "mode": "Mode", + "name": "Name" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Location" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/es-419.json b/homeassistant/components/ipma/translations/es-419.json new file mode 100644 index 00000000000..7b319c66a49 --- /dev/null +++ b/homeassistant/components/ipma/translations/es-419.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "El nombre ya existe" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Ubicaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/es.json b/homeassistant/components/ipma/translations/es.json new file mode 100644 index 00000000000..a3f83c150e7 --- /dev/null +++ b/homeassistant/components/ipma/translations/es.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "El nombre ya existe" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "mode": "Modo", + "name": "Nombre" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Ubicaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/fr.json b/homeassistant/components/ipma/translations/fr.json new file mode 100644 index 00000000000..9a3a11a7a73 --- /dev/null +++ b/homeassistant/components/ipma/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "mode": "Mode", + "name": "Nom" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Emplacement" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/he.json b/homeassistant/components/ipma/translations/he.json new file mode 100644 index 00000000000..c4818393edd --- /dev/null +++ b/homeassistant/components/ipma/translations/he.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "name_exists": "\u05d4\u05e9\u05dd \u05db\u05d1\u05e8 \u05e7\u05d9\u05d9\u05dd" + }, + "step": { + "user": { + "data": { + "latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1", + "longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da", + "name": "\u05e9\u05dd" + }, + "title": "\u05de\u05d9\u05e7\u05d5\u05dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/hu.json b/homeassistant/components/ipma/translations/hu.json new file mode 100644 index 00000000000..0aeb36b0442 --- /dev/null +++ b/homeassistant/components/ipma/translations/hu.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik" + }, + "step": { + "user": { + "data": { + "latitude": "Sz\u00e9less\u00e9g", + "longitude": "Hossz\u00fas\u00e1g", + "mode": "M\u00f3d", + "name": "N\u00e9v" + }, + "description": "Portug\u00e1l Atmoszf\u00e9ra Int\u00e9zet", + "title": "Hely" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/it.json b/homeassistant/components/ipma/translations/it.json new file mode 100644 index 00000000000..5ab6af8d218 --- /dev/null +++ b/homeassistant/components/ipma/translations/it.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Il nome \u00e8 gi\u00e0 esistente" + }, + "step": { + "user": { + "data": { + "latitude": "Latitudine", + "longitude": "Longitudine", + "mode": "Modalit\u00e0", + "name": "Nome" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Localit\u00e0" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/ko.json b/homeassistant/components/ipma/translations/ko.json new file mode 100644 index 00000000000..3fd1a8d8ea9 --- /dev/null +++ b/homeassistant/components/ipma/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "mode": "\ubaa8\ub4dc", + "name": "\uc774\ub984" + }, + "description": "\ud3ec\ub974\ud22c\uac08 \ud574\uc591 \ubc0f \ub300\uae30 \uc5f0\uad6c\uc18c (Instituto Portugu\u00eas do Mar e Atmosfera)", + "title": "\uc704\uce58" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/lb.json b/homeassistant/components/ipma/translations/lb.json new file mode 100644 index 00000000000..e4896df58ba --- /dev/null +++ b/homeassistant/components/ipma/translations/lb.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Numm g\u00ebtt et schonn" + }, + "step": { + "user": { + "data": { + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad", + "mode": "Modus", + "name": "Numm" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Uertschaft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/lv.json b/homeassistant/components/ipma/translations/lv.json similarity index 100% rename from homeassistant/components/ipma/.translations/lv.json rename to homeassistant/components/ipma/translations/lv.json diff --git a/homeassistant/components/ipma/translations/nl.json b/homeassistant/components/ipma/translations/nl.json new file mode 100644 index 00000000000..79248e0d064 --- /dev/null +++ b/homeassistant/components/ipma/translations/nl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Naam bestaat al" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "mode": "Mode", + "name": "Naam" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Locatie" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/nn.json b/homeassistant/components/ipma/translations/nn.json similarity index 100% rename from homeassistant/components/ipma/.translations/nn.json rename to homeassistant/components/ipma/translations/nn.json diff --git a/homeassistant/components/ipma/translations/no.json b/homeassistant/components/ipma/translations/no.json new file mode 100644 index 00000000000..4e4cdebeec6 --- /dev/null +++ b/homeassistant/components/ipma/translations/no.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Navnet eksisterer allerede" + }, + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "mode": "Modus", + "name": "Navn" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Plassering" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/pl.json b/homeassistant/components/ipma/translations/pl.json new file mode 100644 index 00000000000..f87f915c247 --- /dev/null +++ b/homeassistant/components/ipma/translations/pl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Nazwa ju\u017c istnieje." + }, + "step": { + "user": { + "data": { + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "mode": "Tryb", + "name": "Nazwa" + }, + "description": "Portugalski Instytut Morza i Atmosfery", + "title": "Lokalizacja" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/pt-BR.json b/homeassistant/components/ipma/translations/pt-BR.json new file mode 100644 index 00000000000..4a0d8e0b01b --- /dev/null +++ b/homeassistant/components/ipma/translations/pt-BR.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "O nome j\u00e1 existe" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nome" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Localiza\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/pt.json b/homeassistant/components/ipma/translations/pt.json new file mode 100644 index 00000000000..2e67da76241 --- /dev/null +++ b/homeassistant/components/ipma/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Nome j\u00e1 existente" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nome" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Localiza\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/ru.json b/homeassistant/components/ipma/translations/ru.json new file mode 100644 index 00000000000..b9e98886e63 --- /dev/null +++ b/homeassistant/components/ipma/translations/ru.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." + }, + "step": { + "user": { + "data": { + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "mode": "\u0420\u0435\u0436\u0438\u043c", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u043c\u043e\u0440\u044f \u0438 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u044b.", + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/sl.json b/homeassistant/components/ipma/translations/sl.json new file mode 100644 index 00000000000..d42b858157b --- /dev/null +++ b/homeassistant/components/ipma/translations/sl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Ime \u017ee obstaja" + }, + "step": { + "user": { + "data": { + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina", + "mode": "Na\u010din", + "name": "Ime" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "Lokacija" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/sv.json b/homeassistant/components/ipma/translations/sv.json new file mode 100644 index 00000000000..1606c8cb5ed --- /dev/null +++ b/homeassistant/components/ipma/translations/sv.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Namnet finns redan" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "mode": "L\u00e4ge", + "name": "Namn" + }, + "description": "Portugisiska institutet f\u00f6r hav och atmosf\u00e4ren", + "title": "Location" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/.translations/th.json b/homeassistant/components/ipma/translations/th.json similarity index 100% rename from homeassistant/components/ipma/.translations/th.json rename to homeassistant/components/ipma/translations/th.json diff --git a/homeassistant/components/ipma/.translations/uk.json b/homeassistant/components/ipma/translations/uk.json similarity index 100% rename from homeassistant/components/ipma/.translations/uk.json rename to homeassistant/components/ipma/translations/uk.json diff --git a/homeassistant/components/ipma/translations/zh-Hans.json b/homeassistant/components/ipma/translations/zh-Hans.json new file mode 100644 index 00000000000..7e0da1fb844 --- /dev/null +++ b/homeassistant/components/ipma/translations/zh-Hans.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\u540d\u79f0\u5df2\u5b58\u5728" + }, + "step": { + "user": { + "data": { + "latitude": "\u7eac\u5ea6", + "longitude": "\u7ecf\u5ea6", + "mode": "\u6a21\u5f0f", + "name": "\u540d\u79f0" + }, + "description": "\u8461\u8404\u7259\u56fd\u5bb6\u5927\u6c14\u7814\u7a76\u6240", + "title": "\u4f4d\u7f6e" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipma/translations/zh-Hant.json b/homeassistant/components/ipma/translations/zh-Hant.json new file mode 100644 index 00000000000..a3d084ddaa3 --- /dev/null +++ b/homeassistant/components/ipma/translations/zh-Hant.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728" + }, + "step": { + "user": { + "data": { + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "mode": "\u6a21\u5f0f", + "name": "\u540d\u7a31" + }, + "description": "Instituto Portugu\u00eas do Mar e Atmosfera", + "title": "\u5ea7\u6a19" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/ca.json b/homeassistant/components/ipp/.translations/ca.json deleted file mode 100644 index f193878d952..00000000000 --- a/homeassistant/components/ipp/.translations/ca.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta impressora ja est\u00e0 configurada.", - "connection_error": "No s'ha pogut connectar amb la impressora.", - "connection_upgrade": "No s'ha pogut connectar amb la impressora, es necessita actualitzar la connexi\u00f3." - }, - "error": { - "connection_error": "No s'ha pogut connectar amb la impressora." - }, - "flow_title": "Impressora: {name}", - "step": { - "user": { - "data": { - "base_path": "Ruta relativa a la impressora", - "host": "Amfitri\u00f3 o adre\u00e7a IP", - "port": "Port", - "ssl": "La impressora \u00e9s compatible amb comunicaci\u00f3 SSL/TLS", - "verify_ssl": "La impressora utilitza un certificat SSL adequat" - }, - "description": "Configura la impressora amb el protocol d'impressi\u00f3 per Internet (IPP) per integrar-la amb Home Assistant.", - "title": "Enlla\u00e7 d'impressora" - }, - "zeroconf_confirm": { - "description": "Vols afegir la impressora {name} a Home Assistant?", - "title": "Impressora descoberta" - } - }, - "title": "Protocol d'impressi\u00f3 per Internet (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/da.json b/homeassistant/components/ipp/.translations/da.json deleted file mode 100644 index ede4601928e..00000000000 --- a/homeassistant/components/ipp/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne printer er allerede konfigureret.", - "connection_error": "Kunne ikke oprette forbindelse til printeren.", - "connection_upgrade": "Der kunne ikke oprettes forbindelse til printeren, fordi der kr\u00e6ves opgradering af forbindelsen." - }, - "error": { - "connection_error": "Kunne ikke oprette forbindelse til printeren.", - "connection_upgrade": "Kunne ikke oprette forbindelse til printeren. Pr\u00f8v igen med indstillingen SSL/TLS markeret." - }, - "flow_title": "Printer: {name}", - "step": { - "user": { - "data": { - "base_path": "Relativ sti til printeren", - "host": "V\u00e6rt eller IP-adresse", - "port": "Port", - "ssl": "Printeren underst\u00f8tter kommunikation via SSL/TLS", - "verify_ssl": "Printeren bruger et korrekt SSL-certifikat" - }, - "description": "Konfigurer din printer via Internet Printing Protocol (IPP) til at integrere med Home Assistant.", - "title": "Forbind din printer" - }, - "zeroconf_confirm": { - "description": "Vil du tilf\u00f8je printeren med navnet '{name}' til Home Assistant?", - "title": "Fandt printer" - } - }, - "title": "Internet Printing Protocol (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/de.json b/homeassistant/components/ipp/.translations/de.json deleted file mode 100644 index 7e72fb2403f..00000000000 --- a/homeassistant/components/ipp/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser Drucker ist bereits konfiguriert", - "connection_error": "Verbindung zum Drucker fehlgeschlagen.", - "connection_upgrade": "Verbindung zum Drucker fehlgeschlagen, da ein Verbindungsupgrade erforderlich ist." - }, - "error": { - "connection_error": "Verbindung zum Drucker fehlgeschlagen.", - "connection_upgrade": "Verbindung zum Drucker fehlgeschlagen. Bitte versuchen Sie es erneut mit aktivierter SSL / TLS-Option." - }, - "flow_title": "Drucker: {name}", - "step": { - "user": { - "data": { - "base_path": "Relativer Pfad zum Drucker", - "host": "Host oder IP-Adresse", - "port": "Port", - "ssl": "Der Drucker unterst\u00fctzt die Kommunikation \u00fcber SSL / TLS", - "verify_ssl": "Der Drucker verwendet ein ordnungsgem\u00e4\u00dfes SSL-Zertifikat" - }, - "description": "Richten Sie Ihren Drucker \u00fcber das Internet Printing Protocol (IPP) f\u00fcr die Integration in Home Assistant ein.", - "title": "Verbinden Sie Ihren Drucker" - }, - "zeroconf_confirm": { - "description": "M\u00f6chten Sie den Drucker mit dem Namen \"{name}\" zu Home Assistant hinzuf\u00fcgen?", - "title": "Entdeckter Drucker" - } - }, - "title": "Internet-Druckprotokoll (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/en.json b/homeassistant/components/ipp/.translations/en.json deleted file mode 100644 index c3fc9be6d45..00000000000 --- a/homeassistant/components/ipp/.translations/en.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This printer is already configured.", - "connection_error": "Failed to connect to printer.", - "connection_upgrade": "Failed to connect to printer due to connection upgrade being required.", - "parse_error": "Failed to parse response from printer." - }, - "error": { - "connection_error": "Failed to connect to printer.", - "connection_upgrade": "Failed to connect to printer. Please try again with SSL/TLS option checked." - }, - "flow_title": "Printer: {name}", - "step": { - "user": { - "data": { - "base_path": "Relative path to the printer", - "host": "Host or IP address", - "port": "Port", - "ssl": "Printer supports communication over SSL/TLS", - "verify_ssl": "Printer uses a proper SSL certificate" - }, - "description": "Set up your printer via Internet Printing Protocol (IPP) to integrate with Home Assistant.", - "title": "Link your printer" - }, - "zeroconf_confirm": { - "description": "Do you want to add the printer named `{name}` to Home Assistant?", - "title": "Discovered printer" - } - }, - "title": "Internet Printing Protocol (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/es.json b/homeassistant/components/ipp/.translations/es.json deleted file mode 100644 index 6e86f702902..00000000000 --- a/homeassistant/components/ipp/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta impresora ya est\u00e1 configurada.", - "connection_error": "No se pudo conectar con la impresora.", - "connection_upgrade": "No se pudo conectar con la impresora debido a que se requiere una actualizaci\u00f3n de la conexi\u00f3n." - }, - "error": { - "connection_error": "No se pudo conectar con la impresora.", - "connection_upgrade": "No se pudo conectar con la impresora. Int\u00e9ntalo de nuevo con la opci\u00f3n SSL/TLS marcada." - }, - "flow_title": "Impresora: {name}", - "step": { - "user": { - "data": { - "base_path": "Ruta relativa a la impresora", - "host": "Host o direcci\u00f3n IP", - "port": "Puerto", - "ssl": "La impresora admite la comunicaci\u00f3n a trav\u00e9s de SSL/TLS", - "verify_ssl": "La impresora usa un certificado SSL adecuado" - }, - "description": "Configura tu impresora a trav\u00e9s del Protocolo de Impresi\u00f3n de Internet (IPP) para integrarla con Home Assistant.", - "title": "Vincula tu impresora" - }, - "zeroconf_confirm": { - "description": "\u00bfQuieres a\u00f1adir la impresora llamada `{name}` a Home Assistant?", - "title": "Impresora encontrada" - } - }, - "title": "Protocolo de Impresi\u00f3n de Internet (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/ko.json b/homeassistant/components/ipp/.translations/ko.json deleted file mode 100644 index ab556519e07..00000000000 --- a/homeassistant/components/ipp/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "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." - }, - "error": { - "connection_error": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "connection_upgrade": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. SSL/TLS \uc635\uc158\uc744 \ud655\uc778\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "flow_title": "\ud504\ub9b0\ud130: {name}", - "step": { - "user": { - "data": { - "base_path": "\ud504\ub9b0\ud130\uc758 \uc0c1\ub300 \uacbd\ub85c", - "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c", - "port": "\ud3ec\ud2b8", - "ssl": "\ud504\ub9b0\ud130\ub294 SSL/TLS \ub97c \ud1b5\ud55c \ud1b5\uc2e0\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4", - "verify_ssl": "\ud504\ub9b0\ud130\ub294 \uc62c\ubc14\ub978 SSL \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4" - }, - "description": "\uc778\ud130\ub137 \uc778\uc1c4 \ud504\ub85c\ud1a0\ucf5c (IPP) \ub97c \ud1b5\ud574 \ud504\ub9b0\ud130\ub97c \uc124\uc815\ud558\uc5ec Home Assistant \uc640 \uc5f0\ub3d9\ud569\ub2c8\ub2e4.", - "title": "\ud504\ub9b0\ud130 \uc5f0\uacb0" - }, - "zeroconf_confirm": { - "description": "Home Assistant \uc5d0 `{name}` \ud504\ub9b0\ud130\ub97c \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\ubc1c\uacac\ub41c \ud504\ub9b0\ud130" - } - }, - "title": "\uc778\ud130\ub137 \uc778\uc1c4 \ud504\ub85c\ud1a0\ucf5c (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/lb.json b/homeassistant/components/ipp/.translations/lb.json deleted file mode 100644 index bdda2cf1c14..00000000000 --- a/homeassistant/components/ipp/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse Printer ass scho konfigur\u00e9iert.", - "connection_error": "Feeler beim verbannen mam Printer.", - "connection_upgrade": "Feeler beim verbannen mam Printer well eng Aktualis\u00e9ierung vun der Verbindung erfuerderlech ass." - }, - "error": { - "connection_error": "Feeler beim verbannen mam Printer.", - "connection_upgrade": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol mat aktiv\u00e9ierter SSL/TLS Optioun." - }, - "flow_title": "Printer: {name}", - "step": { - "user": { - "data": { - "base_path": "Relative Pad zum Printer", - "host": "Numm oder IP Adresse", - "port": "Port", - "ssl": "Printer \u00ebnnerst\u00ebtze Kommunikatioun iwwer SSL/TLS", - "verify_ssl": "Printer benotzt ee g\u00ebltegen SSL Zertifikat" - }, - "description": "Konfigur\u00e9ier d\u00e4in Printer mat Internet Printing Protocol (IPP) fir en am Home Assistant z'int\u00e9gr\u00e9ieren.", - "title": "\u00c4re Printer verbannen" - }, - "zeroconf_confirm": { - "description": "W\u00ebllt dir de Printer mam Numm `{name}` am Home Assistant dob\u00e4isetzen?", - "title": "Entdeckte Printer" - } - }, - "title": "Internet Printing Protocol (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/no.json b/homeassistant/components/ipp/.translations/no.json deleted file mode 100644 index 2357aaaa86d..00000000000 --- a/homeassistant/components/ipp/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne skriveren er allerede konfigurert.", - "connection_error": "Klarte ikke \u00e5 koble til skriveren.", - "connection_upgrade": "Kunne ikke koble til skriveren fordi tilkoblingsoppgradering var n\u00f8dvendig." - }, - "error": { - "connection_error": "Klarte ikke \u00e5 koble til skriveren.", - "connection_upgrade": "Kunne ikke koble til skriveren. Vennligst pr\u00f8v igjen med alternativet SSL / TLS merket." - }, - "flow_title": "Skriver: {name}", - "step": { - "user": { - "data": { - "base_path": "Relativ bane til skriveren", - "host": "Vert eller IP-adresse", - "port": "Port", - "ssl": "Skriveren st\u00f8tter kommunikasjon over SSL/TLS", - "verify_ssl": "Skriveren bruker et riktig SSL-sertifikat" - }, - "description": "Konfigurer skriveren din via Internet Printing Protocol (IPP) for \u00e5 integrere med Home Assistant.", - "title": "Koble til skriveren din" - }, - "zeroconf_confirm": { - "description": "\u00d8nsker du \u00e5 legge skriveren med navnet {name} til Home Assistant?", - "title": "Oppdaget skriver" - } - }, - "title": "Internet Printing Protocol (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/ru.json b/homeassistant/components/ipp/.translations/ru.json deleted file mode 100644 index 902289b2e8f..00000000000 --- a/homeassistant/components/ipp/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443.", - "connection_upgrade": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f." - }, - "error": { - "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443.", - "connection_upgrade": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 SSL/TLS." - }, - "flow_title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440: {name}", - "step": { - "user": { - "data": { - "base_path": "\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443", - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "port": "\u041f\u043e\u0440\u0442", - "ssl": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u043f\u043e SSL/TLS", - "verify_ssl": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 SSL" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 IPP \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Home Assistant.", - "title": "Internet Printing Protocol (IPP)" - }, - "zeroconf_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440 `{name}`?", - "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0442\u0435\u0440" - } - }, - "title": "Internet Printing Protocol (IPP)" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/.translations/zh-Hant.json b/homeassistant/components/ipp/.translations/zh-Hant.json deleted file mode 100644 index fe79b4b88cd..00000000000 --- a/homeassistant/components/ipp/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u5370\u8868\u6a5f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "connection_error": "\u5370\u8868\u6a5f\u9023\u7dda\u5931\u6557\u3002", - "connection_upgrade": "\u7531\u65bc\u9700\u8981\u5148\u5347\u7d1a\u9023\u7dda\u3001\u9023\u7dda\u81f3\u5370\u8868\u6a5f\u5931\u6557\u3002" - }, - "error": { - "connection_error": "\u5370\u8868\u6a5f\u9023\u7dda\u5931\u6557\u3002", - "connection_upgrade": "\u9023\u7dda\u81f3\u5370\u8868\u6a5f\u5931\u6557\u3002\u8acb\u52fe\u9078 SSL/TLS \u9078\u9805\u5f8c\u518d\u8a66\u4e00\u6b21\u3002" - }, - "flow_title": "\u5370\u8868\u6a5f\uff1a{name}", - "step": { - "user": { - "data": { - "base_path": "\u5370\u8868\u6a5f\u76f8\u5c0d\u8def\u5f91", - "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", - "port": "\u901a\u8a0a\u57e0", - "ssl": "\u5370\u8868\u6a5f\u652f\u63f4 SSL/TLS \u901a\u8a0a", - "verify_ssl": "\u5370\u8868\u6a5f\u4f7f\u7528\u5c0d\u61c9\u8a8d\u8b49" - }, - "description": "\u900f\u904e\u7db2\u969b\u7db2\u8def\u5217\u5370\u5354\u5b9a\uff08IPP\uff09\u8a2d\u5b9a\u5370\u8868\u6a5f\u4ee5\u6574\u5408\u81f3 Home Assistant\u3002", - "title": "\u9023\u7d50\u5370\u8868\u6a5f" - }, - "zeroconf_confirm": { - "description": "\u662f\u5426\u8981\u65b0\u589e\u540d\u7a31 `{name}` \u5370\u8868\u6a5f\u81f3 Home Assistant\uff1f", - "title": "\u81ea\u52d5\u641c\u7d22\u5230\u7684\u5370\u8868\u6a5f" - } - }, - "title": "\u7db2\u969b\u7db2\u8def\u5217\u5370\u5354\u5b9a\uff08IPP\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/ipp/__init__.py b/homeassistant/components/ipp/__init__.py index 447665a3676..5979caa37db 100644 --- a/homeassistant/components/ipp/__init__.py +++ b/homeassistant/components/ipp/__init__.py @@ -134,13 +134,18 @@ class IPPEntity(Entity): enabled_default: bool = True, ) -> None: """Initialize the IPP entity.""" + self._device_id = None self._enabled_default = enabled_default self._entry_id = entry_id self._icon = icon self._name = name - self._unsub_dispatcher = None self.coordinator = coordinator + if coordinator.data.info.uuid is not None: + self._device_id = coordinator.data.info.uuid + elif coordinator.data.info.serial is not None: + self._device_id = coordinator.data.info.serial + @property def name(self) -> str: """Return the name of the entity.""" @@ -168,11 +173,9 @@ class IPPEntity(Entity): async def async_added_to_hass(self) -> None: """Connect to dispatcher listening for entity data notifications.""" - self.coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self) -> None: - """Disconnect from update signal.""" - self.coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self.coordinator.async_add_listener(self.async_write_ha_state) + ) async def async_update(self) -> None: """Update an IPP entity.""" @@ -181,8 +184,11 @@ class IPPEntity(Entity): @property def device_info(self) -> Dict[str, Any]: """Return device information about this IPP device.""" + if self._device_id is None: + return None + return { - ATTR_IDENTIFIERS: {(DOMAIN, self.coordinator.data.info.uuid)}, + ATTR_IDENTIFIERS: {(DOMAIN, self._device_id)}, ATTR_NAME: self.coordinator.data.info.name, ATTR_MANUFACTURER: self.coordinator.data.info.manufacturer, ATTR_MODEL: self.coordinator.data.info.model, diff --git a/homeassistant/components/ipp/config_flow.py b/homeassistant/components/ipp/config_flow.py index 32474881a87..7d1c3d1b1b8 100644 --- a/homeassistant/components/ipp/config_flow.py +++ b/homeassistant/components/ipp/config_flow.py @@ -24,7 +24,7 @@ from homeassistant.const import ( from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.typing import ConfigType, HomeAssistantType -from .const import CONF_BASE_PATH, CONF_UUID +from .const import CONF_BASE_PATH, CONF_SERIAL, CONF_UUID from .const import DOMAIN # pylint: disable=unused-import _LOGGER = logging.getLogger(__name__) @@ -47,7 +47,7 @@ async def validate_input(hass: HomeAssistantType, data: dict) -> Dict[str, Any]: printer = await ipp.printer() - return {CONF_UUID: printer.info.uuid} + return {CONF_SERIAL: printer.info.serial, CONF_UUID: printer.info.uuid} class IPPFlowHandler(ConfigFlow, domain=DOMAIN): @@ -83,20 +83,28 @@ class IPPFlowHandler(ConfigFlow, domain=DOMAIN): _LOGGER.debug("IPP Error", exc_info=True) return self.async_abort(reason="ipp_error") - user_input[CONF_UUID] = info[CONF_UUID] + unique_id = user_input[CONF_UUID] = info[CONF_UUID] - await self.async_set_unique_id(user_input[CONF_UUID]) + if unique_id is None and info[CONF_SERIAL] is not None: + _LOGGER.debug( + "Printer UUID is missing from IPP response. Falling back to IPP serial number" + ) + unique_id = info[CONF_SERIAL] + elif unique_id is None: + _LOGGER.debug("Unable to determine unique id from IPP response") + + await self.async_set_unique_id(unique_id) self._abort_if_unique_id_configured(updates={CONF_HOST: user_input[CONF_HOST]}) return self.async_create_entry(title=user_input[CONF_HOST], data=user_input) async def async_step_zeroconf(self, discovery_info: ConfigType) -> Dict[str, Any]: """Handle zeroconf discovery.""" - # Hostname is format: EPSON123456.local. - host = discovery_info["hostname"].rstrip(".") - port = discovery_info["port"] - name, _ = host.rsplit(".") - tls = discovery_info["type"] == "_ipps._tcp.local." + port = discovery_info[CONF_PORT] + zctype = discovery_info["type"] + name = discovery_info[CONF_NAME].replace(f".{zctype}", "") + tls = zctype == "_ipps._tcp.local." + base_path = discovery_info["properties"].get("rp", "ipp/print") # pylint: disable=no-member # https://github.com/PyCQA/pylint/issues/3167 self.context.update({"title_placeholders": {"name": name}}) @@ -107,8 +115,7 @@ class IPPFlowHandler(ConfigFlow, domain=DOMAIN): CONF_PORT: port, CONF_SSL: tls, CONF_VERIFY_SSL: False, - CONF_BASE_PATH: "/" - + discovery_info["properties"].get("rp", "ipp/print"), + CONF_BASE_PATH: f"/{base_path}", CONF_NAME: name, CONF_UUID: discovery_info["properties"].get("UUID"), } @@ -130,12 +137,28 @@ class IPPFlowHandler(ConfigFlow, domain=DOMAIN): _LOGGER.debug("IPP Error", exc_info=True) return self.async_abort(reason="ipp_error") - if info[CONF_UUID] is not None: - self.discovery_info[CONF_UUID] = info[CONF_UUID] + unique_id = self.discovery_info[CONF_UUID] + if unique_id is None and info[CONF_UUID] is not None: + _LOGGER.debug( + "Printer UUID is missing from discovery info. Falling back to IPP UUID" + ) + unique_id = self.discovery_info[CONF_UUID] = info[CONF_UUID] + elif unique_id is None and info[CONF_SERIAL] is not None: + _LOGGER.debug( + "Printer UUID is missing from discovery info and IPP response. Falling back to IPP serial number" + ) + unique_id = info[CONF_SERIAL] + elif unique_id is None: + _LOGGER.debug( + "Unable to determine unique id from discovery info and IPP response" + ) - await self.async_set_unique_id(self.discovery_info[CONF_UUID]) + await self.async_set_unique_id(unique_id) self._abort_if_unique_id_configured( - updates={CONF_HOST: self.discovery_info[CONF_HOST]} + updates={ + CONF_HOST: self.discovery_info[CONF_HOST], + CONF_NAME: self.discovery_info[CONF_NAME], + }, ) return await self.async_step_zeroconf_confirm() diff --git a/homeassistant/components/ipp/const.py b/homeassistant/components/ipp/const.py index 7caf60b7edd..a5345f4145e 100644 --- a/homeassistant/components/ipp/const.py +++ b/homeassistant/components/ipp/const.py @@ -21,5 +21,6 @@ ATTR_URI_SUPPORTED = "uri_supported" # Config Keys CONF_BASE_PATH = "base_path" +CONF_SERIAL = "serial" CONF_TLS = "tls" CONF_UUID = "uuid" diff --git a/homeassistant/components/ipp/sensor.py b/homeassistant/components/ipp/sensor.py index fd278d3df2e..5c29be09d94 100644 --- a/homeassistant/components/ipp/sensor.py +++ b/homeassistant/components/ipp/sensor.py @@ -60,6 +60,12 @@ class IPPSensor(IPPEntity): """Initialize IPP sensor.""" self._unit_of_measurement = unit_of_measurement self._key = key + self._unique_id = None + + if coordinator.data.info.uuid is not None: + self._unique_id = f"{coordinator.data.info.uuid}_{key}" + elif coordinator.data.info.serial is not None: + self._unique_id = f"{coordinator.data.info.serial}_{key}" super().__init__( entry_id=entry_id, @@ -72,7 +78,7 @@ class IPPSensor(IPPEntity): @property def unique_id(self) -> str: """Return the unique ID for this sensor.""" - return f"{self.coordinator.data.info.uuid}_{self._key}" + return self._unique_id @property def unit_of_measurement(self) -> str: diff --git a/homeassistant/components/ipp/strings.json b/homeassistant/components/ipp/strings.json index c77d1eec161..e3e28ace1fd 100644 --- a/homeassistant/components/ipp/strings.json +++ b/homeassistant/components/ipp/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Internet Printing Protocol (IPP)", "flow_title": "Printer: {name}", "step": { "user": { diff --git a/homeassistant/components/ipp/translations/ca.json b/homeassistant/components/ipp/translations/ca.json new file mode 100644 index 00000000000..8ed12b70d6a --- /dev/null +++ b/homeassistant/components/ipp/translations/ca.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta impressora ja est\u00e0 configurada.", + "connection_error": "No s'ha pogut connectar amb la impressora.", + "connection_upgrade": "No s'ha pogut connectar amb la impressora, es necessita actualitzar la connexi\u00f3.", + "ipp_error": "S'ha produ\u00eft un error IPP.", + "ipp_version_error": "La versi\u00f3 IPP no \u00e9s compatible amb la impressora.", + "parse_error": "No s'ha pogut analitzar la resposta de la impressora." + }, + "error": { + "connection_error": "No s'ha pogut connectar amb la impressora.", + "connection_upgrade": "No s'ha pogut connectar amb la impressora. Prova-ho novament amb l'opci\u00f3 SSL/TLS activada." + }, + "flow_title": "Impressora: {name}", + "step": { + "user": { + "data": { + "base_path": "Ruta relativa a la impressora", + "host": "Amfitri\u00f3 o adre\u00e7a IP", + "port": "Port", + "ssl": "La impressora \u00e9s compatible amb comunicaci\u00f3 SSL/TLS", + "verify_ssl": "La impressora utilitza un certificat SSL adequat" + }, + "description": "Configura la impressora amb el protocol d'impressi\u00f3 per Internet (IPP) per integrar-la amb Home Assistant.", + "title": "Enlla\u00e7 d'impressora" + }, + "zeroconf_confirm": { + "description": "Vols afegir la impressora {name} a Home Assistant?", + "title": "Impressora descoberta" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/da.json b/homeassistant/components/ipp/translations/da.json new file mode 100644 index 00000000000..19ad3f2eedf --- /dev/null +++ b/homeassistant/components/ipp/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Denne printer er allerede konfigureret.", + "connection_error": "Kunne ikke oprette forbindelse til printeren.", + "connection_upgrade": "Der kunne ikke oprettes forbindelse til printeren, fordi der kr\u00e6ves opgradering af forbindelsen." + }, + "error": { + "connection_error": "Kunne ikke oprette forbindelse til printeren.", + "connection_upgrade": "Kunne ikke oprette forbindelse til printeren. Pr\u00f8v igen med indstillingen SSL/TLS markeret." + }, + "flow_title": "Printer: {name}", + "step": { + "user": { + "data": { + "base_path": "Relativ sti til printeren", + "host": "V\u00e6rt eller IP-adresse", + "port": "Port", + "ssl": "Printeren underst\u00f8tter kommunikation via SSL/TLS", + "verify_ssl": "Printeren bruger et korrekt SSL-certifikat" + }, + "description": "Konfigurer din printer via Internet Printing Protocol (IPP) til at integrere med Home Assistant.", + "title": "Forbind din printer" + }, + "zeroconf_confirm": { + "description": "Vil du tilf\u00f8je printeren med navnet '{name}' til Home Assistant?", + "title": "Fandt printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/de.json b/homeassistant/components/ipp/translations/de.json new file mode 100644 index 00000000000..3c43cd08cc5 --- /dev/null +++ b/homeassistant/components/ipp/translations/de.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Drucker ist bereits konfiguriert", + "connection_error": "Verbindung zum Drucker fehlgeschlagen.", + "connection_upgrade": "Verbindung zum Drucker fehlgeschlagen, da ein Verbindungsupgrade erforderlich ist.", + "ipp_error": "IPP-Fehler festgestellt.", + "ipp_version_error": "IPP-Version wird vom Drucker nicht unterst\u00fctzt.", + "parse_error": "Antwort vom Drucker konnte nicht analysiert werden." + }, + "error": { + "connection_error": "Verbindung zum Drucker fehlgeschlagen.", + "connection_upgrade": "Verbindung zum Drucker fehlgeschlagen. Bitte versuchen Sie es erneut mit aktivierter SSL / TLS-Option." + }, + "flow_title": "Drucker: {name}", + "step": { + "user": { + "data": { + "base_path": "Relativer Pfad zum Drucker", + "host": "Host oder IP-Adresse", + "port": "Port", + "ssl": "Der Drucker unterst\u00fctzt die Kommunikation \u00fcber SSL / TLS", + "verify_ssl": "Der Drucker verwendet ein ordnungsgem\u00e4\u00dfes SSL-Zertifikat" + }, + "description": "Richten Sie Ihren Drucker \u00fcber das Internet Printing Protocol (IPP) f\u00fcr die Integration in Home Assistant ein.", + "title": "Verbinden Sie Ihren Drucker" + }, + "zeroconf_confirm": { + "description": "M\u00f6chten Sie den Drucker mit dem Namen \"{name}\" zu Home Assistant hinzuf\u00fcgen?", + "title": "Entdeckter Drucker" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/en.json b/homeassistant/components/ipp/translations/en.json new file mode 100644 index 00000000000..7fe5132ed64 --- /dev/null +++ b/homeassistant/components/ipp/translations/en.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "This printer is already configured.", + "connection_error": "Failed to connect to printer.", + "connection_upgrade": "Failed to connect to printer due to connection upgrade being required.", + "ipp_error": "Encountered IPP error.", + "ipp_version_error": "IPP version not supported by printer.", + "parse_error": "Failed to parse response from printer." + }, + "error": { + "connection_error": "Failed to connect to printer.", + "connection_upgrade": "Failed to connect to printer. Please try again with SSL/TLS option checked." + }, + "flow_title": "Printer: {name}", + "step": { + "user": { + "data": { + "base_path": "Relative path to the printer", + "host": "Host or IP address", + "port": "Port", + "ssl": "Printer supports communication over SSL/TLS", + "verify_ssl": "Printer uses a proper SSL certificate" + }, + "description": "Set up your printer via Internet Printing Protocol (IPP) to integrate with Home Assistant.", + "title": "Link your printer" + }, + "zeroconf_confirm": { + "description": "Do you want to add the printer named `{name}` to Home Assistant?", + "title": "Discovered printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/es.json b/homeassistant/components/ipp/translations/es.json new file mode 100644 index 00000000000..bdb55b539fa --- /dev/null +++ b/homeassistant/components/ipp/translations/es.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Esta impresora ya est\u00e1 configurada.", + "connection_error": "No se pudo conectar con la impresora.", + "connection_upgrade": "No se pudo conectar con la impresora debido a que se requiere una actualizaci\u00f3n de la conexi\u00f3n.", + "ipp_error": "Error IPP encontrado.", + "ipp_version_error": "Versi\u00f3n de IPP no compatible con la impresora.", + "parse_error": "Error al analizar la respuesta de la impresora." + }, + "error": { + "connection_error": "No se pudo conectar con la impresora.", + "connection_upgrade": "No se pudo conectar con la impresora. Int\u00e9ntalo de nuevo con la opci\u00f3n SSL/TLS marcada." + }, + "flow_title": "Impresora: {name}", + "step": { + "user": { + "data": { + "base_path": "Ruta relativa a la impresora", + "host": "Host o direcci\u00f3n IP", + "port": "Puerto", + "ssl": "La impresora admite la comunicaci\u00f3n a trav\u00e9s de SSL/TLS", + "verify_ssl": "La impresora usa un certificado SSL adecuado" + }, + "description": "Configura tu impresora a trav\u00e9s del Protocolo de Impresi\u00f3n de Internet (IPP) para integrarla con Home Assistant.", + "title": "Vincula tu impresora" + }, + "zeroconf_confirm": { + "description": "\u00bfQuieres a\u00f1adir la impresora llamada `{name}` a Home Assistant?", + "title": "Impresora encontrada" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/fr.json b/homeassistant/components/ipp/translations/fr.json new file mode 100644 index 00000000000..b1833e6d557 --- /dev/null +++ b/homeassistant/components/ipp/translations/fr.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Cette imprimante est d\u00e9j\u00e0 configur\u00e9e.", + "connection_error": "Impossible de se connecter \u00e0 l'imprimante.", + "connection_upgrade": "Impossible de se connecter \u00e0 l'imprimante parce qu'une mise \u00e0 niveau de la connexion est n\u00e9cessaire.", + "ipp_error": "Erreur IPP rencontr\u00e9e.", + "ipp_version_error": "Version d'IPP non prise en charge par l'imprimante.", + "parse_error": "Impossible d'analyser la r\u00e9ponse de l'imprimante." + }, + "error": { + "connection_error": "Impossible de se connecter \u00e0 l'imprimante.", + "connection_upgrade": "Impossible de se connecter \u00e0 l'imprimante. Veuillez r\u00e9essayer avec l'option SSL / TLS coch\u00e9e." + }, + "flow_title": "Imprimante: {name}", + "step": { + "user": { + "data": { + "base_path": "Chemin d'acc\u00e8s relatif \u00e0 l'imprimante", + "host": "H\u00f4te ou adresse IP", + "port": "Port", + "ssl": "L'imprimante prend en charge la communication via SSL/TLS", + "verify_ssl": "L'imprimante utilise un certificat SSL appropri\u00e9" + }, + "description": "Configurez votre imprimante via IPP (Internet Printing Protocol) pour l'int\u00e9grer \u00e0 Home Assistant", + "title": "Reliez votre imprimante" + }, + "zeroconf_confirm": { + "description": "Voulez-vous ajouter l'imprimante `{name}` \u00e0 Home Assistant ?", + "title": "Imprimante trouv\u00e9e" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/it.json b/homeassistant/components/ipp/translations/it.json new file mode 100644 index 00000000000..d2f53fec24b --- /dev/null +++ b/homeassistant/components/ipp/translations/it.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Questa stampante \u00e8 gi\u00e0 configurata.", + "connection_error": "Impossibile connettersi alla stampante.", + "connection_upgrade": "Impossibile connettersi alla stampante a causa della necessit\u00e0 dell'aggiornamento della connessione.", + "ipp_error": "Si \u00e8 verificato un errore IPP.", + "ipp_version_error": "Versione IPP non supportata dalla stampante.", + "parse_error": "Impossibile analizzare la risposta dalla stampante." + }, + "error": { + "connection_error": "Impossibile connettersi alla stampante.", + "connection_upgrade": "Impossibile connettersi alla stampante. Riprovare selezionando l'opzione SSL/TLS." + }, + "flow_title": "Stampante: {name}", + "step": { + "user": { + "data": { + "base_path": "Percorso relativo alla stampante", + "host": "Host o indirizzo IP", + "port": "Porta", + "ssl": "La stampante supporta la comunicazione su SSL/TLS", + "verify_ssl": "La stampante utilizza un certificato SSL adeguato" + }, + "description": "Configurare la stampante tramite Internet Printing Protocol (IPP) per l'integrazione con Home Assistant.", + "title": "Collegare la stampante" + }, + "zeroconf_confirm": { + "description": "Vuoi aggiungere la stampante denominata `{name}` a Home Assistant?", + "title": "Stampante rilevata" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/ko.json b/homeassistant/components/ipp/translations/ko.json new file mode 100644 index 00000000000..a0f79d0417f --- /dev/null +++ b/homeassistant/components/ipp/translations/ko.json @@ -0,0 +1,34 @@ +{ + "config": { + "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.", + "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.", + "connection_upgrade": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. SSL/TLS \uc635\uc158\uc744 \ud655\uc778\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "flow_title": "\ud504\ub9b0\ud130: {name}", + "step": { + "user": { + "data": { + "base_path": "\ud504\ub9b0\ud130\uc758 \uc0c1\ub300 \uacbd\ub85c", + "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c", + "port": "\ud3ec\ud2b8", + "ssl": "\ud504\ub9b0\ud130\ub294 SSL/TLS \ub97c \ud1b5\ud55c \ud1b5\uc2e0\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4", + "verify_ssl": "\ud504\ub9b0\ud130\ub294 \uc62c\ubc14\ub978 SSL \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4" + }, + "description": "\uc778\ud130\ub137 \uc778\uc1c4 \ud504\ub85c\ud1a0\ucf5c (IPP) \ub97c \ud1b5\ud574 \ud504\ub9b0\ud130\ub97c \uc124\uc815\ud558\uc5ec Home Assistant \uc640 \uc5f0\ub3d9\ud569\ub2c8\ub2e4.", + "title": "\ud504\ub9b0\ud130 \uc5f0\uacb0" + }, + "zeroconf_confirm": { + "description": "Home Assistant \uc5d0 `{name}` \ud504\ub9b0\ud130\ub97c \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "\ubc1c\uacac\ub41c \ud504\ub9b0\ud130" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/lb.json b/homeassistant/components/ipp/translations/lb.json new file mode 100644 index 00000000000..7a92b59a47a --- /dev/null +++ b/homeassistant/components/ipp/translations/lb.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Printer ass scho konfigur\u00e9iert.", + "connection_error": "Feeler beim verbannen mam Printer.", + "connection_upgrade": "Feeler beim verbannen mam Printer well eng Aktualis\u00e9ierung vun der Verbindung erfuerderlech ass.", + "ipp_error": "IPP Feeler opgetrueden.", + "ipp_version_error": "IPP Versioun net vum Printer \u00ebnnerst\u00ebtzt.", + "parse_error": "Feeler beim ausliesen vun der \u00c4ntwert vum Printer." + }, + "error": { + "connection_error": "Feeler beim verbannen mam Printer.", + "connection_upgrade": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol mat aktiv\u00e9ierter SSL/TLS Optioun." + }, + "flow_title": "Printer: {name}", + "step": { + "user": { + "data": { + "base_path": "Relative Pad zum Printer", + "host": "Numm oder IP Adresse", + "port": "Port", + "ssl": "Printer \u00ebnnerst\u00ebtze Kommunikatioun iwwer SSL/TLS", + "verify_ssl": "Printer benotzt ee g\u00ebltegen SSL Zertifikat" + }, + "description": "Konfigur\u00e9ier d\u00e4in Printer mat Internet Printing Protocol (IPP) fir en am Home Assistant z'int\u00e9gr\u00e9ieren.", + "title": "\u00c4re Printer verbannen" + }, + "zeroconf_confirm": { + "description": "W\u00ebllt dir de Printer mam Numm `{name}` am Home Assistant dob\u00e4isetzen?", + "title": "Entdeckte Printer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/nl.json b/homeassistant/components/ipp/translations/nl.json new file mode 100644 index 00000000000..d6fbeb4cbbd --- /dev/null +++ b/homeassistant/components/ipp/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Internet Printing Protocol (IPP)" +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/no.json b/homeassistant/components/ipp/translations/no.json new file mode 100644 index 00000000000..2d4fe3e64b4 --- /dev/null +++ b/homeassistant/components/ipp/translations/no.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Denne skriveren er allerede konfigurert.", + "connection_error": "Klarte ikke \u00e5 koble til skriveren.", + "connection_upgrade": "Kunne ikke koble til skriveren fordi tilkoblingsoppgradering var n\u00f8dvendig.", + "ipp_error": "Oppdaget IPP-feil.", + "ipp_version_error": "IPP-versjon st\u00f8ttes ikke av skriveren.", + "parse_error": "Kan ikke analysere svar fra skriveren." + }, + "error": { + "connection_error": "Klarte ikke \u00e5 koble til skriveren.", + "connection_upgrade": "Kunne ikke koble til skriveren. Vennligst pr\u00f8v igjen med alternativet SSL / TLS merket." + }, + "flow_title": "Skriver: {name}", + "step": { + "user": { + "data": { + "base_path": "Relativ bane til skriveren", + "host": "Vert eller IP-adresse", + "port": "Port", + "ssl": "Skriveren st\u00f8tter kommunikasjon over SSL/TLS", + "verify_ssl": "Skriveren bruker et riktig SSL-sertifikat" + }, + "description": "Konfigurer skriveren din via Internet Printing Protocol (IPP) for \u00e5 integrere med Home Assistant.", + "title": "Koble til skriveren din" + }, + "zeroconf_confirm": { + "description": "\u00d8nsker du \u00e5 legge skriveren med navnet {name} til Home Assistant?", + "title": "Oppdaget skriver" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/pl.json b/homeassistant/components/ipp/translations/pl.json new file mode 100644 index 00000000000..8bc57941cb6 --- /dev/null +++ b/homeassistant/components/ipp/translations/pl.json @@ -0,0 +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/ipp/translations/pt.json b/homeassistant/components/ipp/translations/pt.json new file mode 100644 index 00000000000..742dd8621ec --- /dev/null +++ b/homeassistant/components/ipp/translations/pt.json @@ -0,0 +1,8 @@ +{ + "config": { + "abort": { + "ipp_error": "Erro IPP encontrado.", + "ipp_version_error": "Vers\u00e3o IPP n\u00e3o suportada pela impressora." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/ru.json b/homeassistant/components/ipp/translations/ru.json new file mode 100644 index 00000000000..5a8c6068769 --- /dev/null +++ b/homeassistant/components/ipp/translations/ru.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443.", + "connection_upgrade": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.", + "ipp_error": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 IPP.", + "ipp_version_error": "\u0412\u0435\u0440\u0441\u0438\u044f IPP \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u043e\u043c.", + "parse_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430." + }, + "error": { + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443.", + "connection_upgrade": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 SSL/TLS." + }, + "flow_title": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440: {name}", + "step": { + "user": { + "data": { + "base_path": "\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0443", + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "port": "\u041f\u043e\u0440\u0442", + "ssl": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u043f\u043e SSL/TLS", + "verify_ssl": "\u041f\u0440\u0438\u043d\u0442\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 SSL" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 IPP \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Home Assistant.", + "title": "Internet Printing Protocol (IPP)" + }, + "zeroconf_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440 `{name}`?", + "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0442\u0435\u0440" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/sl.json b/homeassistant/components/ipp/translations/sl.json new file mode 100644 index 00000000000..8141aa276bd --- /dev/null +++ b/homeassistant/components/ipp/translations/sl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Ta tiskalnik je \u017ee konfiguriran.", + "connection_error": "Povezava s tiskalnikom ni uspela.", + "connection_upgrade": "Povezava s tiskalnikom ni uspela, ker je potrebna nadgradnja povezave.", + "ipp_error": "Naletel na napako IPP.", + "ipp_version_error": "Razli\u010dica IPP ni podprta s tiskalnikom.", + "parse_error": "Odziva tiskalnika ni bilo mogo\u010de raz\u010dleniti." + }, + "error": { + "connection_error": "Povezava s tiskalnikom ni uspela.", + "connection_upgrade": "Povezave s tiskalnikom ni bilo mogo\u010de vzpostaviti. Prosimo, poskusite znova z odkljukano mo\u017enostjo SSL/TLS." + }, + "flow_title": "Tiskalnik: {name}", + "step": { + "user": { + "data": { + "base_path": "Relativna pot do tiskalnika", + "host": "Gostitelj ali IP naslov", + "port": "Vrata", + "ssl": "Tiskalnik podpira komunikacijo prek SSL/TLS", + "verify_ssl": "Tiskalnik uporablja pravilno SSL potrdilo" + }, + "description": "Tiskalnik nastavite s protokolom za internetni tiskanje (IPP) tako, da se bo integriral s programom Home Assistant.", + "title": "Pove\u017eite svoj tiskalnik" + }, + "zeroconf_confirm": { + "description": "Ali \u017eelite tiskalnik z imenom {name} dodati v Home Assistant?", + "title": "Odkrit tiskalnik" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/sv.json b/homeassistant/components/ipp/translations/sv.json new file mode 100644 index 00000000000..ffa6a6ae955 --- /dev/null +++ b/homeassistant/components/ipp/translations/sv.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Den h\u00e4r skrivaren \u00e4r redan konfigurerad.", + "connection_error": "Kunde inte ansluta till skrivaren", + "connection_upgrade": "Misslyckades att ansluta till skrivaren d\u00e5 anslutningen beh\u00f6ver uppgraderas.", + "ipp_error": "IPP-fel p\u00e5tr\u00e4ffades.", + "ipp_version_error": "IPP versionen st\u00f6ds inte av skrivaren", + "parse_error": "Det gick inte att f\u00f6rst\u00e5 responsen fr\u00e5n skrivaren" + }, + "error": { + "connection_error": "Kunde inte ansluta till skrivaren", + "connection_upgrade": "Kunde inte ansluta till skrivaren. F\u00f6rs\u00f6k igen med SSL/TLS alternativet ifyllt." + }, + "flow_title": "Skrivare: {name}", + "step": { + "user": { + "data": { + "base_path": "Relativ s\u00f6kv\u00e4g till skrivaren", + "host": "V\u00e4rd eller IP-adress", + "port": "Port", + "ssl": "Skrivaren st\u00f6der kommunikation \u00f6ver SSL / TLS", + "verify_ssl": "Skrivaren anv\u00e4nder ett korrekt SSL-certifikat" + }, + "description": "S\u00e4tt upp din skrivare \u00f6ver Internet Printing Protocol (IPP) f\u00f6r att integrera den med Home Assistant.", + "title": "Anslut din skrivare" + }, + "zeroconf_confirm": { + "description": "Vill du l\u00e4gga till skrivaren med namn `{name}` till Home Assistant?", + "title": "Uppt\u00e4ckte skrivare" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/zh-Hant.json b/homeassistant/components/ipp/translations/zh-Hant.json new file mode 100644 index 00000000000..68cda398da2 --- /dev/null +++ b/homeassistant/components/ipp/translations/zh-Hant.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u5370\u8868\u6a5f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "connection_error": "\u5370\u8868\u6a5f\u9023\u7dda\u5931\u6557\u3002", + "connection_upgrade": "\u7531\u65bc\u9700\u8981\u5148\u5347\u7d1a\u9023\u7dda\u3001\u9023\u7dda\u81f3\u5370\u8868\u6a5f\u5931\u6557\u3002", + "ipp_error": "\u767c\u751f IPP \u932f\u8aa4\u3002", + "ipp_version_error": "\u4e0d\u652f\u63f4\u5370\u8868\u6a5f\u7684 IPP \u7248\u672c\u3002", + "parse_error": "\u7372\u5f97\u5370\u8868\u6a5f\u56de\u61c9\u5931\u6557\u3002" + }, + "error": { + "connection_error": "\u5370\u8868\u6a5f\u9023\u7dda\u5931\u6557\u3002", + "connection_upgrade": "\u9023\u7dda\u81f3\u5370\u8868\u6a5f\u5931\u6557\u3002\u8acb\u52fe\u9078 SSL/TLS \u9078\u9805\u5f8c\u518d\u8a66\u4e00\u6b21\u3002" + }, + "flow_title": "\u5370\u8868\u6a5f\uff1a{name}", + "step": { + "user": { + "data": { + "base_path": "\u5370\u8868\u6a5f\u76f8\u5c0d\u8def\u5f91", + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", + "port": "\u901a\u8a0a\u57e0", + "ssl": "\u5370\u8868\u6a5f\u652f\u63f4 SSL/TLS \u901a\u8a0a", + "verify_ssl": "\u5370\u8868\u6a5f\u4f7f\u7528\u5c0d\u61c9\u8a8d\u8b49" + }, + "description": "\u900f\u904e\u7db2\u969b\u7db2\u8def\u5217\u5370\u5354\u5b9a\uff08IPP\uff09\u8a2d\u5b9a\u5370\u8868\u6a5f\u4ee5\u6574\u5408\u81f3 Home Assistant\u3002", + "title": "\u9023\u7d50\u5370\u8868\u6a5f" + }, + "zeroconf_confirm": { + "description": "\u662f\u5426\u8981\u65b0\u589e\u540d\u7a31 `{name}` \u5370\u8868\u6a5f\u81f3 Home Assistant\uff1f", + "title": "\u81ea\u52d5\u641c\u7d22\u5230\u7684\u5370\u8868\u6a5f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/bg.json b/homeassistant/components/iqvia/.translations/bg.json deleted file mode 100644 index 1ac04024932..00000000000 --- a/homeassistant/components/iqvia/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438\u044f\u0442 \u043a\u043e\u0434 \u0432\u0435\u0447\u0435 \u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d", - "invalid_zip_code": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438\u044f\u0442 \u043a\u043e\u0434 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d" - }, - "step": { - "user": { - "data": { - "zip_code": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u0434" - }, - "description": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0432\u0430\u0448\u0438\u044f \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0438\u043b\u0438 \u043a\u0430\u043d\u0430\u0434\u0441\u043a\u0438 \u043f\u043e\u0449\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u0434.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/ca.json b/homeassistant/components/iqvia/.translations/ca.json deleted file mode 100644 index 249fd6d0ae2..00000000000 --- a/homeassistant/components/iqvia/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Codi postal ja registrat", - "invalid_zip_code": "Codi postal incorrecte" - }, - "step": { - "user": { - "data": { - "zip_code": "Codi postal" - }, - "description": "Introdueix el teu codi postal d'Estats Units o Canad\u00e0.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/da.json b/homeassistant/components/iqvia/.translations/da.json deleted file mode 100644 index f7bd64bc410..00000000000 --- a/homeassistant/components/iqvia/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Postnummer er allerede registreret", - "invalid_zip_code": "Postnummer er ugyldig" - }, - "step": { - "user": { - "data": { - "zip_code": "Postnummer" - }, - "description": "Udfyld dit amerikanske eller canadiske postnummer.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/de.json b/homeassistant/components/iqvia/.translations/de.json deleted file mode 100644 index 3a66a1e11a0..00000000000 --- a/homeassistant/components/iqvia/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Postleitzahl bereits registriert", - "invalid_zip_code": "Postleitzahl ist ung\u00fcltig" - }, - "step": { - "user": { - "data": { - "zip_code": "Postleitzahl" - }, - "description": "Trage eine US-amerikanische oder kanadische Postleitzahl ein.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/en.json b/homeassistant/components/iqvia/.translations/en.json deleted file mode 100644 index c3cc412d792..00000000000 --- a/homeassistant/components/iqvia/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "ZIP code already registered", - "invalid_zip_code": "ZIP code is invalid" - }, - "step": { - "user": { - "data": { - "zip_code": "ZIP Code" - }, - "description": "Fill out your U.S. or Canadian ZIP code.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/es.json b/homeassistant/components/iqvia/.translations/es.json deleted file mode 100644 index 91e34e82903..00000000000 --- a/homeassistant/components/iqvia/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "C\u00f3digo postal ya registrado", - "invalid_zip_code": "El c\u00f3digo postal no es v\u00e1lido" - }, - "step": { - "user": { - "data": { - "zip_code": "C\u00f3digo postal" - }, - "description": "Indica tu c\u00f3digo postal de Estados Unidos o Canad\u00e1.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/fr.json b/homeassistant/components/iqvia/.translations/fr.json deleted file mode 100644 index f5e5907f2c4..00000000000 --- a/homeassistant/components/iqvia/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Code postal d\u00e9j\u00e0 enregistr\u00e9", - "invalid_zip_code": "Code postal invalide" - }, - "step": { - "user": { - "data": { - "zip_code": "Code postal" - }, - "description": "Entrez votre code postal am\u00e9ricain ou canadien.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/it.json b/homeassistant/components/iqvia/.translations/it.json deleted file mode 100644 index 492654c660c..00000000000 --- a/homeassistant/components/iqvia/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Il CAP \u00e8 gi\u00e0 registrato", - "invalid_zip_code": "Il CAP non \u00e8 valido" - }, - "step": { - "user": { - "data": { - "zip_code": "CAP" - }, - "description": "Compila il tuo CAP americano o canadese.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/ko.json b/homeassistant/components/iqvia/.translations/ko.json deleted file mode 100644 index a163891c042..00000000000 --- a/homeassistant/components/iqvia/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\uc6b0\ud3b8\ubc88\ud638\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_zip_code": "\uc6b0\ud3b8\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "zip_code": "\uc6b0\ud3b8\ubc88\ud638" - }, - "description": "\ubbf8\uad6d \ub610\ub294 \uce90\ub098\ub2e4\uc758 \uc6b0\ud3b8\ubc88\ud638\ub97c \uae30\uc785\ud574\uc8fc\uc138\uc694.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/lb.json b/homeassistant/components/iqvia/.translations/lb.json deleted file mode 100644 index 8dc7c3bc20e..00000000000 --- a/homeassistant/components/iqvia/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Postleitzuel ass scho registr\u00e9iert", - "invalid_zip_code": "Postleitzuel ass ong\u00eblteg" - }, - "step": { - "user": { - "data": { - "zip_code": "Postleitzuel" - }, - "description": "Gitt \u00e4r U.S. oder Kanadesch Postleitzuel un.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/nl.json b/homeassistant/components/iqvia/.translations/nl.json deleted file mode 100644 index e0b3b667de3..00000000000 --- a/homeassistant/components/iqvia/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Postcode al geregistreerd", - "invalid_zip_code": "Postcode is ongeldig" - }, - "step": { - "user": { - "data": { - "zip_code": "Postcode" - }, - "description": "Vul uw Amerikaanse of Canadese postcode in.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/nn.json b/homeassistant/components/iqvia/.translations/nn.json deleted file mode 100644 index 89922b66f03..00000000000 --- a/homeassistant/components/iqvia/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/no.json b/homeassistant/components/iqvia/.translations/no.json deleted file mode 100644 index 9ccca663fe5..00000000000 --- a/homeassistant/components/iqvia/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Postnummer er allerede registrert", - "invalid_zip_code": "Postnummeret er ugyldig" - }, - "step": { - "user": { - "data": { - "zip_code": "Postnummer" - }, - "description": "Fyll ut ditt amerikanske eller kanadiske postnummer.", - "title": "" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/pl.json b/homeassistant/components/iqvia/.translations/pl.json deleted file mode 100644 index b8c014c3dc9..00000000000 --- a/homeassistant/components/iqvia/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Kod pocztowy jest ju\u017c zarejestrowany.", - "invalid_zip_code": "Kod pocztowy jest nieprawid\u0142owy" - }, - "step": { - "user": { - "data": { - "zip_code": "Kod pocztowy" - }, - "description": "Wprowad\u017a ameryka\u0144ski lub kanadyjski kod pocztowy.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/pt-BR.json b/homeassistant/components/iqvia/.translations/pt-BR.json deleted file mode 100644 index b9f716e8d3e..00000000000 --- a/homeassistant/components/iqvia/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "C\u00f3digo postal j\u00e1 registado", - "invalid_zip_code": "C\u00f3digo postal inv\u00e1lido" - }, - "step": { - "user": { - "data": { - "zip_code": "C\u00f3digo postal" - }, - "description": "Preencha o seu CEP dos EUA ou Canad\u00e1.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/ru.json b/homeassistant/components/iqvia/.translations/ru.json deleted file mode 100644 index 336877fda13..00000000000 --- a/homeassistant/components/iqvia/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d.", - "invalid_zip_code": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441." - }, - "step": { - "user": { - "data": { - "zip_code": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 (\u0434\u043b\u044f \u0421\u0428\u0410 \u0438\u043b\u0438 \u041a\u0430\u043d\u0430\u0434\u044b).", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/sl.json b/homeassistant/components/iqvia/.translations/sl.json deleted file mode 100644 index fa04c00c7a2..00000000000 --- a/homeassistant/components/iqvia/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Po\u0161tna \u0161tevilka je \u017ee registrirana", - "invalid_zip_code": "Po\u0161tna \u0161tevilka ni veljavna" - }, - "step": { - "user": { - "data": { - "zip_code": "Po\u0161tna \u0161tevilka" - }, - "description": "Izpolnite svojo ameri\u0161ko ali kanadsko po\u0161tno \u0161tevilko.", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/sv.json b/homeassistant/components/iqvia/.translations/sv.json deleted file mode 100644 index 5bb4029dfcc..00000000000 --- a/homeassistant/components/iqvia/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Postnummer redan registrerat", - "invalid_zip_code": "Ogiltigt postnummer" - }, - "step": { - "user": { - "data": { - "zip_code": "Postnummer" - }, - "description": "Fyll i ditt Amerikanska eller Kanadensiska postnummer", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/zh-Hans.json b/homeassistant/components/iqvia/.translations/zh-Hans.json deleted file mode 100644 index 4d92fbfd77c..00000000000 --- a/homeassistant/components/iqvia/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u90ae\u653f\u7f16\u7801\u5df2\u88ab\u6ce8\u518c", - "invalid_zip_code": "\u90ae\u653f\u7f16\u7801\u65e0\u6548" - }, - "step": { - "user": { - "data": { - "zip_code": "\u90ae\u653f\u7f16\u7801" - }, - "description": "\u586b\u5199\u60a8\u7684\u7f8e\u56fd\u6216\u52a0\u62ff\u5927\u90ae\u653f\u7f16\u7801\u3002", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/zh-Hant.json b/homeassistant/components/iqvia/.translations/zh-Hant.json deleted file mode 100644 index a09db3b02c3..00000000000 --- a/homeassistant/components/iqvia/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u90f5\u905e\u5340\u865f\u5df2\u8a3b\u518a", - "invalid_zip_code": "\u90f5\u905e\u5340\u865f\u7121\u6548" - }, - "step": { - "user": { - "data": { - "zip_code": "\u90f5\u905e\u5340\u865f" - }, - "description": "\u586b\u5beb\u7f8e\u570b\u6216\u52a0\u62ff\u5927\u90f5\u905e\u5340\u865f\u3002", - "title": "IQVIA" - } - }, - "title": "IQVIA" - } -} \ No newline at end of file diff --git a/homeassistant/components/iqvia/__init__.py b/homeassistant/components/iqvia/__init__.py index 1f487dd345c..cd75e88bb44 100644 --- a/homeassistant/components/iqvia/__init__.py +++ b/homeassistant/components/iqvia/__init__.py @@ -239,7 +239,6 @@ class IQVIAEntity(Entity): def __init__(self, iqvia, sensor_type, name, icon, zip_code): """Initialize the sensor.""" - self._async_unsub_dispatcher_connect = None self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION} self._icon = icon self._iqvia = iqvia @@ -301,8 +300,8 @@ class IQVIAEntity(Entity): self.update_from_latest_data() self.async_write_ha_state() - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, TOPIC_DATA_UPDATE, update + self.async_on_remove( + async_dispatcher_connect(self.hass, TOPIC_DATA_UPDATE, update) ) await self._iqvia.async_register_api_interest(self._type) @@ -315,10 +314,6 @@ class IQVIAEntity(Entity): async def async_will_remove_from_hass(self): """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() - self._async_unsub_dispatcher_connect = None - self._iqvia.async_deregister_api_interest(self._type) if self._type == TYPE_ALLERGY_FORECAST: # Entities that lose interest in allergy forecast data should also lose diff --git a/homeassistant/components/iqvia/config_flow.py b/homeassistant/components/iqvia/config_flow.py index abec8eff09a..6a57f0f24d4 100644 --- a/homeassistant/components/iqvia/config_flow.py +++ b/homeassistant/components/iqvia/config_flow.py @@ -16,9 +16,9 @@ from .const import CONF_ZIP_CODE, DOMAIN @callback def configured_instances(hass): """Return a set of configured IQVIA instances.""" - return set( + return { entry.data[CONF_ZIP_CODE] for entry in hass.config_entries.async_entries(DOMAIN) - ) + } @config_entries.HANDLERS.register(DOMAIN) diff --git a/homeassistant/components/iqvia/manifest.json b/homeassistant/components/iqvia/manifest.json index 363269bc589..154cdd43c65 100644 --- a/homeassistant/components/iqvia/manifest.json +++ b/homeassistant/components/iqvia/manifest.json @@ -3,7 +3,6 @@ "name": "IQVIA", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/iqvia", - "requirements": ["numpy==1.18.1", "pyiqvia==0.2.1"], - "dependencies": [], + "requirements": ["numpy==1.18.2", "pyiqvia==0.2.1"], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/iqvia/strings.json b/homeassistant/components/iqvia/strings.json index 00f383be502..efc9582e20a 100644 --- a/homeassistant/components/iqvia/strings.json +++ b/homeassistant/components/iqvia/strings.json @@ -1,13 +1,10 @@ { "config": { - "title": "IQVIA", "step": { "user": { "title": "IQVIA", "description": "Fill out your U.S. or Canadian ZIP code.", - "data": { - "zip_code": "ZIP Code" - } + "data": { "zip_code": "ZIP Code" } } }, "error": { diff --git a/homeassistant/components/iqvia/translations/bg.json b/homeassistant/components/iqvia/translations/bg.json new file mode 100644 index 00000000000..8a233f30fff --- /dev/null +++ b/homeassistant/components/iqvia/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438\u044f\u0442 \u043a\u043e\u0434 \u0432\u0435\u0447\u0435 \u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d", + "invalid_zip_code": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438\u044f\u0442 \u043a\u043e\u0434 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d" + }, + "step": { + "user": { + "data": { + "zip_code": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u0434" + }, + "description": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0432\u0430\u0448\u0438\u044f \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0438\u043b\u0438 \u043a\u0430\u043d\u0430\u0434\u0441\u043a\u0438 \u043f\u043e\u0449\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u0434.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/ca.json b/homeassistant/components/iqvia/translations/ca.json new file mode 100644 index 00000000000..cf75f845ef1 --- /dev/null +++ b/homeassistant/components/iqvia/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Codi postal ja registrat", + "invalid_zip_code": "Codi postal incorrecte" + }, + "step": { + "user": { + "data": { + "zip_code": "Codi postal" + }, + "description": "Introdueix el teu codi postal d'Estats Units o Canad\u00e0.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/da.json b/homeassistant/components/iqvia/translations/da.json new file mode 100644 index 00000000000..ee478a67dd5 --- /dev/null +++ b/homeassistant/components/iqvia/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Postnummer er allerede registreret", + "invalid_zip_code": "Postnummer er ugyldig" + }, + "step": { + "user": { + "data": { + "zip_code": "Postnummer" + }, + "description": "Udfyld dit amerikanske eller canadiske postnummer.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/de.json b/homeassistant/components/iqvia/translations/de.json new file mode 100644 index 00000000000..c42f9092d9e --- /dev/null +++ b/homeassistant/components/iqvia/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Postleitzahl bereits registriert", + "invalid_zip_code": "Postleitzahl ist ung\u00fcltig" + }, + "step": { + "user": { + "data": { + "zip_code": "Postleitzahl" + }, + "description": "Trage eine US-amerikanische oder kanadische Postleitzahl ein.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/en.json b/homeassistant/components/iqvia/translations/en.json new file mode 100644 index 00000000000..63ffc145594 --- /dev/null +++ b/homeassistant/components/iqvia/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "ZIP code already registered", + "invalid_zip_code": "ZIP code is invalid" + }, + "step": { + "user": { + "data": { + "zip_code": "ZIP Code" + }, + "description": "Fill out your U.S. or Canadian ZIP code.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/es-419.json b/homeassistant/components/iqvia/translations/es-419.json similarity index 100% rename from homeassistant/components/iqvia/.translations/es-419.json rename to homeassistant/components/iqvia/translations/es-419.json diff --git a/homeassistant/components/iqvia/translations/es.json b/homeassistant/components/iqvia/translations/es.json new file mode 100644 index 00000000000..0fbc0ecceb0 --- /dev/null +++ b/homeassistant/components/iqvia/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "C\u00f3digo postal ya registrado", + "invalid_zip_code": "El c\u00f3digo postal no es v\u00e1lido" + }, + "step": { + "user": { + "data": { + "zip_code": "C\u00f3digo postal" + }, + "description": "Indica tu c\u00f3digo postal de Estados Unidos o Canad\u00e1.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/fr.json b/homeassistant/components/iqvia/translations/fr.json new file mode 100644 index 00000000000..c5b8d0cbd81 --- /dev/null +++ b/homeassistant/components/iqvia/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Code postal d\u00e9j\u00e0 enregistr\u00e9", + "invalid_zip_code": "Code postal invalide" + }, + "step": { + "user": { + "data": { + "zip_code": "Code postal" + }, + "description": "Entrez votre code postal am\u00e9ricain ou canadien.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/.translations/id.json b/homeassistant/components/iqvia/translations/id.json similarity index 100% rename from homeassistant/components/iqvia/.translations/id.json rename to homeassistant/components/iqvia/translations/id.json diff --git a/homeassistant/components/iqvia/translations/it.json b/homeassistant/components/iqvia/translations/it.json new file mode 100644 index 00000000000..85de80b5c97 --- /dev/null +++ b/homeassistant/components/iqvia/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Il CAP \u00e8 gi\u00e0 registrato", + "invalid_zip_code": "Il CAP non \u00e8 valido" + }, + "step": { + "user": { + "data": { + "zip_code": "CAP" + }, + "description": "Compila il tuo CAP americano o canadese.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/ko.json b/homeassistant/components/iqvia/translations/ko.json new file mode 100644 index 00000000000..6b7a63d102b --- /dev/null +++ b/homeassistant/components/iqvia/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\uc6b0\ud3b8\ubc88\ud638\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_zip_code": "\uc6b0\ud3b8\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "zip_code": "\uc6b0\ud3b8\ubc88\ud638" + }, + "description": "\ubbf8\uad6d \ub610\ub294 \uce90\ub098\ub2e4\uc758 \uc6b0\ud3b8\ubc88\ud638\ub97c \uae30\uc785\ud574\uc8fc\uc138\uc694.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/lb.json b/homeassistant/components/iqvia/translations/lb.json new file mode 100644 index 00000000000..5a1f257f8f9 --- /dev/null +++ b/homeassistant/components/iqvia/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Postleitzuel ass scho registr\u00e9iert", + "invalid_zip_code": "Postleitzuel ass ong\u00eblteg" + }, + "step": { + "user": { + "data": { + "zip_code": "Postleitzuel" + }, + "description": "Gitt \u00e4r U.S. oder Kanadesch Postleitzuel un.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/nl.json b/homeassistant/components/iqvia/translations/nl.json new file mode 100644 index 00000000000..a8e1ff5fa7d --- /dev/null +++ b/homeassistant/components/iqvia/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Postcode al geregistreerd", + "invalid_zip_code": "Postcode is ongeldig" + }, + "step": { + "user": { + "data": { + "zip_code": "Postcode" + }, + "description": "Vul uw Amerikaanse of Canadese postcode in.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/nn.json b/homeassistant/components/iqvia/translations/nn.json new file mode 100644 index 00000000000..edbbd37f82a --- /dev/null +++ b/homeassistant/components/iqvia/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/no.json b/homeassistant/components/iqvia/translations/no.json new file mode 100644 index 00000000000..37fb766ee36 --- /dev/null +++ b/homeassistant/components/iqvia/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Postnummer er allerede registrert", + "invalid_zip_code": "Postnummeret er ugyldig" + }, + "step": { + "user": { + "data": { + "zip_code": "Postnummer" + }, + "description": "Fyll ut ditt amerikanske eller kanadiske postnummer.", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/pl.json b/homeassistant/components/iqvia/translations/pl.json new file mode 100644 index 00000000000..38e10460ae9 --- /dev/null +++ b/homeassistant/components/iqvia/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Kod pocztowy jest ju\u017c zarejestrowany.", + "invalid_zip_code": "Kod pocztowy jest nieprawid\u0142owy" + }, + "step": { + "user": { + "data": { + "zip_code": "Kod pocztowy" + }, + "description": "Wprowad\u017a ameryka\u0144ski lub kanadyjski kod pocztowy.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/pt-BR.json b/homeassistant/components/iqvia/translations/pt-BR.json new file mode 100644 index 00000000000..3247c162e7b --- /dev/null +++ b/homeassistant/components/iqvia/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "C\u00f3digo postal j\u00e1 registado", + "invalid_zip_code": "C\u00f3digo postal inv\u00e1lido" + }, + "step": { + "user": { + "data": { + "zip_code": "C\u00f3digo postal" + }, + "description": "Preencha o seu CEP dos EUA ou Canad\u00e1.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/ru.json b/homeassistant/components/iqvia/translations/ru.json new file mode 100644 index 00000000000..69b1bd3745e --- /dev/null +++ b/homeassistant/components/iqvia/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d.", + "invalid_zip_code": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441." + }, + "step": { + "user": { + "data": { + "zip_code": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 (\u0434\u043b\u044f \u0421\u0428\u0410 \u0438\u043b\u0438 \u041a\u0430\u043d\u0430\u0434\u044b).", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/sl.json b/homeassistant/components/iqvia/translations/sl.json new file mode 100644 index 00000000000..69297d6aef9 --- /dev/null +++ b/homeassistant/components/iqvia/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Po\u0161tna \u0161tevilka je \u017ee registrirana", + "invalid_zip_code": "Po\u0161tna \u0161tevilka ni veljavna" + }, + "step": { + "user": { + "data": { + "zip_code": "Po\u0161tna \u0161tevilka" + }, + "description": "Izpolnite svojo ameri\u0161ko ali kanadsko po\u0161tno \u0161tevilko.", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/sv.json b/homeassistant/components/iqvia/translations/sv.json new file mode 100644 index 00000000000..3e47ca925db --- /dev/null +++ b/homeassistant/components/iqvia/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Postnummer redan registrerat", + "invalid_zip_code": "Ogiltigt postnummer" + }, + "step": { + "user": { + "data": { + "zip_code": "Postnummer" + }, + "description": "Fyll i ditt Amerikanska eller Kanadensiska postnummer", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/zh-Hans.json b/homeassistant/components/iqvia/translations/zh-Hans.json new file mode 100644 index 00000000000..066fae277b1 --- /dev/null +++ b/homeassistant/components/iqvia/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u90ae\u653f\u7f16\u7801\u5df2\u88ab\u6ce8\u518c", + "invalid_zip_code": "\u90ae\u653f\u7f16\u7801\u65e0\u6548" + }, + "step": { + "user": { + "data": { + "zip_code": "\u90ae\u653f\u7f16\u7801" + }, + "description": "\u586b\u5199\u60a8\u7684\u7f8e\u56fd\u6216\u52a0\u62ff\u5927\u90ae\u653f\u7f16\u7801\u3002", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/iqvia/translations/zh-Hant.json b/homeassistant/components/iqvia/translations/zh-Hant.json new file mode 100644 index 00000000000..035b952d20b --- /dev/null +++ b/homeassistant/components/iqvia/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u90f5\u905e\u5340\u865f\u5df2\u8a3b\u518a", + "invalid_zip_code": "\u90f5\u905e\u5340\u865f\u7121\u6548" + }, + "step": { + "user": { + "data": { + "zip_code": "\u90f5\u905e\u5340\u865f" + }, + "description": "\u586b\u5beb\u7f8e\u570b\u6216\u52a0\u62ff\u5927\u90f5\u905e\u5340\u865f\u3002", + "title": "IQVIA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/irish_rail_transport/manifest.json b/homeassistant/components/irish_rail_transport/manifest.json index 2861a9dbbb1..a6c9554d606 100644 --- a/homeassistant/components/irish_rail_transport/manifest.json +++ b/homeassistant/components/irish_rail_transport/manifest.json @@ -3,6 +3,5 @@ "name": "Irish Rail Transport", "documentation": "https://www.home-assistant.io/integrations/irish_rail_transport", "requirements": ["pyirishrail==0.0.2"], - "dependencies": [], "codeowners": ["@ttroy50"] } diff --git a/homeassistant/components/irish_rail_transport/sensor.py b/homeassistant/components/irish_rail_transport/sensor.py index 3bb7da52e22..76f8d0dfaab 100644 --- a/homeassistant/components/irish_rail_transport/sensor.py +++ b/homeassistant/components/irish_rail_transport/sensor.py @@ -97,9 +97,11 @@ class IrishRailTransportSensor(Entity): if self._times: next_up = "None" if len(self._times) > 1: - next_up = self._times[1][ATTR_ORIGIN] + " to " - next_up += self._times[1][ATTR_DESTINATION] + " in " - next_up += self._times[1][ATTR_DUE_IN] + next_up = ( + f"{self._times[1][ATTR_ORIGIN]} to " + f"{self._times[1][ATTR_DESTINATION]} in " + f"{self._times[1][ATTR_DUE_IN]}" + ) return { ATTR_ATTRIBUTION: ATTRIBUTION, diff --git a/homeassistant/components/islamic_prayer_times/__init__.py b/homeassistant/components/islamic_prayer_times/__init__.py index 642c31118bd..fa676221ea3 100644 --- a/homeassistant/components/islamic_prayer_times/__init__.py +++ b/homeassistant/components/islamic_prayer_times/__init__.py @@ -1 +1,206 @@ """The islamic_prayer_times component.""" +from datetime import timedelta +import logging + +from prayer_times_calculator import PrayerTimesCalculator, exceptions +from requests.exceptions import ConnectionError as ConnError +import voluptuous as vol + +from homeassistant.config_entries import SOURCE_IMPORT +from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers.dispatcher import async_dispatcher_send +from homeassistant.helpers.event import async_call_later, async_track_point_in_time +import homeassistant.util.dt as dt_util + +from .const import ( + CALC_METHODS, + CONF_CALC_METHOD, + DATA_UPDATED, + DEFAULT_CALC_METHOD, + DOMAIN, +) + +_LOGGER = logging.getLogger(__name__) + + +CONFIG_SCHEMA = vol.Schema( + { + DOMAIN: { + vol.Optional(CONF_CALC_METHOD, default=DEFAULT_CALC_METHOD): vol.In( + CALC_METHODS + ), + } + }, + extra=vol.ALLOW_EXTRA, +) + + +async def async_setup(hass, config): + """Import the Islamic Prayer component from config.""" + if DOMAIN in config: + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_IMPORT}, data=config[DOMAIN] + ) + ) + + return True + + +async def async_setup_entry(hass, config_entry): + """Set up the Islamic Prayer Component.""" + client = IslamicPrayerClient(hass, config_entry) + + if not await client.async_setup(): + return False + + hass.data.setdefault(DOMAIN, client) + return True + + +async def async_unload_entry(hass, config_entry): + """Unload Islamic Prayer entry from config_entry.""" + if hass.data[DOMAIN].event_unsub: + hass.data[DOMAIN].event_unsub() + hass.data.pop(DOMAIN) + await hass.config_entries.async_forward_entry_unload(config_entry, "sensor") + + return True + + +class IslamicPrayerClient: + """Islamic Prayer Client Object.""" + + def __init__(self, hass, config_entry): + """Initialize the Islamic Prayer client.""" + self.hass = hass + self.config_entry = config_entry + self.prayer_times_info = {} + self.available = True + self.event_unsub = None + + @property + def calc_method(self): + """Return the calculation method.""" + return self.config_entry.options[CONF_CALC_METHOD] + + def get_new_prayer_times(self): + """Fetch prayer times for today.""" + calc = PrayerTimesCalculator( + latitude=self.hass.config.latitude, + longitude=self.hass.config.longitude, + calculation_method=self.calc_method, + date=str(dt_util.now().date()), + ) + return calc.fetch_prayer_times() + + async def async_schedule_future_update(self): + """Schedule future update for sensors. + + Midnight is a calculated time. The specifics of the calculation + depends on the method of the prayer time calculation. This calculated + midnight is the time at which the time to pray the Isha prayers have + expired. + + Calculated Midnight: The Islamic midnight. + Traditional Midnight: 12:00AM + + Update logic for prayer times: + + If the Calculated Midnight is before the traditional midnight then wait + until the traditional midnight to run the update. This way the day + will have changed over and we don't need to do any fancy calculations. + + If the Calculated Midnight is after the traditional midnight, then wait + until after the calculated Midnight. We don't want to update the prayer + times too early or else the timings might be incorrect. + + Example: + calculated midnight = 11:23PM (before traditional midnight) + Update time: 12:00AM + + calculated midnight = 1:35AM (after traditional midnight) + update time: 1:36AM. + + """ + _LOGGER.debug("Scheduling next update for Islamic prayer times") + + now = dt_util.as_local(dt_util.now()) + + midnight_dt = self.prayer_times_info["Midnight"] + + if now > dt_util.as_local(midnight_dt): + next_update_at = midnight_dt + timedelta(days=1, minutes=1) + _LOGGER.debug( + "Midnight is after day the changes so schedule update for after Midnight the next day" + ) + else: + _LOGGER.debug( + "Midnight is before the day changes so schedule update for the next start of day" + ) + next_update_at = dt_util.start_of_local_day(now + timedelta(days=1)) + + _LOGGER.info("Next update scheduled for: %s", next_update_at) + + self.event_unsub = async_track_point_in_time( + self.hass, self.async_update, next_update_at + ) + + async def async_update(self, *_): + """Update sensors with new prayer times.""" + try: + prayer_times = await self.hass.async_add_executor_job( + self.get_new_prayer_times + ) + self.available = True + except (exceptions.InvalidResponseError, ConnError): + self.available = False + _LOGGER.debug("Error retrieving prayer times.") + async_call_later(self.hass, 60, self.async_update) + return + + for prayer, time in prayer_times.items(): + self.prayer_times_info[prayer] = dt_util.parse_datetime( + f"{dt_util.now().date()} {time}" + ) + await self.async_schedule_future_update() + + _LOGGER.debug("New prayer times retrieved. Updating sensors.") + async_dispatcher_send(self.hass, DATA_UPDATED) + + async def async_setup(self): + """Set up the Islamic prayer client.""" + await self.async_add_options() + + try: + await self.hass.async_add_executor_job(self.get_new_prayer_times) + except (exceptions.InvalidResponseError, ConnError): + raise ConfigEntryNotReady + + await self.async_update() + self.config_entry.add_update_listener(self.async_options_updated) + + self.hass.async_create_task( + self.hass.config_entries.async_forward_entry_setup( + self.config_entry, "sensor" + ) + ) + + return True + + async def async_add_options(self): + """Add options for entry.""" + if not self.config_entry.options: + data = dict(self.config_entry.data) + calc_method = data.pop(CONF_CALC_METHOD, DEFAULT_CALC_METHOD) + + self.hass.config_entries.async_update_entry( + self.config_entry, data=data, options={CONF_CALC_METHOD: calc_method} + ) + + @staticmethod + async def async_options_updated(hass, entry): + """Triggered by config entry options updates.""" + if hass.data[DOMAIN].event_unsub: + hass.data[DOMAIN].event_unsub() + await hass.data[DOMAIN].async_update() diff --git a/homeassistant/components/islamic_prayer_times/config_flow.py b/homeassistant/components/islamic_prayer_times/config_flow.py new file mode 100644 index 00000000000..d45997af76f --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/config_flow.py @@ -0,0 +1,59 @@ +"""Config flow for Islamic Prayer Times integration.""" +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.core import callback + +# pylint: disable=unused-import +from .const import CALC_METHODS, CONF_CALC_METHOD, DEFAULT_CALC_METHOD, DOMAIN, NAME + + +class IslamicPrayerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): + """Handle the Islamic Prayer config flow.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL + + @staticmethod + @callback + def async_get_options_flow(config_entry): + """Get the options flow for this handler.""" + return IslamicPrayerOptionsFlowHandler(config_entry) + + async def async_step_user(self, user_input=None): + """Handle a flow initialized by the user.""" + if self._async_current_entries(): + return self.async_abort(reason="one_instance_allowed") + + if user_input is None: + return self.async_show_form(step_id="user") + + return self.async_create_entry(title=NAME, data=user_input) + + async def async_step_import(self, import_config): + """Import from config.""" + return await self.async_step_user(user_input=import_config) + + +class IslamicPrayerOptionsFlowHandler(config_entries.OptionsFlow): + """Handle Islamic Prayer client options.""" + + def __init__(self, config_entry): + """Initialize options flow.""" + self.config_entry = config_entry + + async def async_step_init(self, user_input=None): + """Manage options.""" + if user_input is not None: + return self.async_create_entry(title="", data=user_input) + + options = { + vol.Optional( + CONF_CALC_METHOD, + default=self.config_entry.options.get( + CONF_CALC_METHOD, DEFAULT_CALC_METHOD + ), + ): vol.In(CALC_METHODS) + } + + return self.async_show_form(step_id="init", data_schema=vol.Schema(options)) diff --git a/homeassistant/components/islamic_prayer_times/const.py b/homeassistant/components/islamic_prayer_times/const.py new file mode 100644 index 00000000000..ee7512c2d7a --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/const.py @@ -0,0 +1,21 @@ +"""Constants for the Islamic Prayer component.""" +DOMAIN = "islamic_prayer_times" +NAME = "Islamic Prayer Times" +PRAYER_TIMES_ICON = "mdi:calendar-clock" + +SENSOR_TYPES = { + "Fajr": "prayer", + "Sunrise": "time", + "Dhuhr": "prayer", + "Asr": "prayer", + "Maghrib": "prayer", + "Isha": "prayer", + "Midnight": "time", +} + +CONF_CALC_METHOD = "calculation_method" + +CALC_METHODS = ["isna", "karachi", "mwl", "makkah"] +DEFAULT_CALC_METHOD = "isna" + +DATA_UPDATED = "Islamic_prayer_data_updated" diff --git a/homeassistant/components/islamic_prayer_times/manifest.json b/homeassistant/components/islamic_prayer_times/manifest.json index b9245bf0812..536e728e845 100644 --- a/homeassistant/components/islamic_prayer_times/manifest.json +++ b/homeassistant/components/islamic_prayer_times/manifest.json @@ -3,6 +3,6 @@ "name": "Islamic Prayer Times", "documentation": "https://www.home-assistant.io/integrations/islamic_prayer_times", "requirements": ["prayer_times_calculator==0.0.3"], - "dependencies": [], - "codeowners": [] + "codeowners": ["@engrbm87"], + "config_flow": true } diff --git a/homeassistant/components/islamic_prayer_times/sensor.py b/homeassistant/components/islamic_prayer_times/sensor.py index 076718e83a2..92a0a491d8d 100644 --- a/homeassistant/components/islamic_prayer_times/sensor.py +++ b/homeassistant/components/islamic_prayer_times/sensor.py @@ -1,186 +1,44 @@ """Platform to retrieve Islamic prayer times information for Home Assistant.""" -from datetime import datetime, timedelta import logging -from prayer_times_calculator import PrayerTimesCalculator -import voluptuous as vol - -from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import DEVICE_CLASS_TIMESTAMP -import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity -from homeassistant.helpers.event import async_track_point_in_time -import homeassistant.util.dt as dt_util + +from .const import DATA_UPDATED, DOMAIN, PRAYER_TIMES_ICON, SENSOR_TYPES _LOGGER = logging.getLogger(__name__) -PRAYER_TIMES_ICON = "mdi:calendar-clock" -SENSOR_TYPES = ["fajr", "sunrise", "dhuhr", "asr", "maghrib", "isha", "midnight"] - -CONF_CALC_METHOD = "calculation_method" -CONF_SENSORS = "sensors" - -CALC_METHODS = ["karachi", "isna", "mwl", "makkah"] -DEFAULT_CALC_METHOD = "isna" -DEFAULT_SENSORS = ["fajr", "dhuhr", "asr", "maghrib", "isha"] - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_CALC_METHOD, default=DEFAULT_CALC_METHOD): vol.In( - CALC_METHODS - ), - vol.Optional(CONF_SENSORS, default=DEFAULT_SENSORS): vol.All( - cv.ensure_list, vol.Length(min=1), [vol.In(SENSOR_TYPES)] - ), - } -) - - -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the Islamic prayer times sensor platform.""" - latitude = hass.config.latitude - longitude = hass.config.longitude - calc_method = config.get(CONF_CALC_METHOD) - if None in (latitude, longitude): - _LOGGER.error("Latitude or longitude not set in Home Assistant config") - return + client = hass.data[DOMAIN] - prayer_times_data = IslamicPrayerTimesData(latitude, longitude, calc_method) + entities = [] + for sensor_type in SENSOR_TYPES: + entities.append(IslamicPrayerTimeSensor(sensor_type, client)) - prayer_times = prayer_times_data.get_new_prayer_times() - - sensors = [] - for sensor_type in config[CONF_SENSORS]: - sensors.append(IslamicPrayerTimeSensor(sensor_type, prayer_times_data)) - - async_add_entities(sensors, True) - - # schedule the next update for the sensors - await schedule_future_update( - hass, sensors, prayer_times["Midnight"], prayer_times_data - ) - - -async def schedule_future_update(hass, sensors, midnight_time, prayer_times_data): - """Schedule future update for sensors. - - Midnight is a calculated time. The specifics of the calculation - depends on the method of the prayer time calculation. This calculated - midnight is the time at which the time to pray the Isha prayers have - expired. - - Calculated Midnight: The Islamic midnight. - Traditional Midnight: 12:00AM - - Update logic for prayer times: - - If the Calculated Midnight is before the traditional midnight then wait - until the traditional midnight to run the update. This way the day - will have changed over and we don't need to do any fancy calculations. - - If the Calculated Midnight is after the traditional midnight, then wait - until after the calculated Midnight. We don't want to update the prayer - times too early or else the timings might be incorrect. - - Example: - calculated midnight = 11:23PM (before traditional midnight) - Update time: 12:00AM - - calculated midnight = 1:35AM (after traditional midnight) - update time: 1:36AM. - - """ - _LOGGER.debug("Scheduling next update for Islamic prayer times") - - now = dt_util.as_local(dt_util.now()) - today = now.date() - - midnight_dt_str = f"{today}::{midnight_time}" - midnight_dt = datetime.strptime(midnight_dt_str, "%Y-%m-%d::%H:%M") - - if now > dt_util.as_local(midnight_dt): - _LOGGER.debug( - "Midnight is after day the changes so schedule update " - "for after Midnight the next day" - ) - - next_update_at = midnight_dt + timedelta(days=1, minutes=1) - else: - _LOGGER.debug( - "Midnight is before the day changes so schedule update for the " - "next start of day" - ) - - tomorrow = now + timedelta(days=1) - next_update_at = dt_util.start_of_local_day(tomorrow) - - _LOGGER.debug("Next update scheduled for: %s", str(next_update_at)) - - async def update_sensors(_): - """Update sensors with new prayer times.""" - # Update prayer times - prayer_times = prayer_times_data.get_new_prayer_times() - - _LOGGER.debug("New prayer times retrieved. Updating sensors.") - - # Update all prayer times sensors - for sensor in sensors: - sensor.async_schedule_update_ha_state(True) - - # Schedule next update - await schedule_future_update( - hass, sensors, prayer_times["Midnight"], prayer_times_data - ) - - async_track_point_in_time(hass, update_sensors, next_update_at) - - -class IslamicPrayerTimesData: - """Data object for Islamic prayer times.""" - - def __init__(self, latitude, longitude, calc_method): - """Create object to hold data.""" - self.latitude = latitude - self.longitude = longitude - self.calc_method = calc_method - self.prayer_times_info = None - - def get_new_prayer_times(self): - """Fetch prayer times for today.""" - - today = datetime.today().strftime("%Y-%m-%d") - - calc = PrayerTimesCalculator( - latitude=self.latitude, - longitude=self.longitude, - calculation_method=self.calc_method, - date=str(today), - ) - - self.prayer_times_info = calc.fetch_prayer_times() - return self.prayer_times_info + async_add_entities(entities, True) class IslamicPrayerTimeSensor(Entity): """Representation of an Islamic prayer time sensor.""" - def __init__(self, sensor_type, prayer_times_data): + def __init__(self, sensor_type, client): """Initialize the Islamic prayer time sensor.""" self.sensor_type = sensor_type - self.entity_id = f"sensor.islamic_prayer_time_{self.sensor_type}" - self.prayer_times_data = prayer_times_data - self._name = self.sensor_type.capitalize() - self._device_class = DEVICE_CLASS_TIMESTAMP - prayer_time = self.prayer_times_data.prayer_times_info[self._name] - pt_dt = self.get_prayer_time_as_dt(prayer_time) - self._state = pt_dt.isoformat() + self.client = client @property def name(self): """Return the name of the sensor.""" - return self._name + return f"{self.sensor_type} {SENSOR_TYPES[self.sensor_type]}" + + @property + def unique_id(self): + """Return the unique id of the entity.""" + return self.sensor_type @property def icon(self): @@ -190,7 +48,7 @@ class IslamicPrayerTimeSensor(Entity): @property def state(self): """Return the state of the sensor.""" - return self._state + return self.client.prayer_times_info.get(self.sensor_type).isoformat() @property def should_poll(self): @@ -200,18 +58,10 @@ class IslamicPrayerTimeSensor(Entity): @property def device_class(self): """Return the device class.""" - return self._device_class + return DEVICE_CLASS_TIMESTAMP - @staticmethod - def get_prayer_time_as_dt(prayer_time): - """Create a datetime object for the respective prayer time.""" - today = datetime.today().strftime("%Y-%m-%d") - date_time_str = f"{today} {prayer_time}" - pt_dt = dt_util.parse_datetime(date_time_str) - return pt_dt - - async def async_update(self): - """Update the sensor.""" - prayer_time = self.prayer_times_data.prayer_times_info[self.name] - pt_dt = self.get_prayer_time_as_dt(prayer_time) - self._state = pt_dt.isoformat() + async def async_added_to_hass(self): + """Handle entity which will be added.""" + self.async_on_remove( + async_dispatcher_connect(self.hass, DATA_UPDATED, self.async_write_ha_state) + ) diff --git a/homeassistant/components/islamic_prayer_times/strings.json b/homeassistant/components/islamic_prayer_times/strings.json new file mode 100644 index 00000000000..857ce4c2dff --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/strings.json @@ -0,0 +1,23 @@ +{ + "title": "Islamic Prayer Times", + "config": { + "step": { + "user": { + "title": "Set up Islamic Prayer Times", + "description": "Do you want to set up Islamic Prayer Times?" + } + }, + "abort": { + "one_instance_allowed": "Only a single instance is necessary." + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Prayer calculation method" + } + } + } + } +} diff --git a/homeassistant/components/islamic_prayer_times/translations/ca.json b/homeassistant/components/islamic_prayer_times/translations/ca.json new file mode 100644 index 00000000000..6b01d442df8 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "step": { + "user": { + "description": "Vols configurar temps de preg\u00e0ria isl\u00e0mica?", + "title": "Configuraci\u00f3 de temps de preg\u00e0ria isl\u00e0mica" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "M\u00e8tode de c\u00e0lcul dels temps" + } + } + } + }, + "title": "Temps de preg\u00e0ria isl\u00e0mica" +} \ 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 new file mode 100644 index 00000000000..85020d2bf51 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/de.json @@ -0,0 +1,8 @@ +{ + "config": { + "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/islamic_prayer_times/translations/en.json b/homeassistant/components/islamic_prayer_times/translations/en.json new file mode 100644 index 00000000000..e9781c17fb1 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/en.json @@ -0,0 +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" + } + } + } + }, + "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 new file mode 100644 index 00000000000..8dc6c5e5cf8 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "step": { + "user": { + "description": "\u00bfQuieres configurar las Horas de Oraci\u00f3n Isl\u00e1mica?", + "title": "Configurar las Horas de Oraci\u00f3n Isl\u00e1mica" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "M\u00e9todo de c\u00e1lculo de la oraci\u00f3n" + } + } + } + }, + "title": "Horas de Oraci\u00f3n Isl\u00e1mica" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/it.json b/homeassistant/components/islamic_prayer_times/translations/it.json new file mode 100644 index 00000000000..02f3c5df2ec --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u00c8 necessaria solo una singola istanza." + }, + "step": { + "user": { + "description": "Vuoi impostare i tempi di preghiera islamici?", + "title": "Impostare i tempi di preghiera islamici" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Metodo di calcolo della preghiera" + } + } + } + }, + "title": "Tempi di preghiera islamica" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/lb.json b/homeassistant/components/islamic_prayer_times/translations/lb.json new file mode 100644 index 00000000000..7ba93417436 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "step": { + "user": { + "description": "Soll Islamesch Gebied z\u00e4iten konfigur\u00e9iert ginn?", + "title": "Islamesch Gebied z\u00e4iten ariichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Gebieder Berechnungsmethod" + } + } + } + }, + "title": "Islamesch Gebied z\u00e4iten" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/nl.json b/homeassistant/components/islamic_prayer_times/translations/nl.json new file mode 100644 index 00000000000..2f69b417998 --- /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": { + "calculation_method": "Berekeningsmethode voor het gebed" + } + } + } + }, + "title": "Islamitische gebedstijden" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/no.json b/homeassistant/components/islamic_prayer_times/translations/no.json new file mode 100644 index 00000000000..59e601648ff --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Kun en enkelt forekomst er n\u00f8dvendig." + }, + "step": { + "user": { + "description": "Vil du sette opp islamske b\u00f8nnetider?", + "title": "Sett opp islamske b\u00f8nnetider" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Metode for beregning av b\u00f8nn" + } + } + } + }, + "title": "Islamske b\u00f8nnetider" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/pl.json b/homeassistant/components/islamic_prayer_times/translations/pl.json new file mode 100644 index 00000000000..b0f87a15404 --- /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": { + "calculation_method": "Metoda kalkulacji modlitwy" + } + } + } + }, + "title": "Islamskie czasy modlitwy" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/ru.json b/homeassistant/components/islamic_prayer_times/translations/ru.json new file mode 100644 index 00000000000..799c4bc5500 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u043c\u0430\u0437\u0430?", + "title": "\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u043c\u0430\u0437\u0430" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "\u041c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430" + } + } + } + }, + "title": "\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u043c\u0430\u0437\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json b/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json new file mode 100644 index 00000000000..34773b88ac0 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u4f0a\u65af\u862d\u7948\u79b1\u6642\u9593\uff1f", + "title": "\u8a2d\u5b9a\u4f0a\u65af\u862d\u7948\u79b1\u6642\u9593" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "\u7948\u79b1\u8a08\u7b97\u65b9\u5f0f" + } + } + } + }, + "title": "\u4f0a\u65af\u862d\u7948\u79b1\u6642\u9593" +} \ No newline at end of file diff --git a/homeassistant/components/iss/manifest.json b/homeassistant/components/iss/manifest.json index d8324e490c3..7fd98ebcdde 100644 --- a/homeassistant/components/iss/manifest.json +++ b/homeassistant/components/iss/manifest.json @@ -3,6 +3,5 @@ "name": "International Space Station (ISS)", "documentation": "https://www.home-assistant.io/integrations/iss", "requirements": ["pyiss==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/isy994/binary_sensor.py b/homeassistant/components/isy994/binary_sensor.py index 917dedd5c53..30b26ea5d24 100644 --- a/homeassistant/components/isy994/binary_sensor.py +++ b/homeassistant/components/isy994/binary_sensor.py @@ -319,7 +319,6 @@ class ISYBinarySensorHeartbeat(ISYDevice, BinarySensorDevice): We listen directly to the Control events for this device. """ - pass @property def value(self) -> object: diff --git a/homeassistant/components/isy994/light.py b/homeassistant/components/isy994/light.py index be94f8dd27a..a8c30220637 100644 --- a/homeassistant/components/isy994/light.py +++ b/homeassistant/components/isy994/light.py @@ -24,6 +24,11 @@ def setup_platform( class ISYLightDevice(ISYDevice, Light): """Representation of an ISY994 light device.""" + def __init__(self, node) -> None: + """Initialize the ISY994 light device.""" + super().__init__(node) + self._last_brightness = self.brightness + @property def is_on(self) -> bool: """Get whether the ISY994 light is on.""" @@ -38,12 +43,21 @@ class ISYLightDevice(ISYDevice, Light): def turn_off(self, **kwargs) -> None: """Send the turn off command to the ISY994 light device.""" + self._last_brightness = self.brightness if not self._node.off(): _LOGGER.debug("Unable to turn off light") + def on_update(self, event: object) -> None: + """Save brightness in the update event from the ISY994 Node.""" + if not self.is_unknown() and self.value != 0: + self._last_brightness = self.value + super().on_update(event) + # pylint: disable=arguments-differ def turn_on(self, brightness=None, **kwargs) -> None: """Send the turn on command to the ISY994 light device.""" + if brightness is None and self._last_brightness is not None: + brightness = self._last_brightness if not self._node.on(val=brightness): _LOGGER.debug("Unable to turn on light") diff --git a/homeassistant/components/isy994/manifest.json b/homeassistant/components/isy994/manifest.json index 25793bfc0c0..0b48528335d 100644 --- a/homeassistant/components/isy994/manifest.json +++ b/homeassistant/components/isy994/manifest.json @@ -3,6 +3,5 @@ "name": "Universal Devices ISY994", "documentation": "https://www.home-assistant.io/integrations/isy994", "requirements": ["PyISY==1.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/isy994/sensor.py b/homeassistant/components/isy994/sensor.py index 9e2f3e90957..1252d0ef53b 100644 --- a/homeassistant/components/isy994/sensor.py +++ b/homeassistant/components/isy994/sensor.py @@ -5,6 +5,12 @@ from typing import Callable from homeassistant.components.sensor import DOMAIN from homeassistant.const import ( CONCENTRATION_PARTS_PER_MILLION, + DEGREE, + FREQUENCY_HERTZ, + LENGTH_CENTIMETERS, + LENGTH_KILOMETERS, + LENGTH_METERS, + MASS_KILOGRAMS, POWER_WATT, SPEED_KILOMETERS_PER_HOUR, SPEED_METERS_PER_SECOND, @@ -19,7 +25,8 @@ from homeassistant.const import ( TIME_SECONDS, TIME_YEARS, UNIT_PERCENTAGE, - UNIT_UV_INDEX, + UV_INDEX, + VOLT, ) from homeassistant.helpers.typing import ConfigType @@ -31,7 +38,7 @@ UOM_FRIENDLY_NAME = { "1": "amp", "3": f"btu/{TIME_HOURS}", "4": TEMP_CELSIUS, - "5": "cm", + "5": LENGTH_CENTIMETERS, "6": "ft³", "7": f"ft³/{TIME_MINUTES}", "8": "m³", @@ -39,7 +46,7 @@ UOM_FRIENDLY_NAME = { "10": TIME_DAYS, "12": "dB", "13": "dB A", - "14": "°", + "14": DEGREE, "16": "macroseismic", "17": TEMP_FAHRENHEIT, "18": "ft", @@ -52,7 +59,7 @@ UOM_FRIENDLY_NAME = { "25": "index", "26": "K", "27": "keyword", - "28": "kg", + "28": MASS_KILOGRAMS, "29": "kV", "30": "kW", "31": "kPa", @@ -62,7 +69,7 @@ UOM_FRIENDLY_NAME = { "35": "l", "36": "lx", "37": "mercalli", - "38": "m", + "38": LENGTH_METERS, "39": "m³/hr", "40": SPEED_METERS_PER_SECOND, "41": "mA", @@ -90,23 +97,23 @@ UOM_FRIENDLY_NAME = { "64": "shindo", "65": "SML", "69": "gal", - "71": UNIT_UV_INDEX, - "72": "V", + "71": UV_INDEX, + "72": VOLT, "73": POWER_WATT, - "74": "W/m²", + "74": f"{POWER_WATT}/m²", "75": "weekday", - "76": "Wind Direction (°)", + "76": f"Wind Direction ({DEGREE})", "77": TIME_YEARS, "82": "mm", - "83": "km", + "83": LENGTH_KILOMETERS, "85": "ohm", "86": "kOhm", "87": "m³/m³", "88": "Water activity", "89": "RPM", - "90": "Hz", - "91": "° (Relative to North)", - "92": "° (Relative to South)", + "90": FREQUENCY_HERTZ, + "91": f"{DEGREE} (Relative to North)", + "92": f"{DEGREE} (Relative to South)", } UOM_TO_STATES = { diff --git a/homeassistant/components/itach/manifest.json b/homeassistant/components/itach/manifest.json index 748bfe0a817..90d69a9a9b1 100644 --- a/homeassistant/components/itach/manifest.json +++ b/homeassistant/components/itach/manifest.json @@ -3,6 +3,5 @@ "name": "Global Caché iTach TCP/IP to IR", "documentation": "https://www.home-assistant.io/integrations/itach", "requirements": ["pyitachip2ir==0.0.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/itunes/manifest.json b/homeassistant/components/itunes/manifest.json index d7e9938eec8..206f6e0a1d2 100644 --- a/homeassistant/components/itunes/manifest.json +++ b/homeassistant/components/itunes/manifest.json @@ -2,7 +2,5 @@ "domain": "itunes", "name": "Apple iTunes", "documentation": "https://www.home-assistant.io/integrations/itunes", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/itunes/media_player.py b/homeassistant/components/itunes/media_player.py index 327cbf5e9ac..e96c40b13b6 100644 --- a/homeassistant/components/itunes/media_player.py +++ b/homeassistant/components/itunes/media_player.py @@ -163,7 +163,7 @@ class Itunes: if found_playlists: playlist = found_playlists[0] - path = "/playlists/" + playlist["id"] + "/play" + path = f"/playlists/{playlist['id']}/play" return self._request("PUT", path) def artwork_url(self): @@ -198,7 +198,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): config.get(CONF_NAME), config.get(CONF_HOST), config.get(CONF_PORT), - config.get(CONF_SSL), + config[CONF_SSL], add_entities, ) ] @@ -324,7 +324,7 @@ class ItunesDevice(MediaPlayerDevice): self.player_state in (STATE_PLAYING, STATE_IDLE, STATE_PAUSED) and self.current_title is not None ): - return self.client.artwork_url() + "?id=" + self.content_id + return f"{self.client.artwork_url()}?id={self.content_id}" return ( "https://cloud.githubusercontent.com/assets/260/9829355" diff --git a/homeassistant/components/izone/.translations/bg.json b/homeassistant/components/izone/.translations/bg.json deleted file mode 100644 index 26a55aa4ed8..00000000000 --- a/homeassistant/components/izone/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 iZone \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", - "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 iZone." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/ca.json b/homeassistant/components/izone/.translations/ca.json deleted file mode 100644 index b80d9bee4e2..00000000000 --- a/homeassistant/components/izone/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'han trobat dispositius iZone a la xarxa.", - "single_instance_allowed": "Nom\u00e9s cal una \u00fanica configuraci\u00f3 de iZone." - }, - "step": { - "confirm": { - "description": "Vols configurar iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/da.json b/homeassistant/components/izone/.translations/da.json deleted file mode 100644 index 9dc3d88322c..00000000000 --- a/homeassistant/components/izone/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Der blev ikke fundet nogen iZone-enheder p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af iZone" - }, - "step": { - "confirm": { - "description": "Vil du konfigurere iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/de.json b/homeassistant/components/izone/.translations/de.json deleted file mode 100644 index 4a5bace5928..00000000000 --- a/homeassistant/components/izone/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Es wurden keine iZone-Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Es ist nur eine einzige Konfiguration von iZone erforderlich." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du iZone einrichten?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/en.json b/homeassistant/components/izone/.translations/en.json deleted file mode 100644 index 5293ad2a1fe..00000000000 --- a/homeassistant/components/izone/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No iZone devices found on the network.", - "single_instance_allowed": "Only a single configuration of iZone is necessary." - }, - "step": { - "confirm": { - "description": "Do you want to set up iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/es.json b/homeassistant/components/izone/.translations/es.json deleted file mode 100644 index 9f82b1a7b1f..00000000000 --- a/homeassistant/components/izone/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se han encontrado dispositivos iZone en la red.", - "single_instance_allowed": "Solo es necesaria una \u00fanica configuraci\u00f3n de iZone." - }, - "step": { - "confirm": { - "description": "\u00bfQuieres configurar iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/fr.json b/homeassistant/components/izone/.translations/fr.json deleted file mode 100644 index c90416b0619..00000000000 --- a/homeassistant/components/izone/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun p\u00e9riph\u00e9rique iZone trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration d'iZone est n\u00e9cessaire." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/hu.json b/homeassistant/components/izone/.translations/hu.json deleted file mode 100644 index 79c621ce125..00000000000 --- a/homeassistant/components/izone/.translations/hu.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "description": "Szeretn\u00e9 be\u00e1ll\u00edtani az iZone-t?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/it.json b/homeassistant/components/izone/.translations/it.json deleted file mode 100644 index 5498624a061..00000000000 --- a/homeassistant/components/izone/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nessun dispositivo iZone trovato in rete.", - "single_instance_allowed": "\u00c8 necessaria una sola configurazione di iZone." - }, - "step": { - "confirm": { - "description": "Vuoi configurare iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/ko.json b/homeassistant/components/izone/.translations/ko.json deleted file mode 100644 index 91593b26511..00000000000 --- a/homeassistant/components/izone/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "iZone \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/lb.json b/homeassistant/components/izone/.translations/lb.json deleted file mode 100644 index c6e075683ad..00000000000 --- a/homeassistant/components/izone/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng iZone Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun iZone ass n\u00e9ideg." - }, - "step": { - "confirm": { - "description": "Soll iZone konfigur\u00e9iert ginn?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/nl.json b/homeassistant/components/izone/.translations/nl.json deleted file mode 100644 index 979441f7288..00000000000 --- a/homeassistant/components/izone/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen iZone-apparaten gevonden op het netwerk.", - "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van iZone nodig." - }, - "step": { - "confirm": { - "description": "Wilt u iZone instellen?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/nn.json b/homeassistant/components/izone/.translations/nn.json deleted file mode 100644 index eaf7601be9c..00000000000 --- a/homeassistant/components/izone/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/no.json b/homeassistant/components/izone/.translations/no.json deleted file mode 100644 index 6af3c9b063b..00000000000 --- a/homeassistant/components/izone/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Finner ingen iZone-enheter p\u00e5 nettverket.", - "single_instance_allowed": "Bare en konfigurasjon av iZone er n\u00f8dvendig." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere iZone?", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/pl.json b/homeassistant/components/izone/.translations/pl.json deleted file mode 100644 index 4f90cf71cbc..00000000000 --- a/homeassistant/components/izone/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 iZone.", - "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja iZone." - }, - "step": { - "confirm": { - "description": "Chcesz skonfigurowa\u0107 iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/ru.json b/homeassistant/components/izone/.translations/ru.json deleted file mode 100644 index 7e632c8dd62..00000000000 --- a/homeassistant/components/izone/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 iZone \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/sl.json b/homeassistant/components/izone/.translations/sl.json deleted file mode 100644 index cb2fe821297..00000000000 --- a/homeassistant/components/izone/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V omre\u017eju ni najdenih naprav iZone.", - "single_instance_allowed": "Potrebna je samo ena konfiguracija iZone." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/sv.json b/homeassistant/components/izone/.translations/sv.json deleted file mode 100644 index c2c952d69fe..00000000000 --- a/homeassistant/components/izone/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga iZone-enheter hittades i n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration av iZone \u00e4r n\u00f6dv\u00e4ndig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera iZone?", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/.translations/zh-Hant.json b/homeassistant/components/izone/.translations/zh-Hant.json deleted file mode 100644 index 7448100158e..00000000000 --- a/homeassistant/components/izone/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 iZone \u8a2d\u5099\u3002", - "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 iZone \u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a iZone\uff1f", - "title": "iZone" - } - }, - "title": "iZone" - } -} \ No newline at end of file diff --git a/homeassistant/components/izone/climate.py b/homeassistant/components/izone/climate.py index dde71d14a9c..b17313925a8 100644 --- a/homeassistant/components/izone/climate.py +++ b/homeassistant/components/izone/climate.py @@ -175,7 +175,7 @@ class ControllerDevice(ClimateDevice): """Handle controller data updates.""" if ctrl is not self._controller: return - self.async_schedule_update_ha_state() + self.async_write_ha_state() for zone in self.zones.values(): zone.async_schedule_update_ha_state() @@ -210,7 +210,7 @@ class ControllerDevice(ClimateDevice): ) self._available = available - self.async_schedule_update_ha_state() + self.async_write_ha_state() for zone in self.zones.values(): zone.async_schedule_update_ha_state() @@ -439,7 +439,7 @@ class ZoneDevice(ClimateDevice): if zone is not self._zone: return self._name = zone.name.title() - self.async_schedule_update_ha_state() + self.async_write_ha_state() self.async_on_remove( async_dispatcher_connect(self.hass, DISPATCH_ZONE_UPDATE, zone_update) @@ -549,7 +549,7 @@ class ZoneDevice(ClimateDevice): """Set new target operation mode.""" mode = self._state_to_pizone[hvac_mode] await self._controller.wrap_and_catch(self._zone.set_mode(mode)) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self): @@ -562,9 +562,9 @@ class ZoneDevice(ClimateDevice): await self._controller.wrap_and_catch(self._zone.set_mode(Zone.Mode.AUTO)) else: await self._controller.wrap_and_catch(self._zone.set_mode(Zone.Mode.OPEN)) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self): """Turn device off (close zone).""" await self._controller.wrap_and_catch(self._zone.set_mode(Zone.Mode.CLOSE)) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/izone/manifest.json b/homeassistant/components/izone/manifest.json index 9e982b19cf8..1db99b1a0e3 100644 --- a/homeassistant/components/izone/manifest.json +++ b/homeassistant/components/izone/manifest.json @@ -3,7 +3,6 @@ "name": "iZone", "documentation": "https://www.home-assistant.io/integrations/izone", "requirements": ["python-izone==1.1.2"], - "dependencies": [], "codeowners": ["@Swamp-Ig"], "config_flow": true } diff --git a/homeassistant/components/izone/strings.json b/homeassistant/components/izone/strings.json index 7cb14b03c6c..9772bd4c93c 100644 --- a/homeassistant/components/izone/strings.json +++ b/homeassistant/components/izone/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "iZone", "step": { "confirm": { - "title": "iZone", "description": "Do you want to set up iZone?" } }, diff --git a/homeassistant/components/izone/translations/bg.json b/homeassistant/components/izone/translations/bg.json new file mode 100644 index 00000000000..2aed0f309b4 --- /dev/null +++ b/homeassistant/components/izone/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 iZone \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", + "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 iZone." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/ca.json b/homeassistant/components/izone/translations/ca.json new file mode 100644 index 00000000000..016e0fb070e --- /dev/null +++ b/homeassistant/components/izone/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'han trobat dispositius iZone a la xarxa.", + "single_instance_allowed": "Nom\u00e9s cal una \u00fanica configuraci\u00f3 de iZone." + }, + "step": { + "confirm": { + "description": "Vols configurar iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/da.json b/homeassistant/components/izone/translations/da.json new file mode 100644 index 00000000000..6c08029d9e0 --- /dev/null +++ b/homeassistant/components/izone/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Der blev ikke fundet nogen iZone-enheder p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af iZone" + }, + "step": { + "confirm": { + "description": "Vil du konfigurere iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/de.json b/homeassistant/components/izone/translations/de.json new file mode 100644 index 00000000000..47032413607 --- /dev/null +++ b/homeassistant/components/izone/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Es wurden keine iZone-Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Es ist nur eine einzige Konfiguration von iZone erforderlich." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du iZone einrichten?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/en.json b/homeassistant/components/izone/translations/en.json new file mode 100644 index 00000000000..7c9b7008f24 --- /dev/null +++ b/homeassistant/components/izone/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No iZone devices found on the network.", + "single_instance_allowed": "Only a single configuration of iZone is necessary." + }, + "step": { + "confirm": { + "description": "Do you want to set up iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/es.json b/homeassistant/components/izone/translations/es.json new file mode 100644 index 00000000000..664cc72d96f --- /dev/null +++ b/homeassistant/components/izone/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se han encontrado dispositivos iZone en la red.", + "single_instance_allowed": "Solo es necesaria una \u00fanica configuraci\u00f3n de iZone." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/fr.json b/homeassistant/components/izone/translations/fr.json new file mode 100644 index 00000000000..9fb3163ae15 --- /dev/null +++ b/homeassistant/components/izone/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun p\u00e9riph\u00e9rique iZone trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration d'iZone est n\u00e9cessaire." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/hu.json b/homeassistant/components/izone/translations/hu.json new file mode 100644 index 00000000000..76b88ebb6b4 --- /dev/null +++ b/homeassistant/components/izone/translations/hu.json @@ -0,0 +1,10 @@ +{ + "config": { + "step": { + "confirm": { + "description": "Szeretn\u00e9 be\u00e1ll\u00edtani az iZone-t?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/it.json b/homeassistant/components/izone/translations/it.json new file mode 100644 index 00000000000..8fd2930e8ff --- /dev/null +++ b/homeassistant/components/izone/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nessun dispositivo iZone trovato in rete.", + "single_instance_allowed": "\u00c8 necessaria una sola configurazione di iZone." + }, + "step": { + "confirm": { + "description": "Vuoi configurare iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/ko.json b/homeassistant/components/izone/translations/ko.json new file mode 100644 index 00000000000..4174226ab55 --- /dev/null +++ b/homeassistant/components/izone/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "iZone \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/lb.json b/homeassistant/components/izone/translations/lb.json new file mode 100644 index 00000000000..5b0576a12eb --- /dev/null +++ b/homeassistant/components/izone/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng iZone Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun iZone ass n\u00e9ideg." + }, + "step": { + "confirm": { + "description": "Soll iZone konfigur\u00e9iert ginn?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/nl.json b/homeassistant/components/izone/translations/nl.json new file mode 100644 index 00000000000..21dfa2f9ad4 --- /dev/null +++ b/homeassistant/components/izone/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen iZone-apparaten gevonden op het netwerk.", + "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van iZone nodig." + }, + "step": { + "confirm": { + "description": "Wilt u iZone instellen?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/nn.json b/homeassistant/components/izone/translations/nn.json new file mode 100644 index 00000000000..af7146230d0 --- /dev/null +++ b/homeassistant/components/izone/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/no.json b/homeassistant/components/izone/translations/no.json new file mode 100644 index 00000000000..49c806aa564 --- /dev/null +++ b/homeassistant/components/izone/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Finner ingen iZone-enheter p\u00e5 nettverket.", + "single_instance_allowed": "Bare en konfigurasjon av iZone er n\u00f8dvendig." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere iZone?", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/pl.json b/homeassistant/components/izone/translations/pl.json new file mode 100644 index 00000000000..2d0bcdd3292 --- /dev/null +++ b/homeassistant/components/izone/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 iZone.", + "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja iZone." + }, + "step": { + "confirm": { + "description": "Chcesz skonfigurowa\u0107 iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/ru.json b/homeassistant/components/izone/translations/ru.json new file mode 100644 index 00000000000..41c39c32c68 --- /dev/null +++ b/homeassistant/components/izone/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 iZone \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/sl.json b/homeassistant/components/izone/translations/sl.json new file mode 100644 index 00000000000..2e05823ebe6 --- /dev/null +++ b/homeassistant/components/izone/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V omre\u017eju ni najdenih naprav iZone.", + "single_instance_allowed": "Potrebna je samo ena konfiguracija iZone." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/sv.json b/homeassistant/components/izone/translations/sv.json new file mode 100644 index 00000000000..fce7cd70960 --- /dev/null +++ b/homeassistant/components/izone/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga iZone-enheter hittades i n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration av iZone \u00e4r n\u00f6dv\u00e4ndig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera iZone?", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/zh-Hant.json b/homeassistant/components/izone/translations/zh-Hant.json new file mode 100644 index 00000000000..7f7bb327ea9 --- /dev/null +++ b/homeassistant/components/izone/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 iZone \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 iZone \u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a iZone\uff1f", + "title": "iZone" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/jewish_calendar/manifest.json b/homeassistant/components/jewish_calendar/manifest.json index c4ebb382a44..9f0d55433f0 100644 --- a/homeassistant/components/jewish_calendar/manifest.json +++ b/homeassistant/components/jewish_calendar/manifest.json @@ -3,6 +3,5 @@ "name": "Jewish Calendar", "documentation": "https://www.home-assistant.io/integrations/jewish_calendar", "requirements": ["hdate==0.9.5"], - "dependencies": [], "codeowners": ["@tsvi"] } diff --git a/homeassistant/components/joaoapps_join/__init__.py b/homeassistant/components/joaoapps_join/__init__.py index 10cbcf6b5c0..1bc4ae298c4 100644 --- a/homeassistant/components/joaoapps_join/__init__.py +++ b/homeassistant/components/joaoapps_join/__init__.py @@ -105,12 +105,12 @@ def register_device(hass, api_key, name, device_id, device_ids, device_names): api_key=api_key, ) - hass.services.register(DOMAIN, name + "ring", ring_service) - hass.services.register(DOMAIN, name + "set_wallpaper", set_wallpaper_service) - hass.services.register(DOMAIN, name + "send_sms", send_sms_service) - hass.services.register(DOMAIN, name + "send_file", send_file_service) - hass.services.register(DOMAIN, name + "send_url", send_url_service) - hass.services.register(DOMAIN, name + "send_tasker", send_tasker_service) + hass.services.register(DOMAIN, f"{name}ring", ring_service) + hass.services.register(DOMAIN, f"{name}set_wallpaper", set_wallpaper_service) + hass.services.register(DOMAIN, f"{name}send_sms", send_sms_service) + hass.services.register(DOMAIN, f"{name}send_file", send_file_service) + hass.services.register(DOMAIN, f"{name}send_url", send_url_service) + hass.services.register(DOMAIN, f"{name}send_tasker", send_tasker_service) def setup(hass, config): @@ -122,7 +122,7 @@ def setup(hass, config): device_ids = device.get(CONF_DEVICE_IDS) device_names = device.get(CONF_DEVICE_NAMES) name = device.get(CONF_NAME) - name = name.lower().replace(" ", "_") + "_" if name else "" + name = f"{name.lower().replace(' ', '_')}_" if name else "" if api_key: if not get_devices(api_key): _LOGGER.error("Error connecting to Join, check API key") diff --git a/homeassistant/components/joaoapps_join/manifest.json b/homeassistant/components/joaoapps_join/manifest.json index 07f02e069d8..825e5597050 100644 --- a/homeassistant/components/joaoapps_join/manifest.json +++ b/homeassistant/components/joaoapps_join/manifest.json @@ -3,6 +3,5 @@ "name": "Joaoapps Join", "documentation": "https://www.home-assistant.io/integrations/joaoapps_join", "requirements": ["python-join-api==0.0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/juicenet/manifest.json b/homeassistant/components/juicenet/manifest.json index 6f6836a1683..79ba6ba9ec5 100644 --- a/homeassistant/components/juicenet/manifest.json +++ b/homeassistant/components/juicenet/manifest.json @@ -3,6 +3,5 @@ "name": "JuiceNet", "documentation": "https://www.home-assistant.io/integrations/juicenet", "requirements": ["python-juicenet==0.1.6"], - "dependencies": [], "codeowners": ["@jesserockz"] } diff --git a/homeassistant/components/juicenet/sensor.py b/homeassistant/components/juicenet/sensor.py index 6ddb8279811..63eeb6fc58f 100644 --- a/homeassistant/components/juicenet/sensor.py +++ b/homeassistant/components/juicenet/sensor.py @@ -1,7 +1,13 @@ """Support for monitoring juicenet/juicepoint/juicebox based EVSE sensors.""" import logging -from homeassistant.const import ENERGY_WATT_HOUR, POWER_WATT, TEMP_CELSIUS, TIME_SECONDS +from homeassistant.const import ( + ENERGY_WATT_HOUR, + POWER_WATT, + TEMP_CELSIUS, + TIME_SECONDS, + VOLT, +) from homeassistant.helpers.entity import Entity from . import DOMAIN, JuicenetDevice @@ -11,7 +17,7 @@ _LOGGER = logging.getLogger(__name__) SENSOR_TYPES = { "status": ["Charging Status", None], "temperature": ["Temperature", TEMP_CELSIUS], - "voltage": ["Voltage", "V"], + "voltage": ["Voltage", VOLT], "amps": ["Amps", "A"], "watts": ["Watts", POWER_WATT], "charge_time": ["Charge time", TIME_SECONDS], diff --git a/homeassistant/components/kaiterra/air_quality.py b/homeassistant/components/kaiterra/air_quality.py index 1de1a4bd6c5..ae5df387884 100644 --- a/homeassistant/components/kaiterra/air_quality.py +++ b/homeassistant/components/kaiterra/air_quality.py @@ -113,6 +113,8 @@ class KaiterraAirQuality(AirQualityEntity): async def async_added_to_hass(self): """Register callback.""" - async_dispatcher_connect( - self.hass, DISPATCHER_KAITERRA, self.async_write_ha_state + self.async_on_remove( + async_dispatcher_connect( + self.hass, DISPATCHER_KAITERRA, self.async_write_ha_state + ) ) diff --git a/homeassistant/components/kaiterra/manifest.json b/homeassistant/components/kaiterra/manifest.json index 562b988ee38..33fc1266d83 100644 --- a/homeassistant/components/kaiterra/manifest.json +++ b/homeassistant/components/kaiterra/manifest.json @@ -3,6 +3,5 @@ "name": "Kaiterra", "documentation": "https://www.home-assistant.io/integrations/kaiterra", "requirements": ["kaiterra-async-client==0.0.2"], - "codeowners": ["@Michsior14"], - "dependencies": [] + "codeowners": ["@Michsior14"] } diff --git a/homeassistant/components/kaiterra/sensor.py b/homeassistant/components/kaiterra/sensor.py index e86d6f7d836..d9500c7a000 100644 --- a/homeassistant/components/kaiterra/sensor.py +++ b/homeassistant/components/kaiterra/sensor.py @@ -88,6 +88,8 @@ class KaiterraSensor(Entity): async def async_added_to_hass(self): """Register callback.""" - async_dispatcher_connect( - self.hass, DISPATCHER_KAITERRA, self.async_write_ha_state + self.async_on_remove( + async_dispatcher_connect( + self.hass, DISPATCHER_KAITERRA, self.async_write_ha_state + ) ) diff --git a/homeassistant/components/kankun/manifest.json b/homeassistant/components/kankun/manifest.json index ef6bcbf92e2..933111ebcca 100644 --- a/homeassistant/components/kankun/manifest.json +++ b/homeassistant/components/kankun/manifest.json @@ -2,7 +2,5 @@ "domain": "kankun", "name": "Kankun", "documentation": "https://www.home-assistant.io/integrations/kankun", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/kankun/switch.py b/homeassistant/components/kankun/switch.py index 4f7ba5c8b06..d9f4db62572 100644 --- a/homeassistant/components/kankun/switch.py +++ b/homeassistant/components/kankun/switch.py @@ -47,10 +47,10 @@ def setup_platform(hass, config, add_entities_callback, discovery_info=None): KankunSwitch( hass, properties.get(CONF_NAME, dev_name), - properties.get(CONF_HOST, None), + properties.get(CONF_HOST), properties.get(CONF_PORT, DEFAULT_PORT), properties.get(CONF_PATH, DEFAULT_PATH), - properties.get(CONF_USERNAME, None), + properties.get(CONF_USERNAME), properties.get(CONF_PASSWORD), ) ) diff --git a/homeassistant/components/keba/__init__.py b/homeassistant/components/keba/__init__.py index 466b5321245..cbc9428b2ea 100644 --- a/homeassistant/components/keba/__init__.py +++ b/homeassistant/components/keba/__init__.py @@ -42,7 +42,7 @@ CONFIG_SCHEMA = vol.Schema( ) _SERVICE_MAP = { - "request_data": "request_data", + "request_data": "async_request_data", "set_energy": "async_set_energy", "set_current": "async_set_current", "authorize": "async_start", @@ -180,6 +180,11 @@ class KebaHandler(KebaKeContact): # initial data is already loaded, thus update the component listener() + async def async_request_data(self, param): + """Request new data in async way.""" + await self.request_data() + _LOGGER.debug("New data from KEBA wallbox requested") + async def async_set_energy(self, param): """Set energy target in async way.""" try: diff --git a/homeassistant/components/keba/manifest.json b/homeassistant/components/keba/manifest.json index 1f845ff8895..0b1b72d99ab 100644 --- a/homeassistant/components/keba/manifest.json +++ b/homeassistant/components/keba/manifest.json @@ -3,6 +3,5 @@ "name": "Keba Charging Station", "documentation": "https://www.home-assistant.io/integrations/keba", "requirements": ["keba-kecontact==1.0.0"], - "dependencies": [], "codeowners": ["@dannerph"] } diff --git a/homeassistant/components/keenetic_ndms2/manifest.json b/homeassistant/components/keenetic_ndms2/manifest.json index a4f81bcf2be..9d4c9f35716 100644 --- a/homeassistant/components/keenetic_ndms2/manifest.json +++ b/homeassistant/components/keenetic_ndms2/manifest.json @@ -3,6 +3,5 @@ "name": "Keenetic NDMS2 Routers", "documentation": "https://www.home-assistant.io/integrations/keenetic_ndms2", "requirements": ["ndms2_client==0.0.11"], - "dependencies": [], "codeowners": ["@foxel"] } diff --git a/homeassistant/components/kef/manifest.json b/homeassistant/components/kef/manifest.json index 4af0626ace9..bb68d37707f 100644 --- a/homeassistant/components/kef/manifest.json +++ b/homeassistant/components/kef/manifest.json @@ -2,7 +2,6 @@ "domain": "kef", "name": "KEF", "documentation": "https://www.home-assistant.io/integrations/kef", - "dependencies": [], "codeowners": ["@basnijholt"], - "requirements": ["aiokef==0.2.9", "getmac==0.8.1"] + "requirements": ["aiokef==0.2.9", "getmac==0.8.2"] } diff --git a/homeassistant/components/keyboard/manifest.json b/homeassistant/components/keyboard/manifest.json index ca9f705ec46..c6379fac4a1 100644 --- a/homeassistant/components/keyboard/manifest.json +++ b/homeassistant/components/keyboard/manifest.json @@ -3,6 +3,5 @@ "name": "Keyboard", "documentation": "https://www.home-assistant.io/integrations/keyboard", "requirements": ["pyuserinput==0.1.11"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/keyboard_remote/manifest.json b/homeassistant/components/keyboard_remote/manifest.json index 12779dc6333..5a803f95bb3 100644 --- a/homeassistant/components/keyboard_remote/manifest.json +++ b/homeassistant/components/keyboard_remote/manifest.json @@ -3,6 +3,5 @@ "name": "Keyboard Remote", "documentation": "https://www.home-assistant.io/integrations/keyboard_remote", "requirements": ["evdev==1.1.2", "aionotify==0.2.0"], - "dependencies": [], "codeowners": ["@bendavid"] } diff --git a/homeassistant/components/kira/manifest.json b/homeassistant/components/kira/manifest.json index 38f629d8b83..04c6598adb7 100644 --- a/homeassistant/components/kira/manifest.json +++ b/homeassistant/components/kira/manifest.json @@ -3,6 +3,5 @@ "name": "Kira", "documentation": "https://www.home-assistant.io/integrations/kira", "requirements": ["pykira==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/kiwi/lock.py b/homeassistant/components/kiwi/lock.py index b13906b44f5..4a58f8f43c2 100644 --- a/homeassistant/components/kiwi/lock.py +++ b/homeassistant/components/kiwi/lock.py @@ -94,7 +94,7 @@ class KiwiLock(LockDevice): def clear_unlock_state(self, _): """Clear unlock state automatically.""" self._state = STATE_LOCKED - self.async_schedule_update_ha_state() + self.async_write_ha_state() def unlock(self, **kwargs): """Unlock the device.""" diff --git a/homeassistant/components/kiwi/manifest.json b/homeassistant/components/kiwi/manifest.json index ce754fc4c04..a80e279f974 100644 --- a/homeassistant/components/kiwi/manifest.json +++ b/homeassistant/components/kiwi/manifest.json @@ -3,6 +3,5 @@ "name": "KIWI", "documentation": "https://www.home-assistant.io/integrations/kiwi", "requirements": ["kiwiki-client==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/knx/binary_sensor.py b/homeassistant/components/knx/binary_sensor.py index 94a171d9c2a..95e7e2cc400 100644 --- a/homeassistant/components/knx/binary_sensor.py +++ b/homeassistant/components/knx/binary_sensor.py @@ -116,7 +116,7 @@ class KNXBinarySensor(BinarySensorDevice): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.device.register_device_updated_cb(after_update_callback) diff --git a/homeassistant/components/knx/climate.py b/homeassistant/components/knx/climate.py index 554ae59f397..ab590540543 100644 --- a/homeassistant/components/knx/climate.py +++ b/homeassistant/components/knx/climate.py @@ -66,7 +66,7 @@ OPERATION_MODES = { "Dry": HVAC_MODE_DRY, } -OPERATION_MODES_INV = dict((reversed(item) for item in OPERATION_MODES.items())) +OPERATION_MODES_INV = dict(reversed(item) for item in OPERATION_MODES.items()) PRESET_MODES = { # Map DPT 201.100 HVAC operating modes to HA presets @@ -76,7 +76,7 @@ PRESET_MODES = { "Comfort": PRESET_COMFORT, } -PRESET_MODES_INV = dict((reversed(item) for item in PRESET_MODES.items())) +PRESET_MODES_INV = dict(reversed(item) for item in PRESET_MODES.items()) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -108,7 +108,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( vol.Optional(CONF_ON_OFF_STATE_ADDRESS): cv.string, vol.Optional(CONF_ON_OFF_INVERT, default=DEFAULT_ON_OFF_INVERT): cv.boolean, vol.Optional(CONF_OPERATION_MODES): vol.All( - cv.ensure_list, [vol.In(OPERATION_MODES)] + cv.ensure_list, [vol.In({**OPERATION_MODES, **PRESET_MODES})] ), vol.Optional(CONF_MIN_TEMP): vol.Coerce(float), vol.Optional(CONF_MAX_TEMP): vol.Coerce(float), @@ -139,7 +139,7 @@ def async_add_entities_config(hass, config, async_add_entities): """Set up climate for KNX platform configured within platform.""" climate_mode = XknxClimateMode( hass.data[DATA_KNX].xknx, - name=config[CONF_NAME] + " Mode", + name=f"{config[CONF_NAME]} Mode", group_address_operation_mode=config.get(CONF_OPERATION_MODE_ADDRESS), group_address_operation_mode_state=config.get( CONF_OPERATION_MODE_STATE_ADDRESS @@ -210,7 +210,7 @@ class KNXClimate(ClimateDevice): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.device.register_device_updated_cb(after_update_callback) self.device.mode.register_device_updated_cb(after_update_callback) @@ -266,7 +266,7 @@ class KNXClimate(ClimateDevice): if temperature is None: return await self.device.set_target_temperature(temperature) - await self.async_update_ha_state() + self.async_write_ha_state() @property def hvac_mode(self) -> Optional[str]: @@ -304,7 +304,7 @@ class KNXClimate(ClimateDevice): elif self.device.mode.supports_operation_mode: knx_operation_mode = HVACOperationMode(OPERATION_MODES_INV.get(hvac_mode)) await self.device.mode.set_operation_mode(knx_operation_mode) - await self.async_update_ha_state() + self.async_write_ha_state() @property def preset_mode(self) -> Optional[str]: @@ -334,4 +334,4 @@ class KNXClimate(ClimateDevice): if self.device.mode.supports_operation_mode: knx_operation_mode = HVACOperationMode(PRESET_MODES_INV.get(preset_mode)) await self.device.mode.set_operation_mode(knx_operation_mode) - await self.async_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/knx/cover.py b/homeassistant/components/knx/cover.py index d0b8d8c1163..5c4aa762b5c 100644 --- a/homeassistant/components/knx/cover.py +++ b/homeassistant/components/knx/cover.py @@ -108,7 +108,7 @@ class KNXCover(CoverDevice): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.device.register_device_updated_cb(after_update_callback) @@ -204,7 +204,7 @@ class KNXCover(CoverDevice): @callback def auto_updater_hook(self, now): """Call for the autoupdater.""" - self.async_schedule_update_ha_state() + self.async_write_ha_state() if self.device.position_reached(): self.stop_auto_updater() diff --git a/homeassistant/components/knx/light.py b/homeassistant/components/knx/light.py index 6eb539c19ce..8570c2eb09a 100644 --- a/homeassistant/components/knx/light.py +++ b/homeassistant/components/knx/light.py @@ -154,7 +154,7 @@ class KNXLight(Light): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.device.register_device_updated_cb(after_update_callback) @@ -180,9 +180,13 @@ class KNXLight(Light): @property def brightness(self): """Return the brightness of this light between 0..255.""" - if not self.device.supports_brightness: - return None - return self.device.current_brightness + if self.device.supports_brightness: + return self.device.current_brightness + hsv_color = self._hsv_color + if self.device.supports_color and hsv_color: + # pylint: disable=unsubscriptable-object + return round(hsv_color[-1] / 100 * 255) + return None @property def hs_color(self): @@ -192,6 +196,14 @@ class KNXLight(Light): rgb, _ = self.device.current_color return color_util.color_RGB_to_hs(*rgb) if rgb else None + @property + def _hsv_color(self): + """Return the HSV color value.""" + rgb = None + if self.device.supports_rgbw or self.device.supports_color: + rgb, _ = self.device.current_color + return color_util.color_RGB_to_hsv(*rgb) if rgb else None + @property def white_value(self): """Return the white value.""" diff --git a/homeassistant/components/knx/manifest.json b/homeassistant/components/knx/manifest.json index 16f55b5292d..ab26c4b6287 100644 --- a/homeassistant/components/knx/manifest.json +++ b/homeassistant/components/knx/manifest.json @@ -3,6 +3,5 @@ "name": "KNX", "documentation": "https://www.home-assistant.io/integrations/knx", "requirements": ["xknx==0.11.2"], - "dependencies": [], "codeowners": ["@Julius2342"] } diff --git a/homeassistant/components/knx/scene.py b/homeassistant/components/knx/scene.py index c8c6ac2bcfb..8f2c24c05b6 100644 --- a/homeassistant/components/knx/scene.py +++ b/homeassistant/components/knx/scene.py @@ -1,4 +1,6 @@ """Support for KNX scenes.""" +from typing import Any + import voluptuous as vol from xknx.devices import Scene as XknxScene @@ -65,6 +67,6 @@ class KNXScene(Scene): """Return the name of the scene.""" return self.scene.name - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate the scene.""" await self.scene.run() diff --git a/homeassistant/components/knx/sensor.py b/homeassistant/components/knx/sensor.py index a0a0f6ea18d..2679170b03d 100644 --- a/homeassistant/components/knx/sensor.py +++ b/homeassistant/components/knx/sensor.py @@ -69,7 +69,7 @@ class KNXSensor(Entity): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.device.register_device_updated_cb(after_update_callback) diff --git a/homeassistant/components/knx/switch.py b/homeassistant/components/knx/switch.py index e9a0df5c983..ae798bf4c08 100644 --- a/homeassistant/components/knx/switch.py +++ b/homeassistant/components/knx/switch.py @@ -65,7 +65,7 @@ class KNXSwitch(SwitchDevice): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.device.register_device_updated_cb(after_update_callback) diff --git a/homeassistant/components/kodi/__init__.py b/homeassistant/components/kodi/__init__.py index 1f2d3cb5cd0..9470c8bb2c8 100644 --- a/homeassistant/components/kodi/__init__.py +++ b/homeassistant/components/kodi/__init__.py @@ -46,9 +46,7 @@ SERVICE_TO_METHOD = { async def async_setup(hass, config): """Set up the Kodi integration.""" - if any( - ((CONF_PLATFORM, DOMAIN) in cfg.items() for cfg in config.get(MP_DOMAIN, [])) - ): + if any((CONF_PLATFORM, DOMAIN) in cfg.items() for cfg in config.get(MP_DOMAIN, [])): # Register the Kodi media_player services async def async_service_handler(service): """Map services to methods on MediaPlayerDevice.""" diff --git a/homeassistant/components/kodi/manifest.json b/homeassistant/components/kodi/manifest.json index 80bcda0c1de..43b318d1584 100644 --- a/homeassistant/components/kodi/manifest.json +++ b/homeassistant/components/kodi/manifest.json @@ -3,6 +3,5 @@ "name": "Kodi", "documentation": "https://www.home-assistant.io/integrations/kodi", "requirements": ["jsonrpc-async==0.6", "jsonrpc-websocket==0.6"], - "dependencies": [], "codeowners": ["@armills"] } diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index 4fd86d078a0..33e7c014e40 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -171,7 +171,7 @@ def _check_deprecated_turn_off(hass, turn_off_action): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Kodi platform.""" if DOMAIN not in hass.data: - hass.data[DOMAIN] = dict() + hass.data[DOMAIN] = {} unique_id = None # Is this a manual configuration? @@ -333,7 +333,7 @@ class KodiDevice(MediaPlayerDevice): self._turn_on_action = turn_on_action self._turn_off_action = turn_off_action self._enable_websocket = websocket - self._players = list() + self._players = [] self._properties = {} self._item = {} self._app_properties = {} @@ -364,14 +364,14 @@ class KodiDevice(MediaPlayerDevice): self._item = {} self._media_position_updated_at = None self._media_position = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def async_on_volume_changed(self, sender, data): """Handle the volume changes.""" self._app_properties["volume"] = data["volume"] self._app_properties["muted"] = data["muted"] - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def async_on_quit(self, sender, data): @@ -429,7 +429,7 @@ class KodiDevice(MediaPlayerDevice): # to reconnect on the next poll. pass # Update HA state after Kodi disconnects - self.async_schedule_update_ha_state() + self.async_write_ha_state() # Create a task instead of adding a tracking job, since this task will # run until the websocket connection is closed. diff --git a/homeassistant/components/kodi/services.yaml b/homeassistant/components/kodi/services.yaml index 01dde6a249c..11287217fa8 100644 --- a/homeassistant/components/kodi/services.yaml +++ b/homeassistant/components/kodi/services.yaml @@ -5,7 +5,7 @@ add_to_playlist: fields: entity_id: description: Name(s) of the Kodi entities where to add the media. - example: 'media_player.living_room_kodi' + example: "media_player.living_room_kodi" media_type: description: Media type identifier. It must be one of SONG or ALBUM. example: ALBUM @@ -14,17 +14,17 @@ add_to_playlist: example: 123456 media_name: description: Optional media name for filtering media. Can be 'ALL' when `media_type` is 'ALBUM' and `artist_name` is specified, to add all songs from one artist. - example: 'Highway to Hell' + example: "Highway to Hell" artist_name: description: Optional artist name for filtering media. - example: 'AC/DC' + example: "AC/DC" call_method: - description: 'Call a Kodi JSONRPC API method with optional parameters. Results of the Kodi API call will be redirected in a Home Assistant event: `kodi_call_method_result`.' + description: "Call a Kodi JSONRPC API method with optional parameters. Results of the Kodi API call will be redirected in a Home Assistant event: `kodi_call_method_result`." fields: entity_id: description: Name(s) of the Kodi entities where to run the API method. - example: 'media_player.living_room_kodi' + example: "media_player.living_room_kodi" method: description: Name of the Kodi JSONRPC API method to be called. - example: 'VideoLibrary.GetRecentlyAddedEpisodes' + example: "VideoLibrary.GetRecentlyAddedEpisodes" diff --git a/homeassistant/components/konnected/.translations/ca.json b/homeassistant/components/konnected/.translations/ca.json deleted file mode 100644 index 80e7208391b..00000000000 --- a/homeassistant/components/konnected/.translations/ca.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat", - "already_in_progress": "El flux de dades de configuraci\u00f3 pel dispositiu ja est\u00e0 en curs.", - "not_konn_panel": "No s'ha reconegut com a un dispositiu Konnected.io", - "unknown": "S'ha produ\u00eft un error desconegut" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar amb el panell Konnected a {host}:{port}" - }, - "step": { - "confirm": { - "description": "Model: {model} \nAmfitri\u00f3: {host} \nPort: {port} \n\nPots configurar el comportament de les E/S (I/O) i del panell a la configuraci\u00f3 del panell d\u2019alarma Konnected.", - "title": "Dispositiu Konnected llest" - }, - "import_confirm": { - "description": "S'ha descobert un panell d'alarma Konnected amb ID {id} a configuration.yaml. Aquest flux et permetr\u00e0 importar-lo a una entrada de configuraci\u00f3.", - "title": "Importaci\u00f3 de dispositiu Konnected" - }, - "user": { - "data": { - "host": "Adre\u00e7a IP del dispositiu Konnected", - "port": "Port del dispositiu Konnected" - }, - "description": "Introdueix la informaci\u00f3 d'amfitri\u00f3 del panell Konnected.", - "title": "Descoberta de dispositiu Konnected" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "No s'ha reconegut com a un dispositiu Konnected.io" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Inverteix l'estat obert/tancat", - "name": "Nom (opcional)", - "type": "Tipus de sensor binari" - }, - "description": "Selecciona les opcions pel sensor binari de {zone}", - "title": "Configuraci\u00f3 de sensor binari" - }, - "options_digital": { - "data": { - "name": "Nom (opcional)", - "poll_interval": "Interval de sondeig (minuts) (opcional)", - "type": "Tipus de sensor" - }, - "description": "Selecciona les opcions pel sensor digital de {zone}", - "title": "Configuraci\u00f3 de sensor digital" - }, - "options_io": { - "data": { - "1": "Zona 1", - "2": "Zona 2", - "3": "Zona 3", - "4": "Zona 4", - "5": "Zona 5", - "6": "Zona 6", - "7": "Zona 7", - "out": "OUT (sortida)" - }, - "description": "S'ha descobert {model} a {host}. Selecciona la configuraci\u00f3 b\u00e0sica de cada Entrada/Sortida (I/O), en funci\u00f3 del tipus que sigui pot ser que et permeti sensors binaris (contactes oberts/tancats), sensors digitals (DHT i ds18b20) o sortides commutables. M\u00e9s endavant les podr\u00e0s configurar de manera m\u00e9s detallada.", - "title": "Configuraci\u00f3 E/S (I/O)" - }, - "options_io_ext": { - "data": { - "10": "Zona 10", - "11": "Zona 11", - "12": "Zona 12", - "8": "Zona 8", - "9": "Zona 9", - "alarm1": "ALARMA1", - "alarm2_out2": "OUT2/ALARMA2", - "out1": "OUT1" - }, - "description": "Selecciona la configuraci\u00f3 de les E/S restants. Podr\u00e0s configurar opcions m\u00e9s detallades en els passos seg\u00fcents.", - "title": "Configuraci\u00f3 E/S (I/O) ampliades" - }, - "options_misc": { - "data": { - "blink": "Parpelleja el LED del panell quan s'envien canvis d'estat" - }, - "description": "Selecciona el comportament desitjat del panell", - "title": "Configuraci\u00f3 diversos" - }, - "options_switch": { - "data": { - "activation": "Sortida quan estigui ON", - "momentary": "Durada del pols (ms) (opcional)", - "more_states": "Configura estats addicionals per a aquesta zona", - "name": "Nom (opcional)", - "pause": "Pausa entre polsos (ms) (opcional)", - "repeat": "Repeticions (-1 = infinit) (opcional)" - }, - "description": "Selecciona les opcions de sortida per a {zone}: estat {state}", - "title": "Configuraci\u00f3 de sortida commutable" - } - }, - "title": "Opcions del panell d'alarma Konnected" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/da.json b/homeassistant/components/konnected/.translations/da.json deleted file mode 100644 index a1545bd6575..00000000000 --- a/homeassistant/components/konnected/.translations/da.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheden er allerede konfigureret", - "already_in_progress": "Enhedskonfiguration er allerede i gang.", - "not_konn_panel": "Ikke en genkendt Konnected.io-enhed", - "unknown": "Ukendt fejl opstod" - }, - "error": { - "cannot_connect": "Der kan ikke oprettes forbindelse til et Konnected-panel p\u00e5 {host}:{port}" - }, - "step": { - "confirm": { - "description": "Model: {model}\nID: {id}\nV\u00e6rt: {host}\nPort: {port}\n\nDu kan konfigurere IO og panelfunktionsm\u00e5den i indstillingerne for Konnected-alarmpanel.", - "title": "Konnected-enhed klar" - }, - "import_confirm": { - "description": "Et Konnected-alarmpanel med id {id} er blevet fundet i configuration.yaml. Dette flow giver dig mulighed for at importere det til en konfigurationspost.", - "title": "Importer Konnected-enhed" - }, - "user": { - "data": { - "host": "Konnected-enhedens IP-adresse", - "port": "Konnected-enhedsport" - }, - "description": "Indtast v\u00e6rtsinformationen for dit Konnected-panel.", - "title": "Find Konnected-enhed" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Ikke en genkendt Konnected.io-enhed" - }, - "error": { - "one": "en", - "other": "anden" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Inverter tilstanden \u00e5ben/lukket", - "name": "Navn (valgfrit)", - "type": "Bin\u00e6r sensortype" - }, - "description": "V\u00e6lg indstillingerne for den bin\u00e6re sensor, der er knyttet til {zone}", - "title": "Konfigurer bin\u00e6r sensor" - }, - "options_digital": { - "data": { - "name": "Navn (valgfrit)", - "poll_interval": "Foresp\u00f8rgselsinterval (minutter) (valgfrit)", - "type": "Sensortype" - }, - "description": "V\u00e6lg indstillingerne for den digitale sensor, der er knyttet til {zone}", - "title": "Konfigurer digital sensor" - }, - "options_io": { - "data": { - "1": "Zone 1", - "2": "Zone 2", - "3": "Zone 3", - "4": "Zone 4", - "5": "Zone 5", - "6": "Zone 6", - "7": "Zone 7", - "out": "OUT" - }, - "description": "Der blev fundet en {model} p\u00e5 {host}. V\u00e6lg basiskonfigurationen af hver I/O nedenfor - afh\u00e6ngigt af I/O kan det give mulighed for bin\u00e6re sensorer (\u00e5ben-/lukket-kontakter), digitale sensorer (dht og ds18b20) eller omskiftelige outputs. Du kan konfigurere detaljerede indstillinger i de n\u00e6ste trin.", - "title": "Konfigurer I/O" - }, - "options_io_ext": { - "data": { - "10": "Zone 10", - "11": "Zone 11", - "12": "Zone 12", - "8": "Zone 8", - "9": "Zone 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "V\u00e6lg konfigurationen af det resterende I/O nedenfor. Du kan konfigurere detaljerede indstillinger i de n\u00e6ste trin.", - "title": "Konfigurer udvidet I/O" - }, - "options_misc": { - "data": { - "blink": "Blink panel-LED ved sending af tilstands\u00e6ndring" - }, - "description": "V\u00e6lg den \u00f8nskede funktionsm\u00e5de for panelet", - "title": "Konfigurer diverse" - }, - "options_switch": { - "data": { - "activation": "Output n\u00e5r der er t\u00e6ndt", - "momentary": "Impulsvarighed (ms) (valgfrit)", - "name": "Navn (valgfrit)", - "pause": "Pause mellem impulser (ms) (valgfrit)", - "repeat": "Gange til gentagelse (-1=uendelig) (valgfrit)" - }, - "description": "V\u00e6lg outputindstillingerne for {zone}", - "title": "Konfigurer skifteligt output" - } - }, - "title": "Indstillinger for Konnected-alarmpanel" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/de.json b/homeassistant/components/konnected/.translations/de.json deleted file mode 100644 index a0da84fd098..00000000000 --- a/homeassistant/components/konnected/.translations/de.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert", - "already_in_progress": "Der Konfigurationsfluss f\u00fcr das Ger\u00e4t wird bereits ausgef\u00fchrt.", - "not_konn_panel": "Kein anerkanntes Konnected.io-Ger\u00e4t", - "unknown": "Unbekannter Fehler ist aufgetreten" - }, - "error": { - "cannot_connect": "Es konnte keine Verbindung zu einem Konnected-Panel unter {host}:{port} hergestellt werden." - }, - "step": { - "confirm": { - "description": "Modell: {model}\nID: {id}\nHost: {host}\nPort: {port}\n\nSie k\u00f6nnen das I / O - und Bedienfeldverhalten in den Einstellungen der verbundenen Alarmzentrale konfigurieren.", - "title": "Konnected Device Bereit" - }, - "import_confirm": { - "description": "Ein Konnected Alarm Panel mit der ID {id} wurde in configuration.yaml entdeckt. Mit diesem Ablauf k\u00f6nnen Sie ihn in einen Konfigurationseintrag importieren.", - "title": "Importieren von Konnected Ger\u00e4t" - }, - "user": { - "data": { - "host": "Konnected Ger\u00e4t IP-Adresse", - "port": "Konnected Device Port" - }, - "description": "Bitte geben Sie die Hostinformationen f\u00fcr Ihr Konnected Panel ein.", - "title": "Entdecken Sie Konnected Ger\u00e4t" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Kein anerkanntes Konnected.io-Ger\u00e4t" - }, - "error": { - "bad_host": "Ung\u00fcltige Override-API-Host-URL", - "one": "eins", - "other": "andere" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Invertieren Sie den \u00d6ffnungs- / Schlie\u00dfzustand", - "name": "Name (optional)", - "type": "Bin\u00e4rer Sensortyp" - }, - "description": "Bitte w\u00e4hlen Sie die Optionen f\u00fcr den an {zone} angeschlossenen Bin\u00e4rsensor", - "title": "Konfigurieren Sie den Bin\u00e4rsensor" - }, - "options_digital": { - "data": { - "name": "Name (optional)", - "poll_interval": "Abfrageintervall (Minuten) (optional)", - "type": "Sensortyp" - }, - "description": "Bitte w\u00e4hlen Sie die Optionen f\u00fcr den an {zone} angeschlossenen digitalen Sensor aus", - "title": "Konfigurieren Sie den digitalen Sensor" - }, - "options_io": { - "data": { - "1": "Zone 1", - "2": "Zone 2", - "3": "Zone 3", - "4": "Zone 4", - "5": "Zone 5", - "6": "Zone 6", - "7": "Zone 7", - "out": "OUT" - }, - "description": "Es wurde ein {model} bei {host} entdeckt. W\u00e4hlen Sie unten die Basiskonfiguration der einzelnen E / A aus. Je nach E / A k\u00f6nnen bin\u00e4re Sensoren (Kontakte \u00f6ffnen / schlie\u00dfen), digitale Sensoren (dht und ds18b20) oder umschaltbare Ausg\u00e4nge verwendet werden. In den n\u00e4chsten Schritten k\u00f6nnen Sie detaillierte Optionen konfigurieren.", - "title": "Konfigurieren von I/O" - }, - "options_io_ext": { - "data": { - "10": "Zone 10", - "11": "Zone 11", - "12": "Zone 12", - "8": "Zone 8", - "9": "Zone 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "W\u00e4hlen Sie unten die Konfiguration der verbleibenden E / A. In den n\u00e4chsten Schritten k\u00f6nnen Sie detaillierte Optionen konfigurieren.", - "title": "Konfigurieren Sie Erweiterte I/O" - }, - "options_misc": { - "data": { - "api_host": "API-Host-URL \u00fcberschreiben (optional)", - "override_api_host": "\u00dcberschreiben Sie die Standard-Host-Panel-URL der Home Assistant-API" - }, - "description": "Bitte w\u00e4hlen Sie das gew\u00fcnschte Verhalten f\u00fcr Ihr Panel" - }, - "options_switch": { - "data": { - "activation": "Ausgabe, wenn eingeschaltet", - "momentary": "Impulsdauer (ms) (optional)", - "more_states": "Konfigurieren Sie zus\u00e4tzliche Zust\u00e4nde f\u00fcr diese Zone", - "name": "Name (optional)", - "pause": "Pause zwischen Impulsen (ms) (optional)", - "repeat": "Zeit zum Wiederholen (-1 = unendlich) (optional)" - }, - "description": "Bitte w\u00e4hlen Sie die Ausgabeoptionen f\u00fcr {zone} : Status {state}" - } - }, - "title": "Konnected Alarm Panel-Optionen" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/en.json b/homeassistant/components/konnected/.translations/en.json deleted file mode 100644 index 3ace7783f8b..00000000000 --- a/homeassistant/components/konnected/.translations/en.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured", - "already_in_progress": "Config flow for device is already in progress.", - "not_konn_panel": "Not a recognized Konnected.io device", - "unknown": "Unknown error occurred" - }, - "error": { - "cannot_connect": "Unable to connect to a Konnected Panel at {host}:{port}" - }, - "step": { - "confirm": { - "description": "Model: {model}\nID: {id}\nHost: {host}\nPort: {port}\n\nYou can configure the IO and panel behavior in the Konnected Alarm Panel settings.", - "title": "Konnected Device Ready" - }, - "import_confirm": { - "description": "A Konnected Alarm Panel with ID {id} has been discovered in configuration.yaml. This flow will allow you to import it into a config entry.", - "title": "Import Konnected Device" - }, - "user": { - "data": { - "host": "Konnected device IP address", - "port": "Konnected device port" - }, - "description": "Please enter the host information for your Konnected Panel.", - "title": "Discover Konnected Device" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Not a recognized Konnected.io device" - }, - "error": { - "bad_host": "Invalid Override API host url" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Invert the open/close state", - "name": "Name (optional)", - "type": "Binary Sensor Type" - }, - "description": "Please select the options for the binary sensor attached to {zone}", - "title": "Configure Binary Sensor" - }, - "options_digital": { - "data": { - "name": "Name (optional)", - "poll_interval": "Poll Interval (minutes) (optional)", - "type": "Sensor Type" - }, - "description": "Please select the options for the digital sensor attached to {zone}", - "title": "Configure Digital Sensor" - }, - "options_io": { - "data": { - "1": "Zone 1", - "2": "Zone 2", - "3": "Zone 3", - "4": "Zone 4", - "5": "Zone 5", - "6": "Zone 6", - "7": "Zone 7", - "out": "OUT" - }, - "description": "Discovered a {model} at {host}. Select the base configuration of each I/O below - depending on the I/O it may allow for binary sensors (open/close contacts), digital sensors (dht and ds18b20), or switchable outputs. You'll be able to configure detailed options in the next steps.", - "title": "Configure I/O" - }, - "options_io_ext": { - "data": { - "10": "Zone 10", - "11": "Zone 11", - "12": "Zone 12", - "8": "Zone 8", - "9": "Zone 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "Select the configuration of the remaining I/O below. You'll be able to configure detailed options in the next steps.", - "title": "Configure Extended I/O" - }, - "options_misc": { - "data": { - "api_host": "Override API host URL (optional)", - "blink": "Blink panel LED on when sending state change", - "override_api_host": "Override default Home Assistant API host panel URL" - }, - "description": "Please select the desired behavior for your panel", - "title": "Configure Misc" - }, - "options_switch": { - "data": { - "activation": "Output when on", - "momentary": "Pulse duration (ms) (optional)", - "more_states": "Configure additional states for this zone", - "name": "Name (optional)", - "pause": "Pause between pulses (ms) (optional)", - "repeat": "Times to repeat (-1=infinite) (optional)" - }, - "description": "Please select the output options for {zone}: state {state}", - "title": "Configure Switchable Output" - } - }, - "title": "Konnected Alarm Panel Options" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/es.json b/homeassistant/components/konnected/.translations/es.json deleted file mode 100644 index 64069d4e756..00000000000 --- a/homeassistant/components/konnected/.translations/es.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "already_in_progress": "El flujo de configuraci\u00f3n para el dispositivo ya est\u00e1 en curso.", - "not_konn_panel": "No es un dispositivo Konnected.io reconocido", - "unknown": "Se produjo un error desconocido" - }, - "error": { - "cannot_connect": "No se puede conectar a un Panel conectado en {host}:{port}" - }, - "step": { - "confirm": { - "description": "Modelo: {model}\nID: {id}\nHost: {host}\nPuerto: {port}\n\nPuede configurar las E/S y el comportamiento del panel en los ajustes del Panel de Alarmas Konnected.", - "title": "Dispositivo Konnected Listo" - }, - "import_confirm": { - "description": "Se ha descubierto un Panel de Alarma Konnected con ID {id} en configuration.yaml. Este flujo te permitir\u00e1 importarlo a una entrada de configuraci\u00f3n.", - "title": "Importar Dispositivo Konnected" - }, - "user": { - "data": { - "host": "Direcci\u00f3n IP del dispositivo Konnected", - "port": "Puerto del dispositivo Konnected" - }, - "description": "Introduzca la informaci\u00f3n del host de su panel Konnected.", - "title": "Descubrir el dispositivo Konnected" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "No es un dispositivo Konnected.io reconocido" - }, - "error": { - "bad_host": "URL del host de la API de invalidaci\u00f3n no v\u00e1lida", - "one": "", - "other": "otros" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Invertir el estado de apertura/cierre", - "name": "Nombre (opcional)", - "type": "Tipo de sensor binario" - }, - "description": "Seleccione las opciones para el sensor binario conectado a {zone}", - "title": "Configurar sensor binario" - }, - "options_digital": { - "data": { - "name": "Nombre (opcional)", - "poll_interval": "Intervalo de sondeo (minutos) (opcional)", - "type": "Tipo de sensor" - }, - "description": "Seleccione las opciones para el sensor digital conectado a {zone}", - "title": "Configurar el sensor digital" - }, - "options_io": { - "data": { - "1": "Zona 1", - "2": "Zona 2", - "3": "Zona 3", - "4": "Zona 4", - "5": "Zona 5", - "6": "Zona 6", - "7": "Zona 7", - "out": "OUT" - }, - "description": "Descubierto un {model} en {host} . Seleccione la configuraci\u00f3n base de cada E / S a continuaci\u00f3n: seg\u00fan la E / S, puede permitir sensores binarios (contactos de apertura / cierre), sensores digitales (dht y ds18b20) o salidas conmutables. Podr\u00e1 configurar opciones detalladas en los pr\u00f3ximos pasos.", - "title": "Configurar E/S" - }, - "options_io_ext": { - "data": { - "10": "Zona 10", - "11": "Zona 11", - "12": "Zona 12", - "8": "Zona 8", - "9": "Zona 9", - "alarm1": "ALARMA1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "Seleccione la configuraci\u00f3n de las E/S restantes a continuaci\u00f3n. Podr\u00e1s configurar opciones detalladas en los pr\u00f3ximos pasos.", - "title": "Configurar E/S extendidas" - }, - "options_misc": { - "data": { - "api_host": "Invalidar la direcci\u00f3n URL del host de la API (opcional)", - "blink": "Parpadea el LED del panel cuando se env\u00eda un cambio de estado", - "override_api_host": "Reemplazar la URL predeterminada del panel host de la API de Home Assistant" - }, - "description": "Seleccione el comportamiento deseado para su panel", - "title": "Configurar miscel\u00e1neos" - }, - "options_switch": { - "data": { - "activation": "Salida cuando est\u00e1 activada", - "momentary": "Duraci\u00f3n del pulso (ms) (opcional)", - "more_states": "Configurar estados adicionales para esta zona", - "name": "Nombre (opcional)", - "pause": "Pausa entre pulsos (ms) (opcional)", - "repeat": "Tiempos de repetici\u00f3n (-1 = infinito) (opcional)" - }, - "description": "Por favor, seleccione las opciones de salida para {zone}", - "title": "Configurar la salida conmutable" - } - }, - "title": "Opciones del panel de alarma Konnected" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/fr.json b/homeassistant/components/konnected/.translations/fr.json deleted file mode 100644 index fecdd35b808..00000000000 --- a/homeassistant/components/konnected/.translations/fr.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", - "already_in_progress": "Le flux de configuration de l'appareil est d\u00e9j\u00e0 en cours.", - "not_konn_panel": "Non reconnu comme appareil Konnected.io", - "unknown": "Une erreur inconnue s'est produite" - }, - "step": { - "confirm": { - "title": "Appareil Konnected pr\u00eat" - }, - "import_confirm": { - "title": "Importer un appareil connect\u00e9" - }, - "user": { - "data": { - "host": "Adresse IP de l\u2019appareil Konnected" - } - } - }, - "title": "Konnected.io" - }, - "options": { - "error": { - "one": "Vide", - "other": "Vide" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Inverser l'\u00e9tat ouvert / ferm\u00e9", - "name": "Nom (facultatif)", - "type": "Type de capteur binaire" - }, - "description": "Veuillez s\u00e9lectionner les options du capteur binaire attach\u00e9 \u00e0 {zone}", - "title": "Configurer le capteur binaire" - }, - "options_digital": { - "data": { - "name": "Nom (facultatif)", - "poll_interval": "Intervalle d'interrogation (minutes) (facultatif)", - "type": "Type de capteur" - }, - "description": "Veuillez s\u00e9lectionner les options du capteur digital attach\u00e9 \u00e0 {zone}", - "title": "Configurer le capteur digital" - }, - "options_io": { - "data": { - "1": "Zone 1", - "2": "Zone 2", - "3": "Zone 3", - "4": "Zone 4", - "5": "Zone 5", - "6": "Zone 6", - "7": "Zone 7" - } - }, - "options_io_ext": { - "data": { - "10": "Zone 10", - "11": "Zone 11", - "12": "Zone 12", - "8": "Zone 8", - "9": "Zone 9", - "alarm1": "ALARME1" - } - }, - "options_switch": { - "data": { - "name": "Nom (facultatif)" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/hu.json b/homeassistant/components/konnected/.translations/hu.json deleted file mode 100644 index 35a4adfebe3..00000000000 --- a/homeassistant/components/konnected/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "options": { - "step": { - "options_digital": { - "data": { - "name": "N\u00e9v (nem k\u00f6telez\u0151)", - "type": "\u00c9rz\u00e9kel\u0151 t\u00edpusa" - } - }, - "options_switch": { - "data": { - "name": "N\u00e9v (nem k\u00f6telez\u0151)" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/it.json b/homeassistant/components/konnected/.translations/it.json deleted file mode 100644 index a79c2e0caf2..00000000000 --- a/homeassistant/components/konnected/.translations/it.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", - "already_in_progress": "Il flusso di configurazione per il dispositivo \u00e8 gi\u00e0 in corso.", - "not_konn_panel": "Non \u00e8 un dispositivo Konnected.io riconosciuto", - "unknown": "Si \u00e8 verificato un errore sconosciuto" - }, - "error": { - "cannot_connect": "Impossibile connettersi ad un Pannello Konnected su {host}:{port}." - }, - "step": { - "confirm": { - "description": "Modello: {model}\nID: {id}\nHost: {host}\nPorta: {port}\n\n\u00c8 possibile configurare il comportamento di I/O e del pannello nelle impostazioni del Pannello Allarmi di Konnected.", - "title": "Dispositivo Konnected pronto" - }, - "import_confirm": { - "description": "In configuration.yaml \u00e8 stato individuato un pannello di allarme Konnected con ID {id}. Questo flusso consentir\u00e0 di importarlo in una voce di configurazione.", - "title": "Importa dispositivo Konnected" - }, - "user": { - "data": { - "host": "Indirizzo IP del dispositivo Konnected", - "port": "Porta del dispositivo Konnected" - }, - "description": "Si prega di inserire le informazioni dell'host per il tuo Pannello Konnected.", - "title": "Rileva il dispositivo Konnected" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Non \u00e8 un dispositivo Konnected.io riconosciuto" - }, - "error": { - "one": "uno", - "other": "altri" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Invertire lo stato di apertura/chiusura", - "name": "Nome (opzionale)", - "type": "Tipo di sensore binario" - }, - "description": "Si prega di selezionare le opzioni per il sensore binario collegato alla {zone}", - "title": "Configurare il Sensore Binario" - }, - "options_digital": { - "data": { - "name": "Nome (opzionale)", - "poll_interval": "Intervallo di sondaggio (minuti) (opzionale)", - "type": "Tipo di sensore" - }, - "description": "Si prega di selezionare le opzioni per il sensore digitale collegato alla {zone}", - "title": "Configurare il Sensore Digitale" - }, - "options_io": { - "data": { - "1": "Zona 1", - "2": "Zona 2", - "3": "Zona 3", - "4": "Zona 4", - "5": "Zona 5", - "6": "Zona 6", - "7": "Zona 7", - "out": "OUT" - }, - "description": "Rilevato un {model} su {host}. Selezionare la configurazione di base di ciascun I/O di seguito: a seconda dell'I/O, essa pu\u00f2 consentire sensori binari (contatti aperti/chiusi), sensori digitali (DHT e DS18B20) o uscite commutabili. Sarai in grado di configurare le opzioni dettagliate nei prossimi passi.", - "title": "Configura I/O" - }, - "options_io_ext": { - "data": { - "10": "Zona 10", - "11": "Zona 11", - "12": "Zona 12", - "8": "Zona 8", - "9": "Zona 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2 / ALARM2", - "out1": "OUT1" - }, - "description": "Selezionare di seguito la configurazione degli I/O rimanenti. Potrete configurare opzioni dettagliate nei prossimi passi.", - "title": "Configurazione I/O Esteso" - }, - "options_misc": { - "data": { - "blink": "Attiva il lampeggio del LED del pannello durante l'invio del cambiamento di stato " - }, - "description": "Seleziona il comportamento desiderato per il tuo pannello", - "title": "Configura Altro" - }, - "options_switch": { - "data": { - "activation": "Uscita quando acceso", - "momentary": "Durata impulso (ms) (opzionale)", - "name": "Nome (opzionale)", - "pause": "Pausa tra gli impulsi (ms) (opzionale)", - "repeat": "Numero di volte da ripetere (-1 = infinito) (opzionale)" - }, - "description": "Selezionare le opzioni di uscita per {zona}", - "title": "Configurare l'uscita commutabile" - } - }, - "title": "Opzioni del pannello di allarme Konnected" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/ko.json b/homeassistant/components/konnected/.translations/ko.json deleted file mode 100644 index 34dd01d06b6..00000000000 --- a/homeassistant/components/konnected/.translations/ko.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "\uae30\uae30 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", - "not_konn_panel": "\uc778\uc2dd\ub41c Konnected.io \uae30\uae30\uac00 \uc544\ub2d9\ub2c8\ub2e4", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "cannot_connect": "{host}:{port} \uc758 Konnected \ud328\ub110\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "step": { - "confirm": { - "description": "\ubaa8\ub378: {model}\nID: {id}\n\ud638\uc2a4\ud2b8: {host}\n\ud3ec\ud2b8: {port}\n\nKonnected \uc54c\ub78c \ud328\ub110 \uc124\uc815\uc5d0\uc11c IO \uc640 \ud328\ub110 \ub3d9\uc791\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "Konnected \uae30\uae30 \uc900\ube44" - }, - "import_confirm": { - "description": "Konnected \uc54c\ub78c \ud328\ub110 ID {id} \uac00 configuration.yaml \uc5d0\uc11c \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc744 \ud1b5\ud574 \uad6c\uc131 \ud56d\ubaa9\uc73c\ub85c \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "Konnected \uae30\uae30 \uac00\uc838\uc624\uae30" - }, - "user": { - "data": { - "host": "Konnected \uae30\uae30 IP \uc8fc\uc18c", - "port": "Konnected \uae30\uae30 \ud3ec\ud2b8" - }, - "description": "Konnected \ud328\ub110\uc758 \ud638\uc2a4\ud2b8 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "Konnected \uae30\uae30 \ucc3e\uae30" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "\uc778\uc2dd\ub41c Konnected.io \uae30\uae30\uac00 \uc544\ub2d9\ub2c8\ub2e4" - }, - "error": { - "bad_host": "API \ud638\uc2a4\ud2b8 URL \uc7ac\uc815\uc758\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "options_binary": { - "data": { - "inverse": "\uc5f4\ub9bc / \ub2eb\ud798 \uc0c1\ud0dc \ubc18\uc804", - "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d)", - "type": "\uc774\uc9c4 \uc13c\uc11c \uc720\ud615" - }, - "description": "{zone} \uc5d0 \uc5f0\uacb0\ub41c \uc774\uc9c4 \uc13c\uc11c\uc5d0 \ub300\ud55c \uc635\uc158\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694", - "title": "\uc774\uc9c4 \uc13c\uc11c \uad6c\uc131" - }, - "options_digital": { - "data": { - "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d)", - "poll_interval": "\ud3f4\ub9c1 \uac04\uaca9 (\ubd84) (\uc120\ud0dd \uc0ac\ud56d)", - "type": "\uc13c\uc11c \uc720\ud615" - }, - "description": "{zone} \uc5d0 \uc5f0\uacb0\ub41c \ub514\uc9c0\ud138 \uc13c\uc11c\uc5d0 \ub300\ud55c \uc635\uc158\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694", - "title": "\ub514\uc9c0\ud138 \uc13c\uc11c \uad6c\uc131" - }, - "options_io": { - "data": { - "1": "\uad6c\uc5ed 1", - "2": "\uad6c\uc5ed 2", - "3": "\uad6c\uc5ed 3", - "4": "\uad6c\uc5ed 4", - "5": "\uad6c\uc5ed 5", - "6": "\uad6c\uc5ed 6", - "7": "\uad6c\uc5ed 7", - "out": "\uc678\ubd80" - }, - "description": "{host} \uc5d0\uc11c {model} \uc744(\ub97c) \ubc1c\uacac\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc9c4 \uc13c\uc11c(\uac1c\ud3d0 \uc811\uc810), \ub514\uc9c0\ud138 \uc13c\uc11c(dht \ubc0f ds18b20) \ub610\ub294 \uc2a4\uc704\uce58\uac00 \uac00\ub2a5\ud55c \uc13c\uc11c\uc758 I/O \uc5d0 \ub530\ub77c \uc544\ub798\uc5d0\uc11c \uac01 I/O \uc758 \uae30\ubcf8 \uad6c\uc131\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c \uc138\ubd80 \uc635\uc158\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "I/O \uad6c\uc131" - }, - "options_io_ext": { - "data": { - "10": "\uad6c\uc5ed 10", - "11": "\uad6c\uc5ed 11", - "12": "\uad6c\uc5ed 12", - "8": "\uad6c\uc5ed 8", - "9": "\uad6c\uc5ed 9", - "alarm1": "\uc54c\ub78c 1", - "alarm2_out2": "\ucd9c\ub825 2 / \uc54c\ub78c 2", - "out1": "\ucd9c\ub825 1" - }, - "description": "\uc544\ub798\uc758 \ub098\uba38\uc9c0 I/O \uad6c\uc131\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c \uc138\ubd80 \uc635\uc158\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "\ud655\uc7a5 I/O \uad6c\uc131" - }, - "options_misc": { - "data": { - "api_host": "API \ud638\uc2a4\ud2b8 URL \uc7ac\uc815\uc758 (\uc120\ud0dd \uc0ac\ud56d)", - "blink": "\uc0c1\ud0dc \ubcc0\uacbd\uc744 \ubcf4\ub0bc \ub54c \uae5c\ubc15\uc784 \ud328\ub110 LED \ub97c \ucf2d\ub2c8\ub2e4", - "override_api_host": "\uae30\ubcf8 Home Assistant API \ud638\uc2a4\ud2b8 \ud328\ub110 URL \uc7ac\uc815\uc758" - }, - "description": "\ud328\ub110\uc5d0 \uc6d0\ud558\ub294 \ub3d9\uc791\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694", - "title": "\uae30\ud0c0 \uad6c\uc131" - }, - "options_switch": { - "data": { - "activation": "\uc2a4\uc704\uce58\uac00 \ucf1c\uc9c8 \ub54c \ucd9c\ub825", - "momentary": "\ud384\uc2a4 \uc9c0\uc18d\uc2dc\uac04 (ms) (\uc120\ud0dd \uc0ac\ud56d)", - "more_states": "\uc774 \uad6c\uc5ed\uc5d0 \ub300\ud55c \ucd94\uac00 \uc0c1\ud0dc \uad6c\uc131", - "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d)", - "pause": "\ud384\uc2a4 \uac04 \uc77c\uc2dc\uc815\uc9c0 \uc2dc\uac04 (ms) (\uc120\ud0dd \uc0ac\ud56d)", - "repeat": "\ubc18\ubcf5 \uc2dc\uac04 (-1 = \ubb34\ud55c) (\uc120\ud0dd \uc0ac\ud56d)" - }, - "description": "{zone} \uad6c\uc5ed\uc5d0 \ub300\ud55c \ucd9c\ub825 \uc635\uc158\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694: \uc0c1\ud0dc {state}", - "title": "\uc2a4\uc704\uce58 \ucd9c\ub825 \uad6c\uc131" - } - }, - "title": "Konnected \uc54c\ub78c \ud328\ub110 \uc635\uc158" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/lb.json b/homeassistant/components/konnected/.translations/lb.json deleted file mode 100644 index 6ad04254611..00000000000 --- a/homeassistant/components/konnected/.translations/lb.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert", - "already_in_progress": "Konfiguratioun's Oflaf fir den Apparat ass schonn am gaangen.", - "not_konn_panel": "Keen erkannten Konnected.io Apparat", - "unknown": "Onbekannten Fehler opgetrueden" - }, - "error": { - "cannot_connect": "Kann sech net mam Konnected Panel um {host}:{port} verbannen" - }, - "step": { - "confirm": { - "description": "Modell: {model}\nID: {id}\nHost: {host}\nPort: {port}\n\nDir k\u00ebnnt den I/O a Panel Verhaalen an de Konnected Alarm Panel Astellunge konfigur\u00e9ieren.", - "title": "Konnected Apparat parat" - }, - "import_confirm": { - "description": "Ee Konnected Alarm Pael mat der ID {id} gouf an der configuration.yaml entdeckt. D\u00ebsen Oflaf erlaabt et als eng Konfiguratioun z'import\u00e9ieren.", - "title": "Konnected Apparat import\u00e9ieren" - }, - "user": { - "data": { - "host": "Konnected Apparat IP Adress", - "port": "Konnected Apparat Port" - }, - "description": "Informatioune vum Konnected Panel aginn.", - "title": "Konnected Apparat entdecken" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Keen erkannten Konnected.io Apparat" - }, - "error": { - "bad_host": "Iwwerschriwwen API Host URL ong\u00eblteg", - "one": "Ee", - "other": "M\u00e9i" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Op/Zou Zoustand vertauschen", - "name": "Numm (optional)", - "type": "Typ vun Bin\u00e4re Sensor" - }, - "description": "Wiel d'Optioune fir den bin\u00e4ren Sensor dee mat {zone} verbonnen ass", - "title": "Bin\u00e4re Sensor konfigur\u00e9ieren" - }, - "options_digital": { - "data": { - "name": "Numm (optional)", - "poll_interval": "Intervall vun den Offroen (Minutten) (optional)", - "type": "Typ vum Sensor" - }, - "description": "Wiel d'Optioune fir den digitale Sensor dee mat {zone} verbonnen ass", - "title": "Digitale Sensor konfigur\u00e9ieren" - }, - "options_io": { - "data": { - "1": "Zon 2", - "2": "Zon 1", - "3": "Zon 3", - "4": "Zon 4", - "5": "Zon 5", - "6": "Zon 6", - "7": "Zon 7", - "out": "OUT" - }, - "description": "{model} um {host} entdeckt.\u00a0Wiel Basis Konfiguratioun vun den I/O hei dr\u00ebnner aus - ofh\u00e4ngeg vum I/O erlaabt et bin\u00e4r Sensoren (op / zou Kontakter), digital Sensoren (dht an ds18b20) oder schaltbar Ausgab. D\u00e9i detaill\u00e9iert Optioune k\u00ebnnen en an den n\u00e4chste Schr\u00ebtt konfigur\u00e9iert ginn.", - "title": "I/O konfigur\u00e9ieren" - }, - "options_io_ext": { - "data": { - "10": "Zon 10", - "11": "Zon 11", - "12": "Zon 12", - "8": "Zon 8", - "9": "Zon 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "Wiel d'Konfiguratioun vun de verbleiwenden I/O hei dr\u00ebnner. D\u00e9i detaill\u00e9iert Optioune k\u00ebnnen en an den n\u00e4chste Schr\u00ebtt konfigur\u00e9iert ginn.", - "title": "Erweiderten I/O konfigur\u00e9ieren" - }, - "options_misc": { - "data": { - "api_host": "API Host URL iwwerschr\u00e9iwen (optionell)", - "blink": "Blink panel LED un wann Status \u00c4nnerung gesch\u00e9ckt g\u00ebtt", - "override_api_host": "Standard Home Assistant API Host Tableau URL iwwerschr\u00e9iwen" - }, - "description": "Wielt w.e.g. dat gew\u00ebnschte Verhalen fir \u00c4re Panel aus", - "title": "Divers Optioune astellen" - }, - "options_switch": { - "data": { - "activation": "Ausgang wann un", - "momentary": "Pulsatiounsdauer (ms) (optional)", - "more_states": "Zous\u00e4tzlesch Zoust\u00e4nn fir d\u00ebs Zon konfigur\u00e9ieren", - "name": "Numm (optional)", - "pause": "Pausen zw\u00ebscht den Impulser (ms) (optional)", - "repeat": "Unzuel vu Widderhuelungen (-1= onendlech) (optional)" - }, - "description": "Wielt w.e.g. d'Ausgaboptiounen fir {zone}", - "title": "\u00cbmschltbaren Ausgang konfigur\u00e9ieren" - } - }, - "title": "Konnected Alarm Panneau Optiounen" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/nl.json b/homeassistant/components/konnected/.translations/nl.json deleted file mode 100644 index 1b6242b37f4..00000000000 --- a/homeassistant/components/konnected/.translations/nl.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparaat is al geconfigureerd", - "unknown": "Onbekende fout opgetreden" - }, - "step": { - "confirm": { - "title": "Konnected Apparaat Klaar" - }, - "user": { - "data": { - "host": "IP-adres van Konnected apparaat", - "port": "Konnected apparaat poort" - }, - "description": "Voer de host-informatie in voor uw Konnected-paneel.", - "title": "Ontdek Konnected Device" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Geen herkend Konnected.io apparaat" - }, - "error": { - "one": "Leeg", - "other": "Leeg" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Keer de open / dicht status om", - "name": "Naam (optioneel)", - "type": "Type binaire sensor" - }, - "title": "Binaire sensor configureren" - }, - "options_digital": { - "data": { - "name": "Naam (optioneel)", - "type": "Type sensor" - } - }, - "options_io": { - "data": { - "1": "Zone 1", - "2": "Zone 2", - "3": "Zone 3", - "4": "Zone 4", - "5": "Zone 5", - "6": "Zone 6", - "7": "Zone 7" - } - }, - "options_io_ext": { - "data": { - "10": "Zone 10", - "11": "Zone 11", - "12": "Zone 12", - "8": "Zone 8", - "9": "Zone 9" - } - }, - "options_switch": { - "data": { - "name": "Naam (optioneel)" - }, - "title": "Schakelbare uitgang configureren" - } - }, - "title": "Konnected Alarm Paneel Opties" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/no.json b/homeassistant/components/konnected/.translations/no.json deleted file mode 100644 index 86d9fe877af..00000000000 --- a/homeassistant/components/konnected/.translations/no.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert", - "already_in_progress": "Konfigurasjonsflyt for enhet p\u00e5g\u00e5r allerede.", - "not_konn_panel": "Ikke en anerkjent Konnected.io-enhet", - "unknown": "Ukjent feil oppstod" - }, - "error": { - "cannot_connect": "Kan ikke koble til et Konnected Panel p\u00e5 {host} : {port}" - }, - "step": { - "confirm": { - "description": "Modell: {model}\nID: {id}\nVert: {host}\nPort: {port}\n\nDu kan konfigurere IO- og panelvirkem\u00e5ten i innstillingene for Konnected Alarm Panel.", - "title": "Konnected Enhet klar" - }, - "import_confirm": { - "description": "Et Konnected Alarm Panel med ID {id} er oppdaget i configuration.yaml. Denne flyten vil tillate deg \u00e5 importere den til en config-oppf\u00f8ring.", - "title": "Importer Konnected Enhet" - }, - "user": { - "data": { - "host": "Konnected enhet IP-adresse", - "port": "Koblet enhetsport" - }, - "description": "Vennligst skriv inn verten informasjon for din Konnected Panel.", - "title": "Oppdag Konnected Enheten" - } - }, - "title": "" - }, - "options": { - "abort": { - "not_konn_panel": "Ikke en anerkjent Konnected.io-enhet" - }, - "error": { - "bad_host": "Ugyldig overstyr API-vertsadresse" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Inverter \u00e5pen / lukk tilstand", - "name": "Navn (valgfritt)", - "type": "Bin\u00e6r sensortype" - }, - "description": "Vennligst velg alternativer for bin\u00e6re sensor koblet til {sone}", - "title": "Konfigurer bin\u00e6r sensor" - }, - "options_digital": { - "data": { - "name": "Navn (valgfritt)", - "poll_interval": "Avstemningsintervall (minutter) (valgfritt)", - "type": "Sensortype" - }, - "description": "Vennligst velg alternativene for den digitale sensor som er koblet til {sone}", - "title": "Konfigurere Digital Sensor" - }, - "options_io": { - "data": { - "1": "Sone 1", - "2": "Sone 2", - "3": "Sone 3", - "4": "Sone 4", - "5": "Sone 5", - "6": "Sone 6", - "7": "Sone 7", - "out": "OUT" - }, - "description": "Oppdaget en {model} hos {host} . Velg basiskonfigurasjon for hver I / O nedenfor - avhengig av I / O kan det gi rom for bin\u00e6re sensorer (\u00e5pne / lukke kontakter), digitale sensorer (dht og ds18b20), eller switchbare utganger. Du vil kunne konfigurere detaljerte alternativer i de neste trinnene.", - "title": "Konfigurere I/O" - }, - "options_io_ext": { - "data": { - "10": "Sone 10", - "11": "Sone 11", - "12": "Sone 12", - "8": "Sone 8", - "9": "Sone 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "Velg konfigurasjonen av de gjenv\u00e6rende I/O nedenfor. Du vil v\u00e6re i stand til \u00e5 konfigurere detaljerte alternativer i de neste trinnene.", - "title": "Konfigurer utvidet I / O" - }, - "options_misc": { - "data": { - "api_host": "Overstyre API-vert-URL (valgfritt)", - "blink": "Blink p\u00e5 LED-lampen n\u00e5r du sender statusendring", - "override_api_host": "Overstyre standard Home Assistant API-vertspanel-URL" - }, - "description": "Vennligst velg \u00f8nsket atferd for din panel", - "title": "Konfigurere Diverse" - }, - "options_switch": { - "data": { - "activation": "Utgang n\u00e5r den er p\u00e5", - "momentary": "Pulsvarighet (ms) (valgfritt)", - "more_states": "Konfigurere flere tilstander for denne sonen", - "name": "Navn (valgfritt)", - "pause": "Pause mellom pulser (ms) (valgfritt)", - "repeat": "Tider \u00e5 gjenta (-1 = uendelig) (valgfritt)" - }, - "description": "Velg outputalternativer for {zone} : state {state}", - "title": "Konfigurere Valgbare Utgang" - } - }, - "title": "Alternativer for Konnected Alarm Panel" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/pl.json b/homeassistant/components/konnected/.translations/pl.json deleted file mode 100644 index b0d721891c0..00000000000 --- a/homeassistant/components/konnected/.translations/pl.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "already_in_progress": "Konfiguracja urz\u0105dzenia jest ju\u017c w toku.", - "not_konn_panel": "Nie rozpoznano urz\u0105dzenia Konnected.io", - "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z panelem Konnected na {host}:{port}" - }, - "step": { - "confirm": { - "description": "Model: {model} \nHost: {host} \nPort: {port} \n\nMo\u017cesz skonfigurowa\u0107 IO i zachowanie panelu w ustawieniach Konnected Alarm Panel.", - "title": "Urz\u0105dzenie Konnected gotowe" - }, - "user": { - "data": { - "host": "Adres IP urz\u0105dzenia Konnected", - "port": "Port urz\u0105dzenia Konnected urz\u0105dzenia" - }, - "description": "Wprowad\u017a informacje o ho\u015bcie panelu Konnected.", - "title": "Wykryj urz\u0105dzenie Konnected" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Nie rozpoznano urz\u0105dzenia Konnected.io" - }, - "error": { - "few": "kilka", - "many": "wiele", - "one": "jeden", - "other": "inny" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Odwr\u00f3\u0107 stan otwarty/zamkni\u0119ty", - "name": "Nazwa (opcjonalnie)", - "type": "Typ sensora binarnego" - }, - "description": "Wybierz opcje dla sensora binarnego powi\u0105zanego ze {zone}", - "title": "Konfiguracja sensora binarnego" - }, - "options_digital": { - "data": { - "name": "Nazwa (opcjonalnie)", - "poll_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji (minuty) (opcjonalnie)", - "type": "Typ sensora" - }, - "description": "Wybierz opcje dla cyfrowego sensora powi\u0105zanego ze {zone}", - "title": "Konfiguracja sensora cyfrowego" - }, - "options_io": { - "data": { - "1": "Strefa 1", - "2": "Strefa 2", - "3": "Strefa 3", - "4": "Strefa 4", - "5": "Strefa 5", - "6": "Strefa 6", - "7": "Strefa 7", - "out": "OUT" - }, - "description": "Wykryto {model} na ho\u015bcie {host}. Wybierz podstawow\u0105 konfiguracj\u0119 ka\u017cdego wej\u015bcia/wyj\u015bcia poni\u017cej \u2014 w zale\u017cno\u015bci od typu wej\u015b\u0107/wyj\u015b\u0107 mo\u017ce zastosowa\u0107 sensory binarne (otwarte/ amkni\u0119te), sensory cyfrowe (dht i ds18b20) lub prze\u0142\u0105czane wyj\u015bcia. B\u0119dziesz m\u00f3g\u0142 skonfigurowa\u0107 szczeg\u00f3\u0142owe opcje w kolejnych krokach.", - "title": "Konfiguracja wej\u015bcia/wyj\u015bcia" - }, - "options_io_ext": { - "data": { - "10": "Strefa 10", - "11": "Strefa 11", - "12": "Strefa 12", - "8": "Strefa 8", - "9": "Strefa 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "Wybierz konfiguracj\u0119 pozosta\u0142ych wej\u015b\u0107/wyj\u015b\u0107 poni\u017cej. B\u0119dziesz m\u00f3g\u0142 skonfigurowa\u0107 szczeg\u00f3\u0142owe opcje w kolejnych krokach.", - "title": "Konfiguracja rozszerzonego wej\u015bcia/wyj\u015bcia" - }, - "options_misc": { - "data": { - "blink": "Miganie diody LED panelu podczas wysy\u0142ania zmiany stanu" - }, - "description": "Wybierz po\u017c\u0105dane zachowanie dla swojego panelu", - "title": "R\u00f3\u017cne opcje" - }, - "options_switch": { - "data": { - "activation": "Wyj\u015bcie, gdy w\u0142\u0105czone", - "momentary": "Czas trwania impulsu (ms) (opcjonalnie)", - "name": "Nazwa (opcjonalnie)", - "pause": "Przerwa mi\u0119dzy impulsami (ms) (opcjonalnie)", - "repeat": "Ilo\u015b\u0107 powt\u00f3rze\u0144 (-1=niesko\u0144czenie) (opcjonalnie)" - }, - "description": "Wybierz opcje wyj\u015bcia dla {zone}", - "title": "Konfiguracja prze\u0142\u0105czalne wyj\u015bcie" - } - }, - "title": "Opcje panelu alarmu Konnected" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/ru.json b/homeassistant/components/konnected/.translations/ru.json deleted file mode 100644 index f3b7f4d6d24..00000000000 --- a/homeassistant/components/konnected/.translations/ru.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", - "not_konn_panel": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected.io \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0430\u043d\u0435\u043b\u0438 Konnected {host}:{port}." - }, - "step": { - "confirm": { - "description": "\u041c\u043e\u0434\u0435\u043b\u044c: {model}\nID: {id}\n\u0425\u043e\u0441\u0442: {host}\n\u041f\u043e\u0440\u0442: {port}\n\n\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u043d\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043e\u0432 \u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Konnected.", - "title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u0440\u0430\u0431\u043e\u0442\u0435." - }, - "import_confirm": { - "description": "\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Konnected ID {id} \u0440\u0430\u043d\u0435\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 configuration.yaml. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.", - "title": "\u0418\u043c\u043f\u043e\u0440\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Konnected" - }, - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "port": "\u041f\u043e\u0440\u0442" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u043f\u0430\u043d\u0435\u043b\u0438 Konnected.", - "title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected.io \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e." - }, - "error": { - "bad_host": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 URL \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u0430 API." - }, - "step": { - "options_binary": { - "data": { - "inverse": "\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435/\u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "type": "\u0422\u0438\u043f \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430" - }, - "description": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a {zone}.", - "title": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430" - }, - "options_digital": { - "data": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "poll_interval": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430 \u0432 \u043c\u0438\u043d\u0443\u0442\u0430\u0445 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "type": "\u0422\u0438\u043f \u0441\u0435\u043d\u0441\u043e\u0440\u0430" - }, - "description": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u043d\u0441\u043e\u0440\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a {zone}.", - "title": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u043d\u0441\u043e\u0440\u0430" - }, - "options_io": { - "data": { - "1": "\u0417\u043e\u043d\u0430 1", - "2": "\u0417\u043e\u043d\u0430 2", - "3": "\u0417\u043e\u043d\u0430 3", - "4": "\u0417\u043e\u043d\u0430 4", - "5": "\u0417\u043e\u043d\u0430 5", - "6": "\u0417\u043e\u043d\u0430 6", - "7": "\u0417\u043e\u043d\u0430 7", - "out": "\u0412\u042b\u0425\u041e\u0414" - }, - "description": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e {model} \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c {host}. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432, \u043a \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b (\u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f/\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f), \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b (dht \u0438 ds18b20) \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044b. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445.", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432" - }, - "options_io_ext": { - "data": { - "10": "\u0417\u043e\u043d\u0430 10", - "11": "\u0417\u043e\u043d\u0430 11", - "12": "\u0417\u043e\u043d\u0430 12", - "8": "\u0417\u043e\u043d\u0430 8", - "9": "\u0417\u043e\u043d\u0430 9", - "alarm1": "\u0422\u0420\u0415\u0412\u041e\u0413\u04101", - "alarm2_out2": "\u0412\u042b\u0425\u041e\u04142/\u0422\u0420\u0415\u0412\u041e\u0413\u04102", - "out1": "\u0412\u042b\u0425\u041e\u04141" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445.", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432" - }, - "options_misc": { - "data": { - "api_host": "\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c URL \u0445\u043e\u0441\u0442\u0430 API (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "blink": "LED-\u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f", - "override_api_host": "\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c URL-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442-\u043f\u0430\u043d\u0435\u043b\u0438 Home Assistant API" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.", - "title": "\u041f\u0440\u043e\u0447\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438" - }, - "options_switch": { - "data": { - "activation": "\u0412\u044b\u0445\u043e\u0434 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438", - "momentary": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 (\u043c\u0441) (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "more_states": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "pause": "\u041f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430\u043c\u0438 (\u043c\u0441) (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", - "repeat": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 (-1 = \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e) (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u0430 \u0434\u043b\u044f {zone}: \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 {state}.", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430" - } - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Konnected" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/sl.json b/homeassistant/components/konnected/.translations/sl.json deleted file mode 100644 index 2b2269bee5f..00000000000 --- a/homeassistant/components/konnected/.translations/sl.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana", - "already_in_progress": "Konfiguracijski tok za napravo je \u017ee v teku.", - "not_konn_panel": "Ni prepoznana kot Konnected.io naprava", - "unknown": "Pri\u0161lo je do neznane napake" - }, - "error": { - "cannot_connect": "Ni mogo\u010de vzpostaviti povezave s Konnected plo\u0161\u010do v {Host}: {Port}" - }, - "step": { - "confirm": { - "description": "Model: {model}\nID: {id}\nGostitelj: {host}\nVrata: {port}\n\nV nastavitvah lahko nastavite vedenje I/O in plo\u0161\u010de Konnected alarma. ", - "title": "Konnected naprava pripravljena" - }, - "import_confirm": { - "description": "Konnected alarm panel z ID {id} je bil odkrit v konfiguraciji. YAML. To tok vam bo omogo\u010dil, da ga uvozite v va\u0161o konfiguracijo.", - "title": "Uvoz Konnected Naprave" - }, - "user": { - "data": { - "host": "IP-naslov Konnected naprave", - "port": "Vrata Konnected naprave" - }, - "description": "Vnesite podatke o gostitelju v svoj Konnected Panel.", - "title": "Odkrijte Konnected napravo" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Ni prepoznana kot Konnected.io naprava" - }, - "error": { - "few": "nekaj", - "one": "ena", - "other": "drugo", - "two": "dva" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Zamenjajte odprto / zaprto stanje", - "name": "Ime (neobvezno)", - "type": "Vrsta binarnega senzorja" - }, - "description": "Izberite mo\u017enosti za binarni senzor, priklju\u010den na {zone}", - "title": "Konfigurirajte binarni senzor" - }, - "options_digital": { - "data": { - "name": "Ime (neobvezno)", - "poll_interval": "Interval osve\u017eevanja (minute) (neobvezno)", - "type": "Vrsta tipala" - }, - "description": "Izberite mo\u017enosti za digitalni senzor, priklju\u010den na {zone}", - "title": "Konfigurirajte digitalni senzor" - }, - "options_io": { - "data": { - "1": "Zone 1", - "2": "Zone 2", - "3": "Zone 3", - "4": "Zone 4", - "5": "Zone 5", - "6": "Zone 6", - "7": "Zone 7", - "out": "OUT" - }, - "description": "Odkrili {model} na {host} . Spodaj izberite osnovno konfiguracijo vsakega I / O - odvisno od I / O lahko omogo\u010da binarne senzorje (odpiranje / zapiranje kontaktov), digitalne senzorje (dht in ds18b20) ali preklopne izhode. Podrobne mo\u017enosti boste lahko konfigurirali v naslednjih korakih.", - "title": "Konfigurirajte I / O" - }, - "options_io_ext": { - "data": { - "10": "Obmo\u010dje 10", - "11": "Obmo\u010dje 11", - "12": "Obmo\u010dje 12", - "8": "Obmo\u010dje 8", - "9": "Obmo\u010dje 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2 / ALARM2", - "out1": "OUT1" - }, - "description": "Izberite konfiguracijo preostalega I/O spodaj. Podrobne mo\u017enosti boste lahko konfigurirali v naslednjih korakih.", - "title": "Konfigurirajte raz\u0161irjeni I/O" - }, - "options_misc": { - "data": { - "blink": "Lu\u010dka LED na zaslonu utripa, ko po\u0161iljate spremembo stanja" - }, - "description": "Izberite \u017eeleno vedenje za va\u0161o plo\u0161\u010do", - "title": "Konfigurirajte Razno" - }, - "options_switch": { - "data": { - "activation": "Izhod, ko je vklopljen", - "momentary": "Trajanje impulza (ms) (neobvezno)", - "name": "Ime (neobvezno)", - "pause": "Premor med impulzi (ms) (neobvezno)", - "repeat": "\u010casi ponovitve (-1 = neskon\u010dno) (neobvezno)" - }, - "description": "Izberite izhodne mo\u017enosti za {zone}", - "title": "Konfigurirajte preklopni izhod" - } - }, - "title": "Mo\u017enosti Konnected alarm-a" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/sv.json b/homeassistant/components/konnected/.translations/sv.json deleted file mode 100644 index 7e035264215..00000000000 --- a/homeassistant/components/konnected/.translations/sv.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten \u00e4r redan konfigurerad", - "already_in_progress": "Konfigurationsfl\u00f6de f\u00f6r enhet p\u00e5g\u00e5r redan.", - "not_konn_panel": "Inte en erk\u00e4nd Konnected.io-enhet", - "unknown": "Ett ok\u00e4nt fel har intr\u00e4ffat" - }, - "error": { - "cannot_connect": "Det g\u00e5r inte att ansluta till en ansluten panel p\u00e5 {host}:{port}" - }, - "step": { - "confirm": { - "description": "Modell: {modell}\nV\u00e4rd: {host}\nPort: {port}\n\nDu kan konfigurera IO- och panelbeteendet i inst\u00e4llningarna f\u00f6r Konnected Alarm Panel.", - "title": "Konnected-enheten redo" - }, - "user": { - "data": { - "host": "Konnected-enhetens IP-adress", - "port": "Konnected-enhetens port" - }, - "description": "Ange v\u00e4rdinformationen f\u00f6r din Konnected Panel.", - "title": "Uppt\u00e4ck Konnected-enhet" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "Inte en erk\u00e4nd Konnected.io-enhet" - }, - "error": { - "one": "Tom", - "other": "Tomma" - }, - "step": { - "options_binary": { - "data": { - "inverse": "Invertera \u00f6ppet/st\u00e4ngt tillst\u00e5nd", - "name": "Namn (valfritt)", - "type": "Bin\u00e4r sensortyp" - }, - "description": "V\u00e4lj alternativ f\u00f6r den bin\u00e4ra sensorn som \u00e4r ansluten till {zone}", - "title": "Konfigurera Bin\u00e4r Sensor" - }, - "options_digital": { - "data": { - "name": "Namn (valfritt)", - "poll_interval": "H\u00e4mtningsintervall (minuter) (valfritt)", - "type": "Sensortyp" - }, - "description": "V\u00e4lj alternativ f\u00f6r den digitala sensorn som \u00e4r ansluten till {zone}", - "title": "Konfigurera Digital Sensor" - }, - "options_io": { - "data": { - "1": "Zon 1", - "2": "Zon 2", - "3": "Zon 3", - "4": "Zon 4", - "5": "Zon 5", - "6": "Zon 6", - "7": "Zon 7", - "out": "UT" - }, - "description": "Uppt\u00e4ckte en {model} p\u00e5 {host}. V\u00e4lj baskonfigurationen f\u00f6r varje I/O nedan - beroende p\u00e5 I/O kan det m\u00f6jligg\u00f6ra bin\u00e4ra sensorer (\u00f6ppen/st\u00e4ngd kontakter), digitala sensorer (dht och ds18b20) eller omkopplingsbara utg\u00e5ngar. Du kan konfigurera detaljerade alternativ i n\u00e4sta steg.", - "title": "Konfigurera I/O" - }, - "options_io_ext": { - "data": { - "10": "Zon 10", - "11": "Zon 11", - "12": "Zon 12", - "8": "Zon 8", - "9": "Zon 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "V\u00e4lj den konfiguration av resterande I/O nedan. Du kommer att kunna konfigurera detaljerade alternativ i n\u00e4sta steg.", - "title": "Konfigurera ut\u00f6kat I/O" - }, - "options_misc": { - "data": { - "blink": "Blinka p\u00e5 panel-LED n\u00e4r du skickar tillst\u00e5nds\u00e4ndring" - }, - "description": "V\u00e4lj \u00f6nskat beteende f\u00f6r din panel", - "title": "Konfigurera \u00d6vrigt" - }, - "options_switch": { - "data": { - "activation": "Utdata n\u00e4r den \u00e4r p\u00e5", - "momentary": "Pulsvarighet (ms) (valfritt)", - "name": "Namn (valfritt)", - "pause": "Paus mellan pulser (ms) (valfritt)", - "repeat": "G\u00e5nger att upprepa (-1=o\u00e4ndligt) (tillval)" - }, - "description": "V\u00e4lj utdataalternativ f\u00f6r {zone}", - "title": "Konfigurera v\u00e4xelbar utdata" - } - }, - "title": "Alternativ f\u00f6r Konnected alarmpanel" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/zh-Hant.json b/homeassistant/components/konnected/.translations/zh-Hant.json deleted file mode 100644 index 9c3e818e692..00000000000 --- a/homeassistant/components/konnected/.translations/zh-Hant.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "\u8a2d\u5099\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", - "not_konn_panel": "\u4e26\u975e\u53ef\u8b58\u5225 Konnected.io \u8a2d\u5099", - "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Konnected \u9762\u677f\uff1a{host}:{port}" - }, - "step": { - "confirm": { - "description": "\u578b\u865f\uff1a{model}\nID\uff1a{id}\n\u4e3b\u6a5f\u7aef\uff1a{host}\n\u901a\u8a0a\u57e0\uff1a{port}\n\n\u53ef\u4ee5\u65bc Konncected \u8b66\u5831\u9762\u677f\u8a2d\u5b9a\u4e2d\u8a2d\u5b9a IO \u8207\u9762\u677f\u884c\u70ba\u3002", - "title": "Konnected \u8a2d\u5099\u5df2\u5099\u59a5" - }, - "import_confirm": { - "description": "\u65bc configuration.yaml \u4e2d\u767c\u73fe Konnected \u8b66\u5831 ID {id}\u3002\u6b64\u6d41\u7a0b\u5c07\u5141\u8a31\u532f\u5165\u81f3\u8a2d\u5b9a\u4e2d\u3002", - "title": "\u532f\u5165 Konnected \u8a2d\u5099" - }, - "user": { - "data": { - "host": "Konnected \u8a2d\u5099 IP \u4f4d\u5740", - "port": "Konnected \u8a2d\u5099\u901a\u8a0a\u57e0" - }, - "description": "\u8acb\u8f38\u5165 Konnected \u9762\u677f\u4e3b\u6a5f\u7aef\u8cc7\u8a0a\u3002", - "title": "\u641c\u7d22 Konnected \u8a2d\u5099" - } - }, - "title": "Konnected.io" - }, - "options": { - "abort": { - "not_konn_panel": "\u4e26\u975e\u53ef\u8b58\u5225 Konnected.io \u8a2d\u5099" - }, - "error": { - "bad_host": "\u7121\u6548\u7684\u8986\u5beb API \u4e3b\u6a5f\u7aef URL" - }, - "step": { - "options_binary": { - "data": { - "inverse": "\u53cd\u8f49\u958b\u555f/\u95dc\u9589\u72c0\u614b", - "name": "\u540d\u7a31\uff08\u9078\u9805\uff09", - "type": "\u4e8c\u9032\u4f4d\u611f\u61c9\u5668\u985e\u578b" - }, - "description": "\u8acb\u9078\u64c7\u6b78\u7d0d\u70ba {zone}\u7684\u4e8c\u9032\u4f4d\u611f\u61c9\u5668\u8f38\u51fa\u9078\u9805", - "title": "\u8a2d\u5b9a\u4e8c\u9032\u4f4d\u611f\u61c9\u5668" - }, - "options_digital": { - "data": { - "name": "\u540d\u7a31\uff08\u9078\u9805\uff09", - "poll_interval": "\u66f4\u65b0\u9593\u8ddd\uff08\u5206\u9418\uff09\uff08\u9078\u9805\uff09", - "type": "\u611f\u61c9\u5668\u985e\u578b" - }, - "description": "\u8acb\u9078\u64c7\u6b78\u7d0d\u70ba {zone}\u7684\u6578\u4f4d\u611f\u61c9\u5668\u8f38\u51fa\u9078\u9805", - "title": "\u8a2d\u5b9a\u6578\u4f4d\u611f\u61c9\u5668" - }, - "options_io": { - "data": { - "1": "\u5340\u57df 1", - "2": "\u5340\u57df 2", - "3": "\u5340\u57df 3", - "4": "\u5340\u57df 4", - "5": "\u5340\u57df 5", - "6": "\u5340\u57df 6", - "7": "\u5340\u57df 7", - "out": "OUT" - }, - "description": "\u65bc {host} \u767c\u73fe {model}\u3002\u8acb\u65bc\u4e0b\u65b9\u6bcf\u4e00\u500b I/O \u9078\u64c7\u57fa\u672c\u8a2d\u5b9a - \u96a8\u8457 I/O \u4e0d\u540c\uff0c\u53ef\u5141\u8a31\u4e8c\u9032\u4f4d\u611f\u61c9\u5668\uff08\u958b\u555f/\u95dc\u9589\u72c0\u614b\uff09\u3001\u6578\u4f4d\u611f\u61c9\u5668\uff08DHT \u53ca ds18b20\uff09\uff0c\u6216\u8005\u53ef\u5207\u63db\u8f38\u51fa\u3002\u53ef\u4ee5\u65bc\u4e0b\u4e00\u6b65\u8a2d\u5b9a\u8a73\u7d30\u9078\u9805\u3002", - "title": "\u8a2d\u5b9a I/O" - }, - "options_io_ext": { - "data": { - "10": "\u5340\u57df 10", - "11": "\u5340\u57df 11", - "12": "\u5340\u57df 12", - "8": "\u5340\u57df 8", - "9": "\u5340\u57df 9", - "alarm1": "ALARM1", - "alarm2_out2": "OUT2/ALARM2", - "out1": "OUT1" - }, - "description": "\u9078\u64c7\u4e0b\u65b9\u5269\u9918 I/O \u8a2d\u5b9a\u3002\u53ef\u4ee5\u65bc\u4e0b\u4e00\u6b65\u8a2d\u5b9a\u8a73\u7d30\u9078\u9805\u3002", - "title": "\u8a2d\u5b9a\u5ef6\u4f38 I/O" - }, - "options_misc": { - "data": { - "api_host": "\u8986\u5beb API \u4e3b\u6a5f\u7aef URL\uff08\u9078\u9805\uff09", - "blink": "\u7576\u50b3\u9001\u72c0\u614b\u8b8a\u66f4\u6642\u3001\u9583\u720d\u9762\u677f LED", - "override_api_host": "\u8986\u5beb\u9810\u8a2d Home Assistant API \u4e3b\u6a5f\u7aef\u9762\u677f URL" - }, - "description": "\u8acb\u9078\u64c7\u9762\u677f\u671f\u671b\u884c\u70ba", - "title": "\u5176\u4ed6\u8a2d\u5b9a" - }, - "options_switch": { - "data": { - "activation": "\u958b\u555f\u6642\u8f38\u51fa", - "momentary": "\u6301\u7e8c\u6642\u9593\uff08ms\uff09\uff08\u9078\u9805\uff09", - "more_states": "\u8a2d\u5b9a\u6b64\u5340\u57df\u7684\u9644\u52a0\u72c0\u614b", - "name": "\u540d\u7a31\uff08\u9078\u9805\uff09", - "pause": "\u66ab\u505c\u9593\u8ddd\uff08ms\uff09\uff08\u9078\u9805\uff09", - "repeat": "\u91cd\u8907\u6642\u9593\uff08-1=\u7121\u9650\uff09\uff08\u9078\u9805\uff09" - }, - "description": "\u8acb\u9078\u64c7 {zone}\u8f38\u51fa\u9078\u9805\uff1a\u72c0\u614b {state}", - "title": "\u8a2d\u5b9a Switchable \u8f38\u51fa" - } - }, - "title": "Konnected \u8b66\u5831\u9762\u677f\u9078\u9805" - } -} \ No newline at end of file diff --git a/homeassistant/components/konnected/__init__.py b/homeassistant/components/konnected/__init__.py index e5185ff03bc..56ab439aee3 100644 --- a/homeassistant/components/konnected/__init__.py +++ b/homeassistant/components/konnected/__init__.py @@ -58,6 +58,7 @@ from .const import ( PIN_TO_ZONE, STATE_HIGH, STATE_LOW, + UNDO_UPDATE_LISTENER, UPDATE_ENDPOINT, ZONE_TO_PIN, ZONES, @@ -245,7 +246,7 @@ async def async_setup(hass: HomeAssistant, config: dict): # hass.async_add_job to avoid a deadlock. hass.async_create_task( hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=device, + DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=device ) ) return True @@ -254,7 +255,7 @@ async def async_setup(hass: HomeAssistant, config: dict): async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up panel from a config entry.""" client = AlarmPanel(hass, entry) - # create a data store in hass.data[DOMAIN][CONF_DEVICES] + # creates a panel data store in hass.data[DOMAIN][CONF_DEVICES] await client.async_save_data() try: @@ -267,7 +268,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, component) ) - entry.add_update_listener(async_entry_updated) + + # config entry specific data to enable unload + hass.data[DOMAIN][entry.entry_id] = { + UNDO_UPDATE_LISTENER: entry.add_update_listener(async_entry_updated) + } return True @@ -281,8 +286,12 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): ] ) ) + + hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]() + if unload_ok: hass.data[DOMAIN][CONF_DEVICES].pop(entry.data[CONF_ID]) + hass.data[DOMAIN].pop(entry.entry_id) return unload_ok @@ -314,7 +323,7 @@ class KonnectedView(HomeAssistantView): hass = request.app["hass"] data = hass.data[DOMAIN] - auth = request.headers.get(AUTHORIZATION, None) + auth = request.headers.get(AUTHORIZATION) tokens = [] if hass.data[DOMAIN].get(CONF_ACCESS_TOKEN): tokens.extend([hass.data[DOMAIN][CONF_ACCESS_TOKEN]]) @@ -335,11 +344,9 @@ class KonnectedView(HomeAssistantView): payload = await request.json() except json.decoder.JSONDecodeError: _LOGGER.error( - ( - "Your Konnected device software may be out of " - "date. Visit https://help.konnected.io for " - "updating instructions." - ) + "Your Konnected device software may be out of " + "date. Visit https://help.konnected.io for " + "updating instructions." ) device = data[CONF_DEVICES].get(device_id) @@ -350,6 +357,7 @@ class KonnectedView(HomeAssistantView): try: zone_num = str(payload.get(CONF_ZONE) or PIN_TO_ZONE[payload[CONF_PIN]]) + payload[CONF_ZONE] = zone_num zone_data = device[CONF_BINARY_SENSORS].get(zone_num) or next( (s for s in device[CONF_SENSORS] if s[CONF_ZONE] == zone_num), None ) @@ -389,11 +397,9 @@ class KonnectedView(HomeAssistantView): request.query.get(CONF_ZONE) or PIN_TO_ZONE[request.query[CONF_PIN]] ) zone = next( - ( - switch - for switch in device[CONF_SWITCHES] - if switch[CONF_ZONE] == zone_num - ) + switch + for switch in device[CONF_SWITCHES] + if switch[CONF_ZONE] == zone_num ) except StopIteration: @@ -421,7 +427,7 @@ class KonnectedView(HomeAssistantView): zone_entity_id = zone.get(ATTR_ENTITY_ID) if zone_entity_id: resp["state"] = self.binary_value( - hass.states.get(zone_entity_id).state, zone[CONF_ACTIVATION], + hass.states.get(zone_entity_id).state, zone[CONF_ACTIVATION] ) return self.json(resp) diff --git a/homeassistant/components/konnected/binary_sensor.py b/homeassistant/components/konnected/binary_sensor.py index 50f897e3a85..5cd270d5008 100644 --- a/homeassistant/components/konnected/binary_sensor.py +++ b/homeassistant/components/konnected/binary_sensor.py @@ -79,12 +79,14 @@ class KonnectedBinarySensor(BinarySensorDevice): async def async_added_to_hass(self): """Store entity_id and register state change callback.""" self._data[ATTR_ENTITY_ID] = self.entity_id - async_dispatcher_connect( - self.hass, f"konnected.{self.entity_id}.update", self.async_set_state + self.async_on_remove( + async_dispatcher_connect( + self.hass, f"konnected.{self.entity_id}.update", self.async_set_state + ) ) @callback def async_set_state(self, state): """Update the sensor's state.""" self._state = state - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/konnected/const.py b/homeassistant/components/konnected/const.py index 7cb0ffc5f80..c1e7d6b6f26 100644 --- a/homeassistant/components/konnected/const.py +++ b/homeassistant/components/konnected/const.py @@ -47,3 +47,5 @@ ZONE_TO_PIN = {zone: pin for pin, zone in PIN_TO_ZONE.items()} ENDPOINT_ROOT = "/api/konnected" UPDATE_ENDPOINT = ENDPOINT_ROOT + r"/device/{device_id:[a-zA-Z0-9]+}" SIGNAL_DS18B20_NEW = "konnected.ds18b20.new" + +UNDO_UPDATE_LISTENER = "undo_update_listener" diff --git a/homeassistant/components/konnected/manifest.json b/homeassistant/components/konnected/manifest.json index 3a74e2165df..95c14050a72 100644 --- a/homeassistant/components/konnected/manifest.json +++ b/homeassistant/components/konnected/manifest.json @@ -1,21 +1,14 @@ { "domain": "konnected", - "name": "Konnected", + "name": "Konnected.io", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/konnected", - "requirements": [ - "konnected==1.1.0" - ], + "requirements": ["konnected==1.1.0"], "ssdp": [ { "manufacturer": "konnected.io" } ], - "dependencies": [ - "http" - ], - "codeowners": [ - "@heythisisnate", - "@kit-klein" - ] + "dependencies": ["http"], + "codeowners": ["@heythisisnate", "@kit-klein"] } diff --git a/homeassistant/components/konnected/sensor.py b/homeassistant/components/konnected/sensor.py index e936898d7fb..74554f2afc2 100644 --- a/homeassistant/components/konnected/sensor.py +++ b/homeassistant/components/konnected/sensor.py @@ -137,4 +137,4 @@ class KonnectedSensor(Entity): self._state = int(float(state)) else: self._state = round(float(state), 1) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/konnected/strings.json b/homeassistant/components/konnected/strings.json index 0ea8a40bc0a..4c87cb0bff6 100644 --- a/homeassistant/components/konnected/strings.json +++ b/homeassistant/components/konnected/strings.json @@ -1,13 +1,11 @@ { "config": { - "title": "Konnected.io", "step": { "import_confirm": { "title": "Import Konnected Device", "description": "A Konnected Alarm Panel with ID {id} has been discovered in configuration.yaml. This flow will allow you to import it into a config entry." }, "user": { - "title": "Discover Konnected Device", "description": "Please enter the host information for your Konnected Panel.", "data": { "host": "Konnected device IP address", @@ -30,7 +28,6 @@ } }, "options": { - "title": "Konnected Alarm Panel Options", "step": { "options_io": { "title": "Configure I/O", @@ -100,11 +97,7 @@ } } }, - "error": { - "bad_host": "Invalid Override API host url" - }, - "abort": { - "not_konn_panel": "Not a recognized Konnected.io device" - } + "error": { "bad_host": "Invalid Override API host url" }, + "abort": { "not_konn_panel": "Not a recognized Konnected.io device" } } } diff --git a/homeassistant/components/konnected/switch.py b/homeassistant/components/konnected/switch.py index b8ddec20440..afc83458aaf 100644 --- a/homeassistant/components/konnected/switch.py +++ b/homeassistant/components/konnected/switch.py @@ -117,7 +117,7 @@ class KonnectedSwitch(ToggleEntity): def _set_state(self, state): self._state = state - self.async_schedule_update_ha_state() + self.async_write_ha_state() _LOGGER.debug( "Setting status of %s actuator zone %s to %s", self._device_id, diff --git a/homeassistant/components/konnected/translations/ca.json b/homeassistant/components/konnected/translations/ca.json new file mode 100644 index 00000000000..afe65f67f62 --- /dev/null +++ b/homeassistant/components/konnected/translations/ca.json @@ -0,0 +1,108 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat", + "already_in_progress": "El flux de dades de configuraci\u00f3 pel dispositiu ja est\u00e0 en curs.", + "not_konn_panel": "No s'ha reconegut com a un dispositiu Konnected.io", + "unknown": "S'ha produ\u00eft un error desconegut" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar amb el panell Konnected a {host}:{port}" + }, + "step": { + "confirm": { + "description": "Model: {model} \nAmfitri\u00f3: {host} \nPort: {port} \n\nPots configurar el comportament de les E/S (I/O) i del panell a la configuraci\u00f3 del panell d\u2019alarma Konnected.", + "title": "Dispositiu Konnected llest" + }, + "import_confirm": { + "description": "S'ha descobert un panell d'alarma Konnected amb ID {id} a configuration.yaml. Aquest flux et permetr\u00e0 importar-lo a una entrada de configuraci\u00f3.", + "title": "Importaci\u00f3 de dispositiu Konnected" + }, + "user": { + "data": { + "host": "Adre\u00e7a IP del dispositiu Konnected", + "port": "Port del dispositiu Konnected" + }, + "description": "Introdueix la informaci\u00f3 d'amfitri\u00f3 del panell Konnected.", + "title": "Descoberta de dispositiu Konnected" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "No s'ha reconegut com a un dispositiu Konnected.io" + }, + "error": { + "bad_host": "L'URL de sustituci\u00f3 de l'amfitri\u00f3 de l'API \u00e9s inv\u00e0lid" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Inverteix l'estat obert/tancat", + "name": "Nom (opcional)", + "type": "Tipus de sensor binari" + }, + "description": "Selecciona les opcions pel sensor binari de {zone}", + "title": "Configuraci\u00f3 de sensor binari" + }, + "options_digital": { + "data": { + "name": "Nom (opcional)", + "poll_interval": "Interval de sondeig (minuts) (opcional)", + "type": "Tipus de sensor" + }, + "description": "Selecciona les opcions pel sensor digital de {zone}", + "title": "Configuraci\u00f3 de sensor digital" + }, + "options_io": { + "data": { + "1": "Zona 1", + "2": "Zona 2", + "3": "Zona 3", + "4": "Zona 4", + "5": "Zona 5", + "6": "Zona 6", + "7": "Zona 7", + "out": "OUT (sortida)" + }, + "description": "S'ha descobert {model} a {host}. Selecciona la configuraci\u00f3 b\u00e0sica de cada Entrada/Sortida (I/O), en funci\u00f3 del tipus que sigui pot ser que et permeti sensors binaris (contactes oberts/tancats), sensors digitals (DHT i ds18b20) o sortides commutables. M\u00e9s endavant les podr\u00e0s configurar de manera m\u00e9s detallada.", + "title": "Configuraci\u00f3 E/S (I/O)" + }, + "options_io_ext": { + "data": { + "10": "Zona 10", + "11": "Zona 11", + "12": "Zona 12", + "8": "Zona 8", + "9": "Zona 9", + "alarm1": "ALARMA1", + "alarm2_out2": "OUT2/ALARMA2", + "out1": "OUT1" + }, + "description": "Selecciona la configuraci\u00f3 de les E/S restants. Podr\u00e0s configurar opcions m\u00e9s detallades en els passos seg\u00fcents.", + "title": "Configuraci\u00f3 E/S (I/O) ampliades" + }, + "options_misc": { + "data": { + "api_host": "Substitueix l'URL d'amfitri\u00f3 d'API (opcional)", + "blink": "Parpelleja el LED del panell quan s'envien canvis d'estat", + "override_api_host": "Substitueix l'URL per defecte del panell d'amfitri\u00f3 de l'API de Home Assistant" + }, + "description": "Selecciona el comportament desitjat del panell", + "title": "Configuraci\u00f3 diversos" + }, + "options_switch": { + "data": { + "activation": "Sortida quan estigui ON", + "momentary": "Durada del pols (ms) (opcional)", + "more_states": "Configura estats addicionals per a aquesta zona", + "name": "Nom (opcional)", + "pause": "Pausa entre polsos (ms) (opcional)", + "repeat": "Repeticions (-1 = infinit) (opcional)" + }, + "description": "Selecciona les opcions de sortida per a {zone}: estat {state}", + "title": "Configuraci\u00f3 de sortida commutable" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/da.json b/homeassistant/components/konnected/translations/da.json new file mode 100644 index 00000000000..48751d0d8dc --- /dev/null +++ b/homeassistant/components/konnected/translations/da.json @@ -0,0 +1,106 @@ +{ + "config": { + "abort": { + "already_configured": "Enheden er allerede konfigureret", + "already_in_progress": "Enhedskonfiguration er allerede i gang.", + "not_konn_panel": "Ikke en genkendt Konnected.io-enhed", + "unknown": "Ukendt fejl opstod" + }, + "error": { + "cannot_connect": "Der kan ikke oprettes forbindelse til et Konnected-panel p\u00e5 {host}:{port}" + }, + "step": { + "confirm": { + "description": "Model: {model}\nID: {id}\nV\u00e6rt: {host}\nPort: {port}\n\nDu kan konfigurere IO og panelfunktionsm\u00e5den i indstillingerne for Konnected-alarmpanel.", + "title": "Konnected-enhed klar" + }, + "import_confirm": { + "description": "Et Konnected-alarmpanel med id {id} er blevet fundet i configuration.yaml. Dette flow giver dig mulighed for at importere det til en konfigurationspost.", + "title": "Importer Konnected-enhed" + }, + "user": { + "data": { + "host": "Konnected-enhedens IP-adresse", + "port": "Konnected-enhedsport" + }, + "description": "Indtast v\u00e6rtsinformationen for dit Konnected-panel.", + "title": "Find Konnected-enhed" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Ikke en genkendt Konnected.io-enhed" + }, + "error": { + "one": "en", + "other": "anden" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Inverter tilstanden \u00e5ben/lukket", + "name": "Navn (valgfrit)", + "type": "Bin\u00e6r sensortype" + }, + "description": "V\u00e6lg indstillingerne for den bin\u00e6re sensor, der er knyttet til {zone}", + "title": "Konfigurer bin\u00e6r sensor" + }, + "options_digital": { + "data": { + "name": "Navn (valgfrit)", + "poll_interval": "Foresp\u00f8rgselsinterval (minutter) (valgfrit)", + "type": "Sensortype" + }, + "description": "V\u00e6lg indstillingerne for den digitale sensor, der er knyttet til {zone}", + "title": "Konfigurer digital sensor" + }, + "options_io": { + "data": { + "1": "Zone 1", + "2": "Zone 2", + "3": "Zone 3", + "4": "Zone 4", + "5": "Zone 5", + "6": "Zone 6", + "7": "Zone 7", + "out": "OUT" + }, + "description": "Der blev fundet en {model} p\u00e5 {host}. V\u00e6lg basiskonfigurationen af hver I/O nedenfor - afh\u00e6ngigt af I/O kan det give mulighed for bin\u00e6re sensorer (\u00e5ben-/lukket-kontakter), digitale sensorer (dht og ds18b20) eller omskiftelige outputs. Du kan konfigurere detaljerede indstillinger i de n\u00e6ste trin.", + "title": "Konfigurer I/O" + }, + "options_io_ext": { + "data": { + "10": "Zone 10", + "11": "Zone 11", + "12": "Zone 12", + "8": "Zone 8", + "9": "Zone 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "V\u00e6lg konfigurationen af det resterende I/O nedenfor. Du kan konfigurere detaljerede indstillinger i de n\u00e6ste trin.", + "title": "Konfigurer udvidet I/O" + }, + "options_misc": { + "data": { + "blink": "Blink panel-LED ved sending af tilstands\u00e6ndring" + }, + "description": "V\u00e6lg den \u00f8nskede funktionsm\u00e5de for panelet", + "title": "Konfigurer diverse" + }, + "options_switch": { + "data": { + "activation": "Output n\u00e5r der er t\u00e6ndt", + "momentary": "Impulsvarighed (ms) (valgfrit)", + "name": "Navn (valgfrit)", + "pause": "Pause mellem impulser (ms) (valgfrit)", + "repeat": "Gange til gentagelse (-1=uendelig) (valgfrit)" + }, + "description": "V\u00e6lg outputindstillingerne for {zone}", + "title": "Konfigurer skifteligt output" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/de.json b/homeassistant/components/konnected/translations/de.json new file mode 100644 index 00000000000..36ab7150c1f --- /dev/null +++ b/homeassistant/components/konnected/translations/de.json @@ -0,0 +1,107 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert", + "already_in_progress": "Der Konfigurationsfluss f\u00fcr das Ger\u00e4t wird bereits ausgef\u00fchrt.", + "not_konn_panel": "Kein anerkanntes Konnected.io-Ger\u00e4t", + "unknown": "Unbekannter Fehler ist aufgetreten" + }, + "error": { + "cannot_connect": "Es konnte keine Verbindung zu einem Konnected-Panel unter {host}:{port} hergestellt werden." + }, + "step": { + "confirm": { + "description": "Modell: {model}\nID: {id}\nHost: {host}\nPort: {port}\n\nSie k\u00f6nnen das I / O - und Bedienfeldverhalten in den Einstellungen der verbundenen Alarmzentrale konfigurieren.", + "title": "Konnected Device Bereit" + }, + "import_confirm": { + "description": "Ein Konnected Alarm Panel mit der ID {id} wurde in configuration.yaml entdeckt. Mit diesem Ablauf k\u00f6nnen Sie ihn in einen Konfigurationseintrag importieren.", + "title": "Importieren von Konnected Ger\u00e4t" + }, + "user": { + "data": { + "host": "Konnected Ger\u00e4t IP-Adresse", + "port": "Konnected Device Port" + }, + "description": "Bitte geben Sie die Hostinformationen f\u00fcr Ihr Konnected Panel ein.", + "title": "Entdecken Sie Konnected Ger\u00e4t" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Kein anerkanntes Konnected.io-Ger\u00e4t" + }, + "error": { + "bad_host": "Ung\u00fcltige Override-API-Host-URL", + "one": "eins", + "other": "andere" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Invertieren Sie den \u00d6ffnungs- / Schlie\u00dfzustand", + "name": "Name (optional)", + "type": "Bin\u00e4rer Sensortyp" + }, + "description": "Bitte w\u00e4hlen Sie die Optionen f\u00fcr den an {zone} angeschlossenen Bin\u00e4rsensor", + "title": "Konfigurieren Sie den Bin\u00e4rsensor" + }, + "options_digital": { + "data": { + "name": "Name (optional)", + "poll_interval": "Abfrageintervall (Minuten) (optional)", + "type": "Sensortyp" + }, + "description": "Bitte w\u00e4hlen Sie die Optionen f\u00fcr den an {zone} angeschlossenen digitalen Sensor aus", + "title": "Konfigurieren Sie den digitalen Sensor" + }, + "options_io": { + "data": { + "1": "Zone 1", + "2": "Zone 2", + "3": "Zone 3", + "4": "Zone 4", + "5": "Zone 5", + "6": "Zone 6", + "7": "Zone 7", + "out": "OUT" + }, + "description": "Es wurde ein {model} bei {host} entdeckt. W\u00e4hlen Sie unten die Basiskonfiguration der einzelnen E / A aus. Je nach E / A k\u00f6nnen bin\u00e4re Sensoren (Kontakte \u00f6ffnen / schlie\u00dfen), digitale Sensoren (dht und ds18b20) oder umschaltbare Ausg\u00e4nge verwendet werden. In den n\u00e4chsten Schritten k\u00f6nnen Sie detaillierte Optionen konfigurieren.", + "title": "Konfigurieren von I/O" + }, + "options_io_ext": { + "data": { + "10": "Zone 10", + "11": "Zone 11", + "12": "Zone 12", + "8": "Zone 8", + "9": "Zone 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "W\u00e4hlen Sie unten die Konfiguration der verbleibenden E / A. In den n\u00e4chsten Schritten k\u00f6nnen Sie detaillierte Optionen konfigurieren.", + "title": "Konfigurieren Sie Erweiterte I/O" + }, + "options_misc": { + "data": { + "api_host": "API-Host-URL \u00fcberschreiben (optional)", + "override_api_host": "\u00dcberschreiben Sie die Standard-Host-Panel-URL der Home Assistant-API" + }, + "description": "Bitte w\u00e4hlen Sie das gew\u00fcnschte Verhalten f\u00fcr Ihr Panel" + }, + "options_switch": { + "data": { + "activation": "Ausgabe, wenn eingeschaltet", + "momentary": "Impulsdauer (ms) (optional)", + "more_states": "Konfigurieren Sie zus\u00e4tzliche Zust\u00e4nde f\u00fcr diese Zone", + "name": "Name (optional)", + "pause": "Pause zwischen Impulsen (ms) (optional)", + "repeat": "Zeit zum Wiederholen (-1 = unendlich) (optional)" + }, + "description": "Bitte w\u00e4hlen Sie die Ausgabeoptionen f\u00fcr {zone} : Status {state}" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/en.json b/homeassistant/components/konnected/translations/en.json new file mode 100644 index 00000000000..11adeea4c9a --- /dev/null +++ b/homeassistant/components/konnected/translations/en.json @@ -0,0 +1,108 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured", + "already_in_progress": "Config flow for device is already in progress.", + "not_konn_panel": "Not a recognized Konnected.io device", + "unknown": "Unknown error occurred" + }, + "error": { + "cannot_connect": "Unable to connect to a Konnected Panel at {host}:{port}" + }, + "step": { + "confirm": { + "description": "Model: {model}\nID: {id}\nHost: {host}\nPort: {port}\n\nYou can configure the IO and panel behavior in the Konnected Alarm Panel settings.", + "title": "Konnected Device Ready" + }, + "import_confirm": { + "description": "A Konnected Alarm Panel with ID {id} has been discovered in configuration.yaml. This flow will allow you to import it into a config entry.", + "title": "Import Konnected Device" + }, + "user": { + "data": { + "host": "Konnected device IP address", + "port": "Konnected device port" + }, + "description": "Please enter the host information for your Konnected Panel.", + "title": "Discover Konnected Device" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Not a recognized Konnected.io device" + }, + "error": { + "bad_host": "Invalid Override API host url" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Invert the open/close state", + "name": "Name (optional)", + "type": "Binary Sensor Type" + }, + "description": "Please select the options for the binary sensor attached to {zone}", + "title": "Configure Binary Sensor" + }, + "options_digital": { + "data": { + "name": "Name (optional)", + "poll_interval": "Poll Interval (minutes) (optional)", + "type": "Sensor Type" + }, + "description": "Please select the options for the digital sensor attached to {zone}", + "title": "Configure Digital Sensor" + }, + "options_io": { + "data": { + "1": "Zone 1", + "2": "Zone 2", + "3": "Zone 3", + "4": "Zone 4", + "5": "Zone 5", + "6": "Zone 6", + "7": "Zone 7", + "out": "OUT" + }, + "description": "Discovered a {model} at {host}. Select the base configuration of each I/O below - depending on the I/O it may allow for binary sensors (open/close contacts), digital sensors (dht and ds18b20), or switchable outputs. You'll be able to configure detailed options in the next steps.", + "title": "Configure I/O" + }, + "options_io_ext": { + "data": { + "10": "Zone 10", + "11": "Zone 11", + "12": "Zone 12", + "8": "Zone 8", + "9": "Zone 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "Select the configuration of the remaining I/O below. You'll be able to configure detailed options in the next steps.", + "title": "Configure Extended I/O" + }, + "options_misc": { + "data": { + "api_host": "Override API host URL (optional)", + "blink": "Blink panel LED on when sending state change", + "override_api_host": "Override default Home Assistant API host panel URL" + }, + "description": "Please select the desired behavior for your panel", + "title": "Configure Misc" + }, + "options_switch": { + "data": { + "activation": "Output when on", + "momentary": "Pulse duration (ms) (optional)", + "more_states": "Configure additional states for this zone", + "name": "Name (optional)", + "pause": "Pause between pulses (ms) (optional)", + "repeat": "Times to repeat (-1=infinite) (optional)" + }, + "description": "Please select the output options for {zone}: state {state}", + "title": "Configure Switchable Output" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/es.json b/homeassistant/components/konnected/translations/es.json new file mode 100644 index 00000000000..05e3fa3368c --- /dev/null +++ b/homeassistant/components/konnected/translations/es.json @@ -0,0 +1,110 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "already_in_progress": "El flujo de configuraci\u00f3n para el dispositivo ya est\u00e1 en curso.", + "not_konn_panel": "No es un dispositivo Konnected.io reconocido", + "unknown": "Se produjo un error desconocido" + }, + "error": { + "cannot_connect": "No se puede conectar a un Panel conectado en {host}:{port}" + }, + "step": { + "confirm": { + "description": "Modelo: {model}\nID: {id}\nHost: {host}\nPuerto: {port}\n\nPuede configurar las E/S y el comportamiento del panel en los ajustes del Panel de Alarmas Konnected.", + "title": "Dispositivo Konnected Listo" + }, + "import_confirm": { + "description": "Se ha descubierto un Panel de Alarma Konnected con ID {id} en configuration.yaml. Este flujo te permitir\u00e1 importarlo a una entrada de configuraci\u00f3n.", + "title": "Importar Dispositivo Konnected" + }, + "user": { + "data": { + "host": "Direcci\u00f3n IP del dispositivo Konnected", + "port": "Puerto del dispositivo Konnected" + }, + "description": "Introduzca la informaci\u00f3n del host de su panel Konnected.", + "title": "Descubrir el dispositivo Konnected" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "No es un dispositivo Konnected.io reconocido" + }, + "error": { + "bad_host": "URL del host de la API de invalidaci\u00f3n no v\u00e1lida", + "one": "", + "other": "otros" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Invertir el estado de apertura/cierre", + "name": "Nombre (opcional)", + "type": "Tipo de sensor binario" + }, + "description": "Seleccione las opciones para el sensor binario conectado a {zone}", + "title": "Configurar sensor binario" + }, + "options_digital": { + "data": { + "name": "Nombre (opcional)", + "poll_interval": "Intervalo de sondeo (minutos) (opcional)", + "type": "Tipo de sensor" + }, + "description": "Seleccione las opciones para el sensor digital conectado a {zone}", + "title": "Configurar el sensor digital" + }, + "options_io": { + "data": { + "1": "Zona 1", + "2": "Zona 2", + "3": "Zona 3", + "4": "Zona 4", + "5": "Zona 5", + "6": "Zona 6", + "7": "Zona 7", + "out": "OUT" + }, + "description": "Descubierto un {model} en {host} . Seleccione la configuraci\u00f3n base de cada E / S a continuaci\u00f3n: seg\u00fan la E / S, puede permitir sensores binarios (contactos de apertura / cierre), sensores digitales (dht y ds18b20) o salidas conmutables. Podr\u00e1 configurar opciones detalladas en los pr\u00f3ximos pasos.", + "title": "Configurar E/S" + }, + "options_io_ext": { + "data": { + "10": "Zona 10", + "11": "Zona 11", + "12": "Zona 12", + "8": "Zona 8", + "9": "Zona 9", + "alarm1": "ALARMA1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "Seleccione la configuraci\u00f3n de las E/S restantes a continuaci\u00f3n. Podr\u00e1s configurar opciones detalladas en los pr\u00f3ximos pasos.", + "title": "Configurar E/S extendidas" + }, + "options_misc": { + "data": { + "api_host": "Invalidar la direcci\u00f3n URL del host de la API (opcional)", + "blink": "Parpadea el LED del panel cuando se env\u00eda un cambio de estado", + "override_api_host": "Reemplazar la URL predeterminada del panel host de la API de Home Assistant" + }, + "description": "Seleccione el comportamiento deseado para su panel", + "title": "Configurar miscel\u00e1neos" + }, + "options_switch": { + "data": { + "activation": "Salida cuando est\u00e1 activada", + "momentary": "Duraci\u00f3n del pulso (ms) (opcional)", + "more_states": "Configurar estados adicionales para esta zona", + "name": "Nombre (opcional)", + "pause": "Pausa entre pulsos (ms) (opcional)", + "repeat": "Tiempos de repetici\u00f3n (-1 = infinito) (opcional)" + }, + "description": "Por favor, seleccione las opciones de salida para {zone}", + "title": "Configurar la salida conmutable" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/fr.json b/homeassistant/components/konnected/translations/fr.json new file mode 100644 index 00000000000..566c623c80c --- /dev/null +++ b/homeassistant/components/konnected/translations/fr.json @@ -0,0 +1,76 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", + "already_in_progress": "Le flux de configuration de l'appareil est d\u00e9j\u00e0 en cours.", + "not_konn_panel": "Non reconnu comme appareil Konnected.io", + "unknown": "Une erreur inconnue s'est produite" + }, + "step": { + "confirm": { + "title": "Appareil Konnected pr\u00eat" + }, + "import_confirm": { + "title": "Importer un appareil connect\u00e9" + }, + "user": { + "data": { + "host": "Adresse IP de l\u2019appareil Konnected" + } + } + } + }, + "options": { + "error": { + "one": "Vide", + "other": "Vide" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Inverser l'\u00e9tat ouvert / ferm\u00e9", + "name": "Nom (facultatif)", + "type": "Type de capteur binaire" + }, + "description": "Veuillez s\u00e9lectionner les options du capteur binaire attach\u00e9 \u00e0 {zone}", + "title": "Configurer le capteur binaire" + }, + "options_digital": { + "data": { + "name": "Nom (facultatif)", + "poll_interval": "Intervalle d'interrogation (minutes) (facultatif)", + "type": "Type de capteur" + }, + "description": "Veuillez s\u00e9lectionner les options du capteur digital attach\u00e9 \u00e0 {zone}", + "title": "Configurer le capteur digital" + }, + "options_io": { + "data": { + "1": "Zone 1", + "2": "Zone 2", + "3": "Zone 3", + "4": "Zone 4", + "5": "Zone 5", + "6": "Zone 6", + "7": "Zone 7" + } + }, + "options_io_ext": { + "data": { + "10": "Zone 10", + "11": "Zone 11", + "12": "Zone 12", + "8": "Zone 8", + "9": "Zone 9", + "alarm1": "ALARME1" + } + }, + "options_switch": { + "data": { + "more_states": "Configurer des \u00e9tats suppl\u00e9mentaires pour cette zone", + "name": "Nom (facultatif)" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/hu.json b/homeassistant/components/konnected/translations/hu.json new file mode 100644 index 00000000000..b7d4017a87e --- /dev/null +++ b/homeassistant/components/konnected/translations/hu.json @@ -0,0 +1,18 @@ +{ + "options": { + "step": { + "options_digital": { + "data": { + "name": "N\u00e9v (nem k\u00f6telez\u0151)", + "poll_interval": "Lek\u00e9rdez\u00e9si id\u0151k\u00f6z (perc) (opcion\u00e1lis)", + "type": "\u00c9rz\u00e9kel\u0151 t\u00edpusa" + } + }, + "options_switch": { + "data": { + "name": "N\u00e9v (nem k\u00f6telez\u0151)" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/it.json b/homeassistant/components/konnected/translations/it.json new file mode 100644 index 00000000000..84fdcac4880 --- /dev/null +++ b/homeassistant/components/konnected/translations/it.json @@ -0,0 +1,110 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", + "already_in_progress": "Il flusso di configurazione per il dispositivo \u00e8 gi\u00e0 in corso.", + "not_konn_panel": "Non \u00e8 un dispositivo Konnected.io riconosciuto", + "unknown": "Si \u00e8 verificato un errore sconosciuto" + }, + "error": { + "cannot_connect": "Impossibile connettersi ad un Pannello Konnected su {host}:{port}." + }, + "step": { + "confirm": { + "description": "Modello: {model}\nID: {id}\nHost: {host}\nPorta: {port}\n\n\u00c8 possibile configurare il comportamento di I/O e del pannello nelle impostazioni del Pannello Allarmi di Konnected.", + "title": "Dispositivo Konnected pronto" + }, + "import_confirm": { + "description": "In configuration.yaml \u00e8 stato individuato un pannello di allarme Konnected con ID {id}. Questo flusso consentir\u00e0 di importarlo in una voce di configurazione.", + "title": "Importa dispositivo Konnected" + }, + "user": { + "data": { + "host": "Indirizzo IP del dispositivo Konnected", + "port": "Porta del dispositivo Konnected" + }, + "description": "Si prega di inserire le informazioni dell'host per il tuo Pannello Konnected.", + "title": "Rileva il dispositivo Konnected" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Non \u00e8 un dispositivo Konnected.io riconosciuto" + }, + "error": { + "bad_host": "URL dell'host API di sostituzione non valido", + "one": "uno", + "other": "altri" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Invertire lo stato di apertura/chiusura", + "name": "Nome (opzionale)", + "type": "Tipo di sensore binario" + }, + "description": "Si prega di selezionare le opzioni per il sensore binario collegato alla {zone}", + "title": "Configurare il Sensore Binario" + }, + "options_digital": { + "data": { + "name": "Nome (opzionale)", + "poll_interval": "Intervallo di sondaggio (minuti) (opzionale)", + "type": "Tipo di sensore" + }, + "description": "Si prega di selezionare le opzioni per il sensore digitale collegato alla {zone}", + "title": "Configurare il Sensore Digitale" + }, + "options_io": { + "data": { + "1": "Zona 1", + "2": "Zona 2", + "3": "Zona 3", + "4": "Zona 4", + "5": "Zona 5", + "6": "Zona 6", + "7": "Zona 7", + "out": "OUT" + }, + "description": "Rilevato un {model} su {host}. Selezionare la configurazione di base di ciascun I/O di seguito: a seconda dell'I/O, essa pu\u00f2 consentire sensori binari (contatti aperti/chiusi), sensori digitali (DHT e DS18B20) o uscite commutabili. Sarai in grado di configurare le opzioni dettagliate nei prossimi passi.", + "title": "Configura I/O" + }, + "options_io_ext": { + "data": { + "10": "Zona 10", + "11": "Zona 11", + "12": "Zona 12", + "8": "Zona 8", + "9": "Zona 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2 / ALARM2", + "out1": "OUT1" + }, + "description": "Selezionare di seguito la configurazione degli I/O rimanenti. Potrete configurare opzioni dettagliate nei prossimi passi.", + "title": "Configurazione I/O Esteso" + }, + "options_misc": { + "data": { + "api_host": "Sovrascrivi l'URL dell'host API (opzionale)", + "blink": "Attiva il lampeggio del LED del pannello durante l'invio del cambiamento di stato ", + "override_api_host": "Sovrascrivi l'URL predefinito del pannello host API di Home Assistant" + }, + "description": "Seleziona il comportamento desiderato per il tuo pannello", + "title": "Configura Altro" + }, + "options_switch": { + "data": { + "activation": "Uscita quando acceso", + "momentary": "Durata impulso (ms) (opzionale)", + "more_states": "Configurare stati aggiuntivi per questa zona", + "name": "Nome (opzionale)", + "pause": "Pausa tra gli impulsi (ms) (opzionale)", + "repeat": "Numero di volte da ripetere (-1 = infinito) (opzionale)" + }, + "description": "Selezionare le opzioni di uscita per {zone}: stato {state}", + "title": "Configurare l'uscita commutabile" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/ko.json b/homeassistant/components/konnected/translations/ko.json new file mode 100644 index 00000000000..6945c5ae47d --- /dev/null +++ b/homeassistant/components/konnected/translations/ko.json @@ -0,0 +1,108 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "\uae30\uae30 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", + "not_konn_panel": "\uc778\uc2dd\ub41c Konnected.io \uae30\uae30\uac00 \uc544\ub2d9\ub2c8\ub2e4", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "{host}:{port} \uc758 Konnected \ud328\ub110\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "step": { + "confirm": { + "description": "\ubaa8\ub378: {model}\nID: {id}\n\ud638\uc2a4\ud2b8: {host}\n\ud3ec\ud2b8: {port}\n\nKonnected \uc54c\ub78c \ud328\ub110 \uc124\uc815\uc5d0\uc11c IO \uc640 \ud328\ub110 \ub3d9\uc791\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "Konnected \uae30\uae30 \uc900\ube44" + }, + "import_confirm": { + "description": "Konnected \uc54c\ub78c \ud328\ub110 ID {id} \uac00 configuration.yaml \uc5d0\uc11c \ubc1c\uacac\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc744 \ud1b5\ud574 \uad6c\uc131 \ud56d\ubaa9\uc73c\ub85c \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "Konnected \uae30\uae30 \uac00\uc838\uc624\uae30" + }, + "user": { + "data": { + "host": "Konnected \uae30\uae30 IP \uc8fc\uc18c", + "port": "Konnected \uae30\uae30 \ud3ec\ud2b8" + }, + "description": "Konnected \ud328\ub110\uc758 \ud638\uc2a4\ud2b8 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "Konnected \uae30\uae30 \ucc3e\uae30" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "\uc778\uc2dd\ub41c Konnected.io \uae30\uae30\uac00 \uc544\ub2d9\ub2c8\ub2e4" + }, + "error": { + "bad_host": "API \ud638\uc2a4\ud2b8 URL \uc7ac\uc815\uc758\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "options_binary": { + "data": { + "inverse": "\uc5f4\ub9bc / \ub2eb\ud798 \uc0c1\ud0dc \ubc18\uc804", + "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d)", + "type": "\uc774\uc9c4 \uc13c\uc11c \uc720\ud615" + }, + "description": "{zone} \uc5d0 \uc5f0\uacb0\ub41c \uc774\uc9c4 \uc13c\uc11c\uc5d0 \ub300\ud55c \uc635\uc158\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694", + "title": "\uc774\uc9c4 \uc13c\uc11c \uad6c\uc131" + }, + "options_digital": { + "data": { + "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d)", + "poll_interval": "\ud3f4\ub9c1 \uac04\uaca9 (\ubd84) (\uc120\ud0dd \uc0ac\ud56d)", + "type": "\uc13c\uc11c \uc720\ud615" + }, + "description": "{zone} \uc5d0 \uc5f0\uacb0\ub41c \ub514\uc9c0\ud138 \uc13c\uc11c\uc5d0 \ub300\ud55c \uc635\uc158\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694", + "title": "\ub514\uc9c0\ud138 \uc13c\uc11c \uad6c\uc131" + }, + "options_io": { + "data": { + "1": "\uad6c\uc5ed 1", + "2": "\uad6c\uc5ed 2", + "3": "\uad6c\uc5ed 3", + "4": "\uad6c\uc5ed 4", + "5": "\uad6c\uc5ed 5", + "6": "\uad6c\uc5ed 6", + "7": "\uad6c\uc5ed 7", + "out": "\uc678\ubd80" + }, + "description": "{host} \uc5d0\uc11c {model} \uc744(\ub97c) \ubc1c\uacac\ud588\uc2b5\ub2c8\ub2e4. \uc774\uc9c4 \uc13c\uc11c(\uac1c\ud3d0 \uc811\uc810), \ub514\uc9c0\ud138 \uc13c\uc11c(dht \ubc0f ds18b20) \ub610\ub294 \uc2a4\uc704\uce58\uac00 \uac00\ub2a5\ud55c \uc13c\uc11c\uc758 I/O \uc5d0 \ub530\ub77c \uc544\ub798\uc5d0\uc11c \uac01 I/O \uc758 \uae30\ubcf8 \uad6c\uc131\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c \uc138\ubd80 \uc635\uc158\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "I/O \uad6c\uc131" + }, + "options_io_ext": { + "data": { + "10": "\uad6c\uc5ed 10", + "11": "\uad6c\uc5ed 11", + "12": "\uad6c\uc5ed 12", + "8": "\uad6c\uc5ed 8", + "9": "\uad6c\uc5ed 9", + "alarm1": "\uc54c\ub78c 1", + "alarm2_out2": "\ucd9c\ub825 2 / \uc54c\ub78c 2", + "out1": "\ucd9c\ub825 1" + }, + "description": "\uc544\ub798\uc758 \ub098\uba38\uc9c0 I/O \uad6c\uc131\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c \uc138\ubd80 \uc635\uc158\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "\ud655\uc7a5 I/O \uad6c\uc131" + }, + "options_misc": { + "data": { + "api_host": "API \ud638\uc2a4\ud2b8 URL \uc7ac\uc815\uc758 (\uc120\ud0dd \uc0ac\ud56d)", + "blink": "\uc0c1\ud0dc \ubcc0\uacbd\uc744 \ubcf4\ub0bc \ub54c \uae5c\ubc15\uc784 \ud328\ub110 LED \ub97c \ucf2d\ub2c8\ub2e4", + "override_api_host": "\uae30\ubcf8 Home Assistant API \ud638\uc2a4\ud2b8 \ud328\ub110 URL \uc7ac\uc815\uc758" + }, + "description": "\ud328\ub110\uc5d0 \uc6d0\ud558\ub294 \ub3d9\uc791\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694", + "title": "\uae30\ud0c0 \uad6c\uc131" + }, + "options_switch": { + "data": { + "activation": "\uc2a4\uc704\uce58\uac00 \ucf1c\uc9c8 \ub54c \ucd9c\ub825", + "momentary": "\ud384\uc2a4 \uc9c0\uc18d\uc2dc\uac04 (ms) (\uc120\ud0dd \uc0ac\ud56d)", + "more_states": "\uc774 \uad6c\uc5ed\uc5d0 \ub300\ud55c \ucd94\uac00 \uc0c1\ud0dc \uad6c\uc131", + "name": "\uc774\ub984 (\uc120\ud0dd \uc0ac\ud56d)", + "pause": "\ud384\uc2a4 \uac04 \uc77c\uc2dc\uc815\uc9c0 \uc2dc\uac04 (ms) (\uc120\ud0dd \uc0ac\ud56d)", + "repeat": "\ubc18\ubcf5 \uc2dc\uac04 (-1 = \ubb34\ud55c) (\uc120\ud0dd \uc0ac\ud56d)" + }, + "description": "{zone} \uad6c\uc5ed\uc5d0 \ub300\ud55c \ucd9c\ub825 \uc635\uc158\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694: \uc0c1\ud0dc {state}", + "title": "\uc2a4\uc704\uce58 \ucd9c\ub825 \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/lb.json b/homeassistant/components/konnected/translations/lb.json new file mode 100644 index 00000000000..7e8ed675992 --- /dev/null +++ b/homeassistant/components/konnected/translations/lb.json @@ -0,0 +1,110 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert", + "already_in_progress": "Konfiguratioun's Oflaf fir den Apparat ass schonn am gaangen.", + "not_konn_panel": "Keen erkannten Konnected.io Apparat", + "unknown": "Onbekannten Fehler opgetrueden" + }, + "error": { + "cannot_connect": "Kann sech net mam Konnected Panel um {host}:{port} verbannen" + }, + "step": { + "confirm": { + "description": "Modell: {model}\nID: {id}\nHost: {host}\nPort: {port}\n\nDir k\u00ebnnt den I/O a Panel Verhaalen an de Konnected Alarm Panel Astellunge konfigur\u00e9ieren.", + "title": "Konnected Apparat parat" + }, + "import_confirm": { + "description": "Ee Konnected Alarm Pael mat der ID {id} gouf an der configuration.yaml entdeckt. D\u00ebsen Oflaf erlaabt et als eng Konfiguratioun z'import\u00e9ieren.", + "title": "Konnected Apparat import\u00e9ieren" + }, + "user": { + "data": { + "host": "Konnected Apparat IP Adress", + "port": "Konnected Apparat Port" + }, + "description": "Informatioune vum Konnected Panel aginn.", + "title": "Konnected Apparat entdecken" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Keen erkannten Konnected.io Apparat" + }, + "error": { + "bad_host": "Iwwerschriwwen API Host URL ong\u00eblteg", + "one": "Ee", + "other": "M\u00e9i" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Op/Zou Zoustand vertauschen", + "name": "Numm (optional)", + "type": "Typ vun Bin\u00e4re Sensor" + }, + "description": "Wiel d'Optioune fir den bin\u00e4ren Sensor dee mat {zone} verbonnen ass", + "title": "Bin\u00e4re Sensor konfigur\u00e9ieren" + }, + "options_digital": { + "data": { + "name": "Numm (optional)", + "poll_interval": "Intervall vun den Offroen (Minutten) (optional)", + "type": "Typ vum Sensor" + }, + "description": "Wiel d'Optioune fir den digitale Sensor dee mat {zone} verbonnen ass", + "title": "Digitale Sensor konfigur\u00e9ieren" + }, + "options_io": { + "data": { + "1": "Zon 2", + "2": "Zon 1", + "3": "Zon 3", + "4": "Zon 4", + "5": "Zon 5", + "6": "Zon 6", + "7": "Zon 7", + "out": "OUT" + }, + "description": "{model} um {host} entdeckt.\u00a0Wiel Basis Konfiguratioun vun den I/O hei dr\u00ebnner aus - ofh\u00e4ngeg vum I/O erlaabt et bin\u00e4r Sensoren (op / zou Kontakter), digital Sensoren (dht an ds18b20) oder schaltbar Ausgab. D\u00e9i detaill\u00e9iert Optioune k\u00ebnnen en an den n\u00e4chste Schr\u00ebtt konfigur\u00e9iert ginn.", + "title": "I/O konfigur\u00e9ieren" + }, + "options_io_ext": { + "data": { + "10": "Zon 10", + "11": "Zon 11", + "12": "Zon 12", + "8": "Zon 8", + "9": "Zon 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "Wiel d'Konfiguratioun vun de verbleiwenden I/O hei dr\u00ebnner. D\u00e9i detaill\u00e9iert Optioune k\u00ebnnen en an den n\u00e4chste Schr\u00ebtt konfigur\u00e9iert ginn.", + "title": "Erweiderten I/O konfigur\u00e9ieren" + }, + "options_misc": { + "data": { + "api_host": "API Host URL iwwerschr\u00e9iwen (optionell)", + "blink": "Blink panel LED un wann Status \u00c4nnerung gesch\u00e9ckt g\u00ebtt", + "override_api_host": "Standard Home Assistant API Host Tableau URL iwwerschr\u00e9iwen" + }, + "description": "Wielt w.e.g. dat gew\u00ebnschte Verhalen fir \u00c4re Panel aus", + "title": "Divers Optioune astellen" + }, + "options_switch": { + "data": { + "activation": "Ausgang wann un", + "momentary": "Pulsatiounsdauer (ms) (optional)", + "more_states": "Zous\u00e4tzlesch Zoust\u00e4nn fir d\u00ebs Zon konfigur\u00e9ieren", + "name": "Numm (optional)", + "pause": "Pausen zw\u00ebscht den Impulser (ms) (optional)", + "repeat": "Unzuel vu Widderhuelungen (-1= onendlech) (optional)" + }, + "description": "Wielt w.e.g. d'Ausgaboptiounen fir {zone}: Status {state}", + "title": "\u00cbmschltbaren Ausgang konfigur\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/nl.json b/homeassistant/components/konnected/translations/nl.json new file mode 100644 index 00000000000..c513a9a0d7b --- /dev/null +++ b/homeassistant/components/konnected/translations/nl.json @@ -0,0 +1,77 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd", + "unknown": "Onbekende fout opgetreden" + }, + "step": { + "confirm": { + "title": "Konnected Apparaat Klaar" + }, + "user": { + "data": { + "host": "IP-adres van Konnected apparaat", + "port": "Konnected apparaat poort" + }, + "description": "Voer de host-informatie in voor uw Konnected-paneel.", + "title": "Ontdek Konnected Device" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Geen herkend Konnected.io apparaat" + }, + "error": { + "one": "Leeg", + "other": "Leeg" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Keer de open / dicht status om", + "name": "Naam (optioneel)", + "type": "Type binaire sensor" + }, + "title": "Binaire sensor configureren" + }, + "options_digital": { + "data": { + "name": "Naam (optioneel)", + "type": "Type sensor" + } + }, + "options_io": { + "data": { + "1": "Zone 1", + "2": "Zone 2", + "3": "Zone 3", + "4": "Zone 4", + "5": "Zone 5", + "6": "Zone 6", + "7": "Zone 7" + } + }, + "options_io_ext": { + "data": { + "10": "Zone 10", + "11": "Zone 11", + "12": "Zone 12", + "8": "Zone 8", + "9": "Zone 9" + } + }, + "options_misc": { + "data": { + "api_host": "API host-URL overschrijven (optioneel)" + } + }, + "options_switch": { + "data": { + "name": "Naam (optioneel)" + }, + "title": "Schakelbare uitgang configureren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/no.json b/homeassistant/components/konnected/translations/no.json new file mode 100644 index 00000000000..fe1879875be --- /dev/null +++ b/homeassistant/components/konnected/translations/no.json @@ -0,0 +1,108 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert", + "already_in_progress": "Konfigurasjonsflyt for enhet p\u00e5g\u00e5r allerede.", + "not_konn_panel": "Ikke en anerkjent Konnected.io-enhet", + "unknown": "Ukjent feil oppstod" + }, + "error": { + "cannot_connect": "Kan ikke koble til et Konnected Panel p\u00e5 {host} : {port}" + }, + "step": { + "confirm": { + "description": "Modell: {model}\nID: {id}\nVert: {host}\nPort: {port}\n\nDu kan konfigurere IO- og panelvirkem\u00e5ten i innstillingene for Konnected Alarm Panel.", + "title": "Konnected Enhet klar" + }, + "import_confirm": { + "description": "Et Konnected Alarm Panel med ID {id} er oppdaget i configuration.yaml. Denne flyten vil tillate deg \u00e5 importere den til en config-oppf\u00f8ring.", + "title": "Importer Konnected Enhet" + }, + "user": { + "data": { + "host": "Konnected enhet IP-adresse", + "port": "Koblet enhetsport" + }, + "description": "Vennligst skriv inn verten informasjon for din Konnected Panel.", + "title": "Oppdag Konnected Enheten" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Ikke en anerkjent Konnected.io-enhet" + }, + "error": { + "bad_host": "Ugyldig overstyr API-vertsadresse" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Inverter \u00e5pen / lukk tilstand", + "name": "Navn (valgfritt)", + "type": "Bin\u00e6r sensortype" + }, + "description": "Vennligst velg alternativer for bin\u00e6re sensor koblet til {sone}", + "title": "Konfigurer bin\u00e6r sensor" + }, + "options_digital": { + "data": { + "name": "Navn (valgfritt)", + "poll_interval": "Avstemningsintervall (minutter) (valgfritt)", + "type": "Sensortype" + }, + "description": "Vennligst velg alternativene for den digitale sensor som er koblet til {sone}", + "title": "Konfigurere Digital Sensor" + }, + "options_io": { + "data": { + "1": "Sone 1", + "2": "Sone 2", + "3": "Sone 3", + "4": "Sone 4", + "5": "Sone 5", + "6": "Sone 6", + "7": "Sone 7", + "out": "OUT" + }, + "description": "Oppdaget en {model} hos {host} . Velg basiskonfigurasjon for hver I / O nedenfor - avhengig av I / O kan det gi rom for bin\u00e6re sensorer (\u00e5pne / lukke kontakter), digitale sensorer (dht og ds18b20), eller switchbare utganger. Du vil kunne konfigurere detaljerte alternativer i de neste trinnene.", + "title": "Konfigurere I/O" + }, + "options_io_ext": { + "data": { + "10": "Sone 10", + "11": "Sone 11", + "12": "Sone 12", + "8": "Sone 8", + "9": "Sone 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "Velg konfigurasjonen av de gjenv\u00e6rende I/O nedenfor. Du vil v\u00e6re i stand til \u00e5 konfigurere detaljerte alternativer i de neste trinnene.", + "title": "Konfigurer utvidet I / O" + }, + "options_misc": { + "data": { + "api_host": "Overstyre API-vert-URL (valgfritt)", + "blink": "Blink p\u00e5 LED-lampen n\u00e5r du sender statusendring", + "override_api_host": "Overstyre standard Home Assistant API-vertspanel-URL" + }, + "description": "Vennligst velg \u00f8nsket atferd for din panel", + "title": "Konfigurere Diverse" + }, + "options_switch": { + "data": { + "activation": "Utgang n\u00e5r den er p\u00e5", + "momentary": "Pulsvarighet (ms) (valgfritt)", + "more_states": "Konfigurere flere tilstander for denne sonen", + "name": "Navn (valgfritt)", + "pause": "Pause mellom pulser (ms) (valgfritt)", + "repeat": "Tider \u00e5 gjenta (-1 = uendelig) (valgfritt)" + }, + "description": "Velg outputalternativer for {zone} : state {state}", + "title": "Konfigurere Valgbare Utgang" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/pl.json b/homeassistant/components/konnected/translations/pl.json new file mode 100644 index 00000000000..860d90536da --- /dev/null +++ b/homeassistant/components/konnected/translations/pl.json @@ -0,0 +1,109 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "already_in_progress": "Konfiguracja urz\u0105dzenia jest ju\u017c w toku.", + "not_konn_panel": "Nie rozpoznano urz\u0105dzenia Konnected.io", + "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z panelem Konnected na {host}:{port}" + }, + "step": { + "confirm": { + "description": "Model: {model} \nHost: {host} \nPort: {port} \n\nMo\u017cesz skonfigurowa\u0107 IO i zachowanie panelu w ustawieniach Konnected Alarm Panel.", + "title": "Urz\u0105dzenie Konnected gotowe" + }, + "import_confirm": { + "description": "Panel alarmu Konnected o identyfikatorze {id} zosta\u0142 wykryty w pliku configuration.yaml. Ten kreator pozwoli ci zaimportowa\u0107 go do integracji.", + "title": "Import urz\u0105dzenia Konnected" + }, + "user": { + "data": { + "host": "Adres IP urz\u0105dzenia Konnected", + "port": "Port urz\u0105dzenia Konnected urz\u0105dzenia" + }, + "description": "Wprowad\u017a informacje o ho\u015bcie panelu Konnected.", + "title": "Wykryj urz\u0105dzenie Konnected" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Nie rozpoznano urz\u0105dzenia Konnected.io" + }, + "error": { + "few": "kilka", + "many": "wiele", + "one": "jeden", + "other": "inny" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Odwr\u00f3\u0107 stan otwarty/zamkni\u0119ty", + "name": "Nazwa (opcjonalnie)", + "type": "Typ sensora binarnego" + }, + "description": "Wybierz opcje dla sensora binarnego powi\u0105zanego ze {zone}", + "title": "Konfiguracja sensora binarnego" + }, + "options_digital": { + "data": { + "name": "Nazwa (opcjonalnie)", + "poll_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji (minuty) (opcjonalnie)", + "type": "Typ sensora" + }, + "description": "Wybierz opcje dla cyfrowego sensora powi\u0105zanego ze {zone}", + "title": "Konfiguracja sensora cyfrowego" + }, + "options_io": { + "data": { + "1": "Strefa 1", + "2": "Strefa 2", + "3": "Strefa 3", + "4": "Strefa 4", + "5": "Strefa 5", + "6": "Strefa 6", + "7": "Strefa 7", + "out": "OUT" + }, + "description": "Wykryto {model} na ho\u015bcie {host}. Wybierz podstawow\u0105 konfiguracj\u0119 ka\u017cdego wej\u015bcia/wyj\u015bcia poni\u017cej \u2014 w zale\u017cno\u015bci od typu wej\u015b\u0107/wyj\u015b\u0107 mo\u017ce zastosowa\u0107 sensory binarne (otwarte/ amkni\u0119te), sensory cyfrowe (dht i ds18b20) lub prze\u0142\u0105czane wyj\u015bcia. B\u0119dziesz m\u00f3g\u0142 skonfigurowa\u0107 szczeg\u00f3\u0142owe opcje w kolejnych krokach.", + "title": "Konfiguracja wej\u015bcia/wyj\u015bcia" + }, + "options_io_ext": { + "data": { + "10": "Strefa 10", + "11": "Strefa 11", + "12": "Strefa 12", + "8": "Strefa 8", + "9": "Strefa 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "Wybierz konfiguracj\u0119 pozosta\u0142ych wej\u015b\u0107/wyj\u015b\u0107 poni\u017cej. B\u0119dziesz m\u00f3g\u0142 skonfigurowa\u0107 szczeg\u00f3\u0142owe opcje w kolejnych krokach.", + "title": "Konfiguracja rozszerzonego wej\u015bcia/wyj\u015bcia" + }, + "options_misc": { + "data": { + "blink": "Miganie diody LED panelu podczas wysy\u0142ania zmiany stanu" + }, + "description": "Wybierz po\u017c\u0105dane zachowanie dla swojego panelu", + "title": "R\u00f3\u017cne opcje" + }, + "options_switch": { + "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)" + }, + "description": "Wybierz opcje wyj\u015bcia dla {zone}", + "title": "Konfiguracja prze\u0142\u0105czalne wyj\u015bcie" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/ru.json b/homeassistant/components/konnected/translations/ru.json new file mode 100644 index 00000000000..b4f8d74d68f --- /dev/null +++ b/homeassistant/components/konnected/translations/ru.json @@ -0,0 +1,108 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "not_konn_panel": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected.io \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0430\u043d\u0435\u043b\u0438 Konnected {host}:{port}." + }, + "step": { + "confirm": { + "description": "\u041c\u043e\u0434\u0435\u043b\u044c: {model}\nID: {id}\n\u0425\u043e\u0441\u0442: {host}\n\u041f\u043e\u0440\u0442: {port}\n\n\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u043d\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043e\u0432 \u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Konnected.", + "title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u0440\u0430\u0431\u043e\u0442\u0435." + }, + "import_confirm": { + "description": "\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Konnected ID {id} \u0440\u0430\u043d\u0435\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 configuration.yaml. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.", + "title": "\u0418\u043c\u043f\u043e\u0440\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Konnected" + }, + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "port": "\u041f\u043e\u0440\u0442" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u043f\u0430\u043d\u0435\u043b\u0438 Konnected.", + "title": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Konnected.io \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e." + }, + "error": { + "bad_host": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 URL \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u0430 API." + }, + "step": { + "options_binary": { + "data": { + "inverse": "\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435/\u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "type": "\u0422\u0438\u043f \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430" + }, + "description": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a {zone}.", + "title": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u0430" + }, + "options_digital": { + "data": { + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "poll_interval": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430 \u0432 \u043c\u0438\u043d\u0443\u0442\u0430\u0445 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "type": "\u0422\u0438\u043f \u0441\u0435\u043d\u0441\u043e\u0440\u0430" + }, + "description": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u043d\u0441\u043e\u0440\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a {zone}.", + "title": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u043d\u0441\u043e\u0440\u0430" + }, + "options_io": { + "data": { + "1": "\u0417\u043e\u043d\u0430 1", + "2": "\u0417\u043e\u043d\u0430 2", + "3": "\u0417\u043e\u043d\u0430 3", + "4": "\u0417\u043e\u043d\u0430 4", + "5": "\u0417\u043e\u043d\u0430 5", + "6": "\u0417\u043e\u043d\u0430 6", + "7": "\u0417\u043e\u043d\u0430 7", + "out": "\u0412\u042b\u0425\u041e\u0414" + }, + "description": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e {model} \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c {host}. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432, \u043a \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b (\u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f/\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f), \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b (dht \u0438 ds18b20) \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044b. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432" + }, + "options_io_ext": { + "data": { + "10": "\u0417\u043e\u043d\u0430 10", + "11": "\u0417\u043e\u043d\u0430 11", + "12": "\u0417\u043e\u043d\u0430 12", + "8": "\u0417\u043e\u043d\u0430 8", + "9": "\u0417\u043e\u043d\u0430 9", + "alarm1": "\u0422\u0420\u0415\u0412\u041e\u0413\u04101", + "alarm2_out2": "\u0412\u042b\u0425\u041e\u04142/\u0422\u0420\u0415\u0412\u041e\u0413\u04102", + "out1": "\u0412\u042b\u0425\u041e\u04141" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432/\u0432\u044b\u0445\u043e\u0434\u043e\u0432" + }, + "options_misc": { + "data": { + "api_host": "\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c URL \u0445\u043e\u0441\u0442\u0430 API (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "blink": "LED-\u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f", + "override_api_host": "\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c URL-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442-\u043f\u0430\u043d\u0435\u043b\u0438 Home Assistant API" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.", + "title": "\u041f\u0440\u043e\u0447\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438" + }, + "options_switch": { + "data": { + "activation": "\u0412\u044b\u0445\u043e\u0434 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438", + "momentary": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 (\u043c\u0441) (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "more_states": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "pause": "\u041f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430\u043c\u0438 (\u043c\u0441) (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "repeat": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 (-1 = \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e) (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u0430 \u0434\u043b\u044f {zone}: \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 {state}.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/sl.json b/homeassistant/components/konnected/translations/sl.json new file mode 100644 index 00000000000..0a6a52d2fb1 --- /dev/null +++ b/homeassistant/components/konnected/translations/sl.json @@ -0,0 +1,112 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana", + "already_in_progress": "Konfiguracijski tok za napravo je \u017ee v teku.", + "not_konn_panel": "Ni prepoznana kot Konnected.io naprava", + "unknown": "Pri\u0161lo je do neznane napake" + }, + "error": { + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave s Konnected plo\u0161\u010do v {Host}: {Port}" + }, + "step": { + "confirm": { + "description": "Model: {model}\nID: {id}\nGostitelj: {host}\nVrata: {port}\n\nV nastavitvah lahko nastavite vedenje I/O in plo\u0161\u010de Konnected alarma. ", + "title": "Konnected naprava pripravljena" + }, + "import_confirm": { + "description": "Konnected alarm panel z ID {id} je bil odkrit v konfiguraciji. YAML. To tok vam bo omogo\u010dil, da ga uvozite v va\u0161o konfiguracijo.", + "title": "Uvoz Konnected Naprave" + }, + "user": { + "data": { + "host": "IP-naslov Konnected naprave", + "port": "Vrata Konnected naprave" + }, + "description": "Vnesite podatke o gostitelju v svoj Konnected Panel.", + "title": "Odkrijte Konnected napravo" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Ni prepoznana kot Konnected.io naprava" + }, + "error": { + "bad_host": "Neveljaven URL gostitelja API-ja za preglasitev", + "few": "nekaj", + "one": "ena", + "other": "drugo", + "two": "dva" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Zamenjajte odprto / zaprto stanje", + "name": "Ime (neobvezno)", + "type": "Vrsta binarnega senzorja" + }, + "description": "Izberite mo\u017enosti za binarni senzor, priklju\u010den na {zone}", + "title": "Konfigurirajte binarni senzor" + }, + "options_digital": { + "data": { + "name": "Ime (neobvezno)", + "poll_interval": "Interval osve\u017eevanja (minute) (neobvezno)", + "type": "Vrsta tipala" + }, + "description": "Izberite mo\u017enosti za digitalni senzor, priklju\u010den na {zone}", + "title": "Konfigurirajte digitalni senzor" + }, + "options_io": { + "data": { + "1": "Zone 1", + "2": "Zone 2", + "3": "Zone 3", + "4": "Zone 4", + "5": "Zone 5", + "6": "Zone 6", + "7": "Zone 7", + "out": "OUT" + }, + "description": "Odkrili {model} na {host} . Spodaj izberite osnovno konfiguracijo vsakega I / O - odvisno od I / O lahko omogo\u010da binarne senzorje (odpiranje / zapiranje kontaktov), digitalne senzorje (dht in ds18b20) ali preklopne izhode. Podrobne mo\u017enosti boste lahko konfigurirali v naslednjih korakih.", + "title": "Konfigurirajte I / O" + }, + "options_io_ext": { + "data": { + "10": "Obmo\u010dje 10", + "11": "Obmo\u010dje 11", + "12": "Obmo\u010dje 12", + "8": "Obmo\u010dje 8", + "9": "Obmo\u010dje 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2 / ALARM2", + "out1": "OUT1" + }, + "description": "Izberite konfiguracijo preostalega I/O spodaj. Podrobne mo\u017enosti boste lahko konfigurirali v naslednjih korakih.", + "title": "Konfigurirajte raz\u0161irjeni I/O" + }, + "options_misc": { + "data": { + "api_host": "Preveri gostiteljski URL API (neobvezno)", + "blink": "Lu\u010dka LED na zaslonu utripa, ko po\u0161iljate spremembo stanja", + "override_api_host": "Preglasi privzeti URL gostiteljske plo\u0161\u010de API-ja za Home Assistant" + }, + "description": "Izberite \u017eeleno vedenje za va\u0161o plo\u0161\u010do", + "title": "Konfigurirajte Razno" + }, + "options_switch": { + "data": { + "activation": "Izhod, ko je vklopljen", + "momentary": "Trajanje impulza (ms) (neobvezno)", + "more_states": "Konfigurirajte dodatna stanja za to obmo\u010dje", + "name": "Ime (neobvezno)", + "pause": "Premor med impulzi (ms) (neobvezno)", + "repeat": "\u010casi ponovitve (-1 = neskon\u010dno) (neobvezno)" + }, + "description": "Izberite izhodne mo\u017enosti za {zone} : stanje {state}", + "title": "Konfigurirajte preklopni izhod" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/sv.json b/homeassistant/components/konnected/translations/sv.json new file mode 100644 index 00000000000..3e6136fb2c3 --- /dev/null +++ b/homeassistant/components/konnected/translations/sv.json @@ -0,0 +1,102 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten \u00e4r redan konfigurerad", + "already_in_progress": "Konfigurationsfl\u00f6de f\u00f6r enhet p\u00e5g\u00e5r redan.", + "not_konn_panel": "Inte en erk\u00e4nd Konnected.io-enhet", + "unknown": "Ett ok\u00e4nt fel har intr\u00e4ffat" + }, + "error": { + "cannot_connect": "Det g\u00e5r inte att ansluta till en ansluten panel p\u00e5 {host}:{port}" + }, + "step": { + "confirm": { + "description": "Modell: {modell}\nV\u00e4rd: {host}\nPort: {port}\n\nDu kan konfigurera IO- och panelbeteendet i inst\u00e4llningarna f\u00f6r Konnected Alarm Panel.", + "title": "Konnected-enheten redo" + }, + "user": { + "data": { + "host": "Konnected-enhetens IP-adress", + "port": "Konnected-enhetens port" + }, + "description": "Ange v\u00e4rdinformationen f\u00f6r din Konnected Panel.", + "title": "Uppt\u00e4ck Konnected-enhet" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "Inte en erk\u00e4nd Konnected.io-enhet" + }, + "error": { + "one": "Tom", + "other": "Tomma" + }, + "step": { + "options_binary": { + "data": { + "inverse": "Invertera \u00f6ppet/st\u00e4ngt tillst\u00e5nd", + "name": "Namn (valfritt)", + "type": "Bin\u00e4r sensortyp" + }, + "description": "V\u00e4lj alternativ f\u00f6r den bin\u00e4ra sensorn som \u00e4r ansluten till {zone}", + "title": "Konfigurera Bin\u00e4r Sensor" + }, + "options_digital": { + "data": { + "name": "Namn (valfritt)", + "poll_interval": "H\u00e4mtningsintervall (minuter) (valfritt)", + "type": "Sensortyp" + }, + "description": "V\u00e4lj alternativ f\u00f6r den digitala sensorn som \u00e4r ansluten till {zone}", + "title": "Konfigurera Digital Sensor" + }, + "options_io": { + "data": { + "1": "Zon 1", + "2": "Zon 2", + "3": "Zon 3", + "4": "Zon 4", + "5": "Zon 5", + "6": "Zon 6", + "7": "Zon 7", + "out": "UT" + }, + "description": "Uppt\u00e4ckte en {model} p\u00e5 {host}. V\u00e4lj baskonfigurationen f\u00f6r varje I/O nedan - beroende p\u00e5 I/O kan det m\u00f6jligg\u00f6ra bin\u00e4ra sensorer (\u00f6ppen/st\u00e4ngd kontakter), digitala sensorer (dht och ds18b20) eller omkopplingsbara utg\u00e5ngar. Du kan konfigurera detaljerade alternativ i n\u00e4sta steg.", + "title": "Konfigurera I/O" + }, + "options_io_ext": { + "data": { + "10": "Zon 10", + "11": "Zon 11", + "12": "Zon 12", + "8": "Zon 8", + "9": "Zon 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "V\u00e4lj den konfiguration av resterande I/O nedan. Du kommer att kunna konfigurera detaljerade alternativ i n\u00e4sta steg.", + "title": "Konfigurera ut\u00f6kat I/O" + }, + "options_misc": { + "data": { + "blink": "Blinka p\u00e5 panel-LED n\u00e4r du skickar tillst\u00e5nds\u00e4ndring" + }, + "description": "V\u00e4lj \u00f6nskat beteende f\u00f6r din panel", + "title": "Konfigurera \u00d6vrigt" + }, + "options_switch": { + "data": { + "activation": "Utdata n\u00e4r den \u00e4r p\u00e5", + "momentary": "Pulsvarighet (ms) (valfritt)", + "name": "Namn (valfritt)", + "pause": "Paus mellan pulser (ms) (valfritt)", + "repeat": "G\u00e5nger att upprepa (-1=o\u00e4ndligt) (tillval)" + }, + "description": "V\u00e4lj utdataalternativ f\u00f6r {zone}", + "title": "Konfigurera v\u00e4xelbar utdata" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/konnected/.translations/zh-Hans.json b/homeassistant/components/konnected/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/konnected/.translations/zh-Hans.json rename to homeassistant/components/konnected/translations/zh-Hans.json diff --git a/homeassistant/components/konnected/translations/zh-Hant.json b/homeassistant/components/konnected/translations/zh-Hant.json new file mode 100644 index 00000000000..5a1c8fe08bd --- /dev/null +++ b/homeassistant/components/konnected/translations/zh-Hant.json @@ -0,0 +1,108 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "\u8a2d\u5099\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "not_konn_panel": "\u4e26\u975e\u53ef\u8b58\u5225 Konnected.io \u8a2d\u5099", + "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Konnected \u9762\u677f\uff1a{host}:{port}" + }, + "step": { + "confirm": { + "description": "\u578b\u865f\uff1a{model}\nID\uff1a{id}\n\u4e3b\u6a5f\u7aef\uff1a{host}\n\u901a\u8a0a\u57e0\uff1a{port}\n\n\u53ef\u4ee5\u65bc Konncected \u8b66\u5831\u9762\u677f\u8a2d\u5b9a\u4e2d\u8a2d\u5b9a IO \u8207\u9762\u677f\u884c\u70ba\u3002", + "title": "Konnected \u8a2d\u5099\u5df2\u5099\u59a5" + }, + "import_confirm": { + "description": "\u65bc configuration.yaml \u4e2d\u767c\u73fe Konnected \u8b66\u5831 ID {id}\u3002\u6b64\u6d41\u7a0b\u5c07\u5141\u8a31\u532f\u5165\u81f3\u8a2d\u5b9a\u4e2d\u3002", + "title": "\u532f\u5165 Konnected \u8a2d\u5099" + }, + "user": { + "data": { + "host": "Konnected \u8a2d\u5099 IP \u4f4d\u5740", + "port": "Konnected \u8a2d\u5099\u901a\u8a0a\u57e0" + }, + "description": "\u8acb\u8f38\u5165 Konnected \u9762\u677f\u4e3b\u6a5f\u7aef\u8cc7\u8a0a\u3002", + "title": "\u641c\u7d22 Konnected \u8a2d\u5099" + } + } + }, + "options": { + "abort": { + "not_konn_panel": "\u4e26\u975e\u53ef\u8b58\u5225 Konnected.io \u8a2d\u5099" + }, + "error": { + "bad_host": "\u7121\u6548\u7684\u8986\u5beb API \u4e3b\u6a5f\u7aef URL" + }, + "step": { + "options_binary": { + "data": { + "inverse": "\u53cd\u8f49\u958b\u555f/\u95dc\u9589\u72c0\u614b", + "name": "\u540d\u7a31\uff08\u9078\u9805\uff09", + "type": "\u4e8c\u9032\u4f4d\u611f\u61c9\u5668\u985e\u578b" + }, + "description": "\u8acb\u9078\u64c7\u6b78\u7d0d\u70ba {zone}\u7684\u4e8c\u9032\u4f4d\u611f\u61c9\u5668\u8f38\u51fa\u9078\u9805", + "title": "\u8a2d\u5b9a\u4e8c\u9032\u4f4d\u611f\u61c9\u5668" + }, + "options_digital": { + "data": { + "name": "\u540d\u7a31\uff08\u9078\u9805\uff09", + "poll_interval": "\u66f4\u65b0\u9593\u8ddd\uff08\u5206\u9418\uff09\uff08\u9078\u9805\uff09", + "type": "\u611f\u61c9\u5668\u985e\u578b" + }, + "description": "\u8acb\u9078\u64c7\u6b78\u7d0d\u70ba {zone}\u7684\u6578\u4f4d\u611f\u61c9\u5668\u8f38\u51fa\u9078\u9805", + "title": "\u8a2d\u5b9a\u6578\u4f4d\u611f\u61c9\u5668" + }, + "options_io": { + "data": { + "1": "\u5340\u57df 1", + "2": "\u5340\u57df 2", + "3": "\u5340\u57df 3", + "4": "\u5340\u57df 4", + "5": "\u5340\u57df 5", + "6": "\u5340\u57df 6", + "7": "\u5340\u57df 7", + "out": "OUT" + }, + "description": "\u65bc {host} \u767c\u73fe {model}\u3002\u8acb\u65bc\u4e0b\u65b9\u6bcf\u4e00\u500b I/O \u9078\u64c7\u57fa\u672c\u8a2d\u5b9a - \u96a8\u8457 I/O \u4e0d\u540c\uff0c\u53ef\u5141\u8a31\u4e8c\u9032\u4f4d\u611f\u61c9\u5668\uff08\u958b\u555f/\u95dc\u9589\u72c0\u614b\uff09\u3001\u6578\u4f4d\u611f\u61c9\u5668\uff08DHT \u53ca ds18b20\uff09\uff0c\u6216\u8005\u53ef\u5207\u63db\u8f38\u51fa\u3002\u53ef\u4ee5\u65bc\u4e0b\u4e00\u6b65\u8a2d\u5b9a\u8a73\u7d30\u9078\u9805\u3002", + "title": "\u8a2d\u5b9a I/O" + }, + "options_io_ext": { + "data": { + "10": "\u5340\u57df 10", + "11": "\u5340\u57df 11", + "12": "\u5340\u57df 12", + "8": "\u5340\u57df 8", + "9": "\u5340\u57df 9", + "alarm1": "ALARM1", + "alarm2_out2": "OUT2/ALARM2", + "out1": "OUT1" + }, + "description": "\u9078\u64c7\u4e0b\u65b9\u5269\u9918 I/O \u8a2d\u5b9a\u3002\u53ef\u4ee5\u65bc\u4e0b\u4e00\u6b65\u8a2d\u5b9a\u8a73\u7d30\u9078\u9805\u3002", + "title": "\u8a2d\u5b9a\u5ef6\u4f38 I/O" + }, + "options_misc": { + "data": { + "api_host": "\u8986\u5beb API \u4e3b\u6a5f\u7aef URL\uff08\u9078\u9805\uff09", + "blink": "\u7576\u50b3\u9001\u72c0\u614b\u8b8a\u66f4\u6642\u3001\u9583\u720d\u9762\u677f LED", + "override_api_host": "\u8986\u5beb\u9810\u8a2d Home Assistant API \u4e3b\u6a5f\u7aef\u9762\u677f URL" + }, + "description": "\u8acb\u9078\u64c7\u9762\u677f\u671f\u671b\u884c\u70ba", + "title": "\u5176\u4ed6\u8a2d\u5b9a" + }, + "options_switch": { + "data": { + "activation": "\u958b\u555f\u6642\u8f38\u51fa", + "momentary": "\u6301\u7e8c\u6642\u9593\uff08ms\uff09\uff08\u9078\u9805\uff09", + "more_states": "\u8a2d\u5b9a\u6b64\u5340\u57df\u7684\u9644\u52a0\u72c0\u614b", + "name": "\u540d\u7a31\uff08\u9078\u9805\uff09", + "pause": "\u66ab\u505c\u9593\u8ddd\uff08ms\uff09\uff08\u9078\u9805\uff09", + "repeat": "\u91cd\u8907\u6642\u9593\uff08-1=\u7121\u9650\uff09\uff08\u9078\u9805\uff09" + }, + "description": "\u8acb\u9078\u64c7 {zone}\u8f38\u51fa\u9078\u9805\uff1a\u72c0\u614b {state}", + "title": "\u8a2d\u5b9a Switchable \u8f38\u51fa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/kwb/manifest.json b/homeassistant/components/kwb/manifest.json index c13aee18ef4..2f816345a86 100644 --- a/homeassistant/components/kwb/manifest.json +++ b/homeassistant/components/kwb/manifest.json @@ -3,6 +3,5 @@ "name": "KWB Easyfire", "documentation": "https://www.home-assistant.io/integrations/kwb", "requirements": ["pykwb==0.0.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lacrosse/manifest.json b/homeassistant/components/lacrosse/manifest.json index 28262b1e42d..f31d4b9fea5 100644 --- a/homeassistant/components/lacrosse/manifest.json +++ b/homeassistant/components/lacrosse/manifest.json @@ -3,6 +3,5 @@ "name": "LaCrosse", "documentation": "https://www.home-assistant.io/integrations/lacrosse", "requirements": ["pylacrosse==0.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lacrosse/sensor.py b/homeassistant/components/lacrosse/sensor.py index 1d38764710a..f0ec885a8fe 100644 --- a/homeassistant/components/lacrosse/sensor.py +++ b/homeassistant/components/lacrosse/sensor.py @@ -171,7 +171,7 @@ class LaCrosseSensor(Entity): """Triggered when value is expired.""" self._expiration_trigger = None self._value = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LaCrosseTemperature(LaCrosseSensor): diff --git a/homeassistant/components/lametric/manifest.json b/homeassistant/components/lametric/manifest.json index 8b81fb888fa..4edcef1a147 100644 --- a/homeassistant/components/lametric/manifest.json +++ b/homeassistant/components/lametric/manifest.json @@ -3,6 +3,5 @@ "name": "LaMetric", "documentation": "https://www.home-assistant.io/integrations/lametric", "requirements": ["lmnotify==0.0.4"], - "dependencies": [], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/lannouncer/manifest.json b/homeassistant/components/lannouncer/manifest.json index e803f2e56d2..3c46672776d 100644 --- a/homeassistant/components/lannouncer/manifest.json +++ b/homeassistant/components/lannouncer/manifest.json @@ -2,7 +2,5 @@ "domain": "lannouncer", "name": "LANnouncer", "documentation": "https://www.home-assistant.io/integrations/lannouncer", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lannouncer/notify.py b/homeassistant/components/lannouncer/notify.py index 9421eb16f51..c474bbe8c67 100644 --- a/homeassistant/components/lannouncer/notify.py +++ b/homeassistant/components/lannouncer/notify.py @@ -69,7 +69,7 @@ class LannouncerNotificationService(BaseNotificationService): # Send message _LOGGER.debug("Sending message: %s", cmd) sock.sendall(cmd.encode()) - sock.sendall("&@DONE@\n".encode()) + sock.sendall(b"&@DONE@\n") # Check response buffer = sock.recv(1024) @@ -80,5 +80,5 @@ class LannouncerNotificationService(BaseNotificationService): sock.close() except socket.gaierror: _LOGGER.error("Unable to connect to host %s", self._host) - except socket.error: + except OSError: _LOGGER.exception("Failed to send data to Lannnouncer") diff --git a/homeassistant/components/lastfm/manifest.json b/homeassistant/components/lastfm/manifest.json index 681047a2431..85d6c5ea8d2 100644 --- a/homeassistant/components/lastfm/manifest.json +++ b/homeassistant/components/lastfm/manifest.json @@ -3,6 +3,5 @@ "name": "Last.fm", "documentation": "https://www.home-assistant.io/integrations/lastfm", "requirements": ["pylast==3.2.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lastfm/sensor.py b/homeassistant/components/lastfm/sensor.py index 80a72f1d6fd..4783457112c 100644 --- a/homeassistant/components/lastfm/sensor.py +++ b/homeassistant/components/lastfm/sensor.py @@ -19,6 +19,8 @@ ATTR_PLAY_COUNT = "play_count" ATTR_TOP_PLAYED = "top_played" ATTRIBUTION = "Data provided by Last.fm" +STATE_NOT_SCROBBLING = "Not Scrobbling" + CONF_USERS = "users" ICON = "mdi:lastfm" @@ -84,17 +86,25 @@ class LastfmSensor(Entity): """Update device state.""" self._cover = self._user.get_image() self._playcount = self._user.get_playcount() - last = self._user.get_recent_tracks(limit=2)[0] - self._lastplayed = f"{last.track.artist} - {last.track.title}" - top = self._user.get_top_tracks(limit=1)[0] - toptitle = re.search("', '(.+?)',", str(top)) - topartist = re.search("'(.+?)',", str(top)) - self._topplayed = f"{topartist.group(1)} - {toptitle.group(1)}" - if self._user.get_now_playing() is None: - self._state = "Not Scrobbling" + + recent_tracks = self._user.get_recent_tracks(limit=2) + if recent_tracks: + last = recent_tracks[0] + self._lastplayed = f"{last.track.artist} - {last.track.title}" + + top_tracks = self._user.get_top_tracks(limit=1) + if top_tracks: + top = top_tracks[0] + toptitle = re.search("', '(.+?)',", str(top)) + topartist = re.search("'(.+?)',", str(top)) + self._topplayed = f"{topartist.group(1)} - {toptitle.group(1)}" + + now_playing = self._user.get_now_playing() + if now_playing is None: + self._state = STATE_NOT_SCROBBLING return - now = self._user.get_now_playing() - self._state = f"{now.artist} - {now.title}" + + self._state = f"{now_playing.artist} - {now_playing.title}" @property def device_state_attributes(self): diff --git a/homeassistant/components/launch_library/manifest.json b/homeassistant/components/launch_library/manifest.json index b5fc7b36713..d1e4c17ec5a 100644 --- a/homeassistant/components/launch_library/manifest.json +++ b/homeassistant/components/launch_library/manifest.json @@ -3,6 +3,5 @@ "name": "Launch Library", "documentation": "https://www.home-assistant.io/integrations/launch_library", "requirements": ["pylaunches==0.2.0"], - "dependencies": [], "codeowners": ["@ludeeus"] } diff --git a/homeassistant/components/lcn/binary_sensor.py b/homeassistant/components/lcn/binary_sensor.py index e0039f29e58..249adf04af8 100644 --- a/homeassistant/components/lcn/binary_sensor.py +++ b/homeassistant/components/lcn/binary_sensor.py @@ -68,7 +68,7 @@ class LcnRegulatorLockSensor(LcnDevice, BinarySensorDevice): return self._value = input_obj.get_value().is_locked_regulator() - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LcnBinarySensor(LcnDevice, BinarySensorDevice): @@ -100,7 +100,7 @@ class LcnBinarySensor(LcnDevice, BinarySensorDevice): return self._value = input_obj.get_state(self.bin_sensor_port.value) - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LcnLockKeysSensor(LcnDevice, BinarySensorDevice): @@ -135,4 +135,4 @@ class LcnLockKeysSensor(LcnDevice, BinarySensorDevice): key_id = int(self.source.name[1]) - 1 self._value = input_obj.get_state(table_id, key_id) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lcn/climate.py b/homeassistant/components/lcn/climate.py index aec68af6076..12fff2f479b 100644 --- a/homeassistant/components/lcn/climate.py +++ b/homeassistant/components/lcn/climate.py @@ -125,7 +125,7 @@ class LcnClimate(LcnDevice, ClimateDevice): self.address_connection.lock_regulator(self.regulator_id, True) self._target_temperature = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_temperature(self, **kwargs): """Set new target temperature.""" @@ -137,7 +137,7 @@ class LcnClimate(LcnDevice, ClimateDevice): self.address_connection.var_abs( self.setpoint, self._target_temperature, self.unit ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set temperature value when LCN input object is received.""" @@ -151,4 +151,4 @@ class LcnClimate(LcnDevice, ClimateDevice): if self._is_on: self._target_temperature = input_obj.get_value().to_var_unit(self.unit) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lcn/const.py b/homeassistant/components/lcn/const.py index 0a46190fbf9..219db45dbd4 100644 --- a/homeassistant/components/lcn/const.py +++ b/homeassistant/components/lcn/const.py @@ -1,7 +1,14 @@ """Constants for the LCN component.""" from itertools import product -from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE +from homeassistant.const import ( + DEGREE, + TEMP_CELSIUS, + TEMP_FAHRENHEIT, + TEMP_KELVIN, + UNIT_PERCENTAGE, + VOLT, +) DOMAIN = "lcn" DATA_LCN = "lcn" @@ -144,7 +151,7 @@ VAR_UNITS = [ "LCN", "NATIVE", TEMP_CELSIUS, - "°K", + TEMP_KELVIN, TEMP_FAHRENHEIT, "LUX_T", "LX_T", @@ -157,12 +164,12 @@ VAR_UNITS = [ "PERCENT", "PPM", "VOLT", - "V", + VOLT, "AMPERE", "AMP", "A", "DEGREE", - "°", + DEGREE, ] RELVARREF = ["CURRENT", "PROG"] diff --git a/homeassistant/components/lcn/cover.py b/homeassistant/components/lcn/cover.py index c1bd7070f53..61ae05fa010 100644 --- a/homeassistant/components/lcn/cover.py +++ b/homeassistant/components/lcn/cover.py @@ -74,21 +74,21 @@ class LcnOutputsCover(LcnDevice, CoverDevice): state = pypck.lcn_defs.MotorStateModifier.DOWN self.address_connection.control_motors_outputs(state) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_open_cover(self, **kwargs): """Open the cover.""" self._closed = False state = pypck.lcn_defs.MotorStateModifier.UP self.address_connection.control_motors_outputs(state, self.reverse_time) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_stop_cover(self, **kwargs): """Stop the cover.""" self._closed = None state = pypck.lcn_defs.MotorStateModifier.STOP self.address_connection.control_motors_outputs(state, self.reverse_time) - await self.async_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set cover states when LCN input object (command) is received.""" @@ -108,7 +108,7 @@ class LcnOutputsCover(LcnDevice, CoverDevice): elif self.state_down and not self.state_up: self._closed = True # Cover closed - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LcnRelayCover(LcnDevice, CoverDevice): @@ -140,7 +140,7 @@ class LcnRelayCover(LcnDevice, CoverDevice): states = [pypck.lcn_defs.MotorStateModifier.NOCHANGE] * 4 states[self.motor.value] = pypck.lcn_defs.MotorStateModifier.DOWN self.address_connection.control_motors_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_open_cover(self, **kwargs): """Open the cover.""" @@ -148,7 +148,7 @@ class LcnRelayCover(LcnDevice, CoverDevice): states = [pypck.lcn_defs.MotorStateModifier.NOCHANGE] * 4 states[self.motor.value] = pypck.lcn_defs.MotorStateModifier.UP self.address_connection.control_motors_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_stop_cover(self, **kwargs): """Stop the cover.""" @@ -156,7 +156,7 @@ class LcnRelayCover(LcnDevice, CoverDevice): states = [pypck.lcn_defs.MotorStateModifier.NOCHANGE] * 4 states[self.motor.value] = pypck.lcn_defs.MotorStateModifier.STOP self.address_connection.control_motors_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set cover states when LCN input object (command) is received.""" @@ -167,4 +167,4 @@ class LcnRelayCover(LcnDevice, CoverDevice): if states[self.motor_port_onoff]: # motor is on self._closed = states[self.motor_port_updown] # set direction - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lcn/light.py b/homeassistant/components/lcn/light.py index 4c67156c787..7f1cd547c02 100644 --- a/homeassistant/components/lcn/light.py +++ b/homeassistant/components/lcn/light.py @@ -102,7 +102,7 @@ class LcnOutputLight(LcnDevice, Light): transition = self._transition self.address_connection.dim_output(self.output.value, percent, transition) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the entity off.""" @@ -117,7 +117,7 @@ class LcnOutputLight(LcnDevice, Light): self._is_dimming_to_zero = bool(transition) self.address_connection.dim_output(self.output.value, 0, transition) - await self.async_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set light state when LCN input object (command) is received.""" @@ -132,7 +132,7 @@ class LcnOutputLight(LcnDevice, Light): self._is_dimming_to_zero = False if not self._is_dimming_to_zero: self._is_on = self.brightness > 0 - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LcnRelayLight(LcnDevice, Light): @@ -164,7 +164,7 @@ class LcnRelayLight(LcnDevice, Light): states[self.output.value] = pypck.lcn_defs.RelayStateModifier.ON self.address_connection.control_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the entity off.""" @@ -174,7 +174,7 @@ class LcnRelayLight(LcnDevice, Light): states[self.output.value] = pypck.lcn_defs.RelayStateModifier.OFF self.address_connection.control_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set light state when LCN input object (command) is received.""" @@ -182,4 +182,4 @@ class LcnRelayLight(LcnDevice, Light): return self._is_on = input_obj.get_state(self.output.value) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lcn/manifest.json b/homeassistant/components/lcn/manifest.json index 58353697d18..74bfe105555 100644 --- a/homeassistant/components/lcn/manifest.json +++ b/homeassistant/components/lcn/manifest.json @@ -3,6 +3,5 @@ "name": "LCN", "documentation": "https://www.home-assistant.io/integrations/lcn", "requirements": ["pypck==0.6.4"], - "dependencies": [], "codeowners": ["@alengwenus"] } diff --git a/homeassistant/components/lcn/scene.py b/homeassistant/components/lcn/scene.py index 0dc42639186..0bad1b87efe 100644 --- a/homeassistant/components/lcn/scene.py +++ b/homeassistant/components/lcn/scene.py @@ -1,4 +1,6 @@ """Support for LCN scenes.""" +from typing import Any + import pypck from homeassistant.components.scene import Scene @@ -63,7 +65,7 @@ class LcnScene(LcnDevice, Scene): async def async_added_to_hass(self): """Run when entity about to be added to hass.""" - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate scene.""" self.address_connection.activate_scene( self.register_id, diff --git a/homeassistant/components/lcn/sensor.py b/homeassistant/components/lcn/sensor.py index d4bb5566e34..ddf7e61a3f6 100644 --- a/homeassistant/components/lcn/sensor.py +++ b/homeassistant/components/lcn/sensor.py @@ -78,7 +78,7 @@ class LcnVariableSensor(LcnDevice): return self._value = input_obj.get_value().to_var_unit(self.unit) - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LcnLedLogicSensor(LcnDevice): @@ -115,4 +115,4 @@ class LcnLedLogicSensor(LcnDevice): elif self.source in pypck.lcn_defs.LogicOpPort: self._value = input_obj.get_logic_op_state(self.source.value).name.lower() - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lcn/services.yaml b/homeassistant/components/lcn/services.yaml index 80c636577f8..89fe884fa9a 100644 --- a/homeassistant/components/lcn/services.yaml +++ b/homeassistant/components/lcn/services.yaml @@ -5,7 +5,7 @@ output_abs: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" output: description: Output port example: "output1" @@ -21,7 +21,7 @@ output_rel: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" output: description: Output port example: "output1" @@ -37,7 +37,7 @@ output_toggle: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" output: description: Output port example: "output1" @@ -50,7 +50,7 @@ relays: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" state: description: Relays states as string (1=on, 2=off, t=toggle, -=nochange) example: "t---001-" @@ -60,16 +60,16 @@ led: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" led: description: Led example: "led6" state: description: Led state - example: 'blink' + example: "blink" values: - - on - - off + - "on" + - "off" - blink - flicker @@ -78,45 +78,45 @@ var_abs: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" variable: description: Variable or setpoint name - example: 'var1' + example: "var1" value: description: Value to set - example: '50' + example: "50" unit_of_measurement: description: Unit of value - example: 'celsius' + example: "celsius" var_reset: description: Reset value of variable or setpoint. fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" variable: description: Variable or setpoint name - example: 'var1' + example: "var1" var_rel: description: Shift value of a variable, setpoint or threshold. fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" variable: description: Variable or setpoint name - example: 'var1' + example: "var1" value: description: Shift value - example: '50' + example: "50" unit_of_measurement: description: Unit of value - example: 'celsius' + example: "celsius" value_reference: description: Reference value (current or programmed) for setpoint and threshold - example: 'current' + example: "current" values: - current - prog @@ -126,10 +126,10 @@ lock_regulator: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" setpoint: description: Setpoint name - example: 'r1varsetpoint' + example: "r1varsetpoint" state: description: New setpoint state example: true @@ -139,13 +139,13 @@ send_keys: fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" keys: description: Keys to send - example: 'a1a5d8' + example: "a1a5d8" state: - description: 'Key state upon sending (optional, must be hit for deferred)' - example: 'hit' + description: "Key state upon sending (optional, must be hit for deferred)" + example: "hit" values: - hit - make @@ -155,46 +155,46 @@ send_keys: example: 10 time_unit: description: Time unit of send delay (optional) - example: 's' + example: "s" lock_keys: description: Lock keys. fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" table: - description: 'Table with keys to lock (optional, must be A for interval).' - example: 'A5' + description: "Table with keys to lock (optional, must be A for interval)." + example: "A5" state: description: Key lock states as string (1=on, 2=off, T=toggle, -=nochange) - example: '1---t0--' + example: "1---t0--" time: description: Lock interval (optional) example: 10 time_unit: description: Time unit of lock interval (optional) - example: 's' + example: "s" dyn_text: description: Send dynamic text to LCN-GTxD displays. fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" row: description: Text row 1..4 (support of 4 independent text rows) example: 1 text: description: Text to send (up to 60 characters encoded as UTF-8) - example: 'text up to 60 characters' + example: "text up to 60 characters" pck: description: Send arbitrary PCK command. fields: address: description: Module address - example: 'myhome.s0.m7' + example: "myhome.s0.m7" pck: description: PCK command (without address header) - example: 'PIN4' + example: "PIN4" diff --git a/homeassistant/components/lcn/switch.py b/homeassistant/components/lcn/switch.py index f19548c4aee..a2adda95b3b 100644 --- a/homeassistant/components/lcn/switch.py +++ b/homeassistant/components/lcn/switch.py @@ -59,13 +59,13 @@ class LcnOutputSwitch(LcnDevice, SwitchDevice): """Turn the entity on.""" self._is_on = True self.address_connection.dim_output(self.output.value, 100, 0) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the entity off.""" self._is_on = False self.address_connection.dim_output(self.output.value, 0, 0) - await self.async_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set switch state when LCN input object (command) is received.""" @@ -76,7 +76,7 @@ class LcnOutputSwitch(LcnDevice, SwitchDevice): return self._is_on = input_obj.get_percent() > 0 - self.async_schedule_update_ha_state() + self.async_write_ha_state() class LcnRelaySwitch(LcnDevice, SwitchDevice): @@ -107,7 +107,7 @@ class LcnRelaySwitch(LcnDevice, SwitchDevice): states = [pypck.lcn_defs.RelayStateModifier.NOCHANGE] * 8 states[self.output.value] = pypck.lcn_defs.RelayStateModifier.ON self.address_connection.control_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the entity off.""" @@ -116,7 +116,7 @@ class LcnRelaySwitch(LcnDevice, SwitchDevice): states = [pypck.lcn_defs.RelayStateModifier.NOCHANGE] * 8 states[self.output.value] = pypck.lcn_defs.RelayStateModifier.OFF self.address_connection.control_relays(states) - await self.async_update_ha_state() + self.async_write_ha_state() def input_received(self, input_obj): """Set switch state when LCN input object (command) is received.""" @@ -124,4 +124,4 @@ class LcnRelaySwitch(LcnDevice, SwitchDevice): return self._is_on = input_obj.get_state(self.output.value) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lg_netcast/manifest.json b/homeassistant/components/lg_netcast/manifest.json index 87c73b772b8..78cccdda3be 100644 --- a/homeassistant/components/lg_netcast/manifest.json +++ b/homeassistant/components/lg_netcast/manifest.json @@ -3,6 +3,5 @@ "name": "LG Netcast", "documentation": "https://www.home-assistant.io/integrations/lg_netcast", "requirements": ["pylgnetcast-homeassistant==0.2.0.dev0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lg_soundbar/manifest.json b/homeassistant/components/lg_soundbar/manifest.json index 9f93f4e8f3f..42b5e22570c 100644 --- a/homeassistant/components/lg_soundbar/manifest.json +++ b/homeassistant/components/lg_soundbar/manifest.json @@ -3,6 +3,5 @@ "name": "LG Soundbars", "documentation": "https://www.home-assistant.io/integrations/lg_soundbar", "requirements": ["temescal==0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/life360/.translations/bg.json b/homeassistant/components/life360/.translations/bg.json deleted file mode 100644 index 02354204f24..00000000000 --- a/homeassistant/components/life360/.translations/bg.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", - "user_already_configured": "\u0412\u0435\u0447\u0435 \u0438\u043c\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043f\u0440\u043e\u0444\u0438\u043b" - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0437\u0430\u0434\u0430\u0434\u0435\u0442\u0435 \u0440\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043e\u043f\u0446\u0438\u0438, \u0432\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 Life360]({docs_url})." - }, - "error": { - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", - "invalid_username": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", - "unexpected": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u044a\u0441 \u0441\u044a\u0440\u0432\u044a\u0440\u0430 Life360", - "user_already_configured": "\u0412\u0435\u0447\u0435 \u0438\u043c\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043f\u0440\u043e\u0444\u0438\u043b" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "description": "\u0417\u0430 \u0434\u0430 \u0437\u0430\u0434\u0430\u0434\u0435\u0442\u0435 \u0440\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043e\u043f\u0446\u0438\u0438, \u0432\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 Life360]({docs_url}). \u041f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u0435 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0442\u043e\u0432\u0430 \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438.", - "title": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 Life360 \u043f\u0440\u043e\u0444\u0438\u043b" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/ca.json b/homeassistant/components/life360/.translations/ca.json deleted file mode 100644 index 58401a33d14..00000000000 --- a/homeassistant/components/life360/.translations/ca.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Credencials inv\u00e0lides", - "user_already_configured": "El compte ja ha estat configurat" - }, - "create_entry": { - "default": "Per configurar les opcions avan\u00e7ades mira la [documentaci\u00f3 de Life360]({docs_url})." - }, - "error": { - "invalid_credentials": "Credencials inv\u00e0lides", - "invalid_username": "Nom d'usuari incorrecte", - "unexpected": "S'ha produ\u00eft un error inesperat en comunicar-se amb el servidor de Life360.", - "user_already_configured": "El compte ja ha estat configurat" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "description": "Per configurar les opcions avan\u00e7ades mira la [documentaci\u00f3 de Life360]({docs_url}). Pot ser que ho hagis de fer abans d\u2019afegir cap compte.", - "title": "Informaci\u00f3 del compte Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/da.json b/homeassistant/components/life360/.translations/da.json deleted file mode 100644 index 32acc488dc6..00000000000 --- a/homeassistant/components/life360/.translations/da.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Ugyldige legitimationsoplysninger", - "user_already_configured": "Kontoen er allerede konfigureret" - }, - "create_entry": { - "default": "Hvis du vil angive avancerede indstillinger skal du se [Life360 dokumentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Ugyldige legitimationsoplysninger", - "invalid_username": "Ugyldigt brugernavn", - "unexpected": "Uventet fejl under kommunikation med Life360-serveren", - "user_already_configured": "Kontoen er allerede konfigureret" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn" - }, - "description": "Hvis du vil angive avancerede indstillinger skal du se [Life360 dokumentation]({docs_url}).\nDu \u00f8nsker m\u00e5ske at g\u00f8re dette f\u00f8r du tilf\u00f8jer konti.", - "title": "Life360-kontooplysninger" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/de.json b/homeassistant/components/life360/.translations/de.json deleted file mode 100644 index 08a55d26cae..00000000000 --- a/homeassistant/components/life360/.translations/de.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", - "user_already_configured": "Konto wurde bereits konfiguriert" - }, - "create_entry": { - "default": "M\u00f6gliche erweiterte Einstellungen finden sich unter [Life360-Dokumentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", - "invalid_username": "Ung\u00fcltiger Benutzername", - "unexpected": "Unerwarteter Fehler bei der Kommunikation mit dem Life360-Server", - "user_already_configured": "Konto wurde bereits konfiguriert" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername" - }, - "description": "Erweiterte Optionen sind in der [Life360-Dokumentation]({docs_url}) zu finden.\nDies sollte vor dem Hinzuf\u00fcgen von Kontoinformationen getan werden.", - "title": "Life360-Kontoinformationen" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/en.json b/homeassistant/components/life360/.translations/en.json deleted file mode 100644 index e6017339b73..00000000000 --- a/homeassistant/components/life360/.translations/en.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Invalid credentials", - "user_already_configured": "Account has already been configured" - }, - "create_entry": { - "default": "To set advanced options, see [Life360 documentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Invalid credentials", - "invalid_username": "Invalid username", - "unexpected": "Unexpected error communicating with Life360 server", - "user_already_configured": "Account has already been configured" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username" - }, - "description": "To set advanced options, see [Life360 documentation]({docs_url}).\nYou may want to do that before adding accounts.", - "title": "Life360 Account Info" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/es-419.json b/homeassistant/components/life360/.translations/es-419.json deleted file mode 100644 index 512d0285ac5..00000000000 --- a/homeassistant/components/life360/.translations/es-419.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "user_already_configured": "La cuenta ya ha sido configurada" - }, - "error": { - "invalid_credentials": "Credenciales no v\u00e1lidas", - "invalid_username": "Nombre de usuario inv\u00e1lido", - "unexpected": "Error inesperado al comunicarse con el servidor Life360", - "user_already_configured": "La cuenta ya ha sido configurada" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Nombre de usuario" - }, - "title": "Informaci\u00f3n de la cuenta Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/es.json b/homeassistant/components/life360/.translations/es.json deleted file mode 100644 index 2b185cb1b6c..00000000000 --- a/homeassistant/components/life360/.translations/es.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Credenciales no v\u00e1lidas", - "user_already_configured": "La cuenta ya ha sido configurada" - }, - "create_entry": { - "default": "Para configurar las opciones avanzadas, consulta la [documentaci\u00f3n de Life360]({docs_url})." - }, - "error": { - "invalid_credentials": "Credenciales no v\u00e1lidas", - "invalid_username": "Nombre de usuario no v\u00e1lido", - "unexpected": "Error inesperado al comunicarse con el servidor Life360", - "user_already_configured": "La cuenta ya ha sido configurada" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Nombre de usuario" - }, - "description": "Para configurar las opciones avanzadas, revisa la [documentaci\u00f3n de Life360]({docs_url}).\nDeber\u00edas hacerlo antes de a\u00f1adir alguna cuenta.", - "title": "Informaci\u00f3n de la cuenta de Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/fr.json b/homeassistant/components/life360/.translations/fr.json deleted file mode 100644 index 947425e4807..00000000000 --- a/homeassistant/components/life360/.translations/fr.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Informations d'identification invalides", - "user_already_configured": "Le compte a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9" - }, - "create_entry": { - "default": "Pour d\u00e9finir les options avanc\u00e9es, voir [Documentation de Life360]( {docs_url} )." - }, - "error": { - "invalid_credentials": "Informations d'identification invalides", - "invalid_username": "Nom d'utilisateur invalide", - "unexpected": "Erreur inattendue lors de la communication avec le serveur Life360", - "user_already_configured": "Le compte a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "description": "Pour d\u00e9finir des options avanc\u00e9es, voir [Documentation Life360]({docs_url}).\nVous pouvez le faire avant d'ajouter des comptes.", - "title": "Informations sur le compte Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/it.json b/homeassistant/components/life360/.translations/it.json deleted file mode 100644 index b7d2d6c8f1b..00000000000 --- a/homeassistant/components/life360/.translations/it.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Credenziali non valide", - "user_already_configured": "L'account \u00e8 gi\u00e0 stato configurato" - }, - "create_entry": { - "default": "Per impostare le opzioni avanzate, consultare la [Documentazione Life360]({docs_url})." - }, - "error": { - "invalid_credentials": "Credenziali non valide", - "invalid_username": "Nome utente non valido", - "unexpected": "Errore imprevisto durante la comunicazione con il server di Life360", - "user_already_configured": "L'account \u00e8 gi\u00e0 stato configurato" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome utente" - }, - "description": "Per impostare le opzioni avanzate, vedere [Documentazione di Life360]({docs_url}).\n\u00c8 consigliabile eseguire questa operazione prima di aggiungere gli account.", - "title": "Informazioni sull'account Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/ko.json b/homeassistant/components/life360/.translations/ko.json deleted file mode 100644 index 067b305b80c..00000000000 --- a/homeassistant/components/life360/.translations/ko.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "user_already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "create_entry": { - "default": "\uace0\uae09 \uc635\uc158\uc744 \uc124\uc815\ud558\ub824\uba74 [Life360 \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "error": { - "invalid_credentials": "\ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_username": "\uc0ac\uc6a9\uc790 \uc774\ub984\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "unexpected": "Life360 \uc11c\ubc84 \uc5f0\uacb0\uc911 \uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", - "user_already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "\uace0\uae09 \uc635\uc158\uc744 \uc124\uc815\ud558\ub824\uba74 [Life360 \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694. \uacc4\uc815\uc744 \ucd94\uac00\ud558\uc2dc\uae30 \uc804\uc5d0 \uc77d\uc5b4\ubcf4\uc2dc\ub294\uac83\uc744 \ucd94\ucc9c\ub4dc\ub9bd\ub2c8\ub2e4.", - "title": "Life360 \uacc4\uc815 \uc815\ubcf4" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/lb.json b/homeassistant/components/life360/.translations/lb.json deleted file mode 100644 index 3af9ab00728..00000000000 --- a/homeassistant/components/life360/.translations/lb.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Ong\u00eblteg Login Informatioune", - "user_already_configured": "Kont ass scho konfigur\u00e9iert" - }, - "create_entry": { - "default": "Fir erweidert Optiounen anzestellen, kuckt [Life360 Dokumentatioun]({docs_url})." - }, - "error": { - "invalid_credentials": "Ong\u00eblteg Login Informatioune", - "invalid_username": "Ong\u00ebltege Benotzernumm", - "unexpected": "Onerwaarte Feeler bei der Kommunikatioun mam Life360 Server", - "user_already_configured": "Kont ass scho konfigur\u00e9iert" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm" - }, - "description": "Fir erweidert Optiounen anzestellen, kuckt [Life360 Dokumentatioun]({docs_url}).\nMaacht dat am beschten ier dir Konte b\u00e4isetzt.", - "title": "Life360 Kont Informatiounen" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/nl.json b/homeassistant/components/life360/.translations/nl.json deleted file mode 100644 index 08be66a8963..00000000000 --- a/homeassistant/components/life360/.translations/nl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Ongeldige gebruikersgegevens", - "user_already_configured": "Account is al geconfigureerd" - }, - "create_entry": { - "default": "Om geavanceerde opties in te stellen, zie [Life360 documentatie]({docs_url})." - }, - "error": { - "invalid_credentials": "Ongeldige gebruikersgegevens", - "invalid_username": "Ongeldige gebruikersnaam", - "unexpected": "Onverwachte fout bij communicatie met Life360-server", - "user_already_configured": "Account is al geconfigureerd" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam" - }, - "description": "Om geavanceerde opties in te stellen, zie [Life360 documentatie]({docs_url}).\nMisschien wilt u dat doen voordat u accounts toevoegt.", - "title": "Life360-accountgegevens" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/nn.json b/homeassistant/components/life360/.translations/nn.json deleted file mode 100644 index 98345b022f2..00000000000 --- a/homeassistant/components/life360/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "username": "Brukarnamn" - } - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/no.json b/homeassistant/components/life360/.translations/no.json deleted file mode 100644 index 032dd606cbd..00000000000 --- a/homeassistant/components/life360/.translations/no.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Ugyldig legitimasjon", - "user_already_configured": "Kontoen er allerede konfigurert" - }, - "create_entry": { - "default": "For \u00e5 angi avanserte alternativer, se [Life360 dokumentasjon]({docs_url})." - }, - "error": { - "invalid_credentials": "Ugyldig legitimasjon", - "invalid_username": "Ugyldig brukernavn", - "unexpected": "Uventet feil under kommunikasjon med Life360-servern", - "user_already_configured": "Kontoen er allerede konfigurert" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn" - }, - "description": "For \u00e5 angi avanserte alternativer, se [Life360 dokumentasjon]({docs_url}). \nDet kan hende du vil gj\u00f8re det f\u00f8r du legger til kontoer.", - "title": "Life360 Kontoinformasjon" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/pl.json b/homeassistant/components/life360/.translations/pl.json deleted file mode 100644 index f82c8325828..00000000000 --- a/homeassistant/components/life360/.translations/pl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce", - "user_already_configured": "Konto jest ju\u017c skonfigurowane." - }, - "create_entry": { - "default": "Aby skonfigurowa\u0107 zaawansowane ustawienia, zapoznaj si\u0119 z [dokumentacj\u0105 Life360]({docs_url})." - }, - "error": { - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce", - "invalid_username": "Nieprawid\u0142owa nazwa u\u017cytkownika", - "unexpected": "Nieoczekiwany b\u0142\u0105d komunikacji z serwerem Life360", - "user_already_configured": "Konto jest ju\u017c skonfigurowane." - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Aby skonfigurowa\u0107 zaawansowane ustawienia, zapoznaj si\u0119 z [dokumentacj\u0105 Life360]({docs_url}). Mo\u017cesz to zrobi\u0107 przed dodaniem kont.", - "title": "Informacje o koncie Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/pt-BR.json b/homeassistant/components/life360/.translations/pt-BR.json deleted file mode 100644 index 5181c37969a..00000000000 --- a/homeassistant/components/life360/.translations/pt-BR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Credenciais inv\u00e1lidas", - "user_already_configured": "A conta j\u00e1 foi configurada" - }, - "create_entry": { - "default": "Para definir op\u00e7\u00f5es avan\u00e7adas, consulte [Documenta\u00e7\u00e3o da Life360] ({docs_url})." - }, - "error": { - "invalid_credentials": "Credenciais inv\u00e1lidas", - "invalid_username": "Nome de usu\u00e1rio Inv\u00e1lido", - "unexpected": "Erro inesperado na comunica\u00e7\u00e3o com o servidor Life360", - "user_already_configured": "A conta j\u00e1 foi configurada" - }, - "step": { - "user": { - "data": { - "password": "Senha", - "username": "Nome de usu\u00e1rio" - }, - "description": "Para definir op\u00e7\u00f5es avan\u00e7adas, consulte [Documenta\u00e7\u00e3o da Life360] ({docs_url}). \n Voc\u00ea pode querer fazer isso antes de adicionar contas.", - "title": "Informa\u00e7\u00f5es da conta Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/ru.json b/homeassistant/components/life360/.translations/ru.json deleted file mode 100644 index c3f2601eb99..00000000000 --- a/homeassistant/components/life360/.translations/ru.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "user_already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438." - }, - "error": { - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "invalid_username": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d.", - "unexpected": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c Life360.", - "user_already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.", - "title": "Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/sl.json b/homeassistant/components/life360/.translations/sl.json deleted file mode 100644 index 2bb3bb4833e..00000000000 --- a/homeassistant/components/life360/.translations/sl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Napa\u010dno geslo", - "user_already_configured": "Ra\u010dun \u017ee nastavljen" - }, - "create_entry": { - "default": "\u010ce \u017eelite nastaviti napredne mo\u017enosti, glejte [Life360 dokumentacija]({docs_url})." - }, - "error": { - "invalid_credentials": "Napa\u010dno geslo", - "invalid_username": "Napa\u010dno uporabni\u0161ko ime", - "unexpected": "Nepri\u010dakovana napaka pri komunikaciji s stre\u017enikom Life360", - "user_already_configured": "Ra\u010dun \u017ee nastavljen" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime" - }, - "description": "\u010ce \u017eelite nastaviti napredne mo\u017enosti, glejte [Life360 dokumentacija]({docs_url}). \n To lahko storite pred dodajanjem ra\u010dunov.", - "title": "Podatki ra\u010duna Life360" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/sv.json b/homeassistant/components/life360/.translations/sv.json deleted file mode 100644 index ba28d973ec3..00000000000 --- a/homeassistant/components/life360/.translations/sv.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "Ogiltiga autentiseringsuppgifter", - "user_already_configured": "Konto har redan konfigurerats" - }, - "create_entry": { - "default": "F\u00f6r att st\u00e4lla in avancerade alternativ, se [Life360 documentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Ogiltiga autentiseringsuppgifter", - "invalid_username": "Ogiltigt anv\u00e4ndarnmn", - "unexpected": "Ov\u00e4ntat fel vid kommunikation med Life360-servern", - "user_already_configured": "Konto har redan konfigurerats" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn" - }, - "description": "F\u00f6r att st\u00e4lla in avancerade alternativ, se [Life360 documentation]({docs_url}).\nDu kanske vill g\u00f6ra det innan du l\u00e4gger till konton.", - "title": "Life360 kontoinformation" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/zh-Hant.json b/homeassistant/components/life360/.translations/zh-Hant.json deleted file mode 100644 index 75081c62d41..00000000000 --- a/homeassistant/components/life360/.translations/zh-Hant.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "invalid_credentials": "\u6191\u8b49\u7121\u6548", - "user_already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "create_entry": { - "default": "\u6b32\u8a2d\u5b9a\u9032\u968e\u9078\u9805\uff0c\u8acb\u53c3\u95b1 [Life360 \u6587\u4ef6]({docs_url})\u3002" - }, - "error": { - "invalid_credentials": "\u6191\u8b49\u7121\u6548", - "invalid_username": "\u4f7f\u7528\u8005\u540d\u7a31\u7121\u6548", - "unexpected": "\u8207 Life360 \u4f3a\u670d\u5668\u901a\u8a0a\u767c\u751f\u672a\u77e5\u932f\u8aa4", - "user_already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u6b32\u8a2d\u5b9a\u9032\u968e\u9078\u9805\uff0c\u8acb\u53c3\u95b1 [Life360 \u6587\u4ef6]({docs_url})\u3002\n\u5efa\u8b70\u65bc\u65b0\u589e\u5e33\u865f\u524d\uff0c\u5148\u9032\u884c\u4e86\u89e3\u3002", - "title": "Life360 \u5e33\u865f\u8cc7\u8a0a" - } - }, - "title": "Life360" - } -} \ No newline at end of file diff --git a/homeassistant/components/life360/__init__.py b/homeassistant/components/life360/__init__.py index 50117c210a2..8338cbf7f11 100644 --- a/homeassistant/components/life360/__init__.py +++ b/homeassistant/components/life360/__init__.py @@ -57,7 +57,7 @@ def _prefix(value): if not value: return "" if not value.endswith("_"): - return value + "_" + return f"{value}_" return value diff --git a/homeassistant/components/life360/device_tracker.py b/homeassistant/components/life360/device_tracker.py index b6cd67c2627..5403a483ffb 100644 --- a/homeassistant/components/life360/device_tracker.py +++ b/homeassistant/components/life360/device_tracker.py @@ -214,7 +214,7 @@ class Life360Scanner: err_msg = member["issues"]["title"] if err_msg: if member["issues"]["dialog"]: - err_msg += ": " + member["issues"]["dialog"] + err_msg += f": {member['issues']['dialog']}" else: err_msg = "Location information missing" self._err(dev_id, err_msg) diff --git a/homeassistant/components/life360/manifest.json b/homeassistant/components/life360/manifest.json index 016b9e13d63..c7a832f78e7 100644 --- a/homeassistant/components/life360/manifest.json +++ b/homeassistant/components/life360/manifest.json @@ -3,7 +3,6 @@ "name": "Life360", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/life360", - "dependencies": [], "codeowners": ["@pnbruckner"], "requirements": ["life360==4.1.1"] } diff --git a/homeassistant/components/life360/strings.json b/homeassistant/components/life360/strings.json index 419f3650333..22d3f52c63b 100644 --- a/homeassistant/components/life360/strings.json +++ b/homeassistant/components/life360/strings.json @@ -1,13 +1,9 @@ { "config": { - "title": "Life360", "step": { "user": { "title": "Life360 Account Info", - "data": { - "username": "Username", - "password": "Password" - }, + "data": { "username": "Username", "password": "Password" }, "description": "To set advanced options, see [Life360 documentation]({docs_url}).\nYou may want to do that before adding accounts." } }, diff --git a/homeassistant/components/life360/translations/bg.json b/homeassistant/components/life360/translations/bg.json new file mode 100644 index 00000000000..9c8dca0b06f --- /dev/null +++ b/homeassistant/components/life360/translations/bg.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", + "user_already_configured": "\u0412\u0435\u0447\u0435 \u0438\u043c\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043f\u0440\u043e\u0444\u0438\u043b" + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0437\u0430\u0434\u0430\u0434\u0435\u0442\u0435 \u0440\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043e\u043f\u0446\u0438\u0438, \u0432\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 Life360]({docs_url})." + }, + "error": { + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", + "invalid_username": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", + "unexpected": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u043a\u043e\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u044a\u0441 \u0441\u044a\u0440\u0432\u044a\u0440\u0430 Life360", + "user_already_configured": "\u0412\u0435\u0447\u0435 \u0438\u043c\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043f\u0440\u043e\u0444\u0438\u043b" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "description": "\u0417\u0430 \u0434\u0430 \u0437\u0430\u0434\u0430\u0434\u0435\u0442\u0435 \u0440\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043e\u043f\u0446\u0438\u0438, \u0432\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 Life360]({docs_url}). \u041f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u0435 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0442\u043e\u0432\u0430 \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438.", + "title": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 Life360 \u043f\u0440\u043e\u0444\u0438\u043b" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/ca.json b/homeassistant/components/life360/translations/ca.json new file mode 100644 index 00000000000..a61e4372b78 --- /dev/null +++ b/homeassistant/components/life360/translations/ca.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Credencials inv\u00e0lides", + "user_already_configured": "El compte ja ha estat configurat" + }, + "create_entry": { + "default": "Per configurar les opcions avan\u00e7ades mira la [documentaci\u00f3 de Life360]({docs_url})." + }, + "error": { + "invalid_credentials": "Credencials inv\u00e0lides", + "invalid_username": "Nom d'usuari incorrecte", + "unexpected": "S'ha produ\u00eft un error inesperat en comunicar-se amb el servidor de Life360.", + "user_already_configured": "El compte ja ha estat configurat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "description": "Per configurar les opcions avan\u00e7ades mira la [documentaci\u00f3 de Life360]({docs_url}). Pot ser que ho hagis de fer abans d\u2019afegir cap compte.", + "title": "Informaci\u00f3 del compte Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/da.json b/homeassistant/components/life360/translations/da.json new file mode 100644 index 00000000000..76f46e7c816 --- /dev/null +++ b/homeassistant/components/life360/translations/da.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Ugyldige legitimationsoplysninger", + "user_already_configured": "Kontoen er allerede konfigureret" + }, + "create_entry": { + "default": "Hvis du vil angive avancerede indstillinger skal du se [Life360 dokumentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Ugyldige legitimationsoplysninger", + "invalid_username": "Ugyldigt brugernavn", + "unexpected": "Uventet fejl under kommunikation med Life360-serveren", + "user_already_configured": "Kontoen er allerede konfigureret" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn" + }, + "description": "Hvis du vil angive avancerede indstillinger skal du se [Life360 dokumentation]({docs_url}).\nDu \u00f8nsker m\u00e5ske at g\u00f8re dette f\u00f8r du tilf\u00f8jer konti.", + "title": "Life360-kontooplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/de.json b/homeassistant/components/life360/translations/de.json new file mode 100644 index 00000000000..09970c59014 --- /dev/null +++ b/homeassistant/components/life360/translations/de.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", + "user_already_configured": "Konto wurde bereits konfiguriert" + }, + "create_entry": { + "default": "M\u00f6gliche erweiterte Einstellungen finden sich unter [Life360-Dokumentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", + "invalid_username": "Ung\u00fcltiger Benutzername", + "unexpected": "Unerwarteter Fehler bei der Kommunikation mit dem Life360-Server", + "user_already_configured": "Konto wurde bereits konfiguriert" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "description": "Erweiterte Optionen sind in der [Life360-Dokumentation]({docs_url}) zu finden.\nDies sollte vor dem Hinzuf\u00fcgen von Kontoinformationen getan werden.", + "title": "Life360-Kontoinformationen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/en.json b/homeassistant/components/life360/translations/en.json new file mode 100644 index 00000000000..18f22d7f1b8 --- /dev/null +++ b/homeassistant/components/life360/translations/en.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Invalid credentials", + "user_already_configured": "Account has already been configured" + }, + "create_entry": { + "default": "To set advanced options, see [Life360 documentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Invalid credentials", + "invalid_username": "Invalid username", + "unexpected": "Unexpected error communicating with Life360 server", + "user_already_configured": "Account has already been configured" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "description": "To set advanced options, see [Life360 documentation]({docs_url}).\nYou may want to do that before adding accounts.", + "title": "Life360 Account Info" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/es-419.json b/homeassistant/components/life360/translations/es-419.json new file mode 100644 index 00000000000..33d8d59d080 --- /dev/null +++ b/homeassistant/components/life360/translations/es-419.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "user_already_configured": "La cuenta ya ha sido configurada" + }, + "error": { + "invalid_credentials": "Credenciales no v\u00e1lidas", + "invalid_username": "Nombre de usuario inv\u00e1lido", + "unexpected": "Error inesperado al comunicarse con el servidor Life360", + "user_already_configured": "La cuenta ya ha sido configurada" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Nombre de usuario" + }, + "title": "Informaci\u00f3n de la cuenta Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/es.json b/homeassistant/components/life360/translations/es.json new file mode 100644 index 00000000000..fc6c58d8ed8 --- /dev/null +++ b/homeassistant/components/life360/translations/es.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Credenciales no v\u00e1lidas", + "user_already_configured": "La cuenta ya ha sido configurada" + }, + "create_entry": { + "default": "Para configurar las opciones avanzadas, consulta la [documentaci\u00f3n de Life360]({docs_url})." + }, + "error": { + "invalid_credentials": "Credenciales no v\u00e1lidas", + "invalid_username": "Nombre de usuario no v\u00e1lido", + "unexpected": "Error inesperado al comunicarse con el servidor Life360", + "user_already_configured": "La cuenta ya ha sido configurada" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "description": "Para configurar las opciones avanzadas, revisa la [documentaci\u00f3n de Life360]({docs_url}).\nDeber\u00edas hacerlo antes de a\u00f1adir alguna cuenta.", + "title": "Informaci\u00f3n de la cuenta de Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/fr.json b/homeassistant/components/life360/translations/fr.json new file mode 100644 index 00000000000..a08c6bc6efe --- /dev/null +++ b/homeassistant/components/life360/translations/fr.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Informations d'identification invalides", + "user_already_configured": "Le compte a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9" + }, + "create_entry": { + "default": "Pour d\u00e9finir les options avanc\u00e9es, voir [Documentation de Life360]( {docs_url} )." + }, + "error": { + "invalid_credentials": "Informations d'identification invalides", + "invalid_username": "Nom d'utilisateur invalide", + "unexpected": "Erreur inattendue lors de la communication avec le serveur Life360", + "user_already_configured": "Le compte a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "description": "Pour d\u00e9finir des options avanc\u00e9es, voir [Documentation Life360]({docs_url}).\nVous pouvez le faire avant d'ajouter des comptes.", + "title": "Informations sur le compte Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/hr.json b/homeassistant/components/life360/translations/hr.json similarity index 100% rename from homeassistant/components/life360/.translations/hr.json rename to homeassistant/components/life360/translations/hr.json diff --git a/homeassistant/components/life360/.translations/hu.json b/homeassistant/components/life360/translations/hu.json similarity index 100% rename from homeassistant/components/life360/.translations/hu.json rename to homeassistant/components/life360/translations/hu.json diff --git a/homeassistant/components/life360/.translations/id.json b/homeassistant/components/life360/translations/id.json similarity index 100% rename from homeassistant/components/life360/.translations/id.json rename to homeassistant/components/life360/translations/id.json diff --git a/homeassistant/components/life360/translations/it.json b/homeassistant/components/life360/translations/it.json new file mode 100644 index 00000000000..3142208b70c --- /dev/null +++ b/homeassistant/components/life360/translations/it.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Credenziali non valide", + "user_already_configured": "L'account \u00e8 gi\u00e0 stato configurato" + }, + "create_entry": { + "default": "Per impostare le opzioni avanzate, consultare la [Documentazione Life360]({docs_url})." + }, + "error": { + "invalid_credentials": "Credenziali non valide", + "invalid_username": "Nome utente non valido", + "unexpected": "Errore imprevisto durante la comunicazione con il server di Life360", + "user_already_configured": "L'account \u00e8 gi\u00e0 stato configurato" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "description": "Per impostare le opzioni avanzate, vedere [Documentazione di Life360]({docs_url}).\n\u00c8 consigliabile eseguire questa operazione prima di aggiungere gli account.", + "title": "Informazioni sull'account Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/ko.json b/homeassistant/components/life360/translations/ko.json new file mode 100644 index 00000000000..426f3b242a6 --- /dev/null +++ b/homeassistant/components/life360/translations/ko.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "user_already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "create_entry": { + "default": "\uace0\uae09 \uc635\uc158\uc744 \uc124\uc815\ud558\ub824\uba74 [Life360 \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "error": { + "invalid_credentials": "\ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_username": "\uc0ac\uc6a9\uc790 \uc774\ub984\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unexpected": "Life360 \uc11c\ubc84 \uc5f0\uacb0\uc911 \uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", + "user_already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "\uace0\uae09 \uc635\uc158\uc744 \uc124\uc815\ud558\ub824\uba74 [Life360 \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694. \uacc4\uc815\uc744 \ucd94\uac00\ud558\uc2dc\uae30 \uc804\uc5d0 \uc77d\uc5b4\ubcf4\uc2dc\ub294\uac83\uc744 \ucd94\ucc9c\ub4dc\ub9bd\ub2c8\ub2e4.", + "title": "Life360 \uacc4\uc815 \uc815\ubcf4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/lb.json b/homeassistant/components/life360/translations/lb.json new file mode 100644 index 00000000000..f4a455212cb --- /dev/null +++ b/homeassistant/components/life360/translations/lb.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Ong\u00eblteg Login Informatioune", + "user_already_configured": "Kont ass scho konfigur\u00e9iert" + }, + "create_entry": { + "default": "Fir erweidert Optiounen anzestellen, kuckt [Life360 Dokumentatioun]({docs_url})." + }, + "error": { + "invalid_credentials": "Ong\u00eblteg Login Informatioune", + "invalid_username": "Ong\u00ebltege Benotzernumm", + "unexpected": "Onerwaarte Feeler bei der Kommunikatioun mam Life360 Server", + "user_already_configured": "Kont ass scho konfigur\u00e9iert" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "description": "Fir erweidert Optiounen anzestellen, kuckt [Life360 Dokumentatioun]({docs_url}).\nMaacht dat am beschten ier dir Konte b\u00e4isetzt.", + "title": "Life360 Kont Informatiounen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/nl.json b/homeassistant/components/life360/translations/nl.json new file mode 100644 index 00000000000..ad1ececc858 --- /dev/null +++ b/homeassistant/components/life360/translations/nl.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Ongeldige gebruikersgegevens", + "user_already_configured": "Account is al geconfigureerd" + }, + "create_entry": { + "default": "Om geavanceerde opties in te stellen, zie [Life360 documentatie]({docs_url})." + }, + "error": { + "invalid_credentials": "Ongeldige gebruikersgegevens", + "invalid_username": "Ongeldige gebruikersnaam", + "unexpected": "Onverwachte fout bij communicatie met Life360-server", + "user_already_configured": "Account is al geconfigureerd" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + }, + "description": "Om geavanceerde opties in te stellen, zie [Life360 documentatie]({docs_url}).\nMisschien wilt u dat doen voordat u accounts toevoegt.", + "title": "Life360-accountgegevens" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/nn.json b/homeassistant/components/life360/translations/nn.json new file mode 100644 index 00000000000..7c129cba3af --- /dev/null +++ b/homeassistant/components/life360/translations/nn.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "username": "Brukarnamn" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/no.json b/homeassistant/components/life360/translations/no.json new file mode 100644 index 00000000000..fba620789ab --- /dev/null +++ b/homeassistant/components/life360/translations/no.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Ugyldig legitimasjon", + "user_already_configured": "Kontoen er allerede konfigurert" + }, + "create_entry": { + "default": "For \u00e5 angi avanserte alternativer, se [Life360 dokumentasjon]({docs_url})." + }, + "error": { + "invalid_credentials": "Ugyldig legitimasjon", + "invalid_username": "Ugyldig brukernavn", + "unexpected": "Uventet feil under kommunikasjon med Life360-servern", + "user_already_configured": "Kontoen er allerede konfigurert" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "description": "For \u00e5 angi avanserte alternativer, se [Life360 dokumentasjon]({docs_url}). \nDet kan hende du vil gj\u00f8re det f\u00f8r du legger til kontoer.", + "title": "Life360 Kontoinformasjon" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/pl.json b/homeassistant/components/life360/translations/pl.json new file mode 100644 index 00000000000..19a6c6d8828 --- /dev/null +++ b/homeassistant/components/life360/translations/pl.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce", + "user_already_configured": "Konto jest ju\u017c skonfigurowane." + }, + "create_entry": { + "default": "Aby skonfigurowa\u0107 zaawansowane ustawienia, zapoznaj si\u0119 z [dokumentacj\u0105 Life360]({docs_url})." + }, + "error": { + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce", + "invalid_username": "Nieprawid\u0142owa nazwa u\u017cytkownika", + "unexpected": "Nieoczekiwany b\u0142\u0105d komunikacji z serwerem Life360", + "user_already_configured": "Konto jest ju\u017c skonfigurowane." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Aby skonfigurowa\u0107 zaawansowane ustawienia, zapoznaj si\u0119 z [dokumentacj\u0105 Life360]({docs_url}). Mo\u017cesz to zrobi\u0107 przed dodaniem kont.", + "title": "Informacje o koncie Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/pt-BR.json b/homeassistant/components/life360/translations/pt-BR.json new file mode 100644 index 00000000000..b841e7b28fd --- /dev/null +++ b/homeassistant/components/life360/translations/pt-BR.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Credenciais inv\u00e1lidas", + "user_already_configured": "A conta j\u00e1 foi configurada" + }, + "create_entry": { + "default": "Para definir op\u00e7\u00f5es avan\u00e7adas, consulte [Documenta\u00e7\u00e3o da Life360] ({docs_url})." + }, + "error": { + "invalid_credentials": "Credenciais inv\u00e1lidas", + "invalid_username": "Nome de usu\u00e1rio Inv\u00e1lido", + "unexpected": "Erro inesperado na comunica\u00e7\u00e3o com o servidor Life360", + "user_already_configured": "A conta j\u00e1 foi configurada" + }, + "step": { + "user": { + "data": { + "password": "Senha", + "username": "Nome de usu\u00e1rio" + }, + "description": "Para definir op\u00e7\u00f5es avan\u00e7adas, consulte [Documenta\u00e7\u00e3o da Life360] ({docs_url}). \n Voc\u00ea pode querer fazer isso antes de adicionar contas.", + "title": "Informa\u00e7\u00f5es da conta Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/pt.json b/homeassistant/components/life360/translations/pt.json similarity index 100% rename from homeassistant/components/life360/.translations/pt.json rename to homeassistant/components/life360/translations/pt.json diff --git a/homeassistant/components/life360/translations/ru.json b/homeassistant/components/life360/translations/ru.json new file mode 100644 index 00000000000..d95bb809cd5 --- /dev/null +++ b/homeassistant/components/life360/translations/ru.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "user_already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438." + }, + "error": { + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "invalid_username": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d.", + "unexpected": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c Life360.", + "user_already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.", + "title": "Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/sl.json b/homeassistant/components/life360/translations/sl.json new file mode 100644 index 00000000000..857f12041d1 --- /dev/null +++ b/homeassistant/components/life360/translations/sl.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Napa\u010dno geslo", + "user_already_configured": "Ra\u010dun \u017ee nastavljen" + }, + "create_entry": { + "default": "\u010ce \u017eelite nastaviti napredne mo\u017enosti, glejte [Life360 dokumentacija]({docs_url})." + }, + "error": { + "invalid_credentials": "Napa\u010dno geslo", + "invalid_username": "Napa\u010dno uporabni\u0161ko ime", + "unexpected": "Nepri\u010dakovana napaka pri komunikaciji s stre\u017enikom Life360", + "user_already_configured": "Ra\u010dun \u017ee nastavljen" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "description": "\u010ce \u017eelite nastaviti napredne mo\u017enosti, glejte [Life360 dokumentacija]({docs_url}). \n To lahko storite pred dodajanjem ra\u010dunov.", + "title": "Podatki ra\u010duna Life360" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/translations/sv.json b/homeassistant/components/life360/translations/sv.json new file mode 100644 index 00000000000..915c7e7f55b --- /dev/null +++ b/homeassistant/components/life360/translations/sv.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "Ogiltiga autentiseringsuppgifter", + "user_already_configured": "Konto har redan konfigurerats" + }, + "create_entry": { + "default": "F\u00f6r att st\u00e4lla in avancerade alternativ, se [Life360 documentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Ogiltiga autentiseringsuppgifter", + "invalid_username": "Ogiltigt anv\u00e4ndarnmn", + "unexpected": "Ov\u00e4ntat fel vid kommunikation med Life360-servern", + "user_already_configured": "Konto har redan konfigurerats" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn" + }, + "description": "F\u00f6r att st\u00e4lla in avancerade alternativ, se [Life360 documentation]({docs_url}).\nDu kanske vill g\u00f6ra det innan du l\u00e4gger till konton.", + "title": "Life360 kontoinformation" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/life360/.translations/zh-Hans.json b/homeassistant/components/life360/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/life360/.translations/zh-Hans.json rename to homeassistant/components/life360/translations/zh-Hans.json diff --git a/homeassistant/components/life360/translations/zh-Hant.json b/homeassistant/components/life360/translations/zh-Hant.json new file mode 100644 index 00000000000..025ee202696 --- /dev/null +++ b/homeassistant/components/life360/translations/zh-Hant.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "invalid_credentials": "\u6191\u8b49\u7121\u6548", + "user_already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "create_entry": { + "default": "\u6b32\u8a2d\u5b9a\u9032\u968e\u9078\u9805\uff0c\u8acb\u53c3\u95b1 [Life360 \u6587\u4ef6]({docs_url})\u3002" + }, + "error": { + "invalid_credentials": "\u6191\u8b49\u7121\u6548", + "invalid_username": "\u4f7f\u7528\u8005\u540d\u7a31\u7121\u6548", + "unexpected": "\u8207 Life360 \u4f3a\u670d\u5668\u901a\u8a0a\u767c\u751f\u672a\u77e5\u932f\u8aa4", + "user_already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u6b32\u8a2d\u5b9a\u9032\u968e\u9078\u9805\uff0c\u8acb\u53c3\u95b1 [Life360 \u6587\u4ef6]({docs_url})\u3002\n\u5efa\u8b70\u65bc\u65b0\u589e\u5e33\u865f\u524d\uff0c\u5148\u9032\u884c\u4e86\u89e3\u3002", + "title": "Life360 \u5e33\u865f\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/bg.json b/homeassistant/components/lifx/.translations/bg.json deleted file mode 100644 index 61b4953c17c..00000000000 --- a/homeassistant/components/lifx/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 LIFX \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", - "single_instance_allowed": "\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 LIFX." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/ca.json b/homeassistant/components/lifx/.translations/ca.json deleted file mode 100644 index e8ef5bd31bc..00000000000 --- a/homeassistant/components/lifx/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'han trobat dispositius LIFX a la xarxa.", - "single_instance_allowed": "Nom\u00e9s \u00e9s possible una \u00fanica configuraci\u00f3 de LIFX." - }, - "step": { - "confirm": { - "description": "Vols configurar LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/cs.json b/homeassistant/components/lifx/.translations/cs.json deleted file mode 100644 index d83ee576768..00000000000 --- a/homeassistant/components/lifx/.translations/cs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V s\u00edti nejsou nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed LIFX.", - "single_instance_allowed": "K dispozici je pouze jedna konfigurace LIFX." - }, - "step": { - "confirm": { - "description": "Chcete nastavit LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/da.json b/homeassistant/components/lifx/.translations/da.json deleted file mode 100644 index 99143f38c98..00000000000 --- a/homeassistant/components/lifx/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Der blev ikke fundet nogen LIFX-enheder p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Kun en enkelt konfiguration af LIFX er mulig." - }, - "step": { - "confirm": { - "description": "Konfigurer LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/de.json b/homeassistant/components/lifx/.translations/de.json deleted file mode 100644 index 2553e2d5e86..00000000000 --- a/homeassistant/components/lifx/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keine LIFX Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Nur eine einzige Konfiguration von LIFX ist zul\u00e4ssig." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du LIFX einrichten?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/en.json b/homeassistant/components/lifx/.translations/en.json deleted file mode 100644 index 64fdc7516ea..00000000000 --- a/homeassistant/components/lifx/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No LIFX devices found on the network.", - "single_instance_allowed": "Only a single configuration of LIFX is possible." - }, - "step": { - "confirm": { - "description": "Do you want to set up LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/es-419.json b/homeassistant/components/lifx/.translations/es-419.json deleted file mode 100644 index 905ec3ce2bf..00000000000 --- a/homeassistant/components/lifx/.translations/es-419.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se han encontrado dispositivos LIFX en la red.", - "single_instance_allowed": "S\u00f3lo es posible una \u00fanica configuraci\u00f3n de LIFX." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/es.json b/homeassistant/components/lifx/.translations/es.json deleted file mode 100644 index f897c673432..00000000000 --- a/homeassistant/components/lifx/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos LIFX en la red.", - "single_instance_allowed": "S\u00f3lo es posible una \u00fanica configuraci\u00f3n de LIFX." - }, - "step": { - "confirm": { - "description": "\u00bfQuieres configurar LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/fr.json b/homeassistant/components/lifx/.translations/fr.json deleted file mode 100644 index 96a264fa6b2..00000000000 --- a/homeassistant/components/lifx/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun p\u00e9riph\u00e9rique LIFX trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration de LIFX est possible." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/hu.json b/homeassistant/components/lifx/.translations/hu.json deleted file mode 100644 index 255b2efc91a..00000000000 --- a/homeassistant/components/lifx/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nem tal\u00e1lhat\u00f3k LIFX eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", - "single_instance_allowed": "Csak egyetlen LIFX konfigur\u00e1ci\u00f3 lehets\u00e9ges." - }, - "step": { - "confirm": { - "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a LIFX-t?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/it.json b/homeassistant/components/lifx/.translations/it.json deleted file mode 100644 index b4f940bc66b..00000000000 --- a/homeassistant/components/lifx/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nessun dispositivo LIFX trovato in rete.", - "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di LIFX." - }, - "step": { - "confirm": { - "description": "Vuoi configurare LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/ko.json b/homeassistant/components/lifx/.translations/ko.json deleted file mode 100644 index 2f3ec6db13d..00000000000 --- a/homeassistant/components/lifx/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "LIFX \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/lb.json b/homeassistant/components/lifx/.translations/lb.json deleted file mode 100644 index 2e033280e46..00000000000 --- a/homeassistant/components/lifx/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng LIFX Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun LIFX ass erlaabt." - }, - "step": { - "confirm": { - "description": "Soll LIFX konfigur\u00e9iert ginn?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/nl.json b/homeassistant/components/lifx/.translations/nl.json deleted file mode 100644 index a23502729d6..00000000000 --- a/homeassistant/components/lifx/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen LIFX-apparaten gevonden op het netwerk.", - "single_instance_allowed": "Slechts een enkele configuratie van LIFX is mogelijk." - }, - "step": { - "confirm": { - "description": "Wilt u LIFX instellen?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/nn.json b/homeassistant/components/lifx/.translations/nn.json deleted file mode 100644 index c78905b09c8..00000000000 --- a/homeassistant/components/lifx/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/no.json b/homeassistant/components/lifx/.translations/no.json deleted file mode 100644 index ae32d43f1b6..00000000000 --- a/homeassistant/components/lifx/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen LIFX-enheter funnet p\u00e5 nettverket.", - "single_instance_allowed": "Kun en konfigurasjon av LIFX er mulig." - }, - "step": { - "confirm": { - "description": "\u00d8nsker du \u00e5 sette opp LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/pl.json b/homeassistant/components/lifx/.translations/pl.json deleted file mode 100644 index d6a06ea9fac..00000000000 --- a/homeassistant/components/lifx/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 LIFX.", - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja LIFX." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/pt-BR.json b/homeassistant/components/lifx/.translations/pt-BR.json deleted file mode 100644 index e5f88b5384e..00000000000 --- a/homeassistant/components/lifx/.translations/pt-BR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo LIFX encontrado na rede.", - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do LIFX \u00e9 poss\u00edvel." - }, - "step": { - "confirm": { - "description": "Voc\u00ea quer configurar o LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/pt.json b/homeassistant/components/lifx/.translations/pt.json deleted file mode 100644 index d5c93c33993..00000000000 --- a/homeassistant/components/lifx/.translations/pt.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo LIFX encontrado na rede.", - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do LIFX \u00e9 permitida." - }, - "step": { - "confirm": { - "description": "Deseja configurar o LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/ro.json b/homeassistant/components/lifx/.translations/ro.json deleted file mode 100644 index 12827082104..00000000000 --- a/homeassistant/components/lifx/.translations/ro.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nu exist\u0103 dispozitive LIFX g\u0103site \u00een re\u021bea.", - "single_instance_allowed": "Doar o singur\u0103 configura\u021bie de LIFX este posibil\u0103." - }, - "step": { - "confirm": { - "description": "Dori\u021bi s\u0103 configura\u021bi LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/ru.json b/homeassistant/components/lifx/.translations/ru.json deleted file mode 100644 index 34f1d850a63..00000000000 --- a/homeassistant/components/lifx/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 LIFX \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/sl.json b/homeassistant/components/lifx/.translations/sl.json deleted file mode 100644 index 492bf9010dd..00000000000 --- a/homeassistant/components/lifx/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V omre\u017eju ni najdenih naprav LIFX.", - "single_instance_allowed": "Mo\u017ena je samo ena konfiguracija LIFX-a." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/sv.json b/homeassistant/components/lifx/.translations/sv.json deleted file mode 100644 index a935e209bb4..00000000000 --- a/homeassistant/components/lifx/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga LIFX enheter hittas i n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration av LIFX \u00e4r m\u00f6jlig." - }, - "step": { - "confirm": { - "description": "Vill du st\u00e4lla in LIFX?", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/zh-Hans.json b/homeassistant/components/lifx/.translations/zh-Hans.json deleted file mode 100644 index bc9375d807d..00000000000 --- a/homeassistant/components/lifx/.translations/zh-Hans.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 LIFX \u8bbe\u5907\u3002", - "single_instance_allowed": "LIFX \u53ea\u80fd\u914d\u7f6e\u4e00\u6b21\u3002" - }, - "step": { - "confirm": { - "description": "\u60a8\u60f3\u8981\u914d\u7f6e LIFX \u5417\uff1f", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/.translations/zh-Hant.json b/homeassistant/components/lifx/.translations/zh-Hant.json deleted file mode 100644 index 908394bcfd8..00000000000 --- a/homeassistant/components/lifx/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 LIFX \u8a2d\u5099\u3002", - "single_instance_allowed": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 LIFX\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a LIFX\uff1f", - "title": "LIFX" - } - }, - "title": "LIFX" - } -} \ No newline at end of file diff --git a/homeassistant/components/lifx/light.py b/homeassistant/components/lifx/light.py index 5bc0c1bc53b..ca04dbefb7f 100644 --- a/homeassistant/components/lifx/light.py +++ b/homeassistant/components/lifx/light.py @@ -35,18 +35,12 @@ from homeassistant.components.light import ( Light, preprocess_turn_on_alternatives, ) -from homeassistant.const import ( - ATTR_ENTITY_ID, - ATTR_MODE, - ENTITY_MATCH_ALL, - ENTITY_MATCH_NONE, - EVENT_HOMEASSISTANT_STOP, -) +from homeassistant.const import ATTR_ENTITY_ID, ATTR_MODE, EVENT_HOMEASSISTANT_STOP from homeassistant.core import callback +from homeassistant.helpers import entity_platform import homeassistant.helpers.config_validation as cv import homeassistant.helpers.device_registry as dr from homeassistant.helpers.event import async_track_point_in_utc_time -from homeassistant.helpers.service import async_extract_entity_ids import homeassistant.util.color as color_util from . import ( @@ -105,15 +99,13 @@ PULSE_MODES = [ PULSE_MODE_SOLID, ] -LIFX_EFFECT_SCHEMA = vol.Schema( - { - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Optional(ATTR_POWER_ON, default=True): cv.boolean, - } -) +LIFX_EFFECT_SCHEMA = { + vol.Optional(ATTR_POWER_ON, default=True): cv.boolean, +} -LIFX_EFFECT_PULSE_SCHEMA = LIFX_EFFECT_SCHEMA.extend( +LIFX_EFFECT_PULSE_SCHEMA = cv.make_entity_service_schema( { + **LIFX_EFFECT_SCHEMA, ATTR_BRIGHTNESS: VALID_BRIGHTNESS, ATTR_BRIGHTNESS_PCT: VALID_BRIGHTNESS_PCT, vol.Exclusive(ATTR_COLOR_NAME, COLOR_GROUP): cv.string, @@ -144,8 +136,9 @@ LIFX_EFFECT_PULSE_SCHEMA = LIFX_EFFECT_SCHEMA.extend( } ) -LIFX_EFFECT_COLORLOOP_SCHEMA = LIFX_EFFECT_SCHEMA.extend( +LIFX_EFFECT_COLORLOOP_SCHEMA = cv.make_entity_service_schema( { + **LIFX_EFFECT_SCHEMA, ATTR_BRIGHTNESS: VALID_BRIGHTNESS, ATTR_BRIGHTNESS_PCT: VALID_BRIGHTNESS_PCT, ATTR_PERIOD: vol.All(vol.Coerce(float), vol.Clamp(min=0.05)), @@ -155,7 +148,7 @@ LIFX_EFFECT_COLORLOOP_SCHEMA = LIFX_EFFECT_SCHEMA.extend( } ) -LIFX_EFFECT_STOP_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.entity_ids}) +LIFX_EFFECT_STOP_SCHEMA = cv.make_entity_service_schema({}) def aiolifx(): @@ -191,7 +184,8 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # Priority 3: default interface interfaces = [{}] - lifx_manager = LIFXManager(hass, async_add_entities) + platform = entity_platform.current_platform.get() + lifx_manager = LIFXManager(hass, platform, async_add_entities) hass.data[DATA_LIFX_MANAGER] = lifx_manager for interface in interfaces: @@ -242,10 +236,11 @@ def merge_hsbk(base, change): class LIFXManager: """Representation of all known LIFX entities.""" - def __init__(self, hass, async_add_entities): + def __init__(self, hass, platform, async_add_entities): """Initialize the light.""" self.entities = {} self.hass = hass + self.platform = platform self.async_add_entities = async_add_entities self.effects_conductor = aiolifx_effects().Conductor(hass.loop) self.discoveries = [] @@ -293,22 +288,8 @@ class LIFXManager: def register_set_state(self): """Register the LIFX set_state service call.""" - - async def service_handler(service): - """Apply a service.""" - tasks = [] - for light in await self.async_service_to_entities(service): - if service.service == SERVICE_LIFX_SET_STATE: - task = light.set_state(**service.data) - tasks.append(self.hass.async_create_task(task)) - if tasks: - await asyncio.wait(tasks) - - self.hass.services.async_register( - LIFX_DOMAIN, - SERVICE_LIFX_SET_STATE, - service_handler, - schema=LIFX_SET_STATE_SCHEMA, + self.platform.async_register_entity_service( + SERVICE_LIFX_SET_STATE, LIFX_SET_STATE_SCHEMA, "set_state" ) def register_effects(self): @@ -316,7 +297,7 @@ class LIFXManager: async def service_handler(service): """Apply a service, i.e. start an effect.""" - entities = await self.async_service_to_entities(service) + entities = await self.platform.async_extract_from_service(service) if entities: await self.start_effect(entities, service.service, **service.data) @@ -373,21 +354,6 @@ class LIFXManager: elif service == SERVICE_EFFECT_STOP: await self.effects_conductor.stop(bulbs) - async def async_service_to_entities(self, service): - """Return the known entities that a service call mentions.""" - if service.data.get(ATTR_ENTITY_ID) == ENTITY_MATCH_NONE: - return [] - - if service.data.get(ATTR_ENTITY_ID) == ENTITY_MATCH_ALL: - return self.entities.values() - - entity_ids = await async_extract_entity_ids(self.hass, service) - return [ - entity - for entity in self.entities.values() - if entity.entity_id in entity_ids - ] - @callback def register(self, bulb): """Handle aiolifx detected bulb.""" @@ -435,7 +401,7 @@ class LIFXManager: entity = self.entities[bulb.mac_addr] _LOGGER.debug("%s unregister", entity.who) entity.registered = False - self.hass.async_create_task(entity.async_update_ha_state()) + entity.async_write_ha_state() class AwaitAioLIFX: @@ -573,7 +539,7 @@ class LIFXLight(Light): """Request new status and push it to hass.""" self.postponed_update = None await self.async_update() - await self.async_update_ha_state() + self.async_write_ha_state() async def update_during_transition(self, when): """Update state at the start and end of a transition.""" diff --git a/homeassistant/components/lifx/manifest.json b/homeassistant/components/lifx/manifest.json index 327eb1d4abd..3f5ce03e672 100644 --- a/homeassistant/components/lifx/manifest.json +++ b/homeassistant/components/lifx/manifest.json @@ -7,6 +7,5 @@ "homekit": { "models": ["LIFX"] }, - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lifx/services.yaml b/homeassistant/components/lifx/services.yaml index ebf2032a9a5..0ea0cb7a696 100644 --- a/homeassistant/components/lifx/services.yaml +++ b/homeassistant/components/lifx/services.yaml @@ -17,7 +17,7 @@ set_state: example: 10 power: description: Turn the light on (True) or off (False). Leave out to keep the power as it is. - example: True + example: false effect_pulse: description: Run a flash effect by changing to a color and back. @@ -45,7 +45,7 @@ effect_pulse: example: 2 power_on: description: Powered off lights are temporarily turned on during the effect (default True). - example: False + example: false effect_colorloop: description: Run an effect with looping colors. @@ -67,7 +67,7 @@ effect_colorloop: example: 0 power_on: description: Powered off lights are temporarily turned on during the effect (default True). - example: False + example: false effect_stop: description: Stop a running effect. diff --git a/homeassistant/components/lifx/strings.json b/homeassistant/components/lifx/strings.json index 300c9b628f3..c35dcf3eb26 100644 --- a/homeassistant/components/lifx/strings.json +++ b/homeassistant/components/lifx/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "LIFX", "step": { "confirm": { - "title": "LIFX", "description": "Do you want to set up LIFX?" } }, diff --git a/homeassistant/components/lifx/translations/bg.json b/homeassistant/components/lifx/translations/bg.json new file mode 100644 index 00000000000..e44a4524eef --- /dev/null +++ b/homeassistant/components/lifx/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 LIFX \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "single_instance_allowed": "\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 LIFX." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/ca.json b/homeassistant/components/lifx/translations/ca.json new file mode 100644 index 00000000000..a9a45f1f485 --- /dev/null +++ b/homeassistant/components/lifx/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'han trobat dispositius LIFX a la xarxa.", + "single_instance_allowed": "Nom\u00e9s \u00e9s possible una \u00fanica configuraci\u00f3 de LIFX." + }, + "step": { + "confirm": { + "description": "Vols configurar LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/cs.json b/homeassistant/components/lifx/translations/cs.json new file mode 100644 index 00000000000..9ebb8c43b42 --- /dev/null +++ b/homeassistant/components/lifx/translations/cs.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V s\u00edti nejsou nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed LIFX.", + "single_instance_allowed": "K dispozici je pouze jedna konfigurace LIFX." + }, + "step": { + "confirm": { + "description": "Chcete nastavit LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/da.json b/homeassistant/components/lifx/translations/da.json new file mode 100644 index 00000000000..b6faac51acc --- /dev/null +++ b/homeassistant/components/lifx/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Der blev ikke fundet nogen LIFX-enheder p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Kun en enkelt konfiguration af LIFX er mulig." + }, + "step": { + "confirm": { + "description": "Konfigurer LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/de.json b/homeassistant/components/lifx/translations/de.json new file mode 100644 index 00000000000..654fbe82aeb --- /dev/null +++ b/homeassistant/components/lifx/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keine LIFX Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Nur eine einzige Konfiguration von LIFX ist zul\u00e4ssig." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du LIFX einrichten?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/en.json b/homeassistant/components/lifx/translations/en.json new file mode 100644 index 00000000000..fe7daaaed7d --- /dev/null +++ b/homeassistant/components/lifx/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No LIFX devices found on the network.", + "single_instance_allowed": "Only a single configuration of LIFX is possible." + }, + "step": { + "confirm": { + "description": "Do you want to set up LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/es-419.json b/homeassistant/components/lifx/translations/es-419.json new file mode 100644 index 00000000000..8676326e995 --- /dev/null +++ b/homeassistant/components/lifx/translations/es-419.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se han encontrado dispositivos LIFX en la red.", + "single_instance_allowed": "S\u00f3lo es posible una \u00fanica configuraci\u00f3n de LIFX." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/es.json b/homeassistant/components/lifx/translations/es.json new file mode 100644 index 00000000000..5ed177125fc --- /dev/null +++ b/homeassistant/components/lifx/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos LIFX en la red.", + "single_instance_allowed": "S\u00f3lo es posible una \u00fanica configuraci\u00f3n de LIFX." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/fr.json b/homeassistant/components/lifx/translations/fr.json new file mode 100644 index 00000000000..60dc00a32fe --- /dev/null +++ b/homeassistant/components/lifx/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun p\u00e9riph\u00e9rique LIFX trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration de LIFX est possible." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/hu.json b/homeassistant/components/lifx/translations/hu.json new file mode 100644 index 00000000000..9b8fe3632c2 --- /dev/null +++ b/homeassistant/components/lifx/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nem tal\u00e1lhat\u00f3k LIFX eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", + "single_instance_allowed": "Csak egyetlen LIFX konfigur\u00e1ci\u00f3 lehets\u00e9ges." + }, + "step": { + "confirm": { + "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a LIFX-t?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/it.json b/homeassistant/components/lifx/translations/it.json new file mode 100644 index 00000000000..380acd0a875 --- /dev/null +++ b/homeassistant/components/lifx/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nessun dispositivo LIFX trovato in rete.", + "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di LIFX." + }, + "step": { + "confirm": { + "description": "Vuoi configurare LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/ko.json b/homeassistant/components/lifx/translations/ko.json new file mode 100644 index 00000000000..13a5ca08152 --- /dev/null +++ b/homeassistant/components/lifx/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "LIFX \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/lb.json b/homeassistant/components/lifx/translations/lb.json new file mode 100644 index 00000000000..8bf15060ed4 --- /dev/null +++ b/homeassistant/components/lifx/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng LIFX Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun LIFX ass erlaabt." + }, + "step": { + "confirm": { + "description": "Soll LIFX konfigur\u00e9iert ginn?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/nl.json b/homeassistant/components/lifx/translations/nl.json new file mode 100644 index 00000000000..e8a42bd5676 --- /dev/null +++ b/homeassistant/components/lifx/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen LIFX-apparaten gevonden op het netwerk.", + "single_instance_allowed": "Slechts een enkele configuratie van LIFX is mogelijk." + }, + "step": { + "confirm": { + "description": "Wilt u LIFX instellen?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/nn.json b/homeassistant/components/lifx/translations/nn.json new file mode 100644 index 00000000000..c189eb1e180 --- /dev/null +++ b/homeassistant/components/lifx/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/no.json b/homeassistant/components/lifx/translations/no.json new file mode 100644 index 00000000000..82f99c45e79 --- /dev/null +++ b/homeassistant/components/lifx/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen LIFX-enheter funnet p\u00e5 nettverket.", + "single_instance_allowed": "Kun en konfigurasjon av LIFX er mulig." + }, + "step": { + "confirm": { + "description": "\u00d8nsker du \u00e5 sette opp LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/pl.json b/homeassistant/components/lifx/translations/pl.json new file mode 100644 index 00000000000..53e623e05df --- /dev/null +++ b/homeassistant/components/lifx/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 LIFX.", + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja LIFX." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/pt-BR.json b/homeassistant/components/lifx/translations/pt-BR.json new file mode 100644 index 00000000000..e95f452c1e4 --- /dev/null +++ b/homeassistant/components/lifx/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo LIFX encontrado na rede.", + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do LIFX \u00e9 poss\u00edvel." + }, + "step": { + "confirm": { + "description": "Voc\u00ea quer configurar o LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/pt.json b/homeassistant/components/lifx/translations/pt.json new file mode 100644 index 00000000000..73fdb846b1e --- /dev/null +++ b/homeassistant/components/lifx/translations/pt.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo LIFX encontrado na rede.", + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do LIFX \u00e9 permitida." + }, + "step": { + "confirm": { + "description": "Deseja configurar o LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/ro.json b/homeassistant/components/lifx/translations/ro.json new file mode 100644 index 00000000000..6ef2bd8697c --- /dev/null +++ b/homeassistant/components/lifx/translations/ro.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nu exist\u0103 dispozitive LIFX g\u0103site \u00een re\u021bea.", + "single_instance_allowed": "Doar o singur\u0103 configura\u021bie de LIFX este posibil\u0103." + }, + "step": { + "confirm": { + "description": "Dori\u021bi s\u0103 configura\u021bi LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/ru.json b/homeassistant/components/lifx/translations/ru.json new file mode 100644 index 00000000000..a7f6dfbd6a8 --- /dev/null +++ b/homeassistant/components/lifx/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 LIFX \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/sl.json b/homeassistant/components/lifx/translations/sl.json new file mode 100644 index 00000000000..5bcb8b328c4 --- /dev/null +++ b/homeassistant/components/lifx/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V omre\u017eju ni najdenih naprav LIFX.", + "single_instance_allowed": "Mo\u017ena je samo ena konfiguracija LIFX-a." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/sv.json b/homeassistant/components/lifx/translations/sv.json new file mode 100644 index 00000000000..c85449078de --- /dev/null +++ b/homeassistant/components/lifx/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga LIFX enheter hittas i n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration av LIFX \u00e4r m\u00f6jlig." + }, + "step": { + "confirm": { + "description": "Vill du st\u00e4lla in LIFX?", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/zh-Hans.json b/homeassistant/components/lifx/translations/zh-Hans.json new file mode 100644 index 00000000000..6d30adcd453 --- /dev/null +++ b/homeassistant/components/lifx/translations/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 LIFX \u8bbe\u5907\u3002", + "single_instance_allowed": "LIFX \u53ea\u80fd\u914d\u7f6e\u4e00\u6b21\u3002" + }, + "step": { + "confirm": { + "description": "\u60a8\u60f3\u8981\u914d\u7f6e LIFX \u5417\uff1f", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx/translations/zh-Hant.json b/homeassistant/components/lifx/translations/zh-Hant.json new file mode 100644 index 00000000000..fc9e407b4b2 --- /dev/null +++ b/homeassistant/components/lifx/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 LIFX \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 LIFX\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a LIFX\uff1f", + "title": "LIFX" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lifx_cloud/manifest.json b/homeassistant/components/lifx_cloud/manifest.json index b2f169a2811..038282390ca 100644 --- a/homeassistant/components/lifx_cloud/manifest.json +++ b/homeassistant/components/lifx_cloud/manifest.json @@ -2,7 +2,5 @@ "domain": "lifx_cloud", "name": "LIFX Cloud", "documentation": "https://www.home-assistant.io/integrations/lifx_cloud", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lifx_cloud/scene.py b/homeassistant/components/lifx_cloud/scene.py index 08e044a46e0..75ab4656794 100644 --- a/homeassistant/components/lifx_cloud/scene.py +++ b/homeassistant/components/lifx_cloud/scene.py @@ -1,6 +1,7 @@ """Support for LIFX Cloud scenes.""" import asyncio import logging +from typing import Any import aiohttp from aiohttp.hdrs import AUTHORIZATION @@ -8,7 +9,7 @@ import async_timeout import voluptuous as vol from homeassistant.components.scene import Scene -from homeassistant.const import CONF_PLATFORM, CONF_TIMEOUT, CONF_TOKEN +from homeassistant.const import CONF_PLATFORM, CONF_TIMEOUT, CONF_TOKEN, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -44,11 +45,9 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= return False status = scenes_resp.status - if status == 200: + if status == HTTP_OK: data = await scenes_resp.json() - devices = [] - for scene in data: - devices.append(LifxCloudScene(hass, headers, timeout, scene)) + devices = [LifxCloudScene(hass, headers, timeout, scene) for scene in data] async_add_entities(devices) return True if status == 401: @@ -75,7 +74,7 @@ class LifxCloudScene(Scene): """Return the name of the scene.""" return self._name - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate the scene.""" url = f"https://api.lifx.com/v1/scenes/scene_id:{self._uuid}/activate" diff --git a/homeassistant/components/lifx_legacy/manifest.json b/homeassistant/components/lifx_legacy/manifest.json index 67e510b2ba5..4a42f44f482 100644 --- a/homeassistant/components/lifx_legacy/manifest.json +++ b/homeassistant/components/lifx_legacy/manifest.json @@ -3,6 +3,5 @@ "name": "LIFX Legacy", "documentation": "https://www.home-assistant.io/integrations/lifx_legacy", "requirements": ["liffylights==0.9.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/light/.translations/bg.json b/homeassistant/components/light/.translations/bg.json deleted file mode 100644 index 33b57d9e7cd..00000000000 --- a/homeassistant/components/light/.translations/bg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0438 {entity_name}", - "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438 {entity_name}", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b.", - "is_on": "{entity_name} \u0435 \u0432\u043a\u043b." - }, - "trigger_type": { - "turned_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "turned_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/ca.json b/homeassistant/components/light/.translations/ca.json deleted file mode 100644 index ec7641e1cab..00000000000 --- a/homeassistant/components/light/.translations/ca.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Redueix la brillantor de {entity_name}", - "brightness_increase": "Augmenta la brillantor de {entity_name}", - "toggle": "Commuta {entity_name}", - "turn_off": "Apaga {entity_name}", - "turn_on": "Enc\u00e9n {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e0 apagat", - "is_on": "{entity_name} est\u00e0 enc\u00e8s" - }, - "trigger_type": { - "turned_off": "{entity_name} apagat", - "turned_on": "{entity_name} enc\u00e8s" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/da.json b/homeassistant/components/light/.translations/da.json deleted file mode 100644 index 8115a3bfba9..00000000000 --- a/homeassistant/components/light/.translations/da.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Formindsk lysstyrken p\u00e5 {entity_name}", - "brightness_increase": "For\u00f8g lysstyrken p\u00e5 {entity_name}", - "toggle": "Skift {entity_name}", - "turn_off": "Sluk {entity_name}", - "turn_on": "T\u00e6nd for {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} er fra", - "is_on": "{entity_name} er til" - }, - "trigger_type": { - "turned_off": "{entity_name} slukkede", - "turned_on": "{entity_name} t\u00e6ndte" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/de.json b/homeassistant/components/light/.translations/de.json deleted file mode 100644 index 1984cf31d79..00000000000 --- a/homeassistant/components/light/.translations/de.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Helligkeit von {entity_name} verringern", - "brightness_increase": "Helligkeit von {entity_name} erh\u00f6hen", - "toggle": "Schalte {entity_name} um.", - "turn_off": "Schalte {entity_name} aus.", - "turn_on": "Schalte {entity_name} ein." - }, - "condition_type": { - "is_off": "{entity_name} ausgeschaltet", - "is_on": "{entity_name} ist eingeschaltet" - }, - "trigger_type": { - "turned_off": "{entity_name} ausgeschaltet", - "turned_on": "{entity_name} eingeschaltet" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/en.json b/homeassistant/components/light/.translations/en.json deleted file mode 100644 index 788934a7e01..00000000000 --- a/homeassistant/components/light/.translations/en.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Decrease {entity_name} brightness", - "brightness_increase": "Increase {entity_name} brightness", - "toggle": "Toggle {entity_name}", - "turn_off": "Turn off {entity_name}", - "turn_on": "Turn on {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} is off", - "is_on": "{entity_name} is on" - }, - "trigger_type": { - "turned_off": "{entity_name} turned off", - "turned_on": "{entity_name} turned on" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/es-419.json b/homeassistant/components/light/.translations/es-419.json deleted file mode 100644 index b63f0d44452..00000000000 --- a/homeassistant/components/light/.translations/es-419.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_off": "{entity_name} est\u00e1 apagada", - "is_on": "{entity_name} est\u00e1 encendida" - }, - "trigger_type": { - "turned_off": "{entity_name} desactivada", - "turned_on": "{entity_name} activada" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/es.json b/homeassistant/components/light/.translations/es.json deleted file mode 100644 index f0996f9a523..00000000000 --- a/homeassistant/components/light/.translations/es.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Disminuir brillo de {entity_name}", - "brightness_increase": "Aumentar brillo de {entity_name}", - "toggle": "Alternar {entity_name}", - "turn_off": "Apagar {entity_name}", - "turn_on": "Encender {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 apagada", - "is_on": "{entity_name} est\u00e1 encendida" - }, - "trigger_type": { - "turned_off": "{entity_name} apagada", - "turned_on": "{entity_name} encendida" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/fr.json b/homeassistant/components/light/.translations/fr.json deleted file mode 100644 index 4a1dc82bbd6..00000000000 --- a/homeassistant/components/light/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Basculer {entity_name}", - "turn_off": "\u00c9teindre {entity_name}", - "turn_on": "Allumer {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est \u00e9teint", - "is_on": "{entity_name} est allum\u00e9" - }, - "trigger_type": { - "turned_off": "{entity_name} est d\u00e9sactiv\u00e9", - "turned_on": "{entity_name} activ\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/hu.json b/homeassistant/components/light/.translations/hu.json deleted file mode 100644 index 5192a8c7df2..00000000000 --- a/homeassistant/components/light/.translations/hu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "{entity_name} f\u00e9nyerej\u00e9nek cs\u00f6kkent\u00e9se", - "brightness_increase": "{entity_name} f\u00e9nyerej\u00e9nek n\u00f6vel\u00e9se", - "toggle": "{entity_name} fel/lekapcsol\u00e1sa", - "turn_off": "{entity_name} lekapcsol\u00e1sa", - "turn_on": "{entity_name} felkapcsol\u00e1sa" - }, - "condition_type": { - "is_off": "{entity_name} le van kapcsolva", - "is_on": "{entity_name} fel van kapcsolva" - }, - "trigger_type": { - "turned_off": "{entity_name} le lett kapcsolva", - "turned_on": "{entity_name} fel lett kapcsolva" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/it.json b/homeassistant/components/light/.translations/it.json deleted file mode 100644 index ae1492d514e..00000000000 --- a/homeassistant/components/light/.translations/it.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Riduci la luminosit\u00e0 di {entity_name}", - "brightness_increase": "Aumenta la luminosit\u00e0 di {entity_name}", - "toggle": "Commuta {entity_name}", - "turn_off": "Spegnere {entity_name}", - "turn_on": "Accendere {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u00e8 disattivato", - "is_on": "{entity_name} \u00e8 attivo" - }, - "trigger_type": { - "turned_off": "{entity_name} disattivato", - "turned_on": "{entity_name} attivato" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/ko.json b/homeassistant/components/light/.translations/ko.json deleted file mode 100644 index c0c47dddfbb..00000000000 --- a/homeassistant/components/light/.translations/ko.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "{entity_name} \uc744(\ub97c) \uc5b4\ub461\uac8c \ud558\uae30", - "brightness_increase": "{entity_name} \uc744(\ub97c) \ubc1d\uac8c \ud558\uae30", - "toggle": "{entity_name} \ud1a0\uae00", - "turn_off": "{entity_name} \ub044\uae30", - "turn_on": "{entity_name} \ucf1c\uae30" - }, - "condition_type": { - "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", - "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74" - }, - "trigger_type": { - "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", - "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/lb.json b/homeassistant/components/light/.translations/lb.json deleted file mode 100644 index 8ffa33a6a3b..00000000000 --- a/homeassistant/components/light/.translations/lb.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "{entity_name} Hellegkeet reduz\u00e9ieren", - "brightness_increase": "{entity_name} Hellegkeet erh\u00e9ijen", - "toggle": "{entity_name} \u00ebmschalten", - "turn_off": "{entity_name} ausschalten", - "turn_on": "{entity_name} uschalten" - }, - "condition_type": { - "is_off": "{entity_name} ass aus", - "is_on": "{entity_name} ass un" - }, - "trigger_type": { - "turned_off": "{entity_name} gouf ausgeschalt", - "turned_on": "{entity_name} gouf ugeschalt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/lv.json b/homeassistant/components/light/.translations/lv.json deleted file mode 100644 index 1436829ee9a..00000000000 --- a/homeassistant/components/light/.translations/lv.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Samazin\u0101t {entity_name} spilgtumu", - "brightness_increase": "Palielin\u0101t {entity_name} spilgtumu" - }, - "trigger_type": { - "turned_off": "{entity_name} tika izsl\u0113gta", - "turned_on": "{entity_name} tika iesl\u0113gta" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/nl.json b/homeassistant/components/light/.translations/nl.json deleted file mode 100644 index e742a337cca..00000000000 --- a/homeassistant/components/light/.translations/nl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Omschakelen {entity_name}", - "turn_off": "{entity_name} uitschakelen", - "turn_on": "{entity_name} inschakelen" - }, - "condition_type": { - "is_off": "{entity_name} is uitgeschakeld", - "is_on": "{entity_name} is ingeschakeld" - }, - "trigger_type": { - "turned_off": "{entity_name} is uitgeschakeld", - "turned_on": "{entity_name} is ingeschakeld" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/no.json b/homeassistant/components/light/.translations/no.json deleted file mode 100644 index e7901ba51bc..00000000000 --- a/homeassistant/components/light/.translations/no.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Reduser lysstyrken p\u00e5 {entity_name}", - "brightness_increase": "\u00d8k lysstyrken p\u00e5 {entity_name}", - "toggle": "Veksle {entity_name}", - "turn_off": "Sl\u00e5 av {entity_name}", - "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} er av", - "is_on": "{entity_name} er p\u00e5" - }, - "trigger_type": { - "turned_off": "{entity_name} sl\u00e5tt av", - "turned_on": "{entity_name} sl\u00e5tt p\u00e5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/pl.json b/homeassistant/components/light/.translations/pl.json deleted file mode 100644 index 1f2ff19f9c3..00000000000 --- a/homeassistant/components/light/.translations/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "zmniejsz jasno\u015b\u0107 {entity_name}", - "brightness_increase": "zwi\u0119ksz jasno\u015b\u0107 {entity_name}", - "toggle": "prze\u0142\u0105cz {entity_name}", - "turn_off": "wy\u0142\u0105cz {entity_name}", - "turn_on": "w\u0142\u0105cz {entity_name}" - }, - "condition_type": { - "is_off": "\u015bwiat\u0142o {entity_name} jest wy\u0142\u0105czone", - "is_on": "\u015bwiat\u0142o {entity_name} jest w\u0142\u0105czone" - }, - "trigger_type": { - "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", - "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/pt-BR.json b/homeassistant/components/light/.translations/pt-BR.json deleted file mode 100644 index 05414b1e03c..00000000000 --- a/homeassistant/components/light/.translations/pt-BR.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Alternar {entity_name}", - "turn_off": "Desligar {entity_name}", - "turn_on": "Ligar {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 desligado", - "is_on": "{entity_name} est\u00e1 ligado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/pt.json b/homeassistant/components/light/.translations/pt.json deleted file mode 100644 index 272516f4c6b..00000000000 --- a/homeassistant/components/light/.translations/pt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Alternar {entity_name}", - "turn_off": "Desligar {entity_name}", - "turn_on": "Ligar {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 desligado", - "is_on": "{entity_name} est\u00e1 ligado" - }, - "trigger_type": { - "turned_off": "{entity_name} foi desligado", - "turned_on": "{entity_name} foi ligado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/ru.json b/homeassistant/components/light/.translations/ru.json deleted file mode 100644 index d6c3d037531..00000000000 --- a/homeassistant/components/light/.translations/ru.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c {entity_name}", - "brightness_increase": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c {entity_name}", - "toggle": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" - }, - "trigger_type": { - "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/sl.json b/homeassistant/components/light/.translations/sl.json deleted file mode 100644 index 5704ebb6826..00000000000 --- a/homeassistant/components/light/.translations/sl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "Zmanj\u0161ajte svetlost {entity_name}", - "brightness_increase": "Pove\u010dajte svetlost {entity_name}", - "toggle": "Preklopite {entity_name}", - "turn_off": "Izklopite {entity_name}", - "turn_on": "Vklopite {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} je izklopljen", - "is_on": "{entity_name} je vklopljen" - }, - "trigger_type": { - "turned_off": "{entity_name} izklopljen", - "turned_on": "{entity_name} vklopljen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/sv.json b/homeassistant/components/light/.translations/sv.json deleted file mode 100644 index 8df3f3d382b..00000000000 --- a/homeassistant/components/light/.translations/sv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "V\u00e4xla {entity_name}", - "turn_off": "St\u00e4ng av {entity_name}", - "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u00e4r avst\u00e4ngd", - "is_on": "{entity_name} \u00e4r p\u00e5" - }, - "trigger_type": { - "turned_off": "{entity_name} avst\u00e4ngd", - "turned_on": "{entity_name} slogs p\u00e5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/.translations/zh-Hant.json b/homeassistant/components/light/.translations/zh-Hant.json deleted file mode 100644 index 228074abf06..00000000000 --- a/homeassistant/components/light/.translations/zh-Hant.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "device_automation": { - "action_type": { - "brightness_decrease": "\u964d\u4f4e{entity_name}\u4eae\u5ea6", - "brightness_increase": "\u589e\u52a0{entity_name}\u4eae\u5ea6", - "toggle": "\u5207\u63db{entity_name}", - "turn_off": "\u95dc\u9589{entity_name}", - "turn_on": "\u958b\u555f{entity_name}" - }, - "condition_type": { - "is_off": "{entity_name}\u5df2\u95dc\u9589", - "is_on": "{entity_name}\u5df2\u958b\u555f" - }, - "trigger_type": { - "turned_off": "{entity_name}\u5df2\u95dc\u9589", - "turned_on": "{entity_name}\u5df2\u958b\u555f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/light/__init__.py b/homeassistant/components/light/__init__.py index 5b9b923cc56..7c33fdcb075 100644 --- a/homeassistant/components/light/__init__.py +++ b/homeassistant/components/light/__init__.py @@ -40,7 +40,7 @@ SUPPORT_COLOR = 16 SUPPORT_TRANSITION = 32 SUPPORT_WHITE_VALUE = 128 -# Integer that represents transition time in seconds to make change. +# Float that represents transition time in seconds to make change. ATTR_TRANSITION = "transition" # Lists holding color values @@ -87,6 +87,7 @@ VALID_BRIGHTNESS = vol.All(vol.Coerce(int), vol.Clamp(min=0, max=255)) VALID_BRIGHTNESS_PCT = vol.All(vol.Coerce(float), vol.Range(min=0, max=100)) VALID_BRIGHTNESS_STEP = vol.All(vol.Coerce(int), vol.Clamp(min=-255, max=255)) VALID_BRIGHTNESS_STEP_PCT = vol.All(vol.Coerce(float), vol.Clamp(min=-100, max=100)) +VALID_FLASH = vol.In([FLASH_SHORT, FLASH_LONG]) LIGHT_TURN_ON_SCHEMA = { vol.Exclusive(ATTR_PROFILE, COLOR_GROUP): cv.string, @@ -116,7 +117,7 @@ LIGHT_TURN_ON_SCHEMA = { ), vol.Exclusive(ATTR_KELVIN, COLOR_GROUP): vol.All(vol.Coerce(int), vol.Range(min=0)), ATTR_WHITE_VALUE: vol.All(vol.Coerce(int), vol.Range(min=0, max=255)), - ATTR_FLASH: vol.In([FLASH_SHORT, FLASH_LONG]), + ATTR_FLASH: VALID_FLASH, ATTR_EFFECT: cv.string, } @@ -156,7 +157,7 @@ def preprocess_turn_on_alternatives(params): brightness_pct = params.pop(ATTR_BRIGHTNESS_PCT, None) if brightness_pct is not None: - params[ATTR_BRIGHTNESS] = int(255 * brightness_pct / 100) + params[ATTR_BRIGHTNESS] = round(255 * brightness_pct / 100) xy_color = params.pop(ATTR_XY_COLOR, None) if xy_color is not None: @@ -191,11 +192,11 @@ async def async_setup(hass, config): def preprocess_data(data): """Preprocess the service data.""" - base = {} - - for entity_field in cv.ENTITY_SERVICE_FIELDS: - if entity_field in data: - base[entity_field] = data.pop(entity_field) + base = { + entity_field: data.pop(entity_field) + for entity_field in cv.ENTITY_SERVICE_FIELDS + if entity_field in data + } preprocess_turn_on_alternatives(data) turn_lights_off, off_params = preprocess_turn_off(data) @@ -232,7 +233,7 @@ async def async_setup(hass, config): brightness += params.pop(ATTR_BRIGHTNESS_STEP) else: - brightness += int(params.pop(ATTR_BRIGHTNESS_STEP_PCT) / 100 * 255) + brightness += round(params.pop(ATTR_BRIGHTNESS_STEP_PCT) / 100 * 255) params[ATTR_BRIGHTNESS] = max(0, min(255, brightness)) turn_light_off, off_params = preprocess_turn_off(params) @@ -252,10 +253,7 @@ async def async_setup(hass, config): component.async_register_entity_service( SERVICE_TURN_OFF, - { - ATTR_TRANSITION: VALID_TRANSITION, - ATTR_FLASH: vol.In([FLASH_SHORT, FLASH_LONG]), - }, + {ATTR_TRANSITION: VALID_TRANSITION, ATTR_FLASH: VALID_FLASH}, "async_turn_off", ) @@ -325,7 +323,7 @@ class Profiles: def get_default(cls, entity_id): """Return the default turn-on profile for the given light.""" # pylint: disable=unsupported-membership-test - name = entity_id + ".default" + name = f"{entity_id}.default" if name in cls._all: return name name = "group.all_lights.default" diff --git a/homeassistant/components/light/device_action.py b/homeassistant/components/light/device_action.py index 5c534cc4150..d499bc0c2a2 100644 --- a/homeassistant/components/light/device_action.py +++ b/homeassistant/components/light/device_action.py @@ -4,6 +4,13 @@ from typing import List import voluptuous as vol from homeassistant.components.device_automation import toggle_entity +from homeassistant.components.light import ( + ATTR_FLASH, + FLASH_SHORT, + SUPPORT_FLASH, + VALID_BRIGHTNESS_PCT, + VALID_FLASH, +) from homeassistant.const import ( ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, @@ -19,6 +26,7 @@ from . import ATTR_BRIGHTNESS_PCT, ATTR_BRIGHTNESS_STEP_PCT, DOMAIN, SUPPORT_BRI TYPE_BRIGHTNESS_INCREASE = "brightness_increase" TYPE_BRIGHTNESS_DECREASE = "brightness_decrease" +TYPE_FLASH = "flash" ACTION_SCHEMA = cv.DEVICE_ACTION_BASE_SCHEMA.extend( { @@ -26,11 +34,10 @@ ACTION_SCHEMA = cv.DEVICE_ACTION_BASE_SCHEMA.extend( vol.Required(CONF_DOMAIN): DOMAIN, vol.Required(CONF_TYPE): vol.In( toggle_entity.DEVICE_ACTION_TYPES - + [TYPE_BRIGHTNESS_INCREASE, TYPE_BRIGHTNESS_DECREASE] - ), - vol.Optional(ATTR_BRIGHTNESS_PCT): vol.All( - vol.Coerce(int), vol.Range(min=0, max=100) + + [TYPE_BRIGHTNESS_INCREASE, TYPE_BRIGHTNESS_DECREASE, TYPE_FLASH] ), + vol.Optional(ATTR_BRIGHTNESS_PCT): VALID_BRIGHTNESS_PCT, + vol.Optional(ATTR_FLASH): VALID_FLASH, } ) @@ -60,6 +67,12 @@ async def async_call_action_from_config( elif ATTR_BRIGHTNESS_PCT in config: data[ATTR_BRIGHTNESS_PCT] = config[ATTR_BRIGHTNESS_PCT] + if config[CONF_TYPE] == TYPE_FLASH: + if ATTR_FLASH in config: + data[ATTR_FLASH] = config[ATTR_FLASH] + else: + data[ATTR_FLASH] = FLASH_SHORT + await hass.services.async_call( DOMAIN, SERVICE_TURN_ON, data, blocking=True, context=context ) @@ -100,6 +113,18 @@ async def async_get_actions(hass: HomeAssistant, device_id: str) -> List[dict]: ) ) + if supported_features & SUPPORT_FLASH: + actions.extend( + ( + { + CONF_TYPE: TYPE_FLASH, + "device_id": device_id, + "entity_id": entry.entity_id, + "domain": DOMAIN, + }, + ) + ) + return actions @@ -119,15 +144,12 @@ async def async_get_action_capabilities(hass: HomeAssistant, config: dict) -> di elif entry: supported_features = entry.supported_features - if not supported_features & SUPPORT_BRIGHTNESS: - return {} + extra_fields = {} - return { - "extra_fields": vol.Schema( - { - vol.Optional(ATTR_BRIGHTNESS_PCT): vol.All( - vol.Coerce(int), vol.Range(min=0, max=100) - ) - } - ) - } + if supported_features & SUPPORT_BRIGHTNESS: + extra_fields[vol.Optional(ATTR_BRIGHTNESS_PCT)] = VALID_BRIGHTNESS_PCT + + if supported_features & SUPPORT_FLASH: + extra_fields[vol.Optional(ATTR_FLASH)] = VALID_FLASH + + return {"extra_fields": vol.Schema(extra_fields)} if extra_fields else {} diff --git a/homeassistant/components/light/manifest.json b/homeassistant/components/light/manifest.json index 64e21654afd..27c504f6b91 100644 --- a/homeassistant/components/light/manifest.json +++ b/homeassistant/components/light/manifest.json @@ -2,8 +2,6 @@ "domain": "light", "name": "Light", "documentation": "https://www.home-assistant.io/integrations/light", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/light/reproduce_state.py b/homeassistant/components/light/reproduce_state.py index 9a6b22b51a2..a7939beb91e 100644 --- a/homeassistant/components/light/reproduce_state.py +++ b/homeassistant/components/light/reproduce_state.py @@ -2,7 +2,7 @@ import asyncio import logging from types import MappingProxyType -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -71,7 +71,11 @@ DEPRECATION_WARNING = ( async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -98,7 +102,10 @@ async def _async_reproduce_state( ): return - service_data = {ATTR_ENTITY_ID: state.entity_id} + service_data: Dict[str, Any] = {ATTR_ENTITY_ID: state.entity_id} + + if reproduce_options is not None and ATTR_TRANSITION in reproduce_options: + service_data[ATTR_TRANSITION] = reproduce_options[ATTR_TRANSITION] if state.state == STATE_ON: service = SERVICE_TURN_ON @@ -122,11 +129,20 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Light states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/light/strings.json b/homeassistant/components/light/strings.json index 922a4957afd..ec0309958e7 100644 --- a/homeassistant/components/light/strings.json +++ b/homeassistant/components/light/strings.json @@ -1,11 +1,13 @@ { + "title": "Light", "device_automation": { "action_type": { "brightness_decrease": "Decrease {entity_name} brightness", "brightness_increase": "Increase {entity_name} brightness", "toggle": "Toggle {entity_name}", "turn_on": "Turn on {entity_name}", - "turn_off": "Turn off {entity_name}" + "turn_off": "Turn off {entity_name}", + "flash": "Flash {entity_name}" }, "condition_type": { "is_on": "{entity_name} is on", @@ -15,5 +17,11 @@ "turned_on": "{entity_name} turned on", "turned_off": "{entity_name} turned off" } + }, + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } } } diff --git a/homeassistant/components/light/translations/af.json b/homeassistant/components/light/translations/af.json new file mode 100644 index 00000000000..2846f979f97 --- /dev/null +++ b/homeassistant/components/light/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Lig" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ar.json b/homeassistant/components/light/translations/ar.json new file mode 100644 index 00000000000..23554bd603b --- /dev/null +++ b/homeassistant/components/light/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0627\u0644\u0636\u0648\u0621" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/bg.json b/homeassistant/components/light/translations/bg.json new file mode 100644 index 00000000000..e4542ad99d3 --- /dev/null +++ b/homeassistant/components/light/translations/bg.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0438 {entity_name}", + "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438 {entity_name}", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b.", + "is_on": "{entity_name} \u0435 \u0432\u043a\u043b." + }, + "trigger_type": { + "turned_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "turned_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u043e", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e" + } + }, + "title": "\u041e\u0441\u0432\u0435\u0442\u043b\u0435\u043d\u0438\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/bs.json b/homeassistant/components/light/translations/bs.json new file mode 100644 index 00000000000..ae858ae0c2b --- /dev/null +++ b/homeassistant/components/light/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Svjetlo" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ca.json b/homeassistant/components/light/translations/ca.json new file mode 100644 index 00000000000..ce5bb5c3c7b --- /dev/null +++ b/homeassistant/components/light/translations/ca.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Redueix la brillantor de {entity_name}", + "brightness_increase": "Augmenta la brillantor de {entity_name}", + "flash": "Perpelleja {entity_name}", + "toggle": "Commuta {entity_name}", + "turn_off": "Apaga {entity_name}", + "turn_on": "Enc\u00e9n {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e0 apagat", + "is_on": "{entity_name} est\u00e0 enc\u00e8s" + }, + "trigger_type": { + "turned_off": "{entity_name} apagat", + "turned_on": "{entity_name} enc\u00e8s" + } + }, + "state": { + "_": { + "off": "Apagada", + "on": "Encesa" + } + }, + "title": "Llums" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/cs.json b/homeassistant/components/light/translations/cs.json new file mode 100644 index 00000000000..fad25c00e79 --- /dev/null +++ b/homeassistant/components/light/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Nesv\u00edt\u00ed", + "on": "Sv\u00edt\u00ed" + } + }, + "title": "Sv\u011btlo" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/cy.json b/homeassistant/components/light/translations/cy.json new file mode 100644 index 00000000000..224beab1ebe --- /dev/null +++ b/homeassistant/components/light/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Golau" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/da.json b/homeassistant/components/light/translations/da.json new file mode 100644 index 00000000000..ed0cef6d3c1 --- /dev/null +++ b/homeassistant/components/light/translations/da.json @@ -0,0 +1,26 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Formindsk lysstyrken p\u00e5 {entity_name}", + "brightness_increase": "For\u00f8g lysstyrken p\u00e5 {entity_name}", + "toggle": "Skift {entity_name}", + "turn_off": "Sluk {entity_name}", + "turn_on": "T\u00e6nd for {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} er fra", + "is_on": "{entity_name} er til" + }, + "trigger_type": { + "turned_off": "{entity_name} slukkede", + "turned_on": "{entity_name} t\u00e6ndte" + } + }, + "state": { + "_": { + "off": "Slukket", + "on": "T\u00e6ndt" + } + }, + "title": "Lys" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/de.json b/homeassistant/components/light/translations/de.json new file mode 100644 index 00000000000..3084c9f30c5 --- /dev/null +++ b/homeassistant/components/light/translations/de.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Helligkeit von {entity_name} verringern", + "brightness_increase": "Helligkeit von {entity_name} erh\u00f6hen", + "flash": "Flash {entity_name}", + "toggle": "Schalte {entity_name} um.", + "turn_off": "Schalte {entity_name} aus.", + "turn_on": "Schalte {entity_name} ein." + }, + "condition_type": { + "is_off": "{entity_name} ausgeschaltet", + "is_on": "{entity_name} ist eingeschaltet" + }, + "trigger_type": { + "turned_off": "{entity_name} ausgeschaltet", + "turned_on": "{entity_name} eingeschaltet" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Licht" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/el.json b/homeassistant/components/light/translations/el.json new file mode 100644 index 00000000000..65191da1417 --- /dev/null +++ b/homeassistant/components/light/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u03a6\u03c9\u03c4\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/en.json b/homeassistant/components/light/translations/en.json new file mode 100644 index 00000000000..c22b237cd65 --- /dev/null +++ b/homeassistant/components/light/translations/en.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Decrease {entity_name} brightness", + "brightness_increase": "Increase {entity_name} brightness", + "flash": "Flash {entity_name}", + "toggle": "Toggle {entity_name}", + "turn_off": "Turn off {entity_name}", + "turn_on": "Turn on {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} is off", + "is_on": "{entity_name} is on" + }, + "trigger_type": { + "turned_off": "{entity_name} turned off", + "turned_on": "{entity_name} turned on" + } + }, + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Light" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/es-419.json b/homeassistant/components/light/translations/es-419.json new file mode 100644 index 00000000000..a36bd06e27e --- /dev/null +++ b/homeassistant/components/light/translations/es-419.json @@ -0,0 +1,19 @@ +{ + "device_automation": { + "condition_type": { + "is_off": "{entity_name} est\u00e1 apagada", + "is_on": "{entity_name} est\u00e1 encendida" + }, + "trigger_type": { + "turned_off": "{entity_name} desactivada", + "turned_on": "{entity_name} activada" + } + }, + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Luz" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/es.json b/homeassistant/components/light/translations/es.json new file mode 100644 index 00000000000..51e09168241 --- /dev/null +++ b/homeassistant/components/light/translations/es.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Disminuir brillo de {entity_name}", + "brightness_increase": "Aumentar brillo de {entity_name}", + "flash": "Destellos {entidad_nombre}", + "toggle": "Alternar {entity_name}", + "turn_off": "Apagar {entity_name}", + "turn_on": "Encender {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 apagada", + "is_on": "{entity_name} est\u00e1 encendida" + }, + "trigger_type": { + "turned_off": "{entity_name} apagada", + "turned_on": "{entity_name} encendida" + } + }, + "state": { + "_": { + "off": "Apagada", + "on": "Encendida" + } + }, + "title": "Luz" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/et.json b/homeassistant/components/light/translations/et.json new file mode 100644 index 00000000000..4eef7a85267 --- /dev/null +++ b/homeassistant/components/light/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Tuled" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/eu.json b/homeassistant/components/light/translations/eu.json new file mode 100644 index 00000000000..c2c85357e6a --- /dev/null +++ b/homeassistant/components/light/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Argia" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/fa.json b/homeassistant/components/light/translations/fa.json new file mode 100644 index 00000000000..7c92b0e3ae8 --- /dev/null +++ b/homeassistant/components/light/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0631\u0648\u0634\u0646" + } + }, + "title": "\u0686\u0631\u0627\u063a" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/fi.json b/homeassistant/components/light/translations/fi.json new file mode 100644 index 00000000000..86f6fd90503 --- /dev/null +++ b/homeassistant/components/light/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Valo" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/fr.json b/homeassistant/components/light/translations/fr.json new file mode 100644 index 00000000000..33db7fd7506 --- /dev/null +++ b/homeassistant/components/light/translations/fr.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Basculer {entity_name}", + "turn_off": "\u00c9teindre {entity_name}", + "turn_on": "Allumer {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est \u00e9teint", + "is_on": "{entity_name} est allum\u00e9" + }, + "trigger_type": { + "turned_off": "{entity_name} est d\u00e9sactiv\u00e9", + "turned_on": "{entity_name} activ\u00e9" + } + }, + "state": { + "_": { + "off": "\u00c9teinte", + "on": "Actif" + } + }, + "title": "Lumi\u00e8re" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/gsw.json b/homeassistant/components/light/translations/gsw.json new file mode 100644 index 00000000000..f4df7d42300 --- /dev/null +++ b/homeassistant/components/light/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Li\u00e4cht" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/he.json b/homeassistant/components/light/translations/he.json new file mode 100644 index 00000000000..bb49ba266a7 --- /dev/null +++ b/homeassistant/components/light/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05d0\u05d5\u05b9\u05e8" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/hi.json b/homeassistant/components/light/translations/hi.json new file mode 100644 index 00000000000..a2c84d58ad6 --- /dev/null +++ b/homeassistant/components/light/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u0930\u094b\u0936\u0928\u0940" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/hr.json b/homeassistant/components/light/translations/hr.json new file mode 100644 index 00000000000..6c1a6984905 --- /dev/null +++ b/homeassistant/components/light/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010deno", + "on": "Uklju\u010deno" + } + }, + "title": "Svjetlo" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/hu.json b/homeassistant/components/light/translations/hu.json new file mode 100644 index 00000000000..ad215a5ba4c --- /dev/null +++ b/homeassistant/components/light/translations/hu.json @@ -0,0 +1,26 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "{entity_name} f\u00e9nyerej\u00e9nek cs\u00f6kkent\u00e9se", + "brightness_increase": "{entity_name} f\u00e9nyerej\u00e9nek n\u00f6vel\u00e9se", + "toggle": "{entity_name} fel/lekapcsol\u00e1sa", + "turn_off": "{entity_name} lekapcsol\u00e1sa", + "turn_on": "{entity_name} felkapcsol\u00e1sa" + }, + "condition_type": { + "is_off": "{entity_name} le van kapcsolva", + "is_on": "{entity_name} fel van kapcsolva" + }, + "trigger_type": { + "turned_off": "{entity_name} le lett kapcsolva", + "turned_on": "{entity_name} fel lett kapcsolva" + } + }, + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Vil\u00e1g\u00edt\u00e1s" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/hy.json b/homeassistant/components/light/translations/hy.json new file mode 100644 index 00000000000..88b7943cb2f --- /dev/null +++ b/homeassistant/components/light/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u054d\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u053c\u0578\u0582\u0575\u057d" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/id.json b/homeassistant/components/light/translations/id.json new file mode 100644 index 00000000000..bc2ba732df2 --- /dev/null +++ b/homeassistant/components/light/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Lampu" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/is.json b/homeassistant/components/light/translations/is.json new file mode 100644 index 00000000000..365502c2032 --- /dev/null +++ b/homeassistant/components/light/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Sl\u00f6kkt", + "on": "Kveikt" + } + }, + "title": "Lj\u00f3s" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/it.json b/homeassistant/components/light/translations/it.json new file mode 100644 index 00000000000..c9cc397211d --- /dev/null +++ b/homeassistant/components/light/translations/it.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Riduci la luminosit\u00e0 di {entity_name}", + "brightness_increase": "Aumenta la luminosit\u00e0 di {entity_name}", + "flash": "Flash {entity_name}", + "toggle": "Commuta {entity_name}", + "turn_off": "Spegnere {entity_name}", + "turn_on": "Accendere {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u00e8 disattivato", + "is_on": "{entity_name} \u00e8 attivo" + }, + "trigger_type": { + "turned_off": "{entity_name} disattivato", + "turned_on": "{entity_name} attivato" + } + }, + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Luce" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ja.json b/homeassistant/components/light/translations/ja.json new file mode 100644 index 00000000000..d4ac27ea526 --- /dev/null +++ b/homeassistant/components/light/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + }, + "title": "\u7167\u660e" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ko.json b/homeassistant/components/light/translations/ko.json new file mode 100644 index 00000000000..969d9b2e4d4 --- /dev/null +++ b/homeassistant/components/light/translations/ko.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "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" + }, + "condition_type": { + "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", + "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74" + }, + "trigger_type": { + "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", + "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c" + } + }, + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc804\ub4f1" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/lb.json b/homeassistant/components/light/translations/lb.json new file mode 100644 index 00000000000..cf59afd72a4 --- /dev/null +++ b/homeassistant/components/light/translations/lb.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "{entity_name} Hellegkeet reduz\u00e9ieren", + "brightness_increase": "{entity_name} Hellegkeet erh\u00e9ijen", + "flash": "Flash {entity_name}", + "toggle": "{entity_name} \u00ebmschalten", + "turn_off": "{entity_name} ausschalten", + "turn_on": "{entity_name} uschalten" + }, + "condition_type": { + "is_off": "{entity_name} ass aus", + "is_on": "{entity_name} ass un" + }, + "trigger_type": { + "turned_off": "{entity_name} gouf ausgeschalt", + "turned_on": "{entity_name} gouf ugeschalt" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Luucht" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/lv.json b/homeassistant/components/light/translations/lv.json new file mode 100644 index 00000000000..c0cef4e320a --- /dev/null +++ b/homeassistant/components/light/translations/lv.json @@ -0,0 +1,19 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Samazin\u0101t {entity_name} spilgtumu", + "brightness_increase": "Palielin\u0101t {entity_name} spilgtumu" + }, + "trigger_type": { + "turned_off": "{entity_name} tika izsl\u0113gta", + "turned_on": "{entity_name} tika iesl\u0113gta" + } + }, + "state": { + "_": { + "off": "Izsl\u0113gta", + "on": "Iesl\u0113gta" + } + }, + "title": "Gaisma" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/nb.json b/homeassistant/components/light/translations/nb.json new file mode 100644 index 00000000000..f1494c2c43e --- /dev/null +++ b/homeassistant/components/light/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Lys" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/nl.json b/homeassistant/components/light/translations/nl.json new file mode 100644 index 00000000000..761dd2bdc00 --- /dev/null +++ b/homeassistant/components/light/translations/nl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Omschakelen {entity_name}", + "turn_off": "{entity_name} uitschakelen", + "turn_on": "{entity_name} inschakelen" + }, + "condition_type": { + "is_off": "{entity_name} is uitgeschakeld", + "is_on": "{entity_name} is ingeschakeld" + }, + "trigger_type": { + "turned_off": "{entity_name} is uitgeschakeld", + "turned_on": "{entity_name} is ingeschakeld" + } + }, + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Licht" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/nn.json b/homeassistant/components/light/translations/nn.json new file mode 100644 index 00000000000..f1494c2c43e --- /dev/null +++ b/homeassistant/components/light/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Lys" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/no.json b/homeassistant/components/light/translations/no.json new file mode 100644 index 00000000000..8b9d94d18b1 --- /dev/null +++ b/homeassistant/components/light/translations/no.json @@ -0,0 +1,21 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Reduser lysstyrken p\u00e5 {entity_name}", + "brightness_increase": "\u00d8k lysstyrken p\u00e5 {entity_name}", + "flash": "Flash {entity_name}", + "toggle": "Veksle {entity_name}", + "turn_off": "Sl\u00e5 av {entity_name}", + "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} er av", + "is_on": "{entity_name} er p\u00e5" + }, + "trigger_type": { + "turned_off": "{entity_name} sl\u00e5tt av", + "turned_on": "{entity_name} sl\u00e5tt p\u00e5" + } + }, + "title": "Lys" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/pl.json b/homeassistant/components/light/translations/pl.json new file mode 100644 index 00000000000..7cbff58c44e --- /dev/null +++ b/homeassistant/components/light/translations/pl.json @@ -0,0 +1,26 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "zmniejsz jasno\u015b\u0107 {entity_name}", + "brightness_increase": "zwi\u0119ksz jasno\u015b\u0107 {entity_name}", + "toggle": "prze\u0142\u0105cz {entity_name}", + "turn_off": "wy\u0142\u0105cz {entity_name}", + "turn_on": "w\u0142\u0105cz {entity_name}" + }, + "condition_type": { + "is_off": "\u015bwiat\u0142o {entity_name} jest wy\u0142\u0105czone", + "is_on": "\u015bwiat\u0142o {entity_name} jest w\u0142\u0105czone" + }, + "trigger_type": { + "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", + "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}" + } + }, + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "\u015awiat\u0142o" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/pt-BR.json b/homeassistant/components/light/translations/pt-BR.json new file mode 100644 index 00000000000..207305ec08b --- /dev/null +++ b/homeassistant/components/light/translations/pt-BR.json @@ -0,0 +1,20 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Alternar {entity_name}", + "turn_off": "Desligar {entity_name}", + "turn_on": "Ligar {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 desligado", + "is_on": "{entity_name} est\u00e1 ligado" + } + }, + "state": { + "_": { + "off": "Desligada", + "on": "Ligada" + } + }, + "title": "Luz" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/pt.json b/homeassistant/components/light/translations/pt.json new file mode 100644 index 00000000000..9de8eee5ea2 --- /dev/null +++ b/homeassistant/components/light/translations/pt.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Alternar {entity_name}", + "turn_off": "Desligar {entity_name}", + "turn_on": "Ligar {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 desligado", + "is_on": "{entity_name} est\u00e1 ligado" + }, + "trigger_type": { + "turned_off": "{entity_name} foi desligado", + "turned_on": "{entity_name} foi ligado" + } + }, + "state": { + "_": { + "off": "Desligada", + "on": "Ligada" + } + }, + "title": "Ilumina\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ro.json b/homeassistant/components/light/translations/ro.json new file mode 100644 index 00000000000..11443839af1 --- /dev/null +++ b/homeassistant/components/light/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Lumina" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ru.json b/homeassistant/components/light/translations/ru.json new file mode 100644 index 00000000000..d6bab88a671 --- /dev/null +++ b/homeassistant/components/light/translations/ru.json @@ -0,0 +1,26 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c {entity_name}", + "brightness_increase": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c {entity_name}", + "toggle": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" + }, + "trigger_type": { + "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + } + }, + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u041e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/sk.json b/homeassistant/components/light/translations/sk.json new file mode 100644 index 00000000000..5294df79ce7 --- /dev/null +++ b/homeassistant/components/light/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Vypnut\u00e9", + "on": "Zapnut\u00e9" + } + }, + "title": "Svetlo" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/sl.json b/homeassistant/components/light/translations/sl.json new file mode 100644 index 00000000000..9bb6af3c7d5 --- /dev/null +++ b/homeassistant/components/light/translations/sl.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "Zmanj\u0161ajte svetlost {entity_name}", + "brightness_increase": "Pove\u010dajte svetlost {entity_name}", + "flash": "Osvetli (pobliskaj) {entity_name}", + "toggle": "Preklopite {entity_name}", + "turn_off": "Izklopite {entity_name}", + "turn_on": "Vklopite {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} je izklopljen", + "is_on": "{entity_name} je vklopljen" + }, + "trigger_type": { + "turned_off": "{entity_name} izklopljen", + "turned_on": "{entity_name} vklopljen" + } + }, + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Lu\u010di" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/sv.json b/homeassistant/components/light/translations/sv.json new file mode 100644 index 00000000000..0d0e29a87ed --- /dev/null +++ b/homeassistant/components/light/translations/sv.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "V\u00e4xla {entity_name}", + "turn_off": "St\u00e4ng av {entity_name}", + "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u00e4r avst\u00e4ngd", + "is_on": "{entity_name} \u00e4r p\u00e5" + }, + "trigger_type": { + "turned_off": "{entity_name} avst\u00e4ngd", + "turned_on": "{entity_name} slogs p\u00e5" + } + }, + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Lampor" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/ta.json b/homeassistant/components/light/translations/ta.json new file mode 100644 index 00000000000..c575a92c7b2 --- /dev/null +++ b/homeassistant/components/light/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd" + } + }, + "title": "\u0bae\u0bbf\u0ba9\u0bcd \u0bb5\u0bbf\u0bb3\u0b95\u0bcd\u0b95\u0bc1" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/te.json b/homeassistant/components/light/translations/te.json new file mode 100644 index 00000000000..d9b0c6aa2ed --- /dev/null +++ b/homeassistant/components/light/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c32\u0c46\u0c56\u0c1f\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/th.json b/homeassistant/components/light/translations/th.json new file mode 100644 index 00000000000..c19b11c8591 --- /dev/null +++ b/homeassistant/components/light/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e41\u0e2a\u0e07\u0e2a\u0e27\u0e48\u0e32\u0e07" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/tr.json b/homeassistant/components/light/translations/tr.json new file mode 100644 index 00000000000..6fa71e8f339 --- /dev/null +++ b/homeassistant/components/light/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "I\u015f\u0131k" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/uk.json b/homeassistant/components/light/translations/uk.json new file mode 100644 index 00000000000..06c880fff77 --- /dev/null +++ b/homeassistant/components/light/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u041e\u0441\u0432\u0456\u0442\u043b\u0435\u043d\u043d\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/vi.json b/homeassistant/components/light/translations/vi.json new file mode 100644 index 00000000000..090e208660a --- /dev/null +++ b/homeassistant/components/light/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "\u0110\u00e8n" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/zh-Hans.json b/homeassistant/components/light/translations/zh-Hans.json new file mode 100644 index 00000000000..1054820c6bb --- /dev/null +++ b/homeassistant/components/light/translations/zh-Hans.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "\u964d\u4f4e {entity_name} \u7684\u4eae\u5ea6", + "brightness_increase": "\u63d0\u9ad8 {entity_name} \u7684\u4eae\u5ea6", + "flash": "\u4f7f {entity_name} \u95ea\u70c1", + "toggle": "\u5207\u6362 {entity_name} \u5f00\u5173", + "turn_off": "\u5173\u95ed {entity_name}", + "turn_on": "\u6253\u5f00 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u5df2\u5173\u95ed", + "is_on": "{entity_name} \u5df2\u6253\u5f00" + }, + "trigger_type": { + "turned_off": "{entity_name} \u88ab\u5173\u95ed", + "turned_on": "{entity_name} \u88ab\u6253\u5f00" + } + }, + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u706f\u5149" +} \ No newline at end of file diff --git a/homeassistant/components/light/translations/zh-Hant.json b/homeassistant/components/light/translations/zh-Hant.json new file mode 100644 index 00000000000..0872a742f6f --- /dev/null +++ b/homeassistant/components/light/translations/zh-Hant.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "action_type": { + "brightness_decrease": "\u964d\u4f4e{entity_name}\u4eae\u5ea6", + "brightness_increase": "\u589e\u52a0{entity_name}\u4eae\u5ea6", + "flash": "\u9583\u52d5 {entity_name}", + "toggle": "\u5207\u63db{entity_name}", + "turn_off": "\u95dc\u9589{entity_name}", + "turn_on": "\u958b\u555f{entity_name}" + }, + "condition_type": { + "is_off": "{entity_name}\u5df2\u95dc\u9589", + "is_on": "{entity_name}\u5df2\u958b\u555f" + }, + "trigger_type": { + "turned_off": "{entity_name}\u5df2\u95dc\u9589", + "turned_on": "{entity_name}\u5df2\u958b\u555f" + } + }, + "state": { + "_": { + "off": "\u5df2\u95dc\u71c8", + "on": "\u5df2\u958b\u71c8" + } + }, + "title": "\u71c8\u5149" +} \ No newline at end of file diff --git a/homeassistant/components/lightwave/__init__.py b/homeassistant/components/lightwave/__init__.py index 4a27d4a7f4a..73002908ff3 100644 --- a/homeassistant/components/lightwave/__init__.py +++ b/homeassistant/components/lightwave/__init__.py @@ -2,20 +2,30 @@ from lightwave.lightwave import LWLink import voluptuous as vol +from homeassistant.components.climate import DOMAIN as CLIMATE_DOMAIN +from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.const import CONF_HOST, CONF_LIGHTS, CONF_NAME, CONF_SWITCHES import homeassistant.helpers.config_validation as cv from homeassistant.helpers.discovery import async_load_platform -LIGHTWAVE_LINK = "lightwave_link" - +CONF_SERIAL = "serial" +CONF_PROXY_IP = "proxy_ip" +CONF_PROXY_PORT = "proxy_port" +CONF_TRV = "trv" +CONF_TRVS = "trvs" +DEFAULT_PROXY_PORT = 7878 +DEFAULT_PROXY_IP = "127.0.0.1" DOMAIN = "lightwave" +LIGHTWAVE_LINK = f"{DOMAIN}_link" +LIGHTWAVE_TRV_PROXY = f"{DOMAIN}_proxy" +LIGHTWAVE_TRV_PROXY_PORT = f"{DOMAIN}_proxy_port" CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( vol.All( - cv.has_at_least_one_key(CONF_LIGHTS, CONF_SWITCHES), + cv.has_at_least_one_key(CONF_LIGHTS, CONF_SWITCHES, CONF_TRV), { vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_LIGHTS, default={}): { @@ -24,6 +34,22 @@ CONFIG_SCHEMA = vol.Schema( vol.Optional(CONF_SWITCHES, default={}): { cv.string: vol.Schema({vol.Required(CONF_NAME): cv.string}) }, + vol.Optional(CONF_TRV, default={}): { + vol.Optional( + CONF_PROXY_PORT, default=DEFAULT_PROXY_PORT + ): cv.port, + vol.Optional( + CONF_PROXY_IP, default=DEFAULT_PROXY_IP + ): cv.string, + vol.Required(CONF_TRVS, default={}): { + cv.string: vol.Schema( + { + vol.Required(CONF_NAME): cv.string, + vol.Required(CONF_SERIAL): cv.string, + } + ) + }, + }, }, ) ) @@ -34,9 +60,9 @@ CONFIG_SCHEMA = vol.Schema( async def async_setup(hass, config): """Try to start embedded Lightwave broker.""" - host = config[DOMAIN][CONF_HOST] - hass.data[LIGHTWAVE_LINK] = LWLink(host) + lwlink = LWLink(host) + hass.data[LIGHTWAVE_LINK] = lwlink lights = config[DOMAIN][CONF_LIGHTS] if lights: @@ -50,4 +76,17 @@ async def async_setup(hass, config): async_load_platform(hass, "switch", DOMAIN, switches, config) ) + trv = config[DOMAIN][CONF_TRV] + if trv: + trvs = trv[CONF_TRVS] + proxy_ip = trv[CONF_PROXY_IP] + proxy_port = trv[CONF_PROXY_PORT] + lwlink.set_trv_proxy(proxy_ip, proxy_port) + + platforms = [CLIMATE_DOMAIN, SENSOR_DOMAIN] + for platform in platforms: + hass.async_create_task( + async_load_platform(hass, platform, DOMAIN, trvs, config) + ) + return True diff --git a/homeassistant/components/lightwave/climate.py b/homeassistant/components/lightwave/climate.py new file mode 100644 index 00000000000..8e842624b16 --- /dev/null +++ b/homeassistant/components/lightwave/climate.py @@ -0,0 +1,142 @@ +"""Support for LightwaveRF TRVs.""" +from homeassistant.components.climate import ( + DEFAULT_MAX_TEMP, + DEFAULT_MIN_TEMP, + HVAC_MODE_HEAT, + HVAC_MODE_OFF, + SUPPORT_TARGET_TEMPERATURE, + ClimateDevice, +) +from homeassistant.components.climate.const import CURRENT_HVAC_HEAT, CURRENT_HVAC_OFF +from homeassistant.const import ATTR_TEMPERATURE, CONF_NAME, TEMP_CELSIUS + +from . import CONF_SERIAL, LIGHTWAVE_LINK + + +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): + """Find and return LightWave lights.""" + if discovery_info is None: + return + + entities = [] + lwlink = hass.data[LIGHTWAVE_LINK] + + for device_id, device_config in discovery_info.items(): + name = device_config[CONF_NAME] + serial = device_config[CONF_SERIAL] + entities.append(LightwaveTrv(name, device_id, lwlink, serial)) + + async_add_entities(entities) + + +class LightwaveTrv(ClimateDevice): + """Representation of a LightWaveRF TRV.""" + + def __init__(self, name, device_id, lwlink, serial): + """Initialize LightwaveTrv entity.""" + self._name = name + self._device_id = device_id + self._state = None + self._current_temperature = None + self._target_temperature = None + self._hvac_action = None + self._lwlink = lwlink + self._serial = serial + # inhibit is used to prevent race condition on update. If non zero, skip next update cycle. + self._inhibit = 0 + + @property + def supported_features(self): + """Flag supported features.""" + return SUPPORT_TARGET_TEMPERATURE + + def update(self): + """Communicate with a Lightwave RTF Proxy to get state.""" + (temp, targ, _, trv_output) = self._lwlink.read_trv_status(self._serial) + if temp is not None: + self._current_temperature = temp + if targ is not None: + if self._inhibit == 0: + self._target_temperature = targ + if targ == 0: + # TRV off + self._target_temperature = None + if targ >= 40: + # Call for heat mode, or TRV in a fixed position + self._target_temperature = None + else: + # Done the job - use proxy next iteration + self._inhibit = 0 + if trv_output is not None: + if trv_output > 0: + self._hvac_action = CURRENT_HVAC_HEAT + else: + self._hvac_action = CURRENT_HVAC_OFF + + @property + def name(self): + """Lightwave trv name.""" + return self._name + + @property + def current_temperature(self): + """Property giving the current room temperature.""" + return self._current_temperature + + @property + def target_temperature(self): + """Target room temperature.""" + if self._inhibit > 0: + # If we get an update before the new temp has + # propagated, the target temp is set back to the + # old target on the next poll, showing a false + # reading temporarily. + self._target_temperature = self._inhibit + return self._target_temperature + + @property + def hvac_modes(self): + """HVAC modes.""" + return [HVAC_MODE_HEAT, HVAC_MODE_OFF] + + @property + def hvac_mode(self): + """HVAC mode.""" + return HVAC_MODE_HEAT + + @property + def hvac_action(self): + """HVAC action.""" + return self._hvac_action + + @property + def min_temp(self): + """Min Temp.""" + return DEFAULT_MIN_TEMP + + @property + def max_temp(self): + """Max Temp.""" + return DEFAULT_MAX_TEMP + + @property + def temperature_unit(self): + """Set temperature unit.""" + return TEMP_CELSIUS + + @property + def target_temperature_step(self): + """Set temperature step.""" + return 0.5 + + def set_temperature(self, **kwargs): + """Set TRV target temperature.""" + if ATTR_TEMPERATURE in kwargs: + self._target_temperature = kwargs[ATTR_TEMPERATURE] + self._inhibit = self._target_temperature + self._lwlink.set_temperature( + self._device_id, self._target_temperature, self._name + ) + + async def async_set_hvac_mode(self, hvac_mode): + """Set HVAC Mode for TRV.""" diff --git a/homeassistant/components/lightwave/light.py b/homeassistant/components/lightwave/light.py index 4aabcbc75c5..78e4c43a0e7 100644 --- a/homeassistant/components/lightwave/light.py +++ b/homeassistant/components/lightwave/light.py @@ -72,10 +72,10 @@ class LWRFLight(Light): else: self._lwlink.turn_on_light(self._device_id, self._name) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the LightWave light off.""" self._state = False self._lwlink.turn_off(self._device_id, self._name) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/lightwave/manifest.json b/homeassistant/components/lightwave/manifest.json index 9fea812d321..a80136b3fec 100644 --- a/homeassistant/components/lightwave/manifest.json +++ b/homeassistant/components/lightwave/manifest.json @@ -2,7 +2,6 @@ "domain": "lightwave", "name": "Lightwave", "documentation": "https://www.home-assistant.io/integrations/lightwave", - "requirements": ["lightwave==0.17"], - "dependencies": [], + "requirements": ["lightwave==0.18"], "codeowners": [] } diff --git a/homeassistant/components/lightwave/sensor.py b/homeassistant/components/lightwave/sensor.py new file mode 100644 index 00000000000..f018a0c17c7 --- /dev/null +++ b/homeassistant/components/lightwave/sensor.py @@ -0,0 +1,60 @@ +"""Support for LightwaveRF TRV - Associated Battery.""" +from homeassistant.const import CONF_NAME, DEVICE_CLASS_BATTERY, UNIT_PERCENTAGE +from homeassistant.helpers.entity import Entity + +from . import CONF_SERIAL, LIGHTWAVE_LINK + + +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): + """Find and return battery.""" + if discovery_info is None: + return + + batteries = [] + + lwlink = hass.data[LIGHTWAVE_LINK] + + for device_config in discovery_info.values(): + name = device_config[CONF_NAME] + serial = device_config[CONF_SERIAL] + batteries.append(LightwaveBattery(name, lwlink, serial)) + + async_add_entities(batteries) + + +class LightwaveBattery(Entity): + """Lightwave TRV Battery.""" + + def __init__(self, name, lwlink, serial): + """Initialize the Lightwave Trv battery sensor.""" + self._name = name + self._state = None + self._lwlink = lwlink + self._serial = serial + + @property + def device_class(self): + """Return the device class of the sensor.""" + return DEVICE_CLASS_BATTERY + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def state(self): + """Return the state of the sensor.""" + return self._state + + @property + def unit_of_measurement(self): + """Return the state of the sensor.""" + return UNIT_PERCENTAGE + + def update(self): + """Communicate with a Lightwave RTF Proxy to get state.""" + (dummy_temp, dummy_targ, battery, dummy_output) = self._lwlink.read_trv_status( + self._serial + ) + self._state = battery diff --git a/homeassistant/components/lightwave/switch.py b/homeassistant/components/lightwave/switch.py index bfc4407458a..16c2aa53462 100644 --- a/homeassistant/components/lightwave/switch.py +++ b/homeassistant/components/lightwave/switch.py @@ -49,10 +49,10 @@ class LWRFSwitch(SwitchDevice): """Turn the LightWave switch on.""" self._state = True self._lwlink.turn_on_switch(self._device_id, self._name) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the LightWave switch off.""" self._state = False self._lwlink.turn_off(self._device_id, self._name) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/limitlessled/manifest.json b/homeassistant/components/limitlessled/manifest.json index 6dd3101fabf..3187b795e88 100644 --- a/homeassistant/components/limitlessled/manifest.json +++ b/homeassistant/components/limitlessled/manifest.json @@ -3,6 +3,5 @@ "name": "LimitlessLED", "documentation": "https://www.home-assistant.io/integrations/limitlessled", "requirements": ["limitlessled==1.1.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/linksys_smart/device_tracker.py b/homeassistant/components/linksys_smart/device_tracker.py index a2a8e317133..1f31ddc03a1 100644 --- a/homeassistant/components/linksys_smart/device_tracker.py +++ b/homeassistant/components/linksys_smart/device_tracker.py @@ -9,7 +9,7 @@ from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DeviceScanner, ) -from homeassistant.const import CONF_HOST +from homeassistant.const import CONF_HOST, HTTP_OK import homeassistant.helpers.config_validation as cv DEFAULT_TIMEOUT = 10 @@ -37,7 +37,7 @@ class LinksysSmartWifiDeviceScanner(DeviceScanner): # Check if the access point is accessible response = self._make_request() - if not response.status_code == 200: + if not response.status_code == HTTP_OK: raise ConnectionError("Cannot connect to Linksys Access Point") def scan_devices(self): @@ -56,7 +56,7 @@ class LinksysSmartWifiDeviceScanner(DeviceScanner): self.last_results = {} response = self._make_request() - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.error( "Got HTTP status code %d when getting device list", response.status_code ) diff --git a/homeassistant/components/linksys_smart/manifest.json b/homeassistant/components/linksys_smart/manifest.json index 32c6c1822ea..e0fafcdce25 100644 --- a/homeassistant/components/linksys_smart/manifest.json +++ b/homeassistant/components/linksys_smart/manifest.json @@ -2,7 +2,5 @@ "domain": "linksys_smart", "name": "Linksys Smart Wi-Fi", "documentation": "https://www.home-assistant.io/integrations/linksys_smart", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/linky/.translations/bg.json b/homeassistant/components/linky/.translations/bg.json deleted file mode 100644 index cc5239eaf3c..00000000000 --- a/homeassistant/components/linky/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "access": "\u041d\u044f\u043c\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e Enedis.fr, \u043c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u043e\u0441\u0442\u0442\u0430 \u0441\u0438", - "enedis": "Enedis.fr \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u0438 \u0441 \u0433\u0440\u0435\u0448\u043a\u0430: \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043f\u043e-\u043a\u044a\u0441\u043d\u043e (\u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u043e \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 23:00 \u0438 02:00)", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430: \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043f\u043e-\u043a\u044a\u0441\u043d\u043e (\u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u043e \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 23:00 \u0438 02:00)", - "wrong_login": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0432\u043b\u0438\u0437\u0430\u043d\u0435: \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0438\u043c\u0435\u0439\u043b\u0430 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u0441\u0438" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "E-mail" - }, - "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u043d\u0434\u0435\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438\u0442\u0435 \u0441\u0438 \u0434\u0430\u043d\u043d\u0438", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/ca.json b/homeassistant/components/linky/.translations/ca.json deleted file mode 100644 index 9c4a3a19067..00000000000 --- a/homeassistant/components/linky/.translations/ca.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El compte ja ha estat configurat" - }, - "error": { - "access": "No s'ha pogut accedir a Enedis.fr, comprova la teva connexi\u00f3 a Internet", - "enedis": "Enedis.fr ha respost amb un error: torna-ho a provar m\u00e9s tard (millo no entre les 23:00 i les 14:00)", - "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard (millor no entre les 23:00 i les 14:00)", - "wrong_login": "Error d\u2019inici de sessi\u00f3: comprova el teu correu electr\u00f2nic i la contrasenya" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Correu electr\u00f2nic" - }, - "description": "Introdueix les teves credencials", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/da.json b/homeassistant/components/linky/.translations/da.json deleted file mode 100644 index 2097d094a3a..00000000000 --- a/homeassistant/components/linky/.translations/da.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontoen er allerede konfigureret" - }, - "error": { - "access": "Kunne ikke f\u00e5 adgang til Enedis.fr, kontroller din internetforbindelse", - "enedis": "Enedis.fr svarede med en fejl: Pr\u00f8v igen senere (normalt ikke mellem 23:00 og 02:00)", - "unknown": "Ukendt fejl: Pr\u00f8v igen senere (normalt ikke mellem 23:00 og 02:00)", - "wrong_login": "Loginfejl: Kontroller din e-mail og adgangskode" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "E-mail" - }, - "description": "Indtast dine legitimationsoplysninger", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/de.json b/homeassistant/components/linky/.translations/de.json deleted file mode 100644 index 83e56a52c6c..00000000000 --- a/homeassistant/components/linky/.translations/de.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Konto bereits konfiguriert" - }, - "error": { - "access": "Konnte nicht auf Enedis.fr zugreifen, \u00fcberpr\u00fcfe bitte die Internetverbindung", - "enedis": "Enedis.fr antwortete mit einem Fehler: wiederhole den Vorgang sp\u00e4ter (in der Regel nicht zwischen 23 Uhr und 2 Uhr morgens)", - "unknown": "Unbekannter Fehler: Wiederhole den Vorgang sp\u00e4ter (in der Regel nicht zwischen 23 Uhr und 2 Uhr morgens)", - "wrong_login": "Login-Fehler: Pr\u00fcfe bitte E-Mail & Passwort" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "E-Mail" - }, - "description": "Gib deine Zugangsdaten ein", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/en.json b/homeassistant/components/linky/.translations/en.json deleted file mode 100644 index 13d2553b0c7..00000000000 --- a/homeassistant/components/linky/.translations/en.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account already configured" - }, - "error": { - "access": "Could not access to Enedis.fr, please check your internet connection", - "enedis": "Enedis.fr answered with an error: please retry later (usually not between 11PM and 2AM)", - "unknown": "Unknown error: please retry later (usually not between 11PM and 2AM)", - "wrong_login": "Login error: please check your email & password" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Email" - }, - "description": "Enter your credentials", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/es-419.json b/homeassistant/components/linky/.translations/es-419.json deleted file mode 100644 index 5bddb534146..00000000000 --- a/homeassistant/components/linky/.translations/es-419.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "access": "No se pudo acceder a Enedis.fr, compruebe su conexi\u00f3n a Internet.", - "enedis": "Enedis.fr respondi\u00f3 con un error: vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 11 p.m. y las 2 a.m.)", - "unknown": "Error desconocido: por favor, vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 11 p.m. y las 2 a.m.)", - "wrong_login": "Error de inicio de sesi\u00f3n: por favor revise su direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Correo electr\u00f3nico" - }, - "description": "Ingrese sus credenciales", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/es.json b/homeassistant/components/linky/.translations/es.json deleted file mode 100644 index c0052c356b2..00000000000 --- a/homeassistant/components/linky/.translations/es.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La cuenta ya est\u00e1 configurada" - }, - "error": { - "access": "No se pudo acceder a Enedis.fr, compruebe su conexi\u00f3n a Internet", - "enedis": "Enedis.fr respondi\u00f3 con un error: vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 11:00 y las 2 de la ma\u00f1ana)", - "unknown": "Error desconocido: por favor, vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 23:00 y las 02:00 horas).", - "wrong_login": "Error de inicio de sesi\u00f3n: compruebe su direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Correo electr\u00f3nico" - }, - "description": "Introduzca sus credenciales", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/fr.json b/homeassistant/components/linky/.translations/fr.json deleted file mode 100644 index 6dba7e9af89..00000000000 --- a/homeassistant/components/linky/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Compte d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "access": "Impossible d'acc\u00e9der \u00e0 Enedis.fr, merci de v\u00e9rifier votre connexion internet", - "enedis": "Erreur d'Enedis.fr: merci de r\u00e9essayer plus tard (pas entre 23h et 2h)", - "unknown": "Erreur inconnue: merci de r\u00e9essayer plus tard (pas entre 23h et 2h)", - "wrong_login": "Erreur de connexion: veuillez v\u00e9rifier votre e-mail et votre mot de passe" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Email" - }, - "description": "Entrez vos identifiants", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/it.json b/homeassistant/components/linky/.translations/it.json deleted file mode 100644 index 67418f616ad..00000000000 --- a/homeassistant/components/linky/.translations/it.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account gi\u00e0 configurato" - }, - "error": { - "access": "Impossibile accedere a Enedis.fr, si prega di controllare la connessione internet", - "enedis": "Enedis.fr ha risposto con un errore: si prega di riprovare pi\u00f9 tardi (di solito non tra le 23:00 e le 02:00).", - "unknown": "Errore sconosciuto: riprova pi\u00f9 tardi (in genere non tra le 23:00 e le 02:00)", - "wrong_login": "Errore di accesso: si prega di controllare la tua E-mail e la password" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "E-mail" - }, - "description": "Inserisci le tue credenziali", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/ko.json b/homeassistant/components/linky/.translations/ko.json deleted file mode 100644 index 78c825398d6..00000000000 --- a/homeassistant/components/linky/.translations/ko.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "access": "Enedis.fr \uc5d0 \uc811\uc18d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc778\ud130\ub137 \uc5f0\uacb0\uc744 \ud655\uc778\ud574\ubcf4\uc138\uc694", - "enedis": "Enedis.fr \uc774 \uc624\ub958\ub85c \uc751\ub2f5\ud588\uc2b5\ub2c8\ub2e4: \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694 (\uc800\ub141 11\uc2dc \ubd80\ud130 \uc0c8\ubcbd 2\uc2dc\ub294 \ud53c\ud574\uc8fc\uc138\uc694)", - "unknown": "\uc54c \uc218\uc5c6\ub294 \uc624\ub958: \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694 (\uc800\ub141 11\uc2dc \ubd80\ud130 \uc0c8\ubcbd 2\uc2dc\ub294 \ud53c\ud574\uc8fc\uc138\uc694)", - "wrong_login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc774\uba54\uc77c \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc774\uba54\uc77c" - }, - "description": "\uc790\uaca9 \uc99d\uba85\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/lb.json b/homeassistant/components/linky/.translations/lb.json deleted file mode 100644 index b4c10bec367..00000000000 --- a/homeassistant/components/linky/.translations/lb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kont ass scho konfigur\u00e9iert" - }, - "error": { - "access": "Keng Verbindung zu Enedis.fr, iwwerpr\u00e9ift d'Internet Verbindung", - "enedis": "Enedis.fr huet mat engem Feeler ge\u00e4ntwert: prob\u00e9iert sp\u00e9ider nach emol (normalerweis net t\u00ebscht 23h00 an 2h00)", - "unknown": "Onbekannte Feeler: prob\u00e9iert sp\u00e9ider nach emol (normalerweis net t\u00ebscht 23h00 an 2h00)", - "wrong_login": "Feeler beim Login: iwwerpr\u00e9ift \u00e4r E-Mail & Passwuert" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "E-Mail" - }, - "description": "F\u00ebllt \u00e4r Login Informatiounen aus", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/nl.json b/homeassistant/components/linky/.translations/nl.json deleted file mode 100644 index 5654edb08f4..00000000000 --- a/homeassistant/components/linky/.translations/nl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Account al geconfigureerd" - }, - "error": { - "access": "Geen toegang tot Enedis.fr, controleer uw internetverbinding", - "enedis": "Enedis.fr antwoordde met een fout: probeer het later opnieuw (meestal niet tussen 23.00 en 02.00 uur)", - "unknown": "Onbekende fout: probeer het later opnieuw (meestal niet tussen 23.00 en 02.00 uur)", - "wrong_login": "Aanmeldingsfout: controleer uw e-mailadres en wachtwoord" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "E-mail" - }, - "description": "Voer uw gegevens in", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/nn.json b/homeassistant/components/linky/.translations/nn.json deleted file mode 100644 index 6e084d1a9d2..00000000000 --- a/homeassistant/components/linky/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/no.json b/homeassistant/components/linky/.translations/no.json deleted file mode 100644 index 77b3bac8032..00000000000 --- a/homeassistant/components/linky/.translations/no.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontoen er allerede konfigurert" - }, - "error": { - "access": "Kunne ikke f\u00e5 tilgang til Enedis.fr, vennligst sjekk internettforbindelsen din", - "enedis": "Enedis.fr svarte med en feil: vennligst pr\u00f8v p\u00e5 nytt senere (vanligvis ikke mellom 23:00 og 02:00)", - "unknown": "Ukjent feil: pr\u00f8v p\u00e5 nytt senere (vanligvis ikke mellom 23:00 og 02:00)", - "wrong_login": "Innloggingsfeil: vennligst sjekk e-postadressen og passordet ditt" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "E-post" - }, - "description": "Skriv inn legitimasjonen din", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/pl.json b/homeassistant/components/linky/.translations/pl.json deleted file mode 100644 index 62da10e1c96..00000000000 --- a/homeassistant/components/linky/.translations/pl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Konto jest ju\u017c skonfigurowane." - }, - "error": { - "access": "Nie mo\u017cna uzyska\u0107 dost\u0119pu do Enedis.fr, sprawd\u017a po\u0142\u0105czenie internetowe", - "enedis": "Enedis.fr odpowiedzia\u0142 b\u0142\u0119dem: spr\u00f3buj ponownie p\u00f3\u017aniej (zwykle nie mi\u0119dzy 23:00, a 2:00)", - "unknown": "Nieznany b\u0142\u0105d: spr\u00f3buj ponownie p\u00f3\u017aniej (zwykle nie mi\u0119dzy godzin\u0105 23:00, a 2:00)", - "wrong_login": "B\u0142\u0105d logowania: sprawd\u017a adres e-mail i has\u0142o" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Adres e-mail" - }, - "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/pt-BR.json b/homeassistant/components/linky/.translations/pt-BR.json deleted file mode 100644 index 9a4a710e522..00000000000 --- a/homeassistant/components/linky/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "wrong_login": "Erro de Login: por favor, verifique seu e-mail e senha" - }, - "step": { - "user": { - "data": { - "password": "Senha", - "username": "E-mail" - }, - "description": "Insira suas credenciais", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/ru.json b/homeassistant/components/linky/.translations/ru.json deleted file mode 100644 index a868f9666c5..00000000000 --- a/homeassistant/components/linky/.translations/ru.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "error": { - "access": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a Enedis.fr, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443.", - "enedis": "Enedis.fr \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u043e\u0442\u0432\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 (\u043d\u0435 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0441 23:00 \u043f\u043e 2:00).", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 (\u043d\u0435 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0441 23:00 \u043f\u043e 2:00).", - "wrong_login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043f\u0430\u0440\u043e\u043b\u044c." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/sl.json b/homeassistant/components/linky/.translations/sl.json deleted file mode 100644 index 6ebe598e882..00000000000 --- a/homeassistant/components/linky/.translations/sl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ra\u010dun \u017ee nastavljen" - }, - "error": { - "access": "Do Enedis.fr ni bilo mogo\u010de dostopati, preverite internetno povezavo", - "enedis": "Enedis.fr je odgovoril z napako: poskusite pozneje (ponavadi med 23. in 2. uro)", - "unknown": "Neznana napaka: Prosimo, poskusite pozneje (obi\u010dajno ne med 23. in 2. uro)", - "wrong_login": "Napaka pri prijavi: preverite svoj e-po\u0161tni naslov in geslo" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "E-po\u0161tni naslov" - }, - "description": "Vnesite svoje poverilnice", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/sv.json b/homeassistant/components/linky/.translations/sv.json deleted file mode 100644 index 4880e065fa2..00000000000 --- a/homeassistant/components/linky/.translations/sv.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontot har redan konfigurerats." - }, - "error": { - "access": "Det gick inte att komma \u00e5t Enedis.fr, kontrollera din internetanslutning", - "enedis": "Enedis.fr svarade med ett fel: f\u00f6rs\u00f6k igen senare (vanligtvis inte mellan 23:00 och 02:00)", - "unknown": "Ok\u00e4nt fel: f\u00f6rs\u00f6k igen senare (vanligtvis inte mellan 23:00 och 02:00)", - "wrong_login": "Inloggningsfel: v\u00e4nligen kontrollera din e-post och l\u00f6senord" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "E-post" - }, - "description": "Ange dina autentiseringsuppgifter", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/zh-Hant.json b/homeassistant/components/linky/.translations/zh-Hant.json deleted file mode 100644 index 92ad3ef0ca1..00000000000 --- a/homeassistant/components/linky/.translations/zh-Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "access": "\u7121\u6cd5\u8a2a\u554f Enedis.fr\uff0c\u8acb\u6aa2\u67e5\u60a8\u7684\u7db2\u969b\u7db2\u8def\u9023\u7dda", - "enedis": "Endis.fr \u56de\u5831\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66\uff08\u901a\u5e38\u907f\u958b\u591c\u9593 11 - \u51cc\u6668 2 \u9ede\u4e4b\u9593\uff09", - "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66\uff08\u901a\u5e38\u907f\u958b\u591c\u9593 11 - \u51cc\u6668 2 \u9ede\u4e4b\u9593\uff09", - "wrong_login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u79d8\u5bc6\u6b63\u78ba\u6027" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u96fb\u5b50\u90f5\u4ef6" - }, - "description": "\u8f38\u5165\u6191\u8b49", - "title": "Linky" - } - }, - "title": "Linky" - } -} \ No newline at end of file diff --git a/homeassistant/components/linky/manifest.json b/homeassistant/components/linky/manifest.json index e93d124dbda..18ee74a78ce 100644 --- a/homeassistant/components/linky/manifest.json +++ b/homeassistant/components/linky/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/linky", "requirements": ["pylinky==0.4.0"], - "dependencies": [], "codeowners": ["@Quentame"] } diff --git a/homeassistant/components/linky/sensor.py b/homeassistant/components/linky/sensor.py index 846b7eeb99f..7e9da01eb9a 100644 --- a/homeassistant/components/linky/sensor.py +++ b/homeassistant/components/linky/sensor.py @@ -159,4 +159,4 @@ class LinkySensor(Entity): year_index = INDEX_CURRENT if self._time.endswith("Dec"): year_index = INDEX_LAST - self._time += " " + self._account.data[YEARLY][year_index][TIME] + self._time += f" {self._account.data[YEARLY][year_index][TIME]}" diff --git a/homeassistant/components/linky/strings.json b/homeassistant/components/linky/strings.json index dc4c0bb9651..7770ce3d0ee 100644 --- a/homeassistant/components/linky/strings.json +++ b/homeassistant/components/linky/strings.json @@ -1,24 +1,18 @@ { - "config": { + "config": { + "step": { + "user": { "title": "Linky", - "step": { - "user": { - "title": "Linky", - "description": "Enter your credentials", - "data": { - "username": "Email", - "password": "Password" - } - } - }, - "error":{ - "access": "Could not access to Enedis.fr, please check your internet connection", - "enedis": "Enedis.fr answered with an error: please retry later (usually not between 11PM and 2AM)", - "wrong_login": "Login error: please check your email & password", - "unknown": "Unknown error: please retry later (usually not between 11PM and 2AM)" - }, - "abort":{ - "already_configured": "Account already configured" - } - } + "description": "Enter your credentials", + "data": { "username": "Email", "password": "Password" } + } + }, + "error": { + "access": "Could not access to Enedis.fr, please check your internet connection", + "enedis": "Enedis.fr answered with an error: please retry later (usually not between 11PM and 2AM)", + "wrong_login": "Login error: please check your email & password", + "unknown": "Unknown error: please retry later (usually not between 11PM and 2AM)" + }, + "abort": { "already_configured": "Account already configured" } + } } diff --git a/homeassistant/components/linky/translations/bg.json b/homeassistant/components/linky/translations/bg.json new file mode 100644 index 00000000000..dd337013f59 --- /dev/null +++ b/homeassistant/components/linky/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "error": { + "access": "\u041d\u044f\u043c\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e Enedis.fr, \u043c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u043e\u0441\u0442\u0442\u0430 \u0441\u0438", + "enedis": "Enedis.fr \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u0438 \u0441 \u0433\u0440\u0435\u0448\u043a\u0430: \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043f\u043e-\u043a\u044a\u0441\u043d\u043e (\u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u043e \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 23:00 \u0438 02:00)", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430: \u043c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043f\u043e-\u043a\u044a\u0441\u043d\u043e (\u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u043e \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 23:00 \u0438 02:00)", + "wrong_login": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0432\u043b\u0438\u0437\u0430\u043d\u0435: \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0438\u043c\u0435\u0439\u043b\u0430 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430\u0442\u0430 \u0441\u0438" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "E-mail" + }, + "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u043d\u0434\u0435\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438\u0442\u0435 \u0441\u0438 \u0434\u0430\u043d\u043d\u0438", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/ca.json b/homeassistant/components/linky/translations/ca.json new file mode 100644 index 00000000000..127d2870ae7 --- /dev/null +++ b/homeassistant/components/linky/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "El compte ja ha estat configurat" + }, + "error": { + "access": "No s'ha pogut accedir a Enedis.fr, comprova la teva connexi\u00f3 a Internet", + "enedis": "Enedis.fr ha respost amb un error: torna-ho a provar m\u00e9s tard (millo no entre les 23:00 i les 14:00)", + "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard (millor no entre les 23:00 i les 14:00)", + "wrong_login": "Error d\u2019inici de sessi\u00f3: comprova el teu correu electr\u00f2nic i la contrasenya" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Correu electr\u00f2nic" + }, + "description": "Introdueix les teves credencials", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/cs.json b/homeassistant/components/linky/translations/cs.json similarity index 100% rename from homeassistant/components/linky/.translations/cs.json rename to homeassistant/components/linky/translations/cs.json diff --git a/homeassistant/components/linky/translations/da.json b/homeassistant/components/linky/translations/da.json new file mode 100644 index 00000000000..2fa885d1ffa --- /dev/null +++ b/homeassistant/components/linky/translations/da.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigureret" + }, + "error": { + "access": "Kunne ikke f\u00e5 adgang til Enedis.fr, kontroller din internetforbindelse", + "enedis": "Enedis.fr svarede med en fejl: Pr\u00f8v igen senere (normalt ikke mellem 23:00 og 02:00)", + "unknown": "Ukendt fejl: Pr\u00f8v igen senere (normalt ikke mellem 23:00 og 02:00)", + "wrong_login": "Loginfejl: Kontroller din e-mail og adgangskode" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "E-mail" + }, + "description": "Indtast dine legitimationsoplysninger", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/de.json b/homeassistant/components/linky/translations/de.json new file mode 100644 index 00000000000..c1f06d34a8f --- /dev/null +++ b/homeassistant/components/linky/translations/de.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Konto bereits konfiguriert" + }, + "error": { + "access": "Konnte nicht auf Enedis.fr zugreifen, \u00fcberpr\u00fcfe bitte die Internetverbindung", + "enedis": "Enedis.fr antwortete mit einem Fehler: wiederhole den Vorgang sp\u00e4ter (in der Regel nicht zwischen 23 Uhr und 2 Uhr morgens)", + "unknown": "Unbekannter Fehler: Wiederhole den Vorgang sp\u00e4ter (in der Regel nicht zwischen 23 Uhr und 2 Uhr morgens)", + "wrong_login": "Login-Fehler: Pr\u00fcfe bitte E-Mail & Passwort" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "E-Mail" + }, + "description": "Gib deine Zugangsdaten ein", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/en.json b/homeassistant/components/linky/translations/en.json new file mode 100644 index 00000000000..512c0567444 --- /dev/null +++ b/homeassistant/components/linky/translations/en.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Account already configured" + }, + "error": { + "access": "Could not access to Enedis.fr, please check your internet connection", + "enedis": "Enedis.fr answered with an error: please retry later (usually not between 11PM and 2AM)", + "unknown": "Unknown error: please retry later (usually not between 11PM and 2AM)", + "wrong_login": "Login error: please check your email & password" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Email" + }, + "description": "Enter your credentials", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/es-419.json b/homeassistant/components/linky/translations/es-419.json new file mode 100644 index 00000000000..ff559803e06 --- /dev/null +++ b/homeassistant/components/linky/translations/es-419.json @@ -0,0 +1,20 @@ +{ + "config": { + "error": { + "access": "No se pudo acceder a Enedis.fr, compruebe su conexi\u00f3n a Internet.", + "enedis": "Enedis.fr respondi\u00f3 con un error: vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 11 p.m. y las 2 a.m.)", + "unknown": "Error desconocido: por favor, vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 11 p.m. y las 2 a.m.)", + "wrong_login": "Error de inicio de sesi\u00f3n: por favor revise su direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Correo electr\u00f3nico" + }, + "description": "Ingrese sus credenciales", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/es.json b/homeassistant/components/linky/translations/es.json new file mode 100644 index 00000000000..ef07dc2ca75 --- /dev/null +++ b/homeassistant/components/linky/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "La cuenta ya est\u00e1 configurada" + }, + "error": { + "access": "No se pudo acceder a Enedis.fr, comprueba tu conexi\u00f3n a Internet", + "enedis": "Enedis.fr respondi\u00f3 con un error: vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 11:00 y las 2 de la ma\u00f1ana)", + "unknown": "Error desconocido: por favor, vuelva a intentarlo m\u00e1s tarde (normalmente no entre las 23:00 y las 02:00 horas).", + "wrong_login": "Error de inicio de sesi\u00f3n: comprueba tu direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Correo electr\u00f3nico" + }, + "description": "Introduzca sus credenciales", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/fr.json b/homeassistant/components/linky/translations/fr.json new file mode 100644 index 00000000000..71dba36dbe8 --- /dev/null +++ b/homeassistant/components/linky/translations/fr.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Compte d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "access": "Impossible d'acc\u00e9der \u00e0 Enedis.fr, merci de v\u00e9rifier votre connexion internet", + "enedis": "Erreur d'Enedis.fr: merci de r\u00e9essayer plus tard (pas entre 23h et 2h)", + "unknown": "Erreur inconnue: merci de r\u00e9essayer plus tard (pas entre 23h et 2h)", + "wrong_login": "Erreur de connexion: veuillez v\u00e9rifier votre e-mail et votre mot de passe" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Email" + }, + "description": "Entrez vos identifiants", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/hu.json b/homeassistant/components/linky/translations/hu.json similarity index 100% rename from homeassistant/components/linky/.translations/hu.json rename to homeassistant/components/linky/translations/hu.json diff --git a/homeassistant/components/linky/translations/it.json b/homeassistant/components/linky/translations/it.json new file mode 100644 index 00000000000..ff5e226dcbe --- /dev/null +++ b/homeassistant/components/linky/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Account gi\u00e0 configurato" + }, + "error": { + "access": "Impossibile accedere a Enedis.fr, si prega di controllare la connessione internet", + "enedis": "Enedis.fr ha risposto con un errore: si prega di riprovare pi\u00f9 tardi (di solito non tra le 23:00 e le 02:00).", + "unknown": "Errore sconosciuto: riprova pi\u00f9 tardi (in genere non tra le 23:00 e le 02:00)", + "wrong_login": "Errore di accesso: si prega di controllare la tua E-mail e la password" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "E-mail" + }, + "description": "Inserisci le tue credenziali", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/ko.json b/homeassistant/components/linky/translations/ko.json new file mode 100644 index 00000000000..cd83aad724f --- /dev/null +++ b/homeassistant/components/linky/translations/ko.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "access": "Enedis.fr \uc5d0 \uc811\uc18d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc778\ud130\ub137 \uc5f0\uacb0\uc744 \ud655\uc778\ud574\ubcf4\uc138\uc694", + "enedis": "Enedis.fr \uc774 \uc624\ub958\ub85c \uc751\ub2f5\ud588\uc2b5\ub2c8\ub2e4: \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694 (\uc800\ub141 11\uc2dc \ubd80\ud130 \uc0c8\ubcbd 2\uc2dc\ub294 \ud53c\ud574\uc8fc\uc138\uc694)", + "unknown": "\uc54c \uc218\uc5c6\ub294 \uc624\ub958: \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694 (\uc800\ub141 11\uc2dc \ubd80\ud130 \uc0c8\ubcbd 2\uc2dc\ub294 \ud53c\ud574\uc8fc\uc138\uc694)", + "wrong_login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc774\uba54\uc77c \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc774\uba54\uc77c" + }, + "description": "\uc790\uaca9 \uc99d\uba85\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/lb.json b/homeassistant/components/linky/translations/lb.json new file mode 100644 index 00000000000..091a3b8d699 --- /dev/null +++ b/homeassistant/components/linky/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Kont ass scho konfigur\u00e9iert" + }, + "error": { + "access": "Keng Verbindung zu Enedis.fr, iwwerpr\u00e9ift d'Internet Verbindung", + "enedis": "Enedis.fr huet mat engem Feeler ge\u00e4ntwert: prob\u00e9iert sp\u00e9ider nach emol (normalerweis net t\u00ebscht 23h00 an 2h00)", + "unknown": "Onbekannte Feeler: prob\u00e9iert sp\u00e9ider nach emol (normalerweis net t\u00ebscht 23h00 an 2h00)", + "wrong_login": "Feeler beim Login: iwwerpr\u00e9ift \u00e4r E-Mail & Passwuert" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "E-Mail" + }, + "description": "F\u00ebllt \u00e4r Login Informatiounen aus", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/lv.json b/homeassistant/components/linky/translations/lv.json similarity index 100% rename from homeassistant/components/linky/.translations/lv.json rename to homeassistant/components/linky/translations/lv.json diff --git a/homeassistant/components/linky/translations/nl.json b/homeassistant/components/linky/translations/nl.json new file mode 100644 index 00000000000..2c05353be3f --- /dev/null +++ b/homeassistant/components/linky/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Account al geconfigureerd" + }, + "error": { + "access": "Geen toegang tot Enedis.fr, controleer uw internetverbinding", + "enedis": "Enedis.fr antwoordde met een fout: probeer het later opnieuw (meestal niet tussen 23.00 en 02.00 uur)", + "unknown": "Onbekende fout: probeer het later opnieuw (meestal niet tussen 23.00 en 02.00 uur)", + "wrong_login": "Aanmeldingsfout: controleer uw e-mailadres en wachtwoord" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "E-mail" + }, + "description": "Voer uw gegevens in", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/nn.json b/homeassistant/components/linky/translations/nn.json new file mode 100644 index 00000000000..6cdaaf837a4 --- /dev/null +++ b/homeassistant/components/linky/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/no.json b/homeassistant/components/linky/translations/no.json new file mode 100644 index 00000000000..b2c565e13df --- /dev/null +++ b/homeassistant/components/linky/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigurert" + }, + "error": { + "access": "Kunne ikke f\u00e5 tilgang til Enedis.fr, vennligst sjekk internettforbindelsen din", + "enedis": "Enedis.fr svarte med en feil: vennligst pr\u00f8v p\u00e5 nytt senere (vanligvis ikke mellom 23:00 og 02:00)", + "unknown": "Ukjent feil: pr\u00f8v p\u00e5 nytt senere (vanligvis ikke mellom 23:00 og 02:00)", + "wrong_login": "Innloggingsfeil: vennligst sjekk e-postadressen og passordet ditt" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "E-post" + }, + "description": "Skriv inn legitimasjonen din", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/pl.json b/homeassistant/components/linky/translations/pl.json new file mode 100644 index 00000000000..1fc09298fd7 --- /dev/null +++ b/homeassistant/components/linky/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Konto jest ju\u017c skonfigurowane." + }, + "error": { + "access": "Nie mo\u017cna uzyska\u0107 dost\u0119pu do Enedis.fr, sprawd\u017a po\u0142\u0105czenie internetowe", + "enedis": "Enedis.fr odpowiedzia\u0142 b\u0142\u0119dem: spr\u00f3buj ponownie p\u00f3\u017aniej (zwykle nie mi\u0119dzy 23:00, a 2:00)", + "unknown": "Nieznany b\u0142\u0105d: spr\u00f3buj ponownie p\u00f3\u017aniej (zwykle nie mi\u0119dzy godzin\u0105 23:00, a 2:00)", + "wrong_login": "B\u0142\u0105d logowania: sprawd\u017a adres e-mail i has\u0142o" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Adres e-mail" + }, + "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/pt-BR.json b/homeassistant/components/linky/translations/pt-BR.json new file mode 100644 index 00000000000..bf2bc7070ae --- /dev/null +++ b/homeassistant/components/linky/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "wrong_login": "Erro de Login: por favor, verifique seu e-mail e senha" + }, + "step": { + "user": { + "data": { + "password": "Senha", + "username": "E-mail" + }, + "description": "Insira suas credenciais", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/pt.json b/homeassistant/components/linky/translations/pt.json similarity index 100% rename from homeassistant/components/linky/.translations/pt.json rename to homeassistant/components/linky/translations/pt.json diff --git a/homeassistant/components/linky/translations/ru.json b/homeassistant/components/linky/translations/ru.json new file mode 100644 index 00000000000..65e0269967a --- /dev/null +++ b/homeassistant/components/linky/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "error": { + "access": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a Enedis.fr, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443.", + "enedis": "Enedis.fr \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u043e\u0442\u0432\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 (\u043d\u0435 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0441 23:00 \u043f\u043e 2:00).", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 (\u043d\u0435 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0441 23:00 \u043f\u043e 2:00).", + "wrong_login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043f\u0430\u0440\u043e\u043b\u044c." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/sl.json b/homeassistant/components/linky/translations/sl.json new file mode 100644 index 00000000000..3df56ac5bbb --- /dev/null +++ b/homeassistant/components/linky/translations/sl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ra\u010dun \u017ee nastavljen" + }, + "error": { + "access": "Do Enedis.fr ni bilo mogo\u010de dostopati, preverite internetno povezavo", + "enedis": "Enedis.fr je odgovoril z napako: poskusite pozneje (ponavadi med 23. in 2. uro)", + "unknown": "Neznana napaka: Prosimo, poskusite pozneje (obi\u010dajno ne med 23. in 2. uro)", + "wrong_login": "Napaka pri prijavi: preverite svoj e-po\u0161tni naslov in geslo" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "E-po\u0161tni naslov" + }, + "description": "Vnesite svoje poverilnice", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/translations/sv.json b/homeassistant/components/linky/translations/sv.json new file mode 100644 index 00000000000..2d8c2b7177a --- /dev/null +++ b/homeassistant/components/linky/translations/sv.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Kontot har redan konfigurerats." + }, + "error": { + "access": "Det gick inte att komma \u00e5t Enedis.fr, kontrollera din internetanslutning", + "enedis": "Enedis.fr svarade med ett fel: f\u00f6rs\u00f6k igen senare (vanligtvis inte mellan 23:00 och 02:00)", + "unknown": "Ok\u00e4nt fel: f\u00f6rs\u00f6k igen senare (vanligtvis inte mellan 23:00 och 02:00)", + "wrong_login": "Inloggningsfel: v\u00e4nligen kontrollera din e-post och l\u00f6senord" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "E-post" + }, + "description": "Ange dina autentiseringsuppgifter", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linky/.translations/zh-Hans.json b/homeassistant/components/linky/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/linky/.translations/zh-Hans.json rename to homeassistant/components/linky/translations/zh-Hans.json diff --git a/homeassistant/components/linky/translations/zh-Hant.json b/homeassistant/components/linky/translations/zh-Hant.json new file mode 100644 index 00000000000..7a28dd692f6 --- /dev/null +++ b/homeassistant/components/linky/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "access": "\u7121\u6cd5\u8a2a\u554f Enedis.fr\uff0c\u8acb\u6aa2\u67e5\u60a8\u7684\u7db2\u969b\u7db2\u8def\u9023\u7dda", + "enedis": "Endis.fr \u56de\u5831\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66\uff08\u901a\u5e38\u907f\u958b\u591c\u9593 11 - \u51cc\u6668 2 \u9ede\u4e4b\u9593\uff09", + "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66\uff08\u901a\u5e38\u907f\u958b\u591c\u9593 11 - \u51cc\u6668 2 \u9ede\u4e4b\u9593\uff09", + "wrong_login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u5bc6\u78bc" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u96fb\u5b50\u90f5\u4ef6" + }, + "description": "\u8f38\u5165\u6191\u8b49", + "title": "Linky" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/linode/manifest.json b/homeassistant/components/linode/manifest.json index 5f486a44fa0..dbc1a6fb8aa 100644 --- a/homeassistant/components/linode/manifest.json +++ b/homeassistant/components/linode/manifest.json @@ -3,6 +3,5 @@ "name": "Linode", "documentation": "https://www.home-assistant.io/integrations/linode", "requirements": ["linode-api==4.1.9b1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/linux_battery/manifest.json b/homeassistant/components/linux_battery/manifest.json index 3bed6ee598a..1f242dd791b 100644 --- a/homeassistant/components/linux_battery/manifest.json +++ b/homeassistant/components/linux_battery/manifest.json @@ -3,6 +3,5 @@ "name": "Linux Battery", "documentation": "https://www.home-assistant.io/integrations/linux_battery", "requirements": ["batinfo==0.4.2"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/lirc/manifest.json b/homeassistant/components/lirc/manifest.json index 45a659b4ba2..16f2445d840 100644 --- a/homeassistant/components/lirc/manifest.json +++ b/homeassistant/components/lirc/manifest.json @@ -3,6 +3,5 @@ "name": "LIRC", "documentation": "https://www.home-assistant.io/integrations/lirc", "requirements": ["python-lirc==1.2.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/litejet/manifest.json b/homeassistant/components/litejet/manifest.json index eb80539a2ad..1e469370b43 100644 --- a/homeassistant/components/litejet/manifest.json +++ b/homeassistant/components/litejet/manifest.json @@ -3,6 +3,5 @@ "name": "LiteJet", "documentation": "https://www.home-assistant.io/integrations/litejet", "requirements": ["pylitejet==0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/litejet/scene.py b/homeassistant/components/litejet/scene.py index 12ace3145a1..466ca7296f8 100644 --- a/homeassistant/components/litejet/scene.py +++ b/homeassistant/components/litejet/scene.py @@ -1,5 +1,6 @@ """Support for LiteJet scenes.""" import logging +from typing import Any from homeassistant.components import litejet from homeassistant.components.scene import Scene @@ -40,6 +41,6 @@ class LiteJetScene(Scene): """Return the device-specific state attributes.""" return {ATTR_NUMBER: self._index} - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self._lj.activate_scene(self._index) diff --git a/homeassistant/components/llamalab_automate/manifest.json b/homeassistant/components/llamalab_automate/manifest.json index 6fd6c30401f..777696f5c75 100644 --- a/homeassistant/components/llamalab_automate/manifest.json +++ b/homeassistant/components/llamalab_automate/manifest.json @@ -2,7 +2,5 @@ "domain": "llamalab_automate", "name": "LlamaLab Automate", "documentation": "https://www.home-assistant.io/integrations/llamalab_automate", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/llamalab_automate/notify.py b/homeassistant/components/llamalab_automate/notify.py index 5a3d4e0df38..f093edbbc6b 100644 --- a/homeassistant/components/llamalab_automate/notify.py +++ b/homeassistant/components/llamalab_automate/notify.py @@ -5,7 +5,7 @@ import requests import voluptuous as vol from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService -from homeassistant.const import CONF_API_KEY, CONF_DEVICE +from homeassistant.const import CONF_API_KEY, CONF_DEVICE, HTTP_OK from homeassistant.helpers import config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -51,5 +51,5 @@ class AutomateNotificationService(BaseNotificationService): } response = requests.post(_RESOURCE, json=data) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.error("Error sending message: %s", response) diff --git a/homeassistant/components/local_file/manifest.json b/homeassistant/components/local_file/manifest.json index f4773fac863..d7ec1280186 100644 --- a/homeassistant/components/local_file/manifest.json +++ b/homeassistant/components/local_file/manifest.json @@ -2,7 +2,5 @@ "domain": "local_file", "name": "Local File", "documentation": "https://www.home-assistant.io/integrations/local_file", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/local_file/services.yaml b/homeassistant/components/local_file/services.yaml index b8c615f3335..9430c02c0e6 100644 --- a/homeassistant/components/local_file/services.yaml +++ b/homeassistant/components/local_file/services.yaml @@ -3,7 +3,7 @@ update_file_path: fields: entity_id: description: Name of the entity_id of the camera to update. - example: 'camera.local_file' + example: "camera.local_file" file_path: description: The full path to the new image file to be displayed. - example: '/config/www/images/image.jpg' + example: "/config/www/images/image.jpg" diff --git a/homeassistant/components/local_ip/.translations/ca.json b/homeassistant/components/local_ip/.translations/ca.json deleted file mode 100644 index b2b7ee89c16..00000000000 --- a/homeassistant/components/local_ip/.translations/ca.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integraci\u00f3 ja configurada amb un sensor amb aquest nom" - }, - "step": { - "user": { - "data": { - "name": "Nom del sensor" - }, - "title": "Adre\u00e7a IP local" - } - }, - "title": "Adre\u00e7a IP local" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/da.json b/homeassistant/components/local_ip/.translations/da.json deleted file mode 100644 index c0396ccb182..00000000000 --- a/homeassistant/components/local_ip/.translations/da.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integration er allerede konfigureret med en eksisterende sensor med det navn" - }, - "step": { - "user": { - "data": { - "name": "Sensornavn" - }, - "title": "Lokal IP-adresse" - } - }, - "title": "Lokal IP-adresse" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/de.json b/homeassistant/components/local_ip/.translations/de.json deleted file mode 100644 index c7a993bdef9..00000000000 --- a/homeassistant/components/local_ip/.translations/de.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integration ist bereits mit einem vorhandenen Sensor mit diesem Namen konfiguriert" - }, - "step": { - "user": { - "data": { - "name": "Sensorname" - }, - "title": "Lokale IP-Adresse" - } - }, - "title": "Lokale IP-Adresse" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/en.json b/homeassistant/components/local_ip/.translations/en.json deleted file mode 100644 index 869bb5a23d5..00000000000 --- a/homeassistant/components/local_ip/.translations/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integration is already configured with an existing sensor with that name" - }, - "step": { - "user": { - "data": { - "name": "Sensor Name" - }, - "title": "Local IP Address" - } - }, - "title": "Local IP Address" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/es.json b/homeassistant/components/local_ip/.translations/es.json deleted file mode 100644 index a18c809de85..00000000000 --- a/homeassistant/components/local_ip/.translations/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La integraci\u00f3n ya est\u00e1 configurada con un sensor existente con ese nombre" - }, - "step": { - "user": { - "data": { - "name": "Nombre del sensor" - }, - "title": "Direcci\u00f3n IP local" - } - }, - "title": "Direcci\u00f3n IP local" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/fr.json b/homeassistant/components/local_ip/.translations/fr.json deleted file mode 100644 index 0d3c61c385b..00000000000 --- a/homeassistant/components/local_ip/.translations/fr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'int\u00e9gration est d\u00e9j\u00e0 configur\u00e9e avec un capteur existant portant ce nom" - }, - "step": { - "user": { - "data": { - "name": "Nom du capteur" - }, - "title": "Adresse IP locale" - } - }, - "title": "Adresse IP locale" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/hu.json b/homeassistant/components/local_ip/.translations/hu.json deleted file mode 100644 index 7a78029c379..00000000000 --- a/homeassistant/components/local_ip/.translations/hu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Az integr\u00e1ci\u00f3 m\u00e1r konfigur\u00e1lva van egy ilyen nev\u0171 l\u00e9tez\u0151 \u00e9rz\u00e9kel\u0151vel" - }, - "step": { - "user": { - "data": { - "name": "\u00c9rz\u00e9kel\u0151 neve" - }, - "title": "Helyi IP c\u00edm" - } - }, - "title": "Helyi IP c\u00edm" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/it.json b/homeassistant/components/local_ip/.translations/it.json deleted file mode 100644 index a33e892c6ec..00000000000 --- a/homeassistant/components/local_ip/.translations/it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'integrazione \u00e8 gi\u00e0 configurata con un sensore esistente con questo nome" - }, - "step": { - "user": { - "data": { - "name": "Nome del sensore" - }, - "title": "Indirizzo IP locale" - } - }, - "title": "Indirizzo IP locale" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/ko.json b/homeassistant/components/local_ip/.translations/ko.json deleted file mode 100644 index a00a130bfca..00000000000 --- a/homeassistant/components/local_ip/.translations/ko.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uac00 \uc774\ubbf8 \ud574\ub2f9 \uc774\ub984\uc758 \uc13c\uc11c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "name": "\uc13c\uc11c \uc774\ub984" - }, - "title": "\ub85c\uceec IP \uc8fc\uc18c" - } - }, - "title": "\ub85c\uceec IP \uc8fc\uc18c" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/lb.json b/homeassistant/components/local_ip/.translations/lb.json deleted file mode 100644 index aa249f184ce..00000000000 --- a/homeassistant/components/local_ip/.translations/lb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integratioun ass scho konfigur\u00e9iert mat engem Sensor mat deem Numm" - }, - "step": { - "user": { - "data": { - "name": "Numm vum Sensor" - }, - "title": "Lokal IP Adresse" - } - }, - "title": "Lokal IP Adresse" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/nl.json b/homeassistant/components/local_ip/.translations/nl.json deleted file mode 100644 index 6f22d2c585a..00000000000 --- a/homeassistant/components/local_ip/.translations/nl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integratie is al geconfigureerd met een bestaande sensor met die naam" - }, - "step": { - "user": { - "data": { - "name": "Sensor Naam" - }, - "title": "Lokaal IP-adres" - } - }, - "title": "Lokaal IP-adres" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/no.json b/homeassistant/components/local_ip/.translations/no.json deleted file mode 100644 index 2427a7ae50d..00000000000 --- a/homeassistant/components/local_ip/.translations/no.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integrasjonen er allerede konfigurert med en eksisterende sensor med det navnet" - }, - "step": { - "user": { - "data": { - "name": "Sensornavn" - }, - "title": "Lokal IP-adresse" - } - }, - "title": "Lokal IP-adresse" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/pl.json b/homeassistant/components/local_ip/.translations/pl.json deleted file mode 100644 index 82b614a8e17..00000000000 --- a/homeassistant/components/local_ip/.translations/pl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integracja jest ju\u017c skonfigurowana z istniej\u0105cym sensorem o tej nazwie." - }, - "step": { - "user": { - "data": { - "name": "Nazwa sensora" - }, - "title": "Lokalny adres IP" - } - }, - "title": "Lokalny adres IP" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/pt-BR.json b/homeassistant/components/local_ip/.translations/pt-BR.json deleted file mode 100644 index 3aea4075456..00000000000 --- a/homeassistant/components/local_ip/.translations/pt-BR.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A integra\u00e7\u00e3o j\u00e1 est\u00e1 configurada com um sensor existente com esse nome" - }, - "step": { - "user": { - "data": { - "name": "Nome do sensor" - }, - "title": "Endere\u00e7o IP local" - } - }, - "title": "Endere\u00e7o IP local" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/ru.json b/homeassistant/components/local_ip/.translations/ru.json deleted file mode 100644 index 2cf8791e505..00000000000 --- a/homeassistant/components/local_ip/.translations/ru.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c." - }, - "step": { - "user": { - "data": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "title": "\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441" - } - }, - "title": "\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/sl.json b/homeassistant/components/local_ip/.translations/sl.json deleted file mode 100644 index 23894b20c9c..00000000000 --- a/homeassistant/components/local_ip/.translations/sl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integracija je \u017ee konfigurirana z obstoje\u010dim senzorjem s tem imenom" - }, - "step": { - "user": { - "data": { - "name": "Ime tipala" - }, - "title": "Lokalni IP naslov" - } - }, - "title": "Lokalni IP naslov" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/sv.json b/homeassistant/components/local_ip/.translations/sv.json deleted file mode 100644 index d9f9b474f9c..00000000000 --- a/homeassistant/components/local_ip/.translations/sv.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integrationen \u00e4r redan konfigurerad med en befintlig sensor med det namnet" - }, - "step": { - "user": { - "data": { - "name": "Sensor Namn" - }, - "title": "Lokal IP-adress" - } - }, - "title": "Lokal IP-adress" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/.translations/zh-Hant.json b/homeassistant/components/local_ip/.translations/zh-Hant.json deleted file mode 100644 index ec50980b6ea..00000000000 --- a/homeassistant/components/local_ip/.translations/zh-Hant.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6574\u5408\u5df2\u7d93\u8a2d\u5b9a\u4e26\u6709\u73fe\u6709\u50b3\u611f\u5668\u4f7f\u7528\u76f8\u540c\u540d\u7a31" - }, - "step": { - "user": { - "data": { - "name": "\u50b3\u611f\u5668\u540d\u7a31" - }, - "title": "\u672c\u5730 IP \u4f4d\u5740" - } - }, - "title": "\u672c\u5730 IP \u4f4d\u5740" - } -} \ No newline at end of file diff --git a/homeassistant/components/local_ip/__init__.py b/homeassistant/components/local_ip/__init__.py index c93b7a5a81b..f787c028762 100644 --- a/homeassistant/components/local_ip/__init__.py +++ b/homeassistant/components/local_ip/__init__.py @@ -1,16 +1,20 @@ """Get the local IP address of the Home Assistant instance.""" import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv -DOMAIN = "local_ip" -PLATFORM = "sensor" +from .const import DOMAIN, PLATFORM CONFIG_SCHEMA = vol.Schema( - {DOMAIN: vol.Schema({vol.Optional(CONF_NAME, default=DOMAIN): cv.string})}, + { + DOMAIN: vol.All( + cv.deprecated(CONF_NAME, invalidation_version="0.110"), + vol.Schema({vol.Optional(CONF_NAME, default=DOMAIN): cv.string}), + ) + }, extra=vol.ALLOW_EXTRA, ) @@ -21,14 +25,14 @@ async def async_setup(hass: HomeAssistant, config: dict): if conf: hass.async_create_task( hass.config_entries.flow.async_init( - DOMAIN, data=conf, context={"source": config_entries.SOURCE_IMPORT} + DOMAIN, data=conf, context={"source": SOURCE_IMPORT} ) ) return True -async def async_setup_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry): +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up local_ip from a config entry.""" hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, PLATFORM) @@ -37,6 +41,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: config_entries.ConfigEnt return True -async def async_unload_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry): +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): """Unload a config entry.""" return await hass.config_entries.async_forward_entry_unload(entry, PLATFORM) diff --git a/homeassistant/components/local_ip/config_flow.py b/homeassistant/components/local_ip/config_flow.py index 58a666a68f3..7d563cae7c4 100644 --- a/homeassistant/components/local_ip/config_flow.py +++ b/homeassistant/components/local_ip/config_flow.py @@ -1,9 +1,8 @@ """Config flow for local_ip.""" -import voluptuous as vol from homeassistant import config_entries -from . import DOMAIN +from .const import DOMAIN class SimpleConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @@ -14,20 +13,14 @@ class SimpleConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user(self, user_input=None): """Handle the initial step.""" - if user_input is not None: - if any( - user_input["name"] == entry.data["name"] - for entry in self._async_current_entries() - ): - return self.async_abort(reason="already_configured") - return self.async_create_entry(title=user_input["name"], data=user_input) + if self._async_current_entries(): + return self.async_abort(reason="single_instance_allowed") - return self.async_show_form( - step_id="user", - data_schema=vol.Schema({vol.Required("name", default=DOMAIN): str}), - errors={}, - ) + if user_input is None: + return self.async_show_form(step_id="user") + + return self.async_create_entry(title=DOMAIN, data=user_input) async def async_step_import(self, import_info): """Handle import from config file.""" diff --git a/homeassistant/components/local_ip/const.py b/homeassistant/components/local_ip/const.py new file mode 100644 index 00000000000..e18246a9730 --- /dev/null +++ b/homeassistant/components/local_ip/const.py @@ -0,0 +1,6 @@ +"""Local IP constants.""" + +DOMAIN = "local_ip" +PLATFORM = "sensor" + +SENSOR = "address" diff --git a/homeassistant/components/local_ip/manifest.json b/homeassistant/components/local_ip/manifest.json index 4e97c32afa0..62c862e33c8 100644 --- a/homeassistant/components/local_ip/manifest.json +++ b/homeassistant/components/local_ip/manifest.json @@ -3,7 +3,5 @@ "name": "Local IP Address", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/local_ip", - "dependencies": [], - "codeowners": ["@issacg"], - "requirements": [] + "codeowners": ["@issacg"] } diff --git a/homeassistant/components/local_ip/sensor.py b/homeassistant/components/local_ip/sensor.py index 274a11faec6..d159b641fa2 100644 --- a/homeassistant/components/local_ip/sensor.py +++ b/homeassistant/components/local_ip/sensor.py @@ -1,20 +1,22 @@ """Sensor platform for local_ip.""" -from homeassistant.core import HomeAssistant +from homeassistant.const import CONF_NAME from homeassistant.helpers.entity import Entity from homeassistant.util import get_local_ip +from .const import DOMAIN, SENSOR -async def async_setup_entry(hass: HomeAssistant, config_entry, async_add_entities): + +async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the platform from config_entry.""" - name = config_entry.data["name"] + name = config_entry.data.get(CONF_NAME) or DOMAIN async_add_entities([IPSensor(name)], True) class IPSensor(Entity): """A simple sensor.""" - def __init__(self, name: str): + def __init__(self, name): """Initialize the sensor.""" self._state = None self._name = name @@ -24,11 +26,21 @@ class IPSensor(Entity): """Return the name of the sensor.""" return self._name + @property + def unique_id(self): + """Return the unique id of the sensor.""" + return SENSOR + @property def state(self): """Return the state of the sensor.""" return self._state + @property + def icon(self): + """Return the icon of the sensor.""" + return "mdi:ip" + def update(self): """Fetch new state data for the sensor.""" self._state = get_local_ip() diff --git a/homeassistant/components/local_ip/strings.json b/homeassistant/components/local_ip/strings.json index 43a88be3325..2c571be1a0a 100644 --- a/homeassistant/components/local_ip/strings.json +++ b/homeassistant/components/local_ip/strings.json @@ -1,6 +1,6 @@ { + "title": "Local IP Address", "config": { - "title": "Local IP Address", "step": { "user": { "title": "Local IP Address", @@ -10,7 +10,7 @@ } }, "abort": { - "already_configured": "Integration is already configured with an existing sensor with that name" + "single_instance_allowed": "Only a single configuration of Local IP is allowed." } } } diff --git a/homeassistant/components/local_ip/translations/ca.json b/homeassistant/components/local_ip/translations/ca.json new file mode 100644 index 00000000000..e0df6934361 --- /dev/null +++ b/homeassistant/components/local_ip/translations/ca.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Nom\u00e9s \u00e9s possible configurar una sola IP local." + }, + "step": { + "user": { + "data": { + "name": "Nom del sensor" + }, + "title": "Adre\u00e7a IP local" + } + } + }, + "title": "Adre\u00e7a IP local" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/da.json b/homeassistant/components/local_ip/translations/da.json new file mode 100644 index 00000000000..eebf7c1d0ce --- /dev/null +++ b/homeassistant/components/local_ip/translations/da.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Sensornavn" + }, + "title": "Lokal IP-adresse" + } + } + }, + "title": "Lokal IP-adresse" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/de.json b/homeassistant/components/local_ip/translations/de.json new file mode 100644 index 00000000000..072f6ec964d --- /dev/null +++ b/homeassistant/components/local_ip/translations/de.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Es ist nur eine einzige Konfiguration der lokalen IP zul\u00e4ssig." + }, + "step": { + "user": { + "data": { + "name": "Sensorname" + }, + "title": "Lokale IP-Adresse" + } + } + }, + "title": "Lokale IP-Adresse" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/en.json b/homeassistant/components/local_ip/translations/en.json new file mode 100644 index 00000000000..5a4077352e7 --- /dev/null +++ b/homeassistant/components/local_ip/translations/en.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Only a single configuration of Local IP is allowed." + }, + "step": { + "user": { + "data": { + "name": "Sensor Name" + }, + "title": "Local IP Address" + } + } + }, + "title": "Local IP Address" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/es.json b/homeassistant/components/local_ip/translations/es.json new file mode 100644 index 00000000000..7af25649769 --- /dev/null +++ b/homeassistant/components/local_ip/translations/es.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de IP Local." + }, + "step": { + "user": { + "data": { + "name": "Nombre del sensor" + }, + "title": "Direcci\u00f3n IP local" + } + } + }, + "title": "Direcci\u00f3n IP local" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/fr.json b/homeassistant/components/local_ip/translations/fr.json new file mode 100644 index 00000000000..c1933032ed0 --- /dev/null +++ b/homeassistant/components/local_ip/translations/fr.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Une seule configuration d'IP locale est autoris\u00e9e" + }, + "step": { + "user": { + "data": { + "name": "Nom du capteur" + }, + "title": "Adresse IP locale" + } + } + }, + "title": "Adresse IP locale" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/hu.json b/homeassistant/components/local_ip/translations/hu.json new file mode 100644 index 00000000000..09b894742a6 --- /dev/null +++ b/homeassistant/components/local_ip/translations/hu.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "\u00c9rz\u00e9kel\u0151 neve" + }, + "title": "Helyi IP c\u00edm" + } + } + }, + "title": "Helyi IP c\u00edm" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/it.json b/homeassistant/components/local_ip/translations/it.json new file mode 100644 index 00000000000..3e159254600 --- /dev/null +++ b/homeassistant/components/local_ip/translations/it.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u00c8 consentita una sola configurazione dell'IP locale." + }, + "step": { + "user": { + "data": { + "name": "Nome del sensore" + }, + "title": "Indirizzo IP locale" + } + } + }, + "title": "Indirizzo IP locale" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/ko.json b/homeassistant/components/local_ip/translations/ko.json new file mode 100644 index 00000000000..050229dbf08 --- /dev/null +++ b/homeassistant/components/local_ip/translations/ko.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\ud558\ub098\uc758 \ub85c\uceec IP \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "name": "\uc13c\uc11c \uc774\ub984" + }, + "title": "\ub85c\uceec IP \uc8fc\uc18c" + } + } + }, + "title": "\ub85c\uceec IP \uc8fc\uc18c" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/lb.json b/homeassistant/components/local_ip/translations/lb.json new file mode 100644 index 00000000000..8d141a5f35f --- /dev/null +++ b/homeassistant/components/local_ip/translations/lb.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Local IP ass erlaabt." + }, + "step": { + "user": { + "data": { + "name": "Numm vum Sensor" + }, + "title": "Lokal IP Adresse" + } + } + }, + "title": "Lokal IP Adresse" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/nl.json b/homeassistant/components/local_ip/translations/nl.json new file mode 100644 index 00000000000..88de9704a6e --- /dev/null +++ b/homeassistant/components/local_ip/translations/nl.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Sensor Naam" + }, + "title": "Lokaal IP-adres" + } + } + }, + "title": "Lokaal IP-adres" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/no.json b/homeassistant/components/local_ip/translations/no.json new file mode 100644 index 00000000000..0b12afbcbb3 --- /dev/null +++ b/homeassistant/components/local_ip/translations/no.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Bare en enkelt konfigurasjon av lokal IP er tillatt." + }, + "step": { + "user": { + "data": { + "name": "Sensornavn" + }, + "title": "Lokal IP-adresse" + } + } + }, + "title": "Lokal IP-adresse" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/pl.json b/homeassistant/components/local_ip/translations/pl.json new file mode 100644 index 00000000000..5f8b977dc6e --- /dev/null +++ b/homeassistant/components/local_ip/translations/pl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja z lokalnym adresem IP." + }, + "step": { + "user": { + "data": { + "name": "Nazwa sensora" + }, + "title": "Lokalny adres IP" + } + } + }, + "title": "Lokalny adres IP" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/pt-BR.json b/homeassistant/components/local_ip/translations/pt-BR.json new file mode 100644 index 00000000000..24246ca5732 --- /dev/null +++ b/homeassistant/components/local_ip/translations/pt-BR.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome do sensor" + }, + "title": "Endere\u00e7o IP local" + } + } + }, + "title": "Endere\u00e7o IP local" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/ru.json b/homeassistant/components/local_ip/translations/ru.json new file mode 100644 index 00000000000..e7e7a5647b7 --- /dev/null +++ b/homeassistant/components/local_ip/translations/ru.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "data": { + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "title": "\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441" + } + } + }, + "title": "\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/sl.json b/homeassistant/components/local_ip/translations/sl.json new file mode 100644 index 00000000000..ca1103043e3 --- /dev/null +++ b/homeassistant/components/local_ip/translations/sl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dovoljena je samo ena konfiguracija lokalnega IP-ja." + }, + "step": { + "user": { + "data": { + "name": "Ime tipala" + }, + "title": "Lokalni IP naslov" + } + } + }, + "title": "Lokalni IP naslov" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/sv.json b/homeassistant/components/local_ip/translations/sv.json new file mode 100644 index 00000000000..9c8f27dff8d --- /dev/null +++ b/homeassistant/components/local_ip/translations/sv.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Sensor Namn" + }, + "title": "Lokal IP-adress" + } + } + }, + "title": "Lokal IP-adress" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/zh-Hant.json b/homeassistant/components/local_ip/translations/zh-Hant.json new file mode 100644 index 00000000000..15103177179 --- /dev/null +++ b/homeassistant/components/local_ip/translations/zh-Hant.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44\u672c\u5730 IP\u3002" + }, + "step": { + "user": { + "data": { + "name": "\u50b3\u611f\u5668\u540d\u7a31" + }, + "title": "\u672c\u5730 IP \u4f4d\u5740" + } + } + }, + "title": "\u672c\u5730 IP \u4f4d\u5740" +} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/bg.json b/homeassistant/components/locative/.translations/bg.json deleted file mode 100644 index 1e80c86e862..00000000000 --- a/homeassistant/components/locative/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Geofency", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u044a\u043c Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e Locative. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - \u041c\u0435\u0442\u043e\u0434: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Locative Webhook?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/ca.json b/homeassistant/components/locative/.translations/ca.json deleted file mode 100644 index ff3c150886d..00000000000 --- a/homeassistant/components/locative/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Geofency.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar ubicacions a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de l'aplicaci\u00f3 Locative.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar el Webhook de Locative?", - "title": "Configuraci\u00f3 del Webhook de Locative" - } - }, - "title": "Webhook de Locative" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/cs.json b/homeassistant/components/locative/.translations/cs.json deleted file mode 100644 index d48b6ff13d9..00000000000 --- a/homeassistant/components/locative/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161e instanci dom\u00e1c\u00edho asistenta mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu a p\u0159ij\u00edmat zpr\u00e1vy od spole\u010dnosti Geofency.", - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "Chcete-li odes\u00edlat um\u00edst\u011bn\u00ed do aplikace Home Assistant, budete muset nastavit funkci Webhook v aplikaci Locative. \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: ` {webhook_url} ' \n - Metoda: POST \n\n Dal\u0161\u00ed podrobnosti naleznete v [dokumentaci] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit Locative Webhook?", - "title": "Nastavit Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/da.json b/homeassistant/components/locative/.translations/da.json deleted file mode 100644 index 3752b23bbe3..00000000000 --- a/homeassistant/components/locative/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Geofency-meddelelser.", - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" - }, - "create_entry": { - "default": "For at sende lokationer til Home Assistant skal du konfigurere webhook funktionen i Locative applicationen.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - URL: `{webhook_url}`\n - Metode: POST\n \n Se [dokumentationen]({docs_url}) for yderligere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Locative Webhook?", - "title": "Konfigurer Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/de.json b/homeassistant/components/locative/.translations/de.json deleted file mode 100644 index ff8cfd97b24..00000000000 --- a/homeassistant/components/locative/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem internet erreichbar sein, um Nachrichten von Geofency zu erhalten.", - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "Um Standorte Home Assistant zu senden, muss das Webhook Feature in der Locative App konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." - }, - "step": { - "user": { - "description": "M\u00f6chtest du den Locative Webhook wirklich einrichten?", - "title": "Locative Webhook einrichten" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/en.json b/homeassistant/components/locative/.translations/en.json deleted file mode 100644 index 052557408d8..00000000000 --- a/homeassistant/components/locative/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Geofency.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send locations to Home Assistant, you will need to setup the webhook feature in the Locative app.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." - }, - "step": { - "user": { - "description": "Are you sure you want to set up the Locative Webhook?", - "title": "Set up the Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/es-419.json b/homeassistant/components/locative/.translations/es-419.json deleted file mode 100644 index 8fb63ff18c7..00000000000 --- a/homeassistant/components/locative/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Geofency.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar ubicaciones a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en la aplicaci\u00f3n Locative. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1 seguro de que desea configurar el Webhook Locative?", - "title": "Configurar el Webhook Locative" - } - }, - "title": "Webhook Locative" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/es.json b/homeassistant/components/locative/.translations/es.json deleted file mode 100644 index c89a251b670..00000000000 --- a/homeassistant/components/locative/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu Home Assistant debe ser accesible desde Internet para recibir mensajes de Geofency.", - "one_instance_allowed": "Solo se necesita una instancia." - }, - "create_entry": { - "default": "Para enviar ubicaciones a Home Assistant, es necesario configurar la caracter\u00edstica webhook en la app de Locative.\n\nRellena la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nRevisa [la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de Locative?", - "title": "Configurar el webhook de Locative" - } - }, - "title": "Webhook de Locative" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/fr.json b/homeassistant/components/locative/.translations/fr.json deleted file mode 100644 index a90f7ff989c..00000000000 --- a/homeassistant/components/locative/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages Geofency.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des localisations \u00e0 Home Assistant, vous devez configurer la fonctionnalit\u00e9 Webhook dans l'application Locative. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer le Webhook Locative ?", - "title": "Configurer le Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/hu.json b/homeassistant/components/locative/.translations/hu.json deleted file mode 100644 index 3528f1c1e45..00000000000 --- a/homeassistant/components/locative/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Az Home Assistantnek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l, hogy megkapja a Geofency \u00fczeneteit.", - "one_instance_allowed": "Csak egy p\u00e9ld\u00e1ny sz\u00fcks\u00e9ges." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Locative Webhook-ot?", - "title": "Locative Webhook be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/it.json b/homeassistant/components/locative/.translations/it.json deleted file mode 100644 index 4fdef0a987e..00000000000 --- a/homeassistant/components/locative/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Geofency.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare localit\u00e0 a Home Assistant, dovrai configurare la funzionalit\u00e0 Webhook nell'app Locative.\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare il webhook di Locative?", - "title": "Configura il webhook di Locative" - } - }, - "title": "Webhook di Locative" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/ko.json b/homeassistant/components/locative/.translations/ko.json deleted file mode 100644 index c53f538799f..00000000000 --- a/homeassistant/components/locative/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Locative \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Locative \uc571\uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Locative Webhook \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Locative Webhook \uc124\uc815" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/lb.json b/homeassistant/components/locative/.translations/lb.json deleted file mode 100644 index 25db0ecef81..00000000000 --- a/homeassistant/components/locative/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Geofency Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Plazen un Home Assistant ze sch\u00e9cken, muss den Webhook Feature an der Locative App ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Locative Webhook anzeriichten?", - "title": "Locative Webhook ariichten" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/nl.json b/homeassistant/components/locative/.translations/nl.json deleted file mode 100644 index 26ec0951d88..00000000000 --- a/homeassistant/components/locative/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Je Home Assistant instance moet bereikbaar zijn vanuit het internet om berichten van Geofency te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Om locaties naar Home Assistant te sturen, moet u de Webhook-functie instellen in de Locative app. \n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Methode: POST \n\n Zie [de documentatie]({docs_url}) voor meer informatie." - }, - "step": { - "user": { - "description": "Weet u zeker dat u de Locative Webhook wilt instellen?", - "title": "Stel de Locative Webhook in" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/no.json b/homeassistant/components/locative/.translations/no.json deleted file mode 100644 index 123b03d95a8..00000000000 --- a/homeassistant/components/locative/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra Geofency.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 kunne sende steder til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i Locative. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil sette opp Locative Webhook?", - "title": "Sett opp Locative Webhook" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/pl.json b/homeassistant/components/locative/.translations/pl.json deleted file mode 100644 index 23a4c98a54c..00000000000 --- a/homeassistant/components/locative/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z Geofency.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 lokalizacje do Home Assistant'a, musisz skonfigurowa\u0107 webhook w aplikacji Locative. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Locative Webhook?", - "title": "Konfiguracja Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/pt-BR.json b/homeassistant/components/locative/.translations/pt-BR.json deleted file mode 100644 index 2ca31ca1895..00000000000 --- a/homeassistant/components/locative/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens da Geofency.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar locais para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no aplicativo Locative. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Locative Webhook?", - "title": "Configurar o Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/pt.json b/homeassistant/components/locative/.translations/pt.json deleted file mode 100644 index 2104ad90607..00000000000 --- a/homeassistant/components/locative/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistent precisa de ser acess\u00edvel a partir da internet para receber mensagens Geofency.", - "one_instance_allowed": "Apenas uma inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no Locative. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Locative Webhook?", - "title": "Configurar o Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/ru.json b/homeassistant/components/locative/.translations/ru.json deleted file mode 100644 index 90fa5253a61..00000000000 --- a/homeassistant/components/locative/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Locative.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Locative.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Locative?", - "title": "Locative" - } - }, - "title": "Locative" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/sl.json b/homeassistant/components/locative/.translations/sl.json deleted file mode 100644 index 0b0bd45b7d6..00000000000 --- a/homeassistant/components/locative/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopek prek interneta, da boste lahko prejemali Geofency sporo\u010dila.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "Za po\u0161iljanje lokacij v Home Assistant, morate namestiti funkcijo webhook v aplikaciji Locative. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Locative Webhook?", - "title": "Nastavite Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/sv.json b/homeassistant/components/locative/.translations/sv.json deleted file mode 100644 index 0296d079938..00000000000 --- a/homeassistant/components/locative/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig ifr\u00e5n internet f\u00f6r att ta emot meddelanden ifr\u00e5n Geofency.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i Locative appen.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Locative Webhook?", - "title": "Konfigurera Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/zh-Hans.json b/homeassistant/components/locative/.translations/zh-Hans.json deleted file mode 100644 index d6c831d5a0e..00000000000 --- a/homeassistant/components/locative/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 Geofency \u6d88\u606f\u3002", - "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e Locative app \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e\u5b9a\u4f4d Webhook\u5417\uff1f", - "title": "\u8bbe\u7f6e\u5b9a\u4f4d Webhook" - } - }, - "title": "\u5b9a\u4f4d Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/.translations/zh-Hant.json b/homeassistant/components/locative/.translations/zh-Hant.json deleted file mode 100644 index 5135eb33c9f..00000000000 --- a/homeassistant/components/locative/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Locative \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u5ea7\u6a19\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Locative App \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Locative Webhook\uff1f", - "title": "\u8a2d\u5b9a Locative Webhook" - } - }, - "title": "Locative Webhook" - } -} \ No newline at end of file diff --git a/homeassistant/components/locative/manifest.json b/homeassistant/components/locative/manifest.json index ab37ce2e4e6..653b27ce4d6 100644 --- a/homeassistant/components/locative/manifest.json +++ b/homeassistant/components/locative/manifest.json @@ -3,7 +3,6 @@ "name": "Locative", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/locative", - "requirements": [], "dependencies": ["webhook"], "codeowners": [] } diff --git a/homeassistant/components/locative/strings.json b/homeassistant/components/locative/strings.json index b2a538a0fa5..53a0c160e99 100644 --- a/homeassistant/components/locative/strings.json +++ b/homeassistant/components/locative/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Locative Webhook", "step": { "user": { "title": "Set up the Locative Webhook", @@ -15,4 +14,4 @@ "default": "To send locations to Home Assistant, you will need to setup the webhook feature in the Locative app.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/locative/translations/bg.json b/homeassistant/components/locative/translations/bg.json new file mode 100644 index 00000000000..540724e578f --- /dev/null +++ b/homeassistant/components/locative/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Geofency", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u044a\u043c Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e Locative. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - \u041c\u0435\u0442\u043e\u0434: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Locative Webhook?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/ca.json b/homeassistant/components/locative/translations/ca.json new file mode 100644 index 00000000000..61c6a6c48af --- /dev/null +++ b/homeassistant/components/locative/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Geofency.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar ubicacions a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de l'aplicaci\u00f3 Locative.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar el Webhook de Locative?", + "title": "Configuraci\u00f3 del Webhook de Locative" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/cs.json b/homeassistant/components/locative/translations/cs.json new file mode 100644 index 00000000000..074443908f4 --- /dev/null +++ b/homeassistant/components/locative/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161e instanci dom\u00e1c\u00edho asistenta mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu a p\u0159ij\u00edmat zpr\u00e1vy od spole\u010dnosti Geofency.", + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "Chcete-li odes\u00edlat um\u00edst\u011bn\u00ed do aplikace Home Assistant, budete muset nastavit funkci Webhook v aplikaci Locative. \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: ` {webhook_url} ' \n - Metoda: POST \n\n Dal\u0161\u00ed podrobnosti naleznete v [dokumentaci] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit Locative Webhook?", + "title": "Nastavit Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/da.json b/homeassistant/components/locative/translations/da.json new file mode 100644 index 00000000000..afee5b832cc --- /dev/null +++ b/homeassistant/components/locative/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Geofency-meddelelser.", + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" + }, + "create_entry": { + "default": "For at sende lokationer til Home Assistant skal du konfigurere webhook funktionen i Locative applicationen.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - URL: `{webhook_url}`\n - Metode: POST\n \n Se [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Locative Webhook?", + "title": "Konfigurer Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/de.json b/homeassistant/components/locative/translations/de.json new file mode 100644 index 00000000000..482d43c7117 --- /dev/null +++ b/homeassistant/components/locative/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem internet erreichbar sein, um Nachrichten von Geofency zu erhalten.", + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "Um Standorte Home Assistant zu senden, muss das Webhook Feature in der Locative App konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "M\u00f6chtest du den Locative Webhook wirklich einrichten?", + "title": "Locative Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/en.json b/homeassistant/components/locative/translations/en.json new file mode 100644 index 00000000000..750797e535b --- /dev/null +++ b/homeassistant/components/locative/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Geofency.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send locations to Home Assistant, you will need to setup the webhook feature in the Locative app.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up the Locative Webhook?", + "title": "Set up the Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/es-419.json b/homeassistant/components/locative/translations/es-419.json new file mode 100644 index 00000000000..d28fb541825 --- /dev/null +++ b/homeassistant/components/locative/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Geofency.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar ubicaciones a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en la aplicaci\u00f3n Locative. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1 seguro de que desea configurar el Webhook Locative?", + "title": "Configurar el Webhook Locative" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/es.json b/homeassistant/components/locative/translations/es.json new file mode 100644 index 00000000000..53188cd7be2 --- /dev/null +++ b/homeassistant/components/locative/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu Home Assistant debe ser accesible desde Internet para recibir mensajes de Geofency.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar ubicaciones a Home Assistant, es necesario configurar la caracter\u00edstica webhook en la app de Locative.\n\nRellena la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nRevisa [la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de Locative?", + "title": "Configurar el webhook de Locative" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/fr.json b/homeassistant/components/locative/translations/fr.json new file mode 100644 index 00000000000..4e65415b1b3 --- /dev/null +++ b/homeassistant/components/locative/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages Geofency.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des localisations \u00e0 Home Assistant, vous devez configurer la fonctionnalit\u00e9 Webhook dans l'application Locative. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer le Webhook Locative ?", + "title": "Configurer le Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/hu.json b/homeassistant/components/locative/translations/hu.json new file mode 100644 index 00000000000..7e3fe9bcb0f --- /dev/null +++ b/homeassistant/components/locative/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Az Home Assistantnek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l, hogy megkapja a Geofency \u00fczeneteit.", + "one_instance_allowed": "Csak egy p\u00e9ld\u00e1ny sz\u00fcks\u00e9ges." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Locative Webhook-ot?", + "title": "Locative Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/it.json b/homeassistant/components/locative/translations/it.json new file mode 100644 index 00000000000..c023cd832b9 --- /dev/null +++ b/homeassistant/components/locative/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Geofency.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare localit\u00e0 a Home Assistant, dovrai configurare la funzionalit\u00e0 Webhook nell'app Locative.\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n Vedi [la documentazione]({docs_url}) for ulteriori dettagli." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare il webhook di Locative?", + "title": "Configura il webhook di Locative" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/ko.json b/homeassistant/components/locative/translations/ko.json new file mode 100644 index 00000000000..e2e51a3cbd0 --- /dev/null +++ b/homeassistant/components/locative/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Locative \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Locative \uc571\uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Locative Webhook \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Locative Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/lb.json b/homeassistant/components/locative/translations/lb.json new file mode 100644 index 00000000000..42086f5cfe5 --- /dev/null +++ b/homeassistant/components/locative/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Geofency Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Plazen un Home Assistant ze sch\u00e9cken, muss den Webhook Feature an der Locative App ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Locative Webhook anzeriichten?", + "title": "Locative Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/nl.json b/homeassistant/components/locative/translations/nl.json new file mode 100644 index 00000000000..655752b6e69 --- /dev/null +++ b/homeassistant/components/locative/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Je Home Assistant instance moet bereikbaar zijn vanuit het internet om berichten van Geofency te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Om locaties naar Home Assistant te sturen, moet u de Webhook-functie instellen in de Locative app. \n\n Vul de volgende info in: \n\n - URL: `{webhook_url}` \n - Methode: POST \n\n Zie [de documentatie]({docs_url}) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet u zeker dat u de Locative Webhook wilt instellen?", + "title": "Stel de Locative Webhook in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/no.json b/homeassistant/components/locative/translations/no.json new file mode 100644 index 00000000000..46f9f413236 --- /dev/null +++ b/homeassistant/components/locative/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra Geofency.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 kunne sende steder til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i Locative. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp Locative Webhook?", + "title": "Sett opp Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/pl.json b/homeassistant/components/locative/translations/pl.json new file mode 100644 index 00000000000..7294b31ef74 --- /dev/null +++ b/homeassistant/components/locative/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z Geofency.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 lokalizacje do Home Assistant'a, musisz skonfigurowa\u0107 webhook w aplikacji Locative. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Locative Webhook?", + "title": "Konfiguracja Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/pt-BR.json b/homeassistant/components/locative/translations/pt-BR.json new file mode 100644 index 00000000000..11ea7c671b0 --- /dev/null +++ b/homeassistant/components/locative/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens da Geofency.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar locais para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no aplicativo Locative. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Locative Webhook?", + "title": "Configurar o Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/pt.json b/homeassistant/components/locative/translations/pt.json new file mode 100644 index 00000000000..e7091e19c09 --- /dev/null +++ b/homeassistant/components/locative/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistent precisa de ser acess\u00edvel a partir da internet para receber mensagens Geofency.", + "one_instance_allowed": "Apenas uma inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no Locative. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Locative Webhook?", + "title": "Configurar o Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/ru.json b/homeassistant/components/locative/translations/ru.json new file mode 100644 index 00000000000..591f2f42302 --- /dev/null +++ b/homeassistant/components/locative/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Locative.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Locative.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Locative?", + "title": "Locative" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/sl.json b/homeassistant/components/locative/translations/sl.json new file mode 100644 index 00000000000..13a2a33aa5f --- /dev/null +++ b/homeassistant/components/locative/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopek prek interneta, da boste lahko prejemali Geofency sporo\u010dila.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "Za po\u0161iljanje lokacij v Home Assistant, morate namestiti funkcijo webhook v aplikaciji Locative. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Locative Webhook?", + "title": "Nastavite Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/sv.json b/homeassistant/components/locative/translations/sv.json new file mode 100644 index 00000000000..45185a5feca --- /dev/null +++ b/homeassistant/components/locative/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig ifr\u00e5n internet f\u00f6r att ta emot meddelanden ifr\u00e5n Geofency.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i Locative appen.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) om hur du konfigurerar detta f\u00f6r mer information." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Locative Webhook?", + "title": "Konfigurera Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/zh-Hans.json b/homeassistant/components/locative/translations/zh-Hans.json new file mode 100644 index 00000000000..9a7245396a1 --- /dev/null +++ b/homeassistant/components/locative/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 Geofency \u6d88\u606f\u3002", + "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e Locative app \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e\u5b9a\u4f4d Webhook\u5417\uff1f", + "title": "\u8bbe\u7f6e\u5b9a\u4f4d Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/locative/translations/zh-Hant.json b/homeassistant/components/locative/translations/zh-Hant.json new file mode 100644 index 00000000000..53df0ba59eb --- /dev/null +++ b/homeassistant/components/locative/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Locative \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u5ea7\u6a19\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Locative App \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Locative Webhook\uff1f", + "title": "\u8a2d\u5b9a Locative Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/bg.json b/homeassistant/components/lock/.translations/bg.json deleted file mode 100644 index 54b80842f4f..00000000000 --- a/homeassistant/components/lock/.translations/bg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "\u0417\u0430\u043a\u043b\u044e\u0447\u0438 {entity_name}", - "open": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 {entity_name}", - "unlock": "\u041e\u0442\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} \u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", - "is_unlocked": "{entity_name} \u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d" - }, - "trigger_type": { - "locked": "{entity_name} \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", - "unlocked": "{entity_name} \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/ca.json b/homeassistant/components/lock/.translations/ca.json deleted file mode 100644 index 69655ac1daa..00000000000 --- a/homeassistant/components/lock/.translations/ca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Bloqueja {entity_name}", - "open": "Obre {entity_name}", - "unlock": "Desbloqueja {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} est\u00e0 bloquejat/ada", - "is_unlocked": "{entity_name} est\u00e0 desbloquejat/ada" - }, - "trigger_type": { - "locked": "{entity_name} s'ha bloquejat", - "unlocked": "{entity_name} s'ha desbloquejat" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/cs.json b/homeassistant/components/lock/.translations/cs.json deleted file mode 100644 index 3843248a9ee..00000000000 --- a/homeassistant/components/lock/.translations/cs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Zamknout {entity_name}", - "open": "Otev\u0159\u00edt {entity_name}", - "unlock": "Odemknout {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} je uzam\u010deno", - "is_unlocked": "{entity_name} je odem\u010deno" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/da.json b/homeassistant/components/lock/.translations/da.json deleted file mode 100644 index e2f2588349c..00000000000 --- a/homeassistant/components/lock/.translations/da.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "L\u00e5s {entity_name}", - "open": "\u00c5bn {entity_name}", - "unlock": "L\u00e5s {entity_name} op" - }, - "condition_type": { - "is_locked": "{entity_name} er l\u00e5st", - "is_unlocked": "{entity_name} er l\u00e5st op" - }, - "trigger_type": { - "locked": "{entity_name} blev l\u00e5st", - "unlocked": "{entity_name} l\u00e5st op" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/de.json b/homeassistant/components/lock/.translations/de.json deleted file mode 100644 index 443c70b68dd..00000000000 --- a/homeassistant/components/lock/.translations/de.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Sperre {entity_name}", - "open": "\u00d6ffne {entity_name}", - "unlock": "Entsperre {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} ist gesperrt", - "is_unlocked": "{entity_name} ist entsperrt" - }, - "trigger_type": { - "locked": "{entity_name} gesperrt", - "unlocked": "{entity_name} entsperrt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/en.json b/homeassistant/components/lock/.translations/en.json deleted file mode 100644 index 262ba27d951..00000000000 --- a/homeassistant/components/lock/.translations/en.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Lock {entity_name}", - "open": "Open {entity_name}", - "unlock": "Unlock {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} is locked", - "is_unlocked": "{entity_name} is unlocked" - }, - "trigger_type": { - "locked": "{entity_name} locked", - "unlocked": "{entity_name} unlocked" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/es.json b/homeassistant/components/lock/.translations/es.json deleted file mode 100644 index 0c352d9608a..00000000000 --- a/homeassistant/components/lock/.translations/es.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Bloquear {entity_name}", - "open": "Abrir {entity_name}", - "unlock": "Desbloquear {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} est\u00e1 bloqueado", - "is_unlocked": "{entity_name} est\u00e1 desbloqueado" - }, - "trigger_type": { - "locked": "{entity_name} bloqueado", - "unlocked": "{entity_name} desbloqueado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/fr.json b/homeassistant/components/lock/.translations/fr.json deleted file mode 100644 index cc7e7d6f3e3..00000000000 --- a/homeassistant/components/lock/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "V\u00e9rouiller {entity_name}", - "open": "Ouvre {entity_name}", - "unlock": "D\u00e9verrouiller {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} est verrouill\u00e9", - "is_unlocked": "{entity_name} est d\u00e9verrouill\u00e9" - }, - "trigger_type": { - "locked": "{entity_name} verrouill\u00e9", - "unlocked": "{entity_name} d\u00e9verrouill\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/hu.json b/homeassistant/components/lock/.translations/hu.json deleted file mode 100644 index 20b1663558b..00000000000 --- a/homeassistant/components/lock/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "{entity_name} z\u00e1r\u00e1sa", - "open": "{entity_name} nyit\u00e1sa", - "unlock": "{entity_name} nyit\u00e1sa" - }, - "condition_type": { - "is_locked": "{entity_name} z\u00e1rva", - "is_unlocked": "{entity_name} nyitva" - }, - "trigger_type": { - "locked": "{entity_name} be lett z\u00e1rva", - "unlocked": "{entity_name} ki lett nyitva" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/it.json b/homeassistant/components/lock/.translations/it.json deleted file mode 100644 index 72c350dad24..00000000000 --- a/homeassistant/components/lock/.translations/it.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Blocca {entity_name}", - "open": "Apri {entity_name}", - "unlock": "Sblocca {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} \u00e8 bloccato", - "is_unlocked": "{entity_name} \u00e8 sbloccato" - }, - "trigger_type": { - "locked": "{entity_name} \u00e8 bloccato", - "unlocked": "{entity_name} \u00e8 sbloccato" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/ko.json b/homeassistant/components/lock/.translations/ko.json deleted file mode 100644 index fb202f73b37..00000000000 --- a/homeassistant/components/lock/.translations/ko.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "{entity_name} \uc7a0\uae08", - "open": "{entity_name} \uc5f4\uae30", - "unlock": "{entity_name} \uc7a0\uae08 \ud574\uc81c" - }, - "condition_type": { - "is_locked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc73c\uba74", - "is_unlocked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc9c0 \uc54a\uc73c\uba74" - }, - "trigger_type": { - "locked": "{entity_name} \uc774(\uac00) \uc7a0\uae38 \ub54c", - "unlocked": "{entity_name} \uc774(\uac00) \uc7a0\uae08\uc774 \ud574\uc81c\ub420 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/lb.json b/homeassistant/components/lock/.translations/lb.json deleted file mode 100644 index 1bdfa9ac4ec..00000000000 --- a/homeassistant/components/lock/.translations/lb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "{entity_name} sp\u00e4ren", - "open": "{entity_name} opmaachen", - "unlock": "{entity_name} entsp\u00e4ren" - }, - "condition_type": { - "is_locked": "{entity_name} ass gespaart", - "is_unlocked": "{entity_name} ass entspaart" - }, - "trigger_type": { - "locked": "{entity_name} gespaart", - "unlocked": "{entity_name} entspaart" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/nl.json b/homeassistant/components/lock/.translations/nl.json deleted file mode 100644 index 61370236a97..00000000000 --- a/homeassistant/components/lock/.translations/nl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Vergrendel {entity_name}", - "open": "Open {entity_name}", - "unlock": "Ontgrendel {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} is vergrendeld", - "is_unlocked": "{entity_name} is ontgrendeld" - }, - "trigger_type": { - "locked": "{entity_name} vergrendeld", - "unlocked": "{entity_name} ontgrendeld" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/no.json b/homeassistant/components/lock/.translations/no.json deleted file mode 100644 index de34f40bc38..00000000000 --- a/homeassistant/components/lock/.translations/no.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "L\u00e5s {entity_name}", - "open": "\u00c5pne {entity_name}", - "unlock": "L\u00e5s opp {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} er l\u00e5st", - "is_unlocked": "{entity_name} er l\u00e5st opp" - }, - "trigger_type": { - "locked": "{entity_name} l\u00e5st", - "unlocked": "{entity_name} l\u00e5st opp" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/pl.json b/homeassistant/components/lock/.translations/pl.json deleted file mode 100644 index a3123919615..00000000000 --- a/homeassistant/components/lock/.translations/pl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "zablokuj {entity_name}", - "open": "otw\u00f3rz {entity_name}", - "unlock": "odblokuj {entity_name}" - }, - "condition_type": { - "is_locked": "zamek {entity_name} jest zamkni\u0119ty", - "is_unlocked": "zamek {entity_name} jest otwarty" - }, - "trigger_type": { - "locked": "nast\u0105pi zamkni\u0119cie {entity_name}", - "unlocked": "nast\u0105pi otwarcie {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/pt-BR.json b/homeassistant/components/lock/.translations/pt-BR.json deleted file mode 100644 index f6bde89a3a6..00000000000 --- a/homeassistant/components/lock/.translations/pt-BR.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Bloquear {entity_name}", - "open": "Abrir {entity_name}", - "unlock": "Desbloquear {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/pt.json b/homeassistant/components/lock/.translations/pt.json deleted file mode 100644 index 05bcf441660..00000000000 --- a/homeassistant/components/lock/.translations/pt.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "trigger_type": { - "locked": "{entity_name} fechada", - "unlocked": "{entity_name} aberta" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/ru.json b/homeassistant/components/lock/.translations/ru.json deleted file mode 100644 index 479fa4bee21..00000000000 --- a/homeassistant/components/lock/.translations/ru.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c {entity_name}", - "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c {entity_name}", - "unlock": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} \u0432 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_unlocked": "{entity_name} \u0432 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" - }, - "trigger_type": { - "locked": "{entity_name} \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f", - "unlocked": "{entity_name} \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/sl.json b/homeassistant/components/lock/.translations/sl.json deleted file mode 100644 index 01cf3feb4a6..00000000000 --- a/homeassistant/components/lock/.translations/sl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "Zakleni {entity_name}", - "open": "Odpri {entity_name}", - "unlock": "Odkleni {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} je/so zaklenjen/a", - "is_unlocked": "{entity_name} je/so odklenjen/a" - }, - "trigger_type": { - "locked": "{entity_name} zaklenjen/a", - "unlocked": "{entity_name} odklenjen/a" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/sv.json b/homeassistant/components/lock/.translations/sv.json deleted file mode 100644 index 7d50b4ea61a..00000000000 --- a/homeassistant/components/lock/.translations/sv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "L\u00e5s {entity_name}", - "open": "\u00d6ppna {entity_name}", - "unlock": "L\u00e5s upp {entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name} \u00e4r l\u00e5st", - "is_unlocked": "{entity_name} \u00e4r ol\u00e5st" - }, - "trigger_type": { - "locked": "{entity_name} l\u00e5st", - "unlocked": "{entity_name} ol\u00e5st" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/zh-Hans.json b/homeassistant/components/lock/.translations/zh-Hans.json deleted file mode 100644 index 049d88ba3a3..00000000000 --- a/homeassistant/components/lock/.translations/zh-Hans.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "trigger_type": { - "locked": "{entity_name} \u88ab\u9501\u5b9a", - "unlocked": "{entity_name} \u88ab\u89e3\u9501" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/.translations/zh-Hant.json b/homeassistant/components/lock/.translations/zh-Hant.json deleted file mode 100644 index 054f7a5a18d..00000000000 --- a/homeassistant/components/lock/.translations/zh-Hant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "lock": "\u4e0a\u9396{entity_name}", - "open": "\u958b\u555f{entity_name}", - "unlock": "\u89e3\u9396{entity_name}" - }, - "condition_type": { - "is_locked": "{entity_name}\u5df2\u4e0a\u9396", - "is_unlocked": "{entity_name}\u5df2\u89e3\u9396" - }, - "trigger_type": { - "locked": "{entity_name}\u5df2\u4e0a\u9396", - "unlocked": "{entity_name}\u5df2\u89e3\u9396" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/lock/__init__.py b/homeassistant/components/lock/__init__.py index 92da3a03085..1b79108846f 100644 --- a/homeassistant/components/lock/__init__.py +++ b/homeassistant/components/lock/__init__.py @@ -22,7 +22,6 @@ from homeassistant.helpers.config_validation import ( # noqa: F401 ) from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_component import EntityComponent -from homeassistant.loader import bind_hass # mypy: allow-untyped-defs, no-check-untyped-defs @@ -45,12 +44,6 @@ _LOGGER = logging.getLogger(__name__) PROP_TO_ATTR = {"changed_by": ATTR_CHANGED_BY, "code_format": ATTR_CODE_FORMAT} -@bind_hass -def is_locked(hass, entity_id): - """Return if the lock is locked based on the statemachine.""" - return hass.states.is_state(entity_id, STATE_LOCKED) - - async def async_setup(hass, config): """Track states and offer events for locks.""" component = hass.data[DOMAIN] = EntityComponent( diff --git a/homeassistant/components/lock/manifest.json b/homeassistant/components/lock/manifest.json index cd2fdf27f2d..b44a66613b0 100644 --- a/homeassistant/components/lock/manifest.json +++ b/homeassistant/components/lock/manifest.json @@ -2,8 +2,6 @@ "domain": "lock", "name": "Lock", "documentation": "https://www.home-assistant.io/integrations/lock", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/lock/reproduce_state.py b/homeassistant/components/lock/reproduce_state.py index b8b469f943f..812b9bf04df 100644 --- a/homeassistant/components/lock/reproduce_state.py +++ b/homeassistant/components/lock/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Lock state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -21,7 +21,11 @@ VALID_STATES = {STATE_LOCKED, STATE_UNLOCKED} async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -53,9 +57,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Lock states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/lock/services.yaml b/homeassistant/components/lock/services.yaml index fea02bb025e..d1456f1e68e 100644 --- a/homeassistant/components/lock/services.yaml +++ b/homeassistant/components/lock/services.yaml @@ -25,7 +25,7 @@ lock: fields: entity_id: description: Name of lock to lock. - example: 'lock.front_door' + example: "lock.front_door" code: description: An optional code to lock the lock with. example: 1234 @@ -35,7 +35,7 @@ open: fields: entity_id: description: Name of lock to open. - example: 'lock.front_door' + example: "lock.front_door" code: description: An optional code to open the lock with. example: 1234 @@ -58,7 +58,7 @@ unlock: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" code: description: An optional code to unlock the lock with. example: 1234 diff --git a/homeassistant/components/lock/strings.json b/homeassistant/components/lock/strings.json index 1645b78295d..9e4c4ea726a 100644 --- a/homeassistant/components/lock/strings.json +++ b/homeassistant/components/lock/strings.json @@ -1,4 +1,5 @@ { + "title": "Lock", "device_automation": { "action_type": { "lock": "Lock {entity_name}", @@ -13,5 +14,11 @@ "locked": "{entity_name} locked", "unlocked": "{entity_name} unlocked" } + }, + "state": { + "_": { + "locked": "[%key:common::state::locked%]", + "unlocked": "[%key:common::state::unlocked%]" + } } } diff --git a/homeassistant/components/lock/translations/af.json b/homeassistant/components/lock/translations/af.json new file mode 100644 index 00000000000..4bf1277c9ad --- /dev/null +++ b/homeassistant/components/lock/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Gesluit", + "unlocked": "Oopgesluit" + } + }, + "title": "Slot" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/ar.json b/homeassistant/components/lock/translations/ar.json new file mode 100644 index 00000000000..edd4b04c794 --- /dev/null +++ b/homeassistant/components/lock/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0645\u0642\u0641\u0644", + "unlocked": "\u0645\u0641\u062a\u0648\u062d" + } + }, + "title": "\u0642\u0641\u0644" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/bg.json b/homeassistant/components/lock/translations/bg.json new file mode 100644 index 00000000000..72d4378304d --- /dev/null +++ b/homeassistant/components/lock/translations/bg.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "\u0417\u0430\u043a\u043b\u044e\u0447\u0438 {entity_name}", + "open": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 {entity_name}", + "unlock": "\u041e\u0442\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} \u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", + "is_unlocked": "{entity_name} \u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d" + }, + "trigger_type": { + "locked": "{entity_name} \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d", + "unlocked": "{entity_name} \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "state": { + "_": { + "locked": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d", + "unlocked": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u041a\u043b\u044e\u0447\u0430\u043b\u043a\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/bs.json b/homeassistant/components/lock/translations/bs.json new file mode 100644 index 00000000000..d7a6a80185a --- /dev/null +++ b/homeassistant/components/lock/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Zaklju\u010dan", + "unlocked": "Otklju\u010dan" + } + }, + "title": "Zaklju\u010daj" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/ca.json b/homeassistant/components/lock/translations/ca.json new file mode 100644 index 00000000000..a59841298fa --- /dev/null +++ b/homeassistant/components/lock/translations/ca.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Bloqueja {entity_name}", + "open": "Obre {entity_name}", + "unlock": "Desbloqueja {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} est\u00e0 bloquejat/ada", + "is_unlocked": "{entity_name} est\u00e0 desbloquejat/ada" + }, + "trigger_type": { + "locked": "{entity_name} s'ha bloquejat", + "unlocked": "{entity_name} s'ha desbloquejat" + } + }, + "state": { + "_": { + "locked": "Bloquejat", + "unlocked": "Desbloquejat" + } + }, + "title": "Panys" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/cs.json b/homeassistant/components/lock/translations/cs.json new file mode 100644 index 00000000000..ce9edd13c52 --- /dev/null +++ b/homeassistant/components/lock/translations/cs.json @@ -0,0 +1,20 @@ +{ + "device_automation": { + "action_type": { + "lock": "Zamknout {entity_name}", + "open": "Otev\u0159\u00edt {entity_name}", + "unlock": "Odemknout {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} je uzam\u010deno", + "is_unlocked": "{entity_name} je odem\u010deno" + } + }, + "state": { + "_": { + "locked": "Zam\u010deno", + "unlocked": "Odem\u010deno" + } + }, + "title": "Z\u00e1mek" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/cy.json b/homeassistant/components/lock/translations/cy.json new file mode 100644 index 00000000000..60c7630a092 --- /dev/null +++ b/homeassistant/components/lock/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Wedi cloi", + "unlocked": "Datgloi" + } + }, + "title": "Clo" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/da.json b/homeassistant/components/lock/translations/da.json new file mode 100644 index 00000000000..12f8f490282 --- /dev/null +++ b/homeassistant/components/lock/translations/da.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "L\u00e5s {entity_name}", + "open": "\u00c5bn {entity_name}", + "unlock": "L\u00e5s {entity_name} op" + }, + "condition_type": { + "is_locked": "{entity_name} er l\u00e5st", + "is_unlocked": "{entity_name} er l\u00e5st op" + }, + "trigger_type": { + "locked": "{entity_name} blev l\u00e5st", + "unlocked": "{entity_name} l\u00e5st op" + } + }, + "state": { + "_": { + "locked": "L\u00e5st", + "unlocked": "Ul\u00e5st" + } + }, + "title": "L\u00e5s" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/de.json b/homeassistant/components/lock/translations/de.json new file mode 100644 index 00000000000..6d29092e1f9 --- /dev/null +++ b/homeassistant/components/lock/translations/de.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Sperre {entity_name}", + "open": "\u00d6ffne {entity_name}", + "unlock": "Entsperre {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} ist gesperrt", + "is_unlocked": "{entity_name} ist entsperrt" + }, + "trigger_type": { + "locked": "{entity_name} gesperrt", + "unlocked": "{entity_name} entsperrt" + } + }, + "state": { + "_": { + "locked": "Verriegelt", + "unlocked": "Entriegelt" + } + }, + "title": "Schloss" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/el.json b/homeassistant/components/lock/translations/el.json new file mode 100644 index 00000000000..e99b10e1f64 --- /dev/null +++ b/homeassistant/components/lock/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03b7", + "unlocked": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03b7" + } + }, + "title": "\u039a\u03bb\u03b5\u03af\u03b4\u03c9\u03bc\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/en.json b/homeassistant/components/lock/translations/en.json new file mode 100644 index 00000000000..f6a5aac23cb --- /dev/null +++ b/homeassistant/components/lock/translations/en.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Lock {entity_name}", + "open": "Open {entity_name}", + "unlock": "Unlock {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} is locked", + "is_unlocked": "{entity_name} is unlocked" + }, + "trigger_type": { + "locked": "{entity_name} locked", + "unlocked": "{entity_name} unlocked" + } + }, + "state": { + "_": { + "locked": "Locked", + "unlocked": "Unlocked" + } + }, + "title": "Lock" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/es-419.json b/homeassistant/components/lock/translations/es-419.json new file mode 100644 index 00000000000..ff9210f96fd --- /dev/null +++ b/homeassistant/components/lock/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Cerrado", + "unlocked": "Abierto" + } + }, + "title": "Cerrar" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/es.json b/homeassistant/components/lock/translations/es.json new file mode 100644 index 00000000000..5cc0e80f97a --- /dev/null +++ b/homeassistant/components/lock/translations/es.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Bloquear {entity_name}", + "open": "Abrir {entity_name}", + "unlock": "Desbloquear {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} est\u00e1 bloqueado", + "is_unlocked": "{entity_name} est\u00e1 desbloqueado" + }, + "trigger_type": { + "locked": "{entity_name} bloqueado", + "unlocked": "{entity_name} desbloqueado" + } + }, + "state": { + "_": { + "locked": "Bloqueado", + "unlocked": "Desbloqueado" + } + }, + "title": "Cerradura" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/et.json b/homeassistant/components/lock/translations/et.json new file mode 100644 index 00000000000..448d1d4531a --- /dev/null +++ b/homeassistant/components/lock/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Lukus", + "unlocked": "Lahti" + } + }, + "title": "Lukk" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/eu.json b/homeassistant/components/lock/translations/eu.json new file mode 100644 index 00000000000..f87e718561a --- /dev/null +++ b/homeassistant/components/lock/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Sarraila" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/fa.json b/homeassistant/components/lock/translations/fa.json new file mode 100644 index 00000000000..78a0ae96bf8 --- /dev/null +++ b/homeassistant/components/lock/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0642\u0641\u0644 \u0634\u062f\u0647", + "unlocked": "\u0628\u0627\u0632" + } + }, + "title": "\u0642\u0641\u0644" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/fi.json b/homeassistant/components/lock/translations/fi.json new file mode 100644 index 00000000000..c845eef115c --- /dev/null +++ b/homeassistant/components/lock/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Lukittu", + "unlocked": "Auki" + } + }, + "title": "Lukko" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/fr.json b/homeassistant/components/lock/translations/fr.json new file mode 100644 index 00000000000..8ea273ed1d9 --- /dev/null +++ b/homeassistant/components/lock/translations/fr.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "V\u00e9rouiller {entity_name}", + "open": "Ouvre {entity_name}", + "unlock": "D\u00e9verrouiller {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} est verrouill\u00e9", + "is_unlocked": "{entity_name} est d\u00e9verrouill\u00e9" + }, + "trigger_type": { + "locked": "{entity_name} verrouill\u00e9", + "unlocked": "{entity_name} d\u00e9verrouill\u00e9" + } + }, + "state": { + "_": { + "locked": "Verrouill\u00e9", + "unlocked": "D\u00e9verrouill\u00e9" + } + }, + "title": "Verrou" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/gsw.json b/homeassistant/components/lock/translations/gsw.json new file mode 100644 index 00000000000..356f409b6c3 --- /dev/null +++ b/homeassistant/components/lock/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Gsperrt", + "unlocked": "Entsperrt" + } + }, + "title": "Schloss" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/he.json b/homeassistant/components/lock/translations/he.json new file mode 100644 index 00000000000..b51566b4d0d --- /dev/null +++ b/homeassistant/components/lock/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u05e0\u05e2\u05d5\u05dc", + "unlocked": "\u05e4\u05ea\u05d5\u05d7" + } + }, + "title": "\u05de\u05e0\u05e2\u05d5\u05dc" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/hi.json b/homeassistant/components/lock/translations/hi.json new file mode 100644 index 00000000000..6c7600b4953 --- /dev/null +++ b/homeassistant/components/lock/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0905\u0935\u0930\u094b\u0927\u093f\u0924", + "unlocked": "\u0916\u0941\u0932\u093e" + } + }, + "title": "\u0924\u093e\u0932\u093e" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/hr.json b/homeassistant/components/lock/translations/hr.json new file mode 100644 index 00000000000..9b66a81a8bd --- /dev/null +++ b/homeassistant/components/lock/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Zaklju\u010dan", + "unlocked": "Otklju\u010dan" + } + }, + "title": "Zaklju\u010davanje" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/hu.json b/homeassistant/components/lock/translations/hu.json new file mode 100644 index 00000000000..c048de07fa5 --- /dev/null +++ b/homeassistant/components/lock/translations/hu.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "{entity_name} z\u00e1r\u00e1sa", + "open": "{entity_name} nyit\u00e1sa", + "unlock": "{entity_name} nyit\u00e1sa" + }, + "condition_type": { + "is_locked": "{entity_name} z\u00e1rva", + "is_unlocked": "{entity_name} nyitva" + }, + "trigger_type": { + "locked": "{entity_name} be lett z\u00e1rva", + "unlocked": "{entity_name} ki lett nyitva" + } + }, + "state": { + "_": { + "locked": "Bez\u00e1rva", + "unlocked": "Kinyitva" + } + }, + "title": "Z\u00e1r" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/hy.json b/homeassistant/components/lock/translations/hy.json new file mode 100644 index 00000000000..bf4cdbf00b5 --- /dev/null +++ b/homeassistant/components/lock/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u053f\u0578\u0572\u057a\u057e\u0561\u056e \u0567", + "unlocked": "\u0532\u0561\u0581 \u0567" + } + }, + "title": "\u053f\u0578\u0572\u057a\u0565\u0584" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/id.json b/homeassistant/components/lock/translations/id.json new file mode 100644 index 00000000000..da11e3422f1 --- /dev/null +++ b/homeassistant/components/lock/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Terkunci", + "unlocked": "Terbuka" + } + }, + "title": "Kunci" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/is.json b/homeassistant/components/lock/translations/is.json new file mode 100644 index 00000000000..e1960ee5888 --- /dev/null +++ b/homeassistant/components/lock/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "L\u00e6st", + "unlocked": "Afl\u00e6st" + } + }, + "title": "L\u00e1s" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/it.json b/homeassistant/components/lock/translations/it.json new file mode 100644 index 00000000000..28f4476e5b8 --- /dev/null +++ b/homeassistant/components/lock/translations/it.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Blocca {entity_name}", + "open": "Apri {entity_name}", + "unlock": "Sblocca {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} \u00e8 bloccato", + "is_unlocked": "{entity_name} \u00e8 sbloccato" + }, + "trigger_type": { + "locked": "{entity_name} \u00e8 bloccato", + "unlocked": "{entity_name} \u00e8 sbloccato" + } + }, + "state": { + "_": { + "locked": "Bloccato", + "unlocked": "Sbloccato" + } + }, + "title": "Serratura" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/ko.json b/homeassistant/components/lock/translations/ko.json new file mode 100644 index 00000000000..6f04e2b4110 --- /dev/null +++ b/homeassistant/components/lock/translations/ko.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "{entity_name} \uc7a0\uae08", + "open": "{entity_name} \uc5f4\uae30", + "unlock": "{entity_name} \uc7a0\uae08 \ud574\uc81c" + }, + "condition_type": { + "is_locked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc73c\uba74", + "is_unlocked": "{entity_name} \uc774(\uac00) \uc7a0\uaca8\uc788\uc9c0 \uc54a\uc73c\uba74" + }, + "trigger_type": { + "locked": "{entity_name} \uc774(\uac00) \uc7a0\uae38 \ub54c", + "unlocked": "{entity_name} \uc774(\uac00) \uc7a0\uae08\uc774 \ud574\uc81c\ub420 \ub54c" + } + }, + "state": { + "_": { + "locked": "\uc7a0\uae40", + "unlocked": "\ud574\uc81c" + } + }, + "title": "\uc7a0\uae40" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/lb.json b/homeassistant/components/lock/translations/lb.json new file mode 100644 index 00000000000..879f98b6498 --- /dev/null +++ b/homeassistant/components/lock/translations/lb.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "{entity_name} sp\u00e4ren", + "open": "{entity_name} opmaachen", + "unlock": "{entity_name} entsp\u00e4ren" + }, + "condition_type": { + "is_locked": "{entity_name} ass gespaart", + "is_unlocked": "{entity_name} ass entspaart" + }, + "trigger_type": { + "locked": "{entity_name} gespaart", + "unlocked": "{entity_name} entspaart" + } + }, + "state": { + "_": { + "locked": "Gespaart", + "unlocked": "Net gespaart" + } + }, + "title": "Sp\u00e4ren" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/lv.json b/homeassistant/components/lock/translations/lv.json new file mode 100644 index 00000000000..2b360fd2685 --- /dev/null +++ b/homeassistant/components/lock/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Aizsl\u0113gts", + "unlocked": "Atsl\u0113gts" + } + }, + "title": "Sl\u0113dzene" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/nb.json b/homeassistant/components/lock/translations/nb.json new file mode 100644 index 00000000000..61513243782 --- /dev/null +++ b/homeassistant/components/lock/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "L\u00e5st", + "unlocked": "Ul\u00e5st" + } + }, + "title": "L\u00e5s" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/nl.json b/homeassistant/components/lock/translations/nl.json new file mode 100644 index 00000000000..948434d5340 --- /dev/null +++ b/homeassistant/components/lock/translations/nl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Vergrendel {entity_name}", + "open": "Open {entity_name}", + "unlock": "Ontgrendel {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} is vergrendeld", + "is_unlocked": "{entity_name} is ontgrendeld" + }, + "trigger_type": { + "locked": "{entity_name} vergrendeld", + "unlocked": "{entity_name} ontgrendeld" + } + }, + "state": { + "_": { + "locked": "Vergrendeld", + "unlocked": "Ontgrendeld" + } + }, + "title": "Slot" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/nn.json b/homeassistant/components/lock/translations/nn.json new file mode 100644 index 00000000000..61513243782 --- /dev/null +++ b/homeassistant/components/lock/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "L\u00e5st", + "unlocked": "Ul\u00e5st" + } + }, + "title": "L\u00e5s" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/no.json b/homeassistant/components/lock/translations/no.json new file mode 100644 index 00000000000..a28de395d01 --- /dev/null +++ b/homeassistant/components/lock/translations/no.json @@ -0,0 +1,18 @@ +{ + "device_automation": { + "action_type": { + "lock": "L\u00e5s {entity_name}", + "open": "\u00c5pne {entity_name}", + "unlock": "L\u00e5s opp {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} er l\u00e5st", + "is_unlocked": "{entity_name} er l\u00e5st opp" + }, + "trigger_type": { + "locked": "{entity_name} l\u00e5st", + "unlocked": "{entity_name} l\u00e5st opp" + } + }, + "title": "L\u00e5s" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/pl.json b/homeassistant/components/lock/translations/pl.json new file mode 100644 index 00000000000..3bdada017ff --- /dev/null +++ b/homeassistant/components/lock/translations/pl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "zablokuj {entity_name}", + "open": "otw\u00f3rz {entity_name}", + "unlock": "odblokuj {entity_name}" + }, + "condition_type": { + "is_locked": "zamek {entity_name} jest zamkni\u0119ty", + "is_unlocked": "zamek {entity_name} jest otwarty" + }, + "trigger_type": { + "locked": "nast\u0105pi zamkni\u0119cie {entity_name}", + "unlocked": "nast\u0105pi otwarcie {entity_name}" + } + }, + "state": { + "_": { + "locked": "zamkni\u0119ty", + "unlocked": "otwarty" + } + }, + "title": "Zamek" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/pt-BR.json b/homeassistant/components/lock/translations/pt-BR.json new file mode 100644 index 00000000000..f9c4e12214c --- /dev/null +++ b/homeassistant/components/lock/translations/pt-BR.json @@ -0,0 +1,16 @@ +{ + "device_automation": { + "action_type": { + "lock": "Bloquear {entity_name}", + "open": "Abrir {entity_name}", + "unlock": "Desbloquear {entity_name}" + } + }, + "state": { + "_": { + "locked": "Trancado", + "unlocked": "Destrancado" + } + }, + "title": "Trancar" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/pt.json b/homeassistant/components/lock/translations/pt.json new file mode 100644 index 00000000000..3828eaa95a7 --- /dev/null +++ b/homeassistant/components/lock/translations/pt.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "trigger_type": { + "locked": "{entity_name} fechada", + "unlocked": "{entity_name} aberta" + } + }, + "state": { + "_": { + "locked": "Trancada", + "unlocked": "Destrancada" + } + }, + "title": "Fechadura" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/ro.json b/homeassistant/components/lock/translations/ro.json new file mode 100644 index 00000000000..7c366846f7c --- /dev/null +++ b/homeassistant/components/lock/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Blocat", + "unlocked": "Deblocat" + } + }, + "title": "Blocare" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/ru.json b/homeassistant/components/lock/translations/ru.json new file mode 100644 index 00000000000..3b82c1f78cc --- /dev/null +++ b/homeassistant/components/lock/translations/ru.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c {entity_name}", + "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c {entity_name}", + "unlock": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} \u0432 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_unlocked": "{entity_name} \u0432 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" + }, + "trigger_type": { + "locked": "{entity_name} \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f", + "unlocked": "{entity_name} \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f" + } + }, + "state": { + "_": { + "locked": "\u0417\u0430\u043a\u0440\u044b\u0442", + "unlocked": "\u041e\u0442\u043a\u0440\u044b\u0442" + } + }, + "title": "\u0417\u0430\u043c\u043e\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/sk.json b/homeassistant/components/lock/translations/sk.json new file mode 100644 index 00000000000..c01a1106cd5 --- /dev/null +++ b/homeassistant/components/lock/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Zamknut\u00fd", + "unlocked": "Odomknut\u00fd" + } + }, + "title": "Z\u00e1mok" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/sl.json b/homeassistant/components/lock/translations/sl.json new file mode 100644 index 00000000000..57dc073aeff --- /dev/null +++ b/homeassistant/components/lock/translations/sl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "Zakleni {entity_name}", + "open": "Odpri {entity_name}", + "unlock": "Odkleni {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} je/so zaklenjen/a", + "is_unlocked": "{entity_name} je/so odklenjen/a" + }, + "trigger_type": { + "locked": "{entity_name} zaklenjen/a", + "unlocked": "{entity_name} odklenjen/a" + } + }, + "state": { + "_": { + "locked": "Zaklenjeno", + "unlocked": "Odklenjeno" + } + }, + "title": "Klju\u010davnice" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/sv.json b/homeassistant/components/lock/translations/sv.json new file mode 100644 index 00000000000..ae7ec66b16a --- /dev/null +++ b/homeassistant/components/lock/translations/sv.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "L\u00e5s {entity_name}", + "open": "\u00d6ppna {entity_name}", + "unlock": "L\u00e5s upp {entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name} \u00e4r l\u00e5st", + "is_unlocked": "{entity_name} \u00e4r ol\u00e5st" + }, + "trigger_type": { + "locked": "{entity_name} l\u00e5st", + "unlocked": "{entity_name} ol\u00e5st" + } + }, + "state": { + "_": { + "locked": "L\u00e5st", + "unlocked": "Ol\u00e5st" + } + }, + "title": "L\u00e5s" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/ta.json b/homeassistant/components/lock/translations/ta.json new file mode 100644 index 00000000000..f9b9e7e4211 --- /dev/null +++ b/homeassistant/components/lock/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0baa\u0bc2\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "unlocked": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + } + }, + "title": "\u0baa\u0bc2\u0b9f\u0bcd\u0b9f\u0bc1" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/te.json b/homeassistant/components/lock/translations/te.json new file mode 100644 index 00000000000..39d7659e924 --- /dev/null +++ b/homeassistant/components/lock/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0c2e\u0c42\u0c38\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41", + "unlocked": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41" + } + }, + "title": "\u0c32\u0c3e\u0c15\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/th.json b/homeassistant/components/lock/translations/th.json new file mode 100644 index 00000000000..a14ac87b82b --- /dev/null +++ b/homeassistant/components/lock/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0e25\u0e47\u0e2d\u0e04", + "unlocked": "\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04" + } + }, + "title": "\u0e25\u0e47\u0e2d\u0e04" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/tr.json b/homeassistant/components/lock/translations/tr.json new file mode 100644 index 00000000000..95b50398fda --- /dev/null +++ b/homeassistant/components/lock/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "Kilitli", + "unlocked": "Kilitli de\u011fil" + } + }, + "title": "Kilit" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/uk.json b/homeassistant/components/lock/translations/uk.json new file mode 100644 index 00000000000..d919252eb56 --- /dev/null +++ b/homeassistant/components/lock/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e", + "unlocked": "\u0420\u043e\u0437\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e" + } + }, + "title": "\u0417\u0430\u043c\u043e\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/vi.json b/homeassistant/components/lock/translations/vi.json new file mode 100644 index 00000000000..cc8260f04f3 --- /dev/null +++ b/homeassistant/components/lock/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "locked": "\u0110\u00e3 kh\u00f3a", + "unlocked": "M\u1edf kh\u00f3a" + } + }, + "title": "Kh\u00f3a" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/zh-Hans.json b/homeassistant/components/lock/translations/zh-Hans.json new file mode 100644 index 00000000000..07ab36a2d4d --- /dev/null +++ b/homeassistant/components/lock/translations/zh-Hans.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "trigger_type": { + "locked": "{entity_name} \u88ab\u9501\u5b9a", + "unlocked": "{entity_name} \u88ab\u89e3\u9501" + } + }, + "state": { + "_": { + "locked": "\u9501\u5b9a", + "unlocked": "\u89e3\u9501" + } + }, + "title": "\u9501" +} \ No newline at end of file diff --git a/homeassistant/components/lock/translations/zh-Hant.json b/homeassistant/components/lock/translations/zh-Hant.json new file mode 100644 index 00000000000..c5d2c262a7c --- /dev/null +++ b/homeassistant/components/lock/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "lock": "\u4e0a\u9396{entity_name}", + "open": "\u958b\u555f{entity_name}", + "unlock": "\u89e3\u9396{entity_name}" + }, + "condition_type": { + "is_locked": "{entity_name}\u5df2\u4e0a\u9396", + "is_unlocked": "{entity_name}\u5df2\u89e3\u9396" + }, + "trigger_type": { + "locked": "{entity_name}\u5df2\u4e0a\u9396", + "unlocked": "{entity_name}\u5df2\u89e3\u9396" + } + }, + "state": { + "_": { + "locked": "\u5df2\u4e0a\u9396", + "unlocked": "\u5df2\u89e3\u9396" + } + }, + "title": "\u9580\u9396" +} \ No newline at end of file diff --git a/homeassistant/components/lockitron/lock.py b/homeassistant/components/lockitron/lock.py index 8ff8f430355..7d34bb02472 100644 --- a/homeassistant/components/lockitron/lock.py +++ b/homeassistant/components/lockitron/lock.py @@ -5,7 +5,7 @@ import requests import voluptuous as vol from homeassistant.components.lock import PLATFORM_SCHEMA, LockDevice -from homeassistant.const import CONF_ACCESS_TOKEN, CONF_ID +from homeassistant.const import CONF_ACCESS_TOKEN, CONF_ID, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -25,7 +25,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): response = requests.get( f"{BASE_URL}/v2/locks/{device_id}?access_token={access_token}", timeout=5 ) - if response.status_code == 200: + if response.status_code == HTTP_OK: add_entities([Lockitron(response.json()["state"], access_token, device_id)]) else: _LOGGER.error("Error retrieving lock status during init: %s", response.text) @@ -67,7 +67,7 @@ class Lockitron(LockDevice): f"{BASE_URL}/v2/locks/{self.device_id}?access_token={self.access_token}", timeout=5, ) - if response.status_code == 200: + if response.status_code == HTTP_OK: self._state = response.json()["state"] else: _LOGGER.error("Error retrieving lock status: %s", response.text) @@ -78,7 +78,7 @@ class Lockitron(LockDevice): f"{BASE_URL}/v2/locks/{self.device_id}?access_token={self.access_token}&state={requested_state}", timeout=5, ) - if response.status_code == 200: + if response.status_code == HTTP_OK: return response.json()["state"] _LOGGER.error( diff --git a/homeassistant/components/lockitron/manifest.json b/homeassistant/components/lockitron/manifest.json index 18ab9036c5e..088bc847621 100644 --- a/homeassistant/components/lockitron/manifest.json +++ b/homeassistant/components/lockitron/manifest.json @@ -2,7 +2,5 @@ "domain": "lockitron", "name": "Lockitron", "documentation": "https://www.home-assistant.io/integrations/lockitron", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/logbook/__init__.py b/homeassistant/components/logbook/__init__.py index 9fad7e9752f..cd6a06720ae 100644 --- a/homeassistant/components/logbook/__init__.py +++ b/homeassistant/components/logbook/__init__.py @@ -8,12 +8,6 @@ from sqlalchemy.exc import SQLAlchemyError import voluptuous as vol from homeassistant.components import sun -from homeassistant.components.homekit.const import ( - ATTR_DISPLAY_NAME, - ATTR_VALUE, - DOMAIN as DOMAIN_HOMEKIT, - EVENT_HOMEKIT_CHANGED, -) from homeassistant.components.http import HomeAssistantView from homeassistant.components.recorder.models import Events, States from homeassistant.components.recorder.util import ( @@ -26,7 +20,6 @@ from homeassistant.const import ( ATTR_ENTITY_ID, ATTR_HIDDEN, ATTR_NAME, - ATTR_SERVICE, CONF_EXCLUDE, CONF_INCLUDE, EVENT_AUTOMATION_TRIGGERED, @@ -89,7 +82,6 @@ ALL_EVENT_TYPES = [ EVENT_LOGBOOK_ENTRY, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, - EVENT_HOMEKIT_CHANGED, EVENT_AUTOMATION_TRIGGERED, EVENT_SCRIPT_STARTED, ] @@ -324,24 +316,6 @@ def humanify(hass, events): "context_user_id": event.context.user_id, } - elif event.event_type == EVENT_HOMEKIT_CHANGED: - data = event.data - entity_id = data.get(ATTR_ENTITY_ID) - value = data.get(ATTR_VALUE) - - value_msg = f" to {value}" if value else "" - message = f"send command {data[ATTR_SERVICE]}{value_msg} for {data[ATTR_DISPLAY_NAME]}" - - yield { - "when": event.time_fired, - "name": "HomeKit", - "message": message, - "domain": DOMAIN_HOMEKIT, - "entity_id": entity_id, - "context_id": event.context.id, - "context_user_id": event.context.user_id, - } - elif event.event_type == EVENT_AUTOMATION_TRIGGERED: yield { "when": event.time_fired, @@ -498,9 +472,6 @@ def _keep_event(hass, event, entities_filter): elif event.event_type in hass.data.get(DOMAIN, {}): domain = hass.data[DOMAIN][event.event_type][0] - elif event.event_type == EVENT_HOMEKIT_CHANGED: - domain = DOMAIN_HOMEKIT - if not entity_id and domain: entity_id = f"{domain}." diff --git a/homeassistant/components/logbook/manifest.json b/homeassistant/components/logbook/manifest.json index 9d5c78dc34d..3980469c9c5 100644 --- a/homeassistant/components/logbook/manifest.json +++ b/homeassistant/components/logbook/manifest.json @@ -2,7 +2,6 @@ "domain": "logbook", "name": "Logbook", "documentation": "https://www.home-assistant.io/integrations/logbook", - "requirements": [], "dependencies": ["frontend", "http", "recorder"], "after_dependencies": ["homekit"], "codeowners": [] diff --git a/homeassistant/components/logbook/services.yaml b/homeassistant/components/logbook/services.yaml index 08c463feed2..fb1736d7784 100644 --- a/homeassistant/components/logbook/services.yaml +++ b/homeassistant/components/logbook/services.yaml @@ -12,4 +12,4 @@ log: example: "light.kitchen" domain: description: Icon of domain to display in custom logbook entry [Optional] - example: "light" \ No newline at end of file + example: "light" diff --git a/homeassistant/components/logentries/manifest.json b/homeassistant/components/logentries/manifest.json index c546030853f..23500d66dd6 100644 --- a/homeassistant/components/logentries/manifest.json +++ b/homeassistant/components/logentries/manifest.json @@ -2,7 +2,5 @@ "domain": "logentries", "name": "Logentries", "documentation": "https://www.home-assistant.io/integrations/logentries", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/logger/manifest.json b/homeassistant/components/logger/manifest.json index 45f5cc934b2..2cb04538260 100644 --- a/homeassistant/components/logger/manifest.json +++ b/homeassistant/components/logger/manifest.json @@ -2,8 +2,6 @@ "domain": "logger", "name": "Logger", "documentation": "https://www.home-assistant.io/integrations/logger", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/logi_circle/.translations/bg.json b/homeassistant/components/logi_circle/.translations/bg.json deleted file mode 100644 index 406250cd77c..00000000000 --- a/homeassistant/components/logi_circle/.translations/bg.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Logi Circle \u0430\u043a\u0430\u0443\u043d\u0442.", - "external_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u0432\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u0432 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441.", - "external_setup": "Logi Circle \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043e\u0442 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441.", - "no_flows": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Logi Circle, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Logi Circle." - }, - "error": { - "auth_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0441 API.", - "auth_timeout": "\u0418\u0437\u0442\u0435\u0447\u0435 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0446\u0438\u044f, \u0434\u043e\u043a\u0430\u0442\u043e \u0438\u0437\u0438\u0441\u043a\u0432\u0430\u0445\u043c\u0435 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f", - "follow_link": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0438 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435." - }, - "step": { - "auth": { - "description": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 [link]({authorization_url}) \u0438 \u041f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Logi Circle, \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443. \n\n[Link]({authorization_url})", - "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Logi Circle" - }, - "user": { - "data": { - "flow_impl": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" - }, - "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435, \u0447\u0440\u0435\u0437 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0441 Logi Circle.", - "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/ca.json b/homeassistant/components/logi_circle/.translations/ca.json deleted file mode 100644 index 8e455023f2a..00000000000 --- a/homeassistant/components/logi_circle/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte de Logi Circule.", - "external_error": "S'ha produ\u00eft una excepci\u00f3 d\u2019un altre flux de dades.", - "external_setup": "Logi Circle s'ha configurat correctament des d'un altre flux de dades.", - "no_flows": "Necessites configurar Logi Circle abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Logi Circle." - }, - "error": { - "auth_error": "Ha fallat l\u2019autoritzaci\u00f3 de l\u2019API.", - "auth_timeout": "L\u2019autoritzaci\u00f3 ha expirat durant l'obtenci\u00f3 del testimoni d\u2019acc\u00e9s.", - "follow_link": "V\u00e9s a l'enlla\u00e7 i autentica't abans de pr\u00e9mer Envia" - }, - "step": { - "auth": { - "description": "V\u00e9s a l'enlla\u00e7 de sota i Accepta l'acc\u00e9s al teu compte de Logi Circle, despr\u00e9s, torna i prem Envia (tamb\u00e9 a sota).\n\n[Enlla\u00e7]({authorization_url})", - "title": "Autenticaci\u00f3 amb Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Prove\u00efdor" - }, - "description": "Tria quin prove\u00efdor d'autenticaci\u00f3 vols utilitzar per autenticar-te amb Logi Circle.", - "title": "Prove\u00efdor d'autenticaci\u00f3" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/da.json b/homeassistant/components/logi_circle/.translations/da.json deleted file mode 100644 index 1f2a96fe5b4..00000000000 --- a/homeassistant/components/logi_circle/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt Logi Circle-konto.", - "external_error": "Undtagelse skete fra et andet flow.", - "external_setup": "Logi Circle er konfigureret med succes fra et andet flow.", - "no_flows": "Du skal konfigurere Logi Circle f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Godkendt med Logi Circle." - }, - "error": { - "auth_error": "API-godkendelse mislykkedes.", - "auth_timeout": "Godkendelsen fik timeout ved anmodning om adgangstoken.", - "follow_link": "F\u00f8lg linket og godkend f\u00f8r du trykker p\u00e5 send." - }, - "step": { - "auth": { - "description": "F\u00f8lg linket herunder og Accept\u00e9r adgang til din Logi Circle-konto, og vend s\u00e5 tilbage og tryk p\u00e5 Indsend nedenfor. \n\n[Link]({authorization_url})", - "title": "Godkend med Logi Circle." - }, - "user": { - "data": { - "flow_impl": "Udbyder" - }, - "description": "V\u00e6lg via hvilken godkendelsesudbyder du vil godkende med Logi Circle.", - "title": "Godkendelsesudbyder" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/de.json b/homeassistant/components/logi_circle/.translations/de.json deleted file mode 100644 index 4d7ef918ddc..00000000000 --- a/homeassistant/components/logi_circle/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Es kann nur ein einziges Logi Circle-Konto konfiguriert werden.", - "external_error": "Es ist eine Ausnahme in einem anderen Flow aufgetreten.", - "external_setup": "Logi Circle wurde erfolgreich aus einem anderen Flow konfiguriert.", - "no_flows": "Logi Circle muss konfiguriert werden, bevor die Authentifizierung erfolgen kann. [Bitte lies die Anweisungen] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Erfolgreiche Authentifizierung mit Logi Circle." - }, - "error": { - "auth_error": "Die API-Autorisierung ist fehlgeschlagen.", - "auth_timeout": "Zeit\u00fcberschreitung der Autorisierung beim Anfordern des Zugriffstokens.", - "follow_link": "Bitte folge dem Link und authentifiziere dich, bevor du auf Senden klickst." - }, - "step": { - "auth": { - "description": "Folge dem Link unten und klicke Akzeptieren um auf dein Logi Circle-Konto zuzugreifen. Kehre dann zur\u00fcck und dr\u00fccke unten auf Senden . \n\n [Link] ({authorization_url})", - "title": "Authentifizierung mit Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Anbieter" - }, - "description": "W\u00e4hle aus, \u00fcber welchen Anbieter du dich bei Logi Circle authentifizieren m\u00f6chtest.", - "title": "Authentifizierungsanbieter" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/en.json b/homeassistant/components/logi_circle/.translations/en.json deleted file mode 100644 index bf3c059f81a..00000000000 --- a/homeassistant/components/logi_circle/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure a single Logi Circle account.", - "external_error": "Exception occurred from another flow.", - "external_setup": "Logi Circle successfully configured from another flow.", - "no_flows": "You need to configure Logi Circle before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Successfully authenticated with Logi Circle." - }, - "error": { - "auth_error": "API authorization failed.", - "auth_timeout": "Authorization timed out when requesting access token.", - "follow_link": "Please follow the link and authenticate before pressing Submit." - }, - "step": { - "auth": { - "description": "Please follow the link below and Accept access to your Logi Circle account, then come back and press Submit below.\n\n[Link]({authorization_url})", - "title": "Authenticate with Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Provider" - }, - "description": "Pick via which authentication provider you want to authenticate with Logi Circle.", - "title": "Authentication Provider" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/es-419.json b/homeassistant/components/logi_circle/.translations/es-419.json deleted file mode 100644 index 2393908e281..00000000000 --- a/homeassistant/components/logi_circle/.translations/es-419.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puede configurar una sola cuenta de Logi Circle.", - "external_error": "Se produjo una excepci\u00f3n de otro flujo.", - "external_setup": "Logi Circle se configur\u00f3 correctamente desde otro flujo." - }, - "create_entry": { - "default": "Autenticado con \u00e9xito con Logi Circle." - }, - "error": { - "auth_error": "Autorizaci\u00f3n de API fallida." - }, - "step": { - "auth": { - "title": "Autenticar con Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Proveedor" - }, - "title": "Proveedor de autenticaci\u00f3n" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/es.json b/homeassistant/components/logi_circle/.translations/es.json deleted file mode 100644 index 7209bdfefd5..00000000000 --- a/homeassistant/components/logi_circle/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puedes configurar una cuenta de Logi Circle.", - "external_error": "Se produjo una excepci\u00f3n de otro flujo.", - "external_setup": "Logi Circle se ha configurado correctamente a partir de otro flujo.", - "no_flows": "Es necesario configurar Logi Circle antes de poder autenticarse con \u00e9l. [Echa un vistazo a las instrucciones] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Autenticado correctamente con Logi Circle." - }, - "error": { - "auth_error": "Error en la autorizaci\u00f3n de la API.", - "auth_timeout": "Se ha agotado el tiempo de espera de la autorizaci\u00f3n al solicitar el token de acceso.", - "follow_link": "Accede al enlace e identif\u00edcate antes de pulsar Enviar." - }, - "step": { - "auth": { - "description": "Accede al siguiente enlace y Acepta el acceso a tu cuenta Logi Circle, despu\u00e9s vuelve y pulsa en Enviar a continuaci\u00f3n.\n\n[Link]({authorization_url})", - "title": "Autenticaci\u00f3n con Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Proveedor" - }, - "description": "Elige a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n quieres autenticarte con Logi Circle.", - "title": "Proveedor de autenticaci\u00f3n" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/fr.json b/homeassistant/components/logi_circle/.translations/fr.json deleted file mode 100644 index 7f8a2f2a098..00000000000 --- a/homeassistant/components/logi_circle/.translations/fr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Logi Circle.", - "external_error": "Une exception est survenue \u00e0 partir d'un autre flux.", - "external_setup": "Logi Circle a \u00e9t\u00e9 configur\u00e9 avec succ\u00e8s \u00e0 partir d'un autre flux.", - "no_flows": "Vous devez configurer Logi Circle avant de pouvoir vous authentifier aupr\u00e8s de celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Authentifi\u00e9 avec succ\u00e8s avec Logi Circle." - }, - "error": { - "auth_error": "L'autorisation de l'API a \u00e9chou\u00e9.", - "auth_timeout": "L'autorisation a expir\u00e9 lors de la demande du jeton d'acc\u00e8s.", - "follow_link": "Veuillez suivre le lien et vous authentifier avant d'appuyer sur Soumettre." - }, - "step": { - "auth": { - "description": "Suivez le lien ci-dessous et acceptez acc\u00e8s \u00e0 votre compte Logi Circle, puis revenez et appuyez sur Envoyer ci-dessous. \n\n [Lien] ( {authorization_url} )", - "title": "Authentifier avec Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Fournisseur" - }, - "description": "Choisissez via quel fournisseur d'authentification vous souhaitez vous authentifier avec Logi Circle.", - "title": "Fournisseur d'authentification" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/it.json b/homeassistant/components/logi_circle/.translations/it.json deleted file mode 100644 index d7c1d9ba9de..00000000000 --- a/homeassistant/components/logi_circle/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare solo un singolo account Logi Circle.", - "external_error": "Si \u00e8 verificata un'eccezione da un altro flusso.", - "external_setup": "Logi Circle configurato con successo da un altro flusso.", - "no_flows": "Devi configurare Logi Circle prima di poter eseguire l'autenticazione. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Autenticato con successo con Logi Circle." - }, - "error": { - "auth_error": "Autorizzazione API fallita.", - "auth_timeout": "Timeout dell'autorizzazione durante la richiesta del token di accesso.", - "follow_link": "Segui il link e autenticati prima di premere Invia" - }, - "step": { - "auth": { - "description": "Segui il link qui sotto e Accetta l'accesso al tuo account Logi Circle, quindi torna indietro e premi Invia qui sotto. \n\n [Link]({authorization_url})", - "title": "Autenticarsi con Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Provider" - }, - "description": "Scegli tramite quale provider di autenticazione vuoi autenticarti con Logi Circle.", - "title": "Provider di autenticazione" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/ko.json b/homeassistant/components/logi_circle/.translations/ko.json deleted file mode 100644 index 577f3475b58..00000000000 --- a/homeassistant/components/logi_circle/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "create_entry": { - "default": "Logi Circle \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "auth_error": "API \uc2b9\uc778\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.", - "auth_timeout": "\uc5d1\uc138\uc2a4 \ud1a0\ud070 \uc694\uccad\uc911 \uc2b9\uc778 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "follow_link": "Submit \ubc84\ud2bc\uc744 \ub204\ub974\uae30 \uc804\uc5d0 \ub9c1\ud06c\ub97c \ub530\ub77c \uc778\uc99d\uc744 \ubc1b\uc544\uc8fc\uc138\uc694" - }, - "step": { - "auth": { - "description": "\uc544\ub798 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uc5ec Logi Circle \uacc4\uc815\uc5d0 \ub300\ud574 \ub3d9\uc758 \ud55c \ub2e4\uc74c, \ub2e4\uc2dc \ub3cc\uc544\uc640\uc11c \ud558\ub2e8\uc758 Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.\n\n[\ub9c1\ud06c]({authorization_url})", - "title": "Logi Circle \uc778\uc99d" - }, - "user": { - "data": { - "flow_impl": "\uacf5\uae09\uc790" - }, - "description": "Logi Circle \uc744 \uc778\uc99d\ud558\uae30 \uc704\ud55c \uc778\uc99d \uacf5\uae09\uc790\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", - "title": "\uc778\uc99d \uacf5\uae09\uc790" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/lb.json b/homeassistant/components/logi_circle/.translations/lb.json deleted file mode 100644 index b0befa80fd4..00000000000 --- a/homeassistant/components/logi_circle/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Logi Circle Kont konfigur\u00e9ieren.", - "external_error": "Ausnam vun engem anere Floss.", - "external_setup": "Logi Circle gouf vun engem anere Floss erfollegr\u00e4ich konfigur\u00e9iert.", - "no_flows": "Dir musst Logi Circle konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Logi Circle authentifiz\u00e9iert." - }, - "error": { - "auth_error": "Feeler bei der API Autorisatioun.", - "auth_timeout": "Z\u00e4it Iwwerschreidung vun der Autorisatioun beim ufroe vum Acc\u00e8s Jeton.", - "follow_link": "Follegt w.e.g dem Link an authentifiz\u00e9iert iech ier de op Ofsch\u00e9cken dr\u00e9ckt." - }, - "step": { - "auth": { - "description": "Follegt dem Link \u00ebnnendr\u00ebnner an accept\u00e9iert den Acc\u00e8s zu \u00e4rem Logi Circle Kont , a kommt dann zer\u00e9ck heihin an dr\u00e9ck op ofsch\u00e9cken hei \u00ebnnen.\n\n[Link]({authorization_url})", - "title": "Mat Logi Circle authentifiz\u00e9ieren" - }, - "user": { - "data": { - "flow_impl": "Ubidder" - }, - "description": "Wielt den Authentifikatioun Ubidder deen sech mat Logi Circle verbanne soll.", - "title": "Authentifikatioun Ubidder" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/nl.json b/homeassistant/components/logi_circle/.translations/nl.json deleted file mode 100644 index 822447f353d..00000000000 --- a/homeassistant/components/logi_circle/.translations/nl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n Logi Circle-account configureren.", - "external_error": "Uitzondering opgetreden uit een andere stroom.", - "external_setup": "Logi Circle is met succes geconfigureerd vanuit een andere stroom.", - "no_flows": "U moet Logi Circle configureren voordat u ermee kunt authenticeren. [Lees de instructies] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Succesvol geverifieerd met Logi Circle." - }, - "error": { - "auth_error": "API-autorisatie mislukt.", - "auth_timeout": "Er is een time-out opgetreden bij autorisatie bij het aanvragen van toegangstoken.", - "follow_link": "Volg de link en authenticeer voordat u op Verzenden drukt." - }, - "step": { - "auth": { - "description": "Volg de onderstaande link en Accepteer toegang tot uw Logi Circle-account, kom dan terug en druk hieronder op Verzenden . \n\n [Link] ({authorization_url})", - "title": "Authenticeren met Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Provider" - }, - "description": "Kies met welke authenticatieprovider u wilt authenticeren met Logi Circle.", - "title": "Authenticatieprovider" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/nn.json b/homeassistant/components/logi_circle/.translations/nn.json deleted file mode 100644 index 0ea648256d3..00000000000 --- a/homeassistant/components/logi_circle/.translations/nn.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "create_entry": { - "default": "Vellukka autentisering med Logi Circle" - }, - "error": { - "auth_error": "API-autorisasjonen mislyktes." - }, - "step": { - "auth": { - "title": "Godkjenn med Logi Circle" - }, - "user": { - "description": "Vel kva for ein autentiseringsleverand\u00f8r du vil godkjenne med Logi Circle" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/no.json b/homeassistant/components/logi_circle/.translations/no.json deleted file mode 100644 index 9f676e2acc7..00000000000 --- a/homeassistant/components/logi_circle/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bare konfigurere en Logi Circle konto.", - "external_error": "Det oppstod et unntak fra en annen flow.", - "external_setup": "Logi Circle er vellykket konfigurert fra en annen flow.", - "no_flows": "Du m\u00e5 konfigurere Logi Circle f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Vellykket autentisering med Logi Circle" - }, - "error": { - "auth_error": "API-autorisasjonen mislyktes.", - "auth_timeout": "Autorisasjon ble tidsavbrutt da du ba om token.", - "follow_link": "Vennligst f\u00f8lg lenken og godkjenn f\u00f8r du trykker send." - }, - "step": { - "auth": { - "description": "Vennligst f\u00f8lg lenken nedenfor og Godta tilgang til Logi Circle kontoen din, kom deretter tilbake og trykk Send nedenfor. \n\n [Link]({authorization_url})", - "title": "Godkjenn med Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Tilbyder" - }, - "description": "Velg med hvilken autentiseringsleverand\u00f8r du vil godkjenne Logi Circle.", - "title": "Autentiseringsleverand\u00f8r" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/pl.json b/homeassistant/components/logi_circle/.translations/pl.json deleted file mode 100644 index 333a295ad06..00000000000 --- a/homeassistant/components/logi_circle/.translations/pl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Logi Circle.", - "external_error": "Wyst\u0105pi\u0142 wyj\u0105tek z innego przep\u0142ywu.", - "external_setup": "Logi Circle zosta\u0142o pomy\u015blnie skonfigurowane z innego przep\u0142ywu.", - "no_flows": "Musisz skonfigurowa\u0107 Logi Circle, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Logi Circle." - }, - "error": { - "auth_error": "Autoryzacja API nie powiod\u0142a si\u0119.", - "auth_timeout": "Przekroczono limit czasu \u017c\u0105dania tokena dost\u0119pu.", - "follow_link": "Post\u0119puj zgodnie z linkiem i uwierzytelnij si\u0119 przed naci\u015bni\u0119ciem przycisku Prze\u015blij." - }, - "step": { - "auth": { - "description": "Kliknij poni\u017cszy link i Zaakceptuj dost\u0119p do konta Logi Circle, a nast\u0119pnie wr\u00f3\u0107 i naci\u015bnij Prze\u015blij poni\u017cej. \n\n [Link]({authorization_url})", - "title": "Uwierzytelnij za pomoc\u0105 Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Dostawca" - }, - "description": "Wybierz, kt\u00f3rego dostawc\u0119 uwierzytelnienia chcesz u\u017cywa\u0107 z Logi Circle.", - "title": "Dostawca uwierzytelnienia" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/pt-BR.json b/homeassistant/components/logi_circle/.translations/pt-BR.json deleted file mode 100644 index 2912b7d7300..00000000000 --- a/homeassistant/components/logi_circle/.translations/pt-BR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Voc\u00ea s\u00f3 pode configurar uma \u00fanica conta do Logi Circle.", - "external_error": "Exce\u00e7\u00e3o ocorreu a partir de outro fluxo.", - "external_setup": "Logi Circle configurado com sucesso a partir de outro fluxo.", - "no_flows": "Voc\u00ea precisa configurar o Logi Circle antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Autenticado com sucesso com o Logi Circle." - }, - "error": { - "auth_error": "Falha na autoriza\u00e7\u00e3o da API.", - "auth_timeout": "A autoriza\u00e7\u00e3o atingiu o tempo limite quando solicitou o token de acesso.", - "follow_link": "Por favor, siga o link e autentique antes de pressionar Enviar." - }, - "step": { - "auth": { - "description": "Por favor, siga o link abaixo e Aceite o acesso \u00e0 sua conta do Logi Circle, depois volte e pressione Enviar abaixo. \n\n [Link] ( {authorization_url} )", - "title": "Autenticar com o Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Provedor" - }, - "description": "Escolha atrav\u00e9s de qual provedor de autentica\u00e7\u00e3o voc\u00ea deseja autenticar com o Logi Circle.", - "title": "Provedor de Autentica\u00e7\u00e3o" - } - }, - "title": "C\u00edrculo Logi" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/ru.json b/homeassistant/components/logi_circle/.translations/ru.json deleted file mode 100644 index 9cecf3081b6..00000000000 --- a/homeassistant/components/logi_circle/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "external_error": "\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.", - "external_setup": "Logi Circle \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.", - "no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Logi Circle \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "error": { - "auth_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 API.", - "auth_timeout": "\u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "follow_link": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\"." - }, - "step": { - "auth": { - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e [\u0441\u0441\u044b\u043b\u043a\u0435]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Logi Circle, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c.", - "title": "Logi Circle" - }, - "user": { - "data": { - "flow_impl": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0445\u043e\u0434.", - "title": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/sl.json b/homeassistant/components/logi_circle/.translations/sl.json deleted file mode 100644 index 3906f96a39f..00000000000 --- a/homeassistant/components/logi_circle/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nastavite lahko samo en ra\u010dun Logi Circle.", - "external_error": "Izjema je pri\u0161la iz drugega toka.", - "external_setup": "Logi Circle uspe\u0161no konfiguriran iz drugega toka.", - "no_flows": "Preden lahko preverite pristnost, morate konfigurirati Logi Circle. [Preberite navodila](https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Uspe\u0161no overjen z Logi Circle-om." - }, - "error": { - "auth_error": "Odobritev API-ja ni uspela.", - "auth_timeout": "Pri zahtevi za dostopni \u017eeton je potekla \u010dasovna omejitev.", - "follow_link": "Prosimo, sledite povezavi in preverite pristnost, preden pritisnete Po\u0161lji" - }, - "step": { - "auth": { - "description": "Prosimo, sledite spodnji povezavi in Sprejmite dostop do va\u0161ega Logi Circle ra\u010duna, nato se vrnite in pritisnite Po\u0161lji spodaj. \n\n [Povezava] ( {authorization_url} )", - "title": "Overi z Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Ponudnik" - }, - "description": "Izberite prek katerega ponudnika overjanja \u017eelite overiti Logi Circle.", - "title": "Ponudnik overjanja" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/sv.json b/homeassistant/components/logi_circle/.translations/sv.json deleted file mode 100644 index 221d2a7a86b..00000000000 --- a/homeassistant/components/logi_circle/.translations/sv.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan endast konfigurera ett Logi Circle-konto.", - "external_error": "Undantag intr\u00e4ffade fr\u00e5n ett annat fl\u00f6de.", - "external_setup": "Logi Circle har konfigurerats fr\u00e5n ett annat fl\u00f6de.", - "no_flows": "Du m\u00e5ste konfigurera Logi Circle innan du kan autentisera med den. [V\u00e4nligen l\u00e4s instruktionerna] (https://www.home-assistant.io/components/logi_circle/)." - }, - "create_entry": { - "default": "Autentiserad med Logi Circle." - }, - "error": { - "auth_error": "API autentiseringen misslyckades.", - "auth_timeout": "Godk\u00e4nnandet tog f\u00f6r l\u00e5ng tid vid beg\u00e4ran om \u00e5tkomsttoken.", - "follow_link": "V\u00e4nligen f\u00f6lj l\u00e4nken och autentisera innan du trycker p\u00e5 Skicka." - }, - "step": { - "auth": { - "description": "V\u00e4nligen f\u00f6lj l\u00e4nken nedan och Godk\u00e4nn \u00e5tkomst till ditt Logic Circle-konto kom sedan tillbaka och tryck p\u00e5 Skicka nedan. \n\n [L\u00e4nk] ( {authorization_url} )", - "title": "Autentisera med Logi Circle" - }, - "user": { - "data": { - "flow_impl": "Leverant\u00f6r" - }, - "description": "V\u00e4lj vilken autentiseringsleverant\u00f6r du vill autentisera med Logi Circle.", - "title": "Verifieringsleverant\u00f6r" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/zh-Hant.json b/homeassistant/components/logi_circle/.translations/zh-Hant.json deleted file mode 100644 index 1eb3b71c942..00000000000 --- a/homeassistant/components/logi_circle/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Logi Circle \u5e33\u865f\u3002", - "external_error": "\u5176\u4ed6\u6d41\u7a0b\u767c\u751f\u7570\u5e38\u3002", - "external_setup": "\u5df2\u7531\u5176\u4ed6\u6d41\u7a0b\u6210\u529f\u8a2d\u5b9a Logi Circle\u3002", - "no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Logi Circle \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15]\uff08https://www.home-assistant.io/components/logi_circle/\uff09\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Logi Circle \u8a2d\u5099\u3002" - }, - "error": { - "auth_error": "API \u8a8d\u8b49\u5931\u6557\u3002", - "auth_timeout": "\u8acb\u6c42\u5b58\u53d6\u5bc6\u9470\u8a8d\u8b49\u903e\u6642\u3002", - "follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002" - }, - "step": { - "auth": { - "description": "\u8acb\u4f7f\u7528\u4e0b\u65b9\u9023\u7d50\u4e26\u9ede\u9078\u63a5\u53d7\u4ee5\u5b58\u53d6 Logi Circle \u5e33\u865f\uff0c\u7136\u5f8c\u8fd4\u56de\u6b64\u9801\u9762\u4e26\u9ede\u9078\u4e0b\u65b9\u7684\u50b3\u9001\u3002\n\n[Link]({authorization_url})", - "title": "\u4ee5 Logi Circle \u8a8d\u8b49" - }, - "user": { - "data": { - "flow_impl": "\u63d0\u4f9b\u8005" - }, - "description": "\u65bc\u8a8d\u8b49\u63d0\u4f9b\u8005\u4e2d\u6311\u9078\u6240\u8981\u9032\u884c Logi Circle \u8a8d\u8b49\u63d0\u4f9b\u8005\u3002", - "title": "\u8a8d\u8b49\u63d0\u4f9b\u8005" - } - }, - "title": "Logi Circle" - } -} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/config_flow.py b/homeassistant/components/logi_circle/config_flow.py index bc585153b64..527353eebf6 100644 --- a/homeassistant/components/logi_circle/config_flow.py +++ b/homeassistant/components/logi_circle/config_flow.py @@ -9,7 +9,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.components.http import HomeAssistantView -from homeassistant.const import CONF_SENSORS +from homeassistant.const import CONF_SENSORS, HTTP_BAD_REQUEST from homeassistant.core import callback from .const import ( @@ -207,5 +207,5 @@ class LogiCircleAuthCallbackView(HomeAssistantView): ) return self.json_message("Authorisation code saved") return self.json_message( - "Authorisation code missing from query string", status_code=400 + "Authorisation code missing from query string", status_code=HTTP_BAD_REQUEST ) diff --git a/homeassistant/components/logi_circle/strings.json b/homeassistant/components/logi_circle/strings.json index 57dd0b709b7..347589c7881 100644 --- a/homeassistant/components/logi_circle/strings.json +++ b/homeassistant/components/logi_circle/strings.json @@ -1,13 +1,10 @@ { "config": { - "title": "Logi Circle", "step": { "user": { "title": "Authentication Provider", "description": "Pick via which authentication provider you want to authenticate with Logi Circle.", - "data": { - "flow_impl": "Provider" - } + "data": { "flow_impl": "Provider" } }, "auth": { "title": "Authenticate with Logi Circle", diff --git a/homeassistant/components/logi_circle/translations/bg.json b/homeassistant/components/logi_circle/translations/bg.json new file mode 100644 index 00000000000..792290656df --- /dev/null +++ b/homeassistant/components/logi_circle/translations/bg.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Logi Circle \u0430\u043a\u0430\u0443\u043d\u0442.", + "external_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u0432\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u0432 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441.", + "external_setup": "Logi Circle \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043e\u0442 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441.", + "no_flows": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Logi Circle, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Logi Circle." + }, + "error": { + "auth_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0441 API.", + "auth_timeout": "\u0418\u0437\u0442\u0435\u0447\u0435 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0446\u0438\u044f, \u0434\u043e\u043a\u0430\u0442\u043e \u0438\u0437\u0438\u0441\u043a\u0432\u0430\u0445\u043c\u0435 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f", + "follow_link": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0438 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435." + }, + "step": { + "auth": { + "description": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0437\u0438 [link]({authorization_url}) \u0438 \u041f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Logi Circle, \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443. \n\n[Link]({authorization_url})", + "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Logi Circle" + }, + "user": { + "data": { + "flow_impl": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" + }, + "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435, \u0447\u0440\u0435\u0437 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0441 Logi Circle.", + "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/ca.json b/homeassistant/components/logi_circle/translations/ca.json new file mode 100644 index 00000000000..2da6bc19d7d --- /dev/null +++ b/homeassistant/components/logi_circle/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte de Logi Circule.", + "external_error": "S'ha produ\u00eft una excepci\u00f3 d\u2019un altre flux de dades.", + "external_setup": "Logi Circle s'ha configurat correctament des d'un altre flux de dades.", + "no_flows": "Necessites configurar Logi Circle abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Logi Circle." + }, + "error": { + "auth_error": "Ha fallat l\u2019autoritzaci\u00f3 de l\u2019API.", + "auth_timeout": "L\u2019autoritzaci\u00f3 ha expirat durant l'obtenci\u00f3 del testimoni d\u2019acc\u00e9s.", + "follow_link": "V\u00e9s a l'enlla\u00e7 i autentica't abans de pr\u00e9mer Envia" + }, + "step": { + "auth": { + "description": "V\u00e9s a l'enlla\u00e7 de sota i Accepta l'acc\u00e9s al teu compte de Logi Circle, despr\u00e9s, torna i prem Envia (tamb\u00e9 a sota).\n\n[Enlla\u00e7]({authorization_url})", + "title": "Autenticaci\u00f3 amb Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Prove\u00efdor" + }, + "description": "Tria quin prove\u00efdor d'autenticaci\u00f3 vols utilitzar per autenticar-te amb Logi Circle.", + "title": "Prove\u00efdor d'autenticaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/da.json b/homeassistant/components/logi_circle/translations/da.json new file mode 100644 index 00000000000..fecab818295 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt Logi Circle-konto.", + "external_error": "Undtagelse skete fra et andet flow.", + "external_setup": "Logi Circle er konfigureret med succes fra et andet flow.", + "no_flows": "Du skal konfigurere Logi Circle f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Godkendt med Logi Circle." + }, + "error": { + "auth_error": "API-godkendelse mislykkedes.", + "auth_timeout": "Godkendelsen fik timeout ved anmodning om adgangstoken.", + "follow_link": "F\u00f8lg linket og godkend f\u00f8r du trykker p\u00e5 send." + }, + "step": { + "auth": { + "description": "F\u00f8lg linket herunder og Accept\u00e9r adgang til din Logi Circle-konto, og vend s\u00e5 tilbage og tryk p\u00e5 Indsend nedenfor. \n\n[Link]({authorization_url})", + "title": "Godkend med Logi Circle." + }, + "user": { + "data": { + "flow_impl": "Udbyder" + }, + "description": "V\u00e6lg via hvilken godkendelsesudbyder du vil godkende med Logi Circle.", + "title": "Godkendelsesudbyder" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/de.json b/homeassistant/components/logi_circle/translations/de.json new file mode 100644 index 00000000000..81292c8306d --- /dev/null +++ b/homeassistant/components/logi_circle/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Es kann nur ein einziges Logi Circle-Konto konfiguriert werden.", + "external_error": "Es ist eine Ausnahme in einem anderen Flow aufgetreten.", + "external_setup": "Logi Circle wurde erfolgreich aus einem anderen Flow konfiguriert.", + "no_flows": "Logi Circle muss konfiguriert werden, bevor die Authentifizierung erfolgen kann. [Bitte lies die Anweisungen] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Erfolgreiche Authentifizierung mit Logi Circle." + }, + "error": { + "auth_error": "Die API-Autorisierung ist fehlgeschlagen.", + "auth_timeout": "Zeit\u00fcberschreitung der Autorisierung beim Anfordern des Zugriffstokens.", + "follow_link": "Bitte folge dem Link und authentifiziere dich, bevor du auf Senden klickst." + }, + "step": { + "auth": { + "description": "Folge dem Link unten und klicke Akzeptieren um auf dein Logi Circle-Konto zuzugreifen. Kehre dann zur\u00fcck und dr\u00fccke unten auf Senden . \n\n [Link] ({authorization_url})", + "title": "Authentifizierung mit Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Anbieter" + }, + "description": "W\u00e4hle aus, \u00fcber welchen Anbieter du dich bei Logi Circle authentifizieren m\u00f6chtest.", + "title": "Authentifizierungsanbieter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/en.json b/homeassistant/components/logi_circle/translations/en.json new file mode 100644 index 00000000000..4befbe95f60 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure a single Logi Circle account.", + "external_error": "Exception occurred from another flow.", + "external_setup": "Logi Circle successfully configured from another flow.", + "no_flows": "You need to configure Logi Circle before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Successfully authenticated with Logi Circle." + }, + "error": { + "auth_error": "API authorization failed.", + "auth_timeout": "Authorization timed out when requesting access token.", + "follow_link": "Please follow the link and authenticate before pressing Submit." + }, + "step": { + "auth": { + "description": "Please follow the link below and Accept access to your Logi Circle account, then come back and press Submit below.\n\n[Link]({authorization_url})", + "title": "Authenticate with Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Provider" + }, + "description": "Pick via which authentication provider you want to authenticate with Logi Circle.", + "title": "Authentication Provider" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/es-419.json b/homeassistant/components/logi_circle/translations/es-419.json new file mode 100644 index 00000000000..8cc68833875 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/es-419.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puede configurar una sola cuenta de Logi Circle.", + "external_error": "Se produjo una excepci\u00f3n de otro flujo.", + "external_setup": "Logi Circle se configur\u00f3 correctamente desde otro flujo." + }, + "create_entry": { + "default": "Autenticado con \u00e9xito con Logi Circle." + }, + "error": { + "auth_error": "Autorizaci\u00f3n de API fallida." + }, + "step": { + "auth": { + "title": "Autenticar con Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Proveedor" + }, + "title": "Proveedor de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/es.json b/homeassistant/components/logi_circle/translations/es.json new file mode 100644 index 00000000000..d262a9659d1 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puedes configurar una cuenta de Logi Circle.", + "external_error": "Se produjo una excepci\u00f3n de otro flujo.", + "external_setup": "Logi Circle se ha configurado correctamente a partir de otro flujo.", + "no_flows": "Es necesario configurar Logi Circle antes de poder autenticarse con \u00e9l. [Echa un vistazo a las instrucciones] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Autenticado correctamente con Logi Circle." + }, + "error": { + "auth_error": "Error en la autorizaci\u00f3n de la API.", + "auth_timeout": "Se ha agotado el tiempo de espera de la autorizaci\u00f3n al solicitar el token de acceso.", + "follow_link": "Accede al enlace e identif\u00edcate antes de pulsar Enviar." + }, + "step": { + "auth": { + "description": "Accede al siguiente enlace y Acepta el acceso a tu cuenta Logi Circle, despu\u00e9s vuelve y pulsa en Enviar a continuaci\u00f3n.\n\n[Link]({authorization_url})", + "title": "Autenticaci\u00f3n con Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Proveedor" + }, + "description": "Elige a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n quieres autenticarte con Logi Circle.", + "title": "Proveedor de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/fr.json b/homeassistant/components/logi_circle/translations/fr.json new file mode 100644 index 00000000000..170edcaf48a --- /dev/null +++ b/homeassistant/components/logi_circle/translations/fr.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Logi Circle.", + "external_error": "Une exception est survenue \u00e0 partir d'un autre flux.", + "external_setup": "Logi Circle a \u00e9t\u00e9 configur\u00e9 avec succ\u00e8s \u00e0 partir d'un autre flux.", + "no_flows": "Vous devez configurer Logi Circle avant de pouvoir vous authentifier aupr\u00e8s de celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Authentifi\u00e9 avec succ\u00e8s avec Logi Circle." + }, + "error": { + "auth_error": "L'autorisation de l'API a \u00e9chou\u00e9.", + "auth_timeout": "L'autorisation a expir\u00e9 lors de la demande du jeton d'acc\u00e8s.", + "follow_link": "Veuillez suivre le lien et vous authentifier avant d'appuyer sur Soumettre." + }, + "step": { + "auth": { + "description": "Suivez le lien ci-dessous et acceptez acc\u00e8s \u00e0 votre compte Logi Circle, puis revenez et appuyez sur Envoyer ci-dessous. \n\n [Lien] ( {authorization_url} )", + "title": "Authentifier avec Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Fournisseur" + }, + "description": "Choisissez via quel fournisseur d'authentification vous souhaitez vous authentifier avec Logi Circle.", + "title": "Fournisseur d'authentification" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/hu.json b/homeassistant/components/logi_circle/translations/hu.json similarity index 100% rename from homeassistant/components/logi_circle/.translations/hu.json rename to homeassistant/components/logi_circle/translations/hu.json diff --git a/homeassistant/components/logi_circle/translations/it.json b/homeassistant/components/logi_circle/translations/it.json new file mode 100644 index 00000000000..6ce7948472e --- /dev/null +++ b/homeassistant/components/logi_circle/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare solo un singolo account Logi Circle.", + "external_error": "Si \u00e8 verificata un'eccezione da un altro flusso.", + "external_setup": "Logi Circle configurato con successo da un altro flusso.", + "no_flows": "Devi configurare Logi Circle prima di poter eseguire l'autenticazione. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Autenticato con successo con Logi Circle." + }, + "error": { + "auth_error": "Autorizzazione API fallita.", + "auth_timeout": "Timeout dell'autorizzazione durante la richiesta del token di accesso.", + "follow_link": "Segui il link e autenticati prima di premere Invia" + }, + "step": { + "auth": { + "description": "Segui il link qui sotto e Accetta l'accesso al tuo account Logi Circle, quindi torna indietro e premi Invia qui sotto. \n\n [Link]({authorization_url})", + "title": "Autenticarsi con Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Provider" + }, + "description": "Scegli tramite quale provider di autenticazione vuoi autenticarti con Logi Circle.", + "title": "Provider di autenticazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/ko.json b/homeassistant/components/logi_circle/translations/ko.json new file mode 100644 index 00000000000..5ecea7db659 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "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." + }, + "create_entry": { + "default": "Logi Circle \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "auth_error": "API \uc2b9\uc778\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.", + "auth_timeout": "\uc5d1\uc138\uc2a4 \ud1a0\ud070 \uc694\uccad\uc911 \uc2b9\uc778 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "follow_link": "Submit \ubc84\ud2bc\uc744 \ub204\ub974\uae30 \uc804\uc5d0 \ub9c1\ud06c\ub97c \ub530\ub77c \uc778\uc99d\uc744 \ubc1b\uc544\uc8fc\uc138\uc694" + }, + "step": { + "auth": { + "description": "\uc544\ub798 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uc5ec Logi Circle \uacc4\uc815\uc5d0 \ub300\ud574 \ub3d9\uc758 \ud55c \ub2e4\uc74c, \ub2e4\uc2dc \ub3cc\uc544\uc640\uc11c \ud558\ub2e8\uc758 Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.\n\n[\ub9c1\ud06c]({authorization_url})", + "title": "Logi Circle \uc778\uc99d" + }, + "user": { + "data": { + "flow_impl": "\uacf5\uae09\uc790" + }, + "description": "Logi Circle \uc744 \uc778\uc99d\ud558\uae30 \uc704\ud55c \uc778\uc99d \uacf5\uae09\uc790\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", + "title": "\uc778\uc99d \uacf5\uae09\uc790" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/lb.json b/homeassistant/components/logi_circle/translations/lb.json new file mode 100644 index 00000000000..1d19cb32b8c --- /dev/null +++ b/homeassistant/components/logi_circle/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Logi Circle Kont konfigur\u00e9ieren.", + "external_error": "Ausnam vun engem anere Floss.", + "external_setup": "Logi Circle gouf vun engem anere Floss erfollegr\u00e4ich konfigur\u00e9iert.", + "no_flows": "Dir musst Logi Circle konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Logi Circle authentifiz\u00e9iert." + }, + "error": { + "auth_error": "Feeler bei der API Autorisatioun.", + "auth_timeout": "Z\u00e4it Iwwerschreidung vun der Autorisatioun beim ufroe vum Acc\u00e8s Jeton.", + "follow_link": "Follegt w.e.g dem Link an authentifiz\u00e9iert iech ier de op Ofsch\u00e9cken dr\u00e9ckt." + }, + "step": { + "auth": { + "description": "Follegt dem Link \u00ebnnendr\u00ebnner an accept\u00e9iert den Acc\u00e8s zu \u00e4rem Logi Circle Kont , a kommt dann zer\u00e9ck heihin an dr\u00e9ck op ofsch\u00e9cken hei \u00ebnnen.\n\n[Link]({authorization_url})", + "title": "Mat Logi Circle authentifiz\u00e9ieren" + }, + "user": { + "data": { + "flow_impl": "Ubidder" + }, + "description": "Wielt den Authentifikatioun Ubidder deen sech mat Logi Circle verbanne soll.", + "title": "Authentifikatioun Ubidder" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/nl.json b/homeassistant/components/logi_circle/translations/nl.json new file mode 100644 index 00000000000..01b6309e90a --- /dev/null +++ b/homeassistant/components/logi_circle/translations/nl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n Logi Circle-account configureren.", + "external_error": "Uitzondering opgetreden uit een andere stroom.", + "external_setup": "Logi Circle is met succes geconfigureerd vanuit een andere stroom.", + "no_flows": "U moet Logi Circle configureren voordat u ermee kunt authenticeren. [Lees de instructies] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Succesvol geverifieerd met Logi Circle." + }, + "error": { + "auth_error": "API-autorisatie mislukt.", + "auth_timeout": "Er is een time-out opgetreden bij autorisatie bij het aanvragen van toegangstoken.", + "follow_link": "Volg de link en authenticeer voordat u op Verzenden drukt." + }, + "step": { + "auth": { + "description": "Volg de onderstaande link en Accepteer toegang tot uw Logi Circle-account, kom dan terug en druk hieronder op Verzenden . \n\n [Link] ({authorization_url})", + "title": "Authenticeren met Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Provider" + }, + "description": "Kies met welke authenticatieprovider u wilt authenticeren met Logi Circle.", + "title": "Authenticatieprovider" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/nn.json b/homeassistant/components/logi_circle/translations/nn.json new file mode 100644 index 00000000000..f6c91435c06 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/nn.json @@ -0,0 +1,18 @@ +{ + "config": { + "create_entry": { + "default": "Vellukka autentisering med Logi Circle" + }, + "error": { + "auth_error": "API-autorisasjonen mislyktes." + }, + "step": { + "auth": { + "title": "Godkjenn med Logi Circle" + }, + "user": { + "description": "Vel kva for ein autentiseringsleverand\u00f8r du vil godkjenne med Logi Circle" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/no.json b/homeassistant/components/logi_circle/translations/no.json new file mode 100644 index 00000000000..2a274bf75d7 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bare konfigurere en Logi Circle konto.", + "external_error": "Det oppstod et unntak fra en annen flow.", + "external_setup": "Logi Circle er vellykket konfigurert fra en annen flow.", + "no_flows": "Du m\u00e5 konfigurere Logi Circle f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Vellykket autentisering med Logi Circle" + }, + "error": { + "auth_error": "API-autorisasjonen mislyktes.", + "auth_timeout": "Autorisasjon ble tidsavbrutt da du ba om token.", + "follow_link": "Vennligst f\u00f8lg lenken og godkjenn f\u00f8r du trykker send." + }, + "step": { + "auth": { + "description": "Vennligst f\u00f8lg lenken nedenfor og Godta tilgang til Logi Circle kontoen din, kom deretter tilbake og trykk Send nedenfor. \n\n [Link]({authorization_url})", + "title": "Godkjenn med Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Tilbyder" + }, + "description": "Velg med hvilken autentiseringsleverand\u00f8r du vil godkjenne Logi Circle.", + "title": "Autentiseringsleverand\u00f8r" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/pl.json b/homeassistant/components/logi_circle/translations/pl.json new file mode 100644 index 00000000000..80d075c3589 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Logi Circle.", + "external_error": "Wyst\u0105pi\u0142 wyj\u0105tek z innego przep\u0142ywu.", + "external_setup": "Logi Circle zosta\u0142o pomy\u015blnie skonfigurowane z innego przep\u0142ywu.", + "no_flows": "Musisz skonfigurowa\u0107 Logi Circle, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Logi Circle." + }, + "error": { + "auth_error": "Autoryzacja API nie powiod\u0142a si\u0119.", + "auth_timeout": "Przekroczono limit czasu \u017c\u0105dania tokena dost\u0119pu.", + "follow_link": "Post\u0119puj zgodnie z linkiem i uwierzytelnij si\u0119 przed naci\u015bni\u0119ciem przycisku \"Zatwierd\u017a\"." + }, + "step": { + "auth": { + "description": "Kliknij poni\u017cszy link i Zaakceptuj dost\u0119p do konta Logi Circle, a nast\u0119pnie wr\u00f3\u0107 i naci\u015bnij Zatwierd\u017a poni\u017cej. \n\n [Link]({authorization_url})", + "title": "Uwierzytelnij za pomoc\u0105 Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Dostawca" + }, + "description": "Wybierz, kt\u00f3rego dostawc\u0119 uwierzytelnienia chcesz u\u017cywa\u0107 z Logi Circle.", + "title": "Dostawca uwierzytelnienia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/pt-BR.json b/homeassistant/components/logi_circle/translations/pt-BR.json new file mode 100644 index 00000000000..ece65955dee --- /dev/null +++ b/homeassistant/components/logi_circle/translations/pt-BR.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Voc\u00ea s\u00f3 pode configurar uma \u00fanica conta do Logi Circle.", + "external_error": "Exce\u00e7\u00e3o ocorreu a partir de outro fluxo.", + "external_setup": "Logi Circle configurado com sucesso a partir de outro fluxo.", + "no_flows": "Voc\u00ea precisa configurar o Logi Circle antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Autenticado com sucesso com o Logi Circle." + }, + "error": { + "auth_error": "Falha na autoriza\u00e7\u00e3o da API.", + "auth_timeout": "A autoriza\u00e7\u00e3o atingiu o tempo limite quando solicitou o token de acesso.", + "follow_link": "Por favor, siga o link e autentique antes de pressionar Enviar." + }, + "step": { + "auth": { + "description": "Por favor, siga o link abaixo e Aceite o acesso \u00e0 sua conta do Logi Circle, depois volte e pressione Enviar abaixo. \n\n [Link] ( {authorization_url} )", + "title": "Autenticar com o Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Provedor" + }, + "description": "Escolha atrav\u00e9s de qual provedor de autentica\u00e7\u00e3o voc\u00ea deseja autenticar com o Logi Circle.", + "title": "Provedor de Autentica\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/ru.json b/homeassistant/components/logi_circle/translations/ru.json new file mode 100644 index 00000000000..906b647bbef --- /dev/null +++ b/homeassistant/components/logi_circle/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "external_error": "\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.", + "external_setup": "Logi Circle \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.", + "no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Logi Circle \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "error": { + "auth_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 API.", + "auth_timeout": "\u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "follow_link": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\"." + }, + "step": { + "auth": { + "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e [\u0441\u0441\u044b\u043b\u043a\u0435]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Logi Circle, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c.", + "title": "Logi Circle" + }, + "user": { + "data": { + "flow_impl": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0445\u043e\u0434.", + "title": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/sl.json b/homeassistant/components/logi_circle/translations/sl.json new file mode 100644 index 00000000000..e839d9864c2 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Nastavite lahko samo en ra\u010dun Logi Circle.", + "external_error": "Izjema je pri\u0161la iz drugega toka.", + "external_setup": "Logi Circle uspe\u0161no konfiguriran iz drugega toka.", + "no_flows": "Preden lahko preverite pristnost, morate konfigurirati Logi Circle. [Preberite navodila](https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Uspe\u0161no overjen z Logi Circle-om." + }, + "error": { + "auth_error": "Odobritev API-ja ni uspela.", + "auth_timeout": "Pri zahtevi za dostopni \u017eeton je potekla \u010dasovna omejitev.", + "follow_link": "Prosimo, sledite povezavi in preverite pristnost, preden pritisnete Po\u0161lji" + }, + "step": { + "auth": { + "description": "Prosimo, sledite spodnji povezavi in Sprejmite dostop do va\u0161ega Logi Circle ra\u010duna, nato se vrnite in pritisnite Po\u0161lji spodaj. \n\n [Povezava] ( {authorization_url} )", + "title": "Overi z Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Ponudnik" + }, + "description": "Izberite prek katerega ponudnika overjanja \u017eelite overiti Logi Circle.", + "title": "Ponudnik overjanja" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/translations/sv.json b/homeassistant/components/logi_circle/translations/sv.json new file mode 100644 index 00000000000..d0ea36f7bfc --- /dev/null +++ b/homeassistant/components/logi_circle/translations/sv.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan endast konfigurera ett Logi Circle-konto.", + "external_error": "Undantag intr\u00e4ffade fr\u00e5n ett annat fl\u00f6de.", + "external_setup": "Logi Circle har konfigurerats fr\u00e5n ett annat fl\u00f6de.", + "no_flows": "Du m\u00e5ste konfigurera Logi Circle innan du kan autentisera med den. [V\u00e4nligen l\u00e4s instruktionerna] (https://www.home-assistant.io/components/logi_circle/)." + }, + "create_entry": { + "default": "Autentiserad med Logi Circle." + }, + "error": { + "auth_error": "API autentiseringen misslyckades.", + "auth_timeout": "Godk\u00e4nnandet tog f\u00f6r l\u00e5ng tid vid beg\u00e4ran om \u00e5tkomsttoken.", + "follow_link": "V\u00e4nligen f\u00f6lj l\u00e4nken och autentisera innan du trycker p\u00e5 Skicka." + }, + "step": { + "auth": { + "description": "V\u00e4nligen f\u00f6lj l\u00e4nken nedan och Godk\u00e4nn \u00e5tkomst till ditt Logic Circle-konto kom sedan tillbaka och tryck p\u00e5 Skicka nedan. \n\n [L\u00e4nk] ( {authorization_url} )", + "title": "Autentisera med Logi Circle" + }, + "user": { + "data": { + "flow_impl": "Leverant\u00f6r" + }, + "description": "V\u00e4lj vilken autentiseringsleverant\u00f6r du vill autentisera med Logi Circle.", + "title": "Verifieringsleverant\u00f6r" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/logi_circle/.translations/zh-Hans.json b/homeassistant/components/logi_circle/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/logi_circle/.translations/zh-Hans.json rename to homeassistant/components/logi_circle/translations/zh-Hans.json diff --git a/homeassistant/components/logi_circle/translations/zh-Hant.json b/homeassistant/components/logi_circle/translations/zh-Hant.json new file mode 100644 index 00000000000..a94269808d3 --- /dev/null +++ b/homeassistant/components/logi_circle/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Logi Circle \u5e33\u865f\u3002", + "external_error": "\u5176\u4ed6\u6d41\u7a0b\u767c\u751f\u7570\u5e38\u3002", + "external_setup": "\u5df2\u7531\u5176\u4ed6\u6d41\u7a0b\u6210\u529f\u8a2d\u5b9a Logi Circle\u3002", + "no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Logi Circle \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15]\uff08https://www.home-assistant.io/components/logi_circle/\uff09\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Logi Circle \u8a2d\u5099\u3002" + }, + "error": { + "auth_error": "API \u8a8d\u8b49\u5931\u6557\u3002", + "auth_timeout": "\u8acb\u6c42\u5b58\u53d6\u5bc6\u9470\u8a8d\u8b49\u903e\u6642\u3002", + "follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002" + }, + "step": { + "auth": { + "description": "\u8acb\u4f7f\u7528\u4e0b\u65b9\u9023\u7d50\u4e26\u9ede\u9078\u63a5\u53d7\u4ee5\u5b58\u53d6 Logi Circle \u5e33\u865f\uff0c\u7136\u5f8c\u8fd4\u56de\u6b64\u9801\u9762\u4e26\u9ede\u9078\u4e0b\u65b9\u7684\u50b3\u9001\u3002\n\n[Link]({authorization_url})", + "title": "\u4ee5 Logi Circle \u8a8d\u8b49" + }, + "user": { + "data": { + "flow_impl": "\u63d0\u4f9b\u8005" + }, + "description": "\u65bc\u8a8d\u8b49\u63d0\u4f9b\u8005\u4e2d\u6311\u9078\u6240\u8981\u9032\u884c Logi Circle \u8a8d\u8b49\u63d0\u4f9b\u8005\u3002", + "title": "\u8a8d\u8b49\u63d0\u4f9b\u8005" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/london_air/manifest.json b/homeassistant/components/london_air/manifest.json index c5b9caffa88..48ba49bee23 100644 --- a/homeassistant/components/london_air/manifest.json +++ b/homeassistant/components/london_air/manifest.json @@ -2,7 +2,5 @@ "domain": "london_air", "name": "London Air", "documentation": "https://www.home-assistant.io/integrations/london_air", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/london_air/sensor.py b/homeassistant/components/london_air/sensor.py index 77af10928dc..c7104ac19ad 100644 --- a/homeassistant/components/london_air/sensor.py +++ b/homeassistant/components/london_air/sensor.py @@ -6,6 +6,7 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA +from homeassistant.const import HTTP_OK import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -83,7 +84,7 @@ class APIData: def update(self): """Get the latest data from TFL.""" response = requests.get(URL, timeout=10) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.warning("Invalid response from API") else: self.data = parse_api_response(response.json()) @@ -157,9 +158,9 @@ def parse_species(species_data): species_dict["code"] = species["@SpeciesCode"] species_dict["quality"] = species["@AirQualityBand"] species_dict["index"] = species["@AirQualityIndex"] - species_dict["summary"] = ( - species_dict["code"] + " is " + species_dict["quality"] - ) + species_dict[ + "summary" + ] = f"{species_dict['code']} is {species_dict['quality']}" parsed_species_data.append(species_dict) quality_list.append(species_dict["quality"]) return parsed_species_data, quality_list diff --git a/homeassistant/components/london_underground/manifest.json b/homeassistant/components/london_underground/manifest.json index a81034e0718..5dbccea27b1 100644 --- a/homeassistant/components/london_underground/manifest.json +++ b/homeassistant/components/london_underground/manifest.json @@ -3,6 +3,5 @@ "name": "London Underground", "documentation": "https://www.home-assistant.io/integrations/london_underground", "requirements": ["london-tube-status==0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/loopenergy/manifest.json b/homeassistant/components/loopenergy/manifest.json index 88b679fb071..cf7343af6a4 100644 --- a/homeassistant/components/loopenergy/manifest.json +++ b/homeassistant/components/loopenergy/manifest.json @@ -3,6 +3,5 @@ "name": "Loop Energy", "documentation": "https://www.home-assistant.io/integrations/loopenergy", "requirements": ["pyloopenergy==0.1.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lovelace/manifest.json b/homeassistant/components/lovelace/manifest.json index aa0d706976a..cc8f6ddab08 100644 --- a/homeassistant/components/lovelace/manifest.json +++ b/homeassistant/components/lovelace/manifest.json @@ -2,7 +2,5 @@ "domain": "lovelace", "name": "Lovelace", "documentation": "https://www.home-assistant.io/integrations/lovelace", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/frontend"] } diff --git a/homeassistant/components/lovelace/translations/af.json b/homeassistant/components/lovelace/translations/af.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/bg.json b/homeassistant/components/lovelace/translations/bg.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/ca.json b/homeassistant/components/lovelace/translations/ca.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/cs.json b/homeassistant/components/lovelace/translations/cs.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/cy.json b/homeassistant/components/lovelace/translations/cy.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/da.json b/homeassistant/components/lovelace/translations/da.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/de.json b/homeassistant/components/lovelace/translations/de.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/el.json b/homeassistant/components/lovelace/translations/el.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/en.json b/homeassistant/components/lovelace/translations/en.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/es-419.json b/homeassistant/components/lovelace/translations/es-419.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/es.json b/homeassistant/components/lovelace/translations/es.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/et.json b/homeassistant/components/lovelace/translations/et.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/eu.json b/homeassistant/components/lovelace/translations/eu.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/fa.json b/homeassistant/components/lovelace/translations/fa.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/fi.json b/homeassistant/components/lovelace/translations/fi.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/fr.json b/homeassistant/components/lovelace/translations/fr.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/he.json b/homeassistant/components/lovelace/translations/he.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/hr.json b/homeassistant/components/lovelace/translations/hr.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/hu.json b/homeassistant/components/lovelace/translations/hu.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/hy.json b/homeassistant/components/lovelace/translations/hy.json new file mode 100644 index 00000000000..cbdc153a582 --- /dev/null +++ b/homeassistant/components/lovelace/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u057d\u056b\u0580\u0578" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/is.json b/homeassistant/components/lovelace/translations/is.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/it.json b/homeassistant/components/lovelace/translations/it.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/ko.json b/homeassistant/components/lovelace/translations/ko.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/lb.json b/homeassistant/components/lovelace/translations/lb.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/lt.json b/homeassistant/components/lovelace/translations/lt.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/lt.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/lv.json b/homeassistant/components/lovelace/translations/lv.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/nb.json b/homeassistant/components/lovelace/translations/nb.json new file mode 100644 index 00000000000..d8a4c453015 --- /dev/null +++ b/homeassistant/components/lovelace/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/nl.json b/homeassistant/components/lovelace/translations/nl.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/nn.json b/homeassistant/components/lovelace/translations/nn.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/no.json b/homeassistant/components/lovelace/translations/no.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/pl.json b/homeassistant/components/lovelace/translations/pl.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/pt-BR.json b/homeassistant/components/lovelace/translations/pt-BR.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/pt.json b/homeassistant/components/lovelace/translations/pt.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/ro.json b/homeassistant/components/lovelace/translations/ro.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/ru.json b/homeassistant/components/lovelace/translations/ru.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/sk.json b/homeassistant/components/lovelace/translations/sk.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/sl.json b/homeassistant/components/lovelace/translations/sl.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/sv.json b/homeassistant/components/lovelace/translations/sv.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/th.json b/homeassistant/components/lovelace/translations/th.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/tr.json b/homeassistant/components/lovelace/translations/tr.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/uk.json b/homeassistant/components/lovelace/translations/uk.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/vi.json b/homeassistant/components/lovelace/translations/vi.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/zh-Hans.json b/homeassistant/components/lovelace/translations/zh-Hans.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/lovelace/translations/zh-Hant.json b/homeassistant/components/lovelace/translations/zh-Hant.json new file mode 100644 index 00000000000..2fc0c81a46c --- /dev/null +++ b/homeassistant/components/lovelace/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "Lovelace" +} \ No newline at end of file diff --git a/homeassistant/components/luci/manifest.json b/homeassistant/components/luci/manifest.json index 7fefe89c1df..cd4c278c2fb 100644 --- a/homeassistant/components/luci/manifest.json +++ b/homeassistant/components/luci/manifest.json @@ -2,7 +2,6 @@ "domain": "luci", "name": "OpenWRT (luci)", "documentation": "https://www.home-assistant.io/integrations/luci", - "requirements": ["openwrt-luci-rpc==1.1.2"], - "dependencies": [], + "requirements": ["openwrt-luci-rpc==1.1.3"], "codeowners": ["@fbradyirl", "@mzdrale"] } diff --git a/homeassistant/components/luftdaten/.translations/bg.json b/homeassistant/components/luftdaten/.translations/bg.json deleted file mode 100644 index ecd7f17c84b..00000000000 --- a/homeassistant/components/luftdaten/.translations/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043a\u043e\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441 Luftdaten", - "invalid_sensor": "\u0421\u0435\u043d\u0437\u043e\u0440\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0447\u0435\u043d \u0438\u043b\u0438 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d", - "sensor_exists": "\u0421\u0435\u043d\u0437\u043e\u0440\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d" - }, - "step": { - "user": { - "data": { - "show_on_map": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0430\u0442\u0430", - "station_id": "ID \u043d\u0430 \u0441\u0435\u043d\u0437\u043e\u0440\u0430 \u043d\u0430 Luftdaten" - }, - "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/ca.json b/homeassistant/components/luftdaten/.translations/ca.json deleted file mode 100644 index b00c1b2e3e3..00000000000 --- a/homeassistant/components/luftdaten/.translations/ca.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "No s'ha pogut comunicar amb l'API de Luftdaten", - "invalid_sensor": "El sensor no est\u00e0 disponible o no \u00e9s v\u00e0lid", - "sensor_exists": "Sensor ja registrat" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mostrar al mapa", - "station_id": "Identificador del sensor Luftdaten" - }, - "title": "Configuraci\u00f3 de Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/cs.json b/homeassistant/components/luftdaten/.translations/cs.json deleted file mode 100644 index 701ccf2612c..00000000000 --- a/homeassistant/components/luftdaten/.translations/cs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Nelze komunikovat s Luftdaten API", - "invalid_sensor": "Senzor nen\u00ed k dispozici nebo je neplatn\u00fd", - "sensor_exists": "Senzor je ji\u017e zaregistrov\u00e1n" - }, - "step": { - "user": { - "data": { - "show_on_map": "Uka\u017e na map\u011b", - "station_id": "ID senzoru Luftdaten" - }, - "title": "Definujte Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/da.json b/homeassistant/components/luftdaten/.translations/da.json deleted file mode 100644 index 3a5f5e7b409..00000000000 --- a/homeassistant/components/luftdaten/.translations/da.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Kan ikke oprette forbindelse til Luftdaten API", - "invalid_sensor": "Sensor ikke tilg\u00e6ngelig eller ugyldig", - "sensor_exists": "Sensor er allerede registreret" - }, - "step": { - "user": { - "data": { - "show_on_map": "Vis p\u00e5 kort", - "station_id": "Luftdaten sensor-id" - }, - "title": "Definer Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/de.json b/homeassistant/components/luftdaten/.translations/de.json deleted file mode 100644 index 46d75a6b73b..00000000000 --- a/homeassistant/components/luftdaten/.translations/de.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Keine Kommunikation mit Luftdaten API m\u00f6glich", - "invalid_sensor": "Sensor nicht verf\u00fcgbar oder ung\u00fcltig", - "sensor_exists": "Sensor bereits registriert" - }, - "step": { - "user": { - "data": { - "show_on_map": "Auf Karte anzeigen", - "station_id": "Luftdaten-Sensor-ID" - }, - "title": "Luftdaten einrichten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/en.json b/homeassistant/components/luftdaten/.translations/en.json deleted file mode 100644 index d6c86e9ac1f..00000000000 --- a/homeassistant/components/luftdaten/.translations/en.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Unable to communicate with the Luftdaten API", - "invalid_sensor": "Sensor not available or invalid", - "sensor_exists": "Sensor already registered" - }, - "step": { - "user": { - "data": { - "show_on_map": "Show on map", - "station_id": "Luftdaten Sensor ID" - }, - "title": "Define Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/es-419.json b/homeassistant/components/luftdaten/.translations/es-419.json deleted file mode 100644 index 8e81e9e52a1..00000000000 --- a/homeassistant/components/luftdaten/.translations/es-419.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "No se puede comunicar con la API de Luftdaten", - "invalid_sensor": "Sensor no disponible o no v\u00e1lido", - "sensor_exists": "Sensor ya registrado" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mostrar en el mapa", - "station_id": "ID del sensor de Luftdaten" - }, - "title": "Definir Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/es.json b/homeassistant/components/luftdaten/.translations/es.json deleted file mode 100644 index e93da557ae8..00000000000 --- a/homeassistant/components/luftdaten/.translations/es.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "No se puede comunicar con la API de Luftdaten", - "invalid_sensor": "Sensor no disponible o no v\u00e1lido", - "sensor_exists": "Sensor ya registrado" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mostrar en el mapa", - "station_id": "Sensro ID de Luftdaten" - }, - "title": "Definir Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/fr.json b/homeassistant/components/luftdaten/.translations/fr.json deleted file mode 100644 index 3e1d41be349..00000000000 --- a/homeassistant/components/luftdaten/.translations/fr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Impossible de communiquer avec l'API Luftdaten", - "invalid_sensor": "Capteur non disponible ou invalide", - "sensor_exists": "Capteur d\u00e9j\u00e0 enregistr\u00e9" - }, - "step": { - "user": { - "data": { - "show_on_map": "Montrer sur la carte", - "station_id": "ID capteur Luftdaten" - }, - "title": "D\u00e9finir Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/hu.json b/homeassistant/components/luftdaten/.translations/hu.json deleted file mode 100644 index b8b2b1fc0d8..00000000000 --- a/homeassistant/components/luftdaten/.translations/hu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Nem lehet kommunik\u00e1lni a Luftdaten API-val", - "invalid_sensor": "Az \u00e9rz\u00e9kel\u0151 nem el\u00e9rhet\u0151 vagy \u00e9rv\u00e9nytelen", - "sensor_exists": "Az \u00e9rz\u00e9kel\u0151 m\u00e1r regisztr\u00e1lt" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mutasd a t\u00e9rk\u00e9pen", - "station_id": "Luftdaten \u00e9rz\u00e9kel\u0151 ID" - }, - "title": "Luftdaten be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/it.json b/homeassistant/components/luftdaten/.translations/it.json deleted file mode 100644 index 27951378295..00000000000 --- a/homeassistant/components/luftdaten/.translations/it.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Impossibile comunicare con l'API Luftdaten", - "invalid_sensor": "Sensore non disponibile o non valido", - "sensor_exists": "Sensore gi\u00e0 registrato" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mostra sulla mappa", - "station_id": "ID del sensore Luftdaten" - }, - "title": "Definisci Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/ko.json b/homeassistant/components/luftdaten/.translations/ko.json deleted file mode 100644 index 97af0e8ed9b..00000000000 --- a/homeassistant/components/luftdaten/.translations/ko.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Luftdaten API \uc640 \ud1b5\uc2e0 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "invalid_sensor": "\uc13c\uc11c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac70\ub098 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "sensor_exists": "\uc13c\uc11c\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "show_on_map": "\uc9c0\ub3c4\uc5d0 \ud45c\uc2dc\ud558\uae30", - "station_id": "Luftdaten \uc13c\uc11c ID" - }, - "title": "Luftdaten \uc124\uc815" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/lb.json b/homeassistant/components/luftdaten/.translations/lb.json deleted file mode 100644 index 931d2a5557c..00000000000 --- a/homeassistant/components/luftdaten/.translations/lb.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Kann net mat der Luftdaten API kommuniz\u00e9ieren", - "invalid_sensor": "Sensor net disponibel oder ong\u00eblteg", - "sensor_exists": "Sensor ass scho registr\u00e9iert" - }, - "step": { - "user": { - "data": { - "show_on_map": "Op der Kaart uweisen", - "station_id": "Luftdaten Sensor ID" - }, - "title": "Luftdaten d\u00e9fin\u00e9ieren" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/nl.json b/homeassistant/components/luftdaten/.translations/nl.json deleted file mode 100644 index 3284b581f5f..00000000000 --- a/homeassistant/components/luftdaten/.translations/nl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Kan niet communiceren met de Luftdaten API", - "invalid_sensor": "Sensor niet beschikbaar of ongeldig", - "sensor_exists": "Sensor bestaat al" - }, - "step": { - "user": { - "data": { - "show_on_map": "Toon op kaart", - "station_id": "Luftdaten Sensor ID" - }, - "title": "Definieer Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/nn.json b/homeassistant/components/luftdaten/.translations/nn.json deleted file mode 100644 index 52b1ec33166..00000000000 --- a/homeassistant/components/luftdaten/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/no.json b/homeassistant/components/luftdaten/.translations/no.json deleted file mode 100644 index ac15a68bc4b..00000000000 --- a/homeassistant/components/luftdaten/.translations/no.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Kan ikke kommunisere med Luftdaten API", - "invalid_sensor": "Sensor er ikke tilgjengelig eller ugyldig", - "sensor_exists": "Sensor er allerede registrert" - }, - "step": { - "user": { - "data": { - "show_on_map": "Vis p\u00e5 kart", - "station_id": "Luftdaten Sensor ID" - }, - "title": "Definer Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/pl.json b/homeassistant/components/luftdaten/.translations/pl.json deleted file mode 100644 index 19e71b5156f..00000000000 --- a/homeassistant/components/luftdaten/.translations/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z API Luftdaten", - "invalid_sensor": "Sensor niedost\u0119pny lub nieprawid\u0142owy", - "sensor_exists": "Sensor zosta\u0142 ju\u017c zarejestrowany." - }, - "step": { - "user": { - "data": { - "show_on_map": "Poka\u017c na mapie", - "station_id": "ID sensora Luftdaten" - }, - "title": "Konfiguracja Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/pt-BR.json b/homeassistant/components/luftdaten/.translations/pt-BR.json deleted file mode 100644 index c5e104694d7..00000000000 --- a/homeassistant/components/luftdaten/.translations/pt-BR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "N\u00e3o \u00e9 poss\u00edvel se comunicar com a API da Luftdaten", - "invalid_sensor": "Sensor n\u00e3o dispon\u00edvel ou inv\u00e1lido", - "sensor_exists": "Sensor j\u00e1 registado" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mostrar no mapa", - "station_id": "ID do Sensor Luftdaten" - }, - "title": "Definir Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/pt.json b/homeassistant/components/luftdaten/.translations/pt.json deleted file mode 100644 index 9ed3611da27..00000000000 --- a/homeassistant/components/luftdaten/.translations/pt.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "N\u00e3o \u00e9 poss\u00edvel comunicar com a API da Luftdaten", - "invalid_sensor": "Sensor n\u00e3o dispon\u00edvel ou inv\u00e1lido", - "sensor_exists": "Sensor j\u00e1 registado" - }, - "step": { - "user": { - "data": { - "show_on_map": "Mostrar no mapa", - "station_id": "Luftdaten Sensor ID" - }, - "title": "Definir Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/ru.json b/homeassistant/components/luftdaten/.translations/ru.json deleted file mode 100644 index 759fd926bdc..00000000000 --- a/homeassistant/components/luftdaten/.translations/ru.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a API Luftdaten.", - "invalid_sensor": "\u0421\u0435\u043d\u0441\u043e\u0440 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u043b\u0438 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", - "sensor_exists": "\u0421\u0435\u043d\u0441\u043e\u0440 \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d." - }, - "step": { - "user": { - "data": { - "show_on_map": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435", - "station_id": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 Luftdaten" - }, - "title": "Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/sl.json b/homeassistant/components/luftdaten/.translations/sl.json deleted file mode 100644 index c1dd0462f94..00000000000 --- a/homeassistant/components/luftdaten/.translations/sl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Ne morem komunicirati z Luftdaten API-jem", - "invalid_sensor": "Senzor ni na voljo ali je neveljaven", - "sensor_exists": "Senzor je \u017ee registriran" - }, - "step": { - "user": { - "data": { - "show_on_map": "Prika\u017ei na zemljevidu", - "station_id": "Luftdaten ID Senzorja" - }, - "title": "Dolo\u010dite Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/sv.json b/homeassistant/components/luftdaten/.translations/sv.json deleted file mode 100644 index 01fd9ec721b..00000000000 --- a/homeassistant/components/luftdaten/.translations/sv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "Det g\u00e5r inte att kommunicera med Luftdaten API", - "invalid_sensor": "Sensor saknas eller \u00e4r ogiltig", - "sensor_exists": "Sensorn \u00e4r redan registrerad" - }, - "step": { - "user": { - "data": { - "show_on_map": "Visa p\u00e5 karta", - "station_id": "Luftdaten Sensor-ID" - }, - "title": "Definiera Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/zh-Hans.json b/homeassistant/components/luftdaten/.translations/zh-Hans.json deleted file mode 100644 index 375a08d8a45..00000000000 --- a/homeassistant/components/luftdaten/.translations/zh-Hans.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "\u65e0\u6cd5\u4e0e Luftdaten API \u901a\u4fe1", - "invalid_sensor": "\u4f20\u611f\u5668\u4e0d\u53ef\u7528\u6216\u65e0\u6548", - "sensor_exists": "\u4f20\u611f\u5668\u5df2\u6ce8\u518c" - }, - "step": { - "user": { - "data": { - "show_on_map": "\u5728\u5730\u56fe\u4e0a\u663e\u793a", - "station_id": "Luftdaten \u4f20\u611f\u5668 ID" - }, - "title": "\u5b9a\u4e49 Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/.translations/zh-Hant.json b/homeassistant/components/luftdaten/.translations/zh-Hant.json deleted file mode 100644 index 5ea3f682631..00000000000 --- a/homeassistant/components/luftdaten/.translations/zh-Hant.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "communication_error": "\u7121\u6cd5\u8207 Luftdaten API \u9032\u884c\u901a\u4fe1", - "invalid_sensor": "\u7121\u6cd5\u4f7f\u7528\u6216\u7121\u6548\u7684\u611f\u61c9\u5668", - "sensor_exists": "\u611f\u61c9\u5668\u5df2\u8a3b\u518a" - }, - "step": { - "user": { - "data": { - "show_on_map": "\u65bc\u5730\u5716\u986f\u793a", - "station_id": "Luftdaten \u611f\u61c9\u5668 ID" - }, - "title": "\u5b9a\u7fa9 Luftdaten" - } - }, - "title": "Luftdaten" - } -} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/config_flow.py b/homeassistant/components/luftdaten/config_flow.py index 1f382b86c0f..1613e8ea555 100644 --- a/homeassistant/components/luftdaten/config_flow.py +++ b/homeassistant/components/luftdaten/config_flow.py @@ -22,10 +22,10 @@ from .const import CONF_SENSOR_ID, DEFAULT_SCAN_INTERVAL, DOMAIN @callback def configured_sensors(hass): """Return a set of configured Luftdaten sensors.""" - return set( + return { entry.data[CONF_SENSOR_ID] for entry in hass.config_entries.async_entries(DOMAIN) - ) + } @callback diff --git a/homeassistant/components/luftdaten/manifest.json b/homeassistant/components/luftdaten/manifest.json index e6e9110b33a..e4670680b16 100644 --- a/homeassistant/components/luftdaten/manifest.json +++ b/homeassistant/components/luftdaten/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/luftdaten", "requirements": ["luftdaten==0.6.4"], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "gold" } diff --git a/homeassistant/components/luftdaten/strings.json b/homeassistant/components/luftdaten/strings.json index 2ba15087c48..2ac026d3001 100644 --- a/homeassistant/components/luftdaten/strings.json +++ b/homeassistant/components/luftdaten/strings.json @@ -1,13 +1,11 @@ { "config": { - "title": "Luftdaten", "step": { "user": { "title": "Define Luftdaten", "data": { "station_id": "Luftdaten Sensor ID", "show_on_map": "Show on map" - } } }, diff --git a/homeassistant/components/luftdaten/translations/bg.json b/homeassistant/components/luftdaten/translations/bg.json new file mode 100644 index 00000000000..816d0519ecc --- /dev/null +++ b/homeassistant/components/luftdaten/translations/bg.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043a\u043e\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441 Luftdaten", + "invalid_sensor": "\u0421\u0435\u043d\u0437\u043e\u0440\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043b\u0438\u0447\u0435\u043d \u0438\u043b\u0438 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d", + "sensor_exists": "\u0421\u0435\u043d\u0437\u043e\u0440\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d" + }, + "step": { + "user": { + "data": { + "show_on_map": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0430\u0442\u0430", + "station_id": "ID \u043d\u0430 \u0441\u0435\u043d\u0437\u043e\u0440\u0430 \u043d\u0430 Luftdaten" + }, + "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/ca.json b/homeassistant/components/luftdaten/translations/ca.json new file mode 100644 index 00000000000..e1b5072b96e --- /dev/null +++ b/homeassistant/components/luftdaten/translations/ca.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "No s'ha pogut comunicar amb l'API de Luftdaten", + "invalid_sensor": "El sensor no est\u00e0 disponible o no \u00e9s v\u00e0lid", + "sensor_exists": "Sensor ja registrat" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mostrar al mapa", + "station_id": "Identificador del sensor Luftdaten" + }, + "title": "Configuraci\u00f3 de Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/cs.json b/homeassistant/components/luftdaten/translations/cs.json new file mode 100644 index 00000000000..0a38e6200b9 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/cs.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Nelze komunikovat s Luftdaten API", + "invalid_sensor": "Senzor nen\u00ed k dispozici nebo je neplatn\u00fd", + "sensor_exists": "Senzor je ji\u017e zaregistrov\u00e1n" + }, + "step": { + "user": { + "data": { + "show_on_map": "Uka\u017e na map\u011b", + "station_id": "ID senzoru Luftdaten" + }, + "title": "Definujte Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/da.json b/homeassistant/components/luftdaten/translations/da.json new file mode 100644 index 00000000000..c44ee107618 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/da.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Kan ikke oprette forbindelse til Luftdaten API", + "invalid_sensor": "Sensor ikke tilg\u00e6ngelig eller ugyldig", + "sensor_exists": "Sensor er allerede registreret" + }, + "step": { + "user": { + "data": { + "show_on_map": "Vis p\u00e5 kort", + "station_id": "Luftdaten sensor-id" + }, + "title": "Definer Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/de.json b/homeassistant/components/luftdaten/translations/de.json new file mode 100644 index 00000000000..b2169dbc2ab --- /dev/null +++ b/homeassistant/components/luftdaten/translations/de.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Keine Kommunikation mit Luftdaten API m\u00f6glich", + "invalid_sensor": "Sensor nicht verf\u00fcgbar oder ung\u00fcltig", + "sensor_exists": "Sensor bereits registriert" + }, + "step": { + "user": { + "data": { + "show_on_map": "Auf Karte anzeigen", + "station_id": "Luftdaten-Sensor-ID" + }, + "title": "Luftdaten einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/en.json b/homeassistant/components/luftdaten/translations/en.json new file mode 100644 index 00000000000..0c325c70970 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/en.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Unable to communicate with the Luftdaten API", + "invalid_sensor": "Sensor not available or invalid", + "sensor_exists": "Sensor already registered" + }, + "step": { + "user": { + "data": { + "show_on_map": "Show on map", + "station_id": "Luftdaten Sensor ID" + }, + "title": "Define Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/es-419.json b/homeassistant/components/luftdaten/translations/es-419.json new file mode 100644 index 00000000000..eddf31c91ab --- /dev/null +++ b/homeassistant/components/luftdaten/translations/es-419.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "No se puede comunicar con la API de Luftdaten", + "invalid_sensor": "Sensor no disponible o no v\u00e1lido", + "sensor_exists": "Sensor ya registrado" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mostrar en el mapa", + "station_id": "ID del sensor de Luftdaten" + }, + "title": "Definir Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/es.json b/homeassistant/components/luftdaten/translations/es.json new file mode 100644 index 00000000000..9f8276ff3b8 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/es.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "No se puede comunicar con la API de Luftdaten", + "invalid_sensor": "Sensor no disponible o no v\u00e1lido", + "sensor_exists": "Sensor ya registrado" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mostrar en el mapa", + "station_id": "Sensro ID de Luftdaten" + }, + "title": "Definir Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/fr.json b/homeassistant/components/luftdaten/translations/fr.json new file mode 100644 index 00000000000..8b3492a0427 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Impossible de communiquer avec l'API Luftdaten", + "invalid_sensor": "Capteur non disponible ou invalide", + "sensor_exists": "Capteur d\u00e9j\u00e0 enregistr\u00e9" + }, + "step": { + "user": { + "data": { + "show_on_map": "Montrer sur la carte", + "station_id": "ID capteur Luftdaten" + }, + "title": "D\u00e9finir Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/hu.json b/homeassistant/components/luftdaten/translations/hu.json new file mode 100644 index 00000000000..2d63c0f5852 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Nem lehet kommunik\u00e1lni a Luftdaten API-val", + "invalid_sensor": "Az \u00e9rz\u00e9kel\u0151 nem el\u00e9rhet\u0151 vagy \u00e9rv\u00e9nytelen", + "sensor_exists": "Az \u00e9rz\u00e9kel\u0151 m\u00e1r regisztr\u00e1lt" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mutasd a t\u00e9rk\u00e9pen", + "station_id": "Luftdaten \u00e9rz\u00e9kel\u0151 ID" + }, + "title": "Luftdaten be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/it.json b/homeassistant/components/luftdaten/translations/it.json new file mode 100644 index 00000000000..f3673c2775d --- /dev/null +++ b/homeassistant/components/luftdaten/translations/it.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Impossibile comunicare con l'API Luftdaten", + "invalid_sensor": "Sensore non disponibile o non valido", + "sensor_exists": "Sensore gi\u00e0 registrato" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mostra sulla mappa", + "station_id": "ID del sensore Luftdaten" + }, + "title": "Definisci Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/ko.json b/homeassistant/components/luftdaten/translations/ko.json new file mode 100644 index 00000000000..a5b4c5cc466 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/ko.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Luftdaten API \uc640 \ud1b5\uc2e0 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "invalid_sensor": "\uc13c\uc11c\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac70\ub098 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "sensor_exists": "\uc13c\uc11c\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "show_on_map": "\uc9c0\ub3c4\uc5d0 \ud45c\uc2dc\ud558\uae30", + "station_id": "Luftdaten \uc13c\uc11c ID" + }, + "title": "Luftdaten \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/lb.json b/homeassistant/components/luftdaten/translations/lb.json new file mode 100644 index 00000000000..d7f17fb5220 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/lb.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Kann net mat der Luftdaten API kommuniz\u00e9ieren", + "invalid_sensor": "Sensor net disponibel oder ong\u00eblteg", + "sensor_exists": "Sensor ass scho registr\u00e9iert" + }, + "step": { + "user": { + "data": { + "show_on_map": "Op der Kaart uweisen", + "station_id": "Luftdaten Sensor ID" + }, + "title": "Luftdaten d\u00e9fin\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/nl.json b/homeassistant/components/luftdaten/translations/nl.json new file mode 100644 index 00000000000..f7c93460fa7 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/nl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Kan niet communiceren met de Luftdaten API", + "invalid_sensor": "Sensor niet beschikbaar of ongeldig", + "sensor_exists": "Sensor bestaat al" + }, + "step": { + "user": { + "data": { + "show_on_map": "Toon op kaart", + "station_id": "Luftdaten Sensor ID" + }, + "title": "Definieer Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/nn.json b/homeassistant/components/luftdaten/translations/nn.json new file mode 100644 index 00000000000..2639d90be2d --- /dev/null +++ b/homeassistant/components/luftdaten/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Luftdaten" +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/no.json b/homeassistant/components/luftdaten/translations/no.json new file mode 100644 index 00000000000..1d48834f755 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/no.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Kan ikke kommunisere med Luftdaten API", + "invalid_sensor": "Sensor er ikke tilgjengelig eller ugyldig", + "sensor_exists": "Sensor er allerede registrert" + }, + "step": { + "user": { + "data": { + "show_on_map": "Vis p\u00e5 kart", + "station_id": "Luftdaten Sensor ID" + }, + "title": "Definer Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/pl.json b/homeassistant/components/luftdaten/translations/pl.json new file mode 100644 index 00000000000..1a5b58586df --- /dev/null +++ b/homeassistant/components/luftdaten/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z API Luftdaten", + "invalid_sensor": "Sensor niedost\u0119pny lub nieprawid\u0142owy", + "sensor_exists": "Sensor zosta\u0142 ju\u017c zarejestrowany." + }, + "step": { + "user": { + "data": { + "show_on_map": "Poka\u017c na mapie", + "station_id": "ID sensora Luftdaten" + }, + "title": "Konfiguracja Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/pt-BR.json b/homeassistant/components/luftdaten/translations/pt-BR.json new file mode 100644 index 00000000000..e2fce8f57c4 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/pt-BR.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "N\u00e3o \u00e9 poss\u00edvel se comunicar com a API da Luftdaten", + "invalid_sensor": "Sensor n\u00e3o dispon\u00edvel ou inv\u00e1lido", + "sensor_exists": "Sensor j\u00e1 registado" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mostrar no mapa", + "station_id": "ID do Sensor Luftdaten" + }, + "title": "Definir Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/pt.json b/homeassistant/components/luftdaten/translations/pt.json new file mode 100644 index 00000000000..deb2de26fdc --- /dev/null +++ b/homeassistant/components/luftdaten/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "N\u00e3o \u00e9 poss\u00edvel comunicar com a API da Luftdaten", + "invalid_sensor": "Sensor n\u00e3o dispon\u00edvel ou inv\u00e1lido", + "sensor_exists": "Sensor j\u00e1 registado" + }, + "step": { + "user": { + "data": { + "show_on_map": "Mostrar no mapa", + "station_id": "Luftdaten Sensor ID" + }, + "title": "Definir Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/ru.json b/homeassistant/components/luftdaten/translations/ru.json new file mode 100644 index 00000000000..5123fa9438b --- /dev/null +++ b/homeassistant/components/luftdaten/translations/ru.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a API Luftdaten.", + "invalid_sensor": "\u0421\u0435\u043d\u0441\u043e\u0440 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u043b\u0438 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", + "sensor_exists": "\u0421\u0435\u043d\u0441\u043e\u0440 \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d." + }, + "step": { + "user": { + "data": { + "show_on_map": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435", + "station_id": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 Luftdaten" + }, + "title": "Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/sl.json b/homeassistant/components/luftdaten/translations/sl.json new file mode 100644 index 00000000000..edf88f798f9 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/sl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Ne morem komunicirati z Luftdaten API-jem", + "invalid_sensor": "Senzor ni na voljo ali je neveljaven", + "sensor_exists": "Senzor je \u017ee registriran" + }, + "step": { + "user": { + "data": { + "show_on_map": "Prika\u017ei na zemljevidu", + "station_id": "Luftdaten ID Senzorja" + }, + "title": "Dolo\u010dite Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/sv.json b/homeassistant/components/luftdaten/translations/sv.json new file mode 100644 index 00000000000..62d823c5fe9 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/sv.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "Det g\u00e5r inte att kommunicera med Luftdaten API", + "invalid_sensor": "Sensor saknas eller \u00e4r ogiltig", + "sensor_exists": "Sensorn \u00e4r redan registrerad" + }, + "step": { + "user": { + "data": { + "show_on_map": "Visa p\u00e5 karta", + "station_id": "Luftdaten Sensor-ID" + }, + "title": "Definiera Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/zh-Hans.json b/homeassistant/components/luftdaten/translations/zh-Hans.json new file mode 100644 index 00000000000..02024b18494 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/zh-Hans.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "\u65e0\u6cd5\u4e0e Luftdaten API \u901a\u4fe1", + "invalid_sensor": "\u4f20\u611f\u5668\u4e0d\u53ef\u7528\u6216\u65e0\u6548", + "sensor_exists": "\u4f20\u611f\u5668\u5df2\u6ce8\u518c" + }, + "step": { + "user": { + "data": { + "show_on_map": "\u5728\u5730\u56fe\u4e0a\u663e\u793a", + "station_id": "Luftdaten \u4f20\u611f\u5668 ID" + }, + "title": "\u5b9a\u4e49 Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/luftdaten/translations/zh-Hant.json b/homeassistant/components/luftdaten/translations/zh-Hant.json new file mode 100644 index 00000000000..2c0e06f8006 --- /dev/null +++ b/homeassistant/components/luftdaten/translations/zh-Hant.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "communication_error": "\u7121\u6cd5\u8207 Luftdaten API \u9032\u884c\u901a\u4fe1", + "invalid_sensor": "\u7121\u6cd5\u4f7f\u7528\u6216\u7121\u6548\u7684\u611f\u61c9\u5668", + "sensor_exists": "\u611f\u61c9\u5668\u5df2\u8a3b\u518a" + }, + "step": { + "user": { + "data": { + "show_on_map": "\u65bc\u5730\u5716\u986f\u793a", + "station_id": "Luftdaten \u611f\u61c9\u5668 ID" + }, + "title": "\u5b9a\u7fa9 Luftdaten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/lupusec/manifest.json b/homeassistant/components/lupusec/manifest.json index 391de3cfc55..fb9cf64545a 100644 --- a/homeassistant/components/lupusec/manifest.json +++ b/homeassistant/components/lupusec/manifest.json @@ -3,6 +3,5 @@ "name": "Lupus Electronics LUPUSEC", "documentation": "https://www.home-assistant.io/integrations/lupusec", "requirements": ["lupupy==0.0.18"], - "dependencies": [], "codeowners": ["@majuss"] } diff --git a/homeassistant/components/lutron/__init__.py b/homeassistant/components/lutron/__init__.py index ac6ffa46b27..2eeebac4c96 100644 --- a/homeassistant/components/lutron/__init__.py +++ b/homeassistant/components/lutron/__init__.py @@ -20,6 +20,7 @@ LUTRON_DEVICES = "lutron_devices" # Attribute on events that indicates what action was taken with the button. ATTR_ACTION = "action" +ATTR_FULL_ID = "full_id" CONFIG_SCHEMA = vol.Schema( { @@ -37,7 +38,6 @@ CONFIG_SCHEMA = vol.Schema( def setup(hass, base_config): """Set up the Lutron component.""" - hass.data[LUTRON_BUTTONS] = [] hass.data[LUTRON_CONTROLLER] = None hass.data[LUTRON_DEVICES] = { @@ -84,7 +84,9 @@ def setup(hass, base_config): (area.name, keypad.name, button, led) ) - hass.data[LUTRON_BUTTONS].append(LutronButton(hass, keypad, button)) + hass.data[LUTRON_BUTTONS].append( + LutronButton(hass, area.name, keypad, button) + ) if area.occupancy_group is not None: hass.data[LUTRON_DEVICES]["binary_sensor"].append( (area.name, area.occupancy_group) @@ -133,7 +135,7 @@ class LutronButton: represented as an entity; it simply fires events. """ - def __init__(self, hass, keypad, button): + def __init__(self, hass, area_name, keypad, button): """Register callback for activity on the button.""" name = f"{keypad.name}: {button.name}" self._hass = hass @@ -141,13 +143,17 @@ class LutronButton: button.button_type is not None and "RaiseLower" in button.button_type ) self._id = slugify(name) + self._keypad = keypad + self._area_name = area_name + self._button_name = button.name + self._button = button self._event = "lutron_event" + self._full_id = slugify(f"{area_name} {keypad.name}: {button.name}") button.subscribe(self.button_callback, None) def button_callback(self, button, context, event, params): """Fire an event about a button being pressed or released.""" - # Events per button type: # RaiseLower -> pressed/released # SingleAction -> single @@ -161,5 +167,5 @@ class LutronButton: action = "single" if action: - data = {ATTR_ID: self._id, ATTR_ACTION: action} + data = {ATTR_ID: self._id, ATTR_ACTION: action, ATTR_FULL_ID: self._full_id} self._hass.bus.fire(self._event, data) diff --git a/homeassistant/components/lutron/manifest.json b/homeassistant/components/lutron/manifest.json index 9eb4fdeaa45..2dbeb51da58 100644 --- a/homeassistant/components/lutron/manifest.json +++ b/homeassistant/components/lutron/manifest.json @@ -3,6 +3,5 @@ "name": "Lutron", "documentation": "https://www.home-assistant.io/integrations/lutron", "requirements": ["pylutron==0.2.5"], - "dependencies": [], "codeowners": ["@JonGilmore"] } diff --git a/homeassistant/components/lutron/scene.py b/homeassistant/components/lutron/scene.py index 4e06c5df626..468597ba5ea 100644 --- a/homeassistant/components/lutron/scene.py +++ b/homeassistant/components/lutron/scene.py @@ -1,5 +1,6 @@ """Support for Lutron scenes.""" import logging +from typing import Any from homeassistant.components.scene import Scene @@ -30,7 +31,7 @@ class LutronScene(LutronDevice, Scene): self._keypad_name = keypad_name self._led = lutron_led - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self._lutron_device.press() diff --git a/homeassistant/components/lutron/switch.py b/homeassistant/components/lutron/switch.py index 604f19fc2ae..64ca5e6f216 100644 --- a/homeassistant/components/lutron/switch.py +++ b/homeassistant/components/lutron/switch.py @@ -11,10 +11,21 @@ _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Lutron switches.""" devs = [] + + # Add Lutron Switches for (area_name, device) in hass.data[LUTRON_DEVICES]["switch"]: dev = LutronSwitch(area_name, device, hass.data[LUTRON_CONTROLLER]) devs.append(dev) + # Add the indicator LEDs for scenes (keypad buttons) + for scene_data in hass.data[LUTRON_DEVICES]["scene"]: + (area_name, keypad_name, scene, led) = scene_data + if led is not None: + led = LutronLed( + area_name, keypad_name, scene, led, hass.data[LUTRON_CONTROLLER] + ) + devs.append(led) + add_entities(devs, True) @@ -50,3 +61,49 @@ class LutronSwitch(LutronDevice, SwitchDevice): """Call when forcing a refresh of the device.""" if self._prev_state is None: self._prev_state = self._lutron_device.level > 0 + + +class LutronLed(LutronDevice, SwitchDevice): + """Representation of a Lutron Keypad LED.""" + + def __init__(self, area_name, keypad_name, scene_device, led_device, controller): + """Initialize the switch.""" + self._keypad_name = keypad_name + self._scene_name = scene_device.name + super().__init__(area_name, led_device, controller) + + def turn_on(self, **kwargs): + """Turn the LED on.""" + self._lutron_device.state = 1 + + def turn_off(self, **kwargs): + """Turn the LED off.""" + self._lutron_device.state = 0 + + @property + def device_state_attributes(self): + """Return the state attributes.""" + attr = { + "keypad": self._keypad_name, + "scene": self._scene_name, + "led": self._lutron_device.name, + } + return attr + + @property + def is_on(self): + """Return true if device is on.""" + return self._lutron_device.last_state + + @property + def name(self): + """Return the name of the LED.""" + return f"{self._area_name} {self._keypad_name}: {self._scene_name} LED" + + def update(self): + """Call when forcing a refresh of the device.""" + if self._lutron_device.last_state is not None: + return + + # The following property getter actually triggers an update in Lutron + self._lutron_device.state # pylint: disable=pointless-statement diff --git a/homeassistant/components/lutron_caseta/.translations/bg.json b/homeassistant/components/lutron_caseta/.translations/bg.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/bg.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/ca.json b/homeassistant/components/lutron_caseta/.translations/ca.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/ca.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/da.json b/homeassistant/components/lutron_caseta/.translations/da.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/da.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/de.json b/homeassistant/components/lutron_caseta/.translations/de.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/de.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/en.json b/homeassistant/components/lutron_caseta/.translations/en.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/en.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/es.json b/homeassistant/components/lutron_caseta/.translations/es.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/es.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/fr.json b/homeassistant/components/lutron_caseta/.translations/fr.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/fr.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/hu.json b/homeassistant/components/lutron_caseta/.translations/hu.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/hu.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/it.json b/homeassistant/components/lutron_caseta/.translations/it.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/it.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/ko.json b/homeassistant/components/lutron_caseta/.translations/ko.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/ko.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/lb.json b/homeassistant/components/lutron_caseta/.translations/lb.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/lb.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/nl.json b/homeassistant/components/lutron_caseta/.translations/nl.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/nl.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/no.json b/homeassistant/components/lutron_caseta/.translations/no.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/no.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/pl.json b/homeassistant/components/lutron_caseta/.translations/pl.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/pl.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/ru.json b/homeassistant/components/lutron_caseta/.translations/ru.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/ru.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/sl.json b/homeassistant/components/lutron_caseta/.translations/sl.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/sl.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/sv.json b/homeassistant/components/lutron_caseta/.translations/sv.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/sv.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/.translations/zh-Hant.json b/homeassistant/components/lutron_caseta/.translations/zh-Hant.json deleted file mode 100644 index cfc3c290afe..00000000000 --- a/homeassistant/components/lutron_caseta/.translations/zh-Hant.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Cas\u00e9ta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/manifest.json b/homeassistant/components/lutron_caseta/manifest.json index 90c9d4fc9c9..e3b74d8157b 100644 --- a/homeassistant/components/lutron_caseta/manifest.json +++ b/homeassistant/components/lutron_caseta/manifest.json @@ -1,6 +1,6 @@ { "domain": "lutron_caseta", - "name": "Lutron Caseta", + "name": "Lutron Caséta", "documentation": "https://www.home-assistant.io/integrations/lutron_caseta", "requirements": ["pylutron-caseta==0.6.1"], "codeowners": ["@swails"] diff --git a/homeassistant/components/lutron_caseta/scene.py b/homeassistant/components/lutron_caseta/scene.py index 593f58f5274..8b4dc466c90 100644 --- a/homeassistant/components/lutron_caseta/scene.py +++ b/homeassistant/components/lutron_caseta/scene.py @@ -1,5 +1,6 @@ """Support for Lutron Caseta scenes.""" import logging +from typing import Any from homeassistant.components.scene import Scene @@ -34,6 +35,6 @@ class LutronCasetaScene(Scene): """Return the name of the scene.""" return self._scene_name - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate the scene.""" self._bridge.activate_scene(self._scene_id) diff --git a/homeassistant/components/lutron_caseta/strings.json b/homeassistant/components/lutron_caseta/strings.json deleted file mode 100644 index cb7ab8c767e..00000000000 --- a/homeassistant/components/lutron_caseta/strings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Lutron Caséta" - } -} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/bg.json b/homeassistant/components/lutron_caseta/translations/bg.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/ca.json b/homeassistant/components/lutron_caseta/translations/ca.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/da.json b/homeassistant/components/lutron_caseta/translations/da.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/de.json b/homeassistant/components/lutron_caseta/translations/de.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/en.json b/homeassistant/components/lutron_caseta/translations/en.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/es.json b/homeassistant/components/lutron_caseta/translations/es.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/fr.json b/homeassistant/components/lutron_caseta/translations/fr.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/hu.json b/homeassistant/components/lutron_caseta/translations/hu.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/it.json b/homeassistant/components/lutron_caseta/translations/it.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/ko.json b/homeassistant/components/lutron_caseta/translations/ko.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/lb.json b/homeassistant/components/lutron_caseta/translations/lb.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/nl.json b/homeassistant/components/lutron_caseta/translations/nl.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/no.json b/homeassistant/components/lutron_caseta/translations/no.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/pl.json b/homeassistant/components/lutron_caseta/translations/pl.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/ru.json b/homeassistant/components/lutron_caseta/translations/ru.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/sl.json b/homeassistant/components/lutron_caseta/translations/sl.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/sv.json b/homeassistant/components/lutron_caseta/translations/sv.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lutron_caseta/translations/zh-Hant.json b/homeassistant/components/lutron_caseta/translations/zh-Hant.json new file mode 100644 index 00000000000..970d722fe4c --- /dev/null +++ b/homeassistant/components/lutron_caseta/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "Lutron Cas\u00e9ta" +} \ No newline at end of file diff --git a/homeassistant/components/lw12wifi/manifest.json b/homeassistant/components/lw12wifi/manifest.json index 014dde12fcb..27523ccb7c2 100644 --- a/homeassistant/components/lw12wifi/manifest.json +++ b/homeassistant/components/lw12wifi/manifest.json @@ -3,6 +3,5 @@ "name": "LAGUTE LW-12", "documentation": "https://www.home-assistant.io/integrations/lw12wifi", "requirements": ["lw12==0.9.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/lyft/manifest.json b/homeassistant/components/lyft/manifest.json index ec9fb422d21..7b5ad8df07c 100644 --- a/homeassistant/components/lyft/manifest.json +++ b/homeassistant/components/lyft/manifest.json @@ -3,6 +3,5 @@ "name": "Lyft", "documentation": "https://www.home-assistant.io/integrations/lyft", "requirements": ["lyft_rides==0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/magicseaweed/manifest.json b/homeassistant/components/magicseaweed/manifest.json index ccd684e1f35..2edac84c7f5 100644 --- a/homeassistant/components/magicseaweed/manifest.json +++ b/homeassistant/components/magicseaweed/manifest.json @@ -3,6 +3,5 @@ "name": "Magicseaweed", "documentation": "https://www.home-assistant.io/integrations/magicseaweed", "requirements": ["magicseaweed==1.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mailbox/__init__.py b/homeassistant/components/mailbox/__init__.py index 8526f6658c7..c3a24fe9b02 100644 --- a/homeassistant/components/mailbox/__init__.py +++ b/homeassistant/components/mailbox/__init__.py @@ -9,6 +9,7 @@ from aiohttp.web_exceptions import HTTPNotFound import async_timeout from homeassistant.components.http import HomeAssistantView +from homeassistant.const import HTTP_INTERNAL_SERVER_ERROR from homeassistant.core import callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_per_platform, discovery @@ -177,8 +178,6 @@ class Mailbox: class StreamError(Exception): """Media streaming exception.""" - pass - class MailboxView(HomeAssistantView): """Base mailbox view.""" @@ -257,8 +256,8 @@ class MailboxMediaView(MailboxView): except StreamError as err: error_msg = "Error getting media: %s" % (err) _LOGGER.error(error_msg) - return web.Response(status=500) + return web.Response(status=HTTP_INTERNAL_SERVER_ERROR) if stream: return web.Response(body=stream, content_type=mailbox.media_type) - return web.Response(status=500) + return web.Response(status=HTTP_INTERNAL_SERVER_ERROR) diff --git a/homeassistant/components/mailbox/manifest.json b/homeassistant/components/mailbox/manifest.json index 5202569d198..7bbdcfa78cf 100644 --- a/homeassistant/components/mailbox/manifest.json +++ b/homeassistant/components/mailbox/manifest.json @@ -2,7 +2,6 @@ "domain": "mailbox", "name": "Mailbox", "documentation": "https://www.home-assistant.io/integrations/mailbox", - "requirements": [], "dependencies": ["http"], "codeowners": [] } diff --git a/homeassistant/components/mailbox/strings.json b/homeassistant/components/mailbox/strings.json new file mode 100644 index 00000000000..84acd440044 --- /dev/null +++ b/homeassistant/components/mailbox/strings.json @@ -0,0 +1 @@ +{ "title": "Mailbox" } diff --git a/homeassistant/components/mailbox/translations/af.json b/homeassistant/components/mailbox/translations/af.json new file mode 100644 index 00000000000..a3922ec5b6b --- /dev/null +++ b/homeassistant/components/mailbox/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Posbus" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ar.json b/homeassistant/components/mailbox/translations/ar.json new file mode 100644 index 00000000000..287aace0fe3 --- /dev/null +++ b/homeassistant/components/mailbox/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0627\u0644\u0628\u0631\u064a\u062f" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/bg.json b/homeassistant/components/mailbox/translations/bg.json new file mode 100644 index 00000000000..d28a1480f9a --- /dev/null +++ b/homeassistant/components/mailbox/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0430 \u043a\u0443\u0442\u0438\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/bs.json b/homeassistant/components/mailbox/translations/bs.json new file mode 100644 index 00000000000..611c172b426 --- /dev/null +++ b/homeassistant/components/mailbox/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Po\u0161tansko sandu\u010de" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ca.json b/homeassistant/components/mailbox/translations/ca.json new file mode 100644 index 00000000000..2d25417753e --- /dev/null +++ b/homeassistant/components/mailbox/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "B\u00fastia" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/cs.json b/homeassistant/components/mailbox/translations/cs.json new file mode 100644 index 00000000000..13aad35f5b9 --- /dev/null +++ b/homeassistant/components/mailbox/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Po\u0161tovn\u00ed schr\u00e1nka" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/cy.json b/homeassistant/components/mailbox/translations/cy.json new file mode 100644 index 00000000000..1673ff40443 --- /dev/null +++ b/homeassistant/components/mailbox/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Blwch post" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/da.json b/homeassistant/components/mailbox/translations/da.json new file mode 100644 index 00000000000..3c5eee88fbd --- /dev/null +++ b/homeassistant/components/mailbox/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Postkasse" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/de.json b/homeassistant/components/mailbox/translations/de.json new file mode 100644 index 00000000000..afbbced95e7 --- /dev/null +++ b/homeassistant/components/mailbox/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Postfach" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/el.json b/homeassistant/components/mailbox/translations/el.json new file mode 100644 index 00000000000..1c05c372811 --- /dev/null +++ b/homeassistant/components/mailbox/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03ba\u03b9\u03b2\u03ce\u03c4\u03b9\u03bf" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/en.json b/homeassistant/components/mailbox/translations/en.json new file mode 100644 index 00000000000..9c47ef20696 --- /dev/null +++ b/homeassistant/components/mailbox/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Mailbox" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/es-419.json b/homeassistant/components/mailbox/translations/es-419.json new file mode 100644 index 00000000000..a099f895f94 --- /dev/null +++ b/homeassistant/components/mailbox/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Buz\u00f3n" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/es.json b/homeassistant/components/mailbox/translations/es.json new file mode 100644 index 00000000000..a099f895f94 --- /dev/null +++ b/homeassistant/components/mailbox/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Buz\u00f3n" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/et.json b/homeassistant/components/mailbox/translations/et.json new file mode 100644 index 00000000000..6f16b99f5e7 --- /dev/null +++ b/homeassistant/components/mailbox/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Postkast" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/eu.json b/homeassistant/components/mailbox/translations/eu.json new file mode 100644 index 00000000000..a1a6b038670 --- /dev/null +++ b/homeassistant/components/mailbox/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Postontzia" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/fa.json b/homeassistant/components/mailbox/translations/fa.json new file mode 100644 index 00000000000..eef7cb31d06 --- /dev/null +++ b/homeassistant/components/mailbox/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "\u0645\u06cc\u0644 \u0628\u0627\u06a9\u0633" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/fi.json b/homeassistant/components/mailbox/translations/fi.json new file mode 100644 index 00000000000..34f34c789d3 --- /dev/null +++ b/homeassistant/components/mailbox/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Postilaatikko" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/fr.json b/homeassistant/components/mailbox/translations/fr.json new file mode 100644 index 00000000000..b19309b5aca --- /dev/null +++ b/homeassistant/components/mailbox/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Boites aux lettres" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/he.json b/homeassistant/components/mailbox/translations/he.json new file mode 100644 index 00000000000..c22e68673aa --- /dev/null +++ b/homeassistant/components/mailbox/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05ea\u05d9\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/hi.json b/homeassistant/components/mailbox/translations/hi.json new file mode 100644 index 00000000000..5fb0b0a2ad2 --- /dev/null +++ b/homeassistant/components/mailbox/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u092e\u0947\u0932\u092c\u0949\u0915\u094d\u0938" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/hr.json b/homeassistant/components/mailbox/translations/hr.json new file mode 100644 index 00000000000..1a330a2e3e1 --- /dev/null +++ b/homeassistant/components/mailbox/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Po\u0161tanski sandu\u010di\u0107" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/hu.json b/homeassistant/components/mailbox/translations/hu.json new file mode 100644 index 00000000000..184ee25ab2b --- /dev/null +++ b/homeassistant/components/mailbox/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Postafi\u00f3k" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/hy.json b/homeassistant/components/mailbox/translations/hy.json new file mode 100644 index 00000000000..7671b559d56 --- /dev/null +++ b/homeassistant/components/mailbox/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0553\u0578\u057d\u057f\u0561\u0580\u056f\u0572" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/id.json b/homeassistant/components/mailbox/translations/id.json new file mode 100644 index 00000000000..b91fd076b8a --- /dev/null +++ b/homeassistant/components/mailbox/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Kotak pesan" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/is.json b/homeassistant/components/mailbox/translations/is.json new file mode 100644 index 00000000000..d4fdf75a2d5 --- /dev/null +++ b/homeassistant/components/mailbox/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "P\u00f3sth\u00f3lf" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/it.json b/homeassistant/components/mailbox/translations/it.json new file mode 100644 index 00000000000..724a20934f1 --- /dev/null +++ b/homeassistant/components/mailbox/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Messaggi" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ja.json b/homeassistant/components/mailbox/translations/ja.json new file mode 100644 index 00000000000..dc980b39088 --- /dev/null +++ b/homeassistant/components/mailbox/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "\u30e1\u30fc\u30eb\u30dc\u30c3\u30af\u30b9" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ko.json b/homeassistant/components/mailbox/translations/ko.json new file mode 100644 index 00000000000..9f3acdac989 --- /dev/null +++ b/homeassistant/components/mailbox/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uba54\uc77c\ud568" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/lb.json b/homeassistant/components/mailbox/translations/lb.json new file mode 100644 index 00000000000..ddaa6a26c5f --- /dev/null +++ b/homeassistant/components/mailbox/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Br\u00e9ifk\u00ebscht" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/lv.json b/homeassistant/components/mailbox/translations/lv.json new file mode 100644 index 00000000000..fd11ec96cef --- /dev/null +++ b/homeassistant/components/mailbox/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Pastkast\u012bte" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/nb.json b/homeassistant/components/mailbox/translations/nb.json new file mode 100644 index 00000000000..3c5eee88fbd --- /dev/null +++ b/homeassistant/components/mailbox/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Postkasse" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/nl.json b/homeassistant/components/mailbox/translations/nl.json new file mode 100644 index 00000000000..4392f15554c --- /dev/null +++ b/homeassistant/components/mailbox/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Postvak" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/nn.json b/homeassistant/components/mailbox/translations/nn.json new file mode 100644 index 00000000000..3c5eee88fbd --- /dev/null +++ b/homeassistant/components/mailbox/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Postkasse" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/no.json b/homeassistant/components/mailbox/translations/no.json new file mode 100644 index 00000000000..3c5eee88fbd --- /dev/null +++ b/homeassistant/components/mailbox/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Postkasse" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/pl.json b/homeassistant/components/mailbox/translations/pl.json new file mode 100644 index 00000000000..0950f58f183 --- /dev/null +++ b/homeassistant/components/mailbox/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Poczta" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/pt-BR.json b/homeassistant/components/mailbox/translations/pt-BR.json new file mode 100644 index 00000000000..91860a29663 --- /dev/null +++ b/homeassistant/components/mailbox/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Caixa de correio" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/pt.json b/homeassistant/components/mailbox/translations/pt.json new file mode 100644 index 00000000000..91860a29663 --- /dev/null +++ b/homeassistant/components/mailbox/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Caixa de correio" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ro.json b/homeassistant/components/mailbox/translations/ro.json new file mode 100644 index 00000000000..fc36e86b9f0 --- /dev/null +++ b/homeassistant/components/mailbox/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Cutie po\u0219tal\u0103" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ru.json b/homeassistant/components/mailbox/translations/ru.json new file mode 100644 index 00000000000..900934ae82c --- /dev/null +++ b/homeassistant/components/mailbox/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/sk.json b/homeassistant/components/mailbox/translations/sk.json new file mode 100644 index 00000000000..260d2d80750 --- /dev/null +++ b/homeassistant/components/mailbox/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Po\u0161tov\u00e1 schr\u00e1nka" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/sl.json b/homeassistant/components/mailbox/translations/sl.json new file mode 100644 index 00000000000..2e362de69fe --- /dev/null +++ b/homeassistant/components/mailbox/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Po\u0161tni predal" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/sv.json b/homeassistant/components/mailbox/translations/sv.json new file mode 100644 index 00000000000..1238dd85b77 --- /dev/null +++ b/homeassistant/components/mailbox/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Brevl\u00e5da" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/ta.json b/homeassistant/components/mailbox/translations/ta.json new file mode 100644 index 00000000000..ddc6e1a1d3a --- /dev/null +++ b/homeassistant/components/mailbox/translations/ta.json @@ -0,0 +1,3 @@ +{ + "title": "\u0b85\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0baa\u0bc6\u0b9f\u0bcd\u0b9f\u0bbf" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/te.json b/homeassistant/components/mailbox/translations/te.json new file mode 100644 index 00000000000..64b24fe6f16 --- /dev/null +++ b/homeassistant/components/mailbox/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c2e\u0c46\u0c2f\u0c3f\u0c32\u0c4d \u0c2c\u0c3e\u0c15\u0c4d\u0c38\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/th.json b/homeassistant/components/mailbox/translations/th.json new file mode 100644 index 00000000000..bf46c84aa03 --- /dev/null +++ b/homeassistant/components/mailbox/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e08\u0e14\u0e2b\u0e21\u0e32\u0e22" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/tr.json b/homeassistant/components/mailbox/translations/tr.json new file mode 100644 index 00000000000..b9b8f447124 --- /dev/null +++ b/homeassistant/components/mailbox/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Posta kutusu" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/uk.json b/homeassistant/components/mailbox/translations/uk.json new file mode 100644 index 00000000000..603e9049fde --- /dev/null +++ b/homeassistant/components/mailbox/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u041f\u043e\u0448\u0442\u043e\u0432\u0430 \u0441\u043a\u0440\u0438\u043d\u044c\u043a\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/vi.json b/homeassistant/components/mailbox/translations/vi.json new file mode 100644 index 00000000000..69b22a8448c --- /dev/null +++ b/homeassistant/components/mailbox/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "H\u1ed9p th\u01b0" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/zh-Hans.json b/homeassistant/components/mailbox/translations/zh-Hans.json new file mode 100644 index 00000000000..276927624df --- /dev/null +++ b/homeassistant/components/mailbox/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u90ae\u7bb1" +} \ No newline at end of file diff --git a/homeassistant/components/mailbox/translations/zh-Hant.json b/homeassistant/components/mailbox/translations/zh-Hant.json new file mode 100644 index 00000000000..0f163529163 --- /dev/null +++ b/homeassistant/components/mailbox/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u90f5\u7bb1" +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/bg.json b/homeassistant/components/mailgun/.translations/bg.json deleted file mode 100644 index 3ae97ab164a..00000000000 --- a/homeassistant/components/mailgun/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Mailgun.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 [Webhooks \u0441 Mailgun]({mailgun_url}). \n\n\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json\n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u0442\u043e\u0432\u0430 \u043a\u0430\u043a \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438 \u0434\u0430\u043d\u043d\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Mailgun?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/ca.json b/homeassistant/components/mailgun/.translations/ca.json deleted file mode 100644 index 6bcb737588a..00000000000 --- a/homeassistant/components/mailgun/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Mailgun.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar [Webhooks amb Mailgun]({mailgun_url}). \n\nCompleta la seg\u00fcent informaci\u00f3: \n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n- Tipus de contingut: application/x-www-form-urlencoded\n\nConsulta la [documentaci\u00f3]({docs_url}) sobre com configurar les automatitzacions per gestionar dades entrants." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar Mailgun?", - "title": "Configuraci\u00f3 del Webhook de Mailgun" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/cs.json b/homeassistant/components/mailgun/.translations/cs.json deleted file mode 100644 index 2f7c4e5a902..00000000000 --- a/homeassistant/components/mailgun/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy Mailgun.", - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset nastavit [Webhooks with Mailgun]({mailgun_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}' \n - Metoda: POST \n - Typ obsahu: aplikace / json \n\n Viz [dokumentace]({docs_url}), jak konfigurovat automatizace pro zpracov\u00e1n\u00ed p\u0159\u00edchoz\u00edch dat." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit slu\u017ebu Mailgun?", - "title": "Nastavit Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/da.json b/homeassistant/components/mailgun/.translations/da.json deleted file mode 100644 index f9152633706..00000000000 --- a/homeassistant/components/mailgun/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Mailgun-meddelelser", - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning." - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere [Webhooks med Mailgun]({mailgun_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/json\n\nSe [dokumentationen] ({docs_url}) om hvordan du konfigurerer automatiseringer til at h\u00e5ndtere indg\u00e5ende data." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Mailgun?", - "title": "Konfigurer Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/de.json b/homeassistant/components/mailgun/.translations/de.json deleted file mode 100644 index 93412ca75f3..00000000000 --- a/homeassistant/components/mailgun/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Mailgun-Nachrichten empfangen zu k\u00f6nnen.", - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "Um Ereignisse an den Home Assistant zu senden, musst [Webhooks mit Mailgun]({mailgun_url}) einrichten. \n\n F\u00fclle die folgenden Informationen aus: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhaltstyp: application / json \n\nLies in der [Dokumentation]({docs_url}) wie du Automationen f\u00fcr die Verarbeitung eingehender Daten konfigurierst." - }, - "step": { - "user": { - "description": "M\u00f6chtest du Mailgun wirklich einrichten?", - "title": "Mailgun-Webhook einrichten" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/en.json b/homeassistant/components/mailgun/.translations/en.json deleted file mode 100644 index 98529a33815..00000000000 --- a/homeassistant/components/mailgun/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive Mailgun messages.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup [Webhooks with Mailgun]({mailgun_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data." - }, - "step": { - "user": { - "description": "Are you sure you want to set up Mailgun?", - "title": "Set up the Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/es-419.json b/homeassistant/components/mailgun/.translations/es-419.json deleted file mode 100644 index fd0c543241b..00000000000 --- a/homeassistant/components/mailgun/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Mailgun.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar [Webhooks with Mailgun] ( {mailgun_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: aplicaci\u00f3n / json \n\n Consulte [la documentaci\u00f3n] ( {docs_url} ) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar Mailgun?", - "title": "Configurar el Webhook de Mailgun" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/es.json b/homeassistant/components/mailgun/.translations/es.json deleted file mode 100644 index 4428d7e1868..00000000000 --- a/homeassistant/components/mailgun/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Mailgun.", - "one_instance_allowed": "S\u00f3lo se necesita una sola instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant debes configurar los [Webhooks en Mailgun]({mailgun_url}). \n\n Completa la siguiente informaci\u00f3n: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n - Tipo de contenido: application/json \n\n Consulta [la documentaci\u00f3n]({docs_url}) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar Mailgun?", - "title": "Configurar el Webhook de Mailgun" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/fr.json b/homeassistant/components/mailgun/.translations/fr.json deleted file mode 100644 index 5d86a36b947..00000000000 --- a/homeassistant/components/mailgun/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages Mailgun.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer [Webhooks avec Mailgun] ( {mailgun_url} ). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / json \n\n Voir [la documentation] ( {docs_url} ) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer Mailgun?", - "title": "Configurer le Webhook Mailgun" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/hu.json b/homeassistant/components/mailgun/.translations/hu.json deleted file mode 100644 index 975c106a26f..00000000000 --- a/homeassistant/components/mailgun/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A Home Assistant rendszerednek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l a Mailgun \u00fczenetek fogad\u00e1s\u00e1hoz.", - "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Mailgunt?", - "title": "Mailgun Webhook be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/it.json b/homeassistant/components/mailgun/.translations/it.json deleted file mode 100644 index 4dea652aa3f..00000000000 --- a/homeassistant/components/mailgun/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Mailgun.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai configurare [Webhooks con Mailgun]({mailgun_url})\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n - Content Type: application/json\n\n Vedi [la documentazione]({docs_url}) su come configurare le automazioni per gestire i dati in arrivo." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare Mailgun?", - "title": "Configura il webhook di Mailgun" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/ko.json b/homeassistant/components/mailgun/.translations/ko.json deleted file mode 100644 index 8f1f021caf6..00000000000 --- a/homeassistant/components/mailgun/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Mailgun \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 [Mailgun Webhook]({mailgun_url}) \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n - Content Type: application/json\n \nHome Assistant \ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc790\ub3d9\ud654\ub97c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Mailgun \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Mailgun Webhook \uc124\uc815" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/lb.json b/homeassistant/components/mailgun/.translations/lb.json deleted file mode 100644 index f84225444d9..00000000000 --- a/homeassistant/components/mailgun/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Mailgun Noriichten z'empf\u00e4nken.", - "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." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Mailgun anzeriichten?", - "title": "Mailgun Webhook ariichten" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/nl.json b/homeassistant/components/mailgun/.translations/nl.json deleted file mode 100644 index 6a1ff24ef2c..00000000000 --- a/homeassistant/components/mailgun/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Mailgun-berichten te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n enkele instantie is nodig." - }, - "create_entry": { - "default": "Om evenementen naar Home Assistant te verzenden, moet u [Webhooks with Mailgun] instellen ( {mailgun_url} ). \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhoudstype: application/json \n\n Zie [de documentatie] ( {docs_url} ) voor informatie over het configureren van automatiseringen om binnenkomende gegevens te verwerken." - }, - "step": { - "user": { - "description": "Weet u zeker dat u Mailgun wilt instellen?", - "title": "Stel de Mailgun Webhook in" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/nn.json b/homeassistant/components/mailgun/.translations/nn.json deleted file mode 100644 index 2bab2e43001..00000000000 --- a/homeassistant/components/mailgun/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/no.json b/homeassistant/components/mailgun/.translations/no.json deleted file mode 100644 index 3d1cbd41a34..00000000000 --- a/homeassistant/components/mailgun/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant forekomst m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 motta Mailgun-meldinger.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp [Webhooks with Mailgun]({mailgun_url}).\n\nFyll ut f\u00f8lgende informasjon:\n\n- URL: `{webhook_url}`\n- Metode: POST\n- Innholdstype: application/json\n\nSe [dokumentasjonen]({docs_url}) om hvordan du konfigurerer automatiseringer for \u00e5 h\u00e5ndtere innkommende data." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du \u00f8nsker \u00e5 sette opp Mailgun?", - "title": "Sett opp Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/pl.json b/homeassistant/components/mailgun/.translations/pl.json deleted file mode 100644 index ddca4c432fa..00000000000 --- a/homeassistant/components/mailgun/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty Mailgun.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 [Mailgun Webhook]({mailgun_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n - Typ zawarto\u015bci: application/x-www-form-urlencoded \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}) na temat konfiguracji automatyzacji, by obs\u0142u\u017cy\u0107 przychodz\u0105ce dane." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Mailgun?", - "title": "Konfiguracja Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/pt-BR.json b/homeassistant/components/mailgun/.translations/pt-BR.json deleted file mode 100644 index 8d9cb92e315..00000000000 --- a/homeassistant/components/mailgun/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens de correspond\u00eancia.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar [Webhooks com Mailgun] ( {mailgun_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / json \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Mailgun?", - "title": "Configurar o Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/pt.json b/homeassistant/components/mailgun/.translations/pt.json deleted file mode 100644 index 72255c695ac..00000000000 --- a/homeassistant/components/mailgun/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens Mailgun.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar [Webhooks with Mailgun] ({mailgun_url}). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application/x-www-form-urlencoded \n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Mailgun?", - "title": "Configurar o Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/ru.json b/homeassistant/components/mailgun/.translations/ru.json deleted file mode 100644 index 9e8a293b4bf..00000000000 --- a/homeassistant/components/mailgun/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Mailgun.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f [Mailgun]({mailgun_url}).\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Mailgun?", - "title": "Mailgun" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/sl.json b/homeassistant/components/mailgun/.translations/sl.json deleted file mode 100644 index 2f526826d31..00000000000 --- a/homeassistant/components/mailgun/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u010ce \u017eelite prejemati sporo\u010dila Mailgun, mora biti Home Assistant dostopen prek interneta.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "Za po\u0161iljanje dogodkov Home Assistantu boste morali nastaviti [Webhooks z Mailgun]({mailgun_url}).\n\nIzpolnite naslednje informacije:\n\n- URL: `{webhook_url}`\n- Metoda: POST\n- Vrsta vsebine: application/json\n\nGlej [dokumentacijo]({docs_url}) o tem, kako nastavite automations za obravnavo dohodnih podatkov." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Mailgun?", - "title": "Nastavite Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/sv.json b/homeassistant/components/mailgun/.translations/sv.json deleted file mode 100644 index f26234e84cf..00000000000 --- a/homeassistant/components/mailgun/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot Mailgun meddelanden.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera [Webhooks med Mailgun]({mailgun_url}).\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n Se [dokumentationen]({docs_url}) om hur du konfigurerar automatiseringar f\u00f6r att hantera inkommande data." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Mailgun?", - "title": "Konfigurera Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/zh-Hans.json b/homeassistant/components/mailgun/.translations/zh-Hans.json deleted file mode 100644 index 5dd0a7aeabf..00000000000 --- a/homeassistant/components/mailgun/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 Mailgun \u6d88\u606f\u3002", - "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e [Mailgun \u7684 Webhook]({mailgun_url})\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u6709\u5173\u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u5316\u4ee5\u5904\u7406\u4f20\u5165\u7684\u6570\u636e\uff0c\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Mailgun \u5417\uff1f", - "title": "\u8bbe\u7f6e Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/.translations/zh-Hant.json b/homeassistant/components/mailgun/.translations/zh-Hant.json deleted file mode 100644 index f16533312fa..00000000000 --- a/homeassistant/components/mailgun/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Mailgun \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8a2d\u5b9a [Webhooks with Mailgun]({mailgun_url}) \u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u95dc\u65bc\u5982\u4f55\u50b3\u5165\u8cc7\u6599\u81ea\u52d5\u5316\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1[\u6587\u4ef6]({docs_url})\u4ee5\u9032\u884c\u4e86\u89e3\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Mailgun\uff1f", - "title": "\u8a2d\u5b9a Mailgun Webhook" - } - }, - "title": "Mailgun" - } -} \ No newline at end of file diff --git a/homeassistant/components/mailgun/strings.json b/homeassistant/components/mailgun/strings.json index c72ec747b30..29ea3c0b952 100644 --- a/homeassistant/components/mailgun/strings.json +++ b/homeassistant/components/mailgun/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Mailgun", "step": { "user": { "title": "Set up the Mailgun Webhook", diff --git a/homeassistant/components/mailgun/translations/bg.json b/homeassistant/components/mailgun/translations/bg.json new file mode 100644 index 00000000000..207dbe2b3ad --- /dev/null +++ b/homeassistant/components/mailgun/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Mailgun.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 [Webhooks \u0441 Mailgun]({mailgun_url}). \n\n\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/json\n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u0442\u043e\u0432\u0430 \u043a\u0430\u043a \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438 \u0434\u0430\u043d\u043d\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Mailgun?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/ca.json b/homeassistant/components/mailgun/translations/ca.json new file mode 100644 index 00000000000..eb79eb5eddd --- /dev/null +++ b/homeassistant/components/mailgun/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Mailgun.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar [Webhooks amb Mailgun]({mailgun_url}). \n\nCompleta la seg\u00fcent informaci\u00f3: \n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n- Tipus de contingut: application/x-www-form-urlencoded\n\nConsulta la [documentaci\u00f3]({docs_url}) sobre com configurar les automatitzacions per gestionar dades entrants." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar Mailgun?", + "title": "Configuraci\u00f3 del Webhook de Mailgun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/cs.json b/homeassistant/components/mailgun/translations/cs.json new file mode 100644 index 00000000000..7a687ac8e92 --- /dev/null +++ b/homeassistant/components/mailgun/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy Mailgun.", + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, budete muset nastavit [Webhooks with Mailgun]({mailgun_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}' \n - Metoda: POST \n - Typ obsahu: aplikace / json \n\n Viz [dokumentace]({docs_url}), jak konfigurovat automatizace pro zpracov\u00e1n\u00ed p\u0159\u00edchoz\u00edch dat." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit slu\u017ebu Mailgun?", + "title": "Nastavit Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/da.json b/homeassistant/components/mailgun/translations/da.json new file mode 100644 index 00000000000..ee50332933f --- /dev/null +++ b/homeassistant/components/mailgun/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Mailgun-meddelelser", + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning." + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere [Webhooks med Mailgun]({mailgun_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/json\n\nSe [dokumentationen] ({docs_url}) om hvordan du konfigurerer automatiseringer til at h\u00e5ndtere indg\u00e5ende data." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Mailgun?", + "title": "Konfigurer Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/de.json b/homeassistant/components/mailgun/translations/de.json new file mode 100644 index 00000000000..d37fe5d0388 --- /dev/null +++ b/homeassistant/components/mailgun/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Mailgun-Nachrichten empfangen zu k\u00f6nnen.", + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "Um Ereignisse an den Home Assistant zu senden, musst [Webhooks mit Mailgun]({mailgun_url}) einrichten. \n\n F\u00fclle die folgenden Informationen aus: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhaltstyp: application / json \n\nLies in der [Dokumentation]({docs_url}) wie du Automationen f\u00fcr die Verarbeitung eingehender Daten konfigurierst." + }, + "step": { + "user": { + "description": "M\u00f6chtest du Mailgun wirklich einrichten?", + "title": "Mailgun-Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/en.json b/homeassistant/components/mailgun/translations/en.json new file mode 100644 index 00000000000..85044505c84 --- /dev/null +++ b/homeassistant/components/mailgun/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive Mailgun messages.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup [Webhooks with Mailgun]({mailgun_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data." + }, + "step": { + "user": { + "description": "Are you sure you want to set up Mailgun?", + "title": "Set up the Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/es-419.json b/homeassistant/components/mailgun/translations/es-419.json new file mode 100644 index 00000000000..4e95e6934f8 --- /dev/null +++ b/homeassistant/components/mailgun/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Mailgun.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar [Webhooks with Mailgun] ( {mailgun_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: aplicaci\u00f3n / json \n\n Consulte [la documentaci\u00f3n] ( {docs_url} ) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar Mailgun?", + "title": "Configurar el Webhook de Mailgun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/es.json b/homeassistant/components/mailgun/translations/es.json new file mode 100644 index 00000000000..f2e5638dcc3 --- /dev/null +++ b/homeassistant/components/mailgun/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Mailgun.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant debes configurar los [Webhooks en Mailgun]({mailgun_url}). \n\n Completa la siguiente informaci\u00f3n: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n - Tipo de contenido: application/json \n\n Consulta [la documentaci\u00f3n]({docs_url}) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar Mailgun?", + "title": "Configurar el Webhook de Mailgun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/fr.json b/homeassistant/components/mailgun/translations/fr.json new file mode 100644 index 00000000000..84c69d1b6f0 --- /dev/null +++ b/homeassistant/components/mailgun/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance Home Assistant doit \u00eatre accessible \u00e0 partir d'Internet pour recevoir les messages Mailgun.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer [Webhooks avec Mailgun] ( {mailgun_url} ). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / json \n\n Voir [la documentation] ( {docs_url} ) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer Mailgun?", + "title": "Configurer le Webhook Mailgun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/hu.json b/homeassistant/components/mailgun/translations/hu.json new file mode 100644 index 00000000000..89cfcbf358e --- /dev/null +++ b/homeassistant/components/mailgun/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A Home Assistant rendszerednek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l a Mailgun \u00fczenetek fogad\u00e1s\u00e1hoz.", + "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Mailgunt?", + "title": "Mailgun Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/it.json b/homeassistant/components/mailgun/translations/it.json new file mode 100644 index 00000000000..f913f513b21 --- /dev/null +++ b/homeassistant/components/mailgun/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Mailgun.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai configurare [Webhooks con Mailgun]({mailgun_url})\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n - Content Type: application/json\n\n Vedi [la documentazione]({docs_url}) su come configurare le automazioni per gestire i dati in arrivo." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare Mailgun?", + "title": "Configura il webhook di Mailgun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/ko.json b/homeassistant/components/mailgun/translations/ko.json new file mode 100644 index 00000000000..975b0154da5 --- /dev/null +++ b/homeassistant/components/mailgun/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Mailgun \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 [Mailgun Webhook]({mailgun_url}) \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n - Content Type: application/json\n \nHome Assistant \ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc790\ub3d9\ud654\ub97c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Mailgun \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Mailgun Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/lb.json b/homeassistant/components/mailgun/translations/lb.json new file mode 100644 index 00000000000..10504b88214 --- /dev/null +++ b/homeassistant/components/mailgun/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Mailgun Noriichten z'empf\u00e4nken.", + "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/json\n\nLiest [Dokumentatioun]({docs_url}) w\u00e9i een Automatiounen ariicht welch eingehend Donn\u00e9\u00eb trait\u00e9ieren." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Mailgun anzeriichten?", + "title": "Mailgun Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/nl.json b/homeassistant/components/mailgun/translations/nl.json new file mode 100644 index 00000000000..9444b5045d3 --- /dev/null +++ b/homeassistant/components/mailgun/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Mailgun-berichten te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n enkele instantie is nodig." + }, + "create_entry": { + "default": "Om evenementen naar Home Assistant te verzenden, moet u [Webhooks with Mailgun] instellen ( {mailgun_url} ). \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhoudstype: application/json \n\n Zie [de documentatie] ( {docs_url} ) voor informatie over het configureren van automatiseringen om binnenkomende gegevens te verwerken." + }, + "step": { + "user": { + "description": "Weet u zeker dat u Mailgun wilt instellen?", + "title": "Stel de Mailgun Webhook in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/nn.json b/homeassistant/components/mailgun/translations/nn.json new file mode 100644 index 00000000000..9e8d91a8874 --- /dev/null +++ b/homeassistant/components/mailgun/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Mailgun" +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/no.json b/homeassistant/components/mailgun/translations/no.json new file mode 100644 index 00000000000..9f26892e703 --- /dev/null +++ b/homeassistant/components/mailgun/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant forekomst m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 motta Mailgun-meldinger.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp [Webhooks with Mailgun]({mailgun_url}).\n\nFyll ut f\u00f8lgende informasjon:\n\n- URL: `{webhook_url}`\n- Metode: POST\n- Innholdstype: application/json\n\nSe [dokumentasjonen]({docs_url}) om hvordan du konfigurerer automatiseringer for \u00e5 h\u00e5ndtere innkommende data." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du \u00f8nsker \u00e5 sette opp Mailgun?", + "title": "Sett opp Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/pl.json b/homeassistant/components/mailgun/translations/pl.json new file mode 100644 index 00000000000..c1184dbb9e4 --- /dev/null +++ b/homeassistant/components/mailgun/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty Mailgun.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 [Mailgun Webhook]({mailgun_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n - Typ zawarto\u015bci: application/x-www-form-urlencoded \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}) na temat konfiguracji automatyzacji, by obs\u0142u\u017cy\u0107 przychodz\u0105ce dane." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Mailgun?", + "title": "Konfiguracja Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/pt-BR.json b/homeassistant/components/mailgun/translations/pt-BR.json new file mode 100644 index 00000000000..6285162878e --- /dev/null +++ b/homeassistant/components/mailgun/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens de correspond\u00eancia.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar [Webhooks com Mailgun] ( {mailgun_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / json \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Mailgun?", + "title": "Configurar o Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/pt.json b/homeassistant/components/mailgun/translations/pt.json new file mode 100644 index 00000000000..e6d7329f52a --- /dev/null +++ b/homeassistant/components/mailgun/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens Mailgun.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar [Webhooks with Mailgun] ({mailgun_url}). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application/x-www-form-urlencoded \n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Mailgun?", + "title": "Configurar o Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/ru.json b/homeassistant/components/mailgun/translations/ru.json new file mode 100644 index 00000000000..c26b3b93832 --- /dev/null +++ b/homeassistant/components/mailgun/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Mailgun.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f [Mailgun]({mailgun_url}).\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Mailgun?", + "title": "Mailgun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/sl.json b/homeassistant/components/mailgun/translations/sl.json new file mode 100644 index 00000000000..b660cb871da --- /dev/null +++ b/homeassistant/components/mailgun/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u010ce \u017eelite prejemati sporo\u010dila Mailgun, mora biti Home Assistant dostopen prek interneta.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "Za po\u0161iljanje dogodkov Home Assistantu boste morali nastaviti [Webhooks z Mailgun]({mailgun_url}).\n\nIzpolnite naslednje informacije:\n\n- URL: `{webhook_url}`\n- Metoda: POST\n- Vrsta vsebine: application/json\n\nGlej [dokumentacijo]({docs_url}) o tem, kako nastavite automations za obravnavo dohodnih podatkov." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Mailgun?", + "title": "Nastavite Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/sv.json b/homeassistant/components/mailgun/translations/sv.json new file mode 100644 index 00000000000..baed592049e --- /dev/null +++ b/homeassistant/components/mailgun/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot Mailgun meddelanden.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera [Webhooks med Mailgun]({mailgun_url}).\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n Se [dokumentationen]({docs_url}) om hur du konfigurerar automatiseringar f\u00f6r att hantera inkommande data." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Mailgun?", + "title": "Konfigurera Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/zh-Hans.json b/homeassistant/components/mailgun/translations/zh-Hans.json new file mode 100644 index 00000000000..1c6af1dc4c0 --- /dev/null +++ b/homeassistant/components/mailgun/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 Mailgun \u6d88\u606f\u3002", + "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e [Mailgun \u7684 Webhook]({mailgun_url})\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u6709\u5173\u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u5316\u4ee5\u5904\u7406\u4f20\u5165\u7684\u6570\u636e\uff0c\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Mailgun \u5417\uff1f", + "title": "\u8bbe\u7f6e Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/zh-Hant.json b/homeassistant/components/mailgun/translations/zh-Hant.json new file mode 100644 index 00000000000..1d500c180c2 --- /dev/null +++ b/homeassistant/components/mailgun/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Mailgun \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8a2d\u5b9a [Webhooks with Mailgun]({mailgun_url}) \u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u95dc\u65bc\u5982\u4f55\u50b3\u5165\u8cc7\u6599\u81ea\u52d5\u5316\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1[\u6587\u4ef6]({docs_url})\u4ee5\u9032\u884c\u4e86\u89e3\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Mailgun\uff1f", + "title": "\u8a2d\u5b9a Mailgun Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/manual/manifest.json b/homeassistant/components/manual/manifest.json index 29d6cbdf871..813dbf4e570 100644 --- a/homeassistant/components/manual/manifest.json +++ b/homeassistant/components/manual/manifest.json @@ -2,8 +2,6 @@ "domain": "manual", "name": "Manual", "documentation": "https://www.home-assistant.io/integrations/manual", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/manual_mqtt/manifest.json b/homeassistant/components/manual_mqtt/manifest.json index 1ae597fecd9..8189b167f93 100644 --- a/homeassistant/components/manual_mqtt/manifest.json +++ b/homeassistant/components/manual_mqtt/manifest.json @@ -2,7 +2,6 @@ "domain": "manual_mqtt", "name": "Manual MQTT", "documentation": "https://www.home-assistant.io/integrations/manual_mqtt", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/map/manifest.json b/homeassistant/components/map/manifest.json index 108ca8f1772..f78dcfd20ba 100644 --- a/homeassistant/components/map/manifest.json +++ b/homeassistant/components/map/manifest.json @@ -2,7 +2,6 @@ "domain": "map", "name": "Map", "documentation": "https://www.home-assistant.io/integrations/map", - "requirements": [], "dependencies": ["frontend"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/marytts/manifest.json b/homeassistant/components/marytts/manifest.json index 74f027fd076..5152e838fb9 100644 --- a/homeassistant/components/marytts/manifest.json +++ b/homeassistant/components/marytts/manifest.json @@ -2,9 +2,6 @@ "domain": "marytts", "name": "MaryTTS", "documentation": "https://www.home-assistant.io/integrations/marytts", - "requirements": [ - "speak2mary==1.4.0" - ], - "dependencies": [], + "requirements": ["speak2mary==1.4.0"], "codeowners": [] } diff --git a/homeassistant/components/mastodon/manifest.json b/homeassistant/components/mastodon/manifest.json index c6430546bf2..8c29ba1da35 100644 --- a/homeassistant/components/mastodon/manifest.json +++ b/homeassistant/components/mastodon/manifest.json @@ -2,7 +2,6 @@ "domain": "mastodon", "name": "Mastodon", "documentation": "https://www.home-assistant.io/integrations/mastodon", - "requirements": ["Mastodon.py==1.5.0"], - "dependencies": [], + "requirements": ["Mastodon.py==1.5.1"], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/matrix/manifest.json b/homeassistant/components/matrix/manifest.json index f4a92d7e104..90571d239f6 100644 --- a/homeassistant/components/matrix/manifest.json +++ b/homeassistant/components/matrix/manifest.json @@ -3,6 +3,5 @@ "name": "Matrix", "documentation": "https://www.home-assistant.io/integrations/matrix", "requirements": ["matrix-client==0.3.2"], - "dependencies": [], "codeowners": ["@tinloaf"] } diff --git a/homeassistant/components/matrix/services.yaml b/homeassistant/components/matrix/services.yaml index 03c441a39ec..f8b0c53bda6 100644 --- a/homeassistant/components/matrix/services.yaml +++ b/homeassistant/components/matrix/services.yaml @@ -3,7 +3,7 @@ send_message: fields: message: description: The message to be sent. - example: 'This is a message I am sending to matrix' + example: This is a message I am sending to matrix target: description: A list of room(s) to send the message to. - example: '#hasstest:matrix.org' \ No newline at end of file + example: "#hasstest:matrix.org" diff --git a/homeassistant/components/maxcube/climate.py b/homeassistant/components/maxcube/climate.py index e723853f629..19bbf8bf000 100644 --- a/homeassistant/components/maxcube/climate.py +++ b/homeassistant/components/maxcube/climate.py @@ -11,7 +11,17 @@ from maxcube.device import ( from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( + CURRENT_HVAC_HEAT, + CURRENT_HVAC_IDLE, + CURRENT_HVAC_OFF, HVAC_MODE_AUTO, + HVAC_MODE_HEAT, + HVAC_MODE_OFF, + PRESET_AWAY, + PRESET_BOOST, + PRESET_COMFORT, + PRESET_ECO, + PRESET_NONE, SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, ) @@ -21,12 +31,31 @@ from . import DATA_KEY _LOGGER = logging.getLogger(__name__) -PRESET_MANUAL = "manual" -PRESET_BOOST = "boost" -PRESET_VACATION = "vacation" +ATTR_VALVE_POSITION = "valve_position" +PRESET_ON = "on" + +# There are two magic temperature values, which indicate: +# Off (valve fully closed) +OFF_TEMPERATURE = 4.5 +# On (valve fully open) +ON_TEMPERATURE = 30.5 SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE +HASS_PRESET_TO_MAX_MODE = { + PRESET_AWAY: MAX_DEVICE_MODE_VACATION, + PRESET_BOOST: MAX_DEVICE_MODE_BOOST, + PRESET_NONE: MAX_DEVICE_MODE_AUTOMATIC, + PRESET_ON: MAX_DEVICE_MODE_MANUAL, +} + +MAX_MODE_TO_HASS_PRESET = { + MAX_DEVICE_MODE_AUTOMATIC: PRESET_NONE, + MAX_DEVICE_MODE_BOOST: PRESET_BOOST, + MAX_DEVICE_MODE_MANUAL: PRESET_NONE, + MAX_DEVICE_MODE_VACATION: PRESET_AWAY, +} + def setup_platform(hass, config, add_entities, discovery_info=None): """Iterate through all MAX! Devices and add thermostats.""" @@ -49,7 +78,6 @@ class MaxCubeClimate(ClimateDevice): def __init__(self, handler, name, rf_address): """Initialize MAX! Cube ClimateDevice.""" self._name = name - self._operation_list = [HVAC_MODE_AUTO] self._rf_address = rf_address self._cubehandle = handler @@ -95,13 +123,76 @@ class MaxCubeClimate(ClimateDevice): @property def hvac_mode(self): - """Return current operation (auto, manual, boost, vacation).""" - return HVAC_MODE_AUTO + """Return current operation mode.""" + device = self._cubehandle.cube.device_by_rf(self._rf_address) + if device.mode in [MAX_DEVICE_MODE_AUTOMATIC, MAX_DEVICE_MODE_BOOST]: + return HVAC_MODE_AUTO + if ( + device.mode == MAX_DEVICE_MODE_MANUAL + and device.target_temperature == OFF_TEMPERATURE + ): + return HVAC_MODE_OFF + + return HVAC_MODE_HEAT @property def hvac_modes(self): """Return the list of available operation modes.""" - return self._operation_list + return [HVAC_MODE_OFF, HVAC_MODE_AUTO, HVAC_MODE_HEAT] + + def set_hvac_mode(self, hvac_mode: str): + """Set new target hvac mode.""" + device = self._cubehandle.cube.device_by_rf(self._rf_address) + temp = device.target_temperature + mode = device.mode + + if hvac_mode == HVAC_MODE_OFF: + temp = OFF_TEMPERATURE + mode = MAX_DEVICE_MODE_MANUAL + elif hvac_mode == HVAC_MODE_HEAT: + mode = MAX_DEVICE_MODE_MANUAL + else: + # Reset the temperature to a sane value. + # Ideally, we should send 0 and the device will set its + # temperature according to the schedule. However, current + # version of the library has a bug which causes an + # exception when setting values below 8. + if temp in [OFF_TEMPERATURE, ON_TEMPERATURE]: + temp = device.eco_temperature + mode = MAX_DEVICE_MODE_AUTOMATIC + + cube = self._cubehandle.cube + with self._cubehandle.mutex: + try: + cube.set_temperature_mode(device, temp, mode) + except (socket.timeout, OSError): + _LOGGER.error("Setting HVAC mode failed") + return + + @property + def hvac_action(self): + """Return the current running hvac operation if supported.""" + cube = self._cubehandle.cube + device = cube.device_by_rf(self._rf_address) + valve = 0 + + if cube.is_thermostat(device): + valve = device.valve_position + elif cube.is_wallthermostat(device): + for device in cube.devices_by_room(cube.room_by_id(device.room_id)): + if cube.is_thermostat(device) and device.valve_position > 0: + valve = device.valve_position + break + else: + return None + + # Assume heating when valve is open + if valve > 0: + return CURRENT_HVAC_HEAT + + return ( + CURRENT_HVAC_OFF if self.hvac_mode == HVAC_MODE_OFF else CURRENT_HVAC_IDLE + ) @property def target_temperature(self): @@ -122,7 +213,7 @@ class MaxCubeClimate(ClimateDevice): with self._cubehandle.mutex: try: cube.set_target_temperature(device, target_temperature) - except (socket.timeout, socket.error): + except (socket.timeout, OSError): _LOGGER.error("Setting target temperature failed") return False @@ -130,24 +221,67 @@ class MaxCubeClimate(ClimateDevice): def preset_mode(self): """Return the current preset mode.""" device = self._cubehandle.cube.device_by_rf(self._rf_address) - return self.map_mode_max_hass(device.mode) + if self.hvac_mode == HVAC_MODE_OFF: + return PRESET_NONE + + if device.mode == MAX_DEVICE_MODE_MANUAL: + if device.target_temperature == device.comfort_temperature: + return PRESET_COMFORT + if device.target_temperature == device.eco_temperature: + return PRESET_ECO + if device.target_temperature == ON_TEMPERATURE: + return PRESET_ON + return PRESET_NONE + + return MAX_MODE_TO_HASS_PRESET[device.mode] @property def preset_modes(self): """Return available preset modes.""" - return [PRESET_BOOST, PRESET_MANUAL, PRESET_VACATION] + return [ + PRESET_NONE, + PRESET_BOOST, + PRESET_COMFORT, + PRESET_ECO, + PRESET_AWAY, + PRESET_ON, + ] def set_preset_mode(self, preset_mode): """Set new operation mode.""" device = self._cubehandle.cube.device_by_rf(self._rf_address) - mode = self.map_mode_hass_max(preset_mode) or MAX_DEVICE_MODE_AUTOMATIC + temp = device.target_temperature + mode = MAX_DEVICE_MODE_AUTOMATIC + + if preset_mode in [PRESET_COMFORT, PRESET_ECO, PRESET_ON]: + mode = MAX_DEVICE_MODE_MANUAL + if preset_mode == PRESET_COMFORT: + temp = device.comfort_temperature + elif preset_mode == PRESET_ECO: + temp = device.eco_temperature + else: + temp = ON_TEMPERATURE + else: + mode = HASS_PRESET_TO_MAX_MODE[preset_mode] or MAX_DEVICE_MODE_AUTOMATIC with self._cubehandle.mutex: try: - self._cubehandle.cube.set_mode(device, mode) - except (socket.timeout, socket.error): + self._cubehandle.cube.set_temperature_mode(device, temp, mode) + except (socket.timeout, OSError): _LOGGER.error("Setting operation mode failed") - return False + return + + @property + def device_state_attributes(self): + """Return the optional state attributes.""" + cube = self._cubehandle.cube + device = cube.device_by_rf(self._rf_address) + attributes = {} + + if cube.is_thermostat(device): + attributes[ATTR_VALVE_POSITION] = device.valve_position + + return attributes def update(self): """Get latest data from MAX! Cube.""" @@ -160,31 +294,3 @@ class MaxCubeClimate(ClimateDevice): return 0.0 return temperature - - @staticmethod - def map_mode_hass_max(mode): - """Map Home Assistant Operation Modes to MAX! Operation Modes.""" - if mode == PRESET_MANUAL: - mode = MAX_DEVICE_MODE_MANUAL - elif mode == PRESET_VACATION: - mode = MAX_DEVICE_MODE_VACATION - elif mode == PRESET_BOOST: - mode = MAX_DEVICE_MODE_BOOST - else: - mode = None - - return mode - - @staticmethod - def map_mode_max_hass(mode): - """Map MAX! Operation Modes to Home Assistant Operation Modes.""" - if mode == MAX_DEVICE_MODE_MANUAL: - operation_mode = PRESET_MANUAL - elif mode == MAX_DEVICE_MODE_VACATION: - operation_mode = PRESET_VACATION - elif mode == MAX_DEVICE_MODE_BOOST: - operation_mode = PRESET_BOOST - else: - operation_mode = None - - return operation_mode diff --git a/homeassistant/components/maxcube/manifest.json b/homeassistant/components/maxcube/manifest.json index b3ac6591f76..0aae92c2079 100644 --- a/homeassistant/components/maxcube/manifest.json +++ b/homeassistant/components/maxcube/manifest.json @@ -3,6 +3,5 @@ "name": "eQ-3 MAX!", "documentation": "https://www.home-assistant.io/integrations/maxcube", "requirements": ["maxcube-api==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mcp23017/manifest.json b/homeassistant/components/mcp23017/manifest.json index 8bdd897d34e..3f7cf97e64e 100644 --- a/homeassistant/components/mcp23017/manifest.json +++ b/homeassistant/components/mcp23017/manifest.json @@ -7,6 +7,5 @@ "adafruit-blinka==3.9.0", "adafruit-circuitpython-mcp230xx==2.2.2" ], - "dependencies": [], "codeowners": ["@jardiamj"] } diff --git a/homeassistant/components/media_extractor/__init__.py b/homeassistant/components/media_extractor/__init__.py index 7dc05368dcd..af5ada7d2c9 100644 --- a/homeassistant/components/media_extractor/__init__.py +++ b/homeassistant/components/media_extractor/__init__.py @@ -58,14 +58,10 @@ def setup(hass, config): class MEDownloadException(Exception): """Media extractor download exception.""" - pass - class MEQueryException(Exception): """Media extractor query exception.""" - pass - class MediaExtractor: """Class which encapsulates all extraction logic.""" diff --git a/homeassistant/components/media_extractor/services.yaml b/homeassistant/components/media_extractor/services.yaml index c5588c34134..17abffee89d 100644 --- a/homeassistant/components/media_extractor/services.yaml +++ b/homeassistant/components/media_extractor/services.yaml @@ -1,13 +1,12 @@ play_media: description: Downloads file from given url. fields: - entity_id: + entity_id: description: Name(s) of entities to play media on. - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" media_content_id: description: The ID of the content to play. Platform dependent. - example: 'https://soundcloud.com/bruttoband/brutto-11' + example: "https://soundcloud.com/bruttoband/brutto-11" media_content_type: description: The type of the content to play. Must be one of MUSIC, TVSHOW, VIDEO, EPISODE, CHANNEL or PLAYLIST MUSIC. - example: 'music' - + example: "music" diff --git a/homeassistant/components/media_player/.translations/bg.json b/homeassistant/components/media_player/.translations/bg.json deleted file mode 100644 index f6c18cbe119..00000000000 --- a/homeassistant/components/media_player/.translations/bg.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} \u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u0435\u043d", - "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", - "is_paused": "{entity_name} \u0435 \u043d\u0430 \u043f\u0430\u0443\u0437\u0430", - "is_playing": "{entity_name} \u0432\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/ca.json b/homeassistant/components/media_player/.translations/ca.json deleted file mode 100644 index 4889c1781c3..00000000000 --- a/homeassistant/components/media_player/.translations/ca.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} est\u00e0 inactiu", - "is_off": "{entity_name} est\u00e0 apagat", - "is_on": "{entity_name} est\u00e0 enc\u00e8s", - "is_paused": "{entity_name} est\u00e0 en pausa", - "is_playing": "{entity_name} est\u00e0 reproduint" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/cs.json b/homeassistant/components/media_player/.translations/cs.json deleted file mode 100644 index afda756740a..00000000000 --- a/homeassistant/components/media_player/.translations/cs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} je ne\u010dinn\u00fd", - "is_off": "{entity_name} je vypnuto", - "is_on": "{entity_name} je zapnuto", - "is_paused": "{entity_name} je pozastaven", - "is_playing": "{entity_name} p\u0159ehr\u00e1v\u00e1" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/da.json b/homeassistant/components/media_player/.translations/da.json deleted file mode 100644 index a53bbed07d0..00000000000 --- a/homeassistant/components/media_player/.translations/da.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} er inaktiv", - "is_off": "{entity_name} er slukket", - "is_on": "{entity_name} er t\u00e6ndt", - "is_paused": "{entity_name} er sat p\u00e5 pause", - "is_playing": "{entity_name} afspiller" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/de.json b/homeassistant/components/media_player/.translations/de.json deleted file mode 100644 index 7efad821a9e..00000000000 --- a/homeassistant/components/media_player/.translations/de.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} ist unt\u00e4tig", - "is_off": "{entity_name} ist ausgeschaltet", - "is_on": "{entity_name} ist eingeschaltet", - "is_paused": "{entity_name} ist pausiert", - "is_playing": "{entity_name} spielt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/en.json b/homeassistant/components/media_player/.translations/en.json deleted file mode 100644 index 472cb98f283..00000000000 --- a/homeassistant/components/media_player/.translations/en.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} is idle", - "is_off": "{entity_name} is off", - "is_on": "{entity_name} is on", - "is_paused": "{entity_name} is paused", - "is_playing": "{entity_name} is playing" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/es.json b/homeassistant/components/media_player/.translations/es.json deleted file mode 100644 index 16242dadeb6..00000000000 --- a/homeassistant/components/media_player/.translations/es.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} est\u00e1 inactivo", - "is_off": "{entity_name} est\u00e1 apagado", - "is_on": "{entity_name} est\u00e1 activado", - "is_paused": "{entity_name} est\u00e1 en pausa", - "is_playing": "{entity_name} est\u00e1 jugando" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/fr.json b/homeassistant/components/media_player/.translations/fr.json deleted file mode 100644 index 6be3e609590..00000000000 --- a/homeassistant/components/media_player/.translations/fr.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} est inactif", - "is_off": "{entity_name} est d\u00e9sactiv\u00e9", - "is_on": "{entity_name} est activ\u00e9", - "is_paused": "{entity_name} est en pause", - "is_playing": "{entity_name} joue" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/hu.json b/homeassistant/components/media_player/.translations/hu.json deleted file mode 100644 index fbefbc43e08..00000000000 --- a/homeassistant/components/media_player/.translations/hu.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} t\u00e9tlen", - "is_off": "{entity_name} ki van kapcsolva", - "is_on": "{entity_name} be van kapcsolva", - "is_paused": "{entity_name} sz\u00fcneteltetve van", - "is_playing": "{entity_name} lej\u00e1tszik" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/it.json b/homeassistant/components/media_player/.translations/it.json deleted file mode 100644 index 93ab26d4585..00000000000 --- a/homeassistant/components/media_player/.translations/it.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} \u00e8 inattivo", - "is_off": "{entity_name} \u00e8 spento", - "is_on": "{entity_name} \u00e8 acceso", - "is_paused": "{entity_name} \u00e8 in pausa", - "is_playing": "{entity_name} \u00e8 in esecuzione" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/ko.json b/homeassistant/components/media_player/.translations/ko.json deleted file mode 100644 index b7ebc93099d..00000000000 --- a/homeassistant/components/media_player/.translations/ko.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} \uc774(\uac00) \uc720\ud734 \uc0c1\ud0dc\uc774\uba74", - "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", - "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74", - "is_paused": "{entity_name} \uc774(\uac00) \uc77c\uc2dc\uc911\uc9c0\ub418\uc5b4 \uc788\uc73c\uba74", - "is_playing": "{entity_name} \uc774(\uac00) \uc7ac\uc0dd \uc911\uc774\uba74" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/lb.json b/homeassistant/components/media_player/.translations/lb.json deleted file mode 100644 index 99b6f12fd66..00000000000 --- a/homeassistant/components/media_player/.translations/lb.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} waart", - "is_off": "{entity_name} ass aus", - "is_on": "{entity_name} ass un", - "is_paused": "{entity_name} ass paus\u00e9iert", - "is_playing": "{entity_name} spillt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/nl.json b/homeassistant/components/media_player/.translations/nl.json deleted file mode 100644 index cfd63d190c3..00000000000 --- a/homeassistant/components/media_player/.translations/nl.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} is niet actief", - "is_off": "{entity_name} is uitgeschakeld", - "is_on": "{entity_name} is ingeschakeld", - "is_paused": "{entity_name} is gepauzeerd", - "is_playing": "{entity_name} wordt afgespeeld" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/no.json b/homeassistant/components/media_player/.translations/no.json deleted file mode 100644 index 388143b53ec..00000000000 --- a/homeassistant/components/media_player/.translations/no.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} er inaktiv", - "is_off": "{entity_name} er sl\u00e5tt av", - "is_on": "{entity_name} er sl\u00e5tt p\u00e5", - "is_paused": "{entity_name} er satt p\u00e5 pause", - "is_playing": "{entity_name} spiller n\u00e5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/pl.json b/homeassistant/components/media_player/.translations/pl.json deleted file mode 100644 index 29b3beaee63..00000000000 --- a/homeassistant/components/media_player/.translations/pl.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "odtwarzacz medi\u00f3w (entity_name} jest nieaktywny", - "is_off": "odtwarzacz medi\u00f3w (entity_name} jest wy\u0142\u0105czony", - "is_on": "odtwarzacz medi\u00f3w (entity_name} jest w\u0142\u0105czony", - "is_paused": "odtwarzanie medi\u00f3w na {entity_name} jest wstrzymane", - "is_playing": "{entity_name} odtwarza media" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/ru.json b/homeassistant/components/media_player/.translations/ru.json deleted file mode 100644 index 2b459ccab05..00000000000 --- a/homeassistant/components/media_player/.translations/ru.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f", - "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_paused": "{entity_name} \u043d\u0430 \u043f\u0430\u0443\u0437\u0435", - "is_playing": "{entity_name} \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043c\u0435\u0434\u0438\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/sl.json b/homeassistant/components/media_player/.translations/sl.json deleted file mode 100644 index eafc10bd8ab..00000000000 --- a/homeassistant/components/media_player/.translations/sl.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} je nedejaven", - "is_off": "{entity_name} je izklopljen", - "is_on": "{entity_name} je vklopljen", - "is_paused": "{entity_name} je zaustavljen", - "is_playing": "{entity_name} predvaja" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/sv.json b/homeassistant/components/media_player/.translations/sv.json deleted file mode 100644 index b7f62a138df..00000000000 --- a/homeassistant/components/media_player/.translations/sv.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} \u00e4r inaktiv", - "is_off": "{entity_name} \u00e4r avst\u00e4ngd", - "is_on": "{entity_name} \u00e4r p\u00e5", - "is_paused": "{entity_name} \u00e4r pausad", - "is_playing": "{entity_name} spelar" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/zh-Hans.json b/homeassistant/components/media_player/.translations/zh-Hans.json deleted file mode 100644 index c4020b8194b..00000000000 --- a/homeassistant/components/media_player/.translations/zh-Hans.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name} \u7a7a\u95f2", - "is_off": "{entity_name} \u5df2\u5173\u95ed", - "is_on": "{entity_name} \u5df2\u5f00\u542f", - "is_paused": "{entity_name} \u5df2\u6682\u505c", - "is_playing": "{entity_name} \u6b63\u5728\u64ad\u653e" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/.translations/zh-Hant.json b/homeassistant/components/media_player/.translations/zh-Hant.json deleted file mode 100644 index e3353c5e5b9..00000000000 --- a/homeassistant/components/media_player/.translations/zh-Hant.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_idle": "{entity_name}\u9592\u7f6e", - "is_off": "{entity_name}\u95dc\u9589", - "is_on": "{entity_name}\u958b\u555f", - "is_paused": "{entity_name}\u5df2\u66ab\u505c", - "is_playing": "{entity_name}\u6b63\u5728\u64ad\u653e" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/media_player/__init__.py b/homeassistant/components/media_player/__init__.py index 757dd00897d..a8c87effb10 100644 --- a/homeassistant/components/media_player/__init__.py +++ b/homeassistant/components/media_player/__init__.py @@ -18,6 +18,9 @@ import voluptuous as vol from homeassistant.components import websocket_api from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView from homeassistant.const import ( + HTTP_INTERNAL_SERVER_ERROR, + HTTP_NOT_FOUND, + HTTP_OK, SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_PLAY, @@ -211,7 +214,7 @@ async def async_setup(hass, config): SERVICE_TURN_OFF, {}, "async_turn_off", [SUPPORT_TURN_OFF] ) component.async_register_entity_service( - SERVICE_TOGGLE, {}, "async_toggle", [SUPPORT_TURN_OFF | SUPPORT_TURN_ON], + SERVICE_TOGGLE, {}, "async_toggle", [SUPPORT_TURN_OFF | SUPPORT_TURN_ON] ) component.async_register_entity_service( SERVICE_VOLUME_UP, @@ -241,7 +244,7 @@ async def async_setup(hass, config): SERVICE_MEDIA_STOP, {}, "async_media_stop", [SUPPORT_STOP] ) component.async_register_entity_service( - SERVICE_MEDIA_NEXT_TRACK, {}, "async_media_next_track", [SUPPORT_NEXT_TRACK], + SERVICE_MEDIA_NEXT_TRACK, {}, "async_media_next_track", [SUPPORT_NEXT_TRACK] ) component.async_register_entity_service( SERVICE_MEDIA_PREVIOUS_TRACK, @@ -250,7 +253,7 @@ async def async_setup(hass, config): [SUPPORT_PREVIOUS_TRACK], ) component.async_register_entity_service( - SERVICE_CLEAR_PLAYLIST, {}, "async_clear_playlist", [SUPPORT_CLEAR_PLAYLIST], + SERVICE_CLEAR_PLAYLIST, {}, "async_clear_playlist", [SUPPORT_CLEAR_PLAYLIST] ) component.async_register_entity_service( SERVICE_VOLUME_SET, @@ -832,7 +835,7 @@ async def _async_fetch_image(hass, url): with async_timeout.timeout(10): response = await websession.get(url) - if response.status == 200: + if response.status == HTTP_OK: content = await response.read() content_type = response.headers.get(CONTENT_TYPE) if content_type: @@ -863,7 +866,7 @@ class MediaPlayerImageView(HomeAssistantView): """Start a get request.""" player = self.component.get_entity(entity_id) if player is None: - status = 404 if request[KEY_AUTHENTICATED] else 401 + status = HTTP_NOT_FOUND if request[KEY_AUTHENTICATED] else 401 return web.Response(status=status) authenticated = ( @@ -877,7 +880,7 @@ class MediaPlayerImageView(HomeAssistantView): data, content_type = await player.async_get_media_image() if data is None: - return web.Response(status=500) + return web.Response(status=HTTP_INTERNAL_SERVER_ERROR) headers = {CACHE_CONTROL: "max-age=3600"} return web.Response(body=data, content_type=content_type, headers=headers) diff --git a/homeassistant/components/media_player/manifest.json b/homeassistant/components/media_player/manifest.json index 5c9a5cde0e4..7a8e47adf20 100644 --- a/homeassistant/components/media_player/manifest.json +++ b/homeassistant/components/media_player/manifest.json @@ -2,7 +2,6 @@ "domain": "media_player", "name": "Media Player", "documentation": "https://www.home-assistant.io/integrations/media_player", - "requirements": [], "dependencies": ["http"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/media_player/reproduce_state.py b/homeassistant/components/media_player/reproduce_state.py index dc9078d3ffd..a90e4fffdc1 100644 --- a/homeassistant/components/media_player/reproduce_state.py +++ b/homeassistant/components/media_player/reproduce_state.py @@ -1,6 +1,6 @@ """Module that groups code required to handle state restore for component.""" import asyncio -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( SERVICE_MEDIA_PAUSE, @@ -39,14 +39,17 @@ from .const import ( async def _async_reproduce_states( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce component states.""" async def call_service(service: str, keys: Iterable) -> None: """Call service with set of attributes given.""" - data = {} - data["entity_id"] = state.entity_id + data = {"entity_id": state.entity_id} for key in keys: if key in state.attributes: data[key] = state.attributes[key] @@ -91,9 +94,18 @@ async def _async_reproduce_states( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce component states.""" await asyncio.gather( - *(_async_reproduce_states(hass, state, context) for state in states) + *( + _async_reproduce_states( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/media_player/services.yaml b/homeassistant/components/media_player/services.yaml index 19ef1cb14c0..99fdb30b5c5 100644 --- a/homeassistant/components/media_player/services.yaml +++ b/homeassistant/components/media_player/services.yaml @@ -5,42 +5,42 @@ turn_on: fields: entity_id: description: Name(s) of entities to turn on. - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" turn_off: description: Turn a media player power off. fields: entity_id: description: Name(s) of entities to turn off. - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" toggle: description: Toggles a media player power state. fields: entity_id: description: Name(s) of entities to toggle. - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" volume_up: description: Turn a media player volume up. fields: entity_id: description: Name(s) of entities to turn volume up on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" volume_down: description: Turn a media player volume down. fields: entity_id: description: Name(s) of entities to turn volume down on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" volume_mute: description: Mute a media player's volume. fields: entity_id: description: Name(s) of entities to mute. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" is_volume_muted: description: True/false for mute/unmute. example: true @@ -50,7 +50,7 @@ volume_set: fields: entity_id: description: Name(s) of entities to set volume level on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" volume_level: description: Volume level to set as float. example: 0.6 @@ -60,49 +60,49 @@ media_play_pause: fields: entity_id: description: Name(s) of entities to toggle play/pause state on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" media_play: description: Send the media player the command for play. fields: entity_id: description: Name(s) of entities to play on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" media_pause: description: Send the media player the command for pause. fields: entity_id: description: Name(s) of entities to pause on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" media_stop: description: Send the media player the stop command. fields: entity_id: description: Name(s) of entities to stop on. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" media_next_track: description: Send the media player the command for next track. fields: entity_id: description: Name(s) of entities to send next track command to. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" media_previous_track: description: Send the media player the command for previous track. fields: entity_id: description: Name(s) of entities to send previous track command to. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" media_seek: description: Send the media player the command to seek in current playing media. fields: entity_id: description: Name(s) of entities to seek media on. - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" seek_position: description: Position to seek to. The format is platform dependent. example: 100 @@ -112,47 +112,47 @@ play_media: fields: entity_id: description: Name(s) of entities to seek media on - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" media_content_id: description: The ID of the content to play. Platform dependent. - example: 'https://home-assistant.io/images/cast/splash.png' + example: "https://home-assistant.io/images/cast/splash.png" media_content_type: description: The type of the content to play. Must be one of image, music, tvshow, video, episode, channel or playlist - example: 'music' + example: "music" select_source: description: Send the media player the command to change input source. fields: entity_id: description: Name(s) of entities to change source on. - example: 'media_player.txnr535_0009b0d81f82' + example: "media_player.txnr535_0009b0d81f82" source: description: Name of the source to switch to. Platform dependent. - example: 'video1' + example: "video1" select_sound_mode: description: Send the media player the command to change sound mode. fields: entity_id: description: Name(s) of entities to change sound mode on. - example: 'media_player.marantz' + example: "media_player.marantz" sound_mode: description: Name of the sound mode to switch to. - example: 'Music' + example: "Music" clear_playlist: description: Send the media player the command to clear players playlist. fields: entity_id: description: Name(s) of entities to change source on. - example: 'media_player.living_room_chromecast' + example: "media_player.living_room_chromecast" shuffle_set: description: Set shuffling state. fields: entity_id: description: Name(s) of entities to set. - example: 'media_player.spotify' + example: "media_player.spotify" shuffle: description: True/false for enabling/disabling shuffle. example: true diff --git a/homeassistant/components/media_player/strings.json b/homeassistant/components/media_player/strings.json index e9cb812767b..14f1eea131c 100644 --- a/homeassistant/components/media_player/strings.json +++ b/homeassistant/components/media_player/strings.json @@ -1,4 +1,5 @@ { + "title": "Media player", "device_automation": { "condition_type": { "is_on": "{entity_name} is on", @@ -7,5 +8,15 @@ "is_paused": "{entity_name} is paused", "is_playing": "{entity_name} is playing" } + }, + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]", + "playing": "Playing", + "paused": "[%key:common::state::paused%]", + "idle": "[%key:common::state::idle%]", + "standby": "[%key:common::state::standby%]" + } } } diff --git a/homeassistant/components/media_player/translations/af.json b/homeassistant/components/media_player/translations/af.json new file mode 100644 index 00000000000..90a579298f3 --- /dev/null +++ b/homeassistant/components/media_player/translations/af.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Onaktief", + "off": "Af", + "on": "Aan", + "paused": "Onderbreek", + "playing": "Speel Tans", + "standby": "Gereed" + } + }, + "title": "Media-speler" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ar.json b/homeassistant/components/media_player/translations/ar.json new file mode 100644 index 00000000000..5fa1f1d6df5 --- /dev/null +++ b/homeassistant/components/media_player/translations/ar.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u062e\u0627\u0645\u0644", + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644", + "paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627", + "playing": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0634\u063a\u064a\u0644", + "standby": "\u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u062a\u0638\u0627\u0631" + } + }, + "title": "\u0645\u0634\u063a\u0644 \u0627\u0644\u0645\u0648\u0633\u064a\u0642\u0649" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/bg.json b/homeassistant/components/media_player/translations/bg.json new file mode 100644 index 00000000000..408f3c1e682 --- /dev/null +++ b/homeassistant/components/media_player/translations/bg.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} \u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u0435\u043d", + "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d", + "is_paused": "{entity_name} \u0435 \u043d\u0430 \u043f\u0430\u0443\u0437\u0430", + "is_playing": "{entity_name} \u0432\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430" + } + }, + "state": { + "_": { + "idle": "\u041d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449", + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d", + "paused": "\u0412 \u043f\u0430\u0443\u0437\u0430", + "playing": "\u0412\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435", + "standby": "\u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442" + } + }, + "title": "\u041c\u0435\u0434\u0438\u0435\u043d \u043f\u043b\u0435\u0439\u044a\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/bs.json b/homeassistant/components/media_player/translations/bs.json new file mode 100644 index 00000000000..5b19d16a033 --- /dev/null +++ b/homeassistant/components/media_player/translations/bs.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Besposlen", + "off": "Isklju\u010den", + "on": "Uklju\u010den", + "paused": "Pauziran", + "playing": "Prikazuje", + "standby": "U stanju \u010dekanja" + } + }, + "title": "Media player" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ca.json b/homeassistant/components/media_player/translations/ca.json new file mode 100644 index 00000000000..d4aec480562 --- /dev/null +++ b/homeassistant/components/media_player/translations/ca.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} est\u00e0 inactiu", + "is_off": "{entity_name} est\u00e0 apagat", + "is_on": "{entity_name} est\u00e0 enc\u00e8s", + "is_paused": "{entity_name} est\u00e0 en pausa", + "is_playing": "{entity_name} est\u00e0 reproduint" + } + }, + "state": { + "_": { + "idle": "Inactiu", + "off": "Apagat", + "on": "Enc\u00e8s", + "paused": "Pausat", + "playing": "Reproduint", + "standby": "En espera" + } + }, + "title": "Reproductor multim\u00e8dia" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/cs.json b/homeassistant/components/media_player/translations/cs.json new file mode 100644 index 00000000000..ea2579d798a --- /dev/null +++ b/homeassistant/components/media_player/translations/cs.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} je ne\u010dinn\u00fd", + "is_off": "{entity_name} je vypnuto", + "is_on": "{entity_name} je zapnuto", + "is_paused": "{entity_name} je pozastaven", + "is_playing": "{entity_name} p\u0159ehr\u00e1v\u00e1" + } + }, + "state": { + "_": { + "idle": "Ne\u010dinn\u00fd", + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed", + "paused": "Pozastaveno", + "playing": "P\u0159ehr\u00e1v\u00e1n\u00ed", + "standby": "Pohotovostn\u00ed re\u017eim" + } + }, + "title": "P\u0159ehr\u00e1va\u010d m\u00e9di\u00ed" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/cy.json b/homeassistant/components/media_player/translations/cy.json new file mode 100644 index 00000000000..9c668af532f --- /dev/null +++ b/homeassistant/components/media_player/translations/cy.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Segur", + "off": "i ffwrdd", + "on": "Ar", + "paused": "Wedi rhewi", + "playing": "Chwarae", + "standby": "Gorffwys" + } + }, + "title": "Chwaraewr cyfryngau" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/da.json b/homeassistant/components/media_player/translations/da.json new file mode 100644 index 00000000000..94a3ea4db2a --- /dev/null +++ b/homeassistant/components/media_player/translations/da.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} er inaktiv", + "is_off": "{entity_name} er slukket", + "is_on": "{entity_name} er t\u00e6ndt", + "is_paused": "{entity_name} er sat p\u00e5 pause", + "is_playing": "{entity_name} afspiller" + } + }, + "state": { + "_": { + "idle": "Inaktiv", + "off": "Slukket", + "on": "T\u00e6ndt", + "paused": "Sat p\u00e5 pause", + "playing": "Afspiller", + "standby": "Standby" + } + }, + "title": "Medieafspiller" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/de.json b/homeassistant/components/media_player/translations/de.json new file mode 100644 index 00000000000..a7f25fa9d7c --- /dev/null +++ b/homeassistant/components/media_player/translations/de.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} ist unt\u00e4tig", + "is_off": "{entity_name} ist ausgeschaltet", + "is_on": "{entity_name} ist eingeschaltet", + "is_paused": "{entity_name} ist pausiert", + "is_playing": "{entity_name} spielt" + } + }, + "state": { + "_": { + "idle": "Unt\u00e4tig", + "off": "Aus", + "on": "An", + "paused": "Pausiert", + "playing": "Spielt", + "standby": "Standby" + } + }, + "title": "Mediaplayer" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/el.json b/homeassistant/components/media_player/translations/el.json new file mode 100644 index 00000000000..c67e3f83e09 --- /dev/null +++ b/homeassistant/components/media_player/translations/el.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1", + "off": "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", + "paused": "\u03a3\u03b5 \u03a0\u03b1\u03cd\u03c3\u03b7", + "playing": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2", + "standby": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bc\u03bf\u03bd\u03ae\u03c2" + } + }, + "title": "\u03a3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae \u03b1\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2 \u03c0\u03bf\u03bb\u03c5\u03bc\u03ad\u03c3\u03c9\u03bd" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/en.json b/homeassistant/components/media_player/translations/en.json new file mode 100644 index 00000000000..3a96a2b3a90 --- /dev/null +++ b/homeassistant/components/media_player/translations/en.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} is idle", + "is_off": "{entity_name} is off", + "is_on": "{entity_name} is on", + "is_paused": "{entity_name} is paused", + "is_playing": "{entity_name} is playing" + } + }, + "state": { + "_": { + "idle": "Idle", + "off": "Off", + "on": "On", + "paused": "Paused", + "playing": "Playing", + "standby": "Standby" + } + }, + "title": "Media player" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/es-419.json b/homeassistant/components/media_player/translations/es-419.json new file mode 100644 index 00000000000..667d4af550e --- /dev/null +++ b/homeassistant/components/media_player/translations/es-419.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Inactivo", + "off": "Apagado", + "on": "Encendido", + "paused": "Pausado", + "playing": "Reproduciendo", + "standby": "Modo de espera" + } + }, + "title": "Reproductor multimedia" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/es.json b/homeassistant/components/media_player/translations/es.json new file mode 100644 index 00000000000..fffaedc1d97 --- /dev/null +++ b/homeassistant/components/media_player/translations/es.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} est\u00e1 inactivo", + "is_off": "{entity_name} est\u00e1 apagado", + "is_on": "{entity_name} est\u00e1 activado", + "is_paused": "{entity_name} est\u00e1 en pausa", + "is_playing": "{entity_name} est\u00e1 reproduciendo" + } + }, + "state": { + "_": { + "idle": "Inactivo", + "off": "Apagado", + "on": "Encendido", + "paused": "En pausa", + "playing": "Reproduciendo", + "standby": "Apagado" + } + }, + "title": "Reproductor multimedia" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/et.json b/homeassistant/components/media_player/translations/et.json new file mode 100644 index 00000000000..2800870e9cc --- /dev/null +++ b/homeassistant/components/media_player/translations/et.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Ootel", + "off": "V\u00e4ljas", + "on": "Sees", + "paused": "Peatatud", + "playing": "M\u00e4ngib", + "standby": "Unere\u017eiimil" + } + }, + "title": "Meediam\u00e4ngija" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/eu.json b/homeassistant/components/media_player/translations/eu.json new file mode 100644 index 00000000000..54b94079bed --- /dev/null +++ b/homeassistant/components/media_player/translations/eu.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/fa.json b/homeassistant/components/media_player/translations/fa.json new file mode 100644 index 00000000000..d69c8826af4 --- /dev/null +++ b/homeassistant/components/media_player/translations/fa.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "idle": "\u0628\u06cc\u06a9\u0627\u0631", + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0631\u0648\u0634\u0646", + "paused": "\u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u06a9\u062b", + "playing": "\u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634", + "standby": "\u0622\u0645\u0627\u062f\u0647 \u0628\u0647 \u06a9\u0627\u0631" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/fi.json b/homeassistant/components/media_player/translations/fi.json new file mode 100644 index 00000000000..07970c7da52 --- /dev/null +++ b/homeassistant/components/media_player/translations/fi.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Lepotilassa", + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4", + "paused": "Pys\u00e4ytetty", + "playing": "Toistaa", + "standby": "Lepotilassa" + } + }, + "title": "Mediatoistin" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/fr.json b/homeassistant/components/media_player/translations/fr.json new file mode 100644 index 00000000000..5ae84d5ba6f --- /dev/null +++ b/homeassistant/components/media_player/translations/fr.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} est inactif", + "is_off": "{entity_name} est d\u00e9sactiv\u00e9", + "is_on": "{entity_name} est activ\u00e9", + "is_paused": "{entity_name} est en pause", + "is_playing": "{entity_name} joue" + } + }, + "state": { + "_": { + "idle": "En veille", + "off": "\u00c9teint", + "on": "Marche", + "paused": "En pause", + "playing": "Lecture en cours", + "standby": "En veille" + } + }, + "title": "Lecteur multim\u00e9dia" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/gsw.json b/homeassistant/components/media_player/translations/gsw.json new file mode 100644 index 00000000000..fa5ae675766 --- /dev/null +++ b/homeassistant/components/media_player/translations/gsw.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "idle": "L\u00e4\u00e4rlauf", + "off": "Us", + "on": "Ah", + "paused": "Pousi\u00e4r\u00e4", + "playing": "Am spil\u00e4", + "standby": "Standby" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/he.json b/homeassistant/components/media_player/translations/he.json new file mode 100644 index 00000000000..f29b3add414 --- /dev/null +++ b/homeassistant/components/media_player/translations/he.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u05de\u05de\u05ea\u05d9\u05df", + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7", + "paused": "\u05de\u05d5\u05e9\u05d4\u05d4", + "playing": "\u05de\u05e0\u05d2\u05df", + "standby": "\u05de\u05e6\u05d1 \u05d4\u05de\u05ea\u05e0\u05d4" + } + }, + "title": "\u05e0\u05d2\u05df \u05de\u05d3\u05d9\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/hi.json b/homeassistant/components/media_player/translations/hi.json new file mode 100644 index 00000000000..2ed12ab1756 --- /dev/null +++ b/homeassistant/components/media_player/translations/hi.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "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", + "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" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/hr.json b/homeassistant/components/media_player/translations/hr.json new file mode 100644 index 00000000000..8788ce96770 --- /dev/null +++ b/homeassistant/components/media_player/translations/hr.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Neaktivan", + "off": "Isklju\u010den", + "on": "Uklju\u010den", + "paused": "Pauzirano", + "playing": "Prikazivanje", + "standby": "U stanju \u010dekanja" + } + }, + "title": "Media player" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/hu.json b/homeassistant/components/media_player/translations/hu.json new file mode 100644 index 00000000000..0eae14fdd98 --- /dev/null +++ b/homeassistant/components/media_player/translations/hu.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} t\u00e9tlen", + "is_off": "{entity_name} ki van kapcsolva", + "is_on": "{entity_name} be van kapcsolva", + "is_paused": "{entity_name} sz\u00fcneteltetve van", + "is_playing": "{entity_name} lej\u00e1tszik" + } + }, + "state": { + "_": { + "idle": "T\u00e9tlen", + "off": "Ki", + "on": "Be", + "paused": "Sz\u00fcnetel", + "playing": "Lej\u00e1tsz\u00e1s", + "standby": "K\u00e9szenl\u00e9t" + } + }, + "title": "M\u00e9dialej\u00e1tsz\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/hy.json b/homeassistant/components/media_player/translations/hy.json new file mode 100644 index 00000000000..964bdd6f6dd --- /dev/null +++ b/homeassistant/components/media_player/translations/hy.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u054a\u0561\u0580\u0561\u057a", + "off": "\u0531\u0576\u057b\u0561\u057f\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e", + "paused": "\u0534\u0561\u0564\u0561\u0580 \u0567", + "playing": "\u053d\u0561\u0572\u0578\u0582\u0574", + "standby": "\u054d\u057a\u0561\u057d\u0578\u0582\u0574" + } + }, + "title": "\u0544\u0565\u0564\u056b\u0561 \u0576\u057e\u0561\u0563\u0561\u0580\u056f\u056b\u0579" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/id.json b/homeassistant/components/media_player/translations/id.json new file mode 100644 index 00000000000..bcf12d72542 --- /dev/null +++ b/homeassistant/components/media_player/translations/id.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Diam", + "off": "Off", + "on": "On", + "paused": "Jeda", + "playing": "Memainkan", + "standby": "Siaga" + } + }, + "title": "Pemutar media" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/is.json b/homeassistant/components/media_player/translations/is.json new file mode 100644 index 00000000000..276e3428171 --- /dev/null +++ b/homeassistant/components/media_player/translations/is.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "A\u00f0ger\u00f0alaus", + "off": "Sl\u00f6kkt", + "on": "\u00ed gangi", + "paused": "\u00cd bi\u00f0", + "playing": "Spila", + "standby": "Bi\u00f0sta\u00f0a" + } + }, + "title": "Margmi\u00f0lunarspilari" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/it.json b/homeassistant/components/media_player/translations/it.json new file mode 100644 index 00000000000..989df9c2051 --- /dev/null +++ b/homeassistant/components/media_player/translations/it.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} \u00e8 inattivo", + "is_off": "{entity_name} \u00e8 spento", + "is_on": "{entity_name} \u00e8 acceso", + "is_paused": "{entity_name} \u00e8 in pausa", + "is_playing": "{entity_name} \u00e8 in esecuzione" + } + }, + "state": { + "_": { + "idle": "Inattivo", + "off": "Spento", + "on": "Acceso", + "paused": "In pausa", + "playing": "In riproduzione", + "standby": "Pausa" + } + }, + "title": "Lettore multimediale" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ja.json b/homeassistant/components/media_player/translations/ja.json new file mode 100644 index 00000000000..459da77a6f9 --- /dev/null +++ b/homeassistant/components/media_player/translations/ja.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "idle": "\u30a2\u30a4\u30c9\u30eb", + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3", + "paused": "\u4e00\u6642\u505c\u6b62", + "playing": "\u518d\u751f\u4e2d" + } + }, + "title": "\u30e1\u30c7\u30a3\u30a2\u30d7\u30ec\u30fc\u30e4\u30fc" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ko.json b/homeassistant/components/media_player/translations/ko.json new file mode 100644 index 00000000000..47e019a879d --- /dev/null +++ b/homeassistant/components/media_player/translations/ko.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} \uc774(\uac00) \uc720\ud734 \uc0c1\ud0dc\uc774\uba74", + "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", + "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74", + "is_paused": "{entity_name} \uc774(\uac00) \uc77c\uc2dc\uc911\uc9c0\ub418\uc5b4 \uc788\uc73c\uba74", + "is_playing": "{entity_name} \uc774(\uac00) \uc7ac\uc0dd \uc911\uc774\uba74" + } + }, + "state": { + "_": { + "idle": "\ub300\uae30\uc911", + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0", + "paused": "\uc77c\uc2dc\uc911\uc9c0", + "playing": "\uc7ac\uc0dd\uc911", + "standby": "\uc900\ube44\uc911" + } + }, + "title": "\ubbf8\ub514\uc5b4\uc7ac\uc0dd\uae30" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/lb.json b/homeassistant/components/media_player/translations/lb.json new file mode 100644 index 00000000000..0e7e38eb004 --- /dev/null +++ b/homeassistant/components/media_player/translations/lb.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} waart", + "is_off": "{entity_name} ass aus", + "is_on": "{entity_name} ass un", + "is_paused": "{entity_name} ass paus\u00e9iert", + "is_playing": "{entity_name} spillt" + } + }, + "state": { + "_": { + "idle": "Waart", + "off": "Aus", + "on": "Un", + "paused": "Pauseiert", + "playing": "Spillt", + "standby": "Standby" + } + }, + "title": "Medie Spiller" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/lt.json b/homeassistant/components/media_player/translations/lt.json new file mode 100644 index 00000000000..b9ad676cc08 --- /dev/null +++ b/homeassistant/components/media_player/translations/lt.json @@ -0,0 +1,7 @@ +{ + "state": { + "_": { + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/lv.json b/homeassistant/components/media_player/translations/lv.json new file mode 100644 index 00000000000..be0d75bce85 --- /dev/null +++ b/homeassistant/components/media_player/translations/lv.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "D\u012bkst\u0101v\u0113", + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts", + "paused": "Aptur\u0113ts", + "playing": "Atska\u0146o", + "standby": "Gaid\u012b\u0161anas re\u017e\u012bm\u0101" + } + }, + "title": "Multivides atska\u0146ot\u0101js" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/nb.json b/homeassistant/components/media_player/translations/nb.json new file mode 100644 index 00000000000..d533b6e4471 --- /dev/null +++ b/homeassistant/components/media_player/translations/nb.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Inaktiv", + "off": "Av", + "on": "P\u00e5", + "paused": "Pauset", + "playing": "Spiller", + "standby": "Avventer" + } + }, + "title": "Mediaspiller" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/nl.json b/homeassistant/components/media_player/translations/nl.json new file mode 100644 index 00000000000..5e690f35f8a --- /dev/null +++ b/homeassistant/components/media_player/translations/nl.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} is niet actief", + "is_off": "{entity_name} is uitgeschakeld", + "is_on": "{entity_name} is ingeschakeld", + "is_paused": "{entity_name} is gepauzeerd", + "is_playing": "{entity_name} wordt afgespeeld" + } + }, + "state": { + "_": { + "idle": "Inactief", + "off": "Uit", + "on": "Aan", + "paused": "Gepauzeerd", + "playing": "Afspelen", + "standby": "Standby" + } + }, + "title": "Mediaspeler" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/nn.json b/homeassistant/components/media_player/translations/nn.json new file mode 100644 index 00000000000..98a2186ee17 --- /dev/null +++ b/homeassistant/components/media_player/translations/nn.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Inaktiv", + "off": "Av", + "on": "P\u00e5", + "paused": "Pausa", + "playing": "Spelar", + "standby": "Avventer" + } + }, + "title": "Mediaspelar" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/no.json b/homeassistant/components/media_player/translations/no.json new file mode 100644 index 00000000000..6358aa9b85a --- /dev/null +++ b/homeassistant/components/media_player/translations/no.json @@ -0,0 +1,17 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} er inaktiv", + "is_off": "{entity_name} er sl\u00e5tt av", + "is_on": "{entity_name} er sl\u00e5tt p\u00e5", + "is_paused": "{entity_name} er satt p\u00e5 pause", + "is_playing": "{entity_name} spiller n\u00e5" + } + }, + "state": { + "_": { + "playing": "Spiller" + } + }, + "title": "Mediaspiller" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/pl.json b/homeassistant/components/media_player/translations/pl.json new file mode 100644 index 00000000000..0c4153bdede --- /dev/null +++ b/homeassistant/components/media_player/translations/pl.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "odtwarzacz medi\u00f3w (entity_name} jest nieaktywny", + "is_off": "odtwarzacz medi\u00f3w (entity_name} jest wy\u0142\u0105czony", + "is_on": "odtwarzacz medi\u00f3w (entity_name} jest w\u0142\u0105czony", + "is_paused": "odtwarzanie medi\u00f3w na {entity_name} jest wstrzymane", + "is_playing": "{entity_name} odtwarza media" + } + }, + "state": { + "_": { + "idle": "nieaktywny", + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony", + "paused": "wstrzymany", + "playing": "odtwarzanie", + "standby": "tryb czuwania" + } + }, + "title": "Odtwarzacz medi\u00f3w" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/pt-BR.json b/homeassistant/components/media_player/translations/pt-BR.json new file mode 100644 index 00000000000..f980d5d2004 --- /dev/null +++ b/homeassistant/components/media_player/translations/pt-BR.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Ocioso", + "off": "Desligado", + "on": "Ligado", + "paused": "Pausado", + "playing": "Tocando", + "standby": "Em espera" + } + }, + "title": "Media player" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/pt.json b/homeassistant/components/media_player/translations/pt.json new file mode 100644 index 00000000000..a3c741ce0e2 --- /dev/null +++ b/homeassistant/components/media_player/translations/pt.json @@ -0,0 +1,21 @@ +{ + "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", + "off": "Desligado", + "on": "Ligado", + "paused": "Em pausa", + "playing": "A reproduzir", + "standby": "Em espera" + } + }, + "title": "Leitor multim\u00e9dia" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ro.json b/homeassistant/components/media_player/translations/ro.json new file mode 100644 index 00000000000..6f8f4728e92 --- /dev/null +++ b/homeassistant/components/media_player/translations/ro.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Inactiv", + "off": "Oprit", + "on": "Pornit", + "paused": "\u00cen pauz\u0103", + "playing": "Ruleaz\u0103", + "standby": "\u00cen a\u0219teptare" + } + }, + "title": "Media Player" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ru.json b/homeassistant/components/media_player/translations/ru.json new file mode 100644 index 00000000000..8ed46953675 --- /dev/null +++ b/homeassistant/components/media_player/translations/ru.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f", + "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_paused": "{entity_name} \u043d\u0430 \u043f\u0430\u0443\u0437\u0435", + "is_playing": "{entity_name} \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043c\u0435\u0434\u0438\u0430" + } + }, + "state": { + "_": { + "idle": "\u0411\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", + "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" + } + }, + "title": "\u041c\u0435\u0434\u0438\u0430\u043f\u043b\u0435\u0435\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/sk.json b/homeassistant/components/media_player/translations/sk.json new file mode 100644 index 00000000000..16818a4b593 --- /dev/null +++ b/homeassistant/components/media_player/translations/sk.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Ne\u010dinn\u00fd", + "off": "Vypnut\u00fd", + "on": "Zapnut\u00fd", + "paused": "Pozastaven\u00fd", + "playing": "Prehr\u00e1vanie", + "standby": "Pohotovostn\u00fd re\u017eim" + } + }, + "title": "Prehr\u00e1va\u010d m\u00e9di\u00ed" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/sl.json b/homeassistant/components/media_player/translations/sl.json new file mode 100644 index 00000000000..f23e746e9c8 --- /dev/null +++ b/homeassistant/components/media_player/translations/sl.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} je nedejaven", + "is_off": "{entity_name} je izklopljen", + "is_on": "{entity_name} je vklopljen", + "is_paused": "{entity_name} je zaustavljen", + "is_playing": "{entity_name} predvaja" + } + }, + "state": { + "_": { + "idle": "V pripravljenosti", + "off": "Izklju\u010den", + "on": "Vklopljen", + "paused": "Na pavzi", + "playing": "Predvaja", + "standby": "V pripravljenosti" + } + }, + "title": "Medijski predvajalnik" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/sv.json b/homeassistant/components/media_player/translations/sv.json new file mode 100644 index 00000000000..95f098f2f3e --- /dev/null +++ b/homeassistant/components/media_player/translations/sv.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} \u00e4r inaktiv", + "is_off": "{entity_name} \u00e4r avst\u00e4ngd", + "is_on": "{entity_name} \u00e4r p\u00e5", + "is_paused": "{entity_name} \u00e4r pausad", + "is_playing": "{entity_name} spelar" + } + }, + "state": { + "_": { + "idle": "Inaktiv", + "off": "Av", + "on": "P\u00e5", + "paused": "Pausad", + "playing": "Spelar", + "standby": "Vilol\u00e4ge" + } + }, + "title": "Mediaspelare" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/ta.json b/homeassistant/components/media_player/translations/ta.json new file mode 100644 index 00000000000..c408de6a131 --- /dev/null +++ b/homeassistant/components/media_player/translations/ta.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u0baa\u0ba3\u0bbf\u0baf\u0bbf\u0ba9\u0bcd\u0bb1\u0bbf", + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd", + "paused": "\u0b87\u0b9f\u0bc8\u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1", + "playing": "\u0bb5\u0bbf\u0bb3\u0bc8\u0baf\u0bbe\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd", + "standby": "\u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1" + } + }, + "title": "\u0bae\u0bc0\u0b9f\u0bbf\u0baf\u0bbe \u0baa\u0bbf\u0bb3\u0bc7\u0baf\u0bb0\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/te.json b/homeassistant/components/media_player/translations/te.json new file mode 100644 index 00000000000..0e26f3d7d55 --- /dev/null +++ b/homeassistant/components/media_player/translations/te.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u0c10\u0c21\u0c3f\u0c32\u0c4d", + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d", + "paused": "\u0c06\u0c2a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f", + "playing": "\u0c06\u0c21\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f", + "standby": "\u0c28\u0c3f\u0c32\u0c15\u0c21" + } + }, + "title": "\u0c2e\u0c40\u0c21\u0c3f\u0c2f\u0c3e \u0c2a\u0c4d\u0c32\u0c47\u0c2f\u0c30\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/th.json b/homeassistant/components/media_player/translations/th.json new file mode 100644 index 00000000000..a7b0178aecd --- /dev/null +++ b/homeassistant/components/media_player/translations/th.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14", + "paused": "\u0e2b\u0e22\u0e38\u0e14\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27", + "playing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e25\u0e48\u0e19", + "standby": "\u0e41\u0e2a\u0e15\u0e19\u0e14\u0e4c\u0e1a\u0e32\u0e22" + } + }, + "title": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e40\u0e25\u0e48\u0e19\u0e2a\u0e37\u0e48\u0e2d" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/tr.json b/homeassistant/components/media_player/translations/tr.json new file mode 100644 index 00000000000..2687a8ffb4e --- /dev/null +++ b/homeassistant/components/media_player/translations/tr.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Bo\u015fta", + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k", + "paused": "Durduruldu", + "playing": "Oynuyor", + "standby": "Bekleme modu" + } + }, + "title": "Medya oynat\u0131c\u0131" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/uk.json b/homeassistant/components/media_player/translations/uk.json new file mode 100644 index 00000000000..f475829a524 --- /dev/null +++ b/homeassistant/components/media_player/translations/uk.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "\u0411\u0435\u0437\u0434\u0456\u044f\u043b\u044c\u043d\u0456\u0441\u0442\u044c", + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e", + "paused": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e", + "playing": "\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f", + "standby": "\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f" + } + }, + "title": "\u041c\u0435\u0434\u0456\u0430 \u043f\u043b\u0435\u0454\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/vi.json b/homeassistant/components/media_player/translations/vi.json new file mode 100644 index 00000000000..f5593b1cd76 --- /dev/null +++ b/homeassistant/components/media_player/translations/vi.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "idle": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng", + "off": "T\u1eaft", + "on": "B\u1eadt", + "paused": "T\u1ea1m d\u1eebng", + "playing": "\u0110ang ch\u01a1i", + "standby": "Ch\u1ebf \u0111\u1ed9 ch\u1edd" + } + }, + "title": "Media player" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/zh-Hans.json b/homeassistant/components/media_player/translations/zh-Hans.json new file mode 100644 index 00000000000..af8579075be --- /dev/null +++ b/homeassistant/components/media_player/translations/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name} \u7a7a\u95f2", + "is_off": "{entity_name} \u5df2\u5173\u95ed", + "is_on": "{entity_name} \u5df2\u5f00\u542f", + "is_paused": "{entity_name} \u5df2\u6682\u505c", + "is_playing": "{entity_name} \u6b63\u5728\u64ad\u653e" + } + }, + "state": { + "_": { + "idle": "\u7a7a\u95f2", + "off": "\u5173", + "on": "\u5f00", + "paused": "\u5df2\u6682\u505c", + "playing": "\u6b63\u5728\u64ad\u653e", + "standby": "\u5f85\u673a" + } + }, + "title": "\u64ad\u653e\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/zh-Hant.json b/homeassistant/components/media_player/translations/zh-Hant.json new file mode 100644 index 00000000000..3ae786cbed9 --- /dev/null +++ b/homeassistant/components/media_player/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "device_automation": { + "condition_type": { + "is_idle": "{entity_name}\u9592\u7f6e", + "is_off": "{entity_name}\u95dc\u9589", + "is_on": "{entity_name}\u958b\u555f", + "is_paused": "{entity_name}\u5df2\u66ab\u505c", + "is_playing": "{entity_name}\u6b63\u5728\u64ad\u653e" + } + }, + "state": { + "_": { + "idle": "\u9592\u7f6e", + "off": "\u95dc\u9589", + "on": "\u958b\u555f", + "paused": "\u66ab\u505c", + "playing": "\u64ad\u653e\u4e2d", + "standby": "\u5f85\u547d" + } + }, + "title": "\u5a92\u9ad4\u64ad\u653e\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/mediaroom/manifest.json b/homeassistant/components/mediaroom/manifest.json index 31a028db61c..218715f81bf 100644 --- a/homeassistant/components/mediaroom/manifest.json +++ b/homeassistant/components/mediaroom/manifest.json @@ -3,6 +3,5 @@ "name": "Mediaroom", "documentation": "https://www.home-assistant.io/integrations/mediaroom", "requirements": ["pymediaroom==0.6.4"], - "dependencies": [], "codeowners": ["@dgomes"] } diff --git a/homeassistant/components/mediaroom/media_player.py b/homeassistant/components/mediaroom/media_player.py index 28d20d0db4b..492c347959e 100644 --- a/homeassistant/components/mediaroom/media_player.py +++ b/homeassistant/components/mediaroom/media_player.py @@ -70,7 +70,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= known_hosts = hass.data.get(DATA_MEDIAROOM) if known_hosts is None: known_hosts = hass.data[DATA_MEDIAROOM] = [] - host = config.get(CONF_HOST, None) + host = config.get(CONF_HOST) if host: async_add_entities( [ @@ -101,7 +101,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= if not config[CONF_OPTIMISTIC]: - already_installed = hass.data.get(DISCOVERY_MEDIAROOM, None) + already_installed = hass.data.get(DISCOVERY_MEDIAROOM) if not already_installed: hass.data[DISCOVERY_MEDIAROOM] = await install_mediaroom_protocol( responses_callback=callback_notify @@ -176,9 +176,13 @@ class MediaroomDevice(MediaPlayerDevice): self.set_state(stb_state) _LOGGER.debug("STB(%s) is [%s]", self.host, self._state) self._available = True - self.async_schedule_update_ha_state() + self.async_write_ha_state() - async_dispatcher_connect(self.hass, SIGNAL_STB_NOTIFY, async_notify_received) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_STB_NOTIFY, async_notify_received + ) + ) async def async_play_media(self, media_type, media_id, **kwargs): """Play media.""" @@ -200,7 +204,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def unique_id(self): @@ -242,7 +246,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self): """Turn off the receiver.""" @@ -254,7 +258,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_media_play(self): """Send play command.""" @@ -267,7 +271,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_media_pause(self): """Send pause command.""" @@ -279,7 +283,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_media_stop(self): """Send stop command.""" @@ -291,7 +295,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_media_previous_track(self): """Send Program Down command.""" @@ -303,7 +307,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_media_next_track(self): """Send Program Up command.""" @@ -315,7 +319,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_volume_up(self): """Send volume up command.""" @@ -325,7 +329,7 @@ class MediaroomDevice(MediaPlayerDevice): self._available = True except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_volume_down(self): """Send volume up command.""" @@ -334,7 +338,7 @@ class MediaroomDevice(MediaPlayerDevice): await self.stb.send_cmd("VolDown") except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_mute_volume(self, mute): """Send mute command.""" @@ -343,4 +347,4 @@ class MediaroomDevice(MediaPlayerDevice): await self.stb.send_cmd("Mute") except PyMediaroomError: self._available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/melcloud/.translations/ca.json b/homeassistant/components/melcloud/.translations/ca.json deleted file mode 100644 index 1dc5156f7e7..00000000000 --- a/homeassistant/components/melcloud/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La integraci\u00f3 MELCloud ja est\u00e0 configurada amb aquest correu electr\u00f2nic. El testimoni d'acc\u00e9s s'ha actualitzat." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya de MELCloud.", - "username": "Correu electr\u00f2nic d'inici de sessi\u00f3 a MELCloud." - }, - "description": "Connecta\u2019t amb el teu compte de MELCloud.", - "title": "Connexi\u00f3 amb MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/da.json b/homeassistant/components/melcloud/.translations/da.json deleted file mode 100644 index 6901ed22934..00000000000 --- a/homeassistant/components/melcloud/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MELCloud-integration er allerede konfigureret for denne e-mail. Adgangstoken er blevet opdateret." - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse. Pr\u00f8v igen", - "invalid_auth": "Ugyldig godkendelse", - "unknown": "Uventet fejl" - }, - "step": { - "user": { - "data": { - "password": "MELCloud-adgangskode.", - "username": "E-mail, der bruges til at logge ind p\u00e5 MELCloud." - }, - "description": "Opret forbindelse ved hj\u00e6lp af din MELCloud-konto.", - "title": "Opret forbindelse til MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/de.json b/homeassistant/components/melcloud/.translations/de.json deleted file mode 100644 index f4e2a3b1ebc..00000000000 --- a/homeassistant/components/melcloud/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Die MELCloud-Integration ist bereits f\u00fcr diese E-Mail konfiguriert. Das Zugriffstoken wurde aktualisiert." - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen. Bitte versuchen Sie es erneut.", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "password": "MELCloud Passwort.", - "username": "E-Mail-Adresse f\u00fcr die Anmeldung bei MELCloud." - }, - "description": "Verbinden Sie sich mit Ihrem MELCloud-Konto.", - "title": "Stellen Sie eine Verbindung zu MELCloud her" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/en.json b/homeassistant/components/melcloud/.translations/en.json deleted file mode 100644 index 48682f617a3..00000000000 --- a/homeassistant/components/melcloud/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MELCloud integration already configured for this email. Access token has been refreshed." - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "password": "MELCloud password.", - "username": "Email used to login to MELCloud." - }, - "description": "Connect using your MELCloud account.", - "title": "Connect to MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/es.json b/homeassistant/components/melcloud/.translations/es.json deleted file mode 100644 index 182f06c33c3..00000000000 --- a/homeassistant/components/melcloud/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integraci\u00f3n mELCloud ya configurada para este correo electr\u00f3nico. Se ha actualizado el token de acceso." - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntelo de nuevo.", - "invalid_auth": "Autentificaci\u00f3n inv\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a de MELCloud.", - "username": "Correo electr\u00f3nico utilizado para iniciar sesi\u00f3n en MELCloud." - }, - "description": "Con\u00e9ctate usando tu cuenta de MELCloud.", - "title": "Con\u00e9ctese a MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/fr.json b/homeassistant/components/melcloud/.translations/fr.json deleted file mode 100644 index 00661d3f0af..00000000000 --- a/homeassistant/components/melcloud/.translations/fr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification non valide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe MELCloud.", - "username": "E-mail utilis\u00e9e pour vous connecter \u00e0 MELCloud." - }, - "description": "Se connecter en utilisant votre MELCloud compte.", - "title": "Se connecter \u00e0 MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/it.json b/homeassistant/components/melcloud/.translations/it.json deleted file mode 100644 index 029fc2526b2..00000000000 --- a/homeassistant/components/melcloud/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integrazione MELCloud gi\u00e0 configurata per questa e-mail. Il token di accesso \u00e8 stato aggiornato." - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare.", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "password": "Password MELCloud.", - "username": "Email utilizzata per accedere a MELCloud." - }, - "description": "Connettiti utilizzando il tuo account MELCloud.", - "title": "Connettersi a MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/ko.json b/homeassistant/components/melcloud/.translations/ko.json deleted file mode 100644 index 428e2b1f994..00000000000 --- a/homeassistant/components/melcloud/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc774\uba54\uc77c\uc5d0 \ub300\ud55c MELCloud \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc561\uc138\uc2a4 \ud1a0\ud070\uc774 \uac31\uc2e0\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": { - "password": "MELCloud \uc758 \ube44\ubc00\ubc88\ud638\ub97c \ub123\uc5b4\uc8fc\uc138\uc694.", - "username": "MELCloud \ub85c\uadf8\uc778 \uc774\uba54\uc77c \uc8fc\uc18c\ub97c \ub123\uc5b4\uc8fc\uc138\uc694." - }, - "description": "MELCloud \uacc4\uc815\uc73c\ub85c \uc5f0\uacb0\ud558\uc138\uc694.", - "title": "MELCloud \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/lb.json b/homeassistant/components/melcloud/.translations/lb.json deleted file mode 100644 index b082ef78965..00000000000 --- a/homeassistant/components/melcloud/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MELCloud Integratioun ass scho konfigur\u00e9iert fir d\u00ebs Email. Acc\u00e8s Jeton gouf erneiert." - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "password": "MELCloud Passwuert", - "username": "Email d\u00e9i benotz g\u00ebtt fir sech mat MELCloud ze verbannen" - }, - "description": "Verbann dech mat dengem MElCloud Kont.", - "title": "Mat MELCloud verbannen" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/nl.json b/homeassistant/components/melcloud/.translations/nl.json deleted file mode 100644 index b60495e7f47..00000000000 --- a/homeassistant/components/melcloud/.translations/nl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MELCloud integratie is al geconfigureerd voor deze e-mail. Toegangstoken is vernieuwd." - }, - "error": { - "cannot_connect": "Verbinding mislukt, probeer het opnieuw", - "invalid_auth": "Ongeldige authenticatie", - "unknown": "Onverwachte fout" - }, - "step": { - "user": { - "data": { - "password": "MELCloud wachtwoord.", - "username": "E-mail gebruikt om in te loggen op MELCloud." - }, - "description": "Maak verbinding via uw MELCloud account.", - "title": "Maak verbinding met MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/no.json b/homeassistant/components/melcloud/.translations/no.json deleted file mode 100644 index cdcc7087d06..00000000000 --- a/homeassistant/components/melcloud/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MELCloud integrasjon er allerede konfigurert p\u00e5 denne e-posten. Access token har blitt oppdatert." - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "password": "MELCloud passord.", - "username": "E-post som blir brukt til \u00e5 logge inn p\u00e5 MELCloud." - }, - "description": "Koble til ved hjelp av MELCloud-kontoen din.", - "title": "Koble til MELCloud" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/pl.json b/homeassistant/components/melcloud/.translations/pl.json deleted file mode 100644 index 60cc9843607..00000000000 --- a/homeassistant/components/melcloud/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integracja MELCloud jest ju\u017c skonfigurowana dla tego adresu e-mail. Token dost\u0119pu zosta\u0142 od\u015bwie\u017cony." - }, - "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 MELCloud.", - "username": "Adres e-mail u\u017cywany do logowania do MELCloud" - }, - "description": "Po\u0142\u0105cz u\u017cywaj\u0105c swojego konta MELCloud.", - "title": "Po\u0142\u0105czenie z MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/ru.json b/homeassistant/components/melcloud/.translations/ru.json deleted file mode 100644 index d4bab0e417e..00000000000 --- a/homeassistant/components/melcloud/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f MELCloud \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c MELCloud.", - "username": "\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 MELCloud." - }, - "description": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u0441\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c MELCloud.", - "title": "MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/sl.json b/homeassistant/components/melcloud/.translations/sl.json deleted file mode 100644 index 04dbb953d0d..00000000000 --- a/homeassistant/components/melcloud/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Za to e-po\u0161to je \u017ee konfigurirana integracija MELCloud. \u017deton za dostop je bil osve\u017een." - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova", - "invalid_auth": "Neveljavna avtentikacija", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "data": { - "password": "MELCloud geslo.", - "username": "E-po\u0161tni naslov za prijavo v MELCloud." - }, - "description": "Pove\u017eite se s svojim ra\u010dunom MELCloud.", - "title": "Pove\u017eite se z MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/sv.json b/homeassistant/components/melcloud/.translations/sv.json deleted file mode 100644 index 72a251ef9d0..00000000000 --- a/homeassistant/components/melcloud/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MELCloud-integration redan konfigurerad f\u00f6r den h\u00e4r e-postadressen. \u00c5tkomsttoken har uppdaterats." - }, - "error": { - "cannot_connect": "Det gick inte att ansluta, f\u00f6rs\u00f6k igen", - "invalid_auth": "Ogiltig autentisering", - "unknown": "Ov\u00e4ntat fel" - }, - "step": { - "user": { - "data": { - "password": "MELCloud-l\u00f6senord.", - "username": "E-post som anv\u00e4nds f\u00f6r att logga in p\u00e5 MELCloud." - }, - "description": "Anslut med ditt MELCloud-konto.", - "title": "Anslut till MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/.translations/zh-Hant.json b/homeassistant/components/melcloud/.translations/zh-Hant.json deleted file mode 100644 index c098d041598..00000000000 --- a/homeassistant/components/melcloud/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u5df2\u4f7f\u7528\u6b64\u90f5\u4ef6\u8a2d\u5b9a MELCloud \u6574\u5408\u3002\u5b58\u53d6\u5bc6\u9470\u5df2\u66f4\u65b0\u3002" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "password": "MELCloud \u5bc6\u78bc\u3002", - "username": "MELCloud \u767b\u5165\u90f5\u4ef6\u3002" - }, - "description": "\u4f7f\u7528 MELCloud \u5e33\u865f\u9032\u884c\u9023\u7dda\u3002", - "title": "\u9023\u7dda\u81f3 MELCloud" - } - }, - "title": "MELCloud" - } -} \ No newline at end of file diff --git a/homeassistant/components/melcloud/climate.py b/homeassistant/components/melcloud/climate.py index c661b1a59ad..e2d1fdd984d 100644 --- a/homeassistant/components/melcloud/climate.py +++ b/homeassistant/components/melcloud/climate.py @@ -11,6 +11,7 @@ from pymelcloud.atw_device import ( PROPERTY_ZONE_2_OPERATION_MODE, Zone, ) +import voluptuous as vol from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( @@ -23,15 +24,28 @@ from homeassistant.components.climate.const import ( HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF, SUPPORT_FAN_MODE, + SUPPORT_SWING_MODE, SUPPORT_TARGET_TEMPERATURE, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import TEMP_CELSIUS +from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers.typing import HomeAssistantType from homeassistant.util.temperature import convert as convert_temperature from . import MelCloudDevice -from .const import ATTR_STATUS, DOMAIN, TEMP_UNIT_LOOKUP +from .const import ( + ATTR_STATUS, + ATTR_VANE_HORIZONTAL, + ATTR_VANE_HORIZONTAL_POSITIONS, + ATTR_VANE_VERTICAL, + ATTR_VANE_VERTICAL_POSITIONS, + CONF_POSITION, + DOMAIN, + SERVICE_SET_VANE_HORIZONTAL, + SERVICE_SET_VANE_VERTICAL, + TEMP_UNIT_LOOKUP, +) SCAN_INTERVAL = timedelta(seconds=60) @@ -73,6 +87,18 @@ async def async_setup_entry( True, ) + platform = entity_platform.current_platform.get() + platform.async_register_entity_service( + SERVICE_SET_VANE_HORIZONTAL, + {vol.Required(CONF_POSITION): cv.string}, + "async_set_vane_horizontal", + ) + platform.async_register_entity_service( + SERVICE_SET_VANE_VERTICAL, + {vol.Required(CONF_POSITION): cv.string}, + "async_set_vane_vertical", + ) + class MelCloudClimate(ClimateDevice): """Base climate device.""" @@ -116,6 +142,30 @@ class AtaDeviceClimate(MelCloudClimate): """Return the display name of this entity.""" return self._name + @property + def device_state_attributes(self) -> Optional[Dict[str, Any]]: + """Return the optional state attributes with device specific additions.""" + attr = {} + + vane_horizontal = self._device.vane_horizontal + if vane_horizontal: + attr.update( + { + ATTR_VANE_HORIZONTAL: vane_horizontal, + ATTR_VANE_HORIZONTAL_POSITIONS: self._device.vane_horizontal_positions, + } + ) + + vane_vertical = self._device.vane_vertical + if vane_vertical: + attr.update( + { + ATTR_VANE_VERTICAL: vane_vertical, + ATTR_VANE_VERTICAL_POSITIONS: self._device.vane_vertical_positions, + } + ) + return attr + @property def temperature_unit(self) -> str: """Return the unit of measurement used by the platform.""" @@ -181,10 +231,40 @@ class AtaDeviceClimate(MelCloudClimate): """Return the list of available fan modes.""" return self._device.fan_speeds + async def async_set_vane_horizontal(self, position: str) -> None: + """Set horizontal vane position.""" + if position not in self._device.vane_horizontal_positions: + raise ValueError( + f"Invalid horizontal vane position {position}. Valid positions: [{self._device.vane_horizontal_positions}]." + ) + await self._device.set({ata.PROPERTY_VANE_HORIZONTAL: position}) + + async def async_set_vane_vertical(self, position: str) -> None: + """Set vertical vane position.""" + if position not in self._device.vane_vertical_positions: + raise ValueError( + f"Invalid vertical vane position {position}. Valid positions: [{self._device.vane_vertical_positions}]." + ) + await self._device.set({ata.PROPERTY_VANE_VERTICAL: position}) + + @property + def swing_mode(self) -> Optional[str]: + """Return vertical vane position or mode.""" + return self._device.vane_vertical + + async def async_set_swing_mode(self, swing_mode) -> None: + """Set vertical vane position or mode.""" + await self.async_set_vane_vertical(swing_mode) + + @property + def swing_modes(self) -> Optional[str]: + """Return a list of available vertical vane positions and modes.""" + return self._device.vane_vertical_positions + @property def supported_features(self) -> int: """Return the list of supported features.""" - return SUPPORT_FAN_MODE | SUPPORT_TARGET_TEMPERATURE + return SUPPORT_FAN_MODE | SUPPORT_TARGET_TEMPERATURE | SUPPORT_SWING_MODE async def async_turn_on(self) -> None: """Turn the entity on.""" diff --git a/homeassistant/components/melcloud/config_flow.py b/homeassistant/components/melcloud/config_flow.py index 6bda8cc3c28..ed6fc31c414 100644 --- a/homeassistant/components/melcloud/config_flow.py +++ b/homeassistant/components/melcloud/config_flow.py @@ -9,7 +9,7 @@ import pymelcloud import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME +from homeassistant.const import CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME, HTTP_FORBIDDEN from .const import DOMAIN # pylint: disable=unused-import @@ -27,7 +27,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): await self.async_set_unique_id(username) self._abort_if_unique_id_configured({CONF_TOKEN: token}) return self.async_create_entry( - title=username, data={CONF_USERNAME: username, CONF_TOKEN: token}, + title=username, data={CONF_USERNAME: username, CONF_TOKEN: token} ) async def _create_client( @@ -40,7 +40,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): """Create client.""" if password is None and token is None: raise ValueError( - "Invalid internal state. Called without either password or token", + "Invalid internal state. Called without either password or token" ) try: @@ -57,7 +57,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self.hass.helpers.aiohttp_client.async_get_clientsession(), ) except ClientResponseError as err: - if err.status == 401 or err.status == 403: + if err.status == 401 or err.status == HTTP_FORBIDDEN: return self.async_abort(reason="invalid_auth") return self.async_abort(reason="cannot_connect") except (asyncio.TimeoutError, ClientError): diff --git a/homeassistant/components/melcloud/const.py b/homeassistant/components/melcloud/const.py index c6ce4391294..d58f483d441 100644 --- a/homeassistant/components/melcloud/const.py +++ b/homeassistant/components/melcloud/const.py @@ -5,7 +5,16 @@ from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT DOMAIN = "melcloud" +CONF_POSITION = "position" + ATTR_STATUS = "status" +ATTR_VANE_HORIZONTAL = "vane_horizontal" +ATTR_VANE_HORIZONTAL_POSITIONS = "vane_horizontal_positions" +ATTR_VANE_VERTICAL = "vane_vertical" +ATTR_VANE_VERTICAL_POSITIONS = "vane_vertical_positions" + +SERVICE_SET_VANE_HORIZONTAL = "set_vane_horizontal" +SERVICE_SET_VANE_VERTICAL = "set_vane_vertical" TEMP_UNIT_LOOKUP = { UNIT_TEMP_CELSIUS: TEMP_CELSIUS, diff --git a/homeassistant/components/melcloud/manifest.json b/homeassistant/components/melcloud/manifest.json index 61fc9e1b730..4747059345f 100644 --- a/homeassistant/components/melcloud/manifest.json +++ b/homeassistant/components/melcloud/manifest.json @@ -3,7 +3,6 @@ "name": "MELCloud", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/melcloud", - "requirements": ["pymelcloud==2.4.0"], - "dependencies": [], + "requirements": ["pymelcloud==2.4.1"], "codeowners": ["@vilppuvuorinen"] } diff --git a/homeassistant/components/melcloud/sensor.py b/homeassistant/components/melcloud/sensor.py index 31bfd005ac1..9dee01c2fba 100644 --- a/homeassistant/components/melcloud/sensor.py +++ b/homeassistant/components/melcloud/sensor.py @@ -4,7 +4,11 @@ import logging from pymelcloud import DEVICE_TYPE_ATA, DEVICE_TYPE_ATW from pymelcloud.atw_device import Zone -from homeassistant.const import DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS +from homeassistant.const import ( + DEVICE_CLASS_TEMPERATURE, + ENERGY_KILO_WATT_HOUR, + TEMP_CELSIUS, +) from homeassistant.helpers.entity import Entity from . import MelCloudDevice @@ -29,7 +33,7 @@ ATA_SENSORS = { "energy": { ATTR_MEASUREMENT_NAME: "Energy", ATTR_ICON: "mdi:factory", - ATTR_UNIT_FN: lambda x: "kWh", + ATTR_UNIT_FN: lambda x: ENERGY_KILO_WATT_HOUR, ATTR_DEVICE_CLASS: None, ATTR_VALUE_FN: lambda x: x.device.total_energy_consumed, ATTR_ENABLED_FN: lambda x: x.device.has_energy_consumed_meter, @@ -147,9 +151,7 @@ class MelDeviceSensor(Entity): class AtwZoneSensor(MelDeviceSensor): """Air-to-Air device sensor.""" - def __init__( - self, api: MelCloudDevice, zone: Zone, measurement, definition, - ): + def __init__(self, api: MelCloudDevice, zone: Zone, measurement, definition): """Initialize the sensor.""" super().__init__(api, measurement, definition) self._zone = zone diff --git a/homeassistant/components/melcloud/services.yaml b/homeassistant/components/melcloud/services.yaml new file mode 100644 index 00000000000..40faa097d9b --- /dev/null +++ b/homeassistant/components/melcloud/services.yaml @@ -0,0 +1,23 @@ +set_vane_horizontal: + description: Sets horizontal vane position. + fields: + entity_id: + description: Name of the target entity + example: "climate.ac_1" + position: + description: > + Horizontal vane position. Possible options can be found in the + vane_horizontal_positions state attribute. + example: "auto" + +set_vane_vertical: + description: Sets vertical vane position. + fields: + entity_id: + description: Name of the target entity + example: "climate.ac_1" + position: + description: > + Vertical vane position. Possible options can be found in the + vane_vertical_positions state attribute. + example: "auto" diff --git a/homeassistant/components/melcloud/strings.json b/homeassistant/components/melcloud/strings.json index 477ca7eb5e2..f74398e9443 100644 --- a/homeassistant/components/melcloud/strings.json +++ b/homeassistant/components/melcloud/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "MELCloud", "step": { "user": { "title": "Connect to MELCloud", diff --git a/homeassistant/components/melcloud/translations/ca.json b/homeassistant/components/melcloud/translations/ca.json new file mode 100644 index 00000000000..f384905d1a4 --- /dev/null +++ b/homeassistant/components/melcloud/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "La integraci\u00f3 MELCloud ja est\u00e0 configurada amb aquest correu electr\u00f2nic. El testimoni d'acc\u00e9s s'ha actualitzat." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya de MELCloud.", + "username": "Correu electr\u00f2nic d'inici de sessi\u00f3 a MELCloud." + }, + "description": "Connecta\u2019t amb el teu compte de MELCloud.", + "title": "Connexi\u00f3 amb MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/da.json b/homeassistant/components/melcloud/translations/da.json new file mode 100644 index 00000000000..23263beb4c3 --- /dev/null +++ b/homeassistant/components/melcloud/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "MELCloud-integration er allerede konfigureret for denne e-mail. Adgangstoken er blevet opdateret." + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse. Pr\u00f8v igen", + "invalid_auth": "Ugyldig godkendelse", + "unknown": "Uventet fejl" + }, + "step": { + "user": { + "data": { + "password": "MELCloud-adgangskode.", + "username": "E-mail, der bruges til at logge ind p\u00e5 MELCloud." + }, + "description": "Opret forbindelse ved hj\u00e6lp af din MELCloud-konto.", + "title": "Opret forbindelse til MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/de.json b/homeassistant/components/melcloud/translations/de.json new file mode 100644 index 00000000000..2b4cf1316f3 --- /dev/null +++ b/homeassistant/components/melcloud/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Die MELCloud-Integration ist bereits f\u00fcr diese E-Mail konfiguriert. Das Zugriffstoken wurde aktualisiert." + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen. Bitte versuchen Sie es erneut.", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "MELCloud Passwort.", + "username": "E-Mail-Adresse f\u00fcr die Anmeldung bei MELCloud." + }, + "description": "Verbinden Sie sich mit Ihrem MELCloud-Konto.", + "title": "Stellen Sie eine Verbindung zu MELCloud her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/en.json b/homeassistant/components/melcloud/translations/en.json new file mode 100644 index 00000000000..4ab1ac566ef --- /dev/null +++ b/homeassistant/components/melcloud/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "MELCloud integration already configured for this email. Access token has been refreshed." + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "password": "MELCloud password.", + "username": "Email used to login to MELCloud." + }, + "description": "Connect using your MELCloud account.", + "title": "Connect to MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/es.json b/homeassistant/components/melcloud/translations/es.json new file mode 100644 index 00000000000..9dbb9d4f1f6 --- /dev/null +++ b/homeassistant/components/melcloud/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Integraci\u00f3n mELCloud ya configurada para este correo electr\u00f3nico. Se ha actualizado el token de acceso." + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntelo de nuevo.", + "invalid_auth": "Autentificaci\u00f3n inv\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a de MELCloud.", + "username": "Correo electr\u00f3nico utilizado para iniciar sesi\u00f3n en MELCloud." + }, + "description": "Con\u00e9ctate usando tu cuenta de MELCloud.", + "title": "Con\u00e9ctese a MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/fr.json b/homeassistant/components/melcloud/translations/fr.json new file mode 100644 index 00000000000..0385113787c --- /dev/null +++ b/homeassistant/components/melcloud/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe MELCloud.", + "username": "E-mail utilis\u00e9e pour vous connecter \u00e0 MELCloud." + }, + "description": "Se connecter en utilisant votre MELCloud compte.", + "title": "Se connecter \u00e0 MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/it.json b/homeassistant/components/melcloud/translations/it.json new file mode 100644 index 00000000000..c027473ad14 --- /dev/null +++ b/homeassistant/components/melcloud/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Integrazione MELCloud gi\u00e0 configurata per questa e-mail. Il token di accesso \u00e8 stato aggiornato." + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare.", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "password": "Password MELCloud.", + "username": "Email utilizzata per accedere a MELCloud." + }, + "description": "Connettiti utilizzando il tuo account MELCloud.", + "title": "Connettersi a MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/ko.json b/homeassistant/components/melcloud/translations/ko.json new file mode 100644 index 00000000000..5db3f001b4a --- /dev/null +++ b/homeassistant/components/melcloud/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc774\uba54\uc77c\uc5d0 \ub300\ud55c MELCloud \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc561\uc138\uc2a4 \ud1a0\ud070\uc774 \uac31\uc2e0\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": { + "password": "MELCloud \uc758 \ube44\ubc00\ubc88\ud638\ub97c \ub123\uc5b4\uc8fc\uc138\uc694.", + "username": "MELCloud \ub85c\uadf8\uc778 \uc774\uba54\uc77c \uc8fc\uc18c\ub97c \ub123\uc5b4\uc8fc\uc138\uc694." + }, + "description": "MELCloud \uacc4\uc815\uc73c\ub85c \uc5f0\uacb0\ud558\uc138\uc694.", + "title": "MELCloud \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/lb.json b/homeassistant/components/melcloud/translations/lb.json new file mode 100644 index 00000000000..9bcf41c23af --- /dev/null +++ b/homeassistant/components/melcloud/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "MELCloud Integratioun ass scho konfigur\u00e9iert fir d\u00ebs Email. Acc\u00e8s Jeton gouf erneiert." + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "password": "MELCloud Passwuert", + "username": "Email d\u00e9i benotz g\u00ebtt fir sech mat MELCloud ze verbannen" + }, + "description": "Verbann dech mat dengem MElCloud Kont.", + "title": "Mat MELCloud verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/nl.json b/homeassistant/components/melcloud/translations/nl.json new file mode 100644 index 00000000000..8ef8cc716b1 --- /dev/null +++ b/homeassistant/components/melcloud/translations/nl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "MELCloud integratie is al geconfigureerd voor deze e-mail. Toegangstoken is vernieuwd." + }, + "error": { + "cannot_connect": "Verbinding mislukt, probeer het opnieuw", + "invalid_auth": "Ongeldige authenticatie", + "unknown": "Onverwachte fout" + }, + "step": { + "user": { + "data": { + "password": "MELCloud wachtwoord.", + "username": "E-mail gebruikt om in te loggen op MELCloud." + }, + "description": "Maak verbinding via uw MELCloud account.", + "title": "Maak verbinding met MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/no.json b/homeassistant/components/melcloud/translations/no.json new file mode 100644 index 00000000000..fcdc00168eb --- /dev/null +++ b/homeassistant/components/melcloud/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "MELCloud integrasjon er allerede konfigurert p\u00e5 denne e-posten. Access token har blitt oppdatert." + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "password": "MELCloud passord.", + "username": "E-post som blir brukt til \u00e5 logge inn p\u00e5 MELCloud." + }, + "description": "Koble til ved hjelp av MELCloud-kontoen din.", + "title": "Koble til MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/pl.json b/homeassistant/components/melcloud/translations/pl.json new file mode 100644 index 00000000000..070a509cd10 --- /dev/null +++ b/homeassistant/components/melcloud/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Integracja MELCloud jest ju\u017c skonfigurowana dla tego adresu e-mail. Token dost\u0119pu zosta\u0142 od\u015bwie\u017cony." + }, + "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 MELCloud.", + "username": "Adres e-mail u\u017cywany do logowania do MELCloud" + }, + "description": "Po\u0142\u0105cz u\u017cywaj\u0105c swojego konta MELCloud.", + "title": "Po\u0142\u0105czenie z MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/pt.json b/homeassistant/components/melcloud/translations/pt.json new file mode 100644 index 00000000000..c09e8c63d11 --- /dev/null +++ b/homeassistant/components/melcloud/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe MELCloud" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/ru.json b/homeassistant/components/melcloud/translations/ru.json new file mode 100644 index 00000000000..3b23ca96bfc --- /dev/null +++ b/homeassistant/components/melcloud/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f MELCloud \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c MELCloud.", + "username": "\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 MELCloud." + }, + "description": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u0441\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c MELCloud.", + "title": "MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/sl.json b/homeassistant/components/melcloud/translations/sl.json new file mode 100644 index 00000000000..cd78c5f2c5a --- /dev/null +++ b/homeassistant/components/melcloud/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Za to e-po\u0161to je \u017ee konfigurirana integracija MELCloud. \u017deton za dostop je bil osve\u017een." + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "password": "MELCloud geslo.", + "username": "E-po\u0161tni naslov za prijavo v MELCloud." + }, + "description": "Pove\u017eite se s svojim ra\u010dunom MELCloud.", + "title": "Pove\u017eite se z MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/sv.json b/homeassistant/components/melcloud/translations/sv.json new file mode 100644 index 00000000000..f96b2c05ea0 --- /dev/null +++ b/homeassistant/components/melcloud/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "MELCloud-integration redan konfigurerad f\u00f6r den h\u00e4r e-postadressen. \u00c5tkomsttoken har uppdaterats." + }, + "error": { + "cannot_connect": "Det gick inte att ansluta, f\u00f6rs\u00f6k igen", + "invalid_auth": "Ogiltig autentisering", + "unknown": "Ov\u00e4ntat fel" + }, + "step": { + "user": { + "data": { + "password": "MELCloud-l\u00f6senord.", + "username": "E-post som anv\u00e4nds f\u00f6r att logga in p\u00e5 MELCloud." + }, + "description": "Anslut med ditt MELCloud-konto.", + "title": "Anslut till MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melcloud/translations/zh-Hant.json b/homeassistant/components/melcloud/translations/zh-Hant.json new file mode 100644 index 00000000000..0702ca3bbd5 --- /dev/null +++ b/homeassistant/components/melcloud/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u5df2\u4f7f\u7528\u6b64\u90f5\u4ef6\u8a2d\u5b9a MELCloud \u6574\u5408\u3002\u5b58\u53d6\u5bc6\u9470\u5df2\u66f4\u65b0\u3002" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "MELCloud \u5bc6\u78bc\u3002", + "username": "MELCloud \u767b\u5165\u90f5\u4ef6\u3002" + }, + "description": "\u4f7f\u7528 MELCloud \u5e33\u865f\u9032\u884c\u9023\u7dda\u3002", + "title": "\u9023\u7dda\u81f3 MELCloud" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/melissa/manifest.json b/homeassistant/components/melissa/manifest.json index bd69a1cc0b2..af29b0382c5 100644 --- a/homeassistant/components/melissa/manifest.json +++ b/homeassistant/components/melissa/manifest.json @@ -3,6 +3,5 @@ "name": "Melissa", "documentation": "https://www.home-assistant.io/integrations/melissa", "requirements": ["py-melissa-climate==2.0.0"], - "dependencies": [], "codeowners": ["@kennedyshead"] } diff --git a/homeassistant/components/meraki/manifest.json b/homeassistant/components/meraki/manifest.json index 2add8663555..f0de1aa7c1d 100644 --- a/homeassistant/components/meraki/manifest.json +++ b/homeassistant/components/meraki/manifest.json @@ -2,7 +2,6 @@ "domain": "meraki", "name": "Meraki", "documentation": "https://www.home-assistant.io/integrations/meraki", - "requirements": [], "dependencies": ["http"], "codeowners": [] } diff --git a/homeassistant/components/message_bird/manifest.json b/homeassistant/components/message_bird/manifest.json index fb87d06edfb..91018849449 100644 --- a/homeassistant/components/message_bird/manifest.json +++ b/homeassistant/components/message_bird/manifest.json @@ -3,6 +3,5 @@ "name": "MessageBird", "documentation": "https://www.home-assistant.io/integrations/message_bird", "requirements": ["messagebird==1.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/met/.translations/bg.json b/homeassistant/components/met/.translations/bg.json deleted file mode 100644 index aa85bed1d13..00000000000 --- a/homeassistant/components/met/.translations/bg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430" - }, - "step": { - "user": { - "data": { - "elevation": "\u041d\u0430\u0434\u043c\u043e\u0440\u0441\u043a\u0430 \u0432\u0438\u0441\u043e\u0447\u0438\u043d\u0430", - "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", - "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430", - "name": "\u0418\u043c\u0435" - }, - "description": "\u041d\u043e\u0440\u0432\u0435\u0436\u043a\u0438 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442", - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/ca.json b/homeassistant/components/met/.translations/ca.json deleted file mode 100644 index 5335bfd48ea..00000000000 --- a/homeassistant/components/met/.translations/ca.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nom ja existeix" - }, - "step": { - "user": { - "data": { - "elevation": "Altitud", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nom" - }, - "description": "Meteorologisk institutt", - "title": "Ubicaci\u00f3" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/da.json b/homeassistant/components/met/.translations/da.json deleted file mode 100644 index e36a6511aa3..00000000000 --- a/homeassistant/components/met/.translations/da.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Navnet findes allerede" - }, - "step": { - "user": { - "data": { - "elevation": "Elevation", - "latitude": "Breddegrad", - "longitude": "L\u00e6ngdegrad", - "name": "Navn" - }, - "description": "Meteorologisk institutt", - "title": "Lokalitet" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/de.json b/homeassistant/components/met/.translations/de.json deleted file mode 100644 index 2fd772c8619..00000000000 --- a/homeassistant/components/met/.translations/de.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Ort existiert bereits" - }, - "step": { - "user": { - "data": { - "elevation": "H\u00f6he", - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad", - "name": "Name" - }, - "description": "Meteorologisches Institut", - "title": "Standort" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/en.json b/homeassistant/components/met/.translations/en.json deleted file mode 100644 index 93d028b0626..00000000000 --- a/homeassistant/components/met/.translations/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Location already exists" - }, - "step": { - "user": { - "data": { - "elevation": "Elevation", - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Name" - }, - "description": "Meteorologisk institutt", - "title": "Location" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/es-419.json b/homeassistant/components/met/.translations/es-419.json deleted file mode 100644 index d744de150d2..00000000000 --- a/homeassistant/components/met/.translations/es-419.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nombre ya existe" - }, - "step": { - "user": { - "data": { - "elevation": "Elevaci\u00f3n", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre" - }, - "description": "Meteorologisk institutt", - "title": "Ubicaci\u00f3n" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/es.json b/homeassistant/components/met/.translations/es.json deleted file mode 100644 index a475518bd85..00000000000 --- a/homeassistant/components/met/.translations/es.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "La ubicaci\u00f3n ya existe" - }, - "step": { - "user": { - "data": { - "elevation": "Altitud", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre" - }, - "description": "Instituto de meteorolog\u00eda", - "title": "Ubicaci\u00f3n" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/fr.json b/homeassistant/components/met/.translations/fr.json deleted file mode 100644 index 164cb13967b..00000000000 --- a/homeassistant/components/met/.translations/fr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Emplacement d\u00e9j\u00e0 existant" - }, - "step": { - "user": { - "data": { - "elevation": "Altitude", - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nom" - }, - "description": "Institut m\u00e9t\u00e9orologique", - "title": "Emplacement" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/hr.json b/homeassistant/components/met/.translations/hr.json deleted file mode 100644 index 6505229355c..00000000000 --- a/homeassistant/components/met/.translations/hr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Ime ve\u0107 postoji" - }, - "step": { - "user": { - "data": { - "elevation": "Elevacija", - "latitude": "Zemljopisna \u0161irina", - "longitude": "Zemljopisna du\u017eina", - "name": "Ime" - }, - "description": "Meteorolo\u0161ki institutt", - "title": "Lokacija" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/hu.json b/homeassistant/components/met/.translations/hu.json deleted file mode 100644 index dcbc40b4c71..00000000000 --- a/homeassistant/components/met/.translations/hu.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "A hely m\u00e1r l\u00e9tezik" - }, - "step": { - "user": { - "data": { - "elevation": "Magass\u00e1g", - "latitude": "Sz\u00e9less\u00e9g", - "longitude": "Hossz\u00fas\u00e1g", - "name": "N\u00e9v" - }, - "description": "Meteorol\u00f3giai int\u00e9zet", - "title": "Elhelyezked\u00e9s" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/it.json b/homeassistant/components/met/.translations/it.json deleted file mode 100644 index a1cfd12e8cd..00000000000 --- a/homeassistant/components/met/.translations/it.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "La posizione esiste gi\u00e0" - }, - "step": { - "user": { - "data": { - "elevation": "Altitudine", - "latitude": "Latitudine", - "longitude": "Longitudine", - "name": "Nome" - }, - "description": "Meteorologisk institutt", - "title": "Posizione" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/ko.json b/homeassistant/components/met/.translations/ko.json deleted file mode 100644 index 81a98b9754f..00000000000 --- a/homeassistant/components/met/.translations/ko.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\uc704\uce58\uac00 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "elevation": "\uace0\ub3c4", - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4", - "name": "\uc774\ub984" - }, - "description": "\ub178\ub974\uc6e8\uc774 \uae30\uc0c1 \uc5f0\uad6c\uc18c (Meteorologisk institutt)", - "title": "\uc704\uce58" - } - }, - "title": "\ub178\ub974\uc6e8\uc774 \uae30\uc0c1 \uc5f0\uad6c\uc18c (Met.no)" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/lb.json b/homeassistant/components/met/.translations/lb.json deleted file mode 100644 index 9f91d37c233..00000000000 --- a/homeassistant/components/met/.translations/lb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Standuert g\u00ebtt et schonn" - }, - "step": { - "user": { - "data": { - "elevation": "H\u00e9icht", - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad", - "name": "Numm" - }, - "description": "Meterologeschen Institut", - "title": "Uertschaft" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/nl.json b/homeassistant/components/met/.translations/nl.json deleted file mode 100644 index c8b120b855a..00000000000 --- a/homeassistant/components/met/.translations/nl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Locatie bestaat al." - }, - "step": { - "user": { - "data": { - "elevation": "Hoogte", - "latitude": "Breedtegraad", - "longitude": "Lengtegraad", - "name": "Naam" - }, - "description": "Meteorologisch institutt", - "title": "Locatie" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/nn.json b/homeassistant/components/met/.translations/nn.json deleted file mode 100644 index 6daa5b2657a..00000000000 --- a/homeassistant/components/met/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "name": "Namn" - } - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/no.json b/homeassistant/components/met/.translations/no.json deleted file mode 100644 index 9a3ef350ab1..00000000000 --- a/homeassistant/components/met/.translations/no.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Lokasjonen finnes allerede" - }, - "step": { - "user": { - "data": { - "elevation": "Elevasjon", - "latitude": "Breddegrad", - "longitude": "Lengdegrad", - "name": "Navn" - }, - "description": "Meteorologisk institutt", - "title": "Lokasjon" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/pl.json b/homeassistant/components/met/.translations/pl.json deleted file mode 100644 index e22ac763d56..00000000000 --- a/homeassistant/components/met/.translations/pl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Lokalizacja ju\u017c istnieje." - }, - "step": { - "user": { - "data": { - "elevation": "Wysoko\u015b\u0107", - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna", - "name": "Nazwa" - }, - "description": "Instytut Meteorologiczny", - "title": "Lokalizacja" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/pt-BR.json b/homeassistant/components/met/.translations/pt-BR.json deleted file mode 100644 index ab93d0bbef7..00000000000 --- a/homeassistant/components/met/.translations/pt-BR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "O nome j\u00e1 existe" - }, - "step": { - "user": { - "data": { - "elevation": "Eleva\u00e7\u00e3o", - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nome" - }, - "description": "Instituto de Meteorologia", - "title": "Localiza\u00e7\u00e3o" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/ru.json b/homeassistant/components/met/.translations/ru.json deleted file mode 100644 index 768152084aa..00000000000 --- a/homeassistant/components/met/.translations/ru.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\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." - }, - "step": { - "user": { - "data": { - "elevation": "\u0412\u044b\u0441\u043e\u0442\u0430", - "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", - "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "description": "\u041d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442.", - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u041c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430 \u041d\u043e\u0440\u0432\u0435\u0433\u0438\u0438 (Met.no)" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/sl.json b/homeassistant/components/met/.translations/sl.json deleted file mode 100644 index 71ffdaf8509..00000000000 --- a/homeassistant/components/met/.translations/sl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Lokacija \u017ee obstaja" - }, - "step": { - "user": { - "data": { - "elevation": "Nadmorska vi\u0161ina", - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina", - "name": "Ime" - }, - "description": "Meteorolo\u0161ki institut", - "title": "Lokacija" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/sv.json b/homeassistant/components/met/.translations/sv.json deleted file mode 100644 index d8b461913da..00000000000 --- a/homeassistant/components/met/.translations/sv.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Plats finns redan" - }, - "step": { - "user": { - "data": { - "elevation": "H\u00f6jd", - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Namn" - }, - "description": "Meteorologisk institutt", - "title": "Position" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/zh-Hant.json b/homeassistant/components/met/.translations/zh-Hant.json deleted file mode 100644 index de7c34ffc87..00000000000 --- a/homeassistant/components/met/.translations/zh-Hant.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u8a72\u5ea7\u6a19\u5df2\u5b58\u5728" - }, - "step": { - "user": { - "data": { - "elevation": "\u6d77\u62d4", - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6", - "name": "\u540d\u7a31" - }, - "description": "Meteorologisk institutt", - "title": "\u5ea7\u6a19" - } - }, - "title": "Met.no" - } -} \ No newline at end of file diff --git a/homeassistant/components/met/manifest.json b/homeassistant/components/met/manifest.json index 62aeaf21de7..baf2c1b7e3e 100644 --- a/homeassistant/components/met/manifest.json +++ b/homeassistant/components/met/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/met", "requirements": ["pyMetno==0.4.6"], - "dependencies": [], "codeowners": ["@danielhiversen"] } diff --git a/homeassistant/components/met/strings.json b/homeassistant/components/met/strings.json index 0c52e624418..814df01b49e 100644 --- a/homeassistant/components/met/strings.json +++ b/homeassistant/components/met/strings.json @@ -1,20 +1,17 @@ { - "config": { - "title": "Met.no", - "step": { - "user": { - "title": "Location", - "description": "Meteorologisk institutt", - "data": { - "name": "Name", - "latitude": "Latitude", - "longitude": "Longitude", - "elevation": "Elevation" - } - } - }, - "error": { - "name_exists": "Location already exists" + "config": { + "step": { + "user": { + "title": "Location", + "description": "Meteorologisk institutt", + "data": { + "name": "Name", + "latitude": "Latitude", + "longitude": "Longitude", + "elevation": "Elevation" } - } + } + }, + "error": { "name_exists": "Location already exists" } + } } diff --git a/homeassistant/components/met/translations/bg.json b/homeassistant/components/met/translations/bg.json new file mode 100644 index 00000000000..895bf9c5bf7 --- /dev/null +++ b/homeassistant/components/met/translations/bg.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430" + }, + "step": { + "user": { + "data": { + "elevation": "\u041d\u0430\u0434\u043c\u043e\u0440\u0441\u043a\u0430 \u0432\u0438\u0441\u043e\u0447\u0438\u043d\u0430", + "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", + "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430", + "name": "\u0418\u043c\u0435" + }, + "description": "\u041d\u043e\u0440\u0432\u0435\u0436\u043a\u0438 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442", + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/ca.json b/homeassistant/components/met/translations/ca.json new file mode 100644 index 00000000000..242232663f0 --- /dev/null +++ b/homeassistant/components/met/translations/ca.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "El nom ja existeix" + }, + "step": { + "user": { + "data": { + "elevation": "Altitud", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nom" + }, + "description": "Meteorologisk institutt", + "title": "Ubicaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/da.json b/homeassistant/components/met/translations/da.json new file mode 100644 index 00000000000..7a530e44fb3 --- /dev/null +++ b/homeassistant/components/met/translations/da.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Navnet findes allerede" + }, + "step": { + "user": { + "data": { + "elevation": "Elevation", + "latitude": "Breddegrad", + "longitude": "L\u00e6ngdegrad", + "name": "Navn" + }, + "description": "Meteorologisk institutt", + "title": "Lokalitet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/de.json b/homeassistant/components/met/translations/de.json new file mode 100644 index 00000000000..61d4dc4660b --- /dev/null +++ b/homeassistant/components/met/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Ort existiert bereits" + }, + "step": { + "user": { + "data": { + "elevation": "H\u00f6he", + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "name": "Name" + }, + "description": "Meteorologisches Institut", + "title": "Standort" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/en.json b/homeassistant/components/met/translations/en.json new file mode 100644 index 00000000000..8c57e4226a0 --- /dev/null +++ b/homeassistant/components/met/translations/en.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Location already exists" + }, + "step": { + "user": { + "data": { + "elevation": "Elevation", + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Name" + }, + "description": "Meteorologisk institutt", + "title": "Location" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/es-419.json b/homeassistant/components/met/translations/es-419.json new file mode 100644 index 00000000000..fc3d4f64fc7 --- /dev/null +++ b/homeassistant/components/met/translations/es-419.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "El nombre ya existe" + }, + "step": { + "user": { + "data": { + "elevation": "Elevaci\u00f3n", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre" + }, + "description": "Meteorologisk institutt", + "title": "Ubicaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/es.json b/homeassistant/components/met/translations/es.json new file mode 100644 index 00000000000..e9cfbce5291 --- /dev/null +++ b/homeassistant/components/met/translations/es.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "La ubicaci\u00f3n ya existe" + }, + "step": { + "user": { + "data": { + "elevation": "Altitud", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre" + }, + "description": "Instituto de meteorolog\u00eda", + "title": "Ubicaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/fr.json b/homeassistant/components/met/translations/fr.json new file mode 100644 index 00000000000..9f43be5d93b --- /dev/null +++ b/homeassistant/components/met/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Emplacement d\u00e9j\u00e0 existant" + }, + "step": { + "user": { + "data": { + "elevation": "Altitude", + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nom" + }, + "description": "Institut m\u00e9t\u00e9orologique", + "title": "Emplacement" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/hr.json b/homeassistant/components/met/translations/hr.json new file mode 100644 index 00000000000..5b57e11ac6e --- /dev/null +++ b/homeassistant/components/met/translations/hr.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Ime ve\u0107 postoji" + }, + "step": { + "user": { + "data": { + "elevation": "Elevacija", + "latitude": "Zemljopisna \u0161irina", + "longitude": "Zemljopisna du\u017eina", + "name": "Ime" + }, + "description": "Meteorolo\u0161ki institutt", + "title": "Lokacija" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/hu.json b/homeassistant/components/met/translations/hu.json new file mode 100644 index 00000000000..8196d4bffe9 --- /dev/null +++ b/homeassistant/components/met/translations/hu.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "A hely m\u00e1r l\u00e9tezik" + }, + "step": { + "user": { + "data": { + "elevation": "Magass\u00e1g", + "latitude": "Sz\u00e9less\u00e9g", + "longitude": "Hossz\u00fas\u00e1g", + "name": "N\u00e9v" + }, + "description": "Meteorol\u00f3giai int\u00e9zet", + "title": "Elhelyezked\u00e9s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/id.json b/homeassistant/components/met/translations/id.json similarity index 100% rename from homeassistant/components/met/.translations/id.json rename to homeassistant/components/met/translations/id.json diff --git a/homeassistant/components/met/translations/it.json b/homeassistant/components/met/translations/it.json new file mode 100644 index 00000000000..18433ab1697 --- /dev/null +++ b/homeassistant/components/met/translations/it.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "La posizione esiste gi\u00e0" + }, + "step": { + "user": { + "data": { + "elevation": "Altitudine", + "latitude": "Latitudine", + "longitude": "Longitudine", + "name": "Nome" + }, + "description": "Meteorologisk institutt", + "title": "Posizione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/ko.json b/homeassistant/components/met/translations/ko.json new file mode 100644 index 00000000000..846aca7f4ea --- /dev/null +++ b/homeassistant/components/met/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\uc704\uce58\uac00 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "elevation": "\uace0\ub3c4", + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "name": "\uc774\ub984" + }, + "description": "\ub178\ub974\uc6e8\uc774 \uae30\uc0c1 \uc5f0\uad6c\uc18c (Meteorologisk institutt)", + "title": "\uc704\uce58" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/lb.json b/homeassistant/components/met/translations/lb.json new file mode 100644 index 00000000000..88041b9abe0 --- /dev/null +++ b/homeassistant/components/met/translations/lb.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Standuert g\u00ebtt et schonn" + }, + "step": { + "user": { + "data": { + "elevation": "H\u00e9icht", + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad", + "name": "Numm" + }, + "description": "Meterologeschen Institut", + "title": "Uertschaft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/nl.json b/homeassistant/components/met/translations/nl.json new file mode 100644 index 00000000000..3cb932e6095 --- /dev/null +++ b/homeassistant/components/met/translations/nl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Locatie bestaat al." + }, + "step": { + "user": { + "data": { + "elevation": "Hoogte", + "latitude": "Breedtegraad", + "longitude": "Lengtegraad", + "name": "Naam" + }, + "description": "Meteorologisch institutt", + "title": "Locatie" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/nn.json b/homeassistant/components/met/translations/nn.json new file mode 100644 index 00000000000..0e024a0e1eb --- /dev/null +++ b/homeassistant/components/met/translations/nn.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Namn" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/no.json b/homeassistant/components/met/translations/no.json new file mode 100644 index 00000000000..a46b53faf8c --- /dev/null +++ b/homeassistant/components/met/translations/no.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Lokasjonen finnes allerede" + }, + "step": { + "user": { + "data": { + "elevation": "Elevasjon", + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "name": "Navn" + }, + "description": "Meteorologisk institutt", + "title": "Lokasjon" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/pl.json b/homeassistant/components/met/translations/pl.json new file mode 100644 index 00000000000..a0438b6af8c --- /dev/null +++ b/homeassistant/components/met/translations/pl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Lokalizacja ju\u017c istnieje." + }, + "step": { + "user": { + "data": { + "elevation": "Wysoko\u015b\u0107", + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "name": "Nazwa" + }, + "description": "Instytut Meteorologiczny", + "title": "Lokalizacja" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/pt-BR.json b/homeassistant/components/met/translations/pt-BR.json new file mode 100644 index 00000000000..f16aac2174d --- /dev/null +++ b/homeassistant/components/met/translations/pt-BR.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "O nome j\u00e1 existe" + }, + "step": { + "user": { + "data": { + "elevation": "Eleva\u00e7\u00e3o", + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nome" + }, + "description": "Instituto de Meteorologia", + "title": "Localiza\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/pt.json b/homeassistant/components/met/translations/pt.json similarity index 100% rename from homeassistant/components/met/.translations/pt.json rename to homeassistant/components/met/translations/pt.json diff --git a/homeassistant/components/met/translations/ru.json b/homeassistant/components/met/translations/ru.json new file mode 100644 index 00000000000..85333490f3c --- /dev/null +++ b/homeassistant/components/met/translations/ru.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\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." + }, + "step": { + "user": { + "data": { + "elevation": "\u0412\u044b\u0441\u043e\u0442\u0430", + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u041d\u043e\u0440\u0432\u0435\u0436\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442.", + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/sl.json b/homeassistant/components/met/translations/sl.json new file mode 100644 index 00000000000..d424f196997 --- /dev/null +++ b/homeassistant/components/met/translations/sl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Lokacija \u017ee obstaja" + }, + "step": { + "user": { + "data": { + "elevation": "Nadmorska vi\u0161ina", + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina", + "name": "Ime" + }, + "description": "Meteorolo\u0161ki institut", + "title": "Lokacija" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/translations/sv.json b/homeassistant/components/met/translations/sv.json new file mode 100644 index 00000000000..9475a0b2915 --- /dev/null +++ b/homeassistant/components/met/translations/sv.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "Plats finns redan" + }, + "step": { + "user": { + "data": { + "elevation": "H\u00f6jd", + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Namn" + }, + "description": "Meteorologisk institutt", + "title": "Position" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/met/.translations/vi.json b/homeassistant/components/met/translations/vi.json similarity index 100% rename from homeassistant/components/met/.translations/vi.json rename to homeassistant/components/met/translations/vi.json diff --git a/homeassistant/components/met/.translations/zh-Hans.json b/homeassistant/components/met/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/met/.translations/zh-Hans.json rename to homeassistant/components/met/translations/zh-Hans.json diff --git a/homeassistant/components/met/translations/zh-Hant.json b/homeassistant/components/met/translations/zh-Hant.json new file mode 100644 index 00000000000..0128f0ad448 --- /dev/null +++ b/homeassistant/components/met/translations/zh-Hant.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "name_exists": "\u8a72\u5ea7\u6a19\u5df2\u5b58\u5728" + }, + "step": { + "user": { + "data": { + "elevation": "\u6d77\u62d4", + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "name": "\u540d\u7a31" + }, + "description": "Meteorologisk institutt", + "title": "\u5ea7\u6a19" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/ca.json b/homeassistant/components/meteo_france/.translations/ca.json deleted file mode 100644 index aeceb80a063..00000000000 --- a/homeassistant/components/meteo_france/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ciutat ja configurada", - "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard" - }, - "step": { - "user": { - "data": { - "city": "Ciutat" - }, - "description": "Introdueix el codi postal (nom\u00e9s recomanat per Fran\u00e7a) o nom de la ciutat", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/da.json b/homeassistant/components/meteo_france/.translations/da.json deleted file mode 100644 index 7c49d6f15ee..00000000000 --- a/homeassistant/components/meteo_france/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "By er allerede konfigureret", - "unknown": "Ukendt fejl: Pr\u00f8v igen senere" - }, - "step": { - "user": { - "data": { - "city": "By" - }, - "description": "Indtast postnummer (kun for Frankrig, anbefalet) eller bynavn", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/de.json b/homeassistant/components/meteo_france/.translations/de.json deleted file mode 100644 index 8f05ad18df3..00000000000 --- a/homeassistant/components/meteo_france/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Stadt bereits konfiguriert", - "unknown": "Unbekannter Fehler: Bitte versuchen Sie es sp\u00e4ter erneut" - }, - "step": { - "user": { - "data": { - "city": "Stadt" - }, - "description": "Geben Sie die Postleitzahl (nur f\u00fcr Frankreich empfohlen) oder den St\u00e4dtenamen ein", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/en.json b/homeassistant/components/meteo_france/.translations/en.json deleted file mode 100644 index 804ad9d67b1..00000000000 --- a/homeassistant/components/meteo_france/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "City already configured", - "unknown": "Unknown error: please retry later" - }, - "step": { - "user": { - "data": { - "city": "City" - }, - "description": "Enter the postal code (only for France, recommended) or city name", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/es.json b/homeassistant/components/meteo_france/.translations/es.json deleted file mode 100644 index 3cd7ee56252..00000000000 --- a/homeassistant/components/meteo_france/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La ciudad ya est\u00e1 configurada", - "unknown": "Error desconocido: por favor, vuelva a intentarlo m\u00e1s tarde" - }, - "step": { - "user": { - "data": { - "city": "Ciudad" - }, - "description": "Introduzca el c\u00f3digo postal (solo para Francia, recomendado) o el nombre de la ciudad", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/fr.json b/homeassistant/components/meteo_france/.translations/fr.json deleted file mode 100644 index 7dff0d237fd..00000000000 --- a/homeassistant/components/meteo_france/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ville d\u00e9j\u00e0 configur\u00e9e", - "unknown": "Erreur inconnue: veuillez r\u00e9essayer plus tard" - }, - "step": { - "user": { - "data": { - "city": "Ville" - }, - "description": "Entrez le code postal (uniquement pour la France, recommand\u00e9) ou le nom de la ville", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/hu.json b/homeassistant/components/meteo_france/.translations/hu.json deleted file mode 100644 index f1719f4bf30..00000000000 --- a/homeassistant/components/meteo_france/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A v\u00e1ros m\u00e1r konfigur\u00e1lva van", - "unknown": "Ismeretlen hiba: k\u00e9rj\u00fck, pr\u00f3b\u00e1lja \u00fajra k\u00e9s\u0151bb" - }, - "step": { - "user": { - "data": { - "city": "V\u00e1ros" - }, - "description": "\u00cdrja be az ir\u00e1ny\u00edt\u00f3sz\u00e1mot (csak Franciaorsz\u00e1g eset\u00e9ben aj\u00e1nlott) vagy a v\u00e1ros nev\u00e9t", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/it.json b/homeassistant/components/meteo_france/.translations/it.json deleted file mode 100644 index 5a067430906..00000000000 --- a/homeassistant/components/meteo_france/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Citt\u00e0 gi\u00e0 configurata", - "unknown": "Errore sconosciuto: riprovare pi\u00f9 tardi" - }, - "step": { - "user": { - "data": { - "city": "Citt\u00e0" - }, - "description": "Inserisci il codice postale (solo per la Francia, consigliato) o il nome della citt\u00e0", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/ko.json b/homeassistant/components/meteo_france/.translations/ko.json deleted file mode 100644 index 8b2c7f49735..00000000000 --- a/homeassistant/components/meteo_france/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ub3c4\uc2dc\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" - }, - "step": { - "user": { - "data": { - "city": "\ub3c4\uc2dc" - }, - "description": "\uc6b0\ud3b8\ubc88\ud638 (\ud504\ub791\uc2a4) \ub610\ub294 \ub3c4\uc2dc \uc774\ub984\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "\ud504\ub791\uc2a4 \uae30\uc0c1\uccad (M\u00e9t\u00e9o-France)" - } - }, - "title": "\ud504\ub791\uc2a4 \uae30\uc0c1\uccad (M\u00e9t\u00e9o-France)" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/lb.json b/homeassistant/components/meteo_france/.translations/lb.json deleted file mode 100644 index e2ee25882be..00000000000 --- a/homeassistant/components/meteo_france/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Stad ass scho konfigur\u00e9iert", - "unknown": "Onbekannte Feeler: prob\u00e9iert sp\u00e9ider nach emol" - }, - "step": { - "user": { - "data": { - "city": "Stad" - }, - "description": "Gitt de Postcode an (n\u00ebmme fir Frankr\u00e4ich, recommand\u00e9iert) oder den Numm vun der Stad", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/nl.json b/homeassistant/components/meteo_france/.translations/nl.json deleted file mode 100644 index 648ef0c5fbd..00000000000 --- a/homeassistant/components/meteo_france/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Stad al geconfigureerd", - "unknown": "Onbekende fout: probeer het later nog eens" - }, - "step": { - "user": { - "data": { - "city": "Stad" - }, - "description": "Vul de postcode (alleen voor Frankrijk, aanbevolen) of de plaatsnaam in", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/no.json b/homeassistant/components/meteo_france/.translations/no.json deleted file mode 100644 index dc10ffd6a0f..00000000000 --- a/homeassistant/components/meteo_france/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Byen er allerede konfigurert", - "unknown": "Ukjent feil: pr\u00f8v p\u00e5 nytt senere" - }, - "step": { - "user": { - "data": { - "city": "By" - }, - "description": "Skriv inn postnummeret (bare for Frankrike, anbefalt) eller bynavn", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/pl.json b/homeassistant/components/meteo_france/.translations/pl.json deleted file mode 100644 index 38aa1944fac..00000000000 --- a/homeassistant/components/meteo_france/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Miasto jest ju\u017c skonfigurowane.", - "unknown": "Nieznany b\u0142\u0105d: spr\u00f3buj ponownie p\u00f3\u017aniej" - }, - "step": { - "user": { - "data": { - "city": "Miasto" - }, - "description": "Wprowad\u017a kod pocztowy (tylko dla Francji, zalecane) lub nazw\u0119 miasta", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/ru.json b/homeassistant/components/meteo_france/.translations/ru.json deleted file mode 100644 index 6aaff5f723f..00000000000 --- a/homeassistant/components/meteo_france/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435." - }, - "step": { - "user": { - "data": { - "city": "\u0413\u043e\u0440\u043e\u0434" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0424\u0440\u0430\u043d\u0446\u0438\u0438) \u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0440\u043e\u0434\u0430", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/sl.json b/homeassistant/components/meteo_france/.translations/sl.json deleted file mode 100644 index 845a89c4775..00000000000 --- a/homeassistant/components/meteo_france/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mesto je \u017ee konfigurirano", - "unknown": "Neznana napaka: poskusite pozneje" - }, - "step": { - "user": { - "data": { - "city": "Mesto" - }, - "description": "Vnesite po\u0161tno \u0161tevilko (samo za Francijo) ali ime mesta", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/sv.json b/homeassistant/components/meteo_france/.translations/sv.json deleted file mode 100644 index a7d021066d5..00000000000 --- a/homeassistant/components/meteo_france/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Staden har redan konfigurerats", - "unknown": "Ok\u00e4nt fel: f\u00f6rs\u00f6k igen senare" - }, - "step": { - "user": { - "data": { - "city": "Stad" - }, - "description": "Ange postnumret (endast f\u00f6r Frankrike, rekommenderat) eller ortsnamn", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/zh-Hant.json b/homeassistant/components/meteo_france/.translations/zh-Hant.json deleted file mode 100644 index d3a35a6c713..00000000000 --- a/homeassistant/components/meteo_france/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u57ce\u5e02\u5df2\u8a2d\u5b9a\u5b8c\u6210", - "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66" - }, - "step": { - "user": { - "data": { - "city": "\u57ce\u5e02\u540d\u7a31" - }, - "description": "\u8f38\u5165\u90f5\u905e\u5340\u865f\uff08\u50c5\u652f\u63f4\u6cd5\u570b\uff09\u6216\u57ce\u5e02\u540d\u7a31", - "title": "M\u00e9t\u00e9o-France" - } - }, - "title": "M\u00e9t\u00e9o-France" - } -} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/manifest.json b/homeassistant/components/meteo_france/manifest.json index 77f8fca984d..572fd29b549 100644 --- a/homeassistant/components/meteo_france/manifest.json +++ b/homeassistant/components/meteo_france/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/meteo_france", "requirements": ["meteofrance==0.3.7", "vigilancemeteo==3.0.0"], - "dependencies": [], "codeowners": ["@victorcerutti", "@oncleben31", "@Quentame"] } diff --git a/homeassistant/components/meteo_france/strings.json b/homeassistant/components/meteo_france/strings.json index 8bb02f28bd0..fc6e426b8d4 100644 --- a/homeassistant/components/meteo_france/strings.json +++ b/homeassistant/components/meteo_france/strings.json @@ -1,18 +1,15 @@ { - "config": { - "title": "Météo-France", - "step": { - "user": { - "title": "Météo-France", - "description": "Enter the postal code (only for France, recommended) or city name", - "data": { - "city": "City" - } - } - }, - "abort":{ - "already_configured": "City already configured", - "unknown": "Unknown error: please retry later" - } + "config": { + "step": { + "user": { + "title": "M\u00e9t\u00e9o-France", + "description": "Enter the postal code (only for France, recommended) or city name", + "data": { "city": "City" } + } + }, + "abort": { + "already_configured": "City already configured", + "unknown": "Unknown error: please retry later" } + } } diff --git a/homeassistant/components/meteo_france/translations/ca.json b/homeassistant/components/meteo_france/translations/ca.json new file mode 100644 index 00000000000..02f43e0d4a8 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Ciutat ja configurada", + "unknown": "Error desconegut: torna-ho a provar m\u00e9s tard" + }, + "step": { + "user": { + "data": { + "city": "Ciutat" + }, + "description": "Introdueix el codi postal (nom\u00e9s recomanat per Fran\u00e7a) o nom de la ciutat", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/da.json b/homeassistant/components/meteo_france/translations/da.json new file mode 100644 index 00000000000..d0fe7cba892 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "By er allerede konfigureret", + "unknown": "Ukendt fejl: Pr\u00f8v igen senere" + }, + "step": { + "user": { + "data": { + "city": "By" + }, + "description": "Indtast postnummer (kun for Frankrig, anbefalet) eller bynavn", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/de.json b/homeassistant/components/meteo_france/translations/de.json new file mode 100644 index 00000000000..1c05beac361 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Stadt bereits konfiguriert", + "unknown": "Unbekannter Fehler: Bitte versuchen Sie es sp\u00e4ter erneut" + }, + "step": { + "user": { + "data": { + "city": "Stadt" + }, + "description": "Geben Sie die Postleitzahl (nur f\u00fcr Frankreich empfohlen) oder den St\u00e4dtenamen ein", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/en.json b/homeassistant/components/meteo_france/translations/en.json new file mode 100644 index 00000000000..7b161dcda07 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "City already configured", + "unknown": "Unknown error: please retry later" + }, + "step": { + "user": { + "data": { + "city": "City" + }, + "description": "Enter the postal code (only for France, recommended) or city name", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/es.json b/homeassistant/components/meteo_france/translations/es.json new file mode 100644 index 00000000000..4c04a5d32c3 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "La ciudad ya est\u00e1 configurada", + "unknown": "Error desconocido: por favor, vuelva a intentarlo m\u00e1s tarde" + }, + "step": { + "user": { + "data": { + "city": "Ciudad" + }, + "description": "Introduzca el c\u00f3digo postal (solo para Francia, recomendado) o el nombre de la ciudad", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/fr.json b/homeassistant/components/meteo_france/translations/fr.json new file mode 100644 index 00000000000..9ad5f298fba --- /dev/null +++ b/homeassistant/components/meteo_france/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Ville d\u00e9j\u00e0 configur\u00e9e", + "unknown": "Erreur inconnue: veuillez r\u00e9essayer plus tard" + }, + "step": { + "user": { + "data": { + "city": "Ville" + }, + "description": "Entrez le code postal (uniquement pour la France, recommand\u00e9) ou le nom de la ville", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/hu.json b/homeassistant/components/meteo_france/translations/hu.json new file mode 100644 index 00000000000..83333c60fe8 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "A v\u00e1ros m\u00e1r konfigur\u00e1lva van", + "unknown": "Ismeretlen hiba: k\u00e9rj\u00fck, pr\u00f3b\u00e1lja \u00fajra k\u00e9s\u0151bb" + }, + "step": { + "user": { + "data": { + "city": "V\u00e1ros" + }, + "description": "\u00cdrja be az ir\u00e1ny\u00edt\u00f3sz\u00e1mot (csak Franciaorsz\u00e1g eset\u00e9ben aj\u00e1nlott) vagy a v\u00e1ros nev\u00e9t", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/it.json b/homeassistant/components/meteo_france/translations/it.json new file mode 100644 index 00000000000..23b40164c7b --- /dev/null +++ b/homeassistant/components/meteo_france/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Citt\u00e0 gi\u00e0 configurata", + "unknown": "Errore sconosciuto: riprovare pi\u00f9 tardi" + }, + "step": { + "user": { + "data": { + "city": "Citt\u00e0" + }, + "description": "Inserisci il codice postale (solo per la Francia, consigliato) o il nome della citt\u00e0", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/ko.json b/homeassistant/components/meteo_france/translations/ko.json new file mode 100644 index 00000000000..166ddaa68ab --- /dev/null +++ b/homeassistant/components/meteo_france/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\ub3c4\uc2dc\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694" + }, + "step": { + "user": { + "data": { + "city": "\ub3c4\uc2dc" + }, + "description": "\uc6b0\ud3b8\ubc88\ud638 (\ud504\ub791\uc2a4) \ub610\ub294 \ub3c4\uc2dc \uc774\ub984\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "\ud504\ub791\uc2a4 \uae30\uc0c1\uccad (M\u00e9t\u00e9o-France)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/lb.json b/homeassistant/components/meteo_france/translations/lb.json new file mode 100644 index 00000000000..1ec89b44d9f --- /dev/null +++ b/homeassistant/components/meteo_france/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Stad ass scho konfigur\u00e9iert", + "unknown": "Onbekannte Feeler: prob\u00e9iert sp\u00e9ider nach emol" + }, + "step": { + "user": { + "data": { + "city": "Stad" + }, + "description": "Gitt de Postcode an (n\u00ebmme fir Frankr\u00e4ich, recommand\u00e9iert) oder den Numm vun der Stad", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/.translations/lv.json b/homeassistant/components/meteo_france/translations/lv.json similarity index 100% rename from homeassistant/components/meteo_france/.translations/lv.json rename to homeassistant/components/meteo_france/translations/lv.json diff --git a/homeassistant/components/meteo_france/translations/nl.json b/homeassistant/components/meteo_france/translations/nl.json new file mode 100644 index 00000000000..27dfb56f8d7 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Stad al geconfigureerd", + "unknown": "Onbekende fout: probeer het later nog eens" + }, + "step": { + "user": { + "data": { + "city": "Stad" + }, + "description": "Vul de postcode (alleen voor Frankrijk, aanbevolen) of de plaatsnaam in", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/no.json b/homeassistant/components/meteo_france/translations/no.json new file mode 100644 index 00000000000..cecc1d75c6a --- /dev/null +++ b/homeassistant/components/meteo_france/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Byen er allerede konfigurert", + "unknown": "Ukjent feil: pr\u00f8v p\u00e5 nytt senere" + }, + "step": { + "user": { + "data": { + "city": "By" + }, + "description": "Skriv inn postnummeret (bare for Frankrike, anbefalt) eller bynavn", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/pl.json b/homeassistant/components/meteo_france/translations/pl.json new file mode 100644 index 00000000000..12e74728fc8 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Miasto jest ju\u017c skonfigurowane.", + "unknown": "Nieznany b\u0142\u0105d: spr\u00f3buj ponownie p\u00f3\u017aniej" + }, + "step": { + "user": { + "data": { + "city": "Miasto" + }, + "description": "Wprowad\u017a kod pocztowy (tylko dla Francji, zalecane) lub nazw\u0119 miasta", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/pt.json b/homeassistant/components/meteo_france/translations/pt.json new file mode 100644 index 00000000000..025d58f5197 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "city": "Cidade" + }, + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/ru.json b/homeassistant/components/meteo_france/translations/ru.json new file mode 100644 index 00000000000..47e2eda63af --- /dev/null +++ b/homeassistant/components/meteo_france/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435." + }, + "step": { + "user": { + "data": { + "city": "\u0413\u043e\u0440\u043e\u0434" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0424\u0440\u0430\u043d\u0446\u0438\u0438) \u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0440\u043e\u0434\u0430", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/sl.json b/homeassistant/components/meteo_france/translations/sl.json new file mode 100644 index 00000000000..912748ada8f --- /dev/null +++ b/homeassistant/components/meteo_france/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Mesto je \u017ee konfigurirano", + "unknown": "Neznana napaka: poskusite pozneje" + }, + "step": { + "user": { + "data": { + "city": "Mesto" + }, + "description": "Vnesite po\u0161tno \u0161tevilko (samo za Francijo) ali ime mesta", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/sv.json b/homeassistant/components/meteo_france/translations/sv.json new file mode 100644 index 00000000000..a3aac5f013a --- /dev/null +++ b/homeassistant/components/meteo_france/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Staden har redan konfigurerats", + "unknown": "Ok\u00e4nt fel: f\u00f6rs\u00f6k igen senare" + }, + "step": { + "user": { + "data": { + "city": "Stad" + }, + "description": "Ange postnumret (endast f\u00f6r Frankrike, rekommenderat) eller ortsnamn", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/zh-Hant.json b/homeassistant/components/meteo_france/translations/zh-Hant.json new file mode 100644 index 00000000000..afece58eef4 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u57ce\u5e02\u5df2\u8a2d\u5b9a\u5b8c\u6210", + "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u7a0d\u5f8c\u518d\u8a66" + }, + "step": { + "user": { + "data": { + "city": "\u57ce\u5e02\u540d\u7a31" + }, + "description": "\u8f38\u5165\u90f5\u905e\u5340\u865f\uff08\u50c5\u652f\u63f4\u6cd5\u570b\uff09\u6216\u57ce\u5e02\u540d\u7a31", + "title": "M\u00e9t\u00e9o-France" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/weather.py b/homeassistant/components/meteo_france/weather.py index 1bdea073aae..2983c6b7d59 100644 --- a/homeassistant/components/meteo_france/weather.py +++ b/homeassistant/components/meteo_france/weather.py @@ -119,7 +119,7 @@ class MeteoFranceWeather(WeatherEntity): @property def device_state_attributes(self): """Return the state attributes.""" - data = dict() + data = {} if self._data and "next_rain" in self._data: data["next_rain"] = self._data["next_rain"] return data diff --git a/homeassistant/components/meteoalarm/binary_sensor.py b/homeassistant/components/meteoalarm/binary_sensor.py index 7d3bea4c995..f7e95c50c86 100644 --- a/homeassistant/components/meteoalarm/binary_sensor.py +++ b/homeassistant/components/meteoalarm/binary_sensor.py @@ -42,7 +42,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): try: api = Meteoalert(country, province, language) - except KeyError(): + except KeyError: _LOGGER.error("Wrong country digits or province name") return diff --git a/homeassistant/components/meteoalarm/manifest.json b/homeassistant/components/meteoalarm/manifest.json index 5fc7e7c137c..116bbdcac6d 100644 --- a/homeassistant/components/meteoalarm/manifest.json +++ b/homeassistant/components/meteoalarm/manifest.json @@ -3,6 +3,5 @@ "name": "MeteoAlarm", "documentation": "https://www.home-assistant.io/integrations/meteoalarm", "requirements": ["meteoalertapi==0.1.6"], - "dependencies": [], "codeowners": ["@rolfberkenbosch"] } diff --git a/homeassistant/components/metoffice/manifest.json b/homeassistant/components/metoffice/manifest.json index 9c16b7687a2..20120d90b18 100644 --- a/homeassistant/components/metoffice/manifest.json +++ b/homeassistant/components/metoffice/manifest.json @@ -3,6 +3,5 @@ "name": "Met Office", "documentation": "https://www.home-assistant.io/integrations/metoffice", "requirements": ["datapoint==0.9.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/metoffice/sensor.py b/homeassistant/components/metoffice/sensor.py index d04f7c5f582..b594517ac50 100644 --- a/homeassistant/components/metoffice/sensor.py +++ b/homeassistant/components/metoffice/sensor.py @@ -13,9 +13,11 @@ from homeassistant.const import ( CONF_LONGITUDE, CONF_MONITORED_CONDITIONS, CONF_NAME, + LENGTH_KILOMETERS, SPEED_MILES_PER_HOUR, TEMP_CELSIUS, UNIT_PERCENTAGE, + UV_INDEX, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -70,8 +72,8 @@ SENSOR_TYPES = { "wind_direction": ["Wind Direction", None], "wind_gust": ["Wind Gust", SPEED_MILES_PER_HOUR], "visibility": ["Visibility", None], - "visibility_distance": ["Visibility Distance", "km"], - "uv": ["UV", None], + "visibility_distance": ["Visibility Distance", LENGTH_KILOMETERS], + "uv": ["UV", UV_INDEX], "precipitation": ["Probability of Precipitation", UNIT_PERCENTAGE], "humidity": ["Humidity", UNIT_PERCENTAGE], } diff --git a/homeassistant/components/mfi/manifest.json b/homeassistant/components/mfi/manifest.json index 4e5ab31b1d5..29b9bb1ac69 100644 --- a/homeassistant/components/mfi/manifest.json +++ b/homeassistant/components/mfi/manifest.json @@ -3,6 +3,5 @@ "name": "Ubiquiti mFi mPort", "documentation": "https://www.home-assistant.io/integrations/mfi", "requirements": ["mficlient==0.3.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mfi/switch.py b/homeassistant/components/mfi/switch.py index b3d3e0ea285..08ed841e7e1 100644 --- a/homeassistant/components/mfi/switch.py +++ b/homeassistant/components/mfi/switch.py @@ -40,7 +40,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): host = config.get(CONF_HOST) username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) - use_tls = config.get(CONF_SSL) + use_tls = config[CONF_SSL] verify_tls = config.get(CONF_VERIFY_SSL) default_port = 6443 if use_tls else 6080 port = int(config.get(CONF_PORT, default_port)) diff --git a/homeassistant/components/mhz19/manifest.json b/homeassistant/components/mhz19/manifest.json index 7f160a2e9a4..ea16ac697f1 100644 --- a/homeassistant/components/mhz19/manifest.json +++ b/homeassistant/components/mhz19/manifest.json @@ -3,6 +3,5 @@ "name": "MH-Z19 CO2 Sensor", "documentation": "https://www.home-assistant.io/integrations/mhz19", "requirements": ["pmsensor==0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mhz19/sensor.py b/homeassistant/components/mhz19/sensor.py index 892895b9e02..e77f17c9140 100644 --- a/homeassistant/components/mhz19/sensor.py +++ b/homeassistant/components/mhz19/sensor.py @@ -124,7 +124,7 @@ class MHZClient: """Initialize the sensor.""" self.co2sensor = co2sens self._serial = serial - self.data = dict() + self.data = {} @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): diff --git a/homeassistant/components/microsoft/manifest.json b/homeassistant/components/microsoft/manifest.json index d0947357a51..0e371199a18 100644 --- a/homeassistant/components/microsoft/manifest.json +++ b/homeassistant/components/microsoft/manifest.json @@ -3,6 +3,5 @@ "name": "Microsoft Text-to-Speech (TTS)", "documentation": "https://www.home-assistant.io/integrations/microsoft", "requirements": ["pycsspeechtts==1.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/microsoft_face/__init__.py b/homeassistant/components/microsoft_face/__init__.py index 1bc9c116cda..16b25e4f85d 100644 --- a/homeassistant/components/microsoft_face/__init__.py +++ b/homeassistant/components/microsoft_face/__init__.py @@ -96,7 +96,7 @@ async def async_setup(hass, config): face.store[g_id] = {} entities[g_id] = MicrosoftFaceGroupEntity(hass, face, g_id, name) - await entities[g_id].async_update_ha_state() + entities[g_id].async_write_ha_state() except HomeAssistantError as err: _LOGGER.error("Can't create group '%s' with error: %s", g_id, err) @@ -145,7 +145,7 @@ async def async_setup(hass, config): ) face.store[g_id][name] = user_data["personId"] - await entities[g_id].async_update_ha_state() + entities[g_id].async_write_ha_state() except HomeAssistantError as err: _LOGGER.error("Can't create person '%s' with error: %s", name, err) @@ -163,7 +163,7 @@ async def async_setup(hass, config): await face.call_api("delete", f"persongroups/{g_id}/persons/{p_id}") face.store[g_id].pop(name) - await entities[g_id].async_update_ha_state() + entities[g_id].async_write_ha_state() except HomeAssistantError as err: _LOGGER.error("Can't delete person '%s' with error: %s", p_id, err) diff --git a/homeassistant/components/microsoft_face/manifest.json b/homeassistant/components/microsoft_face/manifest.json index d4ff56d325b..7677cc989b6 100644 --- a/homeassistant/components/microsoft_face/manifest.json +++ b/homeassistant/components/microsoft_face/manifest.json @@ -2,7 +2,6 @@ "domain": "microsoft_face", "name": "Microsoft Face", "documentation": "https://www.home-assistant.io/integrations/microsoft_face", - "requirements": [], "dependencies": ["camera"], "codeowners": [] } diff --git a/homeassistant/components/microsoft_face/services.yaml b/homeassistant/components/microsoft_face/services.yaml index 386f7083f92..4b273286d83 100644 --- a/homeassistant/components/microsoft_face/services.yaml +++ b/homeassistant/components/microsoft_face/services.yaml @@ -1,28 +1,48 @@ create_group: description: Create a new person group. fields: - name: {description: Name of the group., example: family} + name: + description: Name of the group. + example: family create_person: description: Create a new person in the group. fields: - group: {description: Name of the group, example: family} - name: {description: Name of the person, example: Hans} + group: + description: Name of the group + example: family + name: + description: Name of the person + example: Hans delete_group: description: Delete a new person group. fields: - name: {description: Name of the group., example: family} + name: + description: Name of the group. + example: family delete_person: description: Delete a person in the group. fields: - group: {description: Name of the group., example: family} - name: {description: Name of the person., example: Hans} + group: + description: Name of the group. + example: family + name: + description: Name of the person. + example: Hans face_person: description: Add a new picture to a person. fields: - camera_entity: {description: Camera to take a picture., example: camera.door} - group: {description: Name of the group., example: family} - person: {description: Name of the person., example: Hans} + camera_entity: + description: Camera to take a picture. + example: camera.door + group: + description: Name of the group. + example: family + person: + description: Name of the person. + example: Hans train_group: description: Train a person group. fields: - group: {description: Name of the group, example: family} + group: + description: Name of the group + example: family diff --git a/homeassistant/components/microsoft_face_detect/manifest.json b/homeassistant/components/microsoft_face_detect/manifest.json index 7e784fe988b..ea57b2bb134 100644 --- a/homeassistant/components/microsoft_face_detect/manifest.json +++ b/homeassistant/components/microsoft_face_detect/manifest.json @@ -2,7 +2,6 @@ "domain": "microsoft_face_detect", "name": "Microsoft Face Detect", "documentation": "https://www.home-assistant.io/integrations/microsoft_face_detect", - "requirements": [], "dependencies": ["microsoft_face"], "codeowners": [] } diff --git a/homeassistant/components/microsoft_face_identify/manifest.json b/homeassistant/components/microsoft_face_identify/manifest.json index dea16ed5afc..866abde3673 100644 --- a/homeassistant/components/microsoft_face_identify/manifest.json +++ b/homeassistant/components/microsoft_face_identify/manifest.json @@ -2,7 +2,6 @@ "domain": "microsoft_face_identify", "name": "Microsoft Face Identify", "documentation": "https://www.home-assistant.io/integrations/microsoft_face_identify", - "requirements": [], "dependencies": ["microsoft_face"], "codeowners": [] } diff --git a/homeassistant/components/miflora/manifest.json b/homeassistant/components/miflora/manifest.json index 22633979128..fde97154194 100644 --- a/homeassistant/components/miflora/manifest.json +++ b/homeassistant/components/miflora/manifest.json @@ -3,6 +3,5 @@ "name": "Mi Flora", "documentation": "https://www.home-assistant.io/integrations/miflora", "requirements": ["bluepy==1.3.0", "miflora==0.6.0"], - "dependencies": [], "codeowners": ["@danielhiversen", "@ChristianKuehnel"] } diff --git a/homeassistant/components/miflora/sensor.py b/homeassistant/components/miflora/sensor.py index 9d564c6536a..187f883187f 100644 --- a/homeassistant/components/miflora/sensor.py +++ b/homeassistant/components/miflora/sensor.py @@ -10,12 +10,14 @@ import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( + CONDUCTIVITY, CONF_FORCE_UPDATE, CONF_MAC, CONF_MONITORED_CONDITIONS, CONF_NAME, CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_START, + TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE, ) @@ -50,10 +52,10 @@ ATTR_LAST_SUCCESSFUL_UPDATE = "last_successful_update" # Sensor types are defined like: Name, units, icon SENSOR_TYPES = { - "temperature": ["Temperature", "°C", "mdi:thermometer"], + "temperature": ["Temperature", TEMP_CELSIUS, "mdi:thermometer"], "light": ["Light intensity", "lx", "mdi:white-balance-sunny"], "moisture": ["Moisture", UNIT_PERCENTAGE, "mdi:water-percent"], - "conductivity": ["Conductivity", "µS/cm", "mdi:flash-circle"], + "conductivity": ["Conductivity", CONDUCTIVITY, "mdi:flash-circle"], "battery": ["Battery", UNIT_PERCENTAGE, "mdi:battery-charging"], } diff --git a/homeassistant/components/mikrotik/.translations/ca.json b/homeassistant/components/mikrotik/.translations/ca.json deleted file mode 100644 index 75a116a3f9f..00000000000 --- a/homeassistant/components/mikrotik/.translations/ca.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "La connexi\u00f3 no ha tingut \u00e8xit", - "name_exists": "El nom existeix", - "wrong_credentials": "Credencials incorrectes" - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "name": "Nom", - "password": "Contrasenya", - "port": "Port", - "username": "Nom d'usuari", - "verify_ssl": "Utilitza SSL" - }, - "title": "Configuraci\u00f3 de Mikrotik Router" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Activa el ping ARP", - "detection_time": "Interval per considerar a casa", - "force_dhcp": "For\u00e7a l'escaneig mitjan\u00e7ant DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/da.json b/homeassistant/components/mikrotik/.translations/da.json deleted file mode 100644 index 35e3cd5a08a..00000000000 --- a/homeassistant/components/mikrotik/.translations/da.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik er allerede konfigureret" - }, - "error": { - "cannot_connect": "Forbindelsen mislykkedes", - "name_exists": "Navnet findes allerede", - "wrong_credentials": "Forkerte legitimationsoplysninger" - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "name": "Navn", - "password": "Adgangskode", - "port": "Port", - "username": "Brugernavn", - "verify_ssl": "Brug ssl" - }, - "title": "Konfigurer Mikrotik-router" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Aktiver ARP-ping", - "detection_time": "'Betragt som hjemme'-interval", - "force_dhcp": "Gennemtving scanning ved hj\u00e6lp af DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/de.json b/homeassistant/components/mikrotik/.translations/de.json deleted file mode 100644 index 97d28db4cfb..00000000000 --- a/homeassistant/components/mikrotik/.translations/de.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen", - "name_exists": "Name vorhanden", - "wrong_credentials": "Falsche Zugangsdaten" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name", - "password": "Passwort", - "port": "Port", - "username": "Benutzername", - "verify_ssl": "Verwenden Sie SSL" - }, - "title": "Richten Sie den Mikrotik Router ein" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "ARP Ping aktivieren", - "force_dhcp": "Erzwingen Sie das Scannen \u00fcber DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/en.json b/homeassistant/components/mikrotik/.translations/en.json deleted file mode 100644 index 0423401bf83..00000000000 --- a/homeassistant/components/mikrotik/.translations/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik is already configured" - }, - "error": { - "cannot_connect": "Connection Unsuccessful", - "name_exists": "Name exists", - "wrong_credentials": "Wrong Credentials" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name", - "password": "Password", - "port": "Port", - "username": "Username", - "verify_ssl": "Use ssl" - }, - "title": "Set up Mikrotik Router" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Enable ARP ping", - "detection_time": "Consider home interval", - "force_dhcp": "Force scanning using DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/es.json b/homeassistant/components/mikrotik/.translations/es.json deleted file mode 100644 index 61bce851f42..00000000000 --- a/homeassistant/components/mikrotik/.translations/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "Conexi\u00f3n fallida", - "name_exists": "El nombre ya existe", - "wrong_credentials": "Credenciales incorrectas" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nombre", - "password": "Contrase\u00f1a", - "port": "Puerto", - "username": "Nombre de usuario", - "verify_ssl": "Usar ssl" - }, - "title": "Configurar el router Mikrotik" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Habilitar ping ARP", - "detection_time": "Considere el intervalo de inicio", - "force_dhcp": "Forzar el escaneo usando DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/fr.json b/homeassistant/components/mikrotik/.translations/fr.json deleted file mode 100644 index 220da6fcbaf..00000000000 --- a/homeassistant/components/mikrotik/.translations/fr.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "cannot_connect": "\u00c9chec de la connexion", - "name_exists": "Le nom existe", - "wrong_credentials": "Identifiants erron\u00e9s" - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "name": "Nom", - "password": "Mot de passe", - "port": "Port", - "username": "Nom d'utilisateur", - "verify_ssl": "Utiliser SSL" - }, - "title": "Configurer le routeur Mikrotik" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Activer le ping ARP", - "force_dhcp": "Forcer l'analyse \u00e0 l'aide de DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/hu.json b/homeassistant/components/mikrotik/.translations/hu.json deleted file mode 100644 index 8afbeb69925..00000000000 --- a/homeassistant/components/mikrotik/.translations/hu.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A Mikrotik m\u00e1r konfigur\u00e1lva van" - }, - "error": { - "cannot_connect": "A kapcsolat sikertelen", - "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik", - "wrong_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" - }, - "step": { - "user": { - "data": { - "host": "Kiszolg\u00e1l\u00f3", - "name": "N\u00e9v", - "password": "Jelsz\u00f3", - "port": "Port", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v", - "verify_ssl": "SSL haszn\u00e1lata" - }, - "title": "Mikrotik \u00fatv\u00e1laszt\u00f3 be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "ARP-ping enged\u00e9lyez\u00e9se", - "detection_time": "Otthoni intervallumk\u00e9nt vegye figyelembe", - "force_dhcp": "A szkennel\u00e9s k\u00e9nyszer\u00edt\u00e9se DHCP seg\u00edts\u00e9g\u00e9vel" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/it.json b/homeassistant/components/mikrotik/.translations/it.json deleted file mode 100644 index 9bc10220a9b..00000000000 --- a/homeassistant/components/mikrotik/.translations/it.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Connessione Non Riuscita", - "name_exists": "Il Nome esiste gi\u00e0", - "wrong_credentials": "Credenziali Errate" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nome", - "password": "Password", - "port": "Porta", - "username": "Nome utente", - "verify_ssl": "Usa SSL" - }, - "title": "Configurare il router Mikrotik" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Attivare il ping ARP", - "detection_time": "Considerare l'intervallo di casa", - "force_dhcp": "Scansione forzata con DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/ko.json b/homeassistant/components/mikrotik/.translations/ko.json deleted file mode 100644 index c91fd798d64..00000000000 --- a/homeassistant/components/mikrotik/.translations/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik \uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "cannot_connect": "\uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", - "wrong_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "name": "\uc774\ub984", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", - "verify_ssl": "SSL \uc0ac\uc6a9" - }, - "title": "Mikrotik \ub77c\uc6b0\ud130 \uc124\uc815" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "ARP \ud551 \ud65c\uc131\ud654", - "detection_time": "\uc2a4\uce94 \uac04\uaca9", - "force_dhcp": "DHCP \ub97c \uc0ac\uc6a9\ud558\uc5ec \uac15\uc81c \uc2a4\uce94" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/lb.json b/homeassistant/components/mikrotik/.translations/lb.json deleted file mode 100644 index 2f11bad696b..00000000000 --- a/homeassistant/components/mikrotik/.translations/lb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Verbindung net erfollegr\u00e4ich", - "name_exists": "Numm g\u00ebtt et schonn", - "wrong_credentials": "Falsh Login Informatiounen" - }, - "step": { - "user": { - "data": { - "host": "Apparat", - "name": "Numm", - "password": "Passwuert", - "port": "Port", - "username": "Benotzernumm", - "verify_ssl": "SSL benotzen" - }, - "title": "Mikrotik Router ariichten" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "ARP ping aktiv\u00e9ieren", - "detection_time": "Home Intervall betruechten", - "force_dhcp": "Scannen erzw\u00e9ngen mat DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/lv.json b/homeassistant/components/mikrotik/.translations/lv.json deleted file mode 100644 index 232c7d16173..00000000000 --- a/homeassistant/components/mikrotik/.translations/lv.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "password": "Parole", - "port": "Ports", - "username": "Lietot\u0101jv\u0101rds", - "verify_ssl": "Izmantot SSL" - }, - "title": "Iestat\u012bt Mikrotik mar\u0161rut\u0113t\u0101ju" - } - }, - "title": "Mikrotik" - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/nl.json b/homeassistant/components/mikrotik/.translations/nl.json deleted file mode 100644 index d4996d492a5..00000000000 --- a/homeassistant/components/mikrotik/.translations/nl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik is al geconfigureerd" - }, - "error": { - "cannot_connect": "Verbinding niet geslaagd", - "name_exists": "Naam bestaat al", - "wrong_credentials": "Ongeldige inloggegevens" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Naam", - "password": "Wachtwoord", - "port": "Poort", - "username": "Gebruikersnaam", - "verify_ssl": "Gebruik SSL" - }, - "title": "Mikrotik Router instellen" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "ARP-ping inschakelen", - "detection_time": "Overweeg thuisinterval", - "force_dhcp": "Forceer scannen met DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/no.json b/homeassistant/components/mikrotik/.translations/no.json deleted file mode 100644 index 8e18b27f0de..00000000000 --- a/homeassistant/components/mikrotik/.translations/no.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik er allerede konfigurert" - }, - "error": { - "cannot_connect": "Tilkobling mislykket", - "name_exists": "Navnet eksisterer", - "wrong_credentials": "Feil legitimasjon" - }, - "step": { - "user": { - "data": { - "host": "Vert", - "name": "Navn", - "password": "Passord", - "port": "", - "username": "Brukernavn", - "verify_ssl": "Bruk ssl" - }, - "title": "Konfigurere Mikrotik-ruter" - } - }, - "title": "" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Aktiver ARP-ping", - "detection_time": "Vurder hjemmeintervall", - "force_dhcp": "Tving skanning ved hjelp av DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/pl.json b/homeassistant/components/mikrotik/.translations/pl.json deleted file mode 100644 index 6d807672398..00000000000 --- a/homeassistant/components/mikrotik/.translations/pl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikronik jest ju\u017c skonfigurowany." - }, - "error": { - "cannot_connect": "Po\u0142\u0105czenie nie powiod\u0142o si\u0119", - "name_exists": "Nazwa ju\u017c istnieje.", - "wrong_credentials": "B\u0142\u0119dne dane uwierzytelniaj\u0105ce" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nazwa", - "password": "Has\u0142o", - "port": "Port", - "username": "Nazwa u\u017cytkownika", - "verify_ssl": "U\u017cyj SSL" - }, - "title": "Konfiguracja routera Mikrotik" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "W\u0142\u0105cz ping ARP", - "detection_time": "Czas przed oznaczeniem \"poza domem\"", - "force_dhcp": "Wymu\u015b skanowanie przy u\u017cyciu DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/ru.json b/homeassistant/components/mikrotik/.translations/ru.json deleted file mode 100644 index 844181b5b64..00000000000 --- a/homeassistant/components/mikrotik/.translations/ru.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_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.", - "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.", - "wrong_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041b\u043e\u0433\u0438\u043d", - "verify_ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL" - }, - "title": "MikroTik" - } - }, - "title": "MikroTik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c ARP-\u043f\u0438\u043d\u0433", - "detection_time": "\u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c (\u0441\u0435\u043a.), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u041d\u0435 \u0434\u043e\u043c\u0430\".", - "force_dhcp": "\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/sl.json b/homeassistant/components/mikrotik/.translations/sl.json deleted file mode 100644 index a10508f8bbe..00000000000 --- a/homeassistant/components/mikrotik/.translations/sl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik je \u017ee konfiguriran" - }, - "error": { - "cannot_connect": "Povezava ni uspela", - "name_exists": "Ime obstaja", - "wrong_credentials": "Napa\u010dne poverilnice" - }, - "step": { - "user": { - "data": { - "host": "Gostitelj", - "name": "Ime", - "password": "Geslo", - "port": "Vrata", - "username": "Uporabni\u0161ko ime", - "verify_ssl": "Uporaba SSL" - }, - "title": "Nastavite Mikrotik usmerjevalnik" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Omogo\u010di ARP ping", - "detection_time": "Interval \"doma\" ", - "force_dhcp": "Vsilite skeniranje z uporabo DHCP-ja" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/sv.json b/homeassistant/components/mikrotik/.translations/sv.json deleted file mode 100644 index 7be080d96a2..00000000000 --- a/homeassistant/components/mikrotik/.translations/sv.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik \u00e4r redan konfigurerad" - }, - "error": { - "cannot_connect": "Anslutningen misslyckades", - "name_exists": "Namnet finns", - "wrong_credentials": "Fel autentiseringsuppgifter" - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rd", - "name": "Namn", - "password": "L\u00f6senord", - "port": "Port", - "username": "Anv\u00e4ndarnamn", - "verify_ssl": "Anv\u00e4nd ssl" - }, - "title": "Konfigurera Mikrotik-router" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Aktivera ARP-ping", - "detection_time": "Intervall f\u00f6r att betraktas som hemma", - "force_dhcp": "Tvinga skanning med DHCP" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/zh-Hant.json b/homeassistant/components/mikrotik/.translations/zh-Hant.json deleted file mode 100644 index 6913f2c91f1..00000000000 --- a/homeassistant/components/mikrotik/.translations/zh-Hant.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mikrotik \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u672a\u6210\u529f", - "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728", - "wrong_credentials": "\u6191\u8b49\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "name": "\u540d\u7a31", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "username": "\u4f7f\u7528\u8005\u540d\u7a31", - "verify_ssl": "\u4f7f\u7528 SSL" - }, - "title": "\u8a2d\u5b9a Mikrotik \u8def\u7531\u5668" - } - }, - "title": "Mikrotik" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "\u958b\u555f ARP ping", - "detection_time": "\u5224\u5b9a\u5728\u5bb6\u9593\u9694", - "force_dhcp": "\u5f37\u5236\u4f7f\u7528 DHCP \u6383\u63cf" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/hub.py b/homeassistant/components/mikrotik/hub.py index 023bdc74a7e..90150f448e8 100644 --- a/homeassistant/components/mikrotik/hub.py +++ b/homeassistant/components/mikrotik/hub.py @@ -184,7 +184,7 @@ class MikrotikData: # get new hub firmware version if updated self.firmware = self.get_info(ATTR_FIRMWARE) - except (CannotConnect, socket.timeout, socket.error): + except (CannotConnect, socket.timeout, OSError): self.available = False return @@ -249,7 +249,7 @@ class MikrotikData: response = list(self.api(cmd=cmd)) except ( librouteros.exceptions.ConnectionClosed, - socket.error, + OSError, socket.timeout, ) as api_error: _LOGGER.error("Mikrotik %s connection error %s", self._host, api_error) @@ -407,7 +407,7 @@ def get_api(hass, entry): return api except ( librouteros.exceptions.LibRouterosError, - socket.error, + OSError, socket.timeout, ) as api_error: _LOGGER.error("Mikrotik %s error: %s", entry[CONF_HOST], api_error) diff --git a/homeassistant/components/mikrotik/manifest.json b/homeassistant/components/mikrotik/manifest.json index 72f98a11709..41223f97a8e 100644 --- a/homeassistant/components/mikrotik/manifest.json +++ b/homeassistant/components/mikrotik/manifest.json @@ -3,11 +3,6 @@ "name": "Mikrotik", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/mikrotik", - "requirements": [ - "librouteros==3.0.0" - ], - "dependencies": [], - "codeowners": [ - "@engrbm87" - ] -} \ No newline at end of file + "requirements": ["librouteros==3.0.0"], + "codeowners": ["@engrbm87"] +} diff --git a/homeassistant/components/mikrotik/strings.json b/homeassistant/components/mikrotik/strings.json index 590563993d6..3f4bd769eac 100644 --- a/homeassistant/components/mikrotik/strings.json +++ b/homeassistant/components/mikrotik/strings.json @@ -1,37 +1,34 @@ { - "config": { - "title": "Mikrotik", - "step": { - "user": { - "title": "Set up Mikrotik Router", - "data": { - "name": "Name", - "host": "Host", - "username": "Username", - "password": "Password", - "port": "Port", - "verify_ssl": "Use ssl" - } - } - }, - "error": { - "name_exists": "Name exists", - "cannot_connect": "Connection Unsuccessful", - "wrong_credentials": "Wrong Credentials" - }, - "abort": { - "already_configured": "Mikrotik is already configured" + "config": { + "step": { + "user": { + "title": "Set up Mikrotik Router", + "data": { + "name": "Name", + "host": "Host", + "username": "Username", + "password": "Password", + "port": "Port", + "verify_ssl": "Use ssl" } + } }, - "options": { - "step": { - "device_tracker": { - "data": { - "arp_ping": "Enable ARP ping", - "force_dhcp": "Force scanning using DHCP", - "detection_time": "Consider home interval" - } - } + "error": { + "name_exists": "Name exists", + "cannot_connect": "Connection Unsuccessful", + "wrong_credentials": "Wrong Credentials" + }, + "abort": { "already_configured": "Mikrotik is already configured" } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Enable ARP ping", + "force_dhcp": "Force scanning using DHCP", + "detection_time": "Consider home interval" } + } } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/mikrotik/translations/ca.json b/homeassistant/components/mikrotik/translations/ca.json new file mode 100644 index 00000000000..10589dac474 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/ca.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "La connexi\u00f3 no ha tingut \u00e8xit", + "name_exists": "El nom existeix", + "wrong_credentials": "Credencials incorrectes" + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "name": "Nom", + "password": "Contrasenya", + "port": "Port", + "username": "Nom d'usuari", + "verify_ssl": "Utilitza SSL" + }, + "title": "Configuraci\u00f3 de Mikrotik Router" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Activa el ping ARP", + "detection_time": "Interval per considerar a casa", + "force_dhcp": "For\u00e7a l'escaneig mitjan\u00e7ant DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/da.json b/homeassistant/components/mikrotik/translations/da.json new file mode 100644 index 00000000000..d31465ac399 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/da.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik er allerede konfigureret" + }, + "error": { + "cannot_connect": "Forbindelsen mislykkedes", + "name_exists": "Navnet findes allerede", + "wrong_credentials": "Forkerte legitimationsoplysninger" + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "name": "Navn", + "password": "Adgangskode", + "port": "Port", + "username": "Brugernavn", + "verify_ssl": "Brug ssl" + }, + "title": "Konfigurer Mikrotik-router" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Aktiver ARP-ping", + "detection_time": "'Betragt som hjemme'-interval", + "force_dhcp": "Gennemtving scanning ved hj\u00e6lp af DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/de.json b/homeassistant/components/mikrotik/translations/de.json new file mode 100644 index 00000000000..0eb7c99a91a --- /dev/null +++ b/homeassistant/components/mikrotik/translations/de.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen", + "name_exists": "Name vorhanden", + "wrong_credentials": "Falsche Zugangsdaten" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name", + "password": "Passwort", + "port": "Port", + "username": "Benutzername", + "verify_ssl": "Verwenden Sie SSL" + }, + "title": "Richten Sie den Mikrotik Router ein" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "ARP Ping aktivieren", + "force_dhcp": "Erzwingen Sie das Scannen \u00fcber DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/en.json b/homeassistant/components/mikrotik/translations/en.json new file mode 100644 index 00000000000..692d1247fcb --- /dev/null +++ b/homeassistant/components/mikrotik/translations/en.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik is already configured" + }, + "error": { + "cannot_connect": "Connection Unsuccessful", + "name_exists": "Name exists", + "wrong_credentials": "Wrong Credentials" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name", + "password": "Password", + "port": "Port", + "username": "Username", + "verify_ssl": "Use ssl" + }, + "title": "Set up Mikrotik Router" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Enable ARP ping", + "detection_time": "Consider home interval", + "force_dhcp": "Force scanning using DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/es.json b/homeassistant/components/mikrotik/translations/es.json new file mode 100644 index 00000000000..b575db70f11 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/es.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "Conexi\u00f3n fallida", + "name_exists": "El nombre ya existe", + "wrong_credentials": "Credenciales incorrectas" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nombre", + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Usuario", + "verify_ssl": "Usar ssl" + }, + "title": "Configurar el router Mikrotik" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Habilitar ping ARP", + "detection_time": "Considere el intervalo de inicio", + "force_dhcp": "Forzar el escaneo usando DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/fr.json b/homeassistant/components/mikrotik/translations/fr.json new file mode 100644 index 00000000000..533d2edf6f0 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/fr.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "\u00c9chec de la connexion", + "name_exists": "Le nom existe", + "wrong_credentials": "Identifiants erron\u00e9s" + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "name": "Nom", + "password": "Mot de passe", + "port": "Port", + "username": "Nom d'utilisateur", + "verify_ssl": "Utiliser SSL" + }, + "title": "Configurer le routeur Mikrotik" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Activer le ping ARP", + "force_dhcp": "Forcer l'analyse \u00e0 l'aide de DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/hu.json b/homeassistant/components/mikrotik/translations/hu.json new file mode 100644 index 00000000000..fffa8b293da --- /dev/null +++ b/homeassistant/components/mikrotik/translations/hu.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "A Mikrotik m\u00e1r konfigur\u00e1lva van" + }, + "error": { + "cannot_connect": "A kapcsolat sikertelen", + "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik", + "wrong_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" + }, + "step": { + "user": { + "data": { + "host": "Kiszolg\u00e1l\u00f3", + "name": "N\u00e9v", + "password": "Jelsz\u00f3", + "port": "Port", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v", + "verify_ssl": "SSL haszn\u00e1lata" + }, + "title": "Mikrotik \u00fatv\u00e1laszt\u00f3 be\u00e1ll\u00edt\u00e1sa" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "ARP-ping enged\u00e9lyez\u00e9se", + "detection_time": "Otthoni intervallumk\u00e9nt vegye figyelembe", + "force_dhcp": "A felder\u00edt\u00e9s k\u00e9nyszer\u00edt\u00e9se DHCP seg\u00edts\u00e9g\u00e9vel" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/it.json b/homeassistant/components/mikrotik/translations/it.json new file mode 100644 index 00000000000..69cdadb4dfc --- /dev/null +++ b/homeassistant/components/mikrotik/translations/it.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Connessione Non Riuscita", + "name_exists": "Il Nome esiste gi\u00e0", + "wrong_credentials": "Credenziali Errate" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nome", + "password": "Password", + "port": "Porta", + "username": "Nome utente", + "verify_ssl": "Usa SSL" + }, + "title": "Configurare il router Mikrotik" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Attivare il ping ARP", + "detection_time": "Considerare l'intervallo di casa", + "force_dhcp": "Scansione forzata con DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/ko.json b/homeassistant/components/mikrotik/translations/ko.json new file mode 100644 index 00000000000..8c73521afd5 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/ko.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik \uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", + "wrong_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "name": "\uc774\ub984", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", + "verify_ssl": "SSL \uc0ac\uc6a9" + }, + "title": "Mikrotik \ub77c\uc6b0\ud130 \uc124\uc815" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "ARP \ud551 \ud65c\uc131\ud654", + "detection_time": "\uc2a4\uce94 \uac04\uaca9", + "force_dhcp": "DHCP \ub97c \uc0ac\uc6a9\ud558\uc5ec \uac15\uc81c \uc2a4\uce94" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/lb.json b/homeassistant/components/mikrotik/translations/lb.json new file mode 100644 index 00000000000..2ae18d83422 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/lb.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Verbindung net erfollegr\u00e4ich", + "name_exists": "Numm g\u00ebtt et schonn", + "wrong_credentials": "Falsh Login Informatiounen" + }, + "step": { + "user": { + "data": { + "host": "Apparat", + "name": "Numm", + "password": "Passwuert", + "port": "Port", + "username": "Benotzernumm", + "verify_ssl": "SSL benotzen" + }, + "title": "Mikrotik Router ariichten" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "ARP ping aktiv\u00e9ieren", + "detection_time": "Home Intervall betruechten", + "force_dhcp": "Scannen erzw\u00e9ngen mat DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/lv.json b/homeassistant/components/mikrotik/translations/lv.json new file mode 100644 index 00000000000..d4fa954b407 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/lv.json @@ -0,0 +1,15 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Parole", + "port": "Ports", + "username": "Lietot\u0101jv\u0101rds", + "verify_ssl": "Izmantot SSL" + }, + "title": "Iestat\u012bt Mikrotik mar\u0161rut\u0113t\u0101ju" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/nl.json b/homeassistant/components/mikrotik/translations/nl.json new file mode 100644 index 00000000000..a3c86dda34b --- /dev/null +++ b/homeassistant/components/mikrotik/translations/nl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik is al geconfigureerd" + }, + "error": { + "cannot_connect": "Verbinding niet geslaagd", + "name_exists": "Naam bestaat al", + "wrong_credentials": "Ongeldige inloggegevens" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Naam", + "password": "Wachtwoord", + "port": "Poort", + "username": "Gebruikersnaam", + "verify_ssl": "Gebruik SSL" + }, + "title": "Mikrotik Router instellen" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "ARP-ping inschakelen", + "detection_time": "Overweeg thuisinterval", + "force_dhcp": "Forceer scannen met DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/no.json b/homeassistant/components/mikrotik/translations/no.json new file mode 100644 index 00000000000..6fa745a8b57 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/no.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik er allerede konfigurert" + }, + "error": { + "cannot_connect": "Tilkobling mislykket", + "name_exists": "Navnet eksisterer", + "wrong_credentials": "Feil legitimasjon" + }, + "step": { + "user": { + "data": { + "host": "Vert", + "name": "Navn", + "password": "Passord", + "port": "", + "username": "Brukernavn", + "verify_ssl": "Bruk ssl" + }, + "title": "Konfigurere Mikrotik-ruter" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Aktiver ARP-ping", + "detection_time": "Vurder hjemmeintervall", + "force_dhcp": "Tving skanning ved hjelp av DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/pl.json b/homeassistant/components/mikrotik/translations/pl.json new file mode 100644 index 00000000000..20b0348570c --- /dev/null +++ b/homeassistant/components/mikrotik/translations/pl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikronik jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Po\u0142\u0105czenie nie powiod\u0142o si\u0119", + "name_exists": "Nazwa ju\u017c istnieje.", + "wrong_credentials": "B\u0142\u0119dne dane uwierzytelniaj\u0105ce" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa", + "password": "Has\u0142o", + "port": "Port", + "username": "Nazwa u\u017cytkownika", + "verify_ssl": "U\u017cyj SSL" + }, + "title": "Konfiguracja routera Mikrotik" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "W\u0142\u0105cz ping ARP", + "detection_time": "Czas przed oznaczeniem \"poza domem\"", + "force_dhcp": "Wymu\u015b skanowanie przy u\u017cyciu DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/pt.json b/homeassistant/components/mikrotik/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/ru.json b/homeassistant/components/mikrotik/translations/ru.json new file mode 100644 index 00000000000..e21472d4da7 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/ru.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_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.", + "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.", + "wrong_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041b\u043e\u0433\u0438\u043d", + "verify_ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL" + }, + "title": "MikroTik" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c ARP-\u043f\u0438\u043d\u0433", + "detection_time": "\u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c (\u0441\u0435\u043a.), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u041d\u0435 \u0434\u043e\u043c\u0430\".", + "force_dhcp": "\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/sl.json b/homeassistant/components/mikrotik/translations/sl.json new file mode 100644 index 00000000000..10030cba559 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/sl.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik je \u017ee konfiguriran" + }, + "error": { + "cannot_connect": "Povezava ni uspela", + "name_exists": "Ime obstaja", + "wrong_credentials": "Napa\u010dne poverilnice" + }, + "step": { + "user": { + "data": { + "host": "Gostitelj", + "name": "Ime", + "password": "Geslo", + "port": "Vrata", + "username": "Uporabni\u0161ko ime", + "verify_ssl": "Uporaba SSL" + }, + "title": "Nastavite Mikrotik usmerjevalnik" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Omogo\u010di ARP ping", + "detection_time": "Interval \"doma\" ", + "force_dhcp": "Vsilite skeniranje z uporabo DHCP-ja" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/sv.json b/homeassistant/components/mikrotik/translations/sv.json new file mode 100644 index 00000000000..22cb8590c3b --- /dev/null +++ b/homeassistant/components/mikrotik/translations/sv.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik \u00e4r redan konfigurerad" + }, + "error": { + "cannot_connect": "Anslutningen misslyckades", + "name_exists": "Namnet finns", + "wrong_credentials": "Fel autentiseringsuppgifter" + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rd", + "name": "Namn", + "password": "L\u00f6senord", + "port": "Port", + "username": "Anv\u00e4ndarnamn", + "verify_ssl": "Anv\u00e4nd ssl" + }, + "title": "Konfigurera Mikrotik-router" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "Aktivera ARP-ping", + "detection_time": "Intervall f\u00f6r att betraktas som hemma", + "force_dhcp": "Tvinga skanning med DHCP" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/.translations/zh-Hans.json b/homeassistant/components/mikrotik/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/mikrotik/.translations/zh-Hans.json rename to homeassistant/components/mikrotik/translations/zh-Hans.json diff --git a/homeassistant/components/mikrotik/translations/zh-Hant.json b/homeassistant/components/mikrotik/translations/zh-Hant.json new file mode 100644 index 00000000000..caca14b79ed --- /dev/null +++ b/homeassistant/components/mikrotik/translations/zh-Hant.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "already_configured": "Mikrotik \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u672a\u6210\u529f", + "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728", + "wrong_credentials": "\u6191\u8b49\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "name": "\u540d\u7a31", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "username": "\u4f7f\u7528\u8005\u540d\u7a31", + "verify_ssl": "\u4f7f\u7528 SSL" + }, + "title": "\u8a2d\u5b9a Mikrotik \u8def\u7531\u5668" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "arp_ping": "\u958b\u555f ARP ping", + "detection_time": "\u5224\u5b9a\u5728\u5bb6\u9593\u9694", + "force_dhcp": "\u5f37\u5236\u4f7f\u7528 DHCP \u6383\u63cf" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mill/manifest.json b/homeassistant/components/mill/manifest.json index f5ca1835a67..07eec93bb65 100644 --- a/homeassistant/components/mill/manifest.json +++ b/homeassistant/components/mill/manifest.json @@ -3,6 +3,5 @@ "name": "Mill", "documentation": "https://www.home-assistant.io/integrations/mill", "requirements": ["millheater==0.3.4"], - "dependencies": [], "codeowners": ["@danielhiversen"] } diff --git a/homeassistant/components/mill/services.yaml b/homeassistant/components/mill/services.yaml index e9e59b50170..5223bf9c890 100644 --- a/homeassistant/components/mill/services.yaml +++ b/homeassistant/components/mill/services.yaml @@ -3,7 +3,7 @@ set_room_temperature: fields: room_name: description: Name of room to change. - example: 'kitchen' + example: "kitchen" away_temp: description: Away temp. example: 12 @@ -12,4 +12,4 @@ set_room_temperature: example: 22 sleep_temp: description: Sleep temp. - example: 17 \ No newline at end of file + example: 17 diff --git a/homeassistant/components/min_max/manifest.json b/homeassistant/components/min_max/manifest.json index db3a896a1c3..d4eb6554405 100644 --- a/homeassistant/components/min_max/manifest.json +++ b/homeassistant/components/min_max/manifest.json @@ -2,8 +2,6 @@ "domain": "min_max", "name": "Min/Max", "documentation": "https://www.home-assistant.io/integrations/min_max", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/minecraft_server/.translations/ca.json b/homeassistant/components/minecraft_server/.translations/ca.json deleted file mode 100644 index e205090d0cd..00000000000 --- a/homeassistant/components/minecraft_server/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat." - }, - "error": { - "cannot_connect": "Ha fallat la connexi\u00f3 amb el servidor. Comprova l'amfitri\u00f3 i el port i torna-ho a provar. Assegurat que estas utilitzant la versi\u00f3 del servidor 1.7 o superior.", - "invalid_ip": "L\u2019adre\u00e7a IP \u00e9s inv\u00e0lida (no s\u2019ha pogut determinar l\u2019adre\u00e7a MAC). Corregeix-la i torna-ho a provar.", - "invalid_port": "El port ha d'estar compr\u00e8s entre 1024 i 65535. Corregeix-lo i torna-ho a provar." - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "name": "Nom" - }, - "description": "Configuraci\u00f3 d'una inst\u00e0ncia de servidor de Minecraft per poder monitoritzar-lo.", - "title": "Enlla\u00e7 del servidor de Minecraft" - } - }, - "title": "Servidor de Minecraft" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/da.json b/homeassistant/components/minecraft_server/.translations/da.json deleted file mode 100644 index e536234ffdb..00000000000 --- a/homeassistant/components/minecraft_server/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "V\u00e6rten er allerede konfigureret." - }, - "error": { - "cannot_connect": "Det lykkedes ikke at oprette forbindelse til serveren. Kontroller v\u00e6rten og porten, og pr\u00f8v igen. S\u00f8rg ogs\u00e5 for, at du k\u00f8rer mindst Minecraft version 1.7 p\u00e5 din server.", - "invalid_ip": "IP-adressen er ugyldig (MAC-adressen kunne ikke bestemmes). Ret den, og pr\u00f8v igen.", - "invalid_port": "Porten skal v\u00e6re i intervallet fra 1024 til 65535. Ret den, og pr\u00f8v igen." - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "name": "Navn" - }, - "description": "Konfigurer din Minecraft-server-instans for at tillade overv\u00e5gning.", - "title": "Forbind din Minecraft-server" - } - }, - "title": "Minecraft-server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/de.json b/homeassistant/components/minecraft_server/.translations/de.json deleted file mode 100644 index 31f0fe2c0f0..00000000000 --- a/homeassistant/components/minecraft_server/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Der Host ist bereits konfiguriert." - }, - "error": { - "cannot_connect": "Verbindung zum Server fehlgeschlagen. Bitte \u00fcberpr\u00fcfe den Host und den Port und versuche es erneut. Stelle au\u00dferdem sicher, dass Du mindestens Minecraft Version 1.7 auf Deinem Server ausf\u00fchrst.", - "invalid_ip": "IP-Adresse ist ung\u00fcltig (MAC-Adresse konnte nicht ermittelt werden). Bitte korrigieren und erneut versuchen.", - "invalid_port": "Der Port muss im Bereich von 1024 bis 65535 liegen. Bitte korrigieren und erneut versuchen." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name" - }, - "description": "Richte deine Minecraft Server-Instanz ein, um es \u00fcberwachen zu k\u00f6nnen.", - "title": "Verkn\u00fcpfe deinen Minecraft Server" - } - }, - "title": "Minecraft Server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/en.json b/homeassistant/components/minecraft_server/.translations/en.json deleted file mode 100644 index fa04208cac9..00000000000 --- a/homeassistant/components/minecraft_server/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is already configured." - }, - "error": { - "cannot_connect": "Failed to connect to server. Please check the host and port and try again. Also ensure that you are running at least Minecraft version 1.7 on your server.", - "invalid_ip": "IP address is invalid (MAC address could not be determined). Please correct it and try again.", - "invalid_port": "Port must be in range from 1024 to 65535. Please correct it and try again." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name" - }, - "description": "Set up your Minecraft Server instance to allow monitoring.", - "title": "Link your Minecraft Server" - } - }, - "title": "Minecraft Server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/es.json b/homeassistant/components/minecraft_server/.translations/es.json deleted file mode 100644 index a4509ba68d4..00000000000 --- a/homeassistant/components/minecraft_server/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El host ya est\u00e1 configurado." - }, - "error": { - "cannot_connect": "No se pudo conectar al servidor. Compruebe el host y el puerto e int\u00e9ntelo de nuevo. Tambi\u00e9n aseg\u00farese de que est\u00e1 ejecutando al menos Minecraft versi\u00f3n 1.7 en su servidor.", - "invalid_ip": "La direcci\u00f3n IP no es valida (no se pudo determinar la direcci\u00f3n MAC). Por favor, corr\u00edgelo e int\u00e9ntalo de nuevo.", - "invalid_port": "El puerto debe estar en el rango de 1024 a 65535. Por favor, corr\u00edgelo e int\u00e9ntalo de nuevo." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nombre" - }, - "description": "Configura tu instancia de Minecraft Server para permitir la supervisi\u00f3n.", - "title": "Enlace su servidor Minecraft" - } - }, - "title": "Servidor Minecraft" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/fr.json b/homeassistant/components/minecraft_server/.translations/fr.json deleted file mode 100644 index c52021806d8..00000000000 --- a/homeassistant/components/minecraft_server/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'h\u00f4te est d\u00e9j\u00e0 configur\u00e9." - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "name": "Nom" - }, - "title": "Reliez votre serveur Minecraft" - } - }, - "title": "Serveur Minecraft" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/hu.json b/homeassistant/components/minecraft_server/.translations/hu.json deleted file mode 100644 index 4cf4a7a72fb..00000000000 --- a/homeassistant/components/minecraft_server/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kiszolg\u00e1l\u00f3 m\u00e1r konfigur\u00e1lva van." - }, - "step": { - "user": { - "data": { - "host": "Kiszolg\u00e1l\u00f3", - "name": "N\u00e9v" - }, - "title": "Kapcsold \u00f6ssze a Minecraft szervered" - } - }, - "title": "Minecraft szerver" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/it.json b/homeassistant/components/minecraft_server/.translations/it.json deleted file mode 100644 index a17ed15a546..00000000000 --- a/homeassistant/components/minecraft_server/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'host \u00e8 gi\u00e0 configurato." - }, - "error": { - "cannot_connect": "Impossibile connettersi al server. Controllare l'host e la porta e riprovare. Assicurarsi inoltre che si esegue almeno Minecraft versione 1.7 sul server.", - "invalid_ip": "L'indirizzo IP non \u00e8 valido (non \u00e8 stato possibile determinare l'indirizzo MAC). Correggilo e riprova.", - "invalid_port": "La porta deve essere compresa tra 1024 e 65535. Correggila e riprova." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nome" - }, - "description": "Configurare l'istanza del Server Minecraft per consentire il monitoraggio.", - "title": "Collega il tuo Server Minecraft" - } - }, - "title": "Server Minecraft" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/ko.json b/homeassistant/components/minecraft_server/.translations/ko.json deleted file mode 100644 index ee3ee24db70..00000000000 --- a/homeassistant/components/minecraft_server/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "cannot_connect": "\uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8\uc640 \ud3ec\ud2b8\ub97c \ud655\uc778\ud55c \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694. \ub610\ud55c \uc11c\ubc84\uc5d0\uc11c Minecraft \ubc84\uc804 1.7 \uc774\uc0c1\uc744 \uc2e4\ud589 \uc911\uc778\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", - "invalid_ip": "IP \uc8fc\uc18c\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 (MAC \uc8fc\uc18c\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4). \uc218\uc815 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "invalid_port": "\ud3ec\ud2b8\ub294 1024-65535 \ubc94\uc704\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ud3ec\ud2b8\ub97c \uc218\uc815\ud55c \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "name": "\uc774\ub984" - }, - "description": "\ubaa8\ub2c8\ud130\ub9c1\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d Minecraft \uc11c\ubc84 \uc778\uc2a4\ud134\uc2a4\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694.", - "title": "Minecraft \uc11c\ubc84 \uc5f0\uacb0" - } - }, - "title": "Minecraft \uc11c\ubc84" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/lb.json b/homeassistant/components/minecraft_server/.translations/lb.json deleted file mode 100644 index 23157202469..00000000000 --- a/homeassistant/components/minecraft_server/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen mam Server. Iwwerpr\u00e9if den Numm a Port a prob\u00e9ier nach emol. G\u00e9i och s\u00e9cher dass op d'mannst Minecraft Versioun 1.7 um Server leeft.", - "invalid_ip": "IP Adress ass ong\u00eblteg (MAC Adress konnt net best\u00ebmmt ginn). Korrig\u00e9iert et a prob\u00e9iert et nach eng K\u00e9ier w.e.g.", - "invalid_port": "Port muss zw\u00ebscht 1024 a 65535 sinn. Korrig\u00e9iert et a prob\u00e9iert et nach eng K\u00e9ier w.e.g." - }, - "step": { - "user": { - "data": { - "host": "Apparat", - "name": "Numm" - }, - "description": "Riicht deng Minecraft Server Instanz a fir d'Iwwerwaachung z'erlaben", - "title": "Verbann d\u00e4in Minecraft Server" - } - }, - "title": "Minecraft Server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/nl.json b/homeassistant/components/minecraft_server/.translations/nl.json deleted file mode 100644 index 4f42a16362b..00000000000 --- a/homeassistant/components/minecraft_server/.translations/nl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is al geconfigureerd." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met de server. Controleer de host en de poort en probeer het opnieuw. Zorg er ook voor dat u minimaal Minecraft versie 1.7 op uw server uitvoert.", - "invalid_ip": "IP-adres is ongeldig (MAC-adres kon niet worden bepaald). Corrigeer het en probeer het opnieuw.", - "invalid_port": "Poort moet tussen 1024 en 65535 liggen. Corrigeer dit en probeer het opnieuw." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Naam" - }, - "description": "Stel uw Minecraft server in om monitoring toe te staan.", - "title": "Koppel uw Minecraft server" - } - }, - "title": "Minecraft server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/no.json b/homeassistant/components/minecraft_server/.translations/no.json deleted file mode 100644 index cd627cbe4ba..00000000000 --- a/homeassistant/components/minecraft_server/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Verten er allerede konfigurert." - }, - "error": { - "cannot_connect": "Kan ikke koble til serveren. Kontroller verten og porten, og pr\u00f8v p\u00e5 nytt. S\u00f8rg ogs\u00e5 for at du kj\u00f8rer minst Minecraft versjon 1.7 p\u00e5 serveren din.", - "invalid_ip": "IP-adressen er ugyldig (MAC-adressen kan ikke fastsl\u00e5s). Vennligst korriger den og pr\u00f8v p\u00e5 nytt.", - "invalid_port": "Porten m\u00e5 v\u00e6re i omr\u00e5det 1024 til 65535. Vennligst korriger den og pr\u00f8v p\u00e5 nytt." - }, - "step": { - "user": { - "data": { - "host": "Vert", - "name": "Navn" - }, - "description": "Konfigurer Minecraft Server-forekomsten slik at den kan overv\u00e5kes.", - "title": "Link din Minecraft Server" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/pl.json b/homeassistant/components/minecraft_server/.translations/pl.json deleted file mode 100644 index e277579ea23..00000000000 --- a/homeassistant/components/minecraft_server/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host jest ju\u017c skonfigurowany." - }, - "error": { - "cannot_connect": "B\u0142\u0105d po\u0142\u0105czenia z serwerem. Sprawd\u017a adres hosta i port i spr\u00f3buj ponownie. Upewnij si\u0119 tak\u017ce, \u017ce na serwerze dzia\u0142a Minecraft w wersji przynajmniej 1.7.", - "invalid_ip": "Adres IP jest nieprawid\u0142owy (nie mo\u017cna ustali\u0107 adresu MAC). Popraw to i spr\u00f3buj ponownie.", - "invalid_port": "Port musi znajdowa\u0107 si\u0119 w zakresie od 1024 do 65535. Popraw go i spr\u00f3buj ponownie." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nazwa" - }, - "description": "Skonfiguruj instancj\u0119 serwera Minecraft, aby umo\u017cliwi\u0107 monitorowanie.", - "title": "Po\u0142\u0105cz sw\u00f3j serwer Minecraft" - } - }, - "title": "Serwer Minecraft" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/ru.json b/homeassistant/components/minecraft_server/.translations/ru.json deleted file mode 100644 index a07b84077a9..00000000000 --- a/homeassistant/components/minecraft_server/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430. \u0422\u0430\u043a\u0436\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u0412\u0430\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Minecraft \u0432\u0435\u0440\u0441\u0438\u0438 1.7, \u0438\u043b\u0438 \u0432\u044b\u0448\u0435.", - "invalid_ip": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 (\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c MAC-\u0430\u0434\u0440\u0435\u0441).", - "invalid_port": "\u041f\u043e\u0440\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1024 \u0434\u043e 65535." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0412\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Minecraft.", - "title": "Minecraft Server" - } - }, - "title": "Minecraft Server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/sl.json b/homeassistant/components/minecraft_server/.translations/sl.json deleted file mode 100644 index d1ed6a36c35..00000000000 --- a/homeassistant/components/minecraft_server/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Gostitelj je \u017ee konfiguriran." - }, - "error": { - "cannot_connect": "Povezava s stre\u017enikom ni uspela. Preverite gostitelja in vrata in poskusite znova. Zagotovite tudi, da na stre\u017eniku izvajate vsaj Minecraft razli\u010dice 1.7.", - "invalid_ip": "IP naslov ni veljaven (MAC naslova ni mogo\u010de dolo\u010diti). Popravite ga in poskusite znova.", - "invalid_port": "Vrata morajo biti v razponu od 1024 do 65535. Prosimo, popravite in poskusite znova." - }, - "step": { - "user": { - "data": { - "host": "Gostitelj", - "name": "Ime" - }, - "description": "Nastavite svoj Minecraft stre\u017enik, da omogo\u010dite spremljanje.", - "title": "Pove\u017eite svoj Minecraft stre\u017enik" - } - }, - "title": "Minecraft stre\u017enik" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/sv.json b/homeassistant/components/minecraft_server/.translations/sv.json deleted file mode 100644 index e95938f1590..00000000000 --- a/homeassistant/components/minecraft_server/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "V\u00e4rden \u00e4r redan konfigurerad." - }, - "error": { - "cannot_connect": "Misslyckades med att ansluta till servern. Kontrollera v\u00e4rden och porten och f\u00f6rs\u00f6k igen. Se ocks\u00e5 till att du k\u00f6r minst Minecraft version 1.7 p\u00e5 din server.", - "invalid_ip": "IP-adressen \u00e4r ogiltig (MAC-adressen kunde inte fastst\u00e4llas). Korrigera det och f\u00f6rs\u00f6k igen.", - "invalid_port": "Porten m\u00e5ste ligga inom intervallet 1024 till 65535. Korrigera den och f\u00f6rs\u00f6k igen." - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rd", - "name": "Namn" - }, - "description": "St\u00e4ll in din Minecraft Server-instans f\u00f6r att till\u00e5ta \u00f6vervakning.", - "title": "L\u00e4nka din Minecraft-server" - } - }, - "title": "Minecraft-server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/tr.json b/homeassistant/components/minecraft_server/.translations/tr.json deleted file mode 100644 index fb76f697cd5..00000000000 --- a/homeassistant/components/minecraft_server/.translations/tr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host zaten ayarlanm\u0131\u015f." - }, - "error": { - "cannot_connect": "Server ile ba\u011flant\u0131 kurulamad\u0131. L\u00fctfen host ve port ayarlar\u0131n\u0131 kontrol et ve tekrar dene. Ayr\u0131ca, serverda en az Minecraft s\u00fcr\u00fcm 1.7 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131ndan emin ol.", - "invalid_ip": "IP adresi ge\u00e7ersiz (MAC adresi belirlenemedi). L\u00fctfen d\u00fczelt ve tekrar dene.", - "invalid_port": "Port 1024 ile 65535 aral\u0131\u011f\u0131nda olmal\u0131d\u0131r. L\u00fctfen d\u00fczelt ve yeniden dene." - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Ad" - }, - "description": "G\u00f6zetmeye izin vermek i\u00e7in Minecraft server nesnesini ayarla.", - "title": "Minecraft Servern\u0131 ba\u011fla" - } - }, - "title": "Minecraft Server" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/zh-Hant.json b/homeassistant/components/minecraft_server/.translations/zh-Hant.json deleted file mode 100644 index fbcde2a6be1..00000000000 --- a/homeassistant/components/minecraft_server/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "cannot_connect": "\u4f3a\u670d\u5668\u9023\u7dda\u5931\u6557\u3002\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u8207\u901a\u8a0a\u57e0\u5f8c\u518d\u8a66\u4e00\u6b21\u3002\u53e6\u8acb\u78ba\u8a8d\u65bc\u4f3a\u670d\u5668\u4e0a\u57f7\u884c\u6700\u65b0\u7248\u672c Minecraft 1.7 \u7248\u3002", - "invalid_ip": "IP \u4f4d\u5740\u7121\u6548\uff08MAC \u4f4d\u5740\u7121\u6cd5\u78ba\u8a8d\uff09\u3002\u8acb\u4fee\u6b63\u5f8c\u3001\u518d\u8a66\u4e00\u6b21\u3002", - "invalid_port": "\u901a\u8a0a\u57e0\u7bc4\u570d\u4ecb\u65bc 1024 \u81f3 65535\u3002\u8acb\u4fee\u6b63\u5f8c\u3001\u518d\u8a66\u4e00\u6b21\u3002" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "name": "\u540d\u7a31" - }, - "description": "\u8a2d\u5b9a Minecraft \u4f3a\u670d\u5668\u4ee5\u9032\u884c\u76e3\u63a7\u3002", - "title": "\u9023\u7d50 Minecraft \u4f3a\u670d\u5668" - } - }, - "title": "Minecraft \u4f3a\u670d\u5668" - } -} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/manifest.json b/homeassistant/components/minecraft_server/manifest.json index 0811c168f9f..03710520b90 100644 --- a/homeassistant/components/minecraft_server/manifest.json +++ b/homeassistant/components/minecraft_server/manifest.json @@ -3,8 +3,7 @@ "name": "Minecraft Server", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/minecraft_server", - "requirements": ["aiodns==2.0.0", "getmac==0.8.1", "mcstatus==2.3.0"], - "dependencies": [], + "requirements": ["aiodns==2.0.0", "getmac==0.8.2", "mcstatus==2.3.0"], "codeowners": ["@elmurato"], "quality_scale": "silver" -} \ No newline at end of file +} diff --git a/homeassistant/components/minecraft_server/strings.json b/homeassistant/components/minecraft_server/strings.json index 3a2408694ad..0ca0b03134d 100644 --- a/homeassistant/components/minecraft_server/strings.json +++ b/homeassistant/components/minecraft_server/strings.json @@ -1,23 +1,17 @@ { - "config": { - "title": "Minecraft Server", - "step": { - "user": { - "title": "Link your Minecraft Server", - "description": "Set up your Minecraft Server instance to allow monitoring.", - "data": { - "name": "Name", - "host": "Host" - } - } - }, - "error": { - "invalid_port": "Port must be in range from 1024 to 65535. Please correct it and try again.", - "cannot_connect": "Failed to connect to server. Please check the host and port and try again. Also ensure that you are running at least Minecraft version 1.7 on your server.", - "invalid_ip": "IP address is invalid (MAC address could not be determined). Please correct it and try again." - }, - "abort": { - "already_configured": "Host is already configured." - } - } -} \ No newline at end of file + "config": { + "step": { + "user": { + "title": "Link your Minecraft Server", + "description": "Set up your Minecraft Server instance to allow monitoring.", + "data": { "name": "Name", "host": "Host" } + } + }, + "error": { + "invalid_port": "Port must be in range from 1024 to 65535. Please correct it and try again.", + "cannot_connect": "Failed to connect to server. Please check the host and port and try again. Also ensure that you are running at least Minecraft version 1.7 on your server.", + "invalid_ip": "IP address is invalid (MAC address could not be determined). Please correct it and try again." + }, + "abort": { "already_configured": "Host is already configured." } + } +} diff --git a/homeassistant/components/minecraft_server/translations/ca.json b/homeassistant/components/minecraft_server/translations/ca.json new file mode 100644 index 00000000000..e34e2fb7fdb --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat." + }, + "error": { + "cannot_connect": "Ha fallat la connexi\u00f3 amb el servidor. Comprova l'amfitri\u00f3 i el port i torna-ho a provar. Assegurat que estas utilitzant la versi\u00f3 del servidor 1.7 o superior.", + "invalid_ip": "L\u2019adre\u00e7a IP \u00e9s inv\u00e0lida (no s\u2019ha pogut determinar l\u2019adre\u00e7a MAC). Corregeix-la i torna-ho a provar.", + "invalid_port": "El port ha d'estar compr\u00e8s entre 1024 i 65535. Corregeix-lo i torna-ho a provar." + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "name": "Nom" + }, + "description": "Configuraci\u00f3 d'una inst\u00e0ncia de servidor de Minecraft per poder monitoritzar-lo.", + "title": "Enlla\u00e7 del servidor de Minecraft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/da.json b/homeassistant/components/minecraft_server/translations/da.json new file mode 100644 index 00000000000..60deb64a078 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "V\u00e6rten er allerede konfigureret." + }, + "error": { + "cannot_connect": "Det lykkedes ikke at oprette forbindelse til serveren. Kontroller v\u00e6rten og porten, og pr\u00f8v igen. S\u00f8rg ogs\u00e5 for, at du k\u00f8rer mindst Minecraft version 1.7 p\u00e5 din server.", + "invalid_ip": "IP-adressen er ugyldig (MAC-adressen kunne ikke bestemmes). Ret den, og pr\u00f8v igen.", + "invalid_port": "Porten skal v\u00e6re i intervallet fra 1024 til 65535. Ret den, og pr\u00f8v igen." + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "name": "Navn" + }, + "description": "Konfigurer din Minecraft-server-instans for at tillade overv\u00e5gning.", + "title": "Forbind din Minecraft-server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/de.json b/homeassistant/components/minecraft_server/translations/de.json new file mode 100644 index 00000000000..484be7bd418 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Der Host ist bereits konfiguriert." + }, + "error": { + "cannot_connect": "Verbindung zum Server fehlgeschlagen. Bitte \u00fcberpr\u00fcfe den Host und den Port und versuche es erneut. Stelle au\u00dferdem sicher, dass Du mindestens Minecraft Version 1.7 auf Deinem Server ausf\u00fchrst.", + "invalid_ip": "IP-Adresse ist ung\u00fcltig (MAC-Adresse konnte nicht ermittelt werden). Bitte korrigieren und erneut versuchen.", + "invalid_port": "Der Port muss im Bereich von 1024 bis 65535 liegen. Bitte korrigieren und erneut versuchen." + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name" + }, + "description": "Richte deine Minecraft Server-Instanz ein, um es \u00fcberwachen zu k\u00f6nnen.", + "title": "Verkn\u00fcpfe deinen Minecraft Server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/en.json b/homeassistant/components/minecraft_server/translations/en.json new file mode 100644 index 00000000000..fc736c667be --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Host is already configured." + }, + "error": { + "cannot_connect": "Failed to connect to server. Please check the host and port and try again. Also ensure that you are running at least Minecraft version 1.7 on your server.", + "invalid_ip": "IP address is invalid (MAC address could not be determined). Please correct it and try again.", + "invalid_port": "Port must be in range from 1024 to 65535. Please correct it and try again." + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name" + }, + "description": "Set up your Minecraft Server instance to allow monitoring.", + "title": "Link your Minecraft Server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/es.json b/homeassistant/components/minecraft_server/translations/es.json new file mode 100644 index 00000000000..3f30c1babd4 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "El host ya est\u00e1 configurado." + }, + "error": { + "cannot_connect": "No se pudo conectar al servidor. Comprueba el host y el puerto e int\u00e9ntalo de nuevo. Tambi\u00e9n aseg\u00farate de que est\u00e1s ejecutando al menos Minecraft versi\u00f3n 1.7 en tu servidor.", + "invalid_ip": "La direcci\u00f3n IP no es valida (no se pudo determinar la direcci\u00f3n MAC). Por favor, corr\u00edgelo e int\u00e9ntalo de nuevo.", + "invalid_port": "El puerto debe estar en el rango de 1024 a 65535. Por favor, corr\u00edgelo e int\u00e9ntalo de nuevo." + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nombre" + }, + "description": "Configura tu instancia de Minecraft Server para permitir la supervisi\u00f3n.", + "title": "Enlace su servidor Minecraft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/fr.json b/homeassistant/components/minecraft_server/translations/fr.json new file mode 100644 index 00000000000..f2bb4dfa3de --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/fr.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "L'h\u00f4te est d\u00e9j\u00e0 configur\u00e9." + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "name": "Nom" + }, + "title": "Reliez votre serveur Minecraft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/hu.json b/homeassistant/components/minecraft_server/translations/hu.json new file mode 100644 index 00000000000..3a2cb80fc9f --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/hu.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_configured": "Kiszolg\u00e1l\u00f3 m\u00e1r konfigur\u00e1lva van." + }, + "step": { + "user": { + "data": { + "host": "Kiszolg\u00e1l\u00f3", + "name": "N\u00e9v" + }, + "title": "Kapcsold \u00f6ssze a Minecraft szervered" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/it.json b/homeassistant/components/minecraft_server/translations/it.json new file mode 100644 index 00000000000..7f214c47743 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "L'host \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Impossibile connettersi al server. Controllare l'host e la porta e riprovare. Assicurarsi inoltre che si esegue almeno Minecraft versione 1.7 sul server.", + "invalid_ip": "L'indirizzo IP non \u00e8 valido (non \u00e8 stato possibile determinare l'indirizzo MAC). Correggilo e riprova.", + "invalid_port": "La porta deve essere compresa tra 1024 e 65535. Correggila e riprova." + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nome" + }, + "description": "Configurare l'istanza del Server Minecraft per consentire il monitoraggio.", + "title": "Collega il tuo Server Minecraft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/ko.json b/homeassistant/components/minecraft_server/translations/ko.json new file mode 100644 index 00000000000..9244acb2144 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8\uc640 \ud3ec\ud2b8\ub97c \ud655\uc778\ud55c \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694. \ub610\ud55c \uc11c\ubc84\uc5d0\uc11c Minecraft \ubc84\uc804 1.7 \uc774\uc0c1\uc744 \uc2e4\ud589 \uc911\uc778\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "invalid_ip": "IP \uc8fc\uc18c\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 (MAC \uc8fc\uc18c\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4). \uc218\uc815 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_port": "\ud3ec\ud2b8\ub294 1024-65535 \ubc94\uc704\uc5d0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ud3ec\ud2b8\ub97c \uc218\uc815\ud55c \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "name": "\uc774\ub984" + }, + "description": "\ubaa8\ub2c8\ud130\ub9c1\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d Minecraft \uc11c\ubc84 \uc778\uc2a4\ud134\uc2a4\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694.", + "title": "Minecraft \uc11c\ubc84 \uc5f0\uacb0" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/lb.json b/homeassistant/components/minecraft_server/translations/lb.json new file mode 100644 index 00000000000..8b08af7b10f --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen mam Server. Iwwerpr\u00e9if den Numm a Port a prob\u00e9ier nach emol. G\u00e9i och s\u00e9cher dass op d'mannst Minecraft Versioun 1.7 um Server leeft.", + "invalid_ip": "IP Adress ass ong\u00eblteg (MAC Adress konnt net best\u00ebmmt ginn). Korrig\u00e9iert et a prob\u00e9iert et nach eng K\u00e9ier w.e.g.", + "invalid_port": "Port muss zw\u00ebscht 1024 a 65535 sinn. Korrig\u00e9iert et a prob\u00e9iert et nach eng K\u00e9ier w.e.g." + }, + "step": { + "user": { + "data": { + "host": "Apparat", + "name": "Numm" + }, + "description": "Riicht deng Minecraft Server Instanz a fir d'Iwwerwaachung z'erlaben", + "title": "Verbann d\u00e4in Minecraft Server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/.translations/lv.json b/homeassistant/components/minecraft_server/translations/lv.json similarity index 100% rename from homeassistant/components/minecraft_server/.translations/lv.json rename to homeassistant/components/minecraft_server/translations/lv.json diff --git a/homeassistant/components/minecraft_server/translations/nl.json b/homeassistant/components/minecraft_server/translations/nl.json new file mode 100644 index 00000000000..1d589f942e7 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/nl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Host is al geconfigureerd." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met de server. Controleer de host en de poort en probeer het opnieuw. Zorg er ook voor dat u minimaal Minecraft versie 1.7 op uw server uitvoert.", + "invalid_ip": "IP-adres is ongeldig (MAC-adres kon niet worden bepaald). Corrigeer het en probeer het opnieuw.", + "invalid_port": "Poort moet tussen 1024 en 65535 liggen. Corrigeer dit en probeer het opnieuw." + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Naam" + }, + "description": "Stel uw Minecraft server in om monitoring toe te staan.", + "title": "Koppel uw Minecraft server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/no.json b/homeassistant/components/minecraft_server/translations/no.json new file mode 100644 index 00000000000..bc3bb2955ad --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Verten er allerede konfigurert." + }, + "error": { + "cannot_connect": "Kan ikke koble til serveren. Kontroller verten og porten, og pr\u00f8v p\u00e5 nytt. S\u00f8rg ogs\u00e5 for at du kj\u00f8rer minst Minecraft versjon 1.7 p\u00e5 serveren din.", + "invalid_ip": "IP-adressen er ugyldig (MAC-adressen kan ikke fastsl\u00e5s). Vennligst korriger den og pr\u00f8v p\u00e5 nytt.", + "invalid_port": "Porten m\u00e5 v\u00e6re i omr\u00e5det 1024 til 65535. Vennligst korriger den og pr\u00f8v p\u00e5 nytt." + }, + "step": { + "user": { + "data": { + "host": "Vert", + "name": "Navn" + }, + "description": "Konfigurer Minecraft Server-forekomsten slik at den kan overv\u00e5kes.", + "title": "Link din Minecraft Server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/pl.json b/homeassistant/components/minecraft_server/translations/pl.json new file mode 100644 index 00000000000..77d83f37174 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Host jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "B\u0142\u0105d po\u0142\u0105czenia z serwerem. Sprawd\u017a adres hosta i port i spr\u00f3buj ponownie. Upewnij si\u0119 tak\u017ce, \u017ce na serwerze dzia\u0142a Minecraft w wersji przynajmniej 1.7.", + "invalid_ip": "Adres IP jest nieprawid\u0142owy (nie mo\u017cna ustali\u0107 adresu MAC). Popraw to i spr\u00f3buj ponownie.", + "invalid_port": "Port musi znajdowa\u0107 si\u0119 w zakresie od 1024 do 65535. Popraw go i spr\u00f3buj ponownie." + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa" + }, + "description": "Skonfiguruj instancj\u0119 serwera Minecraft, aby umo\u017cliwi\u0107 monitorowanie.", + "title": "Po\u0142\u0105cz sw\u00f3j serwer Minecraft" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/pt.json b/homeassistant/components/minecraft_server/translations/pt.json new file mode 100644 index 00000000000..286cd58dd89 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/ru.json b/homeassistant/components/minecraft_server/translations/ru.json new file mode 100644 index 00000000000..b95c12a1d80 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430. \u0422\u0430\u043a\u0436\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u0412\u0430\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Minecraft \u0432\u0435\u0440\u0441\u0438\u0438 1.7, \u0438\u043b\u0438 \u0432\u044b\u0448\u0435.", + "invalid_ip": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 (\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c MAC-\u0430\u0434\u0440\u0435\u0441).", + "invalid_port": "\u041f\u043e\u0440\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1024 \u0434\u043e 65535." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0412\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Minecraft.", + "title": "Minecraft Server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/sl.json b/homeassistant/components/minecraft_server/translations/sl.json new file mode 100644 index 00000000000..30607ad3b11 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Gostitelj je \u017ee konfiguriran." + }, + "error": { + "cannot_connect": "Povezava s stre\u017enikom ni uspela. Preverite gostitelja in vrata in poskusite znova. Zagotovite tudi, da na stre\u017eniku izvajate vsaj Minecraft razli\u010dice 1.7.", + "invalid_ip": "IP naslov ni veljaven (MAC naslova ni mogo\u010de dolo\u010diti). Popravite ga in poskusite znova.", + "invalid_port": "Vrata morajo biti v razponu od 1024 do 65535. Prosimo, popravite in poskusite znova." + }, + "step": { + "user": { + "data": { + "host": "Gostitelj", + "name": "Ime" + }, + "description": "Nastavite svoj Minecraft stre\u017enik, da omogo\u010dite spremljanje.", + "title": "Pove\u017eite svoj Minecraft stre\u017enik" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/sv.json b/homeassistant/components/minecraft_server/translations/sv.json new file mode 100644 index 00000000000..00255511420 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "V\u00e4rden \u00e4r redan konfigurerad." + }, + "error": { + "cannot_connect": "Misslyckades med att ansluta till servern. Kontrollera v\u00e4rden och porten och f\u00f6rs\u00f6k igen. Se ocks\u00e5 till att du k\u00f6r minst Minecraft version 1.7 p\u00e5 din server.", + "invalid_ip": "IP-adressen \u00e4r ogiltig (MAC-adressen kunde inte fastst\u00e4llas). Korrigera det och f\u00f6rs\u00f6k igen.", + "invalid_port": "Porten m\u00e5ste ligga inom intervallet 1024 till 65535. Korrigera den och f\u00f6rs\u00f6k igen." + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rd", + "name": "Namn" + }, + "description": "St\u00e4ll in din Minecraft Server-instans f\u00f6r att till\u00e5ta \u00f6vervakning.", + "title": "L\u00e4nka din Minecraft-server" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/tr.json b/homeassistant/components/minecraft_server/translations/tr.json new file mode 100644 index 00000000000..7527294a3c7 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/tr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Host zaten ayarlanm\u0131\u015f." + }, + "error": { + "cannot_connect": "Server ile ba\u011flant\u0131 kurulamad\u0131. L\u00fctfen host ve port ayarlar\u0131n\u0131 kontrol et ve tekrar dene. Ayr\u0131ca, serverda en az Minecraft s\u00fcr\u00fcm 1.7 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131ndan emin ol.", + "invalid_ip": "IP adresi ge\u00e7ersiz (MAC adresi belirlenemedi). L\u00fctfen d\u00fczelt ve tekrar dene.", + "invalid_port": "Port 1024 ile 65535 aral\u0131\u011f\u0131nda olmal\u0131d\u0131r. L\u00fctfen d\u00fczelt ve yeniden dene." + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Ad" + }, + "description": "G\u00f6zetmeye izin vermek i\u00e7in Minecraft server nesnesini ayarla.", + "title": "Minecraft Servern\u0131 ba\u011fla" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/zh-Hant.json b/homeassistant/components/minecraft_server/translations/zh-Hant.json new file mode 100644 index 00000000000..6dc996fa67d --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u4f3a\u670d\u5668\u9023\u7dda\u5931\u6557\u3002\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u8207\u901a\u8a0a\u57e0\u5f8c\u518d\u8a66\u4e00\u6b21\u3002\u53e6\u8acb\u78ba\u8a8d\u65bc\u4f3a\u670d\u5668\u4e0a\u57f7\u884c\u6700\u65b0\u7248\u672c Minecraft 1.7 \u7248\u3002", + "invalid_ip": "IP \u4f4d\u5740\u7121\u6548\uff08MAC \u4f4d\u5740\u7121\u6cd5\u78ba\u8a8d\uff09\u3002\u8acb\u4fee\u6b63\u5f8c\u3001\u518d\u8a66\u4e00\u6b21\u3002", + "invalid_port": "\u901a\u8a0a\u57e0\u7bc4\u570d\u4ecb\u65bc 1024 \u81f3 65535\u3002\u8acb\u4fee\u6b63\u5f8c\u3001\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "name": "\u540d\u7a31" + }, + "description": "\u8a2d\u5b9a Minecraft \u4f3a\u670d\u5668\u4ee5\u9032\u884c\u76e3\u63a7\u3002", + "title": "\u9023\u7d50 Minecraft \u4f3a\u670d\u5668" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minio/manifest.json b/homeassistant/components/minio/manifest.json index 35f2c56d3da..ba31bbcb2de 100644 --- a/homeassistant/components/minio/manifest.json +++ b/homeassistant/components/minio/manifest.json @@ -3,6 +3,5 @@ "name": "Minio", "documentation": "https://www.home-assistant.io/integrations/minio", "requirements": ["minio==4.0.9"], - "dependencies": [], "codeowners": ["@tkislan"] } diff --git a/homeassistant/components/mitemp_bt/manifest.json b/homeassistant/components/mitemp_bt/manifest.json index c87f4988adf..d35e50a8657 100644 --- a/homeassistant/components/mitemp_bt/manifest.json +++ b/homeassistant/components/mitemp_bt/manifest.json @@ -3,6 +3,5 @@ "name": "Xiaomi Mijia BLE Temperature and Humidity Sensor", "documentation": "https://www.home-assistant.io/integrations/mitemp_bt", "requirements": ["mitemp_bt==0.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mitemp_bt/sensor.py b/homeassistant/components/mitemp_bt/sensor.py index febfb93cf1d..b2033757693 100644 --- a/homeassistant/components/mitemp_bt/sensor.py +++ b/homeassistant/components/mitemp_bt/sensor.py @@ -15,6 +15,7 @@ from homeassistant.const import ( DEVICE_CLASS_BATTERY, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE, + TEMP_CELSIUS, UNIT_PERCENTAGE, ) import homeassistant.helpers.config_validation as cv @@ -46,7 +47,7 @@ DEFAULT_TIMEOUT = 10 # Sensor types are defined like: Name, units SENSOR_TYPES = { - "temperature": [DEVICE_CLASS_TEMPERATURE, "Temperature", "°C"], + "temperature": [DEVICE_CLASS_TEMPERATURE, "Temperature", TEMP_CELSIUS], "humidity": [DEVICE_CLASS_HUMIDITY, "Humidity", UNIT_PERCENTAGE], "battery": [DEVICE_CLASS_BATTERY, "Battery", UNIT_PERCENTAGE], } diff --git a/homeassistant/components/mjpeg/manifest.json b/homeassistant/components/mjpeg/manifest.json index 6de13808991..1e2bb33a24c 100644 --- a/homeassistant/components/mjpeg/manifest.json +++ b/homeassistant/components/mjpeg/manifest.json @@ -2,7 +2,5 @@ "domain": "mjpeg", "name": "MJPEG IP Camera", "documentation": "https://www.home-assistant.io/integrations/mjpeg", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mobile_app/.translations/bg.json b/homeassistant/components/mobile_app/.translations/bg.json deleted file mode 100644 index c89f66fec1a..00000000000 --- a/homeassistant/components/mobile_app/.translations/bg.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u041e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u043d\u043e\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0437\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u044f \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442. \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430] ({apps_url}) \u0437\u0430 \u0441\u043f\u0438\u0441\u044a\u043a \u0441\u044a\u0441 \u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \"\u041c\u043e\u0431\u0438\u043b\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\"?", - "title": "\u041c\u043e\u0431\u0438\u043b\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u041c\u043e\u0431\u0438\u043b\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/ca.json b/homeassistant/components/mobile_app/.translations/ca.json deleted file mode 100644 index 25af1d5e18d..00000000000 --- a/homeassistant/components/mobile_app/.translations/ca.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Obre l\u2019aplicaci\u00f3 m\u00f2bil per configurar la integraci\u00f3 amb Home Assistant. Mira [la documentaci\u00f3]({apps_url}) per veure la llista d\u2019aplicacions compatibles." - }, - "step": { - "confirm": { - "description": "Vols configurar el component d'aplicaci\u00f3 m\u00f2bil?", - "title": "Aplicaci\u00f3 m\u00f2bil" - } - }, - "title": "Aplicaci\u00f3 m\u00f2bil" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/cs.json b/homeassistant/components/mobile_app/.translations/cs.json deleted file mode 100644 index b240e122485..00000000000 --- a/homeassistant/components/mobile_app/.translations/cs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Otev\u0159ete mobiln\u00ed aplikaci pro nastaven\u00ed integrace s aplikac\u00ed Home Assistant. Seznam kompatibiln\u00edch aplikac\u00ed naleznete v [dokumentaci]({apps_url})." - }, - "step": { - "confirm": { - "description": "Chcete nastavit komponentu Mobiln\u00ed aplikace?", - "title": "Mobiln\u00ed aplikace" - } - }, - "title": "Mobiln\u00ed aplikace" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/da.json b/homeassistant/components/mobile_app/.translations/da.json deleted file mode 100644 index 54dc85e7255..00000000000 --- a/homeassistant/components/mobile_app/.translations/da.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u00c5bn mobilappen for at konfigurere integrationen med Home Assistant. Se [dokumentationen]({apps_url}) for at f\u00e5 vist en liste over kompatible apps." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere mobilapp-komponenten?", - "title": "Mobilapp" - } - }, - "title": "Mobilapp" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/de.json b/homeassistant/components/mobile_app/.translations/de.json deleted file mode 100644 index 816d281752d..00000000000 --- a/homeassistant/components/mobile_app/.translations/de.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u00d6ffne die mobile App, um die Integration mit Home Assistant einzurichten. Eine Liste der kompatiblen Apps gibt es hier [the docs] ({apps_url})." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du die Mobile App-Komponente einrichten?", - "title": "Mobile App" - } - }, - "title": "Mobile App" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/en.json b/homeassistant/components/mobile_app/.translations/en.json deleted file mode 100644 index 79a5fe1fba8..00000000000 --- a/homeassistant/components/mobile_app/.translations/en.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Open the mobile app to set up the integration with Home Assistant. See [the docs]({apps_url}) for a list of compatible apps." - }, - "step": { - "confirm": { - "description": "Do you want to set up the Mobile App component?", - "title": "Mobile App" - } - }, - "title": "Mobile App" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/es-419.json b/homeassistant/components/mobile_app/.translations/es-419.json deleted file mode 100644 index 271e38147c3..00000000000 --- a/homeassistant/components/mobile_app/.translations/es-419.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Abra la aplicaci\u00f3n m\u00f3vil para configurar la integraci\u00f3n con Home Assistant. Consulte [los documentos] ({apps_url}) para obtener una lista de aplicaciones compatibles." - }, - "step": { - "confirm": { - "title": "Aplicaci\u00f3n movil" - } - }, - "title": "Aplicaci\u00f3n movil" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/es.json b/homeassistant/components/mobile_app/.translations/es.json deleted file mode 100644 index e88012b8613..00000000000 --- a/homeassistant/components/mobile_app/.translations/es.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Abre la aplicaci\u00f3n en el m\u00f3vil para configurar la integraci\u00f3n con Home Assistant. Echa un vistazo a [la documentaci\u00f3n]({apps_url}) para ver una lista de apps compatibles." - }, - "step": { - "confirm": { - "description": "\u00bfQuieres configurar el componente de la aplicaci\u00f3n para el m\u00f3vil?", - "title": "Aplicaci\u00f3n para el m\u00f3vil" - } - }, - "title": "Aplicaci\u00f3n para el m\u00f3vil" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/fr.json b/homeassistant/components/mobile_app/.translations/fr.json deleted file mode 100644 index 54c945a7a4b..00000000000 --- a/homeassistant/components/mobile_app/.translations/fr.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Ouvrez l'application mobile pour configurer l'int\u00e9gration avec Home Assistant. Voir [la documentation] ( {apps_url} ) pour obtenir une liste des applications compatibles." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer le composant Application mobile?", - "title": "Application mobile" - } - }, - "title": "Application mobile" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/hu.json b/homeassistant/components/mobile_app/.translations/hu.json deleted file mode 100644 index e95f4743ae3..00000000000 --- a/homeassistant/components/mobile_app/.translations/hu.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Nyisd meg a mobil alkalmaz\u00e1st a Home Assistant-tal val\u00f3 integr\u00e1ci\u00f3hoz. A kompatibilis alkalmaz\u00e1sok list\u00e1j\u00e1nak megtekint\u00e9s\u00e9hez ellen\u0151rizd [a le\u00edr\u00e1st]({apps_url})." - }, - "step": { - "confirm": { - "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a mobil alkalmaz\u00e1s komponenst?", - "title": "Mobil alkalmaz\u00e1s" - } - }, - "title": "Mobil alkalmaz\u00e1s" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/it.json b/homeassistant/components/mobile_app/.translations/it.json deleted file mode 100644 index 37c0deb9c2d..00000000000 --- a/homeassistant/components/mobile_app/.translations/it.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Apri l'App per dispositivi mobili per configurare l'integrazione con Home Assistant. Vedi [i documenti]({apps_url}) per un elenco di app compatibili." - }, - "step": { - "confirm": { - "description": "Si desidera configurare il componente App per dispositivi mobili?", - "title": "App per dispositivi mobili" - } - }, - "title": "App per dispositivi mobili" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/ko.json b/homeassistant/components/mobile_app/.translations/ko.json deleted file mode 100644 index 899845fcc2e..00000000000 --- a/homeassistant/components/mobile_app/.translations/ko.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\ubaa8\ubc14\uc77c \uc571\uc744 \uc5f4\uc5b4 Home Assistant \uc640 \uc5f0\ub3d9\uc744 \uc124\uc815\ud574\uc8fc\uc138\uc694. \ud638\ud658\ub418\ub294 \uc571 \ubaa9\ub85d\uc740 [\uc548\ub0b4]({apps_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "confirm": { - "description": "\ubaa8\ubc14\uc77c \uc571 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc124\uc815\uc744 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\ubaa8\ubc14\uc77c \uc571" - } - }, - "title": "\ubaa8\ubc14\uc77c \uc571" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/lb.json b/homeassistant/components/mobile_app/.translations/lb.json deleted file mode 100644 index a66ae603291..00000000000 --- a/homeassistant/components/mobile_app/.translations/lb.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Maacht d'Mobil App op fir d'Integratioun mam Home Assistant anzeriichten. Kuckt an der [Dokumentatioun]({apps_url}) fir eng L\u00ebscht vun kompatiblen App's." - }, - "step": { - "confirm": { - "description": "Soll d'Mobil App konfigur\u00e9iert ginn?", - "title": "Mobil App" - } - }, - "title": "Mobil App" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/nl.json b/homeassistant/components/mobile_app/.translations/nl.json deleted file mode 100644 index 8140e7df7dc..00000000000 --- a/homeassistant/components/mobile_app/.translations/nl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Open de mobiele app om de integratie met de Home Assistant op te zetten. Zie [de docs]({apps_url}) voor een lijst met compatibele apps." - }, - "step": { - "confirm": { - "description": "Wilt u de Mobile App component instellen?", - "title": "Mobiele app" - } - }, - "title": "Mobiele app" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/nn.json b/homeassistant/components/mobile_app/.translations/nn.json deleted file mode 100644 index b4494a45ad2..00000000000 --- a/homeassistant/components/mobile_app/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "Mobilapp" - } - }, - "title": "Mobilapp" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/no.json b/homeassistant/components/mobile_app/.translations/no.json deleted file mode 100644 index 7189bc53c16..00000000000 --- a/homeassistant/components/mobile_app/.translations/no.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u00c5pne mobilappen for \u00e5 konfigurere integrasjonen med hjemmevirksomheten. Se [docs]({apps_url}) for en liste over kompatible apper." - }, - "step": { - "confirm": { - "description": "Vil du sette opp mobilapp-komponenten?", - "title": "Mobilapp" - } - }, - "title": "Mobilapp" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/pl.json b/homeassistant/components/mobile_app/.translations/pl.json deleted file mode 100644 index 5fa53384ff0..00000000000 --- a/homeassistant/components/mobile_app/.translations/pl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Otw\u00f3rz aplikacj\u0119 mobiln\u0105, aby skonfigurowa\u0107 integracj\u0119 z Home Assistant. Zapoznaj si\u0119 z [dokumentacj\u0105]({apps_url}), by zobaczy\u0107 list\u0119 kompatybilnych aplikacji." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 komponent aplikacji mobilnej?", - "title": "Aplikacja mobilna" - } - }, - "title": "Aplikacja mobilna" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/pt-BR.json b/homeassistant/components/mobile_app/.translations/pt-BR.json deleted file mode 100644 index d276b0511b3..00000000000 --- a/homeassistant/components/mobile_app/.translations/pt-BR.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Abra o aplicativo m\u00f3vel para configurar a integra\u00e7\u00e3o com o Home Assistant. Veja [os documentos] ( {apps_url} ) para obter uma lista de aplicativos compat\u00edveis." - }, - "step": { - "confirm": { - "description": "Deseja configurar o componente do aplicativo m\u00f3vel?", - "title": "Aplicativo m\u00f3vel" - } - }, - "title": "Aplicativo m\u00f3vel" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/pt.json b/homeassistant/components/mobile_app/.translations/pt.json deleted file mode 100644 index 1c61180726c..00000000000 --- a/homeassistant/components/mobile_app/.translations/pt.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "Aplica\u00e7\u00e3o m\u00f3vel" - } - }, - "title": "Aplica\u00e7\u00e3o m\u00f3vel" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/ru.json b/homeassistant/components/mobile_app/.translations/ru.json deleted file mode 100644 index 28a497ef219..00000000000 --- a/homeassistant/components/mobile_app/.translations/ru.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 Home Assistant. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({apps_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?", - "title": "\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/sl.json b/homeassistant/components/mobile_app/.translations/sl.json deleted file mode 100644 index 6236421ffce..00000000000 --- a/homeassistant/components/mobile_app/.translations/sl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "Odprite mobilno aplikacijo, da nastavite integracijo s storitvijo Home Assistant. Za seznam zdru\u017eljivih aplikacij si oglejte [docs] ({apps_url})." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti komponento aplikacije Mobile App?", - "title": "Mobilna Aplikacija" - } - }, - "title": "Mobilna Aplikacija" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/sv.json b/homeassistant/components/mobile_app/.translations/sv.json deleted file mode 100644 index 4f9570146f2..00000000000 --- a/homeassistant/components/mobile_app/.translations/sv.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u00d6ppna mobilappen f\u00f6r att konfigurera integrationen med Home Assistant. Se [docs] ({apps_url}) f\u00f6r en lista \u00f6ver kompatibla appar." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera komponenten Mobile App?", - "title": "Mobilapp" - } - }, - "title": "Mobilapp" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/uk.json b/homeassistant/components/mobile_app/.translations/uk.json deleted file mode 100644 index 654eb7675a8..00000000000 --- a/homeassistant/components/mobile_app/.translations/uk.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "description": "\u0412\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0434\u0430\u0442\u043a\u0430?", - "title": "\u041c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0439 \u0434\u043e\u0434\u0430\u0442\u043e\u043a" - } - }, - "title": "\u041c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0439 \u0434\u043e\u0434\u0430\u0442\u043e\u043a" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/vi.json b/homeassistant/components/mobile_app/.translations/vi.json deleted file mode 100644 index 5b234c514a0..00000000000 --- a/homeassistant/components/mobile_app/.translations/vi.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "M\u1edf \u1ee9ng d\u1ee5ng di \u0111\u1ed9ng \u0111\u1ec3 thi\u1ebft l\u1eadp t\u00edch h\u1ee3p v\u1edbi Home Assistant. Xem [t\u00e0i li\u1ec7u] ({apps_url}) cho danh s\u00e1ch c\u00e1c \u1ee9ng d\u1ee5ng t\u01b0\u01a1ng th\u00edch." - }, - "step": { - "confirm": { - "description": "B\u1ea1n c\u00f3 mu\u1ed1n thi\u1ebft l\u1eadp th\u00e0nh ph\u1ea7n \u1ee8ng d\u1ee5ng di \u0111\u1ed9ng kh\u00f4ng?", - "title": "\u1ee8ng d\u1ee5ng di \u0111\u1ed9ng" - } - }, - "title": "\u1ee8ng d\u1ee5ng di \u0111\u1ed9ng" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/zh-Hans.json b/homeassistant/components/mobile_app/.translations/zh-Hans.json deleted file mode 100644 index 4a5e14196b0..00000000000 --- a/homeassistant/components/mobile_app/.translations/zh-Hans.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u6253\u5f00\u79fb\u52a8\u5e94\u7528\u7a0b\u5e8f\u4ee5\u8bbe\u7f6e\u4e0e Home Assistant \u7684\u96c6\u6210\u3002\u8bf7\u53c2\u9605[\u6587\u6863]({apps_url})\u4ee5\u83b7\u53d6\u517c\u5bb9\u5e94\u7528\u7684\u5217\u8868\u3002" - }, - "step": { - "confirm": { - "description": "\u60a8\u60f3\u8981\u914d\u7f6e\u79fb\u52a8\u5e94\u7528\u7a0b\u5e8f\u7ec4\u4ef6\u5417\uff1f", - "title": "\u79fb\u52a8\u5e94\u7528" - } - }, - "title": "\u79fb\u52a8\u5e94\u7528" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/.translations/zh-Hant.json b/homeassistant/components/mobile_app/.translations/zh-Hant.json deleted file mode 100644 index 3b1ab72f7d3..00000000000 --- a/homeassistant/components/mobile_app/.translations/zh-Hant.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "install_app": "\u958b\u555f\u624b\u6a5f App \u4ee5\u9032\u884c Home Assistant \u6574\u5408\u8a2d\u5b9a\u3002\u8acb\u53c3\u95b1 [\u6587\u4ef6]({apps_url}) \u7372\u5f97\u652f\u63f4\u7684\u624b\u6a5f App \u5217\u8868\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u624b\u6a5f App \u5143\u4ef6\uff1f", - "title": "\u624b\u6a5f App" - } - }, - "title": "\u624b\u6a5f App" - } -} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/binary_sensor.py b/homeassistant/components/mobile_app/binary_sensor.py index 73bf925553e..c04a1af316d 100644 --- a/homeassistant/components/mobile_app/binary_sensor.py +++ b/homeassistant/components/mobile_app/binary_sensor.py @@ -18,7 +18,7 @@ from .entity import MobileAppEntity, sensor_id async def async_setup_entry(hass, config_entry, async_add_entities): """Set up mobile app binary sensor from a config entry.""" - entities = list() + entities = [] webhook_id = config_entry.data[CONF_WEBHOOK_ID] diff --git a/homeassistant/components/mobile_app/const.py b/homeassistant/components/mobile_app/const.py index f43f1c88396..a9cdc676932 100644 --- a/homeassistant/components/mobile_app/const.py +++ b/homeassistant/components/mobile_app/const.py @@ -70,5 +70,5 @@ ATTR_SENSOR_TYPE_SENSOR = "sensor" ATTR_SENSOR_UNIQUE_ID = "unique_id" ATTR_SENSOR_UOM = "unit_of_measurement" -SIGNAL_SENSOR_UPDATE = DOMAIN + "_sensor_update" +SIGNAL_SENSOR_UPDATE = f"{DOMAIN}_sensor_update" SIGNAL_LOCATION_UPDATE = DOMAIN + "_location_update_{}" diff --git a/homeassistant/components/mobile_app/entity.py b/homeassistant/components/mobile_app/entity.py index 5200c6b0c12..7a12f617740 100644 --- a/homeassistant/components/mobile_app/entity.py +++ b/homeassistant/components/mobile_app/entity.py @@ -103,4 +103,4 @@ class MobileAppEntity(Entity): return self._config = data - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/mobile_app/helpers.py b/homeassistant/components/mobile_app/helpers.py index 400ff31be89..b2cb3d22e4b 100644 --- a/homeassistant/components/mobile_app/helpers.py +++ b/homeassistant/components/mobile_app/helpers.py @@ -7,6 +7,7 @@ from aiohttp.web import Response, json_response from nacl.encoding import Base64Encoder from nacl.secret import SecretBox +from homeassistant.const import HTTP_BAD_REQUEST, HTTP_OK from homeassistant.core import Context from homeassistant.helpers.json import JSONEncoder from homeassistant.helpers.typing import HomeAssistantType @@ -90,7 +91,7 @@ def registration_context(registration: Dict) -> Context: return Context(user_id=registration[CONF_USER_ID]) -def empty_okay_response(headers: Dict = None, status: int = 200) -> Response: +def empty_okay_response(headers: Dict = None, status: int = HTTP_OK) -> Response: """Return a Response with empty JSON object and a 200.""" return Response( text="{}", status=status, content_type="application/json", headers=headers @@ -98,7 +99,7 @@ def empty_okay_response(headers: Dict = None, status: int = 200) -> Response: def error_response( - code: str, message: str, status: int = 400, headers: dict = None + code: str, message: str, status: int = HTTP_BAD_REQUEST, headers: dict = None ) -> Response: """Return an error Response.""" return json_response( @@ -144,7 +145,7 @@ def savable_state(hass: HomeAssistantType) -> Dict: def webhook_response( - data, *, registration: Dict, status: int = 200, headers: Dict = None + data, *, registration: Dict, status: int = HTTP_OK, headers: Dict = None ) -> Response: """Return a encrypted response if registration supports it.""" data = json.dumps(data, cls=JSONEncoder) diff --git a/homeassistant/components/mobile_app/manifest.json b/homeassistant/components/mobile_app/manifest.json index d6e1156b233..0576a466d7e 100644 --- a/homeassistant/components/mobile_app/manifest.json +++ b/homeassistant/components/mobile_app/manifest.json @@ -1,6 +1,6 @@ { "domain": "mobile_app", - "name": "Home Assistant Mobile App Support", + "name": "Mobile App", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/mobile_app", "requirements": ["PyNaCl==1.3.0"], diff --git a/homeassistant/components/mobile_app/notify.py b/homeassistant/components/mobile_app/notify.py index 00f4577ad9e..f3c79103111 100644 --- a/homeassistant/components/mobile_app/notify.py +++ b/homeassistant/components/mobile_app/notify.py @@ -12,6 +12,7 @@ from homeassistant.components.notify import ( ATTR_TITLE_DEFAULT, BaseNotificationService, ) +from homeassistant.const import HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.util.dt as dt_util @@ -134,7 +135,7 @@ class MobileAppNotificationService(BaseNotificationService): response = await self._session.post(push_url, json=data) result = await response.json() - if response.status in [200, 201, 202]: + if response.status in [HTTP_OK, 201, 202]: log_rate_limits(self.hass, entry_data[ATTR_DEVICE_NAME], result) continue diff --git a/homeassistant/components/mobile_app/sensor.py b/homeassistant/components/mobile_app/sensor.py index 199ba968dd2..11e07ed5e79 100644 --- a/homeassistant/components/mobile_app/sensor.py +++ b/homeassistant/components/mobile_app/sensor.py @@ -18,7 +18,7 @@ from .entity import MobileAppEntity, sensor_id async def async_setup_entry(hass, config_entry, async_add_entities): """Set up mobile app sensor from a config entry.""" - entities = list() + entities = [] webhook_id = config_entry.data[CONF_WEBHOOK_ID] diff --git a/homeassistant/components/mobile_app/strings.json b/homeassistant/components/mobile_app/strings.json index 646151a5229..fd1cddbcb5f 100644 --- a/homeassistant/components/mobile_app/strings.json +++ b/homeassistant/components/mobile_app/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "Mobile App", "step": { "confirm": { - "title": "Mobile App", "description": "Do you want to set up the Mobile App component?" } }, diff --git a/homeassistant/components/mobile_app/translations/bg.json b/homeassistant/components/mobile_app/translations/bg.json new file mode 100644 index 00000000000..487a036e44b --- /dev/null +++ b/homeassistant/components/mobile_app/translations/bg.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u041e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u043d\u043e\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0437\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u044f \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442. \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430] ({apps_url}) \u0437\u0430 \u0441\u043f\u0438\u0441\u044a\u043a \u0441\u044a\u0441 \u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \"\u041c\u043e\u0431\u0438\u043b\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\"?", + "title": "\u041c\u043e\u0431\u0438\u043b\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/ca.json b/homeassistant/components/mobile_app/translations/ca.json new file mode 100644 index 00000000000..697f676df78 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/ca.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Obre l\u2019aplicaci\u00f3 m\u00f2bil per configurar la integraci\u00f3 amb Home Assistant. Mira [la documentaci\u00f3]({apps_url}) per veure la llista d\u2019aplicacions compatibles." + }, + "step": { + "confirm": { + "description": "Vols configurar el component d'aplicaci\u00f3 m\u00f2bil?", + "title": "Aplicaci\u00f3 m\u00f2bil" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/cs.json b/homeassistant/components/mobile_app/translations/cs.json new file mode 100644 index 00000000000..b1d244cc4d6 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/cs.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Otev\u0159ete mobiln\u00ed aplikaci pro nastaven\u00ed integrace s aplikac\u00ed Home Assistant. Seznam kompatibiln\u00edch aplikac\u00ed naleznete v [dokumentaci]({apps_url})." + }, + "step": { + "confirm": { + "description": "Chcete nastavit komponentu Mobiln\u00ed aplikace?", + "title": "Mobiln\u00ed aplikace" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/da.json b/homeassistant/components/mobile_app/translations/da.json new file mode 100644 index 00000000000..e497ef546e3 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/da.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u00c5bn mobilappen for at konfigurere integrationen med Home Assistant. Se [dokumentationen]({apps_url}) for at f\u00e5 vist en liste over kompatible apps." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere mobilapp-komponenten?", + "title": "Mobilapp" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/de.json b/homeassistant/components/mobile_app/translations/de.json new file mode 100644 index 00000000000..f7181424964 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/de.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u00d6ffne die mobile App, um die Integration mit Home Assistant einzurichten. Eine Liste der kompatiblen Apps gibt es hier [the docs] ({apps_url})." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du die Mobile App-Komponente einrichten?", + "title": "Mobile App" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/en.json b/homeassistant/components/mobile_app/translations/en.json new file mode 100644 index 00000000000..9ddf3c95586 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/en.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Open the mobile app to set up the integration with Home Assistant. See [the docs]({apps_url}) for a list of compatible apps." + }, + "step": { + "confirm": { + "description": "Do you want to set up the Mobile App component?", + "title": "Mobile App" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/es-419.json b/homeassistant/components/mobile_app/translations/es-419.json new file mode 100644 index 00000000000..cb666a7d72d --- /dev/null +++ b/homeassistant/components/mobile_app/translations/es-419.json @@ -0,0 +1,12 @@ +{ + "config": { + "abort": { + "install_app": "Abra la aplicaci\u00f3n m\u00f3vil para configurar la integraci\u00f3n con Home Assistant. Consulte [los documentos] ({apps_url}) para obtener una lista de aplicaciones compatibles." + }, + "step": { + "confirm": { + "title": "Aplicaci\u00f3n movil" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/es.json b/homeassistant/components/mobile_app/translations/es.json new file mode 100644 index 00000000000..ca145bd68c2 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/es.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Abre la aplicaci\u00f3n en el m\u00f3vil para configurar la integraci\u00f3n con Home Assistant. Echa un vistazo a [la documentaci\u00f3n]({apps_url}) para ver una lista de apps compatibles." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar el componente de la aplicaci\u00f3n para el m\u00f3vil?", + "title": "Aplicaci\u00f3n para el m\u00f3vil" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/fr.json b/homeassistant/components/mobile_app/translations/fr.json new file mode 100644 index 00000000000..55d1d4e0d9e --- /dev/null +++ b/homeassistant/components/mobile_app/translations/fr.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Ouvrez l'application mobile pour configurer l'int\u00e9gration avec Home Assistant. Voir [la documentation] ( {apps_url} ) pour obtenir une liste des applications compatibles." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer le composant Application mobile?", + "title": "Application mobile" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/hu.json b/homeassistant/components/mobile_app/translations/hu.json new file mode 100644 index 00000000000..608a4a7879b --- /dev/null +++ b/homeassistant/components/mobile_app/translations/hu.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Nyisd meg a mobil alkalmaz\u00e1st a Home Assistant-tal val\u00f3 integr\u00e1ci\u00f3hoz. A kompatibilis alkalmaz\u00e1sok list\u00e1j\u00e1nak megtekint\u00e9s\u00e9hez ellen\u0151rizd [a le\u00edr\u00e1st]({apps_url})." + }, + "step": { + "confirm": { + "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a mobil alkalmaz\u00e1s komponenst?", + "title": "Mobil alkalmaz\u00e1s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/it.json b/homeassistant/components/mobile_app/translations/it.json new file mode 100644 index 00000000000..1b91c566a53 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/it.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Apri l'App per dispositivi mobili per configurare l'integrazione con Home Assistant. Vedi [i documenti]({apps_url}) per un elenco di app compatibili." + }, + "step": { + "confirm": { + "description": "Si desidera configurare il componente App per dispositivi mobili?", + "title": "App per dispositivi mobili" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/ko.json b/homeassistant/components/mobile_app/translations/ko.json new file mode 100644 index 00000000000..f427f3e3a12 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/ko.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\ubaa8\ubc14\uc77c \uc571\uc744 \uc5f4\uc5b4 Home Assistant \uc640 \uc5f0\ub3d9\uc744 \uc124\uc815\ud574\uc8fc\uc138\uc694. \ud638\ud658\ub418\ub294 \uc571 \ubaa9\ub85d\uc740 [\uc548\ub0b4]({apps_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "confirm": { + "description": "\ubaa8\ubc14\uc77c \uc571 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc124\uc815\uc744 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "\ubaa8\ubc14\uc77c \uc571" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/lb.json b/homeassistant/components/mobile_app/translations/lb.json new file mode 100644 index 00000000000..77fd6517410 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/lb.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Maacht d'Mobil App op fir d'Integratioun mam Home Assistant anzeriichten. Kuckt an der [Dokumentatioun]({apps_url}) fir eng L\u00ebscht vun kompatiblen App's." + }, + "step": { + "confirm": { + "description": "Soll d'Mobil App konfigur\u00e9iert ginn?", + "title": "Mobil App" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/nl.json b/homeassistant/components/mobile_app/translations/nl.json new file mode 100644 index 00000000000..06375b4a0b6 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/nl.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Open de mobiele app om de integratie met de Home Assistant op te zetten. Zie [de docs]({apps_url}) voor een lijst met compatibele apps." + }, + "step": { + "confirm": { + "description": "Wilt u de Mobile App component instellen?", + "title": "Mobiele app" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/nn.json b/homeassistant/components/mobile_app/translations/nn.json new file mode 100644 index 00000000000..25828e48db5 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "Mobilapp" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/no.json b/homeassistant/components/mobile_app/translations/no.json new file mode 100644 index 00000000000..860d455d582 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/no.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u00c5pne mobilappen for \u00e5 konfigurere integrasjonen med hjemmevirksomheten. Se [docs]({apps_url}) for en liste over kompatible apper." + }, + "step": { + "confirm": { + "description": "Vil du sette opp mobilapp-komponenten?", + "title": "Mobilapp" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/pl.json b/homeassistant/components/mobile_app/translations/pl.json new file mode 100644 index 00000000000..a6e7e738903 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/pl.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Otw\u00f3rz aplikacj\u0119 mobiln\u0105, aby skonfigurowa\u0107 integracj\u0119 z Home Assistant. Zapoznaj si\u0119 z [dokumentacj\u0105]({apps_url}), by zobaczy\u0107 list\u0119 kompatybilnych aplikacji." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 komponent aplikacji mobilnej?", + "title": "Aplikacja mobilna" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/pt-BR.json b/homeassistant/components/mobile_app/translations/pt-BR.json new file mode 100644 index 00000000000..79917f35d78 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/pt-BR.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Abra o aplicativo m\u00f3vel para configurar a integra\u00e7\u00e3o com o Home Assistant. Veja [os documentos] ( {apps_url} ) para obter uma lista de aplicativos compat\u00edveis." + }, + "step": { + "confirm": { + "description": "Deseja configurar o componente do aplicativo m\u00f3vel?", + "title": "Aplicativo m\u00f3vel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/pt.json b/homeassistant/components/mobile_app/translations/pt.json new file mode 100644 index 00000000000..d2c326270e1 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/pt.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "Aplica\u00e7\u00e3o m\u00f3vel" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/ru.json b/homeassistant/components/mobile_app/translations/ru.json new file mode 100644 index 00000000000..f2d2200f448 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/ru.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 Home Assistant. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({apps_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435?", + "title": "\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/sl.json b/homeassistant/components/mobile_app/translations/sl.json new file mode 100644 index 00000000000..bb79e2d1e52 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/sl.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "Odprite mobilno aplikacijo, da nastavite integracijo s storitvijo Home Assistant. Za seznam zdru\u017eljivih aplikacij si oglejte [docs] ({apps_url})." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti komponento aplikacije Mobile App?", + "title": "Mobilna Aplikacija" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/sv.json b/homeassistant/components/mobile_app/translations/sv.json new file mode 100644 index 00000000000..497179b2a19 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/sv.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u00d6ppna mobilappen f\u00f6r att konfigurera integrationen med Home Assistant. Se [docs] ({apps_url}) f\u00f6r en lista \u00f6ver kompatibla appar." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera komponenten Mobile App?", + "title": "Mobilapp" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/uk.json b/homeassistant/components/mobile_app/translations/uk.json new file mode 100644 index 00000000000..0916a0ac34f --- /dev/null +++ b/homeassistant/components/mobile_app/translations/uk.json @@ -0,0 +1,10 @@ +{ + "config": { + "step": { + "confirm": { + "description": "\u0412\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0434\u0430\u0442\u043a\u0430?", + "title": "\u041c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0439 \u0434\u043e\u0434\u0430\u0442\u043e\u043a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/vi.json b/homeassistant/components/mobile_app/translations/vi.json new file mode 100644 index 00000000000..272e4d6f04f --- /dev/null +++ b/homeassistant/components/mobile_app/translations/vi.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "M\u1edf \u1ee9ng d\u1ee5ng di \u0111\u1ed9ng \u0111\u1ec3 thi\u1ebft l\u1eadp t\u00edch h\u1ee3p v\u1edbi Home Assistant. Xem [t\u00e0i li\u1ec7u] ({apps_url}) cho danh s\u00e1ch c\u00e1c \u1ee9ng d\u1ee5ng t\u01b0\u01a1ng th\u00edch." + }, + "step": { + "confirm": { + "description": "B\u1ea1n c\u00f3 mu\u1ed1n thi\u1ebft l\u1eadp th\u00e0nh ph\u1ea7n \u1ee8ng d\u1ee5ng di \u0111\u1ed9ng kh\u00f4ng?", + "title": "\u1ee8ng d\u1ee5ng di \u0111\u1ed9ng" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/zh-Hans.json b/homeassistant/components/mobile_app/translations/zh-Hans.json new file mode 100644 index 00000000000..5bef54b6df6 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/zh-Hans.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u6253\u5f00\u79fb\u52a8\u5e94\u7528\u7a0b\u5e8f\u4ee5\u8bbe\u7f6e\u4e0e Home Assistant \u7684\u96c6\u6210\u3002\u8bf7\u53c2\u9605[\u6587\u6863]({apps_url})\u4ee5\u83b7\u53d6\u517c\u5bb9\u5e94\u7528\u7684\u5217\u8868\u3002" + }, + "step": { + "confirm": { + "description": "\u60a8\u60f3\u8981\u914d\u7f6e\u79fb\u52a8\u5e94\u7528\u7a0b\u5e8f\u7ec4\u4ef6\u5417\uff1f", + "title": "\u79fb\u52a8\u5e94\u7528" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mobile_app/translations/zh-Hant.json b/homeassistant/components/mobile_app/translations/zh-Hant.json new file mode 100644 index 00000000000..d088b64b4d4 --- /dev/null +++ b/homeassistant/components/mobile_app/translations/zh-Hant.json @@ -0,0 +1,13 @@ +{ + "config": { + "abort": { + "install_app": "\u958b\u555f\u624b\u6a5f App \u4ee5\u9032\u884c Home Assistant \u6574\u5408\u8a2d\u5b9a\u3002\u8acb\u53c3\u95b1 [\u6587\u4ef6]({apps_url}) \u7372\u5f97\u652f\u63f4\u7684\u624b\u6a5f App \u5217\u8868\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u624b\u6a5f App \u5143\u4ef6\uff1f", + "title": "\u624b\u6a5f App" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mochad/__init__.py b/homeassistant/components/mochad/__init__.py index 683681b50a0..6f560aa9ed6 100644 --- a/homeassistant/components/mochad/__init__.py +++ b/homeassistant/components/mochad/__init__.py @@ -15,8 +15,6 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -CONTROLLER = None - CONF_COMM_TYPE = "comm_type" DOMAIN = "mochad" @@ -42,22 +40,22 @@ def setup(hass, config): host = conf.get(CONF_HOST) port = conf.get(CONF_PORT) - global CONTROLLER try: - CONTROLLER = MochadCtrl(host, port) + mochad_controller = MochadCtrl(host, port) except exceptions.ConfigurationError: _LOGGER.exception() return False def stop_mochad(event): """Stop the Mochad service.""" - CONTROLLER.disconnect() + mochad_controller.disconnect() def start_mochad(event): """Start the Mochad service.""" hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_mochad) hass.bus.listen_once(EVENT_HOMEASSISTANT_START, start_mochad) + hass.data[DOMAIN] = mochad_controller return True diff --git a/homeassistant/components/mochad/light.py b/homeassistant/components/mochad/light.py index 871caadd95c..1f5cbc6bb95 100644 --- a/homeassistant/components/mochad/light.py +++ b/homeassistant/components/mochad/light.py @@ -13,7 +13,7 @@ from homeassistant.components.light import ( from homeassistant.const import CONF_ADDRESS, CONF_DEVICES, CONF_NAME, CONF_PLATFORM from homeassistant.helpers import config_validation as cv -from . import CONF_COMM_TYPE, CONTROLLER, DOMAIN, REQ_LOCK +from . import CONF_COMM_TYPE, DOMAIN, REQ_LOCK _LOGGER = logging.getLogger(__name__) @@ -38,8 +38,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up X10 dimmers over a mochad controller.""" + mochad_controller = hass.data[DOMAIN] devs = config.get(CONF_DEVICES) - add_entities([MochadLight(hass, CONTROLLER.ctrl, dev) for dev in devs]) + add_entities([MochadLight(hass, mochad_controller.ctrl, dev) for dev in devs]) return True diff --git a/homeassistant/components/mochad/manifest.json b/homeassistant/components/mochad/manifest.json index c103b8d3922..63bd7405e00 100644 --- a/homeassistant/components/mochad/manifest.json +++ b/homeassistant/components/mochad/manifest.json @@ -3,6 +3,5 @@ "name": "Mochad", "documentation": "https://www.home-assistant.io/integrations/mochad", "requirements": ["pymochad==0.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mochad/switch.py b/homeassistant/components/mochad/switch.py index 14fb601f919..4ce8f676659 100644 --- a/homeassistant/components/mochad/switch.py +++ b/homeassistant/components/mochad/switch.py @@ -9,7 +9,7 @@ from homeassistant.components.switch import SwitchDevice from homeassistant.const import CONF_ADDRESS, CONF_DEVICES, CONF_NAME, CONF_PLATFORM from homeassistant.helpers import config_validation as cv -from . import CONF_COMM_TYPE, CONTROLLER, DOMAIN, REQ_LOCK +from . import CONF_COMM_TYPE, DOMAIN, REQ_LOCK _LOGGER = logging.getLogger(__name__) @@ -30,8 +30,9 @@ PLATFORM_SCHEMA = vol.Schema( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up X10 switches over a mochad controller.""" + mochad_controller = hass.data[DOMAIN] devs = config.get(CONF_DEVICES) - add_entities([MochadSwitch(hass, CONTROLLER.ctrl, dev) for dev in devs]) + add_entities([MochadSwitch(hass, mochad_controller.ctrl, dev) for dev in devs]) return True diff --git a/homeassistant/components/modbus/services.yaml b/homeassistant/components/modbus/services.yaml index 8c11209570b..ba3113db5e0 100644 --- a/homeassistant/components/modbus/services.yaml +++ b/homeassistant/components/modbus/services.yaml @@ -1,14 +1,30 @@ write_coil: description: Write to a modbus coil. fields: - address: {description: Address of the register to write to., example: 0} - state: {description: State to write., example: false} - unit: {description: Address of the modbus unit., example: 21} - hub: {description: Optional Modbus hub name. A hub with the name 'default' is used if not specified., example: "hub1"} + address: + description: Address of the register to write to. + example: 0 + state: + description: State to write. + example: false + unit: + description: Address of the modbus unit. + example: 21 + hub: + description: Optional Modbus hub name. A hub with the name 'default' is used if not specified. + example: "hub1" write_register: description: Write to a modbus holding register. fields: - address: {description: Address of the holding register to write to., example: 0} - unit: {description: Address of the modbus unit., example: 21} - value: {description: Value (single value or array) to write., example: "0 or [4,0]"} - hub: {description: Optional Modbus hub name. A hub with the name 'default' is used if not specified., example: "hub1"} + address: + description: Address of the holding register to write to. + example: 0 + unit: + description: Address of the modbus unit. + example: 21 + value: + description: Value (single value or array) to write. + example: "0 or [4,0]" + hub: + description: Optional Modbus hub name. A hub with the name 'default' is used if not specified. + example: "hub1" diff --git a/homeassistant/components/modem_callerid/manifest.json b/homeassistant/components/modem_callerid/manifest.json index a5d516c15ab..21e9c94943d 100644 --- a/homeassistant/components/modem_callerid/manifest.json +++ b/homeassistant/components/modem_callerid/manifest.json @@ -3,6 +3,5 @@ "name": "Modem Caller ID", "documentation": "https://www.home-assistant.io/integrations/modem_callerid", "requirements": ["basicmodem==0.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mold_indicator/manifest.json b/homeassistant/components/mold_indicator/manifest.json index 3e5518c1930..764faf6e79a 100644 --- a/homeassistant/components/mold_indicator/manifest.json +++ b/homeassistant/components/mold_indicator/manifest.json @@ -2,8 +2,6 @@ "domain": "mold_indicator", "name": "Mold Indicator", "documentation": "https://www.home-assistant.io/integrations/mold_indicator", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/mold_indicator/sensor.py b/homeassistant/components/mold_indicator/sensor.py index 374866a6859..82f1cfaec9b 100644 --- a/homeassistant/components/mold_indicator/sensor.py +++ b/homeassistant/components/mold_indicator/sensor.py @@ -90,13 +90,11 @@ class MoldIndicator(Entity): self._calib_factor = calib_factor self._is_metric = is_metric self._available = False - self._entities = set( - [ - self._indoor_temp_sensor, - self._indoor_humidity_sensor, - self._outdoor_temp_sensor, - ] - ) + self._entities = { + self._indoor_temp_sensor, + self._indoor_humidity_sensor, + self._outdoor_temp_sensor, + } self._dewpoint = None self._indoor_temp = None diff --git a/homeassistant/components/monoprice/.translations/ca.json b/homeassistant/components/monoprice/.translations/ca.json deleted file mode 100644 index ce766671763..00000000000 --- a/homeassistant/components/monoprice/.translations/ca.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "port": "Port s\u00e8rie", - "source_1": "Nom de la font #1", - "source_2": "Nom de la font #2", - "source_3": "Nom de la font #3", - "source_4": "Nom de la font #4", - "source_5": "Nom de la font #5", - "source_6": "Nom de la font #6" - }, - "title": "Connexi\u00f3 amb el dispositiu" - } - }, - "title": "Amplificador Monoprice de 6 zones" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Nom de la font #1", - "source_2": "Nom de la font #2", - "source_3": "Nom de la font #3", - "source_4": "Nom de la font #4", - "source_5": "Nom de la font #5", - "source_6": "Nom de la font #6" - }, - "title": "Configuraci\u00f3 de les fonts" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/de.json b/homeassistant/components/monoprice/.translations/de.json deleted file mode 100644 index ea2b8cdc6c4..00000000000 --- a/homeassistant/components/monoprice/.translations/de.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "port": "Serielle Schnittstelle", - "source_1": "Name der Quelle #1", - "source_2": "Name der Quelle #2", - "source_3": "Name der Quelle #3", - "source_4": "Name der Quelle #4", - "source_5": "Name der Quelle #5", - "source_6": "Name der Quelle #6" - }, - "title": "Stellen Sie eine Verbindung zum Ger\u00e4t her" - } - }, - "title": "Monoprice 6-Zonen-Verst\u00e4rker" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Name der Quelle #1", - "source_2": "Name der Quelle #2", - "source_3": "Name der Quelle #3", - "source_4": "Name der Quelle #4", - "source_5": "Name der Quelle #5", - "source_6": "Name der Quelle #6" - }, - "title": "Quellen konfigurieren" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/en.json b/homeassistant/components/monoprice/.translations/en.json deleted file mode 100644 index 4ff655856f9..00000000000 --- a/homeassistant/components/monoprice/.translations/en.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "port": "Serial port", - "source_1": "Name of source #1", - "source_2": "Name of source #2", - "source_3": "Name of source #3", - "source_4": "Name of source #4", - "source_5": "Name of source #5", - "source_6": "Name of source #6" - }, - "title": "Connect to the device" - } - }, - "title": "Monoprice 6-Zone Amplifier" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Name of source #1", - "source_2": "Name of source #2", - "source_3": "Name of source #3", - "source_4": "Name of source #4", - "source_5": "Name of source #5", - "source_6": "Name of source #6" - }, - "title": "Configure sources" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/es.json b/homeassistant/components/monoprice/.translations/es.json deleted file mode 100644 index 31a72fc0b9f..00000000000 --- a/homeassistant/components/monoprice/.translations/es.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor int\u00e9ntalo de nuevo", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "port": "Puerto serie", - "source_1": "Nombre de la fuente #1", - "source_2": "Nombre de la fuente #2", - "source_3": "Nombre de la fuente #3", - "source_4": "Nombre de la fuente #4", - "source_5": "Nombre de la fuente #5", - "source_6": "Nombre de la fuente #6" - }, - "title": "Conectarse al dispositivo" - } - }, - "title": "Amplificador Monoprice de 6 zonas" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Nombre de la fuente #1", - "source_2": "Nombre de la fuente #2", - "source_3": "Nombre de la fuente #3", - "source_4": "Nombre de la fuente #4", - "source_5": "Nombre de la fuente #5", - "source_6": "Nombre de la fuente #6" - }, - "title": "Configurar fuentes" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/it.json b/homeassistant/components/monoprice/.translations/it.json deleted file mode 100644 index c3c8770d2ad..00000000000 --- a/homeassistant/components/monoprice/.translations/it.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "port": "Porta seriale", - "source_1": "Nome della fonte n. 1", - "source_2": "Nome della fonte n. 2", - "source_3": "Nome della fonte n. 3", - "source_4": "Nome della fonte n. 4", - "source_5": "Nome della fonte n. 5", - "source_6": "Nome della fonte n. 6" - }, - "title": "Connettersi al dispositivo" - } - }, - "title": "Amplificatore a 6 zone Monoprice" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Nome della fonte n. 1", - "source_2": "Nome della fonte n. 2", - "source_3": "Nome della fonte n. 3", - "source_4": "Nome della fonte n. 4", - "source_5": "Nome della fonte n. 5", - "source_6": "Nome della fonte n. 6" - }, - "title": "Configurare le sorgenti" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/ko.json b/homeassistant/components/monoprice/.translations/ko.json deleted file mode 100644 index dd5b44bf035..00000000000 --- a/homeassistant/components/monoprice/.translations/ko.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "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": { - "port": "\uc2dc\ub9ac\uc5bc \ud3ec\ud2b8", - "source_1": "\uc785\ub825 \uc18c\uc2a4 1 \uc774\ub984", - "source_2": "\uc785\ub825 \uc18c\uc2a4 2 \uc774\ub984", - "source_3": "\uc785\ub825 \uc18c\uc2a4 3 \uc774\ub984", - "source_4": "\uc785\ub825 \uc18c\uc2a4 4 \uc774\ub984", - "source_5": "\uc785\ub825 \uc18c\uc2a4 5 \uc774\ub984", - "source_6": "\uc785\ub825 \uc18c\uc2a4 6 \uc774\ub984" - }, - "title": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Monoprice 6-Zone \uc570\ud504" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "\uc785\ub825 \uc18c\uc2a4 1 \uc774\ub984", - "source_2": "\uc785\ub825 \uc18c\uc2a4 2 \uc774\ub984", - "source_3": "\uc785\ub825 \uc18c\uc2a4 3 \uc774\ub984", - "source_4": "\uc785\ub825 \uc18c\uc2a4 4 \uc774\ub984", - "source_5": "\uc785\ub825 \uc18c\uc2a4 5 \uc774\ub984", - "source_6": "\uc785\ub825 \uc18c\uc2a4 6 \uc774\ub984" - }, - "title": "\uc785\ub825 \uc18c\uc2a4 \uad6c\uc131" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/lb.json b/homeassistant/components/monoprice/.translations/lb.json deleted file mode 100644 index abb7caf4183..00000000000 --- a/homeassistant/components/monoprice/.translations/lb.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "port": "Serielle Port", - "source_1": "Numm vun der Quell #1", - "source_2": "Numm vun der Quell #2", - "source_3": "Numm vun der Quell #3", - "source_4": "Numm vun der Quell #4", - "source_5": "Numm vun der Quell #5", - "source_6": "Numm vun der Quell #6" - }, - "title": "Mam Apparat verbannen" - } - }, - "title": "Monoprice 6-Zone Verst\u00e4rker" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Numm vun der Quell #1", - "source_2": "Numm vun der Quell #2", - "source_3": "Numm vun der Quell #3", - "source_4": "Numm vun der Quell #4", - "source_5": "Numm vun der Quell #5", - "source_6": "Numm vun der Quell #6" - }, - "title": "Quelle konfigur\u00e9ieren" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/no.json b/homeassistant/components/monoprice/.translations/no.json deleted file mode 100644 index f17e48c2a78..00000000000 --- a/homeassistant/components/monoprice/.translations/no.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "port": "Serial port", - "source_1": "Navn p\u00e5 kilden #1", - "source_2": "Navn p\u00e5 kilden #2", - "source_3": "Navn p\u00e5 kilden #3", - "source_4": "Navn p\u00e5 kilde #4", - "source_5": "Navn p\u00e5 kilde #5", - "source_6": "Navn p\u00e5 kilde #6" - }, - "title": "Koble til enheten" - } - }, - "title": "Monoprice 6-Zone Forsterker" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "Navn p\u00e5 kilde #1", - "source_2": "Navn p\u00e5 kilde #2", - "source_3": "Navn p\u00e5 kilde #3", - "source_4": "Navn p\u00e5 kilde #4", - "source_5": "Navn p\u00e5 kilde #5", - "source_6": "Navn p\u00e5 kilde #6" - }, - "title": "Konfigurer kilder" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/ru.json b/homeassistant/components/monoprice/.translations/ru.json deleted file mode 100644 index 25fa4ef7e64..00000000000 --- a/homeassistant/components/monoprice/.translations/ru.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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." - }, - "step": { - "user": { - "data": { - "port": "\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442", - "source_1": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #1", - "source_2": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #2", - "source_3": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #3", - "source_4": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #4", - "source_5": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #5", - "source_6": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #6" - }, - "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" - } - }, - "title": "Monoprice 6-Zone Amplifier" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #1", - "source_2": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #2", - "source_3": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #3", - "source_4": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #4", - "source_5": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #5", - "source_6": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #6" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/zh-Hant.json b/homeassistant/components/monoprice/.translations/zh-Hant.json deleted file mode 100644 index 81230eee728..00000000000 --- a/homeassistant/components/monoprice/.translations/zh-Hant.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "port": "\u5e8f\u5217\u57e0", - "source_1": "\u4f86\u6e90 #1 \u540d\u7a31", - "source_2": "\u4f86\u6e90 #2 \u540d\u7a31", - "source_3": "\u4f86\u6e90 #3 \u540d\u7a31", - "source_4": "\u4f86\u6e90 #4 \u540d\u7a31", - "source_5": "\u4f86\u6e90 #5 \u540d\u7a31", - "source_6": "\u4f86\u6e90 #6 \u540d\u7a31" - }, - "title": "\u9023\u7dda\u81f3\u8a2d\u5099" - } - }, - "title": "Monoprice 6-Zone \u653e\u5927\u5668" - }, - "options": { - "step": { - "init": { - "data": { - "source_1": "\u4f86\u6e90 #1 \u540d\u7a31", - "source_2": "\u4f86\u6e90 #2 \u540d\u7a31", - "source_3": "\u4f86\u6e90 #3 \u540d\u7a31", - "source_4": "\u4f86\u6e90 #4 \u540d\u7a31", - "source_5": "\u4f86\u6e90 #5 \u540d\u7a31", - "source_6": "\u4f86\u6e90 #6 \u540d\u7a31" - }, - "title": "\u8a2d\u5b9a\u4f86\u6e90" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/monoprice/manifest.json b/homeassistant/components/monoprice/manifest.json index d9497c1c29c..c88673b2855 100644 --- a/homeassistant/components/monoprice/manifest.json +++ b/homeassistant/components/monoprice/manifest.json @@ -3,7 +3,6 @@ "name": "Monoprice 6-Zone Amplifier", "documentation": "https://www.home-assistant.io/integrations/monoprice", "requirements": ["pymonoprice==0.3"], - "dependencies": [], "codeowners": ["@etsinko"], "config_flow": true } diff --git a/homeassistant/components/monoprice/services.yaml b/homeassistant/components/monoprice/services.yaml index 420270e10ac..a271d704768 100644 --- a/homeassistant/components/monoprice/services.yaml +++ b/homeassistant/components/monoprice/services.yaml @@ -3,11 +3,11 @@ snapshot: fields: entity_id: description: Name(s) of entities that will be snapshot. Platform dependent. - example: 'media_player.living_room' + example: "media_player.living_room" restore: description: Restore a snapshot of the media player zone. fields: entity_id: description: Name(s) of entities that will be restored. Platform dependent. - example: 'media_player.living_room' + example: "media_player.living_room" diff --git a/homeassistant/components/monoprice/strings.json b/homeassistant/components/monoprice/strings.json index 32332c7369a..2b639587673 100644 --- a/homeassistant/components/monoprice/strings.json +++ b/homeassistant/components/monoprice/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Monoprice 6-Zone Amplifier", "step": { "user": { "title": "Connect to the device", @@ -19,9 +18,7 @@ "cannot_connect": "Failed to connect, please try again", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } }, "options": { "step": { @@ -38,4 +35,4 @@ } } } -} \ No newline at end of file +} diff --git a/homeassistant/components/monoprice/translations/ca.json b/homeassistant/components/monoprice/translations/ca.json new file mode 100644 index 00000000000..e6e6208a8a4 --- /dev/null +++ b/homeassistant/components/monoprice/translations/ca.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "port": "Port s\u00e8rie", + "source_1": "Nom de la font #1", + "source_2": "Nom de la font #2", + "source_3": "Nom de la font #3", + "source_4": "Nom de la font #4", + "source_5": "Nom de la font #5", + "source_6": "Nom de la font #6" + }, + "title": "Connexi\u00f3 amb el dispositiu" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Nom de la font #1", + "source_2": "Nom de la font #2", + "source_3": "Nom de la font #3", + "source_4": "Nom de la font #4", + "source_5": "Nom de la font #5", + "source_6": "Nom de la font #6" + }, + "title": "Configuraci\u00f3 de les fonts" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/de.json b/homeassistant/components/monoprice/translations/de.json new file mode 100644 index 00000000000..4c76920226e --- /dev/null +++ b/homeassistant/components/monoprice/translations/de.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "port": "Serielle Schnittstelle", + "source_1": "Name der Quelle #1", + "source_2": "Name der Quelle #2", + "source_3": "Name der Quelle #3", + "source_4": "Name der Quelle #4", + "source_5": "Name der Quelle #5", + "source_6": "Name der Quelle #6" + }, + "title": "Stellen Sie eine Verbindung zum Ger\u00e4t her" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Name der Quelle #1", + "source_2": "Name der Quelle #2", + "source_3": "Name der Quelle #3", + "source_4": "Name der Quelle #4", + "source_5": "Name der Quelle #5", + "source_6": "Name der Quelle #6" + }, + "title": "Quellen konfigurieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/en.json b/homeassistant/components/monoprice/translations/en.json new file mode 100644 index 00000000000..3e62a066308 --- /dev/null +++ b/homeassistant/components/monoprice/translations/en.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "port": "Serial port", + "source_1": "Name of source #1", + "source_2": "Name of source #2", + "source_3": "Name of source #3", + "source_4": "Name of source #4", + "source_5": "Name of source #5", + "source_6": "Name of source #6" + }, + "title": "Connect to the device" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Name of source #1", + "source_2": "Name of source #2", + "source_3": "Name of source #3", + "source_4": "Name of source #4", + "source_5": "Name of source #5", + "source_6": "Name of source #6" + }, + "title": "Configure sources" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/es.json b/homeassistant/components/monoprice/translations/es.json new file mode 100644 index 00000000000..fabc33234b6 --- /dev/null +++ b/homeassistant/components/monoprice/translations/es.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor int\u00e9ntalo de nuevo", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "port": "Puerto serie", + "source_1": "Nombre de la fuente #1", + "source_2": "Nombre de la fuente #2", + "source_3": "Nombre de la fuente #3", + "source_4": "Nombre de la fuente #4", + "source_5": "Nombre de la fuente #5", + "source_6": "Nombre de la fuente #6" + }, + "title": "Conectarse al dispositivo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Nombre de la fuente #1", + "source_2": "Nombre de la fuente #2", + "source_3": "Nombre de la fuente #3", + "source_4": "Nombre de la fuente #4", + "source_5": "Nombre de la fuente #5", + "source_6": "Nombre de la fuente #6" + }, + "title": "Configurar fuentes" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/.translations/fr.json b/homeassistant/components/monoprice/translations/fr.json similarity index 100% rename from homeassistant/components/monoprice/.translations/fr.json rename to homeassistant/components/monoprice/translations/fr.json diff --git a/homeassistant/components/monoprice/translations/it.json b/homeassistant/components/monoprice/translations/it.json new file mode 100644 index 00000000000..d16a249d1a5 --- /dev/null +++ b/homeassistant/components/monoprice/translations/it.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "port": "Porta seriale", + "source_1": "Nome della fonte n. 1", + "source_2": "Nome della fonte n. 2", + "source_3": "Nome della fonte n. 3", + "source_4": "Nome della fonte n. 4", + "source_5": "Nome della fonte n. 5", + "source_6": "Nome della fonte n. 6" + }, + "title": "Connettersi al dispositivo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Nome della fonte n. 1", + "source_2": "Nome della fonte n. 2", + "source_3": "Nome della fonte n. 3", + "source_4": "Nome della fonte n. 4", + "source_5": "Nome della fonte n. 5", + "source_6": "Nome della fonte n. 6" + }, + "title": "Configurare le sorgenti" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/ko.json b/homeassistant/components/monoprice/translations/ko.json new file mode 100644 index 00000000000..4ba78dcfbbf --- /dev/null +++ b/homeassistant/components/monoprice/translations/ko.json @@ -0,0 +1,40 @@ +{ + "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": { + "port": "\uc2dc\ub9ac\uc5bc \ud3ec\ud2b8", + "source_1": "\uc785\ub825 \uc18c\uc2a4 1 \uc774\ub984", + "source_2": "\uc785\ub825 \uc18c\uc2a4 2 \uc774\ub984", + "source_3": "\uc785\ub825 \uc18c\uc2a4 3 \uc774\ub984", + "source_4": "\uc785\ub825 \uc18c\uc2a4 4 \uc774\ub984", + "source_5": "\uc785\ub825 \uc18c\uc2a4 5 \uc774\ub984", + "source_6": "\uc785\ub825 \uc18c\uc2a4 6 \uc774\ub984" + }, + "title": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "\uc785\ub825 \uc18c\uc2a4 1 \uc774\ub984", + "source_2": "\uc785\ub825 \uc18c\uc2a4 2 \uc774\ub984", + "source_3": "\uc785\ub825 \uc18c\uc2a4 3 \uc774\ub984", + "source_4": "\uc785\ub825 \uc18c\uc2a4 4 \uc774\ub984", + "source_5": "\uc785\ub825 \uc18c\uc2a4 5 \uc774\ub984", + "source_6": "\uc785\ub825 \uc18c\uc2a4 6 \uc774\ub984" + }, + "title": "\uc785\ub825 \uc18c\uc2a4 \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/lb.json b/homeassistant/components/monoprice/translations/lb.json new file mode 100644 index 00000000000..6f530fa8a80 --- /dev/null +++ b/homeassistant/components/monoprice/translations/lb.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "port": "Serielle Port", + "source_1": "Numm vun der Quell #1", + "source_2": "Numm vun der Quell #2", + "source_3": "Numm vun der Quell #3", + "source_4": "Numm vun der Quell #4", + "source_5": "Numm vun der Quell #5", + "source_6": "Numm vun der Quell #6" + }, + "title": "Mam Apparat verbannen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Numm vun der Quell #1", + "source_2": "Numm vun der Quell #2", + "source_3": "Numm vun der Quell #3", + "source_4": "Numm vun der Quell #4", + "source_5": "Numm vun der Quell #5", + "source_6": "Numm vun der Quell #6" + }, + "title": "Quelle konfigur\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/no.json b/homeassistant/components/monoprice/translations/no.json new file mode 100644 index 00000000000..bbbeed0c1fd --- /dev/null +++ b/homeassistant/components/monoprice/translations/no.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "port": "Serial port", + "source_1": "Navn p\u00e5 kilden #1", + "source_2": "Navn p\u00e5 kilden #2", + "source_3": "Navn p\u00e5 kilden #3", + "source_4": "Navn p\u00e5 kilde #4", + "source_5": "Navn p\u00e5 kilde #5", + "source_6": "Navn p\u00e5 kilde #6" + }, + "title": "Koble til enheten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Navn p\u00e5 kilde #1", + "source_2": "Navn p\u00e5 kilde #2", + "source_3": "Navn p\u00e5 kilde #3", + "source_4": "Navn p\u00e5 kilde #4", + "source_5": "Navn p\u00e5 kilde #5", + "source_6": "Navn p\u00e5 kilde #6" + }, + "title": "Konfigurer kilder" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/pl.json b/homeassistant/components/monoprice/translations/pl.json new file mode 100644 index 00000000000..300c19e92b7 --- /dev/null +++ b/homeassistant/components/monoprice/translations/pl.json @@ -0,0 +1,40 @@ +{ + "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" + } + } + }, + "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/monoprice/translations/ru.json b/homeassistant/components/monoprice/translations/ru.json new file mode 100644 index 00000000000..a16cf1ae38a --- /dev/null +++ b/homeassistant/components/monoprice/translations/ru.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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." + }, + "step": { + "user": { + "data": { + "port": "\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442", + "source_1": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #1", + "source_2": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #2", + "source_3": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #3", + "source_4": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #4", + "source_5": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #5", + "source_6": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #6" + }, + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #1", + "source_2": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #2", + "source_3": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #3", + "source_4": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #4", + "source_5": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #5", + "source_6": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 #6" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/sl.json b/homeassistant/components/monoprice/translations/sl.json new file mode 100644 index 00000000000..02713888762 --- /dev/null +++ b/homeassistant/components/monoprice/translations/sl.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "port": "Serijska vrata", + "source_1": "Ime vira #1", + "source_2": "Ime vira #2", + "source_3": "Ime vira #3", + "source_4": "Ime vira #4", + "source_5": "Ime vira #5", + "source_6": "Ime vira #6" + }, + "title": "Pove\u017eite se z napravo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Ime vira #1", + "source_2": "Ime vira #2", + "source_3": "Ime vira #3", + "source_4": "Ime vira #4", + "source_5": "Ime vira #5", + "source_6": "Ime vira #6" + }, + "title": "Konfigurirajte vire" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/zh-Hant.json b/homeassistant/components/monoprice/translations/zh-Hant.json new file mode 100644 index 00000000000..9113e3c8d8a --- /dev/null +++ b/homeassistant/components/monoprice/translations/zh-Hant.json @@ -0,0 +1,40 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "port": "\u5e8f\u5217\u57e0", + "source_1": "\u4f86\u6e90 #1 \u540d\u7a31", + "source_2": "\u4f86\u6e90 #2 \u540d\u7a31", + "source_3": "\u4f86\u6e90 #3 \u540d\u7a31", + "source_4": "\u4f86\u6e90 #4 \u540d\u7a31", + "source_5": "\u4f86\u6e90 #5 \u540d\u7a31", + "source_6": "\u4f86\u6e90 #6 \u540d\u7a31" + }, + "title": "\u9023\u7dda\u81f3\u8a2d\u5099" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "\u4f86\u6e90 #1 \u540d\u7a31", + "source_2": "\u4f86\u6e90 #2 \u540d\u7a31", + "source_3": "\u4f86\u6e90 #3 \u540d\u7a31", + "source_4": "\u4f86\u6e90 #4 \u540d\u7a31", + "source_5": "\u4f86\u6e90 #5 \u540d\u7a31", + "source_6": "\u4f86\u6e90 #6 \u540d\u7a31" + }, + "title": "\u8a2d\u5b9a\u4f86\u6e90" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.bg.json b/homeassistant/components/moon/.translations/sensor.bg.json deleted file mode 100644 index c764ccbc3e0..00000000000 --- a/homeassistant/components/moon/.translations/sensor.bg.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "\u041f\u044a\u0440\u0432\u0430 \u0447\u0435\u0442\u0432\u044a\u0440\u0442\u0438\u043d\u0430", - "full_moon": "\u041f\u044a\u043b\u043d\u043e\u043b\u0443\u043d\u0438\u0435", - "last_quarter": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0447\u0435\u0442\u0432\u044a\u0440\u0442\u0438\u043d\u0430", - "new_moon": "\u041d\u043e\u0432\u043e\u043b\u0443\u043d\u0438\u0435", - "waning_crescent": "\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446", - "waning_gibbous": "\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446", - "waxing_crescent": "\u041d\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446", - "waxing_gibbous": "\u041d\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.ca.json b/homeassistant/components/moon/.translations/sensor.ca.json deleted file mode 100644 index e294579da09..00000000000 --- a/homeassistant/components/moon/.translations/sensor.ca.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Quart creixent", - "full_moon": "Lluna plena", - "last_quarter": "Quart minvant", - "new_moon": "Lluna nova", - "waning_crescent": "Minvant (Lluna vella)", - "waning_gibbous": "Gibosa minvant", - "waxing_crescent": "Lluna nova visible", - "waxing_gibbous": "Gibosa creixent" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.cs.json b/homeassistant/components/moon/.translations/sensor.cs.json deleted file mode 100644 index d39ee3707d6..00000000000 --- a/homeassistant/components/moon/.translations/sensor.cs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "first_quarter": "Prvn\u00ed \u010dtvr\u0165", - "full_moon": "\u00dapln\u011bk", - "waxing_crescent": "Dor\u016fstaj\u00edc\u00ed srpek", - "waxing_gibbous": "Prvn\u00ed \u010dtvr\u0165" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.da.json b/homeassistant/components/moon/.translations/sensor.da.json deleted file mode 100644 index c2406de68bb..00000000000 --- a/homeassistant/components/moon/.translations/sensor.da.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "F\u00f8rste kvartal", - "full_moon": "Fuldm\u00e5ne", - "last_quarter": "Sidste kvartal", - "new_moon": "Nym\u00e5ne", - "waning_crescent": "Aftagende halvm\u00e5ne", - "waning_gibbous": "Aftagende m\u00e5ne", - "waxing_crescent": "Tiltagende halvm\u00e5ne", - "waxing_gibbous": "Tiltagende m\u00e5ne" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.de.json b/homeassistant/components/moon/.translations/sensor.de.json deleted file mode 100644 index 310ebf9c359..00000000000 --- a/homeassistant/components/moon/.translations/sensor.de.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Erstes Viertel", - "full_moon": "Vollmond", - "last_quarter": "Letztes Viertel", - "new_moon": "Neumond", - "waning_crescent": "Abnehmende Sichel", - "waning_gibbous": "Drittes Viertel", - "waxing_crescent": "Zunehmende Sichel", - "waxing_gibbous": "Zweites Viertel" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.en.json b/homeassistant/components/moon/.translations/sensor.en.json deleted file mode 100644 index 587b9496114..00000000000 --- a/homeassistant/components/moon/.translations/sensor.en.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "First quarter", - "full_moon": "Full moon", - "last_quarter": "Last quarter", - "new_moon": "New moon", - "waning_crescent": "Waning crescent", - "waning_gibbous": "Waning gibbous", - "waxing_crescent": "Waxing crescent", - "waxing_gibbous": "Waxing gibbous" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.es-419.json b/homeassistant/components/moon/.translations/sensor.es-419.json deleted file mode 100644 index 89823dd2055..00000000000 --- a/homeassistant/components/moon/.translations/sensor.es-419.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "state": { - "first_quarter": "Cuarto creciente", - "full_moon": "Luna llena", - "last_quarter": "Cuarto menguante" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.es.json b/homeassistant/components/moon/.translations/sensor.es.json deleted file mode 100644 index b3456735754..00000000000 --- a/homeassistant/components/moon/.translations/sensor.es.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Cuarto creciente", - "full_moon": "Luna llena", - "last_quarter": "Cuarto menguante", - "new_moon": "Luna nueva", - "waning_crescent": "Menguante", - "waning_gibbous": "Gibosa menguante", - "waxing_crescent": "Nueva visible", - "waxing_gibbous": "Gibosa creciente" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.fr.json b/homeassistant/components/moon/.translations/sensor.fr.json deleted file mode 100644 index fac2b654a46..00000000000 --- a/homeassistant/components/moon/.translations/sensor.fr.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Premier quartier", - "full_moon": "Pleine lune", - "last_quarter": "Dernier quartier", - "new_moon": "Nouvelle lune", - "waning_crescent": "Dernier croissant", - "waning_gibbous": "Gibbeuse d\u00e9croissante", - "waxing_crescent": "Premier croissant", - "waxing_gibbous": "Gibbeuse croissante" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.hu.json b/homeassistant/components/moon/.translations/sensor.hu.json deleted file mode 100644 index fff9f51f50d..00000000000 --- a/homeassistant/components/moon/.translations/sensor.hu.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Els\u0151 negyed", - "full_moon": "Telihold", - "last_quarter": "Utols\u00f3 negyed", - "new_moon": "\u00dajhold", - "waning_crescent": "Fogy\u00f3 holdsarl\u00f3", - "waning_gibbous": "Fogy\u00f3 hold", - "waxing_crescent": "N\u00f6v\u0151 holdsarl\u00f3", - "waxing_gibbous": "N\u00f6v\u0151 hold" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.it.json b/homeassistant/components/moon/.translations/sensor.it.json deleted file mode 100644 index 39c7f22f7af..00000000000 --- a/homeassistant/components/moon/.translations/sensor.it.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Primo quarto", - "full_moon": "Luna piena", - "last_quarter": "Ultimo quarto", - "new_moon": "Luna nuova", - "waning_crescent": "Luna calante", - "waning_gibbous": "Gibbosa calante", - "waxing_crescent": "Luna crescente", - "waxing_gibbous": "Gibbosa crescente" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.ko.json b/homeassistant/components/moon/.translations/sensor.ko.json deleted file mode 100644 index 7e62250b892..00000000000 --- a/homeassistant/components/moon/.translations/sensor.ko.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "\ubc18\ub2ec(\ucc28\uc624\ub974\ub294)", - "full_moon": "\ubcf4\ub984\ub2ec", - "last_quarter": "\ubc18\ub2ec(\uc904\uc5b4\ub4dc\ub294)", - "new_moon": "\uc0ad\uc6d4", - "waning_crescent": "\uadf8\ubbd0\ub2ec", - "waning_gibbous": "\ud558\ud604\ub2ec", - "waxing_crescent": "\ucd08\uc2b9\ub2ec", - "waxing_gibbous": "\uc0c1\ud604\ub2ec" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.lb.json b/homeassistant/components/moon/.translations/sensor.lb.json deleted file mode 100644 index 174d1fdcc13..00000000000 --- a/homeassistant/components/moon/.translations/sensor.lb.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "zouhuelend", - "full_moon": "Vollmound", - "last_quarter": "ofhuelend", - "new_moon": "Neimound", - "waning_crescent": "ofhuelend hallef", - "waning_gibbous": "ofhuelend dr\u00e4i v\u00e9ierels", - "waxing_crescent": "zouhuelend hallef", - "waxing_gibbous": "zouhuelend dr\u00e4i v\u00e9ierels" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.nl.json b/homeassistant/components/moon/.translations/sensor.nl.json deleted file mode 100644 index 3eaf470e509..00000000000 --- a/homeassistant/components/moon/.translations/sensor.nl.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Eerste kwartier", - "full_moon": "Volle maan", - "last_quarter": "Laatste kwartier", - "new_moon": "Nieuwe maan", - "waning_crescent": "Krimpende, sikkelvormige maan", - "waning_gibbous": "Krimpende, vooruitspringende maan", - "waxing_crescent": "Wassende, sikkelvormige maan", - "waxing_gibbous": "Wassende, sikkelvormige maan" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.no.json b/homeassistant/components/moon/.translations/sensor.no.json deleted file mode 100644 index 3998494606f..00000000000 --- a/homeassistant/components/moon/.translations/sensor.no.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "F\u00f8rste kvartal", - "full_moon": "Fullm\u00e5ne", - "last_quarter": "Siste kvartal", - "new_moon": "Nym\u00e5ne", - "waning_crescent": "Minkende m\u00e5nesigd", - "waning_gibbous": "Minkende m\u00e5ne", - "waxing_crescent": "Voksende m\u00e5nesigd", - "waxing_gibbous": "Voksende m\u00e5ne" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.pl.json b/homeassistant/components/moon/.translations/sensor.pl.json deleted file mode 100644 index 85dfe79bae4..00000000000 --- a/homeassistant/components/moon/.translations/sensor.pl.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "pierwsza kwadra", - "full_moon": "pe\u0142nia", - "last_quarter": "ostatnia kwadra", - "new_moon": "n\u00f3w", - "waning_crescent": "sierp ubywaj\u0105cy", - "waning_gibbous": "ubywaj\u0105cy garbaty", - "waxing_crescent": "sierp przybywaj\u0105cy", - "waxing_gibbous": "przybywaj\u0105cy garbaty" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.pt-BR.json b/homeassistant/components/moon/.translations/sensor.pt-BR.json deleted file mode 100644 index 6b98e337305..00000000000 --- a/homeassistant/components/moon/.translations/sensor.pt-BR.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Quarto crescente", - "full_moon": "Lua cheia", - "last_quarter": "Quarto minguante", - "new_moon": "Lua Nova", - "waning_crescent": "Minguante", - "waning_gibbous": "Minguante", - "waxing_crescent": "Crescente", - "waxing_gibbous": "Crescente" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.pt.json b/homeassistant/components/moon/.translations/sensor.pt.json deleted file mode 100644 index c73ff5b2977..00000000000 --- a/homeassistant/components/moon/.translations/sensor.pt.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "state": { - "first_quarter": "Quarto crescente", - "full_moon": "Lua cheia", - "new_moon": "Lua nova" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.ru.json b/homeassistant/components/moon/.translations/sensor.ru.json deleted file mode 100644 index 6db932a1aed..00000000000 --- a/homeassistant/components/moon/.translations/sensor.ru.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c", - "full_moon": "\u041f\u043e\u043b\u043d\u043e\u043b\u0443\u043d\u0438\u0435", - "last_quarter": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c", - "new_moon": "\u041d\u043e\u0432\u043e\u043b\u0443\u043d\u0438\u0435", - "waning_crescent": "\u0421\u0442\u0430\u0440\u0430\u044f \u043b\u0443\u043d\u0430", - "waning_gibbous": "\u0423\u0431\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043b\u0443\u043d\u0430", - "waxing_crescent": "\u041c\u043e\u043b\u043e\u0434\u0430\u044f \u043b\u0443\u043d\u0430", - "waxing_gibbous": "\u041f\u0440\u0438\u0431\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043b\u0443\u043d\u0430" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.sl.json b/homeassistant/components/moon/.translations/sensor.sl.json deleted file mode 100644 index 1b69e10e6f9..00000000000 --- a/homeassistant/components/moon/.translations/sensor.sl.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "Prvi krajec", - "full_moon": "Polna luna", - "last_quarter": "Zadnji krajec", - "new_moon": "Mlaj", - "waning_crescent": "Zadnji izbo\u010dec", - "waning_gibbous": "Zadnji srpec", - "waxing_crescent": "Prvi izbo\u010dec", - "waxing_gibbous": "Prvi srpec" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.sv.json b/homeassistant/components/moon/.translations/sensor.sv.json deleted file mode 100644 index 1cd7596ba0f..00000000000 --- a/homeassistant/components/moon/.translations/sensor.sv.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "F\u00f6rsta halvm\u00e5ne", - "full_moon": "Fullm\u00e5ne", - "last_quarter": "Sista halvm\u00e5ne", - "new_moon": "Nym\u00e5ne", - "waning_crescent": "Avtagande m\u00e5nsk\u00e4ra", - "waning_gibbous": "Avtagande halvm\u00e5ne", - "waxing_crescent": "Tilltagande m\u00e5nsk\u00e4ra", - "waxing_gibbous": "Tilltagande halvm\u00e5ne" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.th.json b/homeassistant/components/moon/.translations/sensor.th.json deleted file mode 100644 index 5d65c23226d..00000000000 --- a/homeassistant/components/moon/.translations/sensor.th.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "state": { - "full_moon": "\u0e1e\u0e23\u0e30\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c\u0e40\u0e15\u0e47\u0e21\u0e14\u0e27\u0e07" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.uk.json b/homeassistant/components/moon/.translations/sensor.uk.json deleted file mode 100644 index 4e1a9f7acab..00000000000 --- a/homeassistant/components/moon/.translations/sensor.uk.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "first_quarter": "\u041f\u0435\u0440\u0448\u0430 \u0447\u0432\u0435\u0440\u0442\u044c", - "full_moon": "\u041f\u043e\u0432\u043d\u0438\u0439 \u043c\u0456\u0441\u044f\u0446\u044c", - "last_quarter": "\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u0447\u0432\u0435\u0440\u0442\u044c", - "new_moon": "\u041d\u043e\u0432\u0438\u0439 \u043c\u0456\u0441\u044f\u0446\u044c" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.zh-Hans.json b/homeassistant/components/moon/.translations/sensor.zh-Hans.json deleted file mode 100644 index 22ab0d49f62..00000000000 --- a/homeassistant/components/moon/.translations/sensor.zh-Hans.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "\u4e0a\u5f26\u6708", - "full_moon": "\u6ee1\u6708", - "last_quarter": "\u4e0b\u5f26\u6708", - "new_moon": "\u65b0\u6708", - "waning_crescent": "\u6b8b\u6708", - "waning_gibbous": "\u4e8f\u51f8\u6708", - "waxing_crescent": "\u5ce8\u7709\u6708", - "waxing_gibbous": "\u76c8\u51f8\u6708" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.zh-Hant.json b/homeassistant/components/moon/.translations/sensor.zh-Hant.json deleted file mode 100644 index 9cf4aad011e..00000000000 --- a/homeassistant/components/moon/.translations/sensor.zh-Hant.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "state": { - "first_quarter": "\u4e0a\u5f26\u6708", - "full_moon": "\u6eff\u6708", - "last_quarter": "\u4e0b\u5f26\u6708", - "new_moon": "\u65b0\u6708", - "waning_crescent": "\u6b98\u6708", - "waning_gibbous": "\u8667\u51f8\u6708", - "waxing_crescent": "\u86fe\u7709\u6708", - "waxing_gibbous": "\u76c8\u51f8\u6708" - } -} \ No newline at end of file diff --git a/homeassistant/components/moon/manifest.json b/homeassistant/components/moon/manifest.json index 508cd8f8867..8af5f40630c 100644 --- a/homeassistant/components/moon/manifest.json +++ b/homeassistant/components/moon/manifest.json @@ -2,8 +2,6 @@ "domain": "moon", "name": "Moon", "documentation": "https://www.home-assistant.io/integrations/moon", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/moon/sensor.py b/homeassistant/components/moon/sensor.py index 3a7dd9e2084..3a25b68eeac 100644 --- a/homeassistant/components/moon/sensor.py +++ b/homeassistant/components/moon/sensor.py @@ -56,9 +56,14 @@ class MoonSensor(Entity): @property def name(self): - """Return the name of the device.""" + """Return the name of the entity.""" return self._name + @property + def device_class(self): + """Return the device class of the entity.""" + return "moon__phase" + @property def state(self): """Return the state of the device.""" diff --git a/homeassistant/components/moon/strings.sensor.json b/homeassistant/components/moon/strings.sensor.json index 97d96623d88..3bbff0a776b 100644 --- a/homeassistant/components/moon/strings.sensor.json +++ b/homeassistant/components/moon/strings.sensor.json @@ -1,12 +1,14 @@ { "state": { - "new_moon": "New moon", - "waxing_crescent": "Waxing crescent", - "first_quarter": "First quarter", - "waxing_gibbous": "Waxing gibbous", - "full_moon": "Full moon", - "waning_gibbous": "Waning gibbous", - "last_quarter": "Last quarter", - "waning_crescent": "Waning crescent" + "moon__phase": { + "new_moon": "New moon", + "waxing_crescent": "Waxing crescent", + "first_quarter": "First quarter", + "waxing_gibbous": "Waxing gibbous", + "full_moon": "Full moon", + "waning_gibbous": "Waning gibbous", + "last_quarter": "Last quarter", + "waning_crescent": "Waning crescent" + } } } diff --git a/homeassistant/components/moon/.translations/sensor.ar.json b/homeassistant/components/moon/translations/sensor.ar.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.ar.json rename to homeassistant/components/moon/translations/sensor.ar.json diff --git a/homeassistant/components/moon/translations/sensor.bg.json b/homeassistant/components/moon/translations/sensor.bg.json new file mode 100644 index 00000000000..1bb8964f9ab --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.bg.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "\u041f\u044a\u0440\u0432\u0430 \u0447\u0435\u0442\u0432\u044a\u0440\u0442\u0438\u043d\u0430", + "full_moon": "\u041f\u044a\u043b\u043d\u043e\u043b\u0443\u043d\u0438\u0435", + "last_quarter": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0447\u0435\u0442\u0432\u044a\u0440\u0442\u0438\u043d\u0430", + "new_moon": "\u041d\u043e\u0432\u043e\u043b\u0443\u043d\u0438\u0435", + "waning_crescent": "\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446", + "waning_gibbous": "\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446", + "waxing_crescent": "\u041d\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446", + "waxing_gibbous": "\u041d\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u0449 \u043f\u043e\u043b\u0443\u043c\u0435\u0441\u0435\u0446" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.ca.json b/homeassistant/components/moon/translations/sensor.ca.json new file mode 100644 index 00000000000..05748c75143 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.ca.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Quart creixent", + "full_moon": "Lluna plena", + "last_quarter": "Quart minvant", + "new_moon": "Lluna nova", + "waning_crescent": "Minvant (Lluna vella)", + "waning_gibbous": "Gibosa minvant", + "waxing_crescent": "Lluna nova visible", + "waxing_gibbous": "Gibosa creixent" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.cs.json b/homeassistant/components/moon/translations/sensor.cs.json new file mode 100644 index 00000000000..ff430618ff9 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.cs.json @@ -0,0 +1,10 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Prvn\u00ed \u010dtvr\u0165", + "full_moon": "\u00dapln\u011bk", + "waxing_crescent": "Dor\u016fstaj\u00edc\u00ed srpek", + "waxing_gibbous": "Prvn\u00ed \u010dtvr\u0165" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.da.json b/homeassistant/components/moon/translations/sensor.da.json new file mode 100644 index 00000000000..84bb0229776 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.da.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "F\u00f8rste kvartal", + "full_moon": "Fuldm\u00e5ne", + "last_quarter": "Sidste kvartal", + "new_moon": "Nym\u00e5ne", + "waning_crescent": "Aftagende halvm\u00e5ne", + "waning_gibbous": "Aftagende m\u00e5ne", + "waxing_crescent": "Tiltagende halvm\u00e5ne", + "waxing_gibbous": "Tiltagende m\u00e5ne" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.de.json b/homeassistant/components/moon/translations/sensor.de.json new file mode 100644 index 00000000000..0ba97763e8a --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.de.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Erstes Viertel", + "full_moon": "Vollmond", + "last_quarter": "Letztes Viertel", + "new_moon": "Neumond", + "waning_crescent": "Abnehmende Sichel", + "waning_gibbous": "Drittes Viertel", + "waxing_crescent": "Zunehmende Sichel", + "waxing_gibbous": "Zweites Viertel" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.en.json b/homeassistant/components/moon/translations/sensor.en.json new file mode 100644 index 00000000000..3d240105797 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.en.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "First quarter", + "full_moon": "Full moon", + "last_quarter": "Last quarter", + "new_moon": "New moon", + "waning_crescent": "Waning crescent", + "waning_gibbous": "Waning gibbous", + "waxing_crescent": "Waxing crescent", + "waxing_gibbous": "Waxing gibbous" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.es-419.json b/homeassistant/components/moon/translations/sensor.es-419.json new file mode 100644 index 00000000000..107d3e46404 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Cuarto creciente", + "full_moon": "Luna llena", + "last_quarter": "Cuarto menguante" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.es.json b/homeassistant/components/moon/translations/sensor.es.json new file mode 100644 index 00000000000..428629c5d92 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.es.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Cuarto creciente", + "full_moon": "Luna llena", + "last_quarter": "Cuarto menguante", + "new_moon": "Luna nueva", + "waning_crescent": "Menguante", + "waning_gibbous": "Gibosa menguante", + "waxing_crescent": "Nueva visible", + "waxing_gibbous": "Gibosa creciente" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.et.json b/homeassistant/components/moon/translations/sensor.et.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.et.json rename to homeassistant/components/moon/translations/sensor.et.json diff --git a/homeassistant/components/moon/.translations/sensor.fi.json b/homeassistant/components/moon/translations/sensor.fi.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.fi.json rename to homeassistant/components/moon/translations/sensor.fi.json diff --git a/homeassistant/components/moon/translations/sensor.fr.json b/homeassistant/components/moon/translations/sensor.fr.json new file mode 100644 index 00000000000..b730dd1661e --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.fr.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Premier quartier", + "full_moon": "Pleine lune", + "last_quarter": "Dernier quartier", + "new_moon": "Nouvelle lune", + "waning_crescent": "Dernier croissant", + "waning_gibbous": "Gibbeuse d\u00e9croissante", + "waxing_crescent": "Premier croissant", + "waxing_gibbous": "Gibbeuse croissante" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.he.json b/homeassistant/components/moon/translations/sensor.he.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.he.json rename to homeassistant/components/moon/translations/sensor.he.json diff --git a/homeassistant/components/moon/translations/sensor.hu.json b/homeassistant/components/moon/translations/sensor.hu.json new file mode 100644 index 00000000000..b61f8c0d212 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.hu.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Els\u0151 negyed", + "full_moon": "Telihold", + "last_quarter": "Utols\u00f3 negyed", + "new_moon": "\u00dajhold", + "waning_crescent": "Fogy\u00f3 holdsarl\u00f3", + "waning_gibbous": "Fogy\u00f3 hold", + "waxing_crescent": "N\u00f6v\u0151 holdsarl\u00f3", + "waxing_gibbous": "N\u00f6v\u0151 hold" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.id.json b/homeassistant/components/moon/translations/sensor.id.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.id.json rename to homeassistant/components/moon/translations/sensor.id.json diff --git a/homeassistant/components/moon/translations/sensor.it.json b/homeassistant/components/moon/translations/sensor.it.json new file mode 100644 index 00000000000..9099c2a0278 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.it.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Primo quarto", + "full_moon": "Luna piena", + "last_quarter": "Ultimo quarto", + "new_moon": "Luna nuova", + "waning_crescent": "Luna calante", + "waning_gibbous": "Gibbosa calante", + "waxing_crescent": "Luna crescente", + "waxing_gibbous": "Gibbosa crescente" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.ko.json b/homeassistant/components/moon/translations/sensor.ko.json new file mode 100644 index 00000000000..7a0ad6a8de4 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.ko.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "\ubc18\ub2ec(\ucc28\uc624\ub974\ub294)", + "full_moon": "\ubcf4\ub984\ub2ec", + "last_quarter": "\ubc18\ub2ec(\uc904\uc5b4\ub4dc\ub294)", + "new_moon": "\uc0ad\uc6d4", + "waning_crescent": "\uadf8\ubbd0\ub2ec", + "waning_gibbous": "\ud558\ud604\ub2ec", + "waxing_crescent": "\ucd08\uc2b9\ub2ec", + "waxing_gibbous": "\uc0c1\ud604\ub2ec" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.lb.json b/homeassistant/components/moon/translations/sensor.lb.json new file mode 100644 index 00000000000..73532f8b67a --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.lb.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "zouhuelend", + "full_moon": "Vollmound", + "last_quarter": "ofhuelend", + "new_moon": "Neimound", + "waning_crescent": "ofhuelend hallef", + "waning_gibbous": "ofhuelend dr\u00e4i v\u00e9ierels", + "waxing_crescent": "zouhuelend hallef", + "waxing_gibbous": "zouhuelend dr\u00e4i v\u00e9ierels" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.nl.json b/homeassistant/components/moon/translations/sensor.nl.json new file mode 100644 index 00000000000..3e55c971960 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.nl.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Eerste kwartier", + "full_moon": "Volle maan", + "last_quarter": "Laatste kwartier", + "new_moon": "Nieuwe maan", + "waning_crescent": "Krimpende, sikkelvormige maan", + "waning_gibbous": "Krimpende, vooruitspringende maan", + "waxing_crescent": "Wassende, sikkelvormige maan", + "waxing_gibbous": "Wassende, sikkelvormige maan" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.nn.json b/homeassistant/components/moon/translations/sensor.nn.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.nn.json rename to homeassistant/components/moon/translations/sensor.nn.json diff --git a/homeassistant/components/moon/translations/sensor.no.json b/homeassistant/components/moon/translations/sensor.no.json new file mode 100644 index 00000000000..265fa69de55 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.no.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "F\u00f8rste kvartal", + "full_moon": "Fullm\u00e5ne", + "last_quarter": "Siste kvartal", + "new_moon": "Nym\u00e5ne", + "waning_crescent": "Minkende m\u00e5nesigd", + "waning_gibbous": "Minkende m\u00e5ne", + "waxing_crescent": "Voksende m\u00e5nesigd", + "waxing_gibbous": "Voksende m\u00e5ne" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.pl.json b/homeassistant/components/moon/translations/sensor.pl.json new file mode 100644 index 00000000000..616db5be621 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.pl.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "pierwsza kwadra", + "full_moon": "pe\u0142nia", + "last_quarter": "ostatnia kwadra", + "new_moon": "n\u00f3w", + "waning_crescent": "sierp ubywaj\u0105cy", + "waning_gibbous": "ubywaj\u0105cy garbaty", + "waxing_crescent": "sierp przybywaj\u0105cy", + "waxing_gibbous": "przybywaj\u0105cy garbaty" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.pt-BR.json b/homeassistant/components/moon/translations/sensor.pt-BR.json new file mode 100644 index 00000000000..ef19ea8a594 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.pt-BR.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Quarto crescente", + "full_moon": "Lua cheia", + "last_quarter": "Quarto minguante", + "new_moon": "Lua Nova", + "waning_crescent": "Minguante", + "waning_gibbous": "Minguante", + "waxing_crescent": "Crescente", + "waxing_gibbous": "Crescente" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.pt.json b/homeassistant/components/moon/translations/sensor.pt.json new file mode 100644 index 00000000000..99fb4be1f08 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Quarto crescente", + "full_moon": "Lua cheia", + "new_moon": "Lua nova" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/.translations/sensor.ro.json b/homeassistant/components/moon/translations/sensor.ro.json similarity index 100% rename from homeassistant/components/moon/.translations/sensor.ro.json rename to homeassistant/components/moon/translations/sensor.ro.json diff --git a/homeassistant/components/moon/translations/sensor.ru.json b/homeassistant/components/moon/translations/sensor.ru.json new file mode 100644 index 00000000000..c2b3a811492 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.ru.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c", + "full_moon": "\u041f\u043e\u043b\u043d\u043e\u043b\u0443\u043d\u0438\u0435", + "last_quarter": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c", + "new_moon": "\u041d\u043e\u0432\u043e\u043b\u0443\u043d\u0438\u0435", + "waning_crescent": "\u0421\u0442\u0430\u0440\u0430\u044f \u043b\u0443\u043d\u0430", + "waning_gibbous": "\u0423\u0431\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043b\u0443\u043d\u0430", + "waxing_crescent": "\u041c\u043e\u043b\u043e\u0434\u0430\u044f \u043b\u0443\u043d\u0430", + "waxing_gibbous": "\u041f\u0440\u0438\u0431\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043b\u0443\u043d\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.sl.json b/homeassistant/components/moon/translations/sensor.sl.json new file mode 100644 index 00000000000..2c0ef414bab --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.sl.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "Prvi krajec", + "full_moon": "Polna luna", + "last_quarter": "Zadnji krajec", + "new_moon": "Mlaj", + "waning_crescent": "Zadnji izbo\u010dec", + "waning_gibbous": "Zadnji srpec", + "waxing_crescent": "Prvi izbo\u010dec", + "waxing_gibbous": "Prvi srpec" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.sv.json b/homeassistant/components/moon/translations/sensor.sv.json new file mode 100644 index 00000000000..2ec8a1f99be --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.sv.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "F\u00f6rsta halvm\u00e5ne", + "full_moon": "Fullm\u00e5ne", + "last_quarter": "Sista halvm\u00e5ne", + "new_moon": "Nym\u00e5ne", + "waning_crescent": "Avtagande m\u00e5nsk\u00e4ra", + "waning_gibbous": "Avtagande halvm\u00e5ne", + "waxing_crescent": "Tilltagande m\u00e5nsk\u00e4ra", + "waxing_gibbous": "Tilltagande halvm\u00e5ne" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.th.json b/homeassistant/components/moon/translations/sensor.th.json new file mode 100644 index 00000000000..7d32f97deb9 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.th.json @@ -0,0 +1,7 @@ +{ + "state": { + "moon__phase": { + "full_moon": "\u0e1e\u0e23\u0e30\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c\u0e40\u0e15\u0e47\u0e21\u0e14\u0e27\u0e07" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.uk.json b/homeassistant/components/moon/translations/sensor.uk.json new file mode 100644 index 00000000000..71c2d80eb98 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.uk.json @@ -0,0 +1,10 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "\u041f\u0435\u0440\u0448\u0430 \u0447\u0432\u0435\u0440\u0442\u044c", + "full_moon": "\u041f\u043e\u0432\u043d\u0438\u0439 \u043c\u0456\u0441\u044f\u0446\u044c", + "last_quarter": "\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u0447\u0432\u0435\u0440\u0442\u044c", + "new_moon": "\u041d\u043e\u0432\u0438\u0439 \u043c\u0456\u0441\u044f\u0446\u044c" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.zh-Hans.json b/homeassistant/components/moon/translations/sensor.zh-Hans.json new file mode 100644 index 00000000000..10c85e39bc8 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.zh-Hans.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "\u4e0a\u5f26\u6708", + "full_moon": "\u6ee1\u6708", + "last_quarter": "\u4e0b\u5f26\u6708", + "new_moon": "\u65b0\u6708", + "waning_crescent": "\u6b8b\u6708", + "waning_gibbous": "\u4e8f\u51f8\u6708", + "waxing_crescent": "\u5ce8\u7709\u6708", + "waxing_gibbous": "\u76c8\u51f8\u6708" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/moon/translations/sensor.zh-Hant.json b/homeassistant/components/moon/translations/sensor.zh-Hant.json new file mode 100644 index 00000000000..11028b5dde6 --- /dev/null +++ b/homeassistant/components/moon/translations/sensor.zh-Hant.json @@ -0,0 +1,14 @@ +{ + "state": { + "moon__phase": { + "first_quarter": "\u4e0a\u5f26\u6708", + "full_moon": "\u6eff\u6708", + "last_quarter": "\u4e0b\u5f26\u6708", + "new_moon": "\u65b0\u6708", + "waning_crescent": "\u6b98\u6708", + "waning_gibbous": "\u8667\u51f8\u6708", + "waxing_crescent": "\u86fe\u7709\u6708", + "waxing_gibbous": "\u76c8\u51f8\u6708" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mpchc/manifest.json b/homeassistant/components/mpchc/manifest.json index 89e4b872871..2ff67931518 100644 --- a/homeassistant/components/mpchc/manifest.json +++ b/homeassistant/components/mpchc/manifest.json @@ -2,7 +2,5 @@ "domain": "mpchc", "name": "Media Player Classic Home Cinema (MPC-HC)", "documentation": "https://www.home-assistant.io/integrations/mpchc", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mpchc/media_player.py b/homeassistant/components/mpchc/media_player.py index a3f2c500030..b69fa651988 100644 --- a/homeassistant/components/mpchc/media_player.py +++ b/homeassistant/components/mpchc/media_player.py @@ -68,7 +68,7 @@ class MpcHcDevice(MediaPlayerDevice): """Initialize the MPC-HC device.""" self._name = name self._url = url - self._player_variables = dict() + self._player_variables = {} self._available = False def update(self): @@ -83,7 +83,7 @@ class MpcHcDevice(MediaPlayerDevice): self._available = True except requests.exceptions.RequestException: _LOGGER.error("Could not connect to MPC-HC at: %s", self._url) - self._player_variables = dict() + self._player_variables = {} self._available = False def _send_command(self, command_id): diff --git a/homeassistant/components/mpd/manifest.json b/homeassistant/components/mpd/manifest.json index f6230e73a1e..de7b8b8f0d7 100644 --- a/homeassistant/components/mpd/manifest.json +++ b/homeassistant/components/mpd/manifest.json @@ -3,6 +3,5 @@ "name": "Music Player Daemon (MPD)", "documentation": "https://www.home-assistant.io/integrations/mpd", "requirements": ["python-mpd2==1.0.0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/mqtt/.translations/bg.json b/homeassistant/components/mqtt/.translations/bg.json deleted file mode 100644 index 4312bdba6ec..00000000000 --- a/homeassistant/components/mqtt/.translations/bg.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 MQTT." - }, - "error": { - "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0431\u0440\u043e\u043a\u0435\u0440\u0430." - }, - "step": { - "broker": { - "data": { - "broker": "\u0411\u0440\u043e\u043a\u0435\u0440", - "discovery": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0438\u044f MQTT \u0431\u0440\u043e\u043a\u0435\u0440.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" - }, - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435 \u0441 MQTT \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430 {addon}?", - "title": "MQTT \u0431\u0440\u043e\u043a\u0435\u0440 \u0447\u0440\u0435\u0437 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/ca.json b/homeassistant/components/mqtt/.translations/ca.json deleted file mode 100644 index b8cce4bd808..00000000000 --- a/homeassistant/components/mqtt/.translations/ca.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 de MQTT." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar amb el broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Habilita el descobriment autom\u00e0tic", - "password": "Contrasenya", - "port": "Port", - "username": "Nom d'usuari" - }, - "description": "Introdueix la informaci\u00f3 de connexi\u00f3 del teu broker MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Habilitar descobriment autom\u00e0tic" - }, - "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb el broker MQTT proporcionat pel complement de Hass.io: {addon}?", - "title": "Broker MQTT a trav\u00e9s del complement de Hass.io" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Primer bot\u00f3", - "button_2": "Segon bot\u00f3", - "button_3": "Tercer bot\u00f3", - "button_4": "Quart bot\u00f3", - "button_5": "Cinqu\u00e8 bot\u00f3", - "button_6": "Sis\u00e8 bot\u00f3", - "turn_off": "Desactiva", - "turn_on": "Activa" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" clicat dues vegades", - "button_long_press": "\"{subtype}\" premut cont\u00ednuament", - "button_long_release": "\"{subtype}\" alliberat despr\u00e9s d'una estona premut", - "button_quadruple_press": "\"{subtype}\" clicat quatre vegades", - "button_quintuple_press": "\"{subtype}\" clicat cinc vegades", - "button_short_press": "\"{subtype}\" premut", - "button_short_release": "\"{subtype}\" alliberat", - "button_triple_press": "\"{subtype}\" clicat tres vegades" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/cs.json b/homeassistant/components/mqtt/.translations/cs.json deleted file mode 100644 index dbda456587e..00000000000 --- a/homeassistant/components/mqtt/.translations/cs.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Je povolena pouze jedin\u00e1 konfigurace MQTT." - }, - "error": { - "cannot_connect": "Nelze se p\u0159ipojit k brokeru." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Povolit automatick\u00e9 vyhled\u00e1v\u00e1n\u00ed za\u0159\u00edzen\u00ed", - "password": "Heslo", - "port": "Port", - "username": "U\u017eivatelsk\u00e9 jm\u00e9no" - }, - "description": "Zadejte informace proo p\u0159ipojen\u00ed zprost\u0159edkovatele protokolu MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Povolit automatick\u00e9 vyhled\u00e1v\u00e1n\u00ed za\u0159\u00edzen\u00ed" - }, - "description": "Chcete nakonfigurovat slu\u017ebu Home Assistant pro p\u0159ipojen\u00ed k zprost\u0159edkovateli MQTT poskytovan\u00e9mu dopl\u0148kem hass.io {addon}?", - "title": "MQTT Broker prost\u0159ednictv\u00edm dopl\u0148ku Hass.io" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/da.json b/homeassistant/components/mqtt/.translations/da.json deleted file mode 100644 index e018ab7aa14..00000000000 --- a/homeassistant/components/mqtt/.translations/da.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Kun en enkelt konfiguration af MQTT er tilladt." - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse til broker" - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Aktiv\u00e9r automatisk fund", - "password": "Adgangskode", - "port": "Port", - "username": "Brugernavn" - }, - "description": "Indtast venligst forbindelsesindstillinger for din MQTT-broker.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Aktiv\u00e9r opdagelse" - }, - "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til MQTT-brokeren, der leveres af hass.io-tilf\u00f8jelsen {addon}?", - "title": "MQTT-broker via Hass.io-tilf\u00f8jelse" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "F\u00f8rste knap", - "button_2": "Anden knap", - "button_3": "Tredje knap", - "button_4": "Fjerde knap", - "button_5": "Femte knap", - "button_6": "Sjette knap", - "turn_off": "Sluk", - "turn_on": "T\u00e6nd" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" dobbeltklikket", - "button_long_press": "\"{subtype}\" trykket p\u00e5 konstant", - "button_long_release": "\"{subtype}\" sluppet efter langt tryk", - "button_quadruple_press": "\"{subtype}\" firedobbelt-klikket", - "button_quintuple_press": "\"{subtype}\" femdobbelt-klikket", - "button_short_press": "\"{subtype}\" trykket p\u00e5", - "button_short_release": "\"{subtype}\" sluppet", - "button_triple_press": "\"{subtype}\" tredobbeltklikket" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/de.json b/homeassistant/components/mqtt/.translations/de.json deleted file mode 100644 index 87c6a989f52..00000000000 --- a/homeassistant/components/mqtt/.translations/de.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Nur eine einzige Konfiguration von MQTT ist zul\u00e4ssig." - }, - "error": { - "cannot_connect": "Es konnte keine Verbindung zum Broker hergestellt werden." - }, - "step": { - "broker": { - "data": { - "broker": "Server", - "discovery": "Suche aktivieren", - "password": "Passwort", - "port": "Port", - "username": "Benutzername" - }, - "description": "Bitte gib die Verbindungsinformationen deines MQTT-Brokers ein.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Suche aktivieren" - }, - "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass er eine Verbindung mit dem MQTT-Broker herstellt, der vom Hass.io Add-on {addon} bereitgestellt wird?", - "title": "MQTT Broker per Hass.io add-on" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Erste Taste", - "button_2": "Zweite Taste", - "button_3": "Dritte Taste", - "button_4": "Vierte Taste", - "button_5": "F\u00fcnfte Taste", - "button_6": "Sechste Taste", - "turn_off": "Ausschalten", - "turn_on": "Einschalten" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" doppelt angeklickt", - "button_long_press": "\"{subtype}\" kontinuierlich gedr\u00fcckt", - "button_long_release": "\"{subtype}\" nach langem Dr\u00fccken freigegeben", - "button_quadruple_press": "\"{subtype}\" Vierfach geklickt", - "button_quintuple_press": "\"{subtype}\" f\u00fcnffach geklickt", - "button_short_press": "\"{subtype}\" gedr\u00fcckt", - "button_short_release": "\"{subtype}\" freigegeben", - "button_triple_press": "\"{subtype}\" dreifach geklickt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/en.json b/homeassistant/components/mqtt/.translations/en.json deleted file mode 100644 index 55baf3b7f0e..00000000000 --- a/homeassistant/components/mqtt/.translations/en.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Only a single configuration of MQTT is allowed." - }, - "error": { - "cannot_connect": "Unable to connect to the broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Enable discovery", - "password": "Password", - "port": "Port", - "username": "Username" - }, - "description": "Please enter the connection information of your MQTT broker.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Enable discovery" - }, - "description": "Do you want to configure Home Assistant to connect to the MQTT broker provided by the Hass.io add-on {addon}?", - "title": "MQTT Broker via Hass.io add-on" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "First button", - "button_2": "Second button", - "button_3": "Third button", - "button_4": "Fourth button", - "button_5": "Fifth button", - "button_6": "Sixth button", - "turn_off": "Turn off", - "turn_on": "Turn on" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" double clicked", - "button_long_press": "\"{subtype}\" continuously pressed", - "button_long_release": "\"{subtype}\" released after long press", - "button_quadruple_press": "\"{subtype}\" quadruple clicked", - "button_quintuple_press": "\"{subtype}\" quintuple clicked", - "button_short_press": "\"{subtype}\" pressed", - "button_short_release": "\"{subtype}\" released", - "button_triple_press": "\"{subtype}\" triple clicked" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/es-419.json b/homeassistant/components/mqtt/.translations/es-419.json deleted file mode 100644 index 4f54e11a112..00000000000 --- a/homeassistant/components/mqtt/.translations/es-419.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de MQTT." - }, - "error": { - "cannot_connect": "No se puede conectar con el broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Habilitar descubrimiento", - "password": "Contrase\u00f1a", - "port": "Puerto", - "username": "Nombre de usuario" - }, - "description": "Por favor ingrese la informaci\u00f3n de conexi\u00f3n de su agente MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Habilitar descubrimiento" - }, - "description": "\u00bfDesea configurar el Asistente del Hogar para que se conecte al broker MQTT proporcionado por el complemento hass.io {addon}?", - "title": "MQTT Broker a trav\u00e9s del complemento Hass.io" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/es.json b/homeassistant/components/mqtt/.translations/es.json deleted file mode 100644 index a705a885494..00000000000 --- a/homeassistant/components/mqtt/.translations/es.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de MQTT." - }, - "error": { - "cannot_connect": "No se puede conectar con el agente" - }, - "step": { - "broker": { - "data": { - "broker": "Agente", - "discovery": "Habilitar descubrimiento", - "password": "Contrase\u00f1a", - "port": "Puerto", - "username": "Nombre de usuario" - }, - "description": "Por favor, introduce la informaci\u00f3n de tu agente MQTT", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Habilitar descubrimiento" - }, - "description": "\u00bfDesea configurar Home Assistant para conectarse al agente MQTT provisto por el complemento hass.io {addon} ?", - "title": "MQTT Broker a trav\u00e9s del complemento Hass.io" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Primer bot\u00f3n", - "button_2": "Segundo bot\u00f3n", - "button_3": "Tercer bot\u00f3n", - "button_4": "Cuarto bot\u00f3n", - "button_5": "Quinto bot\u00f3n", - "button_6": "Sexto bot\u00f3n", - "turn_off": "Apagar", - "turn_on": "Encender" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" doble pulsaci\u00f3n", - "button_long_press": "\"{subtype}\" pulsado continuamente", - "button_long_release": "\"{subtype}\" soltado despu\u00e9s de pulsaci\u00f3n larga", - "button_quadruple_press": "\"{subtype}\" cu\u00e1druple pulsaci\u00f3n", - "button_quintuple_press": "\"{subtype}\" quintuple pulsaci\u00f3n", - "button_short_press": "\"{subtype}\" pulsado", - "button_short_release": "\"{subtype}\" soltado", - "button_triple_press": "\"{subtype}\" triple pulsaci\u00f3n" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/et.json b/homeassistant/components/mqtt/.translations/et.json deleted file mode 100644 index 4ba36fd3361..00000000000 --- a/homeassistant/components/mqtt/.translations/et.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "broker": { - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/fr.json b/homeassistant/components/mqtt/.translations/fr.json deleted file mode 100644 index eaf930b9a2d..00000000000 --- a/homeassistant/components/mqtt/.translations/fr.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Une seule configuration de MQTT est autoris\u00e9e." - }, - "error": { - "cannot_connect": "Impossible de se connecter au broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Activer la d\u00e9couverte", - "password": "Mot de passe", - "port": "Port", - "username": "Nom d'utilisateur" - }, - "description": "Veuillez entrer les informations de connexion de votre broker MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Activer la d\u00e9couverte" - }, - "description": "Vous voulez configurer Home Assistant pour vous connecter au broker MQTT fourni par l\u2019Add-on hass.io {addon} ?", - "title": "MQTT Broker via le module compl\u00e9mentaire Hass.io" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Premier bouton", - "button_2": "Deuxi\u00e8me bouton", - "button_3": "Troisi\u00e8me bouton", - "button_4": "Quatri\u00e8me bouton", - "button_5": "Cinqui\u00e8me bouton", - "button_6": "Sixi\u00e8me bouton", - "turn_off": "\u00c9teindre", - "turn_on": "Allumer" - }, - "trigger_type": { - "button_short_press": "\" {subtype} \" press\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/he.json b/homeassistant/components/mqtt/.translations/he.json deleted file mode 100644 index e1e2ed49748..00000000000 --- a/homeassistant/components/mqtt/.translations/he.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc MQTT \u05de\u05d5\u05ea\u05e8\u05ea." - }, - "error": { - "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05d1\u05e8\u05d5\u05e7\u05e8." - }, - "step": { - "broker": { - "data": { - "broker": "\u05d1\u05e8\u05d5\u05e7\u05e8", - "discovery": "\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05dc\u05d5\u05d9", - "password": "\u05e1\u05d9\u05e1\u05de\u05d4", - "port": "\u05e4\u05d5\u05e8\u05d8", - "username": "\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9" - }, - "description": "\u05e0\u05d0 \u05dc\u05d4\u05d6\u05d9\u05df \u05d0\u05ea \u05e4\u05e8\u05d8\u05d9 \u05d4\u05d7\u05d9\u05d1\u05d5\u05e8 \u05e9\u05dc \u05d4\u05d1\u05e8\u05d5\u05e7\u05e8 MQTT \u05e9\u05dc\u05da.", - "title": "MQTT" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/hr.json b/homeassistant/components/mqtt/.translations/hr.json deleted file mode 100644 index b3c82fdd8db..00000000000 --- a/homeassistant/components/mqtt/.translations/hr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "broker": { - "data": { - "password": "Lozinka", - "port": "Port", - "username": "Korisni\u010dko ime" - }, - "title": "MQTT" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/hu.json b/homeassistant/components/mqtt/.translations/hu.json deleted file mode 100644 index e45c287f44f..00000000000 --- a/homeassistant/components/mqtt/.translations/hu.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Csak egyetlen MQTT konfigur\u00e1ci\u00f3 megengedett." - }, - "error": { - "cannot_connect": "Nem siker\u00fclt csatlakozni a br\u00f3kerhez." - }, - "step": { - "broker": { - "data": { - "broker": "Br\u00f3ker", - "discovery": "Felfedez\u00e9s enged\u00e9lyez\u00e9se", - "password": "Jelsz\u00f3", - "port": "Port", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - }, - "description": "K\u00e9rlek, add meg az MQTT br\u00f3ker kapcsol\u00f3d\u00e1si adatait.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Felfedez\u00e9s enged\u00e9lyez\u00e9se" - }, - "description": "Be szeretn\u00e9d konfigru\u00e1lni, hogy a Home Assistant a(z) {addon} Hass.io add-on \u00e1ltal biztos\u00edtott MQTT br\u00f3kerhez csatlakozzon?", - "title": "MQTT Broker a Hass.io b\u0151v\u00edtm\u00e9nyen kereszt\u00fcl" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Els\u0151 gomb", - "button_2": "M\u00e1sodik gomb", - "button_3": "Harmadik gomb", - "button_4": "Negyedik gomb", - "button_5": "\u00d6t\u00f6dik gomb", - "button_6": "Hatodik gomb", - "turn_off": "Kikapcsol\u00e1s", - "turn_on": "Bekapcsol\u00e1s" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/id.json b/homeassistant/components/mqtt/.translations/id.json deleted file mode 100644 index 7a9bf8639e2..00000000000 --- a/homeassistant/components/mqtt/.translations/id.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Hanya satu konfigurasi MQTT yang diizinkan." - }, - "error": { - "cannot_connect": "Tidak dapat terhubung ke broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "password": "Kata sandi", - "port": "Port", - "username": "Nama pengguna" - }, - "description": "Harap masukkan informasi koneksi dari broker MQTT Anda.", - "title": "MQTT" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/it.json b/homeassistant/components/mqtt/.translations/it.json deleted file mode 100644 index 45f7f8dcdb5..00000000000 --- a/homeassistant/components/mqtt/.translations/it.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di MQTT." - }, - "error": { - "cannot_connect": "Impossibile connettersi al broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Attiva l'individuazione", - "password": "Password", - "port": "Porta", - "username": "Nome utente" - }, - "description": "Inserisci le informazioni di connessione del tuo broker MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Attiva l'individuazione" - }, - "description": "Vuoi configurare Home Assistant per connettersi al broker MQTT fornito dal componente aggiuntivo di Hass.io: {addon}?", - "title": "Broker MQTT tramite il componente aggiuntivo di Hass.io" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Primo pulsante", - "button_2": "Secondo pulsante", - "button_3": "Terzo pulsante", - "button_4": "Quarto pulsante", - "button_5": "Quinto pulsante", - "button_6": "Sesto pulsante", - "turn_off": "Spegni", - "turn_on": "Accendi" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" cliccato due volte", - "button_long_press": "\"{subtype}\" premuto continuamente", - "button_long_release": "\"{subtype}\" rilasciato dopo una lunga pressione", - "button_quadruple_press": "\"{subtype}\" cliccato quattro volte", - "button_quintuple_press": "\"{subtype}\" cliccato cinque volte", - "button_short_press": "\"{subtype}\" premuto", - "button_short_release": "\"{subtype}\" rilasciato", - "button_triple_press": "\"{subtype}\" cliccato tre volte" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/ko.json b/homeassistant/components/mqtt/.translations/ko.json deleted file mode 100644 index 8a0243013d9..00000000000 --- a/homeassistant/components/mqtt/.translations/ko.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "step": { - "broker": { - "data": { - "broker": "\ube0c\ub85c\ucee4", - "discovery": "\uae30\uae30 \uac80\uc0c9 \ud65c\uc131\ud654", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "MQTT \ube0c\ub85c\ucee4\uc758 \uc5f0\uacb0 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "\uae30\uae30 \uac80\uc0c9 \ud65c\uc131\ud654" - }, - "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc5d0\uc11c \uc81c\uacf5\ub41c MQTT \ube0c\ub85c\ucee4\uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Hass.io \uc560\ub4dc\uc628\uc758 MQTT \ube0c\ub85c\ucee4" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\uccab \ubc88\uc9f8 \ubc84\ud2bc", - "button_2": "\ub450 \ubc88\uc9f8 \ubc84\ud2bc", - "button_3": "\uc138 \ubc88\uc9f8 \ubc84\ud2bc", - "button_4": "\ub124 \ubc88\uc9f8 \ubc84\ud2bc", - "button_5": "\ub2e4\uc12f \ubc88\uc9f8 \ubc84\ud2bc", - "button_6": "\uc5ec\uc12f \ubc88\uc9f8 \ubc84\ud2bc", - "turn_off": "\ub044\uae30", - "turn_on": "\ucf1c\uae30" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" \uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c", - "button_long_press": "\"{subtype}\" \uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c", - "button_long_release": "\"{subtype}\" \uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", - "button_quadruple_press": "\"{subtype}\" \uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c", - "button_quintuple_press": "\"{subtype}\" \uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \ub54c", - "button_short_press": "\"{subtype}\" \uc774 \ub20c\ub9b4 \ub54c", - "button_short_release": "\"{subtype}\" \uc5d0\uc11c \uc190\uc744 \ub5c4 \ub54c", - "button_triple_press": "\"{subtype}\" \uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/lb.json b/homeassistant/components/mqtt/.translations/lb.json deleted file mode 100644 index 25814e1359b..00000000000 --- a/homeassistant/components/mqtt/.translations/lb.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vum MQTT ass erlaabt" - }, - "error": { - "cannot_connect": "Kann sech net mam Broker verbannen." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Entdeckung aktiv\u00e9ieren", - "password": "Passwuert", - "port": "Port", - "username": "Benotzernumm" - }, - "description": "Gitt Verbindungs Informatioune vun \u00e4rem MQTT Broker an.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Entdeckung aktiv\u00e9ieren" - }, - "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mam MQTT broker ze verbannen dee vum hass.io add-on {addon} bereet gestallt g\u00ebtt?", - "title": "MQTT Broker via Hass.io add-on" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u00c9ischte Kn\u00e4ppchen", - "button_2": "Zweete Kn\u00e4ppchen", - "button_3": "Dr\u00ebtte Kn\u00e4ppchen", - "button_4": "V\u00e9ierte Kn\u00e4ppchen", - "button_5": "F\u00ebnnefte Kn\u00e4ppchen", - "button_6": "Sechste Kn\u00e4ppchen", - "turn_off": "Ausschalten", - "turn_on": "Uschalten" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" zwee mol gedr\u00e9ckt", - "button_long_press": "\"{subtype}\" permanent gedr\u00e9ckt", - "button_long_release": "\"{subtype}\" no laangem unhalen lassgelooss", - "button_quadruple_press": "\"{subtype}\" v\u00e9ier mol gedr\u00e9ckt", - "button_quintuple_press": "\"{subtype}\" f\u00ebnnef mol gedr\u00e9ckt", - "button_short_press": "\"{subtype}\" gedr\u00e9ckt", - "button_short_release": "\"{subtype}\" lassgelooss", - "button_triple_press": "\"{subtype}\" dr\u00e4imol gedr\u00e9ckt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/nl.json b/homeassistant/components/mqtt/.translations/nl.json deleted file mode 100644 index 247755d8e89..00000000000 --- a/homeassistant/components/mqtt/.translations/nl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie van MQTT is toegestaan." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met de broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Detectie inschakelen", - "password": "Wachtwoord", - "port": "Poort", - "username": "Gebruikersnaam" - }, - "description": "MQTT", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Detectie inschakelen" - }, - "description": "Wilt u Home Assistant configureren om verbinding te maken met de MQTT-broker die wordt aangeboden door de hass.io add-on {addon} ?", - "title": "MQTTT Broker via Hass.io add-on" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/nn.json b/homeassistant/components/mqtt/.translations/nn.json deleted file mode 100644 index fb650bc7676..00000000000 --- a/homeassistant/components/mqtt/.translations/nn.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Det er berre lov \u00e5 ha \u00e9in MQTT-konfigurasjon" - }, - "error": { - "cannot_connect": "Klarte ikkje \u00e5 kople til meglaren." - }, - "step": { - "broker": { - "data": { - "broker": "Meglar", - "password": "Passord", - "port": "Port", - "username": "Brukarnamn" - }, - "description": "Ver vennleg \u00e5 skriv inn tilkoplingsinformasjonen for MQTT-meglaren din", - "title": "MQTT" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/no.json b/homeassistant/components/mqtt/.translations/no.json deleted file mode 100644 index 8416f74e086..00000000000 --- a/homeassistant/components/mqtt/.translations/no.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Kun en konfigurasjon av MQTT er tillatt." - }, - "error": { - "cannot_connect": "Kan ikke koble til megleren." - }, - "step": { - "broker": { - "data": { - "broker": "Megler", - "discovery": "Aktiver oppdagelse", - "password": "Passord", - "port": "", - "username": "Brukernavn" - }, - "description": "Vennligst oppgi tilkoblingsinformasjonen for din MQTT megler.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Aktiver oppdagelse" - }, - "description": "Vil du konfigurere Home Assistant til \u00e5 koble til en MQTT megler som er levert av Hass.io-tillegget {addon}?", - "title": "MQTT megler via Hass.io tillegg" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "F\u00f8rste knapp", - "button_2": "Andre knapp", - "button_3": "Tredje knapp", - "button_4": "Fjerde knapp", - "button_5": "Femte knapp", - "button_6": "Sjette knapp", - "turn_off": "Skru av", - "turn_on": "Sl\u00e5 p\u00e5" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" dobbeltklikket", - "button_long_press": "{subtype}\" trykket kontinuerlig", - "button_long_release": "\"{subtype}\" utgitt etter lang trykk", - "button_quadruple_press": "\"{subtype}\" firedoblet klikket", - "button_quintuple_press": "\"{subtype}\" quintuple klikket", - "button_short_press": "{subtype}\u00bb trykket", - "button_short_release": "\"{subtype}\" utgitt", - "button_triple_press": "\"{subtype}\" trippel klikket" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/pl.json b/homeassistant/components/mqtt/.translations/pl.json deleted file mode 100644 index 86561f89d2b..00000000000 --- a/homeassistant/components/mqtt/.translations/pl.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja MQTT." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z po\u015brednikiem." - }, - "step": { - "broker": { - "data": { - "broker": "Po\u015brednik", - "discovery": "W\u0142\u0105cz wykrywanie", - "password": "Has\u0142o", - "port": "Port", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Wprowad\u017a informacje o po\u0142\u0105czeniu po\u015brednika MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "W\u0142\u0105cz wykrywanie" - }, - "description": "Czy chcesz skonfigurowa\u0107 Home Assistant'a, aby po\u0142\u0105czy\u0142 si\u0119 z po\u015brednikiem MQTT dostarczonym przez dodatek Hass.io {addon}?", - "title": "Po\u015brednik MQTT za po\u015brednictwem dodatku Hass.io" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "pierwszy przycisk", - "button_2": "drugi przycisk", - "button_3": "trzeci przycisk", - "button_4": "czwarty przycisk", - "button_5": "pi\u0105ty przycisk", - "button_6": "sz\u00f3sty przycisk", - "turn_off": "nast\u0105pi wy\u0142\u0105czenie", - "turn_on": "nast\u0105pi w\u0142\u0105czenie" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" zostanie podw\u00f3jnie naci\u015bni\u0119ty", - "button_long_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y", - "button_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", - "button_quadruple_press": "\"{subtype}\" zostanie czterokrotnie naci\u015bni\u0119ty", - "button_quintuple_press": "\"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty", - "button_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty", - "button_short_release": "\"{subtype}\" zostanie zwolniony", - "button_triple_press": "\"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/pt-BR.json b/homeassistant/components/mqtt/.translations/pt-BR.json deleted file mode 100644 index 989526c8e09..00000000000 --- a/homeassistant/components/mqtt/.translations/pt-BR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do MQTT \u00e9 permitida." - }, - "error": { - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao Broker" - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Ativar descoberta", - "password": "Senha", - "port": "Porta", - "username": "Nome de usu\u00e1rio" - }, - "description": "Por favor, insira as informa\u00e7\u00f5es de conex\u00e3o do seu agente MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Ativar descoberta" - }, - "description": "Deseja configurar o Home Assistant para se conectar ao broker MQTT fornecido pelo complemento hass.io {addon}?", - "title": "MQTT Broker via add-on Hass.io" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/pt.json b/homeassistant/components/mqtt/.translations/pt.json deleted file mode 100644 index 21b9cbdf755..00000000000 --- a/homeassistant/components/mqtt/.translations/pt.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do MQTT \u00e9 permitida." - }, - "error": { - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel ligar ao broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Ativar descoberta", - "password": "Palavra-passe", - "port": "Porto", - "username": "Utilizador" - }, - "description": "Por favor, insira os detalhes de liga\u00e7\u00e3o ao seu broker MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Ativar descoberta" - }, - "description": "Deseja configurar o Home Assistant para se ligar ao broker MQTT fornecido pelo add-on hass.io {addon}?", - "title": "MQTT Broker atrav\u00e9s do add-on Hass.io" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/ro.json b/homeassistant/components/mqtt/.translations/ro.json deleted file mode 100644 index 0bbf39315d9..00000000000 --- a/homeassistant/components/mqtt/.translations/ro.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Este permis\u0103 numai o singur\u0103 configura\u021bie de MQTT." - }, - "error": { - "cannot_connect": "Imposibil de conectat la broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Activa\u021bi descoperirea", - "password": "Parol\u0103", - "port": "Port", - "username": "Nume de utilizator" - }, - "description": "Introduce\u021bi informa\u021biile de conectare ale brokerului dvs. MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Activa\u021bi descoperirea" - }, - "description": "Dori\u021bi s\u0103 configura\u021bi Home Assistant pentru a se conecta la brokerul MQTT furnizat de addon-ul {addon} ?", - "title": "MQTT Broker, prin intermediul Hass.io add-on" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/ru.json b/homeassistant/components/mqtt/.translations/ru.json deleted file mode 100644 index 3559fcc6b2b..00000000000 --- a/homeassistant/components/mqtt/.translations/ru.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0431\u0440\u043e\u043a\u0435\u0440\u0443." - }, - "step": { - "broker": { - "data": { - "broker": "\u0411\u0440\u043e\u043a\u0435\u0440", - "discovery": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0412\u0430\u0448\u0435\u043c\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0443 MQTT.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432" - }, - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0431\u0440\u043e\u043a\u0435\u0440\u0443 MQTT (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", - "title": "\u0411\u0440\u043e\u043a\u0435\u0440 MQTT (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_5": "\u041f\u044f\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_6": "\u0428\u0435\u0441\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430", - "button_long_press": "\"{subtype}\" \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430", - "button_long_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", - "button_quadruple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430", - "button_quintuple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437", - "button_short_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430", - "button_short_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", - "button_triple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/sl.json b/homeassistant/components/mqtt/.translations/sl.json deleted file mode 100644 index 86b72665b71..00000000000 --- a/homeassistant/components/mqtt/.translations/sl.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Dovoljena je samo ena konfiguracija MQTT." - }, - "error": { - "cannot_connect": "Ne morem se povezati na posrednik." - }, - "step": { - "broker": { - "data": { - "broker": "Posrednik", - "discovery": "Omogo\u010di odkrivanje", - "password": "Geslo", - "port": "port", - "username": "Uporabni\u0161ko ime" - }, - "description": "Prosimo vnesite informacije o povezavi va\u0161ega MQTT posrednika.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Omogo\u010di odkrivanje" - }, - "description": "Ali \u017eelite konfigurirati Home Assistant za povezavo s posrednikom MQTT, ki ga ponuja dodatek Hass.io {addon} ?", - "title": "MQTT Broker prek dodatka Hass.io" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "Prvi gumb", - "button_2": "Drugi gumb", - "button_3": "Tretji gumb", - "button_4": "\u010cetrti gumb", - "button_5": "Peti gumb", - "button_6": "\u0160esti gumb", - "turn_off": "Ugasni", - "turn_on": "Pri\u017egi" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" gumb dvakrat kliknjen", - "button_long_press": "\"{subtype}\" gumb neprekinjeno pritisnjen", - "button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", - "button_quadruple_press": "\"{subtype}\" gumb \u0161tirikrat kliknjen", - "button_quintuple_press": "\"{subtype}\" gumb petkrat kliknjen", - "button_short_press": "Pritisnjen \"{subtype}\" gumb", - "button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den", - "button_triple_press": "Gumb \"{subtype}\" trikrat kliknjen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/sv.json b/homeassistant/components/mqtt/.translations/sv.json deleted file mode 100644 index c54ae6e3e16..00000000000 --- a/homeassistant/components/mqtt/.translations/sv.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Endast en enda konfiguration av MQTT \u00e4r till\u00e5ten." - }, - "error": { - "cannot_connect": "Det gick inte att ansluta till broker." - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "Aktivera uppt\u00e4ckt", - "password": "L\u00f6senord", - "port": "Port", - "username": "Anv\u00e4ndarnamn" - }, - "description": "V\u00e4nligen ange anslutningsinformationen f\u00f6r din MQTT broker.", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "Aktivera uppt\u00e4ckt" - }, - "description": "Vill du konfigurera Home Assistant att ansluta till den MQTT-broker som tillhandah\u00e5lls av Hass.io-till\u00e4gget \"{addon}\"?", - "title": "MQTT Broker via Hass.io till\u00e4gg" - } - }, - "title": "MQTT" - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/zh-Hans.json b/homeassistant/components/mqtt/.translations/zh-Hans.json deleted file mode 100644 index c12004236bd..00000000000 --- a/homeassistant/components/mqtt/.translations/zh-Hans.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u53ea\u5141\u8bb8\u4e00\u4e2a MQTT \u914d\u7f6e\u3002" - }, - "error": { - "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230\u670d\u52a1\u5668\u3002" - }, - "step": { - "broker": { - "data": { - "broker": "\u670d\u52a1\u5668", - "discovery": "\u542f\u7528\u53d1\u73b0", - "password": "\u5bc6\u7801", - "port": "\u7aef\u53e3", - "username": "\u7528\u6237\u540d" - }, - "description": "\u8bf7\u8f93\u5165\u60a8\u7684 MQTT \u670d\u52a1\u5668\u7684\u8fde\u63a5\u4fe1\u606f\u3002", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "\u542f\u7528\u53d1\u73b0" - }, - "description": "\u662f\u5426\u8981\u914d\u7f6e Home Assistant \u8fde\u63a5\u5230 Hass.io \u52a0\u8f7d\u9879 {addon} \u63d0\u4f9b\u7684 MQTT \u670d\u52a1\u5668\uff1f", - "title": "\u6765\u81ea Hass.io \u52a0\u8f7d\u9879\u7684 MQTT \u670d\u52a1\u5668" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u7b2c\u4e00\u4e2a\u6309\u94ae", - "button_2": "\u7b2c\u4e8c\u4e2a\u6309\u94ae", - "button_3": "\u7b2c\u4e09\u4e2a\u6309\u94ae", - "button_4": "\u7b2c\u56db\u4e2a\u6309\u94ae", - "button_5": "\u7b2c\u4e94\u4e2a\u6309\u94ae", - "button_6": "\u7b2c\u516d\u4e2a\u6309\u94ae", - "turn_off": "\u5173\u95ed", - "turn_on": "\u6253\u5f00" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" \u53cc\u51fb", - "button_long_press": "\"{subtype}\" \u6301\u7eed\u6309\u4e0b", - "button_long_release": "\"{subtype}\" \u957f\u6309\u540e\u91ca\u653e", - "button_quadruple_press": "\"{subtype}\" \u56db\u8fde\u51fb", - "button_quintuple_press": "\"{subtype}\" \u4e94\u8fde\u51fb", - "button_short_press": "\"{subtype}\" \u6309\u4e0b", - "button_short_release": "\"{subtype}\" \u91ca\u653e", - "button_triple_press": "\"{subtype}\" \u4e09\u8fde\u51fb" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/zh-Hant.json b/homeassistant/components/mqtt/.translations/zh-Hant.json deleted file mode 100644 index 3c57e7b6bb0..00000000000 --- a/homeassistant/components/mqtt/.translations/zh-Hant.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 MQTT\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Broker\u3002" - }, - "step": { - "broker": { - "data": { - "broker": "Broker", - "discovery": "\u958b\u555f\u641c\u5c0b", - "password": "\u4f7f\u7528\u8005\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u8acb\u8f38\u5165 MQTT Broker \u9023\u7dda\u8cc7\u8a0a\u3002", - "title": "MQTT" - }, - "hassio_confirm": { - "data": { - "discovery": "\u958b\u555f\u641c\u5c0b" - }, - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u9023\u7dda\u81f3 Hass.io \u9644\u52a0\u6574\u5408 {addon} \u4e4b MQTT broker\uff1f", - "title": "\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6 MQTT Broker" - } - }, - "title": "MQTT" - }, - "device_automation": { - "trigger_subtype": { - "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", - "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", - "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", - "button_4": "\u7b2c\u56db\u500b\u6309\u9215", - "button_5": "\u7b2c\u4e94\u500b\u6309\u9215", - "button_6": "\u7b2c\u516d\u500b\u6309\u9215", - "turn_off": "\u95dc\u9589", - "turn_on": "\u958b\u555f" - }, - "trigger_type": { - "button_double_press": "\"{subtype}\" \u96d9\u64ca", - "button_long_press": "\"{subtype}\" \u6301\u7e8c\u6309\u4e0b", - "button_long_release": "\"{subtype}\" \u9577\u6309\u5f8c\u91cb\u653e", - "button_quadruple_press": "\"{subtype}\" \u56db\u9023\u64ca", - "button_quintuple_press": "\"{subtype}\" \u4e94\u9023\u64ca", - "button_short_press": "\"{subtype}\" \u6309\u4e0b", - "button_short_release": "\"{subtype}\" \u91cb\u653e", - "button_triple_press": "\"{subtype}\" \u4e09\u9023\u64ca" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index c51f94992f5..25b2b0381ea 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -7,10 +7,8 @@ import json import logging from operator import attrgetter import os -import socket import ssl import sys -import time from typing import Any, Callable, List, Optional, Union import attr @@ -41,6 +39,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity from homeassistant.helpers.typing import ConfigType, HomeAssistantType, ServiceDataType from homeassistant.loader import bind_hass +from homeassistant.util import dt as dt_util from homeassistant.util.async_ import run_callback_threadsafe from homeassistant.util.logging import catch_log_exception @@ -873,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: @@ -929,7 +930,6 @@ class MQTT: "Unable to connect to the MQTT broker: %s", mqtt.connack_string(result_code), ) - self._mqttc.disconnect() return self.connected = True @@ -946,7 +946,8 @@ class MQTT: self.async_publish( # pylint: disable=no-value-for-parameter *attr.astuple( self.birth_message, - filter=lambda attr, value: attr.name != "subscribed_topic", + filter=lambda attr, value: attr.name + not in ["subscribed_topic", "timestamp"], ) ) ) @@ -963,6 +964,7 @@ class MQTT: " (retained)" if msg.retain else "", msg.payload, ) + timestamp = dt_util.utcnow() for subscription in self.subscriptions: if not _match_topic(subscription.topic, msg.topic): @@ -984,37 +986,20 @@ class MQTT: self.hass.async_run_job( subscription.callback, - Message(msg.topic, payload, msg.qos, msg.retain, subscription.topic), + Message( + msg.topic, + payload, + msg.qos, + msg.retain, + subscription.topic, + timestamp, + ), ) 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 socket.error: - 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: @@ -1171,6 +1156,7 @@ class MqttAvailability(Entity): async def cleanup_device_registry(hass, device_id): """Remove device registry entry if there are no remaining entities or triggers.""" # Local import to avoid circular dependencies + # pylint: disable=import-outside-toplevel from . import device_trigger device_registry = await hass.helpers.device_registry.async_get_registry() diff --git a/homeassistant/components/mqtt/abbreviations.py b/homeassistant/components/mqtt/abbreviations.py index 6cfab66c3f1..e4262a7c548 100644 --- a/homeassistant/components/mqtt/abbreviations.py +++ b/homeassistant/components/mqtt/abbreviations.py @@ -85,6 +85,7 @@ ABBREVIATIONS = { "pl_arm_away": "payload_arm_away", "pl_arm_home": "payload_arm_home", "pl_arm_nite": "payload_arm_night", + "pl_arm_custom_b": "payload_arm_custom_bypass", "pl_avail": "payload_available", "pl_cln_sp": "payload_clean_spot", "pl_cls": "payload_close", diff --git a/homeassistant/components/mqtt/alarm_control_panel.py b/homeassistant/components/mqtt/alarm_control_panel.py index 043fa62f6ef..ad39eecdcca 100644 --- a/homeassistant/components/mqtt/alarm_control_panel.py +++ b/homeassistant/components/mqtt/alarm_control_panel.py @@ -8,6 +8,7 @@ from homeassistant.components import mqtt import homeassistant.components.alarm_control_panel as alarm from homeassistant.components.alarm_control_panel.const import ( SUPPORT_ALARM_ARM_AWAY, + SUPPORT_ALARM_ARM_CUSTOM_BYPASS, SUPPORT_ALARM_ARM_HOME, SUPPORT_ALARM_ARM_NIGHT, ) @@ -17,9 +18,12 @@ from homeassistant.const import ( CONF_NAME, CONF_VALUE_TEMPLATE, STATE_ALARM_ARMED_AWAY, + STATE_ALARM_ARMED_CUSTOM_BYPASS, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, + STATE_ALARM_ARMING, STATE_ALARM_DISARMED, + STATE_ALARM_DISARMING, STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED, ) @@ -41,6 +45,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -51,12 +56,14 @@ CONF_PAYLOAD_DISARM = "payload_disarm" CONF_PAYLOAD_ARM_HOME = "payload_arm_home" CONF_PAYLOAD_ARM_AWAY = "payload_arm_away" CONF_PAYLOAD_ARM_NIGHT = "payload_arm_night" +CONF_PAYLOAD_ARM_CUSTOM_BYPASS = "payload_arm_custom_bypass" CONF_COMMAND_TEMPLATE = "command_template" DEFAULT_COMMAND_TEMPLATE = "{{action}}" DEFAULT_ARM_NIGHT = "ARM_NIGHT" DEFAULT_ARM_AWAY = "ARM_AWAY" DEFAULT_ARM_HOME = "ARM_HOME" +DEFAULT_ARM_CUSTOM_BYPASS = "ARM_CUSTOM_BYPASS" DEFAULT_DISARM = "DISARM" DEFAULT_NAME = "MQTT Alarm" PLATFORM_SCHEMA = ( @@ -74,6 +81,9 @@ PLATFORM_SCHEMA = ( vol.Optional(CONF_PAYLOAD_ARM_AWAY, default=DEFAULT_ARM_AWAY): cv.string, vol.Optional(CONF_PAYLOAD_ARM_HOME, default=DEFAULT_ARM_HOME): cv.string, vol.Optional(CONF_PAYLOAD_ARM_NIGHT, default=DEFAULT_ARM_NIGHT): cv.string, + vol.Optional( + CONF_PAYLOAD_ARM_CUSTOM_BYPASS, default=DEFAULT_ARM_CUSTOM_BYPASS + ): cv.string, vol.Optional(CONF_PAYLOAD_DISARM, default=DEFAULT_DISARM): cv.string, vol.Optional(CONF_RETAIN, default=mqtt.DEFAULT_RETAIN): cv.boolean, vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic, @@ -167,6 +177,7 @@ class MqttAlarm( command_template.hass = self.hass @callback + @log_messages(self.hass, self.entity_id) def message_received(msg): """Run when new MQTT message has been received.""" payload = msg.payload @@ -179,7 +190,10 @@ class MqttAlarm( STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_NIGHT, + STATE_ALARM_ARMED_CUSTOM_BYPASS, STATE_ALARM_PENDING, + STATE_ALARM_ARMING, + STATE_ALARM_DISARMING, STATE_ALARM_TRIGGERED, ): _LOGGER.warning("Received unexpected payload: %s", msg.payload) @@ -231,7 +245,12 @@ class MqttAlarm( @property def supported_features(self) -> int: """Return the list of supported features.""" - return SUPPORT_ALARM_ARM_HOME | SUPPORT_ALARM_ARM_AWAY | SUPPORT_ALARM_ARM_NIGHT + return ( + SUPPORT_ALARM_ARM_HOME + | SUPPORT_ALARM_ARM_AWAY + | SUPPORT_ALARM_ARM_NIGHT + | SUPPORT_ALARM_ARM_CUSTOM_BYPASS + ) @property def code_format(self): @@ -293,6 +312,17 @@ class MqttAlarm( action = self._config[CONF_PAYLOAD_ARM_NIGHT] self._publish(code, action) + async def async_alarm_arm_custom_bypass(self, code=None): + """Send arm custom bypass command. + + This method is a coroutine. + """ + code_required = self._config[CONF_CODE_ARM_REQUIRED] + if code_required and not self._validate_code(code, "arming custom bypass"): + return + action = self._config[CONF_PAYLOAD_ARM_CUSTOM_BYPASS] + self._publish(code, action) + def _publish(self, code, action): """Publish via mqtt.""" command_template = self._config[CONF_COMMAND_TEMPLATE] diff --git a/homeassistant/components/mqtt/binary_sensor.py b/homeassistant/components/mqtt/binary_sensor.py index d268c12aa87..c7595de0eeb 100644 --- a/homeassistant/components/mqtt/binary_sensor.py +++ b/homeassistant/components/mqtt/binary_sensor.py @@ -37,6 +37,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -155,6 +156,7 @@ class MqttBinarySensor( self.async_write_ha_state() @callback + @log_messages(self.hass, self.entity_id) def state_message_received(msg): """Handle a new received MQTT state message.""" payload = msg.payload diff --git a/homeassistant/components/mqtt/camera.py b/homeassistant/components/mqtt/camera.py index a75ae33f861..1bfb248d94a 100644 --- a/homeassistant/components/mqtt/camera.py +++ b/homeassistant/components/mqtt/camera.py @@ -21,6 +21,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -116,6 +117,7 @@ class MqttCamera( """(Re)Subscribe to topics.""" @callback + @log_messages(self.hass, self.entity_id) def message_received(msg): """Handle new MQTT messages.""" self._last_image = msg.payload diff --git a/homeassistant/components/mqtt/climate.py b/homeassistant/components/mqtt/climate.py index 46404de0c8a..91e30c7b1b1 100644 --- a/homeassistant/components/mqtt/climate.py +++ b/homeassistant/components/mqtt/climate.py @@ -37,6 +37,7 @@ from homeassistant.const import ( ATTR_TEMPERATURE, CONF_DEVICE, CONF_NAME, + CONF_TEMPERATURE_UNIT, CONF_VALUE_TEMPLATE, PRECISION_HALVES, PRECISION_TENTHS, @@ -60,6 +61,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -222,6 +224,7 @@ PLATFORM_SCHEMA = ( vol.Optional(CONF_TEMP_LOW_STATE_TOPIC): mqtt.valid_subscribe_topic, vol.Optional(CONF_TEMP_STATE_TEMPLATE): cv.template, vol.Optional(CONF_TEMP_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_TEMPERATURE_UNIT): cv.temperature_unit, vol.Optional(CONF_UNIQUE_ID): cv.string, vol.Optional(CONF_VALUE_TEMPLATE): cv.template, } @@ -293,7 +296,6 @@ class MqttClimate( self._target_temp_high = None self._target_temp_low = None self._topic = None - self._unit_of_measurement = hass.config.units.temperature_unit self._value_templates = None self._setup_from_config(config) @@ -384,6 +386,7 @@ class MqttClimate( return template(msg.payload) @callback + @log_messages(self.hass, self.entity_id) def handle_action_received(msg): """Handle receiving action via MQTT.""" payload = render_template(msg, CONF_ACTION_TEMPLATE) @@ -405,6 +408,7 @@ class MqttClimate( _LOGGER.error("Could not parse temperature from %s", payload) @callback + @log_messages(self.hass, self.entity_id) def handle_current_temperature_received(msg): """Handle current temperature coming via MQTT.""" handle_temperature_received( @@ -416,6 +420,7 @@ class MqttClimate( ) @callback + @log_messages(self.hass, self.entity_id) def handle_target_temperature_received(msg): """Handle target temperature coming via MQTT.""" handle_temperature_received(msg, CONF_TEMP_STATE_TEMPLATE, "_target_temp") @@ -425,6 +430,7 @@ class MqttClimate( ) @callback + @log_messages(self.hass, self.entity_id) def handle_temperature_low_received(msg): """Handle target temperature low coming via MQTT.""" handle_temperature_received( @@ -436,6 +442,7 @@ class MqttClimate( ) @callback + @log_messages(self.hass, self.entity_id) def handle_temperature_high_received(msg): """Handle target temperature high coming via MQTT.""" handle_temperature_received( @@ -458,6 +465,7 @@ class MqttClimate( self.async_write_ha_state() @callback + @log_messages(self.hass, self.entity_id) def handle_current_mode_received(msg): """Handle receiving mode via MQTT.""" handle_mode_received( @@ -467,6 +475,7 @@ class MqttClimate( add_subscription(topics, CONF_MODE_STATE_TOPIC, handle_current_mode_received) @callback + @log_messages(self.hass, self.entity_id) def handle_fan_mode_received(msg): """Handle receiving fan mode via MQTT.""" handle_mode_received( @@ -479,6 +488,7 @@ class MqttClimate( add_subscription(topics, CONF_FAN_MODE_STATE_TOPIC, handle_fan_mode_received) @callback + @log_messages(self.hass, self.entity_id) def handle_swing_mode_received(msg): """Handle receiving swing mode via MQTT.""" handle_mode_received( @@ -514,6 +524,7 @@ class MqttClimate( self.async_write_ha_state() @callback + @log_messages(self.hass, self.entity_id) def handle_away_mode_received(msg): """Handle receiving away mode via MQTT.""" handle_onoff_mode_received(msg, CONF_AWAY_MODE_STATE_TEMPLATE, "_away") @@ -521,6 +532,7 @@ class MqttClimate( add_subscription(topics, CONF_AWAY_MODE_STATE_TOPIC, handle_away_mode_received) @callback + @log_messages(self.hass, self.entity_id) def handle_aux_mode_received(msg): """Handle receiving aux mode via MQTT.""" handle_onoff_mode_received(msg, CONF_AUX_STATE_TEMPLATE, "_aux") @@ -528,6 +540,7 @@ class MqttClimate( add_subscription(topics, CONF_AUX_STATE_TOPIC, handle_aux_mode_received) @callback + @log_messages(self.hass, self.entity_id) def handle_hold_mode_received(msg): """Handle receiving hold mode via MQTT.""" payload = render_template(msg, CONF_HOLD_STATE_TEMPLATE) @@ -571,7 +584,9 @@ class MqttClimate( @property def temperature_unit(self): """Return the unit of measurement.""" - return self._unit_of_measurement + if self._config.get(CONF_TEMPERATURE_UNIT): + return self._config.get(CONF_TEMPERATURE_UNIT) + return self.hass.config.units.temperature_unit @property def current_temperature(self): diff --git a/homeassistant/components/mqtt/config_flow.py b/homeassistant/components/mqtt/config_flow.py index d3c6ee819b5..b0ba58158e0 100644 --- a/homeassistant/components/mqtt/config_flow.py +++ b/homeassistant/components/mqtt/config_flow.py @@ -125,6 +125,7 @@ class FlowHandler(config_entries.ConfigFlow): def try_connection(broker, port, username, password, protocol="3.1"): """Test if we can connect to an MQTT broker.""" + # pylint: disable=import-outside-toplevel import paho.mqtt.client as mqtt if protocol == "3.1": diff --git a/homeassistant/components/mqtt/cover.py b/homeassistant/components/mqtt/cover.py index a7a39678192..d5487bbe29f 100644 --- a/homeassistant/components/mqtt/cover.py +++ b/homeassistant/components/mqtt/cover.py @@ -31,7 +31,6 @@ from homeassistant.const import ( STATE_UNKNOWN, ) from homeassistant.core import callback -from homeassistant.exceptions import TemplateError import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.typing import ConfigType, HomeAssistantType @@ -49,6 +48,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -268,7 +268,8 @@ class MqttCover( topics = {} @callback - def tilt_updated(msg): + @log_messages(self.hass, self.entity_id) + def tilt_message_received(msg): """Handle tilt updates.""" payload = msg.payload if tilt_status_template is not None: @@ -287,6 +288,7 @@ class MqttCover( self.async_write_ha_state() @callback + @log_messages(self.hass, self.entity_id) def state_message_received(msg): """Handle new MQTT state messages.""" payload = msg.payload @@ -311,6 +313,7 @@ class MqttCover( self.async_write_ha_state() @callback + @log_messages(self.hass, self.entity_id) def position_message_received(msg): """Handle new MQTT state messages.""" payload = msg.payload @@ -354,7 +357,7 @@ class MqttCover( self._tilt_value = STATE_UNKNOWN topics["tilt_status_topic"] = { "topic": self._config.get(CONF_TILT_STATUS_TOPIC), - "msg_callback": tilt_updated, + "msg_callback": tilt_message_received, "qos": self._config[CONF_QOS], } @@ -527,9 +530,6 @@ class MqttCover( async def async_set_cover_tilt_position(self, **kwargs): """Move the cover tilt to a specific position.""" - if ATTR_TILT_POSITION not in kwargs: - return - position = float(kwargs[ATTR_TILT_POSITION]) # The position needs to be between min and max @@ -546,36 +546,31 @@ class MqttCover( async def async_set_cover_position(self, **kwargs): """Move the cover to a specific position.""" set_position_template = self._config.get(CONF_SET_POSITION_TEMPLATE) - if ATTR_POSITION in kwargs: - position = kwargs[ATTR_POSITION] - percentage_position = position - if set_position_template is not None: - try: - position = set_position_template.async_render(**kwargs) - except TemplateError as ex: - _LOGGER.error(ex) - self._state = None - elif ( - self._config[CONF_POSITION_OPEN] != 100 - and self._config[CONF_POSITION_CLOSED] != 0 - ): - position = self.find_in_range_from_percent(position, COVER_PAYLOAD) + position = kwargs[ATTR_POSITION] + percentage_position = position + if set_position_template is not None: + position = set_position_template.async_render(**kwargs) + elif ( + self._config[CONF_POSITION_OPEN] != 100 + and self._config[CONF_POSITION_CLOSED] != 0 + ): + position = self.find_in_range_from_percent(position, COVER_PAYLOAD) - mqtt.async_publish( - self.hass, - self._config.get(CONF_SET_POSITION_TOPIC), - position, - self._config[CONF_QOS], - self._config[CONF_RETAIN], + mqtt.async_publish( + self.hass, + self._config.get(CONF_SET_POSITION_TOPIC), + position, + self._config[CONF_QOS], + self._config[CONF_RETAIN], + ) + if self._optimistic: + self._state = ( + STATE_CLOSED + if percentage_position == self._config[CONF_POSITION_CLOSED] + else STATE_OPEN ) - if self._optimistic: - self._state = ( - STATE_CLOSED - if percentage_position == self._config[CONF_POSITION_CLOSED] - else STATE_OPEN - ) - self._position = percentage_position - self.async_write_ha_state() + self._position = percentage_position + self.async_write_ha_state() async def async_toggle_tilt(self, **kwargs): """Toggle the entity.""" diff --git a/homeassistant/components/mqtt/debug_info.py b/homeassistant/components/mqtt/debug_info.py index b51ee619a12..2a216366bb1 100644 --- a/homeassistant/components/mqtt/debug_info.py +++ b/homeassistant/components/mqtt/debug_info.py @@ -21,8 +21,11 @@ def log_messages(hass: HomeAssistantType, entity_id: str) -> MessageCallbackType def _log_message(msg): """Log message.""" debug_info = hass.data[DATA_MQTT_DEBUG_INFO] - messages = debug_info["entities"][entity_id]["topics"][msg.subscribed_topic] - messages.append(msg.payload) + messages = debug_info["entities"][entity_id]["subscriptions"][ + msg.subscribed_topic + ] + if msg not in messages: + messages.append(msg) def _decorator(msg_callback: MessageCallbackType): @wraps(msg_callback) @@ -37,24 +40,26 @@ def log_messages(hass: HomeAssistantType, entity_id: str) -> MessageCallbackType return _decorator -def add_topic(hass, message_callback, topic): - """Prepare debug data for topic.""" +def add_subscription(hass, message_callback, subscription): + """Prepare debug data for subscription.""" entity_id = getattr(message_callback, "__entity_id", None) if entity_id: debug_info = hass.data.setdefault( DATA_MQTT_DEBUG_INFO, {"entities": {}, "triggers": {}} ) entity_info = debug_info["entities"].setdefault( - entity_id, {"topics": {}, "discovery_data": {}} + entity_id, {"subscriptions": {}, "discovery_data": {}} ) - entity_info["topics"][topic] = deque([], STORED_MESSAGES) + entity_info["subscriptions"][subscription] = deque([], STORED_MESSAGES) -def remove_topic(hass, message_callback, topic): - """Remove debug data for topic.""" +def remove_subscription(hass, message_callback, subscription): + """Remove debug data for subscription.""" entity_id = getattr(message_callback, "__entity_id", None) if entity_id and entity_id in hass.data[DATA_MQTT_DEBUG_INFO]["entities"]: - hass.data[DATA_MQTT_DEBUG_INFO]["entities"][entity_id]["topics"].pop(topic) + hass.data[DATA_MQTT_DEBUG_INFO]["entities"][entity_id]["subscriptions"].pop( + subscription + ) def add_entity_discovery_data(hass, discovery_data, entity_id): @@ -63,7 +68,7 @@ def add_entity_discovery_data(hass, discovery_data, entity_id): DATA_MQTT_DEBUG_INFO, {"entities": {}, "triggers": {}} ) entity_info = debug_info["entities"].setdefault( - entity_id, {"topics": {}, "discovery_data": {}} + entity_id, {"subscriptions": {}, "discovery_data": {}} ) entity_info["discovery_data"] = discovery_data @@ -117,9 +122,15 @@ async def info_for_device(hass, device_id): continue entity_info = mqtt_debug_info["entities"][entry.entity_id] - topics = [ - {"topic": topic, "messages": list(messages)} - for topic, messages in entity_info["topics"].items() + subscriptions = [ + { + "topic": topic, + "messages": [ + {"payload": msg.payload, "time": msg.timestamp, "topic": msg.topic} + for msg in list(messages) + ], + } + for topic, messages in entity_info["subscriptions"].items() ] discovery_data = { "topic": entity_info["discovery_data"].get(ATTR_DISCOVERY_TOPIC, ""), @@ -128,7 +139,7 @@ async def info_for_device(hass, device_id): mqtt_info["entities"].append( { "entity_id": entry.entity_id, - "topics": topics, + "subscriptions": subscriptions, "discovery_data": discovery_data, } ) diff --git a/homeassistant/components/mqtt/discovery.py b/homeassistant/components/mqtt/discovery.py index 689b279c5e7..1f2b7162556 100644 --- a/homeassistant/components/mqtt/discovery.py +++ b/homeassistant/components/mqtt/discovery.py @@ -6,7 +6,6 @@ import re from homeassistant.components import mqtt from homeassistant.const import CONF_DEVICE, CONF_PLATFORM -from homeassistant.helpers.discovery import async_load_platform from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.typing import HomeAssistantType @@ -35,21 +34,6 @@ SUPPORTED_COMPONENTS = [ "vacuum", ] -CONFIG_ENTRY_COMPONENTS = [ - "alarm_control_panel", - "binary_sensor", - "camera", - "climate", - "cover", - "device_automation", - "fan", - "light", - "lock", - "sensor", - "switch", - "vacuum", -] - ALREADY_DISCOVERED = "mqtt_discovered_components" DATA_CONFIG_ENTRY_LOCK = "mqtt_config_entry_lock" CONFIG_ENTRY_IS_SETUP = "mqtt_config_entry_is_setup" @@ -72,8 +56,6 @@ def set_discovery_hash(hass, discovery_hash): class MQTTConfig(dict): """Dummy class to allow adding attributes.""" - pass - async def async_start( hass: HomeAssistantType, discovery_topic, hass_config, config_entry=None @@ -159,15 +141,12 @@ async def async_start( _LOGGER.info("Found new component: %s %s", component, discovery_id) hass.data[ALREADY_DISCOVERED][discovery_hash] = None - if component not in CONFIG_ENTRY_COMPONENTS: - await async_load_platform(hass, component, "mqtt", payload, hass_config) - return - config_entries_key = f"{component}.mqtt" async with hass.data[DATA_CONFIG_ENTRY_LOCK]: if config_entries_key not in hass.data[CONFIG_ENTRY_IS_SETUP]: if component == "device_automation": # Local import to avoid circular dependencies + # pylint: disable=import-outside-toplevel from . import device_automation await device_automation.async_setup_entry(hass, config_entry) @@ -185,7 +164,7 @@ async def async_start( hass.data[CONFIG_ENTRY_IS_SETUP] = set() await mqtt.async_subscribe( - hass, discovery_topic + "/#", async_device_message_received, 0 + hass, f"{discovery_topic}/#", async_device_message_received, 0 ) return True diff --git a/homeassistant/components/mqtt/fan.py b/homeassistant/components/mqtt/fan.py index b50bdf9734b..9ce3809bfe8 100644 --- a/homeassistant/components/mqtt/fan.py +++ b/homeassistant/components/mqtt/fan.py @@ -40,6 +40,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -249,6 +250,7 @@ class MqttFan( templates[key] = tpl.async_render_with_possible_json_value @callback + @log_messages(self.hass, self.entity_id) def state_received(msg): """Handle new received MQTT message.""" payload = templates[CONF_STATE](msg.payload) @@ -266,6 +268,7 @@ class MqttFan( } @callback + @log_messages(self.hass, self.entity_id) def speed_received(msg): """Handle new received MQTT message for the speed.""" payload = templates[ATTR_SPEED](msg.payload) @@ -288,6 +291,7 @@ class MqttFan( self._speed = SPEED_OFF @callback + @log_messages(self.hass, self.entity_id) def oscillation_received(msg): """Handle new received MQTT message for the oscillation.""" payload = templates[OSCILLATION](msg.payload) @@ -397,9 +401,6 @@ class MqttFan( This method is a coroutine. """ - if self._topic[CONF_SPEED_COMMAND_TOPIC] is None: - return - if speed == SPEED_LOW: mqtt_payload = self._payload["SPEED_LOW"] elif speed == SPEED_MEDIUM: @@ -428,9 +429,6 @@ class MqttFan( This method is a coroutine. """ - if self._topic[CONF_OSCILLATION_COMMAND_TOPIC] is None: - return - if oscillating is False: payload = self._payload["OSCILLATE_OFF_PAYLOAD"] else: diff --git a/homeassistant/components/mqtt/light/schema_basic.py b/homeassistant/components/mqtt/light/schema_basic.py index 4b47014af48..e6a7f827f1e 100644 --- a/homeassistant/components/mqtt/light/schema_basic.py +++ b/homeassistant/components/mqtt/light/schema_basic.py @@ -51,6 +51,7 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.restore_state import RestoreEntity import homeassistant.util.color as color_util +from ..debug_info import log_messages from .schema import MQTT_LIGHT_SCHEMA_SCHEMA _LOGGER = logging.getLogger(__name__) @@ -292,6 +293,7 @@ class MqttLight( last_state = await self.async_get_last_state() @callback + @log_messages(self.hass, self.entity_id) def state_received(msg): """Handle new MQTT messages.""" payload = templates[CONF_STATE](msg.payload) @@ -315,6 +317,7 @@ class MqttLight( self._state = last_state.state == STATE_ON @callback + @log_messages(self.hass, self.entity_id) def brightness_received(msg): """Handle new MQTT messages for the brightness.""" payload = templates[CONF_BRIGHTNESS](msg.payload) @@ -346,6 +349,7 @@ class MqttLight( self._brightness = None @callback + @log_messages(self.hass, self.entity_id) def rgb_received(msg): """Handle new MQTT messages for RGB.""" payload = templates[CONF_RGB](msg.payload) @@ -377,6 +381,7 @@ class MqttLight( self._hs = (0, 0) @callback + @log_messages(self.hass, self.entity_id) def color_temp_received(msg): """Handle new MQTT messages for color temperature.""" payload = templates[CONF_COLOR_TEMP](msg.payload) @@ -406,6 +411,7 @@ class MqttLight( self._color_temp = None @callback + @log_messages(self.hass, self.entity_id) def effect_received(msg): """Handle new MQTT messages for effect.""" payload = templates[CONF_EFFECT](msg.payload) @@ -435,6 +441,7 @@ class MqttLight( self._effect = None @callback + @log_messages(self.hass, self.entity_id) def hs_received(msg): """Handle new MQTT messages for hs color.""" payload = templates[CONF_HS](msg.payload) @@ -466,6 +473,7 @@ class MqttLight( self._hs = (0, 0) @callback + @log_messages(self.hass, self.entity_id) def white_value_received(msg): """Handle new MQTT messages for white value.""" payload = templates[CONF_WHITE_VALUE](msg.payload) @@ -497,6 +505,7 @@ class MqttLight( self._white_value = None @callback + @log_messages(self.hass, self.entity_id) def xy_received(msg): """Handle new MQTT messages for xy color.""" payload = templates[CONF_XY](msg.payload) diff --git a/homeassistant/components/mqtt/light/schema_json.py b/homeassistant/components/mqtt/light/schema_json.py index 0af5aaf2c76..924559e3e90 100644 --- a/homeassistant/components/mqtt/light/schema_json.py +++ b/homeassistant/components/mqtt/light/schema_json.py @@ -54,6 +54,7 @@ from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.typing import ConfigType import homeassistant.util.color as color_util +from ..debug_info import log_messages from .schema import MQTT_LIGHT_SCHEMA_SCHEMA from .schema_basic import CONF_BRIGHTNESS_SCALE @@ -234,6 +235,7 @@ class MqttLightJson( last_state = await self.async_get_last_state() @callback + @log_messages(self.hass, self.entity_id) def state_received(msg): """Handle new MQTT messages.""" values = json.loads(msg.payload) diff --git a/homeassistant/components/mqtt/light/schema_template.py b/homeassistant/components/mqtt/light/schema_template.py index cd3e704f624..25de6862bdb 100644 --- a/homeassistant/components/mqtt/light/schema_template.py +++ b/homeassistant/components/mqtt/light/schema_template.py @@ -45,6 +45,7 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.restore_state import RestoreEntity import homeassistant.util.color as color_util +from ..debug_info import log_messages from .schema import MQTT_LIGHT_SCHEMA_SCHEMA _LOGGER = logging.getLogger(__name__) @@ -215,6 +216,7 @@ class MqttTemplate( last_state = await self.async_get_last_state() @callback + @log_messages(self.hass, self.entity_id) def state_received(msg): """Handle new MQTT messages.""" state = self._templates[ diff --git a/homeassistant/components/mqtt/lock.py b/homeassistant/components/mqtt/lock.py index 89f005b7469..378f1b8fbcb 100644 --- a/homeassistant/components/mqtt/lock.py +++ b/homeassistant/components/mqtt/lock.py @@ -29,6 +29,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -156,6 +157,7 @@ class MqttLock( value_template.hass = self.hass @callback + @log_messages(self.hass, self.entity_id) def message_received(msg): """Handle new MQTT messages.""" payload = msg.payload diff --git a/homeassistant/components/mqtt/manifest.json b/homeassistant/components/mqtt/manifest.json index c5063dc14a1..37070627477 100644 --- a/homeassistant/components/mqtt/manifest.json +++ b/homeassistant/components/mqtt/manifest.json @@ -5,5 +5,5 @@ "documentation": "https://www.home-assistant.io/integrations/mqtt", "requirements": ["hbmqtt==0.9.5", "paho-mqtt==1.5.0"], "dependencies": ["http"], - "codeowners": ["@home-assistant/core"] + "codeowners": ["@home-assistant/core", "@emontnemery"] } diff --git a/homeassistant/components/mqtt/models.py b/homeassistant/components/mqtt/models.py index 3a4add57298..1fb6cd28fac 100644 --- a/homeassistant/components/mqtt/models.py +++ b/homeassistant/components/mqtt/models.py @@ -1,4 +1,5 @@ """Modesl used by multiple MQTT modules.""" +import datetime as dt from typing import Callable, Union import attr @@ -15,6 +16,7 @@ class Message: qos = attr.ib(type=int) retain = attr.ib(type=bool) subscribed_topic = attr.ib(type=str, default=None) + timestamp = attr.ib(type=dt.datetime, default=None) MessageCallbackType = Callable[[Message], None] diff --git a/homeassistant/components/mqtt/strings.json b/homeassistant/components/mqtt/strings.json index f0a38bcbc55..08a1500975a 100644 --- a/homeassistant/components/mqtt/strings.json +++ b/homeassistant/components/mqtt/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "MQTT", "step": { "broker": { - "title": "MQTT", "description": "Please enter the connection information of your MQTT broker.", "data": { "broker": "Broker", @@ -16,17 +14,13 @@ "hassio_confirm": { "title": "MQTT Broker via Hass.io add-on", "description": "Do you want to configure Home Assistant to connect to the MQTT broker provided by the Hass.io add-on {addon}?", - "data": { - "discovery": "Enable discovery" - } + "data": { "discovery": "Enable discovery" } } }, "abort": { "single_instance_allowed": "Only a single configuration of MQTT is allowed." }, - "error": { - "cannot_connect": "Unable to connect to the broker." - } + "error": { "cannot_connect": "Unable to connect to the broker." } }, "device_automation": { "trigger_type": { diff --git a/homeassistant/components/mqtt/subscription.py b/homeassistant/components/mqtt/subscription.py index b4793a49dca..c1de08d5be8 100644 --- a/homeassistant/components/mqtt/subscription.py +++ b/homeassistant/components/mqtt/subscription.py @@ -34,14 +34,16 @@ class EntitySubscription: if other is not None and other.unsubscribe_callback is not None: other.unsubscribe_callback() # Clear debug data if it exists - debug_info.remove_topic(self.hass, other.message_callback, other.topic) + debug_info.remove_subscription( + self.hass, other.message_callback, other.topic + ) if self.topic is None: # We were asked to remove the subscription or not to create it return # Prepare debug data - debug_info.add_topic(self.hass, self.message_callback, self.topic) + debug_info.add_subscription(self.hass, self.message_callback, self.topic) self.unsubscribe_callback = await mqtt.async_subscribe( hass, self.topic, self.message_callback, self.qos, self.encoding @@ -96,7 +98,9 @@ async def async_subscribe_topics( if remaining.unsubscribe_callback is not None: remaining.unsubscribe_callback() # Clear debug data if it exists - debug_info.remove_topic(hass, remaining.message_callback, remaining.topic) + debug_info.remove_subscription( + hass, remaining.message_callback, remaining.topic + ) return new_state diff --git a/homeassistant/components/mqtt/switch.py b/homeassistant/components/mqtt/switch.py index 32066c67b7a..bc1f4a038b4 100644 --- a/homeassistant/components/mqtt/switch.py +++ b/homeassistant/components/mqtt/switch.py @@ -34,6 +34,7 @@ from . import ( MqttEntityDeviceInfo, subscription, ) +from .debug_info import log_messages from .discovery import MQTT_DISCOVERY_NEW, clear_discovery_hash _LOGGER = logging.getLogger(__name__) @@ -162,6 +163,7 @@ class MqttSwitch( template.hass = self.hass @callback + @log_messages(self.hass, self.entity_id) def state_message_received(msg): """Handle new MQTT state messages.""" payload = msg.payload diff --git a/homeassistant/components/mqtt/translations/bg.json b/homeassistant/components/mqtt/translations/bg.json new file mode 100644 index 00000000000..384efdebffc --- /dev/null +++ b/homeassistant/components/mqtt/translations/bg.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 MQTT." + }, + "error": { + "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0431\u0440\u043e\u043a\u0435\u0440\u0430." + }, + "step": { + "broker": { + "data": { + "broker": "\u0411\u0440\u043e\u043a\u0435\u0440", + "discovery": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0438\u044f MQTT \u0431\u0440\u043e\u043a\u0435\u0440.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430" + }, + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435 \u0441 MQTT \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430 {addon}?", + "title": "MQTT \u0431\u0440\u043e\u043a\u0435\u0440 \u0447\u0440\u0435\u0437 Hass.io \u0434\u043e\u0431\u0430\u0432\u043a\u0430" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/ca.json b/homeassistant/components/mqtt/translations/ca.json new file mode 100644 index 00000000000..7b93dfe2fbd --- /dev/null +++ b/homeassistant/components/mqtt/translations/ca.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 de MQTT." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar amb el broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Habilita el descobriment autom\u00e0tic", + "password": "Contrasenya", + "port": "Port", + "username": "Nom d'usuari" + }, + "description": "Introdueix la informaci\u00f3 de connexi\u00f3 del teu broker MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Habilitar descobriment autom\u00e0tic" + }, + "description": "Vols configurar Home Assistant perqu\u00e8 es connecti amb el broker MQTT proporcionat pel complement de Hass.io: {addon}?", + "title": "Broker MQTT a trav\u00e9s del complement de Hass.io" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Primer bot\u00f3", + "button_2": "Segon bot\u00f3", + "button_3": "Tercer bot\u00f3", + "button_4": "Quart bot\u00f3", + "button_5": "Cinqu\u00e8 bot\u00f3", + "button_6": "Sis\u00e8 bot\u00f3", + "turn_off": "Desactiva", + "turn_on": "Activa" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" clicat dues vegades", + "button_long_press": "\"{subtype}\" premut cont\u00ednuament", + "button_long_release": "\"{subtype}\" alliberat despr\u00e9s d'una estona premut", + "button_quadruple_press": "\"{subtype}\" clicat quatre vegades", + "button_quintuple_press": "\"{subtype}\" clicat cinc vegades", + "button_short_press": "\"{subtype}\" premut", + "button_short_release": "\"{subtype}\" alliberat", + "button_triple_press": "\"{subtype}\" clicat tres vegades" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/cs.json b/homeassistant/components/mqtt/translations/cs.json new file mode 100644 index 00000000000..d021c1fcba8 --- /dev/null +++ b/homeassistant/components/mqtt/translations/cs.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Je povolena pouze jedin\u00e1 konfigurace MQTT." + }, + "error": { + "cannot_connect": "Nelze se p\u0159ipojit k brokeru." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Povolit automatick\u00e9 vyhled\u00e1v\u00e1n\u00ed za\u0159\u00edzen\u00ed", + "password": "Heslo", + "port": "Port", + "username": "U\u017eivatelsk\u00e9 jm\u00e9no" + }, + "description": "Zadejte informace proo p\u0159ipojen\u00ed zprost\u0159edkovatele protokolu MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Povolit automatick\u00e9 vyhled\u00e1v\u00e1n\u00ed za\u0159\u00edzen\u00ed" + }, + "description": "Chcete nakonfigurovat slu\u017ebu Home Assistant pro p\u0159ipojen\u00ed k zprost\u0159edkovateli MQTT poskytovan\u00e9mu dopl\u0148kem hass.io {addon}?", + "title": "MQTT Broker prost\u0159ednictv\u00edm dopl\u0148ku Hass.io" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/da.json b/homeassistant/components/mqtt/translations/da.json new file mode 100644 index 00000000000..ba605bd6595 --- /dev/null +++ b/homeassistant/components/mqtt/translations/da.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Kun en enkelt konfiguration af MQTT er tilladt." + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse til broker" + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Aktiv\u00e9r automatisk fund", + "password": "Adgangskode", + "port": "Port", + "username": "Brugernavn" + }, + "description": "Indtast venligst forbindelsesindstillinger for din MQTT-broker.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Aktiv\u00e9r opdagelse" + }, + "description": "Vil du konfigurere Home Assistant til at oprette forbindelse til MQTT-brokeren, der leveres af hass.io-tilf\u00f8jelsen {addon}?", + "title": "MQTT-broker via Hass.io-tilf\u00f8jelse" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "F\u00f8rste knap", + "button_2": "Anden knap", + "button_3": "Tredje knap", + "button_4": "Fjerde knap", + "button_5": "Femte knap", + "button_6": "Sjette knap", + "turn_off": "Sluk", + "turn_on": "T\u00e6nd" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" dobbeltklikket", + "button_long_press": "\"{subtype}\" trykket p\u00e5 konstant", + "button_long_release": "\"{subtype}\" sluppet efter langt tryk", + "button_quadruple_press": "\"{subtype}\" firedobbelt-klikket", + "button_quintuple_press": "\"{subtype}\" femdobbelt-klikket", + "button_short_press": "\"{subtype}\" trykket p\u00e5", + "button_short_release": "\"{subtype}\" sluppet", + "button_triple_press": "\"{subtype}\" tredobbeltklikket" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/de.json b/homeassistant/components/mqtt/translations/de.json new file mode 100644 index 00000000000..12e1c5bc46c --- /dev/null +++ b/homeassistant/components/mqtt/translations/de.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Nur eine einzige Konfiguration von MQTT ist zul\u00e4ssig." + }, + "error": { + "cannot_connect": "Es konnte keine Verbindung zum Broker hergestellt werden." + }, + "step": { + "broker": { + "data": { + "broker": "Server", + "discovery": "Suche aktivieren", + "password": "Passwort", + "port": "Port", + "username": "Benutzername" + }, + "description": "Bitte gib die Verbindungsinformationen deines MQTT-Brokers ein.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Suche aktivieren" + }, + "description": "M\u00f6chtest du Home Assistant so konfigurieren, dass er eine Verbindung mit dem MQTT-Broker herstellt, der vom Hass.io Add-on {addon} bereitgestellt wird?", + "title": "MQTT Broker per Hass.io add-on" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Erste Taste", + "button_2": "Zweite Taste", + "button_3": "Dritte Taste", + "button_4": "Vierte Taste", + "button_5": "F\u00fcnfte Taste", + "button_6": "Sechste Taste", + "turn_off": "Ausschalten", + "turn_on": "Einschalten" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" doppelt angeklickt", + "button_long_press": "\"{subtype}\" kontinuierlich gedr\u00fcckt", + "button_long_release": "\"{subtype}\" nach langem Dr\u00fccken losgelassen", + "button_quadruple_press": "\"{subtype}\" Vierfach geklickt", + "button_quintuple_press": "\"{subtype}\" f\u00fcnffach geklickt", + "button_short_press": "\"{subtype}\" gedr\u00fcckt", + "button_short_release": "\"{subtype}\" losgelassen", + "button_triple_press": "\"{subtype}\" dreifach geklickt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/en.json b/homeassistant/components/mqtt/translations/en.json new file mode 100644 index 00000000000..f7bc89da80b --- /dev/null +++ b/homeassistant/components/mqtt/translations/en.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Only a single configuration of MQTT is allowed." + }, + "error": { + "cannot_connect": "Unable to connect to the broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Enable discovery", + "password": "Password", + "port": "Port", + "username": "Username" + }, + "description": "Please enter the connection information of your MQTT broker.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Enable discovery" + }, + "description": "Do you want to configure Home Assistant to connect to the MQTT broker provided by the Hass.io add-on {addon}?", + "title": "MQTT Broker via Hass.io add-on" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "First button", + "button_2": "Second button", + "button_3": "Third button", + "button_4": "Fourth button", + "button_5": "Fifth button", + "button_6": "Sixth button", + "turn_off": "Turn off", + "turn_on": "Turn on" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" double clicked", + "button_long_press": "\"{subtype}\" continuously pressed", + "button_long_release": "\"{subtype}\" released after long press", + "button_quadruple_press": "\"{subtype}\" quadruple clicked", + "button_quintuple_press": "\"{subtype}\" quintuple clicked", + "button_short_press": "\"{subtype}\" pressed", + "button_short_release": "\"{subtype}\" released", + "button_triple_press": "\"{subtype}\" triple clicked" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/es-419.json b/homeassistant/components/mqtt/translations/es-419.json new file mode 100644 index 00000000000..af0bd912bc7 --- /dev/null +++ b/homeassistant/components/mqtt/translations/es-419.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de MQTT." + }, + "error": { + "cannot_connect": "No se puede conectar con el broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Habilitar descubrimiento", + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Nombre de usuario" + }, + "description": "Por favor ingrese la informaci\u00f3n de conexi\u00f3n de su agente MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Habilitar descubrimiento" + }, + "description": "\u00bfDesea configurar el Asistente del Hogar para que se conecte al broker MQTT proporcionado por el complemento hass.io {addon}?", + "title": "MQTT Broker a trav\u00e9s del complemento Hass.io" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/es.json b/homeassistant/components/mqtt/translations/es.json new file mode 100644 index 00000000000..131e0855ef9 --- /dev/null +++ b/homeassistant/components/mqtt/translations/es.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de MQTT." + }, + "error": { + "cannot_connect": "No se puede conectar con el agente" + }, + "step": { + "broker": { + "data": { + "broker": "Agente", + "discovery": "Habilitar descubrimiento", + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Usuario" + }, + "description": "Por favor, introduce la informaci\u00f3n de tu agente MQTT", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Habilitar descubrimiento" + }, + "description": "\u00bfDesea configurar Home Assistant para conectarse al agente MQTT provisto por el complemento hass.io {addon} ?", + "title": "MQTT Broker a trav\u00e9s del complemento Hass.io" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Primer bot\u00f3n", + "button_2": "Segundo bot\u00f3n", + "button_3": "Tercer bot\u00f3n", + "button_4": "Cuarto bot\u00f3n", + "button_5": "Quinto bot\u00f3n", + "button_6": "Sexto bot\u00f3n", + "turn_off": "Apagar", + "turn_on": "Encender" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" doble pulsaci\u00f3n", + "button_long_press": "\"{subtype}\" pulsado continuamente", + "button_long_release": "\"{subtype}\" soltado despu\u00e9s de pulsaci\u00f3n larga", + "button_quadruple_press": "\"{subtype}\" cu\u00e1druple pulsaci\u00f3n", + "button_quintuple_press": "\"{subtype}\" quintuple pulsaci\u00f3n", + "button_short_press": "\"{subtype}\" pulsado", + "button_short_release": "\"{subtype}\" soltado", + "button_triple_press": "\"{subtype}\" triple pulsaci\u00f3n" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/et.json b/homeassistant/components/mqtt/translations/et.json new file mode 100644 index 00000000000..20ff3db6518 --- /dev/null +++ b/homeassistant/components/mqtt/translations/et.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "broker": { + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/fr.json b/homeassistant/components/mqtt/translations/fr.json new file mode 100644 index 00000000000..74eec7a1f11 --- /dev/null +++ b/homeassistant/components/mqtt/translations/fr.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Une seule configuration de MQTT est autoris\u00e9e." + }, + "error": { + "cannot_connect": "Impossible de se connecter au broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Activer la d\u00e9couverte", + "password": "Mot de passe", + "port": "Port", + "username": "Nom d'utilisateur" + }, + "description": "Veuillez entrer les informations de connexion de votre broker MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Activer la d\u00e9couverte" + }, + "description": "Vous voulez configurer Home Assistant pour vous connecter au broker MQTT fourni par l\u2019Add-on hass.io {addon} ?", + "title": "MQTT Broker via le module compl\u00e9mentaire Hass.io" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Premier bouton", + "button_2": "Deuxi\u00e8me bouton", + "button_3": "Troisi\u00e8me bouton", + "button_4": "Quatri\u00e8me bouton", + "button_5": "Cinqui\u00e8me bouton", + "button_6": "Sixi\u00e8me bouton", + "turn_off": "\u00c9teindre", + "turn_on": "Allumer" + }, + "trigger_type": { + "button_short_press": "\" {subtype} \" press\u00e9" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/he.json b/homeassistant/components/mqtt/translations/he.json new file mode 100644 index 00000000000..f8defa49708 --- /dev/null +++ b/homeassistant/components/mqtt/translations/he.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc MQTT \u05de\u05d5\u05ea\u05e8\u05ea." + }, + "error": { + "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05d1\u05e8\u05d5\u05e7\u05e8." + }, + "step": { + "broker": { + "data": { + "broker": "\u05d1\u05e8\u05d5\u05e7\u05e8", + "discovery": "\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05dc\u05d5\u05d9", + "password": "\u05e1\u05d9\u05e1\u05de\u05d4", + "port": "\u05e4\u05d5\u05e8\u05d8", + "username": "\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9" + }, + "description": "\u05e0\u05d0 \u05dc\u05d4\u05d6\u05d9\u05df \u05d0\u05ea \u05e4\u05e8\u05d8\u05d9 \u05d4\u05d7\u05d9\u05d1\u05d5\u05e8 \u05e9\u05dc \u05d4\u05d1\u05e8\u05d5\u05e7\u05e8 MQTT \u05e9\u05dc\u05da.", + "title": "MQTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/hr.json b/homeassistant/components/mqtt/translations/hr.json new file mode 100644 index 00000000000..67994227513 --- /dev/null +++ b/homeassistant/components/mqtt/translations/hr.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "broker": { + "data": { + "password": "Lozinka", + "port": "Port", + "username": "Korisni\u010dko ime" + }, + "title": "MQTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/hu.json b/homeassistant/components/mqtt/translations/hu.json new file mode 100644 index 00000000000..ee0ac26e0cd --- /dev/null +++ b/homeassistant/components/mqtt/translations/hu.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Csak egyetlen MQTT konfigur\u00e1ci\u00f3 megengedett." + }, + "error": { + "cannot_connect": "Nem siker\u00fclt csatlakozni a br\u00f3kerhez." + }, + "step": { + "broker": { + "data": { + "broker": "Br\u00f3ker", + "discovery": "Felfedez\u00e9s enged\u00e9lyez\u00e9se", + "password": "Jelsz\u00f3", + "port": "Port", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + }, + "description": "K\u00e9rlek, add meg az MQTT br\u00f3ker kapcsol\u00f3d\u00e1si adatait.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Felfedez\u00e9s enged\u00e9lyez\u00e9se" + }, + "description": "Be szeretn\u00e9d konfigru\u00e1lni, hogy a Home Assistant a(z) {addon} Hass.io add-on \u00e1ltal biztos\u00edtott MQTT br\u00f3kerhez csatlakozzon?", + "title": "MQTT Broker a Hass.io b\u0151v\u00edtm\u00e9nyen kereszt\u00fcl" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Els\u0151 gomb", + "button_2": "M\u00e1sodik gomb", + "button_3": "Harmadik gomb", + "button_4": "Negyedik gomb", + "button_5": "\u00d6t\u00f6dik gomb", + "button_6": "Hatodik gomb", + "turn_off": "Kikapcsol\u00e1s", + "turn_on": "Bekapcsol\u00e1s" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/id.json b/homeassistant/components/mqtt/translations/id.json new file mode 100644 index 00000000000..0afc9ee7021 --- /dev/null +++ b/homeassistant/components/mqtt/translations/id.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Hanya satu konfigurasi MQTT yang diizinkan." + }, + "error": { + "cannot_connect": "Tidak dapat terhubung ke broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "password": "Kata sandi", + "port": "Port", + "username": "Nama pengguna" + }, + "description": "Harap masukkan informasi koneksi dari broker MQTT Anda.", + "title": "MQTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/it.json b/homeassistant/components/mqtt/translations/it.json new file mode 100644 index 00000000000..2007a946dd5 --- /dev/null +++ b/homeassistant/components/mqtt/translations/it.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di MQTT." + }, + "error": { + "cannot_connect": "Impossibile connettersi al broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Attiva l'individuazione", + "password": "Password", + "port": "Porta", + "username": "Nome utente" + }, + "description": "Inserisci le informazioni di connessione del tuo broker MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Attiva l'individuazione" + }, + "description": "Vuoi configurare Home Assistant per connettersi al broker MQTT fornito dal componente aggiuntivo di Hass.io: {addon}?", + "title": "Broker MQTT tramite il componente aggiuntivo di Hass.io" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Primo pulsante", + "button_2": "Secondo pulsante", + "button_3": "Terzo pulsante", + "button_4": "Quarto pulsante", + "button_5": "Quinto pulsante", + "button_6": "Sesto pulsante", + "turn_off": "Spegni", + "turn_on": "Accendi" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" cliccato due volte", + "button_long_press": "\"{subtype}\" premuto continuamente", + "button_long_release": "\"{subtype}\" rilasciato dopo una lunga pressione", + "button_quadruple_press": "\"{subtype}\" cliccato quattro volte", + "button_quintuple_press": "\"{subtype}\" cliccato cinque volte", + "button_short_press": "\"{subtype}\" premuto", + "button_short_release": "\"{subtype}\" rilasciato", + "button_triple_press": "\"{subtype}\" cliccato tre volte" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/ko.json b/homeassistant/components/mqtt/translations/ko.json new file mode 100644 index 00000000000..659cec20394 --- /dev/null +++ b/homeassistant/components/mqtt/translations/ko.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "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." + }, + "step": { + "broker": { + "data": { + "broker": "\ube0c\ub85c\ucee4", + "discovery": "\uae30\uae30 \uac80\uc0c9 \ud65c\uc131\ud654", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "MQTT \ube0c\ub85c\ucee4\uc758 \uc5f0\uacb0 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "\uae30\uae30 \uac80\uc0c9 \ud65c\uc131\ud654" + }, + "description": "Hass.io {addon} \uc560\ub4dc\uc628\uc5d0\uc11c \uc81c\uacf5\ub41c MQTT \ube0c\ub85c\ucee4\uc5d0 \uc5f0\uacb0\ud558\ub3c4\ub85d Home Assistant \ub97c \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Hass.io \uc560\ub4dc\uc628\uc758 MQTT \ube0c\ub85c\ucee4" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\uccab \ubc88\uc9f8 \ubc84\ud2bc", + "button_2": "\ub450 \ubc88\uc9f8 \ubc84\ud2bc", + "button_3": "\uc138 \ubc88\uc9f8 \ubc84\ud2bc", + "button_4": "\ub124 \ubc88\uc9f8 \ubc84\ud2bc", + "button_5": "\ub2e4\uc12f \ubc88\uc9f8 \ubc84\ud2bc", + "button_6": "\uc5ec\uc12f \ubc88\uc9f8 \ubc84\ud2bc", + "turn_off": "\ub044\uae30", + "turn_on": "\ucf1c\uae30" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" \uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c", + "button_long_press": "\"{subtype}\" \uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c", + "button_long_release": "\"{subtype}\" \uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", + "button_quadruple_press": "\"{subtype}\" \uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c", + "button_quintuple_press": "\"{subtype}\" \uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \ub54c", + "button_short_press": "\"{subtype}\" \uc774 \ub20c\ub9b4 \ub54c", + "button_short_release": "\"{subtype}\" \uc5d0\uc11c \uc190\uc744 \ub5c4 \ub54c", + "button_triple_press": "\"{subtype}\" \uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/lb.json b/homeassistant/components/mqtt/translations/lb.json new file mode 100644 index 00000000000..ba84a2e30c5 --- /dev/null +++ b/homeassistant/components/mqtt/translations/lb.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vum MQTT ass erlaabt" + }, + "error": { + "cannot_connect": "Kann sech net mam Broker verbannen." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Entdeckung aktiv\u00e9ieren", + "password": "Passwuert", + "port": "Port", + "username": "Benotzernumm" + }, + "description": "Gitt Verbindungs Informatioune vun \u00e4rem MQTT Broker an.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Entdeckung aktiv\u00e9ieren" + }, + "description": "W\u00ebllt dir Home Assistant konfigur\u00e9iere fir sech mam MQTT broker ze verbannen dee vum hass.io add-on {addon} bereet gestallt g\u00ebtt?", + "title": "MQTT Broker via Hass.io add-on" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u00c9ischte Kn\u00e4ppchen", + "button_2": "Zweete Kn\u00e4ppchen", + "button_3": "Dr\u00ebtte Kn\u00e4ppchen", + "button_4": "V\u00e9ierte Kn\u00e4ppchen", + "button_5": "F\u00ebnnefte Kn\u00e4ppchen", + "button_6": "Sechste Kn\u00e4ppchen", + "turn_off": "Ausschalten", + "turn_on": "Uschalten" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" zwee mol gedr\u00e9ckt", + "button_long_press": "\"{subtype}\" permanent gedr\u00e9ckt", + "button_long_release": "\"{subtype}\" no laangem unhalen lassgelooss", + "button_quadruple_press": "\"{subtype}\" v\u00e9ier mol gedr\u00e9ckt", + "button_quintuple_press": "\"{subtype}\" f\u00ebnnef mol gedr\u00e9ckt", + "button_short_press": "\"{subtype}\" gedr\u00e9ckt", + "button_short_release": "\"{subtype}\" lassgelooss", + "button_triple_press": "\"{subtype}\" dr\u00e4imol gedr\u00e9ckt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/lv.json b/homeassistant/components/mqtt/translations/lv.json similarity index 100% rename from homeassistant/components/mqtt/.translations/lv.json rename to homeassistant/components/mqtt/translations/lv.json diff --git a/homeassistant/components/mqtt/translations/nl.json b/homeassistant/components/mqtt/translations/nl.json new file mode 100644 index 00000000000..56684b32535 --- /dev/null +++ b/homeassistant/components/mqtt/translations/nl.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie van MQTT is toegestaan." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met de broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Detectie inschakelen", + "password": "Wachtwoord", + "port": "Poort", + "username": "Gebruikersnaam" + }, + "description": "MQTT", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Detectie inschakelen" + }, + "description": "Wilt u Home Assistant configureren om verbinding te maken met de MQTT-broker die wordt aangeboden door de hass.io add-on {addon} ?", + "title": "MQTTT Broker via Hass.io add-on" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/nn.json b/homeassistant/components/mqtt/translations/nn.json new file mode 100644 index 00000000000..ab64bd1b9fc --- /dev/null +++ b/homeassistant/components/mqtt/translations/nn.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Det er berre lov \u00e5 ha \u00e9in MQTT-konfigurasjon" + }, + "error": { + "cannot_connect": "Klarte ikkje \u00e5 kople til meglaren." + }, + "step": { + "broker": { + "data": { + "broker": "Meglar", + "password": "Passord", + "port": "Port", + "username": "Brukarnamn" + }, + "description": "Ver vennleg \u00e5 skriv inn tilkoplingsinformasjonen for MQTT-meglaren din", + "title": "MQTT" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/no.json b/homeassistant/components/mqtt/translations/no.json new file mode 100644 index 00000000000..3bfceb324a3 --- /dev/null +++ b/homeassistant/components/mqtt/translations/no.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Kun en konfigurasjon av MQTT er tillatt." + }, + "error": { + "cannot_connect": "Kan ikke koble til megleren." + }, + "step": { + "broker": { + "data": { + "broker": "Megler", + "discovery": "Aktiver oppdagelse", + "password": "Passord", + "port": "", + "username": "Brukernavn" + }, + "description": "Vennligst oppgi tilkoblingsinformasjonen for din MQTT megler.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Aktiver oppdagelse" + }, + "description": "Vil du konfigurere Home Assistant til \u00e5 koble til en MQTT megler som er levert av Hass.io-tillegget {addon}?", + "title": "MQTT megler via Hass.io tillegg" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "F\u00f8rste knapp", + "button_2": "Andre knapp", + "button_3": "Tredje knapp", + "button_4": "Fjerde knapp", + "button_5": "Femte knapp", + "button_6": "Sjette knapp", + "turn_off": "Skru av", + "turn_on": "Sl\u00e5 p\u00e5" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" dobbeltklikket", + "button_long_press": "{subtype}\" trykket kontinuerlig", + "button_long_release": "\"{subtype}\" utgitt etter lang trykk", + "button_quadruple_press": "\"{subtype}\" firedoblet klikket", + "button_quintuple_press": "\"{subtype}\" quintuple klikket", + "button_short_press": "{subtype}\u00bb trykket", + "button_short_release": "\"{subtype}\" utgitt", + "button_triple_press": "\"{subtype}\" trippel klikket" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/pl.json b/homeassistant/components/mqtt/translations/pl.json new file mode 100644 index 00000000000..73a29caced6 --- /dev/null +++ b/homeassistant/components/mqtt/translations/pl.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja MQTT." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z po\u015brednikiem." + }, + "step": { + "broker": { + "data": { + "broker": "Po\u015brednik", + "discovery": "W\u0142\u0105cz wykrywanie", + "password": "Has\u0142o", + "port": "Port", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Wprowad\u017a informacje o po\u0142\u0105czeniu po\u015brednika MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "W\u0142\u0105cz wykrywanie" + }, + "description": "Czy chcesz skonfigurowa\u0107 Home Assistant'a, aby po\u0142\u0105czy\u0142 si\u0119 z po\u015brednikiem MQTT dostarczonym przez dodatek Hass.io {addon}?", + "title": "Po\u015brednik MQTT za po\u015brednictwem dodatku Hass.io" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "pierwszy przycisk", + "button_2": "drugi przycisk", + "button_3": "trzeci przycisk", + "button_4": "czwarty przycisk", + "button_5": "pi\u0105ty przycisk", + "button_6": "sz\u00f3sty przycisk", + "turn_off": "nast\u0105pi wy\u0142\u0105czenie", + "turn_on": "nast\u0105pi w\u0142\u0105czenie" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" zostanie podw\u00f3jnie naci\u015bni\u0119ty", + "button_long_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y", + "button_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", + "button_quadruple_press": "\"{subtype}\" zostanie czterokrotnie naci\u015bni\u0119ty", + "button_quintuple_press": "\"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty", + "button_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty", + "button_short_release": "\"{subtype}\" zostanie zwolniony", + "button_triple_press": "\"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/pt-BR.json b/homeassistant/components/mqtt/translations/pt-BR.json new file mode 100644 index 00000000000..1fe0ef5c6e5 --- /dev/null +++ b/homeassistant/components/mqtt/translations/pt-BR.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do MQTT \u00e9 permitida." + }, + "error": { + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao Broker" + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Ativar descoberta", + "password": "Senha", + "port": "Porta", + "username": "Nome de usu\u00e1rio" + }, + "description": "Por favor, insira as informa\u00e7\u00f5es de conex\u00e3o do seu agente MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Ativar descoberta" + }, + "description": "Deseja configurar o Home Assistant para se conectar ao broker MQTT fornecido pelo complemento hass.io {addon}?", + "title": "MQTT Broker via add-on Hass.io" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/pt.json b/homeassistant/components/mqtt/translations/pt.json new file mode 100644 index 00000000000..ef17b291566 --- /dev/null +++ b/homeassistant/components/mqtt/translations/pt.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do MQTT \u00e9 permitida." + }, + "error": { + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel ligar ao broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Ativar descoberta", + "password": "Palavra-passe", + "port": "Porto", + "username": "Nome de Utilizador" + }, + "description": "Por favor, insira os detalhes de liga\u00e7\u00e3o ao seu broker MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Ativar descoberta" + }, + "description": "Deseja configurar o Home Assistant para se ligar ao broker MQTT fornecido pelo add-on hass.io {addon}?", + "title": "MQTT Broker atrav\u00e9s do add-on Hass.io" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/ro.json b/homeassistant/components/mqtt/translations/ro.json new file mode 100644 index 00000000000..5fb6d3a3e65 --- /dev/null +++ b/homeassistant/components/mqtt/translations/ro.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Este permis\u0103 numai o singur\u0103 configura\u021bie de MQTT." + }, + "error": { + "cannot_connect": "Imposibil de conectat la broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Activa\u021bi descoperirea", + "password": "Parol\u0103", + "port": "Port", + "username": "Nume de utilizator" + }, + "description": "Introduce\u021bi informa\u021biile de conectare ale brokerului dvs. MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Activa\u021bi descoperirea" + }, + "description": "Dori\u021bi s\u0103 configura\u021bi Home Assistant pentru a se conecta la brokerul MQTT furnizat de addon-ul {addon} ?", + "title": "MQTT Broker, prin intermediul Hass.io add-on" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/ru.json b/homeassistant/components/mqtt/translations/ru.json new file mode 100644 index 00000000000..3de009aa002 --- /dev/null +++ b/homeassistant/components/mqtt/translations/ru.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0431\u0440\u043e\u043a\u0435\u0440\u0443." + }, + "step": { + "broker": { + "data": { + "broker": "\u0411\u0440\u043e\u043a\u0435\u0440", + "discovery": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0412\u0430\u0448\u0435\u043c\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0443 MQTT.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432" + }, + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0431\u0440\u043e\u043a\u0435\u0440\u0443 MQTT (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io \"{addon}\")?", + "title": "\u0411\u0440\u043e\u043a\u0435\u0440 MQTT (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Hass.io)" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_5": "\u041f\u044f\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_6": "\u0428\u0435\u0441\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + }, + "trigger_type": { + "button_double_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430", + "button_long_press": "{subtype} \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430", + "button_long_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", + "button_quadruple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430", + "button_quintuple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437", + "button_short_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430", + "button_short_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", + "button_triple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/sl.json b/homeassistant/components/mqtt/translations/sl.json new file mode 100644 index 00000000000..9ca44a36d84 --- /dev/null +++ b/homeassistant/components/mqtt/translations/sl.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dovoljena je samo ena konfiguracija MQTT." + }, + "error": { + "cannot_connect": "Ne morem se povezati na posrednik." + }, + "step": { + "broker": { + "data": { + "broker": "Posrednik", + "discovery": "Omogo\u010di odkrivanje", + "password": "Geslo", + "port": "port", + "username": "Uporabni\u0161ko ime" + }, + "description": "Prosimo vnesite informacije o povezavi va\u0161ega MQTT posrednika.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Omogo\u010di odkrivanje" + }, + "description": "Ali \u017eelite konfigurirati Home Assistant za povezavo s posrednikom MQTT, ki ga ponuja dodatek Hass.io {addon} ?", + "title": "MQTT Broker prek dodatka Hass.io" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "Prvi gumb", + "button_2": "Drugi gumb", + "button_3": "Tretji gumb", + "button_4": "\u010cetrti gumb", + "button_5": "Peti gumb", + "button_6": "\u0160esti gumb", + "turn_off": "Ugasni", + "turn_on": "Pri\u017egi" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" gumb dvakrat kliknjen", + "button_long_press": "\"{subtype}\" gumb neprekinjeno pritisnjen", + "button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", + "button_quadruple_press": "\"{subtype}\" gumb \u0161tirikrat kliknjen", + "button_quintuple_press": "\"{subtype}\" gumb petkrat kliknjen", + "button_short_press": "Pritisnjen \"{subtype}\" gumb", + "button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den", + "button_triple_press": "Gumb \"{subtype}\" trikrat kliknjen" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/sv.json b/homeassistant/components/mqtt/translations/sv.json new file mode 100644 index 00000000000..58855eeb62b --- /dev/null +++ b/homeassistant/components/mqtt/translations/sv.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Endast en enda konfiguration av MQTT \u00e4r till\u00e5ten." + }, + "error": { + "cannot_connect": "Det gick inte att ansluta till broker." + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "Aktivera uppt\u00e4ckt", + "password": "L\u00f6senord", + "port": "Port", + "username": "Anv\u00e4ndarnamn" + }, + "description": "V\u00e4nligen ange anslutningsinformationen f\u00f6r din MQTT broker.", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "Aktivera uppt\u00e4ckt" + }, + "description": "Vill du konfigurera Home Assistant att ansluta till den MQTT-broker som tillhandah\u00e5lls av Hass.io-till\u00e4gget \"{addon}\"?", + "title": "MQTT Broker via Hass.io till\u00e4gg" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/th.json b/homeassistant/components/mqtt/translations/th.json similarity index 100% rename from homeassistant/components/mqtt/.translations/th.json rename to homeassistant/components/mqtt/translations/th.json diff --git a/homeassistant/components/mqtt/.translations/tr.json b/homeassistant/components/mqtt/translations/tr.json similarity index 100% rename from homeassistant/components/mqtt/.translations/tr.json rename to homeassistant/components/mqtt/translations/tr.json diff --git a/homeassistant/components/mqtt/.translations/uk.json b/homeassistant/components/mqtt/translations/uk.json similarity index 100% rename from homeassistant/components/mqtt/.translations/uk.json rename to homeassistant/components/mqtt/translations/uk.json diff --git a/homeassistant/components/mqtt/translations/zh-Hans.json b/homeassistant/components/mqtt/translations/zh-Hans.json new file mode 100644 index 00000000000..a5da0304c5d --- /dev/null +++ b/homeassistant/components/mqtt/translations/zh-Hans.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u53ea\u5141\u8bb8\u4e00\u4e2a MQTT \u914d\u7f6e\u3002" + }, + "error": { + "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230\u670d\u52a1\u5668\u3002" + }, + "step": { + "broker": { + "data": { + "broker": "\u670d\u52a1\u5668", + "discovery": "\u542f\u7528\u53d1\u73b0", + "password": "\u5bc6\u7801", + "port": "\u7aef\u53e3", + "username": "\u7528\u6237\u540d" + }, + "description": "\u8bf7\u8f93\u5165\u60a8\u7684 MQTT \u670d\u52a1\u5668\u7684\u8fde\u63a5\u4fe1\u606f\u3002", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "\u542f\u7528\u53d1\u73b0" + }, + "description": "\u662f\u5426\u8981\u914d\u7f6e Home Assistant \u8fde\u63a5\u5230 Hass.io \u52a0\u8f7d\u9879 {addon} \u63d0\u4f9b\u7684 MQTT \u670d\u52a1\u5668\uff1f", + "title": "\u6765\u81ea Hass.io \u52a0\u8f7d\u9879\u7684 MQTT \u670d\u52a1\u5668" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u7b2c\u4e00\u4e2a\u6309\u94ae", + "button_2": "\u7b2c\u4e8c\u4e2a\u6309\u94ae", + "button_3": "\u7b2c\u4e09\u4e2a\u6309\u94ae", + "button_4": "\u7b2c\u56db\u4e2a\u6309\u94ae", + "button_5": "\u7b2c\u4e94\u4e2a\u6309\u94ae", + "button_6": "\u7b2c\u516d\u4e2a\u6309\u94ae", + "turn_off": "\u5173\u95ed", + "turn_on": "\u6253\u5f00" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" \u53cc\u51fb", + "button_long_press": "\"{subtype}\" \u6301\u7eed\u6309\u4e0b", + "button_long_release": "\"{subtype}\" \u957f\u6309\u540e\u91ca\u653e", + "button_quadruple_press": "\"{subtype}\" \u56db\u8fde\u51fb", + "button_quintuple_press": "\"{subtype}\" \u4e94\u8fde\u51fb", + "button_short_press": "\"{subtype}\" \u6309\u4e0b", + "button_short_release": "\"{subtype}\" \u91ca\u653e", + "button_triple_press": "\"{subtype}\" \u4e09\u8fde\u51fb" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/zh-Hant.json b/homeassistant/components/mqtt/translations/zh-Hant.json new file mode 100644 index 00000000000..9b24b09b10e --- /dev/null +++ b/homeassistant/components/mqtt/translations/zh-Hant.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 MQTT\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Broker\u3002" + }, + "step": { + "broker": { + "data": { + "broker": "Broker", + "discovery": "\u958b\u555f\u641c\u5c0b", + "password": "\u4f7f\u7528\u8005\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u8acb\u8f38\u5165 MQTT Broker \u9023\u7dda\u8cc7\u8a0a\u3002", + "title": "MQTT" + }, + "hassio_confirm": { + "data": { + "discovery": "\u958b\u555f\u641c\u5c0b" + }, + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Home Assistant \u4ee5\u9023\u7dda\u81f3 Hass.io \u9644\u52a0\u6574\u5408 {addon} \u4e4b MQTT broker\uff1f", + "title": "\u4f7f\u7528 Hass.io \u9644\u52a0\u7d44\u4ef6 MQTT Broker" + } + } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", + "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", + "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", + "button_4": "\u7b2c\u56db\u500b\u6309\u9215", + "button_5": "\u7b2c\u4e94\u500b\u6309\u9215", + "button_6": "\u7b2c\u516d\u500b\u6309\u9215", + "turn_off": "\u95dc\u9589", + "turn_on": "\u958b\u555f" + }, + "trigger_type": { + "button_double_press": "\"{subtype}\" \u96d9\u64ca", + "button_long_press": "\"{subtype}\" \u6301\u7e8c\u6309\u4e0b", + "button_long_release": "\"{subtype}\" \u9577\u6309\u5f8c\u91cb\u653e", + "button_quadruple_press": "\"{subtype}\" \u56db\u9023\u64ca", + "button_quintuple_press": "\"{subtype}\" \u4e94\u9023\u64ca", + "button_short_press": "\"{subtype}\" \u6309\u4e0b", + "button_short_release": "\"{subtype}\" \u91cb\u653e", + "button_triple_press": "\"{subtype}\" \u4e09\u9023\u64ca" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/vacuum/schema_legacy.py b/homeassistant/components/mqtt/vacuum/schema_legacy.py index 7679b97d62e..85851bcf696 100644 --- a/homeassistant/components/mqtt/vacuum/schema_legacy.py +++ b/homeassistant/components/mqtt/vacuum/schema_legacy.py @@ -32,6 +32,7 @@ from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.icon import icon_for_battery_level +from ..debug_info import log_messages from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services _LOGGER = logging.getLogger(__name__) @@ -280,6 +281,7 @@ class MqttVacuum( tpl.hass = self.hass @callback + @log_messages(self.hass, self.entity_id) def message_received(msg): """Handle new MQTT message.""" if ( @@ -408,24 +410,26 @@ class MqttVacuum( @property def fan_speed_list(self): - """Return the status of the vacuum.""" - if self.supported_features & SUPPORT_FAN_SPEED == 0: - return [] + """Return the status of the vacuum. + + No need to check SUPPORT_FAN_SPEED, this won't be called if fan_speed is None. + """ return self._fan_speed_list @property def battery_level(self): """Return the status of the vacuum.""" if self.supported_features & SUPPORT_BATTERY == 0: - return + return None return max(0, min(100, self._battery_level)) @property def battery_icon(self): - """Return the battery icon for the vacuum cleaner.""" - if self.supported_features & SUPPORT_BATTERY == 0: - return + """Return the battery icon for the vacuum cleaner. + + No need to check SUPPORT_BATTERY, this won't be called if battery_level is None. + """ return icon_for_battery_level( battery_level=self.battery_level, charging=self._charging diff --git a/homeassistant/components/mqtt/vacuum/schema_state.py b/homeassistant/components/mqtt/vacuum/schema_state.py index 126a2432cb0..a59beae1d34 100644 --- a/homeassistant/components/mqtt/vacuum/schema_state.py +++ b/homeassistant/components/mqtt/vacuum/schema_state.py @@ -36,15 +36,11 @@ from homeassistant.components.vacuum import ( SUPPORT_STOP, StateVacuumDevice, ) -from homeassistant.const import ( - ATTR_SUPPORTED_FEATURES, - CONF_DEVICE, - CONF_NAME, - CONF_VALUE_TEMPLATE, -) +from homeassistant.const import ATTR_SUPPORTED_FEATURES, CONF_DEVICE, CONF_NAME from homeassistant.core import callback import homeassistant.helpers.config_validation as cv +from ..debug_info import log_messages from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services _LOGGER = logging.getLogger(__name__) @@ -103,7 +99,6 @@ CONF_PAYLOAD_CLEAN_SPOT = "payload_clean_spot" CONF_PAYLOAD_LOCATE = "payload_locate" CONF_PAYLOAD_START = "payload_start" CONF_PAYLOAD_PAUSE = "payload_pause" -CONF_STATE_TEMPLATE = "state_template" CONF_SET_FAN_SPEED_TOPIC = "set_fan_speed_topic" CONF_FAN_SPEED_LIST = "fan_speed_list" CONF_SEND_COMMAND_TOPIC = "send_command_topic" @@ -140,7 +135,6 @@ PLATFORM_SCHEMA_STATE = ( vol.Optional(CONF_PAYLOAD_STOP, default=DEFAULT_PAYLOAD_STOP): cv.string, vol.Optional(CONF_SEND_COMMAND_TOPIC): mqtt.valid_publish_topic, vol.Optional(CONF_SET_FAN_SPEED_TOPIC): mqtt.valid_publish_topic, - vol.Optional(CONF_VALUE_TEMPLATE): cv.template, vol.Optional(CONF_STATE_TOPIC): mqtt.valid_publish_topic, vol.Optional( CONF_SUPPORTED_FEATURES, default=DEFAULT_SERVICE_STRINGS @@ -240,19 +234,13 @@ class MqttStateVacuum( async def _subscribe_topics(self): """(Re)Subscribe to topics.""" - template = self._config.get(CONF_VALUE_TEMPLATE) - if template is not None: - template.hass = self.hass topics = {} @callback + @log_messages(self.hass, self.entity_id) def state_message_received(msg): """Handle state MQTT message.""" - payload = msg.payload - if template is not None: - payload = template.async_render_with_possible_json_value(payload) - else: - payload = json.loads(payload) + payload = json.loads(msg.payload) if STATE in payload and payload[STATE] in POSSIBLE_STATES: self._state = POSSIBLE_STATES[payload[STATE]] del payload[STATE] @@ -294,9 +282,10 @@ class MqttStateVacuum( @property def fan_speed_list(self): - """Return fan speed list of the vacuum.""" - if self.supported_features & SUPPORT_FAN_SPEED == 0: - return None + """Return fan speed list of the vacuum. + + No need to check SUPPORT_FAN_SPEED, this won't be called if fan_speed is None. + """ return self._fan_speed_list @property diff --git a/homeassistant/components/mqtt_eventstream/manifest.json b/homeassistant/components/mqtt_eventstream/manifest.json index 228269babe9..87eb6bee31e 100644 --- a/homeassistant/components/mqtt_eventstream/manifest.json +++ b/homeassistant/components/mqtt_eventstream/manifest.json @@ -2,7 +2,6 @@ "domain": "mqtt_eventstream", "name": "MQTT Eventstream", "documentation": "https://www.home-assistant.io/integrations/mqtt_eventstream", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/mqtt_json/manifest.json b/homeassistant/components/mqtt_json/manifest.json index 7f3e2165085..353ca20d5d7 100644 --- a/homeassistant/components/mqtt_json/manifest.json +++ b/homeassistant/components/mqtt_json/manifest.json @@ -2,7 +2,6 @@ "domain": "mqtt_json", "name": "MQTT JSON", "documentation": "https://www.home-assistant.io/integrations/mqtt_json", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/mqtt_room/manifest.json b/homeassistant/components/mqtt_room/manifest.json index c3cd7de3a06..814435ea835 100644 --- a/homeassistant/components/mqtt_room/manifest.json +++ b/homeassistant/components/mqtt_room/manifest.json @@ -2,7 +2,6 @@ "domain": "mqtt_room", "name": "MQTT Room Presence", "documentation": "https://www.home-assistant.io/integrations/mqtt_room", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/mqtt_room/sensor.py b/homeassistant/components/mqtt_room/sensor.py index 580ffd606f3..0d07133b396 100644 --- a/homeassistant/components/mqtt_room/sensor.py +++ b/homeassistant/components/mqtt_room/sensor.py @@ -92,7 +92,7 @@ class MQTTRoomSensor(Entity): self._distance = distance self._updated = dt.utcnow() - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def message_received(msg): diff --git a/homeassistant/components/mqtt_statestream/__init__.py b/homeassistant/components/mqtt_statestream/__init__.py index e35f2653283..8e63bffe568 100644 --- a/homeassistant/components/mqtt_statestream/__init__.py +++ b/homeassistant/components/mqtt_statestream/__init__.py @@ -68,7 +68,7 @@ async def async_setup(hass, config): pub_exclude.get(CONF_ENTITIES, []), ) if not base_topic.endswith("/"): - base_topic = base_topic + "/" + base_topic = f"{base_topic}/" @callback def _state_publisher(entity_id, old_state, new_state): @@ -80,17 +80,17 @@ async def async_setup(hass, config): payload = new_state.state - mybase = base_topic + entity_id.replace(".", "/") + "/" - hass.components.mqtt.async_publish(mybase + "state", payload, 1, True) + mybase = f"{base_topic}{entity_id.replace('.', '/')}/" + hass.components.mqtt.async_publish(f"{mybase}state", payload, 1, True) if publish_timestamps: if new_state.last_updated: hass.components.mqtt.async_publish( - mybase + "last_updated", new_state.last_updated.isoformat(), 1, True + f"{mybase}last_updated", new_state.last_updated.isoformat(), 1, True ) if new_state.last_changed: hass.components.mqtt.async_publish( - mybase + "last_changed", new_state.last_changed.isoformat(), 1, True + f"{mybase}last_changed", new_state.last_changed.isoformat(), 1, True ) if publish_attributes: diff --git a/homeassistant/components/mqtt_statestream/manifest.json b/homeassistant/components/mqtt_statestream/manifest.json index fdf85d21fa5..eb8556d8d9f 100644 --- a/homeassistant/components/mqtt_statestream/manifest.json +++ b/homeassistant/components/mqtt_statestream/manifest.json @@ -2,7 +2,6 @@ "domain": "mqtt_statestream", "name": "MQTT Statestream", "documentation": "https://www.home-assistant.io/integrations/mqtt_statestream", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/msteams/manifest.json b/homeassistant/components/msteams/manifest.json index f907cf570bb..184e50915a5 100644 --- a/homeassistant/components/msteams/manifest.json +++ b/homeassistant/components/msteams/manifest.json @@ -3,6 +3,5 @@ "name": "Microsoft Teams", "documentation": "https://www.home-assistant.io/integrations/msteams", "requirements": ["pymsteams==0.1.12"], - "dependencies": [], "codeowners": ["@peroyvind"] } diff --git a/homeassistant/components/mvglive/manifest.json b/homeassistant/components/mvglive/manifest.json index 3df5234f963..e676cb0438c 100644 --- a/homeassistant/components/mvglive/manifest.json +++ b/homeassistant/components/mvglive/manifest.json @@ -3,6 +3,5 @@ "name": "MVG", "documentation": "https://www.home-assistant.io/integrations/mvglive", "requirements": ["PyMVGLive==1.1.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/mychevy/__init__.py b/homeassistant/components/mychevy/__init__.py index 0ec4d05a623..2b8bd65dfe8 100644 --- a/homeassistant/components/mychevy/__init__.py +++ b/homeassistant/components/mychevy/__init__.py @@ -13,7 +13,7 @@ from homeassistant.util import Throttle DOMAIN = "mychevy" UPDATE_TOPIC = DOMAIN -ERROR_TOPIC = DOMAIN + "_error" +ERROR_TOPIC = f"{DOMAIN}_error" MYCHEVY_SUCCESS = "success" MYCHEVY_ERROR = "error" diff --git a/homeassistant/components/mychevy/binary_sensor.py b/homeassistant/components/mychevy/binary_sensor.py index e5b0dc8b6ea..702f3146f8e 100644 --- a/homeassistant/components/mychevy/binary_sensor.py +++ b/homeassistant/components/mychevy/binary_sensor.py @@ -64,8 +64,10 @@ class EVBinarySensor(BinarySensorDevice): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - UPDATE_TOPIC, self.async_update_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + UPDATE_TOPIC, self.async_update_callback + ) ) @callback @@ -73,7 +75,7 @@ class EVBinarySensor(BinarySensorDevice): """Update state.""" if self._car is not None: self._is_on = getattr(self._car, self._attr, None) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def should_poll(self): diff --git a/homeassistant/components/mychevy/manifest.json b/homeassistant/components/mychevy/manifest.json index 93382974005..c98fd0100d2 100644 --- a/homeassistant/components/mychevy/manifest.json +++ b/homeassistant/components/mychevy/manifest.json @@ -2,7 +2,6 @@ "domain": "mychevy", "name": "myChevrolet", "documentation": "https://www.home-assistant.io/integrations/mychevy", - "requirements": ["mychevy==1.2.0"], - "dependencies": [], + "requirements": ["mychevy==2.0.1"], "codeowners": [] } diff --git a/homeassistant/components/mychevy/sensor.py b/homeassistant/components/mychevy/sensor.py index f45c81a0007..96e0eef68ad 100644 --- a/homeassistant/components/mychevy/sensor.py +++ b/homeassistant/components/mychevy/sensor.py @@ -58,11 +58,17 @@ class MyChevyStatus(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - UPDATE_TOPIC, self.success + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + UPDATE_TOPIC, self.success + ) ) - self.hass.helpers.dispatcher.async_dispatcher_connect(ERROR_TOPIC, self.error) + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + ERROR_TOPIC, self.error + ) + ) @callback def success(self): @@ -70,7 +76,7 @@ class MyChevyStatus(Entity): if self._state != MYCHEVY_SUCCESS: _LOGGER.debug("Successfully connected to mychevy website") self._state = MYCHEVY_SUCCESS - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def error(self): @@ -80,7 +86,7 @@ class MyChevyStatus(Entity): "This probably means the mychevy to OnStar link is down" ) self._state = MYCHEVY_ERROR - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def icon(self): @@ -156,7 +162,7 @@ class EVSensor(Entity): self._state = getattr(self._car, self._attr, None) for attr in self._extra_attrs: self._state_attributes[attr] = getattr(self._car, attr) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def state(self): diff --git a/homeassistant/components/mycroft/manifest.json b/homeassistant/components/mycroft/manifest.json index 5b9dfad5d37..33fafacaa88 100644 --- a/homeassistant/components/mycroft/manifest.json +++ b/homeassistant/components/mycroft/manifest.json @@ -3,6 +3,5 @@ "name": "Mycroft", "documentation": "https://www.home-assistant.io/integrations/mycroft", "requirements": ["mycroftapi==2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/myq/.translations/ca.json b/homeassistant/components/myq/.translations/ca.json deleted file mode 100644 index ea8fd9c10de..00000000000 --- a/homeassistant/components/myq/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "title": "Connexi\u00f3 amb la passarel\u00b7la de MyQ" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/de.json b/homeassistant/components/myq/.translations/de.json deleted file mode 100644 index a345c05311c..00000000000 --- a/homeassistant/components/myq/.translations/de.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername" - }, - "title": "Stellen Sie eine Verbindung zum MyQ Gateway her" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/en.json b/homeassistant/components/myq/.translations/en.json deleted file mode 100644 index c367873cbc9..00000000000 --- a/homeassistant/components/myq/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username" - }, - "title": "Connect to the MyQ Gateway" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/es.json b/homeassistant/components/myq/.translations/es.json deleted file mode 100644 index 41db9de34a6..00000000000 --- a/homeassistant/components/myq/.translations/es.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario" - }, - "title": "Conectar con el Gateway " - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/fr.json b/homeassistant/components/myq/.translations/fr.json deleted file mode 100644 index eacf5fc445a..00000000000 --- a/homeassistant/components/myq/.translations/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification invalide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "title": "Connectez-vous \u00e0 la passerelle MyQ" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/it.json b/homeassistant/components/myq/.translations/it.json deleted file mode 100644 index 4f495e670f1..00000000000 --- a/homeassistant/components/myq/.translations/it.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome utente" - }, - "title": "Connettersi al gateway MyQ" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/ko.json b/homeassistant/components/myq/.translations/ko.json deleted file mode 100644 index db4ecc9ee4f..00000000000 --- a/homeassistant/components/myq/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ \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", - "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": "MyQ \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/lb.json b/homeassistant/components/myq/.translations/lb.json deleted file mode 100644 index 8556f60016f..00000000000 --- a/homeassistant/components/myq/.translations/lb.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm" - }, - "title": "Mat NuHeat Router verbannen" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/no.json b/homeassistant/components/myq/.translations/no.json deleted file mode 100644 index 4d3ed384d75..00000000000 --- a/homeassistant/components/myq/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn" - }, - "title": "Koble til MyQ Gateway" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/ru.json b/homeassistant/components/myq/.translations/ru.json deleted file mode 100644 index ec89856496c..00000000000 --- a/homeassistant/components/myq/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "MyQ" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/zh-Hant.json b/homeassistant/components/myq/.translations/zh-Hant.json deleted file mode 100644 index b7560ed40ce..00000000000 --- a/homeassistant/components/myq/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "MyQ \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "title": "\u9023\u7dda\u81f3 MyQ \u8def\u7531\u5668" - } - }, - "title": "MyQ" - } -} \ No newline at end of file diff --git a/homeassistant/components/myq/binary_sensor.py b/homeassistant/components/myq/binary_sensor.py index 7ce303e5d19..a54b8e50ece 100644 --- a/homeassistant/components/myq/binary_sensor.py +++ b/homeassistant/components/myq/binary_sensor.py @@ -5,7 +5,6 @@ from homeassistant.components.binary_sensor import ( DEVICE_CLASS_CONNECTIVITY, BinarySensorDevice, ) -from homeassistant.core import callback from .const import ( DOMAIN, @@ -95,14 +94,8 @@ class MyQBinarySensorDevice(BinarySensorDevice): """Return False, updates are controlled via coordinator.""" return False - @callback - def _async_consume_update(self): - self.async_write_ha_state() - async def async_added_to_hass(self): """Subscribe to updates.""" - self._coordinator.async_add_listener(self._async_consume_update) - - async def async_will_remove_from_hass(self): - """Undo subscription.""" - self._coordinator.async_remove_listener(self._async_consume_update) + self.async_on_remove( + self._coordinator.async_add_listener(self.async_write_ha_state) + ) diff --git a/homeassistant/components/myq/cover.py b/homeassistant/components/myq/cover.py index 57308a778a5..04eb49c00a9 100644 --- a/homeassistant/components/myq/cover.py +++ b/homeassistant/components/myq/cover.py @@ -209,10 +209,11 @@ class MyQDevice(CoverDevice): async def async_added_to_hass(self): """Subscribe to updates.""" - self._coordinator.async_add_listener(self._async_consume_update) + self.async_on_remove( + self._coordinator.async_add_listener(self._async_consume_update) + ) async def async_will_remove_from_hass(self): """Undo subscription.""" - self._coordinator.async_remove_listener(self._async_consume_update) if self._scheduled_transition_update: self._scheduled_transition_update() diff --git a/homeassistant/components/myq/manifest.json b/homeassistant/components/myq/manifest.json index afee7d4d77f..940c59c9979 100644 --- a/homeassistant/components/myq/manifest.json +++ b/homeassistant/components/myq/manifest.json @@ -2,15 +2,10 @@ "domain": "myq", "name": "MyQ", "documentation": "https://www.home-assistant.io/integrations/myq", - "requirements": [ - "pymyq==2.0.1" - ], - "dependencies": [], + "requirements": ["pymyq==2.0.1"], "codeowners": ["@bdraco"], "config_flow": true, "homekit": { - "models": [ - "819LMB" - ] + "models": ["819LMB"] } } diff --git a/homeassistant/components/myq/strings.json b/homeassistant/components/myq/strings.json index 2aa0eab328e..a7300b16598 100644 --- a/homeassistant/components/myq/strings.json +++ b/homeassistant/components/myq/strings.json @@ -1,13 +1,9 @@ { "config": { - "title": "MyQ", "step": { "user": { "title": "Connect to the MyQ Gateway", - "data": { - "username": "Username", - "password": "Password" - } + "data": { "username": "Username", "password": "Password" } } }, "error": { @@ -15,8 +11,6 @@ "invalid_auth": "Invalid authentication", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "MyQ is already configured" - } + "abort": { "already_configured": "MyQ is already configured" } } } diff --git a/homeassistant/components/myq/translations/ca.json b/homeassistant/components/myq/translations/ca.json new file mode 100644 index 00000000000..d22f3a39085 --- /dev/null +++ b/homeassistant/components/myq/translations/ca.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "title": "Connexi\u00f3 amb la passarel\u00b7la de MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/.translations/da.json b/homeassistant/components/myq/translations/da.json similarity index 100% rename from homeassistant/components/myq/.translations/da.json rename to homeassistant/components/myq/translations/da.json diff --git a/homeassistant/components/myq/translations/de.json b/homeassistant/components/myq/translations/de.json new file mode 100644 index 00000000000..d5c890e4169 --- /dev/null +++ b/homeassistant/components/myq/translations/de.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "title": "Stellen Sie eine Verbindung zum MyQ Gateway her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/en.json b/homeassistant/components/myq/translations/en.json new file mode 100644 index 00000000000..54392f3e293 --- /dev/null +++ b/homeassistant/components/myq/translations/en.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "title": "Connect to the MyQ Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/es.json b/homeassistant/components/myq/translations/es.json new file mode 100644 index 00000000000..a405883fd3c --- /dev/null +++ b/homeassistant/components/myq/translations/es.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "title": "Conectar con el Gateway " + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/fr.json b/homeassistant/components/myq/translations/fr.json new file mode 100644 index 00000000000..4ae00e7495f --- /dev/null +++ b/homeassistant/components/myq/translations/fr.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification invalide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "title": "Connectez-vous \u00e0 la passerelle MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/it.json b/homeassistant/components/myq/translations/it.json new file mode 100644 index 00000000000..9e0484dd6bb --- /dev/null +++ b/homeassistant/components/myq/translations/it.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "title": "Connettersi al gateway MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/ko.json b/homeassistant/components/myq/translations/ko.json new file mode 100644 index 00000000000..31e3f8646e6 --- /dev/null +++ b/homeassistant/components/myq/translations/ko.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ \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", + "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": "MyQ \uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/lb.json b/homeassistant/components/myq/translations/lb.json new file mode 100644 index 00000000000..9e9ef66d1d6 --- /dev/null +++ b/homeassistant/components/myq/translations/lb.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "title": "Mat NuHeat Router verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/no.json b/homeassistant/components/myq/translations/no.json new file mode 100644 index 00000000000..4db38e2b91f --- /dev/null +++ b/homeassistant/components/myq/translations/no.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "title": "Koble til MyQ Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/pl.json b/homeassistant/components/myq/translations/pl.json new file mode 100644 index 00000000000..74220a6518b --- /dev/null +++ b/homeassistant/components/myq/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105czenie z bramk\u0105 MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/pt.json b/homeassistant/components/myq/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/myq/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/ru.json b/homeassistant/components/myq/translations/ru.json new file mode 100644 index 00000000000..81ec65f0d63 --- /dev/null +++ b/homeassistant/components/myq/translations/ru.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/sl.json b/homeassistant/components/myq/translations/sl.json new file mode 100644 index 00000000000..f39ed488a10 --- /dev/null +++ b/homeassistant/components/myq/translations/sl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ je \u017ee konfiguriran" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "title": "Pove\u017eite se s prehodom MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/zh-Hant.json b/homeassistant/components/myq/translations/zh-Hant.json new file mode 100644 index 00000000000..5ed6e4c2f95 --- /dev/null +++ b/homeassistant/components/myq/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u9023\u7dda\u81f3 MyQ \u8def\u7531\u5668" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mysensors/climate.py b/homeassistant/components/mysensors/climate.py index 4939c0c83e5..b00a0d0d9d5 100644 --- a/homeassistant/components/mysensors/climate.py +++ b/homeassistant/components/mysensors/climate.py @@ -162,7 +162,7 @@ class MySensorsHVAC(mysensors.device.MySensorsEntity, ClimateDevice): if self.gateway.optimistic: # Optimistically assume that device has changed state self._values[value_type] = value - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_fan_mode(self, fan_mode): """Set new target temperature.""" @@ -173,7 +173,7 @@ class MySensorsHVAC(mysensors.device.MySensorsEntity, ClimateDevice): if self.gateway.optimistic: # Optimistically assume that device has changed state self._values[set_req.V_HVAC_SPEED] = fan_mode - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_hvac_mode(self, hvac_mode): """Set new target temperature.""" @@ -187,7 +187,7 @@ class MySensorsHVAC(mysensors.device.MySensorsEntity, ClimateDevice): if self.gateway.optimistic: # Optimistically assume that device has changed state self._values[self.value_type] = hvac_mode - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update the controller with the latest value from a sensor.""" diff --git a/homeassistant/components/mysensors/cover.py b/homeassistant/components/mysensors/cover.py index 6c02e430ba4..b60cf9457a9 100644 --- a/homeassistant/components/mysensors/cover.py +++ b/homeassistant/components/mysensors/cover.py @@ -52,7 +52,7 @@ class MySensorsCover(mysensors.device.MySensorsEntity, CoverDevice): self._values[set_req.V_DIMMER] = 100 else: self._values[set_req.V_LIGHT] = STATE_ON - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_close_cover(self, **kwargs): """Move the cover down.""" @@ -66,7 +66,7 @@ class MySensorsCover(mysensors.device.MySensorsEntity, CoverDevice): self._values[set_req.V_DIMMER] = 0 else: self._values[set_req.V_LIGHT] = STATE_OFF - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_cover_position(self, **kwargs): """Move the cover to a specific position.""" @@ -78,7 +78,7 @@ class MySensorsCover(mysensors.device.MySensorsEntity, CoverDevice): if self.gateway.optimistic: # Optimistically assume that cover has changed state. self._values[set_req.V_DIMMER] = position - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_stop_cover(self, **kwargs): """Stop the device.""" diff --git a/homeassistant/components/mysensors/device.py b/homeassistant/components/mysensors/device.py index e5853fce5ca..9c1c4b54367 100644 --- a/homeassistant/components/mysensors/device.py +++ b/homeassistant/components/mysensors/device.py @@ -137,11 +137,15 @@ class MySensorsEntity(MySensorsDevice, Entity): """Register update callback.""" gateway_id = id(self.gateway) dev_id = gateway_id, self.node_id, self.child_id, self.value_type - async_dispatcher_connect( - self.hass, CHILD_CALLBACK.format(*dev_id), self.async_update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, CHILD_CALLBACK.format(*dev_id), self.async_update_callback + ) ) - async_dispatcher_connect( - self.hass, - NODE_CALLBACK.format(gateway_id, self.node_id), - self.async_update_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + NODE_CALLBACK.format(gateway_id, self.node_id), + self.async_update_callback, + ) ) diff --git a/homeassistant/components/mysensors/light.py b/homeassistant/components/mysensors/light.py index b25cf977d83..1585de4b462 100644 --- a/homeassistant/components/mysensors/light.py +++ b/homeassistant/components/mysensors/light.py @@ -149,7 +149,7 @@ class MySensorsLight(mysensors.device.MySensorsEntity, Light): # optimistically assume that light has changed state self._state = False self._values[value_type] = STATE_OFF - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def _async_update_light(self): @@ -189,7 +189,7 @@ class MySensorsLightDimmer(MySensorsLight): self._turn_on_light() self._turn_on_dimmer(**kwargs) if self.gateway.optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update the controller with the latest value from a sensor.""" @@ -215,7 +215,7 @@ class MySensorsLightRGB(MySensorsLight): self._turn_on_dimmer(**kwargs) self._turn_on_rgb_and_w("%02x%02x%02x", **kwargs) if self.gateway.optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update the controller with the latest value from a sensor.""" @@ -242,4 +242,4 @@ class MySensorsLightRGBW(MySensorsLightRGB): self._turn_on_dimmer(**kwargs) self._turn_on_rgb_and_w("%02x%02x%02x%02x", **kwargs) if self.gateway.optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/mysensors/manifest.json b/homeassistant/components/mysensors/manifest.json index b691bbafee2..afeeb5d57cc 100644 --- a/homeassistant/components/mysensors/manifest.json +++ b/homeassistant/components/mysensors/manifest.json @@ -3,7 +3,6 @@ "name": "MySensors", "documentation": "https://www.home-assistant.io/integrations/mysensors", "requirements": ["pymysensors==0.18.0"], - "dependencies": [], "after_dependencies": ["mqtt"], "codeowners": ["@MartinHjelmare"] } diff --git a/homeassistant/components/mysensors/sensor.py b/homeassistant/components/mysensors/sensor.py index 997728ed495..15876163762 100644 --- a/homeassistant/components/mysensors/sensor.py +++ b/homeassistant/components/mysensors/sensor.py @@ -2,12 +2,17 @@ from homeassistant.components import mysensors from homeassistant.components.sensor import DOMAIN from homeassistant.const import ( + CONDUCTIVITY, + DEGREE, ENERGY_KILO_WATT_HOUR, + FREQUENCY_HERTZ, + LENGTH_METERS, MASS_KILOGRAMS, POWER_WATT, TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE, + VOLT, ) SENSORS = { @@ -21,25 +26,25 @@ SENSORS = { "V_RAINRATE": [None, "mdi:weather-rainy"], "V_WIND": [None, "mdi:weather-windy"], "V_GUST": [None, "mdi:weather-windy"], - "V_DIRECTION": ["°", "mdi:compass"], + "V_DIRECTION": [DEGREE, "mdi:compass"], "V_WEIGHT": [MASS_KILOGRAMS, "mdi:weight-kilogram"], - "V_DISTANCE": ["m", "mdi:ruler"], + "V_DISTANCE": [LENGTH_METERS, "mdi:ruler"], "V_IMPEDANCE": ["ohm", None], "V_WATT": [POWER_WATT, None], "V_KWH": [ENERGY_KILO_WATT_HOUR, None], "V_LIGHT_LEVEL": [UNIT_PERCENTAGE, "mdi:white-balance-sunny"], - "V_FLOW": ["m", "mdi:gauge"], + "V_FLOW": [LENGTH_METERS, "mdi:gauge"], "V_VOLUME": ["m³", None], "V_LEVEL": { "S_SOUND": ["dB", "mdi:volume-high"], - "S_VIBRATION": ["Hz", None], + "S_VIBRATION": [FREQUENCY_HERTZ, None], "S_LIGHT_LEVEL": ["lx", "mdi:white-balance-sunny"], }, - "V_VOLTAGE": ["V", "mdi:flash"], + "V_VOLTAGE": [VOLT, "mdi:flash"], "V_CURRENT": ["A", "mdi:flash-auto"], "V_PH": ["pH", None], "V_ORP": ["mV", None], - "V_EC": ["μS/cm", None], + "V_EC": [CONDUCTIVITY, None], "V_VAR": ["var", None], "V_VA": ["VA", None], } diff --git a/homeassistant/components/mysensors/services.yaml b/homeassistant/components/mysensors/services.yaml index 74a5ff0f183..a93429550cd 100644 --- a/homeassistant/components/mysensors/services.yaml +++ b/homeassistant/components/mysensors/services.yaml @@ -3,7 +3,7 @@ send_ir_code: fields: entity_id: description: Name(s) of entities that should have the IR code set and be turned on. Platform dependent. - example: 'switch.living_room_1_1' + example: "switch.living_room_1_1" V_IR_SEND: description: IR code to send. - example: '0xC284' \ No newline at end of file + example: "0xC284" diff --git a/homeassistant/components/mysensors/switch.py b/homeassistant/components/mysensors/switch.py index ec28649d70f..16bb1ee6deb 100644 --- a/homeassistant/components/mysensors/switch.py +++ b/homeassistant/components/mysensors/switch.py @@ -99,7 +99,7 @@ class MySensorsSwitch(mysensors.device.MySensorsEntity, SwitchDevice): if self.gateway.optimistic: # Optimistically assume that switch has changed state self._values[self.value_type] = STATE_ON - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the switch off.""" @@ -109,7 +109,7 @@ class MySensorsSwitch(mysensors.device.MySensorsEntity, SwitchDevice): if self.gateway.optimistic: # Optimistically assume that switch has changed state self._values[self.value_type] = STATE_OFF - self.async_schedule_update_ha_state() + self.async_write_ha_state() class MySensorsIRSwitch(MySensorsSwitch): @@ -141,7 +141,7 @@ class MySensorsIRSwitch(MySensorsSwitch): # Optimistically assume that switch has changed state self._values[self.value_type] = self._ir_code self._values[set_req.V_LIGHT] = STATE_ON - self.async_schedule_update_ha_state() + self.async_write_ha_state() # Turn off switch after switch was turned on await self.async_turn_off() @@ -154,7 +154,7 @@ class MySensorsIRSwitch(MySensorsSwitch): if self.gateway.optimistic: # Optimistically assume that switch has changed state self._values[set_req.V_LIGHT] = STATE_OFF - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update the controller with the latest value from a sensor.""" diff --git a/homeassistant/components/mystrom/binary_sensor.py b/homeassistant/components/mystrom/binary_sensor.py index 3da77d6d943..c584440874a 100644 --- a/homeassistant/components/mystrom/binary_sensor.py +++ b/homeassistant/components/mystrom/binary_sensor.py @@ -86,4 +86,4 @@ class MyStromBinarySensor(BinarySensorDevice): def async_on_update(self, value): """Receive an update.""" self._state = value - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/mystrom/switch.py b/homeassistant/components/mystrom/switch.py index ca766810a3d..5bfd1e45b81 100644 --- a/homeassistant/components/mystrom/switch.py +++ b/homeassistant/components/mystrom/switch.py @@ -1,6 +1,8 @@ """Support for myStrom switches.""" import logging +from pymystrom.exceptions import MyStromConnectionError +from pymystrom.switch import MyStromPlug import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice @@ -22,14 +24,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Find and return myStrom switch.""" - from pymystrom.switch import MyStromPlug, exceptions - name = config.get(CONF_NAME) host = config.get(CONF_HOST) try: MyStromPlug(host).get_status() - except exceptions.MyStromConnectionError: + except MyStromConnectionError: _LOGGER.error("No route to device: %s", host) raise PlatformNotReady() @@ -41,8 +41,6 @@ class MyStromSwitch(SwitchDevice): def __init__(self, name, resource): """Initialize the myStrom switch.""" - from pymystrom.switch import MyStromPlug - self._name = name self._resource = resource self.data = {} @@ -71,30 +69,24 @@ class MyStromSwitch(SwitchDevice): def turn_on(self, **kwargs): """Turn the switch on.""" - from pymystrom import exceptions - try: self.plug.set_relay_on() - except exceptions.MyStromConnectionError: + except MyStromConnectionError: _LOGGER.error("No route to device: %s", self._resource) def turn_off(self, **kwargs): """Turn the switch off.""" - from pymystrom import exceptions - try: self.plug.set_relay_off() - except exceptions.MyStromConnectionError: + except MyStromConnectionError: _LOGGER.error("No route to device: %s", self._resource) def update(self): """Get the latest data from the device and update the data.""" - from pymystrom import exceptions - try: self.data = self.plug.get_status() self._available = True - except exceptions.MyStromConnectionError: + except MyStromConnectionError: self.data = {"power": 0, "relay": False} self._available = False _LOGGER.error("No route to device: %s", self._resource) diff --git a/homeassistant/components/mythicbeastsdns/manifest.json b/homeassistant/components/mythicbeastsdns/manifest.json index 2df68f084f8..b710cd05c13 100644 --- a/homeassistant/components/mythicbeastsdns/manifest.json +++ b/homeassistant/components/mythicbeastsdns/manifest.json @@ -3,6 +3,5 @@ "name": "Mythic Beasts DNS", "documentation": "https://www.home-assistant.io/integrations/mythicbeastsdns", "requirements": ["mbddns==0.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/n26/manifest.json b/homeassistant/components/n26/manifest.json index ff763b951a4..2dec0e6ba2d 100644 --- a/homeassistant/components/n26/manifest.json +++ b/homeassistant/components/n26/manifest.json @@ -3,6 +3,5 @@ "name": "N26", "documentation": "https://www.home-assistant.io/integrations/n26", "requirements": ["n26==0.2.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/n26/sensor.py b/homeassistant/components/n26/sensor.py index 93f0fae918a..7752efe82ea 100644 --- a/homeassistant/components/n26/sensor.py +++ b/homeassistant/components/n26/sensor.py @@ -71,7 +71,7 @@ class N26Account(Entity): @property def name(self) -> str: """Friendly name of the sensor.""" - return "n26_{}".format(self._iban[-4:]) + return f"n26_{self._iban[-4:]}" @property def state(self) -> float: @@ -110,7 +110,7 @@ class N26Account(Entity): } for limit in self._data.limits: - limit_attr_name = "limit_{}".format(limit["limit"].lower()) + limit_attr_name = f"limit_{limit['limit'].lower()}" attributes[limit_attr_name] = limit["amount"] return attributes @@ -143,7 +143,7 @@ class N26Card(Entity): @property def name(self) -> str: """Friendly name of the sensor.""" - return "{}_card_{}".format(self._account_name.lower(), self._card["id"]) + return f"{self._account_name.lower()}_card_{self._card['id']}" @property def state(self) -> float: @@ -206,9 +206,7 @@ class N26Space(Entity): @property def unique_id(self): """Return the unique ID of the entity.""" - return "space_{}_{}".format( - self._data.balance["iban"][-4:], self._space["name"].lower() - ) + return f"space_{self._data.balance['iban'][-4:]}_{self._space['name'].lower()}" @property def name(self) -> str: diff --git a/homeassistant/components/n26/switch.py b/homeassistant/components/n26/switch.py index 90651cb5a4b..6ec111720f3 100644 --- a/homeassistant/components/n26/switch.py +++ b/homeassistant/components/n26/switch.py @@ -42,7 +42,7 @@ class N26CardSwitch(SwitchDevice): @property def name(self) -> str: """Friendly name of the sensor.""" - return "card_{}".format(self._card["id"]) + return f"card_{self._card['id']}" @property def is_on(self): diff --git a/homeassistant/components/nad/manifest.json b/homeassistant/components/nad/manifest.json index beb4a166f12..97dce35063b 100644 --- a/homeassistant/components/nad/manifest.json +++ b/homeassistant/components/nad/manifest.json @@ -2,7 +2,6 @@ "domain": "nad", "name": "NAD", "documentation": "https://www.home-assistant.io/integrations/nad", - "requirements": ["nad_receiver==0.0.11"], - "dependencies": [], + "requirements": ["nad_receiver==0.0.12"], "codeowners": [] } diff --git a/homeassistant/components/namecheapdns/manifest.json b/homeassistant/components/namecheapdns/manifest.json index f743bfa5f42..9015f2dc847 100644 --- a/homeassistant/components/namecheapdns/manifest.json +++ b/homeassistant/components/namecheapdns/manifest.json @@ -3,6 +3,5 @@ "name": "Namecheap FreeDNS", "documentation": "https://www.home-assistant.io/integrations/namecheapdns", "requirements": ["defusedxml==0.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/nanoleaf/light.py b/homeassistant/components/nanoleaf/light.py index 4b08d0b9751..612e1b6ead9 100644 --- a/homeassistant/components/nanoleaf/light.py +++ b/homeassistant/components/nanoleaf/light.py @@ -57,7 +57,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Nanoleaf light.""" if DATA_NANOLEAF not in hass.data: - hass.data[DATA_NANOLEAF] = dict() + hass.data[DATA_NANOLEAF] = {} token = "" if discovery_info is not None: diff --git a/homeassistant/components/nanoleaf/manifest.json b/homeassistant/components/nanoleaf/manifest.json index 0da755e1663..6d953335a34 100644 --- a/homeassistant/components/nanoleaf/manifest.json +++ b/homeassistant/components/nanoleaf/manifest.json @@ -3,6 +3,5 @@ "name": "Nanoleaf", "documentation": "https://www.home-assistant.io/integrations/nanoleaf", "requirements": ["pynanoleaf==0.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/neato/.translations/bg.json b/homeassistant/components/neato/.translations/bg.json deleted file mode 100644 index 14bc601214e..00000000000 --- a/homeassistant/components/neato/.translations/bg.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0412\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" - }, - "create_entry": { - "default": "\u0412\u0438\u0436\u0442\u0435 [Neato \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f]({docs_url})." - }, - "error": { - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", - "unexpected_error": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", - "vendor": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" - }, - "description": "\u0412\u0438\u0436\u0442\u0435 [Neato \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f]({docs_url}).", - "title": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 Neato \u0430\u043a\u0430\u0443\u043d\u0442" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/ca.json b/homeassistant/components/neato/.translations/ca.json deleted file mode 100644 index d30f9e5ad4b..00000000000 --- a/homeassistant/components/neato/.translations/ca.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ja configurat", - "invalid_credentials": "Credencials inv\u00e0lides" - }, - "create_entry": { - "default": "Consulta la [documentaci\u00f3 de Neato]({docs_url})." - }, - "error": { - "invalid_credentials": "Credencials inv\u00e0lides", - "unexpected_error": "Error inesperat" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari", - "vendor": "Venedor" - }, - "description": "Consulta la [documentaci\u00f3 de Neato]({docs_url}).", - "title": "Informaci\u00f3 del compte Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/da.json b/homeassistant/components/neato/.translations/da.json deleted file mode 100644 index 736234e92da..00000000000 --- a/homeassistant/components/neato/.translations/da.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Allerede konfigureret", - "invalid_credentials": "Ugyldige legitimationsoplysninger" - }, - "create_entry": { - "default": "Se [Neato-dokumentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Ugyldige legitimationsoplysninger", - "unexpected_error": "Uventet fejl" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn", - "vendor": "Udbyder" - }, - "description": "Se [Neato-dokumentation]({docs_url}).", - "title": "Neato-kontooplysninger" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/de.json b/homeassistant/components/neato/.translations/de.json deleted file mode 100644 index 2a75d11a9ec..00000000000 --- a/homeassistant/components/neato/.translations/de.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bereits konfiguriert", - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" - }, - "create_entry": { - "default": "Siehe [Neato-Dokumentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", - "unexpected_error": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername", - "vendor": "Hersteller" - }, - "description": "Siehe [Neato-Dokumentation]({docs_url}).", - "title": "Neato-Kontoinformationen" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/en.json b/homeassistant/components/neato/.translations/en.json deleted file mode 100644 index 73628c8646e..00000000000 --- a/homeassistant/components/neato/.translations/en.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Already configured", - "invalid_credentials": "Invalid credentials" - }, - "create_entry": { - "default": "See [Neato documentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Invalid credentials", - "unexpected_error": "Unexpected error" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username", - "vendor": "Vendor" - }, - "description": "See [Neato documentation]({docs_url}).", - "title": "Neato Account Info" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/es.json b/homeassistant/components/neato/.translations/es.json deleted file mode 100644 index 99e7574e4b2..00000000000 --- a/homeassistant/components/neato/.translations/es.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ya est\u00e1 configurado", - "invalid_credentials": "Credenciales no v\u00e1lidas" - }, - "create_entry": { - "default": "Ver [documentaci\u00f3n Neato]({docs_url})." - }, - "error": { - "invalid_credentials": "Credenciales no v\u00e1lidas", - "unexpected_error": "Error inesperado" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario", - "vendor": "Vendedor" - }, - "description": "Ver [documentaci\u00f3n Neato]({docs_url}).", - "title": "Informaci\u00f3n de la cuenta de Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/fr.json b/homeassistant/components/neato/.translations/fr.json deleted file mode 100644 index 941ed18660e..00000000000 --- a/homeassistant/components/neato/.translations/fr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00e9j\u00e0 configur\u00e9", - "invalid_credentials": "Informations d'identification invalides" - }, - "create_entry": { - "default": "Voir [Documentation Neato]({docs_url})." - }, - "error": { - "invalid_credentials": "Informations d'identification invalides", - "unexpected_error": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur", - "vendor": "Vendeur" - }, - "description": "Voir [Documentation Neato] ( {docs_url} ).", - "title": "Informations compte Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/hu.json b/homeassistant/components/neato/.translations/hu.json deleted file mode 100644 index 50fa4b5866f..00000000000 --- a/homeassistant/components/neato/.translations/hu.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "M\u00e1r konfigur\u00e1lva van", - "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" - }, - "create_entry": { - "default": "L\u00e1sd: [Neato dokument\u00e1ci\u00f3] ( {docs_url} )." - }, - "error": { - "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok", - "unexpected_error": "V\u00e1ratlan hiba" - }, - "step": { - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v", - "vendor": "Sz\u00e1ll\u00edt\u00f3" - }, - "description": "L\u00e1sd: [Neato dokument\u00e1ci\u00f3] ( {docs_url} ).", - "title": "Neato Fi\u00f3kinform\u00e1ci\u00f3" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/it.json b/homeassistant/components/neato/.translations/it.json deleted file mode 100644 index d5615815dc7..00000000000 --- a/homeassistant/components/neato/.translations/it.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Gi\u00e0 configurato", - "invalid_credentials": "Credenziali non valide" - }, - "create_entry": { - "default": "Vedere la [Documentazione di Neato]({docs_url})." - }, - "error": { - "invalid_credentials": "Credenziali non valide", - "unexpected_error": "Errore inaspettato" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome utente", - "vendor": "Fornitore" - }, - "description": "Vedere la [Documentazione di Neato]({docs_url}).", - "title": "Informazioni sull'account Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/ko.json b/homeassistant/components/neato/.translations/ko.json deleted file mode 100644 index 391d0aee191..00000000000 --- a/homeassistant/components/neato/.translations/ko.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "create_entry": { - "default": "[Neato \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "error": { - "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "unexpected_error": "\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", - "vendor": "\uacf5\uae09 \uc5c5\uccb4" - }, - "description": "[Neato \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.", - "title": "Neato \uacc4\uc815 \uc815\ubcf4" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/lb.json b/homeassistant/components/neato/.translations/lb.json deleted file mode 100644 index 3043ec6ec37..00000000000 --- a/homeassistant/components/neato/.translations/lb.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Scho konfigur\u00e9iert", - "invalid_credentials": "Ong\u00eblteg Login Informatioune" - }, - "create_entry": { - "default": "Kuckt [Neato Dokumentatioun]({docs_url})." - }, - "error": { - "invalid_credentials": "Ong\u00eblteg Login Informatioune", - "unexpected_error": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm", - "vendor": "Hiersteller" - }, - "description": "Kuckt [Neato Dokumentatioun]({docs_url}).", - "title": "Neato Kont Informatiounen" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/lv.json b/homeassistant/components/neato/.translations/lv.json deleted file mode 100644 index 26b0bcb7fd2..00000000000 --- a/homeassistant/components/neato/.translations/lv.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "password": "Parole", - "username": "Lietot\u0101jv\u0101rds" - }, - "title": "Neato konta inform\u0101cija" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/nl.json b/homeassistant/components/neato/.translations/nl.json deleted file mode 100644 index 4846f0180f1..00000000000 --- a/homeassistant/components/neato/.translations/nl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Al geconfigureerd", - "invalid_credentials": "Ongeldige gebruikersgegevens" - }, - "create_entry": { - "default": "Zie [Neato-documentatie] ({docs_url})." - }, - "error": { - "invalid_credentials": "Ongeldige inloggegevens", - "unexpected_error": "Onverwachte fout" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam", - "vendor": "Leverancier" - }, - "description": "Zie [Neato-documentatie] ({docs_url}).", - "title": "Neato-account info" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/nn.json b/homeassistant/components/neato/.translations/nn.json deleted file mode 100644 index e04e73aef24..00000000000 --- a/homeassistant/components/neato/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "username": "Brukarnamn" - } - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/no.json b/homeassistant/components/neato/.translations/no.json deleted file mode 100644 index dc17289c0e3..00000000000 --- a/homeassistant/components/neato/.translations/no.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Allerede konfigurert", - "invalid_credentials": "Ugyldig brukerinformasjon" - }, - "create_entry": { - "default": "Se [Neato dokumentasjon]({docs_url})." - }, - "error": { - "invalid_credentials": "Ugyldig brukerinformasjon", - "unexpected_error": "Uventet feil" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn", - "vendor": "Leverand\u00f8r" - }, - "description": "Se [Neato dokumentasjon]({docs_url}).", - "title": "Neato kontoinformasjon" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/pl.json b/homeassistant/components/neato/.translations/pl.json deleted file mode 100644 index e6b55b12c53..00000000000 --- a/homeassistant/components/neato/.translations/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Konto jest ju\u017c skonfigurowane.", - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" - }, - "create_entry": { - "default": "Zapoznaj si\u0119 z [dokumentacj\u0105 Neato]({docs_url})." - }, - "error": { - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce", - "unexpected_error": "Niespodziewany b\u0142\u0105d" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika", - "vendor": "Dostawca" - }, - "description": "Zapoznaj si\u0119 z [dokumentacj\u0105 Neato]({docs_url}).", - "title": "Informacje o koncie Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/pt-BR.json b/homeassistant/components/neato/.translations/pt-BR.json deleted file mode 100644 index 8c4c45f9c89..00000000000 --- a/homeassistant/components/neato/.translations/pt-BR.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/ru.json b/homeassistant/components/neato/.translations/ru.json deleted file mode 100644 index 57989a346fa..00000000000 --- a/homeassistant/components/neato/.translations/ru.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." - }, - "create_entry": { - "default": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438." - }, - "error": { - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "unexpected_error": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d", - "vendor": "\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c" - }, - "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.", - "title": "Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/sl.json b/homeassistant/components/neato/.translations/sl.json deleted file mode 100644 index 7acbb718d17..00000000000 --- a/homeassistant/components/neato/.translations/sl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u017de konfigurirano", - "invalid_credentials": "Neveljavne poverilnice" - }, - "create_entry": { - "default": "Glejte [neato dokumentacija] ({docs_url})." - }, - "error": { - "invalid_credentials": "Neveljavne poverilnice", - "unexpected_error": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime", - "vendor": "Prodajalec" - }, - "description": "Glejte [neato dokumentacija] ({docs_url}).", - "title": "Podatki o ra\u010dunu Neato" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/sv.json b/homeassistant/components/neato/.translations/sv.json deleted file mode 100644 index 64edf9e93ce..00000000000 --- a/homeassistant/components/neato/.translations/sv.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Redan konfigurerad", - "invalid_credentials": "Ogiltiga autentiseringsuppgifter" - }, - "create_entry": { - "default": "Se [Neato-dokumentation]({docs_url})." - }, - "error": { - "invalid_credentials": "Ogiltiga autentiseringsuppgifter", - "unexpected_error": "Ov\u00e4ntat fel" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn", - "vendor": "Leverant\u00f6r" - }, - "description": "Se [Neato-dokumentation] ({docs_url}).", - "title": "Neato-kontoinfo" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/zh-Hant.json b/homeassistant/components/neato/.translations/zh-Hant.json deleted file mode 100644 index 61f49cd5da0..00000000000 --- a/homeassistant/components/neato/.translations/zh-Hant.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u5df2\u8a2d\u5b9a\u5b8c\u6210", - "invalid_credentials": "\u6191\u8b49\u7121\u6548" - }, - "create_entry": { - "default": "\u8acb\u53c3\u95b1 [Neato \u6587\u4ef6]({docs_url})\u3002" - }, - "error": { - "invalid_credentials": "\u6191\u8b49\u7121\u6548", - "unexpected_error": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31", - "vendor": "\u5ee0\u5546" - }, - "description": "\u8acb\u53c3\u95b1 [Neato \u6587\u4ef6]({docs_url})\u3002", - "title": "Neato \u5e33\u865f\u8cc7\u8a0a" - } - }, - "title": "Neato" - } -} \ No newline at end of file diff --git a/homeassistant/components/neato/manifest.json b/homeassistant/components/neato/manifest.json index af44874799b..d36e3fa503f 100644 --- a/homeassistant/components/neato/manifest.json +++ b/homeassistant/components/neato/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/neato", "requirements": ["pybotvac==0.0.17"], - "dependencies": [], "codeowners": ["@dshokouhi", "@Santobert"] } diff --git a/homeassistant/components/neato/services.yaml b/homeassistant/components/neato/services.yaml index b40edabd779..2c5b2bd3181 100644 --- a/homeassistant/components/neato/services.yaml +++ b/homeassistant/components/neato/services.yaml @@ -3,7 +3,7 @@ custom_cleaning: fields: entity_id: description: Name of the vacuum entity. [Required] - example: 'vacuum.neato' + example: "vacuum.neato" mode: description: "Set the cleaning mode: 1 for eco and 2 for turbo. Defaults to turbo if not set." example: 2 @@ -15,4 +15,4 @@ custom_cleaning: example: 2 zone: description: Only supported on the Botvac D7. Name of the zone to clean. Defaults to no zone i.e. complete house cleanup. - example: "Kitchen" \ No newline at end of file + example: "Kitchen" diff --git a/homeassistant/components/neato/strings.json b/homeassistant/components/neato/strings.json index 69cdb48a560..f104a37a93a 100644 --- a/homeassistant/components/neato/strings.json +++ b/homeassistant/components/neato/strings.json @@ -1,27 +1,24 @@ { - "config": { - "title": "Neato", - "step": { - "user": { - "title": "Neato Account Info", - "data": { - "username": "Username", - "password": "Password", - "vendor": "Vendor" - }, - "description": "See [Neato documentation]({docs_url})." - } + "config": { + "step": { + "user": { + "title": "Neato Account Info", + "data": { + "username": "Username", + "password": "Password", + "vendor": "Vendor" }, - "error": { - "invalid_credentials": "Invalid credentials", - "unexpected_error": "Unexpected error" - }, - "create_entry": { - "default": "See [Neato documentation]({docs_url})." - }, - "abort": { - "already_configured": "Already configured", - "invalid_credentials": "Invalid credentials" - } + "description": "See [Neato documentation]({docs_url})." + } + }, + "error": { + "invalid_credentials": "Invalid credentials", + "unexpected_error": "Unexpected error" + }, + "create_entry": { "default": "See [Neato documentation]({docs_url})." }, + "abort": { + "already_configured": "Already configured", + "invalid_credentials": "Invalid credentials" } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/neato/translations/bg.json b/homeassistant/components/neato/translations/bg.json new file mode 100644 index 00000000000..c2ebfb92f94 --- /dev/null +++ b/homeassistant/components/neato/translations/bg.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u0412\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" + }, + "create_entry": { + "default": "\u0412\u0438\u0436\u0442\u0435 [Neato \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f]({docs_url})." + }, + "error": { + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", + "unexpected_error": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", + "vendor": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" + }, + "description": "\u0412\u0438\u0436\u0442\u0435 [Neato \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f]({docs_url}).", + "title": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 Neato \u0430\u043a\u0430\u0443\u043d\u0442" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/ca.json b/homeassistant/components/neato/translations/ca.json new file mode 100644 index 00000000000..d1cfe9f7a91 --- /dev/null +++ b/homeassistant/components/neato/translations/ca.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ja configurat", + "invalid_credentials": "Credencials inv\u00e0lides" + }, + "create_entry": { + "default": "Consulta la [documentaci\u00f3 de Neato]({docs_url})." + }, + "error": { + "invalid_credentials": "Credencials inv\u00e0lides", + "unexpected_error": "Error inesperat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari", + "vendor": "Venedor" + }, + "description": "Consulta la [documentaci\u00f3 de Neato]({docs_url}).", + "title": "Informaci\u00f3 del compte Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/.translations/cs.json b/homeassistant/components/neato/translations/cs.json similarity index 100% rename from homeassistant/components/neato/.translations/cs.json rename to homeassistant/components/neato/translations/cs.json diff --git a/homeassistant/components/neato/translations/da.json b/homeassistant/components/neato/translations/da.json new file mode 100644 index 00000000000..33b3200927b --- /dev/null +++ b/homeassistant/components/neato/translations/da.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Allerede konfigureret", + "invalid_credentials": "Ugyldige legitimationsoplysninger" + }, + "create_entry": { + "default": "Se [Neato-dokumentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Ugyldige legitimationsoplysninger", + "unexpected_error": "Uventet fejl" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn", + "vendor": "Udbyder" + }, + "description": "Se [Neato-dokumentation]({docs_url}).", + "title": "Neato-kontooplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/de.json b/homeassistant/components/neato/translations/de.json new file mode 100644 index 00000000000..7316275f37b --- /dev/null +++ b/homeassistant/components/neato/translations/de.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Bereits konfiguriert", + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" + }, + "create_entry": { + "default": "Siehe [Neato-Dokumentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", + "unexpected_error": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername", + "vendor": "Hersteller" + }, + "description": "Siehe [Neato-Dokumentation]({docs_url}).", + "title": "Neato-Kontoinformationen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/en.json b/homeassistant/components/neato/translations/en.json new file mode 100644 index 00000000000..d41faddcc66 --- /dev/null +++ b/homeassistant/components/neato/translations/en.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Already configured", + "invalid_credentials": "Invalid credentials" + }, + "create_entry": { + "default": "See [Neato documentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Invalid credentials", + "unexpected_error": "Unexpected error" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username", + "vendor": "Vendor" + }, + "description": "See [Neato documentation]({docs_url}).", + "title": "Neato Account Info" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/es.json b/homeassistant/components/neato/translations/es.json new file mode 100644 index 00000000000..766f05d31bf --- /dev/null +++ b/homeassistant/components/neato/translations/es.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ya est\u00e1 configurado", + "invalid_credentials": "Credenciales no v\u00e1lidas" + }, + "create_entry": { + "default": "Ver [documentaci\u00f3n Neato]({docs_url})." + }, + "error": { + "invalid_credentials": "Credenciales no v\u00e1lidas", + "unexpected_error": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario", + "vendor": "Vendedor" + }, + "description": "Ver [documentaci\u00f3n Neato]({docs_url}).", + "title": "Informaci\u00f3n de la cuenta de Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/fr.json b/homeassistant/components/neato/translations/fr.json new file mode 100644 index 00000000000..66f1bb52804 --- /dev/null +++ b/homeassistant/components/neato/translations/fr.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00e9j\u00e0 configur\u00e9", + "invalid_credentials": "Informations d'identification invalides" + }, + "create_entry": { + "default": "Voir [Documentation Neato]({docs_url})." + }, + "error": { + "invalid_credentials": "Informations d'identification invalides", + "unexpected_error": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur", + "vendor": "Vendeur" + }, + "description": "Voir [Documentation Neato] ( {docs_url} ).", + "title": "Informations compte Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/hu.json b/homeassistant/components/neato/translations/hu.json new file mode 100644 index 00000000000..329776ed228 --- /dev/null +++ b/homeassistant/components/neato/translations/hu.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "M\u00e1r konfigur\u00e1lva van", + "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" + }, + "create_entry": { + "default": "L\u00e1sd: [Neato dokument\u00e1ci\u00f3] ( {docs_url} )." + }, + "error": { + "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok", + "unexpected_error": "V\u00e1ratlan hiba" + }, + "step": { + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v", + "vendor": "Sz\u00e1ll\u00edt\u00f3" + }, + "description": "L\u00e1sd: [Neato dokument\u00e1ci\u00f3] ( {docs_url} ).", + "title": "Neato Fi\u00f3kinform\u00e1ci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/it.json b/homeassistant/components/neato/translations/it.json new file mode 100644 index 00000000000..a456a2688e0 --- /dev/null +++ b/homeassistant/components/neato/translations/it.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Gi\u00e0 configurato", + "invalid_credentials": "Credenziali non valide" + }, + "create_entry": { + "default": "Vedere la [Documentazione di Neato]({docs_url})." + }, + "error": { + "invalid_credentials": "Credenziali non valide", + "unexpected_error": "Errore inaspettato" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente", + "vendor": "Fornitore" + }, + "description": "Vedere la [Documentazione di Neato]({docs_url}).", + "title": "Informazioni sull'account Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/ko.json b/homeassistant/components/neato/translations/ko.json new file mode 100644 index 00000000000..806bf54d35d --- /dev/null +++ b/homeassistant/components/neato/translations/ko.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "create_entry": { + "default": "[Neato \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "error": { + "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unexpected_error": "\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", + "vendor": "\uacf5\uae09 \uc5c5\uccb4" + }, + "description": "[Neato \uc124\uba85\uc11c]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.", + "title": "Neato \uacc4\uc815 \uc815\ubcf4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/lb.json b/homeassistant/components/neato/translations/lb.json new file mode 100644 index 00000000000..a62009f19b0 --- /dev/null +++ b/homeassistant/components/neato/translations/lb.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Scho konfigur\u00e9iert", + "invalid_credentials": "Ong\u00eblteg Login Informatioune" + }, + "create_entry": { + "default": "Kuckt [Neato Dokumentatioun]({docs_url})." + }, + "error": { + "invalid_credentials": "Ong\u00eblteg Login Informatioune", + "unexpected_error": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm", + "vendor": "Hiersteller" + }, + "description": "Kuckt [Neato Dokumentatioun]({docs_url}).", + "title": "Neato Kont Informatiounen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/lv.json b/homeassistant/components/neato/translations/lv.json new file mode 100644 index 00000000000..6ada7a17452 --- /dev/null +++ b/homeassistant/components/neato/translations/lv.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Parole", + "username": "Lietot\u0101jv\u0101rds" + }, + "title": "Neato konta inform\u0101cija" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/nl.json b/homeassistant/components/neato/translations/nl.json new file mode 100644 index 00000000000..5e828a82668 --- /dev/null +++ b/homeassistant/components/neato/translations/nl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Al geconfigureerd", + "invalid_credentials": "Ongeldige gebruikersgegevens" + }, + "create_entry": { + "default": "Zie [Neato-documentatie] ({docs_url})." + }, + "error": { + "invalid_credentials": "Ongeldige inloggegevens", + "unexpected_error": "Onverwachte fout" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam", + "vendor": "Leverancier" + }, + "description": "Zie [Neato-documentatie] ({docs_url}).", + "title": "Neato-account info" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/nn.json b/homeassistant/components/neato/translations/nn.json new file mode 100644 index 00000000000..7c129cba3af --- /dev/null +++ b/homeassistant/components/neato/translations/nn.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "username": "Brukarnamn" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/no.json b/homeassistant/components/neato/translations/no.json new file mode 100644 index 00000000000..63ce9b7bec0 --- /dev/null +++ b/homeassistant/components/neato/translations/no.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Allerede konfigurert", + "invalid_credentials": "Ugyldig brukerinformasjon" + }, + "create_entry": { + "default": "Se [Neato dokumentasjon]({docs_url})." + }, + "error": { + "invalid_credentials": "Ugyldig brukerinformasjon", + "unexpected_error": "Uventet feil" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn", + "vendor": "Leverand\u00f8r" + }, + "description": "Se [Neato dokumentasjon]({docs_url}).", + "title": "Neato kontoinformasjon" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/pl.json b/homeassistant/components/neato/translations/pl.json new file mode 100644 index 00000000000..a040c880e33 --- /dev/null +++ b/homeassistant/components/neato/translations/pl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Konto jest ju\u017c skonfigurowane.", + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" + }, + "create_entry": { + "default": "Zapoznaj si\u0119 z [dokumentacj\u0105 Neato]({docs_url})." + }, + "error": { + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce", + "unexpected_error": "Niespodziewany b\u0142\u0105d" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika", + "vendor": "Dostawca" + }, + "description": "Zapoznaj si\u0119 z [dokumentacj\u0105 Neato]({docs_url}).", + "title": "Informacje o koncie Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/pt-BR.json b/homeassistant/components/neato/translations/pt-BR.json new file mode 100644 index 00000000000..d8a4c453015 --- /dev/null +++ b/homeassistant/components/neato/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/pt.json b/homeassistant/components/neato/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/neato/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/neato/translations/ru.json b/homeassistant/components/neato/translations/ru.json new file mode 100644 index 00000000000..92935906a86 --- /dev/null +++ b/homeassistant/components/neato/translations/ru.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." + }, + "create_entry": { + "default": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438." + }, + "error": { + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "unexpected_error": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d", + "vendor": "\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c" + }, + "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.", + "title": "Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/sl.json b/homeassistant/components/neato/translations/sl.json new file mode 100644 index 00000000000..ed20b5a904e --- /dev/null +++ b/homeassistant/components/neato/translations/sl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u017de konfigurirano", + "invalid_credentials": "Neveljavne poverilnice" + }, + "create_entry": { + "default": "Glejte [neato dokumentacija] ({docs_url})." + }, + "error": { + "invalid_credentials": "Neveljavne poverilnice", + "unexpected_error": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime", + "vendor": "Prodajalec" + }, + "description": "Glejte [neato dokumentacija] ({docs_url}).", + "title": "Podatki o ra\u010dunu Neato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/sv.json b/homeassistant/components/neato/translations/sv.json new file mode 100644 index 00000000000..eb0fa0ec6c8 --- /dev/null +++ b/homeassistant/components/neato/translations/sv.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Redan konfigurerad", + "invalid_credentials": "Ogiltiga autentiseringsuppgifter" + }, + "create_entry": { + "default": "Se [Neato-dokumentation]({docs_url})." + }, + "error": { + "invalid_credentials": "Ogiltiga autentiseringsuppgifter", + "unexpected_error": "Ov\u00e4ntat fel" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn", + "vendor": "Leverant\u00f6r" + }, + "description": "Se [Neato-dokumentation] ({docs_url}).", + "title": "Neato-kontoinfo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/translations/zh-Hant.json b/homeassistant/components/neato/translations/zh-Hant.json new file mode 100644 index 00000000000..8d8fe629030 --- /dev/null +++ b/homeassistant/components/neato/translations/zh-Hant.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u5df2\u8a2d\u5b9a\u5b8c\u6210", + "invalid_credentials": "\u6191\u8b49\u7121\u6548" + }, + "create_entry": { + "default": "\u8acb\u53c3\u95b1 [Neato \u6587\u4ef6]({docs_url})\u3002" + }, + "error": { + "invalid_credentials": "\u6191\u8b49\u7121\u6548", + "unexpected_error": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31", + "vendor": "\u5ee0\u5546" + }, + "description": "\u8acb\u53c3\u95b1 [Neato \u6587\u4ef6]({docs_url})\u3002", + "title": "Neato \u5e33\u865f\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/neato/vacuum.py b/homeassistant/components/neato/vacuum.py index adff293301b..391fcecf373 100644 --- a/homeassistant/components/neato/vacuum.py +++ b/homeassistant/components/neato/vacuum.py @@ -199,16 +199,15 @@ class NeatoConnectedVacuum(StateVacuumDevice): if robot_alert is None: self._clean_state = STATE_CLEANING self._status_state = ( - MODE.get(self._state["cleaning"]["mode"]) - + " " - + ACTION.get(self._state["action"]) + f"{MODE.get(self._state['cleaning']['mode'])} " + f"{ACTION.get(self._state['action'])}" ) if ( "boundary" in self._state["cleaning"] and "name" in self._state["cleaning"]["boundary"] ): self._status_state += ( - " " + self._state["cleaning"]["boundary"]["name"] + f" {self._state['cleaning']['boundary']['name']}" ) else: self._status_state = robot_alert diff --git a/homeassistant/components/nederlandse_spoorwegen/manifest.json b/homeassistant/components/nederlandse_spoorwegen/manifest.json index c6025abe0b5..10291802fed 100644 --- a/homeassistant/components/nederlandse_spoorwegen/manifest.json +++ b/homeassistant/components/nederlandse_spoorwegen/manifest.json @@ -3,6 +3,5 @@ "name": "Nederlandse Spoorwegen (NS)", "documentation": "https://www.home-assistant.io/integrations/nederlandse_spoorwegen", "requirements": ["nsapi==3.0.3"], - "dependencies": [], "codeowners": ["@YarmoM"] } diff --git a/homeassistant/components/nederlandse_spoorwegen/sensor.py b/homeassistant/components/nederlandse_spoorwegen/sensor.py index 45413d4a15a..2db46b02db4 100644 --- a/homeassistant/components/nederlandse_spoorwegen/sensor.py +++ b/homeassistant/components/nederlandse_spoorwegen/sensor.py @@ -3,11 +3,13 @@ from datetime import datetime, timedelta import logging import ns_api +from ns_api import RequestParametersError import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_NAME +from homeassistant.exceptions import PlatformNotReady import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -47,13 +49,17 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the departure sensor.""" nsapi = ns_api.NSAPI(config[CONF_API_KEY]) + try: stations = nsapi.get_stations() except ( requests.exceptions.ConnectionError, requests.exceptions.HTTPError, ) as error: - _LOGGER.error("Couldn't fetch stations, API key correct?: %s", error) + _LOGGER.error("Could not connect to the internet: %s", error) + raise PlatformNotReady() + except RequestParametersError as error: + _LOGGER.error("Could not fetch stations, please check configuration: %s", error) return sensors = [] diff --git a/homeassistant/components/nello/manifest.json b/homeassistant/components/nello/manifest.json index 06ca6931bc7..b7ae9237f3d 100644 --- a/homeassistant/components/nello/manifest.json +++ b/homeassistant/components/nello/manifest.json @@ -3,6 +3,5 @@ "name": "Nello", "documentation": "https://www.home-assistant.io/integrations/nello", "requirements": ["pynello==2.0.2"], - "dependencies": [], "codeowners": ["@pschmitt"] } diff --git a/homeassistant/components/ness_alarm/alarm_control_panel.py b/homeassistant/components/ness_alarm/alarm_control_panel.py index f77244a584e..8181e54640d 100644 --- a/homeassistant/components/ness_alarm/alarm_control_panel.py +++ b/homeassistant/components/ness_alarm/alarm_control_panel.py @@ -45,8 +45,10 @@ class NessAlarmPanel(alarm.AlarmControlPanel): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect( - self.hass, SIGNAL_ARMING_STATE_CHANGED, self._handle_arming_state_change + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_ARMING_STATE_CHANGED, self._handle_arming_state_change + ) ) @property @@ -111,4 +113,4 @@ class NessAlarmPanel(alarm.AlarmControlPanel): else: _LOGGER.warning("Unhandled arming state: %s", arming_state) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/ness_alarm/binary_sensor.py b/homeassistant/components/ness_alarm/binary_sensor.py index 0f15b6e937b..c719febdb58 100644 --- a/homeassistant/components/ness_alarm/binary_sensor.py +++ b/homeassistant/components/ness_alarm/binary_sensor.py @@ -50,8 +50,10 @@ class NessZoneBinarySensor(BinarySensorDevice): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect( - self.hass, SIGNAL_ZONE_CHANGED, self._handle_zone_change + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_ZONE_CHANGED, self._handle_zone_change + ) ) @property @@ -79,4 +81,4 @@ class NessZoneBinarySensor(BinarySensorDevice): """Handle zone state update.""" if self._zone_id == data.zone_id: self._state = data.state - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/ness_alarm/manifest.json b/homeassistant/components/ness_alarm/manifest.json index 3cbed89b18c..1977328c33a 100644 --- a/homeassistant/components/ness_alarm/manifest.json +++ b/homeassistant/components/ness_alarm/manifest.json @@ -3,6 +3,5 @@ "name": "Ness Alarm", "documentation": "https://www.home-assistant.io/integrations/ness_alarm", "requirements": ["nessclient==0.9.15"], - "dependencies": [], "codeowners": ["@nickw444"] } diff --git a/homeassistant/components/ness_alarm/services.yaml b/homeassistant/components/ness_alarm/services.yaml index 27f8ba383dd..eb35c48b9f4 100644 --- a/homeassistant/components/ness_alarm/services.yaml +++ b/homeassistant/components/ness_alarm/services.yaml @@ -16,4 +16,4 @@ panic: fields: code: description: The user code to use to trigger the panic. - example: 1234 \ No newline at end of file + example: 1234 diff --git a/homeassistant/components/nest/.translations/bg.json b/homeassistant/components/nest/.translations/bg.json deleted file mode 100644 index 3a4b705e7c9..00000000000 --- a/homeassistant/components/nest/.translations/bg.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Nest \u0430\u043a\u0430\u0443\u043d\u0442.", - "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f.", - "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", - "no_flows": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Nest, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430", - "invalid_code": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043a\u043e\u0434", - "timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430 \u0438\u0437\u0442\u0435\u0447\u0435", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430." - }, - "step": { - "init": { - "data": { - "flow_impl": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" - }, - "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435, \u0447\u0440\u0435\u0437 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0441 Nest.", - "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" - }, - "link": { - "data": { - "code": "\u041f\u0418\u041d \u043a\u043e\u0434" - }, - "description": "\u0417\u0430 \u0434\u0430 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Nest, [\u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438]({url}). \n\n \u0421\u043b\u0435\u0434 \u043a\u0430\u0442\u043e \u0441\u0442\u0435 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0435, \u043a\u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u043e-\u0434\u043e\u043b\u0443 PIN \u043a\u043e\u0434.", - "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b \u0432 Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/ca.json b/homeassistant/components/nest/.translations/ca.json deleted file mode 100644 index 636568b96d3..00000000000 --- a/homeassistant/components/nest/.translations/ca.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte Nest.", - "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "no_flows": "Necessites configurar Nest abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Error intern al validar el codi", - "invalid_code": "Codi inv\u00e0lid", - "timeout": "S'ha acabat el temps d'espera durant la validaci\u00f3 del codi.", - "unknown": "Error desconegut al validar el codi" - }, - "step": { - "init": { - "data": { - "flow_impl": "Prove\u00efdor" - }, - "description": "Tria quin prove\u00efdor d'autenticaci\u00f3 vols utilitzar per autenticar-te amb Nest.", - "title": "Prove\u00efdor d'autenticaci\u00f3" - }, - "link": { - "data": { - "code": "Codi PIN" - }, - "description": "Per enlla\u00e7ar el teu compte de Nest, [autoritza el vostre compte]({url}). \n\nDespr\u00e9s de l'autoritzaci\u00f3, copia i enganxa el codi pin que es mostra a sota.", - "title": "Enlla\u00e7 amb el compte de Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/cs.json b/homeassistant/components/nest/.translations/cs.json deleted file mode 100644 index c884226174b..00000000000 --- a/homeassistant/components/nest/.translations/cs.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "M\u016f\u017eete nastavit pouze jeden Nest \u00fa\u010det.", - "authorize_url_fail": "Nezn\u00e1m\u00e1 chyba p\u0159i generov\u00e1n\u00ed autoriza\u010dn\u00ed URL.", - "authorize_url_timeout": "\u010casov\u00fd limit autoriza\u010dn\u00ed URL vypr\u0161el", - "no_flows": "Pot\u0159ebujete nakonfigurovat Nest, abyste se s n\u00edm mohli autentizovat. [P\u0159e\u010dt\u011bte si pros\u00edm pokyny] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Intern\u00ed chyba ov\u011b\u0159en\u00ed k\u00f3du", - "invalid_code": "Neplatn\u00fd k\u00f3d", - "timeout": "\u010casov\u00fd limit ov\u011b\u0159ov\u00e1n\u00ed k\u00f3du vypr\u0161el", - "unknown": "Nezn\u00e1m\u00e1 chyba ov\u011b\u0159en\u00ed k\u00f3du" - }, - "step": { - "init": { - "data": { - "flow_impl": "Poskytovatel" - }, - "description": "Zvolte pomoc\u00ed kter\u00e9ho poskytovatele ov\u011b\u0159en\u00ed chcete ov\u011b\u0159it slu\u017ebu Nest.", - "title": "Poskytovatel ov\u011b\u0159en\u00ed" - }, - "link": { - "data": { - "code": "K\u00f3d PIN" - }, - "description": "Chcete-li propojit \u00fa\u010det Nest, [autorizujte sv\u016fj \u00fa\u010det]({url}). \n\n Po autorizaci zkop\u00edrujte n\u00ed\u017ee uveden\u00fd k\u00f3d PIN.", - "title": "Propojit s Nest \u00fa\u010dtem" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/da.json b/homeassistant/components/nest/.translations/da.json deleted file mode 100644 index 39b85754c18..00000000000 --- a/homeassistant/components/nest/.translations/da.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt Nest konto.", - "authorize_url_fail": "Ukendt fejl ved generering af en autoriseret url.", - "authorize_url_timeout": "Timeout ved generering af autoriseret url.", - "no_flows": "Du skal konfigurere Nest f\u00f8r du kan autentificere med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Intern fejl ved validering af kode", - "invalid_code": "Ugyldig kode", - "timeout": "Timeout ved validering af kode", - "unknown": "Ukendt fejl ved validering af kode" - }, - "step": { - "init": { - "data": { - "flow_impl": "Udbyder" - }, - "description": "V\u00e6lg hvilken godkendelsesudbyder du vil godkende med Nest.", - "title": "Godkendelsesudbyder" - }, - "link": { - "data": { - "code": "PIN-kode" - }, - "description": "For at forbinde din Nest-konto, [godkend din konto]({url}). \n\nEfter godkendelse skal du kopiere pin koden nedenfor.", - "title": "Forbind Nest-konto" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/de.json b/homeassistant/components/nest/.translations/de.json deleted file mode 100644 index 500862039a2..00000000000 --- a/homeassistant/components/nest/.translations/de.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kannst nur ein einziges Nest-Konto konfigurieren.", - "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL", - "no_flows": "Du musst Nest konfigurieren, bevor du dich authentifizieren kannst. [Bitte lese die Anweisungen] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Ein interner Fehler ist aufgetreten", - "invalid_code": "Ung\u00fcltiger Code", - "timeout": "Ein zeit\u00fcberschreitungs Fehler ist aufgetreten", - "unknown": "Ein unbekannter Fehler ist aufgetreten" - }, - "step": { - "init": { - "data": { - "flow_impl": "Anbieter" - }, - "description": "W\u00e4hlen, \u00fcber welchen Authentifizierungsanbieter du dich bei Nest authentifizieren m\u00f6chtest.", - "title": "Authentifizierungsanbieter" - }, - "link": { - "data": { - "code": "PIN Code" - }, - "description": "[Autorisiere dein Konto] ( {url} ), um deinen Nest-Account zu verkn\u00fcpfen.\n\n F\u00fcge anschlie\u00dfend den erhaltenen PIN Code hier ein.", - "title": "Nest-Konto verkn\u00fcpfen" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/en.json b/homeassistant/components/nest/.translations/en.json deleted file mode 100644 index cf448bb35e7..00000000000 --- a/homeassistant/components/nest/.translations/en.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure a single Nest account.", - "authorize_url_fail": "Unknown error generating an authorize url.", - "authorize_url_timeout": "Timeout generating authorize url.", - "no_flows": "You need to configure Nest before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Internal error validating code", - "invalid_code": "Invalid code", - "timeout": "Timeout validating code", - "unknown": "Unknown error validating code" - }, - "step": { - "init": { - "data": { - "flow_impl": "Provider" - }, - "description": "Pick via which authentication provider you want to authenticate with Nest.", - "title": "Authentication Provider" - }, - "link": { - "data": { - "code": "Pin code" - }, - "description": "To link your Nest account, [authorize your account]({url}).\n\nAfter authorization, copy-paste the provided pin code below.", - "title": "Link Nest Account" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/es-419.json b/homeassistant/components/nest/.translations/es-419.json deleted file mode 100644 index 60a3eb65ca9..00000000000 --- a/homeassistant/components/nest/.translations/es-419.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puedes configurar una sola cuenta Nest.", - "authorize_url_fail": "Error desconocido al generar una URL de autorizaci\u00f3n.", - "no_flows": "Debe configurar Nest antes de poder autenticarse con \u00e9l. [Lea las instrucciones] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "invalid_code": "Codigo invalido", - "unknown": "Error desconocido al validar el c\u00f3digo" - }, - "step": { - "init": { - "data": { - "flow_impl": "Proveedor" - }, - "description": "Seleccione a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n desea autenticarse con Nest.", - "title": "Proveedor de autenticaci\u00f3n" - }, - "link": { - "data": { - "code": "C\u00f3digo PIN" - }, - "description": "Para vincular su cuenta Nest, [autorice su cuenta] ( {url} ). \n\n Despu\u00e9s de la autorizaci\u00f3n, copie y pegue el c\u00f3digo pin proporcionado a continuaci\u00f3n.", - "title": "Enlazar cuenta Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/es.json b/homeassistant/components/nest/.translations/es.json deleted file mode 100644 index 8a154101b65..00000000000 --- a/homeassistant/components/nest/.translations/es.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3lo puedes configurar una \u00fanica cuenta de Nest.", - "authorize_url_fail": "Error desconocido generando la url de autorizaci\u00f3n", - "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n.", - "no_flows": "Debes configurar Nest antes de poder autenticarte con \u00e9l. [Lee las instrucciones](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Error interno validando el c\u00f3digo", - "invalid_code": "C\u00f3digo inv\u00e1lido", - "timeout": "Tiempo de espera agotado validando el c\u00f3digo", - "unknown": "Error desconocido validando el c\u00f3digo" - }, - "step": { - "init": { - "data": { - "flow_impl": "Proveedor" - }, - "description": "Elija a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n desea autenticarse con Nest.", - "title": "Proveedor de autenticaci\u00f3n" - }, - "link": { - "data": { - "code": "C\u00f3digo PIN" - }, - "description": "Para vincular tu cuenta de Nest, [autoriza tu cuenta]({url}).\n\nDespu\u00e9s de la autorizaci\u00f3n, copia y pega el c\u00f3digo pin a continuaci\u00f3n.", - "title": "Vincular cuenta de Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/et.json b/homeassistant/components/nest/.translations/et.json deleted file mode 100644 index 4e8c0b23bdc..00000000000 --- a/homeassistant/components/nest/.translations/et.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "error": { - "invalid_code": "Kehtetu kood" - }, - "step": { - "link": { - "data": { - "code": "PIN-kood" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/fr.json b/homeassistant/components/nest/.translations/fr.json deleted file mode 100644 index 3cd7b003f66..00000000000 --- a/homeassistant/components/nest/.translations/fr.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Nest.", - "authorize_url_fail": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'une URL d'autorisation.", - "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", - "no_flows": "Vous devez configurer Nest avant de pouvoir vous authentifier avec celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Erreur interne lors de la validation du code", - "invalid_code": "Code invalide", - "timeout": "D\u00e9lai de la validation du code expir\u00e9", - "unknown": "Erreur inconnue lors de la validation du code" - }, - "step": { - "init": { - "data": { - "flow_impl": "Fournisseur" - }, - "description": "S\u00e9lectionnez via quel fournisseur d'authentification vous souhaitez vous authentifier avec Nest.", - "title": "Fournisseur d'authentification" - }, - "link": { - "data": { - "code": "Code PIN" - }, - "description": "Pour associer votre compte Nest, [autorisez votre compte]({url}). \n\n Apr\u00e8s autorisation, copiez-collez le code PIN fourni ci-dessous.", - "title": "Lier un compte Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/he.json b/homeassistant/components/nest/.translations/he.json deleted file mode 100644 index 7f777f42b6d..00000000000 --- a/homeassistant/components/nest/.translations/he.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d7\u05e9\u05d1\u05d5\u05df Nest \u05d9\u05d7\u05d9\u05d3.", - "authorize_url_fail": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4 \u05d1\u05d9\u05e6\u05d9\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d9\u05de\u05d5\u05ea.", - "authorize_url_timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05e2\u05d1\u05d5\u05e8 \u05d9\u05e6\u05d9\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d9\u05de\u05d5\u05ea", - "no_flows": "\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Nest \u05dc\u05e4\u05e0\u05d9 \u05e9\u05ea\u05d5\u05db\u05dc \u05dc\u05d0\u05de\u05ea \u05d0\u05ea\u05d5. [\u05d0\u05e0\u05d0 \u05e7\u05e8\u05d0 \u05d0\u05ea \u05d4\u05d4\u05d5\u05e8\u05d0\u05d5\u05ea] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05e4\u05e0\u05d9\u05de\u05d9\u05ea \u05d1\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3", - "invalid_code": "\u05e7\u05d5\u05d3 \u05dc\u05d0 \u05ea\u05e7\u05d9\u05df", - "timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3", - "unknown": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4 \u05d1\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3" - }, - "step": { - "init": { - "data": { - "flow_impl": "\u05e1\u05e4\u05e7" - }, - "description": "\u05d1\u05d7\u05e8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05e1\u05e4\u05e7 \u05d4\u05d0\u05d9\u05de\u05d5\u05ea \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d0\u05de\u05ea \u05e2\u05dd Nest.", - "title": "\u05e1\u05e4\u05e7 \u05d0\u05d9\u05de\u05d5\u05ea" - }, - "link": { - "data": { - "code": "\u05e7\u05d5\u05d3 Pin" - }, - "description": "\u05db\u05d3\u05d9 \u05dc\u05e7\u05e9\u05e8 \u05d0\u05ea \u05d7\u05e9\u05d1\u05d5\u05df Nest \u05e9\u05dc\u05da, [\u05d0\u05de\u05ea \u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05e9\u05dc\u05da] ({url}). \n\n \u05dc\u05d0\u05d7\u05e8 \u05d4\u05d0\u05d9\u05e9\u05d5\u05e8, \u05d4\u05e2\u05ea\u05e7 \u05d0\u05ea \u05e7\u05d5\u05d3 \u05d4PIN \u05e9\u05e1\u05d5\u05e4\u05e7 \u05d5\u05d4\u05d3\u05d1\u05e7 \u05d0\u05d5\u05ea\u05d5 \u05dc\u05de\u05d8\u05d4.", - "title": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05e9\u05d1\u05d5\u05df Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/hr.json b/homeassistant/components/nest/.translations/hr.json deleted file mode 100644 index b96a358f2f0..00000000000 --- a/homeassistant/components/nest/.translations/hr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "invalid_code": "Neispravan kod" - }, - "step": { - "init": { - "data": { - "flow_impl": "Pru\u017eatelj usluge" - }, - "title": "Pru\u017eatelj usluge autentifikacije" - }, - "link": { - "data": { - "code": "PIN kod" - } - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/hu.json b/homeassistant/components/nest/.translations/hu.json deleted file mode 100644 index dc26862f5ea..00000000000 --- a/homeassistant/components/nest/.translations/hu.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Csak egy Nest-fi\u00f3kot konfigur\u00e1lhat.", - "authorize_url_fail": "Ismeretlen hiba t\u00f6rt\u00e9nt a hiteles\u00edt\u00e9si link gener\u00e1l\u00e1sa sor\u00e1n.", - "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n." - }, - "error": { - "internal_error": "Bels\u0151 hiba t\u00f6rt\u00e9nt a k\u00f3d valid\u00e1l\u00e1s\u00e1n\u00e1l", - "invalid_code": "\u00c9rv\u00e9nytelen k\u00f3d", - "timeout": "Id\u0151t\u00fall\u00e9p\u00e9s a k\u00f3d \u00e9rv\u00e9nyes\u00edt\u00e9se sor\u00e1n.", - "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt a k\u00f3d \u00e9rv\u00e9nyes\u00edt\u00e9se sor\u00e1n" - }, - "step": { - "init": { - "data": { - "flow_impl": "Szolg\u00e1ltat\u00f3" - }, - "description": "V\u00e1laszd ki, hogy melyik hiteles\u00edt\u00e9si szolg\u00e1ltat\u00f3n\u00e1l szeretn\u00e9d hiteles\u00edteni a Nestet.", - "title": "Hiteles\u00edt\u00e9si Szolg\u00e1ltat\u00f3" - }, - "link": { - "data": { - "code": "PIN-k\u00f3d" - }, - "description": "A Nest-fi\u00f3k \u00f6sszekapcsol\u00e1s\u00e1hoz [enged\u00e9lyezze fi\u00f3kj\u00e1t] ( {url} ). \n\n Az enged\u00e9lyez\u00e9s ut\u00e1n m\u00e1solja be az al\u00e1bbi PIN k\u00f3dot.", - "title": "Nest fi\u00f3k \u00f6sszekapcsol\u00e1sa" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/id.json b/homeassistant/components/nest/.translations/id.json deleted file mode 100644 index 58f86f5474e..00000000000 --- a/homeassistant/components/nest/.translations/id.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Anda hanya dapat mengonfigurasi satu akun Nest.", - "authorize_url_fail": "Kesalahan tidak dikenal terjadi ketika menghasilkan URL otorisasi.", - "authorize_url_timeout": "Waktu tunggu menghasilkan otorisasi url telah habis.", - "no_flows": "Anda harus mengonfigurasi Nest sebelum dapat mengautentikasi dengan Nest. [Silakan baca instruksi] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Kesalahan Internal memvalidasi kode", - "invalid_code": "Kode salah", - "timeout": "Waktu tunggu memvalidasi kode telah habis.", - "unknown": "Error tidak diketahui saat memvalidasi kode" - }, - "step": { - "init": { - "data": { - "flow_impl": "Penyedia" - }, - "description": "Pilih melalui penyedia autentikasi mana yang ingin Anda autentikasi dengan Nest.", - "title": "Penyedia Otentikasi" - }, - "link": { - "data": { - "code": "Kode PIN" - }, - "description": "Untuk menautkan akun Nest Anda, [beri kuasa akun Anda] ( {url} ). \n\n Setelah otorisasi, salin-tempel kode pin yang disediakan di bawah ini.", - "title": "Hubungkan Akun Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/it.json b/homeassistant/components/nest/.translations/it.json deleted file mode 100644 index b55c6d00683..00000000000 --- a/homeassistant/components/nest/.translations/it.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account Nest.", - "authorize_url_fail": "Errore sconosciuto nel generare l'url di autorizzazione", - "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", - "no_flows": "Devi configurare Nest prima di poter eseguire l'autenticazione. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Errore interno nella convalida del codice", - "invalid_code": "Codice non valido", - "timeout": "Tempo scaduto per l'inserimento del codice di convalida", - "unknown": "Errore sconosciuto durante la convalida del codice" - }, - "step": { - "init": { - "data": { - "flow_impl": "Provider" - }, - "description": "Scegli tramite quale provider di autenticazione desideri autenticarti con Nest.", - "title": "Fornitore di autenticazione" - }, - "link": { - "data": { - "code": "Codice PIN" - }, - "description": "Per collegare l'account Nido, [autorizzare l'account]({url}).\n\nDopo l'autorizzazione, copia-incolla il codice PIN fornito di seguito.", - "title": "Collega un account Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/ja.json b/homeassistant/components/nest/.translations/ja.json deleted file mode 100644 index 4335b7d1674..00000000000 --- a/homeassistant/components/nest/.translations/ja.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/ko.json b/homeassistant/components/nest/.translations/ko.json deleted file mode 100644 index 42170910d14..00000000000 --- a/homeassistant/components/nest/.translations/ko.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "error": { - "internal_error": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \ub0b4\ubd80 \uc624\ub958 \ubc1c\uc0dd", - "invalid_code": "\uc798\ubabb\ub41c \ucf54\ub4dc", - "timeout": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac \uc2dc\uac04 \ucd08\uacfc", - "unknown": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958 \ubc1c\uc0dd" - }, - "step": { - "init": { - "data": { - "flow_impl": "\uacf5\uae09\uc790" - }, - "description": "Nest \ub97c \uc778\uc99d\ud558\uae30 \uc704\ud55c \uc778\uc99d \uacf5\uae09\uc790\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", - "title": "\uc778\uc99d \uacf5\uae09\uc790" - }, - "link": { - "data": { - "code": "\ud540 \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.", - "title": "Nest \uacc4\uc815 \uc5f0\uacb0" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/lb.json b/homeassistant/components/nest/.translations/lb.json deleted file mode 100644 index 9fdf442c5ff..00000000000 --- a/homeassistant/components/nest/.translations/lb.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Nest Kont konfigur\u00e9ieren.", - "authorize_url_fail": "Onbekannte Feeler beim gener\u00e9ieren vun der Autorisatiouns URL.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "no_flows": "Dir musst Nest konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Interne Feeler beim valid\u00e9ieren vum Code", - "invalid_code": "Ong\u00ebltege Code", - "timeout": "Z\u00e4it Iwwerschreidung beim valid\u00e9ieren vum Code", - "unknown": "Onbekannte Feeler beim valid\u00e9ieren vum Code" - }, - "step": { - "init": { - "data": { - "flow_impl": "Ubidder" - }, - "description": "Wielt den Authentifikatioun Ubidder deen sech mat Nest verbanne soll.", - "title": "Authentifikatioun Ubidder" - }, - "link": { - "data": { - "code": "Pin code" - }, - "description": "Fir den Nest Kont ze verbannen, [autoris\u00e9iert \u00e4ren Kont]({url}).\nKop\u00e9iert no der Autorisatioun den Pin hei \u00ebnnendr\u00ebnner", - "title": "Nest Kont verbannen" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/nl.json b/homeassistant/components/nest/.translations/nl.json deleted file mode 100644 index 756eb07189a..00000000000 --- a/homeassistant/components/nest/.translations/nl.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Je kunt slechts \u00e9\u00e9n Nest-account configureren.", - "authorize_url_fail": "Onbekende fout bij het genereren van een autoriseer-URL.", - "authorize_url_timeout": "Toestemming voor het genereren van autoriseer-url.", - "no_flows": "U moet Nest configureren voordat u zich ermee kunt authenticeren. [Gelieve de instructies te lezen](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Interne foutvalidatiecode", - "invalid_code": "Ongeldige code", - "timeout": "Time-out validatie van code", - "unknown": "Onbekende foutvalidatiecode" - }, - "step": { - "init": { - "data": { - "flow_impl": "Leverancier" - }, - "description": "Kies met welke authenticatieleverancier u wilt verifi\u00ebren met Nest.", - "title": "Authenticatieleverancier" - }, - "link": { - "data": { - "code": "Pincode" - }, - "description": "Als je je Nest-account wilt koppelen, [autoriseer je account] ( {url} ). \n\nNa autorisatie, kopieer en plak de voorziene pincode hieronder.", - "title": "Koppel Nest-account" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/nn.json b/homeassistant/components/nest/.translations/nn.json deleted file mode 100644 index be3915c464f..00000000000 --- a/homeassistant/components/nest/.translations/nn.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan berre konfiguere \u00e9in Nest-brukar.", - "authorize_url_fail": "Ukjent feil ved generering av autentiserings-URL", - "authorize_url_timeout": "Tida gjekk ut for generert autentikasjons-URL", - "no_flows": "Du m\u00e5 konfiguere Nest f\u00f8r du kan autentisere den. (Les instruksjonane) (https://www.home-assistant.io/components/nest/)" - }, - "error": { - "internal_error": "Intern feil ved validering av kode", - "invalid_code": "Ugyldig kode", - "timeout": "Tida gjekk ut for validering av kode", - "unknown": "Det hende ein ukjent feil ved validering av kode." - }, - "step": { - "init": { - "data": { - "flow_impl": "Leverand\u00f8r" - }, - "description": "Vel kva for ein autentiseringsleverand\u00f8r du vil godkjenne med Nest.", - "title": "Autentiseringsleverand\u00f8r" - }, - "link": { - "data": { - "code": "Pinkode" - }, - "description": "For \u00e5 linke Nestkontoen din, [autoriser kontoen din]{url}.\nEtter autentiseringa, kopier-lim inn koda du fekk under her.", - "title": "Link Nestkonto" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/no.json b/homeassistant/components/nest/.translations/no.json deleted file mode 100644 index 9f19d22d939..00000000000 --- a/homeassistant/components/nest/.translations/no.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bare konfigurere en Nest konto.", - "authorize_url_fail": "Ukjent feil ved generering av autoriseringsadresse.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "no_flows": "Du m\u00e5 konfigurere Nest f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Intern feil ved validering av kode", - "invalid_code": "Ugyldig kode", - "timeout": "Tidsavbrudd ved validering av kode", - "unknown": "Ukjent feil ved validering av kode" - }, - "step": { - "init": { - "data": { - "flow_impl": "Tilbyder" - }, - "description": "Velg via hvilken autentiseringstilbyder du vil godkjenne med Nest.", - "title": "Autentiseringstilbyder" - }, - "link": { - "data": { - "code": "PIN kode" - }, - "description": "For \u00e5 koble din Nest-konto, [autoriser kontoen din]({url}). \n\n Etter godkjenning, kopier og lim inn den oppgitte PIN koden nedenfor.", - "title": "Koble til Nest konto" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/pl.json b/homeassistant/components/nest/.translations/pl.json deleted file mode 100644 index d40c872e300..00000000000 --- a/homeassistant/components/nest/.translations/pl.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Nest.", - "authorize_url_fail": "Nieznany b\u0142\u0105d podczas generowania url autoryzacji.", - "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", - "no_flows": "Musisz skonfigurowa\u0107 Nest, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Wewn\u0119trzny b\u0142\u0105d sprawdzania poprawno\u015bci kodu", - "invalid_code": "Nieprawid\u0142owy kod", - "timeout": "Przekroczono limit czasu sprawdzania poprawno\u015bci kodu.", - "unknown": "Nieznany b\u0142\u0105d sprawdzania poprawno\u015bci kodu" - }, - "step": { - "init": { - "data": { - "flow_impl": "Dostawca" - }, - "description": "Wybierz, kt\u00f3rego dostawc\u0119 uwierzytelnienia chcesz u\u017cywa\u0107 z Nest.", - "title": "Dostawca uwierzytelnienia" - }, - "link": { - "data": { - "code": "Kod PIN" - }, - "description": "Aby po\u0142\u0105czy\u0107 z kontem Nest, [wykonaj autoryzacj\u0119]({url}). \n\n Po autoryzacji skopiuj i wklej podany kod PIN poni\u017cej.", - "title": "Po\u0142\u0105cz z kontem Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/pt-BR.json b/homeassistant/components/nest/.translations/pt-BR.json deleted file mode 100644 index 3f33dd6c67a..00000000000 --- a/homeassistant/components/nest/.translations/pt-BR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Voc\u00ea pode configurar somente uma conta do Nest", - "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", - "authorize_url_timeout": "Excedido tempo limite de url de autoriza\u00e7\u00e3o", - "no_flows": "Voc\u00ea precisa configurar o Nest antes de poder autenticar com ele. [Por favor leio as instru\u00e7\u00f5es](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Erro interno ao validar o c\u00f3digo", - "invalid_code": "C\u00f3digo inv\u00e1lido", - "timeout": "Excedido tempo limite para validar c\u00f3digo", - "unknown": "Erro desconhecido ao validar o c\u00f3digo" - }, - "step": { - "init": { - "data": { - "flow_impl": "Provedor" - }, - "description": "Escolha atrav\u00e9s de qual provedor de autentica\u00e7\u00e3o voc\u00ea deseja autenticar com o Nest.", - "title": "Provedor de Autentica\u00e7\u00e3o" - }, - "link": { - "data": { - "code": "C\u00f3digo PIN" - }, - "description": "Para vincular sua conta do Nest, [autorize sua conta] ( {url} ). \n\n Ap\u00f3s a autoriza\u00e7\u00e3o, copie e cole o c\u00f3digo PIN fornecido abaixo.", - "title": "Link da conta Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/pt.json b/homeassistant/components/nest/.translations/pt.json deleted file mode 100644 index 5ea970d9fb3..00000000000 --- a/homeassistant/components/nest/.translations/pt.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3 pode configurar uma \u00fanica conta Nest.", - "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", - "authorize_url_timeout": "Limite temporal ultrapassado ao gerar um URL de autoriza\u00e7\u00e3o.", - "no_flows": "\u00c9 necess\u00e1rio configurar o Nest antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Erro interno ao validar o c\u00f3digo", - "invalid_code": "C\u00f3digo inv\u00e1lido", - "timeout": "Limite temporal ultrapassado ao validar c\u00f3digo", - "unknown": "Erro desconhecido ao validar o c\u00f3digo" - }, - "step": { - "init": { - "data": { - "flow_impl": "Fornecedor" - }, - "description": "Escolha com qual fornecedor de autentica\u00e7\u00e3o deseja autenticar o Nest.", - "title": "Fornecedor de Autentica\u00e7\u00e3o" - }, - "link": { - "data": { - "code": "C\u00f3digo PIN" - }, - "description": "Para associar \u00e0 sua conta Nest, [autorizar sua conta]({url}).\n\nAp\u00f3s a autoriza\u00e7\u00e3o, copie e cole o c\u00f3digo pin fornecido abaixo.", - "title": "Associar conta Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/ro.json b/homeassistant/components/nest/.translations/ro.json deleted file mode 100644 index f315cf549fb..00000000000 --- a/homeassistant/components/nest/.translations/ro.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "link": { - "data": { - "code": "Cod PIN" - }, - "title": "Leg\u0103tur\u0103 cont Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/ru.json b/homeassistant/components/nest/.translations/ru.json deleted file mode 100644 index 9abdafafa93..00000000000 --- a/homeassistant/components/nest/.translations/ru.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Nest \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430.", - "invalid_code": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.", - "timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430." - }, - "step": { - "init": { - "data": { - "flow_impl": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0445\u043e\u0434.", - "title": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - }, - "link": { - "data": { - "code": "PIN-\u043a\u043e\u0434" - }, - "description": "[\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0439\u0442\u0435\u0441\u044c]({url}), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Nest. \n\n \u041f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043f\u0438\u043d-\u043a\u043e\u0434.", - "title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/sl.json b/homeassistant/components/nest/.translations/sl.json deleted file mode 100644 index d038ed4157f..00000000000 --- a/homeassistant/components/nest/.translations/sl.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nastavite lahko samo en ra\u010dun Nest.", - "authorize_url_fail": "Neznana napaka pri generiranju potrditvenega URL-ja.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "no_flows": "Preden lahko preverite pristnost, morate konfigurirati Nest. [Preberite navodila](https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Notranja napaka pri preverjanju kode", - "invalid_code": "Neveljavna koda", - "timeout": "\u010casovna omejitev je potekla pri preverjanju kode", - "unknown": "Neznana napaka pri preverjanju kode" - }, - "step": { - "init": { - "data": { - "flow_impl": "Ponudnik" - }, - "description": "Izberite prek katerega ponudnika overjanja \u017eelite overiti Nest.", - "title": "Ponudnik za preverjanje pristnosti" - }, - "link": { - "data": { - "code": "PIN koda" - }, - "description": "\u010ce \u017eelite povezati svoj ra\u010dun Nest, [pooblastite svoj ra\u010dun]({url}). \n\n Po odobritvi kopirajte in prilepite podano kodo PIN.", - "title": "Pove\u017eite Nest ra\u010dun" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/sv.json b/homeassistant/components/nest/.translations/sv.json deleted file mode 100644 index 721f891219d..00000000000 --- a/homeassistant/components/nest/.translations/sv.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan endast konfigurera ett Nest-konto.", - "authorize_url_fail": "Ok\u00e4nt fel vid generering av autentisieringsadress.", - "authorize_url_timeout": "Timeout vid generering av en autentisieringsadress.", - "no_flows": "Du m\u00e5ste konfigurera Nest innan du kan autentisera med det. [V\u00e4nligen l\u00e4s instruktionerna] (https://www.home-assistant.io/components/nest/)." - }, - "error": { - "internal_error": "Internt fel vid validering av kod", - "invalid_code": "Ogiltig kod", - "timeout": "Timeout vid valididering av kod", - "unknown": "Ok\u00e4nt fel vid validering av kod" - }, - "step": { - "init": { - "data": { - "flow_impl": "Leverant\u00f6r" - }, - "description": "V\u00e4lj den autentiseringsleverant\u00f6r som du vill autentisera med mot Nest.", - "title": "Autentiseringsleverant\u00f6r" - }, - "link": { - "data": { - "code": "Pin-kod" - }, - "description": "F\u00f6r att l\u00e4nka ditt Nest-konto, [autentisiera ditt konto]({url}). \n\nEfter autentisiering, klipp och klistra in den angivna pin-koden nedan.", - "title": "L\u00e4nka Nest-konto" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/th.json b/homeassistant/components/nest/.translations/th.json deleted file mode 100644 index 82ec7f168fa..00000000000 --- a/homeassistant/components/nest/.translations/th.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "error": { - "invalid_code": "\u0e23\u0e2b\u0e31\u0e2a\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07" - }, - "step": { - "link": { - "data": { - "code": "Pin code" - } - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/vi.json b/homeassistant/components/nest/.translations/vi.json deleted file mode 100644 index 996c6c68eae..00000000000 --- a/homeassistant/components/nest/.translations/vi.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "error": { - "internal_error": "M\u00e3 x\u00e1c th\u1ef1c l\u1ed7i n\u1ed9i b\u1ed9", - "invalid_code": "M\u00e3 kh\u00f4ng h\u1ee3p l\u1ec7", - "timeout": "M\u00e3 x\u00e1c th\u1ef1c h\u1ebft th\u1eddi gian ch\u1edd", - "unknown": "M\u00e3 x\u00e1c th\u1ef1c l\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh" - }, - "step": { - "init": { - "data": { - "flow_impl": "Nh\u00e0 cung c\u1ea5p" - }, - "title": "Nh\u00e0 cung c\u1ea5p x\u00e1c th\u1ef1c" - }, - "link": { - "title": "Li\u00ean k\u1ebft t\u00e0i kho\u1ea3n Nest" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/zh-Hans.json b/homeassistant/components/nest/.translations/zh-Hans.json deleted file mode 100644 index 0825fdfdc79..00000000000 --- a/homeassistant/components/nest/.translations/zh-Hans.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u60a8\u53ea\u80fd\u914d\u7f6e\u4e00\u4e2a Nest \u5e10\u6237\u3002", - "authorize_url_fail": "\u751f\u6210\u6388\u6743\u7f51\u5740\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002", - "authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002", - "no_flows": "\u60a8\u9700\u8981\u5148\u914d\u7f6e Nest\uff0c\u7136\u540e\u624d\u80fd\u5bf9\u5176\u8fdb\u884c\u6388\u6743\u3002 [\u8bf7\u9605\u8bfb\u8bf4\u660e](https://www.home-assistant.io/components/nest/)\u3002" - }, - "error": { - "internal_error": "\u9a8c\u8bc1\u4ee3\u7801\u65f6\u53d1\u751f\u5185\u90e8\u9519\u8bef", - "invalid_code": "\u9a8c\u8bc1\u7801\u65e0\u6548", - "timeout": "\u9a8c\u8bc1\u7801\u8d85\u65f6", - "unknown": "\u9a8c\u8bc1\u7801\u672a\u77e5\u9519\u8bef" - }, - "step": { - "init": { - "data": { - "flow_impl": "\u8ba4\u8bc1\u63d0\u4f9b\u8005" - }, - "description": "\u9009\u62e9\u60a8\u60f3\u901a\u8fc7\u54ea\u4e2a\u6388\u6743\u63d0\u4f9b\u8005\u4e0e Nest \u8fdb\u884c\u6388\u6743\u3002", - "title": "\u6388\u6743\u63d0\u4f9b\u8005" - }, - "link": { - "data": { - "code": "PIN \u7801" - }, - "description": "\u8981\u5173\u8054 Nest \u8d26\u6237\uff0c\u8bf7[\u6388\u6743\u8d26\u6237]({url})\u3002\n\n\u5b8c\u6210\u6388\u6743\u540e\uff0c\u5728\u4e0b\u9762\u7c98\u8d34\u83b7\u5f97\u7684 PIN \u7801\u3002", - "title": "\u5173\u8054 Nest \u8d26\u6237" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/.translations/zh-Hant.json b/homeassistant/components/nest/.translations/zh-Hant.json deleted file mode 100644 index c477557e7ba..00000000000 --- a/homeassistant/components/nest/.translations/zh-Hant.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Nest \u5e33\u865f\u3002", - "authorize_url_fail": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", - "no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Nest \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/nest/)\u3002" - }, - "error": { - "internal_error": "\u8a8d\u8b49\u78bc\u5167\u90e8\u932f\u8aa4", - "invalid_code": "\u8a8d\u8b49\u78bc\u7121\u6548", - "timeout": "\u8a8d\u8b49\u78bc\u903e\u6642", - "unknown": "\u8a8d\u8b49\u78bc\u672a\u77e5\u932f\u8aa4" - }, - "step": { - "init": { - "data": { - "flow_impl": "\u8a8d\u8b49\u63d0\u4f9b\u8005" - }, - "description": "\u65bc\u8a8d\u8b49\u63d0\u4f9b\u8005\u4e2d\u6311\u9078\u6240\u8981\u9032\u884c Nest \u8a8d\u8b49\u63d0\u4f9b\u8005\u3002", - "title": "\u8a8d\u8b49\u63d0\u4f9b\u8005" - }, - "link": { - "data": { - "code": "PIN \u78bc" - }, - "description": "\u6b32\u9023\u7d50 Nest \u5e33\u865f\uff0c[\u8a8d\u8b49\u5e33\u865f]({url}).\n\n\u65bc\u8a8d\u8b49\u5f8c\uff0c\u8907\u88fd\u4e26\u8cbc\u4e0a\u4e0b\u65b9\u7684\u8a8d\u8b49\u78bc\u3002", - "title": "\u9023\u7d50 Nest \u5e33\u865f" - } - }, - "title": "Nest" - } -} \ No newline at end of file diff --git a/homeassistant/components/nest/__init__.py b/homeassistant/components/nest/__init__.py index 73a28aa121f..f92f6466156 100644 --- a/homeassistant/components/nest/__init__.py +++ b/homeassistant/components/nest/__init__.py @@ -1,7 +1,6 @@ """Support for Nest devices.""" from datetime import datetime, timedelta import logging -import socket import threading from nest import Nest @@ -201,7 +200,7 @@ async def async_setup_entry(hass, entry): now = datetime.utcnow() trip_id = service.data.get( - ATTR_TRIP_ID, "trip_{}".format(int(now.timestamp())) + ATTR_TRIP_ID, f"trip_{int(now.timestamp())}" ) eta_begin = now + service.data[ATTR_ETA] eta_window = service.data.get(ATTR_ETA_WINDOW, timedelta(minutes=1)) @@ -294,7 +293,7 @@ class NestDevice: if self.local_structure is None: self.local_structure = structure_names - except (AuthorizationError, APIError, socket.error) as err: + except (AuthorizationError, APIError, OSError) as err: _LOGGER.error("Connection error while access Nest web service: %s", err) return False return True @@ -312,7 +311,7 @@ class NestDevice: continue yield structure - except (AuthorizationError, APIError, socket.error) as err: + except (AuthorizationError, APIError, OSError) as err: _LOGGER.error("Connection error while access Nest web service: %s", err) def thermostats(self): @@ -354,7 +353,7 @@ class NestDevice: continue yield (structure, device) - except (AuthorizationError, APIError, socket.error) as err: + except (AuthorizationError, APIError, OSError) as err: _LOGGER.error("Connection error while access Nest web service: %s", err) @@ -369,15 +368,11 @@ class NestSensorDevice(Entity): if device is not None: # device specific self.device = device - self._name = "{} {}".format( - self.device.name_long, self.variable.replace("_", " ") - ) + self._name = f"{self.device.name_long} {self.variable.replace('_', ' ')}" else: # structure only self.device = structure - self._name = "{} {}".format( - self.structure.name, self.variable.replace("_", " ") - ) + self._name = f"{self.structure.name} {self.variable.replace('_', ' ')}" self._state = None self._unit = None @@ -437,4 +432,6 @@ class NestSensorDevice(Entity): """Update sensor state.""" await self.async_update_ha_state(True) - async_dispatcher_connect(self.hass, SIGNAL_NEST_UPDATE, async_update_state) + self.async_on_remove( + async_dispatcher_connect(self.hass, SIGNAL_NEST_UPDATE, async_update_state) + ) diff --git a/homeassistant/components/nest/binary_sensor.py b/homeassistant/components/nest/binary_sensor.py index a029fcfe7d6..34dc7b06ade 100644 --- a/homeassistant/components/nest/binary_sensor.py +++ b/homeassistant/components/nest/binary_sensor.py @@ -69,7 +69,7 @@ async def async_setup_entry(hass, entry, async_add_entities): for variable in conditions: if variable in _BINARY_TYPES_DEPRECATED: wstr = ( - variable + " is no a longer supported " + f"{variable} is no a longer supported " "monitored_conditions. See " "https://www.home-assistant.io/integrations/binary_sensor.nest/ " "for valid options." diff --git a/homeassistant/components/nest/climate.py b/homeassistant/components/nest/climate.py index f75e3a692f3..92442479091 100644 --- a/homeassistant/components/nest/climate.py +++ b/homeassistant/components/nest/climate.py @@ -151,7 +151,9 @@ class NestThermostat(ClimateDevice): """Update device state.""" await self.async_update_ha_state(True) - async_dispatcher_connect(self.hass, SIGNAL_NEST_UPDATE, async_update_state) + self.async_on_remove( + async_dispatcher_connect(self.hass, SIGNAL_NEST_UPDATE, async_update_state) + ) @property def supported_features(self): diff --git a/homeassistant/components/nest/config_flow.py b/homeassistant/components/nest/config_flow.py index b8fa2ad93f5..8f7a0909f33 100644 --- a/homeassistant/components/nest/config_flow.py +++ b/homeassistant/components/nest/config_flow.py @@ -100,7 +100,7 @@ class NestFlowHandler(config_entries.ConfigFlow): with async_timeout.timeout(10): tokens = await flow["convert_code"](user_input["code"]) return self._entry_from_tokens( - "Nest (via {})".format(flow["name"]), flow, tokens + f"Nest (via {flow['name']})", flow, tokens ) except asyncio.TimeoutError: diff --git a/homeassistant/components/nest/manifest.json b/homeassistant/components/nest/manifest.json index c14f5982da0..610e80d9a6a 100644 --- a/homeassistant/components/nest/manifest.json +++ b/homeassistant/components/nest/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/nest", "requirements": ["python-nest==4.1.0"], - "dependencies": [], "codeowners": ["@awarecan"] } diff --git a/homeassistant/components/nest/sensor.py b/homeassistant/components/nest/sensor.py index 225caee0a90..f7e727e0e2d 100644 --- a/homeassistant/components/nest/sensor.py +++ b/homeassistant/components/nest/sensor.py @@ -96,7 +96,7 @@ async def async_setup_entry(hass, entry, async_add_entities): ) else: wstr = ( - variable + " is no a longer supported " + f"{variable} is no a longer supported " "monitored_conditions. See " "https://www.home-assistant.io/integrations/" "binary_sensor.nest/ for valid options." @@ -203,6 +203,6 @@ class NestTempSensor(NestSensorDevice): if isinstance(temp, tuple): low, high = temp - self._state = "%s-%s" % (int(low), int(high)) + self._state = f"{int(low)}-{int(high)}" else: self._state = round(temp, 1) diff --git a/homeassistant/components/nest/strings.json b/homeassistant/components/nest/strings.json index 5a70e3fd48d..015df164533 100644 --- a/homeassistant/components/nest/strings.json +++ b/homeassistant/components/nest/strings.json @@ -1,20 +1,15 @@ { "config": { - "title": "Nest", "step": { "init": { "title": "Authentication Provider", "description": "Pick via which authentication provider you want to authenticate with Nest.", - "data": { - "flow_impl": "Provider" - } + "data": { "flow_impl": "Provider" } }, "link": { "title": "Link Nest Account", "description": "To link your Nest account, [authorize your account]({url}).\n\nAfter authorization, copy-paste the provided pin code below.", - "data": { - "code": "Pin code" - } + "data": { "code": "Pin code" } } }, "error": { @@ -30,4 +25,4 @@ "authorize_url_fail": "Unknown error generating an authorize url." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/nest/translations/bg.json b/homeassistant/components/nest/translations/bg.json new file mode 100644 index 00000000000..c5b303e9cdd --- /dev/null +++ b/homeassistant/components/nest/translations/bg.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Nest \u0430\u043a\u0430\u0443\u043d\u0442.", + "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f.", + "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", + "no_flows": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Nest, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430", + "invalid_code": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043a\u043e\u0434", + "timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430 \u0438\u0437\u0442\u0435\u0447\u0435", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430." + }, + "step": { + "init": { + "data": { + "flow_impl": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" + }, + "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435, \u0447\u0440\u0435\u0437 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0441 Nest.", + "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" + }, + "link": { + "data": { + "code": "\u041f\u0418\u041d \u043a\u043e\u0434" + }, + "description": "\u0417\u0430 \u0434\u0430 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Nest, [\u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438]({url}). \n\n \u0421\u043b\u0435\u0434 \u043a\u0430\u0442\u043e \u0441\u0442\u0435 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0435, \u043a\u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u043e-\u0434\u043e\u043b\u0443 PIN \u043a\u043e\u0434.", + "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b \u0432 Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/ca.json b/homeassistant/components/nest/translations/ca.json new file mode 100644 index 00000000000..92fd386c5c3 --- /dev/null +++ b/homeassistant/components/nest/translations/ca.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte Nest.", + "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "no_flows": "Necessites configurar Nest abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Error intern al validar el codi", + "invalid_code": "Codi inv\u00e0lid", + "timeout": "S'ha acabat el temps d'espera durant la validaci\u00f3 del codi.", + "unknown": "Error desconegut al validar el codi" + }, + "step": { + "init": { + "data": { + "flow_impl": "Prove\u00efdor" + }, + "description": "Tria quin prove\u00efdor d'autenticaci\u00f3 vols utilitzar per autenticar-te amb Nest.", + "title": "Prove\u00efdor d'autenticaci\u00f3" + }, + "link": { + "data": { + "code": "Codi PIN" + }, + "description": "Per enlla\u00e7ar el teu compte de Nest, [autoritza el vostre compte]({url}). \n\nDespr\u00e9s de l'autoritzaci\u00f3, copia i enganxa el codi pin que es mostra a sota.", + "title": "Enlla\u00e7 amb el compte de Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/cs.json b/homeassistant/components/nest/translations/cs.json new file mode 100644 index 00000000000..82a894ffb3b --- /dev/null +++ b/homeassistant/components/nest/translations/cs.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "M\u016f\u017eete nastavit pouze jeden Nest \u00fa\u010det.", + "authorize_url_fail": "Nezn\u00e1m\u00e1 chyba p\u0159i generov\u00e1n\u00ed autoriza\u010dn\u00ed URL.", + "authorize_url_timeout": "\u010casov\u00fd limit autoriza\u010dn\u00ed URL vypr\u0161el", + "no_flows": "Pot\u0159ebujete nakonfigurovat Nest, abyste se s n\u00edm mohli autentizovat. [P\u0159e\u010dt\u011bte si pros\u00edm pokyny] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Intern\u00ed chyba ov\u011b\u0159en\u00ed k\u00f3du", + "invalid_code": "Neplatn\u00fd k\u00f3d", + "timeout": "\u010casov\u00fd limit ov\u011b\u0159ov\u00e1n\u00ed k\u00f3du vypr\u0161el", + "unknown": "Nezn\u00e1m\u00e1 chyba ov\u011b\u0159en\u00ed k\u00f3du" + }, + "step": { + "init": { + "data": { + "flow_impl": "Poskytovatel" + }, + "description": "Zvolte pomoc\u00ed kter\u00e9ho poskytovatele ov\u011b\u0159en\u00ed chcete ov\u011b\u0159it slu\u017ebu Nest.", + "title": "Poskytovatel ov\u011b\u0159en\u00ed" + }, + "link": { + "data": { + "code": "K\u00f3d PIN" + }, + "description": "Chcete-li propojit \u00fa\u010det Nest, [autorizujte sv\u016fj \u00fa\u010det]({url}). \n\n Po autorizaci zkop\u00edrujte n\u00ed\u017ee uveden\u00fd k\u00f3d PIN.", + "title": "Propojit s Nest \u00fa\u010dtem" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/da.json b/homeassistant/components/nest/translations/da.json new file mode 100644 index 00000000000..2666696f8d6 --- /dev/null +++ b/homeassistant/components/nest/translations/da.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt Nest konto.", + "authorize_url_fail": "Ukendt fejl ved generering af en autoriseret url.", + "authorize_url_timeout": "Timeout ved generering af autoriseret url.", + "no_flows": "Du skal konfigurere Nest f\u00f8r du kan autentificere med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Intern fejl ved validering af kode", + "invalid_code": "Ugyldig kode", + "timeout": "Timeout ved validering af kode", + "unknown": "Ukendt fejl ved validering af kode" + }, + "step": { + "init": { + "data": { + "flow_impl": "Udbyder" + }, + "description": "V\u00e6lg hvilken godkendelsesudbyder du vil godkende med Nest.", + "title": "Godkendelsesudbyder" + }, + "link": { + "data": { + "code": "PIN-kode" + }, + "description": "For at forbinde din Nest-konto, [godkend din konto]({url}). \n\nEfter godkendelse skal du kopiere pin koden nedenfor.", + "title": "Forbind Nest-konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/de.json b/homeassistant/components/nest/translations/de.json new file mode 100644 index 00000000000..27b9b398e78 --- /dev/null +++ b/homeassistant/components/nest/translations/de.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Du kannst nur ein einziges Nest-Konto konfigurieren.", + "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL", + "no_flows": "Du musst Nest konfigurieren, bevor du dich authentifizieren kannst. [Bitte lese die Anweisungen] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Ein interner Fehler ist aufgetreten", + "invalid_code": "Ung\u00fcltiger Code", + "timeout": "Ein zeit\u00fcberschreitungs Fehler ist aufgetreten", + "unknown": "Ein unbekannter Fehler ist aufgetreten" + }, + "step": { + "init": { + "data": { + "flow_impl": "Anbieter" + }, + "description": "W\u00e4hlen, \u00fcber welchen Authentifizierungsanbieter du dich bei Nest authentifizieren m\u00f6chtest.", + "title": "Authentifizierungsanbieter" + }, + "link": { + "data": { + "code": "PIN Code" + }, + "description": "[Autorisiere dein Konto] ( {url} ), um deinen Nest-Account zu verkn\u00fcpfen.\n\n F\u00fcge anschlie\u00dfend den erhaltenen PIN Code hier ein.", + "title": "Nest-Konto verkn\u00fcpfen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/en.json b/homeassistant/components/nest/translations/en.json new file mode 100644 index 00000000000..2ea9b419501 --- /dev/null +++ b/homeassistant/components/nest/translations/en.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure a single Nest account.", + "authorize_url_fail": "Unknown error generating an authorize url.", + "authorize_url_timeout": "Timeout generating authorize url.", + "no_flows": "You need to configure Nest before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Internal error validating code", + "invalid_code": "Invalid code", + "timeout": "Timeout validating code", + "unknown": "Unknown error validating code" + }, + "step": { + "init": { + "data": { + "flow_impl": "Provider" + }, + "description": "Pick via which authentication provider you want to authenticate with Nest.", + "title": "Authentication Provider" + }, + "link": { + "data": { + "code": "Pin code" + }, + "description": "To link your Nest account, [authorize your account]({url}).\n\nAfter authorization, copy-paste the provided pin code below.", + "title": "Link Nest Account" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/es-419.json b/homeassistant/components/nest/translations/es-419.json new file mode 100644 index 00000000000..d816813855c --- /dev/null +++ b/homeassistant/components/nest/translations/es-419.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puedes configurar una sola cuenta Nest.", + "authorize_url_fail": "Error desconocido al generar una URL de autorizaci\u00f3n.", + "no_flows": "Debe configurar Nest antes de poder autenticarse con \u00e9l. [Lea las instrucciones] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "invalid_code": "Codigo invalido", + "unknown": "Error desconocido al validar el c\u00f3digo" + }, + "step": { + "init": { + "data": { + "flow_impl": "Proveedor" + }, + "description": "Seleccione a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n desea autenticarse con Nest.", + "title": "Proveedor de autenticaci\u00f3n" + }, + "link": { + "data": { + "code": "C\u00f3digo PIN" + }, + "description": "Para vincular su cuenta Nest, [autorice su cuenta] ( {url} ). \n\n Despu\u00e9s de la autorizaci\u00f3n, copie y pegue el c\u00f3digo pin proporcionado a continuaci\u00f3n.", + "title": "Enlazar cuenta Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/es.json b/homeassistant/components/nest/translations/es.json new file mode 100644 index 00000000000..773a2d8c59c --- /dev/null +++ b/homeassistant/components/nest/translations/es.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3lo puedes configurar una \u00fanica cuenta de Nest.", + "authorize_url_fail": "Error desconocido generando la url de autorizaci\u00f3n", + "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n.", + "no_flows": "Debes configurar Nest antes de poder autenticarte con \u00e9l. [Lee las instrucciones](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Error interno validando el c\u00f3digo", + "invalid_code": "C\u00f3digo inv\u00e1lido", + "timeout": "Tiempo de espera agotado validando el c\u00f3digo", + "unknown": "Error desconocido validando el c\u00f3digo" + }, + "step": { + "init": { + "data": { + "flow_impl": "Proveedor" + }, + "description": "Elija a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n desea autenticarse con Nest.", + "title": "Proveedor de autenticaci\u00f3n" + }, + "link": { + "data": { + "code": "C\u00f3digo PIN" + }, + "description": "Para vincular tu cuenta de Nest, [autoriza tu cuenta]({url}).\n\nDespu\u00e9s de la autorizaci\u00f3n, copia y pega el c\u00f3digo pin a continuaci\u00f3n.", + "title": "Vincular cuenta de Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/et.json b/homeassistant/components/nest/translations/et.json new file mode 100644 index 00000000000..238ac5711f5 --- /dev/null +++ b/homeassistant/components/nest/translations/et.json @@ -0,0 +1,14 @@ +{ + "config": { + "error": { + "invalid_code": "Kehtetu kood" + }, + "step": { + "link": { + "data": { + "code": "PIN-kood" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/fr.json b/homeassistant/components/nest/translations/fr.json new file mode 100644 index 00000000000..6308098b9c1 --- /dev/null +++ b/homeassistant/components/nest/translations/fr.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Nest.", + "authorize_url_fail": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'une URL d'autorisation.", + "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", + "no_flows": "Vous devez configurer Nest avant de pouvoir vous authentifier avec celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Erreur interne lors de la validation du code", + "invalid_code": "Code invalide", + "timeout": "D\u00e9lai de la validation du code expir\u00e9", + "unknown": "Erreur inconnue lors de la validation du code" + }, + "step": { + "init": { + "data": { + "flow_impl": "Fournisseur" + }, + "description": "S\u00e9lectionnez via quel fournisseur d'authentification vous souhaitez vous authentifier avec Nest.", + "title": "Fournisseur d'authentification" + }, + "link": { + "data": { + "code": "Code PIN" + }, + "description": "Pour associer votre compte Nest, [autorisez votre compte]({url}). \n\n Apr\u00e8s autorisation, copiez-collez le code PIN fourni ci-dessous.", + "title": "Lier un compte Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/he.json b/homeassistant/components/nest/translations/he.json new file mode 100644 index 00000000000..a0ed6659865 --- /dev/null +++ b/homeassistant/components/nest/translations/he.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "\u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d7\u05e9\u05d1\u05d5\u05df Nest \u05d9\u05d7\u05d9\u05d3.", + "authorize_url_fail": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4 \u05d1\u05d9\u05e6\u05d9\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d9\u05de\u05d5\u05ea.", + "authorize_url_timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05e2\u05d1\u05d5\u05e8 \u05d9\u05e6\u05d9\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d9\u05de\u05d5\u05ea", + "no_flows": "\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Nest \u05dc\u05e4\u05e0\u05d9 \u05e9\u05ea\u05d5\u05db\u05dc \u05dc\u05d0\u05de\u05ea \u05d0\u05ea\u05d5. [\u05d0\u05e0\u05d0 \u05e7\u05e8\u05d0 \u05d0\u05ea \u05d4\u05d4\u05d5\u05e8\u05d0\u05d5\u05ea] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05e4\u05e0\u05d9\u05de\u05d9\u05ea \u05d1\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3", + "invalid_code": "\u05e7\u05d5\u05d3 \u05dc\u05d0 \u05ea\u05e7\u05d9\u05df", + "timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3", + "unknown": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4 \u05d1\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3" + }, + "step": { + "init": { + "data": { + "flow_impl": "\u05e1\u05e4\u05e7" + }, + "description": "\u05d1\u05d7\u05e8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05e1\u05e4\u05e7 \u05d4\u05d0\u05d9\u05de\u05d5\u05ea \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d0\u05de\u05ea \u05e2\u05dd Nest.", + "title": "\u05e1\u05e4\u05e7 \u05d0\u05d9\u05de\u05d5\u05ea" + }, + "link": { + "data": { + "code": "\u05e7\u05d5\u05d3 Pin" + }, + "description": "\u05db\u05d3\u05d9 \u05dc\u05e7\u05e9\u05e8 \u05d0\u05ea \u05d7\u05e9\u05d1\u05d5\u05df Nest \u05e9\u05dc\u05da, [\u05d0\u05de\u05ea \u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05e9\u05dc\u05da] ({url}). \n\n \u05dc\u05d0\u05d7\u05e8 \u05d4\u05d0\u05d9\u05e9\u05d5\u05e8, \u05d4\u05e2\u05ea\u05e7 \u05d0\u05ea \u05e7\u05d5\u05d3 \u05d4PIN \u05e9\u05e1\u05d5\u05e4\u05e7 \u05d5\u05d4\u05d3\u05d1\u05e7 \u05d0\u05d5\u05ea\u05d5 \u05dc\u05de\u05d8\u05d4.", + "title": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05e9\u05d1\u05d5\u05df Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/hr.json b/homeassistant/components/nest/translations/hr.json new file mode 100644 index 00000000000..d2418b00726 --- /dev/null +++ b/homeassistant/components/nest/translations/hr.json @@ -0,0 +1,20 @@ +{ + "config": { + "error": { + "invalid_code": "Neispravan kod" + }, + "step": { + "init": { + "data": { + "flow_impl": "Pru\u017eatelj usluge" + }, + "title": "Pru\u017eatelj usluge autentifikacije" + }, + "link": { + "data": { + "code": "PIN kod" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/hu.json b/homeassistant/components/nest/translations/hu.json new file mode 100644 index 00000000000..8ed8bcc843c --- /dev/null +++ b/homeassistant/components/nest/translations/hu.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Csak egy Nest-fi\u00f3kot konfigur\u00e1lhat.", + "authorize_url_fail": "Ismeretlen hiba t\u00f6rt\u00e9nt a hiteles\u00edt\u00e9si link gener\u00e1l\u00e1sa sor\u00e1n.", + "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n." + }, + "error": { + "internal_error": "Bels\u0151 hiba t\u00f6rt\u00e9nt a k\u00f3d valid\u00e1l\u00e1s\u00e1n\u00e1l", + "invalid_code": "\u00c9rv\u00e9nytelen k\u00f3d", + "timeout": "Id\u0151t\u00fall\u00e9p\u00e9s a k\u00f3d \u00e9rv\u00e9nyes\u00edt\u00e9se sor\u00e1n.", + "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt a k\u00f3d \u00e9rv\u00e9nyes\u00edt\u00e9se sor\u00e1n" + }, + "step": { + "init": { + "data": { + "flow_impl": "Szolg\u00e1ltat\u00f3" + }, + "description": "V\u00e1laszd ki, hogy melyik hiteles\u00edt\u00e9si szolg\u00e1ltat\u00f3n\u00e1l szeretn\u00e9d hiteles\u00edteni a Nestet.", + "title": "Hiteles\u00edt\u00e9si Szolg\u00e1ltat\u00f3" + }, + "link": { + "data": { + "code": "PIN-k\u00f3d" + }, + "description": "A Nest-fi\u00f3k \u00f6sszekapcsol\u00e1s\u00e1hoz [enged\u00e9lyezze fi\u00f3kj\u00e1t] ( {url} ). \n\n Az enged\u00e9lyez\u00e9s ut\u00e1n m\u00e1solja be az al\u00e1bbi PIN k\u00f3dot.", + "title": "Nest fi\u00f3k \u00f6sszekapcsol\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/id.json b/homeassistant/components/nest/translations/id.json new file mode 100644 index 00000000000..3a805baec05 --- /dev/null +++ b/homeassistant/components/nest/translations/id.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Anda hanya dapat mengonfigurasi satu akun Nest.", + "authorize_url_fail": "Kesalahan tidak dikenal terjadi ketika menghasilkan URL otorisasi.", + "authorize_url_timeout": "Waktu tunggu menghasilkan otorisasi url telah habis.", + "no_flows": "Anda harus mengonfigurasi Nest sebelum dapat mengautentikasi dengan Nest. [Silakan baca instruksi] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Kesalahan Internal memvalidasi kode", + "invalid_code": "Kode salah", + "timeout": "Waktu tunggu memvalidasi kode telah habis.", + "unknown": "Error tidak diketahui saat memvalidasi kode" + }, + "step": { + "init": { + "data": { + "flow_impl": "Penyedia" + }, + "description": "Pilih melalui penyedia autentikasi mana yang ingin Anda autentikasi dengan Nest.", + "title": "Penyedia Otentikasi" + }, + "link": { + "data": { + "code": "Kode PIN" + }, + "description": "Untuk menautkan akun Nest Anda, [beri kuasa akun Anda] ( {url} ). \n\n Setelah otorisasi, salin-tempel kode pin yang disediakan di bawah ini.", + "title": "Hubungkan Akun Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/it.json b/homeassistant/components/nest/translations/it.json new file mode 100644 index 00000000000..2e567a27ce1 --- /dev/null +++ b/homeassistant/components/nest/translations/it.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account Nest.", + "authorize_url_fail": "Errore sconosciuto nel generare l'url di autorizzazione", + "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", + "no_flows": "Devi configurare Nest prima di poter eseguire l'autenticazione. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Errore interno nella convalida del codice", + "invalid_code": "Codice non valido", + "timeout": "Tempo scaduto per l'inserimento del codice di convalida", + "unknown": "Errore sconosciuto durante la convalida del codice" + }, + "step": { + "init": { + "data": { + "flow_impl": "Provider" + }, + "description": "Scegli tramite quale provider di autenticazione desideri autenticarti con Nest.", + "title": "Fornitore di autenticazione" + }, + "link": { + "data": { + "code": "Codice PIN" + }, + "description": "Per collegare l'account Nido, [autorizzare l'account]({url}).\n\nDopo l'autorizzazione, copia-incolla il codice PIN fornito di seguito.", + "title": "Collega un account Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/ja.json b/homeassistant/components/nest/translations/ja.json new file mode 100644 index 00000000000..2efbf376648 --- /dev/null +++ b/homeassistant/components/nest/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "Nest" +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/ko.json b/homeassistant/components/nest/translations/ko.json new file mode 100644 index 00000000000..08c2f54ba7a --- /dev/null +++ b/homeassistant/components/nest/translations/ko.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "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." + }, + "error": { + "internal_error": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \ub0b4\ubd80 \uc624\ub958 \ubc1c\uc0dd", + "invalid_code": "\uc798\ubabb\ub41c \ucf54\ub4dc", + "timeout": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac \uc2dc\uac04 \ucd08\uacfc", + "unknown": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958 \ubc1c\uc0dd" + }, + "step": { + "init": { + "data": { + "flow_impl": "\uacf5\uae09\uc790" + }, + "description": "Nest \ub97c \uc778\uc99d\ud558\uae30 \uc704\ud55c \uc778\uc99d \uacf5\uae09\uc790\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", + "title": "\uc778\uc99d \uacf5\uae09\uc790" + }, + "link": { + "data": { + "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 PIN \ucf54\ub4dc\ub97c \ubcf5\uc0ac\ud558\uc5ec \ubd99\uc5ec\ub123\uc73c\uc138\uc694.", + "title": "Nest \uacc4\uc815 \uc5f0\uacb0" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/lb.json b/homeassistant/components/nest/translations/lb.json new file mode 100644 index 00000000000..526c258bb26 --- /dev/null +++ b/homeassistant/components/nest/translations/lb.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Nest Kont konfigur\u00e9ieren.", + "authorize_url_fail": "Onbekannte Feeler beim gener\u00e9ieren vun der Autorisatiouns URL.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "no_flows": "Dir musst Nest konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Interne Feeler beim valid\u00e9ieren vum Code", + "invalid_code": "Ong\u00ebltege Code", + "timeout": "Z\u00e4it Iwwerschreidung beim valid\u00e9ieren vum Code", + "unknown": "Onbekannte Feeler beim valid\u00e9ieren vum Code" + }, + "step": { + "init": { + "data": { + "flow_impl": "Ubidder" + }, + "description": "Wielt den Authentifikatioun Ubidder deen sech mat Nest verbanne soll.", + "title": "Authentifikatioun Ubidder" + }, + "link": { + "data": { + "code": "Pin code" + }, + "description": "Fir den Nest Kont ze verbannen, [autoris\u00e9iert \u00e4ren Kont]({url}).\nKop\u00e9iert no der Autorisatioun den Pin hei \u00ebnnendr\u00ebnner", + "title": "Nest Kont verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/nl.json b/homeassistant/components/nest/translations/nl.json new file mode 100644 index 00000000000..85775d06e21 --- /dev/null +++ b/homeassistant/components/nest/translations/nl.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Je kunt slechts \u00e9\u00e9n Nest-account configureren.", + "authorize_url_fail": "Onbekende fout bij het genereren van een autoriseer-URL.", + "authorize_url_timeout": "Toestemming voor het genereren van autoriseer-url.", + "no_flows": "U moet Nest configureren voordat u zich ermee kunt authenticeren. [Gelieve de instructies te lezen](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Interne foutvalidatiecode", + "invalid_code": "Ongeldige code", + "timeout": "Time-out validatie van code", + "unknown": "Onbekende foutvalidatiecode" + }, + "step": { + "init": { + "data": { + "flow_impl": "Leverancier" + }, + "description": "Kies met welke authenticatieleverancier u wilt verifi\u00ebren met Nest.", + "title": "Authenticatieleverancier" + }, + "link": { + "data": { + "code": "Pincode" + }, + "description": "Als je je Nest-account wilt koppelen, [autoriseer je account] ( {url} ). \n\nNa autorisatie, kopieer en plak de voorziene pincode hieronder.", + "title": "Koppel Nest-account" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/nn.json b/homeassistant/components/nest/translations/nn.json new file mode 100644 index 00000000000..a70720a3327 --- /dev/null +++ b/homeassistant/components/nest/translations/nn.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan berre konfiguere \u00e9in Nest-brukar.", + "authorize_url_fail": "Ukjent feil ved generering av autentiserings-URL", + "authorize_url_timeout": "Tida gjekk ut for generert autentikasjons-URL", + "no_flows": "Du m\u00e5 konfiguere Nest f\u00f8r du kan autentisere den. (Les instruksjonane) (https://www.home-assistant.io/components/nest/)" + }, + "error": { + "internal_error": "Intern feil ved validering av kode", + "invalid_code": "Ugyldig kode", + "timeout": "Tida gjekk ut for validering av kode", + "unknown": "Det hende ein ukjent feil ved validering av kode." + }, + "step": { + "init": { + "data": { + "flow_impl": "Leverand\u00f8r" + }, + "description": "Vel kva for ein autentiseringsleverand\u00f8r du vil godkjenne med Nest.", + "title": "Autentiseringsleverand\u00f8r" + }, + "link": { + "data": { + "code": "Pinkode" + }, + "description": "For \u00e5 linke Nestkontoen din, [autoriser kontoen din]{url}.\nEtter autentiseringa, kopier-lim inn koda du fekk under her.", + "title": "Link Nestkonto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/no.json b/homeassistant/components/nest/translations/no.json new file mode 100644 index 00000000000..0adab5dcdcd --- /dev/null +++ b/homeassistant/components/nest/translations/no.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bare konfigurere en Nest konto.", + "authorize_url_fail": "Ukjent feil ved generering av autoriseringsadresse.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "no_flows": "Du m\u00e5 konfigurere Nest f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Intern feil ved validering av kode", + "invalid_code": "Ugyldig kode", + "timeout": "Tidsavbrudd ved validering av kode", + "unknown": "Ukjent feil ved validering av kode" + }, + "step": { + "init": { + "data": { + "flow_impl": "Tilbyder" + }, + "description": "Velg via hvilken autentiseringstilbyder du vil godkjenne med Nest.", + "title": "Autentiseringstilbyder" + }, + "link": { + "data": { + "code": "PIN kode" + }, + "description": "For \u00e5 koble din Nest-konto, [autoriser kontoen din]({url}). \n\n Etter godkjenning, kopier og lim inn den oppgitte PIN koden nedenfor.", + "title": "Koble til Nest konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/pl.json b/homeassistant/components/nest/translations/pl.json new file mode 100644 index 00000000000..b5953decc6b --- /dev/null +++ b/homeassistant/components/nest/translations/pl.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Nest.", + "authorize_url_fail": "Nieznany b\u0142\u0105d podczas generowania url autoryzacji.", + "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", + "no_flows": "Musisz skonfigurowa\u0107 Nest, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Wewn\u0119trzny b\u0142\u0105d sprawdzania poprawno\u015bci kodu", + "invalid_code": "Nieprawid\u0142owy kod", + "timeout": "Przekroczono limit czasu sprawdzania poprawno\u015bci kodu.", + "unknown": "Nieznany b\u0142\u0105d sprawdzania poprawno\u015bci kodu" + }, + "step": { + "init": { + "data": { + "flow_impl": "Dostawca" + }, + "description": "Wybierz, kt\u00f3rego dostawc\u0119 uwierzytelnienia chcesz u\u017cywa\u0107 z Nest.", + "title": "Dostawca uwierzytelnienia" + }, + "link": { + "data": { + "code": "Kod PIN" + }, + "description": "Aby po\u0142\u0105czy\u0107 z kontem Nest, [wykonaj autoryzacj\u0119]({url}). \n\n Po autoryzacji skopiuj i wklej podany kod PIN poni\u017cej.", + "title": "Po\u0142\u0105cz z kontem Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/pt-BR.json b/homeassistant/components/nest/translations/pt-BR.json new file mode 100644 index 00000000000..2594540c6ea --- /dev/null +++ b/homeassistant/components/nest/translations/pt-BR.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Voc\u00ea pode configurar somente uma conta do Nest", + "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", + "authorize_url_timeout": "Excedido tempo limite de url de autoriza\u00e7\u00e3o", + "no_flows": "Voc\u00ea precisa configurar o Nest antes de poder autenticar com ele. [Por favor leio as instru\u00e7\u00f5es](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Erro interno ao validar o c\u00f3digo", + "invalid_code": "C\u00f3digo inv\u00e1lido", + "timeout": "Excedido tempo limite para validar c\u00f3digo", + "unknown": "Erro desconhecido ao validar o c\u00f3digo" + }, + "step": { + "init": { + "data": { + "flow_impl": "Provedor" + }, + "description": "Escolha atrav\u00e9s de qual provedor de autentica\u00e7\u00e3o voc\u00ea deseja autenticar com o Nest.", + "title": "Provedor de Autentica\u00e7\u00e3o" + }, + "link": { + "data": { + "code": "C\u00f3digo PIN" + }, + "description": "Para vincular sua conta do Nest, [autorize sua conta] ( {url} ). \n\n Ap\u00f3s a autoriza\u00e7\u00e3o, copie e cole o c\u00f3digo PIN fornecido abaixo.", + "title": "Link da conta Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/pt.json b/homeassistant/components/nest/translations/pt.json new file mode 100644 index 00000000000..f0e074aca2f --- /dev/null +++ b/homeassistant/components/nest/translations/pt.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3 pode configurar uma \u00fanica conta Nest.", + "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", + "authorize_url_timeout": "Limite temporal ultrapassado ao gerar um URL de autoriza\u00e7\u00e3o.", + "no_flows": "\u00c9 necess\u00e1rio configurar o Nest antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Erro interno ao validar o c\u00f3digo", + "invalid_code": "C\u00f3digo inv\u00e1lido", + "timeout": "Limite temporal ultrapassado ao validar c\u00f3digo", + "unknown": "Erro desconhecido ao validar o c\u00f3digo" + }, + "step": { + "init": { + "data": { + "flow_impl": "Fornecedor" + }, + "description": "Escolha com qual fornecedor de autentica\u00e7\u00e3o deseja autenticar o Nest.", + "title": "Fornecedor de Autentica\u00e7\u00e3o" + }, + "link": { + "data": { + "code": "C\u00f3digo PIN" + }, + "description": "Para associar \u00e0 sua conta Nest, [autorizar a sua conta]({url}).\n\nAp\u00f3s a autoriza\u00e7\u00e3o, copie e cole o c\u00f3digo pin fornecido abaixo.", + "title": "Associar conta Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/ro.json b/homeassistant/components/nest/translations/ro.json new file mode 100644 index 00000000000..afad668a98b --- /dev/null +++ b/homeassistant/components/nest/translations/ro.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "link": { + "data": { + "code": "Cod PIN" + }, + "title": "Leg\u0103tur\u0103 cont Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/ru.json b/homeassistant/components/nest/translations/ru.json new file mode 100644 index 00000000000..674a01556c5 --- /dev/null +++ b/homeassistant/components/nest/translations/ru.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Nest \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430.", + "invalid_code": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.", + "timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430." + }, + "step": { + "init": { + "data": { + "flow_impl": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0445\u043e\u0434.", + "title": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + }, + "link": { + "data": { + "code": "PIN-\u043a\u043e\u0434" + }, + "description": "[\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0439\u0442\u0435\u0441\u044c]({url}), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Nest. \n\n \u041f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043f\u0438\u043d-\u043a\u043e\u0434.", + "title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/sl.json b/homeassistant/components/nest/translations/sl.json new file mode 100644 index 00000000000..46b714b7299 --- /dev/null +++ b/homeassistant/components/nest/translations/sl.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Nastavite lahko samo en ra\u010dun Nest.", + "authorize_url_fail": "Neznana napaka pri generiranju potrditvenega URL-ja.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "no_flows": "Preden lahko preverite pristnost, morate konfigurirati Nest. [Preberite navodila](https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Notranja napaka pri preverjanju kode", + "invalid_code": "Neveljavna koda", + "timeout": "\u010casovna omejitev je potekla pri preverjanju kode", + "unknown": "Neznana napaka pri preverjanju kode" + }, + "step": { + "init": { + "data": { + "flow_impl": "Ponudnik" + }, + "description": "Izberite prek katerega ponudnika overjanja \u017eelite overiti Nest.", + "title": "Ponudnik za preverjanje pristnosti" + }, + "link": { + "data": { + "code": "PIN koda" + }, + "description": "\u010ce \u017eelite povezati svoj ra\u010dun Nest, [pooblastite svoj ra\u010dun]({url}). \n\n Po odobritvi kopirajte in prilepite podano kodo PIN.", + "title": "Pove\u017eite Nest ra\u010dun" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/sv.json b/homeassistant/components/nest/translations/sv.json new file mode 100644 index 00000000000..f5f165e37e9 --- /dev/null +++ b/homeassistant/components/nest/translations/sv.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan endast konfigurera ett Nest-konto.", + "authorize_url_fail": "Ok\u00e4nt fel vid generering av autentisieringsadress.", + "authorize_url_timeout": "Timeout vid generering av en autentisieringsadress.", + "no_flows": "Du m\u00e5ste konfigurera Nest innan du kan autentisera med det. [V\u00e4nligen l\u00e4s instruktionerna] (https://www.home-assistant.io/components/nest/)." + }, + "error": { + "internal_error": "Internt fel vid validering av kod", + "invalid_code": "Ogiltig kod", + "timeout": "Timeout vid valididering av kod", + "unknown": "Ok\u00e4nt fel vid validering av kod" + }, + "step": { + "init": { + "data": { + "flow_impl": "Leverant\u00f6r" + }, + "description": "V\u00e4lj den autentiseringsleverant\u00f6r som du vill autentisera med mot Nest.", + "title": "Autentiseringsleverant\u00f6r" + }, + "link": { + "data": { + "code": "Pin-kod" + }, + "description": "F\u00f6r att l\u00e4nka ditt Nest-konto, [autentisiera ditt konto]({url}). \n\nEfter autentisiering, klipp och klistra in den angivna pin-koden nedan.", + "title": "L\u00e4nka Nest-konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/th.json b/homeassistant/components/nest/translations/th.json new file mode 100644 index 00000000000..6a434860c08 --- /dev/null +++ b/homeassistant/components/nest/translations/th.json @@ -0,0 +1,14 @@ +{ + "config": { + "error": { + "invalid_code": "\u0e23\u0e2b\u0e31\u0e2a\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07" + }, + "step": { + "link": { + "data": { + "code": "Pin code" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/vi.json b/homeassistant/components/nest/translations/vi.json new file mode 100644 index 00000000000..4eb8677762a --- /dev/null +++ b/homeassistant/components/nest/translations/vi.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "internal_error": "M\u00e3 x\u00e1c th\u1ef1c l\u1ed7i n\u1ed9i b\u1ed9", + "invalid_code": "M\u00e3 kh\u00f4ng h\u1ee3p l\u1ec7", + "timeout": "M\u00e3 x\u00e1c th\u1ef1c h\u1ebft th\u1eddi gian ch\u1edd", + "unknown": "M\u00e3 x\u00e1c th\u1ef1c l\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh" + }, + "step": { + "init": { + "data": { + "flow_impl": "Nh\u00e0 cung c\u1ea5p" + }, + "title": "Nh\u00e0 cung c\u1ea5p x\u00e1c th\u1ef1c" + }, + "link": { + "title": "Li\u00ean k\u1ebft t\u00e0i kho\u1ea3n Nest" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/zh-Hans.json b/homeassistant/components/nest/translations/zh-Hans.json new file mode 100644 index 00000000000..ce0824075b2 --- /dev/null +++ b/homeassistant/components/nest/translations/zh-Hans.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "\u60a8\u53ea\u80fd\u914d\u7f6e\u4e00\u4e2a Nest \u5e10\u6237\u3002", + "authorize_url_fail": "\u751f\u6210\u6388\u6743\u7f51\u5740\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002", + "authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002", + "no_flows": "\u60a8\u9700\u8981\u5148\u914d\u7f6e Nest\uff0c\u7136\u540e\u624d\u80fd\u5bf9\u5176\u8fdb\u884c\u6388\u6743\u3002 [\u8bf7\u9605\u8bfb\u8bf4\u660e](https://www.home-assistant.io/components/nest/)\u3002" + }, + "error": { + "internal_error": "\u9a8c\u8bc1\u4ee3\u7801\u65f6\u53d1\u751f\u5185\u90e8\u9519\u8bef", + "invalid_code": "\u9a8c\u8bc1\u7801\u65e0\u6548", + "timeout": "\u9a8c\u8bc1\u7801\u8d85\u65f6", + "unknown": "\u9a8c\u8bc1\u7801\u672a\u77e5\u9519\u8bef" + }, + "step": { + "init": { + "data": { + "flow_impl": "\u8ba4\u8bc1\u63d0\u4f9b\u8005" + }, + "description": "\u9009\u62e9\u60a8\u60f3\u901a\u8fc7\u54ea\u4e2a\u6388\u6743\u63d0\u4f9b\u8005\u4e0e Nest \u8fdb\u884c\u6388\u6743\u3002", + "title": "\u6388\u6743\u63d0\u4f9b\u8005" + }, + "link": { + "data": { + "code": "PIN \u7801" + }, + "description": "\u8981\u5173\u8054 Nest \u8d26\u6237\uff0c\u8bf7[\u6388\u6743\u8d26\u6237]({url})\u3002\n\n\u5b8c\u6210\u6388\u6743\u540e\uff0c\u5728\u4e0b\u9762\u7c98\u8d34\u83b7\u5f97\u7684 PIN \u7801\u3002", + "title": "\u5173\u8054 Nest \u8d26\u6237" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nest/translations/zh-Hant.json b/homeassistant/components/nest/translations/zh-Hant.json new file mode 100644 index 00000000000..3d8e88d2d04 --- /dev/null +++ b/homeassistant/components/nest/translations/zh-Hant.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Nest \u5e33\u865f\u3002", + "authorize_url_fail": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", + "no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Nest \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/nest/)\u3002" + }, + "error": { + "internal_error": "\u8a8d\u8b49\u78bc\u5167\u90e8\u932f\u8aa4", + "invalid_code": "\u8a8d\u8b49\u78bc\u7121\u6548", + "timeout": "\u8a8d\u8b49\u78bc\u903e\u6642", + "unknown": "\u8a8d\u8b49\u78bc\u672a\u77e5\u932f\u8aa4" + }, + "step": { + "init": { + "data": { + "flow_impl": "\u8a8d\u8b49\u63d0\u4f9b\u8005" + }, + "description": "\u65bc\u8a8d\u8b49\u63d0\u4f9b\u8005\u4e2d\u6311\u9078\u6240\u8981\u9032\u884c Nest \u8a8d\u8b49\u63d0\u4f9b\u8005\u3002", + "title": "\u8a8d\u8b49\u63d0\u4f9b\u8005" + }, + "link": { + "data": { + "code": "PIN \u78bc" + }, + "description": "\u6b32\u9023\u7d50 Nest \u5e33\u865f\uff0c[\u8a8d\u8b49\u5e33\u865f]({url}).\n\n\u65bc\u8a8d\u8b49\u5f8c\uff0c\u8907\u88fd\u4e26\u8cbc\u4e0a\u4e0b\u65b9\u7684\u8a8d\u8b49\u78bc\u3002", + "title": "\u9023\u7d50 Nest \u5e33\u865f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/ca.json b/homeassistant/components/netatmo/.translations/ca.json deleted file mode 100644 index 63de8699f35..00000000000 --- a/homeassistant/components/netatmo/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte Netatmo.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "missing_configuration": "El component Netatmo no est\u00e0 configurat. Mira'n la documentaci\u00f3." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/da.json b/homeassistant/components/netatmo/.translations/da.json deleted file mode 100644 index 8fec2890881..00000000000 --- a/homeassistant/components/netatmo/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere \u00e9n Netatmo-konto.", - "authorize_url_timeout": "Timeout ved generering af godkendelses-url.", - "missing_configuration": "Netatmo-komponenten er ikke konfigureret. F\u00f8lg venligst dokumentationen." - }, - "create_entry": { - "default": "Korrekt godkendt med Netatmo." - }, - "step": { - "pick_implementation": { - "title": "V\u00e6lg godkendelsesmetode" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/de.json b/homeassistant/components/netatmo/.translations/de.json deleted file mode 100644 index 57e717429c4..00000000000 --- a/homeassistant/components/netatmo/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kannst nur ein einziges Netatmo-Konto konfigurieren.", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", - "missing_configuration": "Die Netatmo-Komponente ist nicht konfiguriert. Folge bitte der Dokumentation." - }, - "create_entry": { - "default": "Erfolgreich mit Netatmo authentifiziert." - }, - "step": { - "pick_implementation": { - "title": "W\u00e4hle die Authentifizierungsmethode" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/en.json b/homeassistant/components/netatmo/.translations/en.json deleted file mode 100644 index 9d69a3ece50..00000000000 --- a/homeassistant/components/netatmo/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure one Netatmo account.", - "authorize_url_timeout": "Timeout generating authorize url.", - "missing_configuration": "The Netatmo component is not configured. Please follow the documentation." - }, - "create_entry": { - "default": "Successfully authenticated with Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/es.json b/homeassistant/components/netatmo/.translations/es.json deleted file mode 100644 index 7e39574d492..00000000000 --- a/homeassistant/components/netatmo/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puede configurar una cuenta de Netatmo.", - "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", - "missing_configuration": "El componente Netatmo no est\u00e1 configurado. Por favor, siga la documentaci\u00f3n." - }, - "create_entry": { - "default": "Autenticado con \u00e9xito con Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Seleccione el m\u00e9todo de autenticaci\u00f3n" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/fr.json b/homeassistant/components/netatmo/.translations/fr.json deleted file mode 100644 index 23f0bca1087..00000000000 --- a/homeassistant/components/netatmo/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Netatmo.", - "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", - "missing_configuration": "Le composant Netatmo n'est pas configur\u00e9. Veuillez suivre la documentation." - }, - "create_entry": { - "default": "Authentification r\u00e9ussie avec Netatmo." - }, - "step": { - "pick_implementation": { - "title": "S\u00e9lectionner une m\u00e9thode d'authentification" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/hu.json b/homeassistant/components/netatmo/.translations/hu.json deleted file mode 100644 index 9994e527f01..00000000000 --- a/homeassistant/components/netatmo/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Csak egy Netatmo-fi\u00f3kot \u00e1ll\u00edthatsz be.", - "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n." - }, - "create_entry": { - "default": "A Netatmo sikeresen hiteles\u00edtett." - }, - "step": { - "pick_implementation": { - "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/it.json b/homeassistant/components/netatmo/.translations/it.json deleted file mode 100644 index f3e3dafcba4..00000000000 --- a/homeassistant/components/netatmo/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account Netatmo.", - "authorize_url_timeout": "Timeout durante la generazione dell'URL di autorizzazione.", - "missing_configuration": "Il componente Netatmo non \u00e8 configurato. Si prega di seguire la documentazione." - }, - "create_entry": { - "default": "Autenticato con successo con Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Scegli il metodo di autenticazione" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/ko.json b/homeassistant/components/netatmo/.translations/ko.json deleted file mode 100644 index e360c16d69c..00000000000 --- a/homeassistant/components/netatmo/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "create_entry": { - "default": "Netatmo \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "pick_implementation": { - "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/lb.json b/homeassistant/components/netatmo/.translations/lb.json deleted file mode 100644 index b7e3a18bdae..00000000000 --- a/homeassistant/components/netatmo/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Netatmo Kont konfigur\u00e9ieren.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "missing_configuration": "Netatmo Komponent ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Netatmo authentifiz\u00e9iert." - }, - "step": { - "pick_implementation": { - "title": "Wielt Authentifikatiouns Method aus" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/nl.json b/homeassistant/components/netatmo/.translations/nl.json deleted file mode 100644 index 5f5fe375117..00000000000 --- a/homeassistant/components/netatmo/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n Netatmo account configureren.", - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "missing_configuration": "De Netatmo-component is niet geconfigureerd. Gelieve de documentatie volgen." - }, - "create_entry": { - "default": "Succesvol geauthenticeerd met Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Kies een authenticatie methode" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/no.json b/homeassistant/components/netatmo/.translations/no.json deleted file mode 100644 index 98e5a7eb352..00000000000 --- a/homeassistant/components/netatmo/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en Netatmo-konto.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "missing_configuration": "Netatmo-komponenten er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen." - }, - "create_entry": { - "default": "Vellykket autentisering med Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Velg autentiseringsmetode" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/pl.json b/homeassistant/components/netatmo/.translations/pl.json deleted file mode 100644 index 35da44a9680..00000000000 --- a/homeassistant/components/netatmo/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Netatmo.", - "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", - "missing_configuration": "Komponent Netatmo nie jest skonfigurowany. Post\u0119puj zgodnie z dokumentacj\u0105." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Wybierz metod\u0119 uwierzytelniania" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/ru.json b/homeassistant/components/netatmo/.translations/ru.json deleted file mode 100644 index c34fb331ceb..00000000000 --- a/homeassistant/components/netatmo/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Netatmo \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "step": { - "pick_implementation": { - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/sl.json b/homeassistant/components/netatmo/.translations/sl.json deleted file mode 100644 index 5288c84e44b..00000000000 --- a/homeassistant/components/netatmo/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Konfigurirate lahko samo en ra\u010dun Netatmo.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "missing_configuration": "Komponenta Netatmo ni konfigurirana. Prosimo, upo\u0161tevajte dokumentacijo." - }, - "create_entry": { - "default": "Uspe\u0161no overjeno z Netatmo." - }, - "step": { - "pick_implementation": { - "title": "Izberite na\u010din preverjanja pristnosti" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/sv.json b/homeassistant/components/netatmo/.translations/sv.json deleted file mode 100644 index 2047bce5b17..00000000000 --- a/homeassistant/components/netatmo/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan endast konfigurera ett Netatmo-konto.", - "authorize_url_timeout": "Timeout vid generering av en auktoriserings-URL.", - "missing_configuration": "Netatmo-komponenten har inte konfigurerats. F\u00f6lj dokumentationen." - }, - "create_entry": { - "default": "Autentiserad med Netatmo." - }, - "step": { - "pick_implementation": { - "title": "V\u00e4lj autentiseringsmetod" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/zh-Hant.json b/homeassistant/components/netatmo/.translations/zh-Hant.json deleted file mode 100644 index 24124e6fb35..00000000000 --- a/homeassistant/components/netatmo/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Netatmo \u5e33\u865f\u3002", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", - "missing_configuration": "Netatmo \u5143\u4ef6\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Netatmo \u8a2d\u5099\u3002" - }, - "step": { - "pick_implementation": { - "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" - } - }, - "title": "Netatmo" - } -} \ No newline at end of file diff --git a/homeassistant/components/netatmo/climate.py b/homeassistant/components/netatmo/climate.py index fe6526a16eb..eb4ec52c0f9 100644 --- a/homeassistant/components/netatmo/climate.py +++ b/homeassistant/components/netatmo/climate.py @@ -386,11 +386,12 @@ class NetatmoThermostat(ClimateDevice): ) self._connected = True except KeyError as err: - _LOGGER.debug( - "The thermostat in room %s seems to be out of reach. (%s)", - self._room_name, - err, - ) + if self._connected is not False: + _LOGGER.debug( + "The thermostat in room %s seems to be out of reach. (%s)", + self._room_name, + err, + ) self._connected = False self._away = self._hvac_mode == HVAC_MAP_NETATMO[STATE_NETATMO_AWAY] diff --git a/homeassistant/components/netatmo/manifest.json b/homeassistant/components/netatmo/manifest.json index 6e1c3d9f8f4..ff92fd93554 100644 --- a/homeassistant/components/netatmo/manifest.json +++ b/homeassistant/components/netatmo/manifest.json @@ -2,24 +2,12 @@ "domain": "netatmo", "name": "Netatmo", "documentation": "https://www.home-assistant.io/integrations/netatmo", - "requirements": [ - "pyatmo==3.3.0" - ], - "after_dependencies": [ - "cloud" - ], - "dependencies": [ - "webhook" - ], - "codeowners": [ - "@cgtobi" - ], + "requirements": ["pyatmo==3.3.0"], + "after_dependencies": ["cloud"], + "dependencies": ["webhook"], + "codeowners": ["@cgtobi"], "config_flow": true, "homekit": { - "models": [ - "Netatmo Relay", - "Presence", - "Welcome" - ] + "models": ["Healty Home Coach", "Netatmo Relay", "Presence", "Welcome"] } -} \ No newline at end of file +} diff --git a/homeassistant/components/netatmo/sensor.py b/homeassistant/components/netatmo/sensor.py index fcddf58daaa..327d9ecc52f 100644 --- a/homeassistant/components/netatmo/sensor.py +++ b/homeassistant/components/netatmo/sensor.py @@ -220,6 +220,11 @@ class NetatmoSensor(Entity): """Return the unique ID for this sensor.""" return self._unique_id + @property + def available(self): + """Return True if entity is available.""" + return self._state is not None + def update(self): """Get the latest data from Netatmo API and updates the states.""" self.netatmo_data.update() @@ -233,10 +238,11 @@ class NetatmoSensor(Entity): data = self.netatmo_data.data.get(self._module_id) if data is None: - _LOGGER.debug( - "No data found for %s (%s)", self.module_name, self._module_id - ) - _LOGGER.debug("data: %s", self.netatmo_data.data) + if self._state: + _LOGGER.debug( + "No data found for %s (%s)", self.module_name, self._module_id + ) + _LOGGER.debug("data: %s", self.netatmo_data.data) self._state = None return @@ -391,7 +397,8 @@ class NetatmoSensor(Entity): elif data["health_idx"] == 4: self._state = "Unhealthy" except KeyError: - _LOGGER.info("No %s data found for %s", self.type, self.module_name) + if self._state: + _LOGGER.info("No %s data found for %s", self.type, self.module_name) self._state = None return diff --git a/homeassistant/components/netatmo/strings.json b/homeassistant/components/netatmo/strings.json index 8cd4f51aee2..e25ca1e5849 100644 --- a/homeassistant/components/netatmo/strings.json +++ b/homeassistant/components/netatmo/strings.json @@ -1,18 +1,13 @@ { "config": { - "title": "Netatmo", "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - } + "pick_implementation": { "title": "Pick Authentication Method" } }, "abort": { "already_setup": "You can only configure one Netatmo account.", "authorize_url_timeout": "Timeout generating authorize url.", "missing_configuration": "The Netatmo component is not configured. Please follow the documentation." }, - "create_entry": { - "default": "Successfully authenticated with Netatmo." - } + "create_entry": { "default": "Successfully authenticated with Netatmo." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/netatmo/translations/ca.json b/homeassistant/components/netatmo/translations/ca.json new file mode 100644 index 00000000000..4cfd8e27cf7 --- /dev/null +++ b/homeassistant/components/netatmo/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte Netatmo.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "missing_configuration": "El component Netatmo no est\u00e0 configurat. Mira'n la documentaci\u00f3." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/.translations/cs.json b/homeassistant/components/netatmo/translations/cs.json similarity index 100% rename from homeassistant/components/netatmo/.translations/cs.json rename to homeassistant/components/netatmo/translations/cs.json diff --git a/homeassistant/components/netatmo/translations/da.json b/homeassistant/components/netatmo/translations/da.json new file mode 100644 index 00000000000..1f35d3466ce --- /dev/null +++ b/homeassistant/components/netatmo/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere \u00e9n Netatmo-konto.", + "authorize_url_timeout": "Timeout ved generering af godkendelses-url.", + "missing_configuration": "Netatmo-komponenten er ikke konfigureret. F\u00f8lg venligst dokumentationen." + }, + "create_entry": { + "default": "Korrekt godkendt med Netatmo." + }, + "step": { + "pick_implementation": { + "title": "V\u00e6lg godkendelsesmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/de.json b/homeassistant/components/netatmo/translations/de.json new file mode 100644 index 00000000000..0a8d187e50d --- /dev/null +++ b/homeassistant/components/netatmo/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kannst nur ein einziges Netatmo-Konto konfigurieren.", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", + "missing_configuration": "Die Netatmo-Komponente ist nicht konfiguriert. Folge bitte der Dokumentation." + }, + "create_entry": { + "default": "Erfolgreich mit Netatmo authentifiziert." + }, + "step": { + "pick_implementation": { + "title": "W\u00e4hle die Authentifizierungsmethode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/en.json b/homeassistant/components/netatmo/translations/en.json new file mode 100644 index 00000000000..1e23982e0a9 --- /dev/null +++ b/homeassistant/components/netatmo/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure one Netatmo account.", + "authorize_url_timeout": "Timeout generating authorize url.", + "missing_configuration": "The Netatmo component is not configured. Please follow the documentation." + }, + "create_entry": { + "default": "Successfully authenticated with Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Pick Authentication Method" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/es.json b/homeassistant/components/netatmo/translations/es.json new file mode 100644 index 00000000000..d157a746068 --- /dev/null +++ b/homeassistant/components/netatmo/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puede configurar una cuenta de Netatmo.", + "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", + "missing_configuration": "El componente Netatmo no est\u00e1 configurado. Por favor, siga la documentaci\u00f3n." + }, + "create_entry": { + "default": "Autenticado con \u00e9xito con Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Seleccione el m\u00e9todo de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/fr.json b/homeassistant/components/netatmo/translations/fr.json new file mode 100644 index 00000000000..d2d67e0e510 --- /dev/null +++ b/homeassistant/components/netatmo/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Netatmo.", + "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", + "missing_configuration": "Le composant Netatmo n'est pas configur\u00e9. Veuillez suivre la documentation." + }, + "create_entry": { + "default": "Authentification r\u00e9ussie avec Netatmo." + }, + "step": { + "pick_implementation": { + "title": "S\u00e9lectionner une m\u00e9thode d'authentification" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/hu.json b/homeassistant/components/netatmo/translations/hu.json new file mode 100644 index 00000000000..e71b6a20b24 --- /dev/null +++ b/homeassistant/components/netatmo/translations/hu.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "already_setup": "Csak egy Netatmo-fi\u00f3kot \u00e1ll\u00edthatsz be.", + "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n." + }, + "create_entry": { + "default": "A Netatmo sikeresen hiteles\u00edtett." + }, + "step": { + "pick_implementation": { + "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/it.json b/homeassistant/components/netatmo/translations/it.json new file mode 100644 index 00000000000..e7d410a1d86 --- /dev/null +++ b/homeassistant/components/netatmo/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account Netatmo.", + "authorize_url_timeout": "Timeout durante la generazione dell'URL di autorizzazione.", + "missing_configuration": "Il componente Netatmo non \u00e8 configurato. Si prega di seguire la documentazione." + }, + "create_entry": { + "default": "Autenticato con successo con Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Scegli il metodo di autenticazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/ko.json b/homeassistant/components/netatmo/translations/ko.json new file mode 100644 index 00000000000..624298c04e5 --- /dev/null +++ b/homeassistant/components/netatmo/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "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." + }, + "create_entry": { + "default": "Netatmo \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "pick_implementation": { + "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/lb.json b/homeassistant/components/netatmo/translations/lb.json new file mode 100644 index 00000000000..7332643a4f3 --- /dev/null +++ b/homeassistant/components/netatmo/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Netatmo Kont konfigur\u00e9ieren.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "missing_configuration": "Netatmo Komponent ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Netatmo authentifiz\u00e9iert." + }, + "step": { + "pick_implementation": { + "title": "Wielt Authentifikatiouns Method aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/nl.json b/homeassistant/components/netatmo/translations/nl.json new file mode 100644 index 00000000000..dd23b6ac429 --- /dev/null +++ b/homeassistant/components/netatmo/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n Netatmo account configureren.", + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "missing_configuration": "De Netatmo-component is niet geconfigureerd. Gelieve de documentatie volgen." + }, + "create_entry": { + "default": "Succesvol geauthenticeerd met Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Kies een authenticatie methode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/no.json b/homeassistant/components/netatmo/translations/no.json new file mode 100644 index 00000000000..582dc1037b8 --- /dev/null +++ b/homeassistant/components/netatmo/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en Netatmo-konto.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "missing_configuration": "Netatmo-komponenten er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen." + }, + "create_entry": { + "default": "Vellykket autentisering med Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Velg autentiseringsmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/pl.json b/homeassistant/components/netatmo/translations/pl.json new file mode 100644 index 00000000000..a4d4d1b9831 --- /dev/null +++ b/homeassistant/components/netatmo/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Netatmo.", + "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", + "missing_configuration": "Komponent Netatmo nie jest skonfigurowany. Post\u0119puj zgodnie z dokumentacj\u0105." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Wybierz metod\u0119 uwierzytelniania" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/ru.json b/homeassistant/components/netatmo/translations/ru.json new file mode 100644 index 00000000000..8de4e5bcb98 --- /dev/null +++ b/homeassistant/components/netatmo/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Netatmo \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "step": { + "pick_implementation": { + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/sl.json b/homeassistant/components/netatmo/translations/sl.json new file mode 100644 index 00000000000..231db98bd54 --- /dev/null +++ b/homeassistant/components/netatmo/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Konfigurirate lahko samo en ra\u010dun Netatmo.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "missing_configuration": "Komponenta Netatmo ni konfigurirana. Prosimo, upo\u0161tevajte dokumentacijo." + }, + "create_entry": { + "default": "Uspe\u0161no overjeno z Netatmo." + }, + "step": { + "pick_implementation": { + "title": "Izberite na\u010din preverjanja pristnosti" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/sv.json b/homeassistant/components/netatmo/translations/sv.json new file mode 100644 index 00000000000..2557123da33 --- /dev/null +++ b/homeassistant/components/netatmo/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan endast konfigurera ett Netatmo-konto.", + "authorize_url_timeout": "Timeout vid generering av en auktoriserings-URL.", + "missing_configuration": "Netatmo-komponenten har inte konfigurerats. F\u00f6lj dokumentationen." + }, + "create_entry": { + "default": "Autentiserad med Netatmo." + }, + "step": { + "pick_implementation": { + "title": "V\u00e4lj autentiseringsmetod" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netatmo/translations/zh-Hant.json b/homeassistant/components/netatmo/translations/zh-Hant.json new file mode 100644 index 00000000000..eba134e1566 --- /dev/null +++ b/homeassistant/components/netatmo/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Netatmo \u5e33\u865f\u3002", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", + "missing_configuration": "Netatmo \u5143\u4ef6\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Netatmo \u8a2d\u5099\u3002" + }, + "step": { + "pick_implementation": { + "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/netdata/manifest.json b/homeassistant/components/netdata/manifest.json index cfddfe9d208..d1394f5526f 100644 --- a/homeassistant/components/netdata/manifest.json +++ b/homeassistant/components/netdata/manifest.json @@ -3,6 +3,5 @@ "name": "Netdata", "documentation": "https://www.home-assistant.io/integrations/netdata", "requirements": ["netdata==0.1.2"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/netgear/manifest.json b/homeassistant/components/netgear/manifest.json index c5685411045..1126bbe558f 100644 --- a/homeassistant/components/netgear/manifest.json +++ b/homeassistant/components/netgear/manifest.json @@ -3,6 +3,5 @@ "name": "NETGEAR", "documentation": "https://www.home-assistant.io/integrations/netgear", "requirements": ["pynetgear==0.6.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/netgear_lte/__init__.py b/homeassistant/components/netgear_lte/__init__.py index ac36cc1eb44..aedfe9018f7 100644 --- a/homeassistant/components/netgear_lte/__init__.py +++ b/homeassistant/components/netgear_lte/__init__.py @@ -352,8 +352,10 @@ class LTEEntity(Entity): async def async_added_to_hass(self): """Register callback.""" - async_dispatcher_connect( - self.hass, DISPATCHER_NETGEAR_LTE, self.async_write_ha_state + self.async_on_remove( + async_dispatcher_connect( + self.hass, DISPATCHER_NETGEAR_LTE, self.async_write_ha_state + ) ) async def async_update(self): diff --git a/homeassistant/components/netgear_lte/manifest.json b/homeassistant/components/netgear_lte/manifest.json index 43cf6e34480..9f91a3a66c0 100644 --- a/homeassistant/components/netgear_lte/manifest.json +++ b/homeassistant/components/netgear_lte/manifest.json @@ -3,6 +3,5 @@ "name": "NETGEAR LTE", "documentation": "https://www.home-assistant.io/integrations/netgear_lte", "requirements": ["eternalegypt==0.0.11"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/netio/switch.py b/homeassistant/components/netio/switch.py index 4c9b6343f2b..6baa3a63f9f 100644 --- a/homeassistant/components/netio/switch.py +++ b/homeassistant/components/netio/switch.py @@ -92,7 +92,6 @@ class NetioApiView(HomeAssistantView): @callback def get(self, request, host): """Request handler.""" - hass = request.app["hass"] data = request.query states, consumptions, cumulated_consumptions, start_dates = [], [], [], [] @@ -121,7 +120,7 @@ class NetioApiView(HomeAssistantView): ndev.start_dates = start_dates for dev in DEVICES[host].entities: - hass.async_create_task(dev.async_update_ha_state()) + dev.async_write_ha_state() return self.json(True) diff --git a/homeassistant/components/neurio_energy/manifest.json b/homeassistant/components/neurio_energy/manifest.json index 06b8b6bce83..bba814966df 100644 --- a/homeassistant/components/neurio_energy/manifest.json +++ b/homeassistant/components/neurio_energy/manifest.json @@ -3,6 +3,5 @@ "name": "Neurio energy", "documentation": "https://www.home-assistant.io/integrations/neurio_energy", "requirements": ["neurio==0.3.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/nexia/.translations/ca.json b/homeassistant/components/nexia/.translations/ca.json deleted file mode 100644 index 005edb82b59..00000000000 --- a/homeassistant/components/nexia/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest dispositiu nexia home ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "title": "Connexi\u00f3 amb mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/de.json b/homeassistant/components/nexia/.translations/de.json deleted file mode 100644 index bda92cc7fe3..00000000000 --- a/homeassistant/components/nexia/.translations/de.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses Nexia Home ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername" - }, - "title": "Stellen Sie eine Verbindung zu mynexia.com her" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/en.json b/homeassistant/components/nexia/.translations/en.json deleted file mode 100644 index c6dcaed91f8..00000000000 --- a/homeassistant/components/nexia/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This nexia home is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username" - }, - "title": "Connect to mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/es.json b/homeassistant/components/nexia/.translations/es.json deleted file mode 100644 index 836c6b514c2..00000000000 --- a/homeassistant/components/nexia/.translations/es.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este nexia home ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario" - }, - "title": "Conectar con mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/fr.json b/homeassistant/components/nexia/.translations/fr.json deleted file mode 100644 index 653cc0b3f04..00000000000 --- a/homeassistant/components/nexia/.translations/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cette maison Nexia est d\u00e9j\u00e0 configur\u00e9e" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification non valide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "title": "Se connecter \u00e0 mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/it.json b/homeassistant/components/nexia/.translations/it.json deleted file mode 100644 index 5fdd9a6095e..00000000000 --- a/homeassistant/components/nexia/.translations/it.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo Nexia Home \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome utente" - }, - "title": "Connettersi a mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/ko.json b/homeassistant/components/nexia/.translations/ko.json deleted file mode 100644 index daabbe77ea7..00000000000 --- a/homeassistant/components/nexia/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "nexia home \uc774 \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": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "title": "mynexia.com \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/lb.json b/homeassistant/components/nexia/.translations/lb.json deleted file mode 100644 index ae80d218786..00000000000 --- a/homeassistant/components/nexia/.translations/lb.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den Nexia Home ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm" - }, - "title": "Mat mynexia.com verbannen" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/no.json b/homeassistant/components/nexia/.translations/no.json deleted file mode 100644 index 84dbcf5b503..00000000000 --- a/homeassistant/components/nexia/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dette nexia hjem er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn" - }, - "title": "Koble til mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/ru.json b/homeassistant/components/nexia/.translations/ru.json deleted file mode 100644 index a294518a777..00000000000 --- a/homeassistant/components/nexia/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/zh-Hant.json b/homeassistant/components/nexia/.translations/zh-Hant.json deleted file mode 100644 index 7a768c1ed21..00000000000 --- a/homeassistant/components/nexia/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Nexia home \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "title": "\u9023\u7dda\u81f3 mynexia.com" - } - }, - "title": "Nexia" - } -} \ No newline at end of file diff --git a/homeassistant/components/nexia/__init__.py b/homeassistant/components/nexia/__init__.py index a9c04933674..122f00f7b59 100644 --- a/homeassistant/components/nexia/__init__.py +++ b/homeassistant/components/nexia/__init__.py @@ -9,7 +9,12 @@ from requests.exceptions import ConnectTimeout, HTTPError import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + CONF_PASSWORD, + CONF_USERNAME, + HTTP_BAD_REQUEST, + HTTP_INTERNAL_SERVER_ERROR, +) from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady import homeassistant.helpers.config_validation as cv @@ -28,7 +33,7 @@ CONFIG_SCHEMA = vol.Schema( vol.Required(CONF_PASSWORD): cv.string, }, extra=vol.ALLOW_EXTRA, - ), + ) }, extra=vol.ALLOW_EXTRA, ) @@ -76,10 +81,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): _LOGGER.error("Unable to connect to Nexia service: %s", ex) raise ConfigEntryNotReady except HTTPError as http_ex: - if http_ex.response.status_code >= 400 and http_ex.response.status_code < 500: + if ( + http_ex.response.status_code >= HTTP_BAD_REQUEST + and http_ex.response.status_code < HTTP_INTERNAL_SERVER_ERROR + ): _LOGGER.error( - "Access error from Nexia service, please check credentials: %s", - http_ex, + "Access error from Nexia service, please check credentials: %s", http_ex ) return False _LOGGER.error("HTTP error from Nexia service: %s", http_ex) diff --git a/homeassistant/components/nexia/climate.py b/homeassistant/components/nexia/climate.py index d7e93e511fb..fafa267c914 100644 --- a/homeassistant/components/nexia/climate.py +++ b/homeassistant/components/nexia/climate.py @@ -120,7 +120,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): SERVICE_SET_HUMIDIFY_SETPOINT, ) platform.async_register_entity_service( - SERVICE_SET_AIRCLEANER_MODE, SET_AIRCLEANER_SCHEMA, SERVICE_SET_AIRCLEANER_MODE, + SERVICE_SET_AIRCLEANER_MODE, SET_AIRCLEANER_SCHEMA, SERVICE_SET_AIRCLEANER_MODE ) entities = [] @@ -322,9 +322,9 @@ class NexiaZone(NexiaThermostatZoneEntity, ClimateDevice): def set_temperature(self, **kwargs): """Set target temperature.""" - new_heat_temp = kwargs.get(ATTR_TARGET_TEMP_LOW, None) - new_cool_temp = kwargs.get(ATTR_TARGET_TEMP_HIGH, None) - set_temp = kwargs.get(ATTR_TEMPERATURE, None) + new_heat_temp = kwargs.get(ATTR_TARGET_TEMP_LOW) + new_cool_temp = kwargs.get(ATTR_TARGET_TEMP_HIGH) + set_temp = kwargs.get(ATTR_TEMPERATURE) deadband = self._thermostat.get_deadband() cur_cool_temp = self._zone.get_cooling_setpoint() diff --git a/homeassistant/components/nexia/config_flow.py b/homeassistant/components/nexia/config_flow.py index 59f1b211da5..c26e42a22d2 100644 --- a/homeassistant/components/nexia/config_flow.py +++ b/homeassistant/components/nexia/config_flow.py @@ -6,7 +6,12 @@ from requests.exceptions import ConnectTimeout, HTTPError import voluptuous as vol from homeassistant import config_entries, core, exceptions -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + CONF_PASSWORD, + CONF_USERNAME, + HTTP_BAD_REQUEST, + HTTP_INTERNAL_SERVER_ERROR, +) from .const import DOMAIN # pylint:disable=unused-import @@ -37,7 +42,10 @@ async def validate_input(hass: core.HomeAssistant, data): raise CannotConnect except HTTPError as http_ex: _LOGGER.error("HTTP error from Nexia service: %s", http_ex) - if http_ex.response.status_code >= 400 and http_ex.response.status_code < 500: + if ( + http_ex.response.status_code >= HTTP_BAD_REQUEST + and http_ex.response.status_code < HTTP_INTERNAL_SERVER_ERROR + ): raise InvalidAuth raise CannotConnect diff --git a/homeassistant/components/nexia/entity.py b/homeassistant/components/nexia/entity.py index 60675cc5888..33962bb11c0 100644 --- a/homeassistant/components/nexia/entity.py +++ b/homeassistant/components/nexia/entity.py @@ -52,11 +52,9 @@ class NexiaEntity(Entity): async def async_added_to_hass(self): """Subscribe to updates.""" - self._coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Undo subscription.""" - self._coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self._coordinator.async_add_listener(self.async_write_ha_state) + ) class NexiaThermostatEntity(NexiaEntity): @@ -66,7 +64,6 @@ class NexiaThermostatEntity(NexiaEntity): """Initialize the entity.""" super().__init__(coordinator, name, unique_id) self._thermostat = thermostat - self._thermostat_update_subscription = None @property def device_info(self): @@ -82,18 +79,14 @@ class NexiaThermostatEntity(NexiaEntity): async def async_added_to_hass(self): """Listen for signals for services.""" await super().async_added_to_hass() - self._thermostat_update_subscription = async_dispatcher_connect( - self.hass, - f"{SIGNAL_THERMOSTAT_UPDATE}-{self._thermostat.thermostat_id}", - self.async_write_ha_state, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + f"{SIGNAL_THERMOSTAT_UPDATE}-{self._thermostat.thermostat_id}", + self.async_write_ha_state, + ) ) - async def async_will_remove_from_hass(self): - """Unsub from signals for services.""" - await super().async_will_remove_from_hass() - if self._thermostat_update_subscription: - self._thermostat_update_subscription() - class NexiaThermostatZoneEntity(NexiaThermostatEntity): """Base class for nexia devices attached to a thermostat.""" @@ -102,7 +95,6 @@ class NexiaThermostatZoneEntity(NexiaThermostatEntity): """Initialize the entity.""" super().__init__(coordinator, zone.thermostat, name, unique_id) self._zone = zone - self._zone_update_subscription = None @property def device_info(self): @@ -120,14 +112,10 @@ class NexiaThermostatZoneEntity(NexiaThermostatEntity): async def async_added_to_hass(self): """Listen for signals for services.""" await super().async_added_to_hass() - self._zone_update_subscription = async_dispatcher_connect( - self.hass, - f"{SIGNAL_ZONE_UPDATE}-{self._zone.zone_id}", - self.async_write_ha_state, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + f"{SIGNAL_ZONE_UPDATE}-{self._zone.zone_id}", + self.async_write_ha_state, + ) ) - - async def async_will_remove_from_hass(self): - """Unsub from signals for services.""" - await super().async_will_remove_from_hass() - if self._zone_update_subscription: - self._zone_update_subscription() diff --git a/homeassistant/components/nexia/scene.py b/homeassistant/components/nexia/scene.py index fb851618aec..12689f05538 100644 --- a/homeassistant/components/nexia/scene.py +++ b/homeassistant/components/nexia/scene.py @@ -1,5 +1,7 @@ """Support for Nexia Automations.""" +from typing import Any + from homeassistant.components.scene import Scene from homeassistant.helpers.event import async_call_later @@ -48,7 +50,7 @@ class NexiaAutomationScene(NexiaEntity, Scene): """Return the icon of the automation scene.""" return "mdi:script-text-outline" - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate an automation scene.""" await self.hass.async_add_executor_job(self._automation.activate) diff --git a/homeassistant/components/nexia/services.yaml b/homeassistant/components/nexia/services.yaml index 725b215da5a..23a9498746b 100644 --- a/homeassistant/components/nexia/services.yaml +++ b/homeassistant/components/nexia/services.yaml @@ -5,7 +5,7 @@ set_aircleaner_mode: description: "This setting will affect all zones connected to the thermostat." example: climate.master_bedroom aircleaner_mode: - description: "The air cleaner mode to set. Options include \"auto\", \"quick\", or \"allergy\"." + description: 'The air cleaner mode to set. Options include "auto", "quick", or "allergy".' example: allergy set_humidify_setpoint: @@ -16,4 +16,4 @@ set_humidify_setpoint: example: climate.master_bedroom humidity: description: "The humidification setpoint as an int, range 35-65." - example: 45 \ No newline at end of file + example: 45 diff --git a/homeassistant/components/nexia/strings.json b/homeassistant/components/nexia/strings.json index d3fabfb0b4d..2d5c5bbfb17 100644 --- a/homeassistant/components/nexia/strings.json +++ b/homeassistant/components/nexia/strings.json @@ -1,13 +1,9 @@ { "config": { - "title": "Nexia", "step": { "user": { "title": "Connect to mynexia.com", - "data": { - "username": "Username", - "password": "Password" - } + "data": { "username": "Username", "password": "Password" } } }, "error": { @@ -15,8 +11,6 @@ "invalid_auth": "Invalid authentication", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "This nexia home is already configured" - } + "abort": { "already_configured": "This nexia home is already configured" } } -} \ No newline at end of file +} diff --git a/homeassistant/components/nexia/translations/ca.json b/homeassistant/components/nexia/translations/ca.json new file mode 100644 index 00000000000..fcbb879548c --- /dev/null +++ b/homeassistant/components/nexia/translations/ca.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest dispositiu nexia home ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "title": "Connexi\u00f3 amb mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/.translations/da.json b/homeassistant/components/nexia/translations/da.json similarity index 100% rename from homeassistant/components/nexia/.translations/da.json rename to homeassistant/components/nexia/translations/da.json diff --git a/homeassistant/components/nexia/translations/de.json b/homeassistant/components/nexia/translations/de.json new file mode 100644 index 00000000000..0ff4da3b2e1 --- /dev/null +++ b/homeassistant/components/nexia/translations/de.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses Nexia Home ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "title": "Stellen Sie eine Verbindung zu mynexia.com her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/en.json b/homeassistant/components/nexia/translations/en.json new file mode 100644 index 00000000000..016518495dc --- /dev/null +++ b/homeassistant/components/nexia/translations/en.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "This nexia home is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "title": "Connect to mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/es.json b/homeassistant/components/nexia/translations/es.json new file mode 100644 index 00000000000..d2d92d1e85b --- /dev/null +++ b/homeassistant/components/nexia/translations/es.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Este nexia home ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "title": "Conectar con mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/fr.json b/homeassistant/components/nexia/translations/fr.json new file mode 100644 index 00000000000..8082f912bed --- /dev/null +++ b/homeassistant/components/nexia/translations/fr.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Cette maison Nexia est d\u00e9j\u00e0 configur\u00e9e" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "title": "Se connecter \u00e0 mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/it.json b/homeassistant/components/nexia/translations/it.json new file mode 100644 index 00000000000..034aff83ecd --- /dev/null +++ b/homeassistant/components/nexia/translations/it.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Questo Nexia Home \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "title": "Connettersi a mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/ko.json b/homeassistant/components/nexia/translations/ko.json new file mode 100644 index 00000000000..a918de60fe6 --- /dev/null +++ b/homeassistant/components/nexia/translations/ko.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "nexia home \uc774 \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": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "mynexia.com \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/lb.json b/homeassistant/components/nexia/translations/lb.json new file mode 100644 index 00000000000..3179afd93a2 --- /dev/null +++ b/homeassistant/components/nexia/translations/lb.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Den Nexia Home ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "title": "Mat mynexia.com verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/no.json b/homeassistant/components/nexia/translations/no.json new file mode 100644 index 00000000000..335d8834ec3 --- /dev/null +++ b/homeassistant/components/nexia/translations/no.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Dette nexia hjem er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "title": "Koble til mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/pl.json b/homeassistant/components/nexia/translations/pl.json new file mode 100644 index 00000000000..0819834fcc8 --- /dev/null +++ b/homeassistant/components/nexia/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "nexia jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105czenie z mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/pt.json b/homeassistant/components/nexia/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/nexia/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/ru.json b/homeassistant/components/nexia/translations/ru.json new file mode 100644 index 00000000000..ee8fc183b3e --- /dev/null +++ b/homeassistant/components/nexia/translations/ru.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/sl.json b/homeassistant/components/nexia/translations/sl.json new file mode 100644 index 00000000000..55c234fbde3 --- /dev/null +++ b/homeassistant/components/nexia/translations/sl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Ta Nexia dom je \u017ee nastavljen" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "title": "Pove\u017eite se z mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/zh-Hant.json b/homeassistant/components/nexia/translations/zh-Hant.json new file mode 100644 index 00000000000..a57dbfa7e05 --- /dev/null +++ b/homeassistant/components/nexia/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Nexia home \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u9023\u7dda\u81f3 mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nextbus/manifest.json b/homeassistant/components/nextbus/manifest.json index 581d5d62693..0f32505536a 100644 --- a/homeassistant/components/nextbus/manifest.json +++ b/homeassistant/components/nextbus/manifest.json @@ -2,7 +2,6 @@ "domain": "nextbus", "name": "NextBus", "documentation": "https://www.home-assistant.io/integrations/nextbus", - "dependencies": [], "codeowners": ["@vividboarder"], "requirements": ["py_nextbusnext==0.1.4"] } diff --git a/homeassistant/components/nextbus/sensor.py b/homeassistant/components/nextbus/sensor.py index 5909804ebd1..2b5da2a97fa 100644 --- a/homeassistant/components/nextbus/sensor.py +++ b/homeassistant/components/nextbus/sensor.py @@ -201,13 +201,13 @@ class NextBusDepartureSensor(Entity): messages = listify(results.get("message", [])) self._log_debug("Messages: %s", messages) self._attributes["message"] = " -- ".join( - (message.get("text", "") for message in messages) + message.get("text", "") for message in messages ) # List out all directions in the attributes directions = listify(results.get("direction", [])) self._attributes["direction"] = ", ".join( - (direction.get("title", "") for direction in directions) + direction.get("title", "") for direction in directions ) # Chain all predictions together diff --git a/homeassistant/components/nextcloud/manifest.json b/homeassistant/components/nextcloud/manifest.json index 4db0019920d..73ec2a138b3 100644 --- a/homeassistant/components/nextcloud/manifest.json +++ b/homeassistant/components/nextcloud/manifest.json @@ -2,11 +2,6 @@ "domain": "nextcloud", "name": "Nextcloud", "documentation": "https://www.home-assistant.io/integrations/nextcloud", - "requirements": [ - "nextcloudmonitor==1.1.0" - ], - "dependencies": [], - "codeowners": [ - "@meichthys" - ] -} \ No newline at end of file + "requirements": ["nextcloudmonitor==1.1.0"], + "codeowners": ["@meichthys"] +} diff --git a/homeassistant/components/nfandroidtv/manifest.json b/homeassistant/components/nfandroidtv/manifest.json index 859a704cc63..e727c47b1e3 100644 --- a/homeassistant/components/nfandroidtv/manifest.json +++ b/homeassistant/components/nfandroidtv/manifest.json @@ -2,7 +2,5 @@ "domain": "nfandroidtv", "name": "Notifications for Android TV / FireTV", "documentation": "https://www.home-assistant.io/integrations/nfandroidtv", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/nfandroidtv/notify.py b/homeassistant/components/nfandroidtv/notify.py index 280733affd2..db2b22650ef 100644 --- a/homeassistant/components/nfandroidtv/notify.py +++ b/homeassistant/components/nfandroidtv/notify.py @@ -14,7 +14,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONF_HOST, CONF_TIMEOUT, UNIT_PERCENTAGE +from homeassistant.const import CONF_HOST, CONF_TIMEOUT, HTTP_OK, UNIT_PERCENTAGE import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -238,7 +238,7 @@ class NFAndroidTVNotificationService(BaseNotificationService): try: _LOGGER.debug("Payload: %s", str(payload)) response = requests.post(self._target, files=payload, timeout=self._timeout) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.error("Error sending message: %s", str(response)) except requests.exceptions.ConnectionError as err: _LOGGER.error("Error communicating with %s: %s", self._target, str(err)) diff --git a/homeassistant/components/niko_home_control/manifest.json b/homeassistant/components/niko_home_control/manifest.json index 2a8ec9ab270..f9e3cf8573b 100644 --- a/homeassistant/components/niko_home_control/manifest.json +++ b/homeassistant/components/niko_home_control/manifest.json @@ -3,6 +3,5 @@ "name": "Niko Home Control", "documentation": "https://www.home-assistant.io/integrations/niko_home_control", "requirements": ["niko-home-control==0.2.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/nilu/manifest.json b/homeassistant/components/nilu/manifest.json index df4e704200f..1eb94642902 100644 --- a/homeassistant/components/nilu/manifest.json +++ b/homeassistant/components/nilu/manifest.json @@ -3,6 +3,5 @@ "name": "Norwegian Institute for Air Research (NILU)", "documentation": "https://www.home-assistant.io/integrations/nilu", "requirements": ["niluclient==0.1.2"], - "dependencies": [], "codeowners": ["@hfurubotten"] } diff --git a/homeassistant/components/nissan_leaf/__init__.py b/homeassistant/components/nissan_leaf/__init__.py index 57b9bdb61fa..a1e6d74b4f3 100644 --- a/homeassistant/components/nissan_leaf/__init__.py +++ b/homeassistant/components/nissan_leaf/__init__.py @@ -7,7 +7,7 @@ import sys from pycarwings2 import CarwingsError, Session import voluptuous as vol -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, HTTP_OK from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.discovery import load_platform @@ -287,7 +287,7 @@ class LeafDataStore: if server_response is not None: _LOGGER.debug("Server Response: %s", server_response.__dict__) - if server_response.answer["status"] == 200: + if server_response.answer["status"] == HTTP_OK: self.data[DATA_BATTERY] = server_response.battery_percent # pycarwings2 library doesn't always provide cruising rnages @@ -467,8 +467,10 @@ class LeafEntity(Entity): async def async_added_to_hass(self): """Register callbacks.""" self.log_registration() - async_dispatcher_connect( - self.car.hass, SIGNAL_UPDATE_LEAF, self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.car.hass, SIGNAL_UPDATE_LEAF, self._update_callback + ) ) @callback diff --git a/homeassistant/components/nissan_leaf/binary_sensor.py b/homeassistant/components/nissan_leaf/binary_sensor.py index 1ee450df87d..786d495cc9b 100644 --- a/homeassistant/components/nissan_leaf/binary_sensor.py +++ b/homeassistant/components/nissan_leaf/binary_sensor.py @@ -28,7 +28,7 @@ class LeafPluggedInSensor(LeafEntity, BinarySensorDevice): @property def name(self): """Sensor name.""" - return "{} {}".format(self.car.leaf.nickname, "Plug Status") + return f"{self.car.leaf.nickname} Plug Status" @property def is_on(self): @@ -49,7 +49,7 @@ class LeafChargingSensor(LeafEntity, BinarySensorDevice): @property def name(self): """Sensor name.""" - return "{} {}".format(self.car.leaf.nickname, "Charging Status") + return f"{self.car.leaf.nickname} Charging Status" @property def is_on(self): diff --git a/homeassistant/components/nissan_leaf/manifest.json b/homeassistant/components/nissan_leaf/manifest.json index 717eb0d1d6a..339b5750036 100644 --- a/homeassistant/components/nissan_leaf/manifest.json +++ b/homeassistant/components/nissan_leaf/manifest.json @@ -3,6 +3,5 @@ "name": "Nissan Leaf", "documentation": "https://www.home-assistant.io/integrations/nissan_leaf", "requirements": ["pycarwings2==2.9"], - "dependencies": [], "codeowners": ["@filcole"] } diff --git a/homeassistant/components/nissan_leaf/sensor.py b/homeassistant/components/nissan_leaf/sensor.py index 33b0efa5d60..3565fb303d5 100644 --- a/homeassistant/components/nissan_leaf/sensor.py +++ b/homeassistant/components/nissan_leaf/sensor.py @@ -41,7 +41,7 @@ class LeafBatterySensor(LeafEntity): @property def name(self): """Sensor Name.""" - return self.car.leaf.nickname + " Charge" + return f"{self.car.leaf.nickname} Charge" @property def device_class(self): @@ -77,8 +77,8 @@ class LeafRangeSensor(LeafEntity): def name(self): """Update sensor name depending on AC.""" if self._ac_on is True: - return self.car.leaf.nickname + " Range (AC)" - return self.car.leaf.nickname + " Range" + return f"{self.car.leaf.nickname} Range (AC)" + return f"{self.car.leaf.nickname} Range" def log_registration(self): """Log registration.""" diff --git a/homeassistant/components/nissan_leaf/services.yaml b/homeassistant/components/nissan_leaf/services.yaml index ef60dfb4a65..096f4f5b8b4 100644 --- a/homeassistant/components/nissan_leaf/services.yaml +++ b/homeassistant/components/nissan_leaf/services.yaml @@ -18,4 +18,3 @@ update: description: > The vehicle identification number (VIN) of the vehicle, 17 characters example: WBANXXXXXX1234567 - diff --git a/homeassistant/components/nissan_leaf/switch.py b/homeassistant/components/nissan_leaf/switch.py index e15d595d65b..d95d3e4ed39 100644 --- a/homeassistant/components/nissan_leaf/switch.py +++ b/homeassistant/components/nissan_leaf/switch.py @@ -27,7 +27,7 @@ class LeafClimateSwitch(LeafEntity, ToggleEntity): @property def name(self): """Switch name.""" - return "{} {}".format(self.car.leaf.nickname, "Climate Control") + return f"{self.car.leaf.nickname} Climate Control" def log_registration(self): """Log registration.""" diff --git a/homeassistant/components/nmap_tracker/device_tracker.py b/homeassistant/components/nmap_tracker/device_tracker.py index d41e80f17a2..0a8c177b08c 100644 --- a/homeassistant/components/nmap_tracker/device_tracker.py +++ b/homeassistant/components/nmap_tracker/device_tracker.py @@ -109,7 +109,7 @@ class NmapDeviceScanner(DeviceScanner): last_results = [] exclude_hosts = self.exclude if exclude_hosts: - options += " --exclude {}".format(",".join(exclude_hosts)) + options += f" --exclude {','.join(exclude_hosts)}" try: result = scanner.scan(hosts=" ".join(self.hosts), arguments=options) diff --git a/homeassistant/components/nmap_tracker/manifest.json b/homeassistant/components/nmap_tracker/manifest.json index 2d3aa0437fe..1b049b54a07 100644 --- a/homeassistant/components/nmap_tracker/manifest.json +++ b/homeassistant/components/nmap_tracker/manifest.json @@ -2,7 +2,6 @@ "domain": "nmap_tracker", "name": "Nmap Tracker", "documentation": "https://www.home-assistant.io/integrations/nmap_tracker", - "requirements": ["python-nmap==0.6.1", "getmac==0.8.1"], - "dependencies": [], + "requirements": ["python-nmap==0.6.1", "getmac==0.8.2"], "codeowners": [] } diff --git a/homeassistant/components/nmbs/manifest.json b/homeassistant/components/nmbs/manifest.json index 89de2288c54..e9b1d1ecbf7 100644 --- a/homeassistant/components/nmbs/manifest.json +++ b/homeassistant/components/nmbs/manifest.json @@ -3,6 +3,5 @@ "name": "NMBS", "documentation": "https://www.home-assistant.io/integrations/nmbs", "requirements": ["pyrail==0.0.3"], - "dependencies": [], "codeowners": ["@thibmaek"] } diff --git a/homeassistant/components/nmbs/sensor.py b/homeassistant/components/nmbs/sensor.py index dfa43c35952..bdf4658434c 100644 --- a/homeassistant/components/nmbs/sensor.py +++ b/homeassistant/components/nmbs/sensor.py @@ -47,12 +47,12 @@ def get_time_until(departure_time=None): return 0 delta = dt_util.utc_from_timestamp(int(departure_time)) - dt_util.now() - return round((delta.total_seconds() / 60)) + return round(delta.total_seconds() / 60) def get_delay_in_minutes(delay=0): """Get the delay in minutes from a delay in seconds.""" - return round((int(delay) / 60)) + return round(int(delay) / 60) def get_ride_duration(departure_time, arrival_time, delay=0): @@ -60,7 +60,7 @@ def get_ride_duration(departure_time, arrival_time, delay=0): duration = dt_util.utc_from_timestamp( int(arrival_time) ) - dt_util.utc_from_timestamp(int(departure_time)) - duration_time = int(round((duration.total_seconds() / 60))) + duration_time = int(round(duration.total_seconds() / 60)) return duration_time + get_delay_in_minutes(delay) @@ -152,11 +152,15 @@ class NMBSLiveBoard(Entity): def update(self): """Set the state equal to the next departure.""" liveboard = self._api_client.get_liveboard(self._station) + + if liveboard is None or not liveboard["departures"]: + return + next_departure = liveboard["departures"]["departure"][0] self._attrs = next_departure - self._state = "Track {} - {}".format( - next_departure["platform"], next_departure["station"] + self._state = ( + f"Track {next_departure['platform']} - {next_departure['station']}" ) @@ -266,6 +270,9 @@ class NMBSSensor(Entity): self._station_from, self._station_to ) + if connections is None or not connections["connection"]: + return + if int(connections["connection"][0]["departure"]["left"]) > 0: next_connection = connections["connection"][1] else: diff --git a/homeassistant/components/no_ip/__init__.py b/homeassistant/components/no_ip/__init__.py index 12d0fb08ad3..9efaac79562 100644 --- a/homeassistant/components/no_ip/__init__.py +++ b/homeassistant/components/no_ip/__init__.py @@ -83,7 +83,7 @@ async def _update_no_ip(hass, session, domain, auth_str, timeout): params = {"hostname": domain} headers = { - AUTHORIZATION: "Basic {}".format(auth_str.decode("utf-8")), + AUTHORIZATION: f"Basic {auth_str.decode('utf-8')}", USER_AGENT: HA_USER_AGENT, } diff --git a/homeassistant/components/no_ip/manifest.json b/homeassistant/components/no_ip/manifest.json index d192b716008..8294ba65072 100644 --- a/homeassistant/components/no_ip/manifest.json +++ b/homeassistant/components/no_ip/manifest.json @@ -2,7 +2,5 @@ "domain": "no_ip", "name": "No-IP.com", "documentation": "https://www.home-assistant.io/integrations/no_ip", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/noaa_tides/manifest.json b/homeassistant/components/noaa_tides/manifest.json index 9bb9d7b2f1f..3e95ff523b7 100644 --- a/homeassistant/components/noaa_tides/manifest.json +++ b/homeassistant/components/noaa_tides/manifest.json @@ -3,6 +3,5 @@ "name": "NOAA Tides", "documentation": "https://www.home-assistant.io/integrations/noaa_tides", "requirements": ["py_noaa==0.3.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/norway_air/manifest.json b/homeassistant/components/norway_air/manifest.json index 62218c52174..515d4eea6bb 100644 --- a/homeassistant/components/norway_air/manifest.json +++ b/homeassistant/components/norway_air/manifest.json @@ -3,6 +3,5 @@ "name": "Om Luftkvalitet i Norge (Norway Air)", "documentation": "https://www.home-assistant.io/integrations/norway_air", "requirements": ["pyMetno==0.4.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/notify/manifest.json b/homeassistant/components/notify/manifest.json index 5361947bfd9..b32295a10a6 100644 --- a/homeassistant/components/notify/manifest.json +++ b/homeassistant/components/notify/manifest.json @@ -2,8 +2,6 @@ "domain": "notify", "name": "Notifications", "documentation": "https://www.home-assistant.io/integrations/notify", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/notify/services.yaml b/homeassistant/components/notify/services.yaml index 23b1c968c4a..e80c7c85677 100644 --- a/homeassistant/components/notify/services.yaml +++ b/homeassistant/components/notify/services.yaml @@ -8,7 +8,7 @@ notify: example: The garage door has been open for 10 minutes. title: description: Optional title for your notification. - example: 'Your Garage Door Friend' + example: "Your Garage Door Friend" target: description: An array of targets to send the notification to. Optional depending on the platform. example: platform specific @@ -21,7 +21,7 @@ apns_register: fields: push_id: description: The device token, a 64 character hex string (256 bits). The device token is provided to you by your client app, which receives the token after registering itself with the remote notification service. - example: '72f2a8633655c5ce574fdc9b2b34ff8abdfc3b739b6ceb7a9ff06c1cbbf99f62' + example: "72f2a8633655c5ce574fdc9b2b34ff8abdfc3b739b6ceb7a9ff06c1cbbf99f62" name: description: A friendly name for the device (optional). - example: 'Sam''s iPhone' + example: "Sam's iPhone" diff --git a/homeassistant/components/notify/strings.json b/homeassistant/components/notify/strings.json new file mode 100644 index 00000000000..02027a84d8f --- /dev/null +++ b/homeassistant/components/notify/strings.json @@ -0,0 +1 @@ +{ "title": "Notifications" } diff --git a/homeassistant/components/notify/translations/af.json b/homeassistant/components/notify/translations/af.json new file mode 100644 index 00000000000..158d5d0ea4c --- /dev/null +++ b/homeassistant/components/notify/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Stel in kennis" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ar.json b/homeassistant/components/notify/translations/ar.json new file mode 100644 index 00000000000..39bc6a8b2d7 --- /dev/null +++ b/homeassistant/components/notify/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0625\u0634\u0639\u0627\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/bg.json b/homeassistant/components/notify/translations/bg.json new file mode 100644 index 00000000000..490d3242f6d --- /dev/null +++ b/homeassistant/components/notify/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0418\u0437\u0432\u0435\u0441\u0442\u044f\u0432\u0430\u043d\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/bs.json b/homeassistant/components/notify/translations/bs.json new file mode 100644 index 00000000000..851833c7f70 --- /dev/null +++ b/homeassistant/components/notify/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Obavjesti" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ca.json b/homeassistant/components/notify/translations/ca.json new file mode 100644 index 00000000000..3ecfc7048b2 --- /dev/null +++ b/homeassistant/components/notify/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Notificacions" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/cs.json b/homeassistant/components/notify/translations/cs.json new file mode 100644 index 00000000000..fbbdd78888e --- /dev/null +++ b/homeassistant/components/notify/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Ozn\u00e1men\u00ed" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/cy.json b/homeassistant/components/notify/translations/cy.json new file mode 100644 index 00000000000..53121aa8ab6 --- /dev/null +++ b/homeassistant/components/notify/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Hysbysu" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/da.json b/homeassistant/components/notify/translations/da.json new file mode 100644 index 00000000000..f1edbe1fe58 --- /dev/null +++ b/homeassistant/components/notify/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Notifikationer" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/de.json b/homeassistant/components/notify/translations/de.json new file mode 100644 index 00000000000..69d1f3539b1 --- /dev/null +++ b/homeassistant/components/notify/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Benachrichtigung" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/el.json b/homeassistant/components/notify/translations/el.json new file mode 100644 index 00000000000..e95012f3183 --- /dev/null +++ b/homeassistant/components/notify/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/en.json b/homeassistant/components/notify/translations/en.json new file mode 100644 index 00000000000..debb3433596 --- /dev/null +++ b/homeassistant/components/notify/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Notifications" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/es-419.json b/homeassistant/components/notify/translations/es-419.json new file mode 100644 index 00000000000..d92f73d4a77 --- /dev/null +++ b/homeassistant/components/notify/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Notificar" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/es.json b/homeassistant/components/notify/translations/es.json new file mode 100644 index 00000000000..d92f73d4a77 --- /dev/null +++ b/homeassistant/components/notify/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Notificar" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/et.json b/homeassistant/components/notify/translations/et.json new file mode 100644 index 00000000000..d2c08643c06 --- /dev/null +++ b/homeassistant/components/notify/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Teata" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/eu.json b/homeassistant/components/notify/translations/eu.json new file mode 100644 index 00000000000..29392867d86 --- /dev/null +++ b/homeassistant/components/notify/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Jakinarazi" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/fi.json b/homeassistant/components/notify/translations/fi.json new file mode 100644 index 00000000000..7c4a993c7cd --- /dev/null +++ b/homeassistant/components/notify/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Ilmoita" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/fr.json b/homeassistant/components/notify/translations/fr.json new file mode 100644 index 00000000000..bfcad73e8e6 --- /dev/null +++ b/homeassistant/components/notify/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Notifier" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/he.json b/homeassistant/components/notify/translations/he.json new file mode 100644 index 00000000000..5d7a44ad471 --- /dev/null +++ b/homeassistant/components/notify/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05d4\u05ea\u05e8\u05d0\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/hi.json b/homeassistant/components/notify/translations/hi.json new file mode 100644 index 00000000000..6e872e1492d --- /dev/null +++ b/homeassistant/components/notify/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0938\u0942\u091a\u093f\u0924" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/hr.json b/homeassistant/components/notify/translations/hr.json new file mode 100644 index 00000000000..0fbda59731b --- /dev/null +++ b/homeassistant/components/notify/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Obavijestiti" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/hu.json b/homeassistant/components/notify/translations/hu.json new file mode 100644 index 00000000000..b5c88047f66 --- /dev/null +++ b/homeassistant/components/notify/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "\u00c9rtes\u00edt" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/hy.json b/homeassistant/components/notify/translations/hy.json new file mode 100644 index 00000000000..7bb60b0986c --- /dev/null +++ b/homeassistant/components/notify/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u053e\u0561\u0576\u0578\u0582\u0581\u0578\u0582\u0574" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/id.json b/homeassistant/components/notify/translations/id.json new file mode 100644 index 00000000000..723b49fe6af --- /dev/null +++ b/homeassistant/components/notify/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Pemberitahuan" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/is.json b/homeassistant/components/notify/translations/is.json new file mode 100644 index 00000000000..bc22e65d2d0 --- /dev/null +++ b/homeassistant/components/notify/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Tilkynna" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/it.json b/homeassistant/components/notify/translations/it.json new file mode 100644 index 00000000000..59c6653e911 --- /dev/null +++ b/homeassistant/components/notify/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Notifiche" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ja.json b/homeassistant/components/notify/translations/ja.json new file mode 100644 index 00000000000..b09c72c410c --- /dev/null +++ b/homeassistant/components/notify/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "\u901a\u77e5" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ko.json b/homeassistant/components/notify/translations/ko.json new file mode 100644 index 00000000000..8d34274c238 --- /dev/null +++ b/homeassistant/components/notify/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc54c\ub9bc" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/lb.json b/homeassistant/components/notify/translations/lb.json new file mode 100644 index 00000000000..622c197876c --- /dev/null +++ b/homeassistant/components/notify/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Notifikatioun" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/lv.json b/homeassistant/components/notify/translations/lv.json new file mode 100644 index 00000000000..397eb6b0880 --- /dev/null +++ b/homeassistant/components/notify/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Pazi\u0146ot" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/nb.json b/homeassistant/components/notify/translations/nb.json new file mode 100644 index 00000000000..d475109f2fa --- /dev/null +++ b/homeassistant/components/notify/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Varsle" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/nl.json b/homeassistant/components/notify/translations/nl.json new file mode 100644 index 00000000000..409692f7227 --- /dev/null +++ b/homeassistant/components/notify/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Notificeer" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/nn.json b/homeassistant/components/notify/translations/nn.json new file mode 100644 index 00000000000..d475109f2fa --- /dev/null +++ b/homeassistant/components/notify/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Varsle" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/no.json b/homeassistant/components/notify/translations/no.json new file mode 100644 index 00000000000..a420d64812e --- /dev/null +++ b/homeassistant/components/notify/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Varsler" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/pl.json b/homeassistant/components/notify/translations/pl.json new file mode 100644 index 00000000000..61c214981be --- /dev/null +++ b/homeassistant/components/notify/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Powiadomienia" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/pt-BR.json b/homeassistant/components/notify/translations/pt-BR.json new file mode 100644 index 00000000000..d92f73d4a77 --- /dev/null +++ b/homeassistant/components/notify/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Notificar" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/pt.json b/homeassistant/components/notify/translations/pt.json new file mode 100644 index 00000000000..d92f73d4a77 --- /dev/null +++ b/homeassistant/components/notify/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Notificar" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ro.json b/homeassistant/components/notify/translations/ro.json new file mode 100644 index 00000000000..389e5751581 --- /dev/null +++ b/homeassistant/components/notify/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Notifica" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ru.json b/homeassistant/components/notify/translations/ru.json new file mode 100644 index 00000000000..b3126e52f89 --- /dev/null +++ b/homeassistant/components/notify/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/sk.json b/homeassistant/components/notify/translations/sk.json new file mode 100644 index 00000000000..cef031d505c --- /dev/null +++ b/homeassistant/components/notify/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Upozornenie" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/sl.json b/homeassistant/components/notify/translations/sl.json new file mode 100644 index 00000000000..13770eba67f --- /dev/null +++ b/homeassistant/components/notify/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Obvesti" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/sv.json b/homeassistant/components/notify/translations/sv.json new file mode 100644 index 00000000000..737e068fd36 --- /dev/null +++ b/homeassistant/components/notify/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Meddela" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/ta.json b/homeassistant/components/notify/translations/ta.json new file mode 100644 index 00000000000..dbf23121794 --- /dev/null +++ b/homeassistant/components/notify/translations/ta.json @@ -0,0 +1,3 @@ +{ + "title": "\u0ba4\u0bc6\u0bb0\u0bbf\u0bb5\u0bbf" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/te.json b/homeassistant/components/notify/translations/te.json new file mode 100644 index 00000000000..254e99451c7 --- /dev/null +++ b/homeassistant/components/notify/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c24\u0c46\u0c32\u0c3f\u0c2f\u0c1c\u0c47\u0c2f\u0c3f" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/th.json b/homeassistant/components/notify/translations/th.json new file mode 100644 index 00000000000..7339ffe3ebd --- /dev/null +++ b/homeassistant/components/notify/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e41\u0e08\u0e49\u0e07" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/tr.json b/homeassistant/components/notify/translations/tr.json new file mode 100644 index 00000000000..3f10d1f6c19 --- /dev/null +++ b/homeassistant/components/notify/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Bildir" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/uk.json b/homeassistant/components/notify/translations/uk.json new file mode 100644 index 00000000000..86821a3e50f --- /dev/null +++ b/homeassistant/components/notify/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u041f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/vi.json b/homeassistant/components/notify/translations/vi.json new file mode 100644 index 00000000000..a9769af907e --- /dev/null +++ b/homeassistant/components/notify/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Th\u00f4ng b\u00e1o" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/zh-Hans.json b/homeassistant/components/notify/translations/zh-Hans.json new file mode 100644 index 00000000000..b09c72c410c --- /dev/null +++ b/homeassistant/components/notify/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u901a\u77e5" +} \ No newline at end of file diff --git a/homeassistant/components/notify/translations/zh-Hant.json b/homeassistant/components/notify/translations/zh-Hant.json new file mode 100644 index 00000000000..b09c72c410c --- /dev/null +++ b/homeassistant/components/notify/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u901a\u77e5" +} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/bg.json b/homeassistant/components/notion/.translations/bg.json deleted file mode 100644 index 1c78180e2a8..00000000000 --- a/homeassistant/components/notion/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430", - "no_devices": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0430" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435/\u0438\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/ca.json b/homeassistant/components/notion/.translations/ca.json deleted file mode 100644 index b6e73a5e209..00000000000 --- a/homeassistant/components/notion/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest nom d'usuari ja est\u00e0 en \u00fas." - }, - "error": { - "invalid_credentials": "Nom d'usuari o contrasenya incorrectes", - "no_devices": "No s'han trobat dispositius al compte" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari / correu electr\u00f2nic" - }, - "title": "Introdueix la teva informaci\u00f3" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/cy.json b/homeassistant/components/notion/.translations/cy.json deleted file mode 100644 index 63b1c613505..00000000000 --- a/homeassistant/components/notion/.translations/cy.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "password": "Cyfrinair", - "username": "Enw Defnyddiwr / Cyfeiriad E-bost" - }, - "title": "Llenwch eich gwybodaeth" - } - }, - "title": "Syniad" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/da.json b/homeassistant/components/notion/.translations/da.json deleted file mode 100644 index 6b139fa6e66..00000000000 --- a/homeassistant/components/notion/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dette brugernavn er allerede i brug." - }, - "error": { - "invalid_credentials": "Ugyldigt brugernavn eller adgangskode", - "no_devices": "Ingen enheder fundet i konto" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn/e-mailadresse" - }, - "title": "Udfyld dine oplysninger" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/de.json b/homeassistant/components/notion/.translations/de.json deleted file mode 100644 index 1ccd8c86bdc..00000000000 --- a/homeassistant/components/notion/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser Benutzername wird bereits benutzt." - }, - "error": { - "invalid_credentials": "Ung\u00fcltiger Benutzername oder Passwort", - "no_devices": "Keine Ger\u00e4te im Konto gefunden" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername/E-Mail-Adresse" - }, - "title": "Informationen eingeben" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/en.json b/homeassistant/components/notion/.translations/en.json deleted file mode 100644 index b729b368c37..00000000000 --- a/homeassistant/components/notion/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This username is already in use." - }, - "error": { - "invalid_credentials": "Invalid username or password", - "no_devices": "No devices found in account" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Username/Email Address" - }, - "title": "Fill in your information" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/es-419.json b/homeassistant/components/notion/.translations/es-419.json deleted file mode 100644 index ad2f19b0668..00000000000 --- a/homeassistant/components/notion/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "Nombre de usuario o contrase\u00f1a inv\u00e1lidos", - "no_devices": "No se han encontrado dispositivos en la cuenta." - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Nombre de usuario/direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Complete su informaci\u00f3n" - } - }, - "title": "Noci\u00f3n" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/es.json b/homeassistant/components/notion/.translations/es.json deleted file mode 100644 index 7293e8f229f..00000000000 --- a/homeassistant/components/notion/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta nombre de usuario ya est\u00e1 en uso." - }, - "error": { - "invalid_credentials": "Usuario o contrase\u00f1a no v\u00e1lido", - "no_devices": "No se han encontrado dispositivos en la cuenta" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario/correo electr\u00f3nico" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "Noci\u00f3n" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/fr.json b/homeassistant/components/notion/.translations/fr.json deleted file mode 100644 index ae24ba70419..00000000000 --- a/homeassistant/components/notion/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce nom d'utilisateur est d\u00e9j\u00e0 utilis\u00e9." - }, - "error": { - "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide", - "no_devices": "Aucun appareil trouv\u00e9 sur le compte" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur / adresse e-mail" - }, - "title": "Veuillez saisir vos informations" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/hr.json b/homeassistant/components/notion/.translations/hr.json deleted file mode 100644 index 93ab9a4bf51..00000000000 --- a/homeassistant/components/notion/.translations/hr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "Neispravno korisni\u010dko ime ili lozinka", - "no_devices": "Nisu prona\u0111eni ure\u0111aji na ra\u010dunu" - }, - "step": { - "user": { - "data": { - "password": "Lozinka", - "username": "Korisni\u010dko ime/adresa e-po\u0161te" - }, - "title": "Ispunite svoje podatke" - } - }, - "title": "Pojam" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/it.json b/homeassistant/components/notion/.translations/it.json deleted file mode 100644 index e33b50f1938..00000000000 --- a/homeassistant/components/notion/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo nome utente \u00e8 gi\u00e0 in uso." - }, - "error": { - "invalid_credentials": "Nome utente o password non validi", - "no_devices": "Nessun dispositivo trovato nell'account" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Nome utente / indirizzo E-mail" - }, - "title": "Inserisci le tue informazioni" - } - }, - "title": "Nozione" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/ko.json b/homeassistant/components/notion/.translations/ko.json deleted file mode 100644 index c848684ab59..00000000000 --- a/homeassistant/components/notion/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc0ac\uc6a9\uc790 \uc774\ub984\uc740 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4." - }, - "error": { - "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "no_devices": "\uacc4\uc815\uc5d0 \ub4f1\ub85d\ub41c \uae30\uae30\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984 / \uc774\uba54\uc77c \uc8fc\uc18c" - }, - "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/lb.json b/homeassistant/components/notion/.translations/lb.json deleted file mode 100644 index b5d2eabd507..00000000000 --- a/homeassistant/components/notion/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse Benotzernumm g\u00ebtt scho benotzt." - }, - "error": { - "invalid_credentials": "Ong\u00ebltege Benotzernumm oder Passwuert", - "no_devices": "Keng Apparater am Kont fonnt" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm/Email Adresse" - }, - "title": "F\u00ebllt \u00e4r Informatiounen aus" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/nl.json b/homeassistant/components/notion/.translations/nl.json deleted file mode 100644 index f45ea87f972..00000000000 --- a/homeassistant/components/notion/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord", - "no_devices": "Geen apparaten gevonden in account" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam/E-mailadres" - }, - "title": "Vul uw gegevens informatie" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/no.json b/homeassistant/components/notion/.translations/no.json deleted file mode 100644 index 302ef3f2b39..00000000000 --- a/homeassistant/components/notion/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dette brukernavnet er allerede i bruk." - }, - "error": { - "invalid_credentials": "Ugyldig brukernavn eller passord", - "no_devices": "Ingen enheter funnet i kontoen" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn / E-postadresse" - }, - "title": "Fyll ut informasjonen din" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/pl.json b/homeassistant/components/notion/.translations/pl.json deleted file mode 100644 index fb9ffaad9c0..00000000000 --- a/homeassistant/components/notion/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta nazwa u\u017cytkownika jest ju\u017c w u\u017cyciu." - }, - "error": { - "invalid_credentials": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o", - "no_devices": "Nie znaleziono urz\u0105dze\u0144 na koncie" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika/adres e-mail" - }, - "title": "Wprowad\u017a dane" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/pt-BR.json b/homeassistant/components/notion/.translations/pt-BR.json deleted file mode 100644 index 5f790c02a40..00000000000 --- a/homeassistant/components/notion/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "Usu\u00e1rio ou senha inv\u00e1lidos", - "no_devices": "Nenhum dispositivo encontrado na conta" - }, - "step": { - "user": { - "data": { - "password": "Senha", - "username": "Nome de usu\u00e1rio/ende\u00e7o de e-mail" - }, - "title": "Preencha suas informa\u00e7\u00f5es" - } - }, - "title": "No\u00e7\u00e3o" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/pt.json b/homeassistant/components/notion/.translations/pt.json deleted file mode 100644 index e379229ec3a..00000000000 --- a/homeassistant/components/notion/.translations/pt.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "Nome de utilizador ou palavra passe incorretos" - }, - "step": { - "user": { - "data": { - "password": "Palavra-passe" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/ru.json b/homeassistant/components/notion/.translations/ru.json deleted file mode 100644 index 41627cc6ab0..00000000000 --- a/homeassistant/components/notion/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u042d\u0442\u0430 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." - }, - "error": { - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", - "no_devices": "\u041d\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d / \u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b" - }, - "title": "Notion" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/sl.json b/homeassistant/components/notion/.translations/sl.json deleted file mode 100644 index 5abe6164038..00000000000 --- a/homeassistant/components/notion/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "To uporabni\u0161ko ime je \u017ee v uporabi." - }, - "error": { - "invalid_credentials": "Neveljavno uporabni\u0161ko ime ali geslo", - "no_devices": "V ra\u010dunu ni najdene nobene naprave" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime / e-po\u0161tni naslov" - }, - "title": "Izpolnite svoje podatke" - } - }, - "title": "Pojem" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/sv.json b/homeassistant/components/notion/.translations/sv.json deleted file mode 100644 index 89648180246..00000000000 --- a/homeassistant/components/notion/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "Felaktigt anv\u00e4ndarnamn eller l\u00f6senord", - "no_devices": "Inga enheter hittades p\u00e5 kontot" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn/E-Postadress" - }, - "title": "Fyll i dina uppgifter" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/zh-Hans.json b/homeassistant/components/notion/.translations/zh-Hans.json deleted file mode 100644 index 0e61657f615..00000000000 --- a/homeassistant/components/notion/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "invalid_credentials": "\u65e0\u6548\u7684\u7528\u6237\u540d\u6216\u5bc6\u7801", - "no_devices": "\u5e10\u6237\u4e2d\u627e\u4e0d\u5230\u8bbe\u5907" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u7801", - "username": "\u7528\u6237\u540d/\u7535\u5b50\u90ae\u4ef6\u5730\u5740" - }, - "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" - } - }, - "title": "\u6982\u5ff5" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/zh-Hant.json b/homeassistant/components/notion/.translations/zh-Hant.json deleted file mode 100644 index 2767c504b78..00000000000 --- a/homeassistant/components/notion/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u4f7f\u7528\u8005\u540d\u7a31\u5df2\u88ab\u4f7f\u7528\u3002" - }, - "error": { - "invalid_credentials": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u7121\u6548", - "no_devices": "\u5e33\u865f\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u8a2d\u5099" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31/\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" - }, - "title": "\u586b\u5beb\u8cc7\u8a0a" - } - }, - "title": "Notion" - } -} \ No newline at end of file diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py index e9c45c62816..5e8450ffdea 100644 --- a/homeassistant/components/notion/__init__.py +++ b/homeassistant/components/notion/__init__.py @@ -7,7 +7,12 @@ from aionotion.errors import InvalidCredentialsError, NotionError import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT -from homeassistant.const import ATTR_ATTRIBUTION, CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + ATTR_ATTRIBUTION, + CONF_PASSWORD, + CONF_USERNAME, + TEMP_CELSIUS, +) from homeassistant.core import callback from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import ( @@ -57,7 +62,7 @@ BINARY_SENSOR_TYPES = { SENSOR_WINDOW_HINGED_HORIZONTAL: ("Hinged Window", "window"), SENSOR_WINDOW_HINGED_VERTICAL: ("Hinged Window", "window"), } -SENSOR_TYPES = {SENSOR_TEMPERATURE: ("Temperature", "temperature", "°C")} +SENSOR_TYPES = {SENSOR_TEMPERATURE: ("Temperature", "temperature", TEMP_CELSIUS)} CONFIG_SCHEMA = vol.Schema( { @@ -211,7 +216,6 @@ class NotionEntity(Entity): self, notion, task_id, sensor_id, bridge_id, system_id, name, device_class ): """Initialize the entity.""" - self._async_unsub_dispatcher_connect = None self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION} self._bridge_id = bridge_id self._device_class = device_class @@ -255,9 +259,7 @@ class NotionEntity(Entity): @property def name(self): """Return the name of the sensor.""" - return "{0}: {1}".format( - self._notion.sensors[self._sensor_id]["name"], self._name - ) + return f"{self._notion.sensors[self._sensor_id]['name']}: {self._name}" @property def should_poll(self): @@ -268,7 +270,7 @@ class NotionEntity(Entity): def unique_id(self): """Return a unique, unchanging string that represents this sensor.""" task = self._notion.tasks[self._task_id] - return "{0}_{1}".format(self._sensor_id, task["task_type"]) + return f"{self._sensor_id}_{task['task_type']}" async def _update_bridge_id(self): """Update the entity's bridge ID if it has changed. @@ -309,18 +311,12 @@ class NotionEntity(Entity): self.update_from_latest_data() self.async_write_ha_state() - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, TOPIC_DATA_UPDATE, update + self.async_on_remove( + async_dispatcher_connect(self.hass, TOPIC_DATA_UPDATE, update) ) self.update_from_latest_data() - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() - self._async_unsub_dispatcher_connect = None - @callback def update_from_latest_data(self): """Update the entity from the latest data.""" diff --git a/homeassistant/components/notion/manifest.json b/homeassistant/components/notion/manifest.json index 6afcc74a713..94d123ed17f 100644 --- a/homeassistant/components/notion/manifest.json +++ b/homeassistant/components/notion/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/notion", "requirements": ["aionotion==1.1.0"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/notion/strings.json b/homeassistant/components/notion/strings.json index fa47c2819ba..1764e6cc962 100644 --- a/homeassistant/components/notion/strings.json +++ b/homeassistant/components/notion/strings.json @@ -1,21 +1,15 @@ { "config": { - "title": "Notion", "step": { "user": { "title": "Fill in your information", - "data": { - "username": "Username/Email Address", - "password": "Password" - } + "data": { "username": "Username/Email Address", "password": "Password" } } }, "error": { "invalid_credentials": "Invalid username or password", "no_devices": "No devices found in account" }, - "abort": { - "already_configured": "This username is already in use." - } + "abort": { "already_configured": "This username is already in use." } } } diff --git a/homeassistant/components/notion/translations/bg.json b/homeassistant/components/notion/translations/bg.json new file mode 100644 index 00000000000..dcb76f65acd --- /dev/null +++ b/homeassistant/components/notion/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430", + "no_devices": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0430" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435/\u0438\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/ca.json b/homeassistant/components/notion/translations/ca.json new file mode 100644 index 00000000000..7a4831517f0 --- /dev/null +++ b/homeassistant/components/notion/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest nom d'usuari ja est\u00e0 en \u00fas." + }, + "error": { + "invalid_credentials": "Nom d'usuari o contrasenya incorrectes", + "no_devices": "No s'han trobat dispositius al compte" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari / correu electr\u00f2nic" + }, + "title": "Introdueix la teva informaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/cy.json b/homeassistant/components/notion/translations/cy.json new file mode 100644 index 00000000000..26e37c64b78 --- /dev/null +++ b/homeassistant/components/notion/translations/cy.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Cyfrinair", + "username": "Enw Defnyddiwr / Cyfeiriad E-bost" + }, + "title": "Llenwch eich gwybodaeth" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/da.json b/homeassistant/components/notion/translations/da.json new file mode 100644 index 00000000000..8d0e0d37c4b --- /dev/null +++ b/homeassistant/components/notion/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Dette brugernavn er allerede i brug." + }, + "error": { + "invalid_credentials": "Ugyldigt brugernavn eller adgangskode", + "no_devices": "Ingen enheder fundet i konto" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn/e-mailadresse" + }, + "title": "Udfyld dine oplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/de.json b/homeassistant/components/notion/translations/de.json new file mode 100644 index 00000000000..4d587ba2e55 --- /dev/null +++ b/homeassistant/components/notion/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Benutzername wird bereits benutzt." + }, + "error": { + "invalid_credentials": "Ung\u00fcltiger Benutzername oder Passwort", + "no_devices": "Keine Ger\u00e4te im Konto gefunden" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername/E-Mail-Adresse" + }, + "title": "Informationen eingeben" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/en.json b/homeassistant/components/notion/translations/en.json new file mode 100644 index 00000000000..7537482ce5e --- /dev/null +++ b/homeassistant/components/notion/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "This username is already in use." + }, + "error": { + "invalid_credentials": "Invalid username or password", + "no_devices": "No devices found in account" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username/Email Address" + }, + "title": "Fill in your information" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/es-419.json b/homeassistant/components/notion/translations/es-419.json new file mode 100644 index 00000000000..6e0e7eb538f --- /dev/null +++ b/homeassistant/components/notion/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "Nombre de usuario o contrase\u00f1a inv\u00e1lidos", + "no_devices": "No se han encontrado dispositivos en la cuenta." + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Nombre de usuario/direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Complete su informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/es.json b/homeassistant/components/notion/translations/es.json new file mode 100644 index 00000000000..ca40862f475 --- /dev/null +++ b/homeassistant/components/notion/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Este nombre de usuario ya est\u00e1 en uso." + }, + "error": { + "invalid_credentials": "Usuario o contrase\u00f1a no v\u00e1lido", + "no_devices": "No se han encontrado dispositivos en la cuenta" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario/correo electr\u00f3nico" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/fr.json b/homeassistant/components/notion/translations/fr.json new file mode 100644 index 00000000000..c9bb0d6fa62 --- /dev/null +++ b/homeassistant/components/notion/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ce nom d'utilisateur est d\u00e9j\u00e0 utilis\u00e9." + }, + "error": { + "invalid_credentials": "Nom d'utilisateur ou mot de passe invalide", + "no_devices": "Aucun appareil trouv\u00e9 sur le compte" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur / adresse e-mail" + }, + "title": "Veuillez saisir vos informations" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/hr.json b/homeassistant/components/notion/translations/hr.json new file mode 100644 index 00000000000..1c9cabbf74a --- /dev/null +++ b/homeassistant/components/notion/translations/hr.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "Neispravno korisni\u010dko ime ili lozinka", + "no_devices": "Nisu prona\u0111eni ure\u0111aji na ra\u010dunu" + }, + "step": { + "user": { + "data": { + "password": "Lozinka", + "username": "Korisni\u010dko ime/adresa e-po\u0161te" + }, + "title": "Ispunite svoje podatke" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/hu.json b/homeassistant/components/notion/translations/hu.json similarity index 100% rename from homeassistant/components/notion/.translations/hu.json rename to homeassistant/components/notion/translations/hu.json diff --git a/homeassistant/components/notion/translations/it.json b/homeassistant/components/notion/translations/it.json new file mode 100644 index 00000000000..b60cdeb60f0 --- /dev/null +++ b/homeassistant/components/notion/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Questo nome utente \u00e8 gi\u00e0 in uso." + }, + "error": { + "invalid_credentials": "Nome utente o password non validi", + "no_devices": "Nessun dispositivo trovato nell'account" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente / indirizzo E-mail" + }, + "title": "Inserisci le tue informazioni" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/ko.json b/homeassistant/components/notion/translations/ko.json new file mode 100644 index 00000000000..84d55f51efc --- /dev/null +++ b/homeassistant/components/notion/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc0ac\uc6a9\uc790 \uc774\ub984\uc740 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4." + }, + "error": { + "invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "no_devices": "\uacc4\uc815\uc5d0 \ub4f1\ub85d\ub41c \uae30\uae30\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984 / \uc774\uba54\uc77c \uc8fc\uc18c" + }, + "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/lb.json b/homeassistant/components/notion/translations/lb.json new file mode 100644 index 00000000000..c19a53619fe --- /dev/null +++ b/homeassistant/components/notion/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Benotzernumm g\u00ebtt scho benotzt." + }, + "error": { + "invalid_credentials": "Ong\u00ebltege Benotzernumm oder Passwuert", + "no_devices": "Keng Apparater am Kont fonnt" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm/Email Adresse" + }, + "title": "F\u00ebllt \u00e4r Informatiounen aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/nl.json b/homeassistant/components/notion/translations/nl.json new file mode 100644 index 00000000000..b6a28495692 --- /dev/null +++ b/homeassistant/components/notion/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord", + "no_devices": "Geen apparaten gevonden in account" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam/E-mailadres" + }, + "title": "Vul uw gegevens informatie" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/.translations/nn.json b/homeassistant/components/notion/translations/nn.json similarity index 100% rename from homeassistant/components/notion/.translations/nn.json rename to homeassistant/components/notion/translations/nn.json diff --git a/homeassistant/components/notion/translations/no.json b/homeassistant/components/notion/translations/no.json new file mode 100644 index 00000000000..750906af83d --- /dev/null +++ b/homeassistant/components/notion/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Dette brukernavnet er allerede i bruk." + }, + "error": { + "invalid_credentials": "Ugyldig brukernavn eller passord", + "no_devices": "Ingen enheter funnet i kontoen" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn / E-postadresse" + }, + "title": "Fyll ut informasjonen din" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/pl.json b/homeassistant/components/notion/translations/pl.json new file mode 100644 index 00000000000..45e48d8ad33 --- /dev/null +++ b/homeassistant/components/notion/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ta nazwa u\u017cytkownika jest ju\u017c w u\u017cyciu." + }, + "error": { + "invalid_credentials": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o", + "no_devices": "Nie znaleziono urz\u0105dze\u0144 na koncie" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika/adres e-mail" + }, + "title": "Wprowad\u017a dane" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/pt-BR.json b/homeassistant/components/notion/translations/pt-BR.json new file mode 100644 index 00000000000..ee87b78aa90 --- /dev/null +++ b/homeassistant/components/notion/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "Usu\u00e1rio ou senha inv\u00e1lidos", + "no_devices": "Nenhum dispositivo encontrado na conta" + }, + "step": { + "user": { + "data": { + "password": "Senha", + "username": "Nome de usu\u00e1rio/ende\u00e7o de e-mail" + }, + "title": "Preencha suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/pt.json b/homeassistant/components/notion/translations/pt.json new file mode 100644 index 00000000000..b09d2c55929 --- /dev/null +++ b/homeassistant/components/notion/translations/pt.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "invalid_credentials": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de utilizador / Endere\u00e7o de e-mail" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/ru.json b/homeassistant/components/notion/translations/ru.json new file mode 100644 index 00000000000..9ae52b9c797 --- /dev/null +++ b/homeassistant/components/notion/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u042d\u0442\u0430 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f." + }, + "error": { + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", + "no_devices": "\u041d\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d / \u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b" + }, + "title": "Notion" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/sl.json b/homeassistant/components/notion/translations/sl.json new file mode 100644 index 00000000000..7d76bcc9ed9 --- /dev/null +++ b/homeassistant/components/notion/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "To uporabni\u0161ko ime je \u017ee v uporabi." + }, + "error": { + "invalid_credentials": "Neveljavno uporabni\u0161ko ime ali geslo", + "no_devices": "V ra\u010dunu ni najdene nobene naprave" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime / e-po\u0161tni naslov" + }, + "title": "Izpolnite svoje podatke" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/sv.json b/homeassistant/components/notion/translations/sv.json new file mode 100644 index 00000000000..6f9ab3bac1c --- /dev/null +++ b/homeassistant/components/notion/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "Felaktigt anv\u00e4ndarnamn eller l\u00f6senord", + "no_devices": "Inga enheter hittades p\u00e5 kontot" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn/E-Postadress" + }, + "title": "Fyll i dina uppgifter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/zh-Hans.json b/homeassistant/components/notion/translations/zh-Hans.json new file mode 100644 index 00000000000..736e9620ce5 --- /dev/null +++ b/homeassistant/components/notion/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_credentials": "\u65e0\u6548\u7684\u7528\u6237\u540d\u6216\u5bc6\u7801", + "no_devices": "\u5e10\u6237\u4e2d\u627e\u4e0d\u5230\u8bbe\u5907" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u7801", + "username": "\u7528\u6237\u540d/\u7535\u5b50\u90ae\u4ef6\u5730\u5740" + }, + "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/zh-Hant.json b/homeassistant/components/notion/translations/zh-Hant.json new file mode 100644 index 00000000000..ae6e6c8a619 --- /dev/null +++ b/homeassistant/components/notion/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u4f7f\u7528\u8005\u540d\u7a31\u5df2\u88ab\u4f7f\u7528\u3002" + }, + "error": { + "invalid_credentials": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u7121\u6548", + "no_devices": "\u5e33\u865f\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u8a2d\u5099" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31/\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" + }, + "title": "\u586b\u5beb\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nsw_fuel_station/manifest.json b/homeassistant/components/nsw_fuel_station/manifest.json index 0a76c46ba2c..bdc9847c14f 100644 --- a/homeassistant/components/nsw_fuel_station/manifest.json +++ b/homeassistant/components/nsw_fuel_station/manifest.json @@ -3,6 +3,5 @@ "name": "NSW Fuel Station Price", "documentation": "https://www.home-assistant.io/integrations/nsw_fuel_station", "requirements": ["nsw-fuel-api-client==1.0.10"], - "dependencies": [], "codeowners": ["@nickw444"] } diff --git a/homeassistant/components/nsw_fuel_station/sensor.py b/homeassistant/components/nsw_fuel_station/sensor.py index b4cd7bd161e..5e9a9835bf4 100644 --- a/homeassistant/components/nsw_fuel_station/sensor.py +++ b/homeassistant/components/nsw_fuel_station/sensor.py @@ -156,7 +156,7 @@ class StationPriceSensor(Entity): @property def name(self) -> str: """Return the name of the sensor.""" - return "{} {}".format(self._station_data.get_station_name(), self._fuel_type) + return f"{self._station_data.get_station_name()} {self._fuel_type}" @property def state(self) -> Optional[float]: diff --git a/homeassistant/components/nsw_rural_fire_service_feed/geo_location.py b/homeassistant/components/nsw_rural_fire_service_feed/geo_location.py index f0d8c901387..c8eda3690ef 100644 --- a/homeassistant/components/nsw_rural_fire_service_feed/geo_location.py +++ b/homeassistant/components/nsw_rural_fire_service_feed/geo_location.py @@ -16,6 +16,7 @@ from homeassistant.const import ( CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, + LENGTH_KILOMETERS, ) from homeassistant.core import callback from homeassistant.helpers import aiohttp_client, config_validation as cv @@ -41,7 +42,6 @@ ATTR_TYPE = "type" CONF_CATEGORIES = "categories" DEFAULT_RADIUS_IN_KM = 20.0 -DEFAULT_UNIT_OF_MEASUREMENT = "km" SCAN_INTERVAL = timedelta(minutes=5) @@ -281,7 +281,7 @@ class NswRuralFireServiceLocationEvent(GeolocationEvent): @property def unit_of_measurement(self): """Return the unit of measurement.""" - return DEFAULT_UNIT_OF_MEASUREMENT + return LENGTH_KILOMETERS @property def device_state_attributes(self): diff --git a/homeassistant/components/nsw_rural_fire_service_feed/manifest.json b/homeassistant/components/nsw_rural_fire_service_feed/manifest.json index 1c2aa268ca2..aa8275ad084 100644 --- a/homeassistant/components/nsw_rural_fire_service_feed/manifest.json +++ b/homeassistant/components/nsw_rural_fire_service_feed/manifest.json @@ -3,6 +3,5 @@ "name": "NSW Rural Fire Service Incidents", "documentation": "https://www.home-assistant.io/integrations/nsw_rural_fire_service_feed", "requirements": ["aio_geojson_nsw_rfs_incidents==0.3"], - "dependencies": [], "codeowners": ["@exxamalte"] } diff --git a/homeassistant/components/nuheat/.translations/ca.json b/homeassistant/components/nuheat/.translations/ca.json deleted file mode 100644 index 6c2f739b94c..00000000000 --- a/homeassistant/components/nuheat/.translations/ca.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El term\u00f2stat ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "invalid_thermostat": "El n\u00famero de s\u00e8rie del term\u00f2stat no \u00e9s v\u00e0lid.", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "serial_number": "N\u00famero de s\u00e8rie del term\u00f2stat.", - "username": "Nom d'usuari" - }, - "description": "Has d\u2019obtenir el n\u00famero de s\u00e8rie o identificador del teu term\u00f2stat entrant a https://MyNuHeat.com i seleccionant el teu term\u00f2stat.", - "title": "Connexi\u00f3 amb NuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/de.json b/homeassistant/components/nuheat/.translations/de.json deleted file mode 100644 index adbc63b8157..00000000000 --- a/homeassistant/components/nuheat/.translations/de.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Der Thermostat ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "invalid_thermostat": "Die Seriennummer des Thermostats ist ung\u00fcltig.", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "serial_number": "Seriennummer des Thermostats.", - "username": "Benutzername" - }, - "description": "Sie m\u00fcssen die numerische Seriennummer oder ID Ihres Thermostats erhalten, indem Sie sich bei https://MyNuHeat.com anmelden und Ihre Thermostate ausw\u00e4hlen.", - "title": "Stellen Sie eine Verbindung zu NuHeat her" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/en.json b/homeassistant/components/nuheat/.translations/en.json deleted file mode 100644 index 4b82319be62..00000000000 --- a/homeassistant/components/nuheat/.translations/en.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "The thermostat is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "invalid_thermostat": "The thermostat serial number is invalid.", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "password": "Password", - "serial_number": "Serial number of the thermostat.", - "username": "Username" - }, - "description": "You will need to obtain your thermostat\u2019s numeric serial number or ID by logging into https://MyNuHeat.com and selecting your thermostat(s).", - "title": "Connect to the NuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/es.json b/homeassistant/components/nuheat/.translations/es.json deleted file mode 100644 index 3a37b65b9dd..00000000000 --- a/homeassistant/components/nuheat/.translations/es.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El termostato ya est\u00e1 configurado." - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor int\u00e9ntalo de nuevo", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "invalid_thermostat": "El n\u00famero de serie del termostato no es v\u00e1lido.", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "serial_number": "N\u00famero de serie del termostato.", - "username": "Nombre de usuario" - }, - "description": "Necesitas obtener el n\u00famero de serie o el ID de tu termostato iniciando sesi\u00f3n en https://MyNuHeat.com y seleccionando tu(s) termostato(s).", - "title": "ConectarNuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/fr.json b/homeassistant/components/nuheat/.translations/fr.json deleted file mode 100644 index 21012de756b..00000000000 --- a/homeassistant/components/nuheat/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le thermostat est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "invalid_auth": "Authentification non valide", - "invalid_thermostat": "Le num\u00e9ro de s\u00e9rie du thermostat n'est pas valide.", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "serial_number": "Num\u00e9ro de s\u00e9rie du thermostat.", - "username": "Nom d'utilisateur" - }, - "title": "Connectez-vous au NuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/it.json b/homeassistant/components/nuheat/.translations/it.json deleted file mode 100644 index a98f24a9651..00000000000 --- a/homeassistant/components/nuheat/.translations/it.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il termostato \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "invalid_auth": "Autenticazione non valida", - "invalid_thermostat": "Il numero di serie del termostato non \u00e8 valido.", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "password": "Password", - "serial_number": "Numero di serie del termostato.", - "username": "Nome utente" - }, - "description": "\u00c8 necessario ottenere il numero di serie o l'ID numerico del termostato accedendo a https://MyNuHeat.com e selezionando il termostato.", - "title": "Connettersi al NuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/ko.json b/homeassistant/components/nuheat/.translations/ko.json deleted file mode 100644 index 01db5835907..00000000000 --- a/homeassistant/components/nuheat/.translations/ko.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc628\ub3c4 \uc870\uc808\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", - "invalid_thermostat": "\uc628\ub3c4 \uc870\uc808\uae30\uc758 \uc2dc\ub9ac\uc5bc \ubc88\ud638\uac00 \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": { - "password": "\ube44\ubc00\ubc88\ud638", - "serial_number": "\uc628\ub3c4 \uc870\uc808\uae30\uc758 \uc2dc\ub9ac\uc5bc \ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "https://MyNuHeat.com \uc5d0 \ub85c\uadf8\uc778\ud558\uace0 \uc628\ub3c4 \uc870\uc808\uae30\ub97c \uc120\ud0dd\ud558\uc5ec \uc628\ub3c4 \uc870\uc808\uae30\uc758 \uc2dc\ub9ac\uc5bc \ubc88\ud638 \ub610\ub294 \ub610\ub294 ID \ub97c \uc5bb\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "title": "NuHeat \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/lb.json b/homeassistant/components/nuheat/.translations/lb.json deleted file mode 100644 index fd2b3114d4d..00000000000 --- a/homeassistant/components/nuheat/.translations/lb.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den Thermostat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "invalid_thermostat": "Seriennummer vum Thermostat ass ong\u00eblteg", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "serial_number": "Seriennummer vum Thermostat", - "username": "Benotzernumm" - }, - "description": "Du brauchs d'Seriennummer oder ID vum Thermostat, andeems Du dech op https://MyNuHeat.com umells an den Thermostat auswielt.", - "title": "Mat NuHeat verbannen" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/no.json b/homeassistant/components/nuheat/.translations/no.json deleted file mode 100644 index 74c0b8a8f54..00000000000 --- a/homeassistant/components/nuheat/.translations/no.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Termostaten er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "invalid_thermostat": "Termostatens serienummer er ugyldig.", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "serial_number": "Termostatenes serienummer.", - "username": "Brukernavn" - }, - "description": "Du m\u00e5 skaffe termostats numeriske serienummer eller ID ved \u00e5 logge inn p\u00e5 https://MyNuHeat.com og velge termostaten (e).", - "title": "Koble til NuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/ru.json b/homeassistant/components/nuheat/.translations/ru.json deleted file mode 100644 index 9a2ff139dd2..00000000000 --- a/homeassistant/components/nuheat/.translations/ru.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "invalid_thermostat": "\u0421\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "serial_number": "\u0421\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430.", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0438\u043b\u0438 ID \u0412\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430, \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 https://MyNuHeat.com.", - "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/zh-Hant.json b/homeassistant/components/nuheat/.translations/zh-Hant.json deleted file mode 100644 index e228abeecd9..00000000000 --- a/homeassistant/components/nuheat/.translations/zh-Hant.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6eab\u63a7\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "invalid_thermostat": "\u6eab\u63a7\u5668\u5e8f\u865f\u7121\u6548\u3002", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "serial_number": "\u6eab\u63a7\u5668\u5e8f\u865f\u3002", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u9700\u8981\u67e5\u770b\u60a8\u7684\u6eab\u63a7\u5668\u5e8f\u865f\u6216\u767b\u5165 https://MyNuHeat.com \u4e4b ID \u4e26\u9078\u64c7\u60a8\u7684\u6eab\u63a7\u5668\u3002", - "title": "\u9023\u7dda\u81f3 NuHeat" - } - }, - "title": "NuHeat" - } -} \ No newline at end of file diff --git a/homeassistant/components/nuheat/__init__.py b/homeassistant/components/nuheat/__init__.py index ca47f831370..4c7455be3c0 100644 --- a/homeassistant/components/nuheat/__init__.py +++ b/homeassistant/components/nuheat/__init__.py @@ -7,7 +7,13 @@ import requests import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import CONF_DEVICES, CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + CONF_DEVICES, + CONF_PASSWORD, + CONF_USERNAME, + HTTP_BAD_REQUEST, + HTTP_INTERNAL_SERVER_ERROR, +) from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import config_validation as cv @@ -78,7 +84,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): except requests.exceptions.Timeout: raise ConfigEntryNotReady except requests.exceptions.HTTPError as ex: - if ex.response.status_code > 400 and ex.response.status_code < 500: + if ( + ex.response.status_code > HTTP_BAD_REQUEST + and ex.response.status_code < HTTP_INTERNAL_SERVER_ERROR + ): _LOGGER.error("Failed to login to nuheat: %s", ex) return False raise ConfigEntryNotReady diff --git a/homeassistant/components/nuheat/config_flow.py b/homeassistant/components/nuheat/config_flow.py index 4f12f590057..bdbdfe22ea3 100644 --- a/homeassistant/components/nuheat/config_flow.py +++ b/homeassistant/components/nuheat/config_flow.py @@ -6,7 +6,12 @@ import requests.exceptions import voluptuous as vol from homeassistant import config_entries, core, exceptions -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import ( + CONF_PASSWORD, + CONF_USERNAME, + HTTP_BAD_REQUEST, + HTTP_INTERNAL_SERVER_ERROR, +) from .const import CONF_SERIAL_NUMBER from .const import DOMAIN # pylint:disable=unused-import @@ -34,7 +39,10 @@ async def validate_input(hass: core.HomeAssistant, data): except requests.exceptions.Timeout: raise CannotConnect except requests.exceptions.HTTPError as ex: - if ex.response.status_code > 400 and ex.response.status_code < 500: + if ( + ex.response.status_code > HTTP_BAD_REQUEST + and ex.response.status_code < HTTP_INTERNAL_SERVER_ERROR + ): raise InvalidAuth raise CannotConnect # diff --git a/homeassistant/components/nuheat/manifest.json b/homeassistant/components/nuheat/manifest.json index ef78870854c..d479f570d60 100644 --- a/homeassistant/components/nuheat/manifest.json +++ b/homeassistant/components/nuheat/manifest.json @@ -1,9 +1,8 @@ { - "domain": "nuheat", - "name": "NuHeat", - "documentation": "https://www.home-assistant.io/integrations/nuheat", - "requirements": ["nuheat==0.3.0"], - "dependencies": [], - "codeowners": ["@bdraco"], - "config_flow": true + "domain": "nuheat", + "name": "NuHeat", + "documentation": "https://www.home-assistant.io/integrations/nuheat", + "requirements": ["nuheat==0.3.0"], + "codeowners": ["@bdraco"], + "config_flow": true } diff --git a/homeassistant/components/nuheat/strings.json b/homeassistant/components/nuheat/strings.json index 4bfbb8ef62a..6a3d79e0404 100644 --- a/homeassistant/components/nuheat/strings.json +++ b/homeassistant/components/nuheat/strings.json @@ -1,25 +1,22 @@ { - "config" : { - "error" : { - "unknown" : "Unexpected error", - "cannot_connect" : "Failed to connect, please try again", - "invalid_auth" : "Invalid authentication", - "invalid_thermostat" : "The thermostat serial number is invalid." - }, - "title" : "NuHeat", - "abort" : { - "already_configured" : "The thermostat is already configured" - }, - "step" : { - "user" : { - "title" : "Connect to the NuHeat", - "description": "You will need to obtain your thermostat’s numeric serial number or ID by logging into https://MyNuHeat.com and selecting your thermostat(s).", - "data" : { - "username" : "Username", - "password" : "Password", - "serial_number" : "Serial number of the thermostat." - } - } + "config": { + "error": { + "unknown": "Unexpected error", + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "invalid_thermostat": "The thermostat serial number is invalid." + }, + "abort": { "already_configured": "The thermostat is already configured" }, + "step": { + "user": { + "title": "Connect to the NuHeat", + "description": "You will need to obtain your thermostat\u2019s numeric serial number or ID by logging into https://MyNuHeat.com and selecting your thermostat(s).", + "data": { + "username": "Username", + "password": "Password", + "serial_number": "Serial number of the thermostat." + } } - } + } + } } diff --git a/homeassistant/components/nuheat/translations/ca.json b/homeassistant/components/nuheat/translations/ca.json new file mode 100644 index 00000000000..165d889dbdc --- /dev/null +++ b/homeassistant/components/nuheat/translations/ca.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "El term\u00f2stat ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "invalid_thermostat": "El n\u00famero de s\u00e8rie del term\u00f2stat no \u00e9s v\u00e0lid.", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "serial_number": "N\u00famero de s\u00e8rie del term\u00f2stat.", + "username": "Nom d'usuari" + }, + "description": "Has d\u2019obtenir el n\u00famero de s\u00e8rie o identificador del teu term\u00f2stat entrant a https://MyNuHeat.com i seleccionant el teu term\u00f2stat.", + "title": "Connexi\u00f3 amb NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/.translations/da.json b/homeassistant/components/nuheat/translations/da.json similarity index 100% rename from homeassistant/components/nuheat/.translations/da.json rename to homeassistant/components/nuheat/translations/da.json diff --git a/homeassistant/components/nuheat/translations/de.json b/homeassistant/components/nuheat/translations/de.json new file mode 100644 index 00000000000..52c30681efc --- /dev/null +++ b/homeassistant/components/nuheat/translations/de.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Der Thermostat ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "invalid_thermostat": "Die Seriennummer des Thermostats ist ung\u00fcltig.", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "serial_number": "Seriennummer des Thermostats.", + "username": "Benutzername" + }, + "description": "Sie m\u00fcssen die numerische Seriennummer oder ID Ihres Thermostats erhalten, indem Sie sich bei https://MyNuHeat.com anmelden und Ihre Thermostate ausw\u00e4hlen.", + "title": "Stellen Sie eine Verbindung zu NuHeat her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/en.json b/homeassistant/components/nuheat/translations/en.json new file mode 100644 index 00000000000..d7b2697d5e0 --- /dev/null +++ b/homeassistant/components/nuheat/translations/en.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "The thermostat is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "invalid_thermostat": "The thermostat serial number is invalid.", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "password": "Password", + "serial_number": "Serial number of the thermostat.", + "username": "Username" + }, + "description": "You will need to obtain your thermostat\u2019s numeric serial number or ID by logging into https://MyNuHeat.com and selecting your thermostat(s).", + "title": "Connect to the NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/es.json b/homeassistant/components/nuheat/translations/es.json new file mode 100644 index 00000000000..6b11fe39500 --- /dev/null +++ b/homeassistant/components/nuheat/translations/es.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "El termostato ya est\u00e1 configurado." + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor int\u00e9ntalo de nuevo", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "invalid_thermostat": "El n\u00famero de serie del termostato no es v\u00e1lido.", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "serial_number": "N\u00famero de serie del termostato.", + "username": "Usuario" + }, + "description": "Necesitas obtener el n\u00famero de serie o el ID de tu termostato iniciando sesi\u00f3n en https://MyNuHeat.com y seleccionando tu(s) termostato(s).", + "title": "ConectarNuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/fr.json b/homeassistant/components/nuheat/translations/fr.json new file mode 100644 index 00000000000..da5c3260f2a --- /dev/null +++ b/homeassistant/components/nuheat/translations/fr.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Le thermostat est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide", + "invalid_thermostat": "Le num\u00e9ro de s\u00e9rie du thermostat n'est pas valide.", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "serial_number": "Num\u00e9ro de s\u00e9rie du thermostat.", + "username": "Nom d'utilisateur" + }, + "title": "Connectez-vous au NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/it.json b/homeassistant/components/nuheat/translations/it.json new file mode 100644 index 00000000000..973ff695acb --- /dev/null +++ b/homeassistant/components/nuheat/translations/it.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Il termostato \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "invalid_thermostat": "Il numero di serie del termostato non \u00e8 valido.", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "password": "Password", + "serial_number": "Numero di serie del termostato.", + "username": "Nome utente" + }, + "description": "\u00c8 necessario ottenere il numero di serie o l'ID numerico del termostato accedendo a https://MyNuHeat.com e selezionando il termostato.", + "title": "Connettersi al NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/ko.json b/homeassistant/components/nuheat/translations/ko.json new file mode 100644 index 00000000000..1476e8beb0d --- /dev/null +++ b/homeassistant/components/nuheat/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\uc628\ub3c4 \uc870\uc808\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", + "invalid_thermostat": "\uc628\ub3c4 \uc870\uc808\uae30\uc758 \uc2dc\ub9ac\uc5bc \ubc88\ud638\uac00 \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": { + "password": "\ube44\ubc00\ubc88\ud638", + "serial_number": "\uc628\ub3c4 \uc870\uc808\uae30\uc758 \uc2dc\ub9ac\uc5bc \ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "https://MyNuHeat.com \uc5d0 \ub85c\uadf8\uc778\ud558\uace0 \uc628\ub3c4 \uc870\uc808\uae30\ub97c \uc120\ud0dd\ud558\uc5ec \uc628\ub3c4 \uc870\uc808\uae30\uc758 \uc2dc\ub9ac\uc5bc \ubc88\ud638 \ub610\ub294 \ub610\ub294 ID \ub97c \uc5bb\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "title": "NuHeat \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/lb.json b/homeassistant/components/nuheat/translations/lb.json new file mode 100644 index 00000000000..0f8f81b4438 --- /dev/null +++ b/homeassistant/components/nuheat/translations/lb.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Den Thermostat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "invalid_thermostat": "Seriennummer vum Thermostat ass ong\u00eblteg", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "serial_number": "Seriennummer vum Thermostat", + "username": "Benotzernumm" + }, + "description": "Du brauchs d'Seriennummer oder ID vum Thermostat, andeems Du dech op https://MyNuHeat.com umells an den Thermostat auswielt.", + "title": "Mat NuHeat verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/no.json b/homeassistant/components/nuheat/translations/no.json new file mode 100644 index 00000000000..7ea083a3669 --- /dev/null +++ b/homeassistant/components/nuheat/translations/no.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Termostaten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "invalid_thermostat": "Termostatens serienummer er ugyldig.", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "serial_number": "Termostatenes serienummer.", + "username": "Brukernavn" + }, + "description": "Du m\u00e5 skaffe termostats numeriske serienummer eller ID ved \u00e5 logge inn p\u00e5 https://MyNuHeat.com og velge termostaten (e).", + "title": "Koble til NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/pl.json b/homeassistant/components/nuheat/translations/pl.json new file mode 100644 index 00000000000..bff4192f018 --- /dev/null +++ b/homeassistant/components/nuheat/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Termostat jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "invalid_thermostat": "Numer seryjny termostatu jest nieprawid\u0142owy.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "serial_number": "Numer seryjny termostatu", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Musisz uzyska\u0107 numeryczny numer seryjny lub identyfikator termostatu, loguj\u0105c si\u0119 na https://MyNuHeat.com i wybieraj\u0105c termostat(y).", + "title": "Po\u0142\u0105cz z NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/pt.json b/homeassistant/components/nuheat/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/nuheat/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/ru.json b/homeassistant/components/nuheat/translations/ru.json new file mode 100644 index 00000000000..f4d06e8eca6 --- /dev/null +++ b/homeassistant/components/nuheat/translations/ru.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "invalid_thermostat": "\u0421\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "serial_number": "\u0421\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0438\u043b\u0438 ID \u0412\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u0440\u043c\u043e\u0441\u0442\u0430\u0442\u0430, \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 https://MyNuHeat.com.", + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/sl.json b/homeassistant/components/nuheat/translations/sl.json new file mode 100644 index 00000000000..e64f7d1d381 --- /dev/null +++ b/homeassistant/components/nuheat/translations/sl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Termostat je \u017ee konfiguriran" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "invalid_thermostat": "Serijska \u0161tevilka termostata ni veljavna.", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "serial_number": "Serijska \u0161tevilka termostata.", + "username": "Uporabni\u0161ko ime" + }, + "description": "\u0160tevil\u010dno serijsko \u0161tevilko ali ID termostata boste morali pridobiti tako, da se prijavite na https://MyNuHeat.com in izberete svoje termostate.", + "title": "Pove\u017eite se z NuHeat-om" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuheat/translations/zh-Hant.json b/homeassistant/components/nuheat/translations/zh-Hant.json new file mode 100644 index 00000000000..f912b81f4c4 --- /dev/null +++ b/homeassistant/components/nuheat/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\u6eab\u63a7\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "invalid_thermostat": "\u6eab\u63a7\u5668\u5e8f\u865f\u7121\u6548\u3002", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "serial_number": "\u6eab\u63a7\u5668\u5e8f\u865f\u3002", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u9700\u8981\u67e5\u770b\u60a8\u7684\u6eab\u63a7\u5668\u5e8f\u865f\u6216\u767b\u5165 https://MyNuHeat.com \u4e4b ID \u4e26\u9078\u64c7\u60a8\u7684\u6eab\u63a7\u5668\u3002", + "title": "\u9023\u7dda\u81f3 NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nuimo_controller/manifest.json b/homeassistant/components/nuimo_controller/manifest.json index 58969bcafe2..dddd4a97523 100644 --- a/homeassistant/components/nuimo_controller/manifest.json +++ b/homeassistant/components/nuimo_controller/manifest.json @@ -3,6 +3,5 @@ "name": "Nuimo controller", "documentation": "https://www.home-assistant.io/integrations/nuimo_controller", "requirements": ["--only-binary=all nuimo==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/nuimo_controller/services.yaml b/homeassistant/components/nuimo_controller/services.yaml index ba537544a3b..d98659caa8b 100644 --- a/homeassistant/components/nuimo_controller/services.yaml +++ b/homeassistant/components/nuimo_controller/services.yaml @@ -3,16 +3,15 @@ led_matrix: fields: matrix: description: "A string representation of the matrix to be displayed. See the SDK documentation for more info: https://github.com/getSenic/nuimo-linux-python#write-to-nuimos-led-matrix" - example: - '........ - 0000000. - .000000. - ..00000. - .0.0000. - .00.000. - .000000. - .000000. - ........' + example: "........ + 0000000. + .000000. + ..00000. + .0.0000. + .00.000. + .000000. + .000000. + ........" interval: description: Display interval in seconds - example: 0.5 \ No newline at end of file + example: 0.5 diff --git a/homeassistant/components/nuki/manifest.json b/homeassistant/components/nuki/manifest.json index 77043f37134..a51ff3752a5 100644 --- a/homeassistant/components/nuki/manifest.json +++ b/homeassistant/components/nuki/manifest.json @@ -3,6 +3,5 @@ "name": "Nuki", "documentation": "https://www.home-assistant.io/integrations/nuki", "requirements": ["pynuki==1.3.3"], - "dependencies": [], "codeowners": ["@pvizeli"] } diff --git a/homeassistant/components/nuki/services.yaml b/homeassistant/components/nuki/services.yaml index 1300b48e0dd..9e3be794cb7 100644 --- a/homeassistant/components/nuki/services.yaml +++ b/homeassistant/components/nuki/services.yaml @@ -3,8 +3,7 @@ lock_n_go: fields: entity_id: description: Entity id of the Nuki lock. - example: 'lock.front_door' + example: "lock.front_door" unlatch: description: Whether to unlatch the lock. example: false - diff --git a/homeassistant/components/nut/.translations/ca.json b/homeassistant/components/nut/.translations/ca.json deleted file mode 100644 index 01a21920cfa..00000000000 --- a/homeassistant/components/nut/.translations/ca.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "alias": "\u00c0lies", - "host": "Amfitri\u00f3", - "name": "Nom", - "password": "Contrasenya", - "port": "Port", - "resources": "Recursos", - "username": "Nom d'usuari" - }, - "title": "No s'ha pogut connectar amb el servidor NUT" - } - }, - "title": "Eines de xarxa UPS (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Recursos" - }, - "description": "Selecciona els recursos del sensor" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/de.json b/homeassistant/components/nut/.translations/de.json deleted file mode 100644 index 611db3acfd6..00000000000 --- a/homeassistant/components/nut/.translations/de.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "alias": "Alias", - "host": "Host", - "name": "Name", - "password": "Passwort", - "port": "Port", - "resources": "Ressourcen", - "username": "Benutzername" - }, - "title": "Stellen Sie eine Verbindung zum NUT-Server her" - } - } - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Ressourcen" - }, - "description": "W\u00e4hlen Sie Sensorressourcen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/en.json b/homeassistant/components/nut/.translations/en.json deleted file mode 100644 index 66ea276eca0..00000000000 --- a/homeassistant/components/nut/.translations/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "alias": "Alias", - "host": "Host", - "name": "Name", - "password": "Password", - "port": "Port", - "resources": "Resources", - "username": "Username" - }, - "description": "If there are multiple UPSs attached to the NUT server, enter the name UPS to query in the 'Alias' field.", - "title": "Connect to the NUT server" - } - }, - "title": "Network UPS Tools (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Resources" - }, - "description": "Choose Sensor Resources" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/es.json b/homeassistant/components/nut/.translations/es.json deleted file mode 100644 index 34944816c81..00000000000 --- a/homeassistant/components/nut/.translations/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "alias": "Alias", - "host": "Host", - "name": "Nombre", - "password": "Contrase\u00f1a", - "port": "Puerto", - "resources": "Recursos", - "username": "Usuario" - }, - "description": "Si hay varios UPS conectados al servidor NUT, introduzca el nombre UPS a buscar en el campo 'Alias'.", - "title": "Conectar con el servidor NUT" - } - }, - "title": "Herramientas de UPS de red (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Recursos" - }, - "description": "Elegir Recursos del Sensor" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/ko.json b/homeassistant/components/nut/.translations/ko.json deleted file mode 100644 index f9fa46b6667..00000000000 --- a/homeassistant/components/nut/.translations/ko.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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": { - "alias": "\ubcc4\uba85", - "host": "\ud638\uc2a4\ud2b8", - "name": "\uc774\ub984", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "resources": "\ub9ac\uc18c\uc2a4", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "NUT \uc11c\ubc84\uc5d0 UPS \uac00 \uc5ec\ub7ec \uac1c \uc5f0\uacb0\ub418\uc5b4 \uc788\ub294 \uacbd\uc6b0 '\ubcc4\uba85' \uc785\ub825\ub780\uc5d0 \uc870\ud68c\ud560 UPS \uc774\ub984\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "NUT \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "\ub124\ud2b8\uc6cc\ud06c UPS \ub3c4\uad6c (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "\ub9ac\uc18c\uc2a4" - }, - "description": "\uc13c\uc11c \ub9ac\uc18c\uc2a4 \uc120\ud0dd" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/lb.json b/homeassistant/components/nut/.translations/lb.json deleted file mode 100644 index 7e9ec8ddd97..00000000000 --- a/homeassistant/components/nut/.translations/lb.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "alias": "Alias", - "host": "Apparat", - "name": "Numm", - "password": "Passwuert", - "port": "Port", - "resources": "Ressourcen", - "username": "Benotzernumm" - }, - "description": "Falls m\u00e9i w\u00e9i een UPS mat deem NUT Server verbonnen ass, g\u00e8eff den UPS Numm am 'Alias' Feld un fir ze sichen.", - "title": "Mam NUT Server verbannen" - } - }, - "title": "Network UPS Tools (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Ressourcen" - }, - "description": "Sensor Ressourcen auswielen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/no.json b/homeassistant/components/nut/.translations/no.json deleted file mode 100644 index 31fc3e513c1..00000000000 --- a/homeassistant/components/nut/.translations/no.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "alias": "Alias", - "host": "Vert", - "name": "Navn", - "password": "Passord", - "port": "Port", - "resources": "Ressurser", - "username": "Brukernavn" - }, - "description": "Hvis det er flere UPS-er knyttet til NUT-serveren, angir du navnet UPS for \u00e5 sp\u00f8rre i 'Alias' -feltet.", - "title": "Koble til NUT-serveren" - } - }, - "title": "Nettverk UPS-verkt\u00f8y (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Ressurser" - }, - "description": "Velg Sensorressurser" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/pl.json b/homeassistant/components/nut/.translations/pl.json deleted file mode 100644 index ee9a67b243b..00000000000 --- a/homeassistant/components/nut/.translations/pl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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": { - "alias": "Alias", - "host": "Host", - "name": "Nazwa", - "password": "Has\u0142o", - "port": "Port", - "resources": "Zasoby", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Je\u015bli do serwera NUT pod\u0142\u0105czonych jest wiele zasilaczy UPS, wprowad\u017a w polu Alias nazw\u0119 zasilacza UPS, kt\u00f3rego dotyczy zapytanie.", - "title": "Po\u0142\u0105cz z serwerem NUT" - } - }, - "title": "Sieciowe narz\u0119dzia UPS (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "Zasoby" - }, - "description": "Wybierz zasoby sensor\u00f3w" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/ru.json b/homeassistant/components/nut/.translations/ru.json deleted file mode 100644 index 7bc48ec2e3f..00000000000 --- a/homeassistant/components/nut/.translations/ru.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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." - }, - "step": { - "user": { - "data": { - "alias": "\u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c", - "host": "\u0425\u043e\u0441\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "resources": "\u0420\u0435\u0441\u0443\u0440\u0441\u044b", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0415\u0441\u043b\u0438 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 NUT \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0418\u0411\u041f, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u0418\u0411\u041f \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u043f\u043e\u043b\u0435 '\u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c'.", - "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 NUT" - } - }, - "title": "Network UPS Tools (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "\u0420\u0435\u0441\u0443\u0440\u0441\u044b" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/zh-Hant.json b/homeassistant/components/nut/.translations/zh-Hant.json deleted file mode 100644 index 760a66ba1a5..00000000000 --- a/homeassistant/components/nut/.translations/zh-Hant.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "alias": "\u5225\u540d", - "host": "\u4e3b\u6a5f\u7aef", - "name": "\u540d\u7a31", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "resources": "\u8cc7\u6e90", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u5047\u5982 NUT \u4f3a\u670d\u5668\u4e0b\u64c1\u6709\u591a\u7d44 UPS\uff0c\u65bc\u300c\u5225\u540d\u300d\u6b04\u4f4d\u8f38\u5165 UPS \u540d\u7a31\u3002", - "title": "\u9023\u7dda\u81f3 NUT \u4f3a\u670d\u5668" - } - }, - "title": "Network UPS Tools (NUT)" - }, - "options": { - "step": { - "init": { - "data": { - "resources": "\u8cc7\u6e90" - }, - "description": "\u9078\u64c7\u50b3\u611f\u5668\u8cc7\u6e90" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/nut/__init__.py b/homeassistant/components/nut/__init__.py index c8b794788a4..99563ca65d4 100644 --- a/homeassistant/components/nut/__init__.py +++ b/homeassistant/components/nut/__init__.py @@ -1,7 +1,9 @@ """The nut component.""" import asyncio +from datetime import timedelta import logging +import async_timeout from pynut2.nut2 import PyNUTClient, PyNUTError from homeassistant.config_entries import ConfigEntry @@ -11,20 +13,25 @@ from homeassistant.const import ( CONF_PASSWORD, CONF_PORT, CONF_RESOURCES, + CONF_SCAN_INTERVAL, CONF_USERNAME, ) from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from .const import ( + COORDINATOR, + DEFAULT_SCAN_INTERVAL, DOMAIN, PLATFORMS, PYNUT_DATA, PYNUT_FIRMWARE, PYNUT_MANUFACTURER, PYNUT_MODEL, - PYNUT_STATUS, + PYNUT_NAME, PYNUT_UNIQUE_ID, + UNDO_UPDATE_LISTENER, ) _LOGGER = logging.getLogger(__name__) @@ -47,10 +54,26 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): alias = config.get(CONF_ALIAS) username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) + scan_interval = entry.options.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL) data = PyNUTData(host, port, alias, username, password) - status = await hass.async_add_executor_job(pynutdata_status, data) + async def async_update_data(): + """Fetch data from NUT.""" + async with async_timeout.timeout(10): + return await hass.async_add_executor_job(data.update) + + coordinator = DataUpdateCoordinator( + hass, + _LOGGER, + name="NUT resource status", + update_method=async_update_data, + update_interval=timedelta(seconds=scan_interval), + ) + + # Fetch initial data so we have data when entities subscribe + await coordinator.async_refresh() + status = data.status if not status: _LOGGER.error("NUT Sensor has no data, unable to set up") @@ -58,22 +81,24 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): _LOGGER.debug("NUT Sensors Available: %s", status) + undo_listener = entry.add_update_listener(_async_update_listener) + unique_id = _unique_id_from_status(status) if unique_id is None: unique_id = entry.entry_id hass.data[DOMAIN][entry.entry_id] = { + COORDINATOR: coordinator, PYNUT_DATA: data, - PYNUT_STATUS: status, PYNUT_UNIQUE_ID: unique_id, PYNUT_MANUFACTURER: _manufacturer_from_status(status), PYNUT_MODEL: _model_from_status(status), PYNUT_FIRMWARE: _firmware_from_status(status), + PYNUT_NAME: data.name, + UNDO_UPDATE_LISTENER: undo_listener, } - entry.add_update_listener(_async_update_listener) - for component in PLATFORMS: hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, component) @@ -146,11 +171,6 @@ def find_resources_in_config_entry(config_entry): return config_entry.data[CONF_RESOURCES] -def pynutdata_status(data): - """Wrap for data update as a callable.""" - return data.status - - async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): """Unload a config entry.""" unload_ok = all( @@ -161,6 +181,9 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): ] ) ) + + hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]() + if unload_ok: hass.data[DOMAIN].pop(entry.entry_id) @@ -183,22 +206,34 @@ class PyNUTData: # Establish client with persistent=False to open/close connection on # each update call. This is more reliable with async. self._client = PyNUTClient(self._host, port, username, password, 5, False) + self.ups_list = None self._status = None @property def status(self): """Get latest update if throttle allows. Return status.""" - self.update() return self._status + @property + def name(self): + """Return the name of the ups.""" + return self._alias + def _get_alias(self): """Get the ups alias from NUT.""" try: - return next(iter(self._client.list_ups())) + ups_list = self._client.list_ups() except PyNUTError as err: _LOGGER.error("Failure getting NUT ups alias, %s", err) return None + if not ups_list: + _LOGGER.error("Empty list while getting NUT ups aliases") + return None + + self.ups_list = ups_list + return list(ups_list)[0] + def _get_status(self): """Get the ups status from NUT.""" if self._alias is None: diff --git a/homeassistant/components/nut/config_flow.py b/homeassistant/components/nut/config_flow.py index 0721ea10f94..ba005f04a6a 100644 --- a/homeassistant/components/nut/config_flow.py +++ b/homeassistant/components/nut/config_flow.py @@ -7,37 +7,71 @@ from homeassistant import config_entries, core, exceptions from homeassistant.const import ( CONF_ALIAS, CONF_HOST, - CONF_NAME, CONF_PASSWORD, CONF_PORT, CONF_RESOURCES, + CONF_SCAN_INTERVAL, CONF_USERNAME, ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv -from . import PyNUTData, find_resources_in_config_entry, pynutdata_status -from .const import DEFAULT_HOST, DEFAULT_NAME, DEFAULT_PORT, SENSOR_TYPES +from . import PyNUTData, find_resources_in_config_entry +from .const import ( + DEFAULT_HOST, + DEFAULT_PORT, + DEFAULT_SCAN_INTERVAL, + KEY_STATUS, + KEY_STATUS_DISPLAY, + SENSOR_NAME, + SENSOR_TYPES, +) from .const import DOMAIN # pylint:disable=unused-import _LOGGER = logging.getLogger(__name__) -SENSOR_DICT = {sensor_id: SENSOR_TYPES[sensor_id][0] for sensor_id in SENSOR_TYPES} +SENSOR_DICT = { + sensor_id: sensor_spec[SENSOR_NAME] + for sensor_id, sensor_spec in SENSOR_TYPES.items() +} DATA_SCHEMA = vol.Schema( { - vol.Optional(CONF_NAME, default=DEFAULT_NAME): str, - vol.Required(CONF_RESOURCES): cv.multi_select(SENSOR_DICT), vol.Optional(CONF_HOST, default=DEFAULT_HOST): str, vol.Optional(CONF_PORT, default=DEFAULT_PORT): int, - vol.Optional(CONF_ALIAS): str, vol.Optional(CONF_USERNAME): str, vol.Optional(CONF_PASSWORD): str, } ) +def _resource_schema_base(available_resources, selected_resources): + """Resource selection schema.""" + + known_available_resources = { + sensor_id: sensor[SENSOR_NAME] + for sensor_id, sensor in SENSOR_TYPES.items() + if sensor_id in available_resources + } + + if KEY_STATUS in known_available_resources: + known_available_resources[KEY_STATUS_DISPLAY] = SENSOR_TYPES[ + KEY_STATUS_DISPLAY + ][SENSOR_NAME] + + return { + vol.Required(CONF_RESOURCES, default=selected_resources): cv.multi_select( + known_available_resources + ) + } + + +def _ups_schema(ups_list): + """UPS selection schema.""" + return vol.Schema({vol.Required(CONF_ALIAS): vol.In(ups_list)}) + + async def validate_input(hass: core.HomeAssistant, data): """Validate the user input allows us to connect. @@ -51,17 +85,19 @@ async def validate_input(hass: core.HomeAssistant, data): password = data.get(CONF_PASSWORD) data = PyNUTData(host, port, alias, username, password) - - status = await hass.async_add_executor_job(pynutdata_status, data) - + await hass.async_add_executor_job(data.update) + status = data.status if not status: raise CannotConnect - return {"title": _format_host_port_alias(host, port, alias)} + return {"ups_list": data.ups_list, "available_resources": status} -def _format_host_port_alias(host, port, alias): +def _format_host_port_alias(user_input): """Format a host, port, and alias so it can be used for comparison or display.""" + host = user_input[CONF_HOST] + port = user_input[CONF_PORT] + alias = user_input.get(CONF_ALIAS) if alias: return f"{alias}@{host}:{port}" return f"{host}:{port}" @@ -73,42 +109,100 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): VERSION = 1 CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL - async def async_step_user(self, user_input=None): - """Handle the initial step.""" + def __init__(self): + """Initialize the nut config flow.""" + self.nut_config = {} + self.available_resources = {} + self.ups_list = None + self.title = None + + async def async_step_import(self, user_input=None): + """Handle the import.""" errors = {} if user_input is not None: - if self._host_port_alias_already_configured( - user_input[CONF_HOST], user_input[CONF_PORT], user_input.get(CONF_ALIAS) - ): + if self._host_port_alias_already_configured(user_input): return self.async_abort(reason="already_configured") - try: - info = await validate_input(self.hass, user_input) - except CannotConnect: - errors["base"] = "cannot_connect" - except Exception: # pylint: disable=broad-except - _LOGGER.exception("Unexpected exception") - errors["base"] = "unknown" + _, errors = await self._async_validate_or_error(user_input) - if "base" not in errors: - return self.async_create_entry(title=info["title"], data=user_input) + if not errors: + title = _format_host_port_alias(user_input) + return self.async_create_entry(title=title, data=user_input) return self.async_show_form( step_id="user", data_schema=DATA_SCHEMA, errors=errors ) - def _host_port_alias_already_configured(self, host, port, alias): + async def async_step_user(self, user_input=None): + """Handle the user input.""" + errors = {} + if user_input is not None: + info, errors = await self._async_validate_or_error(user_input) + + if not errors: + self.nut_config.update(user_input) + if len(info["ups_list"]) > 1: + self.ups_list = info["ups_list"] + return await self.async_step_ups() + + if self._host_port_alias_already_configured(self.nut_config): + return self.async_abort(reason="already_configured") + self.available_resources.update(info["available_resources"]) + return await self.async_step_resources() + + return self.async_show_form( + step_id="user", data_schema=DATA_SCHEMA, errors=errors + ) + + async def async_step_ups(self, user_input=None): + """Handle the picking the ups.""" + errors = {} + + if user_input is not None: + self.nut_config.update(user_input) + if self._host_port_alias_already_configured(self.nut_config): + return self.async_abort(reason="already_configured") + info, errors = await self._async_validate_or_error(self.nut_config) + if not errors: + self.available_resources.update(info["available_resources"]) + return await self.async_step_resources() + + return self.async_show_form( + step_id="ups", data_schema=_ups_schema(self.ups_list), errors=errors, + ) + + async def async_step_resources(self, user_input=None): + """Handle the picking the resources.""" + if user_input is None: + return self.async_show_form( + step_id="resources", + data_schema=vol.Schema( + _resource_schema_base(self.available_resources, []) + ), + ) + + self.nut_config.update(user_input) + title = _format_host_port_alias(self.nut_config) + return self.async_create_entry(title=title, data=self.nut_config) + + def _host_port_alias_already_configured(self, user_input): """See if we already have a nut entry matching user input configured.""" existing_host_port_aliases = { - _format_host_port_alias( - entry.data[CONF_HOST], entry.data[CONF_PORT], entry.data.get(CONF_ALIAS) - ) + _format_host_port_alias(entry.data) for entry in self._async_current_entries() } - return _format_host_port_alias(host, port, alias) in existing_host_port_aliases + return _format_host_port_alias(user_input) in existing_host_port_aliases - async def async_step_import(self, user_input): - """Handle import.""" - return await self.async_step_user(user_input) + async def _async_validate_or_error(self, config): + errors = {} + info = {} + try: + info = await validate_input(self.hass, config) + except CannotConnect: + errors["base"] = "cannot_connect" + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected exception") + errors["base"] = "unknown" + return info, errors @staticmethod @callback @@ -130,15 +224,20 @@ class OptionsFlowHandler(config_entries.OptionsFlow): return self.async_create_entry(title="", data=user_input) resources = find_resources_in_config_entry(self.config_entry) - - data_schema = vol.Schema( - { - vol.Required(CONF_RESOURCES, default=resources): cv.multi_select( - SENSOR_DICT - ), - } + scan_interval = self.config_entry.options.get( + CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL + ) + + info = await validate_input(self.hass, self.config_entry.data) + + base_schema = _resource_schema_base(info["available_resources"], resources) + base_schema[ + vol.Optional(CONF_SCAN_INTERVAL, default=scan_interval) + ] = cv.positive_int + + return self.async_show_form( + step_id="init", data_schema=vol.Schema(base_schema), ) - return self.async_show_form(step_id="init", data_schema=data_schema) class CannotConnect(exceptions.HomeAssistantError): diff --git a/homeassistant/components/nut/const.py b/homeassistant/components/nut/const.py index ea164e70b93..9b4908530a8 100644 --- a/homeassistant/components/nut/const.py +++ b/homeassistant/components/nut/const.py @@ -1,10 +1,23 @@ """The nut component.""" -from homeassistant.const import POWER_WATT, TEMP_CELSIUS, TIME_SECONDS, UNIT_PERCENTAGE +from homeassistant.components.sensor import ( + DEVICE_CLASS_BATTERY, + DEVICE_CLASS_POWER, + DEVICE_CLASS_TEMPERATURE, +) +from homeassistant.const import ( + FREQUENCY_HERTZ, + POWER_WATT, + TEMP_CELSIUS, + TIME_SECONDS, + UNIT_PERCENTAGE, + VOLT, +) DOMAIN = "nut" PLATFORMS = ["sensor"] +UNDO_UPDATE_LISTENER = "undo_update_listener" DEFAULT_NAME = "NUT UPS" DEFAULT_HOST = "localhost" @@ -13,97 +26,159 @@ DEFAULT_PORT = 3493 KEY_STATUS = "ups.status" KEY_STATUS_DISPLAY = "ups.status.display" +COORDINATOR = "coordinator" +DEFAULT_SCAN_INTERVAL = 60 + PYNUT_DATA = "data" -PYNUT_STATUS = "status" PYNUT_UNIQUE_ID = "unique_id" PYNUT_MANUFACTURER = "manufacturer" PYNUT_MODEL = "model" PYNUT_FIRMWARE = "firmware" +PYNUT_NAME = "name" SENSOR_TYPES = { - "ups.status.display": ["Status", "", "mdi:information-outline"], - "ups.status": ["Status Data", "", "mdi:information-outline"], - "ups.alarm": ["Alarms", "", "mdi:alarm"], - "ups.temperature": ["UPS Temperature", TEMP_CELSIUS, "mdi:thermometer"], - "ups.load": ["Load", UNIT_PERCENTAGE, "mdi:gauge"], - "ups.load.high": ["Overload Setting", UNIT_PERCENTAGE, "mdi:gauge"], - "ups.id": ["System identifier", "", "mdi:information-outline"], - "ups.delay.start": ["Load Restart Delay", TIME_SECONDS, "mdi:timer"], - "ups.delay.reboot": ["UPS Reboot Delay", TIME_SECONDS, "mdi:timer"], - "ups.delay.shutdown": ["UPS Shutdown Delay", TIME_SECONDS, "mdi:timer"], - "ups.timer.start": ["Load Start Timer", TIME_SECONDS, "mdi:timer"], - "ups.timer.reboot": ["Load Reboot Timer", TIME_SECONDS, "mdi:timer"], - "ups.timer.shutdown": ["Load Shutdown Timer", TIME_SECONDS, "mdi:timer"], - "ups.test.interval": ["Self-Test Interval", TIME_SECONDS, "mdi:timer"], - "ups.test.result": ["Self-Test Result", "", "mdi:information-outline"], - "ups.test.date": ["Self-Test Date", "", "mdi:calendar"], - "ups.display.language": ["Language", "", "mdi:information-outline"], - "ups.contacts": ["External Contacts", "", "mdi:information-outline"], - "ups.efficiency": ["Efficiency", UNIT_PERCENTAGE, "mdi:gauge"], - "ups.power": ["Current Apparent Power", "VA", "mdi:flash"], - "ups.power.nominal": ["Nominal Power", "VA", "mdi:flash"], - "ups.realpower": ["Current Real Power", POWER_WATT, "mdi:flash"], - "ups.realpower.nominal": ["Nominal Real Power", POWER_WATT, "mdi:flash"], - "ups.beeper.status": ["Beeper Status", "", "mdi:information-outline"], - "ups.type": ["UPS Type", "", "mdi:information-outline"], - "ups.watchdog.status": ["Watchdog Status", "", "mdi:information-outline"], - "ups.start.auto": ["Start on AC", "", "mdi:information-outline"], - "ups.start.battery": ["Start on Battery", "", "mdi:information-outline"], - "ups.start.reboot": ["Reboot on Battery", "", "mdi:information-outline"], - "ups.shutdown": ["Shutdown Ability", "", "mdi:information-outline"], - "battery.charge": ["Battery Charge", UNIT_PERCENTAGE, "mdi:gauge"], - "battery.charge.low": ["Low Battery Setpoint", UNIT_PERCENTAGE, "mdi:gauge"], + "ups.status.display": ["Status", "", "mdi:information-outline", None], + "ups.status": ["Status Data", "", "mdi:information-outline", None], + "ups.alarm": ["Alarms", "", "mdi:alarm", None], + "ups.temperature": [ + "UPS Temperature", + TEMP_CELSIUS, + "mdi:thermometer", + DEVICE_CLASS_TEMPERATURE, + ], + "ups.load": ["Load", UNIT_PERCENTAGE, "mdi:gauge", None], + "ups.load.high": ["Overload Setting", UNIT_PERCENTAGE, "mdi:gauge", None], + "ups.id": ["System identifier", "", "mdi:information-outline", None], + "ups.delay.start": ["Load Restart Delay", TIME_SECONDS, "mdi:timer", None], + "ups.delay.reboot": ["UPS Reboot Delay", TIME_SECONDS, "mdi:timer", None], + "ups.delay.shutdown": ["UPS Shutdown Delay", TIME_SECONDS, "mdi:timer", None], + "ups.timer.start": ["Load Start Timer", TIME_SECONDS, "mdi:timer", None], + "ups.timer.reboot": ["Load Reboot Timer", TIME_SECONDS, "mdi:timer", None], + "ups.timer.shutdown": ["Load Shutdown Timer", TIME_SECONDS, "mdi:timer", None], + "ups.test.interval": ["Self-Test Interval", TIME_SECONDS, "mdi:timer", None], + "ups.test.result": ["Self-Test Result", "", "mdi:information-outline", None], + "ups.test.date": ["Self-Test Date", "", "mdi:calendar", None], + "ups.display.language": ["Language", "", "mdi:information-outline", None], + "ups.contacts": ["External Contacts", "", "mdi:information-outline", None], + "ups.efficiency": ["Efficiency", UNIT_PERCENTAGE, "mdi:gauge", None], + "ups.power": ["Current Apparent Power", "VA", "mdi:flash", None], + "ups.power.nominal": ["Nominal Power", "VA", "mdi:flash", None], + "ups.realpower": [ + "Current Real Power", + POWER_WATT, + "mdi:flash", + DEVICE_CLASS_POWER, + ], + "ups.realpower.nominal": [ + "Nominal Real Power", + POWER_WATT, + "mdi:flash", + DEVICE_CLASS_POWER, + ], + "ups.beeper.status": ["Beeper Status", "", "mdi:information-outline", None], + "ups.type": ["UPS Type", "", "mdi:information-outline", None], + "ups.watchdog.status": ["Watchdog Status", "", "mdi:information-outline", None], + "ups.start.auto": ["Start on AC", "", "mdi:information-outline", None], + "ups.start.battery": ["Start on Battery", "", "mdi:information-outline", None], + "ups.start.reboot": ["Reboot on Battery", "", "mdi:information-outline", None], + "ups.shutdown": ["Shutdown Ability", "", "mdi:information-outline", None], + "battery.charge": [ + "Battery Charge", + UNIT_PERCENTAGE, + "mdi:gauge", + DEVICE_CLASS_BATTERY, + ], + "battery.charge.low": ["Low Battery Setpoint", UNIT_PERCENTAGE, "mdi:gauge", None], "battery.charge.restart": [ "Minimum Battery to Start", UNIT_PERCENTAGE, "mdi:gauge", + None, ], "battery.charge.warning": [ "Warning Battery Setpoint", UNIT_PERCENTAGE, "mdi:gauge", + None, ], - "battery.charger.status": ["Charging Status", "", "mdi:information-outline"], - "battery.voltage": ["Battery Voltage", "V", "mdi:flash"], - "battery.voltage.nominal": ["Nominal Battery Voltage", "V", "mdi:flash"], - "battery.voltage.low": ["Low Battery Voltage", "V", "mdi:flash"], - "battery.voltage.high": ["High Battery Voltage", "V", "mdi:flash"], - "battery.capacity": ["Battery Capacity", "Ah", "mdi:flash"], - "battery.current": ["Battery Current", "A", "mdi:flash"], - "battery.current.total": ["Total Battery Current", "A", "mdi:flash"], - "battery.temperature": ["Battery Temperature", TEMP_CELSIUS, "mdi:thermometer"], - "battery.runtime": ["Battery Runtime", TIME_SECONDS, "mdi:timer"], - "battery.runtime.low": ["Low Battery Runtime", TIME_SECONDS, "mdi:timer"], + "battery.charger.status": ["Charging Status", "", "mdi:information-outline", None], + "battery.voltage": ["Battery Voltage", VOLT, "mdi:flash", None], + "battery.voltage.nominal": ["Nominal Battery Voltage", VOLT, "mdi:flash", None], + "battery.voltage.low": ["Low Battery Voltage", VOLT, "mdi:flash", None], + "battery.voltage.high": ["High Battery Voltage", VOLT, "mdi:flash", None], + "battery.capacity": ["Battery Capacity", "Ah", "mdi:flash", None], + "battery.current": ["Battery Current", "A", "mdi:flash", None], + "battery.current.total": ["Total Battery Current", "A", "mdi:flash", None], + "battery.temperature": [ + "Battery Temperature", + TEMP_CELSIUS, + "mdi:thermometer", + DEVICE_CLASS_TEMPERATURE, + ], + "battery.runtime": ["Battery Runtime", TIME_SECONDS, "mdi:timer", None], + "battery.runtime.low": ["Low Battery Runtime", TIME_SECONDS, "mdi:timer", None], "battery.runtime.restart": [ "Minimum Battery Runtime to Start", TIME_SECONDS, "mdi:timer", + None, ], "battery.alarm.threshold": [ "Battery Alarm Threshold", "", "mdi:information-outline", + None, + ], + "battery.date": ["Battery Date", "", "mdi:calendar", None], + "battery.mfr.date": ["Battery Manuf. Date", "", "mdi:calendar", None], + "battery.packs": ["Number of Batteries", "", "mdi:information-outline", None], + "battery.packs.bad": [ + "Number of Bad Batteries", + "", + "mdi:information-outline", + None, + ], + "battery.type": ["Battery Chemistry", "", "mdi:information-outline", None], + "input.sensitivity": [ + "Input Power Sensitivity", + "", + "mdi:information-outline", + None, + ], + "input.transfer.low": ["Low Voltage Transfer", VOLT, "mdi:flash", None], + "input.transfer.high": ["High Voltage Transfer", VOLT, "mdi:flash", None], + "input.transfer.reason": [ + "Voltage Transfer Reason", + "", + "mdi:information-outline", + None, + ], + "input.voltage": ["Input Voltage", VOLT, "mdi:flash", None], + "input.voltage.nominal": ["Nominal Input Voltage", VOLT, "mdi:flash", None], + "input.frequency": ["Input Line Frequency", FREQUENCY_HERTZ, "mdi:flash", None], + "input.frequency.nominal": [ + "Nominal Input Line Frequency", + FREQUENCY_HERTZ, + "mdi:flash", + None, + ], + "input.frequency.status": [ + "Input Frequency Status", + "", + "mdi:information-outline", + None, + ], + "output.current": ["Output Current", "A", "mdi:flash", None], + "output.current.nominal": ["Nominal Output Current", "A", "mdi:flash", None], + "output.voltage": ["Output Voltage", VOLT, "mdi:flash", None], + "output.voltage.nominal": ["Nominal Output Voltage", VOLT, "mdi:flash", None], + "output.frequency": ["Output Frequency", FREQUENCY_HERTZ, "mdi:flash", None], + "output.frequency.nominal": [ + "Nominal Output Frequency", + FREQUENCY_HERTZ, + "mdi:flash", + None, ], - "battery.date": ["Battery Date", "", "mdi:calendar"], - "battery.mfr.date": ["Battery Manuf. Date", "", "mdi:calendar"], - "battery.packs": ["Number of Batteries", "", "mdi:information-outline"], - "battery.packs.bad": ["Number of Bad Batteries", "", "mdi:information-outline"], - "battery.type": ["Battery Chemistry", "", "mdi:information-outline"], - "input.sensitivity": ["Input Power Sensitivity", "", "mdi:information-outline"], - "input.transfer.low": ["Low Voltage Transfer", "V", "mdi:flash"], - "input.transfer.high": ["High Voltage Transfer", "V", "mdi:flash"], - "input.transfer.reason": ["Voltage Transfer Reason", "", "mdi:information-outline"], - "input.voltage": ["Input Voltage", "V", "mdi:flash"], - "input.voltage.nominal": ["Nominal Input Voltage", "V", "mdi:flash"], - "input.frequency": ["Input Line Frequency", "hz", "mdi:flash"], - "input.frequency.nominal": ["Nominal Input Line Frequency", "hz", "mdi:flash"], - "input.frequency.status": ["Input Frequency Status", "", "mdi:information-outline"], - "output.current": ["Output Current", "A", "mdi:flash"], - "output.current.nominal": ["Nominal Output Current", "A", "mdi:flash"], - "output.voltage": ["Output Voltage", "V", "mdi:flash"], - "output.voltage.nominal": ["Nominal Output Voltage", "V", "mdi:flash"], - "output.frequency": ["Output Frequency", "hz", "mdi:flash"], - "output.frequency.nominal": ["Nominal Output Frequency", "hz", "mdi:flash"], } STATE_TYPES = { @@ -123,3 +198,8 @@ STATE_TYPES = { "FSD": "Forced Shutdown", "ALARM": "Alarm", } + +SENSOR_NAME = 0 +SENSOR_UNIT = 1 +SENSOR_ICON = 2 +SENSOR_DEVICE_CLASS = 3 diff --git a/homeassistant/components/nut/manifest.json b/homeassistant/components/nut/manifest.json index 26accb5edb8..226250b9a52 100644 --- a/homeassistant/components/nut/manifest.json +++ b/homeassistant/components/nut/manifest.json @@ -2,10 +2,7 @@ "domain": "nut", "name": "Network UPS Tools (NUT)", "documentation": "https://www.home-assistant.io/integrations/nut", - "requirements": [ - "pynut2==2.1.2" - ], - "dependencies": [], + "requirements": ["pynut2==2.1.2"], "codeowners": ["@bdraco"], "config_flow": true } diff --git a/homeassistant/components/nut/sensor.py b/homeassistant/components/nut/sensor.py index a611c8d4268..32daaaa2582 100644 --- a/homeassistant/components/nut/sensor.py +++ b/homeassistant/components/nut/sensor.py @@ -1,5 +1,4 @@ """Provides a sensor to track various status aspects of a UPS.""" -from datetime import timedelta import logging import voluptuous as vol @@ -21,6 +20,7 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from .const import ( + COORDINATOR, DEFAULT_HOST, DEFAULT_NAME, DEFAULT_PORT, @@ -31,18 +31,19 @@ from .const import ( PYNUT_FIRMWARE, PYNUT_MANUFACTURER, PYNUT_MODEL, - PYNUT_STATUS, + PYNUT_NAME, PYNUT_UNIQUE_ID, + SENSOR_DEVICE_CLASS, + SENSOR_ICON, + SENSOR_NAME, SENSOR_TYPES, + SENSOR_UNIT, STATE_TYPES, ) _LOGGER = logging.getLogger(__name__) -SCAN_INTERVAL = timedelta(seconds=60) - - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, @@ -56,7 +57,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Import the platform into a config entry.""" hass.async_create_task( @@ -69,18 +70,18 @@ def setup_platform(hass, config, add_entities, discovery_info=None): async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the NUT sensors.""" - config = config_entry.data pynut_data = hass.data[DOMAIN][config_entry.entry_id] - data = pynut_data[PYNUT_DATA] - status = pynut_data[PYNUT_STATUS] unique_id = pynut_data[PYNUT_UNIQUE_ID] manufacturer = pynut_data[PYNUT_MANUFACTURER] model = pynut_data[PYNUT_MODEL] firmware = pynut_data[PYNUT_FIRMWARE] + name = pynut_data[PYNUT_NAME] + coordinator = pynut_data[COORDINATOR] + data = pynut_data[PYNUT_DATA] + status = data.status entities = [] - name = config[CONF_NAME] if CONF_RESOURCES in config_entry.options: resources = config_entry.options[CONF_RESOURCES] else: @@ -96,7 +97,14 @@ async def async_setup_entry(hass, config_entry, async_add_entities): ): entities.append( NUTSensor( - name, data, sensor_type, unique_id, manufacturer, model, firmware + coordinator, + data, + name.title(), + sensor_type, + unique_id, + manufacturer, + model, + firmware, ) ) else: @@ -113,21 +121,27 @@ class NUTSensor(Entity): """Representation of a sensor entity for NUT status values.""" def __init__( - self, name, data, sensor_type, unique_id, manufacturer, model, firmware + self, + coordinator, + data, + name, + sensor_type, + unique_id, + manufacturer, + model, + firmware, ): """Initialize the sensor.""" - self._data = data + self._coordinator = coordinator self._type = sensor_type self._manufacturer = manufacturer self._firmware = firmware self._model = model self._device_name = name - self._name = "{} {}".format(name, SENSOR_TYPES[sensor_type][0]) - self._unit = SENSOR_TYPES[sensor_type][1] - self._state = None + self._name = f"{name} {SENSOR_TYPES[sensor_type][SENSOR_NAME]}" + self._unit = SENSOR_TYPES[sensor_type][SENSOR_UNIT] + self._data = data self._unique_id = unique_id - self._display_state = None - self._available = False @property def device_info(self): @@ -161,46 +175,56 @@ class NUTSensor(Entity): @property def icon(self): """Icon to use in the frontend, if any.""" - return SENSOR_TYPES[self._type][2] + if SENSOR_TYPES[self._type][SENSOR_DEVICE_CLASS]: + # The UI will assign an icon + # if it has a class + return None + return SENSOR_TYPES[self._type][SENSOR_ICON] + + @property + def device_class(self): + """Device class of the sensor.""" + return SENSOR_TYPES[self._type][SENSOR_DEVICE_CLASS] @property def state(self): """Return entity state from ups.""" - return self._state + if self._type == KEY_STATUS_DISPLAY: + return _format_display_state(self._data.status) + return self._data.status.get(self._type) @property def unit_of_measurement(self): """Return the unit of measurement of this entity, if any.""" return self._unit + @property + def should_poll(self): + """No need to poll. Coordinator notifies entity of updates.""" + return False + @property def available(self): - """Return if the device is polling successfully.""" - return self._available + """Return if entity is available.""" + return self._coordinator.last_update_success @property def device_state_attributes(self): """Return the sensor attributes.""" - return {ATTR_STATE: self._display_state} + return {ATTR_STATE: _format_display_state(self._data.status)} - def update(self): - """Get the latest status and use it to update our sensor state.""" - status = self._data.status + async def async_update(self): + """Update the entity. - if status is None: - self._available = False - return + Only used by the generic entity update service. + """ + await self._coordinator.async_request_refresh() - self._available = True - self._display_state = _format_display_state(status) - # In case of the display status sensor, keep a human-readable form - # as the sensor state. - if self._type == KEY_STATUS_DISPLAY: - self._state = self._display_state - elif self._type not in status: - self._state = None - else: - self._state = status[self._type] + async def async_added_to_hass(self): + """When entity is added to hass.""" + self.async_on_remove( + self._coordinator.async_add_listener(self.async_write_ha_state) + ) def _format_display_state(status): diff --git a/homeassistant/components/nut/strings.json b/homeassistant/components/nut/strings.json index e37a019af78..76c12cdacfe 100644 --- a/homeassistant/components/nut/strings.json +++ b/homeassistant/components/nut/strings.json @@ -1,38 +1,39 @@ { "config": { - "title": "Network UPS Tools (NUT)", "step": { "user": { "title": "Connect to the NUT server", - "description": "If there are multiple UPSs attached to the NUT server, enter the name UPS to query in the 'Alias' field.", "data": { - "name": "Name", "host": "Host", "port": "Port", - "alias": "Alias", "username": "Username", - "password": "Password", - "resources": "Resources" + "password": "Password" } + }, + "ups": { + "title": "Choose the UPS to Monitor", + "data": { "alias": "Alias", "resources": "Resources" } + }, + "resources": { + "title": "Choose the Resources to Monitor", + "data": { "resources": "Resources" } } }, "error": { "cannot_connect": "Failed to connect, please try again", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } }, "options": { "step": { "init": { - "description": "Choose Sensor Resources", + "description": "Choose Sensor Resources.", "data": { - "resources": "Resources" + "resources": "Resources", + "scan_interval": "Scan Interval (seconds)" } } } } - -} \ No newline at end of file +} diff --git a/homeassistant/components/nut/translations/ca.json b/homeassistant/components/nut/translations/ca.json new file mode 100644 index 00000000000..d00f3d08185 --- /dev/null +++ b/homeassistant/components/nut/translations/ca.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "unknown": "Error inesperat" + }, + "step": { + "resources": { + "data": { + "resources": "Recursos" + }, + "title": "Selecciona els recursos a monitoritzar" + }, + "ups": { + "data": { + "alias": "\u00c0lies", + "resources": "Recursos" + }, + "title": "Selecciona el SAI (UPS) a monitoritzar" + }, + "user": { + "data": { + "host": "Amfitri\u00f3", + "password": "Contrasenya", + "port": "Port", + "username": "Nom d'usuari" + }, + "title": "No s'ha pogut connectar amb el servidor NUT" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Recursos", + "scan_interval": "Interval d'escaneig (segons)" + }, + "description": "Selecciona els recursos del sensor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/.translations/da.json b/homeassistant/components/nut/translations/da.json similarity index 100% rename from homeassistant/components/nut/.translations/da.json rename to homeassistant/components/nut/translations/da.json diff --git a/homeassistant/components/nut/translations/de.json b/homeassistant/components/nut/translations/de.json new file mode 100644 index 00000000000..793ab5bfa7c --- /dev/null +++ b/homeassistant/components/nut/translations/de.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "resources": { + "data": { + "resources": "Ressourcen" + }, + "title": "W\u00e4hlen Sie die zu \u00fcberwachenden Ressourcen aus" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Ressourcen" + }, + "title": "W\u00e4hle die zu \u00fcberwachende USV" + }, + "user": { + "data": { + "host": "Host", + "password": "Passwort", + "port": "Port", + "username": "Benutzername" + }, + "title": "Stellen Sie eine Verbindung zum NUT-Server her" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Ressourcen", + "scan_interval": "Scan-Intervall (Sekunden)" + }, + "description": "W\u00e4hlen Sie Sensorressourcen." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/en.json b/homeassistant/components/nut/translations/en.json new file mode 100644 index 00000000000..f698ad9287a --- /dev/null +++ b/homeassistant/components/nut/translations/en.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "resources": { + "data": { + "resources": "Resources" + }, + "title": "Choose the Resources to Monitor" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Resources" + }, + "title": "Choose the UPS to Monitor" + }, + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Port", + "username": "Username" + }, + "title": "Connect to the NUT server" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Resources", + "scan_interval": "Scan Interval (seconds)" + }, + "description": "Choose Sensor Resources." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/es.json b/homeassistant/components/nut/translations/es.json new file mode 100644 index 00000000000..81b0f9c8b71 --- /dev/null +++ b/homeassistant/components/nut/translations/es.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", + "unknown": "Error inesperado" + }, + "step": { + "resources": { + "data": { + "resources": "Recursos" + }, + "title": "Selecciona los recursos a monitorizar" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Recursos" + }, + "title": "Selecciona el UPS a monitorizar" + }, + "user": { + "data": { + "host": "Host", + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Usuario" + }, + "title": "Conectar con el servidor NUT" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Recursos", + "scan_interval": "Intervalo de escaneo (segundos)" + }, + "description": "Elegir Recursos del Sensor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/fr.json b/homeassistant/components/nut/translations/fr.json new file mode 100644 index 00000000000..02927228c3f --- /dev/null +++ b/homeassistant/components/nut/translations/fr.json @@ -0,0 +1,43 @@ +{ + "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": { + "resources": "Ressources" + }, + "title": "Choisissez les ressources \u00e0 surveiller" + }, + "ups": { + "data": { + "alias": "Alias", + "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" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/it.json b/homeassistant/components/nut/translations/it.json new file mode 100644 index 00000000000..177fd72067e --- /dev/null +++ b/homeassistant/components/nut/translations/it.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "step": { + "resources": { + "data": { + "resources": "Risorse" + }, + "title": "Scegliere le risorse da monitorare" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Risorse" + }, + "title": "Scegliere l'UPS da monitorare" + }, + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Porta", + "username": "Nome utente" + }, + "title": "Connessione al server NUT" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Risorse", + "scan_interval": "Intervallo di scansione (secondi)" + }, + "description": "Scegliere le Risorse del Sensore." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/ko.json b/homeassistant/components/nut/translations/ko.json new file mode 100644 index 00000000000..6a74c3969b6 --- /dev/null +++ b/homeassistant/components/nut/translations/ko.json @@ -0,0 +1,46 @@ +{ + "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": { + "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", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "NUT \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "\ub9ac\uc18c\uc2a4", + "scan_interval": "\uc2a4\uce94 \uac04\uaca9 (\ucd08)" + }, + "description": "\uc13c\uc11c \ub9ac\uc18c\uc2a4 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/lb.json b/homeassistant/components/nut/translations/lb.json new file mode 100644 index 00000000000..fa7dc4da26d --- /dev/null +++ b/homeassistant/components/nut/translations/lb.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "resources": { + "data": { + "resources": "Ressourcen" + }, + "title": "Ressourcen auswielen fir z'iwwerwaachen" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Ressourcen" + }, + "title": "UPS fir z'iwwerwaachen auswielen" + }, + "user": { + "data": { + "host": "Apparat", + "password": "Passwuert", + "port": "Port", + "username": "Benotzernumm" + }, + "title": "Mam NUT Server verbannen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Ressourcen", + "scan_interval": "Scan Intervall (sekonnen)" + }, + "description": "Sensor Ressourcen auswielen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/nl.json b/homeassistant/components/nut/translations/nl.json new file mode 100644 index 00000000000..2eaad319712 --- /dev/null +++ b/homeassistant/components/nut/translations/nl.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "unknown": "Onverwachte fout" + }, + "step": { + "ups": { + "title": "Kies een UPS om uit te lezen" + }, + "user": { + "data": { + "host": "Host", + "password": "Wachtwoord", + "port": "Poort", + "username": "Gebruikersnaam" + }, + "title": "Verbind met NUT-server" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Bronnen" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/no.json b/homeassistant/components/nut/translations/no.json new file mode 100644 index 00000000000..5464e034244 --- /dev/null +++ b/homeassistant/components/nut/translations/no.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "unknown": "Uventet feil" + }, + "step": { + "resources": { + "data": { + "resources": "Ressurser" + }, + "title": "Velg ressurser som skal overv\u00e5kes" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Ressurser" + }, + "title": "Velg UPS som skal overv\u00e5kes" + }, + "user": { + "data": { + "host": "Vert", + "password": "Passord", + "port": "Port", + "username": "Brukernavn" + }, + "title": "Koble til NUT-serveren" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Ressurser", + "scan_interval": "Skanneintervall (sekunder)" + }, + "description": "Velg Sensor Ressurser." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/pl.json b/homeassistant/components/nut/translations/pl.json new file mode 100644 index 00000000000..32fab6f325b --- /dev/null +++ b/homeassistant/components/nut/translations/pl.json @@ -0,0 +1,46 @@ +{ + "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": { + "resources": { + "data": { + "resources": "Zasoby" + }, + "title": "Wybierz zasoby do monitorowania" + }, + "ups": { + "data": { + "alias": "Alias", + "resources": "Zasoby" + }, + "title": "Wybierz UPS do monitorowania" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o", + "port": "Port", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105cz z serwerem NUT" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Zasoby", + "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji (sekundy)" + }, + "description": "Wybierz zasoby sensor\u00f3w" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/pt.json b/homeassistant/components/nut/translations/pt.json new file mode 100644 index 00000000000..4ebc88bb1cf --- /dev/null +++ b/homeassistant/components/nut/translations/pt.json @@ -0,0 +1,19 @@ +{ + "config": { + "step": { + "ups": { + "data": { + "resources": "Recursos" + } + }, + "user": { + "data": { + "host": "Servidor", + "password": "Palavra-passe", + "port": "Porta", + "username": "Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/ru.json b/homeassistant/components/nut/translations/ru.json new file mode 100644 index 00000000000..012ac2ae568 --- /dev/null +++ b/homeassistant/components/nut/translations/ru.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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." + }, + "step": { + "resources": { + "data": { + "resources": "\u0420\u0435\u0441\u0443\u0440\u0441\u044b" + }, + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430" + }, + "ups": { + "data": { + "alias": "\u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c", + "resources": "\u0420\u0435\u0441\u0443\u0440\u0441\u044b" + }, + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0418\u0411\u041f \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430" + }, + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 NUT" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "\u0420\u0435\u0441\u0443\u0440\u0441\u044b", + "scan_interval": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/sl.json b/homeassistant/components/nut/translations/sl.json new file mode 100644 index 00000000000..1f0b269562d --- /dev/null +++ b/homeassistant/components/nut/translations/sl.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee nastavljena" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "resources": { + "data": { + "resources": "Viri" + }, + "title": "Izberite vire za spremljanje" + }, + "ups": { + "data": { + "alias": "Vzdevek", + "resources": "Viri" + }, + "title": "Izberite UPS za spremljanje" + }, + "user": { + "data": { + "host": "Gostitelj", + "password": "Geslo", + "port": "Vrata", + "username": "Uporabni\u0161ko ime" + }, + "title": "Pove\u017eite se s stre\u017enikom NUT" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Viri", + "scan_interval": "Interval skeniranja (sekunde)" + }, + "description": "Izberite vire senzorja." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/zh-Hant.json b/homeassistant/components/nut/translations/zh-Hant.json new file mode 100644 index 00000000000..35cd266854f --- /dev/null +++ b/homeassistant/components/nut/translations/zh-Hant.json @@ -0,0 +1,46 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "resources": { + "data": { + "resources": "\u8cc7\u6e90" + }, + "title": "\u9078\u64c7\u6240\u8981\u76e3\u8996\u7684\u8cc7\u6e90" + }, + "ups": { + "data": { + "alias": "\u5225\u540d", + "resources": "\u8cc7\u6e90" + }, + "title": "\u9078\u64c7\u6240\u8981\u76e3\u8996\u7684 UPS" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u9023\u7dda\u81f3 NUT \u4f3a\u670d\u5668" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "\u8cc7\u6e90", + "scan_interval": "\u6383\u63cf\u9593\u8ddd\uff08\u79d2\uff09" + }, + "description": "\u9078\u64c7\u50b3\u611f\u5668\u8cc7\u6e90\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/__init__.py b/homeassistant/components/nws/__init__.py index dde2f6dee11..f6cdc7c57cd 100644 --- a/homeassistant/components/nws/__init__.py +++ b/homeassistant/components/nws/__init__.py @@ -1 +1,129 @@ -"""NWS Integration.""" +"""The National Weather Service integration.""" +import asyncio +import datetime +import logging + +from pynws import SimpleNWS +import voluptuous as vol + +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE +from homeassistant.core import HomeAssistant +from homeassistant.helpers.aiohttp_client import async_get_clientsession +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator + +from .const import ( + CONF_STATION, + COORDINATOR_FORECAST, + COORDINATOR_FORECAST_HOURLY, + COORDINATOR_OBSERVATION, + DOMAIN, + NWS_DATA, +) + +_LOGGER = logging.getLogger(__name__) + +_INDIVIDUAL_SCHEMA = vol.Schema( + { + vol.Required(CONF_API_KEY): cv.string, + vol.Inclusive( + CONF_LATITUDE, "coordinates", "Latitude and longitude must exist together" + ): cv.latitude, + vol.Inclusive( + CONF_LONGITUDE, "coordinates", "Latitude and longitude must exist together" + ): cv.longitude, + vol.Optional(CONF_STATION): cv.string, + } +) + +CONFIG_SCHEMA = vol.Schema( + {DOMAIN: vol.All(cv.ensure_list, [_INDIVIDUAL_SCHEMA])}, extra=vol.ALLOW_EXTRA, +) + +PLATFORMS = ["weather"] + +DEFAULT_SCAN_INTERVAL = datetime.timedelta(minutes=10) + + +def base_unique_id(latitude, longitude): + """Return unique id for entries in configuration.""" + return f"{latitude}_{longitude}" + + +async def async_setup(hass: HomeAssistant, config: dict): + """Set up the National Weather Service (NWS) component.""" + return True + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): + """Set up a National Weather Service entry.""" + latitude = entry.data[CONF_LATITUDE] + longitude = entry.data[CONF_LONGITUDE] + api_key = entry.data[CONF_API_KEY] + station = entry.data[CONF_STATION] + + client_session = async_get_clientsession(hass) + + # set_station only does IO when station is None + nws_data = SimpleNWS(latitude, longitude, api_key, client_session) + await nws_data.set_station(station) + + coordinator_observation = DataUpdateCoordinator( + hass, + _LOGGER, + name=f"NWS observation station {station}", + update_method=nws_data.update_observation, + update_interval=DEFAULT_SCAN_INTERVAL, + ) + + coordinator_forecast = DataUpdateCoordinator( + hass, + _LOGGER, + name=f"NWS forecast station {station}", + update_method=nws_data.update_forecast, + update_interval=DEFAULT_SCAN_INTERVAL, + ) + + coordinator_forecast_hourly = DataUpdateCoordinator( + hass, + _LOGGER, + name=f"NWS forecast hourly station {station}", + update_method=nws_data.update_forecast_hourly, + update_interval=DEFAULT_SCAN_INTERVAL, + ) + 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, + COORDINATOR_FORECAST_HOURLY: coordinator_forecast_hourly, + } + + # Fetch initial data so we have data when entities subscribe + await coordinator_observation.async_refresh() + await coordinator_forecast.async_refresh() + await coordinator_forecast_hourly.async_refresh() + + for component in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, component) + ) + return True + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): + """Unload a config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, component) + for component in PLATFORMS + ] + ) + ) + if unload_ok: + hass.data[DOMAIN].pop(entry.entry_id) + if len(hass.data[DOMAIN]) == 0: + hass.data.pop(DOMAIN) + return unload_ok diff --git a/homeassistant/components/nws/config_flow.py b/homeassistant/components/nws/config_flow.py new file mode 100644 index 00000000000..ebef7418d98 --- /dev/null +++ b/homeassistant/components/nws/config_flow.py @@ -0,0 +1,85 @@ +"""Config flow for National Weather Service (NWS) integration.""" +import logging + +import aiohttp +from pynws import SimpleNWS +import voluptuous as vol + +from homeassistant import config_entries, core, exceptions +from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE +from homeassistant.helpers import config_validation as cv +from homeassistant.helpers.aiohttp_client import async_get_clientsession + +from . import base_unique_id +from .const import CONF_STATION, DOMAIN # pylint:disable=unused-import + +_LOGGER = logging.getLogger(__name__) + + +async def validate_input(hass: core.HomeAssistant, data): + """Validate the user input allows us to connect. + + Data has the keys from DATA_SCHEMA with values provided by the user. + """ + latitude = data[CONF_LATITUDE] + longitude = data[CONF_LONGITUDE] + api_key = data[CONF_API_KEY] + station = data.get(CONF_STATION) + + client_session = async_get_clientsession(hass) + ha_api_key = f"{api_key} homeassistant" + nws = SimpleNWS(latitude, longitude, ha_api_key, client_session) + + try: + await nws.set_station(station) + except aiohttp.ClientError as err: + _LOGGER.error("Could not connect: %s", err) + raise CannotConnect + + return {"title": nws.station} + + +class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow for National Weather Service (NWS).""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL + + async def async_step_user(self, user_input=None): + """Handle the initial step.""" + errors = {} + if user_input is not None: + await self.async_set_unique_id( + base_unique_id(user_input[CONF_LATITUDE], user_input[CONF_LONGITUDE]) + ) + self._abort_if_unique_id_configured() + try: + info = await validate_input(self.hass, user_input) + user_input[CONF_STATION] = info["title"] + return self.async_create_entry(title=info["title"], data=user_input) + except CannotConnect: + errors["base"] = "cannot_connect" + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected exception") + errors["base"] = "unknown" + + data_schema = vol.Schema( + { + vol.Required(CONF_API_KEY): str, + vol.Required( + CONF_LATITUDE, default=self.hass.config.latitude + ): cv.latitude, + vol.Required( + CONF_LONGITUDE, default=self.hass.config.longitude + ): cv.longitude, + vol.Optional(CONF_STATION): str, + } + ) + + return self.async_show_form( + step_id="user", data_schema=data_schema, errors=errors + ) + + +class CannotConnect(exceptions.HomeAssistantError): + """Error to indicate we cannot connect.""" diff --git a/homeassistant/components/nws/const.py b/homeassistant/components/nws/const.py new file mode 100644 index 00000000000..c8798134473 --- /dev/null +++ b/homeassistant/components/nws/const.py @@ -0,0 +1,62 @@ +"""Constants for National Weather Service Integration.""" +DOMAIN = "nws" + +CONF_STATION = "station" + +ATTRIBUTION = "Data from National Weather Service/NOAA" + +ATTR_FORECAST_DETAILED_DESCRIPTION = "detailed_description" +ATTR_FORECAST_PRECIP_PROB = "precipitation_probability" +ATTR_FORECAST_DAYTIME = "daytime" + +CONDITION_CLASSES = { + "exceptional": [ + "Tornado", + "Hurricane conditions", + "Tropical storm conditions", + "Dust", + "Smoke", + "Haze", + "Hot", + "Cold", + ], + "snowy": ["Snow", "Sleet", "Blizzard"], + "snowy-rainy": [ + "Rain/snow", + "Rain/sleet", + "Freezing rain/snow", + "Freezing rain", + "Rain/freezing rain", + ], + "hail": [], + "lightning-rainy": [ + "Thunderstorm (high cloud cover)", + "Thunderstorm (medium cloud cover)", + "Thunderstorm (low cloud cover)", + ], + "lightning": [], + "pouring": [], + "rainy": [ + "Rain", + "Rain showers (high cloud cover)", + "Rain showers (low cloud cover)", + ], + "windy-variant": ["Mostly cloudy and windy", "Overcast and windy"], + "windy": [ + "Fair/clear and windy", + "A few clouds and windy", + "Partly cloudy and windy", + ], + "fog": ["Fog/mist"], + "clear": ["Fair/clear"], # sunny and clear-night + "cloudy": ["Mostly cloudy", "Overcast"], + "partlycloudy": ["A few clouds", "Partly cloudy"], +} + +DAYNIGHT = "daynight" +HOURLY = "hourly" + +NWS_DATA = "nws data" +COORDINATOR_OBSERVATION = "coordinator_observation" +COORDINATOR_FORECAST = "coordinator_forecast" +COORDINATOR_FORECAST_HOURLY = "coordinator_forecast_hourly" diff --git a/homeassistant/components/nws/manifest.json b/homeassistant/components/nws/manifest.json index 2bb77c2d95b..2aa783f7a28 100644 --- a/homeassistant/components/nws/manifest.json +++ b/homeassistant/components/nws/manifest.json @@ -2,7 +2,8 @@ "domain": "nws", "name": "National Weather Service (NWS)", "documentation": "https://www.home-assistant.io/integrations/nws", - "dependencies": [], "codeowners": ["@MatthewFlamm"], - "requirements": ["pynws==0.10.4"] + "requirements": ["pynws==0.10.4"], + "quality_scale": "silver", + "config_flow": true } diff --git a/homeassistant/components/nws/strings.json b/homeassistant/components/nws/strings.json new file mode 100644 index 00000000000..4d9783ca1a0 --- /dev/null +++ b/homeassistant/components/nws/strings.json @@ -0,0 +1,21 @@ +{ + "config": { + "step": { + "user": { + "description": "If a METAR station code is not specified, the latitude and longitude will be used to find the closest station.", + "title": "Connect to the National Weather Service", + "data": { + "api_key": "API key (email)", + "latitude": "Latitude", + "longitude": "Longitude", + "station": "METAR station code" + } + } + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "abort": { "already_configured": "Device is already configured" } + } +} diff --git a/homeassistant/components/nws/translations/ca.json b/homeassistant/components/nws/translations/ca.json new file mode 100644 index 00000000000..bbb316439e5 --- /dev/null +++ b/homeassistant/components/nws/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "api_key": "Clau API (correu electr\u00f2nic)", + "latitude": "Latitud", + "longitude": "Longitud", + "station": "Codi d'estaci\u00f3 METAR" + }, + "description": "Si no s'especifica un codi d'estaci\u00f3 METAR, la latitud i longitud s'utilitzaran per trobar l'estaci\u00f3 m\u00e9s propera.", + "title": "Connexi\u00f3 amb el Servei Meteorol\u00f2gic Nacional (USA)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/de.json b/homeassistant/components/nws/translations/de.json new file mode 100644 index 00000000000..4acc4c1a3b6 --- /dev/null +++ b/homeassistant/components/nws/translations/de.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "api_key": "API-Schl\u00fcssel (E-Mail)", + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "station": "METAR Stationscode" + }, + "description": "Wenn kein METAR-Stationscode angegeben ist, werden L\u00e4ngen- und Breitengrad verwendet, um die n\u00e4chstgelegene Station zu finden.", + "title": "Stellen Sie eine Verbindung zum Nationalen Wetterdienst her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/en.json b/homeassistant/components/nws/translations/en.json new file mode 100644 index 00000000000..929281f736d --- /dev/null +++ b/homeassistant/components/nws/translations/en.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "api_key": "API key (email)", + "latitude": "Latitude", + "longitude": "Longitude", + "station": "METAR station code" + }, + "description": "If a METAR station code is not specified, the latitude and longitude will be used to find the closest station.", + "title": "Connect to the National Weather Service" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/es.json b/homeassistant/components/nws/translations/es.json new file mode 100644 index 00000000000..0dd768d15d0 --- /dev/null +++ b/homeassistant/components/nws/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "api_key": "Clave API (correo electr\u00f3nico)", + "latitude": "Latitud", + "longitude": "Longitud", + "station": "C\u00f3digo de estaci\u00f3n METAR" + }, + "description": "Si no se especifica un c\u00f3digo de estaci\u00f3n METAR, se utilizar\u00e1n la latitud y la longitud para encontrar la estaci\u00f3n m\u00e1s cercana.", + "title": "Conectar con el National Weather Service" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/fr.json b/homeassistant/components/nws/translations/fr.json new file mode 100644 index 00000000000..94bb529aa62 --- /dev/null +++ b/homeassistant/components/nws/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", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/it.json b/homeassistant/components/nws/translations/it.json new file mode 100644 index 00000000000..f4b110f857f --- /dev/null +++ b/homeassistant/components/nws/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "api_key": "Chiave API (email)", + "latitude": "Latitudine", + "longitude": "Logitudine", + "station": "Codice stazione METAR" + }, + "description": "Se non viene specificato un codice di stazione METAR, la latitudine e la longitudine verranno utilizzate per trovare la stazione pi\u00f9 vicina.", + "title": "Collegati al Servizio Meteorologico Nazionale" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/ko.json b/homeassistant/components/nws/translations/ko.json new file mode 100644 index 00000000000..3b6eae14ba7 --- /dev/null +++ b/homeassistant/components/nws/translations/ko.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "api_key": "API \ud0a4 (\uc774\uba54\uc77c)", + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "station": "METAR \uc2a4\ud14c\uc774\uc158 \ucf54\ub4dc" + }, + "description": "METAR \uc2a4\ud14c\uc774\uc158 \ucf54\ub4dc\ub97c \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 \uac00\uae4c\uc6b4 \uc2a4\ud14c\uc774\uc158\uc744 \ucc3e\ub294\ub370 \uc704\ub3c4\uc640 \uacbd\ub3c4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.", + "title": "\ubbf8\uad6d \uae30\uc0c1\uccad\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/lb.json b/homeassistant/components/nws/translations/lb.json new file mode 100644 index 00000000000..054e3bf9642 --- /dev/null +++ b/homeassistant/components/nws/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "api_key": "API Schl\u00ebssel (E-Mail)", + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/nl.json b/homeassistant/components/nws/translations/nl.json new file mode 100644 index 00000000000..590b9c90e12 --- /dev/null +++ b/homeassistant/components/nws/translations/nl.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "longitude": "Lengtegraad" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/no.json b/homeassistant/components/nws/translations/no.json new file mode 100644 index 00000000000..bd14f1bb653 --- /dev/null +++ b/homeassistant/components/nws/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "api_key": "API-n\u00f8kkel (e-post)", + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "station": "METAR stasjonskode" + }, + "description": "Hvis en METAR-stasjonskode ikke er spesifisert, vil breddegrad og lengdegrad brukes til \u00e5 finne den n\u00e6rmeste stasjonen.", + "title": "Koble til National Weather Service" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/pl.json b/homeassistant/components/nws/translations/pl.json new file mode 100644 index 00000000000..3da4d1f3ea8 --- /dev/null +++ b/homeassistant/components/nws/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API (e-mail)", + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "station": "Kod stacji METAR" + }, + "description": "Je\u015bli nie podasz kodu stacji METAR, do znalezienia najbli\u017cszej stacji zostan\u0105 u\u017cyte szeroko\u015b\u0107 i d\u0142ugo\u015b\u0107 geograficzna.", + "title": "Po\u0142\u0105cz z National Weather Service" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/pt.json b/homeassistant/components/nws/translations/pt.json new file mode 100644 index 00000000000..2447be7ee67 --- /dev/null +++ b/homeassistant/components/nws/translations/pt.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "O dispositivo j\u00e1 est\u00e1 configurado" + }, + "error": { + "cannot_connect": "Falha ao conectar, tente novamente", + "unknown": "Erro inesperado" + }, + "step": { + "user": { + "data": { + "api_key": "Chave da API (email)", + "latitude": "Latitude", + "longitude": "Longitude" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/ru.json b/homeassistant/components/nws/translations/ru.json new file mode 100644 index 00000000000..a5808a43f12 --- /dev/null +++ b/homeassistant/components/nws/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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." + }, + "step": { + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API (\u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b)", + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "station": "\u041a\u043e\u0434 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 METAR" + }, + "description": "\u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 METAR \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0448\u0438\u0440\u043e\u0442\u0430 \u0438 \u0434\u043e\u043b\u0433\u043e\u0442\u0430.", + "title": "National Weather Service" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/zh-Hant.json b/homeassistant/components/nws/translations/zh-Hant.json new file mode 100644 index 00000000000..1b614a752d9 --- /dev/null +++ b/homeassistant/components/nws/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "api_key": "API \u5bc6\u9470\uff08\u90f5\u4ef6\uff09", + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "station": "METAR \u6a5f\u5834\u4ee3\u78bc" + }, + "description": "\u5047\u5982\u672a\u6307\u5b9a METAR \u6a5f\u5834\u4ee3\u78bc\uff0c\u5c07\u6703\u4f7f\u7528\u7d93\u7def\u5ea6\u8cc7\u8a0a\u5c0b\u627e\u6700\u8fd1\u7684\u6a5f\u5834\u3002", + "title": "\u9023\u7dda\u81f3\u7f8e\u570b\u570b\u5bb6\u6c23\u8c61\u5c40\u670d\u52d9" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/weather.py b/homeassistant/components/nws/weather.py index a0ce1449479..afccebfbccd 100644 --- a/homeassistant/components/nws/weather.py +++ b/homeassistant/components/nws/weather.py @@ -1,28 +1,17 @@ """Support for NWS weather service.""" -from collections import OrderedDict -from datetime import timedelta -from json import JSONDecodeError import logging -import aiohttp -from pynws import SimpleNWS -import voluptuous as vol - from homeassistant.components.weather import ( ATTR_FORECAST_CONDITION, ATTR_FORECAST_TEMP, ATTR_FORECAST_TIME, ATTR_FORECAST_WIND_BEARING, ATTR_FORECAST_WIND_SPEED, - PLATFORM_SCHEMA, WeatherEntity, ) from homeassistant.const import ( - CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, - CONF_MODE, - CONF_NAME, LENGTH_KILOMETERS, LENGTH_METERS, LENGTH_MILES, @@ -32,110 +21,30 @@ from homeassistant.const import ( TEMP_CELSIUS, TEMP_FAHRENHEIT, ) -from homeassistant.exceptions import PlatformNotReady -from homeassistant.helpers import config_validation as cv -from homeassistant.helpers.aiohttp_client import async_get_clientsession -from homeassistant.util import Throttle +from homeassistant.core import callback +from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.util.distance import convert as convert_distance from homeassistant.util.pressure import convert as convert_pressure from homeassistant.util.temperature import convert as convert_temperature +from . import base_unique_id +from .const import ( + ATTR_FORECAST_DAYTIME, + ATTR_FORECAST_DETAILED_DESCRIPTION, + ATTR_FORECAST_PRECIP_PROB, + ATTRIBUTION, + CONDITION_CLASSES, + COORDINATOR_FORECAST, + COORDINATOR_FORECAST_HOURLY, + COORDINATOR_OBSERVATION, + DAYNIGHT, + DOMAIN, + HOURLY, + NWS_DATA, +) + _LOGGER = logging.getLogger(__name__) -ATTRIBUTION = "Data from National Weather Service/NOAA" - -SCAN_INTERVAL = timedelta(minutes=15) -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=5) - -CONF_STATION = "station" - -ATTR_FORECAST_DETAIL_DESCRIPTION = "detailed_description" -ATTR_FORECAST_PRECIP_PROB = "precipitation_probability" -ATTR_FORECAST_DAYTIME = "daytime" - -# Ordered so that a single condition can be chosen from multiple weather codes. -# Catalog of NWS icon weather codes listed at: -# https://api.weather.gov/icons -CONDITION_CLASSES = OrderedDict( - [ - ( - "exceptional", - [ - "Tornado", - "Hurricane conditions", - "Tropical storm conditions", - "Dust", - "Smoke", - "Haze", - "Hot", - "Cold", - ], - ), - ("snowy", ["Snow", "Sleet", "Blizzard"]), - ( - "snowy-rainy", - [ - "Rain/snow", - "Rain/sleet", - "Freezing rain/snow", - "Freezing rain", - "Rain/freezing rain", - ], - ), - ("hail", []), - ( - "lightning-rainy", - [ - "Thunderstorm (high cloud cover)", - "Thunderstorm (medium cloud cover)", - "Thunderstorm (low cloud cover)", - ], - ), - ("lightning", []), - ("pouring", []), - ( - "rainy", - [ - "Rain", - "Rain showers (high cloud cover)", - "Rain showers (low cloud cover)", - ], - ), - ("windy-variant", ["Mostly cloudy and windy", "Overcast and windy"]), - ( - "windy", - [ - "Fair/clear and windy", - "A few clouds and windy", - "Partly cloudy and windy", - ], - ), - ("fog", ["Fog/mist"]), - ("clear", ["Fair/clear"]), # sunny and clear-night - ("cloudy", ["Mostly cloudy", "Overcast"]), - ("partlycloudy", ["A few clouds", "Partly cloudy"]), - ] -) - -ERRORS = (aiohttp.ClientError, JSONDecodeError) - -FORECAST_MODE = ["daynight", "hourly"] - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_NAME): cv.string, - vol.Inclusive( - CONF_LATITUDE, "coordinates", "Latitude and longitude must exist together" - ): cv.latitude, - vol.Inclusive( - CONF_LONGITUDE, "coordinates", "Latitude and longitude must exist together" - ): cv.longitude, - vol.Optional(CONF_MODE, default="daynight"): vol.In(FORECAST_MODE), - vol.Optional(CONF_STATION): cv.string, - vol.Required(CONF_API_KEY): cv.string, - } -) - def convert_condition(time, weather): """ @@ -165,85 +74,67 @@ def convert_condition(time, weather): return cond, max(prec_probs) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_entry( + hass: HomeAssistantType, entry: ConfigType, async_add_entities +) -> None: """Set up the NWS weather platform.""" + hass_data = hass.data[DOMAIN][entry.entry_id] - latitude = config.get(CONF_LATITUDE, hass.config.latitude) - longitude = config.get(CONF_LONGITUDE, hass.config.longitude) - station = config.get(CONF_STATION) - api_key = config[CONF_API_KEY] - mode = config[CONF_MODE] - - websession = async_get_clientsession(hass) - # ID request as being from HA, pynws prepends the api_key in addition - api_key_ha = f"{api_key} homeassistant" - nws = SimpleNWS(latitude, longitude, api_key_ha, websession) - - _LOGGER.debug("Setting up station: %s", station) - try: - await nws.set_station(station) - except ERRORS as status: - _LOGGER.error( - "Error getting station list for %s: %s", (latitude, longitude), status - ) - raise PlatformNotReady - - _LOGGER.debug("Station list: %s", nws.stations) - _LOGGER.debug( - "Initialized for coordinates %s, %s -> station %s", - latitude, - longitude, - nws.station, + async_add_entities( + [ + NWSWeather(entry.data, hass_data, DAYNIGHT, hass.config.units), + NWSWeather(entry.data, hass_data, HOURLY, hass.config.units), + ], + False, ) - async_add_entities([NWSWeather(nws, mode, hass.config.units, config)], True) - class NWSWeather(WeatherEntity): """Representation of a weather condition.""" - def __init__(self, nws, mode, units, config): + def __init__(self, entry_data, hass_data, mode, units): """Initialise the platform with a data instance and station name.""" - self.nws = nws - self.station_name = config.get(CONF_NAME, self.nws.station) + self.nws = hass_data[NWS_DATA] + self.latitude = entry_data[CONF_LATITUDE] + self.longitude = entry_data[CONF_LONGITUDE] + self.coordinator_observation = hass_data[COORDINATOR_OBSERVATION] + if mode == DAYNIGHT: + self.coordinator_forecast = hass_data[COORDINATOR_FORECAST] + else: + self.coordinator_forecast = hass_data[COORDINATOR_FORECAST_HOURLY] + self.station = self.nws.station + self.is_metric = units.is_metric self.mode = mode self.observation = None self._forecast = None - @Throttle(MIN_TIME_BETWEEN_UPDATES) - async def async_update(self): - """Update Condition.""" - _LOGGER.debug("Updating station observations %s", self.nws.station) - try: - await self.nws.update_observation() - except ERRORS as status: - _LOGGER.error( - "Error updating observation from station %s: %s", - self.nws.station, - status, - ) - else: - self.observation = self.nws.observation - _LOGGER.debug("Observation: %s", self.observation) - _LOGGER.debug("Updating forecast") - try: - if self.mode == "daynight": - await self.nws.update_forecast() - else: - await self.nws.update_forecast_hourly() - except ERRORS as status: - _LOGGER.error( - "Error updating forecast from station %s: %s", self.nws.station, status - ) - return - if self.mode == "daynight": + async def async_added_to_hass(self) -> None: + """Set up a listener and load data.""" + self.async_on_remove( + self.coordinator_observation.async_add_listener(self._update_callback) + ) + self.async_on_remove( + self.coordinator_forecast.async_add_listener(self._update_callback) + ) + self._update_callback() + + @callback + def _update_callback(self) -> None: + """Load data from integration.""" + self.observation = self.nws.observation + if self.mode == DAYNIGHT: self._forecast = self.nws.forecast else: self._forecast = self.nws.forecast_hourly - _LOGGER.debug("Forecast: %s", self._forecast) - _LOGGER.debug("Finished updating") + + self.async_write_ha_state() + + @property + def should_poll(self) -> bool: + """Entities do not individually poll.""" + return False @property def attribution(self): @@ -253,7 +144,7 @@ class NWSWeather(WeatherEntity): @property def name(self): """Return the name of the station.""" - return self.station_name + return f"{self.station} {self.mode.title()}" @property def temperature(self): @@ -354,14 +245,14 @@ class NWSWeather(WeatherEntity): forecast = [] for forecast_entry in self._forecast: data = { - ATTR_FORECAST_DETAIL_DESCRIPTION: forecast_entry.get( + ATTR_FORECAST_DETAILED_DESCRIPTION: forecast_entry.get( "detailedForecast" ), ATTR_FORECAST_TEMP: forecast_entry.get("temperature"), ATTR_FORECAST_TIME: forecast_entry.get("startTime"), } - if self.mode == "daynight": + if self.mode == DAYNIGHT: data[ATTR_FORECAST_DAYTIME] = forecast_entry.get("isDaytime") time = forecast_entry.get("iconTime") weather = forecast_entry.get("iconWeather") @@ -385,3 +276,16 @@ class NWSWeather(WeatherEntity): data[ATTR_FORECAST_WIND_SPEED] = None forecast.append(data) return forecast + + @property + def unique_id(self): + """Return a unique_id for this entity.""" + return f"{base_unique_id(self.latitude, self.longitude)}_{self.mode}" + + @property + def available(self): + """Return if state is available.""" + return ( + self.coordinator_observation.last_update_success + and self.coordinator_forecast.last_update_success + ) diff --git a/homeassistant/components/nx584/manifest.json b/homeassistant/components/nx584/manifest.json index 72d9a270775..3246280b63d 100644 --- a/homeassistant/components/nx584/manifest.json +++ b/homeassistant/components/nx584/manifest.json @@ -3,6 +3,5 @@ "name": "NX584", "documentation": "https://www.home-assistant.io/integrations/nx584", "requirements": ["pynx584==0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/nzbget/manifest.json b/homeassistant/components/nzbget/manifest.json index a72ede807e2..9aa84942cc5 100644 --- a/homeassistant/components/nzbget/manifest.json +++ b/homeassistant/components/nzbget/manifest.json @@ -3,6 +3,5 @@ "name": "NZBGet", "documentation": "https://www.home-assistant.io/integrations/nzbget", "requirements": ["pynzbgetapi==0.2.0"], - "dependencies": [], "codeowners": ["@chriscla"] } diff --git a/homeassistant/components/nzbget/sensor.py b/homeassistant/components/nzbget/sensor.py index 89d2c1c01da..a0f1dc57c94 100644 --- a/homeassistant/components/nzbget/sensor.py +++ b/homeassistant/components/nzbget/sensor.py @@ -89,8 +89,10 @@ class NZBGetSensor(Entity): async def async_added_to_hass(self): """Handle entity which will be added.""" - async_dispatcher_connect( - self.hass, DATA_UPDATED, self._schedule_immediate_update + self.async_on_remove( + async_dispatcher_connect( + self.hass, DATA_UPDATED, self._schedule_immediate_update + ) ) @callback diff --git a/homeassistant/components/oasa_telematics/manifest.json b/homeassistant/components/oasa_telematics/manifest.json index 0d524094b10..84f5e78fec2 100644 --- a/homeassistant/components/oasa_telematics/manifest.json +++ b/homeassistant/components/oasa_telematics/manifest.json @@ -3,6 +3,5 @@ "name": "OASA Telematics", "documentation": "https://www.home-assistant.io/integrations/oasa_telematics/", "requirements": ["oasatelematics==0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/obihai/manifest.json b/homeassistant/components/obihai/manifest.json index de85a85842a..bbcb2e4bc85 100644 --- a/homeassistant/components/obihai/manifest.json +++ b/homeassistant/components/obihai/manifest.json @@ -3,6 +3,5 @@ "name": "Obihai", "documentation": "https://www.home-assistant.io/integrations/obihai", "requirements": ["pyobihai==1.2.1"], - "dependencies": [], "codeowners": ["@dshokouhi"] } diff --git a/homeassistant/components/octoprint/__init__.py b/homeassistant/components/octoprint/__init__.py index dba7e656aff..c345dd6cce7 100644 --- a/homeassistant/components/octoprint/__init__.py +++ b/homeassistant/components/octoprint/__init__.py @@ -144,9 +144,10 @@ def setup(hass, config): for printer in config[DOMAIN]: name = printer[CONF_NAME] - ssl = "s" if printer[CONF_SSL] else "" - base_url = "http{}://{}:{}{}api/".format( - ssl, printer[CONF_HOST], printer[CONF_PORT], printer[CONF_PATH] + protocol = "https" if printer[CONF_SSL] else "http" + base_url = ( + f"{protocol}://{printer[CONF_HOST]}:{printer[CONF_PORT]}" + f"{printer[CONF_PATH]}api/" ) api_key = printer[CONF_API_KEY] number_of_tools = printer[CONF_NUMBER_OF_TOOLS] diff --git a/homeassistant/components/octoprint/manifest.json b/homeassistant/components/octoprint/manifest.json index 98e7c320a60..28e09cc7be9 100644 --- a/homeassistant/components/octoprint/manifest.json +++ b/homeassistant/components/octoprint/manifest.json @@ -2,8 +2,6 @@ "domain": "octoprint", "name": "OctoPrint", "documentation": "https://www.home-assistant.io/integrations/octoprint", - "requirements": [], - "dependencies": [], "after_dependencies": ["discovery"], "codeowners": [] } diff --git a/homeassistant/components/octoprint/sensor.py b/homeassistant/components/octoprint/sensor.py index 08ffbc5849e..c7b81df2ef8 100644 --- a/homeassistant/components/octoprint/sensor.py +++ b/homeassistant/components/octoprint/sensor.py @@ -91,7 +91,7 @@ class OctoPrintSensor(Entity): if tool is None: self._name = f"{sensor_name} {condition}" else: - self._name = "{} {} {} {}".format(sensor_name, condition, tool, "temp") + self._name = f"{sensor_name} {condition} {tool} temp" self.sensor_type = sensor_type self.api = api self._state = None diff --git a/homeassistant/components/oem/manifest.json b/homeassistant/components/oem/manifest.json index 8be08a6e0dd..4609cf9e2f2 100644 --- a/homeassistant/components/oem/manifest.json +++ b/homeassistant/components/oem/manifest.json @@ -3,6 +3,5 @@ "name": "OpenEnergyMonitor WiFi Thermostat", "documentation": "https://www.home-assistant.io/integrations/oem", "requirements": ["oemthermostat==1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ohmconnect/manifest.json b/homeassistant/components/ohmconnect/manifest.json index 0a3fbe678ac..3eb0d4758af 100644 --- a/homeassistant/components/ohmconnect/manifest.json +++ b/homeassistant/components/ohmconnect/manifest.json @@ -3,6 +3,5 @@ "name": "OhmConnect", "documentation": "https://www.home-assistant.io/integrations/ohmconnect", "requirements": ["defusedxml==0.6.0"], - "dependencies": [], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/ohmconnect/sensor.py b/homeassistant/components/ohmconnect/sensor.py index 490ebbe75b3..56a3cc06556 100644 --- a/homeassistant/components/ohmconnect/sensor.py +++ b/homeassistant/components/ohmconnect/sensor.py @@ -66,7 +66,7 @@ class OhmconnectSensor(Entity): def update(self): """Get the latest data from OhmConnect.""" try: - url = "https://login.ohmconnect.com/verify-ohm-hour/{}".format(self._ohmid) + url = f"https://login.ohmconnect.com/verify-ohm-hour/{self._ohmid}" response = requests.get(url, timeout=10) root = ET.fromstring(response.text) diff --git a/homeassistant/components/ombi/__init__.py b/homeassistant/components/ombi/__init__.py index 750772ce8f5..dcd8f264161 100644 --- a/homeassistant/components/ombi/__init__.py +++ b/homeassistant/components/ombi/__init__.py @@ -38,7 +38,7 @@ def urlbase(value) -> str: value = str(value).strip("/") if not value: return value - return value + "/" + return f"{value}/" SUBMIT_MOVIE_REQUEST_SERVICE_SCHEMA = vol.Schema({vol.Required(ATTR_NAME): cv.string}) diff --git a/homeassistant/components/ombi/manifest.json b/homeassistant/components/ombi/manifest.json index a2629a8fdca..f61555495c3 100644 --- a/homeassistant/components/ombi/manifest.json +++ b/homeassistant/components/ombi/manifest.json @@ -2,7 +2,6 @@ "domain": "ombi", "name": "Ombi", "documentation": "https://www.home-assistant.io/integrations/ombi/", - "dependencies": [], "codeowners": ["@larssont"], "requirements": ["pyombi==0.1.10"] } diff --git a/homeassistant/components/ombi/services.yaml b/homeassistant/components/ombi/services.yaml index 5f4f2defe32..6c7f5ced489 100644 --- a/homeassistant/components/ombi/services.yaml +++ b/homeassistant/components/ombi/services.yaml @@ -1,5 +1,4 @@ # Ombi services.yaml entries - submit_movie_request: description: Searches for a movie and requests the first result. fields: @@ -7,7 +6,6 @@ submit_movie_request: description: Search parameter example: "beverly hills cop" - submit_tv_request: description: Searches for a TV show and requests the first result. fields: @@ -18,10 +16,9 @@ submit_tv_request: description: Which season(s) to request (first, latest or all) example: "latest" - submit_music_request: description: Searches for a music album and requests the first result. fields: name: description: Search parameter - example: "nevermind" \ No newline at end of file + example: "nevermind" diff --git a/homeassistant/components/onboarding/manifest.json b/homeassistant/components/onboarding/manifest.json index 203918b9816..81e88e99edb 100644 --- a/homeassistant/components/onboarding/manifest.json +++ b/homeassistant/components/onboarding/manifest.json @@ -2,7 +2,6 @@ "domain": "onboarding", "name": "Home Assistant Onboarding", "documentation": "https://www.home-assistant.io/integrations/onboarding", - "requirements": [], "dependencies": ["auth", "http", "person"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/onboarding/.translations/bg.json b/homeassistant/components/onboarding/translations/bg.json similarity index 100% rename from homeassistant/components/onboarding/.translations/bg.json rename to homeassistant/components/onboarding/translations/bg.json diff --git a/homeassistant/components/onboarding/.translations/ca.json b/homeassistant/components/onboarding/translations/ca.json similarity index 100% rename from homeassistant/components/onboarding/.translations/ca.json rename to homeassistant/components/onboarding/translations/ca.json diff --git a/homeassistant/components/onboarding/.translations/cs.json b/homeassistant/components/onboarding/translations/cs.json similarity index 100% rename from homeassistant/components/onboarding/.translations/cs.json rename to homeassistant/components/onboarding/translations/cs.json diff --git a/homeassistant/components/onboarding/.translations/da.json b/homeassistant/components/onboarding/translations/da.json similarity index 100% rename from homeassistant/components/onboarding/.translations/da.json rename to homeassistant/components/onboarding/translations/da.json diff --git a/homeassistant/components/onboarding/.translations/de.json b/homeassistant/components/onboarding/translations/de.json similarity index 100% rename from homeassistant/components/onboarding/.translations/de.json rename to homeassistant/components/onboarding/translations/de.json diff --git a/homeassistant/components/onboarding/.translations/en.json b/homeassistant/components/onboarding/translations/en.json similarity index 100% rename from homeassistant/components/onboarding/.translations/en.json rename to homeassistant/components/onboarding/translations/en.json diff --git a/homeassistant/components/onboarding/.translations/es-419.json b/homeassistant/components/onboarding/translations/es-419.json similarity index 100% rename from homeassistant/components/onboarding/.translations/es-419.json rename to homeassistant/components/onboarding/translations/es-419.json diff --git a/homeassistant/components/onboarding/.translations/es.json b/homeassistant/components/onboarding/translations/es.json similarity index 100% rename from homeassistant/components/onboarding/.translations/es.json rename to homeassistant/components/onboarding/translations/es.json diff --git a/homeassistant/components/onboarding/.translations/fr.json b/homeassistant/components/onboarding/translations/fr.json similarity index 100% rename from homeassistant/components/onboarding/.translations/fr.json rename to homeassistant/components/onboarding/translations/fr.json diff --git a/homeassistant/components/onboarding/.translations/hu.json b/homeassistant/components/onboarding/translations/hu.json similarity index 100% rename from homeassistant/components/onboarding/.translations/hu.json rename to homeassistant/components/onboarding/translations/hu.json diff --git a/homeassistant/components/onboarding/.translations/id.json b/homeassistant/components/onboarding/translations/id.json similarity index 100% rename from homeassistant/components/onboarding/.translations/id.json rename to homeassistant/components/onboarding/translations/id.json diff --git a/homeassistant/components/onboarding/.translations/it.json b/homeassistant/components/onboarding/translations/it.json similarity index 100% rename from homeassistant/components/onboarding/.translations/it.json rename to homeassistant/components/onboarding/translations/it.json diff --git a/homeassistant/components/onboarding/.translations/ko.json b/homeassistant/components/onboarding/translations/ko.json similarity index 100% rename from homeassistant/components/onboarding/.translations/ko.json rename to homeassistant/components/onboarding/translations/ko.json diff --git a/homeassistant/components/onboarding/.translations/lb.json b/homeassistant/components/onboarding/translations/lb.json similarity index 100% rename from homeassistant/components/onboarding/.translations/lb.json rename to homeassistant/components/onboarding/translations/lb.json diff --git a/homeassistant/components/onboarding/.translations/nl.json b/homeassistant/components/onboarding/translations/nl.json similarity index 100% rename from homeassistant/components/onboarding/.translations/nl.json rename to homeassistant/components/onboarding/translations/nl.json diff --git a/homeassistant/components/onboarding/.translations/no.json b/homeassistant/components/onboarding/translations/no.json similarity index 100% rename from homeassistant/components/onboarding/.translations/no.json rename to homeassistant/components/onboarding/translations/no.json diff --git a/homeassistant/components/onboarding/.translations/pl.json b/homeassistant/components/onboarding/translations/pl.json similarity index 100% rename from homeassistant/components/onboarding/.translations/pl.json rename to homeassistant/components/onboarding/translations/pl.json diff --git a/homeassistant/components/onboarding/.translations/pt-BR.json b/homeassistant/components/onboarding/translations/pt-BR.json similarity index 100% rename from homeassistant/components/onboarding/.translations/pt-BR.json rename to homeassistant/components/onboarding/translations/pt-BR.json diff --git a/homeassistant/components/onboarding/translations/pt.json b/homeassistant/components/onboarding/translations/pt.json new file mode 100644 index 00000000000..d5a09a0b240 --- /dev/null +++ b/homeassistant/components/onboarding/translations/pt.json @@ -0,0 +1,7 @@ +{ + "area": { + "bedroom": "Quarto", + "kitchen": "Cozinha", + "living_room": "Sala de estar" + } +} \ No newline at end of file diff --git a/homeassistant/components/onboarding/.translations/ru.json b/homeassistant/components/onboarding/translations/ru.json similarity index 100% rename from homeassistant/components/onboarding/.translations/ru.json rename to homeassistant/components/onboarding/translations/ru.json diff --git a/homeassistant/components/onboarding/.translations/sl.json b/homeassistant/components/onboarding/translations/sl.json similarity index 100% rename from homeassistant/components/onboarding/.translations/sl.json rename to homeassistant/components/onboarding/translations/sl.json diff --git a/homeassistant/components/onboarding/.translations/sv.json b/homeassistant/components/onboarding/translations/sv.json similarity index 100% rename from homeassistant/components/onboarding/.translations/sv.json rename to homeassistant/components/onboarding/translations/sv.json diff --git a/homeassistant/components/onboarding/.translations/vi.json b/homeassistant/components/onboarding/translations/vi.json similarity index 100% rename from homeassistant/components/onboarding/.translations/vi.json rename to homeassistant/components/onboarding/translations/vi.json diff --git a/homeassistant/components/onboarding/.translations/zh-Hans.json b/homeassistant/components/onboarding/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/onboarding/.translations/zh-Hans.json rename to homeassistant/components/onboarding/translations/zh-Hans.json diff --git a/homeassistant/components/onboarding/.translations/zh-Hant.json b/homeassistant/components/onboarding/translations/zh-Hant.json similarity index 100% rename from homeassistant/components/onboarding/.translations/zh-Hant.json rename to homeassistant/components/onboarding/translations/zh-Hant.json diff --git a/homeassistant/components/onboarding/views.py b/homeassistant/components/onboarding/views.py index fa859861fb7..f371c7aa9cb 100644 --- a/homeassistant/components/onboarding/views.py +++ b/homeassistant/components/onboarding/views.py @@ -6,6 +6,7 @@ import voluptuous as vol from homeassistant.auth.const import GROUP_ID_ADMIN from homeassistant.components.http.data_validator import RequestDataValidator from homeassistant.components.http.view import HomeAssistantView +from homeassistant.const import HTTP_FORBIDDEN from homeassistant.core import callback from .const import ( @@ -95,7 +96,7 @@ class UserOnboardingView(_BaseOnboardingView): async with self._lock: if self._async_is_done(): - return self.json_message("User step already done", 403) + return self.json_message("User step already done", HTTP_FORBIDDEN) provider = _async_get_hass_provider(hass) await provider.async_initialize() @@ -116,7 +117,7 @@ class UserOnboardingView(_BaseOnboardingView): # Create default areas using the users supplied language. translations = await hass.helpers.translation.async_get_translations( - data["language"] + data["language"], "area", DOMAIN ) area_registry = await hass.helpers.area_registry.async_get_registry() @@ -147,7 +148,9 @@ class CoreConfigOnboardingView(_BaseOnboardingView): async with self._lock: if self._async_is_done(): - return self.json_message("Core config step already done", 403) + return self.json_message( + "Core config step already done", HTTP_FORBIDDEN + ) await self._async_mark_done(hass) @@ -173,7 +176,9 @@ class IntegrationOnboardingView(_BaseOnboardingView): async with self._lock: if self._async_is_done(): - return self.json_message("Integration step already done", 403) + return self.json_message( + "Integration step already done", HTTP_FORBIDDEN + ) await self._async_mark_done(hass) diff --git a/homeassistant/components/onewire/manifest.json b/homeassistant/components/onewire/manifest.json index 13000caa8b1..f812454ae59 100644 --- a/homeassistant/components/onewire/manifest.json +++ b/homeassistant/components/onewire/manifest.json @@ -3,6 +3,5 @@ "name": "1-Wire", "documentation": "https://www.home-assistant.io/integrations/onewire", "requirements": ["pyownet==0.10.0.post1"], - "dependencies": [], "codeowners": ["@garbled1"] } diff --git a/homeassistant/components/onewire/sensor.py b/homeassistant/components/onewire/sensor.py index 41f41a6e93d..12a4546dbeb 100644 --- a/homeassistant/components/onewire/sensor.py +++ b/homeassistant/components/onewire/sensor.py @@ -8,7 +8,13 @@ from pyownet import protocol import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_HOST, CONF_PORT, TEMP_CELSIUS, UNIT_PERCENTAGE +from homeassistant.const import ( + CONF_HOST, + CONF_PORT, + TEMP_CELSIUS, + UNIT_PERCENTAGE, + VOLT, +) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -75,9 +81,9 @@ SENSOR_TYPES = { "counter_a": ["counter", "count"], "counter_b": ["counter", "count"], "HobbyBoard": ["none", "none"], - "voltage": ["voltage", "V"], - "voltage_VAD": ["voltage", "V"], - "voltage_VDD": ["voltage", "V"], + "voltage": ["voltage", VOLT], + "voltage_VAD": ["voltage", VOLT], + "voltage_VDD": ["voltage", VOLT], "current": ["current", "A"], } @@ -176,7 +182,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): # We have an owfs mounted else: for family_file_path in glob(os.path.join(base_dir, "*", "family")): - with open(family_file_path, "r") as family_file: + with open(family_file_path) as family_file: family = family_file.read() if "EF" in family: continue @@ -210,7 +216,7 @@ class OneWire(Entity): def __init__(self, name, device_file, sensor_type): """Initialize the sensor.""" - self._name = name + " " + sensor_type.capitalize() + self._name = f"{name} {sensor_type.capitalize()}" self._device_file = device_file self._unit_of_measurement = SENSOR_TYPES[sensor_type][1] self._state = None @@ -218,7 +224,7 @@ class OneWire(Entity): def _read_value_raw(self): """Read the value as it is returned by the sensor.""" - with open(self._device_file, "r") as ds_device_file: + with open(self._device_file) as ds_device_file: lines = ds_device_file.readlines() return lines diff --git a/homeassistant/components/onkyo/manifest.json b/homeassistant/components/onkyo/manifest.json index 857fc11f15f..a1a7659bae5 100644 --- a/homeassistant/components/onkyo/manifest.json +++ b/homeassistant/components/onkyo/manifest.json @@ -3,6 +3,5 @@ "name": "Onkyo", "documentation": "https://www.home-assistant.io/integrations/onkyo", "requirements": ["onkyo-eiscp==1.2.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/onvif/camera.py b/homeassistant/components/onvif/camera.py index 6ec06a10988..51ea3fab0cc 100644 --- a/homeassistant/components/onvif/camera.py +++ b/homeassistant/components/onvif/camera.py @@ -183,7 +183,7 @@ class ONVIFHassCamera(Camera): self._port, self._username, self._password, - "{}/wsdl/".format(os.path.dirname(onvif.__file__)), + f"{os.path.dirname(onvif.__file__)}/wsdl/", transport=transport, ) diff --git a/homeassistant/components/openalpr_cloud/image_processing.py b/homeassistant/components/openalpr_cloud/image_processing.py index 64ba0d83844..8f04b0838fe 100644 --- a/homeassistant/components/openalpr_cloud/image_processing.py +++ b/homeassistant/components/openalpr_cloud/image_processing.py @@ -17,7 +17,7 @@ from homeassistant.components.image_processing import ( from homeassistant.components.openalpr_local.image_processing import ( ImageProcessingAlprEntity, ) -from homeassistant.const import CONF_API_KEY +from homeassistant.const import CONF_API_KEY, HTTP_OK from homeassistant.core import split_entity_id from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -86,7 +86,7 @@ class OpenAlprCloudEntity(ImageProcessingAlprEntity): if name: self._name = name else: - self._name = "OpenAlpr {0}".format(split_entity_id(camera_entity)[1]) + self._name = f"OpenAlpr {split_entity_id(camera_entity)[1]}" @property def confidence(self): @@ -121,7 +121,7 @@ class OpenAlprCloudEntity(ImageProcessingAlprEntity): data = await request.json() - if request.status != 200: + if request.status != HTTP_OK: _LOGGER.error("Error %d -> %s.", request.status, data.get("error")) return diff --git a/homeassistant/components/openalpr_cloud/manifest.json b/homeassistant/components/openalpr_cloud/manifest.json index 00662f31ed8..dbb8253ff96 100644 --- a/homeassistant/components/openalpr_cloud/manifest.json +++ b/homeassistant/components/openalpr_cloud/manifest.json @@ -2,7 +2,5 @@ "domain": "openalpr_cloud", "name": "OpenALPR Cloud", "documentation": "https://www.home-assistant.io/integrations/openalpr_cloud", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/openalpr_local/image_processing.py b/homeassistant/components/openalpr_local/image_processing.py index df7b235a224..c7c96b05872 100644 --- a/homeassistant/components/openalpr_local/image_processing.py +++ b/homeassistant/components/openalpr_local/image_processing.py @@ -161,7 +161,7 @@ class OpenAlprLocalEntity(ImageProcessingAlprEntity): if name: self._name = name else: - self._name = "OpenAlpr {0}".format(split_entity_id(camera_entity)[1]) + self._name = f"OpenAlpr {split_entity_id(camera_entity)[1]}" @property def confidence(self): diff --git a/homeassistant/components/openalpr_local/manifest.json b/homeassistant/components/openalpr_local/manifest.json index c5521b056ce..29b9c3a07d8 100644 --- a/homeassistant/components/openalpr_local/manifest.json +++ b/homeassistant/components/openalpr_local/manifest.json @@ -2,7 +2,5 @@ "domain": "openalpr_local", "name": "OpenALPR Local", "documentation": "https://www.home-assistant.io/integrations/openalpr_local", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/opencv/image_processing.py b/homeassistant/components/opencv/image_processing.py index 4a1b830a324..f35d063de50 100644 --- a/homeassistant/components/opencv/image_processing.py +++ b/homeassistant/components/opencv/image_processing.py @@ -32,7 +32,7 @@ ATTR_TOTAL_MATCHES = "total_matches" CASCADE_URL = ( "https://raw.githubusercontent.com/opencv/opencv/master/data/" - + "lbpcascades/lbpcascade_frontalface.xml" + "lbpcascades/lbpcascade_frontalface.xml" ) CONF_CLASSIFIER = "classifier" @@ -75,9 +75,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def _create_processor_from_config(hass, camera_entity, config): """Create an OpenCV processor from configuration.""" classifier_config = config.get(CONF_CLASSIFIER) - name = "{} {}".format( - config[CONF_NAME], split_entity_id(camera_entity)[1].replace("_", " ") - ) + name = f"{config[CONF_NAME]} {split_entity_id(camera_entity)[1].replace('_', ' ')}" processor = OpenCVImageProcessor(hass, camera_entity, name, classifier_config) @@ -132,7 +130,7 @@ class OpenCVImageProcessor(ImageProcessingEntity): if name: self._name = name else: - self._name = "OpenCV {0}".format(split_entity_id(camera_entity)[1]) + self._name = f"OpenCV {split_entity_id(camera_entity)[1]}" self._classifiers = classifiers self._matches = {} self._total_matches = 0 diff --git a/homeassistant/components/opencv/manifest.json b/homeassistant/components/opencv/manifest.json index 0ba1ad6c9e3..ed54c7d05ee 100644 --- a/homeassistant/components/opencv/manifest.json +++ b/homeassistant/components/opencv/manifest.json @@ -2,10 +2,6 @@ "domain": "opencv", "name": "OpenCV", "documentation": "https://www.home-assistant.io/integrations/opencv", - "requirements": [ - "numpy==1.18.1", - "opencv-python-headless==4.2.0.32" - ], - "dependencies": [], + "requirements": ["numpy==1.18.2", "opencv-python-headless==4.2.0.32"], "codeowners": [] -} \ No newline at end of file +} diff --git a/homeassistant/components/openerz/__init__.py b/homeassistant/components/openerz/__init__.py new file mode 100644 index 00000000000..57ed4d1d8a7 --- /dev/null +++ b/homeassistant/components/openerz/__init__.py @@ -0,0 +1,3 @@ +"""The Open ERZ API integration.""" + +DOMAIN = "sensor" diff --git a/homeassistant/components/openerz/manifest.json b/homeassistant/components/openerz/manifest.json new file mode 100644 index 00000000000..7f56e2b8c55 --- /dev/null +++ b/homeassistant/components/openerz/manifest.json @@ -0,0 +1,8 @@ +{ + "domain": "openerz", + "name": "Open ERZ", + "documentation": "https://www.home-assistant.io/integrations/openerz", + "dependencies": [], + "codeowners": ["@misialq"], + "requirements": ["openerz-api==0.1.0"] +} diff --git a/homeassistant/components/openerz/sensor.py b/homeassistant/components/openerz/sensor.py new file mode 100644 index 00000000000..6e72058b60b --- /dev/null +++ b/homeassistant/components/openerz/sensor.py @@ -0,0 +1,58 @@ +"""Support for OpenERZ API for Zurich city waste disposal system.""" +from datetime import timedelta +import logging + +from openerz_api.main import OpenERZConnector +import voluptuous as vol + +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.config_validation import PLATFORM_SCHEMA +from homeassistant.helpers.entity import Entity + +_LOGGER = logging.getLogger(__name__) +SCAN_INTERVAL = timedelta(hours=12) + +CONF_ZIP = "zip" +CONF_WASTE_TYPE = "waste_type" +CONF_NAME = "name" + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( + { + vol.Required(CONF_ZIP): cv.positive_int, + vol.Required(CONF_WASTE_TYPE, default="waste"): cv.string, + vol.Optional(CONF_NAME): cv.string, + } +) + + +def setup_platform(hass, config, add_entities, discovery_info=None): + """Set up the sensor platform.""" + api_connector = OpenERZConnector(config[CONF_ZIP], config[CONF_WASTE_TYPE]) + add_entities([OpenERZSensor(api_connector, config.get(CONF_NAME))], True) + + +class OpenERZSensor(Entity): + """Representation of a Sensor.""" + + def __init__(self, api_connector, name): + """Initialize the sensor.""" + self._state = None + self._name = name + self.api_connector = api_connector + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def state(self): + """Return the state of the sensor.""" + return self._state + + def update(self): + """Fetch new state data for the sensor. + + This is the only method that should fetch new data for Home Assistant. + """ + self._state = self.api_connector.find_next_pickup(day_offset=31) diff --git a/homeassistant/components/openevse/manifest.json b/homeassistant/components/openevse/manifest.json index daa5d283b2b..c9b11a75690 100644 --- a/homeassistant/components/openevse/manifest.json +++ b/homeassistant/components/openevse/manifest.json @@ -3,6 +3,5 @@ "name": "OpenEVSE", "documentation": "https://www.home-assistant.io/integrations/openevse", "requirements": ["openevsewifi==0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/openexchangerates/manifest.json b/homeassistant/components/openexchangerates/manifest.json index d707ded5188..60484aca77c 100644 --- a/homeassistant/components/openexchangerates/manifest.json +++ b/homeassistant/components/openexchangerates/manifest.json @@ -2,7 +2,5 @@ "domain": "openexchangerates", "name": "Open Exchange Rates", "documentation": "https://www.home-assistant.io/integrations/openexchangerates", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/openexchangerates/sensor.py b/homeassistant/components/openexchangerates/sensor.py index cc6da709dff..9846e305291 100644 --- a/homeassistant/components/openexchangerates/sensor.py +++ b/homeassistant/components/openexchangerates/sensor.py @@ -12,6 +12,7 @@ from homeassistant.const import ( CONF_BASE, CONF_NAME, CONF_QUOTE, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -49,7 +50,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): rest = OpenexchangeratesData(_RESOURCE, parameters, quote) response = requests.get(_RESOURCE, params=parameters, timeout=10) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.error("Check your OpenExchangeRates API key") return False diff --git a/homeassistant/components/opengarage/cover.py b/homeassistant/components/opengarage/cover.py index 26a69fa11af..e34f98c87d2 100644 --- a/homeassistant/components/opengarage/cover.py +++ b/homeassistant/components/opengarage/cover.py @@ -64,7 +64,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): CONF_NAME: device_config.get(CONF_NAME), CONF_HOST: device_config.get(CONF_HOST), CONF_PORT: device_config.get(CONF_PORT), - CONF_SSL: device_config.get(CONF_SSL), + CONF_SSL: device_config[CONF_SSL], CONF_VERIFY_SSL: device_config.get(CONF_VERIFY_SSL), CONF_DEVICE_KEY: device_config.get(CONF_DEVICE_KEY), } @@ -79,8 +79,9 @@ class OpenGarageCover(CoverDevice): def __init__(self, args): """Initialize the cover.""" - self.opengarage_url = "{}://{}:{}".format( - "https" if args[CONF_SSL] else "http", args[CONF_HOST], args[CONF_PORT] + self.opengarage_url = ( + f"{'https' if args[CONF_SSL] else 'http'}://" + f"{args[CONF_HOST]}:{args[CONF_PORT]}" ) self._name = args[CONF_NAME] self._device_key = args[CONF_DEVICE_KEY] diff --git a/homeassistant/components/opengarage/manifest.json b/homeassistant/components/opengarage/manifest.json index 87b0e65dcd5..1cd5847dd9d 100644 --- a/homeassistant/components/opengarage/manifest.json +++ b/homeassistant/components/opengarage/manifest.json @@ -2,7 +2,5 @@ "domain": "opengarage", "name": "OpenGarage", "documentation": "https://www.home-assistant.io/integrations/opengarage", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/openhardwaremonitor/manifest.json b/homeassistant/components/openhardwaremonitor/manifest.json index 069cac06f3c..242b00175d8 100644 --- a/homeassistant/components/openhardwaremonitor/manifest.json +++ b/homeassistant/components/openhardwaremonitor/manifest.json @@ -2,7 +2,5 @@ "domain": "openhardwaremonitor", "name": "Open Hardware Monitor", "documentation": "https://www.home-assistant.io/integrations/openhardwaremonitor", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/openhardwaremonitor/sensor.py b/homeassistant/components/openhardwaremonitor/sensor.py index 0729943a770..c0c71405ab3 100644 --- a/homeassistant/components/openhardwaremonitor/sensor.py +++ b/homeassistant/components/openhardwaremonitor/sensor.py @@ -125,8 +125,9 @@ class OpenHardwareMonitorData: def refresh(self): """Download and parse JSON from OHM.""" - data_url = "http://{}:{}/data.json".format( - self._config.get(CONF_HOST), self._config.get(CONF_PORT) + data_url = ( + f"http://{self._config.get(CONF_HOST)}:" + f"{self._config.get(CONF_PORT)}/data.json" ) try: diff --git a/homeassistant/components/openhome/manifest.json b/homeassistant/components/openhome/manifest.json index ed10387bda1..8105c01dfc5 100644 --- a/homeassistant/components/openhome/manifest.json +++ b/homeassistant/components/openhome/manifest.json @@ -3,6 +3,5 @@ "name": "Linn / OpenHome", "documentation": "https://www.home-assistant.io/integrations/openhome", "requirements": ["openhomedevice==0.6.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/openhome/media_player.py b/homeassistant/components/openhome/media_player.py index 967bce6007e..8456ae9338d 100644 --- a/homeassistant/components/openhome/media_player.py +++ b/homeassistant/components/openhome/media_player.py @@ -64,7 +64,7 @@ class OpenhomeDevice(MediaPlayerDevice): self._volume_level = None self._volume_muted = None self._supported_features = SUPPORT_OPENHOME - self._source_names = list() + self._source_names = [] self._source_index = {} self._source = {} self._name = None @@ -79,7 +79,7 @@ class OpenhomeDevice(MediaPlayerDevice): self._name = self._device.Room().decode("utf-8") self._supported_features = SUPPORT_OPENHOME source_index = {} - source_names = list() + source_names = [] if self._device.VolumeEnabled(): self._supported_features |= ( diff --git a/homeassistant/components/opensensemap/manifest.json b/homeassistant/components/opensensemap/manifest.json index ca783bbc465..780f5f59020 100644 --- a/homeassistant/components/opensensemap/manifest.json +++ b/homeassistant/components/opensensemap/manifest.json @@ -3,6 +3,5 @@ "name": "openSenseMap", "documentation": "https://www.home-assistant.io/integrations/opensensemap", "requirements": ["opensensemap-api==0.1.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/opensky/manifest.json b/homeassistant/components/opensky/manifest.json index 99ffd81a04e..17479b70de7 100644 --- a/homeassistant/components/opensky/manifest.json +++ b/homeassistant/components/opensky/manifest.json @@ -2,7 +2,5 @@ "domain": "opensky", "name": "OpenSky Network", "documentation": "https://www.home-assistant.io/integrations/opensky", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/opentherm_gw/.translations/bg.json b/homeassistant/components/opentherm_gw/.translations/bg.json deleted file mode 100644 index fe9a611f115..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/bg.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "\u0428\u043b\u044e\u0437\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "id_exists": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440a \u043d\u0430 \u0448\u043b\u044e\u0437\u0430 \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430", - "serial_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", - "timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438\u0437\u0442\u0435\u0447\u0435" - }, - "step": { - "init": { - "data": { - "device": "\u041f\u044a\u0442 \u0438\u043b\u0438 URL \u0430\u0434\u0440\u0435\u0441", - "id": "ID", - "name": "\u0418\u043c\u0435" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430 \u043f\u043e\u0434\u0430", - "precision": "\u0422\u043e\u0447\u043d\u043e\u0441\u0442" - }, - "description": "\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/ca.json b/homeassistant/components/opentherm_gw/.translations/ca.json deleted file mode 100644 index 4d39dec3662..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Passarel\u00b7la ja configurada", - "id_exists": "L'identificador de passarel\u00b7la ja existeix", - "serial_error": "S'ha produ\u00eft un error en connectar-se al dispositiu", - "timeout": "S'ha acabat el temps d'espera en l'intent de connexi\u00f3" - }, - "step": { - "init": { - "data": { - "device": "Ruta o URL", - "id": "ID", - "name": "Nom" - }, - "title": "Passarel\u00b7la d'OpenTherm" - } - }, - "title": "Passarel\u00b7la d'OpenTherm" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Temperatura de la planta", - "precision": "Precisi\u00f3" - }, - "description": "Opcions del la passarel\u00b7la d'enlla\u00e7 d\u2019OpenTherm" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/da.json b/homeassistant/components/opentherm_gw/.translations/da.json deleted file mode 100644 index bbdec393ab0..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway allerede konfigureret", - "id_exists": "Gateway-id findes allerede", - "serial_error": "Fejl ved tilslutning til enheden", - "timeout": "Forbindelsesfors\u00f8g fik timeout" - }, - "step": { - "init": { - "data": { - "device": "Sti eller webadresse", - "id": "Id", - "name": "Navn" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Gulvtemperatur", - "precision": "Pr\u00e6cision" - }, - "description": "Indstillinger for OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/de.json b/homeassistant/components/opentherm_gw/.translations/de.json deleted file mode 100644 index 92217c51c04..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway bereits konfiguriert", - "id_exists": "Gateway-ID ist bereits vorhanden", - "serial_error": "Fehler beim Verbinden mit dem Ger\u00e4t", - "timeout": "Zeit\u00fcberschreitung beim Verbindungsversuch" - }, - "step": { - "init": { - "data": { - "device": "Pfad oder URL", - "id": "ID", - "name": "Name" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Boden-Temperatur", - "precision": "Genauigkeit" - }, - "description": "Optionen f\u00fcr das OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/en.json b/homeassistant/components/opentherm_gw/.translations/en.json deleted file mode 100644 index 5ba5d232bfc..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway already configured", - "id_exists": "Gateway id already exists", - "serial_error": "Error connecting to device", - "timeout": "Connection attempt timed out" - }, - "step": { - "init": { - "data": { - "device": "Path or URL", - "id": "ID", - "name": "Name" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Floor Temperature", - "precision": "Precision" - }, - "description": "Options for the OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/es.json b/homeassistant/components/opentherm_gw/.translations/es.json deleted file mode 100644 index 9acfbb4bf67..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway ya configurado", - "id_exists": "El ID del Gateway ya existe", - "serial_error": "Error de conexi\u00f3n al dispositivo", - "timeout": "Intento de conexi\u00f3n agotado" - }, - "step": { - "init": { - "data": { - "device": "Ruta o URL", - "id": "ID", - "name": "Nombre" - }, - "title": "Gateway OpenTherm" - } - }, - "title": "Gateway OpenTherm" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Temperatura del suelo", - "precision": "Precisi\u00f3n" - }, - "description": "Opciones para OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/fr.json b/homeassistant/components/opentherm_gw/.translations/fr.json deleted file mode 100644 index 7508612580d..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/fr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Passerelle d\u00e9j\u00e0 configur\u00e9e", - "id_exists": "L'identifiant de la passerelle existe d\u00e9j\u00e0", - "serial_error": "Erreur de connexion \u00e0 l'appareil", - "timeout": "La tentative de connexion a expir\u00e9" - }, - "step": { - "init": { - "data": { - "device": "Chemin ou URL", - "id": "ID", - "name": "Nom" - }, - "title": "Passerelle OpenTherm" - } - }, - "title": "Passerelle OpenTherm" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Temp\u00e9rature du sol", - "precision": "Pr\u00e9cision" - }, - "description": "Options pour la passerelle OpenTherm" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/hu.json b/homeassistant/components/opentherm_gw/.translations/hu.json deleted file mode 100644 index 1a00570d324..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/hu.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Az \u00e1tj\u00e1r\u00f3 m\u00e1r konfigur\u00e1lva van", - "id_exists": "Az \u00e1tj\u00e1r\u00f3 azonos\u00edt\u00f3ja m\u00e1r l\u00e9tezik", - "serial_error": "Hiba t\u00f6rt\u00e9nt az eszk\u00f6zh\u00f6z val\u00f3 csatlakoz\u00e1skor", - "timeout": "A csatlakoz\u00e1si k\u00eds\u00e9rletre sz\u00e1nt id\u0151 lej\u00e1rt" - }, - "step": { - "init": { - "data": { - "device": "El\u00e9r\u00e9si \u00fat vagy URL", - "id": "ID", - "name": "N\u00e9v" - }, - "title": "OpenTherm \u00e1tj\u00e1r\u00f3" - } - }, - "title": "OpenTherm \u00e1tj\u00e1r\u00f3" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Padl\u00f3 h\u0151m\u00e9rs\u00e9klete", - "precision": "Pontoss\u00e1g" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/it.json b/homeassistant/components/opentherm_gw/.translations/it.json deleted file mode 100644 index c1392fdd077..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway gi\u00e0 configurato", - "id_exists": "ID del gateway esiste gi\u00e0", - "serial_error": "Errore durante la connessione al dispositivo", - "timeout": "Tentativo di connessione scaduto" - }, - "step": { - "init": { - "data": { - "device": "Percorso o URL", - "id": "ID", - "name": "Nome" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "Gateway OpenTherm" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Temperatura del pavimento", - "precision": "Precisione" - }, - "description": "Opzioni per OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/ko.json b/homeassistant/components/opentherm_gw/.translations/ko.json deleted file mode 100644 index a51efdb197b..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "OpenTherm Gateway \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "id_exists": "OpenTherm Gateway id \uac00 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", - "serial_error": "\uae30\uae30 \uc5f0\uacb0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", - "timeout": "\uc5f0\uacb0 \uc2dc\ub3c4 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "init": { - "data": { - "device": "\uacbd\ub85c \ub610\ub294 URL", - "id": "ID", - "name": "\uc774\ub984" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "\uc628\ub3c4 \uc18c\uc218\uc810 \ubc84\ub9bc", - "precision": "\uc815\ubc00\ub3c4" - }, - "description": "OpenTherm Gateway \uc635\uc158" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/lb.json b/homeassistant/components/opentherm_gw/.translations/lb.json deleted file mode 100644 index 3a057ec4e3b..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway ass scho konfigur\u00e9iert", - "id_exists": "Gateway ID g\u00ebtt et schonn", - "serial_error": "Feeler beim verbannen", - "timeout": "Z\u00e4it Iwwerschreidung beim Verbindungs Versuch" - }, - "step": { - "init": { - "data": { - "device": "Pfad oder URL", - "id": "ID", - "name": "Numm" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Buedem Temperatur", - "precision": "Pr\u00e4zisioun" - }, - "description": "Optioune fir OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/nl.json b/homeassistant/components/opentherm_gw/.translations/nl.json deleted file mode 100644 index 331307d3bca..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/nl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway al geconfigureerd", - "id_exists": "Gateway id bestaat al", - "serial_error": "Fout bij het verbinden met het apparaat", - "timeout": "Er is een time-out opgetreden voor de verbindingspoging" - }, - "step": { - "init": { - "data": { - "device": "Pad of URL", - "id": "ID", - "name": "Naam" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Vloertemperatuur", - "precision": "Precisie" - }, - "description": "Opties voor de OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/no.json b/homeassistant/components/opentherm_gw/.translations/no.json deleted file mode 100644 index 6b30b85931d..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway er allerede konfigurert", - "id_exists": "Gateway-ID finnes allerede", - "serial_error": "Feil ved tilkobling til enhet", - "timeout": "Tilkoblingsfors\u00f8k ble tidsavbrutt" - }, - "step": { - "init": { - "data": { - "device": "Bane eller URL-adresse", - "id": "", - "name": "Navn" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Etasje Temperatur", - "precision": "Presisjon" - }, - "description": "Alternativer for OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/pl.json b/homeassistant/components/opentherm_gw/.translations/pl.json deleted file mode 100644 index 9d945eac27e..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/pl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Bramka jest ju\u017c skonfigurowana.", - "id_exists": "Identyfikator bramki ju\u017c istnieje.", - "serial_error": "B\u0142\u0105d po\u0142\u0105czenia z urz\u0105dzeniem", - "timeout": "Przekroczono limit czasu pr\u00f3by po\u0142\u0105czenia." - }, - "step": { - "init": { - "data": { - "device": "\u015acie\u017cka lub adres URL", - "id": "Identyfikator", - "name": "Nazwa" - }, - "title": "Bramka OpenTherm" - } - }, - "title": "Bramka OpenTherm" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Zaokr\u0105glanie warto\u015bci w d\u00f3\u0142", - "precision": "Precyzja" - }, - "description": "Opcje dla bramki OpenTherm" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/ru.json b/homeassistant/components/opentherm_gw/.translations/ru.json deleted file mode 100644 index 6ad69e23c23..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u043b\u044e\u0437\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "id_exists": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0448\u043b\u044e\u0437\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.", - "serial_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443.", - "timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f." - }, - "step": { - "init": { - "data": { - "device": "\u041f\u0443\u0442\u044c \u0438\u043b\u0438 URL-\u0430\u0434\u0440\u0435\u0441", - "id": "ID", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "title": "OpenTherm" - } - }, - "title": "OpenTherm" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u0430", - "precision": "\u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c" - }, - "description": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0448\u043b\u044e\u0437\u0430 Opentherm" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/sl.json b/homeassistant/components/opentherm_gw/.translations/sl.json deleted file mode 100644 index 8eabe6839bb..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Prehod je \u017ee konfiguriran", - "id_exists": "ID prehoda \u017ee obstaja", - "serial_error": "Napaka pri povezovanju z napravo", - "timeout": "Poskus povezave je potekel" - }, - "step": { - "init": { - "data": { - "device": "Pot ali URL", - "id": "ID", - "name": "Ime" - }, - "title": "OpenTherm Prehod" - } - }, - "title": "OpenTherm Prehod" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Temperatura nadstropja", - "precision": "Natan\u010dnost" - }, - "description": "Mo\u017enosti za prehod OpenTherm" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/sv.json b/homeassistant/components/opentherm_gw/.translations/sv.json deleted file mode 100644 index 61562b9562f..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/sv.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "Gateway redan konfigurerad", - "id_exists": "Gateway-id finns redan", - "serial_error": "Fel vid anslutning till enheten", - "timeout": "Anslutningsf\u00f6rs\u00f6ket avbr\u00f6ts" - }, - "step": { - "init": { - "data": { - "device": "S\u00f6kv\u00e4g eller URL", - "id": "ID", - "name": "Namn" - }, - "title": "OpenTherm Gateway" - } - }, - "title": "OpenTherm Gateway" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "Golvetemperatur", - "precision": "Precision" - }, - "description": "Alternativ f\u00f6r OpenTherm Gateway" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/zh-Hant.json b/homeassistant/components/opentherm_gw/.translations/zh-Hant.json deleted file mode 100644 index 6c6db948156..00000000000 --- a/homeassistant/components/opentherm_gw/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "error": { - "already_configured": "\u9598\u9053\u5668\u5df2\u8a2d\u5b9a\u5b8c\u6210", - "id_exists": "\u9598\u9053\u5668 ID \u5df2\u5b58\u5728", - "serial_error": "\u9023\u7dda\u81f3\u88dd\u7f6e\u932f\u8aa4", - "timeout": "\u9023\u7dda\u5617\u8a66\u903e\u6642" - }, - "step": { - "init": { - "data": { - "device": "\u8def\u5f91\u6216 URL", - "id": "ID", - "name": "\u540d\u7a31" - }, - "title": "OpenTherm \u9598\u9053\u5668" - } - }, - "title": "OpenTherm \u9598\u9053\u5668" - }, - "options": { - "step": { - "init": { - "data": { - "floor_temperature": "\u6a13\u5c64\u6eab\u5ea6", - "precision": "\u6e96\u78ba\u5ea6" - }, - "description": "OpenTherm \u9598\u9053\u5668\u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/binary_sensor.py b/homeassistant/components/opentherm_gw/binary_sensor.py index eff11554a39..62c0d3dd2c1 100644 --- a/homeassistant/components/opentherm_gw/binary_sensor.py +++ b/homeassistant/components/opentherm_gw/binary_sensor.py @@ -60,6 +60,11 @@ class OpenThermBinarySensor(BinarySensorDevice): ) self._unsub_updates() + @property + def available(self): + """Return availability of the sensor.""" + return self._state is not None + @property def entity_registry_enabled_default(self): """Disable binary_sensors by default.""" @@ -68,8 +73,9 @@ class OpenThermBinarySensor(BinarySensorDevice): @callback def receive_report(self, status): """Handle status updates from the component.""" - self._state = bool(status.get(self._var)) - self.async_schedule_update_ha_state() + state = status.get(self._var) + self._state = None if state is None else bool(state) + self.async_write_ha_state() @property def name(self): diff --git a/homeassistant/components/opentherm_gw/climate.py b/homeassistant/components/opentherm_gw/climate.py index 2db20662a77..a7e7eedef34 100644 --- a/homeassistant/components/opentherm_gw/climate.py +++ b/homeassistant/components/opentherm_gw/climate.py @@ -63,6 +63,7 @@ class OpenThermClimate(ClimateDevice): self.friendly_name = gw_dev.name self.floor_temp = options.get(CONF_FLOOR_TEMP, DEFAULT_FLOOR_TEMP) self.temp_precision = options.get(CONF_PRECISION, DEFAULT_PRECISION) + self._available = False self._current_operation = None self._current_temperature = None self._hvac_mode = HVAC_MODE_HEAT @@ -80,7 +81,7 @@ class OpenThermClimate(ClimateDevice): """Update climate entity options.""" self.floor_temp = entry.options[CONF_FLOOR_TEMP] self.temp_precision = entry.options[CONF_PRECISION] - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Connect to the OpenTherm Gateway device.""" @@ -101,6 +102,7 @@ class OpenThermClimate(ClimateDevice): @callback def receive_report(self, status): """Receive and handle a new report from the Gateway.""" + self._available = bool(status) ch_active = status.get(gw_vars.DATA_SLAVE_CH_ACTIVE) flame_on = status.get(gw_vars.DATA_SLAVE_FLAME_ON) cooling_active = status.get(gw_vars.DATA_SLAVE_COOLING_ACTIVE) @@ -144,7 +146,12 @@ class OpenThermClimate(ClimateDevice): self._away_state_b = ( status.get(gw_vars.OTGW_GPIO_B_STATE) == self._away_mode_b ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() + + @property + def available(self): + """Return availability of the sensor.""" + return self._available @property def name(self): @@ -253,7 +260,7 @@ class OpenThermClimate(ClimateDevice): self._new_target_temperature = await self._gateway.gateway.set_target_temp( temp ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def supported_features(self): diff --git a/homeassistant/components/opentherm_gw/config_flow.py b/homeassistant/components/opentherm_gw/config_flow.py index b52641105e4..dc1b943686f 100644 --- a/homeassistant/components/opentherm_gw/config_flow.py +++ b/homeassistant/components/opentherm_gw/config_flow.py @@ -2,6 +2,7 @@ import asyncio import pyotgw +from pyotgw import vars as gw_vars from serial import SerialException import voluptuous as vol @@ -53,7 +54,7 @@ class OpenThermGwConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): otgw = pyotgw.pyotgw() status = await otgw.connect(self.hass.loop, device) await otgw.disconnect() - return status.get(pyotgw.OTGW_ABOUT) + return status.get(gw_vars.OTGW_ABOUT) try: res = await asyncio.wait_for(test_connection(), timeout=10) diff --git a/homeassistant/components/opentherm_gw/manifest.json b/homeassistant/components/opentherm_gw/manifest.json index 81a41b8fb47..558f4adced8 100644 --- a/homeassistant/components/opentherm_gw/manifest.json +++ b/homeassistant/components/opentherm_gw/manifest.json @@ -2,8 +2,7 @@ "domain": "opentherm_gw", "name": "OpenTherm Gateway", "documentation": "https://www.home-assistant.io/integrations/opentherm_gw", - "requirements": ["pyotgw==0.5b1"], - "dependencies": [], + "requirements": ["pyotgw==0.6b1"], "codeowners": ["@mvn23"], "config_flow": true } diff --git a/homeassistant/components/opentherm_gw/sensor.py b/homeassistant/components/opentherm_gw/sensor.py index 3739f77e69d..b2f8e272983 100644 --- a/homeassistant/components/opentherm_gw/sensor.py +++ b/homeassistant/components/opentherm_gw/sensor.py @@ -61,6 +61,11 @@ class OpenThermSensor(Entity): _LOGGER.debug("Removing OpenTherm Gateway sensor %s", self._friendly_name) self._unsub_updates() + @property + def available(self): + """Return availability of the sensor.""" + return self._value is not None + @property def entity_registry_enabled_default(self): """Disable sensors by default.""" @@ -73,7 +78,7 @@ class OpenThermSensor(Entity): if isinstance(value, float): value = f"{value:2.1f}" self._value = value - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def name(self): diff --git a/homeassistant/components/opentherm_gw/services.yaml b/homeassistant/components/opentherm_gw/services.yaml index 29ad2ecdbe7..227c6d423bc 100644 --- a/homeassistant/components/opentherm_gw/services.yaml +++ b/homeassistant/components/opentherm_gw/services.yaml @@ -5,20 +5,20 @@ reset_gateway: fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" set_clock: description: Set the clock and day of the week on the connected thermostat. fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" date: description: Optional date from which the day of the week will be extracted. Defaults to today. - example: '2018-10-23' + example: "2018-10-23" time: description: Optional time in 24h format which will be provided to the thermostat. Defaults to the current time. - example: '19:34' + example: "19:34" set_control_setpoint: description: > @@ -27,13 +27,13 @@ set_control_setpoint: fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" temperature: description: > The central heating setpoint to set on the gateway. Values between 0 and 90 are accepted, but not all boilers support this range. A value of 0 disables the central heating setpoint override. - example: '37.5' + example: "37.5" set_hot_water_ovrd: description: > @@ -41,7 +41,7 @@ set_hot_water_ovrd: fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" dhw_override: description: > Control the domestic hot water enable option. If the boiler has @@ -50,37 +50,37 @@ set_hot_water_ovrd: that. Value should be 0 or 1 to enable the override in off or on state, or "A" to disable the override. - example: '1' + example: "1" set_gpio_mode: description: Change the function of the GPIO pins of the gateway. fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" id: description: The ID of the GPIO pin. Either "A" or "B". - example: 'B' + example: "B" mode: description: > Mode to set on the GPIO pin. Values 0 through 6 are accepted for both GPIOs, 7 is only accepted for GPIO "B". See https://www.home-assistant.io/integrations/opentherm_gw/#gpio-modes for an explanation of the values. - example: '5' + example: "5" set_led_mode: description: Change the function of the LEDs of the gateway. fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" id: description: The ID of the LED. Possible values are "A" through "F". - example: 'C' + example: "C" mode: description: > The function to assign to the LED. One of "R", "X", "T", "B", "O", "F", "H", "W", "C", "E", "M" or "P". See https://www.home-assistant.io/integrations/opentherm_gw/#led-modes for an explanation of the values. - example: 'F' + example: "F" set_max_modulation: description: > @@ -89,13 +89,13 @@ set_max_modulation: fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" level: description: > The modulation level to provide to the gateway. Values between 0 and 100 will set the modulation level. Provide a value of -1 to clear the override and forward the value from the thermostat again. - example: '42' + example: "42" set_outside_temperature: description: > @@ -104,20 +104,20 @@ set_outside_temperature: fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" temperature: description: > The temperature to provide to the thermostat. Values between -40.0 and 64.0 will be accepted, but not all thermostats can display the full range. Any value above 64.0 will clear a previously configured value (suggestion: 99) - example: '-2.3' + example: "-2.3" set_setback_temperature: description: Configure the setback temperature to be used with the GPIO away mode function. fields: gateway_id: description: The gateway_id of the OpenTherm Gateway. - example: 'opentherm_gateway' + example: "opentherm_gateway" temperature: description: The setback temperature to configure on the gateway. Values between 0.0 and 30.0 are accepted. - example: '16.0' + example: "16.0" diff --git a/homeassistant/components/opentherm_gw/strings.json b/homeassistant/components/opentherm_gw/strings.json index 1c246432fb1..eb074e608ca 100644 --- a/homeassistant/components/opentherm_gw/strings.json +++ b/homeassistant/components/opentherm_gw/strings.json @@ -1,14 +1,9 @@ { "config": { - "title": "OpenTherm Gateway", "step": { "init": { "title": "OpenTherm Gateway", - "data": { - "name": "Name", - "device": "Path or URL", - "id": "ID" - } + "data": { "name": "Name", "device": "Path or URL", "id": "ID" } } }, "error": { @@ -16,7 +11,7 @@ "id_exists": "Gateway id already exists", "serial_error": "Error connecting to device", "timeout": "Connection attempt timed out" - } + } }, "options": { "step": { @@ -29,4 +24,4 @@ } } } -} \ No newline at end of file +} diff --git a/homeassistant/components/opentherm_gw/translations/bg.json b/homeassistant/components/opentherm_gw/translations/bg.json new file mode 100644 index 00000000000..5d23794c07b --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/bg.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "\u0428\u043b\u044e\u0437\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "id_exists": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440a \u043d\u0430 \u0448\u043b\u044e\u0437\u0430 \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430", + "serial_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", + "timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438\u0437\u0442\u0435\u0447\u0435" + }, + "step": { + "init": { + "data": { + "device": "\u041f\u044a\u0442 \u0438\u043b\u0438 URL \u0430\u0434\u0440\u0435\u0441", + "id": "ID", + "name": "\u0418\u043c\u0435" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430 \u043f\u043e\u0434\u0430", + "precision": "\u0422\u043e\u0447\u043d\u043e\u0441\u0442" + }, + "description": "\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/ca.json b/homeassistant/components/opentherm_gw/translations/ca.json new file mode 100644 index 00000000000..41a155b147f --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Passarel\u00b7la ja configurada", + "id_exists": "L'identificador de passarel\u00b7la ja existeix", + "serial_error": "S'ha produ\u00eft un error en connectar-se al dispositiu", + "timeout": "S'ha acabat el temps d'espera en l'intent de connexi\u00f3" + }, + "step": { + "init": { + "data": { + "device": "Ruta o URL", + "id": "ID", + "name": "Nom" + }, + "title": "Passarel\u00b7la d'OpenTherm" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Temperatura de la planta", + "precision": "Precisi\u00f3" + }, + "description": "Opcions del la passarel\u00b7la d'enlla\u00e7 d\u2019OpenTherm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/da.json b/homeassistant/components/opentherm_gw/translations/da.json new file mode 100644 index 00000000000..25006b481b1 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway allerede konfigureret", + "id_exists": "Gateway-id findes allerede", + "serial_error": "Fejl ved tilslutning til enheden", + "timeout": "Forbindelsesfors\u00f8g fik timeout" + }, + "step": { + "init": { + "data": { + "device": "Sti eller webadresse", + "id": "Id", + "name": "Navn" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Gulvtemperatur", + "precision": "Pr\u00e6cision" + }, + "description": "Indstillinger for OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/de.json b/homeassistant/components/opentherm_gw/translations/de.json new file mode 100644 index 00000000000..1533e586514 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway bereits konfiguriert", + "id_exists": "Gateway-ID ist bereits vorhanden", + "serial_error": "Fehler beim Verbinden mit dem Ger\u00e4t", + "timeout": "Zeit\u00fcberschreitung beim Verbindungsversuch" + }, + "step": { + "init": { + "data": { + "device": "Pfad oder URL", + "id": "ID", + "name": "Name" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Boden-Temperatur", + "precision": "Genauigkeit" + }, + "description": "Optionen f\u00fcr das OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/en.json b/homeassistant/components/opentherm_gw/translations/en.json new file mode 100644 index 00000000000..17d259ad1d1 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway already configured", + "id_exists": "Gateway id already exists", + "serial_error": "Error connecting to device", + "timeout": "Connection attempt timed out" + }, + "step": { + "init": { + "data": { + "device": "Path or URL", + "id": "ID", + "name": "Name" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Floor Temperature", + "precision": "Precision" + }, + "description": "Options for the OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/es.json b/homeassistant/components/opentherm_gw/translations/es.json new file mode 100644 index 00000000000..73918a9e8a9 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway ya configurado", + "id_exists": "El ID del Gateway ya existe", + "serial_error": "Error de conexi\u00f3n al dispositivo", + "timeout": "Intento de conexi\u00f3n agotado" + }, + "step": { + "init": { + "data": { + "device": "Ruta o URL", + "id": "ID", + "name": "Nombre" + }, + "title": "Gateway OpenTherm" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Temperatura del suelo", + "precision": "Precisi\u00f3n" + }, + "description": "Opciones para OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/fr.json b/homeassistant/components/opentherm_gw/translations/fr.json new file mode 100644 index 00000000000..11cce45dcd7 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/fr.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Passerelle d\u00e9j\u00e0 configur\u00e9e", + "id_exists": "L'identifiant de la passerelle existe d\u00e9j\u00e0", + "serial_error": "Erreur de connexion \u00e0 l'appareil", + "timeout": "La tentative de connexion a expir\u00e9" + }, + "step": { + "init": { + "data": { + "device": "Chemin ou URL", + "id": "ID", + "name": "Nom" + }, + "title": "Passerelle OpenTherm" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Temp\u00e9rature du sol", + "precision": "Pr\u00e9cision" + }, + "description": "Options pour la passerelle OpenTherm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/hu.json b/homeassistant/components/opentherm_gw/translations/hu.json new file mode 100644 index 00000000000..6ccdae6437c --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/hu.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "already_configured": "Az \u00e1tj\u00e1r\u00f3 m\u00e1r konfigur\u00e1lva van", + "id_exists": "Az \u00e1tj\u00e1r\u00f3 azonos\u00edt\u00f3ja m\u00e1r l\u00e9tezik", + "serial_error": "Hiba t\u00f6rt\u00e9nt az eszk\u00f6zh\u00f6z val\u00f3 csatlakoz\u00e1skor", + "timeout": "A csatlakoz\u00e1si k\u00eds\u00e9rletre sz\u00e1nt id\u0151 lej\u00e1rt" + }, + "step": { + "init": { + "data": { + "device": "El\u00e9r\u00e9si \u00fat vagy URL", + "id": "ID", + "name": "N\u00e9v" + }, + "title": "OpenTherm \u00e1tj\u00e1r\u00f3" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Padl\u00f3 h\u0151m\u00e9rs\u00e9klete", + "precision": "Pontoss\u00e1g" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/it.json b/homeassistant/components/opentherm_gw/translations/it.json new file mode 100644 index 00000000000..f26e7998567 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway gi\u00e0 configurato", + "id_exists": "ID del gateway esiste gi\u00e0", + "serial_error": "Errore durante la connessione al dispositivo", + "timeout": "Tentativo di connessione scaduto" + }, + "step": { + "init": { + "data": { + "device": "Percorso o URL", + "id": "ID", + "name": "Nome" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Temperatura del pavimento", + "precision": "Precisione" + }, + "description": "Opzioni per OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/ko.json b/homeassistant/components/opentherm_gw/translations/ko.json new file mode 100644 index 00000000000..27b3fd1cbd8 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "OpenTherm Gateway \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "id_exists": "OpenTherm Gateway id \uac00 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", + "serial_error": "\uae30\uae30 \uc5f0\uacb0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", + "timeout": "\uc5f0\uacb0 \uc2dc\ub3c4 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "init": { + "data": { + "device": "\uacbd\ub85c \ub610\ub294 URL", + "id": "ID", + "name": "\uc774\ub984" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "\uc628\ub3c4 \uc18c\uc218\uc810 \ubc84\ub9bc", + "precision": "\uc815\ubc00\ub3c4" + }, + "description": "OpenTherm Gateway \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/lb.json b/homeassistant/components/opentherm_gw/translations/lb.json new file mode 100644 index 00000000000..1ce0a275f1c --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway ass scho konfigur\u00e9iert", + "id_exists": "Gateway ID g\u00ebtt et schonn", + "serial_error": "Feeler beim verbannen", + "timeout": "Z\u00e4it Iwwerschreidung beim Verbindungs Versuch" + }, + "step": { + "init": { + "data": { + "device": "Pfad oder URL", + "id": "ID", + "name": "Numm" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Buedem Temperatur", + "precision": "Pr\u00e4zisioun" + }, + "description": "Optioune fir OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/lv.json b/homeassistant/components/opentherm_gw/translations/lv.json similarity index 100% rename from homeassistant/components/opentherm_gw/.translations/lv.json rename to homeassistant/components/opentherm_gw/translations/lv.json diff --git a/homeassistant/components/opentherm_gw/translations/nl.json b/homeassistant/components/opentherm_gw/translations/nl.json new file mode 100644 index 00000000000..4b5fea8f312 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/nl.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway al geconfigureerd", + "id_exists": "Gateway id bestaat al", + "serial_error": "Fout bij het verbinden met het apparaat", + "timeout": "Er is een time-out opgetreden voor de verbindingspoging" + }, + "step": { + "init": { + "data": { + "device": "Pad of URL", + "id": "ID", + "name": "Naam" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Vloertemperatuur", + "precision": "Precisie" + }, + "description": "Opties voor de OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/nn.json b/homeassistant/components/opentherm_gw/translations/nn.json similarity index 100% rename from homeassistant/components/opentherm_gw/.translations/nn.json rename to homeassistant/components/opentherm_gw/translations/nn.json diff --git a/homeassistant/components/opentherm_gw/translations/no.json b/homeassistant/components/opentherm_gw/translations/no.json new file mode 100644 index 00000000000..07cc2f56ed6 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway er allerede konfigurert", + "id_exists": "Gateway-ID finnes allerede", + "serial_error": "Feil ved tilkobling til enhet", + "timeout": "Tilkoblingsfors\u00f8k ble tidsavbrutt" + }, + "step": { + "init": { + "data": { + "device": "Bane eller URL-adresse", + "id": "", + "name": "Navn" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Etasje Temperatur", + "precision": "Presisjon" + }, + "description": "Alternativer for OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/pl.json b/homeassistant/components/opentherm_gw/translations/pl.json new file mode 100644 index 00000000000..8eea281729a --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Bramka jest ju\u017c skonfigurowana.", + "id_exists": "Identyfikator bramki ju\u017c istnieje.", + "serial_error": "B\u0142\u0105d po\u0142\u0105czenia z urz\u0105dzeniem", + "timeout": "Przekroczono limit czasu pr\u00f3by po\u0142\u0105czenia." + }, + "step": { + "init": { + "data": { + "device": "\u015acie\u017cka lub adres URL", + "id": "Identyfikator", + "name": "Nazwa" + }, + "title": "Bramka OpenTherm" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Zaokr\u0105glanie warto\u015bci w d\u00f3\u0142", + "precision": "Precyzja" + }, + "description": "Opcje dla bramki OpenTherm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/.translations/pt-BR.json b/homeassistant/components/opentherm_gw/translations/pt-BR.json similarity index 100% rename from homeassistant/components/opentherm_gw/.translations/pt-BR.json rename to homeassistant/components/opentherm_gw/translations/pt-BR.json diff --git a/homeassistant/components/opentherm_gw/.translations/pt.json b/homeassistant/components/opentherm_gw/translations/pt.json similarity index 100% rename from homeassistant/components/opentherm_gw/.translations/pt.json rename to homeassistant/components/opentherm_gw/translations/pt.json diff --git a/homeassistant/components/opentherm_gw/translations/ru.json b/homeassistant/components/opentherm_gw/translations/ru.json new file mode 100644 index 00000000000..b81fe14497a --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u043b\u044e\u0437\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "id_exists": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0448\u043b\u044e\u0437\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.", + "serial_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443.", + "timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f." + }, + "step": { + "init": { + "data": { + "device": "\u041f\u0443\u0442\u044c \u0438\u043b\u0438 URL-\u0430\u0434\u0440\u0435\u0441", + "id": "ID", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "title": "OpenTherm" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u0430", + "precision": "\u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c" + }, + "description": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0448\u043b\u044e\u0437\u0430 Opentherm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/sl.json b/homeassistant/components/opentherm_gw/translations/sl.json new file mode 100644 index 00000000000..5ab4b0145b0 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Prehod je \u017ee konfiguriran", + "id_exists": "ID prehoda \u017ee obstaja", + "serial_error": "Napaka pri povezovanju z napravo", + "timeout": "Poskus povezave je potekel" + }, + "step": { + "init": { + "data": { + "device": "Pot ali URL", + "id": "ID", + "name": "Ime" + }, + "title": "OpenTherm Prehod" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Temperatura nadstropja", + "precision": "Natan\u010dnost" + }, + "description": "Mo\u017enosti za prehod OpenTherm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/sv.json b/homeassistant/components/opentherm_gw/translations/sv.json new file mode 100644 index 00000000000..3b8cbf12ea0 --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/sv.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "Gateway redan konfigurerad", + "id_exists": "Gateway-id finns redan", + "serial_error": "Fel vid anslutning till enheten", + "timeout": "Anslutningsf\u00f6rs\u00f6ket avbr\u00f6ts" + }, + "step": { + "init": { + "data": { + "device": "S\u00f6kv\u00e4g eller URL", + "id": "ID", + "name": "Namn" + }, + "title": "OpenTherm Gateway" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "Golvetemperatur", + "precision": "Precision" + }, + "description": "Alternativ f\u00f6r OpenTherm Gateway" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/opentherm_gw/translations/zh-Hant.json b/homeassistant/components/opentherm_gw/translations/zh-Hant.json new file mode 100644 index 00000000000..c938db307db --- /dev/null +++ b/homeassistant/components/opentherm_gw/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "error": { + "already_configured": "\u9598\u9053\u5668\u5df2\u8a2d\u5b9a\u5b8c\u6210", + "id_exists": "\u9598\u9053\u5668 ID \u5df2\u5b58\u5728", + "serial_error": "\u9023\u7dda\u81f3\u8a2d\u5099\u932f\u8aa4", + "timeout": "\u9023\u7dda\u5617\u8a66\u903e\u6642" + }, + "step": { + "init": { + "data": { + "device": "\u8def\u5f91\u6216 URL", + "id": "ID", + "name": "\u540d\u7a31" + }, + "title": "OpenTherm \u9598\u9053\u5668" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "floor_temperature": "\u6a13\u5c64\u6eab\u5ea6", + "precision": "\u6e96\u78ba\u5ea6" + }, + "description": "OpenTherm \u9598\u9053\u5668\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/ar.json b/homeassistant/components/openuv/.translations/ar.json deleted file mode 100644 index 288fae919dc..00000000000 --- a/homeassistant/components/openuv/.translations/ar.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/bg.json b/homeassistant/components/openuv/.translations/bg.json deleted file mode 100644 index 6e1e2db5ca8..00000000000 --- a/homeassistant/components/openuv/.translations/bg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0438\u0442\u0435 \u0441\u0430 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0438", - "invalid_api_key": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d API \u043a\u043b\u044e\u0447" - }, - "step": { - "user": { - "data": { - "api_key": "API \u043a\u043b\u044e\u0447 \u0437\u0430 OpenUV", - "elevation": "\u041d\u0430\u0434\u043c\u043e\u0440\u0441\u043a\u0430 \u0432\u0438\u0441\u043e\u0447\u0438\u043d\u0430", - "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", - "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/ca.json b/homeassistant/components/openuv/.translations/ca.json deleted file mode 100644 index ad2f391886a..00000000000 --- a/homeassistant/components/openuv/.translations/ca.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Les coordenades ja estan registrades", - "invalid_api_key": "Clau API no v\u00e0lida" - }, - "step": { - "user": { - "data": { - "api_key": "Clau API d'OpenUV", - "elevation": "Elevaci\u00f3", - "latitude": "Latitud", - "longitude": "Longitud" - }, - "title": "Introdueix la teva informaci\u00f3" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/cs.json b/homeassistant/components/openuv/.translations/cs.json deleted file mode 100644 index 9f6ad4f8d47..00000000000 --- a/homeassistant/components/openuv/.translations/cs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Sou\u0159adnice jsou ji\u017e zaregistrovan\u00e9", - "invalid_api_key": "Neplatn\u00fd kl\u00ed\u010d API" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API Kl\u00ed\u010d", - "elevation": "Nadmo\u0159sk\u00e1 v\u00fd\u0161ka", - "latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka", - "longitude": "Zem\u011bpisn\u00e1 d\u00e9lka" - }, - "title": "Vypl\u0148te va\u0161e \u00fadaje" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/da.json b/homeassistant/components/openuv/.translations/da.json deleted file mode 100644 index eaf2e127026..00000000000 --- a/homeassistant/components/openuv/.translations/da.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinater er allerede registreret", - "invalid_api_key": "Ugyldig API-n\u00f8gle" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API-n\u00f8gle", - "elevation": "Elevation", - "latitude": "Breddegrad", - "longitude": "L\u00e6ngdegrad" - }, - "title": "Udfyld dine oplysninger" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/de.json b/homeassistant/components/openuv/.translations/de.json deleted file mode 100644 index cc8ee92df4b..00000000000 --- a/homeassistant/components/openuv/.translations/de.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinaten existieren bereits", - "invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API-Schl\u00fcssel", - "elevation": "H\u00f6he", - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad" - }, - "title": "Gib deine Informationen ein" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/en.json b/homeassistant/components/openuv/.translations/en.json deleted file mode 100644 index df0232d01fc..00000000000 --- a/homeassistant/components/openuv/.translations/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordinates already registered", - "invalid_api_key": "Invalid API key" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API Key", - "elevation": "Elevation", - "latitude": "Latitude", - "longitude": "Longitude" - }, - "title": "Fill in your information" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/es-419.json b/homeassistant/components/openuv/.translations/es-419.json deleted file mode 100644 index 332a21f99f5..00000000000 --- a/homeassistant/components/openuv/.translations/es-419.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordenadas ya registradas", - "invalid_api_key": "Clave de API inv\u00e1lida" - }, - "step": { - "user": { - "data": { - "api_key": "Clave API de OpenUV", - "elevation": "Elevaci\u00f3n", - "latitude": "Latitud", - "longitude": "Longitud" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/es.json b/homeassistant/components/openuv/.translations/es.json deleted file mode 100644 index 03118f00ea6..00000000000 --- a/homeassistant/components/openuv/.translations/es.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordenadas ya registradas", - "invalid_api_key": "Clave API inv\u00e1lida" - }, - "step": { - "user": { - "data": { - "api_key": "Clave API de OpenUV", - "elevation": "Elevaci\u00f3n", - "latitude": "Latitud", - "longitude": "Longitud" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/fa.json b/homeassistant/components/openuv/.translations/fa.json deleted file mode 100644 index 288fae919dc..00000000000 --- a/homeassistant/components/openuv/.translations/fa.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/fr.json b/homeassistant/components/openuv/.translations/fr.json deleted file mode 100644 index 2f83fa30085..00000000000 --- a/homeassistant/components/openuv/.translations/fr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordonn\u00e9es d\u00e9j\u00e0 enregistr\u00e9es", - "invalid_api_key": "Cl\u00e9 d'API invalide" - }, - "step": { - "user": { - "data": { - "api_key": "Cl\u00e9 d'API OpenUV", - "elevation": "Altitude", - "latitude": "Latitude", - "longitude": "Longitude" - }, - "title": "Veuillez saisir vos informations" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/he.json b/homeassistant/components/openuv/.translations/he.json deleted file mode 100644 index 262a3d732a2..00000000000 --- a/homeassistant/components/openuv/.translations/he.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u05d4\u05e7\u05d5\u05d0\u05d5\u05e8\u05d3\u05d9\u05e0\u05d8\u05d5\u05ea \u05db\u05d1\u05e8 \u05e8\u05e9\u05d5\u05de\u05d5\u05ea", - "invalid_api_key": "\u05de\u05e4\u05ea\u05d7 API \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9" - }, - "step": { - "user": { - "data": { - "api_key": "\u05de\u05e4\u05ea\u05d7 API \u05e9\u05dc OpenUV", - "elevation": "\u05d2\u05d5\u05d1\u05d4 \u05de\u05e2\u05dc \u05e4\u05e0\u05d9 \u05d4\u05d9\u05dd", - "latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1", - "longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da" - }, - "title": "\u05de\u05dc\u05d0 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d8\u05d9\u05dd \u05e9\u05dc\u05da" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/hu.json b/homeassistant/components/openuv/.translations/hu.json deleted file mode 100644 index fd30f83c5f8..00000000000 --- a/homeassistant/components/openuv/.translations/hu.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "A koordin\u00e1t\u00e1k m\u00e1r regisztr\u00e1lva vannak", - "invalid_api_key": "\u00c9rv\u00e9nytelen API kulcs" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API kulcs", - "elevation": "Magass\u00e1g", - "latitude": "Sz\u00e9less\u00e9g", - "longitude": "Hossz\u00fas\u00e1g" - }, - "title": "T\u00f6ltsd ki az adataid" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/id.json b/homeassistant/components/openuv/.translations/id.json deleted file mode 100644 index beb7c839eb9..00000000000 --- a/homeassistant/components/openuv/.translations/id.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinat sudah terdaftar", - "invalid_api_key": "Kunci API tidak valid" - }, - "step": { - "user": { - "data": { - "api_key": "Kunci API OpenUV", - "elevation": "Ketinggian", - "latitude": "Lintang", - "longitude": "Garis bujur" - }, - "title": "Isi informasi Anda" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/it.json b/homeassistant/components/openuv/.translations/it.json deleted file mode 100644 index 1a231d680e6..00000000000 --- a/homeassistant/components/openuv/.translations/it.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordinate gi\u00e0 registrate", - "invalid_api_key": "Chiave API non valida" - }, - "step": { - "user": { - "data": { - "api_key": "API Key di OpenUV", - "elevation": "Altitudine", - "latitude": "Latitudine", - "longitude": "Longitudine" - }, - "title": "Inserisci i tuoi dati" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/ko.json b/homeassistant/components/openuv/.translations/ko.json deleted file mode 100644 index c16481993ef..00000000000 --- a/homeassistant/components/openuv/.translations/ko.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\uc88c\ud45c\uac12\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_api_key": "\uc798\ubabb\ub41c API \ud0a4" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API \ud0a4", - "elevation": "\uace0\ub3c4", - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4" - }, - "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/lb.json b/homeassistant/components/openuv/.translations/lb.json deleted file mode 100644 index 86e558cc807..00000000000 --- a/homeassistant/components/openuv/.translations/lb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinate si scho\u00a0registr\u00e9iert", - "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API Schl\u00ebssel", - "elevation": "H\u00e9icht", - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad" - }, - "title": "F\u00ebllt \u00e4r Informatiounen aus" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/nl.json b/homeassistant/components/openuv/.translations/nl.json deleted file mode 100644 index e2b264182d0..00000000000 --- a/homeassistant/components/openuv/.translations/nl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Co\u00f6rdinaten al geregistreerd", - "invalid_api_key": "Ongeldige API-sleutel" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API-Sleutel", - "elevation": "Hoogte", - "latitude": "Breedtegraad", - "longitude": "Lengtegraad" - }, - "title": "Vul uw gegevens in" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/nn.json b/homeassistant/components/openuv/.translations/nn.json deleted file mode 100644 index 135e26cede3..00000000000 --- a/homeassistant/components/openuv/.translations/nn.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinata er allereie registrerte", - "invalid_api_key": "Ugyldig API-n\u00f8kkel" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API-n\u00f8kkel", - "elevation": "H\u00f8gde", - "latitude": "Breiddegrad", - "longitude": "Lengdegrad" - }, - "title": "Fyll ut informasjonen din" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/no.json b/homeassistant/components/openuv/.translations/no.json deleted file mode 100644 index 2ffd5e7fb41..00000000000 --- a/homeassistant/components/openuv/.translations/no.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinatene er allerede registrert", - "invalid_api_key": "Ugyldig API-n\u00f8kkel" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API-n\u00f8kkel", - "elevation": "Elevasjon", - "latitude": "Breddegrad", - "longitude": "Lengdegrad" - }, - "title": "Fyll ut informasjonen din" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/pl.json b/homeassistant/components/openuv/.translations/pl.json deleted file mode 100644 index ff6d1b21055..00000000000 --- a/homeassistant/components/openuv/.translations/pl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Wsp\u00f3\u0142rz\u0119dne s\u0105 ju\u017c zarejestrowane.", - "invalid_api_key": "Nieprawid\u0142owy klucz API" - }, - "step": { - "user": { - "data": { - "api_key": "Klucz API OpenUV", - "elevation": "Wysoko\u015b\u0107", - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna" - }, - "title": "Wprowad\u017a dane" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/pt-BR.json b/homeassistant/components/openuv/.translations/pt-BR.json deleted file mode 100644 index 905fdbacab8..00000000000 --- a/homeassistant/components/openuv/.translations/pt-BR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordenadas j\u00e1 cadastradas", - "invalid_api_key": "Chave de API inv\u00e1lida" - }, - "step": { - "user": { - "data": { - "api_key": "Chave de API do OpenUV", - "elevation": "Eleva\u00e7\u00e3o", - "latitude": "Latitude", - "longitude": "Longitude" - }, - "title": "Preencha suas informa\u00e7\u00f5es" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/pt.json b/homeassistant/components/openuv/.translations/pt.json deleted file mode 100644 index 48283a74106..00000000000 --- a/homeassistant/components/openuv/.translations/pt.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordenadas j\u00e1 registadas", - "invalid_api_key": "Chave de API inv\u00e1lida" - }, - "step": { - "user": { - "data": { - "api_key": "Chave de API do OpenUV", - "elevation": "Eleva\u00e7\u00e3o", - "latitude": "Latitude", - "longitude": "Longitude" - }, - "title": "Preencha com as suas informa\u00e7\u00f5es" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/ro.json b/homeassistant/components/openuv/.translations/ro.json deleted file mode 100644 index 976221188d3..00000000000 --- a/homeassistant/components/openuv/.translations/ro.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Coordonatele deja \u00eenregistrate", - "invalid_api_key": "Cheie API invalid\u0103" - }, - "step": { - "user": { - "data": { - "api_key": "Cheie API OpenUV", - "elevation": "Altitudine", - "latitude": "Latitudine", - "longitude": "Longitudine" - }, - "title": "Completa\u021bi informa\u021biile dvs." - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/ru.json b/homeassistant/components/openuv/.translations/ru.json deleted file mode 100644 index 27d2921a7d4..00000000000 --- a/homeassistant/components/openuv/.translations/ru.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\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.", - "invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API." - }, - "step": { - "user": { - "data": { - "api_key": "\u041a\u043b\u044e\u0447 API", - "elevation": "\u0412\u044b\u0441\u043e\u0442\u0430", - "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", - "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430" - }, - "title": "OpenUV" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/sl.json b/homeassistant/components/openuv/.translations/sl.json deleted file mode 100644 index 6d8c537d6aa..00000000000 --- a/homeassistant/components/openuv/.translations/sl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinate \u017ee registrirane", - "invalid_api_key": "Neveljaven API klju\u010d" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API Klju\u010d", - "elevation": "Nadmorska vi\u0161ina", - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina" - }, - "title": "Izpolnite svoje podatke" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/sv.json b/homeassistant/components/openuv/.translations/sv.json deleted file mode 100644 index d9de0f7c0a6..00000000000 --- a/homeassistant/components/openuv/.translations/sv.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Koordinater \u00e4r redan registrerade", - "invalid_api_key": "Ogiltigt API-l\u00f6senord" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API-nyckel", - "elevation": "H\u00f6jd", - "latitude": "Latitud", - "longitude": "Longitud" - }, - "title": "Fyll i dina uppgifter" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/zh-Hans.json b/homeassistant/components/openuv/.translations/zh-Hans.json deleted file mode 100644 index d8f46d6afe4..00000000000 --- a/homeassistant/components/openuv/.translations/zh-Hans.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u5750\u6807\u5df2\u7ecf\u6ce8\u518c", - "invalid_api_key": "\u65e0\u6548\u7684 API \u5bc6\u94a5" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API \u5bc6\u94a5", - "elevation": "\u6d77\u62d4", - "latitude": "\u7eac\u5ea6", - "longitude": "\u7ecf\u5ea6" - }, - "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/zh-Hant.json b/homeassistant/components/openuv/.translations/zh-Hant.json deleted file mode 100644 index 2310af22fa2..00000000000 --- a/homeassistant/components/openuv/.translations/zh-Hant.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u8a72\u5ea7\u6a19\u5df2\u8a3b\u518a", - "invalid_api_key": "API \u5bc6\u78bc\u7121\u6548" - }, - "step": { - "user": { - "data": { - "api_key": "OpenUV API \u5bc6\u9470", - "elevation": "\u6d77\u62d4", - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6" - }, - "title": "\u586b\u5beb\u8cc7\u8a0a" - } - }, - "title": "OpenUV" - } -} \ No newline at end of file diff --git a/homeassistant/components/openuv/__init__.py b/homeassistant/components/openuv/__init__.py index 008b46d96f2..e6a302975a5 100644 --- a/homeassistant/components/openuv/__init__.py +++ b/homeassistant/components/openuv/__init__.py @@ -82,9 +82,9 @@ async def async_setup(hass, config): conf = config[DOMAIN] - identifier = "{0}, {1}".format( - conf.get(CONF_LATITUDE, hass.config.latitude), - conf.get(CONF_LONGITUDE, hass.config.longitude), + identifier = ( + f"{conf.get(CONF_LATITUDE, hass.config.latitude)}, " + f"{conf.get(CONF_LONGITUDE, hass.config.longitude)}" ) if identifier in configured_instances(hass): return True @@ -233,7 +233,6 @@ class OpenUvEntity(Entity): def __init__(self, openuv): """Initialize.""" - self._async_unsub_dispatcher_connect = None self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION} self._available = True self._name = None @@ -263,18 +262,10 @@ class OpenUvEntity(Entity): self.update_from_latest_data() self.async_write_ha_state() - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, TOPIC_UPDATE, update - ) + self.async_on_remove(async_dispatcher_connect(self.hass, TOPIC_UPDATE, update)) self.update_from_latest_data() - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() - self._async_unsub_dispatcher_connect = None - def update_from_latest_data(self): """Update the sensor using the latest data.""" raise NotImplementedError diff --git a/homeassistant/components/openuv/config_flow.py b/homeassistant/components/openuv/config_flow.py index 82873861fb1..821c9624c58 100644 --- a/homeassistant/components/openuv/config_flow.py +++ b/homeassistant/components/openuv/config_flow.py @@ -19,13 +19,11 @@ from .const import DOMAIN @callback def configured_instances(hass): """Return a set of configured OpenUV instances.""" - return set( - "{0}, {1}".format( - entry.data.get(CONF_LATITUDE, hass.config.latitude), - entry.data.get(CONF_LONGITUDE, hass.config.longitude), - ) + return { + f"{entry.data.get(CONF_LATITUDE, hass.config.latitude)}, " + f"{entry.data.get(CONF_LONGITUDE, hass.config.longitude)}" for entry in hass.config_entries.async_entries(DOMAIN) - ) + } @config_entries.HANDLERS.register(DOMAIN) @@ -35,10 +33,6 @@ class OpenUvFlowHandler(config_entries.ConfigFlow): VERSION = 2 CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL - def __init__(self): - """Initialize the config flow.""" - pass - async def _show_form(self, errors=None): """Show the form to the user.""" data_schema = vol.Schema( @@ -64,9 +58,9 @@ class OpenUvFlowHandler(config_entries.ConfigFlow): if not user_input: return await self._show_form() - identifier = "{0}, {1}".format( - user_input.get(CONF_LATITUDE, self.hass.config.latitude), - user_input.get(CONF_LONGITUDE, self.hass.config.longitude), + identifier = ( + f"{user_input.get(CONF_LATITUDE, self.hass.config.latitude)}, " + f"{user_input.get(CONF_LONGITUDE, self.hass.config.longitude)}" ) if identifier in configured_instances(self.hass): return await self._show_form({CONF_LATITUDE: "identifier_exists"}) diff --git a/homeassistant/components/openuv/manifest.json b/homeassistant/components/openuv/manifest.json index 2366542167d..f55ca587679 100644 --- a/homeassistant/components/openuv/manifest.json +++ b/homeassistant/components/openuv/manifest.json @@ -1,9 +1,8 @@ { "domain": "openuv", - "name": "Openuv", + "name": "OpenUV", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/openuv", "requirements": ["pyopenuv==1.0.9"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/openuv/sensor.py b/homeassistant/components/openuv/sensor.py index 0d4a8b73a08..ec6e75d0e17 100644 --- a/homeassistant/components/openuv/sensor.py +++ b/homeassistant/components/openuv/sensor.py @@ -1,7 +1,7 @@ """Support for OpenUV sensors.""" import logging -from homeassistant.const import TIME_MINUTES +from homeassistant.const import TIME_MINUTES, UV_INDEX from homeassistant.core import callback from homeassistant.util.dt import as_local, parse_datetime @@ -43,9 +43,9 @@ UV_LEVEL_LOW = "Low" SENSORS = { TYPE_CURRENT_OZONE_LEVEL: ("Current Ozone Level", "mdi:vector-triangle", "du"), - TYPE_CURRENT_UV_INDEX: ("Current UV Index", "mdi:weather-sunny", "index"), + TYPE_CURRENT_UV_INDEX: ("Current UV Index", "mdi:weather-sunny", UV_INDEX), TYPE_CURRENT_UV_LEVEL: ("Current UV Level", "mdi:weather-sunny", None), - TYPE_MAX_UV_INDEX: ("Max UV Index", "mdi:weather-sunny", "index"), + TYPE_MAX_UV_INDEX: ("Max UV Index", "mdi:weather-sunny", UV_INDEX), TYPE_SAFE_EXPOSURE_TIME_1: ( "Skin Type 1 Safe Exposure Time", "mdi:timer", diff --git a/homeassistant/components/openuv/services.yaml b/homeassistant/components/openuv/services.yaml index be9a7ba522f..ea353e84892 100644 --- a/homeassistant/components/openuv/services.yaml +++ b/homeassistant/components/openuv/services.yaml @@ -1,6 +1,4 @@ # Describes the format for available OpenUV services - ---- update_data: description: Request new data from OpenUV. Consumes two API calls. diff --git a/homeassistant/components/openuv/strings.json b/homeassistant/components/openuv/strings.json index 9c5af45619e..2d4b530cd55 100644 --- a/homeassistant/components/openuv/strings.json +++ b/homeassistant/components/openuv/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "OpenUV", "step": { "user": { "title": "Fill in your information", diff --git a/homeassistant/components/openuv/translations/ar.json b/homeassistant/components/openuv/translations/ar.json new file mode 100644 index 00000000000..968addd26bf --- /dev/null +++ b/homeassistant/components/openuv/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "OpenUV" +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/bg.json b/homeassistant/components/openuv/translations/bg.json new file mode 100644 index 00000000000..9677642266f --- /dev/null +++ b/homeassistant/components/openuv/translations/bg.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0438\u0442\u0435 \u0441\u0430 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0438", + "invalid_api_key": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d API \u043a\u043b\u044e\u0447" + }, + "step": { + "user": { + "data": { + "api_key": "API \u043a\u043b\u044e\u0447 \u0437\u0430 OpenUV", + "elevation": "\u041d\u0430\u0434\u043c\u043e\u0440\u0441\u043a\u0430 \u0432\u0438\u0441\u043e\u0447\u0438\u043d\u0430", + "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", + "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/ca.json b/homeassistant/components/openuv/translations/ca.json new file mode 100644 index 00000000000..e09ec648ee3 --- /dev/null +++ b/homeassistant/components/openuv/translations/ca.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Les coordenades ja estan registrades", + "invalid_api_key": "Clau API no v\u00e0lida" + }, + "step": { + "user": { + "data": { + "api_key": "Clau API d'OpenUV", + "elevation": "Elevaci\u00f3", + "latitude": "Latitud", + "longitude": "Longitud" + }, + "title": "Introdueix la teva informaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/cs.json b/homeassistant/components/openuv/translations/cs.json new file mode 100644 index 00000000000..4a4776dc82c --- /dev/null +++ b/homeassistant/components/openuv/translations/cs.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Sou\u0159adnice jsou ji\u017e zaregistrovan\u00e9", + "invalid_api_key": "Neplatn\u00fd kl\u00ed\u010d API" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API Kl\u00ed\u010d", + "elevation": "Nadmo\u0159sk\u00e1 v\u00fd\u0161ka", + "latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka", + "longitude": "Zem\u011bpisn\u00e1 d\u00e9lka" + }, + "title": "Vypl\u0148te va\u0161e \u00fadaje" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/da.json b/homeassistant/components/openuv/translations/da.json new file mode 100644 index 00000000000..6ff9546167e --- /dev/null +++ b/homeassistant/components/openuv/translations/da.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinater er allerede registreret", + "invalid_api_key": "Ugyldig API-n\u00f8gle" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API-n\u00f8gle", + "elevation": "Elevation", + "latitude": "Breddegrad", + "longitude": "L\u00e6ngdegrad" + }, + "title": "Udfyld dine oplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/de.json b/homeassistant/components/openuv/translations/de.json new file mode 100644 index 00000000000..d26ca0726b7 --- /dev/null +++ b/homeassistant/components/openuv/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinaten existieren bereits", + "invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API-Schl\u00fcssel", + "elevation": "H\u00f6he", + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad" + }, + "title": "Gib deine Informationen ein" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/en.json b/homeassistant/components/openuv/translations/en.json new file mode 100644 index 00000000000..c493a15b05a --- /dev/null +++ b/homeassistant/components/openuv/translations/en.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordinates already registered", + "invalid_api_key": "Invalid API key" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API Key", + "elevation": "Elevation", + "latitude": "Latitude", + "longitude": "Longitude" + }, + "title": "Fill in your information" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/es-419.json b/homeassistant/components/openuv/translations/es-419.json new file mode 100644 index 00000000000..158bb08b25d --- /dev/null +++ b/homeassistant/components/openuv/translations/es-419.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordenadas ya registradas", + "invalid_api_key": "Clave de API inv\u00e1lida" + }, + "step": { + "user": { + "data": { + "api_key": "Clave API de OpenUV", + "elevation": "Elevaci\u00f3n", + "latitude": "Latitud", + "longitude": "Longitud" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/es.json b/homeassistant/components/openuv/translations/es.json new file mode 100644 index 00000000000..3c87781d2c5 --- /dev/null +++ b/homeassistant/components/openuv/translations/es.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordenadas ya registradas", + "invalid_api_key": "Clave API inv\u00e1lida" + }, + "step": { + "user": { + "data": { + "api_key": "Clave API de OpenUV", + "elevation": "Elevaci\u00f3n", + "latitude": "Latitud", + "longitude": "Longitud" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/fa.json b/homeassistant/components/openuv/translations/fa.json new file mode 100644 index 00000000000..968addd26bf --- /dev/null +++ b/homeassistant/components/openuv/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "OpenUV" +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/fr.json b/homeassistant/components/openuv/translations/fr.json new file mode 100644 index 00000000000..a22b01f9488 --- /dev/null +++ b/homeassistant/components/openuv/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordonn\u00e9es d\u00e9j\u00e0 enregistr\u00e9es", + "invalid_api_key": "Cl\u00e9 d'API invalide" + }, + "step": { + "user": { + "data": { + "api_key": "Cl\u00e9 d'API OpenUV", + "elevation": "Altitude", + "latitude": "Latitude", + "longitude": "Longitude" + }, + "title": "Veuillez saisir vos informations" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/he.json b/homeassistant/components/openuv/translations/he.json new file mode 100644 index 00000000000..6c253be7855 --- /dev/null +++ b/homeassistant/components/openuv/translations/he.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "\u05d4\u05e7\u05d5\u05d0\u05d5\u05e8\u05d3\u05d9\u05e0\u05d8\u05d5\u05ea \u05db\u05d1\u05e8 \u05e8\u05e9\u05d5\u05de\u05d5\u05ea", + "invalid_api_key": "\u05de\u05e4\u05ea\u05d7 API \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9" + }, + "step": { + "user": { + "data": { + "api_key": "\u05de\u05e4\u05ea\u05d7 API \u05e9\u05dc OpenUV", + "elevation": "\u05d2\u05d5\u05d1\u05d4 \u05de\u05e2\u05dc \u05e4\u05e0\u05d9 \u05d4\u05d9\u05dd", + "latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1", + "longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da" + }, + "title": "\u05de\u05dc\u05d0 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d8\u05d9\u05dd \u05e9\u05dc\u05da" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/hr.json b/homeassistant/components/openuv/translations/hr.json similarity index 100% rename from homeassistant/components/openuv/.translations/hr.json rename to homeassistant/components/openuv/translations/hr.json diff --git a/homeassistant/components/openuv/translations/hu.json b/homeassistant/components/openuv/translations/hu.json new file mode 100644 index 00000000000..6d7e4e99e26 --- /dev/null +++ b/homeassistant/components/openuv/translations/hu.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "A koordin\u00e1t\u00e1k m\u00e1r regisztr\u00e1lva vannak", + "invalid_api_key": "\u00c9rv\u00e9nytelen API kulcs" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API kulcs", + "elevation": "Magass\u00e1g", + "latitude": "Sz\u00e9less\u00e9g", + "longitude": "Hossz\u00fas\u00e1g" + }, + "title": "T\u00f6ltsd ki az adataid" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/id.json b/homeassistant/components/openuv/translations/id.json new file mode 100644 index 00000000000..bb396d8329a --- /dev/null +++ b/homeassistant/components/openuv/translations/id.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinat sudah terdaftar", + "invalid_api_key": "Kunci API tidak valid" + }, + "step": { + "user": { + "data": { + "api_key": "Kunci API OpenUV", + "elevation": "Ketinggian", + "latitude": "Lintang", + "longitude": "Garis bujur" + }, + "title": "Isi informasi Anda" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/it.json b/homeassistant/components/openuv/translations/it.json new file mode 100644 index 00000000000..89d80216fd5 --- /dev/null +++ b/homeassistant/components/openuv/translations/it.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordinate gi\u00e0 registrate", + "invalid_api_key": "Chiave API non valida" + }, + "step": { + "user": { + "data": { + "api_key": "API Key di OpenUV", + "elevation": "Altitudine", + "latitude": "Latitudine", + "longitude": "Longitudine" + }, + "title": "Inserisci i tuoi dati" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/ko.json b/homeassistant/components/openuv/translations/ko.json new file mode 100644 index 00000000000..77f87a19e0c --- /dev/null +++ b/homeassistant/components/openuv/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "\uc88c\ud45c\uac12\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_api_key": "\uc798\ubabb\ub41c API \ud0a4" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API \ud0a4", + "elevation": "\uace0\ub3c4", + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4" + }, + "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/lb.json b/homeassistant/components/openuv/translations/lb.json new file mode 100644 index 00000000000..ebb09f2ded6 --- /dev/null +++ b/homeassistant/components/openuv/translations/lb.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinate si scho\u00a0registr\u00e9iert", + "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API Schl\u00ebssel", + "elevation": "H\u00e9icht", + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad" + }, + "title": "F\u00ebllt \u00e4r Informatiounen aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/nl.json b/homeassistant/components/openuv/translations/nl.json new file mode 100644 index 00000000000..c4f7834ff89 --- /dev/null +++ b/homeassistant/components/openuv/translations/nl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Co\u00f6rdinaten al geregistreerd", + "invalid_api_key": "Ongeldige API-sleutel" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API-Sleutel", + "elevation": "Hoogte", + "latitude": "Breedtegraad", + "longitude": "Lengtegraad" + }, + "title": "Vul uw gegevens in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/nn.json b/homeassistant/components/openuv/translations/nn.json new file mode 100644 index 00000000000..284285af65c --- /dev/null +++ b/homeassistant/components/openuv/translations/nn.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinata er allereie registrerte", + "invalid_api_key": "Ugyldig API-n\u00f8kkel" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API-n\u00f8kkel", + "elevation": "H\u00f8gde", + "latitude": "Breiddegrad", + "longitude": "Lengdegrad" + }, + "title": "Fyll ut informasjonen din" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/no.json b/homeassistant/components/openuv/translations/no.json new file mode 100644 index 00000000000..4152b732a7b --- /dev/null +++ b/homeassistant/components/openuv/translations/no.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinatene er allerede registrert", + "invalid_api_key": "Ugyldig API-n\u00f8kkel" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API-n\u00f8kkel", + "elevation": "Elevasjon", + "latitude": "Breddegrad", + "longitude": "Lengdegrad" + }, + "title": "Fyll ut informasjonen din" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/pl.json b/homeassistant/components/openuv/translations/pl.json new file mode 100644 index 00000000000..7e8691ebf26 --- /dev/null +++ b/homeassistant/components/openuv/translations/pl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Wsp\u00f3\u0142rz\u0119dne s\u0105 ju\u017c zarejestrowane.", + "invalid_api_key": "Nieprawid\u0142owy klucz API" + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API OpenUV", + "elevation": "Wysoko\u015b\u0107", + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna" + }, + "title": "Wprowad\u017a dane" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/pt-BR.json b/homeassistant/components/openuv/translations/pt-BR.json new file mode 100644 index 00000000000..b3e40ae29bd --- /dev/null +++ b/homeassistant/components/openuv/translations/pt-BR.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordenadas j\u00e1 cadastradas", + "invalid_api_key": "Chave de API inv\u00e1lida" + }, + "step": { + "user": { + "data": { + "api_key": "Chave de API do OpenUV", + "elevation": "Eleva\u00e7\u00e3o", + "latitude": "Latitude", + "longitude": "Longitude" + }, + "title": "Preencha suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/pt.json b/homeassistant/components/openuv/translations/pt.json new file mode 100644 index 00000000000..92ecaad74c1 --- /dev/null +++ b/homeassistant/components/openuv/translations/pt.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordenadas j\u00e1 registadas", + "invalid_api_key": "Chave de API inv\u00e1lida" + }, + "step": { + "user": { + "data": { + "api_key": "Chave de API do OpenUV", + "elevation": "Eleva\u00e7\u00e3o", + "latitude": "Latitude", + "longitude": "Longitude" + }, + "title": "Preencha com as suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/ro.json b/homeassistant/components/openuv/translations/ro.json new file mode 100644 index 00000000000..9e6e01c427a --- /dev/null +++ b/homeassistant/components/openuv/translations/ro.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Coordonatele deja \u00eenregistrate", + "invalid_api_key": "Cheie API invalid\u0103" + }, + "step": { + "user": { + "data": { + "api_key": "Cheie API OpenUV", + "elevation": "Altitudine", + "latitude": "Latitudine", + "longitude": "Longitudine" + }, + "title": "Completa\u021bi informa\u021biile dvs." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/ru.json b/homeassistant/components/openuv/translations/ru.json new file mode 100644 index 00000000000..5b4ce86e963 --- /dev/null +++ b/homeassistant/components/openuv/translations/ru.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "\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.", + "invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API." + }, + "step": { + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API", + "elevation": "\u0412\u044b\u0441\u043e\u0442\u0430", + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430" + }, + "title": "OpenUV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/sl.json b/homeassistant/components/openuv/translations/sl.json new file mode 100644 index 00000000000..f95723b6d43 --- /dev/null +++ b/homeassistant/components/openuv/translations/sl.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinate \u017ee registrirane", + "invalid_api_key": "Neveljaven API klju\u010d" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API Klju\u010d", + "elevation": "Nadmorska vi\u0161ina", + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina" + }, + "title": "Izpolnite svoje podatke" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/sv.json b/homeassistant/components/openuv/translations/sv.json new file mode 100644 index 00000000000..7c7f26b4328 --- /dev/null +++ b/homeassistant/components/openuv/translations/sv.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "Koordinater \u00e4r redan registrerade", + "invalid_api_key": "Ogiltigt API-l\u00f6senord" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API-nyckel", + "elevation": "H\u00f6jd", + "latitude": "Latitud", + "longitude": "Longitud" + }, + "title": "Fyll i dina uppgifter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/.translations/uk.json b/homeassistant/components/openuv/translations/uk.json similarity index 100% rename from homeassistant/components/openuv/.translations/uk.json rename to homeassistant/components/openuv/translations/uk.json diff --git a/homeassistant/components/openuv/translations/zh-Hans.json b/homeassistant/components/openuv/translations/zh-Hans.json new file mode 100644 index 00000000000..d960e2d93b4 --- /dev/null +++ b/homeassistant/components/openuv/translations/zh-Hans.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "\u5750\u6807\u5df2\u7ecf\u6ce8\u518c", + "invalid_api_key": "\u65e0\u6548\u7684 API \u5bc6\u94a5" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API \u5bc6\u94a5", + "elevation": "\u6d77\u62d4", + "latitude": "\u7eac\u5ea6", + "longitude": "\u7ecf\u5ea6" + }, + "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openuv/translations/zh-Hant.json b/homeassistant/components/openuv/translations/zh-Hant.json new file mode 100644 index 00000000000..faba0c7f6e5 --- /dev/null +++ b/homeassistant/components/openuv/translations/zh-Hant.json @@ -0,0 +1,19 @@ +{ + "config": { + "error": { + "identifier_exists": "\u8a72\u5ea7\u6a19\u5df2\u8a3b\u518a", + "invalid_api_key": "API \u5bc6\u78bc\u7121\u6548" + }, + "step": { + "user": { + "data": { + "api_key": "OpenUV API \u5bc6\u9470", + "elevation": "\u6d77\u62d4", + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6" + }, + "title": "\u586b\u5beb\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/openweathermap/manifest.json b/homeassistant/components/openweathermap/manifest.json index 4424b53cf0d..eafbfbe243c 100644 --- a/homeassistant/components/openweathermap/manifest.json +++ b/homeassistant/components/openweathermap/manifest.json @@ -3,6 +3,5 @@ "name": "Openweathermap", "documentation": "https://www.home-assistant.io/integrations/openweathermap", "requirements": ["pyowm==2.10.0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/openweathermap/sensor.py b/homeassistant/components/openweathermap/sensor.py index ac85eff6794..b730923f0bd 100644 --- a/homeassistant/components/openweathermap/sensor.py +++ b/homeassistant/components/openweathermap/sensor.py @@ -12,6 +12,7 @@ from homeassistant.const import ( CONF_API_KEY, CONF_MONITORED_CONDITIONS, CONF_NAME, + DEGREE, SPEED_METERS_PER_SECOND, TEMP_CELSIUS, TEMP_FAHRENHEIT, @@ -36,7 +37,7 @@ SENSOR_TYPES = { "weather": ["Condition", None], "temperature": ["Temperature", None], "wind_speed": ["Wind speed", SPEED_METERS_PER_SECOND], - "wind_bearing": ["Wind bearing", "°"], + "wind_bearing": ["Wind bearing", DEGREE], "humidity": ["Humidity", UNIT_PERCENTAGE], "pressure": ["Pressure", "mbar"], "clouds": ["Cloud coverage", UNIT_PERCENTAGE], diff --git a/homeassistant/components/opnsense/manifest.json b/homeassistant/components/opnsense/manifest.json index 85831680102..129ca0108a5 100644 --- a/homeassistant/components/opnsense/manifest.json +++ b/homeassistant/components/opnsense/manifest.json @@ -2,9 +2,6 @@ "domain": "opnsense", "name": "OPNSense", "documentation": "https://www.home-assistant.io/integrations/opnsense", - "requirements": [ - "pyopnsense==0.2.0" - ], - "dependencies": [], + "requirements": ["pyopnsense==0.2.0"], "codeowners": ["@mtreinish"] } diff --git a/homeassistant/components/opple/manifest.json b/homeassistant/components/opple/manifest.json index 331db0eeaef..bb6596c47ef 100644 --- a/homeassistant/components/opple/manifest.json +++ b/homeassistant/components/opple/manifest.json @@ -3,6 +3,5 @@ "name": "Opple", "documentation": "https://www.home-assistant.io/integrations/opple", "requirements": ["pyoppleio==1.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/orangepi_gpio/manifest.json b/homeassistant/components/orangepi_gpio/manifest.json index 19f805f1132..904ff29cb1d 100644 --- a/homeassistant/components/orangepi_gpio/manifest.json +++ b/homeassistant/components/orangepi_gpio/manifest.json @@ -1,8 +1,7 @@ { "domain": "orangepi_gpio", - "name": "Orangepi GPIO", + "name": "Orange Pi GPIO", "documentation": "https://www.home-assistant.io/integrations/orangepi_gpio", "requirements": ["OPi.GPIO==0.4.0"], - "dependencies": [], "codeowners": ["@pascallj"] } diff --git a/homeassistant/components/oru/manifest.json b/homeassistant/components/oru/manifest.json index 6d93d0407c4..1be40a72d1c 100644 --- a/homeassistant/components/oru/manifest.json +++ b/homeassistant/components/oru/manifest.json @@ -2,7 +2,6 @@ "domain": "oru", "name": "Orange and Rockland Utility (ORU)", "documentation": "https://www.home-assistant.io/integrations/oru", - "dependencies": [], "codeowners": ["@bvlaicu"], "requirements": ["oru==0.1.11"] } diff --git a/homeassistant/components/orvibo/manifest.json b/homeassistant/components/orvibo/manifest.json index 0c4a9f2d820..83b5d644898 100644 --- a/homeassistant/components/orvibo/manifest.json +++ b/homeassistant/components/orvibo/manifest.json @@ -3,6 +3,5 @@ "name": "Orvibo", "documentation": "https://www.home-assistant.io/integrations/orvibo", "requirements": ["orvibo==1.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/osramlightify/light.py b/homeassistant/components/osramlightify/light.py index 05064861844..ed79604a3f8 100644 --- a/homeassistant/components/osramlightify/light.py +++ b/homeassistant/components/osramlightify/light.py @@ -1,7 +1,6 @@ """Support for Osram Lightify.""" import logging import random -import socket from lightify import Lightify import voluptuous as vol @@ -74,9 +73,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): host = config[CONF_HOST] try: bridge = Lightify(host, log_level=logging.NOTSET) - except socket.error as err: - msg = "Error connecting to bridge: {} due to: {}".format(host, str(err)) - _LOGGER.exception(msg) + except OSError as err: + _LOGGER.exception("Error connecting to bridge: %s due to: %s", host, err) return setup_bridge(bridge, add_entities, config) @@ -381,9 +379,7 @@ class OsramLightifyLight(Luminary): """Update static attributes of the luminary.""" super().update_static_attributes() attrs = { - "device_type": "{} ({})".format( - self._luminary.type_id(), self._luminary.devicename() - ), + "device_type": f"{self._luminary.type_id()} ({self._luminary.devicename()})", "firmware_version": self._luminary.version(), } if self._luminary.devicetype().name == "SENSOR": @@ -404,7 +400,7 @@ class OsramLightifyGroup(Luminary): # It should be something like "-" # For now keeping it as is for backward compatibility with existing # users. - return "{}".format(self._luminary.lights()) + return f"{self._luminary.lights()}" def _get_supported_features(self): """Get list of supported features.""" diff --git a/homeassistant/components/osramlightify/manifest.json b/homeassistant/components/osramlightify/manifest.json index 87a81e74bbb..dfe71d4b9e1 100644 --- a/homeassistant/components/osramlightify/manifest.json +++ b/homeassistant/components/osramlightify/manifest.json @@ -3,6 +3,5 @@ "name": "Osramlightify", "documentation": "https://www.home-assistant.io/integrations/osramlightify", "requirements": ["lightify==1.0.7.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/otp/manifest.json b/homeassistant/components/otp/manifest.json index 2230ea8a478..cfd84eb2069 100644 --- a/homeassistant/components/otp/manifest.json +++ b/homeassistant/components/otp/manifest.json @@ -3,7 +3,6 @@ "name": "One-Time Password (OTP)", "documentation": "https://www.home-assistant.io/integrations/otp", "requirements": ["pyotp==2.3.0"], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/otp/sensor.py b/homeassistant/components/otp/sensor.py index 3c4cd464d44..df5f6af1695 100644 --- a/homeassistant/components/otp/sensor.py +++ b/homeassistant/components/otp/sensor.py @@ -54,7 +54,7 @@ class TOTPSensor(Entity): @callback def _call_loop(self): self._state = self._otp.now() - self.async_schedule_update_ha_state() + self.async_write_ha_state() # Update must occur at even TIME_STEP, e.g. 12:00:00, 12:00:30, # 12:01:00, etc. in order to have synced time (see RFC6238) diff --git a/homeassistant/components/owntracks/.translations/bg.json b/homeassistant/components/owntracks/.translations/bg.json deleted file mode 100644 index 1989e1a0703..00000000000 --- a/homeassistant/components/owntracks/.translations/bg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\n\n \u0412 Android \u043e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 [\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e OwnTracks]({android_url}), \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u043a\u044a\u043c Preferences - > Connection. \u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \n - Mode: Private HTTP\n - Host: {webhook_url} \n - Identification: \n - Username: ` ` \n - Device ID: ` ` \n\n \u0412 iOS \u043e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 [\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e OwnTracks]({ios_url}), \u0434\u043e\u043a\u043e\u0441\u043d\u0435\u0442\u0435 (i) \u0438\u043a\u043e\u043d\u0430\u0442\u0430 \u0432 \u0433\u043e\u0440\u043d\u0438\u044f \u043b\u044f\u0432 \u044a\u0433\u044a\u043b - > Settings. \u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \n - Mode: HTTP \n - URL: {webhook_url} \n - Turn on authentication \n - UserID: ` ` \n\n {secret} \n \n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 OwnTracks?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/ca.json b/homeassistant/components/owntracks/.translations/ca.json deleted file mode 100644 index c733f0f12cc..00000000000 --- a/homeassistant/components/owntracks/.translations/ca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "\n\nPer Android: obre [l'app d'OwnTracks]({android_url}), ves a prefer\u00e8ncies -> connexi\u00f3, i posa els par\u00e0metres seguents:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nPer iOS: obre [l'app d'OwnTracks]({ios_url}), clica l'icona (i) a dalt a l'esquerra -> configuraci\u00f3 (settings), i posa els par\u00e0metres seg\u00fcents:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nConsulta [la documentaci\u00f3]({docs_url}) per a m\u00e9s informaci\u00f3." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar l'OwnTracks?", - "title": "Configuraci\u00f3 d'OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/cs.json b/homeassistant/components/owntracks/.translations/cs.json deleted file mode 100644 index 25738b7618e..00000000000 --- a/homeassistant/components/owntracks/.translations/cs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "\n\n V syst\u00e9mu Android otev\u0159ete aplikaci [OwnTracks]({android_url}) a p\u0159ejd\u011bte na p\u0159edvolby - > p\u0159ipojen\u00ed. Zm\u011b\u0148te n\u00e1sleduj\u00edc\u00ed nastaven\u00ed: \n - Re\u017eim: Private HTTP \n - Hostitel: {webhook_url} \n - Identifikace: \n - U\u017eivatelsk\u00e9 jm\u00e9no: ` ' \n - ID za\u0159\u00edzen\u00ed: ` ' \n\n V aplikaci iOS otev\u0159ete [aplikaci OwnTracks]({ios_url}), klepn\u011bte na ikonu (i) vlevo naho\u0159e - > nastaven\u00ed. Zm\u011b\u0148te n\u00e1sleduj\u00edc\u00ed nastaven\u00ed: \n - Re\u017eim: HTTP \n - URL: {webhook_url} \n - Zapn\u011bte ov\u011b\u0159ov\u00e1n\u00ed \n - ID u\u017eivatele: ` ' \n\n {secret} \n \n V\u00edce informac\u00ed naleznete v [dokumentaci]({docs_url})." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit slu\u017ebu OwnTracks?", - "title": "Nastavit OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/da.json b/homeassistant/components/owntracks/.translations/da.json deleted file mode 100644 index 110f60193e6..00000000000 --- a/homeassistant/components/owntracks/.translations/da.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" - }, - "create_entry": { - "default": "\n\nP\u00e5 Android skal du \u00e5bne [OwnTracks-appen]({android_url}), g\u00e5 til indstillinger -> forbindelse. Skift f\u00f8lgende indstillinger: \n - Tilstand: Privat HTTP\n - V\u00e6rt: {webhook_url}\n - Identifikation:\n - Brugernavn: ` ` \n - Enheds-id: ` ` \n\nP\u00e5 iOS skal du \u00e5bne [OwnTracks-appen]({ios_url}), tryk p\u00e5 (i) ikonet \u00f8verst til venstre -> indstillinger. Skift f\u00f8lgende indstillinger: \n - Tilstand: HTTP\n - URL: {webhook_url}\n - Aktiver godkendelse \n - Bruger ID: ` ` \n\n {secret}\n \n Se [dokumentationen]({docs_url}) for at f\u00e5 flere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere OwnTracks?", - "title": "Konfigurer OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/de.json b/homeassistant/components/owntracks/.translations/de.json deleted file mode 100644 index ba7721ac0a4..00000000000 --- a/homeassistant/components/owntracks/.translations/de.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "\n\n\u00d6ffnen unter Android [die OwnTracks-App]({android_url}) und gehe zu {android_url} - > Verbindung. \u00c4nder die folgenden Einstellungen: \n - Modus: Privates HTTP \n - Host: {webhook_url} \n - Identifizierung: \n - Benutzername: ` ` \n - Ger\u00e4te-ID: ` ` \n\n\u00d6ffnen unter iOS [die OwnTracks-App]({ios_url}) und tippe auf das Symbol (i) oben links - > Einstellungen. \u00c4nder die folgenden Einstellungen: \n - Modus: HTTP \n - URL: {webhook_url} \n - Aktivieren Sie die Authentifizierung \n - UserID: ` ` \n\n {secret} \n \n Weitere Informationen findest du in der [Dokumentation]({docs_url})." - }, - "step": { - "user": { - "description": "M\u00f6chtest du OwnTracks wirklich einrichten?", - "title": "OwnTracks einrichten" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/en.json b/homeassistant/components/owntracks/.translations/en.json deleted file mode 100644 index a34077a0a83..00000000000 --- a/homeassistant/components/owntracks/.translations/en.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "\n\nOn Android, open [the OwnTracks app]({android_url}), go to preferences -> connection. Change the following settings:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nOn iOS, open [the OwnTracks app]({ios_url}), tap (i) icon in top left -> settings. Change the following settings:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nSee [the documentation]({docs_url}) for more information." - }, - "step": { - "user": { - "description": "Are you sure you want to set up OwnTracks?", - "title": "Set up OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/es-419.json b/homeassistant/components/owntracks/.translations/es-419.json deleted file mode 100644 index f56cff977d0..00000000000 --- a/homeassistant/components/owntracks/.translations/es-419.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "\n\n En Android, abra [la aplicaci\u00f3n OwnTracks] ( {android_url} ), vaya a preferencias - > conexi\u00f3n. Cambia las siguientes configuraciones: \n - Modo: HTTP privado \n - Anfitri\u00f3n: {webhook_url} \n - Identificaci\u00f3n: \n - Nombre de usuario: ` ` \n - ID del dispositivo: ` ` \n\n En iOS, abra [la aplicaci\u00f3n OwnTracks] ( {ios_url} ), toque el icono (i) en la parte superior izquierda - > configuraci\u00f3n. Cambia las siguientes configuraciones: \n - Modo: HTTP \n - URL: {webhook_url} \n - Activar autenticaci\u00f3n \n - ID de usuario: ` ` \n\n {secret} \n \n Consulte [la documentaci\u00f3n] ( {docs_url} ) para obtener m\u00e1s informaci\u00f3n." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar OwnTracks?", - "title": "Configurar OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/es.json b/homeassistant/components/owntracks/.translations/es.json deleted file mode 100644 index f5398c1c399..00000000000 --- a/homeassistant/components/owntracks/.translations/es.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Solo se necesita una instancia." - }, - "create_entry": { - "default": "\n\nEn Android, abre [la aplicaci\u00f3n OwnTracks]({android_url}), ve a preferencias -> conexi\u00f3n. Cambia los siguientes ajustes:\n - Modo: HTTP privado\n - Host: {webhook_url}\n - Identificaci\u00f3n:\n - Nombre de usuario: \n - ID de dispositivo: \n\nEn iOS, abre [la aplicaci\u00f3n OwnTracks] ({ios_url}), pulsa el icono (i) en la parte superior izquierda -> configuraci\u00f3n. Cambia los siguientes ajustes:\n - Modo: HTTP\n - URL: {webhook_url}\n - Activar la autenticaci\u00f3n\n - UserID: \n\n{secret}\n\nConsulta [la documentaci\u00f3n]({docs_url}) para obtener m\u00e1s informaci\u00f3n." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar OwnTracks?", - "title": "Configurar OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/fr.json b/homeassistant/components/owntracks/.translations/fr.json deleted file mode 100644 index 5975c34e78d..00000000000 --- a/homeassistant/components/owntracks/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "\n\n Sous Android, ouvrez [l'application OwnTracks] ( {android_url} ), acc\u00e9dez \u00e0 Pr\u00e9f\u00e9rences - > Connexion. Modifiez les param\u00e8tres suivants: \n - Mode: HTTP priv\u00e9 \n - H\u00f4te: {webhook_url} \n - Identification: \n - Nom d'utilisateur: ` ` \n - ID de p\u00e9riph\u00e9rique: ` ` \n\n Sur iOS, ouvrez [l'application OwnTracks] ( {ios_url} ), appuyez sur l'ic\u00f4ne (i) en haut \u00e0 gauche - > param\u00e8tres. Modifiez les param\u00e8tres suivants: \n - Mode: HTTP \n - URL: {webhook_url} \n - Activer l'authentification \n - ID utilisateur: ` ` \n\n {secret} \n \n Voir [la documentation] ( {docs_url} ) pour plus d'informations." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer OwnTracks?", - "title": "Configurer OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/hu.json b/homeassistant/components/owntracks/.translations/hu.json deleted file mode 100644 index a82843bef53..00000000000 --- a/homeassistant/components/owntracks/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "create_entry": { - "default": "\n\nAndroidon, nyisd meg [az OwnTracks appot]({android_url}), menj a preferences -> connectionre. V\u00e1ltoztasd meg a al\u00e1bbi be\u00e1ll\u00edt\u00e1sokat:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\niOS-en, nyisd meg [az OwnTracks appot]({ios_url}), kattints az (i) ikonra bal oldalon fel\u00fcl -> settings. V\u00e1ltoztasd meg az al\u00e1bbi be\u00e1ll\u00edt\u00e1sokat:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nN\u00e9zd meg [a dokument\u00e1ci\u00f3t]({docs_url}) tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani az Owntracks-t?", - "title": "Owntracks be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/it.json b/homeassistant/components/owntracks/.translations/it.json deleted file mode 100644 index 03b0c84744f..00000000000 --- a/homeassistant/components/owntracks/.translations/it.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "\n\nSu Android, apri l'[app OwnTracks]({android_url}), vai su preferenze -> connessione. Modifica le seguenti impostazioni: \n - Modalit\u00e0: HTTP privato \n - Host: {webhook_url} \n - Identificazione: \n - Nome utente: `` \n - ID dispositivo: ``\n\nSu iOS, apri l'[app OwnTracks]({ios_url}), tocca l'icona (i) in alto a sinistra -> impostazioni. Modifica le seguenti impostazioni: \n - Modalit\u00e0: HTTP \n - URL: {webhook_url} \n - Attiva autenticazione \n - UserID: `` \n\n {secret} \n \n Vedi [la documentazione]({docs_url}) per maggiori informazioni." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare OwnTracks?", - "title": "Configura OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/ko.json b/homeassistant/components/owntracks/.translations/ko.json deleted file mode 100644 index ee1507d9e0a..00000000000 --- a/homeassistant/components/owntracks/.translations/ko.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "\n\nAndroid \uc778 \uacbd\uc6b0, [OwnTracks \uc571]({android_url}) \uc744 \uc5f4\uace0 preferences -> connection \uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc774 \uc124\uc815\ud574\uc8fc\uc138\uc694:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\niOS \uc778 \uacbd\uc6b0, [OwnTracks \uc571]({ios_url}) \uc744 \uc5f4\uace0 \uc67c\ucabd \uc0c1\ub2e8\uc758 (i) \uc544\uc774\ucf58\uc744 \ud0ed\ud558\uc5ec \uc124\uc815\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc774 \uc124\uc815\ud574\uc8fc\uc138\uc694:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret} \n \n\uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "OwnTracks \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "OwnTracks \uc124\uc815" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/lb.json b/homeassistant/components/owntracks/.translations/lb.json deleted file mode 100644 index 146fda64b1e..00000000000 --- a/homeassistant/components/owntracks/.translations/lb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "\n\nOp Android, an [der OwnTracks App]({android_url}), g\u00e9i an Preferences -> Connection. \u00c4nnert folgend Astellungen:\n- Mode: Private HTTP\n- Host {webhool_url}\n- Identification:\n - Username: ``\n - Device ID: ``\n\nOp IOS, an [der OwnTracks App]({ios_url}), klick op (i) Ikon uewen l\u00e9nks -> Settings. \u00c4nnert folgend Astellungen:\n- Mode: HTTP\n- URL: {webhool_url}\n- Turn on authentication:\n- UserID: ``\n\n{secret}\n\nKuckt w.e.g. [Dokumentatioun]({docs_url}) fir m\u00e9i Informatiounen." - }, - "step": { - "user": { - "description": "S\u00e9cher fir OwnTracks anzeriichten?", - "title": "OwnTracks ariichten" - } - }, - "title": "Owntracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/nl.json b/homeassistant/components/owntracks/.translations/nl.json deleted file mode 100644 index 21ee65a775a..00000000000 --- a/homeassistant/components/owntracks/.translations/nl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "\n\nOp Android, open [the OwnTracks app]({android_url}), ga naar 'preferences' -> 'connection'. Verander de volgende instellingen:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nOp iOS, open [the OwnTracks app]({ios_url}), tik op het (i) icoon links boven -> 'settings'. Verander de volgende instellingen:\n - Mode: HTTP\n - URL: {webhook_url}\n - zet 'authentication' aan\n - UserID: ``\n\n{secret}\n\nZie [the documentation]({docs_url}) voor meer informatie." - }, - "step": { - "user": { - "description": "Weet je zeker dat je OwnTracks wilt instellen?", - "title": "Stel OwnTracks in" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/nn.json b/homeassistant/components/owntracks/.translations/nn.json deleted file mode 100644 index cdfd651beec..00000000000 --- a/homeassistant/components/owntracks/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/no.json b/homeassistant/components/owntracks/.translations/no.json deleted file mode 100644 index aba620541ec..00000000000 --- a/homeassistant/components/owntracks/.translations/no.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "\n\nP\u00e5 Android, \u00e5pne [OwnTracks appen]({android_url}), g\u00e5 til Instillinger -> tilkobling. Endre f\u00f8lgende innstillinger: \n - Modus: Privat HTTP\n - Vert: {webhook_url} \n - Identifikasjon: \n - Brukernavn: ` ` \n - Enhets-ID: ` ` \n\nP\u00e5 iOS, \u00e5pne [OwnTracks appen]({ios_url}), trykk p\u00e5 (i) ikonet \u00f8verst til venstre - > innstillinger. Endre f\u00f8lgende innstillinger: \n - Modus: HTTP \n - URL: {webhook_url} \n - Sl\u00e5 p\u00e5 autentisering \n - BrukerID: ` ` \n\n {secret} \n \n Se [dokumentasjonen]({docs_url}) for mer informasjon." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil sette opp OwnTracks?", - "title": "Sett opp OwnTracks" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/pl.json b/homeassistant/components/owntracks/.translations/pl.json deleted file mode 100644 index 91afa020fc0..00000000000 --- a/homeassistant/components/owntracks/.translations/pl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 OwnTracks?", - "title": "Konfiguracja OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/pt-BR.json b/homeassistant/components/owntracks/.translations/pt-BR.json deleted file mode 100644 index 3851b1cc441..00000000000 --- a/homeassistant/components/owntracks/.translations/pt-BR.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "\n\n No Android, abra [o aplicativo OwnTracks] ( {android_url} ), v\u00e1 para prefer\u00eancias - > conex\u00e3o. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP privado \n - Anfitri\u00e3o: {webhook_url} \n - Identifica\u00e7\u00e3o: \n - Nome de usu\u00e1rio: ` \n - ID do dispositivo: ` ` \n\n No iOS, abra o aplicativo OwnTracks ( {ios_url} ), toque no \u00edcone (i) no canto superior esquerdo - > configura\u00e7\u00f5es. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP \n - URL: {webhook_url} \n - Ativar a autentica\u00e7\u00e3o \n - UserID: ` ` \n\n {secret} \n \n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais informa\u00e7\u00f5es." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o OwnTracks?", - "title": "Configurar OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/pt.json b/homeassistant/components/owntracks/.translations/pt.json deleted file mode 100644 index 91df7f5a8ea..00000000000 --- a/homeassistant/components/owntracks/.translations/pt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "\n\n No Android, abra [o aplicativo OwnTracks] ( {android_url} ), v\u00e1 para prefer\u00eancias - > conex\u00e3o. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP privado \n - Anfitri\u00e3o: {webhook_url} \n - Identifica\u00e7\u00e3o: \n - Nome de usu\u00e1rio: ` \n - ID do dispositivo: ` ` \n\n No iOS, abra [o aplicativo OwnTracks] ( {ios_url} ), toque no \u00edcone (i) no canto superior esquerdo - > configura\u00e7\u00f5es. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP \n - URL: {webhook_url} \n - Ativar autentica\u00e7\u00e3o \n - UserID: ` ` \n\n {secret} \n \n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais informa\u00e7\u00f5es." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o OwnTracks?", - "title": "Configurar OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/ru.json b/homeassistant/components/owntracks/.translations/ru.json deleted file mode 100644 index 0e9479c1ed4..00000000000 --- a/homeassistant/components/owntracks/.translations/ru.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0415\u0441\u043b\u0438 \u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Android, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 [OwnTracks]({android_url}), \u0437\u0430\u0442\u0435\u043c preferences -> connection. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u043a, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\n\u0415\u0441\u043b\u0438 \u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 iOS, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 [OwnTracks]({ios_url}), \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a (i) \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 -> settings. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u043a, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c OwnTracks?", - "title": "OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/sl.json b/homeassistant/components/owntracks/.translations/sl.json deleted file mode 100644 index e7ae5593637..00000000000 --- a/homeassistant/components/owntracks/.translations/sl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "\n\n V Androidu odprite aplikacijo OwnTracks ( {android_url} ) in pojdite na {android_url} nastavitve - > povezave. Spremenite naslednje nastavitve: \n - Na\u010din: zasebni HTTP \n - gostitelj: {webhook_url} \n - Identifikacija: \n - Uporabni\u0161ko ime: ` ` \n - ID naprave: ` ` \n\n V iOS-ju odprite aplikacijo OwnTracks ( {ios_url} ), tapnite ikono (i) v zgornjem levem kotu - > nastavitve. Spremenite naslednje nastavitve: \n - na\u010din: HTTP \n - URL: {webhook_url} \n - Vklopite preverjanje pristnosti \n - UserID: ` ` \n\n {secret} \n \n Za ve\u010d informacij si oglejte [dokumentacijo] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Owntracks?", - "title": "Nastavite OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/sv.json b/homeassistant/components/owntracks/.translations/sv.json deleted file mode 100644 index 2077cceeb4d..00000000000 --- a/homeassistant/components/owntracks/.translations/sv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "\n\n P\u00e5 Android, \u00f6ppna [OwnTracks-appen]({android_url}), g\u00e5 till inst\u00e4llningar -> anslutning. \u00c4ndra f\u00f6ljande inst\u00e4llningar: \n - L\u00e4ge: Privat HTTP \n - V\u00e4rden: {webhook_url}\n - Identifiering: \n - Anv\u00e4ndarnamn: ``\n - Enhets-ID: `` \n\n P\u00e5 IOS, \u00f6ppna [OwnTracks-appen]({ios_url}), tryck p\u00e5 (i) ikonen i \u00f6vre v\u00e4nstra h\u00f6rnet -> inst\u00e4llningarna. \u00c4ndra f\u00f6ljande inst\u00e4llningar: \n - L\u00e4ge: HTTP \n - URL: {webhook_url}\n - Sl\u00e5 p\u00e5 autentisering \n - UserID: `` \n\n {secret} \n \n Se [dokumentationen]({docs_url}) f\u00f6r mer information." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera OwnTracks?", - "title": "Konfigurera OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/zh-Hans.json b/homeassistant/components/owntracks/.translations/zh-Hans.json deleted file mode 100644 index 64a6935a9b2..00000000000 --- a/homeassistant/components/owntracks/.translations/zh-Hans.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" - }, - "create_entry": { - "default": "\n\n\u5728 Android \u8bbe\u5907\u4e0a\uff0c\u6253\u5f00 [OwnTracks APP]({android_url})\uff0c\u524d\u5f80 Preferences -> Connection\u3002\u4fee\u6539\u4ee5\u4e0b\u8bbe\u5b9a\uff1a\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\n\u5728 iOS \u8bbe\u5907\u4e0a\uff0c\u6253\u5f00 [OwnTracks APP]({ios_url})\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u7684 (i) \u56fe\u6807-> Settings\u3002\u4fee\u6539\u4ee5\u4e0b\u8bbe\u5b9a\uff1a\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e OwnTracks \u5417\uff1f", - "title": "\u8bbe\u7f6e OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/zh-Hant.json b/homeassistant/components/owntracks/.translations/zh-Hant.json deleted file mode 100644 index 923f452450b..00000000000 --- a/homeassistant/components/owntracks/.translations/zh-Hant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "abort": { - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\n\n\u65bc Android \u8a2d\u5099\uff0c\u6253\u958b [OwnTracks app]({android_url})\u3001\u9ede\u9078\u8a2d\u5b9a\uff08preferences\uff09 -> \u9023\u7dda\uff08connection\uff09\u3002\u8b8a\u66f4\u4ee5\u4e0b\u8a2d\u5b9a\uff1a\n - \u6a21\u5f0f\uff08Mode\uff09\uff1aPrivate HTTP\n - \u4e3b\u6a5f\u7aef\uff08Host\uff09\uff1a{webhook_url}\n - Identification\uff1a\n - Username\uff1a ``\n - Device ID\uff1a``\n\n\u65bc iOS \u8a2d\u5099\uff0c\u6253\u958b [OwnTracks app]({ios_url})\u3001\u9ede\u9078\u5de6\u4e0a\u65b9\u7684 (i) \u5716\u793a -> \u8a2d\u5b9a\uff08settings\uff09\u3002\u8b8a\u66f4\u4ee5\u4e0b\u8a2d\u5b9a\uff1a\n - \u6a21\u5f0f\uff08Mode\uff09\uff1aHTTP\n - URL: {webhook_url}\n - \u958b\u555f authentication\n - UserID: ``\n\n{secret}\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a OwnTracks\uff1f", - "title": "\u8a2d\u5b9a OwnTracks" - } - }, - "title": "OwnTracks" - } -} \ No newline at end of file diff --git a/homeassistant/components/owntracks/messages.py b/homeassistant/components/owntracks/messages.py index 42f1f62d10a..4d5995c558b 100644 --- a/homeassistant/components/owntracks/messages.py +++ b/homeassistant/components/owntracks/messages.py @@ -199,7 +199,7 @@ async def async_handle_location_message(hass, context, message): async def _async_transition_message_enter(hass, context, message, location): """Execute enter event.""" - zone = hass.states.get("zone.{}".format(slugify(location))) + zone = hass.states.get(f"zone.{slugify(location)}") dev_id, kwargs = _parse_see_args(message, context.mqtt_topic) if zone is None and message.get("t") == "b": @@ -240,7 +240,7 @@ async def _async_transition_message_leave(hass, context, message, location): new_region = regions[-1] if regions else None if new_region: # Exit to previous region - zone = hass.states.get("zone.{}".format(slugify(new_region))) + zone = hass.states.get(f"zone.{slugify(new_region)}") _set_gps_from_zone(kwargs, new_region, zone) _LOGGER.info("Exit to %s", new_region) context.async_see(**kwargs) @@ -314,7 +314,7 @@ async def async_handle_waypoint(hass, name_base, waypoint): ) zone.hass = hass zone.entity_id = entity_id - await zone.async_update_ha_state() + zone.async_write_ha_state() @HANDLERS.register("waypoint") diff --git a/homeassistant/components/owntracks/strings.json b/homeassistant/components/owntracks/strings.json index fcf7305d714..b82761461ec 100644 --- a/homeassistant/components/owntracks/strings.json +++ b/homeassistant/components/owntracks/strings.json @@ -1,15 +1,12 @@ { "config": { - "title": "OwnTracks", "step": { "user": { "title": "Set up OwnTracks", "description": "Are you sure you want to set up OwnTracks?" } }, - "abort": { - "one_instance_allowed": "Only a single instance is necessary." - }, + "abort": { "one_instance_allowed": "Only a single instance is necessary." }, "create_entry": { "default": "\n\nOn Android, open [the OwnTracks app]({android_url}), go to preferences -> connection. Change the following settings:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nOn iOS, open [the OwnTracks app]({ios_url}), tap (i) icon in top left -> settings. Change the following settings:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nSee [the documentation]({docs_url}) for more information." } diff --git a/homeassistant/components/owntracks/translations/bg.json b/homeassistant/components/owntracks/translations/bg.json new file mode 100644 index 00000000000..5e86cd92b4b --- /dev/null +++ b/homeassistant/components/owntracks/translations/bg.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\n\n \u0412 Android \u043e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 [\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e OwnTracks]({android_url}), \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u043a\u044a\u043c Preferences - > Connection. \u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \n - Mode: Private HTTP\n - Host: {webhook_url} \n - Identification: \n - Username: ` ` \n - Device ID: ` ` \n\n \u0412 iOS \u043e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 [\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e OwnTracks]({ios_url}), \u0434\u043e\u043a\u043e\u0441\u043d\u0435\u0442\u0435 (i) \u0438\u043a\u043e\u043d\u0430\u0442\u0430 \u0432 \u0433\u043e\u0440\u043d\u0438\u044f \u043b\u044f\u0432 \u044a\u0433\u044a\u043b - > Settings. \u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: \n - Mode: HTTP \n - URL: {webhook_url} \n - Turn on authentication \n - UserID: ` ` \n\n {secret} \n \n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 OwnTracks?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/ca.json b/homeassistant/components/owntracks/translations/ca.json new file mode 100644 index 00000000000..4082c2a24ab --- /dev/null +++ b/homeassistant/components/owntracks/translations/ca.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "\n\nPer Android: obre [l'app d'OwnTracks]({android_url}), ves a prefer\u00e8ncies -> connexi\u00f3, i posa els par\u00e0metres seguents:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nPer iOS: obre [l'app d'OwnTracks]({ios_url}), clica l'icona (i) a dalt a l'esquerra -> configuraci\u00f3 (settings), i posa els par\u00e0metres seg\u00fcents:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nConsulta [la documentaci\u00f3]({docs_url}) per a m\u00e9s informaci\u00f3." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar l'OwnTracks?", + "title": "Configuraci\u00f3 d'OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/cs.json b/homeassistant/components/owntracks/translations/cs.json new file mode 100644 index 00000000000..451ab397ea5 --- /dev/null +++ b/homeassistant/components/owntracks/translations/cs.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "\n\n V syst\u00e9mu Android otev\u0159ete aplikaci [OwnTracks]({android_url}) a p\u0159ejd\u011bte na p\u0159edvolby - > p\u0159ipojen\u00ed. Zm\u011b\u0148te n\u00e1sleduj\u00edc\u00ed nastaven\u00ed: \n - Re\u017eim: Private HTTP \n - Hostitel: {webhook_url} \n - Identifikace: \n - U\u017eivatelsk\u00e9 jm\u00e9no: ` ' \n - ID za\u0159\u00edzen\u00ed: ` ' \n\n V aplikaci iOS otev\u0159ete [aplikaci OwnTracks]({ios_url}), klepn\u011bte na ikonu (i) vlevo naho\u0159e - > nastaven\u00ed. Zm\u011b\u0148te n\u00e1sleduj\u00edc\u00ed nastaven\u00ed: \n - Re\u017eim: HTTP \n - URL: {webhook_url} \n - Zapn\u011bte ov\u011b\u0159ov\u00e1n\u00ed \n - ID u\u017eivatele: ` ' \n\n {secret} \n \n V\u00edce informac\u00ed naleznete v [dokumentaci]({docs_url})." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit slu\u017ebu OwnTracks?", + "title": "Nastavit OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/da.json b/homeassistant/components/owntracks/translations/da.json new file mode 100644 index 00000000000..83e99a166cd --- /dev/null +++ b/homeassistant/components/owntracks/translations/da.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning" + }, + "create_entry": { + "default": "\n\nP\u00e5 Android skal du \u00e5bne [OwnTracks-appen]({android_url}), g\u00e5 til indstillinger -> forbindelse. Skift f\u00f8lgende indstillinger: \n - Tilstand: Privat HTTP\n - V\u00e6rt: {webhook_url}\n - Identifikation:\n - Brugernavn: ` ` \n - Enheds-id: ` ` \n\nP\u00e5 iOS skal du \u00e5bne [OwnTracks-appen]({ios_url}), tryk p\u00e5 (i) ikonet \u00f8verst til venstre -> indstillinger. Skift f\u00f8lgende indstillinger: \n - Tilstand: HTTP\n - URL: {webhook_url}\n - Aktiver godkendelse \n - Bruger ID: ` ` \n\n {secret}\n \n Se [dokumentationen]({docs_url}) for at f\u00e5 flere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere OwnTracks?", + "title": "Konfigurer OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/de.json b/homeassistant/components/owntracks/translations/de.json new file mode 100644 index 00000000000..bdfd4e55937 --- /dev/null +++ b/homeassistant/components/owntracks/translations/de.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "\n\n\u00d6ffnen unter Android [die OwnTracks-App]({android_url}) und gehe zu {android_url} - > Verbindung. \u00c4nder die folgenden Einstellungen: \n - Modus: Privates HTTP \n - Host: {webhook_url} \n - Identifizierung: \n - Benutzername: ` ` \n - Ger\u00e4te-ID: ` ` \n\n\u00d6ffnen unter iOS [die OwnTracks-App]({ios_url}) und tippe auf das Symbol (i) oben links - > Einstellungen. \u00c4nder die folgenden Einstellungen: \n - Modus: HTTP \n - URL: {webhook_url} \n - Aktivieren Sie die Authentifizierung \n - UserID: ` ` \n\n {secret} \n \n Weitere Informationen findest du in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "M\u00f6chtest du OwnTracks wirklich einrichten?", + "title": "OwnTracks einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/en.json b/homeassistant/components/owntracks/translations/en.json new file mode 100644 index 00000000000..25dd4fab31f --- /dev/null +++ b/homeassistant/components/owntracks/translations/en.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "\n\nOn Android, open [the OwnTracks app]({android_url}), go to preferences -> connection. Change the following settings:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nOn iOS, open [the OwnTracks app]({ios_url}), tap (i) icon in top left -> settings. Change the following settings:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nSee [the documentation]({docs_url}) for more information." + }, + "step": { + "user": { + "description": "Are you sure you want to set up OwnTracks?", + "title": "Set up OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/es-419.json b/homeassistant/components/owntracks/translations/es-419.json new file mode 100644 index 00000000000..35ad2389693 --- /dev/null +++ b/homeassistant/components/owntracks/translations/es-419.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "\n\n En Android, abra [la aplicaci\u00f3n OwnTracks] ( {android_url} ), vaya a preferencias - > conexi\u00f3n. Cambia las siguientes configuraciones: \n - Modo: HTTP privado \n - Anfitri\u00f3n: {webhook_url} \n - Identificaci\u00f3n: \n - Nombre de usuario: ` ` \n - ID del dispositivo: ` ` \n\n En iOS, abra [la aplicaci\u00f3n OwnTracks] ( {ios_url} ), toque el icono (i) en la parte superior izquierda - > configuraci\u00f3n. Cambia las siguientes configuraciones: \n - Modo: HTTP \n - URL: {webhook_url} \n - Activar autenticaci\u00f3n \n - ID de usuario: ` ` \n\n {secret} \n \n Consulte [la documentaci\u00f3n] ( {docs_url} ) para obtener m\u00e1s informaci\u00f3n." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar OwnTracks?", + "title": "Configurar OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/es.json b/homeassistant/components/owntracks/translations/es.json new file mode 100644 index 00000000000..ce558a70cdd --- /dev/null +++ b/homeassistant/components/owntracks/translations/es.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "\n\nEn Android, abre [la aplicaci\u00f3n OwnTracks]({android_url}), ve a preferencias -> conexi\u00f3n. Cambia los siguientes ajustes:\n - Modo: HTTP privado\n - Host: {webhook_url}\n - Identificaci\u00f3n:\n - Nombre de usuario: \n - ID de dispositivo: \n\nEn iOS, abre [la aplicaci\u00f3n OwnTracks] ({ios_url}), pulsa el icono (i) en la parte superior izquierda -> configuraci\u00f3n. Cambia los siguientes ajustes:\n - Modo: HTTP\n - URL: {webhook_url}\n - Activar la autenticaci\u00f3n\n - UserID: \n\n{secret}\n\nConsulta [la documentaci\u00f3n]({docs_url}) para obtener m\u00e1s informaci\u00f3n." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar OwnTracks?", + "title": "Configurar OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/fr.json b/homeassistant/components/owntracks/translations/fr.json new file mode 100644 index 00000000000..69f36504051 --- /dev/null +++ b/homeassistant/components/owntracks/translations/fr.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "\n\n Sous Android, ouvrez [l'application OwnTracks] ( {android_url} ), acc\u00e9dez \u00e0 Pr\u00e9f\u00e9rences - > Connexion. Modifiez les param\u00e8tres suivants: \n - Mode: HTTP priv\u00e9 \n - H\u00f4te: {webhook_url} \n - Identification: \n - Nom d'utilisateur: ` ` \n - ID de p\u00e9riph\u00e9rique: ` ` \n\n Sur iOS, ouvrez [l'application OwnTracks] ( {ios_url} ), appuyez sur l'ic\u00f4ne (i) en haut \u00e0 gauche - > param\u00e8tres. Modifiez les param\u00e8tres suivants: \n - Mode: HTTP \n - URL: {webhook_url} \n - Activer l'authentification \n - ID utilisateur: ` ` \n\n {secret} \n \n Voir [la documentation] ( {docs_url} ) pour plus d'informations." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer OwnTracks?", + "title": "Configurer OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/hu.json b/homeassistant/components/owntracks/translations/hu.json new file mode 100644 index 00000000000..ab6cc91324a --- /dev/null +++ b/homeassistant/components/owntracks/translations/hu.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "create_entry": { + "default": "\n\nAndroidon, nyisd meg [az OwnTracks appot]({android_url}), menj a preferences -> connectionre. V\u00e1ltoztasd meg a al\u00e1bbi be\u00e1ll\u00edt\u00e1sokat:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\niOS-en, nyisd meg [az OwnTracks appot]({ios_url}), kattints az (i) ikonra bal oldalon fel\u00fcl -> settings. V\u00e1ltoztasd meg az al\u00e1bbi be\u00e1ll\u00edt\u00e1sokat:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nN\u00e9zd meg [a dokument\u00e1ci\u00f3t]({docs_url}) tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani az Owntracks-t?", + "title": "Owntracks be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/it.json b/homeassistant/components/owntracks/translations/it.json new file mode 100644 index 00000000000..1c2af9e8d73 --- /dev/null +++ b/homeassistant/components/owntracks/translations/it.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "\n\nSu Android, apri l'[app OwnTracks]({android_url}), vai su preferenze -> connessione. Modifica le seguenti impostazioni: \n - Modalit\u00e0: HTTP privato \n - Host: {webhook_url} \n - Identificazione: \n - Nome utente: `` \n - ID dispositivo: ``\n\nSu iOS, apri l'[app OwnTracks]({ios_url}), tocca l'icona (i) in alto a sinistra -> impostazioni. Modifica le seguenti impostazioni: \n - Modalit\u00e0: HTTP \n - URL: {webhook_url} \n - Attiva autenticazione \n - UserID: `` \n\n {secret} \n \n Vedi [la documentazione]({docs_url}) per maggiori informazioni." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare OwnTracks?", + "title": "Configura OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/ko.json b/homeassistant/components/owntracks/translations/ko.json new file mode 100644 index 00000000000..72001c7de85 --- /dev/null +++ b/homeassistant/components/owntracks/translations/ko.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "\n\nAndroid \uc778 \uacbd\uc6b0, [OwnTracks \uc571]({android_url}) \uc744 \uc5f4\uace0 preferences -> connection \uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc774 \uc124\uc815\ud574\uc8fc\uc138\uc694:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\niOS \uc778 \uacbd\uc6b0, [OwnTracks \uc571]({ios_url}) \uc744 \uc5f4\uace0 \uc67c\ucabd \uc0c1\ub2e8\uc758 (i) \uc544\uc774\ucf58\uc744 \ud0ed\ud558\uc5ec \uc124\uc815\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc774 \uc124\uc815\ud574\uc8fc\uc138\uc694:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret} \n \n\uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "OwnTracks \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "OwnTracks \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/lb.json b/homeassistant/components/owntracks/translations/lb.json new file mode 100644 index 00000000000..4504ca6a74a --- /dev/null +++ b/homeassistant/components/owntracks/translations/lb.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "\n\nOp Android, an [der OwnTracks App]({android_url}), g\u00e9i an Preferences -> Connection. \u00c4nnert folgend Astellungen:\n- Mode: Private HTTP\n- Host {webhool_url}\n- Identification:\n - Username: ``\n - Device ID: ``\n\nOp IOS, an [der OwnTracks App]({ios_url}), klick op (i) Ikon uewen l\u00e9nks -> Settings. \u00c4nnert folgend Astellungen:\n- Mode: HTTP\n- URL: {webhool_url}\n- Turn on authentication:\n- UserID: ``\n\n{secret}\n\nKuckt w.e.g. [Dokumentatioun]({docs_url}) fir m\u00e9i Informatiounen." + }, + "step": { + "user": { + "description": "S\u00e9cher fir OwnTracks anzeriichten?", + "title": "OwnTracks ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/nl.json b/homeassistant/components/owntracks/translations/nl.json new file mode 100644 index 00000000000..00d2840e2f2 --- /dev/null +++ b/homeassistant/components/owntracks/translations/nl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "\n\nOp Android, open [the OwnTracks app]({android_url}), ga naar 'preferences' -> 'connection'. Verander de volgende instellingen:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nOp iOS, open [the OwnTracks app]({ios_url}), tik op het (i) icoon links boven -> 'settings'. Verander de volgende instellingen:\n - Mode: HTTP\n - URL: {webhook_url}\n - zet 'authentication' aan\n - UserID: ``\n\n{secret}\n\nZie [the documentation]({docs_url}) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet je zeker dat je OwnTracks wilt instellen?", + "title": "Stel OwnTracks in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/nn.json b/homeassistant/components/owntracks/translations/nn.json new file mode 100644 index 00000000000..0e0a71c8968 --- /dev/null +++ b/homeassistant/components/owntracks/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "OwnTracks" +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/no.json b/homeassistant/components/owntracks/translations/no.json new file mode 100644 index 00000000000..d03ee6889cd --- /dev/null +++ b/homeassistant/components/owntracks/translations/no.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "\n\nP\u00e5 Android, \u00e5pne [OwnTracks appen]({android_url}), g\u00e5 til Instillinger -> tilkobling. Endre f\u00f8lgende innstillinger: \n - Modus: Privat HTTP\n - Vert: {webhook_url} \n - Identifikasjon: \n - Brukernavn: ` ` \n - Enhets-ID: ` ` \n\nP\u00e5 iOS, \u00e5pne [OwnTracks appen]({ios_url}), trykk p\u00e5 (i) ikonet \u00f8verst til venstre - > innstillinger. Endre f\u00f8lgende innstillinger: \n - Modus: HTTP \n - URL: {webhook_url} \n - Sl\u00e5 p\u00e5 autentisering \n - BrukerID: ` ` \n\n {secret} \n \n Se [dokumentasjonen]({docs_url}) for mer informasjon." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp OwnTracks?", + "title": "Sett opp OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/pl.json b/homeassistant/components/owntracks/translations/pl.json new file mode 100644 index 00000000000..38d5891edd8 --- /dev/null +++ b/homeassistant/components/owntracks/translations/pl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "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\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": { + "description": "Na pewno chcesz skonfigurowa\u0107 OwnTracks?", + "title": "Konfiguracja OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/pt-BR.json b/homeassistant/components/owntracks/translations/pt-BR.json new file mode 100644 index 00000000000..e8d19233bbd --- /dev/null +++ b/homeassistant/components/owntracks/translations/pt-BR.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "\n\n No Android, abra [o aplicativo OwnTracks] ( {android_url} ), v\u00e1 para prefer\u00eancias - > conex\u00e3o. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP privado \n - Anfitri\u00e3o: {webhook_url} \n - Identifica\u00e7\u00e3o: \n - Nome de usu\u00e1rio: ` \n - ID do dispositivo: ` ` \n\n No iOS, abra o aplicativo OwnTracks ( {ios_url} ), toque no \u00edcone (i) no canto superior esquerdo - > configura\u00e7\u00f5es. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP \n - URL: {webhook_url} \n - Ativar a autentica\u00e7\u00e3o \n - UserID: ` ` \n\n {secret} \n \n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais informa\u00e7\u00f5es." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o OwnTracks?", + "title": "Configurar OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/pt.json b/homeassistant/components/owntracks/translations/pt.json new file mode 100644 index 00000000000..8aa3b52e9cc --- /dev/null +++ b/homeassistant/components/owntracks/translations/pt.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "\n\n No Android, abra [o aplicativo OwnTracks] ( {android_url} ), v\u00e1 para prefer\u00eancias - > conex\u00e3o. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP privado \n - Anfitri\u00e3o: {webhook_url} \n - Identifica\u00e7\u00e3o: \n - Nome de usu\u00e1rio: ` \n - ID do dispositivo: ` ` \n\n No iOS, abra [o aplicativo OwnTracks] ( {ios_url} ), toque no \u00edcone (i) no canto superior esquerdo - > configura\u00e7\u00f5es. Altere as seguintes configura\u00e7\u00f5es: \n - Modo: HTTP \n - URL: {webhook_url} \n - Ativar autentica\u00e7\u00e3o \n - UserID: ` ` \n\n {secret} \n \n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) para mais informa\u00e7\u00f5es." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o OwnTracks?", + "title": "Configurar OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/ru.json b/homeassistant/components/owntracks/translations/ru.json new file mode 100644 index 00000000000..816f2c86087 --- /dev/null +++ b/homeassistant/components/owntracks/translations/ru.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0415\u0441\u043b\u0438 \u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Android, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 [OwnTracks]({android_url}), \u0437\u0430\u0442\u0435\u043c preferences -> connection. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u043a, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\n\u0415\u0441\u043b\u0438 \u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 iOS, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 [OwnTracks]({ios_url}), \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a (i) \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 -> settings. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u043a, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c OwnTracks?", + "title": "OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/sl.json b/homeassistant/components/owntracks/translations/sl.json new file mode 100644 index 00000000000..f3909591bef --- /dev/null +++ b/homeassistant/components/owntracks/translations/sl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "\n\n V Androidu odprite aplikacijo OwnTracks ( {android_url} ) in pojdite na {android_url} nastavitve - > povezave. Spremenite naslednje nastavitve: \n - Na\u010din: zasebni HTTP \n - gostitelj: {webhook_url} \n - Identifikacija: \n - Uporabni\u0161ko ime: ` ` \n - ID naprave: ` ` \n\n V iOS-ju odprite aplikacijo OwnTracks ( {ios_url} ), tapnite ikono (i) v zgornjem levem kotu - > nastavitve. Spremenite naslednje nastavitve: \n - na\u010din: HTTP \n - URL: {webhook_url} \n - Vklopite preverjanje pristnosti \n - UserID: ` ` \n\n {secret} \n \n Za ve\u010d informacij si oglejte [dokumentacijo] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Owntracks?", + "title": "Nastavite OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/sv.json b/homeassistant/components/owntracks/translations/sv.json new file mode 100644 index 00000000000..de605d6b52f --- /dev/null +++ b/homeassistant/components/owntracks/translations/sv.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "\n\n P\u00e5 Android, \u00f6ppna [OwnTracks-appen]({android_url}), g\u00e5 till inst\u00e4llningar -> anslutning. \u00c4ndra f\u00f6ljande inst\u00e4llningar: \n - L\u00e4ge: Privat HTTP \n - V\u00e4rden: {webhook_url}\n - Identifiering: \n - Anv\u00e4ndarnamn: ``\n - Enhets-ID: `` \n\n P\u00e5 IOS, \u00f6ppna [OwnTracks-appen]({ios_url}), tryck p\u00e5 (i) ikonen i \u00f6vre v\u00e4nstra h\u00f6rnet -> inst\u00e4llningarna. \u00c4ndra f\u00f6ljande inst\u00e4llningar: \n - L\u00e4ge: HTTP \n - URL: {webhook_url}\n - Sl\u00e5 p\u00e5 autentisering \n - UserID: `` \n\n {secret} \n \n Se [dokumentationen]({docs_url}) f\u00f6r mer information." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera OwnTracks?", + "title": "Konfigurera OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/.translations/uk.json b/homeassistant/components/owntracks/translations/uk.json similarity index 100% rename from homeassistant/components/owntracks/.translations/uk.json rename to homeassistant/components/owntracks/translations/uk.json diff --git a/homeassistant/components/owntracks/translations/zh-Hans.json b/homeassistant/components/owntracks/translations/zh-Hans.json new file mode 100644 index 00000000000..fe1dc22d92f --- /dev/null +++ b/homeassistant/components/owntracks/translations/zh-Hans.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u662f\u5fc5\u9700\u7684\u3002" + }, + "create_entry": { + "default": "\n\n\u5728 Android \u8bbe\u5907\u4e0a\uff0c\u6253\u5f00 [OwnTracks APP]({android_url})\uff0c\u524d\u5f80 Preferences -> Connection\u3002\u4fee\u6539\u4ee5\u4e0b\u8bbe\u5b9a\uff1a\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\n\u5728 iOS \u8bbe\u5907\u4e0a\uff0c\u6253\u5f00 [OwnTracks APP]({ios_url})\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u7684 (i) \u56fe\u6807-> Settings\u3002\u4fee\u6539\u4ee5\u4e0b\u8bbe\u5b9a\uff1a\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e OwnTracks \u5417\uff1f", + "title": "\u8bbe\u7f6e OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/zh-Hant.json b/homeassistant/components/owntracks/translations/zh-Hant.json new file mode 100644 index 00000000000..d86a5376d07 --- /dev/null +++ b/homeassistant/components/owntracks/translations/zh-Hant.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\n\n\u65bc Android \u8a2d\u5099\uff0c\u6253\u958b [OwnTracks app]({android_url})\u3001\u9ede\u9078\u8a2d\u5b9a\uff08preferences\uff09 -> \u9023\u7dda\uff08connection\uff09\u3002\u8b8a\u66f4\u4ee5\u4e0b\u8a2d\u5b9a\uff1a\n - \u6a21\u5f0f\uff08Mode\uff09\uff1aPrivate HTTP\n - \u4e3b\u6a5f\u7aef\uff08Host\uff09\uff1a{webhook_url}\n - Identification\uff1a\n - Username\uff1a ``\n - Device ID\uff1a``\n\n\u65bc iOS \u8a2d\u5099\uff0c\u6253\u958b [OwnTracks app]({ios_url})\u3001\u9ede\u9078\u5de6\u4e0a\u65b9\u7684 (i) \u5716\u793a -> \u8a2d\u5b9a\uff08settings\uff09\u3002\u8b8a\u66f4\u4ee5\u4e0b\u8a2d\u5b9a\uff1a\n - \u6a21\u5f0f\uff08Mode\uff09\uff1aHTTP\n - URL: {webhook_url}\n - \u958b\u555f authentication\n - UserID: ``\n\n{secret}\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a OwnTracks\uff1f", + "title": "\u8a2d\u5b9a OwnTracks" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_bluray/manifest.json b/homeassistant/components/panasonic_bluray/manifest.json index 03fb171fc6f..c7e50c1c91a 100644 --- a/homeassistant/components/panasonic_bluray/manifest.json +++ b/homeassistant/components/panasonic_bluray/manifest.json @@ -3,6 +3,5 @@ "name": "Panasonic Blu-Ray Player", "documentation": "https://www.home-assistant.io/integrations/panasonic_bluray", "requirements": ["panacotta==0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/panasonic_viera/__init__.py b/homeassistant/components/panasonic_viera/__init__.py index bb63c98079e..60261712f4d 100644 --- a/homeassistant/components/panasonic_viera/__init__.py +++ b/homeassistant/components/panasonic_viera/__init__.py @@ -1 +1,69 @@ -"""The panasonic_viera component.""" +"""The Panasonic Viera integration.""" +import asyncio + +import voluptuous as vol + +from homeassistant.config_entries import SOURCE_IMPORT +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT +import homeassistant.helpers.config_validation as cv + +from .const import CONF_ON_ACTION, DEFAULT_NAME, DEFAULT_PORT, DOMAIN + +CONFIG_SCHEMA = vol.Schema( + { + DOMAIN: vol.All( + cv.ensure_list, + [ + vol.Schema( + { + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, + vol.Optional(CONF_ON_ACTION): cv.SCRIPT_SCHEMA, + } + ) + ], + ) + }, + extra=vol.ALLOW_EXTRA, +) + +PLATFORMS = ["media_player"] + + +async def async_setup(hass, config): + """Set up Panasonic Viera from configuration.yaml.""" + if DOMAIN not in config: + return True + + for conf in config[DOMAIN]: + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_IMPORT}, data=conf + ) + ) + + return True + + +async def async_setup_entry(hass, config_entry): + """Set up Panasonic Viera from a config entry.""" + + for component in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(config_entry, component) + ) + + return True + + +async def async_unload_entry(hass, config_entry): + """Unload a config entry.""" + return all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(config_entry, component) + for component in PLATFORMS + ] + ) + ) diff --git a/homeassistant/components/panasonic_viera/config_flow.py b/homeassistant/components/panasonic_viera/config_flow.py new file mode 100644 index 00000000000..bcaa3bb090d --- /dev/null +++ b/homeassistant/components/panasonic_viera/config_flow.py @@ -0,0 +1,152 @@ +"""Config flow for Panasonic Viera TV integration.""" +from functools import partial +import logging +from urllib.request import URLError + +from panasonic_viera import TV_TYPE_ENCRYPTED, RemoteControl, SOAPError +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PIN, CONF_PORT + +from .const import ( # pylint: disable=unused-import + CONF_APP_ID, + CONF_ENCRYPTION_KEY, + CONF_ON_ACTION, + DEFAULT_NAME, + DEFAULT_PORT, + DOMAIN, + ERROR_INVALID_PIN_CODE, + ERROR_NOT_CONNECTED, + REASON_NOT_CONNECTED, + REASON_UNKNOWN, +) + +_LOGGER = logging.getLogger(__name__) + + +class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Config flow for Panasonic Viera.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL + + def __init__(self): + """Initialize the Panasonic Viera config flow.""" + self._data = { + CONF_HOST: None, + CONF_NAME: None, + CONF_PORT: None, + CONF_ON_ACTION: None, + } + + self._remote = None + + async def async_step_user(self, user_input=None): + """Handle the initial step.""" + errors = {} + + if user_input is not None: + await self.async_load_data(user_input) + try: + self._remote = await self.hass.async_add_executor_job( + partial(RemoteControl, self._data[CONF_HOST], self._data[CONF_PORT]) + ) + except (TimeoutError, URLError, SOAPError, OSError) as err: + _LOGGER.error("Could not establish remote connection: %s", err) + errors["base"] = ERROR_NOT_CONNECTED + except Exception as err: # pylint: disable=broad-except + _LOGGER.exception("An unknown error occurred: %s", err) + return self.async_abort(reason=REASON_UNKNOWN) + + if "base" not in errors: + if self._remote.type == TV_TYPE_ENCRYPTED: + return await self.async_step_pairing() + + return self.async_create_entry( + title=self._data[CONF_NAME], data=self._data, + ) + + return self.async_show_form( + step_id="user", + data_schema=vol.Schema( + { + vol.Required( + CONF_HOST, + default=self._data[CONF_HOST] + if self._data[CONF_HOST] is not None + else "", + ): str, + vol.Optional( + CONF_NAME, + default=self._data[CONF_NAME] + if self._data[CONF_NAME] is not None + else DEFAULT_NAME, + ): str, + } + ), + errors=errors, + ) + + async def async_step_pairing(self, user_input=None): + """Handle the pairing step.""" + errors = {} + + if user_input is not None: + pin = user_input[CONF_PIN] + try: + self._remote.authorize_pin_code(pincode=pin) + except SOAPError as err: + _LOGGER.error("Invalid PIN code: %s", err) + errors["base"] = ERROR_INVALID_PIN_CODE + except (TimeoutError, URLError, OSError) as err: + _LOGGER.error("The remote connection was lost: %s", err) + return self.async_abort(reason=REASON_NOT_CONNECTED) + except Exception as err: # pylint: disable=broad-except + _LOGGER.exception("Unknown error: %s", err) + return self.async_abort(reason=REASON_UNKNOWN) + + if "base" not in errors: + encryption_data = { + CONF_APP_ID: self._remote.app_id, + CONF_ENCRYPTION_KEY: self._remote.enc_key, + } + + self._data = {**self._data, **encryption_data} + + return self.async_create_entry( + title=self._data[CONF_NAME], data=self._data, + ) + + try: + self._remote.request_pin_code(name="Home Assistant") + except (TimeoutError, URLError, SOAPError, OSError) as err: + _LOGGER.error("The remote connection was lost: %s", err) + return self.async_abort(reason=REASON_NOT_CONNECTED) + except Exception as err: # pylint: disable=broad-except + _LOGGER.exception("Unknown error: %s", err) + return self.async_abort(reason=REASON_UNKNOWN) + + return self.async_show_form( + step_id="pairing", + data_schema=vol.Schema({vol.Required(CONF_PIN): str}), + errors=errors, + ) + + async def async_step_import(self, import_config): + """Import a config entry from configuration.yaml.""" + return await self.async_step_user(user_input=import_config) + + async def async_load_data(self, config): + """Load the data.""" + self._data = config + + self._data[CONF_PORT] = ( + self._data[CONF_PORT] if CONF_PORT in self._data else DEFAULT_PORT + ) + self._data[CONF_ON_ACTION] = ( + self._data[CONF_ON_ACTION] if CONF_ON_ACTION in self._data else None + ) + + await self.async_set_unique_id(self._data[CONF_HOST]) + self._abort_if_unique_id_configured() diff --git a/homeassistant/components/panasonic_viera/const.py b/homeassistant/components/panasonic_viera/const.py new file mode 100644 index 00000000000..434d2d3d7c4 --- /dev/null +++ b/homeassistant/components/panasonic_viera/const.py @@ -0,0 +1,17 @@ +"""Constants for the Panasonic Viera integration.""" +DOMAIN = "panasonic_viera" + +DEVICE_MANUFACTURER = "Panasonic" + +CONF_ON_ACTION = "turn_on_action" +CONF_APP_ID = "app_id" +CONF_ENCRYPTION_KEY = "encryption_key" + +DEFAULT_NAME = "Panasonic Viera TV" +DEFAULT_PORT = 55000 + +ERROR_NOT_CONNECTED = "not_connected" +ERROR_INVALID_PIN_CODE = "invalid_pin_code" + +REASON_NOT_CONNECTED = "not_connected" +REASON_UNKNOWN = "unknown" diff --git a/homeassistant/components/panasonic_viera/manifest.json b/homeassistant/components/panasonic_viera/manifest.json index 5438ae1a2c5..d046d742e93 100644 --- a/homeassistant/components/panasonic_viera/manifest.json +++ b/homeassistant/components/panasonic_viera/manifest.json @@ -1,8 +1,8 @@ { "domain": "panasonic_viera", - "name": "Panasonic Viera TV", + "name": "Panasonic Viera", "documentation": "https://www.home-assistant.io/integrations/panasonic_viera", - "requirements": ["panasonic_viera==0.3.2", "wakeonlan==1.1.6"], - "dependencies": [], - "codeowners": [] + "requirements": ["panasonic_viera==0.3.5"], + "codeowners": ["@joogps"], + "config_flow": true } diff --git a/homeassistant/components/panasonic_viera/media_player.py b/homeassistant/components/panasonic_viera/media_player.py index d0615edfc33..abfb10e11f3 100644 --- a/homeassistant/components/panasonic_viera/media_player.py +++ b/homeassistant/components/panasonic_viera/media_player.py @@ -1,11 +1,11 @@ """Support for interface with a Panasonic Viera TV.""" +from functools import partial import logging +from urllib.request import URLError -from panasonic_viera import RemoteControl -import voluptuous as vol -import wakeonlan +from panasonic_viera import EncryptionRequired, Keys, RemoteControl, SOAPError -from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerDevice +from homeassistant.components.media_player import MediaPlayerDevice from homeassistant.components.media_player.const import ( MEDIA_TYPE_URL, SUPPORT_NEXT_TRACK, @@ -20,25 +20,10 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, SUPPORT_VOLUME_STEP, ) -from homeassistant.const import ( - CONF_BROADCAST_ADDRESS, - CONF_HOST, - CONF_MAC, - CONF_NAME, - CONF_PORT, - STATE_OFF, - STATE_ON, -) -import homeassistant.helpers.config_validation as cv +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, STATE_OFF, STATE_ON +from homeassistant.helpers.script import Script -_LOGGER = logging.getLogger(__name__) - -CONF_APP_POWER = "app_power" - -DEFAULT_NAME = "Panasonic Viera TV" -DEFAULT_PORT = 55000 -DEFAULT_BROADCAST_ADDRESS = "255.255.255.255" -DEFAULT_APP_POWER = False +from .const import CONF_APP_ID, CONF_ENCRYPTION_KEY, CONF_ON_ACTION SUPPORT_VIERATV = ( SUPPORT_PAUSE @@ -48,99 +33,58 @@ SUPPORT_VIERATV = ( | SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | SUPPORT_TURN_OFF + | SUPPORT_TURN_ON | SUPPORT_PLAY | SUPPORT_PLAY_MEDIA | SUPPORT_STOP ) -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_MAC): cv.string, - vol.Optional( - CONF_BROADCAST_ADDRESS, default=DEFAULT_BROADCAST_ADDRESS - ): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, - vol.Optional(CONF_APP_POWER, default=DEFAULT_APP_POWER): cv.boolean, - } -) +_LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Panasonic Viera TV platform.""" - mac = config.get(CONF_MAC) - broadcast = config.get(CONF_BROADCAST_ADDRESS) - name = config.get(CONF_NAME) - port = config.get(CONF_PORT) - app_power = config.get(CONF_APP_POWER) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up Panasonic Viera TV from a config entry.""" - if discovery_info: - _LOGGER.debug("%s", discovery_info) - name = discovery_info.get("name") - host = discovery_info.get("host") - port = discovery_info.get("port") - udn = discovery_info.get("udn") - if udn and udn.startswith("uuid:"): - uuid = udn[len("uuid:") :] - else: - uuid = None - remote = RemoteControl(host, port) - add_entities([PanasonicVieraTVDevice(mac, name, remote, host, app_power, uuid)]) - return True + config = config_entry.data - host = config.get(CONF_HOST) - remote = RemoteControl(host, port) + host = config[CONF_HOST] + port = config[CONF_PORT] + name = config[CONF_NAME] - add_entities( - [PanasonicVieraTVDevice(mac, name, remote, host, broadcast, app_power)] - ) - return True + on_action = config[CONF_ON_ACTION] + if on_action is not None: + on_action = Script(hass, on_action) + + params = {} + if CONF_APP_ID in config and CONF_ENCRYPTION_KEY in config: + params["app_id"] = config[CONF_APP_ID] + params["encryption_key"] = config[CONF_ENCRYPTION_KEY] + + remote = Remote(hass, host, port, on_action, **params) + await remote.async_create_remote_control(during_setup=True) + + tv_device = PanasonicVieraTVDevice(remote, name) + + async_add_entities([tv_device]) class PanasonicVieraTVDevice(MediaPlayerDevice): """Representation of a Panasonic Viera TV.""" - def __init__(self, mac, name, remote, host, broadcast, app_power, uuid=None): + def __init__( + self, remote, name, uuid=None, + ): """Initialize the Panasonic device.""" # Save a reference to the imported class - self._wol = wakeonlan - self._mac = mac + self._remote = remote self._name = name self._uuid = uuid - self._muted = False - self._playing = True - self._state = None - self._remote = remote - self._host = host - self._broadcast = broadcast - self._volume = 0 - self._app_power = app_power @property def unique_id(self) -> str: """Return the unique ID of this Viera TV.""" return self._uuid - def update(self): - """Retrieve the latest data.""" - try: - self._muted = self._remote.get_mute() - self._volume = self._remote.get_volume() / 100 - self._state = STATE_ON - except OSError: - self._state = STATE_OFF - - def send_key(self, key): - """Send a key to the tv and handles exceptions.""" - try: - self._remote.send_key(key) - self._state = STATE_ON - except OSError: - self._state = STATE_OFF - return False - return True - @property def name(self): """Return the name of the device.""" @@ -149,98 +93,208 @@ class PanasonicVieraTVDevice(MediaPlayerDevice): @property def state(self): """Return the state of the device.""" - return self._state + return self._remote.state + + @property + def available(self): + """Return if True the device is available.""" + return self._remote.available @property def volume_level(self): """Volume level of the media player (0..1).""" - return self._volume + return self._remote.volume @property def is_volume_muted(self): """Boolean if volume is currently muted.""" - return self._muted + return self._remote.muted @property def supported_features(self): """Flag media player features that are supported.""" - if self._mac or self._app_power: - return SUPPORT_VIERATV | SUPPORT_TURN_ON return SUPPORT_VIERATV - def turn_on(self): + async def async_update(self): + """Retrieve the latest data.""" + await self._remote.async_update() + + async def async_turn_on(self): """Turn on the media player.""" - if self._mac: - self._wol.send_magic_packet(self._mac, ip_address=self._broadcast) - self._state = STATE_ON - elif self._app_power: - self._remote.turn_on() - self._state = STATE_ON + await self._remote.async_turn_on() - def turn_off(self): + async def async_turn_off(self): """Turn off media player.""" - if self._state != STATE_OFF: - self._remote.turn_off() - self._state = STATE_OFF + await self._remote.async_turn_off() - def volume_up(self): + async def async_volume_up(self): """Volume up the media player.""" - self._remote.volume_up() + await self._remote.async_send_key(Keys.volume_up) - def volume_down(self): + async def async_volume_down(self): """Volume down media player.""" - self._remote.volume_down() + await self._remote.async_send_key(Keys.volume_down) - def mute_volume(self, mute): + async def async_mute_volume(self, mute): """Send mute command.""" - self._remote.set_mute(mute) + await self._remote.async_set_mute(mute) - def set_volume_level(self, volume): + async def async_set_volume_level(self, volume): + """Set volume level, range 0..1.""" + await self._remote.async_set_volume(volume) + + async def async_media_play_pause(self): + """Simulate play pause media player.""" + if self._remote.playing: + await self._remote.async_send_key(Keys.pause) + self._remote.playing = False + else: + await self._remote.async_send_key(Keys.play) + self._remote.playing = True + + async def async_media_play(self): + """Send play command.""" + await self._remote.async_send_key(Keys.play) + self._remote.playing = True + + async def async_media_pause(self): + """Send pause command.""" + await self._remote.async_send_key(Keys.pause) + self._remote.playing = False + + async def async_media_stop(self): + """Stop playback.""" + await self._remote.async_send_key(Keys.stop) + + async def async_media_next_track(self): + """Send the fast forward command.""" + await self._remote.async_send_key(Keys.fast_forward) + + async def async_media_previous_track(self): + """Send the rewind command.""" + await self._remote.async_send_key(Keys.rewind) + + async def async_play_media(self, media_type, media_id, **kwargs): + """Play media.""" + await self._remote.async_play_media(media_type, media_id) + + +class Remote: + """The Remote class. It stores the TV properties and the remote control connection itself.""" + + def __init__( + self, hass, host, port, on_action=None, app_id=None, encryption_key=None, + ): + """Initialize the Remote class.""" + self._hass = hass + + self._host = host + self._port = port + + self._on_action = on_action + + self._app_id = app_id + self._encryption_key = encryption_key + + self.state = None + self.available = False + self.volume = 0 + self.muted = False + self.playing = True + + self._control = None + + async def async_create_remote_control(self, during_setup=False): + """Create remote control.""" + control_existed = self._control is not None + try: + params = {} + if self._app_id and self._encryption_key: + params["app_id"] = self._app_id + params["encryption_key"] = self._encryption_key + + self._control = await self._hass.async_add_executor_job( + partial(RemoteControl, self._host, self._port, **params) + ) + + self.state = STATE_ON + self.available = True + except (TimeoutError, URLError, SOAPError, OSError) as err: + if control_existed or during_setup: + _LOGGER.error("Could not establish remote connection: %s", err) + + self._control = None + self.state = STATE_OFF + self.available = self._on_action is not None + except Exception as err: # pylint: disable=broad-except + if control_existed or during_setup: + _LOGGER.exception("An unknown error occurred: %s", err) + self._control = None + self.state = STATE_OFF + self.available = self._on_action is not None + + async def async_update(self): + """Update device data.""" + if self._control is None: + await self.async_create_remote_control() + return + + await self._handle_errors(self._update) + + async def _update(self): + """Retrieve the latest data.""" + self.muted = self._control.get_mute() + self.volume = self._control.get_volume() / 100 + + self.state = STATE_ON + self.available = True + + async def async_send_key(self, key): + """Send a key to the TV and handle exceptions.""" + await self._handle_errors(self._control.send_key, key) + + async def async_turn_on(self): + """Turn on the TV.""" + if self._on_action is not None: + await self._on_action.async_run() + self.state = STATE_ON + elif self.state != STATE_ON: + await self.async_send_key(Keys.power) + self.state = STATE_ON + + async def async_turn_off(self): + """Turn off the TV.""" + if self.state != STATE_OFF: + await self.async_send_key(Keys.power) + self.state = STATE_OFF + await self.async_update() + + async def async_set_mute(self, enable): + """Set mute based on 'enable'.""" + await self._handle_errors(self._control.set_mute, enable) + + async def async_set_volume(self, volume): """Set volume level, range 0..1.""" volume = int(volume * 100) - try: - self._remote.set_volume(volume) - self._state = STATE_ON - except OSError: - self._state = STATE_OFF + await self._handle_errors(self._control.set_volume, volume) - def media_play_pause(self): - """Simulate play pause media player.""" - if self._playing: - self.media_pause() - else: - self.media_play() - - def media_play(self): - """Send play command.""" - self._playing = True - self._remote.media_play() - - def media_pause(self): - """Send media pause command to media player.""" - self._playing = False - self._remote.media_pause() - - def media_next_track(self): - """Send next track command.""" - self._remote.media_next_track() - - def media_previous_track(self): - """Send the previous track command.""" - self._remote.media_previous_track() - - def play_media(self, media_type, media_id, **kwargs): + async def async_play_media(self, media_type, media_id): """Play media.""" _LOGGER.debug("Play media: %s (%s)", media_id, media_type) - if media_type == MEDIA_TYPE_URL: - try: - self._remote.open_webpage(media_id) - except (TimeoutError, OSError): - self._state = STATE_OFF - else: + if media_type != MEDIA_TYPE_URL: _LOGGER.warning("Unsupported media_type: %s", media_type) + return - def media_stop(self): - """Stop playback.""" - self.send_key("NRC_CANCEL-ONOFF") + await self._handle_errors(self._control.open_webpage, media_id) + + async def _handle_errors(self, func, *args): + """Handle errors from func, set available and reconnect if needed.""" + try: + await self._hass.async_add_executor_job(func, *args) + except EncryptionRequired: + _LOGGER.error("The connection couldn't be encrypted") + except (TimeoutError, URLError, SOAPError, OSError): + self.state = STATE_OFF + self.available = self._on_action is not None + await self.async_create_remote_control() diff --git a/homeassistant/components/panasonic_viera/strings.json b/homeassistant/components/panasonic_viera/strings.json new file mode 100644 index 00000000000..9835d1b5d93 --- /dev/null +++ b/homeassistant/components/panasonic_viera/strings.json @@ -0,0 +1,31 @@ +{ + "title": "Panasonic Viera", + "config": { + "step": { + "user": { + "title": "Setup your TV", + "description": "Enter your Panasonic Viera TV's IP address", + "data": { + "host": "IP address", + "name": "Name" + } + }, + "pairing": { + "title": "Pairing", + "description": "Enter the PIN displayed on your TV", + "data": { + "pin": "PIN" + } + } + }, + "error": { + "not_connected": "Could not establish a remote connection with your Panasonic Viera TV", + "invalid_pin_code": "The PIN code you entered was invalid" + }, + "abort": { + "already_configured": "This Panasonic Viera TV is already configured.", + "not_connected": "The remote connection with your Panasonic Viera TV was lost. Check the logs for more information.", + "unknown": "An unknown error occured. Check the logs for more information." + } + } +} diff --git a/homeassistant/components/panasonic_viera/translations/ca.json b/homeassistant/components/panasonic_viera/translations/ca.json new file mode 100644 index 00000000000..aba8f5c38f0 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest televisor Panasonic Viera ja est\u00e0 configurat.", + "not_connected": "La connexi\u00f3 remota amb el teu televisor Panasonic Viera ha fallat. Consulta els registres per a m\u00e9s informaci\u00f3.", + "unknown": "S'ha produ\u00eft un error desconegut. Consulta els registres per a m\u00e9s informaci\u00f3." + }, + "error": { + "invalid_pin_code": "El codi PIN introdu\u00eft no \u00e9s v\u00e0lid", + "not_connected": "No s'ha pogut establir una connexi\u00f3 remota amb el televisor Panasonic Viera" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Introdueix el PIN que apareix a la pantalla del televisor", + "title": "Emparellament" + }, + "user": { + "data": { + "host": "Adre\u00e7a IP", + "name": "Nom" + }, + "description": "Introdueix l'adre\u00e7a IP del televisor Panasonic Viera", + "title": "Configuraci\u00f3 del televisor" + } + } + }, + "title": "Televisor Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/de.json b/homeassistant/components/panasonic_viera/translations/de.json new file mode 100644 index 00000000000..082b86b719a --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Panasonic Viera TV ist bereits konfiguriert.", + "not_connected": "Die Fernverbindung mit Ihrem Panasonic Viera-Fernseher wurde unterbrochen. Weitere Informationen finden Sie in den Logs.", + "unknown": "Ein unbekannter Fehler ist aufgetreten. Weitere Informationen finden Sie in den Logs." + }, + "error": { + "invalid_pin_code": "Der von Ihnen eingegebene PIN-Code war ung\u00fcltig", + "not_connected": "Es konnte keine Remoteverbindung mit Ihrem Panasonic Viera TV hergestellt werden" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Geben Sie die auf Ihrem Fernseher angezeigte PIN ein", + "title": "Kopplung" + }, + "user": { + "data": { + "host": "IP-Adresse", + "name": "Name" + }, + "description": "Geben Sie die IP-Adresse Ihres Panasonic Viera TV ein", + "title": "Richten Sie Ihr Fernsehger\u00e4t ein" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/en.json b/homeassistant/components/panasonic_viera/translations/en.json new file mode 100644 index 00000000000..2af3ea71e45 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "This Panasonic Viera TV is already configured.", + "not_connected": "The remote connection with your Panasonic Viera TV was lost. Check the logs for more information.", + "unknown": "An unknown error occured. Check the logs for more information." + }, + "error": { + "invalid_pin_code": "The PIN code you entered was invalid", + "not_connected": "Could not establish a remote connection with your Panasonic Viera TV" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Enter the PIN displayed on your TV", + "title": "Pairing" + }, + "user": { + "data": { + "host": "IP address", + "name": "Name" + }, + "description": "Enter your Panasonic Viera TV's IP address", + "title": "Setup your TV" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/es.json b/homeassistant/components/panasonic_viera/translations/es.json new file mode 100644 index 00000000000..21039a8bcaf --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Este televisor Panasonic Viera ya est\u00e1 configurado.", + "not_connected": "La conexi\u00f3n remota con su televisor Panasonic Viera se perdi\u00f3. Compruebe los registros para obtener m\u00e1s informaci\u00f3n.", + "unknown": "Se ha producido un error desconocido. Compruebe los registros para obtener m\u00e1s informaci\u00f3n." + }, + "error": { + "invalid_pin_code": "El c\u00f3digo PIN que ha introducido no es v\u00e1lido", + "not_connected": "No se pudo establecer una conexi\u00f3n remota con su televisor Panasonic Viera" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Introduzca el PIN que aparece en su Televisor", + "title": "Emparejamiento" + }, + "user": { + "data": { + "host": "Direcci\u00f3n IP", + "name": "Nombre" + }, + "description": "Introduce la direcci\u00f3n IP de tu Panasonic Viera TV", + "title": "Configura tu televisi\u00f3n" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/fr.json b/homeassistant/components/panasonic_viera/translations/fr.json new file mode 100644 index 00000000000..dc9bfc3c920 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/fr.json @@ -0,0 +1,22 @@ +{ + "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", + "name": "Nom" + }, + "title": "Configurer votre t\u00e9l\u00e9viseur" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/hi.json b/homeassistant/components/panasonic_viera/translations/hi.json new file mode 100644 index 00000000000..30293524362 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/hi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "pairing": { + "description": "\u0905\u092a\u0928\u0947 \u091f\u0940\u0935\u0940 \u092a\u0930 \u092a\u094d\u0930\u0926\u0930\u094d\u0936\u093f\u0924 \u092a\u093f\u0928 \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/it.json b/homeassistant/components/panasonic_viera/translations/it.json new file mode 100644 index 00000000000..883550ba1ce --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Questo TV Panasonic Viera \u00e8 gi\u00e0 configurato.", + "not_connected": "La connessione remota con la TV Panasonic Viera \u00e8 andata persa. Controllare i registri per ulteriori informazioni.", + "unknown": "Si \u00e8 verificato un errore sconosciuto. Controllare i registri per ulteriori informazioni." + }, + "error": { + "invalid_pin_code": "Il codice PIN inserito non \u00e8 valido", + "not_connected": "Impossibile stabilire una connessione remota con la TV Panasonic Viera" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Inserire il PIN visualizzato sul televisore", + "title": "Abbinamento" + }, + "user": { + "data": { + "host": "Indirizzo IP", + "name": "Nome" + }, + "description": "Inserisci l'indirizzo IP del tuo Panasonic Viera TV", + "title": "Configura la tua TV" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/lb.json b/homeassistant/components/panasonic_viera/translations/lb.json new file mode 100644 index 00000000000..0fb2a8c703f --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/lb.json @@ -0,0 +1,31 @@ +{ + "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": { + "invalid_pin_code": "PIN Code ass ong\u00eblteg", + "not_connected": "Konnt keng Verbindung mam Panasonic Viera TV ariichten" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "PIN uginn deem um Fernseh ugewise g\u00ebtt", + "title": "Kopplung" + }, + "user": { + "data": { + "host": "IP Adresse", + "name": "Numm" + }, + "description": "Panasonic Viera TV IP Adresse uginn", + "title": "Fernseh ariichten" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/nl.json b/homeassistant/components/panasonic_viera/translations/nl.json new file mode 100644 index 00000000000..1f38ff9c441 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/nl.json @@ -0,0 +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", + "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/panasonic_viera/translations/no.json b/homeassistant/components/panasonic_viera/translations/no.json new file mode 100644 index 00000000000..b7f228552d9 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Panasonic Viera TV-en er allerede konfigurert.", + "not_connected": "Fjerntilkoblingen med din Panasonic Viera TV gikk tapt. Sjekk loggene for mer informasjon.", + "unknown": "Det skjedde en ukjent feil. Sjekk loggene for mer informasjon." + }, + "error": { + "invalid_pin_code": "PIN-koden du oppga var ugyldig", + "not_connected": "Kunne ikke opprette en ekstern tilkobling med Panasonic Viera TV" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Skriv inn PIN-koden som vises p\u00e5 TV-en", + "title": "Sammenkobling" + }, + "user": { + "data": { + "host": "IP adresse", + "name": "Navn" + }, + "description": "Skriv inn IP-adressen til Panasonic Viera TV", + "title": "Sett opp TV-en din" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/pl.json b/homeassistant/components/panasonic_viera/translations/pl.json new file mode 100644 index 00000000000..7a880c33265 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ten telewizor Panasonic Viera jest ju\u017c skonfigurowany.", + "not_connected": "Zdalne po\u0142\u0105czenie z telewizorem Panasonic Viera zosta\u0142o utracone. Sprawd\u017a logi, aby uzyska\u0107 wi\u0119cej informacji.", + "unknown": "Nieznany b\u0142\u0105d, sprawd\u017a logi aby uzyska\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w" + }, + "error": { + "invalid_pin_code": "Podany kod PIN jest nieprawid\u0142owy", + "not_connected": "Nie uda\u0142o si\u0119 nawi\u0105za\u0107 zdalnego po\u0142\u0105czenia z telewizorem Panasonic Viera." + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Wprowad\u017a kod PIN wy\u015bwietlony na ekranie telewizora", + "title": "Parowanie" + }, + "user": { + "data": { + "host": "Adres IP", + "name": "Nazwa" + }, + "description": "Wprowad\u017a adres IP telewizora Panasonic Viera", + "title": "Skonfiguruj telewizor" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/pt.json b/homeassistant/components/panasonic_viera/translations/pt.json new file mode 100644 index 00000000000..e9d63f1114f --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/pt.json @@ -0,0 +1,20 @@ +{ + "config": { + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "title": "Emparelhamento" + }, + "user": { + "data": { + "host": "Endere\u00e7o IP", + "name": "Nome" + }, + "title": "Configure a sua TV" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/ru.json b/homeassistant/components/panasonic_viera/translations/ru.json new file mode 100644 index 00000000000..549e8287a9f --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "not_connected": "\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u043c Panasonic Viera \u0431\u044b\u043b\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043e. \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. \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." + }, + "error": { + "invalid_pin_code": "\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 PIN-\u043a\u043e\u0434 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", + "not_connected": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u043c." + }, + "step": { + "pairing": { + "data": { + "pin": "PIN-\u043a\u043e\u0434" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 PIN-\u043a\u043e\u0434, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430", + "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435" + }, + "user": { + "data": { + "host": "IP-\u0430\u0434\u0440\u0435\u0441", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 IP-\u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 Panasonic Viera", + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435" + } + } + }, + "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/zh-Hant.json b/homeassistant/components/panasonic_viera/translations/zh-Hant.json new file mode 100644 index 00000000000..28d08bdf49c --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Panasonic Viera \u96fb\u8996\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", + "not_connected": "\u8207 Panasonic Viera \u96fb\u8996\u9060\u7aef\u9023\u7dda\u65b7\u7dda\uff0c\u8acb\u53c3\u95b1\u65e5\u8a8c\u4ee5\u7372\u5f97\u66f4\u8a73\u7d30\u8cc7\u8a0a\u3002", + "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002\u8acb\u53c3\u95b1\u65e5\u8a8c\u4ee5\u7372\u5f97\u66f4\u8a73\u7d30\u8cc7\u8a0a\u3002" + }, + "error": { + "invalid_pin_code": "\u6240\u8f38\u5165\u7684 PIN \u78bc\u7121\u6548", + "not_connected": "\u7121\u6cd5\u8207 Panasonic Viera \u96fb\u8996\u5efa\u7acb\u9060\u7aef\u9023\u7dda" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "\u8f38\u5165\u96fb\u8996\u986f\u793a\u4e4b PIN \u78bc", + "title": "\u914d\u5c0d\u4e2d" + }, + "user": { + "data": { + "host": "IP \u4f4d\u5740", + "name": "\u540d\u7a31" + }, + "description": "\u8f38\u5165 Panasonic Viera \u96fb\u8996 IP \u4f4d\u5740", + "title": "\u8a2d\u5b9a\u96fb\u8996" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/pandora/manifest.json b/homeassistant/components/pandora/manifest.json index f2d1cfbc23b..9ecb5b4b29d 100644 --- a/homeassistant/components/pandora/manifest.json +++ b/homeassistant/components/pandora/manifest.json @@ -3,6 +3,5 @@ "name": "Pandora", "documentation": "https://www.home-assistant.io/integrations/pandora", "requirements": ["pexpect==4.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/panel_custom/manifest.json b/homeassistant/components/panel_custom/manifest.json index 3aa0f1e3b29..59d20b677e9 100644 --- a/homeassistant/components/panel_custom/manifest.json +++ b/homeassistant/components/panel_custom/manifest.json @@ -2,7 +2,6 @@ "domain": "panel_custom", "name": "Custom Panel", "documentation": "https://www.home-assistant.io/integrations/panel_custom", - "requirements": [], "dependencies": ["frontend"], "codeowners": ["@home-assistant/frontend"], "quality_scale": "internal" diff --git a/homeassistant/components/panel_iframe/manifest.json b/homeassistant/components/panel_iframe/manifest.json index 6ccd444db26..7ade98eeb47 100644 --- a/homeassistant/components/panel_iframe/manifest.json +++ b/homeassistant/components/panel_iframe/manifest.json @@ -2,7 +2,6 @@ "domain": "panel_iframe", "name": "iframe Panel", "documentation": "https://www.home-assistant.io/integrations/panel_iframe", - "requirements": [], "dependencies": ["frontend"], "codeowners": ["@home-assistant/frontend"], "quality_scale": "internal" diff --git a/homeassistant/components/pcal9535a/manifest.json b/homeassistant/components/pcal9535a/manifest.json index 510d9dbf1a7..81802af1084 100644 --- a/homeassistant/components/pcal9535a/manifest.json +++ b/homeassistant/components/pcal9535a/manifest.json @@ -3,6 +3,5 @@ "name": "PCAL9535A I/O Expander", "documentation": "https://www.home-assistant.io/integrations/pcal9535a", "requirements": ["pcal9535a==0.7"], - "dependencies": [], "codeowners": ["@Shulyaka"] } diff --git a/homeassistant/components/pencom/manifest.json b/homeassistant/components/pencom/manifest.json index 33c91b811c7..0637c18b647 100644 --- a/homeassistant/components/pencom/manifest.json +++ b/homeassistant/components/pencom/manifest.json @@ -3,6 +3,5 @@ "name": "Pencom", "documentation": "https://www.home-assistant.io/integrations/pencom", "requirements": ["pencompy==0.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/persistent_notification/manifest.json b/homeassistant/components/persistent_notification/manifest.json index 81fa8a9497b..ff3ef06d97c 100644 --- a/homeassistant/components/persistent_notification/manifest.json +++ b/homeassistant/components/persistent_notification/manifest.json @@ -2,8 +2,6 @@ "domain": "persistent_notification", "name": "Persistent Notification", "documentation": "https://www.home-assistant.io/integrations/persistent_notification", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/person/__init__.py b/homeassistant/components/person/__init__.py index 006929c7345..8399719e861 100644 --- a/homeassistant/components/person/__init__.py +++ b/homeassistant/components/person/__init__.py @@ -484,7 +484,7 @@ class Person(RestoreEntity): self._longitude = None self._gps_accuracy = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def _parse_source_state(self, state): diff --git a/homeassistant/components/person/manifest.json b/homeassistant/components/person/manifest.json index df54743ce75..bd1dfa6b588 100644 --- a/homeassistant/components/person/manifest.json +++ b/homeassistant/components/person/manifest.json @@ -2,8 +2,6 @@ "domain": "person", "name": "Person", "documentation": "https://www.home-assistant.io/integrations/person", - "requirements": [], - "dependencies": [], "after_dependencies": ["device_tracker"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/person/strings.json b/homeassistant/components/person/strings.json new file mode 100644 index 00000000000..c94499d92f5 --- /dev/null +++ b/homeassistant/components/person/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Person", + "state": { + "_": { + "home": "[%key:common::state::home%]", + "not_home": "[%key:common::state::not_home%]" + } + } +} diff --git a/homeassistant/components/person/translations/af.json b/homeassistant/components/person/translations/af.json new file mode 100644 index 00000000000..a44448c2867 --- /dev/null +++ b/homeassistant/components/person/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Tuis", + "not_home": "Elders" + } + }, + "title": "Persoon" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/ar.json b/homeassistant/components/person/translations/ar.json new file mode 100644 index 00000000000..a3feeb7c799 --- /dev/null +++ b/homeassistant/components/person/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644", + "not_home": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644" + } + }, + "title": "\u0634\u062e\u0635" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/bg.json b/homeassistant/components/person/translations/bg.json new file mode 100644 index 00000000000..ad5bcfa277b --- /dev/null +++ b/homeassistant/components/person/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0412\u043a\u044a\u0449\u0438", + "not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430" + } + }, + "title": "\u0427\u043e\u0432\u0435\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/ca.json b/homeassistant/components/person/translations/ca.json new file mode 100644 index 00000000000..1c524a3b7c8 --- /dev/null +++ b/homeassistant/components/person/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "A casa", + "not_home": "Fora" + } + }, + "title": "Persona" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/cs.json b/homeassistant/components/person/translations/cs.json new file mode 100644 index 00000000000..0700c510ef1 --- /dev/null +++ b/homeassistant/components/person/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doma", + "not_home": "Pry\u010d" + } + }, + "title": "Osoba" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/cy.json b/homeassistant/components/person/translations/cy.json new file mode 100644 index 00000000000..144ec973aa6 --- /dev/null +++ b/homeassistant/components/person/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Gartref", + "not_home": "I ffwrdd" + } + }, + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/da.json b/homeassistant/components/person/translations/da.json new file mode 100644 index 00000000000..52b0550ada1 --- /dev/null +++ b/homeassistant/components/person/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Hjemme", + "not_home": "Ude" + } + }, + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/de.json b/homeassistant/components/person/translations/de.json new file mode 100644 index 00000000000..b9a36f759ba --- /dev/null +++ b/homeassistant/components/person/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Zu Hause", + "not_home": "Abwesend" + } + }, + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/el.json b/homeassistant/components/person/translations/el.json new file mode 100644 index 00000000000..39cc50dcfca --- /dev/null +++ b/homeassistant/components/person/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u03a3\u03c0\u03af\u03c4\u03b9", + "not_home": "\u0395\u03ba\u03c4\u03cc\u03c2" + } + }, + "title": "\u0386\u03c4\u03bf\u03bc\u03bf" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/en.json b/homeassistant/components/person/translations/en.json new file mode 100644 index 00000000000..62b7c5451ce --- /dev/null +++ b/homeassistant/components/person/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Home", + "not_home": "Away" + } + }, + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/es-419.json b/homeassistant/components/person/translations/es-419.json new file mode 100644 index 00000000000..98fca470569 --- /dev/null +++ b/homeassistant/components/person/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "En casa", + "not_home": "Fuera de casa" + } + }, + "title": "Persona" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/es.json b/homeassistant/components/person/translations/es.json new file mode 100644 index 00000000000..c87164c5f12 --- /dev/null +++ b/homeassistant/components/person/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Casa", + "not_home": "Fuera de casa" + } + }, + "title": "Persona" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/et.json b/homeassistant/components/person/translations/et.json new file mode 100644 index 00000000000..cccff9c632c --- /dev/null +++ b/homeassistant/components/person/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Kodus", + "not_home": "Eemal" + } + }, + "title": "Isik" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/eu.json b/homeassistant/components/person/translations/eu.json new file mode 100644 index 00000000000..d33c57a0d09 --- /dev/null +++ b/homeassistant/components/person/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Etxean", + "not_home": "Kanpoan" + } + }, + "title": "Pertsona" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/fa.json b/homeassistant/components/person/translations/fa.json new file mode 100644 index 00000000000..34c689e80bc --- /dev/null +++ b/homeassistant/components/person/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u062e\u0627\u0646\u0647", + "not_home": "\u0628\u06cc\u0631\u0648\u0646" + } + }, + "title": "\u0641\u0631\u062f" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/fi.json b/homeassistant/components/person/translations/fi.json new file mode 100644 index 00000000000..fbd86673486 --- /dev/null +++ b/homeassistant/components/person/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Koti", + "not_home": "Poissa" + } + }, + "title": "Henkil\u00f6" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/fr.json b/homeassistant/components/person/translations/fr.json new file mode 100644 index 00000000000..db73dc86794 --- /dev/null +++ b/homeassistant/components/person/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Pr\u00e9sent", + "not_home": "Absent" + } + }, + "title": "Personne" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/he.json b/homeassistant/components/person/translations/he.json new file mode 100644 index 00000000000..8bc21b19133 --- /dev/null +++ b/homeassistant/components/person/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u05d1\u05d1\u05d9\u05ea", + "not_home": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0" + } + }, + "title": "\u05d0\u05d3\u05dd" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/hi.json b/homeassistant/components/person/translations/hi.json new file mode 100644 index 00000000000..4cd5a4897af --- /dev/null +++ b/homeassistant/components/person/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "\u0918\u0930", + "not_home": "\u0926\u0942\u0930" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/hr.json b/homeassistant/components/person/translations/hr.json new file mode 100644 index 00000000000..cf0bb147282 --- /dev/null +++ b/homeassistant/components/person/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doma", + "not_home": "Odsutan" + } + }, + "title": "Osoba" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/hu.json b/homeassistant/components/person/translations/hu.json new file mode 100644 index 00000000000..fd5ad647269 --- /dev/null +++ b/homeassistant/components/person/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Otthon", + "not_home": "T\u00e1vol" + } + }, + "title": "Szem\u00e9ly" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/hy.json b/homeassistant/components/person/translations/hy.json new file mode 100644 index 00000000000..2c46271bfef --- /dev/null +++ b/homeassistant/components/person/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u057f\u0578\u0582\u0576", + "not_home": "\u0540\u0565\u057c\u0578\u0582" + } + }, + "title": "\u0531\u0576\u0571\u0568" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/id.json b/homeassistant/components/person/translations/id.json new file mode 100644 index 00000000000..2be3be8476a --- /dev/null +++ b/homeassistant/components/person/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Di rumah", + "not_home": "Keluar" + } + }, + "title": "Orang" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/is.json b/homeassistant/components/person/translations/is.json new file mode 100644 index 00000000000..c9942e689d5 --- /dev/null +++ b/homeassistant/components/person/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Heima", + "not_home": "Fjarverandi" + } + }, + "title": "Pers\u00f3na" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/it.json b/homeassistant/components/person/translations/it.json new file mode 100644 index 00000000000..58e67c1fc6c --- /dev/null +++ b/homeassistant/components/person/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "A casa", + "not_home": "Fuori casa" + } + }, + "title": "Persona" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/ja.json b/homeassistant/components/person/translations/ja.json new file mode 100644 index 00000000000..6679d6cca06 --- /dev/null +++ b/homeassistant/components/person/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "\u5728\u5b85", + "not_home": "\u5916\u51fa" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/ko.json b/homeassistant/components/person/translations/ko.json new file mode 100644 index 00000000000..0468277305b --- /dev/null +++ b/homeassistant/components/person/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\uc7ac\uc2e4", + "not_home": "\uc678\ucd9c" + } + }, + "title": "\uad6c\uc131\uc6d0" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/lb.json b/homeassistant/components/person/translations/lb.json new file mode 100644 index 00000000000..8ba7929e1e1 --- /dev/null +++ b/homeassistant/components/person/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doheem", + "not_home": "\u00cbnnerwee" + } + }, + "title": "Persoun" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/lt.json b/homeassistant/components/person/translations/lt.json new file mode 100644 index 00000000000..feb10162fd7 --- /dev/null +++ b/homeassistant/components/person/translations/lt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Namuose", + "not_home": "I\u0161vyk\u0119s" + } + }, + "title": "Asmuo" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/lv.json b/homeassistant/components/person/translations/lv.json new file mode 100644 index 00000000000..fc9bd0b9ff8 --- /dev/null +++ b/homeassistant/components/person/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "M\u0101j\u0101s", + "not_home": "Promb\u016btne" + } + }, + "title": "Persona" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/nb.json b/homeassistant/components/person/translations/nb.json new file mode 100644 index 00000000000..6d380619114 --- /dev/null +++ b/homeassistant/components/person/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Hjemme", + "not_home": "Borte" + } + }, + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/nl.json b/homeassistant/components/person/translations/nl.json new file mode 100644 index 00000000000..e431761d2ec --- /dev/null +++ b/homeassistant/components/person/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Thuis", + "not_home": "Afwezig" + } + }, + "title": "Persoon" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/nn.json b/homeassistant/components/person/translations/nn.json new file mode 100644 index 00000000000..5d19d440b34 --- /dev/null +++ b/homeassistant/components/person/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Heime", + "not_home": "Borte " + } + }, + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/no.json b/homeassistant/components/person/translations/no.json new file mode 100644 index 00000000000..10115f789a6 --- /dev/null +++ b/homeassistant/components/person/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/pl.json b/homeassistant/components/person/translations/pl.json new file mode 100644 index 00000000000..063a59a3983 --- /dev/null +++ b/homeassistant/components/person/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "w domu", + "not_home": "poza domem" + } + }, + "title": "Osoba" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/pt-BR.json b/homeassistant/components/person/translations/pt-BR.json new file mode 100644 index 00000000000..8218473fad4 --- /dev/null +++ b/homeassistant/components/person/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Em casa", + "not_home": "Ausente" + } + }, + "title": "Pessoa" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/pt.json b/homeassistant/components/person/translations/pt.json new file mode 100644 index 00000000000..4cd50767c0f --- /dev/null +++ b/homeassistant/components/person/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Casa", + "not_home": "Ausente" + } + }, + "title": "Pessoa" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/ro.json b/homeassistant/components/person/translations/ro.json new file mode 100644 index 00000000000..8ee4f223476 --- /dev/null +++ b/homeassistant/components/person/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Acas\u0103", + "not_home": "Plecat" + } + }, + "title": "Persoan\u0103" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/ru.json b/homeassistant/components/person/translations/ru.json new file mode 100644 index 00000000000..0f2f0298f83 --- /dev/null +++ b/homeassistant/components/person/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0414\u043e\u043c\u0430", + "not_home": "\u041d\u0435 \u0434\u043e\u043c\u0430" + } + }, + "title": "\u041b\u044e\u0434\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/sk.json b/homeassistant/components/person/translations/sk.json new file mode 100644 index 00000000000..0eac39f071e --- /dev/null +++ b/homeassistant/components/person/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doma", + "not_home": "Pre\u010d" + } + }, + "title": "Osoba" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/sl.json b/homeassistant/components/person/translations/sl.json new file mode 100644 index 00000000000..ec63ecff746 --- /dev/null +++ b/homeassistant/components/person/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Doma", + "not_home": "Odsoten" + } + }, + "title": "Oseba" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/sr.json b/homeassistant/components/person/translations/sr.json new file mode 100644 index 00000000000..c3b0c189d7d --- /dev/null +++ b/homeassistant/components/person/translations/sr.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u0441\u043e\u0431\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/sv.json b/homeassistant/components/person/translations/sv.json new file mode 100644 index 00000000000..e7c9b1f29c9 --- /dev/null +++ b/homeassistant/components/person/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Hemma", + "not_home": "Borta" + } + }, + "title": "Person" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/th.json b/homeassistant/components/person/translations/th.json new file mode 100644 index 00000000000..e8d48113e1a --- /dev/null +++ b/homeassistant/components/person/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19", + "not_home": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19" + } + }, + "title": "\u0e1a\u0e38\u0e04\u0e04\u0e25" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/tr.json b/homeassistant/components/person/translations/tr.json new file mode 100644 index 00000000000..d91d50744e0 --- /dev/null +++ b/homeassistant/components/person/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "Evde", + "not_home": "D\u0131\u015far\u0131da" + } + }, + "title": "Ki\u015fi" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/uk.json b/homeassistant/components/person/translations/uk.json new file mode 100644 index 00000000000..0dba7914da0 --- /dev/null +++ b/homeassistant/components/person/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u0412\u0434\u043e\u043c\u0430", + "not_home": "\u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439" + } + }, + "title": "\u041b\u044e\u0434\u0438\u043d\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/vi.json b/homeassistant/components/person/translations/vi.json new file mode 100644 index 00000000000..769bfc6a5a6 --- /dev/null +++ b/homeassistant/components/person/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u1ede nh\u00e0", + "not_home": "\u0110i v\u1eafng" + } + }, + "title": "Ng\u01b0\u1eddi" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/zh-Hans.json b/homeassistant/components/person/translations/zh-Hans.json new file mode 100644 index 00000000000..16213ba3079 --- /dev/null +++ b/homeassistant/components/person/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u5728\u5bb6", + "not_home": "\u79bb\u5f00" + } + }, + "title": "\u4e2a\u4eba" +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/zh-Hant.json b/homeassistant/components/person/translations/zh-Hant.json new file mode 100644 index 00000000000..0099fc5f0fa --- /dev/null +++ b/homeassistant/components/person/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "home": "\u5728\u5bb6", + "not_home": "\u96e2\u5bb6" + } + }, + "title": "\u500b\u4eba" +} \ No newline at end of file diff --git a/homeassistant/components/philips_js/manifest.json b/homeassistant/components/philips_js/manifest.json index e8e347722a6..74473827424 100644 --- a/homeassistant/components/philips_js/manifest.json +++ b/homeassistant/components/philips_js/manifest.json @@ -3,6 +3,5 @@ "name": "Philips TV", "documentation": "https://www.home-assistant.io/integrations/philips_js", "requirements": ["ha-philipsjs==0.0.8"], - "dependencies": [], "codeowners": ["@elupus"] } diff --git a/homeassistant/components/pi4ioe5v9xxxx/__init__.py b/homeassistant/components/pi4ioe5v9xxxx/__init__.py new file mode 100644 index 00000000000..516cfc32575 --- /dev/null +++ b/homeassistant/components/pi4ioe5v9xxxx/__init__.py @@ -0,0 +1 @@ +"""Support for controlling IO expanders from Digital.com (PI4IOE5V9570, PI4IOE5V9674, PI4IOE5V9673, PI4IOE5V96224, PI4IOE5V96248).""" diff --git a/homeassistant/components/pi4ioe5v9xxxx/binary_sensor.py b/homeassistant/components/pi4ioe5v9xxxx/binary_sensor.py new file mode 100644 index 00000000000..89f293d1e0d --- /dev/null +++ b/homeassistant/components/pi4ioe5v9xxxx/binary_sensor.py @@ -0,0 +1,80 @@ +"""Support for binary sensor using RPi GPIO.""" +import logging + +from pi4ioe5v9xxxx import pi4ioe5v9xxxx # pylint: disable=import-error +import voluptuous as vol + +from homeassistant.components.binary_sensor import PLATFORM_SCHEMA, BinarySensorDevice +from homeassistant.const import DEVICE_DEFAULT_NAME +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +CONF_INVERT_LOGIC = "invert_logic" +CONF_PINS = "pins" +CONF_I2CBUS = "i2c_bus" +CONF_I2CADDR = "i2c_address" +CONF_BITS = "bits" + +DEFAULT_INVERT_LOGIC = False +DEFAULT_BITS = 24 +DEFAULT_BUS = 1 +DEFAULT_ADDR = 0x20 + + +_SENSORS_SCHEMA = vol.Schema({cv.positive_int: cv.string}) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( + { + vol.Required(CONF_PINS): _SENSORS_SCHEMA, + vol.Optional(CONF_I2CBUS, default=DEFAULT_BUS): cv.positive_int, + vol.Optional(CONF_I2CADDR, default=DEFAULT_ADDR): cv.positive_int, + vol.Optional(CONF_BITS, default=DEFAULT_BITS): cv.positive_int, + vol.Optional(CONF_INVERT_LOGIC, default=DEFAULT_INVERT_LOGIC): cv.boolean, + } +) + + +def setup_platform(hass, config, add_entities, discovery_info=None): + """Set up the IO expander devices.""" + pins = config[CONF_PINS] + binary_sensors = [] + + pi4ioe5v9xxxx.setup( + i2c_bus=config[CONF_I2CBUS], + i2c_addr=config[CONF_I2CADDR], + bits=config[CONF_BITS], + read_mode=True, + invert=False, + ) + for pin_num, pin_name in pins.items(): + binary_sensors.append( + Pi4ioe5v9BinarySensor(pin_name, pin_num, config[CONF_INVERT_LOGIC]) + ) + add_entities(binary_sensors, True) + + +class Pi4ioe5v9BinarySensor(BinarySensorDevice): + """Represent a binary sensor that uses pi4ioe5v9xxxx IO expander in read mode.""" + + def __init__(self, name, pin, invert_logic): + """Initialize the pi4ioe5v9xxxx sensor.""" + self._name = name or DEVICE_DEFAULT_NAME + self._pin = pin + self._invert_logic = invert_logic + self._state = pi4ioe5v9xxxx.pin_from_memory(self._pin) + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def is_on(self): + """Return the state of the entity.""" + return self._state != self._invert_logic + + def update(self): + """Update the IO state.""" + pi4ioe5v9xxxx.hw_to_memory() + self._state = pi4ioe5v9xxxx.pin_from_memory(self._pin) diff --git a/homeassistant/components/pi4ioe5v9xxxx/manifest.json b/homeassistant/components/pi4ioe5v9xxxx/manifest.json new file mode 100644 index 00000000000..749c5d095a0 --- /dev/null +++ b/homeassistant/components/pi4ioe5v9xxxx/manifest.json @@ -0,0 +1,8 @@ +{ + "domain": "pi4ioe5v9xxxx", + "name": "pi4ioe5v9xxxx IO Expander", + "documentation": "https://www.home-assistant.io/integrations/pi4ioe5v9xxxx", + "requirements": ["pi4ioe5v9xxxx==0.0.2"], + "dependencies": [], + "codeowners": ["@antonverburg"] +} diff --git a/homeassistant/components/pi4ioe5v9xxxx/switch.py b/homeassistant/components/pi4ioe5v9xxxx/switch.py new file mode 100644 index 00000000000..a7c1e19074c --- /dev/null +++ b/homeassistant/components/pi4ioe5v9xxxx/switch.py @@ -0,0 +1,91 @@ +"""Allows to configure a switch using RPi GPIO.""" +import logging + +from pi4ioe5v9xxxx import pi4ioe5v9xxxx # pylint: disable=import-error +import voluptuous as vol + +from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice +from homeassistant.const import DEVICE_DEFAULT_NAME +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +CONF_PINS = "pins" +CONF_INVERT_LOGIC = "invert_logic" +CONF_I2CBUS = "i2c_bus" +CONF_I2CADDR = "i2c_address" +CONF_BITS = "bits" + +DEFAULT_INVERT_LOGIC = False +DEFAULT_BITS = 24 +DEFAULT_BUS = 1 +DEFAULT_ADDR = 0x20 + +_SWITCHES_SCHEMA = vol.Schema({cv.positive_int: cv.string}) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( + { + vol.Required(CONF_PINS): _SWITCHES_SCHEMA, + vol.Optional(CONF_I2CBUS, default=DEFAULT_BUS): cv.positive_int, + vol.Optional(CONF_I2CADDR, default=DEFAULT_ADDR): cv.positive_int, + vol.Optional(CONF_BITS, default=DEFAULT_BITS): cv.positive_int, + vol.Optional(CONF_INVERT_LOGIC, default=DEFAULT_INVERT_LOGIC): cv.boolean, + } +) + + +def setup_platform(hass, config, add_entities, discovery_info=None): + """Set up the swiches devices.""" + pins = config.get(CONF_PINS) + switches = [] + + pi4ioe5v9xxxx.setup( + i2c_bus=config[CONF_I2CBUS], + i2c_addr=config[CONF_I2CADDR], + bits=config[CONF_BITS], + read_mode=False, + invert=False, + ) + for pin, name in pins.items(): + switches.append(Pi4ioe5v9Switch(name, pin, config[CONF_INVERT_LOGIC])) + add_entities(switches) + + +class Pi4ioe5v9Switch(SwitchDevice): + """Representation of a pi4ioe5v9 IO expansion IO.""" + + def __init__(self, name, pin, invert_logic): + """Initialize the pin.""" + self._name = name or DEVICE_DEFAULT_NAME + self._pin = pin + self._invert_logic = invert_logic + self._state = False + + @property + def name(self): + """Return the name of the switch.""" + return self._name + + @property + def should_poll(self): + """No polling needed.""" + return False + + @property + def is_on(self): + """Return true if device is on.""" + return self._state + + def turn_on(self, **kwargs): + """Turn the device on.""" + pi4ioe5v9xxxx.pin_to_memory(self._pin, not self._invert_logic) + pi4ioe5v9xxxx.memory_to_hw() + self._state = True + self.schedule_update_ha_state() + + def turn_off(self, **kwargs): + """Turn the device off.""" + pi4ioe5v9xxxx.pin_to_memory(self._pin, self._invert_logic) + pi4ioe5v9xxxx.memory_to_hw() + self._state = False + self.schedule_update_ha_state() diff --git a/homeassistant/components/pi_hole/__init__.py b/homeassistant/components/pi_hole/__init__.py index fb06d06cfb4..989841d1317 100644 --- a/homeassistant/components/pi_hole/__init__.py +++ b/homeassistant/components/pi_hole/__init__.py @@ -45,12 +45,10 @@ def ensure_unique_names_and_slugs(config): slugs[conf[CONF_SLUG]] = conf[CONF_HOST] else: raise vol.Invalid( - "Duplicate name '{}' (or slug '{}') for '{}' (already in use by '{}'). Each configured Pi-hole must have a unique name.".format( - conf[CONF_NAME], - conf[CONF_SLUG], - conf[CONF_HOST], - names.get(conf[CONF_NAME], slugs[conf[CONF_SLUG]]), - ) + f"Duplicate name '{conf[CONF_NAME]}' (or slug '{conf[CONF_SLUG]}') " + f"for '{conf[CONF_HOST]}' (already in use by " + f"'{names.get(conf[CONF_NAME], slugs[conf[CONF_SLUG]])}'). " + "Each configured Pi-hole must have a unique name." ) return config @@ -108,9 +106,8 @@ async def async_setup(hass, config): if (data[slug]).api.api_token is None: raise vol.Invalid( - "Pi-hole '{}' must have an api_key provided in configuration to be enabled.".format( - pi_hole.name - ) + f"Pi-hole '{pi_hole.name}' must have an api_key " + "provided in configuration to be enabled." ) return call_data @@ -122,7 +119,7 @@ async def async_setup(hass, config): cv.time_period_str, cv.positive_timedelta ), vol.Optional(SERVICE_DISABLE_ATTR_NAME): vol.In( - [conf[CONF_NAME] for conf in config[DOMAIN]], msg="Unknown Pi-Hole", + [conf[CONF_NAME] for conf in config[DOMAIN]], msg="Unknown Pi-Hole" ), }, ensure_api_token, diff --git a/homeassistant/components/pi_hole/manifest.json b/homeassistant/components/pi_hole/manifest.json index 5d8f8557099..1f4b46cc0d4 100644 --- a/homeassistant/components/pi_hole/manifest.json +++ b/homeassistant/components/pi_hole/manifest.json @@ -3,6 +3,5 @@ "name": "Pi-hole", "documentation": "https://www.home-assistant.io/integrations/pi_hole", "requirements": ["hole==0.5.1"], - "dependencies": [], "codeowners": ["@fabaff", "@johnluetke"] } diff --git a/homeassistant/components/pi_hole/services.yaml b/homeassistant/components/pi_hole/services.yaml index e3cc8624e36..9bb31b1723f 100644 --- a/homeassistant/components/pi_hole/services.yaml +++ b/homeassistant/components/pi_hole/services.yaml @@ -4,7 +4,7 @@ disable: duration: description: Time that the Pi-hole should be disabled for example: "00:00:15" - name: + name: description: "[Optional] When multiple Pi-holes are configured, the name of the one to disable. If omitted, all configured Pi-holes will be disabled." example: "Pi-Hole" enable: @@ -12,4 +12,4 @@ enable: fields: name: description: "[Optional] When multiple Pi-holes are configured, the name of the one to enable. If omitted, all configured Pi-holes will be enabled." - example: "Pi-Hole" \ No newline at end of file + example: "Pi-Hole" diff --git a/homeassistant/components/picotts/manifest.json b/homeassistant/components/picotts/manifest.json index 43963bb2cd8..6f7a80be970 100644 --- a/homeassistant/components/picotts/manifest.json +++ b/homeassistant/components/picotts/manifest.json @@ -2,7 +2,5 @@ "domain": "picotts", "name": "Pico TTS", "documentation": "https://www.home-assistant.io/integrations/picotts", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/piglow/manifest.json b/homeassistant/components/piglow/manifest.json index 1aa0ead9fd8..14d25b1dc92 100644 --- a/homeassistant/components/piglow/manifest.json +++ b/homeassistant/components/piglow/manifest.json @@ -3,6 +3,5 @@ "name": "Piglow", "documentation": "https://www.home-assistant.io/integrations/piglow", "requirements": ["piglow==1.2.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/pilight/__init__.py b/homeassistant/components/pilight/__init__.py index 50ee1b248b0..02d56c890fe 100644 --- a/homeassistant/components/pilight/__init__.py +++ b/homeassistant/components/pilight/__init__.py @@ -67,7 +67,7 @@ def setup(hass, config): try: pilight_client = pilight.Client(host=host, port=port) - except (socket.error, socket.timeout) as err: + except (OSError, socket.timeout) as err: _LOGGER.error("Unable to connect to %s on port %s: %s", host, port, err) return False diff --git a/homeassistant/components/pilight/manifest.json b/homeassistant/components/pilight/manifest.json index b2b2b08f7ff..8afafcd68b3 100644 --- a/homeassistant/components/pilight/manifest.json +++ b/homeassistant/components/pilight/manifest.json @@ -3,6 +3,5 @@ "name": "Pilight", "documentation": "https://www.home-assistant.io/integrations/pilight", "requirements": ["pilight==0.1.1"], - "dependencies": [], "codeowners": ["@trekky12"] } diff --git a/homeassistant/components/pilight/services.yaml b/homeassistant/components/pilight/services.yaml index cc6141fdd91..9faa8908efb 100644 --- a/homeassistant/components/pilight/services.yaml +++ b/homeassistant/components/pilight/services.yaml @@ -2,5 +2,5 @@ send: description: Send RF code to Pilight device fields: protocol: - description: 'Protocol that Pilight recognizes. See https://manual.pilight.org/protocols/index.html for supported protocols and additional parameters that each protocol supports' - example: 'lirc' + description: "Protocol that Pilight recognizes. See https://manual.pilight.org/protocols/index.html for supported protocols and additional parameters that each protocol supports" + example: "lirc" diff --git a/homeassistant/components/ping/manifest.json b/homeassistant/components/ping/manifest.json index 2ec00271fff..887b48dbaae 100644 --- a/homeassistant/components/ping/manifest.json +++ b/homeassistant/components/ping/manifest.json @@ -2,8 +2,6 @@ "domain": "ping", "name": "Ping (ICMP)", "documentation": "https://www.home-assistant.io/integrations/ping", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/pioneer/manifest.json b/homeassistant/components/pioneer/manifest.json index 3aa046f234d..524f2764414 100644 --- a/homeassistant/components/pioneer/manifest.json +++ b/homeassistant/components/pioneer/manifest.json @@ -2,7 +2,5 @@ "domain": "pioneer", "name": "Pioneer", "documentation": "https://www.home-assistant.io/integrations/pioneer", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/pioneer/media_player.py b/homeassistant/components/pioneer/media_player.py index b834a8e6829..899a06dc278 100644 --- a/homeassistant/components/pioneer/media_player.py +++ b/homeassistant/components/pioneer/media_player.py @@ -87,7 +87,7 @@ class PioneerDevice(MediaPlayerDevice): self._muted = False self._selected_source = "" self._source_name_to_number = sources - self._source_number_to_name = dict((v, k) for k, v in sources.items()) + self._source_number_to_name = {v: k for k, v in sources.items()} @classmethod def telnet_request(cls, telnet, command, expected_prefix): @@ -142,7 +142,7 @@ class PioneerDevice(MediaPlayerDevice): # Build the source name dictionaries if necessary if not self._source_name_to_number: for i in range(MAX_SOURCE_NUMBERS): - result = self.telnet_request(telnet, "?RGB" + str(i).zfill(2), "RGB") + result = self.telnet_request(telnet, f"?RGB{str(i).zfill(2)}", "RGB") if not result: continue @@ -225,7 +225,7 @@ class PioneerDevice(MediaPlayerDevice): def set_volume_level(self, volume): """Set volume level, range 0..1.""" # 60dB max - self.telnet_command(str(round(volume * MAX_VOLUME)).zfill(3) + "VL") + self.telnet_command(f"{round(volume * MAX_VOLUME):03}VL") def mute_volume(self, mute): """Mute (true) or unmute (false) media player.""" @@ -237,4 +237,4 @@ class PioneerDevice(MediaPlayerDevice): def select_source(self, source): """Select input source.""" - self.telnet_command(self._source_name_to_number.get(source) + "FN") + self.telnet_command(f"{self._source_name_to_number.get(source)}FN") diff --git a/homeassistant/components/pjlink/manifest.json b/homeassistant/components/pjlink/manifest.json index a9b4a3bae86..ca657923aa8 100644 --- a/homeassistant/components/pjlink/manifest.json +++ b/homeassistant/components/pjlink/manifest.json @@ -3,6 +3,5 @@ "name": "PJLink", "documentation": "https://www.home-assistant.io/integrations/pjlink", "requirements": ["pypjlink2==1.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/plaato/.translations/bg.json b/homeassistant/components/plaato/.translations/bg.json deleted file mode 100644 index 1fcf58e3086..00000000000 --- a/homeassistant/components/plaato/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Plaato Airlock.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Plaato Airlock. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Plaato Airlock?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/ca.json b/homeassistant/components/plaato/.translations/ca.json deleted file mode 100644 index 481450cbc5f..00000000000 --- a/homeassistant/components/plaato/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Plaato Airlock.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de Plaato Airlock.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar Plaato Airlock?", - "title": "Configuraci\u00f3 del Webhook de Plaato" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/da.json b/homeassistant/components/plaato/.translations/da.json deleted file mode 100644 index c4dc5ae178d..00000000000 --- a/homeassistant/components/plaato/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage meddelelser fra Plaato Airlock.", - "one_instance_allowed": "Kun en enkelt instans er n\u00f8dvendig." - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i Plaato Airlock.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Plaato Airlock?", - "title": "Konfigurer Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/de.json b/homeassistant/components/plaato/.translations/de.json deleted file mode 100644 index 92dafa1c323..00000000000 --- a/homeassistant/components/plaato/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem Internet erreichbar sein, um Nachrichten von Plaato Airlock zu erhalten.", - "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." - }, - "create_entry": { - "default": "Um Ereignisse an Home Assistant zu senden, muss das Webhook Feature in Plaato Airlock konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." - }, - "step": { - "user": { - "description": "Soll Plaato Airlock wirklich eingerichtet werden?", - "title": "Plaato Webhook einrichten" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/en.json b/homeassistant/components/plaato/.translations/en.json deleted file mode 100644 index 6d3aa2c59c4..00000000000 --- a/homeassistant/components/plaato/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Plaato Airlock.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup the webhook feature in Plaato Airlock.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." - }, - "step": { - "user": { - "description": "Are you sure you want to set up the Plaato Airlock?", - "title": "Set up the Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/es-419.json b/homeassistant/components/plaato/.translations/es-419.json deleted file mode 100644 index d63802984ef..00000000000 --- a/homeassistant/components/plaato/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes de Plaato Airlock.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en Plaato Airlock. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n\n Consulte [la documentaci\u00f3n]({docs_url}) para obtener m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1 seguro de que deseas configurar Plaato Airlock?", - "title": "Configurar el Webhook de Plaato" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/es.json b/homeassistant/components/plaato/.translations/es.json deleted file mode 100644 index ecb061e91c9..00000000000 --- a/homeassistant/components/plaato/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Plaato Airlock.", - "one_instance_allowed": "Solo se necesita una instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en Plaato Airlock.\n\nCompleta la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nEcha un vistazo a [la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar el Airlock de Plaato?", - "title": "Configurar el webhook de Plaato" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/fr.json b/homeassistant/components/plaato/.translations/fr.json deleted file mode 100644 index d710886b84b..00000000000 --- a/homeassistant/components/plaato/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages de Plaato Airlock.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans Plaato Airlock. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir installer le Plaato Airlock ?", - "title": "Configurer le Webhook Plaato" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/hr.json b/homeassistant/components/plaato/.translations/hr.json deleted file mode 100644 index 680571040b1..00000000000 --- a/homeassistant/components/plaato/.translations/hr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostupan s interneta za primanje poruka od Plaato Airlocka.", - "one_instance_allowed": "Potrebna je samo jedna instanca." - }, - "create_entry": { - "default": "Za slanje doga\u0111aja kod ku\u0107nog pomo\u0107nika, morat \u0107ete postaviti zna\u010dajku webhook u Plaato Airlock.\n\nIspunite sljede\u0107e informacije:\n\n-URL: ' {webhook_url} '\n-Metoda: POST\n\nZa dodatne detalje pogledajte [dokumentaciju] ({docs_url})." - }, - "step": { - "user": { - "description": "Jeste li sigurni da \u017eelite postaviti Plaato Airlock?", - "title": "Postavljanje Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/it.json b/homeassistant/components/plaato/.translations/it.json deleted file mode 100644 index 7e7697a339b..00000000000 --- a/homeassistant/components/plaato/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Plaato Airlook.", - "one_instance_allowed": "\u00c8 necessaria solo una singola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai impostare la funzione webhook in Plaato Airlock. \n\n Inserisci le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Metodo: POST \n\n Vedi [la documentazione]({docs_url}) per ulteriori dettagli." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare Plaato Airlock?", - "title": "Configura il webhook di Plaato" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/ko.json b/homeassistant/components/plaato/.translations/ko.json deleted file mode 100644 index 619fdcf736f..00000000000 --- a/homeassistant/components/plaato/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Plaato Airlock \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Plaato Airlock \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4.\n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Plaato Airlock \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Plaato Webhook \uc124\uc815" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/lb.json b/homeassistant/components/plaato/.translations/lb.json deleted file mode 100644 index 62caa58fe26..00000000000 --- a/homeassistant/components/plaato/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Plaato Airlock Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am Plaato Airlock ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Plaato Airlock anzeriichten?", - "title": "Plaato Webhook ariichten" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/nl.json b/homeassistant/components/plaato/.translations/nl.json deleted file mode 100644 index 7711fe98a18..00000000000 --- a/homeassistant/components/plaato/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant-instantie moet via internet toegankelijk zijn om berichten van de Plateo Airlock te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Om evenementen naar de Home Assistant te sturen, moet u de webhook-functie instellen in Plaato Airlock. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n\n Zie [de documentatie] ( {docs_url} ) voor meer informatie." - }, - "step": { - "user": { - "description": "Weet u zeker dat u de Plaato-airlock wilt instellen?", - "title": "Stel de Plaato Webhook in" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/nn.json b/homeassistant/components/plaato/.translations/nn.json deleted file mode 100644 index 750e14b1dae..00000000000 --- a/homeassistant/components/plaato/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/no.json b/homeassistant/components/plaato/.translations/no.json deleted file mode 100644 index 0de31a35eb2..00000000000 --- a/homeassistant/components/plaato/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra Plaato Airlock.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i Plaato Airlock. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil sette opp Plato Airlock?", - "title": "Sett opp Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/pl.json b/homeassistant/components/plaato/.translations/pl.json deleted file mode 100644 index dc931b6bd8c..00000000000 --- a/homeassistant/components/plaato/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z Plaato Airlock.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 webhook w Plaato Airlock. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Airlock Plaato?", - "title": "Konfiguracja Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/pt-BR.json b/homeassistant/components/plaato/.translations/pt-BR.json deleted file mode 100644 index a1903fa1075..00000000000 --- a/homeassistant/components/plaato/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia Home Assistant precisa estar acess\u00edvel pela internet para receber mensagens da Plaato Airlock.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso de webhook na Plaato Airlock.\n\nPreencha as seguintes informa\u00e7\u00f5es:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nVeja [a documenta\u00e7\u00e3o]({docs_url}) para mais detalhes." - }, - "step": { - "user": { - "description": "Tens a certeza que queres montar a Plaato Airlock?", - "title": "Configurar o Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/ru.json b/homeassistant/components/plaato/.translations/ru.json deleted file mode 100644 index fc1255ed9ce..00000000000 --- a/homeassistant/components/plaato/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Plaato Airlock.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Plaato Airlock.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Plaato Airlock?", - "title": "Plaato Airlock" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/sl.json b/homeassistant/components/plaato/.translations/sl.json deleted file mode 100644 index b30bcb66d2e..00000000000 --- a/homeassistant/components/plaato/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopen prek interneta, da boste lahko prejemali Plaato sporo\u010dila.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "\u010ce \u017eelite dogodke poslati Home Assistant-u, morate v Plaato Airlock-u nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za podrobnosti glejte [dokumentacija] ( {docs_url} )." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Plaato Webhook?", - "title": "Nastavite Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/sv.json b/homeassistant/components/plaato/.translations/sv.json deleted file mode 100644 index 9b76bc744e6..00000000000 --- a/homeassistant/components/plaato/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig genom internet f\u00f6r att ta emot meddelanden ifr\u00e5n Plaato Airlock.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i Plaato Airlock.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) f\u00f6r mer information." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Plaato Webhook?", - "title": "Konfigurera Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/zh-Hant.json b/homeassistant/components/plaato/.translations/zh-Hant.json deleted file mode 100644 index 1bf211476d8..00000000000 --- a/homeassistant/components/plaato/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Plaato Airlock \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Plaato Airlock \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Plaato Airlock\uff1f", - "title": "\u8a2d\u5b9a Plaato Webhook" - } - }, - "title": "Plaato Airlock" - } -} \ No newline at end of file diff --git a/homeassistant/components/plaato/__init__.py b/homeassistant/components/plaato/__init__.py index 0dd57f75812..b365c7e0081 100644 --- a/homeassistant/components/plaato/__init__.py +++ b/homeassistant/components/plaato/__init__.py @@ -127,4 +127,4 @@ async def handle_webhook(hass, webhook_id, request): def _device_id(data): """Return name of device sensor.""" - return "{}_{}".format(data.get(ATTR_DEVICE_NAME), data.get(ATTR_DEVICE_ID)) + return f"{data.get(ATTR_DEVICE_NAME)}_{data.get(ATTR_DEVICE_ID)}" diff --git a/homeassistant/components/plaato/manifest.json b/homeassistant/components/plaato/manifest.json index 9655b91b13e..29e104b13ed 100644 --- a/homeassistant/components/plaato/manifest.json +++ b/homeassistant/components/plaato/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/plaato", "dependencies": ["webhook"], - "codeowners": ["@JohNan"], - "requirements": [] + "codeowners": ["@JohNan"] } diff --git a/homeassistant/components/plaato/sensor.py b/homeassistant/components/plaato/sensor.py index 34a2a1a42b6..07b0453fca6 100644 --- a/homeassistant/components/plaato/sensor.py +++ b/homeassistant/components/plaato/sensor.py @@ -157,6 +157,8 @@ class PlaatoSensor(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - f"{PLAATO_DOMAIN}_{self.unique_id}", self.async_schedule_update_ha_state + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + f"{PLAATO_DOMAIN}_{self.unique_id}", self.async_write_ha_state + ) ) diff --git a/homeassistant/components/plaato/strings.json b/homeassistant/components/plaato/strings.json index ee99da0c8b1..f78943ca941 100644 --- a/homeassistant/components/plaato/strings.json +++ b/homeassistant/components/plaato/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Plaato Airlock", "step": { "user": { "title": "Set up the Plaato Webhook", @@ -15,4 +14,4 @@ "default": "To send events to Home Assistant, you will need to setup the webhook feature in Plaato Airlock.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/plaato/translations/bg.json b/homeassistant/components/plaato/translations/bg.json new file mode 100644 index 00000000000..d8339e1100a --- /dev/null +++ b/homeassistant/components/plaato/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Plaato Airlock.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Plaato Airlock. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Plaato Airlock?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/ca.json b/homeassistant/components/plaato/translations/ca.json new file mode 100644 index 00000000000..a0e610e4527 --- /dev/null +++ b/homeassistant/components/plaato/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Plaato Airlock.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de Plaato Airlock.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar Plaato Airlock?", + "title": "Configuraci\u00f3 del Webhook de Plaato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/da.json b/homeassistant/components/plaato/translations/da.json new file mode 100644 index 00000000000..88b047a2a45 --- /dev/null +++ b/homeassistant/components/plaato/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage meddelelser fra Plaato Airlock.", + "one_instance_allowed": "Kun en enkelt instans er n\u00f8dvendig." + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i Plaato Airlock.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Plaato Airlock?", + "title": "Konfigurer Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/de.json b/homeassistant/components/plaato/translations/de.json new file mode 100644 index 00000000000..ec4c3b87d9c --- /dev/null +++ b/homeassistant/components/plaato/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Deine Home-Assistant-Instanz muss aus dem Internet erreichbar sein, um Nachrichten von Plaato Airlock zu erhalten.", + "one_instance_allowed": "Nur eine einzige Instanz ist notwendig." + }, + "create_entry": { + "default": "Um Ereignisse an Home Assistant zu senden, muss das Webhook Feature in Plaato Airlock konfiguriert werden.\n\n F\u00fcge die folgenden Informationen ein: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n \n Weitere Informationen finden sich in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "Soll Plaato Airlock wirklich eingerichtet werden?", + "title": "Plaato Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/en.json b/homeassistant/components/plaato/translations/en.json new file mode 100644 index 00000000000..42d37f042fb --- /dev/null +++ b/homeassistant/components/plaato/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Plaato Airlock.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup the webhook feature in Plaato Airlock.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up the Plaato Airlock?", + "title": "Set up the Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/es-419.json b/homeassistant/components/plaato/translations/es-419.json new file mode 100644 index 00000000000..96dae84b853 --- /dev/null +++ b/homeassistant/components/plaato/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes de Plaato Airlock.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en Plaato Airlock. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n\n Consulte [la documentaci\u00f3n]({docs_url}) para obtener m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1 seguro de que deseas configurar Plaato Airlock?", + "title": "Configurar el Webhook de Plaato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/es.json b/homeassistant/components/plaato/translations/es.json new file mode 100644 index 00000000000..90ad53085f1 --- /dev/null +++ b/homeassistant/components/plaato/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Plaato Airlock.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en Plaato Airlock.\n\nCompleta la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nEcha un vistazo a [la documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar el Airlock de Plaato?", + "title": "Configurar el webhook de Plaato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/fr.json b/homeassistant/components/plaato/translations/fr.json new file mode 100644 index 00000000000..79ea8c05b49 --- /dev/null +++ b/homeassistant/components/plaato/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages de Plaato Airlock.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans Plaato Airlock. \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir installer le Plaato Airlock ?", + "title": "Configurer le Webhook Plaato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/hr.json b/homeassistant/components/plaato/translations/hr.json new file mode 100644 index 00000000000..b1ab00551e4 --- /dev/null +++ b/homeassistant/components/plaato/translations/hr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostupan s interneta za primanje poruka od Plaato Airlocka.", + "one_instance_allowed": "Potrebna je samo jedna instanca." + }, + "create_entry": { + "default": "Za slanje doga\u0111aja kod ku\u0107nog pomo\u0107nika, morat \u0107ete postaviti zna\u010dajku webhook u Plaato Airlock.\n\nIspunite sljede\u0107e informacije:\n\n-URL: ' {webhook_url} '\n-Metoda: POST\n\nZa dodatne detalje pogledajte [dokumentaciju] ({docs_url})." + }, + "step": { + "user": { + "description": "Jeste li sigurni da \u017eelite postaviti Plaato Airlock?", + "title": "Postavljanje Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/it.json b/homeassistant/components/plaato/translations/it.json new file mode 100644 index 00000000000..2c6235cf17c --- /dev/null +++ b/homeassistant/components/plaato/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Plaato Airlook.", + "one_instance_allowed": "\u00c8 necessaria solo una singola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai impostare la funzione webhook in Plaato Airlock. \n\n Inserisci le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Metodo: POST \n\n Vedi [la documentazione]({docs_url}) per ulteriori dettagli." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare Plaato Airlock?", + "title": "Configura il webhook di Plaato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/ko.json b/homeassistant/components/plaato/translations/ko.json new file mode 100644 index 00000000000..4cb94a81a72 --- /dev/null +++ b/homeassistant/components/plaato/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Plaato Airlock \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Plaato Airlock \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4.\n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n \n \uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Plaato Airlock \uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Plaato Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/lb.json b/homeassistant/components/plaato/translations/lb.json new file mode 100644 index 00000000000..5bded3676db --- /dev/null +++ b/homeassistant/components/plaato/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Plaato Airlock Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am Plaato Airlock ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Plaato Airlock anzeriichten?", + "title": "Plaato Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/nl.json b/homeassistant/components/plaato/translations/nl.json new file mode 100644 index 00000000000..4d46fb9265c --- /dev/null +++ b/homeassistant/components/plaato/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant-instantie moet via internet toegankelijk zijn om berichten van de Plateo Airlock te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Om evenementen naar de Home Assistant te sturen, moet u de webhook-functie instellen in Plaato Airlock. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n\n Zie [de documentatie] ( {docs_url} ) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet u zeker dat u de Plaato-airlock wilt instellen?", + "title": "Stel de Plaato Webhook in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/nn.json b/homeassistant/components/plaato/translations/nn.json new file mode 100644 index 00000000000..5492aabed83 --- /dev/null +++ b/homeassistant/components/plaato/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Plaato Airlock" +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/no.json b/homeassistant/components/plaato/translations/no.json new file mode 100644 index 00000000000..4f771b7b963 --- /dev/null +++ b/homeassistant/components/plaato/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta meldinger fra Plaato Airlock.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i Plaato Airlock. \n\n Fyll ut f\u00f8lgende informasjon: \n\n - URL: `{webhook_url}` \n - Metode: POST \n\n Se [dokumentasjonen]({docs_url}) for ytterligere detaljer." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp Plato Airlock?", + "title": "Sett opp Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/pl.json b/homeassistant/components/plaato/translations/pl.json new file mode 100644 index 00000000000..4edc54e357e --- /dev/null +++ b/homeassistant/components/plaato/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z Plaato Airlock.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 webhook w Plaato Airlock. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Airlock Plaato?", + "title": "Konfiguracja Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/pt-BR.json b/homeassistant/components/plaato/translations/pt-BR.json new file mode 100644 index 00000000000..d03486ceb31 --- /dev/null +++ b/homeassistant/components/plaato/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia Home Assistant precisa estar acess\u00edvel pela internet para receber mensagens da Plaato Airlock.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso de webhook na Plaato Airlock.\n\nPreencha as seguintes informa\u00e7\u00f5es:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nVeja [a documenta\u00e7\u00e3o]({docs_url}) para mais detalhes." + }, + "step": { + "user": { + "description": "Tens a certeza que queres montar a Plaato Airlock?", + "title": "Configurar o Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/ru.json b/homeassistant/components/plaato/translations/ru.json new file mode 100644 index 00000000000..2e6e876e896 --- /dev/null +++ b/homeassistant/components/plaato/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Plaato Airlock.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Plaato Airlock.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Plaato Airlock?", + "title": "Plaato Airlock" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/sl.json b/homeassistant/components/plaato/translations/sl.json new file mode 100644 index 00000000000..63707d54c6c --- /dev/null +++ b/homeassistant/components/plaato/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopen prek interneta, da boste lahko prejemali Plaato sporo\u010dila.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "\u010ce \u017eelite dogodke poslati Home Assistant-u, morate v Plaato Airlock-u nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za podrobnosti glejte [dokumentacija] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Plaato Webhook?", + "title": "Nastavite Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/translations/sv.json b/homeassistant/components/plaato/translations/sv.json new file mode 100644 index 00000000000..e349d5fba28 --- /dev/null +++ b/homeassistant/components/plaato/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara \u00e5tkomlig genom internet f\u00f6r att ta emot meddelanden ifr\u00e5n Plaato Airlock.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i Plaato Airlock.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) f\u00f6r mer information." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Plaato Webhook?", + "title": "Konfigurera Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plaato/.translations/zh-Hans.json b/homeassistant/components/plaato/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/plaato/.translations/zh-Hans.json rename to homeassistant/components/plaato/translations/zh-Hans.json diff --git a/homeassistant/components/plaato/translations/zh-Hant.json b/homeassistant/components/plaato/translations/zh-Hant.json new file mode 100644 index 00000000000..4ad08ae6805 --- /dev/null +++ b/homeassistant/components/plaato/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Plaato Airlock \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Plaato Airlock \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Plaato Airlock\uff1f", + "title": "\u8a2d\u5b9a Plaato Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plant/__init__.py b/homeassistant/components/plant/__init__.py index 30542db5e23..5364fbf2e21 100644 --- a/homeassistant/components/plant/__init__.py +++ b/homeassistant/components/plant/__init__.py @@ -10,6 +10,7 @@ from homeassistant.components.recorder.util import execute, session_scope from homeassistant.const import ( ATTR_TEMPERATURE, ATTR_UNIT_OF_MEASUREMENT, + CONDUCTIVITY, CONF_SENSORS, STATE_OK, STATE_PROBLEM, @@ -147,7 +148,7 @@ class Plant(Entity): "max": CONF_MAX_MOISTURE, }, READING_CONDUCTIVITY: { - ATTR_UNIT_OF_MEASUREMENT: "µS/cm", + ATTR_UNIT_OF_MEASUREMENT: CONDUCTIVITY, "min": CONF_MIN_CONDUCTIVITY, "max": CONF_MAX_CONDUCTIVITY, }, @@ -161,9 +162,9 @@ class Plant(Entity): def __init__(self, name, config): """Initialize the Plant component.""" self._config = config - self._sensormap = dict() - self._readingmap = dict() - self._unit_of_measurement = dict() + self._sensormap = {} + self._readingmap = {} + self._unit_of_measurement = {} for reading, entity_id in config["sensors"].items(): self._sensormap[entity_id] = reading self._readingmap[reading] = entity_id @@ -255,7 +256,7 @@ class Plant(Entity): self._state = STATE_OK self._problems = PROBLEM_NONE _LOGGER.debug("New data processed") - self.async_schedule_update_ha_state() + self.async_write_ha_state() def _check_min(self, sensor_name, value, params): """If configured, check the value against the defined minimum value.""" @@ -322,7 +323,7 @@ class Plant(Entity): except ValueError: pass _LOGGER.debug("Initializing from database completed") - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def should_poll(self): @@ -371,7 +372,7 @@ class DailyHistory: """Create new DailyHistory with a maximum length of the history.""" self.max_length = max_length self._days = None - self._max_dict = dict() + self._max_dict = {} self.max = None def add_measurement(self, value, timestamp=None): diff --git a/homeassistant/components/plant/manifest.json b/homeassistant/components/plant/manifest.json index f0ff20f3759..7318b222e45 100644 --- a/homeassistant/components/plant/manifest.json +++ b/homeassistant/components/plant/manifest.json @@ -2,8 +2,6 @@ "domain": "plant", "name": "Plant Monitor", "documentation": "https://www.home-assistant.io/integrations/plant", - "requirements": [], - "dependencies": [], "after_dependencies": ["recorder"], "codeowners": ["@ChristianKuehnel"], "quality_scale": "internal" diff --git a/homeassistant/components/plant/strings.json b/homeassistant/components/plant/strings.json new file mode 100644 index 00000000000..2478564ca88 --- /dev/null +++ b/homeassistant/components/plant/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Plant Monitor", + "state": { + "_": { + "ok": "[%key:component::binary_sensor::state::problem::off%]", + "problem": "[%key:component::binary_sensor::state::problem::on%]" + } + } +} diff --git a/homeassistant/components/plant/translations/af.json b/homeassistant/components/plant/translations/af.json new file mode 100644 index 00000000000..9f008010c15 --- /dev/null +++ b/homeassistant/components/plant/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Probleem" + } + }, + "title": "Plant" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ar.json b/homeassistant/components/plant/translations/ar.json new file mode 100644 index 00000000000..d506ffb24f9 --- /dev/null +++ b/homeassistant/components/plant/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u0623\u0648\u0643\u064a", + "problem": "\u0645\u0634\u0643\u0644\u0629" + } + }, + "title": "\u0646\u0628\u062a\u0629" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/bg.json b/homeassistant/components/plant/translations/bg.json new file mode 100644 index 00000000000..8d386036f74 --- /dev/null +++ b/homeassistant/components/plant/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u041e\u041a", + "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c" + } + }, + "title": "\u0420\u0430\u0441\u0442\u0435\u043d\u0438\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/bs.json b/homeassistant/components/plant/translations/bs.json new file mode 100644 index 00000000000..ea6749b360b --- /dev/null +++ b/homeassistant/components/plant/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem" + } + }, + "title": "Biljka" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ca.json b/homeassistant/components/plant/translations/ca.json new file mode 100644 index 00000000000..7a2a8d4f616 --- /dev/null +++ b/homeassistant/components/plant/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Correcte", + "problem": "Problema" + } + }, + "title": "Planta" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/cs.json b/homeassistant/components/plant/translations/cs.json new file mode 100644 index 00000000000..e0fe7b0f6cd --- /dev/null +++ b/homeassistant/components/plant/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "V po\u0159\u00e1dku", + "problem": "Probl\u00e9m" + } + }, + "title": "Rostlina" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/cy.json b/homeassistant/components/plant/translations/cy.json new file mode 100644 index 00000000000..c9a562fa374 --- /dev/null +++ b/homeassistant/components/plant/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Iawn", + "problem": "Problem" + } + }, + "title": "Planhigion" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/da.json b/homeassistant/components/plant/translations/da.json new file mode 100644 index 00000000000..ba73394c50d --- /dev/null +++ b/homeassistant/components/plant/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem" + } + }, + "title": "Plante" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/de.json b/homeassistant/components/plant/translations/de.json new file mode 100644 index 00000000000..27447a8d3cf --- /dev/null +++ b/homeassistant/components/plant/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem" + } + }, + "title": "Pflanze" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/el.json b/homeassistant/components/plant/translations/el.json new file mode 100644 index 00000000000..9d8fb65979b --- /dev/null +++ b/homeassistant/components/plant/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9", + "problem": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1" + } + }, + "title": "\u03a7\u03bb\u03c9\u03c1\u03af\u03b4\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/en.json b/homeassistant/components/plant/translations/en.json new file mode 100644 index 00000000000..775cac280ed --- /dev/null +++ b/homeassistant/components/plant/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem" + } + }, + "title": "Plant Monitor" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/es-419.json b/homeassistant/components/plant/translations/es-419.json new file mode 100644 index 00000000000..957a07a1d51 --- /dev/null +++ b/homeassistant/components/plant/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problema" + } + }, + "title": "Planta" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/es.json b/homeassistant/components/plant/translations/es.json new file mode 100644 index 00000000000..957a07a1d51 --- /dev/null +++ b/homeassistant/components/plant/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problema" + } + }, + "title": "Planta" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/et.json b/homeassistant/components/plant/translations/et.json new file mode 100644 index 00000000000..4e41139f3c2 --- /dev/null +++ b/homeassistant/components/plant/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Probleem" + } + }, + "title": "Taim" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/eu.json b/homeassistant/components/plant/translations/eu.json new file mode 100644 index 00000000000..0ddb04bd82f --- /dev/null +++ b/homeassistant/components/plant/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Itzalita", + "problem": "Arazoa" + } + }, + "title": "Landarea" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/fa.json b/homeassistant/components/plant/translations/fa.json new file mode 100644 index 00000000000..ad27f3cc493 --- /dev/null +++ b/homeassistant/components/plant/translations/fa.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "ok": "\u062e\u0648\u0628", + "problem": "\u0645\u0634\u06a9\u0644" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/fi.json b/homeassistant/components/plant/translations/fi.json new file mode 100644 index 00000000000..f626178235a --- /dev/null +++ b/homeassistant/components/plant/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Ok", + "problem": "Ongelma" + } + }, + "title": "Kasvi" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/fr.json b/homeassistant/components/plant/translations/fr.json new file mode 100644 index 00000000000..7ad48eea522 --- /dev/null +++ b/homeassistant/components/plant/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Probl\u00e8me" + } + }, + "title": "Plante" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/gsw.json b/homeassistant/components/plant/translations/gsw.json new file mode 100644 index 00000000000..27447a8d3cf --- /dev/null +++ b/homeassistant/components/plant/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem" + } + }, + "title": "Pflanze" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/he.json b/homeassistant/components/plant/translations/he.json new file mode 100644 index 00000000000..0263e4da389 --- /dev/null +++ b/homeassistant/components/plant/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u05ea\u05e7\u05d9\u05df", + "problem": "\u05d1\u05e2\u05d9\u05d4" + } + }, + "title": "\u05e6\u05de\u05d7" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/hi.json b/homeassistant/components/plant/translations/hi.json new file mode 100644 index 00000000000..0f3a011f53f --- /dev/null +++ b/homeassistant/components/plant/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "ok": "\u0920\u0940\u0915 \u0939\u0948", + "problem": "\u0938\u092e\u0938\u094d\u092f\u093e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/hr.json b/homeassistant/components/plant/translations/hr.json new file mode 100644 index 00000000000..69003710e38 --- /dev/null +++ b/homeassistant/components/plant/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "u redu", + "problem": "Problem" + } + }, + "title": "Biljka" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/hu.json b/homeassistant/components/plant/translations/hu.json new file mode 100644 index 00000000000..3206ef7064d --- /dev/null +++ b/homeassistant/components/plant/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Probl\u00e9ma" + } + }, + "title": "N\u00f6v\u00e9ny" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/hy.json b/homeassistant/components/plant/translations/hy.json new file mode 100644 index 00000000000..a37cc887150 --- /dev/null +++ b/homeassistant/components/plant/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u053c\u0561\u057e", + "problem": "\u053d\u0576\u0564\u056b\u0580" + } + }, + "title": "\u0533\u0578\u0580\u056e\u0561\u0580\u0561\u0576" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/id.json b/homeassistant/components/plant/translations/id.json new file mode 100644 index 00000000000..519964be278 --- /dev/null +++ b/homeassistant/components/plant/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Masalah" + } + }, + "title": "Tanaman" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/is.json b/homeassistant/components/plant/translations/is.json new file mode 100644 index 00000000000..508bd995422 --- /dev/null +++ b/homeassistant/components/plant/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u00cd lagi", + "problem": "Vandam\u00e1l" + } + }, + "title": "Planta" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/it.json b/homeassistant/components/plant/translations/it.json new file mode 100644 index 00000000000..631af83589d --- /dev/null +++ b/homeassistant/components/plant/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problema" + } + }, + "title": "Monitoraggio pianta" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ja.json b/homeassistant/components/plant/translations/ja.json new file mode 100644 index 00000000000..01708fffd87 --- /dev/null +++ b/homeassistant/components/plant/translations/ja.json @@ -0,0 +1,7 @@ +{ + "state": { + "_": { + "ok": "OK" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ko.json b/homeassistant/components/plant/translations/ko.json new file mode 100644 index 00000000000..274bf0de255 --- /dev/null +++ b/homeassistant/components/plant/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\ubb38\uc81c\uc5c6\uc74c", + "problem": "\ubb38\uc81c\uc788\uc74c" + } + }, + "title": "\uc2dd\ubb3c" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/lb.json b/homeassistant/components/plant/translations/lb.json new file mode 100644 index 00000000000..f1a82fca3fc --- /dev/null +++ b/homeassistant/components/plant/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem" + } + }, + "title": "Planz" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/lv.json b/homeassistant/components/plant/translations/lv.json new file mode 100644 index 00000000000..9c64f5c36c8 --- /dev/null +++ b/homeassistant/components/plant/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Labi", + "problem": "Probl\u0113ma" + } + }, + "title": "Augs" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/nb.json b/homeassistant/components/plant/translations/nb.json new file mode 100644 index 00000000000..c8f9e3e1d44 --- /dev/null +++ b/homeassistant/components/plant/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "", + "problem": "Problem" + } + }, + "title": "Plante" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/nl.json b/homeassistant/components/plant/translations/nl.json new file mode 100644 index 00000000000..9f008010c15 --- /dev/null +++ b/homeassistant/components/plant/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Probleem" + } + }, + "title": "Plant" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/nn.json b/homeassistant/components/plant/translations/nn.json new file mode 100644 index 00000000000..ded8128524a --- /dev/null +++ b/homeassistant/components/plant/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Ok", + "problem": "Problem" + } + }, + "title": "Plante" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/no.json b/homeassistant/components/plant/translations/no.json new file mode 100644 index 00000000000..0a08a5eaed4 --- /dev/null +++ b/homeassistant/components/plant/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Plantemonitor" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/pl.json b/homeassistant/components/plant/translations/pl.json new file mode 100644 index 00000000000..5c4b7378018 --- /dev/null +++ b/homeassistant/components/plant/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "ok", + "problem": "problem" + } + }, + "title": "Ro\u015blina" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/pt-BR.json b/homeassistant/components/plant/translations/pt-BR.json new file mode 100644 index 00000000000..09b88d2578b --- /dev/null +++ b/homeassistant/components/plant/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Ok", + "problem": "Problema" + } + }, + "title": "Planta" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/pt.json b/homeassistant/components/plant/translations/pt.json new file mode 100644 index 00000000000..4f5b0caf86f --- /dev/null +++ b/homeassistant/components/plant/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problema" + } + }, + "title": "Monitor de plantas" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ro.json b/homeassistant/components/plant/translations/ro.json new file mode 100644 index 00000000000..b10db0cfd2d --- /dev/null +++ b/homeassistant/components/plant/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Problem\u0103" + } + }, + "title": "Plant\u0103" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ru.json b/homeassistant/components/plant/translations/ru.json new file mode 100644 index 00000000000..7836ecd7762 --- /dev/null +++ b/homeassistant/components/plant/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u041e\u041a", + "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430" + } + }, + "title": "\u0420\u0430\u0441\u0442\u0435\u043d\u0438\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/sk.json b/homeassistant/components/plant/translations/sk.json new file mode 100644 index 00000000000..91644ef57b1 --- /dev/null +++ b/homeassistant/components/plant/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Probl\u00e9m" + } + }, + "title": "Rastlina" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/sl.json b/homeassistant/components/plant/translations/sl.json new file mode 100644 index 00000000000..e57dc007343 --- /dev/null +++ b/homeassistant/components/plant/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "Te\u017eava" + } + }, + "title": "Plant" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/sv.json b/homeassistant/components/plant/translations/sv.json new file mode 100644 index 00000000000..60d3a903063 --- /dev/null +++ b/homeassistant/components/plant/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Ok", + "problem": "Problem" + } + }, + "title": "V\u00e4xt" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/ta.json b/homeassistant/components/plant/translations/ta.json new file mode 100644 index 00000000000..21e7dce974b --- /dev/null +++ b/homeassistant/components/plant/translations/ta.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "ok": "\u0b9a\u0bb0\u0bbf", + "problem": "\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb2\u0bcd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/te.json b/homeassistant/components/plant/translations/te.json new file mode 100644 index 00000000000..983d9cf3fb4 --- /dev/null +++ b/homeassistant/components/plant/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u0c05\u0c32\u0c3e\u0c17\u0c47", + "problem": "\u0c38\u0c2e\u0c38\u0c4d\u0c2f" + } + }, + "title": "\u0c2e\u0c4a\u0c15\u0c4d\u0c15" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/th.json b/homeassistant/components/plant/translations/th.json new file mode 100644 index 00000000000..79d3755c7ea --- /dev/null +++ b/homeassistant/components/plant/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "problem": "\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32" + } + }, + "title": "\u0e1e\u0e37\u0e0a" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/tr.json b/homeassistant/components/plant/translations/tr.json new file mode 100644 index 00000000000..0fe07001b3b --- /dev/null +++ b/homeassistant/components/plant/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "Tamam", + "problem": "Problem" + } + }, + "title": "Bitki" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/uk.json b/homeassistant/components/plant/translations/uk.json new file mode 100644 index 00000000000..3204c42a714 --- /dev/null +++ b/homeassistant/components/plant/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u0422\u0410\u041a", + "problem": "\u0425\u0430\u043b\u0435\u043f\u0430" + } + }, + "title": "\u0420\u043e\u0441\u043b\u0438\u043d\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/vi.json b/homeassistant/components/plant/translations/vi.json new file mode 100644 index 00000000000..a0638570123 --- /dev/null +++ b/homeassistant/components/plant/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "OK", + "problem": "V\u1ea5n \u0111\u1ec1" + } + }, + "title": "C\u00e2y tr\u1ed3ng" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/zh-Hans.json b/homeassistant/components/plant/translations/zh-Hans.json new file mode 100644 index 00000000000..e27ac724bf3 --- /dev/null +++ b/homeassistant/components/plant/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u6b63\u5e38", + "problem": "\u5f02\u5e38" + } + }, + "title": "\u690d\u7269" +} \ No newline at end of file diff --git a/homeassistant/components/plant/translations/zh-Hant.json b/homeassistant/components/plant/translations/zh-Hant.json new file mode 100644 index 00000000000..af06d09eef6 --- /dev/null +++ b/homeassistant/components/plant/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "ok": "\u5065\u5eb7", + "problem": "\u7570\u5e38" + } + }, + "title": "\u690d\u7269\u76e3\u63a7" +} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/bg.json b/homeassistant/components/plex/.translations/bg.json deleted file mode 100644 index 53d15e1205e..00000000000 --- a/homeassistant/components/plex/.translations/bg.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u0412\u0441\u0438\u0447\u043a\u0438 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441\u044a\u0440\u0432\u044a\u0440\u0438 \u0432\u0435\u0447\u0435 \u0441\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0438", - "already_configured": "\u0422\u043e\u0437\u0438 Plex \u0441\u044a\u0440\u0432\u044a\u0440 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "already_in_progress": "Plex \u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430", - "invalid_import": "\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0430\u043d\u0430\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430", - "non-interactive": "\u041d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0438\u043c\u043f\u043e\u0440\u0442", - "token_request_timeout": "\u0418\u0437\u0442\u0435\u0447\u0435 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f", - "unknown": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0440\u0430\u0434\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" - }, - "error": { - "faulty_credentials": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f", - "no_servers": "\u041d\u044f\u043c\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0438, \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441 \u0442\u043e\u0437\u0438 \u0430\u043a\u0430\u0443\u043d\u0442", - "not_found": "Plex \u0441\u044a\u0440\u0432\u044a\u0440\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d" - }, - "step": { - "select_server": { - "data": { - "server": "\u0421\u044a\u0440\u0432\u044a\u0440" - }, - "description": "\u041d\u0430\u043b\u0438\u0447\u043d\u0438 \u0441\u0430 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u044a\u0440\u0432\u044a\u0440\u0430, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0435\u0434\u0438\u043d:", - "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 Plex \u0441\u044a\u0440\u0432\u044a\u0440" - }, - "start_website_auth": { - "description": "\u041f\u0440\u043e\u0434\u044a\u043b\u0436\u0435\u0442\u0435 \u0441 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 plex.tv.", - "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 Plex \u0441\u044a\u0440\u0432\u044a\u0440" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "use_episode_art": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u0430\u043a\u0430\u0442 \u0437\u0430 \u0435\u043f\u0438\u0437\u043e\u0434\u0430" - }, - "description": "\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Plex Media Players" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/ca.json b/homeassistant/components/plex/.translations/ca.json deleted file mode 100644 index 46b7759a04d..00000000000 --- a/homeassistant/components/plex/.translations/ca.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Tots els servidors enlla\u00e7ats ja estan configurats", - "already_configured": "Aquest servidor Plex ja est\u00e0 configurat", - "already_in_progress": "S\u2019est\u00e0 configurant Plex", - "invalid_import": "La configuraci\u00f3 importada \u00e9s inv\u00e0lida", - "non-interactive": "Importaci\u00f3 no interactiva", - "token_request_timeout": "S'ha acabat el temps d'espera durant l'obtenci\u00f3 del testimoni.", - "unknown": "Ha fallat per motiu desconegut" - }, - "error": { - "faulty_credentials": "Ha fallat l'autoritzaci\u00f3", - "no_servers": "No hi ha servidors enlla\u00e7ats amb el compte", - "not_found": "No s'ha trobat el servidor Plex" - }, - "step": { - "select_server": { - "data": { - "server": "Servidor" - }, - "description": "Hi ha diversos servidors disponibles, selecciona'n un:", - "title": "Selecciona servidor Plex" - }, - "start_website_auth": { - "description": "Continua l'autoritzaci\u00f3 a plex.tv.", - "title": "Connexi\u00f3 amb el servidor Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignora els nous usuaris gestionats/compartits", - "monitored_users": "Usuaris monitoritzats", - "use_episode_art": "Utilitza imatges de l'episodi" - }, - "description": "Opcions dels reproductors multim\u00e8dia Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/da.json b/homeassistant/components/plex/.translations/da.json deleted file mode 100644 index 7bfdda60b37..00000000000 --- a/homeassistant/components/plex/.translations/da.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle linkede servere er allerede konfigureret", - "already_configured": "Denne Plex-server er allerede konfigureret", - "already_in_progress": "Plex konfigureres", - "invalid_import": "Importeret konfiguration er ugyldig", - "non-interactive": "Ikke-interaktiv import", - "token_request_timeout": "Timeout ved hentning af token", - "unknown": "Mislykkedes af ukendt \u00e5rsag" - }, - "error": { - "faulty_credentials": "Godkendelse mislykkedes", - "no_servers": "Ingen servere knyttet til konto", - "not_found": "Plex-server ikke fundet" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "Flere servere til r\u00e5dighed, v\u00e6lg en:", - "title": "V\u00e6lg Plex-server" - }, - "start_website_auth": { - "description": "Forts\u00e6t for at godkende p\u00e5 plex.tv.", - "title": "Forbind Plex-server" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignorer nye administrerede/delte brugere", - "monitored_users": "Monitorerede brugere", - "use_episode_art": "Brug episodekunst" - }, - "description": "Indstillinger for Plex-medieafspillere" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/de.json b/homeassistant/components/plex/.translations/de.json deleted file mode 100644 index c86ffb97d3a..00000000000 --- a/homeassistant/components/plex/.translations/de.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle verkn\u00fcpften Server sind bereits konfiguriert", - "already_configured": "Dieser Plex-Server ist bereits konfiguriert", - "already_in_progress": "Plex wird konfiguriert", - "invalid_import": "Die importierte Konfiguration ist ung\u00fcltig", - "non-interactive": "Nicht interaktiver Import", - "token_request_timeout": "Zeit\u00fcberschreitung beim Erhalt des Tokens", - "unknown": "Aus unbekanntem Grund fehlgeschlagen" - }, - "error": { - "faulty_credentials": "Autorisation fehlgeschlagen", - "no_servers": "Keine Server sind mit dem Konto verbunden", - "not_found": "Plex-Server nicht gefunden" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "Mehrere Server verf\u00fcgbar, w\u00e4hle einen aus:", - "title": "Plex-Server ausw\u00e4hlen" - }, - "start_website_auth": { - "description": "Weiter zur Autorisierung unter plex.tv.", - "title": "Plex Server verbinden" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignorieren neuer verwalteter/freigegebener Benutzer", - "monitored_users": "\u00dcberwachte Benutzer", - "use_episode_art": "Episode-Bilder verwenden" - }, - "description": "Optionen f\u00fcr Plex-Media-Player" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/en.json b/homeassistant/components/plex/.translations/en.json deleted file mode 100644 index b9ca9b355ee..00000000000 --- a/homeassistant/components/plex/.translations/en.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "All linked servers already configured", - "already_configured": "This Plex server is already configured", - "already_in_progress": "Plex is being configured", - "invalid_import": "Imported configuration is invalid", - "non-interactive": "Non-interactive import", - "token_request_timeout": "Timed out obtaining token", - "unknown": "Failed for unknown reason" - }, - "error": { - "faulty_credentials": "Authorization failed", - "no_servers": "No servers linked to account", - "not_found": "Plex server not found" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "Multiple servers available, select one:", - "title": "Select Plex server" - }, - "start_website_auth": { - "description": "Continue to authorize at plex.tv.", - "title": "Connect Plex server" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignore new managed/shared users", - "monitored_users": "Monitored users", - "use_episode_art": "Use episode art" - }, - "description": "Options for Plex Media Players" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/es-419.json b/homeassistant/components/plex/.translations/es-419.json deleted file mode 100644 index 0546fcd7adf..00000000000 --- a/homeassistant/components/plex/.translations/es-419.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Todos los servidores vinculados ya fueron configurados", - "already_configured": "Este servidor Plex ya est\u00e1 configurado", - "already_in_progress": "Plex se est\u00e1 configurando", - "invalid_import": "La configuraci\u00f3n importada no es v\u00e1lida", - "token_request_timeout": "Se agot\u00f3 el tiempo de espera para obtener el token", - "unknown": "Fall\u00f3 por razones desconocidas" - }, - "error": { - "faulty_credentials": "Autorizaci\u00f3n fallida", - "no_servers": "No hay servidores vinculados a la cuenta", - "not_found": "Servidor Plex no encontrado" - }, - "step": { - "select_server": { - "data": { - "server": "Servidor" - }, - "description": "M\u00faltiples servidores disponibles, seleccione uno:", - "title": "Seleccionar servidor Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "description": "Opciones para reproductores multimedia Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/es.json b/homeassistant/components/plex/.translations/es.json deleted file mode 100644 index 3de562db21d..00000000000 --- a/homeassistant/components/plex/.translations/es.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Todos los servidores vinculados ya configurados", - "already_configured": "Este servidor Plex ya est\u00e1 configurado", - "already_in_progress": "Plex se est\u00e1 configurando", - "invalid_import": "La configuraci\u00f3n importada no es v\u00e1lida", - "non-interactive": "Importaci\u00f3n no interactiva", - "token_request_timeout": "Tiempo de espera agotado para la obtenci\u00f3n del token", - "unknown": "Fall\u00f3 por razones desconocidas" - }, - "error": { - "faulty_credentials": "Error en la autorizaci\u00f3n", - "no_servers": "No hay servidores vinculados a la cuenta", - "not_found": "No se ha encontrado el servidor Plex" - }, - "step": { - "select_server": { - "data": { - "server": "Servidor" - }, - "description": "Varios servidores disponibles, seleccione uno:", - "title": "Seleccione el servidor Plex" - }, - "start_website_auth": { - "description": "Contin\u00fae en plex.tv para autorizar", - "title": "Conectar servidor Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignorar nuevos usuarios administrados/compartidos", - "monitored_users": "Usuarios monitorizados", - "use_episode_art": "Usar el arte de episodios" - }, - "description": "Opciones para reproductores multimedia Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/fr.json b/homeassistant/components/plex/.translations/fr.json deleted file mode 100644 index 354a5eaecf9..00000000000 --- a/homeassistant/components/plex/.translations/fr.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Tous les serveurs li\u00e9s sont d\u00e9j\u00e0 configur\u00e9s", - "already_configured": "Ce serveur Plex est d\u00e9j\u00e0 configur\u00e9", - "already_in_progress": "Plex en cours de configuration", - "invalid_import": "La configuration import\u00e9e est invalide", - "non-interactive": "Importation non interactive", - "token_request_timeout": "D\u00e9lai d'obtention du jeton", - "unknown": "\u00c9chec pour une raison inconnue" - }, - "error": { - "faulty_credentials": "L'autorisation \u00e0 \u00e9chou\u00e9e", - "no_servers": "Aucun serveur li\u00e9 au compte", - "not_found": "Serveur Plex introuvable" - }, - "step": { - "select_server": { - "data": { - "server": "Serveur" - }, - "description": "Plusieurs serveurs disponibles, s\u00e9lectionnez-en un:", - "title": "S\u00e9lectionnez le serveur Plex" - }, - "start_website_auth": { - "description": "Continuer d'autoriser sur plex.tv.", - "title": "Connecter un serveur Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignorer les nouveaux utilisateurs g\u00e9r\u00e9s/partag\u00e9s", - "monitored_users": "Utilisateurs surveill\u00e9s", - "use_episode_art": "Utiliser l'art de l'\u00e9pisode" - }, - "description": "Options pour lecteurs multim\u00e9dia Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/hu.json b/homeassistant/components/plex/.translations/hu.json deleted file mode 100644 index c59e31a3b95..00000000000 --- a/homeassistant/components/plex/.translations/hu.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Az \u00f6sszes \u00f6sszekapcsolt szerver m\u00e1r konfigur\u00e1lva van", - "already_configured": "Ez a Plex szerver m\u00e1r konfigur\u00e1lva van", - "already_in_progress": "A Plex konfigur\u00e1l\u00e1sa folyamatban van", - "invalid_import": "Az import\u00e1lt konfigur\u00e1ci\u00f3 \u00e9rv\u00e9nytelen", - "non-interactive": "Nem interakt\u00edv import\u00e1l\u00e1s", - "token_request_timeout": "Token k\u00e9r\u00e9sre sz\u00e1nt id\u0151 lej\u00e1rt", - "unknown": "Ismeretlen okb\u00f3l nem siker\u00fclt" - }, - "error": { - "faulty_credentials": "A hiteles\u00edt\u00e9s sikertelen", - "no_servers": "Nincs szerver csatlakoztatva a fi\u00f3khoz", - "not_found": "A Plex szerver nem tal\u00e1lhat\u00f3" - }, - "step": { - "select_server": { - "data": { - "server": "szerver" - }, - "description": "T\u00f6bb szerver el\u00e9rhet\u0151, v\u00e1lasszon egyet:", - "title": "Plex-kiszolg\u00e1l\u00f3 kiv\u00e1laszt\u00e1sa" - }, - "start_website_auth": { - "description": "Folytassa az enged\u00e9lyez\u00e9st a plex.tv webhelyen.", - "title": "Plex-kiszolg\u00e1l\u00f3 csatlakoztat\u00e1sa" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "use_episode_art": "Haszn\u00e1lja az epiz\u00f3d bor\u00edt\u00f3j\u00e1t" - }, - "description": "Plex media lej\u00e1tsz\u00f3k be\u00e1ll\u00edt\u00e1sai" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/it.json b/homeassistant/components/plex/.translations/it.json deleted file mode 100644 index bb48d95bc51..00000000000 --- a/homeassistant/components/plex/.translations/it.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Tutti i server collegati sono gi\u00e0 configurati", - "already_configured": "Questo server Plex \u00e8 gi\u00e0 configurato", - "already_in_progress": "Plex \u00e8 in fase di configurazione", - "invalid_import": "La configurazione importata non \u00e8 valida", - "non-interactive": "Importazione non interattiva", - "token_request_timeout": "Timeout per l'ottenimento del token", - "unknown": "Non riuscito per motivo sconosciuto" - }, - "error": { - "faulty_credentials": "Autorizzazione non riuscita", - "no_servers": "Nessun server collegato all'account", - "not_found": "Server Plex non trovato" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "Sono disponibili pi\u00f9 server, selezionarne uno:", - "title": "Selezionare il server Plex" - }, - "start_website_auth": { - "description": "Continuare ad autorizzare su plex.tv.", - "title": "Collegare il server Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignora nuovi utenti gestiti/condivisi", - "monitored_users": "Utenti monitorati", - "use_episode_art": "Usa la grafica dell'episodio" - }, - "description": "Opzioni per i lettori multimediali Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/ko.json b/homeassistant/components/plex/.translations/ko.json deleted file mode 100644 index 5cb49836f4d..00000000000 --- a/homeassistant/components/plex/.translations/ko.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\uc774\ubbf8 \uad6c\uc131\ub41c \ubaa8\ub4e0 \uc5f0\uacb0\ub41c \uc11c\ubc84", - "already_configured": "\uc774 Plex \uc11c\ubc84\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "Plex \ub97c \uad6c\uc131 \uc911\uc785\ub2c8\ub2e4", - "invalid_import": "\uac00\uc838\uc628 \uad6c\uc131 \ub0b4\uc6a9\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "non-interactive": "\ube44 \ub300\ud654\ud615 \uac00\uc838\uc624\uae30", - "token_request_timeout": "\ud1a0\ud070 \ud68d\ub4dd \uc2dc\uac04\uc774 \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4", - "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc774\uc720\ub85c \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "faulty_credentials": "\uc778\uc99d\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4", - "no_servers": "\uacc4\uc815\uc5d0 \uc5f0\uacb0\ub41c \uc11c\ubc84\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", - "not_found": "Plex \uc11c\ubc84\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" - }, - "step": { - "select_server": { - "data": { - "server": "\uc11c\ubc84" - }, - "description": "\uc5ec\ub7ec \uc11c\ubc84\uac00 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ud558\ub098\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694:", - "title": "Plex \uc11c\ubc84 \uc120\ud0dd" - }, - "start_website_auth": { - "description": "plex.tv \uc5d0\uc11c \uc778\uc99d\uc744 \uc9c4\ud589\ud574\uc8fc\uc138\uc694.", - "title": "Plex \uc11c\ubc84 \uc5f0\uacb0" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "\uc0c8\ub85c\uc6b4 \uad00\ub9ac/\uacf5\uc720 \uc0ac\uc6a9\uc790 \ubb34\uc2dc", - "monitored_users": "\ubaa8\ub2c8\ud130\ub9c1\ub418\ub294 \uc0ac\uc6a9\uc790", - "use_episode_art": "\uc5d0\ud53c\uc18c\ub4dc \uc544\ud2b8 \uc0ac\uc6a9" - }, - "description": "Plex \ubbf8\ub514\uc5b4 \ud50c\ub808\uc774\uc5b4 \uc635\uc158" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/lb.json b/homeassistant/components/plex/.translations/lb.json deleted file mode 100644 index c8b910b6dc5..00000000000 --- a/homeassistant/components/plex/.translations/lb.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "All verbonne Server sinn scho konfigur\u00e9iert", - "already_configured": "D\u00ebse Plex Server ass scho konfigur\u00e9iert", - "already_in_progress": "Plex g\u00ebtt konfigur\u00e9iert", - "invalid_import": "D\u00e9i importiert Konfiguratioun ass ong\u00eblteg", - "non-interactive": "Net interaktiven Import", - "token_request_timeout": "Z\u00e4it Iwwerschreidung beim kr\u00e9ien vum Jeton", - "unknown": "Onbekannte Feeler opgetrueden" - }, - "error": { - "faulty_credentials": "Feeler beider Autorisatioun", - "no_servers": "Kee Server as mam Kont verbonnen", - "not_found": "Kee Plex Server fonnt" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "M\u00e9i Server disponibel, wielt een aus:", - "title": "Plex Server auswielen" - }, - "start_website_auth": { - "description": "Weiderfueren op plex.tv fir d'Autorisatioun.", - "title": "Plex Server verbannen" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Nei verwalt / gedeelt Benotzer ignor\u00e9ieren", - "monitored_users": "Iwwerwaachte Benotzer", - "use_episode_art": "Benotz Biller vun der Episode" - }, - "description": "Optioune fir Plex Medie Spiller" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/nl.json b/homeassistant/components/plex/.translations/nl.json deleted file mode 100644 index 79ae6506d86..00000000000 --- a/homeassistant/components/plex/.translations/nl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle gekoppelde servers zijn al geconfigureerd", - "already_configured": "Deze Plex-server is al geconfigureerd", - "already_in_progress": "Plex wordt geconfigureerd", - "invalid_import": "Ge\u00efmporteerde configuratie is ongeldig", - "non-interactive": "Niet-interactieve import", - "token_request_timeout": "Time-out verkrijgen van token", - "unknown": "Mislukt om onbekende reden" - }, - "error": { - "faulty_credentials": "Autorisatie mislukt", - "no_servers": "Geen servers gekoppeld aan account", - "not_found": "Plex-server niet gevonden" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "Meerdere servers beschikbaar, selecteer er een:", - "title": "Selecteer Plex server" - }, - "start_website_auth": { - "description": "Ga verder met autoriseren bij plex.tv.", - "title": "Verbind de Plex server" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "use_episode_art": "Gebruik aflevering kunst" - }, - "description": "Opties voor Plex-mediaspelers" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/nn.json b/homeassistant/components/plex/.translations/nn.json deleted file mode 100644 index a16deb2fca2..00000000000 --- a/homeassistant/components/plex/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Plex" - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/no.json b/homeassistant/components/plex/.translations/no.json deleted file mode 100644 index be76411d8ac..00000000000 --- a/homeassistant/components/plex/.translations/no.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alle knyttet servere som allerede er konfigurert", - "already_configured": "Denne Plex-serveren er allerede konfigurert", - "already_in_progress": "Plex blir konfigurert", - "invalid_import": "Den importerte konfigurasjonen er ugyldig", - "non-interactive": "Ikke-interaktiv import", - "token_request_timeout": "Tidsavbrudd ved innhenting av token", - "unknown": "Mislyktes av ukjent \u00e5rsak" - }, - "error": { - "faulty_credentials": "Autorisasjonen mislyktes", - "no_servers": "Ingen servere koblet til kontoen", - "not_found": "Plex-server ikke funnet" - }, - "step": { - "select_server": { - "data": { - "server": "" - }, - "description": "Flere servere tilgjengelig, velg en:", - "title": "Velg Plex-server" - }, - "start_website_auth": { - "description": "Fortsett \u00e5 autorisere p\u00e5 plex.tv.", - "title": "Koble til Plex-server" - } - }, - "title": "" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignorer nye administrerte/delte brukere", - "monitored_users": "Overv\u00e5kede brukere", - "use_episode_art": "Bruk episode bilde" - }, - "description": "Alternativer for Plex Media Players" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/pl.json b/homeassistant/components/plex/.translations/pl.json deleted file mode 100644 index 8b21562a87e..00000000000 --- a/homeassistant/components/plex/.translations/pl.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Wszystkie znalezione serwery s\u0105 ju\u017c skonfigurowane.", - "already_configured": "Ten serwer Plex jest ju\u017c skonfigurowany.", - "already_in_progress": "Plex jest konfigurowany", - "invalid_import": "Zaimportowana konfiguracja jest nieprawid\u0142owa", - "non-interactive": "Nieinteraktywny import", - "token_request_timeout": "Przekroczono limit czasu na uzyskanie tokena.", - "unknown": "Nieznany b\u0142\u0105d" - }, - "error": { - "faulty_credentials": "Autoryzacja nie powiod\u0142a si\u0119", - "no_servers": "Brak serwer\u00f3w po\u0142\u0105czonych z kontem", - "not_found": "Nie znaleziono serwera Plex" - }, - "step": { - "select_server": { - "data": { - "server": "Serwer" - }, - "description": "Dost\u0119pnych jest wiele serwer\u00f3w, wybierz jeden:", - "title": "Wybierz serwer Plex" - }, - "start_website_auth": { - "description": "Kontynuuj, by dokona\u0107 autoryzacji w plex.tv.", - "title": "Po\u0142\u0105cz z serwerem Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignoruj nowych zarz\u0105dzanych/wsp\u00f3\u0142dzielonych u\u017cytkownik\u00f3w", - "monitored_users": "Monitorowani u\u017cytkownicy", - "use_episode_art": "U\u017cyj grafiki odcinka" - }, - "description": "Opcje dla odtwarzaczy multimedialnych Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/pt.json b/homeassistant/components/plex/.translations/pt.json deleted file mode 100644 index 4312910653f..00000000000 --- a/homeassistant/components/plex/.translations/pt.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "step": { - "manual_setup": { - "data": { - "host": "Servidor", - "port": "Porta" - } - } - } - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "show_all_controls": "Mostrar todos os controles" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/ru.json b/homeassistant/components/plex/.translations/ru.json deleted file mode 100644 index 851a2f16ae1..00000000000 --- a/homeassistant/components/plex/.translations/ru.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u0412\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.", - "already_configured": "\u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 Plex \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d.", - "already_in_progress": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430.", - "invalid_import": "\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u0430.", - "non-interactive": "\u041d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442.", - "token_request_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430.", - "unknown": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435." - }, - "error": { - "faulty_credentials": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "no_servers": "\u041d\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.", - "not_found": "\u0421\u0435\u0440\u0432\u0435\u0440 Plex \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." - }, - "step": { - "select_server": { - "data": { - "server": "\u0421\u0435\u0440\u0432\u0435\u0440" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432:", - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 Plex" - }, - "start_website_auth": { - "description": "\u041f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 plex.tv.", - "title": "Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445/\u043e\u0431\u0449\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439", - "monitored_users": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438", - "use_episode_art": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u043e\u0436\u043a\u0438 \u044d\u043f\u0438\u0437\u043e\u0434\u043e\u0432" - }, - "description": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/sl.json b/homeassistant/components/plex/.translations/sl.json deleted file mode 100644 index 20ad2ca0a02..00000000000 --- a/homeassistant/components/plex/.translations/sl.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Vsi povezani stre\u017eniki so \u017ee konfigurirani", - "already_configured": "Ta stre\u017enik Plex je \u017ee konfiguriran", - "already_in_progress": "Plex se konfigurira", - "invalid_import": "Uvo\u017eena konfiguracija ni veljavna", - "non-interactive": "Neinteraktivni uvoz", - "token_request_timeout": "Potekla \u010dasovna omejitev za pridobitev \u017eetona", - "unknown": "Ni uspelo iz neznanega razloga" - }, - "error": { - "faulty_credentials": "Avtorizacija ni uspela", - "no_servers": "Ni stre\u017enikov povezanih z ra\u010dunom", - "not_found": "Plex stre\u017enika ni mogo\u010de najti" - }, - "step": { - "select_server": { - "data": { - "server": "Stre\u017enik" - }, - "description": "Na voljo je ve\u010d stre\u017enikov, izberite enega:", - "title": "Izberite stre\u017enik Plex" - }, - "start_website_auth": { - "description": "Nadaljujte z avtorizacijo na plex.tv.", - "title": "Pove\u017eite stre\u017enik Plex" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "Ignorirajte nove upravljane/deljene uporabnike", - "monitored_users": "Nadzorovani uporabniki", - "use_episode_art": "Uporabi naslovno sliko epizode" - }, - "description": "Mo\u017enosti za predvajalnike Plex" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/sv.json b/homeassistant/components/plex/.translations/sv.json deleted file mode 100644 index 42afc3eeaa9..00000000000 --- a/homeassistant/components/plex/.translations/sv.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "Alla l\u00e4nkade servrar har redan konfigurerats", - "already_configured": "Denna Plex-server \u00e4r redan konfigurerad", - "already_in_progress": "Plex konfigureras", - "invalid_import": "Importerad konfiguration \u00e4r ogiltig", - "non-interactive": "Icke-interaktiv import", - "token_request_timeout": "Timeout att erh\u00e5lla token", - "unknown": "Misslyckades av ok\u00e4nd anledning" - }, - "error": { - "faulty_credentials": "Auktoriseringen misslyckades", - "no_servers": "Inga servrar l\u00e4nkade till konto", - "not_found": "Plex-server hittades inte" - }, - "step": { - "select_server": { - "data": { - "server": "Server" - }, - "description": "V\u00e4lj flera servrar tillg\u00e4ngliga, v\u00e4lj en:", - "title": "V\u00e4lj Plex-server" - }, - "start_website_auth": { - "description": "Forts\u00e4tt att auktorisera p\u00e5 plex.tv.", - "title": "Anslut Plex-servern" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "use_episode_art": "Anv\u00e4nd avsnittsbild" - }, - "description": "Alternativ f\u00f6r Plex-mediaspelare" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/zh-Hant.json b/homeassistant/components/plex/.translations/zh-Hant.json deleted file mode 100644 index 6d46b8bc154..00000000000 --- a/homeassistant/components/plex/.translations/zh-Hant.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "all_configured": "\u6240\u6709\u7d81\u5b9a\u4f3a\u670d\u5668\u90fd\u5df2\u8a2d\u5b9a\u5b8c\u6210", - "already_configured": "Plex \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "Plex \u5df2\u7d93\u8a2d\u5b9a", - "invalid_import": "\u532f\u5165\u4e4b\u8a2d\u5b9a\u7121\u6548", - "non-interactive": "\u7121\u4e92\u52d5\u532f\u5165", - "token_request_timeout": "\u53d6\u5f97\u5bc6\u9470\u903e\u6642", - "unknown": "\u672a\u77e5\u539f\u56e0\u5931\u6557" - }, - "error": { - "faulty_credentials": "\u9a57\u8b49\u5931\u6557", - "no_servers": "\u6b64\u5e33\u865f\u672a\u7d81\u5b9a\u4f3a\u670d\u5668", - "not_found": "\u627e\u4e0d\u5230 Plex \u4f3a\u670d\u5668" - }, - "step": { - "select_server": { - "data": { - "server": "\u4f3a\u670d\u5668" - }, - "description": "\u627e\u5230\u591a\u500b\u4f3a\u670d\u5668\uff0c\u8acb\u9078\u64c7\u4e00\u7d44\uff1a", - "title": "\u9078\u64c7 Plex \u4f3a\u670d\u5668" - }, - "start_website_auth": { - "description": "\u7e7c\u7e8c\u65bc Plex.tv \u9032\u884c\u8a8d\u8b49\u3002", - "title": "\u9023\u7dda\u81f3 Plex \u4f3a\u670d\u5668" - } - }, - "title": "Plex" - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "ignore_new_shared_users": "\u5ffd\u7565\u65b0\u589e\u7ba1\u7406/\u5206\u4eab\u4f7f\u7528\u8005", - "monitored_users": "\u5df2\u76e3\u63a7\u4f7f\u7528\u8005", - "use_episode_art": "\u4f7f\u7528\u5f71\u96c6\u5287\u7167" - }, - "description": "Plex \u64ad\u653e\u5668\u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/plex/__init__.py b/homeassistant/components/plex/__init__.py index ff36f4f5c32..7f8caf8390b 100644 --- a/homeassistant/components/plex/__init__.py +++ b/homeassistant/components/plex/__init__.py @@ -75,7 +75,13 @@ SERVER_CONFIG_SCHEMA = vol.Schema( ) ) -CONFIG_SCHEMA = vol.Schema({PLEX_DOMAIN: SERVER_CONFIG_SCHEMA}, extra=vol.ALLOW_EXTRA) +CONFIG_SCHEMA = vol.Schema( + vol.All( + cv.deprecated(PLEX_DOMAIN, invalidation_version="0.111"), + {PLEX_DOMAIN: SERVER_CONFIG_SCHEMA}, + ), + extra=vol.ALLOW_EXTRA, +) _LOGGER = logging.getLogger(__package__) @@ -100,10 +106,10 @@ def _async_setup_plex(hass, config): if MP_DOMAIN in server_config: hass.data.setdefault(PLEX_MEDIA_PLAYER_OPTIONS, server_config.pop(MP_DOMAIN)) if CONF_HOST in server_config: - prefix = "https" if server_config.pop(CONF_SSL) else "http" + protocol = "https" if server_config.pop(CONF_SSL) else "http" server_config[ CONF_URL - ] = f"{prefix}://{server_config.pop(CONF_HOST)}:{server_config.pop(CONF_PORT)}" + ] = f"{protocol}://{server_config.pop(CONF_HOST)}:{server_config.pop(CONF_PORT)}" hass.async_create_task( hass.config_entries.flow.async_init( PLEX_DOMAIN, diff --git a/homeassistant/components/plex/config_flow.py b/homeassistant/components/plex/config_flow.py index 6edbecf055d..a314aba0ecd 100644 --- a/homeassistant/components/plex/config_flow.py +++ b/homeassistant/components/plex/config_flow.py @@ -43,10 +43,10 @@ _LOGGER = logging.getLogger(__package__) @callback def configured_servers(hass): """Return a set of the configured Plex servers.""" - return set( + return { entry.data[CONF_SERVER_IDENTIFIER] for entry in hass.config_entries.async_entries(DOMAIN) - ) + } class PlexFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/plex/const.py b/homeassistant/components/plex/const.py index 126c6eb313a..555454e2205 100644 --- a/homeassistant/components/plex/const.py +++ b/homeassistant/components/plex/const.py @@ -39,6 +39,3 @@ X_PLEX_DEVICE_NAME = "Home Assistant" X_PLEX_PLATFORM = "Home Assistant" X_PLEX_PRODUCT = "Home Assistant" X_PLEX_VERSION = __version__ - -COMMAND_MEDIA_TYPE_MUSIC = "music" -COMMAND_MEDIA_TYPE_VIDEO = "video" diff --git a/homeassistant/components/plex/manifest.json b/homeassistant/components/plex/manifest.json index 1c89bf2582a..a458a3585b4 100644 --- a/homeassistant/components/plex/manifest.json +++ b/homeassistant/components/plex/manifest.json @@ -3,7 +3,7 @@ "name": "Plex Media Server", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/plex", - "requirements": ["plexapi==3.3.0", "plexauth==0.0.5", "plexwebsocket==0.0.7"], + "requirements": ["plexapi==3.4.0", "plexauth==0.0.5", "plexwebsocket==0.0.7"], "dependencies": ["http"], "codeowners": ["@jjlawren"] } diff --git a/homeassistant/components/plex/media_player.py b/homeassistant/components/plex/media_player.py index e09244739e9..79d1339bde1 100644 --- a/homeassistant/components/plex/media_player.py +++ b/homeassistant/components/plex/media_player.py @@ -1,16 +1,18 @@ """Support to interface with the Plex API.""" import json import logging -from xml.etree.ElementTree import ParseError import plexapi.exceptions 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, @@ -27,8 +29,6 @@ from homeassistant.helpers.entity_registry import async_get_registry from homeassistant.util import dt as dt_util from .const import ( - COMMAND_MEDIA_TYPE_MUSIC, - COMMAND_MEDIA_TYPE_VIDEO, COMMON_PLAYERS, CONF_SERVER_IDENTIFIER, DISPATCHERS, @@ -42,14 +42,6 @@ from .const import ( _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Set up the Plex media_player platform. - - Deprecated. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up Plex media_player from a config entry.""" server_id = config_entry.data[CONF_SERVER_IDENTIFIER] @@ -564,35 +556,47 @@ 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 - command_media_type = COMMAND_MEDIA_TYPE_VIDEO - - if media_type == "MUSIC": - media = self._get_music_media(library, src) - command_media_type = COMMAND_MEDIA_TYPE_MUSIC - 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, type=command_media_type) - except ParseError: - # Temporary workaround for Plexamp / plexapi issue - pass + self.device.playMedia(playqueue) except requests.exceptions.ConnectTimeout: _LOGGER.error("Timed out playing on %s", self.name) diff --git a/homeassistant/components/plex/sensor.py b/homeassistant/components/plex/sensor.py index 6fcfd39d192..f4d5d24049c 100644 --- a/homeassistant/components/plex/sensor.py +++ b/homeassistant/components/plex/sensor.py @@ -22,14 +22,6 @@ from .const import ( _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Set up the Plex sensor platform. - - Deprecated. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up Plex sensor from a config entry.""" server_id = config_entry.data[CONF_SERVER_IDENTIFIER] diff --git a/homeassistant/components/plex/server.py b/homeassistant/components/plex/server.py index d9e2d2bd9cc..ca5e4756cf2 100644 --- a/homeassistant/components/plex/server.py +++ b/homeassistant/components/plex/server.py @@ -332,3 +332,7 @@ class PlexServer: def create_playqueue(self, media, **kwargs): """Create playqueue on Plex server.""" return plexapi.playqueue.PlayQueue.create(self._plex_server, media, **kwargs) + + def fetch_item(self, item): + """Fetch item from Plex server.""" + return self._plex_server.fetchItem(item) diff --git a/homeassistant/components/plex/strings.json b/homeassistant/components/plex/strings.json index 43dc47bec10..962e8d35225 100644 --- a/homeassistant/components/plex/strings.json +++ b/homeassistant/components/plex/strings.json @@ -1,44 +1,41 @@ { - "config": { - "title": "Plex", - "step": { - "select_server": { - "title": "Select Plex server", - "description": "Multiple servers available, select one:", - "data": { - "server": "Server" - } - }, - "start_website_auth": { - "title": "Connect Plex server", - "description": "Continue to authorize at plex.tv." - } - }, - "error": { - "faulty_credentials": "Authorization failed", - "no_servers": "No servers linked to account", - "not_found": "Plex server not found" - }, - "abort": { - "all_configured": "All linked servers already configured", - "already_configured": "This Plex server is already configured", - "already_in_progress": "Plex is being configured", - "invalid_import": "Imported configuration is invalid", - "non-interactive": "Non-interactive import", - "token_request_timeout": "Timed out obtaining token", - "unknown": "Failed for unknown reason" - } + "config": { + "step": { + "select_server": { + "title": "Select Plex server", + "description": "Multiple servers available, select one:", + "data": { "server": "Server" } + }, + "start_website_auth": { + "title": "Connect Plex server", + "description": "Continue to authorize at plex.tv." + } }, - "options": { - "step": { - "plex_mp_settings": { - "description": "Options for Plex Media Players", - "data": { - "use_episode_art": "Use episode art", - "ignore_new_shared_users": "Ignore new managed/shared users", - "monitored_users": "Monitored users" - } - } - } + "error": { + "faulty_credentials": "Authorization failed", + "no_servers": "No servers linked to account", + "not_found": "Plex server not found" + }, + "abort": { + "all_configured": "All linked servers already configured", + "already_configured": "This Plex server is already configured", + "already_in_progress": "Plex is being configured", + "invalid_import": "Imported configuration is invalid", + "non-interactive": "Non-interactive import", + "token_request_timeout": "Timed out obtaining token", + "unknown": "Failed for unknown reason" } + }, + "options": { + "step": { + "plex_mp_settings": { + "description": "Options for Plex Media Players", + "data": { + "use_episode_art": "Use episode art", + "ignore_new_shared_users": "Ignore new managed/shared users", + "monitored_users": "Monitored users" + } + } + } + } } diff --git a/homeassistant/components/plex/translations/bg.json b/homeassistant/components/plex/translations/bg.json new file mode 100644 index 00000000000..fabb44dc9ea --- /dev/null +++ b/homeassistant/components/plex/translations/bg.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "all_configured": "\u0412\u0441\u0438\u0447\u043a\u0438 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441\u044a\u0440\u0432\u044a\u0440\u0438 \u0432\u0435\u0447\u0435 \u0441\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0438", + "already_configured": "\u0422\u043e\u0437\u0438 Plex \u0441\u044a\u0440\u0432\u044a\u0440 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "already_in_progress": "Plex \u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430", + "invalid_import": "\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0430\u043d\u0430\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430", + "non-interactive": "\u041d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0438\u043c\u043f\u043e\u0440\u0442", + "token_request_timeout": "\u0418\u0437\u0442\u0435\u0447\u0435 \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f", + "unknown": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0440\u0430\u0434\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" + }, + "error": { + "faulty_credentials": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f", + "no_servers": "\u041d\u044f\u043c\u0430 \u0441\u044a\u0440\u0432\u044a\u0440\u0438, \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441 \u0442\u043e\u0437\u0438 \u0430\u043a\u0430\u0443\u043d\u0442", + "not_found": "Plex \u0441\u044a\u0440\u0432\u044a\u0440\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d" + }, + "step": { + "select_server": { + "data": { + "server": "\u0421\u044a\u0440\u0432\u044a\u0440" + }, + "description": "\u041d\u0430\u043b\u0438\u0447\u043d\u0438 \u0441\u0430 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u044a\u0440\u0432\u044a\u0440\u0430, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0435\u0434\u0438\u043d:", + "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 Plex \u0441\u044a\u0440\u0432\u044a\u0440" + }, + "start_website_auth": { + "description": "\u041f\u0440\u043e\u0434\u044a\u043b\u0436\u0435\u0442\u0435 \u0441 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 plex.tv.", + "title": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 Plex \u0441\u044a\u0440\u0432\u044a\u0440" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "use_episode_art": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u0430\u043a\u0430\u0442 \u0437\u0430 \u0435\u043f\u0438\u0437\u043e\u0434\u0430" + }, + "description": "\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Plex Media Players" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/ca.json b/homeassistant/components/plex/translations/ca.json new file mode 100644 index 00000000000..250f1a3b2f2 --- /dev/null +++ b/homeassistant/components/plex/translations/ca.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Tots els servidors enlla\u00e7ats ja estan configurats", + "already_configured": "Aquest servidor Plex ja est\u00e0 configurat", + "already_in_progress": "S\u2019est\u00e0 configurant Plex", + "invalid_import": "La configuraci\u00f3 importada \u00e9s inv\u00e0lida", + "non-interactive": "Importaci\u00f3 no interactiva", + "token_request_timeout": "S'ha acabat el temps d'espera durant l'obtenci\u00f3 del testimoni.", + "unknown": "Ha fallat per motiu desconegut" + }, + "error": { + "faulty_credentials": "Ha fallat l'autoritzaci\u00f3", + "no_servers": "No hi ha servidors enlla\u00e7ats amb el compte", + "not_found": "No s'ha trobat el servidor Plex" + }, + "step": { + "select_server": { + "data": { + "server": "Servidor" + }, + "description": "Hi ha diversos servidors disponibles, selecciona'n un:", + "title": "Selecciona servidor Plex" + }, + "start_website_auth": { + "description": "Continua l'autoritzaci\u00f3 a plex.tv.", + "title": "Connexi\u00f3 amb el servidor Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignora els nous usuaris gestionats/compartits", + "monitored_users": "Usuaris monitoritzats", + "use_episode_art": "Utilitza imatges de l'episodi" + }, + "description": "Opcions dels reproductors multim\u00e8dia Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/cs.json b/homeassistant/components/plex/translations/cs.json similarity index 100% rename from homeassistant/components/plex/.translations/cs.json rename to homeassistant/components/plex/translations/cs.json diff --git a/homeassistant/components/plex/translations/da.json b/homeassistant/components/plex/translations/da.json new file mode 100644 index 00000000000..06b40f1b1ad --- /dev/null +++ b/homeassistant/components/plex/translations/da.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Alle linkede servere er allerede konfigureret", + "already_configured": "Denne Plex-server er allerede konfigureret", + "already_in_progress": "Plex konfigureres", + "invalid_import": "Importeret konfiguration er ugyldig", + "non-interactive": "Ikke-interaktiv import", + "token_request_timeout": "Timeout ved hentning af token", + "unknown": "Mislykkedes af ukendt \u00e5rsag" + }, + "error": { + "faulty_credentials": "Godkendelse mislykkedes", + "no_servers": "Ingen servere knyttet til konto", + "not_found": "Plex-server ikke fundet" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "Flere servere til r\u00e5dighed, v\u00e6lg en:", + "title": "V\u00e6lg Plex-server" + }, + "start_website_auth": { + "description": "Forts\u00e6t for at godkende p\u00e5 plex.tv.", + "title": "Forbind Plex-server" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignorer nye administrerede/delte brugere", + "monitored_users": "Monitorerede brugere", + "use_episode_art": "Brug episodekunst" + }, + "description": "Indstillinger for Plex-medieafspillere" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/de.json b/homeassistant/components/plex/translations/de.json new file mode 100644 index 00000000000..e8aea9921c7 --- /dev/null +++ b/homeassistant/components/plex/translations/de.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Alle verkn\u00fcpften Server sind bereits konfiguriert", + "already_configured": "Dieser Plex-Server ist bereits konfiguriert", + "already_in_progress": "Plex wird konfiguriert", + "invalid_import": "Die importierte Konfiguration ist ung\u00fcltig", + "non-interactive": "Nicht interaktiver Import", + "token_request_timeout": "Zeit\u00fcberschreitung beim Erhalt des Tokens", + "unknown": "Aus unbekanntem Grund fehlgeschlagen" + }, + "error": { + "faulty_credentials": "Autorisation fehlgeschlagen", + "no_servers": "Keine Server sind mit dem Konto verbunden", + "not_found": "Plex-Server nicht gefunden" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "Mehrere Server verf\u00fcgbar, w\u00e4hle einen aus:", + "title": "Plex-Server ausw\u00e4hlen" + }, + "start_website_auth": { + "description": "Weiter zur Autorisierung unter plex.tv.", + "title": "Plex Server verbinden" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignorieren neuer verwalteter/freigegebener Benutzer", + "monitored_users": "\u00dcberwachte Benutzer", + "use_episode_art": "Episode-Bilder verwenden" + }, + "description": "Optionen f\u00fcr Plex-Media-Player" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/en.json b/homeassistant/components/plex/translations/en.json new file mode 100644 index 00000000000..731e95915ca --- /dev/null +++ b/homeassistant/components/plex/translations/en.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "All linked servers already configured", + "already_configured": "This Plex server is already configured", + "already_in_progress": "Plex is being configured", + "invalid_import": "Imported configuration is invalid", + "non-interactive": "Non-interactive import", + "token_request_timeout": "Timed out obtaining token", + "unknown": "Failed for unknown reason" + }, + "error": { + "faulty_credentials": "Authorization failed", + "no_servers": "No servers linked to account", + "not_found": "Plex server not found" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "Multiple servers available, select one:", + "title": "Select Plex server" + }, + "start_website_auth": { + "description": "Continue to authorize at plex.tv.", + "title": "Connect Plex server" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignore new managed/shared users", + "monitored_users": "Monitored users", + "use_episode_art": "Use episode art" + }, + "description": "Options for Plex Media Players" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/es-419.json b/homeassistant/components/plex/translations/es-419.json new file mode 100644 index 00000000000..8fa797aec89 --- /dev/null +++ b/homeassistant/components/plex/translations/es-419.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "all_configured": "Todos los servidores vinculados ya fueron configurados", + "already_configured": "Este servidor Plex ya est\u00e1 configurado", + "already_in_progress": "Plex se est\u00e1 configurando", + "invalid_import": "La configuraci\u00f3n importada no es v\u00e1lida", + "token_request_timeout": "Se agot\u00f3 el tiempo de espera para obtener el token", + "unknown": "Fall\u00f3 por razones desconocidas" + }, + "error": { + "faulty_credentials": "Autorizaci\u00f3n fallida", + "no_servers": "No hay servidores vinculados a la cuenta", + "not_found": "Servidor Plex no encontrado" + }, + "step": { + "select_server": { + "data": { + "server": "Servidor" + }, + "description": "M\u00faltiples servidores disponibles, seleccione uno:", + "title": "Seleccionar servidor Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "description": "Opciones para reproductores multimedia Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/es.json b/homeassistant/components/plex/translations/es.json new file mode 100644 index 00000000000..b26c6a4b381 --- /dev/null +++ b/homeassistant/components/plex/translations/es.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Todos los servidores vinculados ya configurados", + "already_configured": "Este servidor Plex ya est\u00e1 configurado", + "already_in_progress": "Plex se est\u00e1 configurando", + "invalid_import": "La configuraci\u00f3n importada no es v\u00e1lida", + "non-interactive": "Importaci\u00f3n no interactiva", + "token_request_timeout": "Tiempo de espera agotado para la obtenci\u00f3n del token", + "unknown": "Fall\u00f3 por razones desconocidas" + }, + "error": { + "faulty_credentials": "Error en la autorizaci\u00f3n", + "no_servers": "No hay servidores vinculados a la cuenta", + "not_found": "No se ha encontrado el servidor Plex" + }, + "step": { + "select_server": { + "data": { + "server": "Servidor" + }, + "description": "Varios servidores disponibles, seleccione uno:", + "title": "Seleccione el servidor Plex" + }, + "start_website_auth": { + "description": "Contin\u00fae en plex.tv para autorizar", + "title": "Conectar servidor Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignorar nuevos usuarios administrados/compartidos", + "monitored_users": "Usuarios monitorizados", + "use_episode_art": "Usar el arte de episodios" + }, + "description": "Opciones para reproductores multimedia Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/fr.json b/homeassistant/components/plex/translations/fr.json new file mode 100644 index 00000000000..6950a0de170 --- /dev/null +++ b/homeassistant/components/plex/translations/fr.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Tous les serveurs li\u00e9s sont d\u00e9j\u00e0 configur\u00e9s", + "already_configured": "Ce serveur Plex est d\u00e9j\u00e0 configur\u00e9", + "already_in_progress": "Plex en cours de configuration", + "invalid_import": "La configuration import\u00e9e est invalide", + "non-interactive": "Importation non interactive", + "token_request_timeout": "D\u00e9lai d'obtention du jeton", + "unknown": "\u00c9chec pour une raison inconnue" + }, + "error": { + "faulty_credentials": "L'autorisation \u00e0 \u00e9chou\u00e9e", + "no_servers": "Aucun serveur li\u00e9 au compte", + "not_found": "Serveur Plex introuvable" + }, + "step": { + "select_server": { + "data": { + "server": "Serveur" + }, + "description": "Plusieurs serveurs disponibles, s\u00e9lectionnez-en un:", + "title": "S\u00e9lectionnez le serveur Plex" + }, + "start_website_auth": { + "description": "Continuer d'autoriser sur plex.tv.", + "title": "Connecter un serveur Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignorer les nouveaux utilisateurs g\u00e9r\u00e9s/partag\u00e9s", + "monitored_users": "Utilisateurs surveill\u00e9s", + "use_episode_art": "Utiliser l'art de l'\u00e9pisode" + }, + "description": "Options pour lecteurs multim\u00e9dia Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/hu.json b/homeassistant/components/plex/translations/hu.json new file mode 100644 index 00000000000..5296b208e78 --- /dev/null +++ b/homeassistant/components/plex/translations/hu.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "all_configured": "Az \u00f6sszes \u00f6sszekapcsolt szerver m\u00e1r konfigur\u00e1lva van", + "already_configured": "Ez a Plex szerver m\u00e1r konfigur\u00e1lva van", + "already_in_progress": "A Plex konfigur\u00e1l\u00e1sa folyamatban van", + "invalid_import": "Az import\u00e1lt konfigur\u00e1ci\u00f3 \u00e9rv\u00e9nytelen", + "non-interactive": "Nem interakt\u00edv import\u00e1l\u00e1s", + "token_request_timeout": "Token k\u00e9r\u00e9sre sz\u00e1nt id\u0151 lej\u00e1rt", + "unknown": "Ismeretlen okb\u00f3l nem siker\u00fclt" + }, + "error": { + "faulty_credentials": "A hiteles\u00edt\u00e9s sikertelen", + "no_servers": "Nincs szerver csatlakoztatva a fi\u00f3khoz", + "not_found": "A Plex szerver nem tal\u00e1lhat\u00f3" + }, + "step": { + "select_server": { + "data": { + "server": "szerver" + }, + "description": "T\u00f6bb szerver el\u00e9rhet\u0151, v\u00e1lasszon egyet:", + "title": "Plex-kiszolg\u00e1l\u00f3 kiv\u00e1laszt\u00e1sa" + }, + "start_website_auth": { + "description": "Folytassa az enged\u00e9lyez\u00e9st a plex.tv webhelyen.", + "title": "Plex-kiszolg\u00e1l\u00f3 csatlakoztat\u00e1sa" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "use_episode_art": "Haszn\u00e1lja az epiz\u00f3d bor\u00edt\u00f3j\u00e1t" + }, + "description": "Plex media lej\u00e1tsz\u00f3k be\u00e1ll\u00edt\u00e1sai" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/it.json b/homeassistant/components/plex/translations/it.json new file mode 100644 index 00000000000..503cfcbd110 --- /dev/null +++ b/homeassistant/components/plex/translations/it.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Tutti i server collegati sono gi\u00e0 configurati", + "already_configured": "Questo server Plex \u00e8 gi\u00e0 configurato", + "already_in_progress": "Plex \u00e8 in fase di configurazione", + "invalid_import": "La configurazione importata non \u00e8 valida", + "non-interactive": "Importazione non interattiva", + "token_request_timeout": "Timeout per l'ottenimento del token", + "unknown": "Non riuscito per motivo sconosciuto" + }, + "error": { + "faulty_credentials": "Autorizzazione non riuscita", + "no_servers": "Nessun server collegato all'account", + "not_found": "Server Plex non trovato" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "Sono disponibili pi\u00f9 server, selezionarne uno:", + "title": "Selezionare il server Plex" + }, + "start_website_auth": { + "description": "Continuare ad autorizzare su plex.tv.", + "title": "Collegare il server Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignora nuovi utenti gestiti/condivisi", + "monitored_users": "Utenti monitorati", + "use_episode_art": "Usa la grafica dell'episodio" + }, + "description": "Opzioni per i lettori multimediali Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/ko.json b/homeassistant/components/plex/translations/ko.json new file mode 100644 index 00000000000..1c8e51f9f1c --- /dev/null +++ b/homeassistant/components/plex/translations/ko.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "\uc774\ubbf8 \uad6c\uc131\ub41c \ubaa8\ub4e0 \uc5f0\uacb0\ub41c \uc11c\ubc84", + "already_configured": "\uc774 Plex \uc11c\ubc84\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "Plex \ub97c \uad6c\uc131 \uc911\uc785\ub2c8\ub2e4", + "invalid_import": "\uac00\uc838\uc628 \uad6c\uc131 \ub0b4\uc6a9\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "non-interactive": "\ube44 \ub300\ud654\ud615 \uac00\uc838\uc624\uae30", + "token_request_timeout": "\ud1a0\ud070 \ud68d\ub4dd \uc2dc\uac04\uc774 \ucd08\uacfc\ud588\uc2b5\ub2c8\ub2e4", + "unknown": "\uc54c \uc218 \uc5c6\ub294 \uc774\uc720\ub85c \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "faulty_credentials": "\uc778\uc99d\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4", + "no_servers": "\uacc4\uc815\uc5d0 \uc5f0\uacb0\ub41c \uc11c\ubc84\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", + "not_found": "Plex \uc11c\ubc84\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" + }, + "step": { + "select_server": { + "data": { + "server": "\uc11c\ubc84" + }, + "description": "\uc5ec\ub7ec \uc11c\ubc84\uac00 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ud558\ub098\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694:", + "title": "Plex \uc11c\ubc84 \uc120\ud0dd" + }, + "start_website_auth": { + "description": "plex.tv \uc5d0\uc11c \uc778\uc99d\uc744 \uc9c4\ud589\ud574\uc8fc\uc138\uc694.", + "title": "Plex \uc11c\ubc84 \uc5f0\uacb0" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "\uc0c8\ub85c\uc6b4 \uad00\ub9ac/\uacf5\uc720 \uc0ac\uc6a9\uc790 \ubb34\uc2dc", + "monitored_users": "\ubaa8\ub2c8\ud130\ub9c1\ub418\ub294 \uc0ac\uc6a9\uc790", + "use_episode_art": "\uc5d0\ud53c\uc18c\ub4dc \uc544\ud2b8 \uc0ac\uc6a9" + }, + "description": "Plex \ubbf8\ub514\uc5b4 \ud50c\ub808\uc774\uc5b4 \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/lb.json b/homeassistant/components/plex/translations/lb.json new file mode 100644 index 00000000000..563d2282058 --- /dev/null +++ b/homeassistant/components/plex/translations/lb.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "All verbonne Server sinn scho konfigur\u00e9iert", + "already_configured": "D\u00ebse Plex Server ass scho konfigur\u00e9iert", + "already_in_progress": "Plex g\u00ebtt konfigur\u00e9iert", + "invalid_import": "D\u00e9i importiert Konfiguratioun ass ong\u00eblteg", + "non-interactive": "Net interaktiven Import", + "token_request_timeout": "Z\u00e4it Iwwerschreidung beim kr\u00e9ien vum Jeton", + "unknown": "Onbekannte Feeler opgetrueden" + }, + "error": { + "faulty_credentials": "Feeler beider Autorisatioun", + "no_servers": "Kee Server as mam Kont verbonnen", + "not_found": "Kee Plex Server fonnt" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "M\u00e9i Server disponibel, wielt een aus:", + "title": "Plex Server auswielen" + }, + "start_website_auth": { + "description": "Weiderfueren op plex.tv fir d'Autorisatioun.", + "title": "Plex Server verbannen" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Nei verwalt / gedeelt Benotzer ignor\u00e9ieren", + "monitored_users": "Iwwerwaachte Benotzer", + "use_episode_art": "Benotz Biller vun der Episode" + }, + "description": "Optioune fir Plex Medie Spiller" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/lv.json b/homeassistant/components/plex/translations/lv.json similarity index 100% rename from homeassistant/components/plex/.translations/lv.json rename to homeassistant/components/plex/translations/lv.json diff --git a/homeassistant/components/plex/translations/nl.json b/homeassistant/components/plex/translations/nl.json new file mode 100644 index 00000000000..6938bdea5f5 --- /dev/null +++ b/homeassistant/components/plex/translations/nl.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "all_configured": "Alle gekoppelde servers zijn al geconfigureerd", + "already_configured": "Deze Plex-server is al geconfigureerd", + "already_in_progress": "Plex wordt geconfigureerd", + "invalid_import": "Ge\u00efmporteerde configuratie is ongeldig", + "non-interactive": "Niet-interactieve import", + "token_request_timeout": "Time-out verkrijgen van token", + "unknown": "Mislukt om onbekende reden" + }, + "error": { + "faulty_credentials": "Autorisatie mislukt", + "no_servers": "Geen servers gekoppeld aan account", + "not_found": "Plex-server niet gevonden" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "Meerdere servers beschikbaar, selecteer er een:", + "title": "Selecteer Plex server" + }, + "start_website_auth": { + "description": "Ga verder met autoriseren bij plex.tv.", + "title": "Verbind de Plex server" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "use_episode_art": "Gebruik aflevering kunst" + }, + "description": "Opties voor Plex-mediaspelers" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/nn.json b/homeassistant/components/plex/translations/nn.json new file mode 100644 index 00000000000..9158b0c83e9 --- /dev/null +++ b/homeassistant/components/plex/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Plex" +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/no.json b/homeassistant/components/plex/translations/no.json new file mode 100644 index 00000000000..f3743bd0ffb --- /dev/null +++ b/homeassistant/components/plex/translations/no.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Alle knyttet servere som allerede er konfigurert", + "already_configured": "Denne Plex-serveren er allerede konfigurert", + "already_in_progress": "Plex blir konfigurert", + "invalid_import": "Den importerte konfigurasjonen er ugyldig", + "non-interactive": "Ikke-interaktiv import", + "token_request_timeout": "Tidsavbrudd ved innhenting av token", + "unknown": "Mislyktes av ukjent \u00e5rsak" + }, + "error": { + "faulty_credentials": "Autorisasjonen mislyktes", + "no_servers": "Ingen servere koblet til kontoen", + "not_found": "Plex-server ikke funnet" + }, + "step": { + "select_server": { + "data": { + "server": "" + }, + "description": "Flere servere tilgjengelig, velg en:", + "title": "Velg Plex-server" + }, + "start_website_auth": { + "description": "Fortsett \u00e5 autorisere p\u00e5 plex.tv.", + "title": "Koble til Plex-server" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignorer nye administrerte/delte brukere", + "monitored_users": "Overv\u00e5kede brukere", + "use_episode_art": "Bruk episode bilde" + }, + "description": "Alternativer for Plex Media Players" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/pl.json b/homeassistant/components/plex/translations/pl.json new file mode 100644 index 00000000000..53f80db934d --- /dev/null +++ b/homeassistant/components/plex/translations/pl.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Wszystkie znalezione serwery s\u0105 ju\u017c skonfigurowane.", + "already_configured": "Ten serwer Plex jest ju\u017c skonfigurowany.", + "already_in_progress": "Plex jest konfigurowany", + "invalid_import": "Zaimportowana konfiguracja jest nieprawid\u0142owa", + "non-interactive": "Nieinteraktywny import", + "token_request_timeout": "Przekroczono limit czasu na uzyskanie tokena.", + "unknown": "Nieznany b\u0142\u0105d" + }, + "error": { + "faulty_credentials": "Autoryzacja nie powiod\u0142a si\u0119", + "no_servers": "Brak serwer\u00f3w po\u0142\u0105czonych z kontem", + "not_found": "Nie znaleziono serwera Plex" + }, + "step": { + "select_server": { + "data": { + "server": "Serwer" + }, + "description": "Dost\u0119pnych jest wiele serwer\u00f3w, wybierz jeden:", + "title": "Wybierz serwer Plex" + }, + "start_website_auth": { + "description": "Kontynuuj, by dokona\u0107 autoryzacji w plex.tv.", + "title": "Po\u0142\u0105cz z serwerem Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignoruj nowych zarz\u0105dzanych/wsp\u00f3\u0142dzielonych u\u017cytkownik\u00f3w", + "monitored_users": "Monitorowani u\u017cytkownicy", + "use_episode_art": "U\u017cyj grafiki odcinka" + }, + "description": "Opcje dla odtwarzaczy multimedialnych Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/pt-BR.json b/homeassistant/components/plex/translations/pt-BR.json similarity index 100% rename from homeassistant/components/plex/.translations/pt-BR.json rename to homeassistant/components/plex/translations/pt-BR.json diff --git a/homeassistant/components/plex/translations/pt.json b/homeassistant/components/plex/translations/pt.json new file mode 100644 index 00000000000..ebf1df9c18f --- /dev/null +++ b/homeassistant/components/plex/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "select_server": { + "data": { + "server": "Servidor" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/ro.json b/homeassistant/components/plex/translations/ro.json similarity index 100% rename from homeassistant/components/plex/.translations/ro.json rename to homeassistant/components/plex/translations/ro.json diff --git a/homeassistant/components/plex/translations/ru.json b/homeassistant/components/plex/translations/ru.json new file mode 100644 index 00000000000..44de2e39554 --- /dev/null +++ b/homeassistant/components/plex/translations/ru.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "\u0412\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.", + "already_configured": "\u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 Plex \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d.", + "already_in_progress": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430.", + "invalid_import": "\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u0430.", + "non-interactive": "\u041d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442.", + "token_request_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430.", + "unknown": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435." + }, + "error": { + "faulty_credentials": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "no_servers": "\u041d\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.", + "not_found": "\u0421\u0435\u0440\u0432\u0435\u0440 Plex \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d." + }, + "step": { + "select_server": { + "data": { + "server": "\u0421\u0435\u0440\u0432\u0435\u0440" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432:", + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 Plex" + }, + "start_website_auth": { + "description": "\u041f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 plex.tv.", + "title": "Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445/\u043e\u0431\u0449\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439", + "monitored_users": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438", + "use_episode_art": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u043e\u0436\u043a\u0438 \u044d\u043f\u0438\u0437\u043e\u0434\u043e\u0432" + }, + "description": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/sl.json b/homeassistant/components/plex/translations/sl.json new file mode 100644 index 00000000000..3ae1885e76e --- /dev/null +++ b/homeassistant/components/plex/translations/sl.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "Vsi povezani stre\u017eniki so \u017ee konfigurirani", + "already_configured": "Ta stre\u017enik Plex je \u017ee konfiguriran", + "already_in_progress": "Plex se konfigurira", + "invalid_import": "Uvo\u017eena konfiguracija ni veljavna", + "non-interactive": "Neinteraktivni uvoz", + "token_request_timeout": "Potekla \u010dasovna omejitev za pridobitev \u017eetona", + "unknown": "Ni uspelo iz neznanega razloga" + }, + "error": { + "faulty_credentials": "Avtorizacija ni uspela", + "no_servers": "Ni stre\u017enikov povezanih z ra\u010dunom", + "not_found": "Plex stre\u017enika ni mogo\u010de najti" + }, + "step": { + "select_server": { + "data": { + "server": "Stre\u017enik" + }, + "description": "Na voljo je ve\u010d stre\u017enikov, izberite enega:", + "title": "Izberite stre\u017enik Plex" + }, + "start_website_auth": { + "description": "Nadaljujte z avtorizacijo na plex.tv.", + "title": "Pove\u017eite stre\u017enik Plex" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "Ignorirajte nove upravljane/deljene uporabnike", + "monitored_users": "Nadzorovani uporabniki", + "use_episode_art": "Uporabi naslovno sliko epizode" + }, + "description": "Mo\u017enosti za predvajalnike Plex" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/translations/sv.json b/homeassistant/components/plex/translations/sv.json new file mode 100644 index 00000000000..ba35af1b326 --- /dev/null +++ b/homeassistant/components/plex/translations/sv.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "all_configured": "Alla l\u00e4nkade servrar har redan konfigurerats", + "already_configured": "Denna Plex-server \u00e4r redan konfigurerad", + "already_in_progress": "Plex konfigureras", + "invalid_import": "Importerad konfiguration \u00e4r ogiltig", + "non-interactive": "Icke-interaktiv import", + "token_request_timeout": "Timeout att erh\u00e5lla token", + "unknown": "Misslyckades av ok\u00e4nd anledning" + }, + "error": { + "faulty_credentials": "Auktoriseringen misslyckades", + "no_servers": "Inga servrar l\u00e4nkade till konto", + "not_found": "Plex-server hittades inte" + }, + "step": { + "select_server": { + "data": { + "server": "Server" + }, + "description": "V\u00e4lj flera servrar tillg\u00e4ngliga, v\u00e4lj en:", + "title": "V\u00e4lj Plex-server" + }, + "start_website_auth": { + "description": "Forts\u00e4tt att auktorisera p\u00e5 plex.tv.", + "title": "Anslut Plex-servern" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "use_episode_art": "Anv\u00e4nd avsnittsbild" + }, + "description": "Alternativ f\u00f6r Plex-mediaspelare" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plex/.translations/zh-Hans.json b/homeassistant/components/plex/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/plex/.translations/zh-Hans.json rename to homeassistant/components/plex/translations/zh-Hans.json diff --git a/homeassistant/components/plex/translations/zh-Hant.json b/homeassistant/components/plex/translations/zh-Hant.json new file mode 100644 index 00000000000..da8f675a657 --- /dev/null +++ b/homeassistant/components/plex/translations/zh-Hant.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "all_configured": "\u6240\u6709\u7d81\u5b9a\u4f3a\u670d\u5668\u90fd\u5df2\u8a2d\u5b9a\u5b8c\u6210", + "already_configured": "Plex \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "Plex \u5df2\u7d93\u8a2d\u5b9a", + "invalid_import": "\u532f\u5165\u4e4b\u8a2d\u5b9a\u7121\u6548", + "non-interactive": "\u7121\u4e92\u52d5\u532f\u5165", + "token_request_timeout": "\u53d6\u5f97\u5bc6\u9470\u903e\u6642", + "unknown": "\u672a\u77e5\u539f\u56e0\u5931\u6557" + }, + "error": { + "faulty_credentials": "\u9a57\u8b49\u5931\u6557", + "no_servers": "\u6b64\u5e33\u865f\u672a\u7d81\u5b9a\u4f3a\u670d\u5668", + "not_found": "\u627e\u4e0d\u5230 Plex \u4f3a\u670d\u5668" + }, + "step": { + "select_server": { + "data": { + "server": "\u4f3a\u670d\u5668" + }, + "description": "\u627e\u5230\u591a\u500b\u4f3a\u670d\u5668\uff0c\u8acb\u9078\u64c7\u4e00\u7d44\uff1a", + "title": "\u9078\u64c7 Plex \u4f3a\u670d\u5668" + }, + "start_website_auth": { + "description": "\u7e7c\u7e8c\u65bc Plex.tv \u9032\u884c\u8a8d\u8b49\u3002", + "title": "\u9023\u7dda\u81f3 Plex \u4f3a\u670d\u5668" + } + } + }, + "options": { + "step": { + "plex_mp_settings": { + "data": { + "ignore_new_shared_users": "\u5ffd\u7565\u65b0\u589e\u7ba1\u7406/\u5206\u4eab\u4f7f\u7528\u8005", + "monitored_users": "\u5df2\u76e3\u63a7\u4f7f\u7528\u8005", + "use_episode_art": "\u4f7f\u7528\u5f71\u96c6\u5287\u7167" + }, + "description": "Plex \u64ad\u653e\u5668\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/plugwise/climate.py b/homeassistant/components/plugwise/climate.py index 9b519f969e0..aef1dd78197 100644 --- a/homeassistant/components/plugwise/climate.py +++ b/homeassistant/components/plugwise/climate.py @@ -209,7 +209,7 @@ class ThermostatDevice(ClimateDevice): preset_temperature = presets.get(self._preset_mode, "none") if self.hvac_mode == HVAC_MODE_AUTO: if self._thermostat_temperature == self._schedule_temperature: - return "{}".format(self._selected_schema) + return f"{self._selected_schema}" if self._thermostat_temperature == preset_temperature: return self._preset_mode return "Temporary" diff --git a/homeassistant/components/plugwise/manifest.json b/homeassistant/components/plugwise/manifest.json index 601f017d42f..9f14f6c6e61 100644 --- a/homeassistant/components/plugwise/manifest.json +++ b/homeassistant/components/plugwise/manifest.json @@ -2,7 +2,6 @@ "domain": "plugwise", "name": "Plugwise Anna", "documentation": "https://www.home-assistant.io/integrations/plugwise", - "dependencies": [], "codeowners": ["@laetificat", "@CoMPaTech", "@bouwew"], "requirements": ["haanna==0.14.3"] } diff --git a/homeassistant/components/plum_lightpad/manifest.json b/homeassistant/components/plum_lightpad/manifest.json index 1063d4b439e..5c846d41ad1 100644 --- a/homeassistant/components/plum_lightpad/manifest.json +++ b/homeassistant/components/plum_lightpad/manifest.json @@ -3,6 +3,5 @@ "name": "Plum Lightpad", "documentation": "https://www.home-assistant.io/integrations/plum_lightpad", "requirements": ["plumlightpad==0.0.11"], - "dependencies": [], "codeowners": ["@ColinHarrington"] } diff --git a/homeassistant/components/pocketcasts/manifest.json b/homeassistant/components/pocketcasts/manifest.json index c56b9474996..41b46ae5cb8 100644 --- a/homeassistant/components/pocketcasts/manifest.json +++ b/homeassistant/components/pocketcasts/manifest.json @@ -3,6 +3,5 @@ "name": "Pocket Casts", "documentation": "https://www.home-assistant.io/integrations/pocketcasts", "requirements": ["pocketcasts==0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/point/.translations/bg.json b/homeassistant/components/point/.translations/bg.json deleted file mode 100644 index 3ddb9f998a2..00000000000 --- a/homeassistant/components/point/.translations/bg.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Point \u0430\u043a\u0430\u0443\u043d\u0442.", - "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f.", - "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", - "external_setup": "Point \u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043e\u0442 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441.", - "no_flows": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Point, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0435\u0442\u043e Point \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e/\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430." - }, - "error": { - "follow_link": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0438 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435", - "no_token": "\u041b\u0438\u043f\u0441\u0432\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Minut" - }, - "step": { - "auth": { - "description": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u043f\u0440\u0430\u0442\u043a\u0430\u0442\u0430 \u043f\u043e-\u0434\u043e\u043b\u0443 \u0438 \u041f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Minut, \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443. \n\n[Link]({authorization_url})", - "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Point" - }, - "user": { - "data": { - "flow_impl": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" - }, - "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435, \u0447\u0440\u0435\u0437 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0441 Point.", - "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/ca.json b/homeassistant/components/point/.translations/ca.json deleted file mode 100644 index c4d9228532d..00000000000 --- a/homeassistant/components/point/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un compte de Point.", - "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "external_setup": "Point s'ha configurat correctament des d'un altre flux de dades.", - "no_flows": "Necessites configurar Point abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Minut per als teus dispositiu/s Point." - }, - "error": { - "follow_link": "V\u00e9s a l'enlla\u00e7 i autentica't abans de pr\u00e9mer Envia", - "no_token": "No s'ha autenticat amb Minut" - }, - "step": { - "auth": { - "description": "V\u00e9s a l'enlla\u00e7 seg\u00fcent i Accepta l'acc\u00e9s al teu compte de Minut, despr\u00e9s torna i prem Envia (a sota). \n\n[Enlla\u00e7]({authorization_url})", - "title": "Autenticar Point" - }, - "user": { - "data": { - "flow_impl": "Prove\u00efdor" - }, - "description": "Tria quin prove\u00efdor d'autenticaci\u00f3 vols utilitzar per autenticar-te amb Point.", - "title": "Prove\u00efdor d'autenticaci\u00f3" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/cs.json b/homeassistant/components/point/.translations/cs.json deleted file mode 100644 index 71f13959b41..00000000000 --- a/homeassistant/components/point/.translations/cs.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_fail": "Nezn\u00e1m\u00e1 chyba p\u0159i generov\u00e1n\u00ed autoriza\u010dn\u00ed URL.", - "authorize_url_timeout": "\u010casov\u00fd limit autoriza\u010dn\u00edho URL vypr\u0161el", - "external_setup": "Point \u00fasp\u011b\u0161n\u011b nakonfigurov\u00e1n z jin\u00e9ho toku.", - "no_flows": "Mus\u00edte nakonfigurovat Point, abyste se s n\u00edm mohli ov\u011b\u0159it. [P\u0159e\u010dt\u011bte si pros\u00edm pokyny](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "\u00dasp\u011b\u0161n\u011b ov\u011b\u0159eno pomoc\u00ed n\u00e1stroje Minut pro va\u0161e za\u0159\u00edzen\u00ed Point" - }, - "error": { - "follow_link": "P\u0159edt\u00edm, ne\u017e stisknete tla\u010d\u00edtko Odeslat, postupujte podle tohoto odkazu a autentizujte se", - "no_token": "Nen\u00ed ov\u011b\u0159en s Minut" - }, - "step": { - "auth": { - "description": "Postupujte podle n\u00ed\u017ee uveden\u00e9ho odkazu a P\u0159ijm\u011bte p\u0159\u00edstup k \u00fa\u010dtu Minut, pot\u00e9 se vra\u0165te zp\u011bt a stiskn\u011bte n\u00ed\u017ee Odeslat . \n\n [Odkaz]({authorization_url})", - "title": "Ov\u011b\u0159en\u00ed Point" - }, - "user": { - "data": { - "flow_impl": "Poskytovatel" - }, - "description": "Zvolte pomoc\u00ed kter\u00e9ho poskytovatele ov\u011b\u0159ov\u00e1n\u00ed chcete ov\u011b\u0159it Point.", - "title": "Poskytovatel ov\u011b\u0159en\u00ed" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/da.json b/homeassistant/components/point/.translations/da.json deleted file mode 100644 index 4b6017ddd01..00000000000 --- a/homeassistant/components/point/.translations/da.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt Point konto.", - "authorize_url_fail": "Ukendt fejl ved generering af en autoriseret url.", - "authorize_url_timeout": "Timeout ved generering af autoriseret url.", - "external_setup": "Point er konfigureret med succes fra et andet flow.", - "no_flows": "Du skal konfigurere Point f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Godkendt med Minut mod Point enhed(er)" - }, - "error": { - "follow_link": "F\u00f8lg linket og godkend f\u00f8r du trykker p\u00e5 send", - "no_token": "Ikke godkendt med Minut" - }, - "step": { - "auth": { - "description": "F\u00f8lg linket herunder og Accept\u00e9r adgang til din Minut konto. Vend s\u00e5 tilbage og tryk p\u00e5 Tilf\u00f8j nedenfor. \n\n [Link]({authorization_url})", - "title": "Godkend Point" - }, - "user": { - "data": { - "flow_impl": "Udbyder" - }, - "description": "V\u00e6lg hvilken godkendelsesudbyder du vil godkende med Point.", - "title": "Godkendelsesudbyder" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/de.json b/homeassistant/components/point/.translations/de.json deleted file mode 100644 index 1072234a744..00000000000 --- a/homeassistant/components/point/.translations/de.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kannst nur ein Point-Konto konfigurieren.", - "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL.", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", - "external_setup": "Pointt erfolgreich von einem anderen Flow konfiguriert.", - "no_flows": "Du m\u00fcsst Point konfigurieren, bevor du dich damit authentifizieren kannst. [Bitte lese die Anweisungen] (https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Mit Minut erfolgreich f\u00fcr Ihre Point-Ger\u00e4te authentifiziert" - }, - "error": { - "follow_link": "Bitte folgen dem Link und authentifiziere dich, bevor du auf Senden klickst", - "no_token": "Nicht mit Minut authentifiziert" - }, - "step": { - "auth": { - "description": "Folge dem Link unten und Akzeptiere Zugriff auf dei Minut-Konto. Kehre dann zur\u00fcck und dr\u00fccke unten auf Senden . \n\n [Link]({authorization_url})", - "title": "Point authentifizieren" - }, - "user": { - "data": { - "flow_impl": "Anbieter" - }, - "description": "W\u00e4hle \u00fcber welchen Authentifizierungsanbieter du sich mit Point authentifizieren m\u00f6chtest.", - "title": "Authentifizierungsanbieter" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/en.json b/homeassistant/components/point/.translations/en.json deleted file mode 100644 index 705ac59b98d..00000000000 --- a/homeassistant/components/point/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure a Point account.", - "authorize_url_fail": "Unknown error generating an authorize url.", - "authorize_url_timeout": "Timeout generating authorize url.", - "external_setup": "Point successfully configured from another flow.", - "no_flows": "You need to configure Point before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Successfully authenticated with Minut for your Point device(s)" - }, - "error": { - "follow_link": "Please follow the link and authenticate before pressing Submit", - "no_token": "Not authenticated with Minut" - }, - "step": { - "auth": { - "description": "Please follow the link below and Accept access to your Minut account, then come back and press Submit below.\n\n[Link]({authorization_url})", - "title": "Authenticate Point" - }, - "user": { - "data": { - "flow_impl": "Provider" - }, - "description": "Pick via which authentication provider you want to authenticate with Point.", - "title": "Authentication Provider" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/es-419.json b/homeassistant/components/point/.translations/es-419.json deleted file mode 100644 index 7436513ba6f..00000000000 --- a/homeassistant/components/point/.translations/es-419.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puede configurar una cuenta Point.", - "authorize_url_fail": "Error desconocido al generar una URL de autorizaci\u00f3n.", - "external_setup": "Punto configurado con \u00e9xito desde otro flujo." - }, - "error": { - "follow_link": "Por favor, siga el enlace y autent\u00edquese antes de presionar Enviar", - "no_token": "No autenticado con Minut" - }, - "step": { - "auth": { - "description": "Siga el enlace a continuaci\u00f3n y Aceptar acceso a su cuenta de Minut, luego vuelva y presione Enviar continuaci\u00f3n. \n\n [Enlace] ( {authorization_url} )" - }, - "user": { - "data": { - "flow_impl": "Proveedor" - }, - "description": "Elija a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n desea autenticarse con Point.", - "title": "Proveedor de autenticaci\u00f3n" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/es.json b/homeassistant/components/point/.translations/es.json deleted file mode 100644 index 9a94e54dd5f..00000000000 --- a/homeassistant/components/point/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3lo se puede configurar una cuenta de Point.", - "authorize_url_fail": "Error desconocido generando la url de autorizaci\u00f3n", - "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n", - "external_setup": "Point se ha configurado correctamente a partir de otro flujo.", - "no_flows": "Es necesario configurar Point antes de poder autenticarse con \u00e9l. [Echa un vistazo a las instrucciones] (https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Autenticado correctamente con Minut para tu(s) dispositivo(s) Point" - }, - "error": { - "follow_link": "Accede al enlace e identif\u00edcate antes de pulsar Enviar.", - "no_token": "No autenticado con Minut" - }, - "step": { - "auth": { - "description": "Accede al siguiente enlace y Acepta el acceso a tu cuenta Minut, despu\u00e9s vuelve y pulsa en Enviar a continuaci\u00f3n.\n\n[Link]({authorization_url})", - "title": "Autenticaci\u00f3n con Point" - }, - "user": { - "data": { - "flow_impl": "Proveedor" - }, - "description": "Elige a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n quieres autenticarte con Point.", - "title": "Proveedor de autenticaci\u00f3n" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/fr.json b/homeassistant/components/point/.translations/fr.json deleted file mode 100644 index c20b62ef3b6..00000000000 --- a/homeassistant/components/point/.translations/fr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un compte Point.", - "authorize_url_fail": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'une URL d'autorisation.", - "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", - "external_setup": "Point correctement configur\u00e9 \u00e0 partir d\u2019un autre flux.", - "no_flows": "Vous devez configurer Point avant de pouvoir vous authentifier avec celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Authentification r\u00e9ussie avec Minut pour votre (vos) p\u00e9riph\u00e9rique (s) Point" - }, - "error": { - "follow_link": "Veuillez suivre le lien et vous authentifier avant d'appuyer sur Soumettre.", - "no_token": "Non authentifi\u00e9 avec Minut" - }, - "step": { - "auth": { - "description": "Suivez le lien ci-dessous et acceptez l'acc\u00e8s \u00e0 votre compte Minut, puis revenez et appuyez sur Envoyer ci-dessous. \n\n [Lien] ( {authorization_url} )", - "title": "Point d'authentification" - }, - "user": { - "data": { - "flow_impl": "Fournisseur" - }, - "description": "Choisissez via quel fournisseur d'authentification vous souhaitez vous authentifier avec Point.", - "title": "Fournisseur d'authentification" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/hu.json b/homeassistant/components/point/.translations/hu.json deleted file mode 100644 index 3192454550d..00000000000 --- a/homeassistant/components/point/.translations/hu.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_fail": "Ismeretlen hiba t\u00f6rt\u00e9nt a hiteles\u00edt\u00e9si link gener\u00e1l\u00e1sa sor\u00e1n.", - "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n." - }, - "error": { - "follow_link": "K\u00e9rlek, k\u00f6vesd a hivatkoz\u00e1st \u00e9s hiteles\u00edtsd magad miel\u0151tt megnyomod a K\u00fcld\u00e9s gombot", - "no_token": "A Minut nincs hiteles\u00edtve" - }, - "step": { - "auth": { - "description": "K\u00e9rlek k\u00f6vesd az al\u00e1bbi linket \u00e9s a Fogadd el a hozz\u00e1f\u00e9r\u00e9st a Minut fi\u00f3kj\u00e1hoz, majd t\u00e9rj vissza \u00e9s nyomd meg a K\u00fcld\u00e9s gombot. \n\n [Link] ( {authorization_url} )", - "title": "Point hiteles\u00edt\u00e9se" - }, - "user": { - "data": { - "flow_impl": "Szolg\u00e1ltat\u00f3" - }, - "description": "V\u00e1laszd ki, hogy melyik hiteles\u00edt\u00e9si szolg\u00e1ltat\u00f3n\u00e1l szeretn\u00e9d hiteles\u00edteni a Pointot.", - "title": "Hiteles\u00edt\u00e9si Szolg\u00e1ltat\u00f3" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/it.json b/homeassistant/components/point/.translations/it.json deleted file mode 100644 index 3c0ef8306e0..00000000000 --- a/homeassistant/components/point/.translations/it.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account Point.", - "authorize_url_fail": "Errore sconosciuto nel generare l'url di autorizzazione", - "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", - "external_setup": "Point configurato correttamente da un altro flusso.", - "no_flows": "Devi configurare Point prima di poter eseguire l'autenticazione. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Autenticato con successo con Minut per i tuoi dispositivi Point" - }, - "error": { - "follow_link": "Segui il link e autenticati prima di premere Invio", - "no_token": "Non autenticato con Minut" - }, - "step": { - "auth": { - "description": "Segui il link qui sotto e Accetta l'accesso al tuo account Minut, quindi torna indietro e premi Invia qui sotto. \n\n [Link] ( {authorization_url} )", - "title": "Autenticare Point" - }, - "user": { - "data": { - "flow_impl": "Provider" - }, - "description": "Scegli tramite quale provider di autenticazione vuoi autenticarti con Point.", - "title": "Provider di autenticazione" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/ko.json b/homeassistant/components/point/.translations/ko.json deleted file mode 100644 index 0dd9cd43ada..00000000000 --- a/homeassistant/components/point/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "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.", - "no_flows": "Point \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Point \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/point/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694." - }, - "create_entry": { - "default": "Point \uae30\uae30\ub85c Minut \uc5d0 \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "follow_link": "Submit \ubc84\ud2bc\uc744 \ub204\ub974\uae30 \uc804\uc5d0 \ub9c1\ud06c\ub97c \ub530\ub77c \uc778\uc99d\uc744 \ubc1b\uc544\uc8fc\uc138\uc694", - "no_token": "Minut \ub85c \uc778\uc99d\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4" - }, - "step": { - "auth": { - "description": "\uc544\ub798 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uc5ec Minut \uacc4\uc815\uc5d0 \ub300\ud574 \ub3d9\uc758 \ud55c \ub2e4\uc74c, \ub2e4\uc2dc \ub3cc\uc544\uc640\uc11c \ud558\ub2e8\uc758 Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694. \n\n[\ub9c1\ud06c] ({authorization_url})", - "title": "Point \uc778\uc99d" - }, - "user": { - "data": { - "flow_impl": "\uacf5\uae09\uc790" - }, - "description": "Point \ub97c \uc778\uc99d\ud558\uae30 \uc704\ud55c \uc778\uc99d \uacf5\uae09\uc790\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", - "title": "\uc778\uc99d \uacf5\uae09\uc790" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/lb.json b/homeassistant/components/point/.translations/lb.json deleted file mode 100644 index ea589a2c3d3..00000000000 --- a/homeassistant/components/point/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Point Kont konfigur\u00e9ieren.", - "authorize_url_fail": "Onbekannte Feeler beim gener\u00e9ieren vun der Autorisatiouns URL.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "external_setup": "Point gouf vun engem anere Floss erfollegr\u00e4ich konfigur\u00e9iert.", - "no_flows": "Dir musst Point konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Minut authentifiz\u00e9iert fir \u00e4r Point Apparater" - }, - "error": { - "follow_link": "Follegt w.e.g dem Link an authentifiz\u00e9iert iech ier de op Ofsch\u00e9cken dr\u00e9ckt", - "no_token": "Net mat Minut authentifiz\u00e9iert" - }, - "step": { - "auth": { - "description": "Follegt dem Link \u00ebnnendr\u00ebnner an accept\u00e9iert den Acc\u00e8s zu \u00e4rem Minut Kont , a kommt dann zer\u00e9ck heihin an dr\u00e9ck op ofsch\u00e9cken hei \u00ebnnen.\n\n[Link]({authorization_url})", - "title": "Point authentifiz\u00e9ieren" - }, - "user": { - "data": { - "flow_impl": "Ubidder" - }, - "description": "Wielt den Authentifikatioun Ubidder deen sech mat Point verbanne soll.", - "title": "Authentifikatioun Ubidder" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/nl.json b/homeassistant/components/point/.translations/nl.json deleted file mode 100644 index 1ca54237fd5..00000000000 --- a/homeassistant/components/point/.translations/nl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt alleen een Point-account configureren.", - "authorize_url_fail": "Onbekende fout bij het genereren van een autoriseer-URL.", - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "external_setup": "Punt succesvol geconfigureerd vanuit een andere stroom.", - "no_flows": "U moet Point configureren voordat u zich ermee kunt verifi\u00ebren. [Gelieve de instructies te lezen](https://www.home-assistant.io/components/nest/)." - }, - "create_entry": { - "default": "Succesvol geverifieerd met Minut voor uw Point appara(a)t(en)" - }, - "error": { - "follow_link": "Volg de link en verifieer voordat je op Verzenden klikt", - "no_token": "Niet geverifieerd met Minut" - }, - "step": { - "auth": { - "description": "Ga naar onderstaande link en Accepteer toegang tot je Minut account, kom dan hier terug en klik op Verzenden hier onder.\n\n[Link]({authorization_url})", - "title": "Verificatie Point" - }, - "user": { - "data": { - "flow_impl": "Leverancier" - }, - "description": "Kies met welke authenticatieprovider u wilt authenticeren met Point.", - "title": "Authenticatieleverancier" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/nn.json b/homeassistant/components/point/.translations/nn.json deleted file mode 100644 index 865155c0494..00000000000 --- a/homeassistant/components/point/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/no.json b/homeassistant/components/point/.translations/no.json deleted file mode 100644 index 1448b56d848..00000000000 --- a/homeassistant/components/point/.translations/no.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere \u00e9n Point-konto.", - "authorize_url_fail": "Ukjent feil ved generering en autoriseringsadresse.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "external_setup": "Punktet er konfigurert fra en annen flyt.", - "no_flows": "Du m\u00e5 konfigurere Point f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Vellykket autentisering med Minut for din(e) Point enhet(er)" - }, - "error": { - "follow_link": "Vennligst f\u00f8lg lenken og autentiser f\u00f8r du trykker p\u00e5 Send", - "no_token": "Ikke autentisert med Minut" - }, - "step": { - "auth": { - "description": "Vennligst f\u00f8lg lenken nedenfor og Godta tilgang til Minut-kontoen din, kom tilbake og trykk Send inn nedenfor. \n\n [Link]({authorization_url})", - "title": "Godkjenne Point" - }, - "user": { - "data": { - "flow_impl": "Tilbyder" - }, - "description": "Velg fra hvilken godkjenningsleverand\u00f8r du vil godkjenne med Point.", - "title": "Godkjenningsleverand\u00f8r" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/pl.json b/homeassistant/components/point/.translations/pl.json deleted file mode 100644 index 4de46c84137..00000000000 --- a/homeassistant/components/point/.translations/pl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko konto Point.", - "authorize_url_fail": "Nieznany b\u0142\u0105d podczas generowania url autoryzacji.", - "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", - "external_setup": "Punkt pomy\u015blnie skonfigurowany.", - "no_flows": "Musisz skonfigurowa\u0107 Point, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono przy u\u017cyciu Minut dla urz\u0105dze\u0144 Point" - }, - "error": { - "follow_link": "Prosz\u0119 klikn\u0105\u0107 link i uwierzytelni\u0107 przed naci\u015bni\u0119ciem przycisku Prze\u015blij", - "no_token": "Brak uwierzytelnienia za pomoc\u0105 Minut" - }, - "step": { - "auth": { - "description": "Kliknij poni\u017cszy link i Zaakceptuj dost\u0119p do konta Minut, a nast\u0119pnie wr\u00f3\u0107 i naci\u015bnij Prze\u015blij poni\u017cej. \n\n [Link]({authorization_url})", - "title": "Uwierzytelnienie Point" - }, - "user": { - "data": { - "flow_impl": "Dostawca" - }, - "description": "Wybierz, kt\u00f3rego dostawc\u0119 uwierzytelnienia chcesz u\u017cywa\u0107 z Point.", - "title": "Dostawca uwierzytelnienia" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/pt-BR.json b/homeassistant/components/point/.translations/pt-BR.json deleted file mode 100644 index 8a7bff38db3..00000000000 --- a/homeassistant/components/point/.translations/pt-BR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Voc\u00ea s\u00f3 pode configurar uma conta Point.", - "authorize_url_fail": "Erro desconhecido ao gerar URL de autoriza\u00e7\u00e3o.", - "authorize_url_timeout": "Excedido tempo limite gerando a URL de autoriza\u00e7\u00e3o.", - "external_setup": "Point configurado com \u00eaxito a partir de outro fluxo.", - "no_flows": "Voc\u00ea precisa configurar o Point antes de ser capaz de autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Autenticado com sucesso com Minut para seu(s) dispositivo(s) Point" - }, - "error": { - "follow_link": "Por favor, siga o link e autentique antes de pressionar Enviar", - "no_token": "N\u00e3o autenticado com Minut" - }, - "step": { - "auth": { - "description": "Siga o link abaixo e Aceite o acesso \u00e0 sua conta Minut, depois volte e pressione Enviar. \n\n [Link]({authorization_url})", - "title": "Autenticar Ponto" - }, - "user": { - "data": { - "flow_impl": "Provedor" - }, - "description": "Escolha atrav\u00e9s de qual provedor de autentica\u00e7\u00e3o voc\u00ea deseja autenticar com Point.", - "title": "Provedor de Autentica\u00e7\u00e3o" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/pt.json b/homeassistant/components/point/.translations/pt.json deleted file mode 100644 index 874f0832b6c..00000000000 --- a/homeassistant/components/point/.translations/pt.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3 pode configurar uma \u00fanica conta Point.", - "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", - "authorize_url_timeout": "Limite temporal ultrapassado ao gerar um URL de autoriza\u00e7\u00e3o.", - "external_setup": "Point configurado com \u00eaxito a partir de outro fluxo.", - "no_flows": "\u00c9 necess\u00e1rio configurar o Point antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Autenticado com sucesso com Minut para o(s) seu(s) dispositivo (s) Point" - }, - "error": { - "follow_link": "Por favor, siga o link e autentique antes de pressionar Enviar", - "no_token": "N\u00e3o autenticado com Minut" - }, - "step": { - "auth": { - "description": "Siga o link abaixo e Aceite o acesso \u00e0 sua conta Minut, depois volte e pressione Enviar abaixo. \n\n [Link] ( {authorization_url} )", - "title": "Autenticar Point" - }, - "user": { - "data": { - "flow_impl": "Fornecedor" - }, - "description": "Escolha com qual fornecedor de autentica\u00e7\u00e3o deseja autenticar o Point.", - "title": "Fornecedor de Autentica\u00e7\u00e3o" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/ru.json b/homeassistant/components/point/.translations/ru.json deleted file mode 100644 index b0fc5a61f72..00000000000 --- a/homeassistant/components/point/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "external_setup": "Point \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.", - "no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Point \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "error": { - "follow_link": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\".", - "no_token": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430." - }, - "step": { - "auth": { - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e [\u0441\u0441\u044b\u043b\u043a\u0435]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Minut, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c.", - "title": "Minut Point" - }, - "user": { - "data": { - "flow_impl": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0445\u043e\u0434.", - "title": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/sl.json b/homeassistant/components/point/.translations/sl.json deleted file mode 100644 index bd0ac2f1218..00000000000 --- a/homeassistant/components/point/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nastavite lahko samo en ra\u010dun Point.", - "authorize_url_fail": "Neznana napaka pri generiranju potrditvenega URL-ja.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "external_setup": "To\u010dka uspe\u0161no konfigurirana iz drugega toka.", - "no_flows": "Preden lahko preverite pristnost, morate konfigurirati Point. [Preberite navodila](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Uspe\u0161no overjen z Minut-om za va\u0161e Point naprave" - }, - "error": { - "follow_link": "Prosimo, sledite povezavi in \u200b\u200bpreverite pristnost, preden pritisnete Po\u0161lji", - "no_token": "Ni potrjeno z Minutom" - }, - "step": { - "auth": { - "description": "Prosimo, sledite spodnji povezavi in Sprejmite dostop do va\u0161ega Minut ra\u010duna, nato se vrnite in pritisnite Po\u0161lji spodaj. \n\n [Povezava] ( {authorization_url} )", - "title": "To\u010dka za overovitev" - }, - "user": { - "data": { - "flow_impl": "Ponudnik" - }, - "description": "Izberite prek katerega ponudnika overjanja, ki ga \u017eelite overiti z Point-om.", - "title": "Ponudnik za preverjanje pristnosti" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/sv.json b/homeassistant/components/point/.translations/sv.json deleted file mode 100644 index c68fd29f7fc..00000000000 --- a/homeassistant/components/point/.translations/sv.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan endast konfigurera ett Point-konto.", - "authorize_url_fail": "Ok\u00e4nt fel n\u00e4r f\u00f6rs\u00f6ker generera en url f\u00f6r auktorisering.", - "authorize_url_timeout": "Timeout n\u00e4r genererar url f\u00f6r auktorisering.", - "external_setup": "Point har lyckats med konfigurering ifr\u00e5n ett annat fl\u00f6de.", - "no_flows": "Du beh\u00f6ver konfigurera Point innan de kan autentisera med den. [L\u00e4s instruktioner](https://www.home-assistant.io/components/point/)." - }, - "create_entry": { - "default": "Lyckad autentisering med Minut f\u00f6r din(a) Point-enhet(er)" - }, - "error": { - "follow_link": "F\u00f6lj l\u00e4nken och autentisera innan du trycker p\u00e5 Skicka", - "no_token": "Ej autentiserad med Minut" - }, - "step": { - "auth": { - "description": "V\u00e4nligen f\u00f6lj l\u00e4nken nedan och Acceptera tillg\u00e5ng till ditt Minut-konto, kom tillbaka och tryck p\u00e5 Skicka nedan. \n\n [L\u00e4nk]({authorization_url})", - "title": "Autentisera Point" - }, - "user": { - "data": { - "flow_impl": "Leverant\u00f6r" - }, - "description": "V\u00e4lj via vilken autentiseringsleverant\u00f6r du vill autentisera med Point.", - "title": "Autentiseringsleverant\u00f6r" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/zh-Hans.json b/homeassistant/components/point/.translations/zh-Hans.json deleted file mode 100644 index e171aedf1ce..00000000000 --- a/homeassistant/components/point/.translations/zh-Hans.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u60a8\u53ea\u80fd\u914d\u7f6e\u4e00\u4e2a Point \u5e10\u6237\u3002", - "authorize_url_fail": "\u751f\u6210\u6388\u6743\u7f51\u5740\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002", - "authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002", - "external_setup": "Point\u914d\u7f6e\u6210\u529f\u3002", - "no_flows": "\u60a8\u9700\u8981\u5148\u914d\u7f6e Point\uff0c\u7136\u540e\u624d\u80fd\u5bf9\u5176\u8fdb\u884c\u6388\u6743\u3002 [\u8bf7\u9605\u8bfb\u8bf4\u660e](https://www.home-assistant.io/components/point/)\u3002" - }, - "create_entry": { - "default": "\u4f7f\u7528 Minut \u4e3a\u60a8\u7684 Point \u8bbe\u5907\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u6210\u529f" - }, - "error": { - "follow_link": "\u8bf7\u5728\u70b9\u51fb\u63d0\u4ea4\u524d\u6309\u7167\u94fe\u63a5\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1", - "no_token": "\u672a\u7ecf Minut \u9a8c\u8bc1" - }, - "step": { - "auth": { - "description": "\u8bf7\u8bbf\u95ee\u4e0b\u65b9\u7684\u94fe\u63a5\u5e76\u5141\u8bb8\u8bbf\u95ee\u60a8\u7684 Minut \u8d26\u6237\uff0c\u7136\u540e\u56de\u6765\u70b9\u51fb\u4e0b\u9762\u7684\u63d0\u4ea4\u3002\n\n[\u94fe\u63a5]({authorization_url})", - "title": "\u8ba4\u8bc1\u70b9" - }, - "user": { - "data": { - "flow_impl": "\u63d0\u4f9b\u8005" - }, - "description": "\u9009\u62e9\u60a8\u60f3\u901a\u8fc7\u54ea\u4e2a\u6388\u6743\u63d0\u4f9b\u8005\u4e0e Point \u8fdb\u884c\u6388\u6743\u3002", - "title": "\u6388\u6743\u63d0\u4f9b\u8005" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/.translations/zh-Hant.json b/homeassistant/components/point/.translations/zh-Hant.json deleted file mode 100644 index f1bbb1c872c..00000000000 --- a/homeassistant/components/point/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Point \u5e33\u865f\u3002", - "authorize_url_fail": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", - "external_setup": "\u5df2\u7531\u5176\u4ed6\u6d41\u7a0b\u6210\u529f\u8a2d\u5b9a Point\u3002", - "no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Point \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/point/)\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Minut Point \u8a2d\u5099\u3002" - }, - "error": { - "follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002", - "no_token": "Minut \u672a\u6388\u6b0a" - }, - "step": { - "auth": { - "description": "\u8acb\u4f7f\u7528\u4e0b\u65b9\u9023\u7d50\u4e26\u9ede\u9078\u63a5\u53d7\u4ee5\u5b58\u53d6 Minut \u5e33\u865f\uff0c\u7136\u5f8c\u8fd4\u56de\u6b64\u9801\u9762\u4e26\u9ede\u9078\u4e0b\u65b9\u7684\u50b3\u9001\u3002\n\n[Link]({authorization_url})", - "title": "\u8a8d\u8b49 Point" - }, - "user": { - "data": { - "flow_impl": "\u63d0\u4f9b\u8005" - }, - "description": "\u65bc\u8a8d\u8b49\u63d0\u4f9b\u8005\u4e2d\u6311\u9078\u6240\u8981\u9032\u884c Point \u8a8d\u8b49\u63d0\u4f9b\u8005\u3002", - "title": "\u8a8d\u8b49\u63d0\u4f9b\u8005" - } - }, - "title": "Minut Point" - } -} \ No newline at end of file diff --git a/homeassistant/components/point/__init__.py b/homeassistant/components/point/__init__.py index 2817871cd7c..2d6f39feb11 100644 --- a/homeassistant/components/point/__init__.py +++ b/homeassistant/components/point/__init__.py @@ -271,7 +271,6 @@ class MinutPointEntity(Entity): async def _update_callback(self): """Update the value of the sensor.""" - pass @property def available(self): @@ -310,7 +309,7 @@ class MinutPointEntity(Entity): "connections": {("mac", device["device_mac"])}, "identifieres": device["device_id"], "manufacturer": "Minut", - "model": "Point v{}".format(device["hardware_version"]), + "model": f"Point v{device['hardware_version']}", "name": device["description"], "sw_version": device["firmware"]["installed"], "via_device": (DOMAIN, device["home"]), @@ -319,7 +318,7 @@ class MinutPointEntity(Entity): @property def name(self): """Return the display name of this device.""" - return "{} {}".format(self._name, self.device_class.capitalize()) + return f"{self._name} {self.device_class.capitalize()}" @property def is_updated(self): diff --git a/homeassistant/components/point/alarm_control_panel.py b/homeassistant/components/point/alarm_control_panel.py index e86b3dd42e8..d84c408e43a 100644 --- a/homeassistant/components/point/alarm_control_panel.py +++ b/homeassistant/components/point/alarm_control_panel.py @@ -72,7 +72,7 @@ class MinutPointAlarmControl(AlarmControlPanel): _LOGGER.debug("Received webhook: %s", _type) self._home["alarm_status"] = _type self._changed_by = _changed_by - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def _home(self): diff --git a/homeassistant/components/point/binary_sensor.py b/homeassistant/components/point/binary_sensor.py index a08f7dbedc4..b417c128913 100644 --- a/homeassistant/components/point/binary_sensor.py +++ b/homeassistant/components/point/binary_sensor.py @@ -95,7 +95,7 @@ class MinutPointBinarySensor(MinutPointEntity, BinarySensorDevice): self._is_on = True else: self._is_on = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def _webhook_event(self, data, webhook): @@ -111,7 +111,7 @@ class MinutPointBinarySensor(MinutPointEntity, BinarySensorDevice): self._is_on = True if _type == self._events[1]: self._is_on = None - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self): diff --git a/homeassistant/components/point/sensor.py b/homeassistant/components/point/sensor.py index 324565aae50..70fe1ef0b6d 100644 --- a/homeassistant/components/point/sensor.py +++ b/homeassistant/components/point/sensor.py @@ -62,7 +62,7 @@ class MinutPointSensor(MinutPointEntity): self.device.sensor, self.device_class ) self._updated = parse_datetime(self.device.last_update) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def icon(self): diff --git a/homeassistant/components/point/strings.json b/homeassistant/components/point/strings.json index e5491a8bbee..f3b5fd5c4c4 100644 --- a/homeassistant/components/point/strings.json +++ b/homeassistant/components/point/strings.json @@ -1,13 +1,10 @@ { "config": { - "title": "Minut Point", "step": { "user": { "title": "Authentication Provider", "description": "Pick via which authentication provider you want to authenticate with Point.", - "data": { - "flow_impl": "Provider" - } + "data": { "flow_impl": "Provider" } }, "auth": { "title": "Authenticate Point", diff --git a/homeassistant/components/point/translations/bg.json b/homeassistant/components/point/translations/bg.json new file mode 100644 index 00000000000..9a52ca8ad52 --- /dev/null +++ b/homeassistant/components/point/translations/bg.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Point \u0430\u043a\u0430\u0443\u043d\u0442.", + "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f.", + "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", + "external_setup": "Point \u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u043e\u0442 \u0434\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441.", + "no_flows": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Point, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0435\u0442\u043e Point \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e/\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430." + }, + "error": { + "follow_link": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0438 \u0441\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435", + "no_token": "\u041b\u0438\u043f\u0441\u0432\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Minut" + }, + "step": { + "auth": { + "description": "\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u043f\u0440\u0430\u0442\u043a\u0430\u0442\u0430 \u043f\u043e-\u0434\u043e\u043b\u0443 \u0438 \u041f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0430 \u0434\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 Minut, \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443. \n\n[Link]({authorization_url})", + "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Point" + }, + "user": { + "data": { + "flow_impl": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a" + }, + "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435, \u0447\u0440\u0435\u0437 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0441 Point.", + "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u0447\u0438\u043a \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/ca.json b/homeassistant/components/point/translations/ca.json new file mode 100644 index 00000000000..6ff775a8a0e --- /dev/null +++ b/homeassistant/components/point/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un compte de Point.", + "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "external_setup": "Point s'ha configurat correctament des d'un altre flux de dades.", + "no_flows": "Necessites configurar Point abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Minut per als teus dispositiu/s Point." + }, + "error": { + "follow_link": "V\u00e9s a l'enlla\u00e7 i autentica't abans de pr\u00e9mer Envia", + "no_token": "No s'ha autenticat amb Minut" + }, + "step": { + "auth": { + "description": "V\u00e9s a l'enlla\u00e7 seg\u00fcent i Accepta l'acc\u00e9s al teu compte de Minut, despr\u00e9s torna i prem Envia (a sota). \n\n[Enlla\u00e7]({authorization_url})", + "title": "Autenticar Point" + }, + "user": { + "data": { + "flow_impl": "Prove\u00efdor" + }, + "description": "Tria quin prove\u00efdor d'autenticaci\u00f3 vols utilitzar per autenticar-te amb Point.", + "title": "Prove\u00efdor d'autenticaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/cs.json b/homeassistant/components/point/translations/cs.json new file mode 100644 index 00000000000..f9c802c2612 --- /dev/null +++ b/homeassistant/components/point/translations/cs.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "authorize_url_fail": "Nezn\u00e1m\u00e1 chyba p\u0159i generov\u00e1n\u00ed autoriza\u010dn\u00ed URL.", + "authorize_url_timeout": "\u010casov\u00fd limit autoriza\u010dn\u00edho URL vypr\u0161el", + "external_setup": "Point \u00fasp\u011b\u0161n\u011b nakonfigurov\u00e1n z jin\u00e9ho toku.", + "no_flows": "Mus\u00edte nakonfigurovat Point, abyste se s n\u00edm mohli ov\u011b\u0159it. [P\u0159e\u010dt\u011bte si pros\u00edm pokyny](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "\u00dasp\u011b\u0161n\u011b ov\u011b\u0159eno pomoc\u00ed n\u00e1stroje Minut pro va\u0161e za\u0159\u00edzen\u00ed Point" + }, + "error": { + "follow_link": "P\u0159edt\u00edm, ne\u017e stisknete tla\u010d\u00edtko Odeslat, postupujte podle tohoto odkazu a autentizujte se", + "no_token": "Nen\u00ed ov\u011b\u0159en s Minut" + }, + "step": { + "auth": { + "description": "Postupujte podle n\u00ed\u017ee uveden\u00e9ho odkazu a P\u0159ijm\u011bte p\u0159\u00edstup k \u00fa\u010dtu Minut, pot\u00e9 se vra\u0165te zp\u011bt a stiskn\u011bte n\u00ed\u017ee Odeslat . \n\n [Odkaz]({authorization_url})", + "title": "Ov\u011b\u0159en\u00ed Point" + }, + "user": { + "data": { + "flow_impl": "Poskytovatel" + }, + "description": "Zvolte pomoc\u00ed kter\u00e9ho poskytovatele ov\u011b\u0159ov\u00e1n\u00ed chcete ov\u011b\u0159it Point.", + "title": "Poskytovatel ov\u011b\u0159en\u00ed" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/da.json b/homeassistant/components/point/translations/da.json new file mode 100644 index 00000000000..4530705a8b2 --- /dev/null +++ b/homeassistant/components/point/translations/da.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt Point konto.", + "authorize_url_fail": "Ukendt fejl ved generering af en autoriseret url.", + "authorize_url_timeout": "Timeout ved generering af autoriseret url.", + "external_setup": "Point er konfigureret med succes fra et andet flow.", + "no_flows": "Du skal konfigurere Point f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Godkendt med Minut mod Point enhed(er)" + }, + "error": { + "follow_link": "F\u00f8lg linket og godkend f\u00f8r du trykker p\u00e5 send", + "no_token": "Ikke godkendt med Minut" + }, + "step": { + "auth": { + "description": "F\u00f8lg linket herunder og Accept\u00e9r adgang til din Minut konto. Vend s\u00e5 tilbage og tryk p\u00e5 Tilf\u00f8j nedenfor. \n\n [Link]({authorization_url})", + "title": "Godkend Point" + }, + "user": { + "data": { + "flow_impl": "Udbyder" + }, + "description": "V\u00e6lg hvilken godkendelsesudbyder du vil godkende med Point.", + "title": "Godkendelsesudbyder" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/de.json b/homeassistant/components/point/translations/de.json new file mode 100644 index 00000000000..b505df4ec25 --- /dev/null +++ b/homeassistant/components/point/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kannst nur ein Point-Konto konfigurieren.", + "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL.", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", + "external_setup": "Pointt erfolgreich von einem anderen Flow konfiguriert.", + "no_flows": "Du m\u00fcsst Point konfigurieren, bevor du dich damit authentifizieren kannst. [Bitte lese die Anweisungen] (https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Mit Minut erfolgreich f\u00fcr Ihre Point-Ger\u00e4te authentifiziert" + }, + "error": { + "follow_link": "Bitte folgen dem Link und authentifiziere dich, bevor du auf Senden klickst", + "no_token": "Nicht mit Minut authentifiziert" + }, + "step": { + "auth": { + "description": "Folge dem Link unten und Akzeptiere Zugriff auf dei Minut-Konto. Kehre dann zur\u00fcck und dr\u00fccke unten auf Senden . \n\n [Link]({authorization_url})", + "title": "Point authentifizieren" + }, + "user": { + "data": { + "flow_impl": "Anbieter" + }, + "description": "W\u00e4hle \u00fcber welchen Authentifizierungsanbieter du sich mit Point authentifizieren m\u00f6chtest.", + "title": "Authentifizierungsanbieter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/en.json b/homeassistant/components/point/translations/en.json new file mode 100644 index 00000000000..e55bb54da46 --- /dev/null +++ b/homeassistant/components/point/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure a Point account.", + "authorize_url_fail": "Unknown error generating an authorize url.", + "authorize_url_timeout": "Timeout generating authorize url.", + "external_setup": "Point successfully configured from another flow.", + "no_flows": "You need to configure Point before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Successfully authenticated with Minut for your Point device(s)" + }, + "error": { + "follow_link": "Please follow the link and authenticate before pressing Submit", + "no_token": "Not authenticated with Minut" + }, + "step": { + "auth": { + "description": "Please follow the link below and Accept access to your Minut account, then come back and press Submit below.\n\n[Link]({authorization_url})", + "title": "Authenticate Point" + }, + "user": { + "data": { + "flow_impl": "Provider" + }, + "description": "Pick via which authentication provider you want to authenticate with Point.", + "title": "Authentication Provider" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/es-419.json b/homeassistant/components/point/translations/es-419.json new file mode 100644 index 00000000000..2b6e51ba4a9 --- /dev/null +++ b/homeassistant/components/point/translations/es-419.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puede configurar una cuenta Point.", + "authorize_url_fail": "Error desconocido al generar una URL de autorizaci\u00f3n.", + "external_setup": "Punto configurado con \u00e9xito desde otro flujo." + }, + "error": { + "follow_link": "Por favor, siga el enlace y autent\u00edquese antes de presionar Enviar", + "no_token": "No autenticado con Minut" + }, + "step": { + "auth": { + "description": "Siga el enlace a continuaci\u00f3n y Aceptar acceso a su cuenta de Minut, luego vuelva y presione Enviar continuaci\u00f3n. \n\n [Enlace] ( {authorization_url} )" + }, + "user": { + "data": { + "flow_impl": "Proveedor" + }, + "description": "Elija a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n desea autenticarse con Point.", + "title": "Proveedor de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/es.json b/homeassistant/components/point/translations/es.json new file mode 100644 index 00000000000..0589f7c8468 --- /dev/null +++ b/homeassistant/components/point/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3lo se puede configurar una cuenta de Point.", + "authorize_url_fail": "Error desconocido generando la url de autorizaci\u00f3n", + "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n", + "external_setup": "Point se ha configurado correctamente a partir de otro flujo.", + "no_flows": "Es necesario configurar Point antes de poder autenticarse con \u00e9l. [Echa un vistazo a las instrucciones] (https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Autenticado correctamente con Minut para tu(s) dispositivo(s) Point" + }, + "error": { + "follow_link": "Accede al enlace e identif\u00edcate antes de pulsar Enviar.", + "no_token": "No autenticado con Minut" + }, + "step": { + "auth": { + "description": "Accede al siguiente enlace y Acepta el acceso a tu cuenta Minut, despu\u00e9s vuelve y pulsa en Enviar a continuaci\u00f3n.\n\n[Link]({authorization_url})", + "title": "Autenticaci\u00f3n con Point" + }, + "user": { + "data": { + "flow_impl": "Proveedor" + }, + "description": "Elige a trav\u00e9s de qu\u00e9 proveedor de autenticaci\u00f3n quieres autenticarte con Point.", + "title": "Proveedor de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/fr.json b/homeassistant/components/point/translations/fr.json new file mode 100644 index 00000000000..75f7a252102 --- /dev/null +++ b/homeassistant/components/point/translations/fr.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un compte Point.", + "authorize_url_fail": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'une URL d'autorisation.", + "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", + "external_setup": "Point correctement configur\u00e9 \u00e0 partir d\u2019un autre flux.", + "no_flows": "Vous devez configurer Point avant de pouvoir vous authentifier avec celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Authentification r\u00e9ussie avec Minut pour votre (vos) p\u00e9riph\u00e9rique (s) Point" + }, + "error": { + "follow_link": "Veuillez suivre le lien et vous authentifier avant d'appuyer sur Soumettre.", + "no_token": "Non authentifi\u00e9 avec Minut" + }, + "step": { + "auth": { + "description": "Suivez le lien ci-dessous et acceptez l'acc\u00e8s \u00e0 votre compte Minut, puis revenez et appuyez sur Envoyer ci-dessous. \n\n [Lien] ( {authorization_url} )", + "title": "Point d'authentification" + }, + "user": { + "data": { + "flow_impl": "Fournisseur" + }, + "description": "Choisissez via quel fournisseur d'authentification vous souhaitez vous authentifier avec Point.", + "title": "Fournisseur d'authentification" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/hu.json b/homeassistant/components/point/translations/hu.json new file mode 100644 index 00000000000..d63879b3b5e --- /dev/null +++ b/homeassistant/components/point/translations/hu.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "authorize_url_fail": "Ismeretlen hiba t\u00f6rt\u00e9nt a hiteles\u00edt\u00e9si link gener\u00e1l\u00e1sa sor\u00e1n.", + "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n." + }, + "error": { + "follow_link": "K\u00e9rlek, k\u00f6vesd a hivatkoz\u00e1st \u00e9s hiteles\u00edtsd magad miel\u0151tt megnyomod a K\u00fcld\u00e9s gombot", + "no_token": "A Minut nincs hiteles\u00edtve" + }, + "step": { + "auth": { + "description": "K\u00e9rlek k\u00f6vesd az al\u00e1bbi linket \u00e9s a Fogadd el a hozz\u00e1f\u00e9r\u00e9st a Minut fi\u00f3kj\u00e1hoz, majd t\u00e9rj vissza \u00e9s nyomd meg a K\u00fcld\u00e9s gombot. \n\n [Link] ( {authorization_url} )", + "title": "Point hiteles\u00edt\u00e9se" + }, + "user": { + "data": { + "flow_impl": "Szolg\u00e1ltat\u00f3" + }, + "description": "V\u00e1laszd ki, hogy melyik hiteles\u00edt\u00e9si szolg\u00e1ltat\u00f3n\u00e1l szeretn\u00e9d hiteles\u00edteni a Pointot.", + "title": "Hiteles\u00edt\u00e9si Szolg\u00e1ltat\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/it.json b/homeassistant/components/point/translations/it.json new file mode 100644 index 00000000000..62225188d8a --- /dev/null +++ b/homeassistant/components/point/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account Point.", + "authorize_url_fail": "Errore sconosciuto nel generare l'url di autorizzazione", + "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", + "external_setup": "Point configurato correttamente da un altro flusso.", + "no_flows": "Devi configurare Point prima di poter eseguire l'autenticazione. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Autenticato con successo con Minut per i tuoi dispositivi Point" + }, + "error": { + "follow_link": "Segui il link e autenticati prima di premere Invio", + "no_token": "Non autenticato con Minut" + }, + "step": { + "auth": { + "description": "Segui il link qui sotto e Accetta l'accesso al tuo account Minut, quindi torna indietro e premi Invia qui sotto. \n\n [Link] ( {authorization_url} )", + "title": "Autenticare Point" + }, + "user": { + "data": { + "flow_impl": "Provider" + }, + "description": "Scegli tramite quale provider di autenticazione vuoi autenticarti con Point.", + "title": "Provider di autenticazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/ko.json b/homeassistant/components/point/translations/ko.json new file mode 100644 index 00000000000..a121d9bb460 --- /dev/null +++ b/homeassistant/components/point/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "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.", + "no_flows": "Point \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Point \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/point/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694." + }, + "create_entry": { + "default": "Point \uae30\uae30\ub85c Minut \uc5d0 \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "follow_link": "Submit \ubc84\ud2bc\uc744 \ub204\ub974\uae30 \uc804\uc5d0 \ub9c1\ud06c\ub97c \ub530\ub77c \uc778\uc99d\uc744 \ubc1b\uc544\uc8fc\uc138\uc694", + "no_token": "Minut \ub85c \uc778\uc99d\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4" + }, + "step": { + "auth": { + "description": "\uc544\ub798 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uc5ec Minut \uacc4\uc815\uc5d0 \ub300\ud574 \ub3d9\uc758 \ud55c \ub2e4\uc74c, \ub2e4\uc2dc \ub3cc\uc544\uc640\uc11c \ud558\ub2e8\uc758 Submit \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694. \n\n[\ub9c1\ud06c] ({authorization_url})", + "title": "Point \uc778\uc99d" + }, + "user": { + "data": { + "flow_impl": "\uacf5\uae09\uc790" + }, + "description": "Point \ub97c \uc778\uc99d\ud558\uae30 \uc704\ud55c \uc778\uc99d \uacf5\uae09\uc790\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", + "title": "\uc778\uc99d \uacf5\uae09\uc790" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/lb.json b/homeassistant/components/point/translations/lb.json new file mode 100644 index 00000000000..9262a271fb1 --- /dev/null +++ b/homeassistant/components/point/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Point Kont konfigur\u00e9ieren.", + "authorize_url_fail": "Onbekannte Feeler beim gener\u00e9ieren vun der Autorisatiouns URL.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "external_setup": "Point gouf vun engem anere Floss erfollegr\u00e4ich konfigur\u00e9iert.", + "no_flows": "Dir musst Point konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Minut authentifiz\u00e9iert fir \u00e4r Point Apparater" + }, + "error": { + "follow_link": "Follegt w.e.g dem Link an authentifiz\u00e9iert iech ier de op Ofsch\u00e9cken dr\u00e9ckt", + "no_token": "Net mat Minut authentifiz\u00e9iert" + }, + "step": { + "auth": { + "description": "Follegt dem Link \u00ebnnendr\u00ebnner an accept\u00e9iert den Acc\u00e8s zu \u00e4rem Minut Kont , a kommt dann zer\u00e9ck heihin an dr\u00e9ck op ofsch\u00e9cken hei \u00ebnnen.\n\n[Link]({authorization_url})", + "title": "Point authentifiz\u00e9ieren" + }, + "user": { + "data": { + "flow_impl": "Ubidder" + }, + "description": "Wielt den Authentifikatioun Ubidder deen sech mat Point verbanne soll.", + "title": "Authentifikatioun Ubidder" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/nl.json b/homeassistant/components/point/translations/nl.json new file mode 100644 index 00000000000..a257ba3e111 --- /dev/null +++ b/homeassistant/components/point/translations/nl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt alleen een Point-account configureren.", + "authorize_url_fail": "Onbekende fout bij het genereren van een autoriseer-URL.", + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "external_setup": "Punt succesvol geconfigureerd vanuit een andere stroom.", + "no_flows": "U moet Point configureren voordat u zich ermee kunt verifi\u00ebren. [Gelieve de instructies te lezen](https://www.home-assistant.io/components/nest/)." + }, + "create_entry": { + "default": "Succesvol geverifieerd met Minut voor uw Point appara(a)t(en)" + }, + "error": { + "follow_link": "Volg de link en verifieer voordat je op Verzenden klikt", + "no_token": "Niet geverifieerd met Minut" + }, + "step": { + "auth": { + "description": "Ga naar onderstaande link en Accepteer toegang tot je Minut account, kom dan hier terug en klik op Verzenden hier onder.\n\n[Link]({authorization_url})", + "title": "Verificatie Point" + }, + "user": { + "data": { + "flow_impl": "Leverancier" + }, + "description": "Kies met welke authenticatieprovider u wilt authenticeren met Point.", + "title": "Authenticatieleverancier" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/nn.json b/homeassistant/components/point/translations/nn.json new file mode 100644 index 00000000000..e5a6ea182ff --- /dev/null +++ b/homeassistant/components/point/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Minut Point" +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/no.json b/homeassistant/components/point/translations/no.json new file mode 100644 index 00000000000..e275d0f231e --- /dev/null +++ b/homeassistant/components/point/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere \u00e9n Point-konto.", + "authorize_url_fail": "Ukjent feil ved generering en autoriseringsadresse.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "external_setup": "Punktet er konfigurert fra en annen flyt.", + "no_flows": "Du m\u00e5 konfigurere Point f\u00f8r du kan autentisere med den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Vellykket autentisering med Minut for din(e) Point enhet(er)" + }, + "error": { + "follow_link": "Vennligst f\u00f8lg lenken og autentiser f\u00f8r du trykker p\u00e5 Send", + "no_token": "Ikke autentisert med Minut" + }, + "step": { + "auth": { + "description": "Vennligst f\u00f8lg lenken nedenfor og Godta tilgang til Minut-kontoen din, kom tilbake og trykk Send inn nedenfor. \n\n [Link]({authorization_url})", + "title": "Godkjenne Point" + }, + "user": { + "data": { + "flow_impl": "Tilbyder" + }, + "description": "Velg fra hvilken godkjenningsleverand\u00f8r du vil godkjenne med Point.", + "title": "Godkjenningsleverand\u00f8r" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/pl.json b/homeassistant/components/point/translations/pl.json new file mode 100644 index 00000000000..d13d3201546 --- /dev/null +++ b/homeassistant/components/point/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko konto Point.", + "authorize_url_fail": "Nieznany b\u0142\u0105d podczas generowania url autoryzacji.", + "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", + "external_setup": "Punkt pomy\u015blnie skonfigurowany.", + "no_flows": "Musisz skonfigurowa\u0107 Point, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono przy u\u017cyciu Minut dla urz\u0105dze\u0144 Point" + }, + "error": { + "follow_link": "Prosz\u0119 klikn\u0105\u0107 link i uwierzytelni\u0107 przed naci\u015bni\u0119ciem przycisku \"Zatwierd\u017a\"", + "no_token": "Brak uwierzytelnienia za pomoc\u0105 Minut" + }, + "step": { + "auth": { + "description": "Kliknij poni\u017cszy link i Zaakceptuj dost\u0119p do konta Minut, a nast\u0119pnie wr\u00f3\u0107 i naci\u015bnij Zatwierd\u017a poni\u017cej. \n\n [Link]({authorization_url})", + "title": "Uwierzytelnienie Point" + }, + "user": { + "data": { + "flow_impl": "Dostawca" + }, + "description": "Wybierz, kt\u00f3rego dostawc\u0119 uwierzytelnienia chcesz u\u017cywa\u0107 z Point.", + "title": "Dostawca uwierzytelnienia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/pt-BR.json b/homeassistant/components/point/translations/pt-BR.json new file mode 100644 index 00000000000..5816f1a0bcd --- /dev/null +++ b/homeassistant/components/point/translations/pt-BR.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Voc\u00ea s\u00f3 pode configurar uma conta Point.", + "authorize_url_fail": "Erro desconhecido ao gerar URL de autoriza\u00e7\u00e3o.", + "authorize_url_timeout": "Excedido tempo limite gerando a URL de autoriza\u00e7\u00e3o.", + "external_setup": "Point configurado com \u00eaxito a partir de outro fluxo.", + "no_flows": "Voc\u00ea precisa configurar o Point antes de ser capaz de autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Autenticado com sucesso com Minut para seu(s) dispositivo(s) Point" + }, + "error": { + "follow_link": "Por favor, siga o link e autentique antes de pressionar Enviar", + "no_token": "N\u00e3o autenticado com Minut" + }, + "step": { + "auth": { + "description": "Siga o link abaixo e Aceite o acesso \u00e0 sua conta Minut, depois volte e pressione Enviar. \n\n [Link]({authorization_url})", + "title": "Autenticar Ponto" + }, + "user": { + "data": { + "flow_impl": "Provedor" + }, + "description": "Escolha atrav\u00e9s de qual provedor de autentica\u00e7\u00e3o voc\u00ea deseja autenticar com Point.", + "title": "Provedor de Autentica\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/pt.json b/homeassistant/components/point/translations/pt.json new file mode 100644 index 00000000000..609209738e8 --- /dev/null +++ b/homeassistant/components/point/translations/pt.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3 pode configurar uma \u00fanica conta Point.", + "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", + "authorize_url_timeout": "Limite temporal ultrapassado ao gerar um URL de autoriza\u00e7\u00e3o.", + "external_setup": "Point configurado com \u00eaxito a partir de outro fluxo.", + "no_flows": "\u00c9 necess\u00e1rio configurar o Point antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Autenticado com sucesso com Minut para o(s) seu(s) dispositivo (s) Point" + }, + "error": { + "follow_link": "Por favor, siga o link e autentique antes de pressionar Enviar", + "no_token": "N\u00e3o autenticado com Minut" + }, + "step": { + "auth": { + "description": "Siga o link abaixo e Aceite o acesso \u00e0 sua conta Minut, depois volte e pressione Enviar abaixo. \n\n [Link] ( {authorization_url} )", + "title": "Autenticar Point" + }, + "user": { + "data": { + "flow_impl": "Fornecedor" + }, + "description": "Escolha com qual fornecedor de autentica\u00e7\u00e3o deseja autenticar o Point.", + "title": "Fornecedor de Autentica\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/ru.json b/homeassistant/components/point/translations/ru.json new file mode 100644 index 00000000000..972a232036e --- /dev/null +++ b/homeassistant/components/point/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "external_setup": "Point \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.", + "no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Point \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "error": { + "follow_link": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\".", + "no_token": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430." + }, + "step": { + "auth": { + "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e [\u0441\u0441\u044b\u043b\u043a\u0435]({authorization_url}) \u0438 \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Minut, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c.", + "title": "Minut Point" + }, + "user": { + "data": { + "flow_impl": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0445\u043e\u0434.", + "title": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/sl.json b/homeassistant/components/point/translations/sl.json new file mode 100644 index 00000000000..2fd65bb972e --- /dev/null +++ b/homeassistant/components/point/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Nastavite lahko samo en ra\u010dun Point.", + "authorize_url_fail": "Neznana napaka pri generiranju potrditvenega URL-ja.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "external_setup": "To\u010dka uspe\u0161no konfigurirana iz drugega toka.", + "no_flows": "Preden lahko preverite pristnost, morate konfigurirati Point. [Preberite navodila](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Uspe\u0161no overjen z Minut-om za va\u0161e Point naprave" + }, + "error": { + "follow_link": "Prosimo, sledite povezavi in \u200b\u200bpreverite pristnost, preden pritisnete Po\u0161lji", + "no_token": "Ni potrjeno z Minutom" + }, + "step": { + "auth": { + "description": "Prosimo, sledite spodnji povezavi in Sprejmite dostop do va\u0161ega Minut ra\u010duna, nato se vrnite in pritisnite Po\u0161lji spodaj. \n\n [Povezava] ( {authorization_url} )", + "title": "To\u010dka za overovitev" + }, + "user": { + "data": { + "flow_impl": "Ponudnik" + }, + "description": "Izberite prek katerega ponudnika overjanja, ki ga \u017eelite overiti z Point-om.", + "title": "Ponudnik za preverjanje pristnosti" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/sv.json b/homeassistant/components/point/translations/sv.json new file mode 100644 index 00000000000..f7050c2c255 --- /dev/null +++ b/homeassistant/components/point/translations/sv.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan endast konfigurera ett Point-konto.", + "authorize_url_fail": "Ok\u00e4nt fel n\u00e4r f\u00f6rs\u00f6ker generera en url f\u00f6r auktorisering.", + "authorize_url_timeout": "Timeout n\u00e4r genererar url f\u00f6r auktorisering.", + "external_setup": "Point har lyckats med konfigurering ifr\u00e5n ett annat fl\u00f6de.", + "no_flows": "Du beh\u00f6ver konfigurera Point innan de kan autentisera med den. [L\u00e4s instruktioner](https://www.home-assistant.io/components/point/)." + }, + "create_entry": { + "default": "Lyckad autentisering med Minut f\u00f6r din(a) Point-enhet(er)" + }, + "error": { + "follow_link": "F\u00f6lj l\u00e4nken och autentisera innan du trycker p\u00e5 Skicka", + "no_token": "Ej autentiserad med Minut" + }, + "step": { + "auth": { + "description": "V\u00e4nligen f\u00f6lj l\u00e4nken nedan och Acceptera tillg\u00e5ng till ditt Minut-konto, kom tillbaka och tryck p\u00e5 Skicka nedan. \n\n [L\u00e4nk]({authorization_url})", + "title": "Autentisera Point" + }, + "user": { + "data": { + "flow_impl": "Leverant\u00f6r" + }, + "description": "V\u00e4lj via vilken autentiseringsleverant\u00f6r du vill autentisera med Point.", + "title": "Autentiseringsleverant\u00f6r" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/zh-Hans.json b/homeassistant/components/point/translations/zh-Hans.json new file mode 100644 index 00000000000..ecefc3b656c --- /dev/null +++ b/homeassistant/components/point/translations/zh-Hans.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u60a8\u53ea\u80fd\u914d\u7f6e\u4e00\u4e2a Point \u5e10\u6237\u3002", + "authorize_url_fail": "\u751f\u6210\u6388\u6743\u7f51\u5740\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002", + "authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002", + "external_setup": "Point\u914d\u7f6e\u6210\u529f\u3002", + "no_flows": "\u60a8\u9700\u8981\u5148\u914d\u7f6e Point\uff0c\u7136\u540e\u624d\u80fd\u5bf9\u5176\u8fdb\u884c\u6388\u6743\u3002 [\u8bf7\u9605\u8bfb\u8bf4\u660e](https://www.home-assistant.io/components/point/)\u3002" + }, + "create_entry": { + "default": "\u4f7f\u7528 Minut \u4e3a\u60a8\u7684 Point \u8bbe\u5907\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u6210\u529f" + }, + "error": { + "follow_link": "\u8bf7\u5728\u70b9\u51fb\u63d0\u4ea4\u524d\u6309\u7167\u94fe\u63a5\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1", + "no_token": "\u672a\u7ecf Minut \u9a8c\u8bc1" + }, + "step": { + "auth": { + "description": "\u8bf7\u8bbf\u95ee\u4e0b\u65b9\u7684\u94fe\u63a5\u5e76\u5141\u8bb8\u8bbf\u95ee\u60a8\u7684 Minut \u8d26\u6237\uff0c\u7136\u540e\u56de\u6765\u70b9\u51fb\u4e0b\u9762\u7684\u63d0\u4ea4\u3002\n\n[\u94fe\u63a5]({authorization_url})", + "title": "\u8ba4\u8bc1\u70b9" + }, + "user": { + "data": { + "flow_impl": "\u63d0\u4f9b\u8005" + }, + "description": "\u9009\u62e9\u60a8\u60f3\u901a\u8fc7\u54ea\u4e2a\u6388\u6743\u63d0\u4f9b\u8005\u4e0e Point \u8fdb\u884c\u6388\u6743\u3002", + "title": "\u6388\u6743\u63d0\u4f9b\u8005" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/zh-Hant.json b/homeassistant/components/point/translations/zh-Hant.json new file mode 100644 index 00000000000..0337dad22ef --- /dev/null +++ b/homeassistant/components/point/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Point \u5e33\u865f\u3002", + "authorize_url_fail": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", + "external_setup": "\u5df2\u7531\u5176\u4ed6\u6d41\u7a0b\u6210\u529f\u8a2d\u5b9a Point\u3002", + "no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Point \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/point/)\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Minut Point \u8a2d\u5099\u3002" + }, + "error": { + "follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002", + "no_token": "Minut \u672a\u6388\u6b0a" + }, + "step": { + "auth": { + "description": "\u8acb\u4f7f\u7528\u4e0b\u65b9\u9023\u7d50\u4e26\u9ede\u9078\u63a5\u53d7\u4ee5\u5b58\u53d6 Minut \u5e33\u865f\uff0c\u7136\u5f8c\u8fd4\u56de\u6b64\u9801\u9762\u4e26\u9ede\u9078\u4e0b\u65b9\u7684\u50b3\u9001\u3002\n\n[Link]({authorization_url})", + "title": "\u8a8d\u8b49 Point" + }, + "user": { + "data": { + "flow_impl": "\u63d0\u4f9b\u8005" + }, + "description": "\u65bc\u8a8d\u8b49\u63d0\u4f9b\u8005\u4e2d\u6311\u9078\u6240\u8981\u9032\u884c Point \u8a8d\u8b49\u63d0\u4f9b\u8005\u3002", + "title": "\u8a8d\u8b49\u63d0\u4f9b\u8005" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/ca.json b/homeassistant/components/powerwall/.translations/ca.json deleted file mode 100644 index 6b375c93ad8..00000000000 --- a/homeassistant/components/powerwall/.translations/ca.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El Powerwall ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "ip_address": "Adre\u00e7a IP" - }, - "title": "Connexi\u00f3 amb el Powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/de.json b/homeassistant/components/powerwall/.translations/de.json deleted file mode 100644 index 1a442e7fbb6..00000000000 --- a/homeassistant/components/powerwall/.translations/de.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Die Powerwall ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "ip_address": "IP-Adresse" - }, - "title": "Stellen Sie eine Verbindung zur Powerwall her" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/en.json b/homeassistant/components/powerwall/.translations/en.json deleted file mode 100644 index 583a88e5623..00000000000 --- a/homeassistant/components/powerwall/.translations/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "The powerwall is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "ip_address": "IP Address" - }, - "title": "Connect to the powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/es.json b/homeassistant/components/powerwall/.translations/es.json deleted file mode 100644 index f0d0c6dab6c..00000000000 --- a/homeassistant/components/powerwall/.translations/es.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El powerwall ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se pudo conectar, por favor int\u00e9ntelo de nuevo", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "ip_address": "Direcci\u00f3n IP" - }, - "title": "Conectarse al powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/fr.json b/homeassistant/components/powerwall/.translations/fr.json deleted file mode 100644 index b907b5d429c..00000000000 --- a/homeassistant/components/powerwall/.translations/fr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le Powerwall est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "ip_address": "Adresse IP" - }, - "title": "Connectez-vous au Powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/it.json b/homeassistant/components/powerwall/.translations/it.json deleted file mode 100644 index 0031ea5a9e2..00000000000 --- a/homeassistant/components/powerwall/.translations/it.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il Powerwall \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "ip_address": "Indirizzo IP" - }, - "title": "Connessione al Powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/ko.json b/homeassistant/components/powerwall/.translations/ko.json deleted file mode 100644 index d7fcd8bfe76..00000000000 --- a/homeassistant/components/powerwall/.translations/ko.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "powerwall \uc774 \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": { - "ip_address": "IP \uc8fc\uc18c" - }, - "title": "powerwall \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/lb.json b/homeassistant/components/powerwall/.translations/lb.json deleted file mode 100644 index c86cf73ba18..00000000000 --- a/homeassistant/components/powerwall/.translations/lb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Powerwall ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "ip_address": "IP Adresse" - }, - "title": "Mat der Powerwall verbannen" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/no.json b/homeassistant/components/powerwall/.translations/no.json deleted file mode 100644 index 63ce7b0da30..00000000000 --- a/homeassistant/components/powerwall/.translations/no.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Powerwall er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "ip_address": "IP adresse" - }, - "title": "Koble til powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/ru.json b/homeassistant/components/powerwall/.translations/ru.json deleted file mode 100644 index 4b162ed8c55..00000000000 --- a/homeassistant/components/powerwall/.translations/ru.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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." - }, - "step": { - "user": { - "data": { - "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441" - }, - "title": "Tesla Powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/.translations/zh-Hant.json b/homeassistant/components/powerwall/.translations/zh-Hant.json deleted file mode 100644 index b85ce09eff1..00000000000 --- a/homeassistant/components/powerwall/.translations/zh-Hant.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Powerwall \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "ip_address": "IP \u4f4d\u5740" - }, - "title": "\u9023\u7dda\u81f3 Powerwall" - } - }, - "title": "Tesla Powerwall" - } -} \ No newline at end of file diff --git a/homeassistant/components/powerwall/__init__.py b/homeassistant/components/powerwall/__init__.py index d5c7a534180..a76393e350a 100644 --- a/homeassistant/components/powerwall/__init__.py +++ b/homeassistant/components/powerwall/__init__.py @@ -4,18 +4,14 @@ from datetime import timedelta import logging import requests -from tesla_powerwall import ( - ApiError, - MetersResponse, - PowerWall, - PowerWallUnreachableError, -) +from tesla_powerwall import APIError, Powerwall, PowerwallUnreachableError import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.const import CONF_IP_ADDRESS -from homeassistant.core import HomeAssistant +from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers import entity_registry import homeassistant.helpers.config_validation as cv from homeassistant.helpers.update_coordinator import DataUpdateCoordinator @@ -25,6 +21,7 @@ from .const import ( POWERWALL_API_DEVICE_TYPE, POWERWALL_API_GRID_STATUS, POWERWALL_API_METERS, + POWERWALL_API_SERIAL_NUMBERS, POWERWALL_API_SITE_INFO, POWERWALL_API_SITEMASTER, POWERWALL_API_STATUS, @@ -60,6 +57,36 @@ async def async_setup(hass: HomeAssistant, config: dict): return True +async def _migrate_old_unique_ids(hass, entry_id, powerwall_data): + serial_numbers = powerwall_data[POWERWALL_API_SERIAL_NUMBERS] + site_info = powerwall_data[POWERWALL_API_SITE_INFO] + + @callback + def _async_migrator(entity_entry: entity_registry.RegistryEntry): + parts = entity_entry.unique_id.split("_") + # Check if the unique_id starts with the serial_numbers of the powerwakks + if parts[0 : len(serial_numbers)] != serial_numbers: + # The old unique_id ended with the nomianal_system_engery_kWh so we can use that + # to find the old base unique_id and extract the device_suffix. + normalized_energy_index = ( + len(parts) + - 1 + - parts[::-1].index(str(site_info.nominal_system_energy_kWh)) + ) + device_suffix = parts[normalized_energy_index + 1 :] + + new_unique_id = "_".join([*serial_numbers, *device_suffix]) + _LOGGER.info( + "Migrating unique_id from [%s] to [%s]", + entity_entry.unique_id, + new_unique_id, + ) + return {"new_unique_id": new_unique_id} + return None + + await entity_registry.async_migrate_entries(hass, entry_id, _async_migrator) + + async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up Tesla Powerwall from a config entry.""" @@ -67,13 +94,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): hass.data[DOMAIN].setdefault(entry_id, {}) http_session = requests.Session() - power_wall = PowerWall(entry.data[CONF_IP_ADDRESS], http_session=http_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 + await _migrate_old_unique_ids(hass, entry_id, powerwall_data) + async def async_update_data(): """Fetch data from API endpoint.""" return await hass.async_add_executor_job(_fetch_powerwall_data, power_wall) @@ -107,23 +137,24 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): def call_base_info(power_wall): """Wrap powerwall properties to be a callable.""" + serial_numbers = power_wall.get_serial_numbers() + # Make sure the serial numbers always have the same order + serial_numbers.sort() return { - POWERWALL_API_SITE_INFO: power_wall.site_info, - POWERWALL_API_STATUS: power_wall.status, - POWERWALL_API_DEVICE_TYPE: power_wall.device_type, + POWERWALL_API_SITE_INFO: power_wall.get_site_info(), + POWERWALL_API_STATUS: power_wall.get_status(), + POWERWALL_API_DEVICE_TYPE: power_wall.get_device_type(), + POWERWALL_API_SERIAL_NUMBERS: serial_numbers, } def _fetch_powerwall_data(power_wall): """Process and update powerwall data.""" - meters = power_wall.meters return { - POWERWALL_API_CHARGE: power_wall.charge, - POWERWALL_API_SITEMASTER: power_wall.sitemaster, - POWERWALL_API_METERS: { - meter: MetersResponse(meters[meter]) for meter in meters - }, - POWERWALL_API_GRID_STATUS: power_wall.grid_status, + POWERWALL_API_CHARGE: power_wall.get_charge(), + POWERWALL_API_SITEMASTER: power_wall.get_sitemaster(), + POWERWALL_API_METERS: power_wall.get_meters(), + POWERWALL_API_GRID_STATUS: power_wall.get_grid_status(), } diff --git a/homeassistant/components/powerwall/binary_sensor.py b/homeassistant/components/powerwall/binary_sensor.py index 3b73caecacd..877efdd68fa 100644 --- a/homeassistant/components/powerwall/binary_sensor.py +++ b/homeassistant/components/powerwall/binary_sensor.py @@ -1,7 +1,10 @@ -"""Support for August sensors.""" +"""Support for powerwall binary sensors.""" import logging +from tesla_powerwall import GridStatus + from homeassistant.components.binary_sensor import ( + DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_CONNECTIVITY, BinarySensorDevice, ) @@ -14,16 +17,13 @@ from .const import ( DOMAIN, POWERWALL_API_DEVICE_TYPE, POWERWALL_API_GRID_STATUS, + POWERWALL_API_METERS, + POWERWALL_API_SERIAL_NUMBERS, POWERWALL_API_SITE_INFO, POWERWALL_API_SITEMASTER, POWERWALL_API_STATUS, - POWERWALL_CONNECTED_KEY, + POWERWALL_BATTERY_METER, POWERWALL_COORDINATOR, - POWERWALL_GRID_ONLINE, - POWERWALL_RUNNING_KEY, - SITE_INFO_GRID_CODE, - SITE_INFO_NOMINAL_SYSTEM_POWER_KW, - SITE_INFO_REGION, ) from .entity import PowerWallEntity @@ -38,14 +38,20 @@ async def async_setup_entry(hass, config_entry, async_add_entities): site_info = powerwall_data[POWERWALL_API_SITE_INFO] device_type = powerwall_data[POWERWALL_API_DEVICE_TYPE] status = powerwall_data[POWERWALL_API_STATUS] + powerwalls_serial_numbers = powerwall_data[POWERWALL_API_SERIAL_NUMBERS] entities = [] for sensor_class in ( PowerWallRunningSensor, PowerWallGridStatusSensor, PowerWallConnectedSensor, + PowerWallChargingStatusSensor, ): - entities.append(sensor_class(coordinator, site_info, status, device_type)) + entities.append( + sensor_class( + coordinator, site_info, status, device_type, powerwalls_serial_numbers + ) + ) async_add_entities(entities, True) @@ -71,17 +77,15 @@ class PowerWallRunningSensor(PowerWallEntity, BinarySensorDevice): @property def is_on(self): """Get the powerwall running state.""" - return self._coordinator.data[POWERWALL_API_SITEMASTER][POWERWALL_RUNNING_KEY] + return self._coordinator.data[POWERWALL_API_SITEMASTER].running @property def device_state_attributes(self): """Return the device specific state attributes.""" return { - ATTR_REGION: self._site_info[SITE_INFO_REGION], - ATTR_GRID_CODE: self._site_info[SITE_INFO_GRID_CODE], - ATTR_NOMINAL_SYSTEM_POWER: self._site_info[ - SITE_INFO_NOMINAL_SYSTEM_POWER_KW - ], + ATTR_REGION: self._site_info.region, + ATTR_GRID_CODE: self._site_info.grid_code, + ATTR_NOMINAL_SYSTEM_POWER: self._site_info.nominal_system_power_kW, } @@ -106,7 +110,7 @@ class PowerWallConnectedSensor(PowerWallEntity, BinarySensorDevice): @property def is_on(self): """Get the powerwall connected to tesla state.""" - return self._coordinator.data[POWERWALL_API_SITEMASTER][POWERWALL_CONNECTED_KEY] + return self._coordinator.data[POWERWALL_API_SITEMASTER].connected_to_tesla class PowerWallGridStatusSensor(PowerWallEntity, BinarySensorDevice): @@ -130,6 +134,31 @@ class PowerWallGridStatusSensor(PowerWallEntity, BinarySensorDevice): @property def is_on(self): """Grid is online.""" - return ( - self._coordinator.data[POWERWALL_API_GRID_STATUS] == POWERWALL_GRID_ONLINE - ) + return self._coordinator.data[POWERWALL_API_GRID_STATUS] == GridStatus.CONNECTED + + +class PowerWallChargingStatusSensor(PowerWallEntity, BinarySensorDevice): + """Representation of an Powerwall charging status sensor.""" + + @property + def name(self): + """Device Name.""" + return "Powerwall Charging" + + @property + def device_class(self): + """Device Class.""" + return DEVICE_CLASS_BATTERY_CHARGING + + @property + def unique_id(self): + """Device Uniqueid.""" + return f"{self.base_unique_id}_powerwall_charging" + + @property + def is_on(self): + """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/config_flow.py b/homeassistant/components/powerwall/config_flow.py index 7e1b3eb3fb1..ca0e2143454 100644 --- a/homeassistant/components/powerwall/config_flow.py +++ b/homeassistant/components/powerwall/config_flow.py @@ -1,14 +1,13 @@ """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 from homeassistant.const import CONF_IP_ADDRESS from .const import DOMAIN # pylint:disable=unused-import -from .const import POWERWALL_SITE_NAME _LOGGER = logging.getLogger(__name__) @@ -21,20 +20,16 @@ async def validate_input(hass: core.HomeAssistant, data): Data has the keys from DATA_SCHEMA with values provided by the user. """ - power_wall = PowerWall(data[CONF_IP_ADDRESS]) + power_wall = Powerwall(data[CONF_IP_ADDRESS]) try: - site_info = await hass.async_add_executor_job(call_site_info, power_wall) - except (PowerWallUnreachableError, ApiError, ConnectionError): + 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): raise CannotConnect # Return info that you want to store in the config entry. - return {"title": site_info[POWERWALL_SITE_NAME]} - - -def call_site_info(power_wall): - """Wrap site_info to be a callable.""" - return power_wall.site_info + return {"title": site_info.site_name} class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/powerwall/const.py b/homeassistant/components/powerwall/const.py index d05e42f6bf7..e2daf1e3760 100644 --- a/homeassistant/components/powerwall/const.py +++ b/homeassistant/components/powerwall/const.py @@ -10,10 +10,11 @@ UPDATE_INTERVAL = 30 ATTR_REGION = "region" ATTR_GRID_CODE = "grid_code" ATTR_FREQUENCY = "frequency" -ATTR_ENERGY_EXPORTED = "energy_exported" -ATTR_ENERGY_IMPORTED = "energy_imported" +ATTR_ENERGY_EXPORTED = "energy_exported_(in_kW)" +ATTR_ENERGY_IMPORTED = "energy_imported_(in_kW)" ATTR_INSTANT_AVERAGE_VOLTAGE = "instant_average_voltage" ATTR_NOMINAL_SYSTEM_POWER = "nominal_system_power_kW" +ATTR_IS_ACTIVE = "is_active" SITE_INFO_UTILITY = "utility" SITE_INFO_GRID_CODE = "grid_code" @@ -34,6 +35,7 @@ POWERWALL_API_SITEMASTER = "sitemaster" POWERWALL_API_STATUS = "status" POWERWALL_API_DEVICE_TYPE = "device_type" POWERWALL_API_SITE_INFO = "site_info" +POWERWALL_API_SERIAL_NUMBERS = "serial_numbers" POWERWALL_HTTP_SESSION = "http_session" @@ -41,6 +43,7 @@ POWERWALL_GRID_ONLINE = "SystemGridConnected" POWERWALL_CONNECTED_KEY = "connected_to_tesla" POWERWALL_RUNNING_KEY = "running" +POWERWALL_BATTERY_METER = "battery" MODEL = "PowerWall 2" MANUFACTURER = "Tesla" diff --git a/homeassistant/components/powerwall/entity.py b/homeassistant/components/powerwall/entity.py index c09a1aca612..c9cfd124ec6 100644 --- a/homeassistant/components/powerwall/entity.py +++ b/homeassistant/components/powerwall/entity.py @@ -2,51 +2,36 @@ from homeassistant.helpers.entity import Entity -from .const import ( - DEVICE_TYPE_DEVICE_TYPE, - DOMAIN, - MANUFACTURER, - MODEL, - POWERWALL_SITE_NAME, - SITE_INFO_GRID_CODE, - SITE_INFO_NOMINAL_SYSTEM_ENERGY_KWH, - SITE_INFO_UTILITY, - STATUS_VERSION, -) +from .const import DOMAIN, MANUFACTURER, MODEL class PowerWallEntity(Entity): """Base class for powerwall entities.""" - def __init__(self, coordinator, site_info, status, device_type): + def __init__( + self, coordinator, site_info, status, device_type, powerwalls_serial_numbers + ): """Initialize the sensor.""" super().__init__() self._coordinator = coordinator self._site_info = site_info - self._device_type = device_type.get(DEVICE_TYPE_DEVICE_TYPE) - self._version = status.get(STATUS_VERSION) - # This group of properties will be unique to to the site - unique_group = ( - site_info[SITE_INFO_UTILITY], - site_info[SITE_INFO_GRID_CODE], - str(site_info[SITE_INFO_NOMINAL_SYSTEM_ENERGY_KWH]), - ) - self.base_unique_id = "_".join(unique_group) + self._device_type = device_type + self._version = status.version + # The serial numbers of the powerwalls are unique to every site + self.base_unique_id = "_".join(powerwalls_serial_numbers) @property def device_info(self): """Powerwall device info.""" device_info = { "identifiers": {(DOMAIN, self.base_unique_id)}, - "name": self._site_info[POWERWALL_SITE_NAME], + "name": self._site_info.site_name, "manufacturer": MANUFACTURER, } model = MODEL - if self._device_type: - model += f" ({self._device_type})" + model += f" ({self._device_type.name})" device_info["model"] = model - if self._version: - device_info["sw_version"] = self._version + device_info["sw_version"] = self._version return device_info @property @@ -68,8 +53,6 @@ class PowerWallEntity(Entity): async def async_added_to_hass(self): """Subscribe to updates.""" - self._coordinator.async_add_listener(self.async_write_ha_state) - - async def async_will_remove_from_hass(self): - """Undo subscription.""" - self._coordinator.async_remove_listener(self.async_write_ha_state) + self.async_on_remove( + self._coordinator.async_add_listener(self.async_write_ha_state) + ) diff --git a/homeassistant/components/powerwall/manifest.json b/homeassistant/components/powerwall/manifest.json index 951ad960e14..7b2095c4a2a 100644 --- a/homeassistant/components/powerwall/manifest.json +++ b/homeassistant/components/powerwall/manifest.json @@ -3,14 +3,6 @@ "name": "Tesla Powerwall", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/powerwall", - "requirements": [ - "tesla-powerwall==0.1.3" - ], - "ssdp": [], - "zeroconf": [], - "homekit": {}, - "dependencies": [], - "codeowners": [ - "@bdraco" - ] + "requirements": ["tesla-powerwall==0.2.8"], + "codeowners": ["@bdraco", "@jrester"] } diff --git a/homeassistant/components/powerwall/sensor.py b/homeassistant/components/powerwall/sensor.py index 72dbd38a418..e1e968c0353 100644 --- a/homeassistant/components/powerwall/sensor.py +++ b/homeassistant/components/powerwall/sensor.py @@ -1,6 +1,8 @@ """Support for August sensors.""" import logging +from tesla_powerwall import MeterType, convert_to_kw + from homeassistant.const import ( DEVICE_CLASS_BATTERY, DEVICE_CLASS_POWER, @@ -12,11 +14,13 @@ from .const import ( ATTR_ENERGY_IMPORTED, ATTR_FREQUENCY, ATTR_INSTANT_AVERAGE_VOLTAGE, + ATTR_IS_ACTIVE, DOMAIN, ENERGY_KILO_WATT, POWERWALL_API_CHARGE, POWERWALL_API_DEVICE_TYPE, POWERWALL_API_METERS, + POWERWALL_API_SERIAL_NUMBERS, POWERWALL_API_SITE_INFO, POWERWALL_API_STATUS, POWERWALL_COORDINATOR, @@ -35,14 +39,26 @@ async def async_setup_entry(hass, config_entry, async_add_entities): site_info = powerwall_data[POWERWALL_API_SITE_INFO] device_type = powerwall_data[POWERWALL_API_DEVICE_TYPE] status = powerwall_data[POWERWALL_API_STATUS] + powerwalls_serial_numbers = powerwall_data[POWERWALL_API_SERIAL_NUMBERS] entities = [] - for meter in coordinator.data[POWERWALL_API_METERS]: + for meter in MeterType: entities.append( - PowerWallEnergySensor(meter, coordinator, site_info, status, device_type) + PowerWallEnergySensor( + meter, + coordinator, + site_info, + status, + device_type, + powerwalls_serial_numbers, + ) ) - entities.append(PowerWallChargeSensor(coordinator, site_info, status, device_type)) + entities.append( + PowerWallChargeSensor( + coordinator, site_info, status, device_type, powerwalls_serial_numbers + ) + ) async_add_entities(entities, True) @@ -73,15 +89,25 @@ class PowerWallChargeSensor(PowerWallEntity): @property def state(self): """Get the current value in percentage.""" - return round(self._coordinator.data[POWERWALL_API_CHARGE], 3) + return self._coordinator.data[POWERWALL_API_CHARGE] class PowerWallEnergySensor(PowerWallEntity): """Representation of an Powerwall Energy sensor.""" - def __init__(self, meter, coordinator, site_info, status, device_type): + def __init__( + self, + meter: MeterType, + coordinator, + site_info, + status, + device_type, + powerwalls_serial_numbers, + ): """Initialize the sensor.""" - super().__init__(coordinator, site_info, status, device_type) + super().__init__( + coordinator, site_info, status, device_type, powerwalls_serial_numbers + ) self._meter = meter @property @@ -92,7 +118,7 @@ class PowerWallEnergySensor(PowerWallEntity): @property def name(self): """Device Name.""" - return f"Powerwall {self._meter.title()} Now" + return f"Powerwall {self._meter.value.title()} Now" @property def device_class(self): @@ -102,21 +128,25 @@ class PowerWallEnergySensor(PowerWallEntity): @property def unique_id(self): """Device Uniqueid.""" - return f"{self.base_unique_id}_{self._meter}_instant_power" + return f"{self.base_unique_id}_{self._meter.value}_instant_power" @property def state(self): """Get the current value in kW.""" - meter = self._coordinator.data[POWERWALL_API_METERS][self._meter] - return round(float(meter.instant_power / 1000), 3) + return ( + self._coordinator.data[POWERWALL_API_METERS] + .get(self._meter) + .get_power(precision=3) + ) @property def device_state_attributes(self): """Return the device specific state attributes.""" - meter = self._coordinator.data[POWERWALL_API_METERS][self._meter] + 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/homeassistant/components/powerwall/strings.json b/homeassistant/components/powerwall/strings.json index 92f0fd19464..bb5ed671435 100644 --- a/homeassistant/components/powerwall/strings.json +++ b/homeassistant/components/powerwall/strings.json @@ -1,20 +1,15 @@ { "config": { - "title": "Tesla Powerwall", "step": { "user": { "title": "Connect to the powerwall", - "data": { - "ip_address": "IP Address" - } + "data": { "ip_address": "IP Address" } } }, "error": { "cannot_connect": "Failed to connect, please try again", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "The powerwall is already configured" - } + "abort": { "already_configured": "The powerwall is already configured" } } } diff --git a/homeassistant/components/powerwall/translations/ca.json b/homeassistant/components/powerwall/translations/ca.json new file mode 100644 index 00000000000..2416a2bf7f2 --- /dev/null +++ b/homeassistant/components/powerwall/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "El Powerwall ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "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": { + "data": { + "ip_address": "Adre\u00e7a IP" + }, + "title": "Connexi\u00f3 amb el Powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/de.json b/homeassistant/components/powerwall/translations/de.json new file mode 100644 index 00000000000..f5317e3046a --- /dev/null +++ b/homeassistant/components/powerwall/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Die Powerwall ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "ip_address": "IP-Adresse" + }, + "title": "Stellen Sie eine Verbindung zur Powerwall her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/en.json b/homeassistant/components/powerwall/translations/en.json new file mode 100644 index 00000000000..378abf486ad --- /dev/null +++ b/homeassistant/components/powerwall/translations/en.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "The powerwall is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "ip_address": "IP Address" + }, + "title": "Connect to the powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/es.json b/homeassistant/components/powerwall/translations/es.json new file mode 100644 index 00000000000..2f8ffcf787f --- /dev/null +++ b/homeassistant/components/powerwall/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "El powerwall ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor int\u00e9ntelo de nuevo", + "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": { + "data": { + "ip_address": "Direcci\u00f3n IP" + }, + "title": "Conectarse al powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/fr.json b/homeassistant/components/powerwall/translations/fr.json new file mode 100644 index 00000000000..d7e0c759bbf --- /dev/null +++ b/homeassistant/components/powerwall/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Le Powerwall est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "ip_address": "Adresse IP" + }, + "title": "Connectez-vous au Powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/it.json b/homeassistant/components/powerwall/translations/it.json new file mode 100644 index 00000000000..09d103c6f60 --- /dev/null +++ b/homeassistant/components/powerwall/translations/it.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Il Powerwall \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "ip_address": "Indirizzo IP" + }, + "title": "Connessione al Powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/ko.json b/homeassistant/components/powerwall/translations/ko.json new file mode 100644 index 00000000000..7922a11845c --- /dev/null +++ b/homeassistant/components/powerwall/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "powerwall \uc774 \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": { + "ip_address": "IP \uc8fc\uc18c" + }, + "title": "powerwall \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/lb.json b/homeassistant/components/powerwall/translations/lb.json new file mode 100644 index 00000000000..1722daf7479 --- /dev/null +++ b/homeassistant/components/powerwall/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Powerwall ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "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": { + "data": { + "ip_address": "IP Adresse" + }, + "title": "Mat der Powerwall verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/no.json b/homeassistant/components/powerwall/translations/no.json new file mode 100644 index 00000000000..a688a9ad8c4 --- /dev/null +++ b/homeassistant/components/powerwall/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Powerwall er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "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": { + "data": { + "ip_address": "IP adresse" + }, + "title": "Koble til powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/pl.json b/homeassistant/components/powerwall/translations/pl.json new file mode 100644 index 00000000000..cfb277179ed --- /dev/null +++ b/homeassistant/components/powerwall/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Powerwall jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "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": { + "data": { + "ip_address": "Adres IP" + }, + "title": "Po\u0142\u0105czenie z Powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/ru.json b/homeassistant/components/powerwall/translations/ru.json new file mode 100644 index 00000000000..cf3b1cd4ba0 --- /dev/null +++ b/homeassistant/components/powerwall/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "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": { + "data": { + "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441" + }, + "title": "Tesla Powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/sl.json b/homeassistant/components/powerwall/translations/sl.json new file mode 100644 index 00000000000..122d8bcfd02 --- /dev/null +++ b/homeassistant/components/powerwall/translations/sl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Powerwall je \u017ee nastavljen" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "ip_address": "IP naslov" + }, + "title": "Pove\u017eite se s powerwall-om" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/zh-Hant.json b/homeassistant/components/powerwall/translations/zh-Hant.json new file mode 100644 index 00000000000..8883e669a85 --- /dev/null +++ b/homeassistant/components/powerwall/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Powerwall \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "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": { + "data": { + "ip_address": "IP \u4f4d\u5740" + }, + "title": "\u9023\u7dda\u81f3 Powerwall" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/prezzibenzina/manifest.json b/homeassistant/components/prezzibenzina/manifest.json index 2636e36ab14..5aa4a6ec77f 100644 --- a/homeassistant/components/prezzibenzina/manifest.json +++ b/homeassistant/components/prezzibenzina/manifest.json @@ -3,6 +3,5 @@ "name": "Prezzi Benzina", "documentation": "https://www.home-assistant.io/integrations/prezzibenzina", "requirements": ["prezzibenzina-py==1.1.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/proliphix/manifest.json b/homeassistant/components/proliphix/manifest.json index 9014d9f8dc2..eb0b6e1b857 100644 --- a/homeassistant/components/proliphix/manifest.json +++ b/homeassistant/components/proliphix/manifest.json @@ -3,6 +3,5 @@ "name": "Proliphix", "documentation": "https://www.home-assistant.io/integrations/proliphix", "requirements": ["proliphix==0.4.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/prowl/manifest.json b/homeassistant/components/prowl/manifest.json index 73aa818a2ad..10bb7f8948e 100644 --- a/homeassistant/components/prowl/manifest.json +++ b/homeassistant/components/prowl/manifest.json @@ -2,7 +2,5 @@ "domain": "prowl", "name": "Prowl", "documentation": "https://www.home-assistant.io/integrations/prowl", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/prowl/notify.py b/homeassistant/components/prowl/notify.py index d5167ebfdc9..5d2efe76607 100644 --- a/homeassistant/components/prowl/notify.py +++ b/homeassistant/components/prowl/notify.py @@ -12,7 +12,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONF_API_KEY +from homeassistant.const import CONF_API_KEY, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -39,7 +39,7 @@ class ProwlNotificationService(BaseNotificationService): """Send the message to the user.""" response = None session = None - url = "{}{}".format(_RESOURCE, "add") + url = f"{_RESOURCE}add" data = kwargs.get(ATTR_DATA) payload = { "apikey": self._api_key, @@ -57,7 +57,7 @@ class ProwlNotificationService(BaseNotificationService): response = await session.post(url, data=payload) result = await response.text() - if response.status != 200 or "error" in result: + if response.status != HTTP_OK or "error" in result: _LOGGER.error( "Prowl service returned http status %d, response %s", response.status, diff --git a/homeassistant/components/proximity/__init__.py b/homeassistant/components/proximity/__init__.py index 7e5f6436757..4b6ff477053 100644 --- a/homeassistant/components/proximity/__init__.py +++ b/homeassistant/components/proximity/__init__.py @@ -3,7 +3,13 @@ import logging import voluptuous as vol -from homeassistant.const import CONF_DEVICES, CONF_UNIT_OF_MEASUREMENT, CONF_ZONE +from homeassistant.const import ( + CONF_DEVICES, + CONF_UNIT_OF_MEASUREMENT, + CONF_ZONE, + LENGTH_KILOMETERS, + LENGTH_METERS, +) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import track_state_change @@ -28,7 +34,7 @@ DEFAULT_PROXIMITY_ZONE = "home" DEFAULT_TOLERANCE = 1 DOMAIN = "proximity" -UNITS = ["km", "m", "mi", "ft"] +UNITS = [LENGTH_KILOMETERS, LENGTH_METERS, "mi", "ft"] ZONE_SCHEMA = vol.Schema( { @@ -56,7 +62,7 @@ def setup_proximity_component(hass, name, config): unit_of_measurement = config.get( CONF_UNIT_OF_MEASUREMENT, hass.config.units.length_unit ) - zone_id = "zone.{}".format(config.get(CONF_ZONE)) + zone_id = f"zone.{config.get(CONF_ZONE)}" proximity = Proximity( hass, @@ -160,7 +166,7 @@ class Proximity(Entity): if (device_state.state).lower() == (self.friendly_name).lower(): device_friendly = device_state.name if devices_in_zone != "": - devices_in_zone = devices_in_zone + ", " + devices_in_zone = f"{devices_in_zone}, " devices_in_zone = devices_in_zone + device_friendly # No-one to track so reset the entity. @@ -205,7 +211,7 @@ class Proximity(Entity): # Add the device and distance to a dictionary. distances_to_zone[device] = round( - convert(dist_to_zone, "m", self.unit_of_measurement), 1 + convert(dist_to_zone, LENGTH_METERS, self.unit_of_measurement), 1 ) # Loop through each of the distances collected and work out the diff --git a/homeassistant/components/proximity/manifest.json b/homeassistant/components/proximity/manifest.json index 4d5f42720e0..a93da5f72d0 100644 --- a/homeassistant/components/proximity/manifest.json +++ b/homeassistant/components/proximity/manifest.json @@ -2,7 +2,6 @@ "domain": "proximity", "name": "Proximity", "documentation": "https://www.home-assistant.io/integrations/proximity", - "requirements": [], "dependencies": ["device_tracker", "zone"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/proximity/strings.json b/homeassistant/components/proximity/strings.json new file mode 100644 index 00000000000..4949ec80ba1 --- /dev/null +++ b/homeassistant/components/proximity/strings.json @@ -0,0 +1,3 @@ +{ + "title": "Proximity" +} diff --git a/homeassistant/components/proximity/translations/af.json b/homeassistant/components/proximity/translations/af.json new file mode 100644 index 00000000000..b53d6013fa9 --- /dev/null +++ b/homeassistant/components/proximity/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Nabyheid" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/ar.json b/homeassistant/components/proximity/translations/ar.json new file mode 100644 index 00000000000..ed1cef3d9f7 --- /dev/null +++ b/homeassistant/components/proximity/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0642\u0631\u0628" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/bg.json b/homeassistant/components/proximity/translations/bg.json new file mode 100644 index 00000000000..ee1630232e5 --- /dev/null +++ b/homeassistant/components/proximity/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0411\u043b\u0438\u0437\u043e\u0441\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/bs.json b/homeassistant/components/proximity/translations/bs.json new file mode 100644 index 00000000000..0981324d795 --- /dev/null +++ b/homeassistant/components/proximity/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Udaljenost" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/ca.json b/homeassistant/components/proximity/translations/ca.json new file mode 100644 index 00000000000..cd24bb9b58d --- /dev/null +++ b/homeassistant/components/proximity/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Proximitat" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/cs.json b/homeassistant/components/proximity/translations/cs.json new file mode 100644 index 00000000000..a7b2b73ad2b --- /dev/null +++ b/homeassistant/components/proximity/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "P\u0159ibl\u00ed\u017een\u00ed" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/cy.json b/homeassistant/components/proximity/translations/cy.json new file mode 100644 index 00000000000..5f1a1c66ded --- /dev/null +++ b/homeassistant/components/proximity/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Agosrwydd" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/da.json b/homeassistant/components/proximity/translations/da.json new file mode 100644 index 00000000000..bad36c8d192 --- /dev/null +++ b/homeassistant/components/proximity/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e6rhed" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/de.json b/homeassistant/components/proximity/translations/de.json new file mode 100644 index 00000000000..4561b1ff412 --- /dev/null +++ b/homeassistant/components/proximity/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e4he" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/el.json b/homeassistant/components/proximity/translations/el.json new file mode 100644 index 00000000000..e7480941773 --- /dev/null +++ b/homeassistant/components/proximity/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0395\u03b3\u03b3\u03cd\u03c4\u03b7\u03c4\u03b1" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/en.json b/homeassistant/components/proximity/translations/en.json new file mode 100644 index 00000000000..3a5a4259f57 --- /dev/null +++ b/homeassistant/components/proximity/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Proximity" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/es-419.json b/homeassistant/components/proximity/translations/es-419.json new file mode 100644 index 00000000000..3ed10dfad9c --- /dev/null +++ b/homeassistant/components/proximity/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Proximidad" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/es.json b/homeassistant/components/proximity/translations/es.json new file mode 100644 index 00000000000..3ed10dfad9c --- /dev/null +++ b/homeassistant/components/proximity/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Proximidad" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/et.json b/homeassistant/components/proximity/translations/et.json new file mode 100644 index 00000000000..aef8891a168 --- /dev/null +++ b/homeassistant/components/proximity/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "L\u00e4hedus" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/eu.json b/homeassistant/components/proximity/translations/eu.json new file mode 100644 index 00000000000..ab40939b84e --- /dev/null +++ b/homeassistant/components/proximity/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Gertutasuna" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/fi.json b/homeassistant/components/proximity/translations/fi.json new file mode 100644 index 00000000000..7b798759704 --- /dev/null +++ b/homeassistant/components/proximity/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "L\u00e4heisyys" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/fr.json b/homeassistant/components/proximity/translations/fr.json new file mode 100644 index 00000000000..97bbf34c7d0 --- /dev/null +++ b/homeassistant/components/proximity/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Proximit\u00e9" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/he.json b/homeassistant/components/proximity/translations/he.json new file mode 100644 index 00000000000..1e840a5f52e --- /dev/null +++ b/homeassistant/components/proximity/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e7\u05b4\u05e8\u05d1\u05b8\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/hi.json b/homeassistant/components/proximity/translations/hi.json new file mode 100644 index 00000000000..e8ffb633173 --- /dev/null +++ b/homeassistant/components/proximity/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0928\u093f\u0915\u091f\u0924\u093e" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/hr.json b/homeassistant/components/proximity/translations/hr.json new file mode 100644 index 00000000000..0a64f65abd8 --- /dev/null +++ b/homeassistant/components/proximity/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Blizina" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/hu.json b/homeassistant/components/proximity/translations/hu.json new file mode 100644 index 00000000000..1e80961119d --- /dev/null +++ b/homeassistant/components/proximity/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "K\u00f6zels\u00e9g" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/hy.json b/homeassistant/components/proximity/translations/hy.json new file mode 100644 index 00000000000..f243ae9516e --- /dev/null +++ b/homeassistant/components/proximity/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0540\u0561\u0580\u0587\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/id.json b/homeassistant/components/proximity/translations/id.json new file mode 100644 index 00000000000..0b0eddc0f75 --- /dev/null +++ b/homeassistant/components/proximity/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Kedekatan" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/is.json b/homeassistant/components/proximity/translations/is.json new file mode 100644 index 00000000000..dd8036a9ec7 --- /dev/null +++ b/homeassistant/components/proximity/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e1l\u00e6g\u00f0" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/it.json b/homeassistant/components/proximity/translations/it.json new file mode 100644 index 00000000000..5ea121f977a --- /dev/null +++ b/homeassistant/components/proximity/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Prossimit\u00e0" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/ko.json b/homeassistant/components/proximity/translations/ko.json new file mode 100644 index 00000000000..ef881ed0af3 --- /dev/null +++ b/homeassistant/components/proximity/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uadfc\uc811" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/lb.json b/homeassistant/components/proximity/translations/lb.json new file mode 100644 index 00000000000..a27e9b40395 --- /dev/null +++ b/homeassistant/components/proximity/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "\u00cbmg\u00e9igend" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/lv.json b/homeassistant/components/proximity/translations/lv.json new file mode 100644 index 00000000000..54bd5b092f3 --- /dev/null +++ b/homeassistant/components/proximity/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Tuvums" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/nb.json b/homeassistant/components/proximity/translations/nb.json new file mode 100644 index 00000000000..7c47e31401a --- /dev/null +++ b/homeassistant/components/proximity/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e6rhet" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/nl.json b/homeassistant/components/proximity/translations/nl.json new file mode 100644 index 00000000000..2712cef60fd --- /dev/null +++ b/homeassistant/components/proximity/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Nabijheid" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/nn.json b/homeassistant/components/proximity/translations/nn.json new file mode 100644 index 00000000000..011c91def77 --- /dev/null +++ b/homeassistant/components/proximity/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e6rleik" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/no.json b/homeassistant/components/proximity/translations/no.json new file mode 100644 index 00000000000..7c47e31401a --- /dev/null +++ b/homeassistant/components/proximity/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e6rhet" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/pl.json b/homeassistant/components/proximity/translations/pl.json new file mode 100644 index 00000000000..1e3280d0ca5 --- /dev/null +++ b/homeassistant/components/proximity/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Zbli\u017cenie" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/pt-BR.json b/homeassistant/components/proximity/translations/pt-BR.json new file mode 100644 index 00000000000..d051dc791ae --- /dev/null +++ b/homeassistant/components/proximity/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Proximidade" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/pt.json b/homeassistant/components/proximity/translations/pt.json new file mode 100644 index 00000000000..d051dc791ae --- /dev/null +++ b/homeassistant/components/proximity/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Proximidade" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/ro.json b/homeassistant/components/proximity/translations/ro.json new file mode 100644 index 00000000000..ce4664e8c42 --- /dev/null +++ b/homeassistant/components/proximity/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Proximitate" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/ru.json b/homeassistant/components/proximity/translations/ru.json new file mode 100644 index 00000000000..7e2fb36b69a --- /dev/null +++ b/homeassistant/components/proximity/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/sk.json b/homeassistant/components/proximity/translations/sk.json new file mode 100644 index 00000000000..96f9e252825 --- /dev/null +++ b/homeassistant/components/proximity/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Bl\u00edzkos\u0165" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/sl.json b/homeassistant/components/proximity/translations/sl.json new file mode 100644 index 00000000000..b7977354c8e --- /dev/null +++ b/homeassistant/components/proximity/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Bli\u017eina" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/sv.json b/homeassistant/components/proximity/translations/sv.json new file mode 100644 index 00000000000..a7373074240 --- /dev/null +++ b/homeassistant/components/proximity/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "N\u00e4rhet" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/te.json b/homeassistant/components/proximity/translations/te.json new file mode 100644 index 00000000000..935a5a4a4fa --- /dev/null +++ b/homeassistant/components/proximity/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c38\u0c3e\u0c2e\u0c40\u0c2a\u0c4d\u0c2f\u0c24" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/th.json b/homeassistant/components/proximity/translations/th.json new file mode 100644 index 00000000000..a23d1446e84 --- /dev/null +++ b/homeassistant/components/proximity/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e43\u0e01\u0e25\u0e49\u0e0a\u0e34\u0e14" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/tr.json b/homeassistant/components/proximity/translations/tr.json new file mode 100644 index 00000000000..dca2f176b5f --- /dev/null +++ b/homeassistant/components/proximity/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Yak\u0131nl\u0131k" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/uk.json b/homeassistant/components/proximity/translations/uk.json new file mode 100644 index 00000000000..2090978108f --- /dev/null +++ b/homeassistant/components/proximity/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/vi.json b/homeassistant/components/proximity/translations/vi.json new file mode 100644 index 00000000000..ec3b08eab1a --- /dev/null +++ b/homeassistant/components/proximity/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Ti\u1ec7m c\u1eadn" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/zh-Hans.json b/homeassistant/components/proximity/translations/zh-Hans.json new file mode 100644 index 00000000000..962f435cc3d --- /dev/null +++ b/homeassistant/components/proximity/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u8ddd\u79bb" +} \ No newline at end of file diff --git a/homeassistant/components/proximity/translations/zh-Hant.json b/homeassistant/components/proximity/translations/zh-Hant.json new file mode 100644 index 00000000000..1cc79a16564 --- /dev/null +++ b/homeassistant/components/proximity/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u8ddd\u96e2" +} \ No newline at end of file diff --git a/homeassistant/components/proxmoxve/manifest.json b/homeassistant/components/proxmoxve/manifest.json index c61d296587c..2735bab1b04 100644 --- a/homeassistant/components/proxmoxve/manifest.json +++ b/homeassistant/components/proxmoxve/manifest.json @@ -2,7 +2,6 @@ "domain": "proxmoxve", "name": "Proxmox VE", "documentation": "https://www.home-assistant.io/integrations/proxmoxve", - "dependencies": [], "codeowners": ["@k4ds3"], "requirements": ["proxmoxer==1.0.4"] } diff --git a/homeassistant/components/proxy/camera.py b/homeassistant/components/proxy/camera.py index 893fadfe178..7aa83d30ae4 100644 --- a/homeassistant/components/proxy/camera.py +++ b/homeassistant/components/proxy/camera.py @@ -98,7 +98,7 @@ def _resize_image(image, opts): new_width = old_width scale = new_width / float(old_width) - new_height = int((float(old_height) * float(scale))) + new_height = int(float(old_height) * float(scale)) img = img.resize((new_width, new_height), Image.ANTIALIAS) imgbuf = io.BytesIO() @@ -188,8 +188,8 @@ class ProxyCamera(Camera): super().__init__() self.hass = hass self._proxied_camera = config.get(CONF_ENTITY_ID) - self._name = config.get(CONF_NAME) or "{} - {}".format( - DEFAULT_BASENAME, self._proxied_camera + self._name = ( + config.get(CONF_NAME) or f"{DEFAULT_BASENAME} - {self._proxied_camera}" ) self._image_opts = ImageOpts( config.get(CONF_MAX_IMAGE_WIDTH), @@ -258,7 +258,7 @@ class ProxyCamera(Camera): ) return await async_get_still_stream( - request, self._async_stream_image, self.content_type, self.frame_interval, + request, self._async_stream_image, self.content_type, self.frame_interval ) @property diff --git a/homeassistant/components/proxy/manifest.json b/homeassistant/components/proxy/manifest.json index d12fbe2d3d7..89d25ca23b1 100644 --- a/homeassistant/components/proxy/manifest.json +++ b/homeassistant/components/proxy/manifest.json @@ -2,9 +2,6 @@ "domain": "proxy", "name": "Camera Proxy", "documentation": "https://www.home-assistant.io/integrations/proxy", - "requirements": [ - "pillow==7.0.0" - ], - "dependencies": [], + "requirements": ["pillow==7.1.1"], "codeowners": [] -} \ No newline at end of file +} diff --git a/homeassistant/components/ps4/.translations/bg.json b/homeassistant/components/ps4/.translations/bg.json deleted file mode 100644 index fabd9032dc0..00000000000 --- a/homeassistant/components/ps4/.translations/bg.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438.", - "devices_configured": "\u0412\u0441\u0438\u0447\u043a\u0438 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0430 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0438.", - "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 PlayStation 4 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", - "port_987_bind_error": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0440\u0435\u0437\u0435\u0440\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442 987. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435] (https://www.home-assistant.io/components/ps4/) \u0437\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.", - "port_997_bind_error": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0440\u0435\u0437\u0435\u0440\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442 997. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430](https://www.home-assistant.io/components/ps4/) \u0437\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f." - }, - "error": { - "credential_timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u043b\u0443\u0433\u0430\u0442\u0430 \u0437\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0438\u0437\u0442\u0435\u0447\u0435. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \"\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435\" \u0437\u0430 \u0434\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0442\u0435.", - "login_failed": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 PlayStation 4. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u043b\u0438 \u0432\u044a\u0432\u0435\u0434\u0435\u043d\u0438\u044f PIN \u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d.", - "no_ipaddress": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 PlayStation 4, \u043a\u043e\u0439\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435.", - "not_ready": "PlayStation 4 \u043a\u043e\u043d\u0437\u043e\u043b\u0430\u0442\u0430 \u043d\u0435 \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043b\u0438 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0430 \u043a\u044a\u043c \u043c\u0440\u0435\u0436\u0430\u0442\u0430." - }, - "step": { - "creds": { - "description": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438 \u0441\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \"\u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435\" \u0438 \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0432 PS4 2nd Screen App, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \"Refresh devices\" \u0438 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \"Home-Assistant\" \u0437\u0430 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP \u0430\u0434\u0440\u0435\u0441", - "name": "\u0418\u043c\u0435", - "region": "\u0420\u0435\u0433\u0438\u043e\u043d" - }, - "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0432\u0430\u0448\u0430\u0442\u0430 PlayStation 4 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u0417\u0430 \u201ePIN\u201c \u043e\u0442\u0438\u0434\u0435\u0442\u0435 \u0432 \u201eSettings\u201c \u043d\u0430 \u0412\u0430\u0448\u0430\u0442\u0430 PlayStation 4 \u043a\u043e\u043d\u0437\u043e\u043b\u0430. \u0421\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u043a\u044a\u043c \u201eMobile App Connection Settings\u201c \u0438 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u201eAdd Device\u201c. \u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f PIN \u043a\u043e\u0434. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430](https://www.home-assistant.io/components/ps4/) \u0437\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP \u0430\u0434\u0440\u0435\u0441 (\u041e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043f\u0440\u0430\u0437\u043d\u043e, \u0430\u043a\u043e \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435).", - "mode": "\u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435" - }, - "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0440\u0435\u0436\u0438\u043c \u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435. \u041f\u043e\u043b\u0435\u0442\u043e IP \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043e\u0441\u0442\u0430\u0432\u0438 \u043f\u0440\u0430\u0437\u043d\u043e, \u0430\u043a\u043e \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u043e\u0442\u043a\u0440\u0438\u0442\u0438.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/ca.json b/homeassistant/components/ps4/.translations/ca.json deleted file mode 100644 index 166d2674934..00000000000 --- a/homeassistant/components/ps4/.translations/ca.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Error en l'obtenci\u00f3 de les credencials.", - "devices_configured": "Tots els dispositius trobats ja estan configurats.", - "no_devices_found": "No s'han trobat dispositius PlayStation 4 a la xarxa.", - "port_987_bind_error": "No s'ha pogut vincular amb el port 987. Consulta la [documentaci\u00f3](https://www.home-assistant.io/components/ps4/) per a m\u00e9s informaci\u00f3.", - "port_997_bind_error": "No s'ha pogut vincular amb el port 997. Consulta la [documentaci\u00f3](https://www.home-assistant.io/components/ps4/) per a m\u00e9s informaci\u00f3." - }, - "error": { - "credential_timeout": "El servei de credencials ha expirat. Prem Envia per reiniciar-lo.", - "login_failed": "No s'ha pogut sincronitzar amb la PlayStation 4. Verifica el codi PIN.", - "no_ipaddress": "Introdueix l'adre\u00e7a IP de la PlayStation 4 que vulguis configurar.", - "not_ready": "La PlayStation 4 no est\u00e0 engegada o no s'ha connectada a la xarxa." - }, - "step": { - "creds": { - "description": "Credencials necess\u00e0ries. Prem 'Envia' i, a continuaci\u00f3, a la segona pantalla de l'aplicaci\u00f3 de la PS4, actualitza els dispositius i selecciona 'Home-Assistant' per continuar.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Adre\u00e7a IP", - "name": "Nom", - "region": "Regi\u00f3" - }, - "description": "Introdueix la informaci\u00f3 de la teva PlayStation 4. Pel 'PIN', ves a 'Configuraci\u00f3' a la consola de la PlayStation 4. Despr\u00e9s navega fins a 'Configuraci\u00f3 de la connexi\u00f3 de l'aplicaci\u00f3 m\u00f2bil' i selecciona 'Afegir dispositiu'. Introdueix el PIN que es mostra. Consulta la [documentaci\u00f3](https://www.home-assistant.io/components/ps4/) per a m\u00e9s informaci\u00f3.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "Adre\u00e7a IP (deixa-ho en blanc si fas servir la detecci\u00f3 autom\u00e0tica).", - "mode": "Mode de configuraci\u00f3" - }, - "description": "Selecciona el mode de configuraci\u00f3. El camp de l'adre\u00e7a IP es pot deixar en blanc si selecciones descobriment autom\u00e0tic (els dispositius es descobriran autom\u00e0ticament).", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/cs.json b/homeassistant/components/ps4/.translations/cs.json deleted file mode 100644 index 5c4e67a324c..00000000000 --- a/homeassistant/components/ps4/.translations/cs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "link": { - "data": { - "region": "Region" - }, - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/da.json b/homeassistant/components/ps4/.translations/da.json deleted file mode 100644 index cef13db3150..00000000000 --- a/homeassistant/components/ps4/.translations/da.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Fejl ved hentning af legitimationsoplysninger.", - "devices_configured": "Alle de fundne enheder er allerede konfigureret.", - "no_devices_found": "Der blev ikke fundet nogen PlayStation 4-enheder p\u00e5 netv\u00e6rket.", - "port_987_bind_error": "Kunne ikke binde til port 987. Se [dokumentationen](https://www.home-assistant.io/components/ps4/) for yderligere oplysninger.", - "port_997_bind_error": "Kunne ikke binde til port 997. Se [dokumentationen](https://www.home-assistant.io/components/ps4/) for yderligere oplysninger." - }, - "error": { - "credential_timeout": "Tjenesten for legitimationsoplysninger fik timeout. Tryk p\u00e5 send for at genstarte.", - "login_failed": "Kunne ikke parre med PlayStation 4. Kontroller PIN er korrekt.", - "no_ipaddress": "Indtast IP-adressen p\u00e5 den PlayStation 4, du gerne vil konfigurere.", - "not_ready": "PlayStation 4 er ikke t\u00e6ndt eller tilsluttet til netv\u00e6rket." - }, - "step": { - "creds": { - "description": "Der kr\u00e6ves legitimationsoplysninger. Tryk p\u00e5 'Indsend' og derefter i PS4 2. sk\u00e6rm-app, opdater enheder, og v\u00e6lg 'Home Assistant'-enhed for at forts\u00e6tte.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP-adresse", - "name": "Navn", - "region": "Omr\u00e5de" - }, - "description": "Indtast dine PlayStation 4-oplysninger. For 'PIN' skal du navigere til 'Indstillinger' p\u00e5 din PlayStation 4-konsol. Naviger derefter til 'Mobile App Connection Settings' og v\u00e6lg 'Add Device'. Indtast den pinkode, der vises. Se [dokumentation](https://www.home-assistant.io/components/ps4/) for yderligere oplysninger.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP-adresse (lad det v\u00e6re tomt, hvis du bruger automatisk registrering).", - "mode": "Konfigurationstilstand" - }, - "description": "V\u00e6lg tilstand for konfiguration. IP-adressefeltet kan v\u00e6re tomt, hvis du v\u00e6lger automatisk registrering, da enheder automatisk bliver fundet.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/de.json b/homeassistant/components/ps4/.translations/de.json deleted file mode 100644 index 66eaecbb548..00000000000 --- a/homeassistant/components/ps4/.translations/de.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Fehler beim Abrufen der Anmeldeinformationen.", - "devices_configured": "Alle gefundenen Ger\u00e4te sind bereits konfiguriert.", - "no_devices_found": "Es wurden keine PlayStation 4 im Netzwerk gefunden.", - "port_987_bind_error": "Konnte sich nicht an Port 987 binden. Weitere Informationen findest du in der [Dokumentation] (https://www.home-assistant.io/components/ps4/).", - "port_997_bind_error": "Bind to Port 997 nicht m\u00f6glich. Weitere Informationen findest du in der [Dokumentation](https://www.home-assistant.io/components/ps4/)" - }, - "error": { - "credential_timeout": "Zeit\u00fcberschreitung beim Warten auf den Anmeldedienst. Klicken zum Neustarten auf Senden.", - "login_failed": "Fehler beim Koppeln mit PlayStation 4. \u00dcberpr\u00fcfe, ob die PIN korrekt ist.", - "no_ipaddress": "Gib die IP-Adresse der PlayStation 4 ein, die konfiguriert werden soll.", - "not_ready": "PlayStation 4 ist nicht eingeschaltet oder mit dem Netzwerk verbunden." - }, - "step": { - "creds": { - "description": "Anmeldeinformationen ben\u00f6tigt. Klicke auf \"Senden\" und dann in der PS4 Second Screen app, aktualisiere die Ger\u00e4te und w\u00e4hle das \"Home-Assistant\"-Ger\u00e4t aus, um fortzufahren.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP-Adresse", - "name": "Name", - "region": "Region" - }, - "description": "Gib deine PlayStation 4-Informationen ein. Navigiere f\u00fcr \"PIN\" auf der PlayStation 4-Konsole zu \"Einstellungen\". Navigiere dann zu \"Mobile App-Verbindungseinstellungen\" und w\u00e4hle \"Ger\u00e4t hinzuf\u00fcgen\" aus. Gib die angezeigte PIN ein.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP-Adresse (Leer lassen, wenn automatische Erkennung verwendet wird).", - "mode": "Konfigurationsmodus" - }, - "description": "W\u00e4hle den Modus f\u00fcr die Konfiguration aus. Das Feld IP-Adresse kann leer bleiben, wenn die automatische Erkennung ausgew\u00e4hlt wird, da Ger\u00e4te automatisch erkannt werden.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/en.json b/homeassistant/components/ps4/.translations/en.json deleted file mode 100644 index 756eb65d4f7..00000000000 --- a/homeassistant/components/ps4/.translations/en.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Error fetching credentials.", - "devices_configured": "All devices found are already configured.", - "no_devices_found": "No PlayStation 4 devices found on the network.", - "port_987_bind_error": "Could not bind to port 987. Refer to the [documentation](https://www.home-assistant.io/components/ps4/) for additional info.", - "port_997_bind_error": "Could not bind to port 997. Refer to the [documentation](https://www.home-assistant.io/components/ps4/) for additional info." - }, - "error": { - "credential_timeout": "Credential service timed out. Press submit to restart.", - "login_failed": "Failed to pair to PlayStation 4. Verify PIN is correct.", - "no_ipaddress": "Enter the IP Address of the PlayStation 4 you would like to configure.", - "not_ready": "PlayStation 4 is not on or connected to network." - }, - "step": { - "creds": { - "description": "Credentials needed. Press 'Submit' and then in the PS4 2nd Screen App, refresh devices and select the 'Home-Assistant' device to continue.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP Address", - "name": "Name", - "region": "Region" - }, - "description": "Enter your PlayStation 4 information. For 'PIN', navigate to 'Settings' on your PlayStation 4 console. Then navigate to 'Mobile App Connection Settings' and select 'Add Device'. Enter the PIN that is displayed. Refer to the [documentation](https://www.home-assistant.io/components/ps4/) for additional info.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP Address (Leave empty if using Auto Discovery).", - "mode": "Config Mode" - }, - "description": "Select mode for configuration. The IP Address field can be left blank if selecting Auto Discovery, as devices will be automatically discovered.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/es-419.json b/homeassistant/components/ps4/.translations/es-419.json deleted file mode 100644 index 0f7066df007..00000000000 --- a/homeassistant/components/ps4/.translations/es-419.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Error al obtener las credenciales.", - "devices_configured": "Todos los dispositivos encontrados ya est\u00e1n configurados.", - "no_devices_found": "No se encontraron dispositivos PlayStation 4 en la red.", - "port_987_bind_error": "No se pudo enlazar al puerto 987.", - "port_997_bind_error": "No se pudo enlazar al puerto 997." - }, - "error": { - "login_failed": "No se ha podido emparejar con PlayStation 4. Verifique que el PIN sea correcto.", - "not_ready": "PlayStation 4 no est\u00e1 encendida o conectada a la red." - }, - "step": { - "creds": { - "description": "Credenciales necesarias. Presione 'Enviar' y luego en la aplicaci\u00f3n de la segunda pantalla de PS4, actualice los dispositivos y seleccione el dispositivo 'Home-Assistant' para continuar.", - "title": "Playstation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Direcci\u00f3n IP", - "name": "Nombre", - "region": "Regi\u00f3n" - }, - "description": "Ingresa tu informaci\u00f3n de PlayStation 4. Para 'PIN', navegue hasta 'Configuraci\u00f3n' en su consola PlayStation 4. Luego navegue a 'Configuraci\u00f3n de conexi\u00f3n de la aplicaci\u00f3n m\u00f3vil' y seleccione 'Agregar dispositivo'. Ingrese el PIN que se muestra.", - "title": "Playstation 4" - }, - "mode": { - "data": { - "mode": "Modo de configuraci\u00f3n" - }, - "title": "Playstation 4" - } - }, - "title": "Playstation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/es.json b/homeassistant/components/ps4/.translations/es.json deleted file mode 100644 index d2d749e4deb..00000000000 --- a/homeassistant/components/ps4/.translations/es.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Error al obtener las credenciales.", - "devices_configured": "Todos los dispositivos encontrados ya est\u00e1n configurados.", - "no_devices_found": "No se encuentran dispositivos PlayStation 4 en la red.", - "port_987_bind_error": "No se ha podido unir al puerto 987. Consulta la [documentaci\u00f3n](https://www.home-assistant.io/components/ps4/) para m\u00e1s informaci\u00f3n.", - "port_997_bind_error": "No se ha podido unir al puerto 997. Consulta la [documentaci\u00f3n](https://www.home-assistant.io/components/ps4/) para m\u00e1s informaci\u00f3n." - }, - "error": { - "credential_timeout": "Se agot\u00f3 el tiempo para el servicio de credenciales. Pulsa enviar para reiniciar.", - "login_failed": "No se ha podido emparejar con PlayStation 4. Verifique que el PIN sea correcto.", - "no_ipaddress": "Introduce la direcci\u00f3n IP de la PlayStation 4 que quieres configurar.", - "not_ready": "PlayStation 4 no est\u00e1 encendido o conectado a la red." - }, - "step": { - "creds": { - "description": "Credenciales necesarias. Pulsa 'Enviar' y, a continuaci\u00f3n, en la app de segunda pantalla de PS4, actualiza la lista de dispositivos y selecciona el dispositivo 'Home-Assistant' para continuar.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Direcci\u00f3n IP", - "name": "Nombre", - "region": "Regi\u00f3n" - }, - "description": "Introduce la informaci\u00f3n de tu PlayStation 4. Para el 'PIN', ve a los 'Ajustes' en tu PlayStation 4. Despu\u00e9s dir\u00edgete hasta 'Ajustes de conexi\u00f3n de la aplicaci\u00f3n para m\u00f3viles' y selecciona 'A\u00f1adir dispositivo'. Introduce el PIN mostrado. Consulta la [documentaci\u00f3n](https://www.home-assistant.io/components/ps4/) para m\u00e1s informaci\u00f3n.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "Direcci\u00f3n IP (d\u00e9jalo en blanco si usas la detecci\u00f3n autom\u00e1tica).", - "mode": "Modo configuraci\u00f3n" - }, - "description": "Selecciona el modo de configuraci\u00f3n. El campo de direcci\u00f3n IP puede dejarse en blanco si se selecciona la detecci\u00f3n autom\u00e1tica, ya que los dispositivos se detectar\u00e1n autom\u00e1ticamente.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/fr.json b/homeassistant/components/ps4/.translations/fr.json deleted file mode 100644 index 5c49723657c..00000000000 --- a/homeassistant/components/ps4/.translations/fr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Erreur lors de l'extraction des informations d'identification.", - "devices_configured": "Tous les p\u00e9riph\u00e9riques trouv\u00e9s sont d\u00e9j\u00e0 configur\u00e9s.", - "no_devices_found": "Aucun appareil PlayStation 4 trouv\u00e9 sur le r\u00e9seau.", - "port_987_bind_error": "Impossible de se connecter au port 997. Reportez-vous \u00e0 la [documentation] (https://www.home-assistant.io/components/ps4/) pour plus d'informations.", - "port_997_bind_error": "Impossible de se connecter au port 997. Reportez-vous \u00e0 la [documentation] (https://www.home-assistant.io/components/ps4/) pour plus d'informations." - }, - "error": { - "credential_timeout": "Le service d'informations d'identification a expir\u00e9. Appuyez sur soumettre pour red\u00e9marrer.", - "login_failed": "\u00c9chec de l'association \u00e0 la PlayStation 4. V\u00e9rifiez que le code PIN est correct.", - "no_ipaddress": "Entrez l'adresse IP de la PlayStation 4 que vous souhaitez configurer.", - "not_ready": "PlayStation 4 n'est pas allum\u00e9e ou connect\u00e9e au r\u00e9seau." - }, - "step": { - "creds": { - "description": "Informations d\u2019identification n\u00e9cessaires. Appuyez sur \u00ab\u00a0Envoyer\u00a0\u00bb puis dans la PS4 2\u00e8me \u00e9cran App, actualisez les p\u00e9riph\u00e9riques et s\u00e9lectionnez le dispositif \u00ab\u00a0Home Assistant\u00a0\u00bb pour continuer.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Adresse IP", - "name": "Nom", - "region": "R\u00e9gion" - }, - "description": "Entrez vos informations PlayStation 4. Pour \"Code PIN\", acc\u00e9dez \u00e0 \"Param\u00e8tres\" sur votre console PlayStation 4. Ensuite, acc\u00e9dez \u00e0 \"Param\u00e8tres de connexion de l'application mobile\" et s\u00e9lectionnez \"Ajouter un p\u00e9riph\u00e9rique\". Entrez le code PIN qui est affich\u00e9. Consultez la documentation pour plus d'informations.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "Adresse IP (laissez vide si vous utilisez la d\u00e9couverte automatique).", - "mode": "Mode de configuration" - }, - "description": "S\u00e9lectionnez le mode de configuration. Le champ Adresse IP peut rester vide si vous s\u00e9lectionnez D\u00e9couverte automatique, car les p\u00e9riph\u00e9riques seront automatiquement d\u00e9couverts.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/he.json b/homeassistant/components/ps4/.translations/he.json deleted file mode 100644 index d9fa42b9e47..00000000000 --- a/homeassistant/components/ps4/.translations/he.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "devices_configured": "\u05db\u05dc \u05d4\u05d4\u05ea\u05e7\u05e0\u05d9\u05dd \u05e9\u05e0\u05de\u05e6\u05d0\u05d5 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8\u05d9\u05dd.", - "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05db\u05e9\u05d9\u05e8\u05d9 \u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4 \u05d1\u05e8\u05e9\u05ea." - }, - "error": { - "not_ready": "PlayStation 4 \u05d0\u05d9\u05e0\u05d5 \u05e4\u05d5\u05e2\u05dc \u05d0\u05d5 \u05de\u05d7\u05d5\u05d1\u05e8 \u05dc\u05e8\u05e9\u05ea." - }, - "step": { - "creds": { - "title": "\u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4" - }, - "link": { - "data": { - "ip_address": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d4 - IP", - "name": "\u05e9\u05dd", - "region": "\u05d0\u05d9\u05d6\u05d5\u05e8" - }, - "title": "\u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4" - } - }, - "title": "\u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/it.json b/homeassistant/components/ps4/.translations/it.json deleted file mode 100644 index de5eb4e5e6f..00000000000 --- a/homeassistant/components/ps4/.translations/it.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Errore nel recupero delle credenziali.", - "devices_configured": "Tutti i dispositivi trovati sono gi\u00e0 configurati.", - "no_devices_found": "Nessun dispositivo PlayStation 4 trovato in rete.", - "port_987_bind_error": "Impossibile collegarsi alla porta 987. Per ulteriori informazioni, consultare la [documentazione] (https://www.home-assistant.io/components/ps4/) per ulteriori informazioni.", - "port_997_bind_error": "Impossibile collegarsi alla porta 997. Consultare la [documentazione] (https://www.home-assistant.io/components/ps4/) per ulteriori informazioni." - }, - "error": { - "credential_timeout": "Servizio credenziali scaduto. Premi Invia per riavviare.", - "login_failed": "Impossibile eseguire l'associazione a PlayStation 4. Verificare che il PIN sia corretto.", - "no_ipaddress": "Inserisci l'indirizzo IP della PlayStation 4 che desideri configurare.", - "not_ready": "La PlayStation 4 non \u00e8 accesa o non \u00e8 collegata alla rete." - }, - "step": { - "creds": { - "description": "Credenziali necessarie. Premi 'Invia' e poi, nella seconda schermata della App PS4, aggiorna i dispositivi e seleziona il dispositivo 'Home-Assistant' per continuare.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Indirizzo IP", - "name": "Nome", - "region": "Area geografica" - }, - "description": "Inserisci le tue informazioni su PlayStation 4. Per \"PIN\", vai a \"Impostazioni\" sulla console PlayStation 4. Quindi vai a 'Impostazioni di connessione app mobile' e seleziona 'Aggiungi dispositivo'. Immettere il PIN visualizzato. Fare riferimento alla [documentazione](https://www.home-assistant.io/components/ps4/) per ulteriori informazioni.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "Indirizzo IP (lasciare vuoto se si utilizza la funzione Auto Discovery).", - "mode": "Modalit\u00e0 di configurazione" - }, - "description": "Seleziona la modalit\u00e0 per la configurazione. L'indirizzo IP pu\u00f2 essere lasciato vuoto se si seleziona Auto Discovery, poich\u00e9 i dispositivi verranno rilevati automaticamente.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/ko.json b/homeassistant/components/ps4/.translations/ko.json deleted file mode 100644 index 46bbd6b309c..00000000000 --- a/homeassistant/components/ps4/.translations/ko.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "\uc790\uaca9 \uc99d\uba85\uc744 \uac00\uc838\uc624\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", - "devices_configured": "\ubc1c\uacac\ub41c \ubaa8\ub4e0 \uae30\uae30\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "no_devices_found": "PlayStation 4 \uae30\uae30\ub97c \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "port_987_bind_error": "\ud3ec\ud2b8 987 \uc5d0 \ubc14\uc778\ub529 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucd94\uac00 \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/components/ps4/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.", - "port_997_bind_error": "\ud3ec\ud2b8 997 \uc5d0 \ubc14\uc778\ub529 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucd94\uac00 \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/components/ps4/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "error": { - "credential_timeout": "\uc790\uaca9 \uc99d\uba85 \uc11c\ube44\uc2a4 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. Submit \uc744 \ub20c\ub7ec \ub2e4\uc2dc \uc2dc\uc791\ud574\uc8fc\uc138\uc694.", - "login_failed": "PlayStation 4 \uc640 \ud398\uc5b4\ub9c1\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. PIN \uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", - "no_ipaddress": "\uad6c\uc131\ud558\uace0\uc790 \ud558\ub294 PlayStation 4 \uc758 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "not_ready": "PlayStation 4 \uac00 \ucf1c\uc838 \uc788\uc9c0 \uc54a\uac70\ub098 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." - }, - "step": { - "creds": { - "description": "\uc790\uaca9 \uc99d\uba85\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. 'Submit' \uc744 \ub204\ub978 \ub2e4\uc74c PS4 \uc138\ucee8\ub4dc \uc2a4\ud06c\ub9b0 \uc571\uc5d0\uc11c \uae30\uae30\ub97c \uc0c8\ub85c \uace0\uce68\ud558\uace0 'Home-Assistant' \uae30\uae30\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP \uc8fc\uc18c", - "name": "\uc774\ub984", - "region": "\uc9c0\uc5ed" - }, - "description": "PlayStation 4 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. 'PIN' \uc744 \ud655\uc778\ud558\ub824\uba74, PlayStation 4 \ucf58\uc194\uc5d0\uc11c '\uc124\uc815' \uc73c\ub85c \uc774\ub3d9\ud55c \ub4a4 '\ubaa8\ubc14\uc77c \uc571 \uc811\uc18d \uc124\uc815' \uc73c\ub85c \uc774\ub3d9\ud558\uc5ec '\uae30\uae30 \ub4f1\ub85d\ud558\uae30' \ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \ud654\uba74\uc5d0 \ud45c\uc2dc\ub41c 8\uc790\ub9ac \uc22b\uc790\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. \ucd94\uac00 \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/components/ps4/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP \uc8fc\uc18c (\uc790\ub3d9 \uac80\uc0c9\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ube44\uc6cc\ub450\uc138\uc694)", - "mode": "\uad6c\uc131 \ubaa8\ub4dc" - }, - "description": "\uad6c\uc131 \ubaa8\ub4dc\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \uc790\ub3d9 \uac80\uc0c9\uc744 \uc120\ud0dd\ud558\uba74 \uae30\uae30\uac00 \uc790\ub3d9\uc73c\ub85c \uac80\uc0c9\ub418\ubbc0\ub85c IP \uc8fc\uc18c \ud544\ub4dc\ub294 \ube44\uc6cc\ub450\uc154\ub3c4 \ub429\ub2c8\ub2e4.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/lb.json b/homeassistant/components/ps4/.translations/lb.json deleted file mode 100644 index 0986b0e0240..00000000000 --- a/homeassistant/components/ps4/.translations/lb.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Feeler beim ausliesen vun den Umeldungs Informatiounen.", - "devices_configured": "All Apparater sinn schonn konfigur\u00e9iert", - "no_devices_found": "Keng Playstation 4 am Netzwierk fonnt.", - "port_987_bind_error": "Konnt sech net mam Port 987 verbannen. Liest [Dokumentatioun](https://www.home-assistant.io/components/ps4/) fir w\u00e9ider Informatiounen.", - "port_997_bind_error": "Konnt sech net mam Port 997 verbannen. Liest [Dokumentatioun](https://www.home-assistant.io/components/ps4/) fir w\u00e9ider Informatiounen." - }, - "error": { - "credential_timeout": "Z\u00e4it Iwwerschreidung beim Service vun den Umeldungsinformatiounen. Dr\u00e9ck op ofsch\u00e9cke fir nach emol ze starten.", - "login_failed": "Feeler beim verbanne mat der Playstation 4. Iwwerpr\u00e9ift op de PIN korrekt ass.", - "no_ipaddress": "Gitt d'IP Adresse vun der Playstation 4 an:", - "not_ready": "PlayStation 4 ass net un oder mam Netzwierk verbonnen." - }, - "step": { - "creds": { - "description": "Umeldungsinformatioun sinn n\u00e9ideg. Dr\u00e9ckt op 'Ofsch\u00e9cken' , dann an der PS4 App, 2ten Ecran, erneiert Apparater an wielt den Home-Assistant Apparat aus fir weider ze fueren.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP Adresse", - "name": "Numm", - "region": "Regioun" - }, - "description": "Gitt \u00e4r Playstation 4 Informatiounen an. Fir 'PIN', gitt an d'Astellunge vun der Playstation 4 Konsole. Dann op 'Mobile App Verbindungs Astellungen' a wielt \"Apparat dob\u00e4isetzen' aus. Gitt de PIN an deen ugewise g\u00ebtt. Liest [Dokumentatioun](https://www.home-assistant.io/components/ps4/) fir w\u00e9ider Informatiounen.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP Address (Eidel loossen falls Auto Discovery benotzt g\u00ebtt)", - "mode": "Konfiguratioun's Modus" - }, - "description": "Konfiguratioun's Modus auswielen. D'Feld IP Adress kann eidel bl\u00e9iwen wann Auto Discovery benotzt g\u00ebtt, well d'Apparaten automatesch entdeckt ginn.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/nl.json b/homeassistant/components/ps4/.translations/nl.json deleted file mode 100644 index 8eaa20d76cf..00000000000 --- a/homeassistant/components/ps4/.translations/nl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Fout bij ophalen van inloggegevens.", - "devices_configured": "Alle gevonden apparaten zijn al geconfigureerd.", - "no_devices_found": "Geen PlayStation 4 apparaten gevonden op het netwerk.", - "port_987_bind_error": "Kon niet binden aan poort 987. Raadpleeg de [documentatie] (https://www.home-assistant.io/components/ps4/) voor meer informatie.", - "port_997_bind_error": "Kon niet binden aan poort 997. Raadpleeg de [documentatie] (https://www.home-assistant.io/components/ps4/) voor aanvullende informatie." - }, - "error": { - "credential_timeout": "Time-out van inlog service. Druk op Submit om opnieuw te starten.", - "login_failed": "Kan niet koppelen met PlayStation 4. Controleer of de pincode juist is.", - "no_ipaddress": "Voer het IP-adres in van de PlayStation 4 die je wilt configureren.", - "not_ready": "PlayStation 4 staat niet aan of is niet verbonden met een netwerk." - }, - "step": { - "creds": { - "description": "Aanmeldingsgegevens zijn nodig. Druk op 'Verzenden' en vervolgens in de PS4-app voor het 2e scherm, vernieuw apparaten en selecteer Home Assistant om door te gaan.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP-adres", - "name": "Naam", - "region": "Regio" - }, - "description": "Voer je PlayStation 4-informatie in. Ga voor 'PIN' naar 'Instellingen' op je PlayStation 4-console. Navigeer vervolgens naar 'Verbindingsinstellingen mobiele app' en selecteer 'Apparaat toevoegen'. Voer de pincode in die wordt weergegeven. Raadpleeg de [documentatie] (https://www.home-assistant.io/components/ps4/) voor meer informatie.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP-adres (leeg laten als u Auto Discovery gebruikt).", - "mode": "Configuratiemodus" - }, - "description": "Selecteer modus voor configuratie. Het veld IP-adres kan leeg blijven als Auto Discovery wordt geselecteerd, omdat apparaten automatisch worden gedetecteerd.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/nn.json b/homeassistant/components/ps4/.translations/nn.json deleted file mode 100644 index 86920906003..00000000000 --- a/homeassistant/components/ps4/.translations/nn.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "port_987_bind_error": "Kunne ikkje binda til port 987. Sj\u00e5 [dokumentasjonen](https://www.home-assistant.io/components/ps4/) for meir informasjon.", - "port_997_bind_error": "Kunne ikkje binde til port 997. Sj\u00e5 [dokumentasjonen] (https://www.home-assistant.io/components/ps4/) for ytterlegare informasjon." - }, - "step": { - "creds": { - "title": "Playstation 4" - }, - "link": { - "data": { - "code": "PIN", - "name": "Namn" - }, - "title": "Playstation 4" - }, - "mode": { - "title": "Playstation 4" - } - }, - "title": "Playstation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/no.json b/homeassistant/components/ps4/.translations/no.json deleted file mode 100644 index b5db81356d0..00000000000 --- a/homeassistant/components/ps4/.translations/no.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Feil ved henting av legitimasjon.", - "devices_configured": "Alle enheter som ble funnet er allerede konfigurert.", - "no_devices_found": "Ingen PlayStation 4 enheter funnet p\u00e5 nettverket.", - "port_987_bind_error": "Kunne ikke binde til port 987. Se [dokumentasjonen](https://www.home-assistant.io/components/ps4/) for mer info.", - "port_997_bind_error": "Kunne ikke binde til port 997. Se [dokumentasjonen] (https://www.home-assistant.io/components/ps4/) for videre informasjon." - }, - "error": { - "credential_timeout": "Legitimasjonstjenesten ble tidsavbrutt. Trykk send for \u00e5 starte p\u00e5 nytt.", - "login_failed": "Klarte ikke \u00e5 koble til PlayStation 4. Bekreft at PIN koden er riktig.", - "no_ipaddress": "Angi IP adressen til din PlayStation 4 som du \u00f8nsker konfigurere.", - "not_ready": "PlayStation 4 er ikke p\u00e5sl\u00e5tt eller koblet til nettverk." - }, - "step": { - "creds": { - "description": "Legitimasjon n\u00f8dvendig. Trykk 'Send' og deretter i PS4-ens andre skjerm app, kan du oppdatere enheter, og velg 'Home-Assistant' enheten for \u00e5 fortsette.", - "title": "" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP adresse", - "name": "Navn", - "region": "Region" - }, - "description": "Skriv inn PlayStation 4-informasjonen. For 'PIN', naviger til 'Innstillinger' p\u00e5 PlayStation 4-konsollen. Naviger deretter til 'Mobile App Connection Settings' og velg 'Add Device'. Tast inn PIN-koden som vises. Se [dokumentasjonen] (https://www.home-assistant.io/components/ps4/) for mer informasjon.", - "title": "" - }, - "mode": { - "data": { - "ip_address": "IP- adresse (Ikke fyll ut hvis du bruker Auto Discovery).", - "mode": "Konfigureringsmodus" - }, - "description": "Velg modus for konfigurasjon. Feltet IP-adresse kan st\u00e5 tomt dersom du velger Auto Discovery, da enheter vil bli oppdaget automatisk.", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/pl.json b/homeassistant/components/ps4/.translations/pl.json deleted file mode 100644 index 0770116f1c8..00000000000 --- a/homeassistant/components/ps4/.translations/pl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "B\u0142\u0105d podczas pobierania danych logowania.", - "devices_configured": "Wszystkie znalezione urz\u0105dzenia s\u0105 ju\u017c skonfigurowane.", - "no_devices_found": "W sieci nie znaleziono urz\u0105dze\u0144 PlayStation 4.", - "port_987_bind_error": "Nie mo\u017cna powi\u0105za\u0107 z portem 987.", - "port_997_bind_error": "Nie mo\u017cna powi\u0105za\u0107 z portem 997." - }, - "error": { - "credential_timeout": "Przekroczono limit czasu us\u0142ugi po\u015bwiadcze\u0144. Naci\u015bnij przycisk Prze\u015blij, aby ponowi\u0107.", - "login_failed": "Nie uda\u0142o si\u0119 sparowa\u0107 z PlayStation 4. Sprawd\u017a, czy PIN jest poprawny.", - "no_ipaddress": "Wprowad\u017a adres IP PlayStation 4, kt\u00f3ry chcesz skonfigurowa\u0107.", - "not_ready": "PlayStation 4 nie jest w\u0142\u0105czona lub po\u0142\u0105czona z sieci\u0105." - }, - "step": { - "creds": { - "description": "Wymagane s\u0105 po\u015bwiadczenia. Naci\u015bnij przycisk 'Prze\u015blij', a nast\u0119pnie w aplikacji PS4 Second Screen, od\u015bwie\u017c urz\u0105dzenia i wybierz urz\u0105dzenie 'Home-Assistant', aby kontynuowa\u0107.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Adres IP", - "name": "Nazwa", - "region": "Region" - }, - "description": "Wprowad\u017a informacje o PlayStation 4. Aby uzyska\u0107 'PIN', przejd\u017a do 'Ustawienia' na konsoli PlayStation 4. Nast\u0119pnie przejd\u017a do 'Ustawienia po\u0142\u0105czenia aplikacji mobilnej' i wybierz 'Dodaj urz\u0105dzenie'. Wprowad\u017a wy\u015bwietlony kod PIN.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "Adres IP (pozostaw puste, je\u015bli u\u017cywasz funkcji Auto Discovery).", - "mode": "Tryb konfiguracji" - }, - "description": "Wybierz tryb konfiguracji. Pole adresu IP mo\u017cna pozostawi\u0107 puste, je\u015bli wybierzesz opcj\u0119 Auto Discovery, poniewa\u017c urz\u0105dzenia zostan\u0105 automatycznie wykryte.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/pt-BR.json b/homeassistant/components/ps4/.translations/pt-BR.json deleted file mode 100644 index f6a86be0091..00000000000 --- a/homeassistant/components/ps4/.translations/pt-BR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Erro ao buscar credenciais.", - "devices_configured": "Todos os dispositivos encontrados j\u00e1 est\u00e3o configurados.", - "no_devices_found": "Nenhum dispositivo PlayStation 4 encontrado na rede.", - "port_987_bind_error": "N\u00e3o foi poss\u00edvel conectar na porta 987. Consulte a [documenta\u00e7\u00e3o] (https://www.home-assistant.io/components/ps4/) para informa\u00e7\u00f5es adicionais.", - "port_997_bind_error": "N\u00e3o foi poss\u00edvel conectar na porta 997. Consulte a [documenta\u00e7\u00e3o] (https://www.home-assistant.io/components/ps4/) para informa\u00e7\u00f5es adicionais." - }, - "error": { - "credential_timeout": "Servi\u00e7o de credencial expirou. Pressione Submit para reiniciar.", - "login_failed": "N\u00e3o foi poss\u00edvel parear com o PlayStation 4. Verifique se o PIN est\u00e1 correto.", - "no_ipaddress": "Digite o endere\u00e7o IP do PlayStation 4 que voc\u00ea gostaria de configurar.", - "not_ready": "O PlayStation 4 n\u00e3o est\u00e1 ligado ou conectado \u00e0 rede." - }, - "step": { - "creds": { - "description": "Credenciais necess\u00e1rias. Pressione 'Enviar' e, em seguida, no PS4, na Tela do segundo aplicativo, atualize os dispositivos e selecione o dispositivo 'Home-Assistant' para continuar.", - "title": "Playstation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Endere\u00e7o IP", - "name": "Nome", - "region": "Regi\u00e3o" - }, - "description": "Digite suas informa\u00e7\u00f5es do PlayStation 4. Para 'PIN', navegue at\u00e9 'Configura\u00e7\u00f5es' no seu console PlayStation 4. Em seguida, navegue at\u00e9 \"Configura\u00e7\u00f5es de conex\u00e3o de aplicativos m\u00f3veis\" e selecione \"Adicionar dispositivo\". Digite o PIN exibido. Consulte a [documenta\u00e7\u00e3o] (https://www.home-assistant.io/components/ps4/) para informa\u00e7\u00f5es adicionais.", - "title": "Playstation 4" - }, - "mode": { - "data": { - "ip_address": "Endere\u00e7o IP (Deixe em branco se estiver usando a Detec\u00e7\u00e3o autom\u00e1tica).", - "mode": "Modo de configura\u00e7\u00e3o" - }, - "description": "Selecione o modo para configura\u00e7\u00e3o. O campo Endere\u00e7o IP pode ser deixado em branco se selecionar Detec\u00e7\u00e3o Autom\u00e1tica, pois os dispositivos ser\u00e3o descobertos automaticamente.", - "title": "Playstation 4" - } - }, - "title": "Playstation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/pt.json b/homeassistant/components/ps4/.translations/pt.json deleted file mode 100644 index 5d4c8e12283..00000000000 --- a/homeassistant/components/ps4/.translations/pt.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "step": { - "creds": { - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "Endere\u00e7o de IP", - "name": "Nome", - "region": "Regi\u00e3o" - }, - "title": "PlayStation 4" - }, - "mode": { - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/ru.json b/homeassistant/components/ps4/.translations/ru.json deleted file mode 100644 index c7ac8d76cf1..00000000000 --- a/homeassistant/components/ps4/.translations/ru.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.", - "devices_configured": "\u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.", - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 PlayStation 4 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", - "port_987_bind_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0443 987. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ps4/).", - "port_997_bind_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0443 997. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ps4/)." - }, - "error": { - "credential_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", - "login_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 PlayStation 4. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e PIN-\u043a\u043e\u0434 \u0432\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.", - "no_ipaddress": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 IP-\u0430\u0434\u0440\u0435\u0441 PlayStation 4.", - "not_ready": "PlayStation 4 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u0441\u0435\u0442\u0438." - }, - "step": { - "creds": { - "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 'PS4 Second Screen' \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e 'Home-Assistant'.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN-\u043a\u043e\u0434", - "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "region": "\u0420\u0435\u0433\u0438\u043e\u043d" - }, - "description": "\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f PIN-\u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043f\u0443\u043d\u043a\u0442\u0443 **\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438** \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 PlayStation 4. \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 **\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f** \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 **\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e**. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ps4/) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441 (\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 \u0430\u0432\u0442\u043e\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f)", - "mode": "\u0420\u0435\u0436\u0438\u043c" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041f\u043e\u043b\u0435 'IP-\u0430\u0434\u0440\u0435\u0441' \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c, \u0435\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 'Auto Discovery', \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/sl.json b/homeassistant/components/ps4/.translations/sl.json deleted file mode 100644 index f51bc45e0e8..00000000000 --- a/homeassistant/components/ps4/.translations/sl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Napaka pri pridobivanju poverilnic.", - "devices_configured": "Vse najdene naprave so \u017ee konfigurirane.", - "no_devices_found": "V omre\u017eju ni najdenih naprav PS4.", - "port_987_bind_error": "Ne morem se povezati z vrati 987. Dodatne informacije najdete v [dokumentaciji] (https://www.home-assistant.io/components/ps4/).", - "port_997_bind_error": "Ne morem se povezati z vrati 997. Dodatne informacije najdete v [dokumentaciji] (https://www.home-assistant.io/components/ps4/)." - }, - "error": { - "credential_timeout": "Storitev poverilnic je potekla. Pritisnite Po\u0161lji za ponovni zagon.", - "login_failed": "Neuspelo seznanjanje s PlayStation 4. Preverite, ali je koda PIN pravilna.", - "no_ipaddress": "Vnesite IP naslov PlayStation-a 4, ki ga \u017eelite konfigurirati.", - "not_ready": "PlayStation 4 ni vklopljen ali povezan z omre\u017ejem." - }, - "step": { - "creds": { - "description": "Potrebne so poverilnice. Pritisnite 'Po\u0161lji' in nato v aplikaciji PS4 2nd Screen App, osve\u017eite naprave in izberite napravo 'Home-Assistant' za nadaljevanje.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP naslov", - "name": "Ime", - "region": "Regija" - }, - "description": "Vnesite va\u0161e PlayStation 4 podatke. Za 'PIN' pojdite na 'Nastavitve' na konzoli PlayStation 4. Nato se pomaknite do mo\u017enosti \u00bbNastavitve povezave z mobilno aplikacijo\u00ab in izberite \u00bbDodaj napravo\u00ab. Vnesite prikazano kodo PIN. Dodatne informacije najdete v [dokumentaciji] (https://www.home-assistant.io/components/ps4/).", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "Naslov IP (Pustite prazno, \u010de uporabljate samodejno odkrivanje).", - "mode": "Na\u010din konfiguracije" - }, - "description": "Izberite na\u010din za konfiguracijo. IP-Naslov, polje lahko pustite prazno, \u010de izberete samodejno odkrivanje, saj bodo naprave samodejno odkrite.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/sv.json b/homeassistant/components/ps4/.translations/sv.json deleted file mode 100644 index a36c8e28d9e..00000000000 --- a/homeassistant/components/ps4/.translations/sv.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "Fel n\u00e4r f\u00f6rs\u00f6ker h\u00e4mta autentiseringsuppgifter.", - "devices_configured": "Alla enheter som hittats \u00e4r redan konfigurerade.", - "no_devices_found": "Inga PlayStation 4 enheter hittades p\u00e5 n\u00e4tverket.", - "port_987_bind_error": "Kunde inte binda till port 987.", - "port_997_bind_error": "Kunde inte binda till port 997." - }, - "error": { - "credential_timeout": "Autentiseringstj\u00e4nsten orsakade timeout. Tryck p\u00e5 Skicka f\u00f6r att starta om.", - "login_failed": "Misslyckades med att para till PlayStation 4. Verifiera PIN-koden \u00e4r korrekt.", - "no_ipaddress": "Ange IP-adressen f\u00f6r PlayStation 4 du vill konfigurera.", - "not_ready": "PlayStation 4 \u00e4r inte p\u00e5slagen eller ansluten till n\u00e4tverket." - }, - "step": { - "creds": { - "description": "Autentiseringsuppgifter beh\u00f6vs. Tryck p\u00e5 'Skicka' och sedan uppdatera enheter i appen \"PS4 Second Screen\" p\u00e5 din mobiltelefon eller surfplatta och v\u00e4lj 'Home Assistent' enheten att forts\u00e4tta.", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN-kod", - "ip_address": "IP-adress", - "name": "Namn", - "region": "Region" - }, - "description": "Ange din PlayStation 4 information. F\u00f6r 'PIN', navigera till 'Inst\u00e4llningar' p\u00e5 din PlayStation 4 konsol. Navigera sedan till \"Inst\u00e4llningar f\u00f6r mobilappanslutning\" och v\u00e4lj \"L\u00e4gg till enhet\". Ange PIN-koden som visas.", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP-adress (l\u00e4mna tom om du anv\u00e4nder automatisk uppt\u00e4ckt).", - "mode": "Konfigureringsl\u00e4ge" - }, - "description": "V\u00e4lj l\u00e4ge f\u00f6r konfigurering. F\u00e4ltet IP-adress kan l\u00e4mnas tomt om du v\u00e4ljer Automatisk uppt\u00e4ckt, eftersom enheter d\u00e5 kommer att identifieras automatiskt.", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/th.json b/homeassistant/components/ps4/.translations/th.json deleted file mode 100644 index b33002bcda8..00000000000 --- a/homeassistant/components/ps4/.translations/th.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "step": { - "creds": { - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48 IP", - "name": "\u0e0a\u0e37\u0e48\u0e2d", - "region": "\u0e20\u0e39\u0e21\u0e34\u0e20\u0e32\u0e04" - }, - "title": "PlayStation 4" - }, - "mode": { - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/zh-Hans.json b/homeassistant/components/ps4/.translations/zh-Hans.json deleted file mode 100644 index 118226354af..00000000000 --- a/homeassistant/components/ps4/.translations/zh-Hans.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "\u83b7\u53d6\u51ed\u636e\u65f6\u51fa\u9519\u3002", - "devices_configured": "\u6240\u6709\u53d1\u73b0\u7684\u8bbe\u5907\u90fd\u5df2\u914d\u7f6e\u5b8c\u6210\u3002", - "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 PlayStation 4 \u8bbe\u5907\u3002", - "port_987_bind_error": "\u65e0\u6cd5\u7ed1\u5b9a\u7aef\u53e3 987\u3002", - "port_997_bind_error": "\u65e0\u6cd5\u7ed1\u5b9a\u7aef\u53e3 997\u3002" - }, - "error": { - "login_failed": "\u65e0\u6cd5\u4e0e PlayStation 4 \u914d\u5bf9\u3002\u8bf7\u786e\u8ba4 PIN \u662f\u5426\u6b63\u786e\u3002", - "not_ready": "PlayStation 4 \u672a\u5f00\u673a\u6216\u672a\u8fde\u63a5\u5230\u7f51\u7edc\u3002" - }, - "step": { - "creds": { - "description": "\u9700\u8981\u51ed\u636e\u3002\u8bf7\u70b9\u51fb\u201c\u63d0\u4ea4\u201d\u7136\u540e\u5728 PS4 \u7b2c\u4e8c\u5c4f\u5e55\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5237\u65b0\u8bbe\u5907\u5e76\u9009\u62e9\u201cHome-Assistant\u201d\u8bbe\u5907\u4ee5\u7ee7\u7eed\u3002", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP \u5730\u5740", - "name": "\u540d\u79f0", - "region": "\u5730\u533a" - }, - "description": "\u8f93\u5165\u60a8\u7684 PlayStation 4 \u4fe1\u606f\u3002\u5bf9\u4e8e \"PIN\", \u8bf7\u5bfc\u822a\u5230 PlayStation 4 \u63a7\u5236\u53f0\u4e0a\u7684 \"\u8bbe\u7f6e\"\u3002\u7136\u540e\u5bfc\u822a\u5230 \"\u79fb\u52a8\u5e94\u7528\u8fde\u63a5\u8bbe\u7f6e\", \u7136\u540e\u9009\u62e9 \"\u6dfb\u52a0\u8bbe\u5907\"\u3002\u8f93\u5165\u663e\u793a\u7684 PIN\u3002", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/zh-Hant.json b/homeassistant/components/ps4/.translations/zh-Hant.json deleted file mode 100644 index a786b0c74d3..00000000000 --- a/homeassistant/components/ps4/.translations/zh-Hant.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "abort": { - "credential_error": "\u53d6\u5f97\u6191\u8b49\u932f\u8aa4\u3002", - "devices_configured": "\u6240\u6709\u8a2d\u5099\u90fd\u5df2\u8a2d\u5b9a\u5b8c\u6210\u3002", - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 PlayStation 4 \u88dd\u7f6e\u3002", - "port_987_bind_error": "\u7121\u6cd5\u7d81\u5b9a\u901a\u8a0a\u57e0 987\u3002\u8acb\u53c3\u8003 [documentation](https://www.home-assistant.io/components/ps4/) \u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002", - "port_997_bind_error": "\u7121\u6cd5\u7d81\u5b9a\u901a\u8a0a\u57e0 997\u3002\u8acb\u53c3\u8003 [documentation](https://www.home-assistant.io/components/ps4/) \u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002" - }, - "error": { - "credential_timeout": "\u6191\u8b49\u670d\u52d9\u903e\u6642\uff0c\u9ede\u9078\u300c\u50b3\u9001\u300d\u4ee5\u91cd\u555f\u3002", - "login_failed": "PlayStation 4 \u914d\u5c0d\u5931\u6557\uff0c\u8acb\u78ba\u8a8d PIN \u78bc\u3002", - "no_ipaddress": "\u8f38\u5165\u6240\u8981\u8a2d\u5b9a\u7684 PlayStation 4 \u4e4b IP \u4f4d\u5740\u3002", - "not_ready": "PlayStation 4 \u4e26\u672a\u958b\u555f\u6216\u672a\u9023\u7dda\u81f3\u7db2\u8def\u3002" - }, - "step": { - "creds": { - "description": "\u9700\u8981\u6191\u8b49\u3002\u6309\u4e0b\u300c\u50b3\u9001\u300d\u5f8c\u3001\u65bc PS4 \u7b2c\u4e8c\u756b\u9762 App\uff0c\u66f4\u65b0\u8a2d\u5099\u4e26\u9078\u64c7\u300cHome-Assistant\u300d\u4ee5\u7e7c\u7e8c\u3002", - "title": "PlayStation 4" - }, - "link": { - "data": { - "code": "PIN", - "ip_address": "IP \u4f4d\u5740", - "name": "\u540d\u7a31", - "region": "\u5340\u57df" - }, - "description": "\u8f38\u5165\u60a8\u7684 PlayStation 4 \u8cc7\u8a0a\uff0c\u300cPIN\u300d\u65bc PlayStation 4 \u4e3b\u6a5f\u7684\u300c\u8a2d\u5b9a\u300d\u5167\uff0c\u4e26\u65bc\u300c\u884c\u52d5\u7a0b\u5f0f\u9023\u7dda\u8a2d\u5b9a\uff08Mobile App Connection Settings\uff09\u300d\u4e2d\u9078\u64c7\u300c\u65b0\u589e\u8a2d\u5099\u300d\u3002\u8f38\u5165\u6240\u986f\u793a\u7684 PIN \u78bc\u3002\u8acb\u53c3\u8003 [documentation](https://www.home-assistant.io/components/ps4/) \u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002", - "title": "PlayStation 4" - }, - "mode": { - "data": { - "ip_address": "IP \u4f4d\u5740\uff08\u5982\u679c\u4f7f\u7528\u81ea\u52d5\u63a2\u7d22\u65b9\u5f0f\uff0c\u8acb\u4fdd\u7559\u7a7a\u767d\uff09\u3002", - "mode": "\u8a2d\u5b9a\u6a21\u5f0f" - }, - "description": "\u9078\u64c7\u6a21\u5f0f\u4ee5\u9032\u884c\u8a2d\u5b9a\u3002\u5047\u5982\u9078\u64c7\u81ea\u52d5\u63a2\u7d22\u6a21\u5f0f\u7684\u8a71\uff0c\u7531\u65bc\u6703\u81ea\u52d5\u9032\u884c\u8a2d\u5099\u641c\u5c0b\uff0cIP \u4f4d\u5740\u53ef\u4fdd\u7559\u70ba\u7a7a\u767d\u3002", - "title": "PlayStation 4" - } - }, - "title": "PlayStation 4" - } -} \ No newline at end of file diff --git a/homeassistant/components/ps4/__init__.py b/homeassistant/components/ps4/__init__.py index 05e3422fe74..d2c6e9859de 100644 --- a/homeassistant/components/ps4/__init__.py +++ b/homeassistant/components/ps4/__init__.py @@ -139,11 +139,9 @@ async def async_migrate_entry(hass, entry): config_entries.async_update_entry(entry) return True - msg = """{} for the PlayStation 4 Integration. + msg = f"""{reason[version]} for the PlayStation 4 Integration. Please remove the PS4 Integration and re-configure - [here](/config/integrations).""".format( - reason[version] - ) + [here](/config/integrations).""" hass.components.persistent_notification.async_create( title="PlayStation 4 Integration Configuration Requires Update", diff --git a/homeassistant/components/ps4/manifest.json b/homeassistant/components/ps4/manifest.json index 80c12cc746c..cd27a587d7f 100644 --- a/homeassistant/components/ps4/manifest.json +++ b/homeassistant/components/ps4/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/ps4", "requirements": ["pyps4-2ndscreen==1.0.7"], - "dependencies": [], "codeowners": ["@ktnrg45"] } diff --git a/homeassistant/components/ps4/media_player.py b/homeassistant/components/ps4/media_player.py index 3aa65734d34..3acaf75d699 100644 --- a/homeassistant/components/ps4/media_player.py +++ b/homeassistant/components/ps4/media_player.py @@ -352,7 +352,7 @@ class PS4Device(MediaPlayerDevice): else: _sw_version = status["system-version"] _sw_version = _sw_version[1:4] - sw_version = "{}.{}".format(_sw_version[0], _sw_version[1:]) + sw_version = f"{_sw_version[0]}.{_sw_version[1:]}" self._info = { "name": status["host-name"], "model": "PlayStation 4", diff --git a/homeassistant/components/ps4/services.yaml b/homeassistant/components/ps4/services.yaml index b7d1e8df96f..e1af6543a65 100644 --- a/homeassistant/components/ps4/services.yaml +++ b/homeassistant/components/ps4/services.yaml @@ -3,7 +3,7 @@ send_command: fields: entity_id: description: Name(s) of entities to send command. - example: 'media_player.playstation_4' + example: "media_player.playstation_4" command: description: Button to press. - example: 'ps' + example: "ps" diff --git a/homeassistant/components/ps4/strings.json b/homeassistant/components/ps4/strings.json index 77443b1ee9a..c3a864565cf 100644 --- a/homeassistant/components/ps4/strings.json +++ b/homeassistant/components/ps4/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "PlayStation 4", "step": { "creds": { "title": "PlayStation 4", diff --git a/homeassistant/components/ps4/translations/bg.json b/homeassistant/components/ps4/translations/bg.json new file mode 100644 index 00000000000..7d453374b9d --- /dev/null +++ b/homeassistant/components/ps4/translations/bg.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0437\u0432\u043b\u0438\u0447\u0430\u043d\u0435 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438.", + "devices_configured": "\u0412\u0441\u0438\u0447\u043a\u0438 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0430 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0438.", + "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 PlayStation 4 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", + "port_987_bind_error": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0440\u0435\u0437\u0435\u0440\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442 987. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435] (https://www.home-assistant.io/components/ps4/) \u0437\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.", + "port_997_bind_error": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0440\u0435\u0437\u0435\u0440\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442 997. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430](https://www.home-assistant.io/components/ps4/) \u0437\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f." + }, + "error": { + "credential_timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0443\u0441\u043b\u0443\u0433\u0430\u0442\u0430 \u0437\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0438\u0437\u0442\u0435\u0447\u0435. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \"\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435\" \u0437\u0430 \u0434\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0442\u0435.", + "login_failed": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 PlayStation 4. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u0430\u043b\u0438 \u0432\u044a\u0432\u0435\u0434\u0435\u043d\u0438\u044f PIN \u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d.", + "no_ipaddress": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 PlayStation 4, \u043a\u043e\u0439\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435.", + "not_ready": "PlayStation 4 \u043a\u043e\u043d\u0437\u043e\u043b\u0430\u0442\u0430 \u043d\u0435 \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043b\u0438 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0430 \u043a\u044a\u043c \u043c\u0440\u0435\u0436\u0430\u0442\u0430." + }, + "step": { + "creds": { + "description": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438 \u0441\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \"\u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435\" \u0438 \u0441\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u0432 PS4 2nd Screen App, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \"Refresh devices\" \u0438 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \"Home-Assistant\" \u0437\u0430 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP \u0430\u0434\u0440\u0435\u0441", + "name": "\u0418\u043c\u0435", + "region": "\u0420\u0435\u0433\u0438\u043e\u043d" + }, + "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u0432\u0430\u0448\u0430\u0442\u0430 PlayStation 4 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u0417\u0430 \u201ePIN\u201c \u043e\u0442\u0438\u0434\u0435\u0442\u0435 \u0432 \u201eSettings\u201c \u043d\u0430 \u0412\u0430\u0448\u0430\u0442\u0430 PlayStation 4 \u043a\u043e\u043d\u0437\u043e\u043b\u0430. \u0421\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u043a\u044a\u043c \u201eMobile App Connection Settings\u201c \u0438 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u201eAdd Device\u201c. \u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f PIN \u043a\u043e\u0434. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430](https://www.home-assistant.io/components/ps4/) \u0437\u0430 \u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP \u0430\u0434\u0440\u0435\u0441 (\u041e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043f\u0440\u0430\u0437\u043d\u043e, \u0430\u043a\u043e \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0442\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435).", + "mode": "\u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435" + }, + "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0440\u0435\u0436\u0438\u043c \u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435. \u041f\u043e\u043b\u0435\u0442\u043e IP \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043e\u0441\u0442\u0430\u0432\u0438 \u043f\u0440\u0430\u0437\u043d\u043e, \u0430\u043a\u043e \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435, \u0442\u044a\u0439 \u043a\u0430\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u043e\u0442\u043a\u0440\u0438\u0442\u0438.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/ca.json b/homeassistant/components/ps4/translations/ca.json new file mode 100644 index 00000000000..09b41d00587 --- /dev/null +++ b/homeassistant/components/ps4/translations/ca.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Error en l'obtenci\u00f3 de les credencials.", + "devices_configured": "Tots els dispositius trobats ja estan configurats.", + "no_devices_found": "No s'han trobat dispositius PlayStation 4 a la xarxa.", + "port_987_bind_error": "No s'ha pogut vincular amb el port 987. Consulta la [documentaci\u00f3](https://www.home-assistant.io/components/ps4/) per a m\u00e9s informaci\u00f3.", + "port_997_bind_error": "No s'ha pogut vincular amb el port 997. Consulta la [documentaci\u00f3](https://www.home-assistant.io/components/ps4/) per a m\u00e9s informaci\u00f3." + }, + "error": { + "credential_timeout": "El servei de credencials ha expirat. Prem Envia per reiniciar-lo.", + "login_failed": "No s'ha pogut sincronitzar amb la PlayStation 4. Verifica el codi PIN.", + "no_ipaddress": "Introdueix l'adre\u00e7a IP de la PlayStation 4 que vulguis configurar.", + "not_ready": "La PlayStation 4 no est\u00e0 engegada o no s'ha connectada a la xarxa." + }, + "step": { + "creds": { + "description": "Credencials necess\u00e0ries. Prem 'Envia' i, a continuaci\u00f3, a la segona pantalla de l'aplicaci\u00f3 de la PS4, actualitza els dispositius i selecciona 'Home-Assistant' per continuar.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Adre\u00e7a IP", + "name": "Nom", + "region": "Regi\u00f3" + }, + "description": "Introdueix la informaci\u00f3 de la teva PlayStation 4. Pel 'PIN', ves a 'Configuraci\u00f3' a la consola de la PlayStation 4. Despr\u00e9s navega fins a 'Configuraci\u00f3 de la connexi\u00f3 de l'aplicaci\u00f3 m\u00f2bil' i selecciona 'Afegir dispositiu'. Introdueix el PIN que es mostra. Consulta la [documentaci\u00f3](https://www.home-assistant.io/components/ps4/) per a m\u00e9s informaci\u00f3.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "Adre\u00e7a IP (deixa-ho en blanc si fas servir la detecci\u00f3 autom\u00e0tica).", + "mode": "Mode de configuraci\u00f3" + }, + "description": "Selecciona el mode de configuraci\u00f3. El camp de l'adre\u00e7a IP es pot deixar en blanc si selecciones descobriment autom\u00e0tic (els dispositius es descobriran autom\u00e0ticament).", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/cs.json b/homeassistant/components/ps4/translations/cs.json new file mode 100644 index 00000000000..d61911f012d --- /dev/null +++ b/homeassistant/components/ps4/translations/cs.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "link": { + "data": { + "region": "Region" + }, + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/da.json b/homeassistant/components/ps4/translations/da.json new file mode 100644 index 00000000000..353edb079ae --- /dev/null +++ b/homeassistant/components/ps4/translations/da.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Fejl ved hentning af legitimationsoplysninger.", + "devices_configured": "Alle de fundne enheder er allerede konfigureret.", + "no_devices_found": "Der blev ikke fundet nogen PlayStation 4-enheder p\u00e5 netv\u00e6rket.", + "port_987_bind_error": "Kunne ikke binde til port 987. Se [dokumentationen](https://www.home-assistant.io/components/ps4/) for yderligere oplysninger.", + "port_997_bind_error": "Kunne ikke binde til port 997. Se [dokumentationen](https://www.home-assistant.io/components/ps4/) for yderligere oplysninger." + }, + "error": { + "credential_timeout": "Tjenesten for legitimationsoplysninger fik timeout. Tryk p\u00e5 send for at genstarte.", + "login_failed": "Kunne ikke parre med PlayStation 4. Kontroller PIN er korrekt.", + "no_ipaddress": "Indtast IP-adressen p\u00e5 den PlayStation 4, du gerne vil konfigurere.", + "not_ready": "PlayStation 4 er ikke t\u00e6ndt eller tilsluttet til netv\u00e6rket." + }, + "step": { + "creds": { + "description": "Der kr\u00e6ves legitimationsoplysninger. Tryk p\u00e5 'Indsend' og derefter i PS4 2. sk\u00e6rm-app, opdater enheder, og v\u00e6lg 'Home Assistant'-enhed for at forts\u00e6tte.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP-adresse", + "name": "Navn", + "region": "Omr\u00e5de" + }, + "description": "Indtast dine PlayStation 4-oplysninger. For 'PIN' skal du navigere til 'Indstillinger' p\u00e5 din PlayStation 4-konsol. Naviger derefter til 'Mobile App Connection Settings' og v\u00e6lg 'Add Device'. Indtast den pinkode, der vises. Se [dokumentation](https://www.home-assistant.io/components/ps4/) for yderligere oplysninger.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP-adresse (lad det v\u00e6re tomt, hvis du bruger automatisk registrering).", + "mode": "Konfigurationstilstand" + }, + "description": "V\u00e6lg tilstand for konfiguration. IP-adressefeltet kan v\u00e6re tomt, hvis du v\u00e6lger automatisk registrering, da enheder automatisk bliver fundet.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/de.json b/homeassistant/components/ps4/translations/de.json new file mode 100644 index 00000000000..73fe6e8926f --- /dev/null +++ b/homeassistant/components/ps4/translations/de.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Fehler beim Abrufen der Anmeldeinformationen.", + "devices_configured": "Alle gefundenen Ger\u00e4te sind bereits konfiguriert.", + "no_devices_found": "Es wurden keine PlayStation 4 im Netzwerk gefunden.", + "port_987_bind_error": "Konnte sich nicht an Port 987 binden. Weitere Informationen findest du in der [Dokumentation] (https://www.home-assistant.io/components/ps4/).", + "port_997_bind_error": "Bind to Port 997 nicht m\u00f6glich. Weitere Informationen findest du in der [Dokumentation](https://www.home-assistant.io/components/ps4/)" + }, + "error": { + "credential_timeout": "Zeit\u00fcberschreitung beim Warten auf den Anmeldedienst. Klicken zum Neustarten auf Senden.", + "login_failed": "Fehler beim Koppeln mit PlayStation 4. \u00dcberpr\u00fcfe, ob die PIN korrekt ist.", + "no_ipaddress": "Gib die IP-Adresse der PlayStation 4 ein, die konfiguriert werden soll.", + "not_ready": "PlayStation 4 ist nicht eingeschaltet oder mit dem Netzwerk verbunden." + }, + "step": { + "creds": { + "description": "Anmeldeinformationen ben\u00f6tigt. Klicke auf \"Senden\" und dann in der PS4 Second Screen app, aktualisiere die Ger\u00e4te und w\u00e4hle das \"Home-Assistant\"-Ger\u00e4t aus, um fortzufahren.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP-Adresse", + "name": "Name", + "region": "Region" + }, + "description": "Gib deine PlayStation 4-Informationen ein. Navigiere f\u00fcr \"PIN\" auf der PlayStation 4-Konsole zu \"Einstellungen\". Navigiere dann zu \"Mobile App-Verbindungseinstellungen\" und w\u00e4hle \"Ger\u00e4t hinzuf\u00fcgen\" aus. Gib die angezeigte PIN ein.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP-Adresse (Leer lassen, wenn automatische Erkennung verwendet wird).", + "mode": "Konfigurationsmodus" + }, + "description": "W\u00e4hle den Modus f\u00fcr die Konfiguration aus. Das Feld IP-Adresse kann leer bleiben, wenn die automatische Erkennung ausgew\u00e4hlt wird, da Ger\u00e4te automatisch erkannt werden.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/en.json b/homeassistant/components/ps4/translations/en.json new file mode 100644 index 00000000000..a7c67304a76 --- /dev/null +++ b/homeassistant/components/ps4/translations/en.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Error fetching credentials.", + "devices_configured": "All devices found are already configured.", + "no_devices_found": "No PlayStation 4 devices found on the network.", + "port_987_bind_error": "Could not bind to port 987. Refer to the [documentation](https://www.home-assistant.io/components/ps4/) for additional info.", + "port_997_bind_error": "Could not bind to port 997. Refer to the [documentation](https://www.home-assistant.io/components/ps4/) for additional info." + }, + "error": { + "credential_timeout": "Credential service timed out. Press submit to restart.", + "login_failed": "Failed to pair to PlayStation 4. Verify PIN is correct.", + "no_ipaddress": "Enter the IP Address of the PlayStation 4 you would like to configure.", + "not_ready": "PlayStation 4 is not on or connected to network." + }, + "step": { + "creds": { + "description": "Credentials needed. Press 'Submit' and then in the PS4 2nd Screen App, refresh devices and select the 'Home-Assistant' device to continue.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP Address", + "name": "Name", + "region": "Region" + }, + "description": "Enter your PlayStation 4 information. For 'PIN', navigate to 'Settings' on your PlayStation 4 console. Then navigate to 'Mobile App Connection Settings' and select 'Add Device'. Enter the PIN that is displayed. Refer to the [documentation](https://www.home-assistant.io/components/ps4/) for additional info.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP Address (Leave empty if using Auto Discovery).", + "mode": "Config Mode" + }, + "description": "Select mode for configuration. The IP Address field can be left blank if selecting Auto Discovery, as devices will be automatically discovered.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/es-419.json b/homeassistant/components/ps4/translations/es-419.json new file mode 100644 index 00000000000..eabbc340cc8 --- /dev/null +++ b/homeassistant/components/ps4/translations/es-419.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "credential_error": "Error al obtener las credenciales.", + "devices_configured": "Todos los dispositivos encontrados ya est\u00e1n configurados.", + "no_devices_found": "No se encontraron dispositivos PlayStation 4 en la red.", + "port_987_bind_error": "No se pudo enlazar al puerto 987.", + "port_997_bind_error": "No se pudo enlazar al puerto 997." + }, + "error": { + "login_failed": "No se ha podido emparejar con PlayStation 4. Verifique que el PIN sea correcto.", + "not_ready": "PlayStation 4 no est\u00e1 encendida o conectada a la red." + }, + "step": { + "creds": { + "description": "Credenciales necesarias. Presione 'Enviar' y luego en la aplicaci\u00f3n de la segunda pantalla de PS4, actualice los dispositivos y seleccione el dispositivo 'Home-Assistant' para continuar.", + "title": "Playstation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Direcci\u00f3n IP", + "name": "Nombre", + "region": "Regi\u00f3n" + }, + "description": "Ingresa tu informaci\u00f3n de PlayStation 4. Para 'PIN', navegue hasta 'Configuraci\u00f3n' en su consola PlayStation 4. Luego navegue a 'Configuraci\u00f3n de conexi\u00f3n de la aplicaci\u00f3n m\u00f3vil' y seleccione 'Agregar dispositivo'. Ingrese el PIN que se muestra.", + "title": "Playstation 4" + }, + "mode": { + "data": { + "mode": "Modo de configuraci\u00f3n" + }, + "title": "Playstation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/es.json b/homeassistant/components/ps4/translations/es.json new file mode 100644 index 00000000000..d9d410b11d8 --- /dev/null +++ b/homeassistant/components/ps4/translations/es.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Error al obtener las credenciales.", + "devices_configured": "Todos los dispositivos encontrados ya est\u00e1n configurados.", + "no_devices_found": "No se encuentran dispositivos PlayStation 4 en la red.", + "port_987_bind_error": "No se ha podido unir al puerto 987. Consulta la [documentaci\u00f3n](https://www.home-assistant.io/components/ps4/) para m\u00e1s informaci\u00f3n.", + "port_997_bind_error": "No se ha podido unir al puerto 997. Consulta la [documentaci\u00f3n](https://www.home-assistant.io/components/ps4/) para m\u00e1s informaci\u00f3n." + }, + "error": { + "credential_timeout": "Se agot\u00f3 el tiempo para el servicio de credenciales. Pulsa enviar para reiniciar.", + "login_failed": "No se ha podido emparejar con PlayStation 4. Verifique que el PIN sea correcto.", + "no_ipaddress": "Introduce la direcci\u00f3n IP de la PlayStation 4 que quieres configurar.", + "not_ready": "PlayStation 4 no est\u00e1 encendido o conectado a la red." + }, + "step": { + "creds": { + "description": "Credenciales necesarias. Pulsa 'Enviar' y, a continuaci\u00f3n, en la app de segunda pantalla de PS4, actualiza la lista de dispositivos y selecciona el dispositivo 'Home-Assistant' para continuar.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Direcci\u00f3n IP", + "name": "Nombre", + "region": "Regi\u00f3n" + }, + "description": "Introduce la informaci\u00f3n de tu PlayStation 4. Para el 'PIN', ve a los 'Ajustes' en tu PlayStation 4. Despu\u00e9s dir\u00edgete hasta 'Ajustes de conexi\u00f3n de la aplicaci\u00f3n para m\u00f3viles' y selecciona 'A\u00f1adir dispositivo'. Introduce el PIN mostrado. Consulta la [documentaci\u00f3n](https://www.home-assistant.io/components/ps4/) para m\u00e1s informaci\u00f3n.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "Direcci\u00f3n IP (d\u00e9jalo en blanco si usas la detecci\u00f3n autom\u00e1tica).", + "mode": "Modo configuraci\u00f3n" + }, + "description": "Selecciona el modo de configuraci\u00f3n. El campo de direcci\u00f3n IP puede dejarse en blanco si se selecciona la detecci\u00f3n autom\u00e1tica, ya que los dispositivos se detectar\u00e1n autom\u00e1ticamente.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/fr.json b/homeassistant/components/ps4/translations/fr.json new file mode 100644 index 00000000000..ca152e727c8 --- /dev/null +++ b/homeassistant/components/ps4/translations/fr.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Erreur lors de l'extraction des informations d'identification.", + "devices_configured": "Tous les p\u00e9riph\u00e9riques trouv\u00e9s sont d\u00e9j\u00e0 configur\u00e9s.", + "no_devices_found": "Aucun appareil PlayStation 4 trouv\u00e9 sur le r\u00e9seau.", + "port_987_bind_error": "Impossible de se connecter au port 997. Reportez-vous \u00e0 la [documentation] (https://www.home-assistant.io/components/ps4/) pour plus d'informations.", + "port_997_bind_error": "Impossible de se connecter au port 997. Reportez-vous \u00e0 la [documentation] (https://www.home-assistant.io/components/ps4/) pour plus d'informations." + }, + "error": { + "credential_timeout": "Le service d'informations d'identification a expir\u00e9. Appuyez sur soumettre pour red\u00e9marrer.", + "login_failed": "\u00c9chec de l'association \u00e0 la PlayStation 4. V\u00e9rifiez que le code PIN est correct.", + "no_ipaddress": "Entrez l'adresse IP de la PlayStation 4 que vous souhaitez configurer.", + "not_ready": "PlayStation 4 n'est pas allum\u00e9e ou connect\u00e9e au r\u00e9seau." + }, + "step": { + "creds": { + "description": "Informations d\u2019identification n\u00e9cessaires. Appuyez sur \u00ab\u00a0Envoyer\u00a0\u00bb puis dans la PS4 2\u00e8me \u00e9cran App, actualisez les p\u00e9riph\u00e9riques et s\u00e9lectionnez le dispositif \u00ab\u00a0Home Assistant\u00a0\u00bb pour continuer.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Adresse IP", + "name": "Nom", + "region": "R\u00e9gion" + }, + "description": "Entrez vos informations PlayStation 4. Pour \"Code PIN\", acc\u00e9dez \u00e0 \"Param\u00e8tres\" sur votre console PlayStation 4. Ensuite, acc\u00e9dez \u00e0 \"Param\u00e8tres de connexion de l'application mobile\" et s\u00e9lectionnez \"Ajouter un p\u00e9riph\u00e9rique\". Entrez le code PIN qui est affich\u00e9. Consultez la documentation pour plus d'informations.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "Adresse IP (laissez vide si vous utilisez la d\u00e9couverte automatique).", + "mode": "Mode de configuration" + }, + "description": "S\u00e9lectionnez le mode de configuration. Le champ Adresse IP peut rester vide si vous s\u00e9lectionnez D\u00e9couverte automatique, car les p\u00e9riph\u00e9riques seront automatiquement d\u00e9couverts.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/he.json b/homeassistant/components/ps4/translations/he.json new file mode 100644 index 00000000000..7513b5be12d --- /dev/null +++ b/homeassistant/components/ps4/translations/he.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "devices_configured": "\u05db\u05dc \u05d4\u05d4\u05ea\u05e7\u05e0\u05d9\u05dd \u05e9\u05e0\u05de\u05e6\u05d0\u05d5 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8\u05d9\u05dd.", + "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05db\u05e9\u05d9\u05e8\u05d9 \u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4 \u05d1\u05e8\u05e9\u05ea." + }, + "error": { + "not_ready": "PlayStation 4 \u05d0\u05d9\u05e0\u05d5 \u05e4\u05d5\u05e2\u05dc \u05d0\u05d5 \u05de\u05d7\u05d5\u05d1\u05e8 \u05dc\u05e8\u05e9\u05ea." + }, + "step": { + "creds": { + "title": "\u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4" + }, + "link": { + "data": { + "ip_address": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d4 - IP", + "name": "\u05e9\u05dd", + "region": "\u05d0\u05d9\u05d6\u05d5\u05e8" + }, + "title": "\u05e4\u05dc\u05d9\u05d9\u05e1\u05d8\u05d9\u05d9\u05e9\u05df 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/.translations/hu.json b/homeassistant/components/ps4/translations/hu.json similarity index 100% rename from homeassistant/components/ps4/.translations/hu.json rename to homeassistant/components/ps4/translations/hu.json diff --git a/homeassistant/components/ps4/translations/it.json b/homeassistant/components/ps4/translations/it.json new file mode 100644 index 00000000000..dc73362280e --- /dev/null +++ b/homeassistant/components/ps4/translations/it.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Errore nel recupero delle credenziali.", + "devices_configured": "Tutti i dispositivi trovati sono gi\u00e0 configurati.", + "no_devices_found": "Nessun dispositivo PlayStation 4 trovato in rete.", + "port_987_bind_error": "Impossibile collegarsi alla porta 987. Per ulteriori informazioni, consultare la [documentazione] (https://www.home-assistant.io/components/ps4/) per ulteriori informazioni.", + "port_997_bind_error": "Impossibile collegarsi alla porta 997. Consultare la [documentazione] (https://www.home-assistant.io/components/ps4/) per ulteriori informazioni." + }, + "error": { + "credential_timeout": "Servizio credenziali scaduto. Premi Invia per riavviare.", + "login_failed": "Impossibile eseguire l'associazione a PlayStation 4. Verificare che il PIN sia corretto.", + "no_ipaddress": "Inserisci l'indirizzo IP della PlayStation 4 che desideri configurare.", + "not_ready": "La PlayStation 4 non \u00e8 accesa o non \u00e8 collegata alla rete." + }, + "step": { + "creds": { + "description": "Credenziali necessarie. Premi 'Invia' e poi, nella seconda schermata della App PS4, aggiorna i dispositivi e seleziona il dispositivo 'Home-Assistant' per continuare.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Indirizzo IP", + "name": "Nome", + "region": "Area geografica" + }, + "description": "Inserisci le tue informazioni su PlayStation 4. Per \"PIN\", vai a \"Impostazioni\" sulla console PlayStation 4. Quindi vai a 'Impostazioni di connessione app mobile' e seleziona 'Aggiungi dispositivo'. Immettere il PIN visualizzato. Fare riferimento alla [documentazione](https://www.home-assistant.io/components/ps4/) per ulteriori informazioni.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "Indirizzo IP (lasciare vuoto se si utilizza la funzione Auto Discovery).", + "mode": "Modalit\u00e0 di configurazione" + }, + "description": "Seleziona la modalit\u00e0 per la configurazione. L'indirizzo IP pu\u00f2 essere lasciato vuoto se si seleziona Auto Discovery, poich\u00e9 i dispositivi verranno rilevati automaticamente.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/ko.json b/homeassistant/components/ps4/translations/ko.json new file mode 100644 index 00000000000..7285ffb97bf --- /dev/null +++ b/homeassistant/components/ps4/translations/ko.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "\uc790\uaca9 \uc99d\uba85\uc744 \uac00\uc838\uc624\ub294 \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "devices_configured": "\ubc1c\uacac\ub41c \ubaa8\ub4e0 \uae30\uae30\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "no_devices_found": "PlayStation 4 \uae30\uae30\ub97c \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "port_987_bind_error": "\ud3ec\ud2b8 987 \uc5d0 \ubc14\uc778\ub529 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucd94\uac00 \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/components/ps4/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.", + "port_997_bind_error": "\ud3ec\ud2b8 997 \uc5d0 \ubc14\uc778\ub529 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucd94\uac00 \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/components/ps4/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "error": { + "credential_timeout": "\uc790\uaca9 \uc99d\uba85 \uc11c\ube44\uc2a4 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. Submit \uc744 \ub20c\ub7ec \ub2e4\uc2dc \uc2dc\uc791\ud574\uc8fc\uc138\uc694.", + "login_failed": "PlayStation 4 \uc640 \ud398\uc5b4\ub9c1\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. PIN \uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "no_ipaddress": "\uad6c\uc131\ud558\uace0\uc790 \ud558\ub294 PlayStation 4 \uc758 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "not_ready": "PlayStation 4 \uac00 \ucf1c\uc838 \uc788\uc9c0 \uc54a\uac70\ub098 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." + }, + "step": { + "creds": { + "description": "\uc790\uaca9 \uc99d\uba85\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. 'Submit' \uc744 \ub204\ub978 \ub2e4\uc74c PS4 \uc138\ucee8\ub4dc \uc2a4\ud06c\ub9b0 \uc571\uc5d0\uc11c \uae30\uae30\ub97c \uc0c8\ub85c \uace0\uce68\ud558\uace0 'Home-Assistant' \uae30\uae30\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP \uc8fc\uc18c", + "name": "\uc774\ub984", + "region": "\uc9c0\uc5ed" + }, + "description": "PlayStation 4 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. 'PIN' \uc744 \ud655\uc778\ud558\ub824\uba74, PlayStation 4 \ucf58\uc194\uc5d0\uc11c '\uc124\uc815' \uc73c\ub85c \uc774\ub3d9\ud55c \ub4a4 '\ubaa8\ubc14\uc77c \uc571 \uc811\uc18d \uc124\uc815' \uc73c\ub85c \uc774\ub3d9\ud558\uc5ec '\uae30\uae30 \ub4f1\ub85d\ud558\uae30' \ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \ud654\uba74\uc5d0 \ud45c\uc2dc\ub41c 8\uc790\ub9ac \uc22b\uc790\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. \ucd94\uac00 \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/components/ps4/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP \uc8fc\uc18c (\uc790\ub3d9 \uac80\uc0c9\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ube44\uc6cc\ub450\uc138\uc694)", + "mode": "\uad6c\uc131 \ubaa8\ub4dc" + }, + "description": "\uad6c\uc131 \ubaa8\ub4dc\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \uc790\ub3d9 \uac80\uc0c9\uc744 \uc120\ud0dd\ud558\uba74 \uae30\uae30\uac00 \uc790\ub3d9\uc73c\ub85c \uac80\uc0c9\ub418\ubbc0\ub85c IP \uc8fc\uc18c \ud544\ub4dc\ub294 \ube44\uc6cc\ub450\uc154\ub3c4 \ub429\ub2c8\ub2e4.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/lb.json b/homeassistant/components/ps4/translations/lb.json new file mode 100644 index 00000000000..4295422780e --- /dev/null +++ b/homeassistant/components/ps4/translations/lb.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Feeler beim ausliesen vun den Umeldungs Informatiounen.", + "devices_configured": "All Apparater sinn schonn konfigur\u00e9iert", + "no_devices_found": "Keng Playstation 4 am Netzwierk fonnt.", + "port_987_bind_error": "Konnt sech net mam Port 987 verbannen. Liest [Dokumentatioun](https://www.home-assistant.io/components/ps4/) fir w\u00e9ider Informatiounen.", + "port_997_bind_error": "Konnt sech net mam Port 997 verbannen. Liest [Dokumentatioun](https://www.home-assistant.io/components/ps4/) fir w\u00e9ider Informatiounen." + }, + "error": { + "credential_timeout": "Z\u00e4it Iwwerschreidung beim Service vun den Umeldungsinformatiounen. Dr\u00e9ck op ofsch\u00e9cke fir nach emol ze starten.", + "login_failed": "Feeler beim verbanne mat der Playstation 4. Iwwerpr\u00e9ift op de PIN korrekt ass.", + "no_ipaddress": "Gitt d'IP Adresse vun der Playstation 4 an:", + "not_ready": "PlayStation 4 ass net un oder mam Netzwierk verbonnen." + }, + "step": { + "creds": { + "description": "Umeldungsinformatioun sinn n\u00e9ideg. Dr\u00e9ckt op 'Ofsch\u00e9cken' , dann an der PS4 App, 2ten Ecran, erneiert Apparater an wielt den Home-Assistant Apparat aus fir weider ze fueren.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP Adresse", + "name": "Numm", + "region": "Regioun" + }, + "description": "Gitt \u00e4r Playstation 4 Informatiounen an. Fir 'PIN', gitt an d'Astellunge vun der Playstation 4 Konsole. Dann op 'Mobile App Verbindungs Astellungen' a wielt \"Apparat dob\u00e4isetzen' aus. Gitt de PIN an deen ugewise g\u00ebtt. Liest [Dokumentatioun](https://www.home-assistant.io/components/ps4/) fir w\u00e9ider Informatiounen.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP Address (Eidel loossen falls Auto Discovery benotzt g\u00ebtt)", + "mode": "Konfiguratioun's Modus" + }, + "description": "Konfiguratioun's Modus auswielen. D'Feld IP Adress kann eidel bl\u00e9iwen wann Auto Discovery benotzt g\u00ebtt, well d'Apparaten automatesch entdeckt ginn.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/nl.json b/homeassistant/components/ps4/translations/nl.json new file mode 100644 index 00000000000..9b010ce2887 --- /dev/null +++ b/homeassistant/components/ps4/translations/nl.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Fout bij ophalen van inloggegevens.", + "devices_configured": "Alle gevonden apparaten zijn al geconfigureerd.", + "no_devices_found": "Geen PlayStation 4 apparaten gevonden op het netwerk.", + "port_987_bind_error": "Kon niet binden aan poort 987. Raadpleeg de [documentatie] (https://www.home-assistant.io/components/ps4/) voor meer informatie.", + "port_997_bind_error": "Kon niet binden aan poort 997. Raadpleeg de [documentatie] (https://www.home-assistant.io/components/ps4/) voor aanvullende informatie." + }, + "error": { + "credential_timeout": "Time-out van inlog service. Druk op Submit om opnieuw te starten.", + "login_failed": "Kan niet koppelen met PlayStation 4. Controleer of de pincode juist is.", + "no_ipaddress": "Voer het IP-adres in van de PlayStation 4 die je wilt configureren.", + "not_ready": "PlayStation 4 staat niet aan of is niet verbonden met een netwerk." + }, + "step": { + "creds": { + "description": "Aanmeldingsgegevens zijn nodig. Druk op 'Verzenden' en vervolgens in de PS4-app voor het 2e scherm, vernieuw apparaten en selecteer Home Assistant om door te gaan.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP-adres", + "name": "Naam", + "region": "Regio" + }, + "description": "Voer je PlayStation 4-informatie in. Ga voor 'PIN' naar 'Instellingen' op je PlayStation 4-console. Navigeer vervolgens naar 'Verbindingsinstellingen mobiele app' en selecteer 'Apparaat toevoegen'. Voer de pincode in die wordt weergegeven. Raadpleeg de [documentatie] (https://www.home-assistant.io/components/ps4/) voor meer informatie.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP-adres (leeg laten als u Auto Discovery gebruikt).", + "mode": "Configuratiemodus" + }, + "description": "Selecteer modus voor configuratie. Het veld IP-adres kan leeg blijven als Auto Discovery wordt geselecteerd, omdat apparaten automatisch worden gedetecteerd.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/nn.json b/homeassistant/components/ps4/translations/nn.json new file mode 100644 index 00000000000..a9b44db3731 --- /dev/null +++ b/homeassistant/components/ps4/translations/nn.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "port_987_bind_error": "Kunne ikkje binda til port 987. Sj\u00e5 [dokumentasjonen](https://www.home-assistant.io/components/ps4/) for meir informasjon.", + "port_997_bind_error": "Kunne ikkje binde til port 997. Sj\u00e5 [dokumentasjonen] (https://www.home-assistant.io/components/ps4/) for ytterlegare informasjon." + }, + "step": { + "creds": { + "title": "Playstation 4" + }, + "link": { + "data": { + "code": "PIN", + "name": "Namn" + }, + "title": "Playstation 4" + }, + "mode": { + "title": "Playstation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/no.json b/homeassistant/components/ps4/translations/no.json new file mode 100644 index 00000000000..cd9b80175ad --- /dev/null +++ b/homeassistant/components/ps4/translations/no.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Feil ved henting av legitimasjon.", + "devices_configured": "Alle enheter som ble funnet er allerede konfigurert.", + "no_devices_found": "Ingen PlayStation 4 enheter funnet p\u00e5 nettverket.", + "port_987_bind_error": "Kunne ikke binde til port 987. Se [dokumentasjonen](https://www.home-assistant.io/components/ps4/) for mer info.", + "port_997_bind_error": "Kunne ikke binde til port 997. Se [dokumentasjonen] (https://www.home-assistant.io/components/ps4/) for videre informasjon." + }, + "error": { + "credential_timeout": "Legitimasjonstjenesten ble tidsavbrutt. Trykk send for \u00e5 starte p\u00e5 nytt.", + "login_failed": "Klarte ikke \u00e5 koble til PlayStation 4. Bekreft at PIN koden er riktig.", + "no_ipaddress": "Angi IP adressen til din PlayStation 4 som du \u00f8nsker konfigurere.", + "not_ready": "PlayStation 4 er ikke p\u00e5sl\u00e5tt eller koblet til nettverk." + }, + "step": { + "creds": { + "description": "Legitimasjon n\u00f8dvendig. Trykk 'Send' og deretter i PS4-ens andre skjerm app, kan du oppdatere enheter, og velg 'Home-Assistant' enheten for \u00e5 fortsette.", + "title": "" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP adresse", + "name": "Navn", + "region": "Region" + }, + "description": "Skriv inn PlayStation 4-informasjonen. For 'PIN', naviger til 'Innstillinger' p\u00e5 PlayStation 4-konsollen. Naviger deretter til 'Mobile App Connection Settings' og velg 'Add Device'. Tast inn PIN-koden som vises. Se [dokumentasjonen] (https://www.home-assistant.io/components/ps4/) for mer informasjon.", + "title": "" + }, + "mode": { + "data": { + "ip_address": "IP- adresse (Ikke fyll ut hvis du bruker Auto Discovery).", + "mode": "Konfigureringsmodus" + }, + "description": "Velg modus for konfigurasjon. Feltet IP-adresse kan st\u00e5 tomt dersom du velger Auto Discovery, da enheter vil bli oppdaget automatisk.", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/pl.json b/homeassistant/components/ps4/translations/pl.json new file mode 100644 index 00000000000..f13c5b00bb5 --- /dev/null +++ b/homeassistant/components/ps4/translations/pl.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "B\u0142\u0105d podczas pobierania danych logowania.", + "devices_configured": "Wszystkie znalezione urz\u0105dzenia s\u0105 ju\u017c skonfigurowane.", + "no_devices_found": "W sieci nie znaleziono urz\u0105dze\u0144 PlayStation 4.", + "port_987_bind_error": "Nie mo\u017cna powi\u0105za\u0107 z portem 987.", + "port_997_bind_error": "Nie mo\u017cna powi\u0105za\u0107 z portem 997." + }, + "error": { + "credential_timeout": "Przekroczono limit czasu us\u0142ugi po\u015bwiadcze\u0144. Naci\u015bnij przycisk \"Zatwierd\u017a\", aby ponowi\u0107.", + "login_failed": "Nie uda\u0142o si\u0119 sparowa\u0107 z PlayStation 4. Sprawd\u017a, czy PIN jest poprawny.", + "no_ipaddress": "Wprowad\u017a adres IP PlayStation 4, kt\u00f3ry chcesz skonfigurowa\u0107.", + "not_ready": "PlayStation 4 nie jest w\u0142\u0105czona lub po\u0142\u0105czona z sieci\u0105." + }, + "step": { + "creds": { + "description": "Wymagane s\u0105 po\u015bwiadczenia. Naci\u015bnij przycisk \"Zatwierd\u017a\", a nast\u0119pnie w aplikacji PS4 Second Screen, od\u015bwie\u017c urz\u0105dzenia i wybierz urz\u0105dzenie 'Home-Assistant', aby kontynuowa\u0107.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Adres IP", + "name": "Nazwa", + "region": "Region" + }, + "description": "Wprowad\u017a informacje o PlayStation 4. Aby uzyska\u0107 'PIN', przejd\u017a do 'Ustawienia' na konsoli PlayStation 4. Nast\u0119pnie przejd\u017a do 'Ustawienia po\u0142\u0105czenia aplikacji mobilnej' i wybierz 'Dodaj urz\u0105dzenie'. Wprowad\u017a wy\u015bwietlony kod PIN.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "Adres IP (pozostaw puste, je\u015bli u\u017cywasz funkcji Auto Discovery).", + "mode": "Tryb konfiguracji" + }, + "description": "Wybierz tryb konfiguracji. Pole adresu IP mo\u017cna pozostawi\u0107 puste, je\u015bli wybierzesz opcj\u0119 Auto Discovery, poniewa\u017c urz\u0105dzenia zostan\u0105 automatycznie wykryte.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/pt-BR.json b/homeassistant/components/ps4/translations/pt-BR.json new file mode 100644 index 00000000000..593ecd19f9a --- /dev/null +++ b/homeassistant/components/ps4/translations/pt-BR.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Erro ao buscar credenciais.", + "devices_configured": "Todos os dispositivos encontrados j\u00e1 est\u00e3o configurados.", + "no_devices_found": "Nenhum dispositivo PlayStation 4 encontrado na rede.", + "port_987_bind_error": "N\u00e3o foi poss\u00edvel conectar na porta 987. Consulte a [documenta\u00e7\u00e3o] (https://www.home-assistant.io/components/ps4/) para informa\u00e7\u00f5es adicionais.", + "port_997_bind_error": "N\u00e3o foi poss\u00edvel conectar na porta 997. Consulte a [documenta\u00e7\u00e3o] (https://www.home-assistant.io/components/ps4/) para informa\u00e7\u00f5es adicionais." + }, + "error": { + "credential_timeout": "Servi\u00e7o de credencial expirou. Pressione Submit para reiniciar.", + "login_failed": "N\u00e3o foi poss\u00edvel parear com o PlayStation 4. Verifique se o PIN est\u00e1 correto.", + "no_ipaddress": "Digite o endere\u00e7o IP do PlayStation 4 que voc\u00ea gostaria de configurar.", + "not_ready": "O PlayStation 4 n\u00e3o est\u00e1 ligado ou conectado \u00e0 rede." + }, + "step": { + "creds": { + "description": "Credenciais necess\u00e1rias. Pressione 'Enviar' e, em seguida, no PS4, na Tela do segundo aplicativo, atualize os dispositivos e selecione o dispositivo 'Home-Assistant' para continuar.", + "title": "Playstation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Endere\u00e7o IP", + "name": "Nome", + "region": "Regi\u00e3o" + }, + "description": "Digite suas informa\u00e7\u00f5es do PlayStation 4. Para 'PIN', navegue at\u00e9 'Configura\u00e7\u00f5es' no seu console PlayStation 4. Em seguida, navegue at\u00e9 \"Configura\u00e7\u00f5es de conex\u00e3o de aplicativos m\u00f3veis\" e selecione \"Adicionar dispositivo\". Digite o PIN exibido. Consulte a [documenta\u00e7\u00e3o] (https://www.home-assistant.io/components/ps4/) para informa\u00e7\u00f5es adicionais.", + "title": "Playstation 4" + }, + "mode": { + "data": { + "ip_address": "Endere\u00e7o IP (Deixe em branco se estiver usando a Detec\u00e7\u00e3o autom\u00e1tica).", + "mode": "Modo de configura\u00e7\u00e3o" + }, + "description": "Selecione o modo para configura\u00e7\u00e3o. O campo Endere\u00e7o IP pode ser deixado em branco se selecionar Detec\u00e7\u00e3o Autom\u00e1tica, pois os dispositivos ser\u00e3o descobertos automaticamente.", + "title": "Playstation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/pt.json b/homeassistant/components/ps4/translations/pt.json new file mode 100644 index 00000000000..9250f5a3756 --- /dev/null +++ b/homeassistant/components/ps4/translations/pt.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "devices_configured": "Todos os dispositivos encontrados j\u00e1 est\u00e3o configurados.", + "no_devices_found": "N\u00e3o foram encontrados dispositivos PlayStation 4 na rede." + }, + "error": { + "login_failed": "Falha ao emparelhar com a PlayStation 4. Verifique se o PIN est\u00e1 correto.", + "not_ready": "A PlayStation 4 n\u00e3o est\u00e1 ligada ou ligada \u00e0 rede." + }, + "step": { + "creds": { + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "Endere\u00e7o de IP", + "name": "Nome", + "region": "Regi\u00e3o" + }, + "title": "PlayStation 4" + }, + "mode": { + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/ru.json b/homeassistant/components/ps4/translations/ru.json new file mode 100644 index 00000000000..f2a85e2c3e7 --- /dev/null +++ b/homeassistant/components/ps4/translations/ru.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.", + "devices_configured": "\u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b.", + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 PlayStation 4 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", + "port_987_bind_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0443 987. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ps4/).", + "port_997_bind_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0443 997. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ps4/)." + }, + "error": { + "credential_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", + "login_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 PlayStation 4. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e PIN-\u043a\u043e\u0434 \u0432\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.", + "no_ipaddress": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 IP-\u0430\u0434\u0440\u0435\u0441 PlayStation 4.", + "not_ready": "PlayStation 4 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u0441\u0435\u0442\u0438." + }, + "step": { + "creds": { + "description": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 'PS4 Second Screen' \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e 'Home-Assistant'.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN-\u043a\u043e\u0434", + "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "region": "\u0420\u0435\u0433\u0438\u043e\u043d" + }, + "description": "\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f PIN-\u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043f\u0443\u043d\u043a\u0442\u0443 **\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438** \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 PlayStation 4. \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 **\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f** \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 **\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e**. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ps4/) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441 (\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 \u0430\u0432\u0442\u043e\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f)", + "mode": "\u0420\u0435\u0436\u0438\u043c" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041f\u043e\u043b\u0435 'IP-\u0430\u0434\u0440\u0435\u0441' \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c, \u0435\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e 'Auto Discovery', \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/sl.json b/homeassistant/components/ps4/translations/sl.json new file mode 100644 index 00000000000..13dfc6c2147 --- /dev/null +++ b/homeassistant/components/ps4/translations/sl.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Napaka pri pridobivanju poverilnic.", + "devices_configured": "Vse najdene naprave so \u017ee konfigurirane.", + "no_devices_found": "V omre\u017eju ni najdenih naprav PS4.", + "port_987_bind_error": "Ne morem se povezati z vrati 987. Dodatne informacije najdete v [dokumentaciji] (https://www.home-assistant.io/components/ps4/).", + "port_997_bind_error": "Ne morem se povezati z vrati 997. Dodatne informacije najdete v [dokumentaciji] (https://www.home-assistant.io/components/ps4/)." + }, + "error": { + "credential_timeout": "Storitev poverilnic je potekla. Pritisnite Po\u0161lji za ponovni zagon.", + "login_failed": "Neuspelo seznanjanje s PlayStation 4. Preverite, ali je koda PIN pravilna.", + "no_ipaddress": "Vnesite IP naslov PlayStation-a 4, ki ga \u017eelite konfigurirati.", + "not_ready": "PlayStation 4 ni vklopljen ali povezan z omre\u017ejem." + }, + "step": { + "creds": { + "description": "Potrebne so poverilnice. Pritisnite 'Po\u0161lji' in nato v aplikaciji PS4 2nd Screen App, osve\u017eite naprave in izberite napravo 'Home-Assistant' za nadaljevanje.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP naslov", + "name": "Ime", + "region": "Regija" + }, + "description": "Vnesite va\u0161e PlayStation 4 podatke. Za 'PIN' pojdite na 'Nastavitve' na konzoli PlayStation 4. Nato se pomaknite do mo\u017enosti \u00bbNastavitve povezave z mobilno aplikacijo\u00ab in izberite \u00bbDodaj napravo\u00ab. Vnesite prikazano kodo PIN. Dodatne informacije najdete v [dokumentaciji] (https://www.home-assistant.io/components/ps4/).", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "Naslov IP (Pustite prazno, \u010de uporabljate samodejno odkrivanje).", + "mode": "Na\u010din konfiguracije" + }, + "description": "Izberite na\u010din za konfiguracijo. IP-Naslov, polje lahko pustite prazno, \u010de izberete samodejno odkrivanje, saj bodo naprave samodejno odkrite.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/sv.json b/homeassistant/components/ps4/translations/sv.json new file mode 100644 index 00000000000..3ed8a3765fc --- /dev/null +++ b/homeassistant/components/ps4/translations/sv.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "Fel n\u00e4r f\u00f6rs\u00f6ker h\u00e4mta autentiseringsuppgifter.", + "devices_configured": "Alla enheter som hittats \u00e4r redan konfigurerade.", + "no_devices_found": "Inga PlayStation 4 enheter hittades p\u00e5 n\u00e4tverket.", + "port_987_bind_error": "Kunde inte binda till port 987.", + "port_997_bind_error": "Kunde inte binda till port 997." + }, + "error": { + "credential_timeout": "Autentiseringstj\u00e4nsten orsakade timeout. Tryck p\u00e5 Skicka f\u00f6r att starta om.", + "login_failed": "Misslyckades med att para till PlayStation 4. Verifiera PIN-koden \u00e4r korrekt.", + "no_ipaddress": "Ange IP-adressen f\u00f6r PlayStation 4 du vill konfigurera.", + "not_ready": "PlayStation 4 \u00e4r inte p\u00e5slagen eller ansluten till n\u00e4tverket." + }, + "step": { + "creds": { + "description": "Autentiseringsuppgifter beh\u00f6vs. Tryck p\u00e5 'Skicka' och sedan uppdatera enheter i appen \"PS4 Second Screen\" p\u00e5 din mobiltelefon eller surfplatta och v\u00e4lj 'Home Assistent' enheten att forts\u00e4tta.", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN-kod", + "ip_address": "IP-adress", + "name": "Namn", + "region": "Region" + }, + "description": "Ange din PlayStation 4 information. F\u00f6r 'PIN', navigera till 'Inst\u00e4llningar' p\u00e5 din PlayStation 4 konsol. Navigera sedan till \"Inst\u00e4llningar f\u00f6r mobilappanslutning\" och v\u00e4lj \"L\u00e4gg till enhet\". Ange PIN-koden som visas.", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP-adress (l\u00e4mna tom om du anv\u00e4nder automatisk uppt\u00e4ckt).", + "mode": "Konfigureringsl\u00e4ge" + }, + "description": "V\u00e4lj l\u00e4ge f\u00f6r konfigurering. F\u00e4ltet IP-adress kan l\u00e4mnas tomt om du v\u00e4ljer Automatisk uppt\u00e4ckt, eftersom enheter d\u00e5 kommer att identifieras automatiskt.", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/th.json b/homeassistant/components/ps4/translations/th.json new file mode 100644 index 00000000000..2ffe2fb805a --- /dev/null +++ b/homeassistant/components/ps4/translations/th.json @@ -0,0 +1,21 @@ +{ + "config": { + "step": { + "creds": { + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48 IP", + "name": "\u0e0a\u0e37\u0e48\u0e2d", + "region": "\u0e20\u0e39\u0e21\u0e34\u0e20\u0e32\u0e04" + }, + "title": "PlayStation 4" + }, + "mode": { + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/zh-Hans.json b/homeassistant/components/ps4/translations/zh-Hans.json new file mode 100644 index 00000000000..821cb0ed056 --- /dev/null +++ b/homeassistant/components/ps4/translations/zh-Hans.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "credential_error": "\u83b7\u53d6\u51ed\u636e\u65f6\u51fa\u9519\u3002", + "devices_configured": "\u6240\u6709\u53d1\u73b0\u7684\u8bbe\u5907\u90fd\u5df2\u914d\u7f6e\u5b8c\u6210\u3002", + "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 PlayStation 4 \u8bbe\u5907\u3002", + "port_987_bind_error": "\u65e0\u6cd5\u7ed1\u5b9a\u7aef\u53e3 987\u3002", + "port_997_bind_error": "\u65e0\u6cd5\u7ed1\u5b9a\u7aef\u53e3 997\u3002" + }, + "error": { + "login_failed": "\u65e0\u6cd5\u4e0e PlayStation 4 \u914d\u5bf9\u3002\u8bf7\u786e\u8ba4 PIN \u662f\u5426\u6b63\u786e\u3002", + "not_ready": "PlayStation 4 \u672a\u5f00\u673a\u6216\u672a\u8fde\u63a5\u5230\u7f51\u7edc\u3002" + }, + "step": { + "creds": { + "description": "\u9700\u8981\u51ed\u636e\u3002\u8bf7\u70b9\u51fb\u201c\u63d0\u4ea4\u201d\u7136\u540e\u5728 PS4 \u7b2c\u4e8c\u5c4f\u5e55\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5237\u65b0\u8bbe\u5907\u5e76\u9009\u62e9\u201cHome-Assistant\u201d\u8bbe\u5907\u4ee5\u7ee7\u7eed\u3002", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP \u5730\u5740", + "name": "\u540d\u79f0", + "region": "\u5730\u533a" + }, + "description": "\u8f93\u5165\u60a8\u7684 PlayStation 4 \u4fe1\u606f\u3002\u5bf9\u4e8e \"PIN\", \u8bf7\u5bfc\u822a\u5230 PlayStation 4 \u63a7\u5236\u53f0\u4e0a\u7684 \"\u8bbe\u7f6e\"\u3002\u7136\u540e\u5bfc\u822a\u5230 \"\u79fb\u52a8\u5e94\u7528\u8fde\u63a5\u8bbe\u7f6e\", \u7136\u540e\u9009\u62e9 \"\u6dfb\u52a0\u8bbe\u5907\"\u3002\u8f93\u5165\u663e\u793a\u7684 PIN\u3002", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ps4/translations/zh-Hant.json b/homeassistant/components/ps4/translations/zh-Hant.json new file mode 100644 index 00000000000..80efe98c4b6 --- /dev/null +++ b/homeassistant/components/ps4/translations/zh-Hant.json @@ -0,0 +1,41 @@ +{ + "config": { + "abort": { + "credential_error": "\u53d6\u5f97\u6191\u8b49\u932f\u8aa4\u3002", + "devices_configured": "\u6240\u6709\u8a2d\u5099\u90fd\u5df2\u8a2d\u5b9a\u5b8c\u6210\u3002", + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 PlayStation 4 \u8a2d\u5099\u3002", + "port_987_bind_error": "\u7121\u6cd5\u7d81\u5b9a\u901a\u8a0a\u57e0 987\u3002\u8acb\u53c3\u8003 [documentation](https://www.home-assistant.io/components/ps4/) \u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002", + "port_997_bind_error": "\u7121\u6cd5\u7d81\u5b9a\u901a\u8a0a\u57e0 997\u3002\u8acb\u53c3\u8003 [documentation](https://www.home-assistant.io/components/ps4/) \u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002" + }, + "error": { + "credential_timeout": "\u6191\u8b49\u670d\u52d9\u903e\u6642\uff0c\u9ede\u9078\u300c\u50b3\u9001\u300d\u4ee5\u91cd\u555f\u3002", + "login_failed": "PlayStation 4 \u914d\u5c0d\u5931\u6557\uff0c\u8acb\u78ba\u8a8d PIN \u78bc\u3002", + "no_ipaddress": "\u8f38\u5165\u6240\u8981\u8a2d\u5b9a\u7684 PlayStation 4 \u4e4b IP \u4f4d\u5740\u3002", + "not_ready": "PlayStation 4 \u4e26\u672a\u958b\u555f\u6216\u672a\u9023\u7dda\u81f3\u7db2\u8def\u3002" + }, + "step": { + "creds": { + "description": "\u9700\u8981\u6191\u8b49\u3002\u6309\u4e0b\u300c\u50b3\u9001\u300d\u5f8c\u3001\u65bc PS4 \u7b2c\u4e8c\u756b\u9762 App\uff0c\u66f4\u65b0\u8a2d\u5099\u4e26\u9078\u64c7\u300cHome-Assistant\u300d\u4ee5\u7e7c\u7e8c\u3002", + "title": "PlayStation 4" + }, + "link": { + "data": { + "code": "PIN", + "ip_address": "IP \u4f4d\u5740", + "name": "\u540d\u7a31", + "region": "\u5340\u57df" + }, + "description": "\u8f38\u5165\u60a8\u7684 PlayStation 4 \u8cc7\u8a0a\uff0c\u300cPIN\u300d\u65bc PlayStation 4 \u4e3b\u6a5f\u7684\u300c\u8a2d\u5b9a\u300d\u5167\uff0c\u4e26\u65bc\u300c\u884c\u52d5\u7a0b\u5f0f\u9023\u7dda\u8a2d\u5b9a\uff08Mobile App Connection Settings\uff09\u300d\u4e2d\u9078\u64c7\u300c\u65b0\u589e\u8a2d\u5099\u300d\u3002\u8f38\u5165\u6240\u986f\u793a\u7684 PIN \u78bc\u3002\u8acb\u53c3\u8003 [documentation](https://www.home-assistant.io/components/ps4/) \u4ee5\u7372\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002", + "title": "PlayStation 4" + }, + "mode": { + "data": { + "ip_address": "IP \u4f4d\u5740\uff08\u5982\u679c\u4f7f\u7528\u81ea\u52d5\u63a2\u7d22\u65b9\u5f0f\uff0c\u8acb\u4fdd\u7559\u7a7a\u767d\uff09\u3002", + "mode": "\u8a2d\u5b9a\u6a21\u5f0f" + }, + "description": "\u9078\u64c7\u6a21\u5f0f\u4ee5\u9032\u884c\u8a2d\u5b9a\u3002\u5047\u5982\u9078\u64c7\u81ea\u52d5\u63a2\u7d22\u6a21\u5f0f\u7684\u8a71\uff0c\u7531\u65bc\u6703\u81ea\u52d5\u9032\u884c\u8a2d\u5099\u641c\u5c0b\uff0cIP \u4f4d\u5740\u53ef\u4fdd\u7559\u70ba\u7a7a\u767d\u3002", + "title": "PlayStation 4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ptvsd/manifest.json b/homeassistant/components/ptvsd/manifest.json index dd3e6100632..0c487c4bb24 100644 --- a/homeassistant/components/ptvsd/manifest.json +++ b/homeassistant/components/ptvsd/manifest.json @@ -3,6 +3,5 @@ "name": "PTVSD - Python Tools for Visual Studio Debug Server", "documentation": "https://www.home-assistant.io/integrations/ptvsd", "requirements": ["ptvsd==4.2.8"], - "dependencies": [], "codeowners": ["@swamp-ig"] } diff --git a/homeassistant/components/pulseaudio_loopback/manifest.json b/homeassistant/components/pulseaudio_loopback/manifest.json index 1c1a73ebb3f..8775f5f0947 100644 --- a/homeassistant/components/pulseaudio_loopback/manifest.json +++ b/homeassistant/components/pulseaudio_loopback/manifest.json @@ -2,7 +2,5 @@ "domain": "pulseaudio_loopback", "name": "PulseAudio Loopback", "documentation": "https://www.home-assistant.io/integrations/pulseaudio_loopback", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/push/camera.py b/homeassistant/components/push/camera.py index f78966253b7..31f2f88dac7 100644 --- a/homeassistant/components/push/camera.py +++ b/homeassistant/components/push/camera.py @@ -144,7 +144,7 @@ class PushCamera(Camera): self._state = STATE_IDLE self._expired_listener = None _LOGGER.debug("Reset state") - self.async_schedule_update_ha_state() + self.async_write_ha_state() if self._expired_listener: self._expired_listener() @@ -153,7 +153,7 @@ class PushCamera(Camera): self.hass, reset_state, dt_util.utcnow() + self._timeout ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_camera_image(self): """Return a still image response.""" diff --git a/homeassistant/components/push/manifest.json b/homeassistant/components/push/manifest.json index c0ad8263c66..c4a419bcfd3 100644 --- a/homeassistant/components/push/manifest.json +++ b/homeassistant/components/push/manifest.json @@ -2,7 +2,6 @@ "domain": "push", "name": "Push", "documentation": "https://www.home-assistant.io/integrations/push", - "requirements": [], "dependencies": ["webhook"], "codeowners": ["@dgomes"] } diff --git a/homeassistant/components/pushbullet/manifest.json b/homeassistant/components/pushbullet/manifest.json index bb19a77f175..1453f9ffe73 100644 --- a/homeassistant/components/pushbullet/manifest.json +++ b/homeassistant/components/pushbullet/manifest.json @@ -3,6 +3,5 @@ "name": "Pushbullet", "documentation": "https://www.home-assistant.io/integrations/pushbullet", "requirements": ["pushbullet.py==0.11.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/pushbullet/sensor.py b/homeassistant/components/pushbullet/sensor.py index 771ba55586c..ff18e86aad9 100644 --- a/homeassistant/components/pushbullet/sensor.py +++ b/homeassistant/components/pushbullet/sensor.py @@ -77,7 +77,7 @@ class PushBulletNotificationSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "{} {}".format("Pushbullet", self._element) + return f"Pushbullet {self._element}" @property def state(self): diff --git a/homeassistant/components/pushetta/__init__.py b/homeassistant/components/pushetta/__init__.py deleted file mode 100644 index f992fecddb7..00000000000 --- a/homeassistant/components/pushetta/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""The pushetta component.""" diff --git a/homeassistant/components/pushetta/manifest.json b/homeassistant/components/pushetta/manifest.json deleted file mode 100644 index 6bcad44958b..00000000000 --- a/homeassistant/components/pushetta/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "domain": "pushetta", - "name": "Pushetta", - "documentation": "https://www.home-assistant.io/integrations/pushetta", - "requirements": ["pushetta==1.0.15"], - "dependencies": [], - "codeowners": [] -} diff --git a/homeassistant/components/pushetta/notify.py b/homeassistant/components/pushetta/notify.py deleted file mode 100644 index c9b008524d6..00000000000 --- a/homeassistant/components/pushetta/notify.py +++ /dev/null @@ -1,68 +0,0 @@ -"""Pushetta platform for notify component.""" -import logging - -from pushetta import Pushetta, exceptions as pushetta_exceptions -import voluptuous as vol - -from homeassistant.components.notify import ( - ATTR_TITLE, - ATTR_TITLE_DEFAULT, - PLATFORM_SCHEMA, - BaseNotificationService, -) -from homeassistant.const import CONF_API_KEY -import homeassistant.helpers.config_validation as cv - -_LOGGER = logging.getLogger(__name__) - -CONF_CHANNEL_NAME = "channel_name" -CONF_SEND_TEST_MSG = "send_test_msg" - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_API_KEY): cv.string, - vol.Required(CONF_CHANNEL_NAME): cv.string, - vol.Optional(CONF_SEND_TEST_MSG, default=False): cv.boolean, - } -) - - -def get_service(hass, config, discovery_info=None): - """Get the Pushetta notification service.""" - api_key = config[CONF_API_KEY] - channel_name = config[CONF_CHANNEL_NAME] - send_test_msg = config[CONF_SEND_TEST_MSG] - - pushetta_service = PushettaNotificationService(api_key, channel_name, send_test_msg) - - if pushetta_service.is_valid: - return pushetta_service - - -class PushettaNotificationService(BaseNotificationService): - """Implement the notification service for Pushetta.""" - - def __init__(self, api_key, channel_name, send_test_msg): - """Initialize the service.""" - - self._api_key = api_key - self._channel_name = channel_name - self.is_valid = True - self.pushetta = Pushetta(api_key) - - if send_test_msg: - self.send_message("Home Assistant started") - - def send_message(self, message="", **kwargs): - """Send a message to a user.""" - - title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT) - - try: - self.pushetta.pushMessage(self._channel_name, f"{title} {message}") - except pushetta_exceptions.TokenValidationError: - _LOGGER.error("Please check your access token") - self.is_valid = False - except pushetta_exceptions.ChannelNotFoundError: - _LOGGER.error("Channel '%s' not found", self._channel_name) - self.is_valid = False diff --git a/homeassistant/components/pushover/manifest.json b/homeassistant/components/pushover/manifest.json index 9bdd1bb53f9..222e7a22fdf 100644 --- a/homeassistant/components/pushover/manifest.json +++ b/homeassistant/components/pushover/manifest.json @@ -3,6 +3,5 @@ "name": "Pushover", "documentation": "https://www.home-assistant.io/integrations/pushover", "requirements": ["pushover_complete==1.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/pushover/notify.py b/homeassistant/components/pushover/notify.py index 01d4d8fddde..952a399157c 100644 --- a/homeassistant/components/pushover/notify.py +++ b/homeassistant/components/pushover/notify.py @@ -58,17 +58,17 @@ class PushoverNotificationService(BaseNotificationService): # Extract params from data dict title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT) data = dict(kwargs.get(ATTR_DATA) or {}) - url = data.get(ATTR_URL, None) - url_title = data.get(ATTR_URL_TITLE, None) - priority = data.get(ATTR_PRIORITY, None) - retry = data.get(ATTR_RETRY, None) - expire = data.get(ATTR_EXPIRE, None) - callback_url = data.get(ATTR_CALLBACK_URL, None) - timestamp = data.get(ATTR_TIMESTAMP, None) - sound = data.get(ATTR_SOUND, None) + url = data.get(ATTR_URL) + url_title = data.get(ATTR_URL_TITLE) + priority = data.get(ATTR_PRIORITY) + retry = data.get(ATTR_RETRY) + expire = data.get(ATTR_EXPIRE) + callback_url = data.get(ATTR_CALLBACK_URL) + timestamp = data.get(ATTR_TIMESTAMP) + sound = data.get(ATTR_SOUND) html = 1 if data.get(ATTR_HTML, False) else 0 - image = data.get(ATTR_ATTACHMENT, None) + image = data.get(ATTR_ATTACHMENT) # Check for attachment if image is not None: # Only allow attachments from whitelisted paths, check valid path diff --git a/homeassistant/components/pushsafer/manifest.json b/homeassistant/components/pushsafer/manifest.json index 18592124c24..8932de99b5d 100644 --- a/homeassistant/components/pushsafer/manifest.json +++ b/homeassistant/components/pushsafer/manifest.json @@ -2,7 +2,5 @@ "domain": "pushsafer", "name": "Pushsafer", "documentation": "https://www.home-assistant.io/integrations/pushsafer", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/pushsafer/notify.py b/homeassistant/components/pushsafer/notify.py index 436191ab864..12735764b4b 100644 --- a/homeassistant/components/pushsafer/notify.py +++ b/homeassistant/components/pushsafer/notify.py @@ -15,6 +15,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) +from homeassistant.const import HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -118,7 +119,7 @@ class PushsaferNotificationService(BaseNotificationService): for target in targets: payload["d"] = target response = requests.post(_RESOURCE, data=payload, timeout=CONF_TIMEOUT) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.error("Pushsafer failed with: %s", response.text) else: _LOGGER.debug("Push send: %s", response.json()) diff --git a/homeassistant/components/pvoutput/manifest.json b/homeassistant/components/pvoutput/manifest.json index 0ca7af3485d..93f9b45c62a 100644 --- a/homeassistant/components/pvoutput/manifest.json +++ b/homeassistant/components/pvoutput/manifest.json @@ -2,8 +2,6 @@ "domain": "pvoutput", "name": "PVOutput", "documentation": "https://www.home-assistant.io/integrations/pvoutput", - "requirements": [], - "dependencies": [], "after_dependencies": ["rest"], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/ca.json b/homeassistant/components/pvpc_hourly_pricing/.translations/ca.json deleted file mode 100644 index 0a7af79fab3..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integraci\u00f3 ja configurada amb un sensor amb aquesta tarifa" - }, - "step": { - "user": { - "data": { - "name": "Nom del sensor", - "tariff": "Tarifa contractada (1, 2 o 3 per\u00edodes)" - }, - "description": "Aquest sensor utilitza l'API oficial de la xarxa el\u00e8ctrica espanyola (REE) per obtenir els [preus per hora de l\u2019electricitat (PVPC)](https://www.esios.ree.es/es/pvpc) a Espanya.\nPer a m\u00e9s informaci\u00f3, consulta la [documentaci\u00f3 de la integraci\u00f3](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\nSelecciona la tarifa contractada, en funci\u00f3 del nombre de per\u00edodes que t\u00e9: \n - 1 per\u00edode: normal (sense discriminaci\u00f3)\n - 2 per\u00edodes: discriminaci\u00f3 (tarifa nocturna) \n - 3 per\u00edodes: cotxe el\u00e8ctric (tarifa nocturna de 3 per\u00edodes)", - "title": "Selecci\u00f3 de tarifa" - } - }, - "title": "Preu per hora de l'electricitat a Espanya (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/de.json b/homeassistant/components/pvpc_hourly_pricing/.translations/de.json deleted file mode 100644 index 2e80e3da6e6..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Die Integration ist bereits mit einem vorhandenen Sensor mit diesem Tarif konfiguriert" - }, - "step": { - "user": { - "data": { - "name": "Sensorname", - "tariff": "Vertragstarif (1, 2 oder 3 Perioden)" - }, - "description": "Dieser Sensor verwendet die offizielle API, um [st\u00fcndliche Strompreise (PVPC)] (https://www.esios.ree.es/es/pvpc) in Spanien zu erhalten. \nWeitere Informationen finden Sie in den [Integrations-Dokumentation] (https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\nW\u00e4hlen Sie den vertraglich vereinbarten Tarif basierend auf der Anzahl der Abrechnungsperioden pro Tag aus: \n - 1 Periode: Normal \n - 2 Perioden: Diskriminierung (Nachttarif) \n - 3 Perioden: Elektroauto (Nachttarif von 3 Perioden)", - "title": "Tarifauswahl" - } - }, - "title": "St\u00fcndlicher Strompreis in Spanien (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/en.json b/homeassistant/components/pvpc_hourly_pricing/.translations/en.json deleted file mode 100644 index 86aaf15c0f1..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integration is already configured with an existing sensor with that tariff" - }, - "step": { - "user": { - "data": { - "name": "Sensor Name", - "tariff": "Contracted tariff (1, 2, or 3 periods)" - }, - "description": "This sensor uses official API to get [hourly pricing of electricity (PVPC)](https://www.esios.ree.es/es/pvpc) in Spain.\nFor more precise explanation visit the [integration docs](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nSelect the contracted rate based on the number of billing periods per day:\n- 1 period: normal\n- 2 periods: discrimination (nightly rate)\n- 3 periods: electric car (nightly rate of 3 periods)", - "title": "Tariff selection" - } - }, - "title": "Hourly price of electricity in Spain (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/es.json b/homeassistant/components/pvpc_hourly_pricing/.translations/es.json deleted file mode 100644 index 8951c46b75d..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La integraci\u00f3n ya est\u00e1 configurada con un sensor existente con esa tarifa" - }, - "step": { - "user": { - "data": { - "name": "Nombre del sensor", - "tariff": "Tarifa contratada (1, 2 o 3 per\u00edodos)" - }, - "description": "Este sensor utiliza la API oficial para obtener [el precio horario de la electricidad (PVPC)](https://www.esios.ree.es/es/pvpc) en Espa\u00f1a.\nPara obtener una explicaci\u00f3n m\u00e1s precisa, visita los [documentos de la integraci\u00f3n](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nSelecciona la tarifa contratada en funci\u00f3n del n\u00famero de per\u00edodos de facturaci\u00f3n por d\u00eda:\n- 1 per\u00edodo: normal\n- 2 per\u00edodos: discriminaci\u00f3n (tarifa nocturna)\n- 3 per\u00edodos: coche el\u00e9ctrico (tarifa nocturna de 3 per\u00edodos)", - "title": "Selecci\u00f3n de tarifa" - } - }, - "title": "Precio por hora de la electricidad en Espa\u00f1a (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/it.json b/homeassistant/components/pvpc_hourly_pricing/.translations/it.json deleted file mode 100644 index 5e0c6acef50..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'integrazione \u00e8 gi\u00e0 configurata con un sensore esistente con quella tariffa" - }, - "step": { - "user": { - "data": { - "name": "Nome del sensore", - "tariff": "Tariffa contrattuale (1, 2 o 3 periodi)" - }, - "description": "Questo sensore utilizza l'API ufficiale per ottenere [prezzi orari dell'elettricit\u00e0 (PVPC)](https://www.esios.ree.es/es/pvpc) in Spagna.\nPer una spiegazione pi\u00f9 precisa, visitare la [documentazione di integrazione](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nSelezionare la tariffa contrattuale in base al numero di periodi di fatturazione al giorno:\n- 1 periodo: normale\n- 2 periodi: discriminazione (tariffa notturna)\n- 3 periodi: auto elettrica (tariffa notturna di 3 periodi)", - "title": "Selezione della tariffa" - } - }, - "title": "Prezzo orario dell'elettricit\u00e0 in Spagna (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/ko.json b/homeassistant/components/pvpc_hourly_pricing/.translations/ko.json deleted file mode 100644 index e2bd6caaa8d..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \uc774\ubbf8 \ud574\ub2f9 \uc694\uae08\uc81c \uc13c\uc11c\ub85c \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "name": "\uc13c\uc11c \uc774\ub984", - "tariff": "\uacc4\uc57d \uc694\uae08\uc81c (1, 2 \ub610\ub294 3 \uad6c\uac04)" - }, - "description": "\uc774 \uc13c\uc11c\ub294 \uacf5\uc2dd API \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2a4\ud398\uc778\uc758 [\uc2dc\uac04\ub2f9 \uc804\uae30 \uc694\uae08 (PVPC)](https://www.esios.ree.es/es/pvpc) \uc744 \uac00\uc838\uc635\ub2c8\ub2e4.\n\ubcf4\ub2e4 \uc790\uc138\ud55c \uc124\uba85\uc740 [\uc548\ub0b4](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/)\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.\n\n1\uc77c\ub2f9 \uccad\uad6c \uad6c\uac04\uc5d0 \ub530\ub77c \uacc4\uc57d \uc694\uae08\uc81c\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.\n - 1 \uad6c\uac04: \uc77c\ubc18 \uc694\uae08\uc81c\n - 2 \uad6c\uac04: \ucc28\ub4f1 \uc694\uae08\uc81c (\uc57c\uac04 \uc694\uae08) \n - 3 \uad6c\uac04: \uc804\uae30\uc790\ub3d9\ucc28 (3 \uad6c\uac04 \uc57c\uac04 \uc694\uae08)", - "title": "\uc694\uae08\uc81c \uc120\ud0dd" - } - }, - "title": "\uc2a4\ud398\uc778 \uc2dc\uac04\ub2f9 \uc804\uae30\uc694\uae08 (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/lb.json b/homeassistant/components/pvpc_hourly_pricing/.translations/lb.json deleted file mode 100644 index bed6af70e13..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integratioun ass scho konfigur\u00e9iert mat engem Sensor mat deem Tarif" - }, - "step": { - "user": { - "data": { - "name": "Numm vum Sensor", - "tariff": "Kontraktuellen Tarif (1, 2 oder 3 Perioden)" - }, - "description": "D\u00ebse Sensor benotzt d\u00e9i offiziell API fir de [Stonne Pr\u00e4is fir Elektrizit\u00e9it a Spuenien (PVPC)](https://www.esios.ree.es/es/pvpc) ze kr\u00e9ien. Fir m\u00e9i pr\u00e4zise Erkl\u00e4runge kuck [Dokumentatioun vun der Integratioun](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nWiel den Taux bas\u00e9ierend op der Unzuel vun de Rechnungsz\u00e4ite pro Dag aus:\n- 1 Period: Normal\n- 2 perioden: Nuets Tarif\n- 3 Perioden: Elektreschen Auto (Nuets Tarif fir 3 Perioden)", - "title": "Auswiel vum Tarif" - } - }, - "title": "Stonne Pr\u00e4is fir Elektrizit\u00e9it a Spuenien (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/no.json b/homeassistant/components/pvpc_hourly_pricing/.translations/no.json deleted file mode 100644 index 0a7f93dda8a..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Integrasjon er allerede konfigurert med en eksisterende sensor med den tariffen" - }, - "step": { - "user": { - "data": { - "name": "Sensornavn", - "tariff": "Avtaletariff (1, 2 eller 3 perioder)" - }, - "description": "Denne sensoren bruker offisiell API for \u00e5 f\u00e5 [timeprising av elektrisitet (PVPC)](https://www.esios.ree.es/es/pvpc) i Spania.\nFor mer presis forklaring, bes\u00f8k [integrasjonsdokumenter](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nVelg den avtalte satsen basert p\u00e5 antall faktureringsperioder per dag:\n- 1 periode: normal\n- 2 perioder: diskriminering (nattlig rate)\n- 3 perioder: elbil (per natt rate p\u00e5 3 perioder)", - "title": "Tariffvalg" - } - }, - "title": "Timepris p\u00e5 elektrisitet i Spania (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/ru.json b/homeassistant/components/pvpc_hourly_pricing/.translations/ru.json deleted file mode 100644 index aaa10fa21b7..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "user": { - "data": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "tariff": "\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 (1, 2 \u0438\u043b\u0438 3 \u043f\u0435\u0440\u0438\u043e\u0434\u0430)" - }, - "description": "\u042d\u0442\u043e\u0442 \u0441\u0435\u043d\u0441\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 API \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f [\u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0446\u0435\u043d\u044b \u0437\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u044d\u043d\u0435\u0440\u0433\u0438\u044e (PVPC)](https://www.esios.ree.es/es/pvpc) \u0432 \u0418\u0441\u043f\u0430\u043d\u0438\u0438.\n\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\n\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0430\u0440\u0438\u0444, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0445 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c:\n- 1 \u043f\u0435\u0440\u0438\u043e\u0434: normal\n- 2 \u043f\u0435\u0440\u0438\u043e\u0434\u0430: discrimination (nightly rate)\n- 3 \u043f\u0435\u0440\u0438\u043e\u0434\u0430: electric car (nightly rate of 3 periods)", - "title": "\u0412\u044b\u0431\u043e\u0440 \u0442\u0430\u0440\u0438\u0444\u0430" - } - }, - "title": "\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u044d\u043d\u0435\u0440\u0433\u0438\u044f \u0432 \u0418\u0441\u043f\u0430\u043d\u0438\u0438 (PVPC)" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/zh-Hant.json b/homeassistant/components/pvpc_hourly_pricing/.translations/zh-Hant.json deleted file mode 100644 index a10c499dd59..00000000000 --- a/homeassistant/components/pvpc_hourly_pricing/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6574\u5408\u5df2\u7d93\u8a2d\u5b9a\u4e26\u6709\u73fe\u6709\u50b3\u611f\u5668\u4f7f\u7528\u76f8\u540c\u8cbb\u7387" - }, - "step": { - "user": { - "data": { - "name": "\u50b3\u611f\u5668\u540d\u7a31", - "tariff": "\u5408\u7d04\u8cbb\u7387\uff081\u30012 \u6216 3 \u9031\u671f\uff09" - }, - "description": "\u6b64\u50b3\u611f\u5668\u4f7f\u7528\u4e86\u975e\u5b98\u65b9 API \u4ee5\u53d6\u5f97\u897f\u73ed\u7259 [\u8a08\u6642\u96fb\u50f9\uff08PVPC\uff09](https://www.esios.ree.es/es/pvpc)\u3002\n\u95dc\u65bc\u66f4\u8a73\u7d30\u7684\u8aaa\u660e\uff0c\u8acb\u53c3\u95b1 [\u6574\u5408\u6587\u4ef6](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/)\u3002\n\n\u57fa\u65bc\u6bcf\u5929\u7684\u5e33\u55ae\u9031\u671f\u9078\u64c7\u5408\u7d04\u8cbb\u7387\uff1a\n- 1 \u9031\u671f\uff1a\u4e00\u822c\n- 2 \u9031\u671f\uff1a\u5dee\u5225\u8cbb\u7387\uff08\u591c\u9593\u8cbb\u7387\uff09\n- 3 \u9031\u671f\uff1a\u96fb\u52d5\u8eca\uff08\u591c\u9593\u8cbb\u7387 3 \u9031\u671f\uff09", - "title": "\u8cbb\u7387\u9078\u64c7" - } - }, - "title": "\u897f\u73ed\u7259\u6642\u8a08\u96fb\u50f9\uff08PVPC\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/manifest.json b/homeassistant/components/pvpc_hourly_pricing/manifest.json index a2f6ec12941..023b22683f8 100644 --- a/homeassistant/components/pvpc_hourly_pricing/manifest.json +++ b/homeassistant/components/pvpc_hourly_pricing/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/pvpc_hourly_pricing", "requirements": ["aiopvpc==1.0.2"], - "dependencies": [], "codeowners": ["@azogue"], "quality_scale": "platinum" } diff --git a/homeassistant/components/pvpc_hourly_pricing/sensor.py b/homeassistant/components/pvpc_hourly_pricing/sensor.py index 199e20d3e22..25b4531cee0 100644 --- a/homeassistant/components/pvpc_hourly_pricing/sensor.py +++ b/homeassistant/components/pvpc_hourly_pricing/sensor.py @@ -6,7 +6,7 @@ from typing import Optional from aiopvpc import PVPCData from homeassistant import config_entries -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, ENERGY_KILO_WATT_HOUR from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.event import async_call_later, async_track_time_change @@ -19,7 +19,7 @@ _LOGGER = logging.getLogger(__name__) ATTR_PRICE = "price" ICON = "mdi:currency-eur" -UNIT = "€/kWh" +UNIT = f"€/{ENERGY_KILO_WATT_HOUR}" _DEFAULT_TIMEOUT = 10 @@ -78,7 +78,7 @@ class ElecPriceSensor(RestoreEntity): random_minute = randint(1, 29) mins_update = [random_minute, random_minute + 30] self._price_tracker = async_track_time_change( - self.hass, self.async_update_prices, second=[0], minute=mins_update, + self.hass, self.async_update_prices, second=[0], minute=mins_update ) _LOGGER.debug( "Setup of price sensor %s (%s) with tariff '%s', " diff --git a/homeassistant/components/pvpc_hourly_pricing/strings.json b/homeassistant/components/pvpc_hourly_pricing/strings.json index bff5dc2e68f..fbda22c5149 100644 --- a/homeassistant/components/pvpc_hourly_pricing/strings.json +++ b/homeassistant/components/pvpc_hourly_pricing/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Hourly price of electricity in Spain (PVPC)", "step": { "user": { "title": "Tariff selection", diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/ca.json b/homeassistant/components/pvpc_hourly_pricing/translations/ca.json new file mode 100644 index 00000000000..a96fa3b584b --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integraci\u00f3 ja configurada amb un sensor amb aquesta tarifa" + }, + "step": { + "user": { + "data": { + "name": "Nom del sensor", + "tariff": "Tarifa contractada (1, 2 o 3 per\u00edodes)" + }, + "description": "Aquest sensor utilitza l'API oficial de la xarxa el\u00e8ctrica espanyola (REE) per obtenir els [preus per hora de l\u2019electricitat (PVPC)](https://www.esios.ree.es/es/pvpc) a Espanya.\nPer a m\u00e9s informaci\u00f3, consulta la [documentaci\u00f3 de la integraci\u00f3](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\nSelecciona la tarifa contractada, cadascuna t\u00e9 un nombre determinat de per\u00edodes: \n - 1 per\u00edode: normal (sense discriminaci\u00f3)\n - 2 per\u00edodes: discriminaci\u00f3 (tarifa nocturna) \n - 3 per\u00edodes: cotxe el\u00e8ctric (tarifa nocturna de 3 per\u00edodes)", + "title": "Selecci\u00f3 de tarifa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/de.json b/homeassistant/components/pvpc_hourly_pricing/translations/de.json new file mode 100644 index 00000000000..8e3e9b68e42 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Die Integration ist bereits mit einem vorhandenen Sensor mit diesem Tarif konfiguriert" + }, + "step": { + "user": { + "data": { + "name": "Sensorname", + "tariff": "Vertragstarif (1, 2 oder 3 Perioden)" + }, + "description": "Dieser Sensor verwendet die offizielle API, um [st\u00fcndliche Strompreise (PVPC)] (https://www.esios.ree.es/es/pvpc) in Spanien zu erhalten. \nWeitere Informationen finden Sie in den [Integrations-Dokumentation] (https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\nW\u00e4hlen Sie den vertraglich vereinbarten Tarif basierend auf der Anzahl der Abrechnungsperioden pro Tag aus: \n - 1 Periode: Normal \n - 2 Perioden: Diskriminierung (Nachttarif) \n - 3 Perioden: Elektroauto (Nachttarif von 3 Perioden)", + "title": "Tarifauswahl" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/en.json b/homeassistant/components/pvpc_hourly_pricing/translations/en.json new file mode 100644 index 00000000000..7716dab8ad7 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integration is already configured with an existing sensor with that tariff" + }, + "step": { + "user": { + "data": { + "name": "Sensor Name", + "tariff": "Contracted tariff (1, 2, or 3 periods)" + }, + "description": "This sensor uses official API to get [hourly pricing of electricity (PVPC)](https://www.esios.ree.es/es/pvpc) in Spain.\nFor more precise explanation visit the [integration docs](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nSelect the contracted rate based on the number of billing periods per day:\n- 1 period: normal\n- 2 periods: discrimination (nightly rate)\n- 3 periods: electric car (nightly rate of 3 periods)", + "title": "Tariff selection" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/es.json b/homeassistant/components/pvpc_hourly_pricing/translations/es.json new file mode 100644 index 00000000000..ee7192f6f87 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "La integraci\u00f3n ya est\u00e1 configurada con un sensor existente con esa tarifa" + }, + "step": { + "user": { + "data": { + "name": "Nombre del sensor", + "tariff": "Tarifa contratada (1, 2 o 3 per\u00edodos)" + }, + "description": "Este sensor utiliza la API oficial para obtener [el precio horario de la electricidad (PVPC)](https://www.esios.ree.es/es/pvpc) en Espa\u00f1a.\nPara obtener una explicaci\u00f3n m\u00e1s precisa, visita los [documentos de la integraci\u00f3n](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nSelecciona la tarifa contratada en funci\u00f3n del n\u00famero de per\u00edodos de facturaci\u00f3n por d\u00eda:\n- 1 per\u00edodo: normal\n- 2 per\u00edodos: discriminaci\u00f3n (tarifa nocturna)\n- 3 per\u00edodos: coche el\u00e9ctrico (tarifa nocturna de 3 per\u00edodos)", + "title": "Selecci\u00f3n de tarifa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/.translations/fr.json b/homeassistant/components/pvpc_hourly_pricing/translations/fr.json similarity index 100% rename from homeassistant/components/pvpc_hourly_pricing/.translations/fr.json rename to homeassistant/components/pvpc_hourly_pricing/translations/fr.json diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/it.json b/homeassistant/components/pvpc_hourly_pricing/translations/it.json new file mode 100644 index 00000000000..84f2fddcb83 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "L'integrazione \u00e8 gi\u00e0 configurata con un sensore esistente con quella tariffa" + }, + "step": { + "user": { + "data": { + "name": "Nome del sensore", + "tariff": "Tariffa contrattuale (1, 2 o 3 periodi)" + }, + "description": "Questo sensore utilizza l'API ufficiale per ottenere [prezzi orari dell'elettricit\u00e0 (PVPC)](https://www.esios.ree.es/es/pvpc) in Spagna.\nPer una spiegazione pi\u00f9 precisa, visitare la [documentazione di integrazione](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nSelezionare la tariffa contrattuale in base al numero di periodi di fatturazione al giorno:\n- 1 periodo: normale\n- 2 periodi: discriminazione (tariffa notturna)\n- 3 periodi: auto elettrica (tariffa notturna di 3 periodi)", + "title": "Selezione della tariffa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/ko.json b/homeassistant/components/pvpc_hourly_pricing/translations/ko.json new file mode 100644 index 00000000000..35ac17a8bb8 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 \uc774\ubbf8 \ud574\ub2f9 \uc694\uae08\uc81c \uc13c\uc11c\ub85c \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "name": "\uc13c\uc11c \uc774\ub984", + "tariff": "\uacc4\uc57d \uc694\uae08\uc81c (1, 2 \ub610\ub294 3 \uad6c\uac04)" + }, + "description": "\uc774 \uc13c\uc11c\ub294 \uacf5\uc2dd API \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2a4\ud398\uc778\uc758 [\uc2dc\uac04\ub2f9 \uc804\uae30 \uc694\uae08 (PVPC)](https://www.esios.ree.es/es/pvpc) \uc744 \uac00\uc838\uc635\ub2c8\ub2e4.\n\ubcf4\ub2e4 \uc790\uc138\ud55c \uc124\uba85\uc740 [\uc548\ub0b4](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/)\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.\n\n1\uc77c\ub2f9 \uccad\uad6c \uad6c\uac04\uc5d0 \ub530\ub77c \uacc4\uc57d \uc694\uae08\uc81c\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.\n - 1 \uad6c\uac04: \uc77c\ubc18 \uc694\uae08\uc81c\n - 2 \uad6c\uac04: \ucc28\ub4f1 \uc694\uae08\uc81c (\uc57c\uac04 \uc694\uae08) \n - 3 \uad6c\uac04: \uc804\uae30\uc790\ub3d9\ucc28 (3 \uad6c\uac04 \uc57c\uac04 \uc694\uae08)", + "title": "\uc694\uae08\uc81c \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/lb.json b/homeassistant/components/pvpc_hourly_pricing/translations/lb.json new file mode 100644 index 00000000000..d176bc4ab6e --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integratioun ass scho konfigur\u00e9iert mat engem Sensor mat deem Tarif" + }, + "step": { + "user": { + "data": { + "name": "Numm vum Sensor", + "tariff": "Kontraktuellen Tarif (1, 2 oder 3 Perioden)" + }, + "description": "D\u00ebse Sensor benotzt d\u00e9i offiziell API fir de [Stonne Pr\u00e4is fir Elektrizit\u00e9it a Spuenien (PVPC)](https://www.esios.ree.es/es/pvpc) ze kr\u00e9ien. Fir m\u00e9i pr\u00e4zise Erkl\u00e4runge kuck [Dokumentatioun vun der Integratioun](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nWiel den Taux bas\u00e9ierend op der Unzuel vun de Rechnungsz\u00e4ite pro Dag aus:\n- 1 Period: Normal\n- 2 perioden: Nuets Tarif\n- 3 Perioden: Elektreschen Auto (Nuets Tarif fir 3 Perioden)", + "title": "Auswiel vum Tarif" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/no.json b/homeassistant/components/pvpc_hourly_pricing/translations/no.json new file mode 100644 index 00000000000..d27b78615cf --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integrasjon er allerede konfigurert med en eksisterende sensor med den tariffen" + }, + "step": { + "user": { + "data": { + "name": "Sensornavn", + "tariff": "Avtaletariff (1, 2 eller 3 perioder)" + }, + "description": "Denne sensoren bruker offisiell API for \u00e5 f\u00e5 [timeprising av elektrisitet (PVPC)](https://www.esios.ree.es/es/pvpc) i Spania.\nFor mer presis forklaring, bes\u00f8k [integrasjonsdokumenter](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\nVelg den avtalte satsen basert p\u00e5 antall faktureringsperioder per dag:\n- 1 periode: normal\n- 2 perioder: diskriminering (nattlig rate)\n- 3 perioder: elbil (per natt rate p\u00e5 3 perioder)", + "title": "Tariffvalg" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/pl.json b/homeassistant/components/pvpc_hourly_pricing/translations/pl.json new file mode 100644 index 00000000000..ae5f27fb7c2 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integracja jest ju\u017c skonfigurowana z istniej\u0105cym sensorem dla tej taryfy." + }, + "step": { + "user": { + "data": { + "name": "Nazwa sensora", + "tariff": "Zakontraktowana taryfa (1, 2 lub 3 okresy)" + }, + "description": "Ten czujnik u\u017cywa oficjalnego interfejsu API w celu uzyskania [godzinowej ceny energii elektrycznej (PVPC)] (https://www.esios.ree.es/es/pvpc) w Hiszpanii. \n Aby uzyska\u0107 bardziej szczeg\u00f3\u0142owe wyja\u015bnienia, odwied\u017a [dokumentacj\u0119 dotycz\u0105c\u0105 integracji] (https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\n Wybierz stawk\u0119 umown\u0105 na podstawie liczby okres\u00f3w rozliczeniowych dziennie: \n - 1 okres: normalny \n - 2 okresy: dyskryminacja (nocna stawka) \n - 3 okresy: samoch\u00f3d elektryczny (stawka nocna za 3 okresy)", + "title": "Wyb\u00f3r taryfy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/ru.json b/homeassistant/components/pvpc_hourly_pricing/translations/ru.json new file mode 100644 index 00000000000..4a2f4440a2a --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "data": { + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "tariff": "\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 (1, 2 \u0438\u043b\u0438 3 \u043f\u0435\u0440\u0438\u043e\u0434\u0430)" + }, + "description": "\u042d\u0442\u043e\u0442 \u0441\u0435\u043d\u0441\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 API \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f [\u043f\u043e\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0446\u0435\u043d\u044b \u0437\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u044d\u043d\u0435\u0440\u0433\u0438\u044e (PVPC)](https://www.esios.ree.es/es/pvpc) \u0432 \u0418\u0441\u043f\u0430\u043d\u0438\u0438.\n\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/).\n\n\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0430\u0440\u0438\u0444, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0445 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c:\n- 1 \u043f\u0435\u0440\u0438\u043e\u0434: normal\n- 2 \u043f\u0435\u0440\u0438\u043e\u0434\u0430: discrimination (nightly rate)\n- 3 \u043f\u0435\u0440\u0438\u043e\u0434\u0430: electric car (nightly rate of 3 periods)", + "title": "\u0412\u044b\u0431\u043e\u0440 \u0442\u0430\u0440\u0438\u0444\u0430" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/sl.json b/homeassistant/components/pvpc_hourly_pricing/translations/sl.json new file mode 100644 index 00000000000..c6765575c07 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integracija je \u017ee konfigurirana z obstoje\u010dim senzorjem s to tarifo" + }, + "step": { + "user": { + "data": { + "name": "Ime tipala", + "tariff": "Pogodbena tarifa (1, 2 ali 3 obdobja)" + }, + "description": "Ta senzor uporablja uradni API za [urno dolo\u010danje cen elektri\u010dne energije (PVPC)] (https://www.esios.ree.es/es/pvpc) v \u0160paniji. \n Za natan\u010dnej\u0161o razlago obi\u0161\u010dite [integracijski dokumenti] (https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\n Izberite pogodbeno tarifo glede na \u0161tevilo obra\u010dunskih obdobij na dan: \n - 1 obdobje: normalno \n - 2 obdobji: diskriminacija (no\u010dna cena) \n - 3 obdobja: elektri\u010dni avtomobil (no\u010dna cena 3 obdobja)", + "title": "Izbira tarife" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/zh-Hant.json b/homeassistant/components/pvpc_hourly_pricing/translations/zh-Hant.json new file mode 100644 index 00000000000..7203356ab6a --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u6574\u5408\u5df2\u7d93\u8a2d\u5b9a\u4e26\u6709\u73fe\u6709\u50b3\u611f\u5668\u4f7f\u7528\u76f8\u540c\u8cbb\u7387" + }, + "step": { + "user": { + "data": { + "name": "\u50b3\u611f\u5668\u540d\u7a31", + "tariff": "\u5408\u7d04\u8cbb\u7387\uff081\u30012 \u6216 3 \u9031\u671f\uff09" + }, + "description": "\u6b64\u50b3\u611f\u5668\u4f7f\u7528\u4e86\u975e\u5b98\u65b9 API \u4ee5\u53d6\u5f97\u897f\u73ed\u7259 [\u8a08\u6642\u96fb\u50f9\uff08PVPC\uff09](https://www.esios.ree.es/es/pvpc)\u3002\n\u95dc\u65bc\u66f4\u8a73\u7d30\u7684\u8aaa\u660e\uff0c\u8acb\u53c3\u95b1 [\u6574\u5408\u6587\u4ef6](https://www.home-assistant.io/integrations/pvpc_hourly_pricing/)\u3002\n\n\u57fa\u65bc\u6bcf\u5929\u7684\u5e33\u55ae\u9031\u671f\u9078\u64c7\u5408\u7d04\u8cbb\u7387\uff1a\n- 1 \u9031\u671f\uff1a\u4e00\u822c\n- 2 \u9031\u671f\uff1a\u5dee\u5225\u8cbb\u7387\uff08\u591c\u9593\u8cbb\u7387\uff09\n- 3 \u9031\u671f\uff1a\u96fb\u52d5\u8eca\uff08\u591c\u9593\u8cbb\u7387 3 \u9031\u671f\uff09", + "title": "\u8cbb\u7387\u9078\u64c7" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/pyload/manifest.json b/homeassistant/components/pyload/manifest.json index 98ad640d3ff..8a446a032f8 100644 --- a/homeassistant/components/pyload/manifest.json +++ b/homeassistant/components/pyload/manifest.json @@ -2,7 +2,5 @@ "domain": "pyload", "name": "pyLoad", "documentation": "https://www.home-assistant.io/integrations/pyload", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/pyload/sensor.py b/homeassistant/components/pyload/sensor.py index 579919821a3..abcf1193ce4 100644 --- a/homeassistant/components/pyload/sensor.py +++ b/homeassistant/components/pyload/sensor.py @@ -51,12 +51,12 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the pyLoad sensors.""" host = config.get(CONF_HOST) port = config.get(CONF_PORT) - ssl = "s" if config.get(CONF_SSL) else "" + protocol = "https" if config[CONF_SSL] else "http" name = config.get(CONF_NAME) username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) monitored_types = config.get(CONF_MONITORED_VARIABLES) - url = f"http{ssl}://{host}:{port}/api/" + url = f"{protocol}://{host}:{port}/api/" try: pyloadapi = PyLoadAPI(api_url=url, username=username, password=password) @@ -83,7 +83,7 @@ class PyLoadSensor(Entity): def __init__(self, api, sensor_type, client_name): """Initialize a new pyLoad sensor.""" - self._name = "{} {}".format(client_name, sensor_type[1]) + self._name = f"{client_name} {sensor_type[1]}" self.type = sensor_type[0] self.api = api self._state = None @@ -141,9 +141,7 @@ class PyLoadAPI: if username is not None and password is not None: self.payload = {"username": username, "password": password} - self.login = requests.post( - "{}{}".format(api_url, "login"), data=self.payload, timeout=5 - ) + self.login = requests.post(f"{api_url}login", data=self.payload, timeout=5) self.update() def post(self, method, params=None): @@ -155,7 +153,7 @@ class PyLoadAPI: try: response = requests.post( - "{}{}".format(self.api_url, "statusServer"), + f"{self.api_url}statusServer", json=payload, cookies=self.login.cookies, headers=self.headers, diff --git a/homeassistant/components/python_script/__init__.py b/homeassistant/components/python_script/__init__.py index 0c5886e177c..36963dc2f20 100644 --- a/homeassistant/components/python_script/__init__.py +++ b/homeassistant/components/python_script/__init__.py @@ -32,37 +32,46 @@ FOLDER = "python_scripts" CONFIG_SCHEMA = vol.Schema({DOMAIN: vol.Schema(dict)}, extra=vol.ALLOW_EXTRA) -ALLOWED_HASS = set(["bus", "services", "states"]) -ALLOWED_EVENTBUS = set(["fire"]) -ALLOWED_STATEMACHINE = set( - ["entity_ids", "all", "get", "is_state", "is_state_attr", "remove", "set"] -) -ALLOWED_SERVICEREGISTRY = set(["services", "has_service", "call"]) -ALLOWED_TIME = set( - ["sleep", "strftime", "strptime", "gmtime", "localtime", "ctime", "time", "mktime"] -) -ALLOWED_DATETIME = set(["date", "time", "datetime", "timedelta", "tzinfo"]) -ALLOWED_DT_UTIL = set( - [ - "utcnow", - "now", - "as_utc", - "as_timestamp", - "as_local", - "utc_from_timestamp", - "start_of_local_day", - "parse_datetime", - "parse_date", - "get_age", - ] -) +ALLOWED_HASS = {"bus", "services", "states"} +ALLOWED_EVENTBUS = {"fire"} +ALLOWED_STATEMACHINE = { + "entity_ids", + "all", + "get", + "is_state", + "is_state_attr", + "remove", + "set", +} +ALLOWED_SERVICEREGISTRY = {"services", "has_service", "call"} +ALLOWED_TIME = { + "sleep", + "strftime", + "strptime", + "gmtime", + "localtime", + "ctime", + "time", + "mktime", +} +ALLOWED_DATETIME = {"date", "time", "datetime", "timedelta", "tzinfo"} +ALLOWED_DT_UTIL = { + "utcnow", + "now", + "as_utc", + "as_timestamp", + "as_local", + "utc_from_timestamp", + "start_of_local_day", + "parse_datetime", + "parse_date", + "get_age", +} class ScriptError(HomeAssistantError): """When a script error occurs.""" - pass - def setup(hass, config): """Initialize the Python script component.""" @@ -205,7 +214,6 @@ class StubPrinter: def __init__(self, _getattr_): """Initialize our printer.""" - pass def _call_print(self, *objects, **kwargs): """Print text.""" diff --git a/homeassistant/components/python_script/manifest.json b/homeassistant/components/python_script/manifest.json index f16213790c2..fad88a19b34 100644 --- a/homeassistant/components/python_script/manifest.json +++ b/homeassistant/components/python_script/manifest.json @@ -3,7 +3,6 @@ "name": "Python Scripts", "documentation": "https://www.home-assistant.io/integrations/python_script", "requirements": ["restrictedpython==5.0"], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/qbittorrent/manifest.json b/homeassistant/components/qbittorrent/manifest.json index f1cd556f5d6..c839cb75933 100644 --- a/homeassistant/components/qbittorrent/manifest.json +++ b/homeassistant/components/qbittorrent/manifest.json @@ -3,6 +3,5 @@ "name": "qBittorrent", "documentation": "https://www.home-assistant.io/integrations/qbittorrent", "requirements": ["python-qbittorrent==0.4.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/qld_bushfire/geo_location.py b/homeassistant/components/qld_bushfire/geo_location.py index 8ae80ca9027..8efb1a32705 100644 --- a/homeassistant/components/qld_bushfire/geo_location.py +++ b/homeassistant/components/qld_bushfire/geo_location.py @@ -14,6 +14,7 @@ from homeassistant.const import ( CONF_RADIUS, CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_START, + LENGTH_KILOMETERS, ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv @@ -31,7 +32,6 @@ ATTR_UPDATED_DATE = "updated_date" CONF_CATEGORIES = "categories" DEFAULT_RADIUS_IN_KM = 20.0 -DEFAULT_UNIT_OF_MEASUREMENT = "km" SCAN_INTERVAL = timedelta(minutes=5) @@ -231,7 +231,7 @@ class QldBushfireLocationEvent(GeolocationEvent): @property def unit_of_measurement(self): """Return the unit of measurement.""" - return DEFAULT_UNIT_OF_MEASUREMENT + return LENGTH_KILOMETERS @property def device_state_attributes(self): diff --git a/homeassistant/components/qld_bushfire/manifest.json b/homeassistant/components/qld_bushfire/manifest.json index fb05d1638c3..db98e2f7338 100644 --- a/homeassistant/components/qld_bushfire/manifest.json +++ b/homeassistant/components/qld_bushfire/manifest.json @@ -3,6 +3,5 @@ "name": "Queensland Bushfire Alert", "documentation": "https://www.home-assistant.io/integrations/qld_bushfire", "requirements": ["georss_qld_bushfire_alert_client==0.3"], - "dependencies": [], "codeowners": ["@exxamalte"] } diff --git a/homeassistant/components/qnap/manifest.json b/homeassistant/components/qnap/manifest.json index 3c64986c2bc..b83d37f0d3c 100644 --- a/homeassistant/components/qnap/manifest.json +++ b/homeassistant/components/qnap/manifest.json @@ -3,6 +3,5 @@ "name": "QNAP", "documentation": "https://www.home-assistant.io/integrations/qnap", "requirements": ["qnapstats==0.3.0"], - "dependencies": [], "codeowners": ["@colinodell"] } diff --git a/homeassistant/components/qnap/sensor.py b/homeassistant/components/qnap/sensor.py index 475e02aba86..aefbe760d6a 100644 --- a/homeassistant/components/qnap/sensor.py +++ b/homeassistant/components/qnap/sensor.py @@ -175,9 +175,9 @@ class QNAPStatsAPI: def __init__(self, config): """Initialize the API wrapper.""" - protocol = "https" if config.get(CONF_SSL) else "http" + protocol = "https" if config[CONF_SSL] else "http" self._api = QNAPStats( - "{}://{}".format(protocol, config.get(CONF_HOST)), + f"{protocol}://{config.get(CONF_HOST)}", config.get(CONF_PORT), config.get(CONF_USERNAME), config.get(CONF_PASSWORD), @@ -357,9 +357,7 @@ class QNAPDriveSensor(QNAPSensor): """Return the name of the sensor, if any.""" server_name = self._api.data["system_stats"]["system"]["name"] - return "{} {} (Drive {})".format( - server_name, self.var_name, self.monitor_device - ) + return f"{server_name} {self.var_name} (Drive {self.monitor_device})" @property def device_state_attributes(self): @@ -402,6 +400,4 @@ class QNAPVolumeSensor(QNAPSensor): data = self._api.data["volumes"][self.monitor_device] total_gb = int(data["total_size"]) / 1024 / 1024 / 1024 - return { - ATTR_VOLUME_SIZE: "{} {}".format(round_nicely(total_gb), DATA_GIBIBYTES) - } + return {ATTR_VOLUME_SIZE: f"{round_nicely(total_gb)} {DATA_GIBIBYTES}"} diff --git a/homeassistant/components/qrcode/image_processing.py b/homeassistant/components/qrcode/image_processing.py index 018f074a6d2..82f6a35ac8f 100644 --- a/homeassistant/components/qrcode/image_processing.py +++ b/homeassistant/components/qrcode/image_processing.py @@ -34,7 +34,7 @@ class QrEntity(ImageProcessingEntity): if name: self._name = name else: - self._name = "QR {0}".format(split_entity_id(camera_entity)[1]) + self._name = f"QR {split_entity_id(camera_entity)[1]}" self._state = None @property diff --git a/homeassistant/components/qrcode/manifest.json b/homeassistant/components/qrcode/manifest.json index cc2cde26aa5..3b9df1a4e64 100644 --- a/homeassistant/components/qrcode/manifest.json +++ b/homeassistant/components/qrcode/manifest.json @@ -2,10 +2,6 @@ "domain": "qrcode", "name": "QR Code", "documentation": "https://www.home-assistant.io/integrations/qrcode", - "requirements": [ - "pillow==7.0.0", - "pyzbar==0.1.7" - ], - "dependencies": [], + "requirements": ["pillow==7.1.1", "pyzbar==0.1.7"], "codeowners": [] -} \ No newline at end of file +} diff --git a/homeassistant/components/quantum_gateway/manifest.json b/homeassistant/components/quantum_gateway/manifest.json index ca930dc9ca4..1c4a7a13923 100644 --- a/homeassistant/components/quantum_gateway/manifest.json +++ b/homeassistant/components/quantum_gateway/manifest.json @@ -3,6 +3,5 @@ "name": "Quantum Gateway", "documentation": "https://www.home-assistant.io/integrations/quantum_gateway", "requirements": ["quantum-gateway==0.0.5"], - "dependencies": [], "codeowners": ["@cisasteelersfan"] } diff --git a/homeassistant/components/qvr_pro/__init__.py b/homeassistant/components/qvr_pro/__init__.py index 3e10191e48b..ed12cd49c51 100644 --- a/homeassistant/components/qvr_pro/__init__.py +++ b/homeassistant/components/qvr_pro/__init__.py @@ -19,6 +19,8 @@ from .const import ( SERVICE_STOP_RECORD, ) +DEFAULT_PORT = 8080 + SERVICE_CHANNEL_GUID = "guid" _LOGGER = logging.getLogger(__name__) @@ -30,7 +32,7 @@ CONFIG_SCHEMA = vol.Schema( vol.Required(CONF_HOST): cv.string, vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_PORT): cv.port, + vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_EXCLUDE_CHANNELS, default=[]): vol.All( cv.ensure_list_csv, [cv.positive_int] ), @@ -51,7 +53,7 @@ def setup(hass, config): user = conf[CONF_USERNAME] password = conf[CONF_PASSWORD] host = conf[CONF_HOST] - port = conf.get(CONF_PORT) + port = conf[CONF_PORT] excluded_channels = conf[CONF_EXCLUDE_CHANNELS] try: diff --git a/homeassistant/components/qvr_pro/camera.py b/homeassistant/components/qvr_pro/camera.py index 28f607165a7..9dd8e3c4f20 100644 --- a/homeassistant/components/qvr_pro/camera.py +++ b/homeassistant/components/qvr_pro/camera.py @@ -90,6 +90,13 @@ class QVRProCamera(Camera): def camera_image(self): """Get image bytes from camera.""" + try: + return self._client.get_snapshot(self.guid) + + except QVRResponseError as ex: + _LOGGER.error("Error getting image: %s", ex) + self._client.connect() + return self._client.get_snapshot(self.guid) async def stream_source(self): diff --git a/homeassistant/components/qvr_pro/manifest.json b/homeassistant/components/qvr_pro/manifest.json index 3bef827a019..d6365afd213 100644 --- a/homeassistant/components/qvr_pro/manifest.json +++ b/homeassistant/components/qvr_pro/manifest.json @@ -2,7 +2,6 @@ "domain": "qvr_pro", "name": "QVR Pro", "documentation": "https://www.home-assistant.io/integrations/qvr_pro", - "requirements": ["pyqvrpro==0.51"], - "dependencies": [], + "requirements": ["pyqvrpro==0.52"], "codeowners": ["@oblogic7"] } diff --git a/homeassistant/components/qvr_pro/services.yaml b/homeassistant/components/qvr_pro/services.yaml index cc6866fee63..0f305d1fa8d 100644 --- a/homeassistant/components/qvr_pro/services.yaml +++ b/homeassistant/components/qvr_pro/services.yaml @@ -3,11 +3,11 @@ start_record: fields: guid: description: GUID of the channel to start recording. - example: '245EBE933C0A597EBE865C0A245E0002' + example: "245EBE933C0A597EBE865C0A245E0002" stop_record: description: Stop QVR Pro recording on specified channel. fields: guid: description: GUID of the channel to stop recording. - example: '245EBE933C0A597EBE865C0A245E0002' \ No newline at end of file + example: "245EBE933C0A597EBE865C0A245E0002" diff --git a/homeassistant/components/qwikswitch/__init__.py b/homeassistant/components/qwikswitch/__init__.py index 33392c51be8..ffe87797358 100644 --- a/homeassistant/components/qwikswitch/__init__.py +++ b/homeassistant/components/qwikswitch/__init__.py @@ -87,12 +87,14 @@ class QSEntity(Entity): @callback def update_packet(self, packet): """Receive update packet from QSUSB. Match dispather_send signature.""" - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Listen for updates from QSUSb via dispatcher.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - self.qsid, self.update_packet + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + self.qsid, self.update_packet + ) ) @@ -203,9 +205,7 @@ async def async_setup(hass, config): # If button pressed, fire a hass event if QS_ID in qspacket: if qspacket.get(QS_CMD, "") in cmd_buttons: - hass.bus.async_fire( - "qwikswitch.button.{}".format(qspacket[QS_ID]), qspacket - ) + hass.bus.async_fire(f"qwikswitch.button.{qspacket[QS_ID]}", qspacket) return if qspacket[QS_ID] in sensor_ids: diff --git a/homeassistant/components/qwikswitch/binary_sensor.py b/homeassistant/components/qwikswitch/binary_sensor.py index 054028b5629..b3635dcb1f4 100644 --- a/homeassistant/components/qwikswitch/binary_sensor.py +++ b/homeassistant/components/qwikswitch/binary_sensor.py @@ -52,7 +52,7 @@ class QSBinarySensor(QSEntity, BinarySensorDevice): ) if val is not None: self._val = bool(val) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self): diff --git a/homeassistant/components/qwikswitch/manifest.json b/homeassistant/components/qwikswitch/manifest.json index 836bc611b83..31e84fccf9a 100644 --- a/homeassistant/components/qwikswitch/manifest.json +++ b/homeassistant/components/qwikswitch/manifest.json @@ -3,6 +3,5 @@ "name": "QwikSwitch QSUSB", "documentation": "https://www.home-assistant.io/integrations/qwikswitch", "requirements": ["pyqwikswitch==0.93"], - "dependencies": [], "codeowners": ["@kellerza"] } diff --git a/homeassistant/components/qwikswitch/sensor.py b/homeassistant/components/qwikswitch/sensor.py index 4674da420b2..9609af42f65 100644 --- a/homeassistant/components/qwikswitch/sensor.py +++ b/homeassistant/components/qwikswitch/sensor.py @@ -51,7 +51,7 @@ class QSSensor(QSEntity): ) if val is not None: self._val = val - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def state(self): diff --git a/homeassistant/components/rachio/.translations/ca.json b/homeassistant/components/rachio/.translations/ca.json deleted file mode 100644 index 468ab0b3f5c..00000000000 --- a/homeassistant/components/rachio/.translations/ca.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "api_key": "Clau API del compte Rachio." - }, - "description": "Necessitar\u00e0s la clau API de https://app.rach.io/. Selecciona 'Configuraci\u00f3 del compte' (Account Settings) i, a continuaci\u00f3, clica 'Obtenir clau API' (GET API KEY).", - "title": "Connexi\u00f3 amb dispositiu Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Durant quant de temps (en minuts) mantenir engegada una estaci\u00f3 quan l\u2019interruptor s'activa." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/de.json b/homeassistant/components/rachio/.translations/de.json deleted file mode 100644 index 05bf5fbe4dd..00000000000 --- a/homeassistant/components/rachio/.translations/de.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "api_key": "Der API-Schl\u00fcssel f\u00fcr das Rachio-Konto." - }, - "description": "Sie ben\u00f6tigen den API-Schl\u00fcssel von https://app.rach.io/. W\u00e4hlen Sie \"Kontoeinstellungen\" und klicken Sie dann auf \"API-SCHL\u00dcSSEL ERHALTEN\".", - "title": "Stellen Sie eine Verbindung zu Ihrem Rachio-Ger\u00e4t her" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Wie lange, in Minuten, um eine Station einzuschalten, wenn der Schalter aktiviert ist." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/en.json b/homeassistant/components/rachio/.translations/en.json deleted file mode 100644 index bc87c370068..00000000000 --- a/homeassistant/components/rachio/.translations/en.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "api_key": "The API key for the Rachio account." - }, - "description": "You will need the API Key from https://app.rach.io/. Select 'Account Settings, and then click on 'GET API KEY'.", - "title": "Connect to your Rachio device" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "For how long, in minutes, to turn on a station when the switch is enabled." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/es.json b/homeassistant/components/rachio/.translations/es.json deleted file mode 100644 index e938c78677e..00000000000 --- a/homeassistant/components/rachio/.translations/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "api_key": "La clave API para la cuenta Rachio." - }, - "description": "Necesitar\u00e1s la clave API de https://app.rach.io/. Selecciona 'Account Settings' y luego haz clic en 'GET API KEY'.", - "title": "Conectar a tu dispositivo Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Durante cu\u00e1nto tiempo, en minutos, permanece encendida una estaci\u00f3n cuando el interruptor est\u00e1 activado." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/fr.json b/homeassistant/components/rachio/.translations/fr.json deleted file mode 100644 index a7fd606b310..00000000000 --- a/homeassistant/components/rachio/.translations/fr.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "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", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "api_key": "La cl\u00e9 API pour le compte Rachio." - }, - "description": "Vous aurez besoin de la cl\u00e9 API de https://app.rach.io/. S\u00e9lectionnez \"Param\u00e8tres du compte, puis cliquez sur \"GET API KEY \".", - "title": "Connectez-vous \u00e0 votre appareil Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Le temps, en minutes, n\u00e9cessaire pour allumer une station lorsque l'interrupteur est activ\u00e9." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/it.json b/homeassistant/components/rachio/.translations/it.json deleted file mode 100644 index fe05d236e8a..00000000000 --- a/homeassistant/components/rachio/.translations/it.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "api_key": "Chiave API per l'account Rachio." - }, - "description": "\u00c8 necessaria la chiave API di https://app.rach.io/. Selezionare 'Impostazioni Account', quindi fare clic su 'GET API KEY'.", - "title": "Connettiti al tuo dispositivo Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Per quanto tempo, in minuti, accendere una stazione quando l'interruttore \u00e8 abilitato." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/ko.json b/homeassistant/components/rachio/.translations/ko.json deleted file mode 100644 index d52aac4bf4a..00000000000 --- a/homeassistant/components/rachio/.translations/ko.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "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", - "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "api_key": "Rachio \uacc4\uc815\uc758 API \ud0a4." - }, - "description": "https://app.rach.io/ \uc758 API \ud0a4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uacc4\uc815 \uc124\uc815\uc744 \uc120\ud0dd\ud55c \ub2e4\uc74c 'GET API KEY ' \ub97c \ud074\ub9ad\ud574\uc8fc\uc138\uc694.", - "title": "Rachio \uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "\uc2a4\uc704\uce58\uac00 \ud65c\uc131\ud654\ub41c \uacbd\uc6b0 \uc2a4\ud14c\uc774\uc158\uc744 \ucf1c\ub294 \uc2dc\uac04(\ubd84) \uc785\ub2c8\ub2e4." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/lb.json b/homeassistant/components/rachio/.translations/lb.json deleted file mode 100644 index d43d4d9a044..00000000000 --- a/homeassistant/components/rachio/.translations/lb.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "api_key": "API Schl\u00ebssel fir den Racchio Kont." - }, - "description": "Du brauchs een API Schl\u00ebssel vun https://app.rach.io/. Wiel 'Account Settings', a klick dann op 'GET API KEY'.", - "title": "Mam Rachio Apparat verbannen" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Fir w\u00e9i laang, a Minutten, soll eng Statioun ugeschalt gi wann de Schalter ageschalt ass." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/no.json b/homeassistant/components/rachio/.translations/no.json deleted file mode 100644 index 8b063018879..00000000000 --- a/homeassistant/components/rachio/.translations/no.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "api_key": "API-n\u00f8kkelen for Rachio-kontoen." - }, - "description": "Du trenger API-n\u00f8kkelen fra https://app.rach.io/. Velg \"Kontoinnstillinger\", og klikk deretter p\u00e5 \"GET API KEY\".", - "title": "Koble til Rachio-enheten din" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Hvor lenge, i minutter, for \u00e5 sl\u00e5 p\u00e5 en stasjon n\u00e5r bryteren er aktivert." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/pl.json b/homeassistant/components/rachio/.translations/pl.json deleted file mode 100644 index 3c07ea850c0..00000000000 --- a/homeassistant/components/rachio/.translations/pl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "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.", - "unknown": "Niespodziewany b\u0142\u0105d." - }, - "step": { - "user": { - "data": { - "api_key": "Klucz API dla konta Rachio." - }, - "description": "B\u0119dziesz potrzebowa\u0142 klucza API ze strony https://app.rach.io/. Wybierz 'Account Settings', a nast\u0119pnie kliknij 'GET API KEY'.", - "title": "Po\u0142\u0105czenie z urz\u0105dzeniem Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Jak d\u0142ugo, w minutach, nale\u017cy w\u0142\u0105czy\u0107 stacj\u0119, gdy prze\u0142\u0105cznik jest w\u0142\u0105czony." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/ru.json b/homeassistant/components/rachio/.translations/ru.json deleted file mode 100644 index 619f5d4bb0e..00000000000 --- a/homeassistant/components/rachio/.translations/ru.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "api_key": "\u041a\u043b\u044e\u0447 API \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Rachio." - }, - "description": "\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0443\u0436\u0435\u043d \u043a\u043b\u044e\u0447 API \u043e\u0442 https://app.rach.io/. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 'Account Settings', \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 'GET API KEY'.", - "title": "Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "\u041d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d (\u0432 \u043c\u0438\u043d\u0443\u0442\u0430\u0445)." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/sl.json b/homeassistant/components/rachio/.translations/sl.json deleted file mode 100644 index 80e5f3ff99c..00000000000 --- a/homeassistant/components/rachio/.translations/sl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana" - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova", - "invalid_auth": "Neveljavna avtentikacija", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "data": { - "api_key": "Klju\u010d API za ra\u010dun Rachio." - }, - "description": "Potrebovali boste API klju\u010d iz https://app.rach.io/. Izberite ' nastavitve ra\u010duna in kliknite 'get API KEY'.", - "title": "Pove\u017eite se z napravo Rachio" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "Kako dolgo, v minutah, da vklopite postajo, ko je stikalo omogo\u010deno." - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/.translations/zh-Hant.json b/homeassistant/components/rachio/.translations/zh-Hant.json deleted file mode 100644 index 0eabf0ed574..00000000000 --- a/homeassistant/components/rachio/.translations/zh-Hant.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "api_key": "Rachio \u5e33\u865f API \u91d1\u9470\u3002" - }, - "description": "\u5c07\u6703\u9700\u8981\u7531 https://app.rach.io/ \u53d6\u5f97 App \u5bc6\u9470\u3002\u9078\u64c7\u5e33\u865f\u8a2d\u5b9a\uff08Account Settings\uff09\u3001\u4e26\u9078\u64c7\u7372\u5f97\u5bc6\u9470\uff08GET API KEY\uff09\u3002", - "title": "\u9023\u7dda\u81f3 Rachio \u8a2d\u5099" - } - }, - "title": "Rachio" - }, - "options": { - "step": { - "init": { - "data": { - "manual_run_mins": "\u7576\u958b\u95dc\u958b\u555f\u5f8c\u3001\u5de5\u4f5c\u7ad9\u6240\u8981\u958b\u555f\u7684\u5206\u9418\u6578\u3002" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/rachio/__init__.py b/homeassistant/components/rachio/__init__.py index 8879bd6965c..a5c9f5ab0a9 100644 --- a/homeassistant/components/rachio/__init__.py +++ b/homeassistant/components/rachio/__init__.py @@ -13,14 +13,18 @@ from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import config_validation as cv from .const import ( - CONF_CUSTOM_URL, + CONF_CLOUDHOOK_URL, CONF_MANUAL_RUN_MINS, + CONF_WEBHOOK_ID, DEFAULT_MANUAL_RUN_MINS, DOMAIN, RACHIO_API_EXCEPTIONS, ) from .device import RachioPerson -from .webhooks import WEBHOOK_PATH, RachioWebhookView +from .webhooks import ( + async_get_or_create_registered_webhook_id_and_url, + async_register_webhook, +) _LOGGER = logging.getLogger(__name__) @@ -31,7 +35,6 @@ CONFIG_SCHEMA = vol.Schema( DOMAIN: vol.Schema( { vol.Required(CONF_API_KEY): cv.string, - vol.Optional(CONF_CUSTOM_URL): cv.string, vol.Optional( CONF_MANUAL_RUN_MINS, default=DEFAULT_MANUAL_RUN_MINS ): cv.positive_int, @@ -76,6 +79,12 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): return unload_ok +async def async_remove_entry(hass, entry): + """Remove a rachio config entry.""" + if CONF_CLOUDHOOK_URL in entry.data: + await hass.components.cloud.async_delete_cloudhook(entry.data[CONF_WEBHOOK_ID]) + + async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up the Rachio config entry.""" @@ -93,11 +102,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): rachio = Rachio(api_key) # Get the URL of this server - custom_url = config.get(CONF_CUSTOM_URL) - hass_url = hass.config.api.base_url if custom_url is None else custom_url rachio.webhook_auth = secrets.token_hex() - webhook_url_path = f"{WEBHOOK_PATH}-{entry.entry_id}" - rachio.webhook_url = f"{hass_url}{webhook_url_path}" + webhook_id, webhook_url = await async_get_or_create_registered_webhook_id_and_url( + hass, entry + ) + rachio.webhook_url = webhook_url person = RachioPerson(rachio, entry) @@ -118,9 +127,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): # Enable component hass.data[DOMAIN][entry.entry_id] = person - - # Listen for incoming webhook connections after the data is there - hass.http.register_view(RachioWebhookView(entry.entry_id, webhook_url_path)) + async_register_webhook(hass, webhook_id, entry.entry_id) for component in SUPPORTED_DOMAINS: hass.async_create_task( diff --git a/homeassistant/components/rachio/binary_sensor.py b/homeassistant/components/rachio/binary_sensor.py index ab3a0b91276..c3161cae6ab 100644 --- a/homeassistant/components/rachio/binary_sensor.py +++ b/homeassistant/components/rachio/binary_sensor.py @@ -6,6 +6,7 @@ from homeassistant.components.binary_sensor import ( DEVICE_CLASS_CONNECTIVITY, BinarySensorDevice, ) +from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from .const import ( @@ -18,7 +19,7 @@ from .const import ( STATUS_ONLINE, ) from .entity import RachioDevice -from .webhooks import SUBTYPE_OFFLINE, SUBTYPE_ONLINE +from .webhooks import SUBTYPE_COLD_REBOOT, SUBTYPE_OFFLINE, SUBTYPE_ONLINE _LOGGER = logging.getLogger(__name__) @@ -43,7 +44,6 @@ class RachioControllerBinarySensor(RachioDevice, BinarySensorDevice): def __init__(self, controller, poll=True): """Set up a new Rachio controller binary sensor.""" super().__init__(controller) - self._undo_dispatcher = None if poll: self._state = self._poll_update() else: @@ -54,34 +54,34 @@ class RachioControllerBinarySensor(RachioDevice, BinarySensorDevice): """Return whether the sensor has a 'true' value.""" return self._state - def _handle_any_update(self, *args, **kwargs) -> None: + @callback + def _async_handle_any_update(self, *args, **kwargs) -> None: """Determine whether an update event applies to this device.""" if args[0][KEY_DEVICE_ID] != self._controller.controller_id: # For another device return # For this device - self._handle_update(args, kwargs) + self._async_handle_update(args, kwargs) @abstractmethod def _poll_update(self, data=None) -> bool: """Request the state from the API.""" @abstractmethod - def _handle_update(self, *args, **kwargs) -> None: + def _async_handle_update(self, *args, **kwargs) -> None: """Handle an update to the state of this sensor.""" async def async_added_to_hass(self): """Subscribe to updates.""" - self._undo_dispatcher = async_dispatcher_connect( - self.hass, SIGNAL_RACHIO_CONTROLLER_UPDATE, self._handle_any_update + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_RACHIO_CONTROLLER_UPDATE, + self._async_handle_any_update, + ) ) - async def async_will_remove_from_hass(self): - """Unsubscribe from updates.""" - if self._undo_dispatcher: - self._undo_dispatcher() - class RachioControllerOnlineBinarySensor(RachioControllerBinarySensor): """Represent a binary sensor that reflects if the controller is online.""" @@ -94,7 +94,7 @@ class RachioControllerOnlineBinarySensor(RachioControllerBinarySensor): @property def name(self) -> str: """Return the name of this sensor including the controller name.""" - return f"{self._controller.name} online" + return self._controller.name @property def unique_id(self) -> str: @@ -124,11 +124,15 @@ class RachioControllerOnlineBinarySensor(RachioControllerBinarySensor): '"%s" reported in unknown state "%s"', self.name, data[KEY_STATUS] ) - def _handle_update(self, *args, **kwargs) -> None: + @callback + def _async_handle_update(self, *args, **kwargs) -> None: """Handle an update to the state of this sensor.""" - if args[0][0][KEY_SUBTYPE] == SUBTYPE_ONLINE: + if ( + args[0][0][KEY_SUBTYPE] == SUBTYPE_ONLINE + or args[0][0][KEY_SUBTYPE] == SUBTYPE_COLD_REBOOT + ): self._state = True elif args[0][0][KEY_SUBTYPE] == SUBTYPE_OFFLINE: self._state = False - self.schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/rachio/config_flow.py b/homeassistant/components/rachio/config_flow.py index 64e78a24f4a..2f5835ad614 100644 --- a/homeassistant/components/rachio/config_flow.py +++ b/homeassistant/components/rachio/config_flow.py @@ -5,7 +5,7 @@ from rachiopy import Rachio import voluptuous as vol from homeassistant import config_entries, core, exceptions -from homeassistant.const import CONF_API_KEY +from homeassistant.const import CONF_API_KEY, HTTP_OK from homeassistant.core import callback from .const import ( @@ -33,13 +33,13 @@ async def validate_input(hass: core.HomeAssistant, data): try: data = await hass.async_add_executor_job(rachio.person.getInfo) _LOGGER.debug("rachio.person.getInfo: %s", data) - if int(data[0][KEY_STATUS]) != 200: + if int(data[0][KEY_STATUS]) != HTTP_OK: raise InvalidAuth rachio_id = data[1][KEY_ID] data = await hass.async_add_executor_job(rachio.person.get, rachio_id) _LOGGER.debug("rachio.person.get: %s", data) - if int(data[0][KEY_STATUS]) != 200: + if int(data[0][KEY_STATUS]) != HTTP_OK: raise CannotConnect username = data[1][KEY_USERNAME] diff --git a/homeassistant/components/rachio/const.py b/homeassistant/components/rachio/const.py index 13e8029b512..3508e24eb4b 100644 --- a/homeassistant/components/rachio/const.py +++ b/homeassistant/components/rachio/const.py @@ -22,6 +22,7 @@ KEY_ID = "id" KEY_NAME = "name" KEY_MODEL = "model" KEY_ON = "on" +KEY_DURATION = "totalDuration" KEY_STATUS = "status" KEY_SUBTYPE = "subType" KEY_SUMMARY = "summary" @@ -33,6 +34,9 @@ KEY_USERNAME = "username" KEY_ZONE_ID = "zoneId" KEY_ZONE_NUMBER = "zoneNumber" KEY_ZONES = "zones" +KEY_SCHEDULES = "scheduleRules" +KEY_FLEX_SCHEDULES = "flexScheduleRules" +KEY_SCHEDULE_ID = "scheduleId" KEY_CUSTOM_SHADE = "customShade" KEY_CUSTOM_CROP = "customCrop" @@ -50,7 +54,10 @@ RACHIO_API_EXCEPTIONS = ( STATUS_ONLINE = "ONLINE" STATUS_OFFLINE = "OFFLINE" -SIGNAL_RACHIO_UPDATE = DOMAIN + "_update" -SIGNAL_RACHIO_CONTROLLER_UPDATE = SIGNAL_RACHIO_UPDATE + "_controller" -SIGNAL_RACHIO_ZONE_UPDATE = SIGNAL_RACHIO_UPDATE + "_zone" -SIGNAL_RACHIO_SCHEDULE_UPDATE = SIGNAL_RACHIO_UPDATE + "_schedule" +SIGNAL_RACHIO_UPDATE = f"{DOMAIN}_update" +SIGNAL_RACHIO_CONTROLLER_UPDATE = f"{SIGNAL_RACHIO_UPDATE}_controller" +SIGNAL_RACHIO_ZONE_UPDATE = f"{SIGNAL_RACHIO_UPDATE}_zone" +SIGNAL_RACHIO_SCHEDULE_UPDATE = f"{SIGNAL_RACHIO_UPDATE}_schedule" + +CONF_WEBHOOK_ID = "webhook_id" +CONF_CLOUDHOOK_URL = "cloudhook_url" diff --git a/homeassistant/components/rachio/device.py b/homeassistant/components/rachio/device.py index 949957ae8ec..f7357a1b2dc 100644 --- a/homeassistant/components/rachio/device.py +++ b/homeassistant/components/rachio/device.py @@ -3,16 +3,18 @@ import logging from typing import Optional -from homeassistant.const import EVENT_HOMEASSISTANT_STOP +from homeassistant.const import EVENT_HOMEASSISTANT_STOP, HTTP_OK from .const import ( KEY_DEVICES, KEY_ENABLED, KEY_EXTERNAL_ID, + KEY_FLEX_SCHEDULES, KEY_ID, KEY_MAC_ADDRESS, KEY_MODEL, KEY_NAME, + KEY_SCHEDULES, KEY_SERIAL_NUMBER, KEY_STATUS, KEY_USERNAME, @@ -38,12 +40,12 @@ class RachioPerson: def setup(self, hass): """Rachio device setup.""" response = self.rachio.person.getInfo() - assert int(response[0][KEY_STATUS]) == 200, "API key error" + assert int(response[0][KEY_STATUS]) == HTTP_OK, "API key error" self._id = response[1][KEY_ID] # Use user ID to get user data data = self.rachio.person.get(self._id) - assert int(data[0][KEY_STATUS]) == 200, "User ID error" + assert int(data[0][KEY_STATUS]) == HTTP_OK, "User ID error" self.username = data[1][KEY_USERNAME] devices = data[1][KEY_DEVICES] for controller in devices: @@ -90,6 +92,8 @@ class RachioIro: self.mac_address = data[KEY_MAC_ADDRESS] self.model = data[KEY_MODEL] self._zones = data[KEY_ZONES] + self._schedules = data[KEY_SCHEDULES] + self._flex_schedules = data[KEY_FLEX_SCHEDULES] self._init_data = data self._webhooks = webhooks _LOGGER.debug('%s has ID "%s"', str(self), self.controller_id) @@ -174,6 +178,14 @@ class RachioIro: return None + def list_schedules(self) -> list: + """Return a list of fixed schedules.""" + return self._schedules + + def list_flex_schedules(self) -> list: + """Return a list of flex schedules.""" + return self._flex_schedules + def stop_watering(self) -> None: """Stop watering all zones connected to this controller.""" self.rachio.device.stopWater(self.controller_id) diff --git a/homeassistant/components/rachio/manifest.json b/homeassistant/components/rachio/manifest.json index 9b293ee5df2..c289d754006 100644 --- a/homeassistant/components/rachio/manifest.json +++ b/homeassistant/components/rachio/manifest.json @@ -2,17 +2,12 @@ "domain": "rachio", "name": "Rachio", "documentation": "https://www.home-assistant.io/integrations/rachio", - "requirements": [ - "rachiopy==0.1.3" - ], - "dependencies": [ - "http" - ], + "requirements": ["rachiopy==0.1.3"], + "dependencies": ["http"], + "after_dependencies": ["cloud"], "codeowners": ["@bdraco"], "config_flow": true, "homekit": { - "models": [ - "Rachio" - ] + "models": ["Rachio"] } } diff --git a/homeassistant/components/rachio/strings.json b/homeassistant/components/rachio/strings.json index 391320289db..1c73e74902c 100644 --- a/homeassistant/components/rachio/strings.json +++ b/homeassistant/components/rachio/strings.json @@ -1,13 +1,10 @@ { "config": { - "title": "Rachio", "step": { "user": { "title": "Connect to your Rachio device", - "description" : "You will need the API Key from https://app.rach.io/. Select 'Account Settings, and then click on 'GET API KEY'.", - "data": { - "api_key": "The API key for the Rachio account." - } + "description": "You will need the API Key from https://app.rach.io/. Select 'Account Settings, and then click on 'GET API KEY'.", + "data": { "api_key": "The API key for the Rachio account." } } }, "error": { @@ -15,9 +12,7 @@ "invalid_auth": "Invalid authentication", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } }, "options": { "step": { diff --git a/homeassistant/components/rachio/switch.py b/homeassistant/components/rachio/switch.py index 5df084a11a4..764f87e924c 100644 --- a/homeassistant/components/rachio/switch.py +++ b/homeassistant/components/rachio/switch.py @@ -4,6 +4,7 @@ from datetime import timedelta import logging from homeassistant.components.switch import SwitchDevice +from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from .const import ( @@ -15,20 +16,26 @@ from .const import ( KEY_CUSTOM_CROP, KEY_CUSTOM_SHADE, KEY_DEVICE_ID, + KEY_DURATION, KEY_ENABLED, KEY_ID, KEY_IMAGE_URL, KEY_NAME, KEY_ON, + KEY_SCHEDULE_ID, KEY_SUBTYPE, KEY_SUMMARY, KEY_ZONE_ID, KEY_ZONE_NUMBER, SIGNAL_RACHIO_CONTROLLER_UPDATE, + SIGNAL_RACHIO_SCHEDULE_UPDATE, SIGNAL_RACHIO_ZONE_UPDATE, ) from .entity import RachioDevice from .webhooks import ( + SUBTYPE_SCHEDULE_COMPLETED, + SUBTYPE_SCHEDULE_STARTED, + SUBTYPE_SCHEDULE_STOPPED, SUBTYPE_SLEEP_MODE_OFF, SUBTYPE_SLEEP_MODE_ON, SUBTYPE_ZONE_COMPLETED, @@ -40,6 +47,9 @@ _LOGGER = logging.getLogger(__name__) ATTR_ZONE_SUMMARY = "Summary" ATTR_ZONE_NUMBER = "Zone number" +ATTR_SCHEDULE_SUMMARY = "Summary" +ATTR_SCHEDULE_ENABLED = "Enabled" +ATTR_SCHEDULE_DURATION = "Duration" async def async_setup_entry(hass, config_entry, async_add_entities): @@ -58,11 +68,14 @@ def _create_entities(hass, config_entry): for controller in person.controllers: entities.append(RachioStandbySwitch(controller)) zones = controller.list_zones() + schedules = controller.list_schedules() + flex_schedules = controller.list_flex_schedules() current_schedule = controller.current_schedule - _LOGGER.debug("Rachio setting up zones: %s", zones) for zone in zones: - _LOGGER.debug("Rachio setting up zone: %s", zone) entities.append(RachioZone(person, controller, zone, current_schedule)) + for sched in schedules + flex_schedules: + entities.append(RachioSchedule(person, controller, sched, current_schedule)) + _LOGGER.debug("Added %s", entities) return entities @@ -92,17 +105,18 @@ class RachioSwitch(RachioDevice, SwitchDevice): def _poll_update(self, data=None) -> bool: """Poll the API.""" - def _handle_any_update(self, *args, **kwargs) -> None: + @callback + def _async_handle_any_update(self, *args, **kwargs) -> None: """Determine whether an update event applies to this device.""" if args[0][KEY_DEVICE_ID] != self._controller.controller_id: # For another device return # For this device - self._handle_update(args, kwargs) + self._async_handle_update(args, kwargs) @abstractmethod - def _handle_update(self, *args, **kwargs) -> None: + def _async_handle_update(self, *args, **kwargs) -> None: """Handle incoming webhook data.""" @@ -136,14 +150,15 @@ class RachioStandbySwitch(RachioSwitch): return not data[KEY_ON] - def _handle_update(self, *args, **kwargs) -> None: + @callback + def _async_handle_update(self, *args, **kwargs) -> None: """Update the state using webhook data.""" if args[0][0][KEY_SUBTYPE] == SUBTYPE_SLEEP_MODE_ON: self._state = True elif args[0][0][KEY_SUBTYPE] == SUBTYPE_SLEEP_MODE_OFF: self._state = False - self.schedule_update_ha_state() + self.async_write_ha_state() def turn_on(self, **kwargs) -> None: """Put the controller in standby mode.""" @@ -155,8 +170,12 @@ class RachioStandbySwitch(RachioSwitch): async def async_added_to_hass(self): """Subscribe to updates.""" - async_dispatcher_connect( - self.hass, SIGNAL_RACHIO_CONTROLLER_UPDATE, self._handle_any_update + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_RACHIO_CONTROLLER_UPDATE, + self._async_handle_any_update, + ) ) @@ -166,7 +185,6 @@ class RachioZone(RachioSwitch): def __init__(self, person, controller, data, current_schedule): """Initialize a new Rachio Zone.""" self._id = data[KEY_ID] - _LOGGER.debug("zone_data: %s", data) self._zone_name = data[KEY_NAME] self._zone_number = data[KEY_ZONE_NUMBER] self._zone_enabled = data[KEY_ENABLED] @@ -174,11 +192,10 @@ class RachioZone(RachioSwitch): self._person = person self._shade_type = data.get(KEY_CUSTOM_SHADE, {}).get(KEY_NAME) self._zone_type = data.get(KEY_CUSTOM_CROP, {}).get(KEY_NAME) - self._summary = str() + self._summary = "" self._current_schedule = current_schedule super().__init__(controller, poll=False) self._state = self.zone_id == self._current_schedule.get(KEY_ZONE_ID) - self._undo_dispatcher = None def __str__(self): """Display the zone as a string.""" @@ -215,7 +232,7 @@ class RachioZone(RachioSwitch): return self._entity_picture @property - def state_attributes(self) -> dict: + def device_state_attributes(self) -> dict: """Return the optional state attributes.""" props = {ATTR_ZONE_NUMBER: self._zone_number, ATTR_ZONE_SUMMARY: self._summary} if self._shade_type: @@ -252,27 +269,112 @@ class RachioZone(RachioSwitch): self._current_schedule = self._controller.current_schedule return self.zone_id == self._current_schedule.get(KEY_ZONE_ID) - def _handle_update(self, *args, **kwargs) -> None: + @callback + def _async_handle_update(self, *args, **kwargs) -> None: """Handle incoming webhook zone data.""" if args[0][KEY_ZONE_ID] != self.zone_id: return - self._summary = kwargs.get(KEY_SUMMARY, str()) + self._summary = kwargs.get(KEY_SUMMARY, "") if args[0][KEY_SUBTYPE] == SUBTYPE_ZONE_STARTED: self._state = True elif args[0][KEY_SUBTYPE] in [SUBTYPE_ZONE_STOPPED, SUBTYPE_ZONE_COMPLETED]: self._state = False - self.schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Subscribe to updates.""" - self._undo_dispatcher = async_dispatcher_connect( - self.hass, SIGNAL_RACHIO_ZONE_UPDATE, self._handle_update + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_RACHIO_ZONE_UPDATE, self._async_handle_update + ) ) - async def async_will_remove_from_hass(self): - """Unsubscribe from updates.""" - if self._undo_dispatcher: - self._undo_dispatcher() + +class RachioSchedule(RachioSwitch): + """Representation of one fixed schedule on the Rachio Iro.""" + + def __init__(self, person, controller, data, current_schedule): + """Initialize a new Rachio Schedule.""" + self._schedule_id = data[KEY_ID] + self._schedule_name = data[KEY_NAME] + self._duration = data[KEY_DURATION] + self._schedule_enabled = data[KEY_ENABLED] + self._summary = data[KEY_SUMMARY] + self._current_schedule = current_schedule + super().__init__(controller, poll=False) + self._state = self._schedule_id == self._current_schedule.get(KEY_SCHEDULE_ID) + + @property + def name(self) -> str: + """Return the friendly name of the schedule.""" + return f"{self._schedule_name} Schedule" + + @property + def unique_id(self) -> str: + """Return a unique id by combining controller id and schedule.""" + return f"{self._controller.controller_id}-schedule-{self._schedule_id}" + + @property + def icon(self) -> str: + """Return the icon to display.""" + return "mdi:water" + + @property + def device_state_attributes(self) -> dict: + """Return the optional state attributes.""" + return { + ATTR_SCHEDULE_SUMMARY: self._summary, + ATTR_SCHEDULE_ENABLED: self.schedule_is_enabled, + ATTR_SCHEDULE_DURATION: f"{round(self._duration / 60)} minutes", + } + + @property + def schedule_is_enabled(self) -> bool: + """Return whether the schedule is allowed to run.""" + return self._schedule_enabled + + def turn_on(self, **kwargs) -> None: + """Start this schedule.""" + + self._controller.rachio.schedulerule.start(self._schedule_id) + _LOGGER.debug( + "Schedule %s started on %s", self.name, self._controller.name, + ) + + def turn_off(self, **kwargs) -> None: + """Stop watering all zones.""" + self._controller.stop_watering() + + def _poll_update(self, data=None) -> bool: + """Poll the API to check whether the schedule is running.""" + self._current_schedule = self._controller.current_schedule + return self._schedule_id == self._current_schedule.get(KEY_SCHEDULE_ID) + + @callback + def _async_handle_update(self, *args, **kwargs) -> None: + """Handle incoming webhook schedule data.""" + # Schedule ID not passed when running individual zones, so we catch that error + try: + if args[0][KEY_SCHEDULE_ID] == self._schedule_id: + if args[0][KEY_SUBTYPE] in [SUBTYPE_SCHEDULE_STARTED]: + self._state = True + elif args[0][KEY_SUBTYPE] in [ + SUBTYPE_SCHEDULE_STOPPED, + SUBTYPE_SCHEDULE_COMPLETED, + ]: + self._state = False + except KeyError: + pass + + self.async_write_ha_state() + + async def async_added_to_hass(self): + """Subscribe to updates.""" + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_RACHIO_SCHEDULE_UPDATE, self._async_handle_update + ) + ) diff --git a/homeassistant/components/rachio/translations/ca.json b/homeassistant/components/rachio/translations/ca.json new file mode 100644 index 00000000000..8d4f9aa7245 --- /dev/null +++ b/homeassistant/components/rachio/translations/ca.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "api_key": "Clau API del compte Rachio." + }, + "description": "Necessitar\u00e0s la clau API de https://app.rach.io/. Selecciona 'Configuraci\u00f3 del compte' (Account Settings) i, a continuaci\u00f3, clica 'Obtenir clau API' (GET API KEY).", + "title": "Connexi\u00f3 amb dispositiu Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Durant quant de temps (en minuts) mantenir engegada una estaci\u00f3 quan l\u2019interruptor s'activa." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/de.json b/homeassistant/components/rachio/translations/de.json new file mode 100644 index 00000000000..f3545c119a1 --- /dev/null +++ b/homeassistant/components/rachio/translations/de.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "api_key": "Der API-Schl\u00fcssel f\u00fcr das Rachio-Konto." + }, + "description": "Sie ben\u00f6tigen den API-Schl\u00fcssel von https://app.rach.io/. W\u00e4hlen Sie \"Kontoeinstellungen\" und klicken Sie dann auf \"API-SCHL\u00dcSSEL ERHALTEN\".", + "title": "Stellen Sie eine Verbindung zu Ihrem Rachio-Ger\u00e4t her" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Wie lange, in Minuten, um eine Station einzuschalten, wenn der Schalter aktiviert ist." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/en.json b/homeassistant/components/rachio/translations/en.json new file mode 100644 index 00000000000..364ca15b03f --- /dev/null +++ b/homeassistant/components/rachio/translations/en.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "api_key": "The API key for the Rachio account." + }, + "description": "You will need the API Key from https://app.rach.io/. Select 'Account Settings, and then click on 'GET API KEY'.", + "title": "Connect to your Rachio device" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "For how long, in minutes, to turn on a station when the switch is enabled." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/es.json b/homeassistant/components/rachio/translations/es.json new file mode 100644 index 00000000000..ee7bdfeb26d --- /dev/null +++ b/homeassistant/components/rachio/translations/es.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "api_key": "La clave API para la cuenta Rachio." + }, + "description": "Necesitar\u00e1s la clave API de https://app.rach.io/. Selecciona 'Account Settings' y luego haz clic en 'GET API KEY'.", + "title": "Conectar a tu dispositivo Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Durante cu\u00e1nto tiempo, en minutos, permanece encendida una estaci\u00f3n cuando el interruptor est\u00e1 activado." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/fr.json b/homeassistant/components/rachio/translations/fr.json new file mode 100644 index 00000000000..2278c7d3e1b --- /dev/null +++ b/homeassistant/components/rachio/translations/fr.json @@ -0,0 +1,30 @@ +{ + "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", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "api_key": "La cl\u00e9 API pour le compte Rachio." + }, + "description": "Vous aurez besoin de la cl\u00e9 API de https://app.rach.io/. S\u00e9lectionnez \"Param\u00e8tres du compte, puis cliquez sur \"GET API KEY \".", + "title": "Connectez-vous \u00e0 votre appareil Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Le temps, en minutes, n\u00e9cessaire pour allumer une station lorsque l'interrupteur est activ\u00e9." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/it.json b/homeassistant/components/rachio/translations/it.json new file mode 100644 index 00000000000..5a9c7618b00 --- /dev/null +++ b/homeassistant/components/rachio/translations/it.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "api_key": "Chiave API per l'account Rachio." + }, + "description": "\u00c8 necessaria la chiave API di https://app.rach.io/. Selezionare 'Impostazioni Account', quindi fare clic su 'GET API KEY'.", + "title": "Connettiti al tuo dispositivo Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Per quanto tempo, in minuti, accendere una stazione quando l'interruttore \u00e8 abilitato." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/ko.json b/homeassistant/components/rachio/translations/ko.json new file mode 100644 index 00000000000..1c3c8120d3b --- /dev/null +++ b/homeassistant/components/rachio/translations/ko.json @@ -0,0 +1,30 @@ +{ + "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", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "api_key": "Rachio \uacc4\uc815\uc758 API \ud0a4." + }, + "description": "https://app.rach.io/ \uc758 API \ud0a4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uacc4\uc815 \uc124\uc815\uc744 \uc120\ud0dd\ud55c \ub2e4\uc74c 'GET API KEY ' \ub97c \ud074\ub9ad\ud574\uc8fc\uc138\uc694.", + "title": "Rachio \uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "\uc2a4\uc704\uce58\uac00 \ud65c\uc131\ud654\ub41c \uacbd\uc6b0 \uc2a4\ud14c\uc774\uc158\uc744 \ucf1c\ub294 \uc2dc\uac04(\ubd84) \uc785\ub2c8\ub2e4." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/lb.json b/homeassistant/components/rachio/translations/lb.json new file mode 100644 index 00000000000..1fbe2c7c154 --- /dev/null +++ b/homeassistant/components/rachio/translations/lb.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "api_key": "API Schl\u00ebssel fir den Racchio Kont." + }, + "description": "Du brauchs een API Schl\u00ebssel vun https://app.rach.io/. Wiel 'Account Settings', a klick dann op 'GET API KEY'.", + "title": "Mam Rachio Apparat verbannen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Fir w\u00e9i laang, a Minutten, soll eng Statioun ugeschalt gi wann de Schalter ageschalt ass." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/no.json b/homeassistant/components/rachio/translations/no.json new file mode 100644 index 00000000000..84872e89434 --- /dev/null +++ b/homeassistant/components/rachio/translations/no.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "api_key": "API-n\u00f8kkelen for Rachio-kontoen." + }, + "description": "Du trenger API-n\u00f8kkelen fra https://app.rach.io/. Velg \"Kontoinnstillinger\", og klikk deretter p\u00e5 \"GET API KEY\".", + "title": "Koble til Rachio-enheten din" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Hvor lenge, i minutter, for \u00e5 sl\u00e5 p\u00e5 en stasjon n\u00e5r bryteren er aktivert." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/pl.json b/homeassistant/components/rachio/translations/pl.json new file mode 100644 index 00000000000..9d68b88d015 --- /dev/null +++ b/homeassistant/components/rachio/translations/pl.json @@ -0,0 +1,30 @@ +{ + "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.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API dla konta Rachio." + }, + "description": "B\u0119dziesz potrzebowa\u0142 klucza API ze strony https://app.rach.io/. Wybierz 'Account Settings', a nast\u0119pnie kliknij 'GET API KEY'.", + "title": "Po\u0142\u0105czenie z urz\u0105dzeniem Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Jak d\u0142ugo, w minutach, nale\u017cy w\u0142\u0105czy\u0107 stacj\u0119, gdy prze\u0142\u0105cznik jest w\u0142\u0105czony." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/ru.json b/homeassistant/components/rachio/translations/ru.json new file mode 100644 index 00000000000..fce3d6d3a14 --- /dev/null +++ b/homeassistant/components/rachio/translations/ru.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Rachio" + }, + "description": "\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0443\u0436\u0435\u043d \u043a\u043b\u044e\u0447 API \u043e\u0442 https://app.rach.io/. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 'Account Settings', \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 'GET API KEY'.", + "title": "Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "\u041d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d (\u0432 \u043c\u0438\u043d\u0443\u0442\u0430\u0445)." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/sl.json b/homeassistant/components/rachio/translations/sl.json new file mode 100644 index 00000000000..a7febddee05 --- /dev/null +++ b/homeassistant/components/rachio/translations/sl.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "api_key": "Klju\u010d API za ra\u010dun Rachio." + }, + "description": "Potrebovali boste API klju\u010d iz https://app.rach.io/. Izberite ' nastavitve ra\u010duna in kliknite 'get API KEY'.", + "title": "Pove\u017eite se z napravo Rachio" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "Kako dolgo, v minutah, da vklopite postajo, ko je stikalo omogo\u010deno." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/translations/zh-Hant.json b/homeassistant/components/rachio/translations/zh-Hant.json new file mode 100644 index 00000000000..59e5115e2e6 --- /dev/null +++ b/homeassistant/components/rachio/translations/zh-Hant.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "api_key": "Rachio \u5e33\u865f API \u91d1\u9470\u3002" + }, + "description": "\u5c07\u6703\u9700\u8981\u7531 https://app.rach.io/ \u53d6\u5f97 App \u5bc6\u9470\u3002\u9078\u64c7\u5e33\u865f\u8a2d\u5b9a\uff08Account Settings\uff09\u3001\u4e26\u9078\u64c7\u7372\u5f97\u5bc6\u9470\uff08GET API KEY\uff09\u3002", + "title": "\u9023\u7dda\u81f3 Rachio \u8a2d\u5099" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "manual_run_mins": "\u7576\u958b\u95dc\u958b\u555f\u5f8c\u3001\u5de5\u4f5c\u7ad9\u6240\u8981\u958b\u555f\u7684\u5206\u9418\u6578\u3002" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rachio/webhooks.py b/homeassistant/components/rachio/webhooks.py index c12f2ccfd3e..a5960b8b28b 100644 --- a/homeassistant/components/rachio/webhooks.py +++ b/homeassistant/components/rachio/webhooks.py @@ -4,11 +4,13 @@ import logging from aiohttp import web -from homeassistant.components.http import HomeAssistantView from homeassistant.const import URL_API +from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_send from .const import ( + CONF_CLOUDHOOK_URL, + CONF_WEBHOOK_ID, DOMAIN, KEY_EXTERNAL_ID, KEY_TYPE, @@ -50,7 +52,11 @@ SUBTYPE_ZONE_CYCLING = "ZONE_CYCLING" SUBTYPE_ZONE_CYCLING_COMPLETED = "ZONE_CYCLING_COMPLETED" # Webhook callbacks -LISTEN_EVENT_TYPES = ["DEVICE_STATUS_EVENT", "ZONE_STATUS_EVENT"] +LISTEN_EVENT_TYPES = [ + "DEVICE_STATUS_EVENT", + "ZONE_STATUS_EVENT", + "SCHEDULE_STATUS_EVENT", +] WEBHOOK_CONST_ID = "homeassistant.rachio:" WEBHOOK_PATH = URL_API + DOMAIN @@ -64,28 +70,17 @@ SIGNAL_MAP = { _LOGGER = logging.getLogger(__name__) -class RachioWebhookView(HomeAssistantView): - """Provide a page for the server to call.""" +@callback +def async_register_webhook(hass, webhook_id, entry_id): + """Register a webhook.""" - requires_auth = False # Handled separately - - def __init__(self, entry_id, webhook_url): - """Initialize the instance of the view.""" - self._entry_id = entry_id - self.url = webhook_url - self.name = webhook_url[1:].replace("/", ":") - _LOGGER.debug( - "Initialize webhook at url: %s, with name %s", self.url, self.name - ) - - async def post(self, request) -> web.Response: + async def _async_handle_rachio_webhook(hass, webhook_id, request): """Handle webhook calls from the server.""" - hass = request.app["hass"] data = await request.json() try: - auth = data.get(KEY_EXTERNAL_ID, str()).split(":")[1] - assert auth == hass.data[DOMAIN][self._entry_id].rachio.webhook_auth + auth = data.get(KEY_EXTERNAL_ID, "").split(":")[1] + assert auth == hass.data[DOMAIN][entry_id].rachio.webhook_auth except (AssertionError, IndexError): return web.Response(status=web.HTTPForbidden.status_code) @@ -94,3 +89,39 @@ class RachioWebhookView(HomeAssistantView): async_dispatcher_send(hass, SIGNAL_MAP[update_type], data) return web.Response(status=web.HTTPNoContent.status_code) + + hass.components.webhook.async_register( + DOMAIN, "Rachio", webhook_id, _async_handle_rachio_webhook + ) + + +async def async_get_or_create_registered_webhook_id_and_url(hass, entry): + """Generate webhook ID.""" + config = entry.data.copy() + + updated_config = False + webhook_url = None + + webhook_id = config.get(CONF_WEBHOOK_ID) + if not webhook_id: + webhook_id = hass.components.webhook.async_generate_id() + config[CONF_WEBHOOK_ID] = webhook_id + updated_config = True + + if hass.components.cloud.async_active_subscription(): + cloudhook_url = config.get(CONF_CLOUDHOOK_URL) + if not cloudhook_url: + cloudhook_url = await hass.components.cloud.async_create_cloudhook( + webhook_id + ) + config[CONF_CLOUDHOOK_URL] = cloudhook_url + updated_config = True + webhook_url = cloudhook_url + + if not webhook_url: + webhook_url = hass.components.webhook.async_generate_url(webhook_id) + + if updated_config: + hass.config_entries.async_update_entry(entry, data=config) + + return webhook_id, webhook_url diff --git a/homeassistant/components/radarr/manifest.json b/homeassistant/components/radarr/manifest.json index 2683525e7b4..8f752f03500 100644 --- a/homeassistant/components/radarr/manifest.json +++ b/homeassistant/components/radarr/manifest.json @@ -2,7 +2,5 @@ "domain": "radarr", "name": "Radarr", "documentation": "https://www.home-assistant.io/integrations/radarr", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/radarr/sensor.py b/homeassistant/components/radarr/sensor.py index 6cfdd53653d..27365271014 100644 --- a/homeassistant/components/radarr/sensor.py +++ b/homeassistant/components/radarr/sensor.py @@ -23,6 +23,7 @@ from homeassistant.const import ( DATA_TERABYTES, DATA_YOTTABYTES, DATA_ZETTABYTES, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -52,11 +53,11 @@ SENSOR_TYPES = { } ENDPOINTS = { - "diskspace": "http{0}://{1}:{2}/{3}api/diskspace", - "upcoming": "http{0}://{1}:{2}/{3}api/calendar?start={4}&end={5}", - "movies": "http{0}://{1}:{2}/{3}api/movie", - "commands": "http{0}://{1}:{2}/{3}api/command", - "status": "http{0}://{1}:{2}/{3}api/system/status", + "diskspace": "{0}://{1}:{2}/{3}api/diskspace", + "upcoming": "{0}://{1}:{2}/{3}api/calendar?start={4}&end={5}", + "movies": "{0}://{1}:{2}/{3}api/movie", + "commands": "{0}://{1}:{2}/{3}api/command", + "status": "{0}://{1}:{2}/{3}api/system/status", } # Support to Yottabytes for the future, why not @@ -105,11 +106,11 @@ class RadarrSensor(Entity): self.port = conf.get(CONF_PORT) self.urlbase = conf.get(CONF_URLBASE) if self.urlbase: - self.urlbase = "{}/".format(self.urlbase.strip("/")) + self.urlbase = f"{self.urlbase.strip('/')}/" self.apikey = conf.get(CONF_API_KEY) self.included = conf.get(CONF_INCLUDED) self.days = int(conf.get(CONF_DAYS)) - self.ssl = "s" if conf.get(CONF_SSL) else "" + self.ssl = "https" if conf.get(CONF_SSL) else "http" self._state = None self.data = [] self._tz = timezone(str(hass.config.time_zone)) @@ -193,7 +194,7 @@ class RadarrSensor(Entity): self._state = None return - if res.status_code == 200: + if res.status_code == HTTP_OK: if self.type in ["upcoming", "movies", "commands"]: self.data = res.json() self._state = len(self.data) diff --git a/homeassistant/components/radiotherm/climate.py b/homeassistant/components/radiotherm/climate.py index cba7a736df2..acbd6fe7e5e 100644 --- a/homeassistant/components/radiotherm/climate.py +++ b/homeassistant/components/radiotherm/climate.py @@ -198,7 +198,7 @@ class RadioThermostat(ClimateDevice): def set_fan_mode(self, fan_mode): """Turn fan on/off.""" - code = FAN_MODE_TO_CODE.get(fan_mode, None) + code = FAN_MODE_TO_CODE.get(fan_mode) if code is not None: self.device.fmode = code diff --git a/homeassistant/components/radiotherm/manifest.json b/homeassistant/components/radiotherm/manifest.json index 34aebee3e1d..6d4567c59d6 100644 --- a/homeassistant/components/radiotherm/manifest.json +++ b/homeassistant/components/radiotherm/manifest.json @@ -3,6 +3,5 @@ "name": "Radio Thermostat", "documentation": "https://www.home-assistant.io/integrations/radiotherm", "requirements": ["radiotherm==2.0.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rainbird/manifest.json b/homeassistant/components/rainbird/manifest.json index 4705ba30298..cf604714106 100644 --- a/homeassistant/components/rainbird/manifest.json +++ b/homeassistant/components/rainbird/manifest.json @@ -3,6 +3,5 @@ "name": "Rain Bird", "documentation": "https://www.home-assistant.io/integrations/rainbird", "requirements": ["pyrainbird==0.4.1"], - "dependencies": [], "codeowners": ["@konikvranik"] } diff --git a/homeassistant/components/rainbird/services.yaml b/homeassistant/components/rainbird/services.yaml index cdac7171a25..ed1ec8b62df 100644 --- a/homeassistant/components/rainbird/services.yaml +++ b/homeassistant/components/rainbird/services.yaml @@ -3,7 +3,7 @@ start_irrigation: fields: entity_id: description: Name of a single irrigation to turn on - example: 'switch.sprinkler_1' + example: "switch.sprinkler_1" duration: description: Duration for this sprinkler to be turned on example: 1 diff --git a/homeassistant/components/rainbird/switch.py b/homeassistant/components/rainbird/switch.py index cb4ac83090f..7f589401e3c 100644 --- a/homeassistant/components/rainbird/switch.py +++ b/homeassistant/components/rainbird/switch.py @@ -45,10 +45,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): name = zone_config.get(CONF_FRIENDLY_NAME) devices.append( RainBirdSwitch( - controller, - zone, - time, - name if name else "Sprinkler {}".format(zone), + controller, zone, time, name if name else f"Sprinkler {zone}", ) ) diff --git a/homeassistant/components/raincloud/__init__.py b/homeassistant/components/raincloud/__init__.py index 4f9ae7fb733..17faea4495f 100644 --- a/homeassistant/components/raincloud/__init__.py +++ b/homeassistant/components/raincloud/__init__.py @@ -107,9 +107,7 @@ def setup(hass, config): except (ConnectTimeout, HTTPError) as ex: _LOGGER.error("Unable to connect to Rain Cloud service: %s", str(ex)) hass.components.persistent_notification.create( - "Error: {}
" - "You will need to restart hass after fixing." - "".format(ex), + f"Error: {ex}
" "You will need to restart hass after fixing.", title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, ) @@ -142,7 +140,7 @@ class RainCloudEntity(Entity): """Initialize the RainCloud entity.""" self.data = data self._sensor_type = sensor_type - self._name = "{0} {1}".format(self.data.name, KEY_MAP.get(self._sensor_type)) + self._name = f"{self.data.name} {KEY_MAP.get(self._sensor_type)}" self._state = None @property @@ -152,8 +150,10 @@ class RainCloudEntity(Entity): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect( - self.hass, SIGNAL_UPDATE_RAINCLOUD, self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_UPDATE_RAINCLOUD, self._update_callback + ) ) def _update_callback(self): diff --git a/homeassistant/components/raincloud/manifest.json b/homeassistant/components/raincloud/manifest.json index 79d197969d4..a0edaa87825 100644 --- a/homeassistant/components/raincloud/manifest.json +++ b/homeassistant/components/raincloud/manifest.json @@ -3,6 +3,5 @@ "name": "Melnor RainCloud", "documentation": "https://www.home-assistant.io/integrations/raincloud", "requirements": ["raincloudy==0.0.7"], - "dependencies": [], "codeowners": ["@vanstinator"] } diff --git a/homeassistant/components/rainforest_eagle/manifest.json b/homeassistant/components/rainforest_eagle/manifest.json index 0649dfded99..bae9cbe4ccb 100644 --- a/homeassistant/components/rainforest_eagle/manifest.json +++ b/homeassistant/components/rainforest_eagle/manifest.json @@ -2,11 +2,6 @@ "domain": "rainforest_eagle", "name": "Rainforest Eagle-200", "documentation": "https://www.home-assistant.io/integrations/rainforest_eagle", - "requirements": [ - "eagle200_reader==0.2.4", - "uEagle==0.0.1" - ], - "dependencies": [], - "codeowners": ["@gtdiehl", - "@jcalbert"] + "requirements": ["eagle200_reader==0.2.4", "uEagle==0.0.1"], + "codeowners": ["@gtdiehl", "@jcalbert"] } diff --git a/homeassistant/components/rainmachine/.translations/bg.json b/homeassistant/components/rainmachine/.translations/bg.json deleted file mode 100644 index 03f0fe0e209..00000000000 --- a/homeassistant/components/rainmachine/.translations/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d", - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" - }, - "step": { - "user": { - "data": { - "ip_address": "\u0410\u0434\u0440\u0435\u0441", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/ca.json b/homeassistant/components/rainmachine/.translations/ca.json deleted file mode 100644 index 494b1ecc69c..00000000000 --- a/homeassistant/components/rainmachine/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest controlador RainMachine ja est\u00e0 configurat." - }, - "error": { - "identifier_exists": "Aquest compte ja est\u00e0 registrat", - "invalid_credentials": "Credencials inv\u00e0lides" - }, - "step": { - "user": { - "data": { - "ip_address": "Nom de l'amfitri\u00f3 o adre\u00e7a IP", - "password": "Contrasenya", - "port": "Port" - }, - "title": "Introdueix la teva informaci\u00f3" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/cs.json b/homeassistant/components/rainmachine/.translations/cs.json deleted file mode 100644 index 919956b8c34..00000000000 --- a/homeassistant/components/rainmachine/.translations/cs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n", - "invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje" - }, - "step": { - "user": { - "data": { - "ip_address": "N\u00e1zev hostitele nebo adresa IP", - "password": "Heslo", - "port": "Port" - }, - "title": "Vypl\u0148te va\u0161e \u00fadaje" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/da.json b/homeassistant/components/rainmachine/.translations/da.json deleted file mode 100644 index fe53a86993d..00000000000 --- a/homeassistant/components/rainmachine/.translations/da.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne RainMachine-controller er allerede konfigureret." - }, - "error": { - "identifier_exists": "Konto er allerede registreret", - "invalid_credentials": "Ugyldige legitimationsoplysninger" - }, - "step": { - "user": { - "data": { - "ip_address": "V\u00e6rtsnavn eller IP-adresse", - "password": "Adgangskode", - "port": "Port" - }, - "title": "Udfyld dine oplysninger" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/de.json b/homeassistant/components/rainmachine/.translations/de.json deleted file mode 100644 index 257a0908c6a..00000000000 --- a/homeassistant/components/rainmachine/.translations/de.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser RainMachine-Kontroller ist bereits konfiguriert." - }, - "error": { - "identifier_exists": "Konto bereits registriert", - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" - }, - "step": { - "user": { - "data": { - "ip_address": "Hostname oder IP-Adresse", - "password": "Passwort", - "port": "Port" - }, - "title": "Informationen eingeben" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/en.json b/homeassistant/components/rainmachine/.translations/en.json deleted file mode 100644 index 4ad5bfd7c0d..00000000000 --- a/homeassistant/components/rainmachine/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This RainMachine controller is already configured." - }, - "error": { - "identifier_exists": "Account already registered", - "invalid_credentials": "Invalid credentials" - }, - "step": { - "user": { - "data": { - "ip_address": "Hostname or IP Address", - "password": "Password", - "port": "Port" - }, - "title": "Fill in your information" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/es-419.json b/homeassistant/components/rainmachine/.translations/es-419.json deleted file mode 100644 index 2cb49dc0ac1..00000000000 --- a/homeassistant/components/rainmachine/.translations/es-419.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Cuenta ya registrada", - "invalid_credentials": "Credenciales no v\u00e1lidas" - }, - "step": { - "user": { - "data": { - "ip_address": "Nombre de host o direcci\u00f3n IP", - "password": "Contrase\u00f1a", - "port": "Puerto" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/es.json b/homeassistant/components/rainmachine/.translations/es.json deleted file mode 100644 index 518ff39f8bf..00000000000 --- a/homeassistant/components/rainmachine/.translations/es.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este controlador RainMachine ya est\u00e1 configurado." - }, - "error": { - "identifier_exists": "Cuenta ya registrada", - "invalid_credentials": "Credenciales no v\u00e1lidas" - }, - "step": { - "user": { - "data": { - "ip_address": "Nombre de host o direcci\u00f3n IP", - "password": "Contrase\u00f1a", - "port": "Puerto" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/fr.json b/homeassistant/components/rainmachine/.translations/fr.json deleted file mode 100644 index 48ae0c049c2..00000000000 --- a/homeassistant/components/rainmachine/.translations/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce contr\u00f4leur RainMachine est d\u00e9j\u00e0 configur\u00e9." - }, - "error": { - "identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9", - "invalid_credentials": "Informations d'identification invalides" - }, - "step": { - "user": { - "data": { - "ip_address": "Nom d'h\u00f4te ou adresse IP", - "password": "Mot de passe", - "port": "Port" - }, - "title": "Veuillez saisir vos informations" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/hu.json b/homeassistant/components/rainmachine/.translations/hu.json deleted file mode 100644 index d95ec9eaa1b..00000000000 --- a/homeassistant/components/rainmachine/.translations/hu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "A fi\u00f3k m\u00e1r regisztr\u00e1lt", - "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" - }, - "step": { - "user": { - "data": { - "ip_address": "Hosztn\u00e9v vagy IP c\u00edm", - "password": "Jelsz\u00f3", - "port": "Port" - }, - "title": "T\u00f6ltsd ki az adataid" - } - }, - "title": "Rainmachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/it.json b/homeassistant/components/rainmachine/.translations/it.json deleted file mode 100644 index e0bdd7a2e1d..00000000000 --- a/homeassistant/components/rainmachine/.translations/it.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo controller RainMachine \u00e8 gi\u00e0 configurato." - }, - "error": { - "identifier_exists": "Account gi\u00e0 registrato", - "invalid_credentials": "Credenziali non valide" - }, - "step": { - "user": { - "data": { - "ip_address": "Nome dell'host o indirizzo IP", - "password": "Password", - "port": "Porta" - }, - "title": "Inserisci i tuoi dati" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/ko.json b/homeassistant/components/rainmachine/.translations/ko.json deleted file mode 100644 index 66d6cb0b740..00000000000 --- a/homeassistant/components/rainmachine/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 RainMachine \ucee8\ud2b8\ub864\ub7ec\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_credentials": "\ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "ip_address": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8" - }, - "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/lb.json b/homeassistant/components/rainmachine/.translations/lb.json deleted file mode 100644 index be25e92080a..00000000000 --- a/homeassistant/components/rainmachine/.translations/lb.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse RainMachine Kontroller ass scho konfigur\u00e9iert." - }, - "error": { - "identifier_exists": "Konto ass scho registr\u00e9iert", - "invalid_credentials": "Ong\u00eblteg Login Informatioune" - }, - "step": { - "user": { - "data": { - "ip_address": "Host Numm oder IP Adresse", - "password": "Passwuert", - "port": "Port" - }, - "title": "F\u00ebllt \u00e4r Informatiounen aus" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/nl.json b/homeassistant/components/rainmachine/.translations/nl.json deleted file mode 100644 index 2e1e62c683c..00000000000 --- a/homeassistant/components/rainmachine/.translations/nl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Account bestaat al", - "invalid_credentials": "Ongeldige gebruikersgegevens" - }, - "step": { - "user": { - "data": { - "ip_address": "Hostnaam of IP-adres", - "password": "Wachtwoord", - "port": "Poort" - }, - "title": "Vul uw gegevens in" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/nn.json b/homeassistant/components/rainmachine/.translations/nn.json deleted file mode 100644 index 14b3c7e4dc4..00000000000 --- a/homeassistant/components/rainmachine/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/no.json b/homeassistant/components/rainmachine/.translations/no.json deleted file mode 100644 index 34b74f56c49..00000000000 --- a/homeassistant/components/rainmachine/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne RainMachine-kontrolleren er allerede konfigurert." - }, - "error": { - "identifier_exists": "Konto er allerede registrert", - "invalid_credentials": "Ugyldig legitimasjon" - }, - "step": { - "user": { - "data": { - "ip_address": "Vertsnavn eller IP-adresse", - "password": "Passord", - "port": "" - }, - "title": "Fyll ut informasjonen din" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/pl.json b/homeassistant/components/rainmachine/.translations/pl.json deleted file mode 100644 index 5e813243f13..00000000000 --- a/homeassistant/components/rainmachine/.translations/pl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ten kontroler RainMachine jest ju\u017c skonfigurowany." - }, - "error": { - "identifier_exists": "Konto jest ju\u017c zarejestrowane.", - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" - }, - "step": { - "user": { - "data": { - "ip_address": "Nazwa hosta lub adres IP", - "password": "Has\u0142o", - "port": "Port" - }, - "title": "Wprowad\u017a dane" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/pt-BR.json b/homeassistant/components/rainmachine/.translations/pt-BR.json deleted file mode 100644 index 8fdf05bd3c6..00000000000 --- a/homeassistant/components/rainmachine/.translations/pt-BR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Conta j\u00e1 cadastrada", - "invalid_credentials": "Credenciais inv\u00e1lidas" - }, - "step": { - "user": { - "data": { - "ip_address": "Nome do host ou endere\u00e7o IP", - "password": "Senha", - "port": "Porta" - }, - "title": "Preencha suas informa\u00e7\u00f5es" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/pt.json b/homeassistant/components/rainmachine/.translations/pt.json deleted file mode 100644 index 12e77ed8e46..00000000000 --- a/homeassistant/components/rainmachine/.translations/pt.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Conta j\u00e1 registada", - "invalid_credentials": "Credenciais inv\u00e1lidas" - }, - "step": { - "user": { - "data": { - "ip_address": "Nome servidor ou endere\u00e7o IP", - "password": "Palavra-passe", - "port": "Porta" - }, - "title": "Preencha as suas informa\u00e7\u00f5es" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/ru.json b/homeassistant/components/rainmachine/.translations/ru.json deleted file mode 100644 index e1bce5874e3..00000000000 --- a/homeassistant/components/rainmachine/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." - }, - "step": { - "user": { - "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", - "port": "\u041f\u043e\u0440\u0442" - }, - "title": "RainMachine" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/sl.json b/homeassistant/components/rainmachine/.translations/sl.json deleted file mode 100644 index 68c466150f1..00000000000 --- a/homeassistant/components/rainmachine/.translations/sl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta regulator RainMachine je \u017ee konfiguriran." - }, - "error": { - "identifier_exists": "Ra\u010dun \u017ee registriran", - "invalid_credentials": "Neveljavne poverilnice" - }, - "step": { - "user": { - "data": { - "ip_address": "Ime gostitelja ali naslov IP", - "password": "Geslo", - "port": "port" - }, - "title": "Izpolnite svoje podatke" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/sv.json b/homeassistant/components/rainmachine/.translations/sv.json deleted file mode 100644 index 864c1105446..00000000000 --- a/homeassistant/components/rainmachine/.translations/sv.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denna RainMachine-enhet \u00e4r redan konfigurerad" - }, - "error": { - "identifier_exists": "Kontot \u00e4r redan registrerat", - "invalid_credentials": "Ogiltiga autentiseringsuppgifter" - }, - "step": { - "user": { - "data": { - "ip_address": "V\u00e4rdnamn eller IP-adress", - "password": "L\u00f6senord", - "port": "Port" - }, - "title": "Fyll i dina uppgifter" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/zh-Hans.json b/homeassistant/components/rainmachine/.translations/zh-Hans.json deleted file mode 100644 index f3d8308fabf..00000000000 --- a/homeassistant/components/rainmachine/.translations/zh-Hans.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u8d26\u6237\u5df2\u6ce8\u518c", - "invalid_credentials": "\u65e0\u6548\u7684\u8eab\u4efd\u8ba4\u8bc1" - }, - "step": { - "user": { - "data": { - "ip_address": "\u4e3b\u673a\u540d\u6216IP\u5730\u5740", - "password": "\u5bc6\u7801", - "port": "\u7aef\u53e3" - }, - "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/zh-Hant.json b/homeassistant/components/rainmachine/.translations/zh-Hant.json deleted file mode 100644 index 3d9663a9a79..00000000000 --- a/homeassistant/components/rainmachine/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64 RainMachine \u63a7\u5236\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a", - "invalid_credentials": "\u6191\u8b49\u7121\u6548" - }, - "step": { - "user": { - "data": { - "ip_address": "\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0" - }, - "title": "\u586b\u5beb\u8cc7\u8a0a" - } - }, - "title": "RainMachine" - } -} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/__init__.py b/homeassistant/components/rainmachine/__init__.py index 92c14d0e0cb..2e32d0ed43d 100644 --- a/homeassistant/components/rainmachine/__init__.py +++ b/homeassistant/components/rainmachine/__init__.py @@ -410,7 +410,6 @@ class RainMachineEntity(Entity): """Initialize.""" self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION} self._device_class = None - self._dispatcher_handlers = [] self._name = None self.rainmachine = rainmachine @@ -426,9 +425,9 @@ class RainMachineEntity(Entity): "identifiers": {(DOMAIN, self.rainmachine.controller.mac)}, "name": self.rainmachine.controller.name, "manufacturer": "RainMachine", - "model": "Version {0} (API: {1})".format( - self.rainmachine.controller.hardware_version, - self.rainmachine.controller.api_version, + "model": ( + f"Version {self.rainmachine.controller.hardware_version} " + f"(API: {self.rainmachine.controller.api_version})" ), "sw_version": self.rainmachine.controller.software_version, } @@ -454,12 +453,6 @@ class RainMachineEntity(Entity): self.update_from_latest_data() self.async_write_ha_state() - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - for handler in self._dispatcher_handlers: - handler() - self._dispatcher_handlers = [] - @callback def update_from_latest_data(self): """Update the entity.""" diff --git a/homeassistant/components/rainmachine/binary_sensor.py b/homeassistant/components/rainmachine/binary_sensor.py index 409ad0c9980..e5fdc8d6b46 100644 --- a/homeassistant/components/rainmachine/binary_sensor.py +++ b/homeassistant/components/rainmachine/binary_sensor.py @@ -120,13 +120,13 @@ class RainMachineBinarySensor(RainMachineEntity, BinarySensorDevice): @property def unique_id(self) -> str: """Return a unique, Home Assistant friendly identifier for this entity.""" - return "{0}_{1}".format( + return "{}_{}".format( self.rainmachine.device_mac.replace(":", ""), self._sensor_type ) async def async_added_to_hass(self): """Register callbacks.""" - self._dispatcher_handlers.append( + self.async_on_remove( async_dispatcher_connect(self.hass, SENSOR_UPDATE_TOPIC, self._update_state) ) await self.rainmachine.async_register_sensor_api_interest(self._api_category) diff --git a/homeassistant/components/rainmachine/manifest.json b/homeassistant/components/rainmachine/manifest.json index 2c8a770137d..aed0f030c25 100644 --- a/homeassistant/components/rainmachine/manifest.json +++ b/homeassistant/components/rainmachine/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/rainmachine", "requirements": ["regenmaschine==1.5.1"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/rainmachine/sensor.py b/homeassistant/components/rainmachine/sensor.py index 371ba00dfd0..6f87c34d607 100644 --- a/homeassistant/components/rainmachine/sensor.py +++ b/homeassistant/components/rainmachine/sensor.py @@ -1,6 +1,7 @@ """This platform provides support for sensor data from RainMachine.""" import logging +from homeassistant.const import TEMP_CELSIUS from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -57,7 +58,7 @@ SENSORS = { TYPE_FREEZE_TEMP: ( "Freeze Protect Temperature", "mdi:thermometer", - "°C", + TEMP_CELSIUS, "temperature", True, DATA_RESTRICTIONS_UNIVERSAL, @@ -84,7 +85,7 @@ async def async_setup_entry(hass, entry, async_add_entities): sensor_type, (name, icon, unit, device_class, enabled_by_default, api_category), ) in SENSORS.items() - ], + ] ) @@ -132,7 +133,7 @@ class RainMachineSensor(RainMachineEntity): @property def unique_id(self) -> str: """Return a unique, Home Assistant friendly identifier for this entity.""" - return "{0}_{1}".format( + return "{}_{}".format( self.rainmachine.device_mac.replace(":", ""), self._sensor_type ) @@ -143,7 +144,7 @@ class RainMachineSensor(RainMachineEntity): async def async_added_to_hass(self): """Register callbacks.""" - self._dispatcher_handlers.append( + self.async_on_remove( async_dispatcher_connect(self.hass, SENSOR_UPDATE_TOPIC, self._update_state) ) await self.rainmachine.async_register_sensor_api_interest(self._api_category) diff --git a/homeassistant/components/rainmachine/services.yaml b/homeassistant/components/rainmachine/services.yaml index 288161968de..e66bd2a1d14 100644 --- a/homeassistant/components/rainmachine/services.yaml +++ b/homeassistant/components/rainmachine/services.yaml @@ -1,6 +1,4 @@ # Describes the format for available RainMachine services - ---- disable_program: description: Disable a program. fields: diff --git a/homeassistant/components/rainmachine/strings.json b/homeassistant/components/rainmachine/strings.json index 7195cce2e31..0d1eabc1cde 100644 --- a/homeassistant/components/rainmachine/strings.json +++ b/homeassistant/components/rainmachine/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "RainMachine", "step": { "user": { "title": "Fill in your information", diff --git a/homeassistant/components/rainmachine/switch.py b/homeassistant/components/rainmachine/switch.py index 264de1d6782..b93f607f853 100644 --- a/homeassistant/components/rainmachine/switch.py +++ b/homeassistant/components/rainmachine/switch.py @@ -142,7 +142,7 @@ class RainMachineSwitch(RainMachineEntity, SwitchDevice): @property def unique_id(self) -> str: """Return a unique, Home Assistant friendly identifier for this entity.""" - return "{0}_{1}_{2}".format( + return "{}_{}_{}".format( self.rainmachine.device_mac.replace(":", ""), self._switch_type, self._rainmachine_entity_id, @@ -188,7 +188,7 @@ class RainMachineProgram(RainMachineSwitch): async def async_added_to_hass(self): """Register callbacks.""" - self._dispatcher_handlers.append( + self.async_on_remove( async_dispatcher_connect( self.hass, PROGRAM_UPDATE_TOPIC, self._update_state ) @@ -219,7 +219,7 @@ class RainMachineProgram(RainMachineSwitch): try: next_run = datetime.strptime( - "{0} {1}".format( + "{} {}".format( self._switch_data["nextRun"], self._switch_data["startTime"] ), "%Y-%m-%d %H:%M", @@ -248,12 +248,12 @@ class RainMachineZone(RainMachineSwitch): async def async_added_to_hass(self): """Register callbacks.""" - self._dispatcher_handlers.append( + self.async_on_remove( async_dispatcher_connect( self.hass, PROGRAM_UPDATE_TOPIC, self._update_state ) ) - self._dispatcher_handlers.append( + self.async_on_remove( async_dispatcher_connect(self.hass, ZONE_UPDATE_TOPIC, self._update_state) ) diff --git a/homeassistant/components/rainmachine/translations/bg.json b/homeassistant/components/rainmachine/translations/bg.json new file mode 100644 index 00000000000..a31785cad00 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/bg.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d", + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" + }, + "step": { + "user": { + "data": { + "ip_address": "\u0410\u0434\u0440\u0435\u0441", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/ca.json b/homeassistant/components/rainmachine/translations/ca.json new file mode 100644 index 00000000000..37d842355c0 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/ca.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest controlador RainMachine ja est\u00e0 configurat." + }, + "error": { + "identifier_exists": "Aquest compte ja est\u00e0 registrat", + "invalid_credentials": "Credencials inv\u00e0lides" + }, + "step": { + "user": { + "data": { + "ip_address": "Nom de l'amfitri\u00f3 o adre\u00e7a IP", + "password": "Contrasenya", + "port": "Port" + }, + "title": "Introdueix la teva informaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/cs.json b/homeassistant/components/rainmachine/translations/cs.json new file mode 100644 index 00000000000..2b63decf0c3 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/cs.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n", + "invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje" + }, + "step": { + "user": { + "data": { + "ip_address": "N\u00e1zev hostitele nebo adresa IP", + "password": "Heslo", + "port": "Port" + }, + "title": "Vypl\u0148te va\u0161e \u00fadaje" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/da.json b/homeassistant/components/rainmachine/translations/da.json new file mode 100644 index 00000000000..a9b2fcedd2f --- /dev/null +++ b/homeassistant/components/rainmachine/translations/da.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Denne RainMachine-controller er allerede konfigureret." + }, + "error": { + "identifier_exists": "Konto er allerede registreret", + "invalid_credentials": "Ugyldige legitimationsoplysninger" + }, + "step": { + "user": { + "data": { + "ip_address": "V\u00e6rtsnavn eller IP-adresse", + "password": "Adgangskode", + "port": "Port" + }, + "title": "Udfyld dine oplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/de.json b/homeassistant/components/rainmachine/translations/de.json new file mode 100644 index 00000000000..35cd1d1bbf5 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/de.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser RainMachine-Kontroller ist bereits konfiguriert." + }, + "error": { + "identifier_exists": "Konto bereits registriert", + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" + }, + "step": { + "user": { + "data": { + "ip_address": "Hostname oder IP-Adresse", + "password": "Passwort", + "port": "Port" + }, + "title": "Informationen eingeben" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/en.json b/homeassistant/components/rainmachine/translations/en.json new file mode 100644 index 00000000000..aabe3d35293 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/en.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "This RainMachine controller is already configured." + }, + "error": { + "identifier_exists": "Account already registered", + "invalid_credentials": "Invalid credentials" + }, + "step": { + "user": { + "data": { + "ip_address": "Hostname or IP Address", + "password": "Password", + "port": "Port" + }, + "title": "Fill in your information" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/es-419.json b/homeassistant/components/rainmachine/translations/es-419.json new file mode 100644 index 00000000000..73da8c7c1d4 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/es-419.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "Cuenta ya registrada", + "invalid_credentials": "Credenciales no v\u00e1lidas" + }, + "step": { + "user": { + "data": { + "ip_address": "Nombre de host o direcci\u00f3n IP", + "password": "Contrase\u00f1a", + "port": "Puerto" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/es.json b/homeassistant/components/rainmachine/translations/es.json new file mode 100644 index 00000000000..0767c509bf9 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/es.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Este controlador RainMachine ya est\u00e1 configurado." + }, + "error": { + "identifier_exists": "Cuenta ya registrada", + "invalid_credentials": "Credenciales no v\u00e1lidas" + }, + "step": { + "user": { + "data": { + "ip_address": "Nombre de host o direcci\u00f3n IP", + "password": "Contrase\u00f1a", + "port": "Puerto" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/fr.json b/homeassistant/components/rainmachine/translations/fr.json new file mode 100644 index 00000000000..34c769faac7 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/fr.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Ce contr\u00f4leur RainMachine est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9", + "invalid_credentials": "Informations d'identification invalides" + }, + "step": { + "user": { + "data": { + "ip_address": "Nom d'h\u00f4te ou adresse IP", + "password": "Mot de passe", + "port": "Port" + }, + "title": "Veuillez saisir vos informations" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/hu.json b/homeassistant/components/rainmachine/translations/hu.json new file mode 100644 index 00000000000..8f5b985bfe9 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "A fi\u00f3k m\u00e1r regisztr\u00e1lt", + "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" + }, + "step": { + "user": { + "data": { + "ip_address": "Hosztn\u00e9v vagy IP c\u00edm", + "password": "Jelsz\u00f3", + "port": "Port" + }, + "title": "T\u00f6ltsd ki az adataid" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/it.json b/homeassistant/components/rainmachine/translations/it.json new file mode 100644 index 00000000000..5ec522c9c24 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/it.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Questo controller RainMachine \u00e8 gi\u00e0 configurato." + }, + "error": { + "identifier_exists": "Account gi\u00e0 registrato", + "invalid_credentials": "Credenziali non valide" + }, + "step": { + "user": { + "data": { + "ip_address": "Nome dell'host o indirizzo IP", + "password": "Password", + "port": "Porta" + }, + "title": "Inserisci i tuoi dati" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/ko.json b/homeassistant/components/rainmachine/translations/ko.json new file mode 100644 index 00000000000..30d7fc10979 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/ko.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 RainMachine \ucee8\ud2b8\ub864\ub7ec\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_credentials": "\ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "ip_address": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8" + }, + "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/lb.json b/homeassistant/components/rainmachine/translations/lb.json new file mode 100644 index 00000000000..fe0b3bc0091 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/lb.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse RainMachine Kontroller ass scho konfigur\u00e9iert." + }, + "error": { + "identifier_exists": "Konto ass scho registr\u00e9iert", + "invalid_credentials": "Ong\u00eblteg Login Informatioune" + }, + "step": { + "user": { + "data": { + "ip_address": "Host Numm oder IP Adresse", + "password": "Passwuert", + "port": "Port" + }, + "title": "F\u00ebllt \u00e4r Informatiounen aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/nl.json b/homeassistant/components/rainmachine/translations/nl.json new file mode 100644 index 00000000000..545d0ded465 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/nl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "Account bestaat al", + "invalid_credentials": "Ongeldige gebruikersgegevens" + }, + "step": { + "user": { + "data": { + "ip_address": "Hostnaam of IP-adres", + "password": "Wachtwoord", + "port": "Poort" + }, + "title": "Vul uw gegevens in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/nn.json b/homeassistant/components/rainmachine/translations/nn.json new file mode 100644 index 00000000000..3aabaabc3d6 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "RainMachine" +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/no.json b/homeassistant/components/rainmachine/translations/no.json new file mode 100644 index 00000000000..bc80cdedb31 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/no.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Denne RainMachine-kontrolleren er allerede konfigurert." + }, + "error": { + "identifier_exists": "Konto er allerede registrert", + "invalid_credentials": "Ugyldig legitimasjon" + }, + "step": { + "user": { + "data": { + "ip_address": "Vertsnavn eller IP-adresse", + "password": "Passord", + "port": "" + }, + "title": "Fyll ut informasjonen din" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/pl.json b/homeassistant/components/rainmachine/translations/pl.json new file mode 100644 index 00000000000..8ea3ab6dbc4 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Ten kontroler RainMachine jest ju\u017c skonfigurowany." + }, + "error": { + "identifier_exists": "Konto jest ju\u017c zarejestrowane.", + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" + }, + "step": { + "user": { + "data": { + "ip_address": "Nazwa hosta lub adres IP", + "password": "Has\u0142o", + "port": "Port" + }, + "title": "Wprowad\u017a dane" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/pt-BR.json b/homeassistant/components/rainmachine/translations/pt-BR.json new file mode 100644 index 00000000000..8b78ef25eb3 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/pt-BR.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "Conta j\u00e1 cadastrada", + "invalid_credentials": "Credenciais inv\u00e1lidas" + }, + "step": { + "user": { + "data": { + "ip_address": "Nome do host ou endere\u00e7o IP", + "password": "Senha", + "port": "Porta" + }, + "title": "Preencha suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/pt.json b/homeassistant/components/rainmachine/translations/pt.json new file mode 100644 index 00000000000..3bd58fccc2f --- /dev/null +++ b/homeassistant/components/rainmachine/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "Conta j\u00e1 registada", + "invalid_credentials": "Credenciais inv\u00e1lidas" + }, + "step": { + "user": { + "data": { + "ip_address": "Nome servidor ou endere\u00e7o IP", + "password": "Palavra-passe", + "port": "Porta" + }, + "title": "Preencha as suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/ru.json b/homeassistant/components/rainmachine/translations/ru.json new file mode 100644 index 00000000000..cd5e3d85d50 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/ru.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." + }, + "step": { + "user": { + "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", + "port": "\u041f\u043e\u0440\u0442" + }, + "title": "RainMachine" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/sl.json b/homeassistant/components/rainmachine/translations/sl.json new file mode 100644 index 00000000000..e34b14b2a97 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/sl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Ta regulator RainMachine je \u017ee konfiguriran." + }, + "error": { + "identifier_exists": "Ra\u010dun \u017ee registriran", + "invalid_credentials": "Neveljavne poverilnice" + }, + "step": { + "user": { + "data": { + "ip_address": "Ime gostitelja ali naslov IP", + "password": "Geslo", + "port": "port" + }, + "title": "Izpolnite svoje podatke" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/sv.json b/homeassistant/components/rainmachine/translations/sv.json new file mode 100644 index 00000000000..a41d65fd09f --- /dev/null +++ b/homeassistant/components/rainmachine/translations/sv.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Denna RainMachine-enhet \u00e4r redan konfigurerad" + }, + "error": { + "identifier_exists": "Kontot \u00e4r redan registrerat", + "invalid_credentials": "Ogiltiga autentiseringsuppgifter" + }, + "step": { + "user": { + "data": { + "ip_address": "V\u00e4rdnamn eller IP-adress", + "password": "L\u00f6senord", + "port": "Port" + }, + "title": "Fyll i dina uppgifter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/.translations/th.json b/homeassistant/components/rainmachine/translations/th.json similarity index 100% rename from homeassistant/components/rainmachine/.translations/th.json rename to homeassistant/components/rainmachine/translations/th.json diff --git a/homeassistant/components/rainmachine/translations/zh-Hans.json b/homeassistant/components/rainmachine/translations/zh-Hans.json new file mode 100644 index 00000000000..e7171ca2867 --- /dev/null +++ b/homeassistant/components/rainmachine/translations/zh-Hans.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "identifier_exists": "\u8d26\u6237\u5df2\u6ce8\u518c", + "invalid_credentials": "\u65e0\u6548\u7684\u8eab\u4efd\u8ba4\u8bc1" + }, + "step": { + "user": { + "data": { + "ip_address": "\u4e3b\u673a\u540d\u6216IP\u5730\u5740", + "password": "\u5bc6\u7801", + "port": "\u7aef\u53e3" + }, + "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/rainmachine/translations/zh-Hant.json b/homeassistant/components/rainmachine/translations/zh-Hant.json new file mode 100644 index 00000000000..d6c022cd5ce --- /dev/null +++ b/homeassistant/components/rainmachine/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64 RainMachine \u63a7\u5236\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a", + "invalid_credentials": "\u6191\u8b49\u7121\u6548" + }, + "step": { + "user": { + "data": { + "ip_address": "\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0" + }, + "title": "\u586b\u5beb\u8cc7\u8a0a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/random/manifest.json b/homeassistant/components/random/manifest.json index bd265ef4759..5e73fbd4421 100644 --- a/homeassistant/components/random/manifest.json +++ b/homeassistant/components/random/manifest.json @@ -2,8 +2,6 @@ "domain": "random", "name": "Random", "documentation": "https://www.home-assistant.io/integrations/random", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/raspihats/__init__.py b/homeassistant/components/raspihats/__init__.py index fb544d3ebcc..e6fd3d7bb59 100644 --- a/homeassistant/components/raspihats/__init__.py +++ b/homeassistant/components/raspihats/__init__.py @@ -95,7 +95,7 @@ class I2CHatsDIScanner: state = (value >> channel) & 0x01 old_state = (old_value >> channel) & 0x01 if state != old_state: - callback = callbacks.get(channel, None) + callback = callbacks.get(channel) if callback is not None: callback(state) setattr(digital_inputs, self._OLD_VALUE, value) diff --git a/homeassistant/components/raspihats/manifest.json b/homeassistant/components/raspihats/manifest.json index f26da599cef..400cd275dc1 100644 --- a/homeassistant/components/raspihats/manifest.json +++ b/homeassistant/components/raspihats/manifest.json @@ -3,6 +3,5 @@ "name": "Raspihats", "documentation": "https://www.home-assistant.io/integrations/raspihats", "requirements": ["raspihats==2.2.3", "smbus-cffi==0.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/raspihats/switch.py b/homeassistant/components/raspihats/switch.py index 8a083dbe2c9..98bcb4d0aa8 100644 --- a/homeassistant/components/raspihats/switch.py +++ b/homeassistant/components/raspihats/switch.py @@ -105,9 +105,9 @@ class I2CHatSwitch(ToggleEntity): def _log_message(self, message): """Create log message.""" - string = self._name + " " - string += self._board + "I2CHat@" + hex(self._address) + " " - string += "channel:" + str(self._channel) + message + string = f"{self._name} " + string += f"{self._board}I2CHat@{hex(self._address)} " + string += f"channel:{str(self._channel)}{message}" return string @property diff --git a/homeassistant/components/raspyrfm/manifest.json b/homeassistant/components/raspyrfm/manifest.json index 20e3768705e..ed840c70824 100644 --- a/homeassistant/components/raspyrfm/manifest.json +++ b/homeassistant/components/raspyrfm/manifest.json @@ -3,6 +3,5 @@ "name": "RaspyRFM", "documentation": "https://www.home-assistant.io/integrations/raspyrfm", "requirements": ["raspyrfm-client==1.2.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/recollect_waste/manifest.json b/homeassistant/components/recollect_waste/manifest.json index 634f6ad0c61..b04917d450c 100644 --- a/homeassistant/components/recollect_waste/manifest.json +++ b/homeassistant/components/recollect_waste/manifest.json @@ -3,6 +3,5 @@ "name": "ReCollect Waste", "documentation": "https://www.home-assistant.io/integrations/recollect_waste", "requirements": ["recollect-waste==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/recorder/__init__.py b/homeassistant/components/recorder/__init__.py index ffd37720053..cb5d1f4499f 100644 --- a/homeassistant/components/recorder/__init__.py +++ b/homeassistant/components/recorder/__init__.py @@ -2,15 +2,14 @@ import asyncio from collections import namedtuple import concurrent.futures -from datetime import datetime, timedelta +from datetime import datetime import logging import queue -from sqlite3 import Connection import threading import time from typing import Any, Dict, Optional -from sqlalchemy import create_engine, exc +from sqlalchemy import create_engine, exc, select from sqlalchemy.engine import Engine from sqlalchemy.event import listens_for from sqlalchemy.orm import scoped_session, sessionmaker @@ -61,7 +60,9 @@ DEFAULT_URL = "sqlite:///{hass_config_path}" DEFAULT_DB_FILE = "home-assistant_v2.db" DEFAULT_DB_MAX_RETRIES = 10 DEFAULT_DB_RETRY_WAIT = 3 +KEEPALIVE_TIME = 30 +CONF_AUTO_PURGE = "auto_purge" CONF_DB_URL = "db_url" CONF_DB_MAX_RETRIES = "db_max_retries" CONF_DB_RETRY_WAIT = "db_retry_wait" @@ -90,25 +91,29 @@ FILTER_SCHEMA = vol.Schema( CONFIG_SCHEMA = vol.Schema( { - vol.Optional(DOMAIN, default=dict): FILTER_SCHEMA.extend( - { - vol.Optional(CONF_PURGE_KEEP_DAYS, default=10): vol.All( - vol.Coerce(int), vol.Range(min=1) - ), - vol.Optional(CONF_PURGE_INTERVAL, default=1): vol.All( - vol.Coerce(int), vol.Range(min=0) - ), - vol.Optional(CONF_DB_URL): cv.string, - vol.Optional(CONF_COMMIT_INTERVAL, default=1): vol.All( - vol.Coerce(int), vol.Range(min=0) - ), - vol.Optional( - CONF_DB_MAX_RETRIES, default=DEFAULT_DB_MAX_RETRIES - ): cv.positive_int, - vol.Optional( - CONF_DB_RETRY_WAIT, default=DEFAULT_DB_RETRY_WAIT - ): cv.positive_int, - } + vol.Optional(DOMAIN, default=dict): vol.All( + cv.deprecated(CONF_PURGE_INTERVAL), + FILTER_SCHEMA.extend( + { + vol.Optional(CONF_AUTO_PURGE, default=True): cv.boolean, + vol.Optional(CONF_PURGE_KEEP_DAYS, default=10): vol.All( + vol.Coerce(int), vol.Range(min=1) + ), + vol.Optional(CONF_PURGE_INTERVAL, default=1): vol.All( + vol.Coerce(int), vol.Range(min=0) + ), + vol.Optional(CONF_DB_URL): cv.string, + vol.Optional(CONF_COMMIT_INTERVAL, default=1): vol.All( + vol.Coerce(int), vol.Range(min=0) + ), + vol.Optional( + CONF_DB_MAX_RETRIES, default=DEFAULT_DB_MAX_RETRIES + ): cv.positive_int, + vol.Optional( + CONF_DB_RETRY_WAIT, default=DEFAULT_DB_RETRY_WAIT + ): cv.positive_int, + } + ), ) }, extra=vol.ALLOW_EXTRA, @@ -143,13 +148,13 @@ def run_information(hass, point_in_time: Optional[datetime] = None): async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the recorder.""" conf = config[DOMAIN] - keep_days = conf.get(CONF_PURGE_KEEP_DAYS) - purge_interval = conf.get(CONF_PURGE_INTERVAL) + auto_purge = conf[CONF_AUTO_PURGE] + keep_days = conf[CONF_PURGE_KEEP_DAYS] commit_interval = conf[CONF_COMMIT_INTERVAL] db_max_retries = conf[CONF_DB_MAX_RETRIES] db_retry_wait = conf[CONF_DB_RETRY_WAIT] - db_url = conf.get(CONF_DB_URL, None) + db_url = conf.get(CONF_DB_URL) if not db_url: db_url = DEFAULT_URL.format(hass_config_path=hass.config.path(DEFAULT_DB_FILE)) @@ -157,8 +162,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: exclude = conf.get(CONF_EXCLUDE, {}) instance = hass.data[DATA_INSTANCE] = Recorder( hass=hass, + auto_purge=auto_purge, keep_days=keep_days, - purge_interval=purge_interval, commit_interval=commit_interval, uri=db_url, db_max_retries=db_max_retries, @@ -189,8 +194,8 @@ class Recorder(threading.Thread): def __init__( self, hass: HomeAssistant, + auto_purge: bool, keep_days: int, - purge_interval: int, commit_interval: int, uri: str, db_max_retries: int, @@ -202,8 +207,8 @@ class Recorder(threading.Thread): threading.Thread.__init__(self, name="Recorder") self.hass = hass + self.auto_purge = auto_purge self.keep_days = keep_days - self.purge_interval = purge_interval self.commit_interval = commit_interval self.queue: Any = queue.Queue() self.recording_start = dt_util.utcnow() @@ -223,6 +228,7 @@ class Recorder(threading.Thread): self.exclude_t = exclude.get(CONF_EVENT_TYPES, []) self._timechanges_seen = 0 + self._keepalive_count = 0 self.event_session = None self.get_session = None @@ -313,28 +319,17 @@ class Recorder(threading.Thread): return # Start periodic purge - if self.keep_days and self.purge_interval: + if self.auto_purge: @callback def async_purge(now): - """Trigger the purge and schedule the next run.""" + """Trigger the purge.""" self.queue.put(PurgeTask(self.keep_days, repack=False)) - self.hass.helpers.event.async_track_point_in_time( - async_purge, now + timedelta(days=self.purge_interval) - ) - earliest = dt_util.utcnow() + timedelta(minutes=30) - run = latest = dt_util.utcnow() + timedelta(days=self.purge_interval) - with session_scope(session=self.get_session()) as session: - event = session.query(Events).first() - if event is not None: - session.expunge(event) - run = dt_util.as_utc(event.time_fired) + timedelta( - days=self.keep_days + self.purge_interval - ) - run = min(latest, max(run, earliest)) - - self.hass.helpers.event.track_point_in_time(async_purge, run) + # Purge every night at 4:12am + self.hass.helpers.event.track_time_change( + async_purge, hour=4, minute=12, second=0 + ) self.event_session = self.get_session() # Use a session for the event read loop @@ -353,6 +348,10 @@ class Recorder(threading.Thread): continue if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() + self._keepalive_count += 1 + if self._keepalive_count >= KEEPALIVE_TIME: + self._keepalive_count = 0 + self._send_keep_alive() if self.commit_interval: self._timechanges_seen += 1 if self._timechanges_seen >= self.commit_interval: @@ -400,6 +399,18 @@ class Recorder(threading.Thread): self.queue.task_done() + def _send_keep_alive(self): + try: + _LOGGER.debug("Sending keepalive") + self.event_session.connection().scalar(select([1])) + return + except Exception as err: # pylint: disable=broad-except + # Must catch the exception to prevent the loop from collapsing + _LOGGER.error( + "Error in database connectivity during keepalive: %s.", err, + ) + self._reopen_event_session() + def _commit_event_session_or_retry(self): tries = 1 while tries <= self.db_max_retries: @@ -419,7 +430,7 @@ class Recorder(threading.Thread): ) else: _LOGGER.error( - "Error in database connectivity: %s. " + "Error in database connectivity during commit: %s. " "(retrying in %s seconds)", err, self.db_retry_wait, @@ -435,6 +446,15 @@ class Recorder(threading.Thread): "Error in database update. Could not save " "after %d tries. Giving up", tries, ) + self._reopen_event_session() + + def _reopen_event_session(self): + try: + self.event_session.rollback() + except Exception as err: # pylint: disable=broad-except + # Must catch the exception to prevent the loop from collapsing + _LOGGER.exception("Error while rolling back event session: %s", err) + try: self.event_session.close() except Exception as err: # pylint: disable=broad-except @@ -470,15 +490,23 @@ class Recorder(threading.Thread): # pylint: disable=unused-variable @listens_for(Engine, "connect") - def set_sqlite_pragma(dbapi_connection, connection_record): - """Set sqlite's WAL mode.""" - if isinstance(dbapi_connection, Connection): + def setup_connection(dbapi_connection, connection_record): + """Dbapi specific connection settings.""" + + # We do not import sqlite3 here so mysql/other + # users do not have to pay for it to be loaded in + # memory + if self.db_url == "sqlite://" or ":memory:" in self.db_url: old_isolation = dbapi_connection.isolation_level dbapi_connection.isolation_level = None cursor = dbapi_connection.cursor() cursor.execute("PRAGMA journal_mode=WAL") cursor.close() dbapi_connection.isolation_level = old_isolation + elif self.db_url.startswith("mysql"): + cursor = dbapi_connection.cursor() + cursor.execute("SET session wait_timeout=28800") + cursor.close() if self.db_url == "sqlite://" or ":memory:" in self.db_url: kwargs["connect_args"] = {"check_same_thread": False} diff --git a/homeassistant/components/recorder/manifest.json b/homeassistant/components/recorder/manifest.json index 04fabd28bc6..0d662c572bd 100644 --- a/homeassistant/components/recorder/manifest.json +++ b/homeassistant/components/recorder/manifest.json @@ -2,8 +2,7 @@ "domain": "recorder", "name": "Recorder", "documentation": "https://www.home-assistant.io/integrations/recorder", - "requirements": ["sqlalchemy==1.3.15"], - "dependencies": [], + "requirements": ["sqlalchemy==1.3.16"], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/recorder/purge.py b/homeassistant/components/recorder/purge.py index b4b1f612fac..0c247c96126 100644 --- a/homeassistant/components/recorder/purge.py +++ b/homeassistant/components/recorder/purge.py @@ -21,14 +21,14 @@ def purge_old_data(instance, purge_days, repack): with session_scope(session=instance.get_session()) as session: deleted_rows = ( session.query(States) - .filter((States.last_updated < purge_before)) + .filter(States.last_updated < purge_before) .delete(synchronize_session=False) ) _LOGGER.debug("Deleted %s states", deleted_rows) deleted_rows = ( session.query(Events) - .filter((Events.time_fired < purge_before)) + .filter(Events.time_fired < purge_before) .delete(synchronize_session=False) ) _LOGGER.debug("Deleted %s events", deleted_rows) diff --git a/homeassistant/components/recswitch/manifest.json b/homeassistant/components/recswitch/manifest.json index 85765815619..4d155b6ec02 100644 --- a/homeassistant/components/recswitch/manifest.json +++ b/homeassistant/components/recswitch/manifest.json @@ -3,6 +3,5 @@ "name": "Ankuoo REC Switch", "documentation": "https://www.home-assistant.io/integrations/recswitch", "requirements": ["pyrecswitch==1.0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/reddit/manifest.json b/homeassistant/components/reddit/manifest.json index f1687d73e04..189ffbbc4be 100644 --- a/homeassistant/components/reddit/manifest.json +++ b/homeassistant/components/reddit/manifest.json @@ -3,6 +3,5 @@ "name": "Reddit", "documentation": "https://www.home-assistant.io/integrations/reddit", "requirements": ["praw==6.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rejseplanen/manifest.json b/homeassistant/components/rejseplanen/manifest.json index b5140110570..cb58d83ff62 100644 --- a/homeassistant/components/rejseplanen/manifest.json +++ b/homeassistant/components/rejseplanen/manifest.json @@ -3,6 +3,5 @@ "name": "Rejseplanen", "documentation": "https://www.home-assistant.io/integrations/rejseplanen", "requirements": ["rjpl==0.3.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/remember_the_milk/__init__.py b/homeassistant/components/remember_the_milk/__init__.py index ec70c9d4329..9de33c67158 100644 --- a/homeassistant/components/remember_the_milk/__init__.py +++ b/homeassistant/components/remember_the_milk/__init__.py @@ -137,10 +137,12 @@ def _register_new_account( request_id = configurator.async_request_config( f"{DOMAIN} - {account_name}", callback=register_account_callback, - description="You need to log in to Remember The Milk to" - + "connect your account. \n\n" - + 'Step 1: Click on the link "Remember The Milk login"\n\n' - + 'Step 2: Click on "login completed"', + description=( + "You need to log in to Remember The Milk to" + "connect your account. \n\n" + "Step 1: Click on the link 'Remember The Milk login'\n\n" + "Step 2: Click on 'login completed'" + ), link_name="Remember The Milk login", link_url=url, submit_caption="login completed", @@ -157,18 +159,18 @@ class RememberTheMilkConfiguration: """Create new instance of configuration.""" self._config_file_path = hass.config.path(CONFIG_FILE_NAME) if not os.path.isfile(self._config_file_path): - self._config = dict() + self._config = {} return try: _LOGGER.debug("Loading configuration from file: %s", self._config_file_path) - with open(self._config_file_path, "r") as config_file: + with open(self._config_file_path) as config_file: self._config = json.load(config_file) except ValueError: _LOGGER.error( "Failed to load configuration file, creating a new one: %s", self._config_file_path, ) - self._config = dict() + self._config = {} def save_config(self): """Write the configuration to a file.""" @@ -198,9 +200,9 @@ class RememberTheMilkConfiguration: def _initialize_profile(self, profile_name): """Initialize the data structures for a profile.""" if profile_name not in self._config: - self._config[profile_name] = dict() + self._config[profile_name] = {} if CONF_ID_MAP not in self._config[profile_name]: - self._config[profile_name][CONF_ID_MAP] = dict() + self._config[profile_name][CONF_ID_MAP] = {} def get_rtm_id(self, profile_name, hass_id): """Get the RTM ids for a Home Assistant task ID. diff --git a/homeassistant/components/remember_the_milk/services.yaml b/homeassistant/components/remember_the_milk/services.yaml index 74a2c3a4d4f..448b35a3a04 100644 --- a/homeassistant/components/remember_the_milk/services.yaml +++ b/homeassistant/components/remember_the_milk/services.yaml @@ -1,24 +1,21 @@ # Describes the format for available Remember The Milk services create_task: - description: > + description: >- Create (or update) a new task in your Remember The Milk account. If you want to update a task later on, you have to set an "id" when creating the task. Note: Updating a tasks does not support the smart syntax. - fields: name: description: name of the new task, you can use the smart syntax here - example: 'do this ^today #from_hass' - + example: "do this ^today #from_hass" id: description: (optional) identifier for the task you're creating, can be used to update or complete the task later on example: myid complete_task: description: Complete a tasks that was privously created. - fields: id: description: identifier that was defined when creating the task - example: myid \ No newline at end of file + example: myid diff --git a/homeassistant/components/remote/manifest.json b/homeassistant/components/remote/manifest.json index 8f559b758d6..30c442b540b 100644 --- a/homeassistant/components/remote/manifest.json +++ b/homeassistant/components/remote/manifest.json @@ -2,7 +2,5 @@ "domain": "remote", "name": "Remote", "documentation": "https://www.home-assistant.io/integrations/remote", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/remote/reproduce_state.py b/homeassistant/components/remote/reproduce_state.py index 1e5dee15683..4e1f426c57b 100644 --- a/homeassistant/components/remote/reproduce_state.py +++ b/homeassistant/components/remote/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Remote state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -21,7 +21,11 @@ VALID_STATES = {STATE_ON, STATE_OFF} async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -53,9 +57,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Remote states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/remote/services.yaml b/homeassistant/components/remote/services.yaml index 1d712a8f285..fc9d170726e 100644 --- a/homeassistant/components/remote/services.yaml +++ b/homeassistant/components/remote/services.yaml @@ -5,62 +5,62 @@ turn_on: fields: entity_id: description: Name(s) of entities to turn on. - example: 'remote.family_room' + example: "remote.family_room" activity: description: Activity ID or Activity Name to start. - example: 'BedroomTV' + example: "BedroomTV" toggle: description: Toggles a device. fields: entity_id: description: Name(s) of entities to toggle. - example: 'remote.family_room' + example: "remote.family_room" turn_off: description: Sends the Power Off Command. fields: entity_id: description: Name(s) of entities to turn off. - example: 'remote.family_room' + example: "remote.family_room" send_command: description: Sends a command or a list of commands to a device. fields: entity_id: description: Name(s) of entities to send command from. - example: 'remote.family_room' + example: "remote.family_room" device: description: Device ID to send command to. - example: '32756745' + example: "32756745" command: description: A single command or a list of commands to send. - example: 'Play' + example: "Play" num_repeats: description: An optional value that specifies the number of times you want to repeat the command(s). If not specified, the command(s) will not be repeated. - example: '5' + example: "5" delay_secs: description: An optional value that specifies that number of seconds you want to wait in between repeated commands. If not specified, the default of 0.4 seconds will be used. - example: '0.75' + example: "0.75" hold_secs: description: An optional value that specifies that number of seconds you want to have it held before the release is send. If not specified, the release will be send immediately after the press. - example: '2.5' + example: "2.5" learn_command: description: Learns a command or a list of commands from a device. fields: entity_id: description: Name(s) of entities to learn command from. - example: 'remote.bedroom' + example: "remote.bedroom" device: description: Device ID to learn command from. - example: 'television' + example: "television" command: description: A single command or a list of commands to learn. - example: 'Turn on' + example: "Turn on" alternative: description: If code must be stored as alternative (useful for discrete remotes). - example: 'True' + example: "True" timeout: description: Timeout, in seconds, for the command to be learned. - example: '30' + example: "30" diff --git a/homeassistant/components/remote/strings.json b/homeassistant/components/remote/strings.json new file mode 100644 index 00000000000..eb9edcd450f --- /dev/null +++ b/homeassistant/components/remote/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Remote", + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } + } +} diff --git a/homeassistant/components/remote/translations/af.json b/homeassistant/components/remote/translations/af.json new file mode 100644 index 00000000000..ad6d341858b --- /dev/null +++ b/homeassistant/components/remote/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Afgele\u00eb" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ar.json b/homeassistant/components/remote/translations/ar.json new file mode 100644 index 00000000000..295f8c75d4e --- /dev/null +++ b/homeassistant/components/remote/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u062a\u062d\u0643\u0645 \u0639\u0646 \u0628\u0639\u062f" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/bg.json b/homeassistant/components/remote/translations/bg.json new file mode 100644 index 00000000000..9f9c5a5782a --- /dev/null +++ b/homeassistant/components/remote/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u043e" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/bs.json b/homeassistant/components/remote/translations/bs.json new file mode 100644 index 00000000000..bcda1aeb6bc --- /dev/null +++ b/homeassistant/components/remote/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Daljinski" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ca.json b/homeassistant/components/remote/translations/ca.json new file mode 100644 index 00000000000..76252d06ce8 --- /dev/null +++ b/homeassistant/components/remote/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagat", + "on": "Enc\u00e8s" + } + }, + "title": "Comandaments" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/cs.json b/homeassistant/components/remote/translations/cs.json new file mode 100644 index 00000000000..098b1191b8f --- /dev/null +++ b/homeassistant/components/remote/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "D\u00e1lkov\u00e9" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/cy.json b/homeassistant/components/remote/translations/cy.json new file mode 100644 index 00000000000..283a6e04833 --- /dev/null +++ b/homeassistant/components/remote/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Symudol" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/da.json b/homeassistant/components/remote/translations/da.json new file mode 100644 index 00000000000..ee63a0b0a17 --- /dev/null +++ b/homeassistant/components/remote/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Slukket", + "on": "T\u00e6ndt" + } + }, + "title": "Fjernbetjening" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/de.json b/homeassistant/components/remote/translations/de.json new file mode 100644 index 00000000000..d1ec188e2b8 --- /dev/null +++ b/homeassistant/components/remote/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Fernbedienung" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/el.json b/homeassistant/components/remote/translations/el.json new file mode 100644 index 00000000000..79860300b96 --- /dev/null +++ b/homeassistant/components/remote/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u03a4\u03b7\u03bb\u03b5\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/en.json b/homeassistant/components/remote/translations/en.json new file mode 100644 index 00000000000..731a21d4547 --- /dev/null +++ b/homeassistant/components/remote/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Remote" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/es-419.json b/homeassistant/components/remote/translations/es-419.json new file mode 100644 index 00000000000..bf8b6d3a3ec --- /dev/null +++ b/homeassistant/components/remote/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Remoto" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/es.json b/homeassistant/components/remote/translations/es.json new file mode 100644 index 00000000000..bf8b6d3a3ec --- /dev/null +++ b/homeassistant/components/remote/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Remoto" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/et.json b/homeassistant/components/remote/translations/et.json new file mode 100644 index 00000000000..6bcfbf7f4cf --- /dev/null +++ b/homeassistant/components/remote/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Kaugjuhtimispult" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/eu.json b/homeassistant/components/remote/translations/eu.json new file mode 100644 index 00000000000..8c52e0f5c07 --- /dev/null +++ b/homeassistant/components/remote/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Urrunekoa" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/fa.json b/homeassistant/components/remote/translations/fa.json new file mode 100644 index 00000000000..342de751ee4 --- /dev/null +++ b/homeassistant/components/remote/translations/fa.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0631\u0648\u0634\u0646" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/fi.json b/homeassistant/components/remote/translations/fi.json new file mode 100644 index 00000000000..45e40562d9e --- /dev/null +++ b/homeassistant/components/remote/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Kauko-ohjaus" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/fr.json b/homeassistant/components/remote/translations/fr.json new file mode 100644 index 00000000000..632bc1044d4 --- /dev/null +++ b/homeassistant/components/remote/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Arr\u00eat", + "on": "Actif" + } + }, + "title": "T\u00e9l\u00e9commande" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/gsw.json b/homeassistant/components/remote/translations/gsw.json new file mode 100644 index 00000000000..3f209615ee9 --- /dev/null +++ b/homeassistant/components/remote/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Entfernt" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/he.json b/homeassistant/components/remote/translations/he.json new file mode 100644 index 00000000000..816e0fd96bf --- /dev/null +++ b/homeassistant/components/remote/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05de\u05b0\u05e8\u05d5\u05bc\u05d7\u05b8\u05e7" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/hi.json b/homeassistant/components/remote/translations/hi.json new file mode 100644 index 00000000000..cb9446fed91 --- /dev/null +++ b/homeassistant/components/remote/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u0930\u093f\u092e\u094b\u091f" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/hr.json b/homeassistant/components/remote/translations/hr.json new file mode 100644 index 00000000000..bcda1aeb6bc --- /dev/null +++ b/homeassistant/components/remote/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Daljinski" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/hu.json b/homeassistant/components/remote/translations/hu.json new file mode 100644 index 00000000000..fa0bf3fee90 --- /dev/null +++ b/homeassistant/components/remote/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "T\u00e1vir\u00e1ny\u00edt\u00e1s" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/hy.json b/homeassistant/components/remote/translations/hy.json new file mode 100644 index 00000000000..948a1156595 --- /dev/null +++ b/homeassistant/components/remote/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u0540\u0565\u057c\u0561\u057e\u0561\u0580" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/id.json b/homeassistant/components/remote/translations/id.json new file mode 100644 index 00000000000..e824cafff4e --- /dev/null +++ b/homeassistant/components/remote/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Daring" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/is.json b/homeassistant/components/remote/translations/is.json new file mode 100644 index 00000000000..3908be15d36 --- /dev/null +++ b/homeassistant/components/remote/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u00d3virk", + "on": "Virk" + } + }, + "title": "Fjarst\u00fdring" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/it.json b/homeassistant/components/remote/translations/it.json new file mode 100644 index 00000000000..e3ebc2a3dda --- /dev/null +++ b/homeassistant/components/remote/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Telecomando" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ja.json b/homeassistant/components/remote/translations/ja.json new file mode 100644 index 00000000000..15dd3796187 --- /dev/null +++ b/homeassistant/components/remote/translations/ja.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ko.json b/homeassistant/components/remote/translations/ko.json new file mode 100644 index 00000000000..b866fd7fee5 --- /dev/null +++ b/homeassistant/components/remote/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc6d0\uaca9" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/lb.json b/homeassistant/components/remote/translations/lb.json new file mode 100644 index 00000000000..b81e82470fc --- /dev/null +++ b/homeassistant/components/remote/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "T\u00e9l\u00e9commande" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/lt.json b/homeassistant/components/remote/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/remote/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/lv.json b/homeassistant/components/remote/translations/lv.json new file mode 100644 index 00000000000..c8bed22a74c --- /dev/null +++ b/homeassistant/components/remote/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gta", + "on": "Iesl\u0113gts" + } + }, + "title": "T\u0101lvad\u012bba" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/nb.json b/homeassistant/components/remote/translations/nb.json new file mode 100644 index 00000000000..2e65d515e59 --- /dev/null +++ b/homeassistant/components/remote/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Fjernkontroll" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/nl.json b/homeassistant/components/remote/translations/nl.json new file mode 100644 index 00000000000..b3ccad9ae2b --- /dev/null +++ b/homeassistant/components/remote/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Afstandsbediening" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/nn.json b/homeassistant/components/remote/translations/nn.json new file mode 100644 index 00000000000..2e65d515e59 --- /dev/null +++ b/homeassistant/components/remote/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Fjernkontroll" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/no.json b/homeassistant/components/remote/translations/no.json new file mode 100644 index 00000000000..ad3dec70b8f --- /dev/null +++ b/homeassistant/components/remote/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Fjernkontroll" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/pl.json b/homeassistant/components/remote/translations/pl.json new file mode 100644 index 00000000000..e6621d8b42d --- /dev/null +++ b/homeassistant/components/remote/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Pilot" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/pt-BR.json b/homeassistant/components/remote/translations/pt-BR.json new file mode 100644 index 00000000000..d658a07f4df --- /dev/null +++ b/homeassistant/components/remote/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Remoto" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/pt.json b/homeassistant/components/remote/translations/pt.json new file mode 100644 index 00000000000..fb303b36aa6 --- /dev/null +++ b/homeassistant/components/remote/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desativado", + "on": "Ligado" + } + }, + "title": "Remoto" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ro.json b/homeassistant/components/remote/translations/ro.json new file mode 100644 index 00000000000..5d3bb752d4a --- /dev/null +++ b/homeassistant/components/remote/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "La distan\u0163\u0103" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ru.json b/homeassistant/components/remote/translations/ru.json new file mode 100644 index 00000000000..14dd4a6ec2d --- /dev/null +++ b/homeassistant/components/remote/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u041f\u0443\u043b\u044c\u0442 \u0414\u0423" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/sk.json b/homeassistant/components/remote/translations/sk.json new file mode 100644 index 00000000000..381668927df --- /dev/null +++ b/homeassistant/components/remote/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Vypnut\u00fd", + "on": "Zapnut\u00fd" + } + }, + "title": "Dia\u013ekov\u00e9 ovl\u00e1danie" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/sl.json b/homeassistant/components/remote/translations/sl.json new file mode 100644 index 00000000000..5d2864f5b89 --- /dev/null +++ b/homeassistant/components/remote/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Oddaljeno" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/sv.json b/homeassistant/components/remote/translations/sv.json new file mode 100644 index 00000000000..ea82df41e75 --- /dev/null +++ b/homeassistant/components/remote/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Fj\u00e4rrkontroll" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/ta.json b/homeassistant/components/remote/translations/ta.json new file mode 100644 index 00000000000..b277057b098 --- /dev/null +++ b/homeassistant/components/remote/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd" + } + }, + "title": "\u0bb0\u0bbf\u0bae\u0bc7\u0bbe\u0b9f\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/te.json b/homeassistant/components/remote/translations/te.json new file mode 100644 index 00000000000..dfc65014268 --- /dev/null +++ b/homeassistant/components/remote/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c30\u0c3f\u0c2e\u0c4b\u0c1f\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/th.json b/homeassistant/components/remote/translations/th.json new file mode 100644 index 00000000000..06f5d896f0f --- /dev/null +++ b/homeassistant/components/remote/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e23\u0e35\u0e42\u0e21\u0e15" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/tr.json b/homeassistant/components/remote/translations/tr.json new file mode 100644 index 00000000000..cdc40c6268b --- /dev/null +++ b/homeassistant/components/remote/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Uzaktan Kumanda" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/uk.json b/homeassistant/components/remote/translations/uk.json new file mode 100644 index 00000000000..bc52ed67ae5 --- /dev/null +++ b/homeassistant/components/remote/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u041f\u0443\u043b\u044c\u0442 \u0414\u0423" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/vi.json b/homeassistant/components/remote/translations/vi.json new file mode 100644 index 00000000000..36791cf5fb9 --- /dev/null +++ b/homeassistant/components/remote/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "\u0110K T\u1eeb xa" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/zh-Hans.json b/homeassistant/components/remote/translations/zh-Hans.json new file mode 100644 index 00000000000..70ab64a957f --- /dev/null +++ b/homeassistant/components/remote/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u9065\u63a7" +} \ No newline at end of file diff --git a/homeassistant/components/remote/translations/zh-Hant.json b/homeassistant/components/remote/translations/zh-Hant.json new file mode 100644 index 00000000000..b387a57723d --- /dev/null +++ b/homeassistant/components/remote/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u5553" + } + }, + "title": "\u9059\u63a7" +} \ No newline at end of file diff --git a/homeassistant/components/remote_rpi_gpio/manifest.json b/homeassistant/components/remote_rpi_gpio/manifest.json index 4c5f63c7dea..c69a9c92fde 100644 --- a/homeassistant/components/remote_rpi_gpio/manifest.json +++ b/homeassistant/components/remote_rpi_gpio/manifest.json @@ -3,6 +3,5 @@ "name": "remote_rpi_gpio", "documentation": "https://www.home-assistant.io/integrations/remote_rpi_gpio", "requirements": ["gpiozero==1.5.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/repetier/manifest.json b/homeassistant/components/repetier/manifest.json index d24a8ed03e3..b6d48aded2f 100644 --- a/homeassistant/components/repetier/manifest.json +++ b/homeassistant/components/repetier/manifest.json @@ -3,6 +3,5 @@ "name": "Repetier-Server", "documentation": "https://www.home-assistant.io/integrations/repetier", "requirements": ["pyrepetier==3.0.5"], - "dependencies": [], "codeowners": ["@MTrab"] } diff --git a/homeassistant/components/repetier/sensor.py b/homeassistant/components/repetier/sensor.py index 5936b5c3343..e342b2d341e 100644 --- a/homeassistant/components/repetier/sensor.py +++ b/homeassistant/components/repetier/sensor.py @@ -102,7 +102,9 @@ class RepetierSensor(Entity): async def async_added_to_hass(self): """Connect update callbacks.""" - async_dispatcher_connect(self.hass, UPDATE_SIGNAL, self.update_callback) + self.async_on_remove( + async_dispatcher_connect(self.hass, UPDATE_SIGNAL, self.update_callback) + ) def _get_data(self): """Return new data from the api cache.""" diff --git a/homeassistant/components/rest/manifest.json b/homeassistant/components/rest/manifest.json index fd7eea12f7e..3ab926a3b13 100644 --- a/homeassistant/components/rest/manifest.json +++ b/homeassistant/components/rest/manifest.json @@ -3,6 +3,5 @@ "name": "RESTful", "documentation": "https://www.home-assistant.io/integrations/rest", "requirements": ["jsonpath==0.82", "xmltodict==0.12.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rest/notify.py b/homeassistant/components/rest/notify.py index 4f3de14b731..9860334afbf 100644 --- a/homeassistant/components/rest/notify.py +++ b/homeassistant/components/rest/notify.py @@ -21,8 +21,11 @@ from homeassistant.const import ( CONF_RESOURCE, CONF_USERNAME, CONF_VERIFY_SSL, + HTTP_BAD_REQUEST, HTTP_BASIC_AUTHENTICATION, HTTP_DIGEST_AUTHENTICATION, + HTTP_INTERNAL_SERVER_ERROR, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv @@ -187,15 +190,21 @@ class RestNotificationService(BaseNotificationService): verify=self._verify_ssl, ) - if response.status_code >= 500 and response.status_code < 600: + if ( + response.status_code >= HTTP_INTERNAL_SERVER_ERROR + and response.status_code < 600 + ): _LOGGER.exception( "Server error. Response %d: %s:", response.status_code, response.reason ) - elif response.status_code >= 400 and response.status_code < 500: + elif ( + response.status_code >= HTTP_BAD_REQUEST + and response.status_code < HTTP_INTERNAL_SERVER_ERROR + ): _LOGGER.exception( "Client error. Response %d: %s:", response.status_code, response.reason ) - elif response.status_code >= 200 and response.status_code < 300: + elif response.status_code >= HTTP_OK and response.status_code < 300: _LOGGER.debug( "Success. Response %d: %s:", response.status_code, response.reason ) diff --git a/homeassistant/components/rest/switch.py b/homeassistant/components/rest/switch.py index fe409a46be7..84d503bb09e 100644 --- a/homeassistant/components/rest/switch.py +++ b/homeassistant/components/rest/switch.py @@ -16,6 +16,8 @@ from homeassistant.const import ( CONF_TIMEOUT, CONF_USERNAME, CONF_VERIFY_SSL, + HTTP_BAD_REQUEST, + HTTP_OK, ) from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -94,7 +96,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= ) req = await switch.get_device_state(hass) - if req.status >= 400: + if req.status >= HTTP_BAD_REQUEST: _LOGGER.error("Got non-ok response from resource: %s", req.status) else: async_add_entities([switch]) @@ -153,7 +155,7 @@ class RestSwitch(SwitchDevice): try: req = await self.set_device_state(body_on_t) - if req.status == 200: + if req.status == HTTP_OK: self._state = True else: _LOGGER.error( @@ -168,7 +170,7 @@ class RestSwitch(SwitchDevice): try: req = await self.set_device_state(body_off_t) - if req.status == 200: + if req.status == HTTP_OK: self._state = False else: _LOGGER.error( diff --git a/homeassistant/components/rest_command/__init__.py b/homeassistant/components/rest_command/__init__.py index bb2ede6d555..dc7337c7569 100644 --- a/homeassistant/components/rest_command/__init__.py +++ b/homeassistant/components/rest_command/__init__.py @@ -15,6 +15,7 @@ from homeassistant.const import ( CONF_URL, CONF_USERNAME, CONF_VERIFY_SSL, + HTTP_BAD_REQUEST, ) from homeassistant.core import callback from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -119,7 +120,7 @@ async def async_setup(hass, config): timeout=timeout, ) as response: - if response.status < 400: + if response.status < HTTP_BAD_REQUEST: _LOGGER.debug( "Success. Url: %s. Status code: %d.", response.url, diff --git a/homeassistant/components/rest_command/manifest.json b/homeassistant/components/rest_command/manifest.json index 9611eea23c0..a4441a7afa0 100644 --- a/homeassistant/components/rest_command/manifest.json +++ b/homeassistant/components/rest_command/manifest.json @@ -2,7 +2,5 @@ "domain": "rest_command", "name": "RESTful Command", "documentation": "https://www.home-assistant.io/integrations/rest_command", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rflink/__init__.py b/homeassistant/components/rflink/__init__.py index b8665fae9ef..542c63f3b7a 100644 --- a/homeassistant/components/rflink/__init__.py +++ b/homeassistant/components/rflink/__init__.py @@ -158,7 +158,7 @@ async def async_setup(hass, config): return # Lookup entities who registered this device id as device id or alias - event_id = event.get(EVENT_KEY_ID, None) + event_id = event.get(EVENT_KEY_ID) is_group_event = ( event_type == EVENT_KEY_COMMAND @@ -313,7 +313,7 @@ class RflinkDevice(Entity): self._handle_event(event) # Propagate changes through ha - self.async_schedule_update_ha_state() + self.async_write_ha_state() # Put command onto bus for user to subscribe to if self._should_fire_event and identify_event_type(event) == EVENT_KEY_COMMAND: @@ -360,7 +360,7 @@ class RflinkDevice(Entity): def _availability_callback(self, availability): """Update availability state.""" self._available = availability - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Register update callback.""" @@ -404,13 +404,17 @@ class RflinkDevice(Entity): self.hass.data[DATA_ENTITY_LOOKUP][EVENT_KEY_COMMAND][_id].append( self.entity_id ) - async_dispatcher_connect( - self.hass, SIGNAL_AVAILABILITY, self._availability_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_AVAILABILITY, self._availability_callback + ) ) - async_dispatcher_connect( - self.hass, - SIGNAL_HANDLE_EVENT.format(self.entity_id), - self.handle_event_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_HANDLE_EVENT.format(self.entity_id), + self.handle_event_callback, + ) ) # Process the initial event now that the entity is created @@ -494,7 +498,7 @@ class RflinkCommand(RflinkDevice): await self._async_send_command(cmd, self._signal_repetitions) # Update state of entity - await self.async_update_ha_state() + self.async_write_ha_state() def cancel_queued_send_commands(self): """Cancel queued signal repetition commands. diff --git a/homeassistant/components/rflink/binary_sensor.py b/homeassistant/components/rflink/binary_sensor.py index 148a7db2b64..c3600da4051 100644 --- a/homeassistant/components/rflink/binary_sensor.py +++ b/homeassistant/components/rflink/binary_sensor.py @@ -73,9 +73,9 @@ class RflinkBinarySensor(RflinkDevice, BinarySensorDevice): def _handle_event(self, event): """Domain specific event handler.""" command = event["command"] - if command == "on": + if command in ["on", "allon"]: self._state = True - elif command == "off": + elif command in ["off", "alloff"]: self._state = False if self._state and self._off_delay is not None: @@ -84,7 +84,7 @@ class RflinkBinarySensor(RflinkDevice, BinarySensorDevice): """Switch device off after a delay.""" self._delay_listener = None self._state = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() if self._delay_listener is not None: self._delay_listener() diff --git a/homeassistant/components/rflink/light.py b/homeassistant/components/rflink/light.py index 01004a3b45a..348fff0da9a 100644 --- a/homeassistant/components/rflink/light.py +++ b/homeassistant/components/rflink/light.py @@ -82,7 +82,7 @@ def entity_type_for_device_id(device_id): "newkaku": TYPE_HYBRID } protocol = device_id.split("_")[0] - return entity_type_mapping.get(protocol, None) + return entity_type_mapping.get(protocol) def entity_class_for_type(entity_type): @@ -162,8 +162,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= class RflinkLight(SwitchableRflinkDevice, Light): """Representation of a Rflink light.""" - pass - class DimmableRflinkLight(SwitchableRflinkDevice, Light): """Rflink light device that support dimming.""" diff --git a/homeassistant/components/rflink/manifest.json b/homeassistant/components/rflink/manifest.json index 0386e0c5bf8..e9ddd17e60a 100644 --- a/homeassistant/components/rflink/manifest.json +++ b/homeassistant/components/rflink/manifest.json @@ -3,6 +3,5 @@ "name": "RFLink", "documentation": "https://www.home-assistant.io/integrations/rflink", "requirements": ["rflink==0.0.52"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rflink/sensor.py b/homeassistant/components/rflink/sensor.py index bc736a1ede6..9394c568a73 100644 --- a/homeassistant/components/rflink/sensor.py +++ b/homeassistant/components/rflink/sensor.py @@ -139,13 +139,17 @@ class RflinkSensor(RflinkDevice): self.hass.data[DATA_ENTITY_LOOKUP][EVENT_KEY_SENSOR][_id].append( self.entity_id ) - async_dispatcher_connect( - self.hass, SIGNAL_AVAILABILITY, self._availability_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_AVAILABILITY, self._availability_callback + ) ) - async_dispatcher_connect( - self.hass, - SIGNAL_HANDLE_EVENT.format(self.entity_id), - self.handle_event_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_HANDLE_EVENT.format(self.entity_id), + self.handle_event_callback, + ) ) # Process the initial event now that the entity is created diff --git a/homeassistant/components/rflink/services.yaml b/homeassistant/components/rflink/services.yaml index 9269326ece6..3a44d04f75d 100644 --- a/homeassistant/components/rflink/services.yaml +++ b/homeassistant/components/rflink/services.yaml @@ -1,5 +1,9 @@ send_command: description: Send device command through RFLink. fields: - command: {description: The command to be sent., example: 'on'} - device_id: {description: RFLink device ID., example: newkaku_0000c6c2_1} + command: + description: The command to be sent. + example: "on" + device_id: + description: RFLink device ID. + example: newkaku_0000c6c2_1 diff --git a/homeassistant/components/rflink/switch.py b/homeassistant/components/rflink/switch.py index 943f8a6aae6..83c335f0f03 100644 --- a/homeassistant/components/rflink/switch.py +++ b/homeassistant/components/rflink/switch.py @@ -71,5 +71,3 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= class RflinkSwitch(SwitchableRflinkDevice, SwitchDevice): """Representation of a Rflink switch.""" - - pass diff --git a/homeassistant/components/rfxtrx/__init__.py b/homeassistant/components/rfxtrx/__init__.py index 39cbde08c01..fb57359829c 100644 --- a/homeassistant/components/rfxtrx/__init__.py +++ b/homeassistant/components/rfxtrx/__init__.py @@ -19,6 +19,7 @@ from homeassistant.const import ( POWER_WATT, TEMP_CELSIUS, UNIT_PERCENTAGE, + UV_INDEX, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -57,7 +58,7 @@ DATA_TYPES = OrderedDict( ("Sound", ""), ("Sensor Status", ""), ("Counter value", ""), - ("UV", "uv"), + ("UV", UV_INDEX), ("Humidity status", ""), ("Forecast", ""), ("Forecast numeric", ""), @@ -130,7 +131,7 @@ def setup(hass, config): if dummy_connection: rfx_object = rfxtrxmod.Connect( - device, None, debug=debug, transport_protocol=rfxtrxmod.DummyTransport2 + device, None, debug=debug, transport_protocol=rfxtrxmod.DummyTransport2, ) elif port is not None: # If port is set then we create a TCP connection @@ -214,7 +215,7 @@ def get_pt2262_device(device_id): and device.masked_id == get_pt2262_deviceid(device_id, device.data_bits) ): _LOGGER.debug( - "rfxtrx: found matching device %s for %s", device_id, device.masked_id + "rfxtrx: found matching device %s for %s", device_id, device.masked_id, ) return device return None @@ -306,13 +307,32 @@ def apply_received_command(event): return _LOGGER.debug( - "Device_id: %s device_update. Command: %s", device_id, event.values["Command"] + "Device_id: %s device_update. Command: %s", device_id, event.values["Command"], ) - if event.values["Command"] == "On" or event.values["Command"] == "Off": + if event.values["Command"] in [ + "On", + "Off", + "Up", + "Down", + "Stop", + "Open (inline relay)", + "Close (inline relay)", + "Stop (inline relay)", + ]: # Update the rfxtrx device state - is_on = event.values["Command"] == "On" + command = event.values["Command"] + if command in [ + "On", + "Up", + "Stop", + "Open (inline relay)", + "Stop (inline relay)", + ]: + is_on = True + elif command in ["Off", "Down", "Close (inline relay)"]: + is_on = False RFX_DEVICES[device_id].update_state(is_on) elif ( @@ -424,14 +444,17 @@ class RfxtrxDevice(Entity): elif command == "roll_up": for _ in range(self.signal_repetitions): self._event.device.send_open(rfx_object.transport) + self._state = True elif command == "roll_down": for _ in range(self.signal_repetitions): self._event.device.send_close(rfx_object.transport) + self._state = False elif command == "stop_roll": for _ in range(self.signal_repetitions): self._event.device.send_stop(rfx_object.transport) + self._state = True if self.added_to_hass: self.schedule_update_ha_state() diff --git a/homeassistant/components/rfxtrx/cover.py b/homeassistant/components/rfxtrx/cover.py index e1eb6ae77f5..da19c42ed69 100644 --- a/homeassistant/components/rfxtrx/cover.py +++ b/homeassistant/components/rfxtrx/cover.py @@ -82,7 +82,7 @@ class RfxtrxCover(RfxtrxDevice, CoverDevice, RestoreEntity): @property def is_closed(self): """Return if the cover is closed.""" - return None + return not self._state def open_cover(self, **kwargs): """Move the cover up.""" diff --git a/homeassistant/components/rfxtrx/manifest.json b/homeassistant/components/rfxtrx/manifest.json index a3c4d2fcb72..3b5790ad4ee 100644 --- a/homeassistant/components/rfxtrx/manifest.json +++ b/homeassistant/components/rfxtrx/manifest.json @@ -3,6 +3,5 @@ "name": "RFXCOM RFXtrx", "documentation": "https://www.home-assistant.io/integrations/rfxtrx", "requirements": ["pyRFXtrx==0.25"], - "dependencies": [], "codeowners": ["@danielhiversen"] } diff --git a/homeassistant/components/rfxtrx/sensor.py b/homeassistant/components/rfxtrx/sensor.py index 3f74ff18695..759268140fc 100644 --- a/homeassistant/components/rfxtrx/sensor.py +++ b/homeassistant/components/rfxtrx/sensor.py @@ -76,7 +76,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if not isinstance(event, SensorEvent): return - device_id = "sensor_" + slugify(event.device.id_string.lower()) + device_id = f"sensor_{slugify(event.device.id_string.lower())}" if device_id in RFX_DEVICES: sensors = RFX_DEVICES[device_id] diff --git a/homeassistant/components/ring/.translations/ca.json b/homeassistant/components/ring/.translations/ca.json deleted file mode 100644 index c25bdb22eee..00000000000 --- a/homeassistant/components/ring/.translations/ca.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "2fa": { - "data": { - "2fa": "Codi de dos factors" - }, - "title": "Autenticaci\u00f3 de dos factors" - }, - "user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "title": "Inici de sessi\u00f3 amb un compte de Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/da.json b/homeassistant/components/ring/.translations/da.json deleted file mode 100644 index 45aebd1ebd5..00000000000 --- a/homeassistant/components/ring/.translations/da.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheden er allerede konfigureret" - }, - "error": { - "invalid_auth": "Ugyldig godkendelse", - "unknown": "Uventet fejl" - }, - "step": { - "2fa": { - "data": { - "2fa": "Tofaktorkode" - }, - "title": "Tofaktorgodkendelse" - }, - "user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn" - }, - "title": "Log ind med Ring-konto" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/de.json b/homeassistant/components/ring/.translations/de.json deleted file mode 100644 index ca49bcef95f..00000000000 --- a/homeassistant/components/ring/.translations/de.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "2fa": { - "data": { - "2fa": "Zwei-Schritte-Code" - }, - "title": "Zwei-Schritte-Verifizierung" - }, - "user": { - "data": { - "password": "Passwort", - "username": "Benutzername" - }, - "title": "Anmeldung mit Ring-Konto" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/en.json b/homeassistant/components/ring/.translations/en.json deleted file mode 100644 index 54caa8f96e7..00000000000 --- a/homeassistant/components/ring/.translations/en.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "2fa": { - "data": { - "2fa": "Two-factor code" - }, - "title": "Two-factor authentication" - }, - "user": { - "data": { - "password": "Password", - "username": "Username" - }, - "title": "Sign-in with Ring account" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/es.json b/homeassistant/components/ring/.translations/es.json deleted file mode 100644 index f5598c56d70..00000000000 --- a/homeassistant/components/ring/.translations/es.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "invalid_auth": "Autenticaci\u00f3n inv\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "2fa": { - "data": { - "2fa": "C\u00f3digo de dos factores" - }, - "title": "Autenticaci\u00f3n de dos factores" - }, - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario" - }, - "title": "Iniciar sesi\u00f3n con cuenta de Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/fr.json b/homeassistant/components/ring/.translations/fr.json deleted file mode 100644 index c0397692bda..00000000000 --- a/homeassistant/components/ring/.translations/fr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "invalid_auth": "Authentification non valide", - "unknown": "Erreur inattendue" - }, - "step": { - "2fa": { - "data": { - "2fa": "Code \u00e0 deux facteurs" - }, - "title": "Authentification \u00e0 deux facteurs" - }, - "user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "title": "Connectez-vous avec votre compte Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/hu.json b/homeassistant/components/ring/.translations/hu.json deleted file mode 100644 index 578399c8152..00000000000 --- a/homeassistant/components/ring/.translations/hu.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Az eszk\u00f6zt m\u00e1r konfigur\u00e1ltuk" - }, - "error": { - "invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s.", - "unknown": "V\u00e1ratlan hiba" - }, - "step": { - "2fa": { - "data": { - "2fa": "K\u00e9tfaktoros k\u00f3d" - }, - "title": "K\u00e9tfaktoros hiteles\u00edt\u00e9s" - }, - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - }, - "title": "Bejelentkez\u00e9s a Ring fi\u00f3kkal" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/it.json b/homeassistant/components/ring/.translations/it.json deleted file mode 100644 index 2e50ee0d583..00000000000 --- a/homeassistant/components/ring/.translations/it.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" - }, - "error": { - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "2fa": { - "data": { - "2fa": "Codice autenticazione" - }, - "title": "Autenticazione a due fattori" - }, - "user": { - "data": { - "password": "Password", - "username": "Nome utente" - }, - "title": "Accedi con l'account Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/ko.json b/homeassistant/components/ring/.translations/ko.json deleted file mode 100644 index f566fb592d2..00000000000 --- a/homeassistant/components/ring/.translations/ko.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "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": { - "2fa": { - "data": { - "2fa": "2\ub2e8\uacc4 \uc778\uc99d \ucf54\ub4dc" - }, - "title": "2\ub2e8\uacc4 \uc778\uc99d" - }, - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "title": "Ring \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/lb.json b/homeassistant/components/ring/.translations/lb.json deleted file mode 100644 index d004655eebc..00000000000 --- a/homeassistant/components/ring/.translations/lb.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "invalid_auth": "Ong\u00eblteg Authentifikatioun", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "2fa": { - "data": { - "2fa": "2-Faktor Code" - }, - "title": "2-Faktor-Authentifikatioun" - }, - "user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm" - }, - "title": "Mam Ring Kont verbannen" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/nl.json b/homeassistant/components/ring/.translations/nl.json deleted file mode 100644 index 70736b15a9c..00000000000 --- a/homeassistant/components/ring/.translations/nl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparaat is al geconfigureerd" - }, - "error": { - "invalid_auth": "Ongeldige authenticatie", - "unknown": "Onverwachte fout" - }, - "step": { - "2fa": { - "data": { - "2fa": "Twee-factor code" - }, - "title": "Tweestapsverificatie" - }, - "user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam" - }, - "title": "Aanmelden met Ring-account" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/no.json b/homeassistant/components/ring/.translations/no.json deleted file mode 100644 index bd8699a3617..00000000000 --- a/homeassistant/components/ring/.translations/no.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "2fa": { - "data": { - "2fa": "To-faktorskode" - }, - "title": "To-faktor autentisering" - }, - "user": { - "data": { - "password": "Passord", - "username": "Brukernavn" - }, - "title": "Logg p\u00e5 med din Ring-konto" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/pl.json b/homeassistant/components/ring/.translations/pl.json deleted file mode 100644 index e592522c43b..00000000000 --- a/homeassistant/components/ring/.translations/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." - }, - "error": { - "invalid_auth": "Niepoprawne uwierzytelnienie", - "unknown": "Niespodziewany b\u0142\u0105d" - }, - "step": { - "2fa": { - "data": { - "2fa": "Kod uwierzytelniania dwusk\u0142adnikowego" - }, - "title": "Uwierzytelnianie dwusk\u0142adnikowe" - }, - "user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika" - }, - "title": "Zaloguj si\u0119 do konta Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/ru.json b/homeassistant/components/ring/.translations/ru.json deleted file mode 100644 index 905f23845a9..00000000000 --- a/homeassistant/components/ring/.translations/ru.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "2fa": { - "data": { - "2fa": "\u041a\u043e\u0434 \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" - }, - "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" - }, - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/sl.json b/homeassistant/components/ring/.translations/sl.json deleted file mode 100644 index 58e86634312..00000000000 --- a/homeassistant/components/ring/.translations/sl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana" - }, - "error": { - "invalid_auth": "Neveljavna avtentikacija", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "2fa": { - "data": { - "2fa": "Dvofaktorska koda" - }, - "title": "Dvofaktorska avtentikacija" - }, - "user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime" - }, - "title": "Prijava s ra\u010dunom Ring" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/sv.json b/homeassistant/components/ring/.translations/sv.json deleted file mode 100644 index e92790740fb..00000000000 --- a/homeassistant/components/ring/.translations/sv.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten \u00e4r redan konfigurerad" - }, - "error": { - "invalid_auth": "Ogiltig autentisering", - "unknown": "Ov\u00e4ntat fel" - }, - "step": { - "2fa": { - "data": { - "2fa": "Tv\u00e5faktorkod" - }, - "title": "Tv\u00e5faktorautentisering" - }, - "user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn" - }, - "title": "Logga in med Ring-konto" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/zh-Hant.json b/homeassistant/components/ring/.translations/zh-Hant.json deleted file mode 100644 index 6f5aaf434bb..00000000000 --- a/homeassistant/components/ring/.translations/zh-Hant.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "2fa": { - "data": { - "2fa": "\u96d9\u91cd\u9a57\u8b49\u78bc" - }, - "title": "\u96d9\u91cd\u9a57\u8b49" - }, - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "title": "\u4ee5 Ring \u5e33\u865f\u767b\u5165" - } - }, - "title": "Ring" - } -} \ No newline at end of file diff --git a/homeassistant/components/ring/binary_sensor.py b/homeassistant/components/ring/binary_sensor.py index 321b668f8aa..385d8a4f955 100644 --- a/homeassistant/components/ring/binary_sensor.py +++ b/homeassistant/components/ring/binary_sensor.py @@ -47,9 +47,7 @@ class RingBinarySensor(RingEntityMixin, BinarySensorDevice): super().__init__(config_entry_id, device) self._ring = ring self._sensor_type = sensor_type - self._name = "{0} {1}".format( - self._device.name, SENSOR_TYPES.get(sensor_type)[0] - ) + self._name = "{} {}".format(self._device.name, SENSOR_TYPES.get(sensor_type)[0]) self._device_class = SENSOR_TYPES.get(sensor_type)[2] self._state = None self._unique_id = f"{device.id}-{sensor_type}" diff --git a/homeassistant/components/ring/light.py b/homeassistant/components/ring/light.py index fa47ac35ee3..3340e0ad603 100644 --- a/homeassistant/components/ring/light.py +++ b/homeassistant/components/ring/light.py @@ -82,7 +82,7 @@ class RingLight(RingEntityMixin, Light): self._light_on = new_state == ON_STATE self._no_updates_until = dt_util.utcnow() + SKIP_UPDATES_DELAY - self.async_schedule_update_ha_state() + self.async_write_ha_state() def turn_on(self, **kwargs): """Turn the light on for 30 seconds.""" diff --git a/homeassistant/components/ring/sensor.py b/homeassistant/components/ring/sensor.py index 84edaf67c22..260b4170745 100644 --- a/homeassistant/components/ring/sensor.py +++ b/homeassistant/components/ring/sensor.py @@ -46,9 +46,7 @@ class RingSensor(RingEntityMixin, Entity): self._extra = None self._icon = "mdi:{}".format(SENSOR_TYPES.get(sensor_type)[3]) self._kind = SENSOR_TYPES.get(sensor_type)[4] - self._name = "{0} {1}".format( - self._device.name, SENSOR_TYPES.get(sensor_type)[0] - ) + self._name = "{} {}".format(self._device.name, SENSOR_TYPES.get(sensor_type)[0]) self._unique_id = f"{device.id}-{sensor_type}" @property diff --git a/homeassistant/components/ring/services.yaml b/homeassistant/components/ring/services.yaml index a1500e1360f..bcc9b2f7ff4 100644 --- a/homeassistant/components/ring/services.yaml +++ b/homeassistant/components/ring/services.yaml @@ -1,2 +1,2 @@ update: - description: Updates the data we have for all your ring devices \ No newline at end of file + description: Updates the data we have for all your ring devices diff --git a/homeassistant/components/ring/strings.json b/homeassistant/components/ring/strings.json index 6dff7c00ba6..8c8c7b1e6ab 100644 --- a/homeassistant/components/ring/strings.json +++ b/homeassistant/components/ring/strings.json @@ -1,27 +1,19 @@ { "config": { - "title": "Ring", "step": { "user": { "title": "Sign-in with Ring account", - "data": { - "username": "Username", - "password": "Password" - } + "data": { "username": "Username", "password": "Password" } }, "2fa": { "title": "Two-factor authentication", - "data": { - "2fa": "Two-factor code" - } + "data": { "2fa": "Two-factor code" } } }, "error": { "invalid_auth": "Invalid authentication", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } } } diff --git a/homeassistant/components/ring/translations/ca.json b/homeassistant/components/ring/translations/ca.json new file mode 100644 index 00000000000..bcd3bd43af4 --- /dev/null +++ b/homeassistant/components/ring/translations/ca.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "2fa": { + "data": { + "2fa": "Codi de dos factors" + }, + "title": "Autenticaci\u00f3 de dos factors" + }, + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "title": "Inici de sessi\u00f3 amb un compte de Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/da.json b/homeassistant/components/ring/translations/da.json new file mode 100644 index 00000000000..297e8b4037b --- /dev/null +++ b/homeassistant/components/ring/translations/da.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Enheden er allerede konfigureret" + }, + "error": { + "invalid_auth": "Ugyldig godkendelse", + "unknown": "Uventet fejl" + }, + "step": { + "2fa": { + "data": { + "2fa": "Tofaktorkode" + }, + "title": "Tofaktorgodkendelse" + }, + "user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn" + }, + "title": "Log ind med Ring-konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/de.json b/homeassistant/components/ring/translations/de.json new file mode 100644 index 00000000000..70463961dd6 --- /dev/null +++ b/homeassistant/components/ring/translations/de.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "2fa": { + "data": { + "2fa": "Zwei-Schritte-Code" + }, + "title": "Zwei-Schritte-Verifizierung" + }, + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "title": "Anmeldung mit Ring-Konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/en.json b/homeassistant/components/ring/translations/en.json new file mode 100644 index 00000000000..79323e41bbe --- /dev/null +++ b/homeassistant/components/ring/translations/en.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "2fa": { + "data": { + "2fa": "Two-factor code" + }, + "title": "Two-factor authentication" + }, + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "title": "Sign-in with Ring account" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/es.json b/homeassistant/components/ring/translations/es.json new file mode 100644 index 00000000000..0b5d31869ce --- /dev/null +++ b/homeassistant/components/ring/translations/es.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "invalid_auth": "Autenticaci\u00f3n inv\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "2fa": { + "data": { + "2fa": "C\u00f3digo de dos factores" + }, + "title": "Autenticaci\u00f3n de dos factores" + }, + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "title": "Iniciar sesi\u00f3n con cuenta de Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/fr.json b/homeassistant/components/ring/translations/fr.json new file mode 100644 index 00000000000..01bbd6587c3 --- /dev/null +++ b/homeassistant/components/ring/translations/fr.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "invalid_auth": "Authentification non valide", + "unknown": "Erreur inattendue" + }, + "step": { + "2fa": { + "data": { + "2fa": "Code \u00e0 deux facteurs" + }, + "title": "Authentification \u00e0 deux facteurs" + }, + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "title": "Connectez-vous avec votre compte Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/hu.json b/homeassistant/components/ring/translations/hu.json new file mode 100644 index 00000000000..fba6b944222 --- /dev/null +++ b/homeassistant/components/ring/translations/hu.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Az eszk\u00f6zt m\u00e1r konfigur\u00e1ltuk" + }, + "error": { + "invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s.", + "unknown": "V\u00e1ratlan hiba" + }, + "step": { + "2fa": { + "data": { + "2fa": "K\u00e9tfaktoros k\u00f3d" + }, + "title": "K\u00e9tfaktoros hiteles\u00edt\u00e9s" + }, + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + }, + "title": "Bejelentkez\u00e9s a Ring fi\u00f3kkal" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/it.json b/homeassistant/components/ring/translations/it.json new file mode 100644 index 00000000000..a511f696f89 --- /dev/null +++ b/homeassistant/components/ring/translations/it.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "2fa": { + "data": { + "2fa": "Codice autenticazione" + }, + "title": "Autenticazione a due fattori" + }, + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "title": "Accedi con l'account Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/ko.json b/homeassistant/components/ring/translations/ko.json new file mode 100644 index 00000000000..caf6d824d0d --- /dev/null +++ b/homeassistant/components/ring/translations/ko.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "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": { + "2fa": { + "data": { + "2fa": "2\ub2e8\uacc4 \uc778\uc99d \ucf54\ub4dc" + }, + "title": "2\ub2e8\uacc4 \uc778\uc99d" + }, + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Ring \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/lb.json b/homeassistant/components/ring/translations/lb.json new file mode 100644 index 00000000000..17b1edda6b6 --- /dev/null +++ b/homeassistant/components/ring/translations/lb.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "2fa": { + "data": { + "2fa": "2-Faktor Code" + }, + "title": "2-Faktor-Authentifikatioun" + }, + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "title": "Mam Ring Kont verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/.translations/lv.json b/homeassistant/components/ring/translations/lv.json similarity index 100% rename from homeassistant/components/ring/.translations/lv.json rename to homeassistant/components/ring/translations/lv.json diff --git a/homeassistant/components/ring/translations/nl.json b/homeassistant/components/ring/translations/nl.json new file mode 100644 index 00000000000..08919a05608 --- /dev/null +++ b/homeassistant/components/ring/translations/nl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd" + }, + "error": { + "invalid_auth": "Ongeldige authenticatie", + "unknown": "Onverwachte fout" + }, + "step": { + "2fa": { + "data": { + "2fa": "Twee-factor code" + }, + "title": "Tweestapsverificatie" + }, + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + }, + "title": "Aanmelden met Ring-account" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/no.json b/homeassistant/components/ring/translations/no.json new file mode 100644 index 00000000000..1a64f0268a6 --- /dev/null +++ b/homeassistant/components/ring/translations/no.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "2fa": { + "data": { + "2fa": "To-faktorskode" + }, + "title": "To-faktor autentisering" + }, + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "title": "Logg p\u00e5 med din Ring-konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/pl.json b/homeassistant/components/ring/translations/pl.json new file mode 100644 index 00000000000..319348aa8a2 --- /dev/null +++ b/homeassistant/components/ring/translations/pl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "invalid_auth": "Niepoprawne uwierzytelnienie", + "unknown": "Niespodziewany b\u0142\u0105d" + }, + "step": { + "2fa": { + "data": { + "2fa": "Kod uwierzytelniania dwusk\u0142adnikowego" + }, + "title": "Uwierzytelnianie dwusk\u0142adnikowe" + }, + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Zaloguj si\u0119 do konta Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/pt.json b/homeassistant/components/ring/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/ring/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/ru.json b/homeassistant/components/ring/translations/ru.json new file mode 100644 index 00000000000..aa3b383bbce --- /dev/null +++ b/homeassistant/components/ring/translations/ru.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "2fa": { + "data": { + "2fa": "\u041a\u043e\u0434 \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" + }, + "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" + }, + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/sl.json b/homeassistant/components/ring/translations/sl.json new file mode 100644 index 00000000000..7a6ae4b2ad7 --- /dev/null +++ b/homeassistant/components/ring/translations/sl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "2fa": { + "data": { + "2fa": "Dvofaktorska koda" + }, + "title": "Dvofaktorska avtentikacija" + }, + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "title": "Prijava s ra\u010dunom Ring" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/sv.json b/homeassistant/components/ring/translations/sv.json new file mode 100644 index 00000000000..ecb09354f0d --- /dev/null +++ b/homeassistant/components/ring/translations/sv.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten \u00e4r redan konfigurerad" + }, + "error": { + "invalid_auth": "Ogiltig autentisering", + "unknown": "Ov\u00e4ntat fel" + }, + "step": { + "2fa": { + "data": { + "2fa": "Tv\u00e5faktorkod" + }, + "title": "Tv\u00e5faktorautentisering" + }, + "user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn" + }, + "title": "Logga in med Ring-konto" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ring/translations/zh-Hant.json b/homeassistant/components/ring/translations/zh-Hant.json new file mode 100644 index 00000000000..b9a66540c3b --- /dev/null +++ b/homeassistant/components/ring/translations/zh-Hant.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "2fa": { + "data": { + "2fa": "\u96d9\u91cd\u9a57\u8b49\u78bc" + }, + "title": "\u96d9\u91cd\u9a57\u8b49" + }, + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u4ee5 Ring \u5e33\u865f\u767b\u5165" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/ripple/manifest.json b/homeassistant/components/ripple/manifest.json index 38a193e4a91..d730093ed0f 100644 --- a/homeassistant/components/ripple/manifest.json +++ b/homeassistant/components/ripple/manifest.json @@ -3,6 +3,5 @@ "name": "Ripple", "documentation": "https://www.home-assistant.io/integrations/ripple", "requirements": ["python-ripple-api==0.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rmvtransport/manifest.json b/homeassistant/components/rmvtransport/manifest.json index eae73a2de42..693134dfeca 100644 --- a/homeassistant/components/rmvtransport/manifest.json +++ b/homeassistant/components/rmvtransport/manifest.json @@ -3,6 +3,5 @@ "name": "RMV", "documentation": "https://www.home-assistant.io/integrations/rmvtransport", "requirements": ["PyRMVtransport==0.2.9"], - "dependencies": [], "codeowners": ["@cgtobi"] } diff --git a/homeassistant/components/rocketchat/manifest.json b/homeassistant/components/rocketchat/manifest.json index a3fa11609e5..23798ff5df1 100644 --- a/homeassistant/components/rocketchat/manifest.json +++ b/homeassistant/components/rocketchat/manifest.json @@ -3,6 +3,5 @@ "name": "Rocket.Chat", "documentation": "https://www.home-assistant.io/integrations/rocketchat", "requirements": ["rocketchat-API==0.6.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rocketchat/notify.py b/homeassistant/components/rocketchat/notify.py index 2b5b8dcd235..efb2288f4d8 100644 --- a/homeassistant/components/rocketchat/notify.py +++ b/homeassistant/components/rocketchat/notify.py @@ -13,7 +13,13 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONF_PASSWORD, CONF_ROOM, CONF_URL, CONF_USERNAME +from homeassistant.const import ( + CONF_PASSWORD, + CONF_ROOM, + CONF_URL, + CONF_USERNAME, + HTTP_OK, +) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -62,7 +68,7 @@ class RocketChatNotificationService(BaseNotificationService): """Send a message to Rocket.Chat.""" data = kwargs.get(ATTR_DATA) or {} resp = self._server.chat_post_message(message, channel=self._room, **data) - if resp.status_code == 200: + if resp.status_code == HTTP_OK: success = resp.json()["success"] if not success: _LOGGER.error("Unable to post Rocket.Chat message") diff --git a/homeassistant/components/roku/.translations/ca.json b/homeassistant/components/roku/.translations/ca.json deleted file mode 100644 index 3f9897784f9..00000000000 --- a/homeassistant/components/roku/.translations/ca.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu Roku ja est\u00e0 configurat", - "unknown": "Error inesperat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "Vols configurar {name}? Es substituiran les configuracions manuals d'aquest dispositiu en els arxius yaml.", - "title": "Roku" - }, - "user": { - "data": { - "host": "Amfitri\u00f3 o adre\u00e7a IP" - }, - "description": "Introdueix la teva informaci\u00f3 de Roku.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/de.json b/homeassistant/components/roku/.translations/de.json deleted file mode 100644 index 3954d9d549d..00000000000 --- a/homeassistant/components/roku/.translations/de.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Das Roku-Ger\u00e4t ist bereits konfiguriert", - "unknown": "Unerwarteter Fehler" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "data": { - "one": "eins", - "other": "andere" - }, - "description": "M\u00f6chten Sie {name} einrichten?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Host oder IP-Adresse" - }, - "description": "Geben Sie Ihre Roku-Informationen ein.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/en.json b/homeassistant/components/roku/.translations/en.json deleted file mode 100644 index 30c53e1d89e..00000000000 --- a/homeassistant/components/roku/.translations/en.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Roku device is already configured", - "unknown": "Unexpected error" - }, - "error": { - "cannot_connect": "Failed to connect, please try again" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "Do you want to set up {name}?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Host or IP address" - }, - "description": "Enter your Roku information.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/es.json b/homeassistant/components/roku/.translations/es.json deleted file mode 100644 index ffa850f6ebe..00000000000 --- a/homeassistant/components/roku/.translations/es.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo Roku ya est\u00e1 configurado", - "unknown": "Error inesperado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo." - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "\u00bfQuieres configurar {name}?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Host o direcci\u00f3n IP" - }, - "description": "Introduce tu informaci\u00f3n de Roku.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/fr.json b/homeassistant/components/roku/.translations/fr.json deleted file mode 100644 index a76f68f2f61..00000000000 --- a/homeassistant/components/roku/.translations/fr.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le p\u00e9riph\u00e9rique Roku est d\u00e9j\u00e0 configur\u00e9", - "unknown": "Erreur inattendue" - }, - "error": { - "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "Voulez-vous configurer {name} ?", - "title": "Roku" - }, - "user": { - "data": { - "host": "H\u00f4te ou adresse IP" - }, - "description": "Entrez vos informations Roku.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/it.json b/homeassistant/components/roku/.translations/it.json deleted file mode 100644 index c530504c6ec..00000000000 --- a/homeassistant/components/roku/.translations/it.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo Roku \u00e8 gi\u00e0 configurato", - "unknown": "Errore imprevisto" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "data": { - "one": "uno", - "other": "altri" - }, - "description": "Vuoi impostare {name}?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Host o indirizzo IP" - }, - "description": "Inserisci le tue informazioni Roku.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/ko.json b/homeassistant/components/roku/.translations/ko.json deleted file mode 100644 index d7cad509da1..00000000000 --- a/homeassistant/components/roku/.translations/ko.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Roku \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "{name} \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Roku" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c" - }, - "description": "Roku \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/lb.json b/homeassistant/components/roku/.translations/lb.json deleted file mode 100644 index da6136334ce..00000000000 --- a/homeassistant/components/roku/.translations/lb.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Roku Apparat ass scho konfigur\u00e9iert", - "unknown": "Onerwaarte Feeler" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol." - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "data": { - "one": "Een", - "other": "Aaner" - }, - "description": "Soll {name} konfigur\u00e9iert ginn?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Numm oder IP Adresse" - }, - "description": "F\u00ebll d\u00e9ng Roku Informatiounen aus.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/no.json b/homeassistant/components/roku/.translations/no.json deleted file mode 100644 index df56aa5d35d..00000000000 --- a/homeassistant/components/roku/.translations/no.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Roku-enheten er allerede konfigurert", - "unknown": "Uventet feil" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "Vil du sette opp {name} ?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Vert eller IP-adresse" - }, - "description": "Skriv inn Roku-informasjonen din.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/pl.json b/homeassistant/components/roku/.translations/pl.json deleted file mode 100644 index b92aab58df6..00000000000 --- a/homeassistant/components/roku/.translations/pl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie Roku jest ju\u017c skonfigurowane." - }, - "error": { - "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie." - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "data": { - "few": "kilka", - "many": "wiele", - "one": "jeden", - "other": "inne" - }, - "description": "Czy chcesz skonfigurowa\u0107 {name}? R\u0119czne konfiguracje tego urz\u0105dzenia zostan\u0105 zast\u0105pione.", - "title": "Roku" - }, - "user": { - "data": { - "host": "Nazwa hosta lub adres IP" - }, - "description": "Wprowad\u017a dane Roku.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/ru.json b/homeassistant/components/roku/.translations/ru.json deleted file mode 100644 index 0db5f9718aa..00000000000 --- a/homeassistant/components/roku/.translations/ru.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "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." - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name}?", - "title": "Roku" - }, - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e Roku.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/sl.json b/homeassistant/components/roku/.translations/sl.json deleted file mode 100644 index 0745151cb0a..00000000000 --- a/homeassistant/components/roku/.translations/sl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava roku je \u017ee konfigurirana", - "unknown": "Nepri\u010dakovana napaka" - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova" - }, - "flow_title": "Roku: {name}", - "step": { - "ssdp_confirm": { - "data": { - "few": "nekaj", - "one": "ena", - "other": "drugo", - "two": "dva" - }, - "description": "Ali \u017eelite nastaviti {name}?", - "title": "Roku" - }, - "user": { - "data": { - "host": "Gostitelj ali IP naslov" - }, - "description": "Vnesite va\u0161e Roku podatke.", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/zh-Hant.json b/homeassistant/components/roku/.translations/zh-Hant.json deleted file mode 100644 index 529fcb604c7..00000000000 --- a/homeassistant/components/roku/.translations/zh-Hant.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Roku \u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21" - }, - "flow_title": "Roku\uff1a{name}", - "step": { - "ssdp_confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name}\uff1f", - "title": "Roku" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740" - }, - "description": "\u8f38\u5165 Roku \u8cc7\u8a0a\u3002", - "title": "Roku" - } - }, - "title": "Roku" - } -} \ No newline at end of file diff --git a/homeassistant/components/roku/manifest.json b/homeassistant/components/roku/manifest.json index 43ccb6b8ad3..e0c7c9f5c49 100644 --- a/homeassistant/components/roku/manifest.json +++ b/homeassistant/components/roku/manifest.json @@ -3,7 +3,6 @@ "name": "Roku", "documentation": "https://www.home-assistant.io/integrations/roku", "requirements": ["roku==4.1.0"], - "dependencies": [], "ssdp": [ { "st": "roku:ecp", diff --git a/homeassistant/components/roku/media_player.py b/homeassistant/components/roku/media_player.py index ba923f0fdd2..950946831a8 100644 --- a/homeassistant/components/roku/media_player.py +++ b/homeassistant/components/roku/media_player.py @@ -1,4 +1,6 @@ """Support for the Roku media player.""" +import logging + from requests.exceptions import ( ConnectionError as RequestsConnectionError, ReadTimeout as RequestsReadTimeout, @@ -7,9 +9,10 @@ from roku import RokuException from homeassistant.components.media_player import MediaPlayerDevice from homeassistant.components.media_player.const import ( - MEDIA_TYPE_MOVIE, + MEDIA_TYPE_CHANNEL, SUPPORT_NEXT_TRACK, SUPPORT_PLAY, + SUPPORT_PLAY_MEDIA, SUPPORT_PREVIOUS_TRACK, SUPPORT_SELECT_SOURCE, SUPPORT_TURN_OFF, @@ -21,6 +24,8 @@ from homeassistant.const import STATE_HOME, STATE_IDLE, STATE_PLAYING, STATE_STA from .const import DATA_CLIENT, DEFAULT_MANUFACTURER, DEFAULT_PORT, DOMAIN +_LOGGER = logging.getLogger(__name__) + SUPPORT_ROKU = ( SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK @@ -28,6 +33,7 @@ SUPPORT_ROKU = ( | SUPPORT_VOLUME_MUTE | SUPPORT_SELECT_SOURCE | SUPPORT_PLAY + | SUPPORT_PLAY_MEDIA | SUPPORT_TURN_ON | SUPPORT_TURN_OFF ) @@ -59,16 +65,10 @@ class RokuDevice(MediaPlayerDevice): self._power_state = self.roku.power_state self.ip_address = self.roku.host self.channels = self.get_source_list() - - if self.roku.current_app is not None: - self.current_app = self.roku.current_app - else: - self.current_app = None - + self.current_app = self.roku.current_app self._available = True except (RequestsConnectionError, RequestsReadTimeout, RokuException): self._available = False - pass def get_source_list(self): """Get the list of applications to be used as sources.""" @@ -84,6 +84,7 @@ class RokuDevice(MediaPlayerDevice): """Return the name of the device.""" if self._device_info.user_device_name: return self._device_info.user_device_name + return f"Roku {self._device_info.serial_num}" @property @@ -97,8 +98,10 @@ class RokuDevice(MediaPlayerDevice): if self.current_app.name == "Power Saver" or self.current_app.is_screensaver: return STATE_IDLE + if self.current_app.name == "Roku": return STATE_HOME + if self.current_app.name is not None: return STATE_PLAYING @@ -133,28 +136,22 @@ class RokuDevice(MediaPlayerDevice): @property def media_content_type(self): """Content type of current playing media.""" - if self.current_app is None: + if self.current_app is None or self.current_app.name in ("Power Saver", "Roku"): return None - if self.current_app.name == "Power Saver": - return None - if self.current_app.name == "Roku": - return None - return MEDIA_TYPE_MOVIE + + return MEDIA_TYPE_CHANNEL @property def media_image_url(self): """Image url of current playing media.""" - if self.current_app is None: - return None - if self.current_app.name == "Roku": - return None - if self.current_app.name == "Power Saver": + if self.current_app is None or self.current_app.name in ("Power Saver", "Roku"): return None + if self.current_app.id is None: return None - return "http://{0}:{1}/query/icon/{2}".format( - self.ip_address, DEFAULT_PORT, self.current_app.id + return ( + f"http://{self.ip_address}:{DEFAULT_PORT}/query/icon/{self.current_app.id}" ) @property @@ -218,11 +215,26 @@ class RokuDevice(MediaPlayerDevice): if self.current_app is not None: self.roku.volume_down() + def play_media(self, media_type, media_id, **kwargs): + """Tune to channel.""" + if media_type != MEDIA_TYPE_CHANNEL: + _LOGGER.error( + "Invalid media type %s. Only %s is supported", + media_type, + MEDIA_TYPE_CHANNEL, + ) + return + + if self.current_app is not None: + self.roku.launch(self.roku["tvinput.dtv"], {"ch": media_id}) + def select_source(self, source): """Select input source.""" - if self.current_app is not None: - if source == "Home": - self.roku.home() - else: - channel = self.roku[source] - channel.launch() + if self.current_app is None: + return + + if source == "Home": + self.roku.home() + else: + channel = self.roku[source] + channel.launch() diff --git a/homeassistant/components/roku/remote.py b/homeassistant/components/roku/remote.py index 548282d6b2f..999747c9a27 100644 --- a/homeassistant/components/roku/remote.py +++ b/homeassistant/components/roku/remote.py @@ -43,7 +43,6 @@ class RokuRemote(RemoteDevice): self._available = True except (RequestsConnectionError, RequestsReadTimeout, RokuException): self._available = False - pass @property def name(self): diff --git a/homeassistant/components/roku/strings.json b/homeassistant/components/roku/strings.json index 17072850259..bc73623ae31 100644 --- a/homeassistant/components/roku/strings.json +++ b/homeassistant/components/roku/strings.json @@ -1,14 +1,10 @@ { "config": { - "title": "Roku", "flow_title": "Roku: {name}", "step": { "user": { - "title": "Roku", "description": "Enter your Roku information.", - "data": { - "host": "Host or IP address" - } + "data": { "host": "Host or IP address" } }, "ssdp_confirm": { "title": "Roku", @@ -16,9 +12,7 @@ "data": {} } }, - "error": { - "cannot_connect": "Failed to connect, please try again" - }, + "error": { "cannot_connect": "Failed to connect, please try again" }, "abort": { "already_configured": "Roku device is already configured", "unknown": "Unexpected error" diff --git a/homeassistant/components/roku/translations/ca.json b/homeassistant/components/roku/translations/ca.json new file mode 100644 index 00000000000..60382ca137a --- /dev/null +++ b/homeassistant/components/roku/translations/ca.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu Roku ja est\u00e0 configurat", + "unknown": "Error inesperat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "Vols configurar {name}? Es substituiran les configuracions manuals d'aquest dispositiu en els arxius yaml.", + "title": "Roku" + }, + "user": { + "data": { + "host": "Amfitri\u00f3 o adre\u00e7a IP" + }, + "description": "Introdueix la teva informaci\u00f3 de Roku.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/.translations/cs.json b/homeassistant/components/roku/translations/cs.json similarity index 100% rename from homeassistant/components/roku/.translations/cs.json rename to homeassistant/components/roku/translations/cs.json diff --git a/homeassistant/components/roku/translations/de.json b/homeassistant/components/roku/translations/de.json new file mode 100644 index 00000000000..90b30dfafdf --- /dev/null +++ b/homeassistant/components/roku/translations/de.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Das Roku-Ger\u00e4t ist bereits konfiguriert", + "unknown": "Unerwarteter Fehler" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "data": { + "one": "eins", + "other": "andere" + }, + "description": "M\u00f6chten Sie {name} einrichten?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Host oder IP-Adresse" + }, + "description": "Geben Sie Ihre Roku-Informationen ein.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/en.json b/homeassistant/components/roku/translations/en.json new file mode 100644 index 00000000000..07414cc2b3a --- /dev/null +++ b/homeassistant/components/roku/translations/en.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Roku device is already configured", + "unknown": "Unexpected error" + }, + "error": { + "cannot_connect": "Failed to connect, please try again" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "Do you want to set up {name}?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Host or IP address" + }, + "description": "Enter your Roku information.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/es.json b/homeassistant/components/roku/translations/es.json new file mode 100644 index 00000000000..3f190d41331 --- /dev/null +++ b/homeassistant/components/roku/translations/es.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo Roku ya est\u00e1 configurado", + "unknown": "Error inesperado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo." + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "\u00bfQuieres configurar {name}?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Host o direcci\u00f3n IP" + }, + "description": "Introduce tu informaci\u00f3n de Roku.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/fr.json b/homeassistant/components/roku/translations/fr.json new file mode 100644 index 00000000000..64c3abf5d1f --- /dev/null +++ b/homeassistant/components/roku/translations/fr.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Le p\u00e9riph\u00e9rique Roku est d\u00e9j\u00e0 configur\u00e9", + "unknown": "Erreur inattendue" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "Voulez-vous configurer {name} ?", + "title": "Roku" + }, + "user": { + "data": { + "host": "H\u00f4te ou adresse IP" + }, + "description": "Entrez vos informations Roku.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/it.json b/homeassistant/components/roku/translations/it.json new file mode 100644 index 00000000000..0192c848e09 --- /dev/null +++ b/homeassistant/components/roku/translations/it.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo Roku \u00e8 gi\u00e0 configurato", + "unknown": "Errore imprevisto" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "data": { + "one": "uno", + "other": "altri" + }, + "description": "Vuoi impostare {name}?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Host o indirizzo IP" + }, + "description": "Inserisci le tue informazioni Roku.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/ko.json b/homeassistant/components/roku/translations/ko.json new file mode 100644 index 00000000000..7420611936f --- /dev/null +++ b/homeassistant/components/roku/translations/ko.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Roku \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "{name} \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Roku" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c" + }, + "description": "Roku \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/lb.json b/homeassistant/components/roku/translations/lb.json new file mode 100644 index 00000000000..8674c6802be --- /dev/null +++ b/homeassistant/components/roku/translations/lb.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Roku Apparat ass scho konfigur\u00e9iert", + "unknown": "Onerwaarte Feeler" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol." + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "data": { + "one": "Een", + "other": "Aaner" + }, + "description": "Soll {name} konfigur\u00e9iert ginn?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Numm oder IP Adresse" + }, + "description": "F\u00ebll d\u00e9ng Roku Informatiounen aus.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/no.json b/homeassistant/components/roku/translations/no.json new file mode 100644 index 00000000000..0f126e6decd --- /dev/null +++ b/homeassistant/components/roku/translations/no.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Roku-enheten er allerede konfigurert", + "unknown": "Uventet feil" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "Vil du sette opp {name} ?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Vert eller IP-adresse" + }, + "description": "Skriv inn Roku-informasjonen din.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/pl.json b/homeassistant/components/roku/translations/pl.json new file mode 100644 index 00000000000..e1ad0604936 --- /dev/null +++ b/homeassistant/components/roku/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie Roku jest ju\u017c skonfigurowane.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie." + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "data": { + "few": "kilka", + "many": "wiele", + "one": "jeden", + "other": "inne" + }, + "description": "Czy chcesz skonfigurowa\u0107 {name}? R\u0119czne konfiguracje tego urz\u0105dzenia zostan\u0105 zast\u0105pione.", + "title": "Roku" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP" + }, + "description": "Wprowad\u017a dane Roku.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/ru.json b/homeassistant/components/roku/translations/ru.json new file mode 100644 index 00000000000..52a33805e63 --- /dev/null +++ b/homeassistant/components/roku/translations/ru.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "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." + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name}?", + "title": "Roku" + }, + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e Roku.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/sl.json b/homeassistant/components/roku/translations/sl.json new file mode 100644 index 00000000000..fd442881b81 --- /dev/null +++ b/homeassistant/components/roku/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava roku je \u017ee konfigurirana", + "unknown": "Nepri\u010dakovana napaka" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova" + }, + "flow_title": "Roku: {name}", + "step": { + "ssdp_confirm": { + "data": { + "few": "nekaj", + "one": "ena", + "other": "drugo", + "two": "dva" + }, + "description": "Ali \u017eelite nastaviti {name}?", + "title": "Roku" + }, + "user": { + "data": { + "host": "Gostitelj ali IP naslov" + }, + "description": "Vnesite va\u0161e Roku podatke.", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roku/translations/zh-Hant.json b/homeassistant/components/roku/translations/zh-Hant.json new file mode 100644 index 00000000000..5b310b20b63 --- /dev/null +++ b/homeassistant/components/roku/translations/zh-Hant.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Roku \u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21" + }, + "flow_title": "Roku\uff1a{name}", + "step": { + "ssdp_confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name}\uff1f", + "title": "Roku" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740" + }, + "description": "\u8f38\u5165 Roku \u8cc7\u8a0a\u3002", + "title": "Roku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/__init__.py b/homeassistant/components/roomba/__init__.py index c0e5f68483e..28092f96477 100644 --- a/homeassistant/components/roomba/__init__.py +++ b/homeassistant/components/roomba/__init__.py @@ -1 +1,192 @@ """The roomba component.""" +import asyncio +import logging + +import async_timeout +from roomba import Roomba, RoombaConnectionError +import voluptuous as vol + +from homeassistant import config_entries, exceptions +from homeassistant.const import CONF_HOST, CONF_PASSWORD +from homeassistant.core import callback +from homeassistant.helpers import config_validation as cv + +from .const import ( + BLID, + COMPONENTS, + CONF_BLID, + CONF_CERT, + CONF_CONTINUOUS, + CONF_DELAY, + CONF_NAME, + DEFAULT_CERT, + DEFAULT_CONTINUOUS, + DEFAULT_DELAY, + DOMAIN, + ROOMBA_SESSION, +) + +_LOGGER = logging.getLogger(__name__) + + +def _has_all_unique_bilds(value): + """Validate that each vacuum configured has a unique bild. + + Uniqueness is determined case-independently. + """ + bilds = [device[CONF_BLID] for device in value] + schema = vol.Schema(vol.Unique()) + schema(bilds) + return value + + +DEVICE_SCHEMA = vol.Schema( + { + vol.Required(CONF_HOST): str, + vol.Required(CONF_BLID): str, + vol.Required(CONF_PASSWORD): str, + vol.Optional(CONF_CERT, default=DEFAULT_CERT): str, + vol.Optional(CONF_CONTINUOUS, default=DEFAULT_CONTINUOUS): bool, + vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): int, + }, +) + + +CONFIG_SCHEMA = vol.Schema( + {DOMAIN: vol.All(cv.ensure_list, [DEVICE_SCHEMA], _has_all_unique_bilds)}, + extra=vol.ALLOW_EXTRA, +) + + +async def async_setup(hass, config): + """Set up the roomba environment.""" + hass.data.setdefault(DOMAIN, {}) + + if DOMAIN not in config: + return True + for index, conf in enumerate(config[DOMAIN]): + _LOGGER.debug("Importing Roomba #%d - %s", index, conf[CONF_HOST]) + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=conf, + ) + ) + + return True + + +async def async_setup_entry(hass, config_entry): + """Set the config entry up.""" + # Set up roomba platforms with config entry + + if not config_entry.options: + hass.config_entries.async_update_entry( + config_entry, + options={ + "continuous": config_entry.data[CONF_CONTINUOUS], + "delay": config_entry.data[CONF_DELAY], + }, + ) + + roomba = Roomba( + address=config_entry.data[CONF_HOST], + blid=config_entry.data[CONF_BLID], + password=config_entry.data[CONF_PASSWORD], + cert_name=config_entry.data[CONF_CERT], + continuous=config_entry.options[CONF_CONTINUOUS], + delay=config_entry.options[CONF_DELAY], + ) + roomba.exclude = "wifistat" # ignore wifistat to avoid unnecessary updates + + try: + if not await async_connect_or_timeout(hass, roomba): + return False + except CannotConnect: + raise exceptions.ConfigEntryNotReady + + hass.data[DOMAIN][config_entry.entry_id] = { + ROOMBA_SESSION: roomba, + BLID: config_entry.data[CONF_BLID], + } + + for component in COMPONENTS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(config_entry, component) + ) + + if not config_entry.update_listeners: + config_entry.add_update_listener(async_update_options) + + return True + + +async def async_connect_or_timeout(hass, roomba): + """Connect to vacuum.""" + try: + name = None + with async_timeout.timeout(10): + _LOGGER.debug("Initialize connection to vacuum") + await hass.async_add_job(roomba.connect) + while not roomba.roomba_connected or name is None: + # Waiting for connection and check datas ready + name = roomba_reported_state(roomba).get("name", None) + if name: + break + await asyncio.sleep(1) + except RoombaConnectionError: + _LOGGER.error("Error to connect to vacuum") + raise CannotConnect + except asyncio.TimeoutError: + # api looping if user or password incorrect and roomba exist + await async_disconnect_or_timeout(hass, roomba) + _LOGGER.error("Timeout expired") + raise CannotConnect + + return {ROOMBA_SESSION: roomba, CONF_NAME: name} + + +async def async_disconnect_or_timeout(hass, roomba): + """Disconnect to vacuum.""" + _LOGGER.debug("Disconnect vacuum") + with async_timeout.timeout(3): + await hass.async_add_job(roomba.disconnect) + return True + + +async def async_update_options(hass, config_entry): + """Update options.""" + await hass.config_entries.async_reload(config_entry.entry_id) + + +async def async_unload_entry(hass, config_entry): + """Unload a config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(config_entry, component) + for component in COMPONENTS + ] + ) + ) + if unload_ok: + domain_data = hass.data[DOMAIN][config_entry.entry_id] + await async_disconnect_or_timeout(hass, roomba=domain_data[ROOMBA_SESSION]) + hass.data[DOMAIN].pop(config_entry.entry_id) + + return unload_ok + + +def roomba_reported_state(roomba): + """Roomba report.""" + return roomba.master_state.get("state", {}).get("reported", {}) + + +@callback +def _async_find_matching_config_entry(hass, prefix): + for entry in hass.config_entries.async_entries(DOMAIN): + if entry.unique_id == prefix: + return entry + + +class CannotConnect(exceptions.HomeAssistantError): + """Error to indicate we cannot connect.""" diff --git a/homeassistant/components/roomba/binary_sensor.py b/homeassistant/components/roomba/binary_sensor.py new file mode 100644 index 00000000000..47212563b5b --- /dev/null +++ b/homeassistant/components/roomba/binary_sensor.py @@ -0,0 +1,47 @@ +"""Roomba binary sensor entities.""" +import logging + +from homeassistant.components.binary_sensor import BinarySensorDevice + +from . import roomba_reported_state +from .const import BLID, DOMAIN, ROOMBA_SESSION +from .irobot_base import IRobotEntity + +_LOGGER = logging.getLogger(__name__) + + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the iRobot Roomba vacuum cleaner.""" + domain_data = hass.data[DOMAIN][config_entry.entry_id] + roomba = domain_data[ROOMBA_SESSION] + blid = domain_data[BLID] + status = roomba_reported_state(roomba).get("bin", {}) + if "full" in status: + roomba_vac = RoombaBinStatus(roomba, blid) + async_add_entities([roomba_vac], True) + + +class RoombaBinStatus(IRobotEntity, BinarySensorDevice): + """Class to hold Roomba Sensor basic info.""" + + ICON = "mdi:delete-variant" + + @property + def name(self): + """Return the name of the sensor.""" + return f"{self._name} Bin Full" + + @property + def unique_id(self): + """Return the ID of this sensor.""" + return f"bin_{self._blid}" + + @property + def icon(self): + """Return the icon of this sensor.""" + return self.ICON + + @property + def state(self): + """Return the state of the sensor.""" + return roomba_reported_state(self.vacuum).get("bin", {}).get("full", False) diff --git a/homeassistant/components/roomba/braava.py b/homeassistant/components/roomba/braava.py new file mode 100644 index 00000000000..1a3d106bf80 --- /dev/null +++ b/homeassistant/components/roomba/braava.py @@ -0,0 +1,135 @@ +"""Class for Braava devices.""" +import logging + +from homeassistant.components.vacuum import SUPPORT_FAN_SPEED + +from .irobot_base import SUPPORT_IROBOT, IRobotVacuum + +_LOGGER = logging.getLogger(__name__) + +ATTR_DETECTED_PAD = "detected_pad" +ATTR_LID_CLOSED = "lid_closed" +ATTR_TANK_PRESENT = "tank_present" +ATTR_TANK_LEVEL = "tank_level" +ATTR_PAD_WETNESS = "spray_amount" + +OVERLAP_STANDARD = 67 +OVERLAP_DEEP = 85 +OVERLAP_EXTENDED = 25 +MOP_STANDARD = "Standard" +MOP_DEEP = "Deep" +MOP_EXTENDED = "Extended" +BRAAVA_MOP_BEHAVIORS = [MOP_STANDARD, MOP_DEEP, MOP_EXTENDED] +BRAAVA_SPRAY_AMOUNT = [1, 2, 3] + +# Braava Jets can set mopping behavior through fanspeed +SUPPORT_BRAAVA = SUPPORT_IROBOT | SUPPORT_FAN_SPEED + + +class BraavaJet(IRobotVacuum): + """Braava Jet.""" + + def __init__(self, roomba, blid): + """Initialize the Roomba handler.""" + super().__init__(roomba, blid) + + # Initialize fan speed list + speed_list = [] + for behavior in BRAAVA_MOP_BEHAVIORS: + for spray in BRAAVA_SPRAY_AMOUNT: + speed_list.append(f"{behavior}-{spray}") + self._speed_list = speed_list + + @property + def supported_features(self): + """Flag vacuum cleaner robot features that are supported.""" + return SUPPORT_BRAAVA + + @property + def fan_speed(self): + """Return the fan speed of the vacuum cleaner.""" + # Mopping behavior and spray amount as fan speed + rank_overlap = self.vacuum_state.get("rankOverlap", {}) + behavior = None + if rank_overlap == OVERLAP_STANDARD: + behavior = MOP_STANDARD + elif rank_overlap == OVERLAP_DEEP: + behavior = MOP_DEEP + elif rank_overlap == OVERLAP_EXTENDED: + behavior = MOP_EXTENDED + pad_wetness = self.vacuum_state.get("padWetness", {}) + # "disposable" and "reusable" values are always the same + pad_wetness_value = pad_wetness.get("disposable") + return f"{behavior}-{pad_wetness_value}" + + @property + def fan_speed_list(self): + """Get the list of available fan speed steps of the vacuum cleaner.""" + return self._speed_list + + async def async_set_fan_speed(self, fan_speed, **kwargs): + """Set fan speed.""" + try: + split = fan_speed.split("-", 1) + behavior = split[0] + spray = int(split[1]) + if behavior.capitalize() in BRAAVA_MOP_BEHAVIORS: + behavior = behavior.capitalize() + except IndexError: + _LOGGER.error( + "Fan speed error: expected {behavior}-{spray_amount}, got '%s'", + fan_speed, + ) + return + except ValueError: + _LOGGER.error("Spray amount error: expected integer, got '%s'", split[1]) + return + if behavior not in BRAAVA_MOP_BEHAVIORS: + _LOGGER.error( + "Mop behavior error: expected one of %s, got '%s'", + str(BRAAVA_MOP_BEHAVIORS), + behavior, + ) + return + if spray not in BRAAVA_SPRAY_AMOUNT: + _LOGGER.error( + "Spray amount error: expected one of %s, got '%d'", + str(BRAAVA_SPRAY_AMOUNT), + spray, + ) + return + + overlap = 0 + if behavior == MOP_STANDARD: + overlap = OVERLAP_STANDARD + elif behavior == MOP_DEEP: + overlap = OVERLAP_DEEP + else: + overlap = OVERLAP_EXTENDED + await self.hass.async_add_executor_job( + self.vacuum.set_preference, "rankOverlap", overlap + ) + await self.hass.async_add_executor_job( + self.vacuum.set_preference, + "padWetness", + {"disposable": spray, "reusable": spray}, + ) + + @property + def device_state_attributes(self): + """Return the state attributes of the device.""" + state_attrs = super().device_state_attributes + + # Get Braava state + state = self.vacuum_state + detected_pad = state.get("detectedPad") + mop_ready = state.get("mopReady", {}) + lid_closed = mop_ready.get("lidClosed") + tank_present = mop_ready.get("tankPresent") + tank_level = state.get("tankLvl") + state_attrs[ATTR_DETECTED_PAD] = detected_pad + state_attrs[ATTR_LID_CLOSED] = lid_closed + state_attrs[ATTR_TANK_PRESENT] = tank_present + state_attrs[ATTR_TANK_LEVEL] = tank_level + + return state_attrs diff --git a/homeassistant/components/roomba/config_flow.py b/homeassistant/components/roomba/config_flow.py new file mode 100644 index 00000000000..3668984a41f --- /dev/null +++ b/homeassistant/components/roomba/config_flow.py @@ -0,0 +1,131 @@ +"""Config flow to configure roomba component.""" +import logging + +from roomba import Roomba +import voluptuous as vol + +from homeassistant import config_entries, core +from homeassistant.const import CONF_HOST, CONF_PASSWORD +from homeassistant.core import callback + +from . import CannotConnect, async_connect_or_timeout, async_disconnect_or_timeout +from .const import ( + CONF_BLID, + CONF_CERT, + CONF_CONTINUOUS, + CONF_DELAY, + CONF_NAME, + DEFAULT_CERT, + DEFAULT_CONTINUOUS, + DEFAULT_DELAY, + ROOMBA_SESSION, +) +from .const import DOMAIN # pylint:disable=unused-import + +DATA_SCHEMA = vol.Schema( + { + vol.Required(CONF_HOST): str, + vol.Required(CONF_BLID): str, + vol.Required(CONF_PASSWORD): str, + vol.Optional(CONF_CERT, default=DEFAULT_CERT): str, + vol.Optional(CONF_CONTINUOUS, default=DEFAULT_CONTINUOUS): bool, + vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): int, + } +) + +_LOGGER = logging.getLogger(__name__) + + +async def validate_input(hass: core.HomeAssistant, data): + """Validate the user input allows us to connect. + + Data has the keys from DATA_SCHEMA with values provided by the user. + """ + roomba = Roomba( + address=data[CONF_HOST], + blid=data[CONF_BLID], + password=data[CONF_PASSWORD], + cert_name=data[CONF_CERT], + continuous=data[CONF_CONTINUOUS], + delay=data[CONF_DELAY], + ) + + info = await async_connect_or_timeout(hass, roomba) + + return { + ROOMBA_SESSION: info[ROOMBA_SESSION], + CONF_NAME: info[CONF_NAME], + CONF_HOST: data[CONF_HOST], + } + + +class RoombaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Roomba configuration flow.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_PUSH + + @staticmethod + @callback + def async_get_options_flow(config_entry): + """Get the options flow for this handler.""" + return OptionsFlowHandler(config_entry) + + async def async_step_import(self, import_info): + """Set the config entry up from yaml.""" + return await self.async_step_user(import_info) + + async def async_step_user(self, user_input=None): + """Handle a flow initialized by the user.""" + errors = {} + + if user_input is not None: + await self.async_set_unique_id(user_input[CONF_BLID]) + self._abort_if_unique_id_configured() + try: + info = await validate_input(self.hass, user_input) + except CannotConnect: + errors = {"base": "cannot_connect"} + except Exception: # pylint: disable=broad-except + errors = {"base": "unknown"} + + if "base" not in errors: + await async_disconnect_or_timeout(self.hass, info[ROOMBA_SESSION]) + return self.async_create_entry(title=info[CONF_NAME], data=user_input) + + return self.async_show_form( + step_id="user", data_schema=DATA_SCHEMA, errors=errors + ) + + +class OptionsFlowHandler(config_entries.OptionsFlow): + """Handle options.""" + + def __init__(self, config_entry): + """Initialize options flow.""" + self.config_entry = config_entry + + async def async_step_init(self, user_input=None): + """Manage the options.""" + if user_input is not None: + return self.async_create_entry(title="", data=user_input) + + return self.async_show_form( + step_id="init", + data_schema=vol.Schema( + { + vol.Optional( + CONF_CONTINUOUS, + default=self.config_entry.options.get( + CONF_CONTINUOUS, DEFAULT_CONTINUOUS + ), + ): bool, + vol.Optional( + CONF_DELAY, + default=self.config_entry.options.get( + CONF_DELAY, DEFAULT_DELAY + ), + ): int, + } + ), + ) diff --git a/homeassistant/components/roomba/const.py b/homeassistant/components/roomba/const.py new file mode 100644 index 00000000000..06684e63bdc --- /dev/null +++ b/homeassistant/components/roomba/const.py @@ -0,0 +1,13 @@ +"""The roomba constants.""" +DOMAIN = "roomba" +COMPONENTS = ["sensor", "binary_sensor", "vacuum"] +CONF_CERT = "certificate" +CONF_CONTINUOUS = "continuous" +CONF_DELAY = "delay" +CONF_NAME = "name" +CONF_BLID = "blid" +DEFAULT_CERT = "/etc/ssl/certs/ca-certificates.crt" +DEFAULT_CONTINUOUS = True +DEFAULT_DELAY = 1 +ROOMBA_SESSION = "roomba_session" +BLID = "blid_key" diff --git a/homeassistant/components/roomba/irobot_base.py b/homeassistant/components/roomba/irobot_base.py new file mode 100644 index 00000000000..a62ad4fdd96 --- /dev/null +++ b/homeassistant/components/roomba/irobot_base.py @@ -0,0 +1,247 @@ +"""Base class for iRobot devices.""" +import asyncio +import logging + +from homeassistant.components.vacuum import ( + STATE_CLEANING, + STATE_DOCKED, + STATE_ERROR, + STATE_IDLE, + STATE_PAUSED, + STATE_RETURNING, + SUPPORT_BATTERY, + SUPPORT_LOCATE, + SUPPORT_PAUSE, + SUPPORT_RETURN_HOME, + SUPPORT_SEND_COMMAND, + SUPPORT_START, + SUPPORT_STATE, + SUPPORT_STOP, + StateVacuumDevice, +) +from homeassistant.helpers.entity import Entity + +from . import roomba_reported_state +from .const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + +ATTR_CLEANING_TIME = "cleaning_time" +ATTR_CLEANED_AREA = "cleaned_area" +ATTR_ERROR = "error" +ATTR_POSITION = "position" +ATTR_SOFTWARE_VERSION = "software_version" + +# Commonly supported features +SUPPORT_IROBOT = ( + SUPPORT_BATTERY + | SUPPORT_PAUSE + | SUPPORT_RETURN_HOME + | SUPPORT_SEND_COMMAND + | SUPPORT_START + | SUPPORT_STATE + | SUPPORT_STOP + | SUPPORT_LOCATE +) + +STATE_MAP = { + "": STATE_IDLE, + "charge": STATE_DOCKED, + "hmMidMsn": STATE_CLEANING, # Recharging at the middle of a cycle + "hmPostMsn": STATE_RETURNING, # Cycle finished + "hmUsrDock": STATE_RETURNING, + "pause": STATE_PAUSED, + "run": STATE_CLEANING, + "stop": STATE_IDLE, + "stuck": STATE_ERROR, +} + + +class IRobotEntity(Entity): + """Base class for iRobot Entities.""" + + def __init__(self, roomba, blid): + """Initialize the iRobot handler.""" + self.vacuum = roomba + self._blid = blid + vacuum_state = roomba_reported_state(roomba) + self._name = vacuum_state.get("name") + self._version = vacuum_state.get("softwareVer") + self._sku = vacuum_state.get("sku") + + @property + def should_poll(self): + """Disable polling.""" + return False + + @property + def robot_unique_id(self): + """Return the uniqueid of the vacuum cleaner.""" + return f"roomba_{self._blid}" + + @property + def unique_id(self): + """Return the uniqueid of the vacuum cleaner.""" + return self.robot_unique_id + + @property + def device_info(self): + """Return the device info of the vacuum cleaner.""" + return { + "identifiers": {(DOMAIN, self.robot_unique_id)}, + "manufacturer": "iRobot", + "name": str(self._name), + "sw_version": self._version, + "model": self._sku, + } + + async def async_added_to_hass(self): + """Register callback function.""" + self.vacuum.register_on_message_callback(self.on_message) + + def on_message(self, json_data): + """Update state on message change.""" + self.schedule_update_ha_state() + + +class IRobotVacuum(IRobotEntity, StateVacuumDevice): + """Base class for iRobot robots.""" + + def __init__(self, roomba, blid): + """Initialize the iRobot handler.""" + super().__init__(roomba, blid) + self.vacuum_state = roomba_reported_state(roomba) + self._cap_position = self.vacuum_state.get("cap", {}).get("pose") == 1 + + @property + def supported_features(self): + """Flag vacuum cleaner robot features that are supported.""" + return SUPPORT_IROBOT + + @property + def fan_speed(self): + """Return the fan speed of the vacuum cleaner.""" + return None + + @property + def fan_speed_list(self): + """Get the list of available fan speed steps of the vacuum cleaner.""" + return [] + + @property + def battery_level(self): + """Return the battery level of the vacuum cleaner.""" + return self.vacuum_state.get("batPct") + + @property + def state(self): + """Return the state of the vacuum cleaner.""" + clean_mission_status = self.vacuum_state.get("cleanMissionStatus", {}) + cycle = clean_mission_status.get("cycle") + phase = clean_mission_status.get("phase") + try: + state = STATE_MAP[phase] + except KeyError: + return STATE_ERROR + if cycle != "none" and state != STATE_CLEANING and state != STATE_RETURNING: + state = STATE_PAUSED + return state + + @property + def available(self) -> bool: + """Return True if entity is available.""" + return True # Always available, otherwise setup will fail + + @property + def name(self): + """Return the name of the device.""" + return self._name + + @property + def device_state_attributes(self): + """Return the state attributes of the device.""" + state = self.vacuum_state + + # Roomba software version + software_version = state.get("softwareVer") + + # Error message in plain english + error_msg = "None" + if hasattr(self.vacuum, "error_message"): + error_msg = self.vacuum.error_message + + # Set properties that are to appear in the GUI + state_attrs = {ATTR_SOFTWARE_VERSION: software_version} + + # Only add cleaning time and cleaned area attrs when the vacuum is + # currently on + if self.state == STATE_CLEANING: + # Get clean mission status + mission_state = state.get("cleanMissionStatus", {}) + cleaning_time = mission_state.get("mssnM") + cleaned_area = mission_state.get("sqft") # Imperial + # Convert to m2 if the unit_system is set to metric + if cleaned_area and self.hass.config.units.is_metric: + cleaned_area = round(cleaned_area * 0.0929) + state_attrs[ATTR_CLEANING_TIME] = cleaning_time + state_attrs[ATTR_CLEANED_AREA] = cleaned_area + + # Skip error attr if there is none + if error_msg and error_msg != "None": + state_attrs[ATTR_ERROR] = error_msg + + # Not all Roombas expose position data + # https://github.com/koalazak/dorita980/issues/48 + if self._cap_position: + pos_state = state.get("pose", {}) + position = None + pos_x = pos_state.get("point", {}).get("x") + pos_y = pos_state.get("point", {}).get("y") + theta = pos_state.get("theta") + if all(item is not None for item in [pos_x, pos_y, theta]): + position = f"({pos_x}, {pos_y}, {theta})" + state_attrs[ATTR_POSITION] = position + + return state_attrs + + def on_message(self, json_data): + """Update state on message change.""" + _LOGGER.debug("Got new state from the vacuum: %s", json_data) + self.vacuum_state = roomba_reported_state(self.vacuum) + self.schedule_update_ha_state() + + async def async_start(self): + """Start or resume the cleaning task.""" + if self.state == STATE_PAUSED: + await self.hass.async_add_executor_job(self.vacuum.send_command, "resume") + else: + await self.hass.async_add_executor_job(self.vacuum.send_command, "start") + + async def async_stop(self, **kwargs): + """Stop the vacuum cleaner.""" + await self.hass.async_add_executor_job(self.vacuum.send_command, "stop") + + async def async_pause(self): + """Pause the cleaning cycle.""" + await self.hass.async_add_executor_job(self.vacuum.send_command, "pause") + + async def async_return_to_base(self, **kwargs): + """Set the vacuum cleaner to return to the dock.""" + if self.state == STATE_CLEANING: + await self.async_pause() + for _ in range(0, 10): + if self.state == STATE_PAUSED: + break + await asyncio.sleep(1) + await self.hass.async_add_executor_job(self.vacuum.send_command, "dock") + + async def async_locate(self, **kwargs): + """Located vacuum.""" + await self.hass.async_add_executor_job(self.vacuum.send_command, "find") + + async def async_send_command(self, command, params=None, **kwargs): + """Send raw command.""" + _LOGGER.debug("async_send_command %s (%s), %s", command, params, kwargs) + await self.hass.async_add_executor_job( + self.vacuum.send_command, command, params + ) diff --git a/homeassistant/components/roomba/manifest.json b/homeassistant/components/roomba/manifest.json index bf048cadc8f..a164509bc99 100644 --- a/homeassistant/components/roomba/manifest.json +++ b/homeassistant/components/roomba/manifest.json @@ -1,12 +1,9 @@ { "domain": "roomba", "name": "iRobot Roomba", + "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/roomba", - "requirements": [ - "roombapy==1.4.3" - ], + "requirements": ["roombapy==1.5.1"], "dependencies": [], - "codeowners": [ - "@pschmitt" - ] + "codeowners": ["@pschmitt", "@cyr-ius", "@shenxn"] } diff --git a/homeassistant/components/roomba/roomba.py b/homeassistant/components/roomba/roomba.py new file mode 100644 index 00000000000..0a9aec0b608 --- /dev/null +++ b/homeassistant/components/roomba/roomba.py @@ -0,0 +1,95 @@ +"""Class for Roomba devices.""" +import logging + +from homeassistant.components.vacuum import SUPPORT_FAN_SPEED + +from .irobot_base import SUPPORT_IROBOT, IRobotVacuum + +_LOGGER = logging.getLogger(__name__) + +ATTR_BIN_FULL = "bin_full" +ATTR_BIN_PRESENT = "bin_present" + +FAN_SPEED_AUTOMATIC = "Automatic" +FAN_SPEED_ECO = "Eco" +FAN_SPEED_PERFORMANCE = "Performance" +FAN_SPEEDS = [FAN_SPEED_AUTOMATIC, FAN_SPEED_ECO, FAN_SPEED_PERFORMANCE] + +# Only Roombas with CarpetBost can set their fanspeed +SUPPORT_ROOMBA_CARPET_BOOST = SUPPORT_IROBOT | SUPPORT_FAN_SPEED + + +class RoombaVacuum(IRobotVacuum): + """Basic Roomba robot (without carpet boost).""" + + @property + def device_state_attributes(self): + """Return the state attributes of the device.""" + state_attrs = super().device_state_attributes + + # Get bin state + bin_raw_state = self.vacuum_state.get("bin", {}) + bin_state = {} + if bin_raw_state.get("present") is not None: + bin_state[ATTR_BIN_PRESENT] = bin_raw_state.get("present") + if bin_raw_state.get("full") is not None: + bin_state[ATTR_BIN_FULL] = bin_raw_state.get("full") + state_attrs.update(bin_state) + + return state_attrs + + +class RoombaVacuumCarpetBoost(RoombaVacuum): + """Roomba robot with carpet boost.""" + + @property + def supported_features(self): + """Flag vacuum cleaner robot features that are supported.""" + return SUPPORT_ROOMBA_CARPET_BOOST + + @property + def fan_speed(self): + """Return the fan speed of the vacuum cleaner.""" + fan_speed = None + carpet_boost = self.vacuum_state.get("carpetBoost") + high_perf = self.vacuum_state.get("vacHigh") + if carpet_boost is not None and high_perf is not None: + if carpet_boost: + fan_speed = FAN_SPEED_AUTOMATIC + elif high_perf: + fan_speed = FAN_SPEED_PERFORMANCE + else: # carpet_boost and high_perf are False + fan_speed = FAN_SPEED_ECO + return fan_speed + + @property + def fan_speed_list(self): + """Get the list of available fan speed steps of the vacuum cleaner.""" + return FAN_SPEEDS + + async def async_set_fan_speed(self, fan_speed, **kwargs): + """Set fan speed.""" + if fan_speed.capitalize() in FAN_SPEEDS: + fan_speed = fan_speed.capitalize() + _LOGGER.debug("Set fan speed to: %s", fan_speed) + high_perf = None + carpet_boost = None + if fan_speed == FAN_SPEED_AUTOMATIC: + high_perf = False + carpet_boost = True + elif fan_speed == FAN_SPEED_ECO: + high_perf = False + carpet_boost = False + elif fan_speed == FAN_SPEED_PERFORMANCE: + high_perf = True + carpet_boost = False + else: + _LOGGER.error("No such fan speed available: %s", fan_speed) + return + # The set_preference method does only accept string values + await self.hass.async_add_executor_job( + self.vacuum.set_preference, "carpetBoost", str(carpet_boost) + ) + await self.hass.async_add_executor_job( + self.vacuum.set_preference, "vacHigh", str(high_perf) + ) diff --git a/homeassistant/components/roomba/sensor.py b/homeassistant/components/roomba/sensor.py new file mode 100644 index 00000000000..1a10c429321 --- /dev/null +++ b/homeassistant/components/roomba/sensor.py @@ -0,0 +1,48 @@ +"""Sensor for checking the battery level of Roomba.""" +import logging + +from homeassistant.const import DEVICE_CLASS_BATTERY, UNIT_PERCENTAGE + +from . import roomba_reported_state +from .const import BLID, DOMAIN, ROOMBA_SESSION +from .irobot_base import IRobotEntity + +_LOGGER = logging.getLogger(__name__) + + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the iRobot Roomba vacuum cleaner.""" + domain_data = hass.data[DOMAIN][config_entry.entry_id] + roomba = domain_data[ROOMBA_SESSION] + blid = domain_data[BLID] + roomba_vac = RoombaBattery(roomba, blid) + async_add_entities([roomba_vac], True) + + +class RoombaBattery(IRobotEntity): + """Class to hold Roomba Sensor basic info.""" + + @property + def name(self): + """Return the name of the sensor.""" + return f"{self._name} Battery Level" + + @property + def unique_id(self): + """Return the ID of this sensor.""" + return f"battery_{self._blid}" + + @property + def device_class(self): + """Return the device class of the sensor.""" + return DEVICE_CLASS_BATTERY + + @property + def unit_of_measurement(self): + """Return the unit_of_measurement of the device.""" + return UNIT_PERCENTAGE + + @property + def state(self): + """Return the state of the sensor.""" + return roomba_reported_state(self.vacuum).get("batPct") diff --git a/homeassistant/components/roomba/strings.json b/homeassistant/components/roomba/strings.json new file mode 100644 index 00000000000..a679b2fdbb5 --- /dev/null +++ b/homeassistant/components/roomba/strings.json @@ -0,0 +1,27 @@ +{ + "config": { + "step": { + "user": { + "title": "Connect to the device", + "description": "Currently retrieving the BLID and password is a manual process. Please follow the steps outlined in the documentation at: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "data": { + "host": "Hostname or IP Address", + "blid": "BLID", + "password": "Password", + "certificate": "Certificate", + "continuous": "Continuous", + "delay": "Delay" + } + } + }, + "error": { + "unknown": "Unexpected error", + "cannot_connect": "Failed to connect, please try again" + } + }, + "options": { + "step": { + "init": { "data": { "continuous": "Continuous", "delay": "Delay" } } + } + } +} diff --git a/homeassistant/components/roomba/translations/ca.json b/homeassistant/components/roomba/translations/ca.json new file mode 100644 index 00000000000..a133139a8e9 --- /dev/null +++ b/homeassistant/components/roomba/translations/ca.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Certificat", + "continuous": "Cont\u00ednua", + "delay": "Retard", + "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP", + "password": "Contrasenya" + }, + "description": "Actualment la recuperaci\u00f3 de BLID i la contrasenya \u00e9s un proc\u00e9s manual. Segueix els passos de la documentaci\u00f3 a: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Connexi\u00f3 amb el dispositiu" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Cont\u00ednua", + "delay": "Retard" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/de.json b/homeassistant/components/roomba/translations/de.json new file mode 100644 index 00000000000..5781f5553ba --- /dev/null +++ b/homeassistant/components/roomba/translations/de.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Zertifikat", + "continuous": "Kontinuierlich", + "delay": "Verz\u00f6gerung", + "host": "Hostname oder IP-Adresse", + "password": "Passwort" + }, + "description": "Das Abrufen der BLID und des Kennworts erfolgt manuell. Befolgen Sie die in der Dokumentation beschriebenen Schritte unter: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Stellen Sie eine Verbindung zum Ger\u00e4t her" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Kontinuierlich", + "delay": "Verz\u00f6gerung" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/en.json b/homeassistant/components/roomba/translations/en.json new file mode 100644 index 00000000000..2a9dcc9973a --- /dev/null +++ b/homeassistant/components/roomba/translations/en.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Failed to connect, please try again", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Certificate", + "continuous": "Continuous", + "delay": "Delay", + "host": "Hostname or IP Address", + "password": "Password" + }, + "description": "Currently retrieving the BLID and password is a manual process. Please follow the steps outlined in the documentation at: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Connect to the device" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Continuous", + "delay": "Delay" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/es.json b/homeassistant/components/roomba/translations/es.json new file mode 100644 index 00000000000..28539c8fd5f --- /dev/null +++ b/homeassistant/components/roomba/translations/es.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Certificado", + "continuous": "Continuo", + "delay": "Retardo", + "host": "Nombre del host o direcci\u00f3n IP", + "password": "Contrase\u00f1a" + }, + "description": "Actualmente recuperar el BLID y la contrase\u00f1a es un proceso manual. Sigue los pasos descritos en la documentaci\u00f3n en: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Conectarse al dispositivo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Continuo", + "delay": "Retardo" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/fr.json b/homeassistant/components/roomba/translations/fr.json new file mode 100644 index 00000000000..0224ce76fcb --- /dev/null +++ b/homeassistant/components/roomba/translations/fr.json @@ -0,0 +1,26 @@ +{ + "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": { + "data": { + "delay": "D\u00e9lai" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/it.json b/homeassistant/components/roomba/translations/it.json new file mode 100644 index 00000000000..042959a67c4 --- /dev/null +++ b/homeassistant/components/roomba/translations/it.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Certificato", + "continuous": "Continuo", + "delay": "Ritardo", + "host": "Nome dell'host o indirizzo IP", + "password": "Password" + }, + "description": "Attualmente il recupero del BLID e della password \u00e8 un processo manuale. Si prega di seguire i passi descritti nella documentazione all'indirizzo: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Connettersi al dispositivo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Continuo", + "delay": "Ritardo" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/ko.json b/homeassistant/components/roomba/translations/ko.json new file mode 100644 index 00000000000..f7278a6c43c --- /dev/null +++ b/homeassistant/components/roomba/translations/ko.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "\uc778\uc99d\uc11c", + "continuous": "\uc5f0\uc18d", + "delay": "\uc9c0\uc5f0", + "host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", + "password": "\ube44\ubc00\ubc88\ud638" + }, + "description": "\ud604\uc7ac BLID \ubc0f \ube44\ubc00\ubc88\ud638\ub294 \uc218\ub3d9\uc73c\ub85c \uac00\uc838\uc640\uc57c\ud569\ub2c8\ub2e4. \ub2e4\uc74c \ubb38\uc11c\uc5d0 \uc124\uba85\ub41c \uc808\ucc28\ub97c \ub530\ub77c \uc124\uc815\ud574\uc8fc\uc138\uc694: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "\uc5f0\uc18d", + "delay": "\uc9c0\uc5f0" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/lb.json b/homeassistant/components/roomba/translations/lb.json new file mode 100644 index 00000000000..2771b3f5b2a --- /dev/null +++ b/homeassistant/components/roomba/translations/lb.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Zertifikat", + "continuous": "Kontinu\u00e9ierlech", + "delay": "Delai", + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Kontinu\u00e9ierlech", + "delay": "Delai" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/no.json b/homeassistant/components/roomba/translations/no.json new file mode 100644 index 00000000000..c145637a656 --- /dev/null +++ b/homeassistant/components/roomba/translations/no.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "blid": "Blid", + "certificate": "Sertifikat", + "continuous": "Kontinuerlige", + "delay": "Forsinkelse", + "host": "Vertsnavn eller IP-adresse", + "password": "Passord" + }, + "description": "Henting av BLID og passord er en manuell prosess. F\u00f8lg trinnene som er beskrevet i dokumentasjonen p\u00e5: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Koble til enheten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Kontinuerlige", + "delay": "Forsinkelse" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/pl.json b/homeassistant/components/roomba/translations/pl.json new file mode 100644 index 00000000000..3772d6a08c5 --- /dev/null +++ b/homeassistant/components/roomba/translations/pl.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Certyfikat", + "continuous": "Ci\u0105g\u0142y", + "delay": "Op\u00f3\u017anienie", + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o" + }, + "description": "Obecnie pobieranie BLID i has\u0142a jest procesem r\u0119cznym. Prosz\u0119 post\u0119powa\u0107 zgodnie z instrukcjami zawartymi w dokumentacji pod adresem: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials.", + "title": "Po\u0142\u0105cz z urz\u0105dzeniem" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Ci\u0105g\u0142y", + "delay": "Op\u00f3\u017anienie" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/pt.json b/homeassistant/components/roomba/translations/pt.json new file mode 100644 index 00000000000..b063d57eb39 --- /dev/null +++ b/homeassistant/components/roomba/translations/pt.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "cannot_connect": "Falha ao conectar, tente novamente", + "unknown": "Erro inesperado" + }, + "step": { + "user": { + "data": { + "certificate": "Certificado", + "continuous": "Cont\u00ednuo", + "delay": "Atraso", + "host": "Nome servidor ou endere\u00e7o IP", + "password": "Palavra-passe" + }, + "title": "Conectar ao dispositivo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Cont\u00ednuo", + "delay": "Atraso" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/ru.json b/homeassistant/components/roomba/translations/ru.json new file mode 100644 index 00000000000..2eaab685d20 --- /dev/null +++ b/homeassistant/components/roomba/translations/ru.json @@ -0,0 +1,32 @@ +{ + "config": { + "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." + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", + "continuous": "\u041d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439", + "delay": "\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430", + "host": "\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": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c BLID \u0438 \u043f\u0430\u0440\u043e\u043b\u044c:\nhttps://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "\u041d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439", + "delay": "\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/sl.json b/homeassistant/components/roomba/translations/sl.json new file mode 100644 index 00000000000..4b834d05fc8 --- /dev/null +++ b/homeassistant/components/roomba/translations/sl.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Potrdilo", + "continuous": "Nenehno", + "delay": "Zamik", + "host": "Ime gostitelja ali naslov IP", + "password": "Geslo" + }, + "description": "Trenutno je pridobivanje BLID-a in gesla ro\u010dni postopek. Upo\u0161tevajte korake opisane v dokumentaciji na: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "Pove\u017eite se z napravo" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Nenehno", + "delay": "Zamik" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/zh-Hant.json b/homeassistant/components/roomba/translations/zh-Hant.json new file mode 100644 index 00000000000..b06d7d53f2a --- /dev/null +++ b/homeassistant/components/roomba/translations/zh-Hant.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "\u8a8d\u8b49", + "continuous": "\u9023\u7e8c", + "delay": "\u5ef6\u9072", + "host": "\u4e3b\u6a5f\u540d\u6216 IP \u4f4d\u5740", + "password": "\u5bc6\u78bc" + }, + "description": "\u76ee\u524d\u63a5\u6536 BLID \u8207\u5bc6\u78bc\u70ba\u624b\u52d5\u904e\u7a0b\u3002\u8acb\u53c3\u95b1\u4ee5\u4e0b\u6587\u4ef6\u7684\u6b65\u9a5f\u9032\u884c\u8a2d\u5b9a\uff1ahttps://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "\u9023\u7dda\u81f3\u8a2d\u5099" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "\u9023\u7e8c", + "delay": "\u5ef6\u9072" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/vacuum.py b/homeassistant/components/roomba/vacuum.py index 172a494b602..bc2e58846d1 100644 --- a/homeassistant/components/roomba/vacuum.py +++ b/homeassistant/components/roomba/vacuum.py @@ -1,362 +1,31 @@ """Support for Wi-Fi enabled iRobot Roombas.""" -import asyncio import logging -import async_timeout -from roomba import Roomba -import voluptuous as vol - -from homeassistant.components.vacuum import ( - PLATFORM_SCHEMA, - SUPPORT_BATTERY, - SUPPORT_FAN_SPEED, - SUPPORT_LOCATE, - SUPPORT_PAUSE, - SUPPORT_RETURN_HOME, - SUPPORT_SEND_COMMAND, - SUPPORT_STATUS, - SUPPORT_STOP, - SUPPORT_TURN_OFF, - SUPPORT_TURN_ON, - VacuumDevice, -) -from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_USERNAME -from homeassistant.exceptions import PlatformNotReady -import homeassistant.helpers.config_validation as cv +from . import roomba_reported_state +from .braava import BraavaJet +from .const import BLID, DOMAIN, ROOMBA_SESSION +from .roomba import RoombaVacuum, RoombaVacuumCarpetBoost _LOGGER = logging.getLogger(__name__) -ATTR_BIN_FULL = "bin_full" -ATTR_BIN_PRESENT = "bin_present" -ATTR_CLEANING_TIME = "cleaning_time" -ATTR_CLEANED_AREA = "cleaned_area" -ATTR_ERROR = "error" -ATTR_POSITION = "position" -ATTR_SOFTWARE_VERSION = "software_version" -CAP_POSITION = "position" -CAP_CARPET_BOOST = "carpet_boost" +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the iRobot Roomba vacuum cleaner.""" + domain_data = hass.data[DOMAIN][config_entry.entry_id] + roomba = domain_data[ROOMBA_SESSION] + blid = domain_data[BLID] -CONF_CERT = "certificate" -CONF_CONTINUOUS = "continuous" -CONF_DELAY = "delay" - -DEFAULT_CERT = "/etc/ssl/certs/ca-certificates.crt" -DEFAULT_CONTINUOUS = True -DEFAULT_DELAY = 1 -DEFAULT_NAME = "Roomba" - -PLATFORM = "roomba" - -FAN_SPEED_AUTOMATIC = "Automatic" -FAN_SPEED_ECO = "Eco" -FAN_SPEED_PERFORMANCE = "Performance" -FAN_SPEEDS = [FAN_SPEED_AUTOMATIC, FAN_SPEED_ECO, FAN_SPEED_PERFORMANCE] - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_CERT, default=DEFAULT_CERT): cv.string, - vol.Optional(CONF_CONTINUOUS, default=DEFAULT_CONTINUOUS): cv.boolean, - vol.Optional(CONF_DELAY, default=DEFAULT_DELAY): cv.positive_int, - }, - extra=vol.ALLOW_EXTRA, -) - -# Commonly supported features -SUPPORT_ROOMBA = ( - SUPPORT_BATTERY - | SUPPORT_PAUSE - | SUPPORT_RETURN_HOME - | SUPPORT_SEND_COMMAND - | SUPPORT_STATUS - | SUPPORT_STOP - | SUPPORT_TURN_OFF - | SUPPORT_TURN_ON - | SUPPORT_LOCATE -) - -# Only Roombas with CarpetBost can set their fanspeed -SUPPORT_ROOMBA_CARPET_BOOST = SUPPORT_ROOMBA | SUPPORT_FAN_SPEED - - -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Set up the iRobot Roomba vacuum cleaner platform.""" - - if PLATFORM not in hass.data: - hass.data[PLATFORM] = {} - - host = config.get(CONF_HOST) - name = config.get(CONF_NAME) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - certificate = config.get(CONF_CERT) - continuous = config.get(CONF_CONTINUOUS) - delay = config.get(CONF_DELAY) - - roomba = Roomba( - address=host, - blid=username, - password=password, - cert_name=certificate, - continuous=continuous, - delay=delay, - ) - _LOGGER.debug("Initializing communication with host %s", host) - - try: - with async_timeout.timeout(9): - await hass.async_add_job(roomba.connect) - except asyncio.TimeoutError: - raise PlatformNotReady - - roomba_vac = RoombaVacuum(name, roomba) - hass.data[PLATFORM][host] = roomba_vac + # Get the capabilities of our unit + state = roomba_reported_state(roomba) + capabilities = state.get("cap", {}) + cap_carpet_boost = capabilities.get("carpetBoost") + detected_pad = state.get("detectedPad") + if detected_pad is not None: + constructor = BraavaJet + elif cap_carpet_boost == 1: + constructor = RoombaVacuumCarpetBoost + else: + constructor = RoombaVacuum + roomba_vac = constructor(roomba, blid) async_add_entities([roomba_vac], True) - - -class RoombaVacuum(VacuumDevice): - """Representation of a Roomba Vacuum cleaner robot.""" - - def __init__(self, name, roomba): - """Initialize the Roomba handler.""" - self._available = False - self._battery_level = None - self._capabilities = {} - self._fan_speed = None - self._is_on = False - self._name = name - self._state_attrs = {} - self._status = None - self.vacuum = roomba - self.vacuum_state = None - - @property - def supported_features(self): - """Flag vacuum cleaner robot features that are supported.""" - if self._capabilities.get(CAP_CARPET_BOOST): - return SUPPORT_ROOMBA_CARPET_BOOST - return SUPPORT_ROOMBA - - @property - def fan_speed(self): - """Return the fan speed of the vacuum cleaner.""" - return self._fan_speed - - @property - def fan_speed_list(self): - """Get the list of available fan speed steps of the vacuum cleaner.""" - if self._capabilities.get(CAP_CARPET_BOOST): - return FAN_SPEEDS - - @property - def battery_level(self): - """Return the battery level of the vacuum cleaner.""" - return self._battery_level - - @property - def status(self): - """Return the status of the vacuum cleaner.""" - return self._status - - @property - def is_on(self) -> bool: - """Return True if entity is on.""" - return self._is_on - - @property - def available(self) -> bool: - """Return True if entity is available.""" - return self._available - - @property - def name(self): - """Return the name of the device.""" - return self._name - - @property - def device_state_attributes(self): - """Return the state attributes of the device.""" - return self._state_attrs - - async def async_turn_on(self, **kwargs): - """Turn the vacuum on.""" - await self.hass.async_add_job(self.vacuum.send_command, "start") - self._is_on = True - - async def async_turn_off(self, **kwargs): - """Turn the vacuum off and return to home.""" - await self.async_stop() - await self.async_return_to_base() - - async def async_stop(self, **kwargs): - """Stop the vacuum cleaner.""" - await self.hass.async_add_job(self.vacuum.send_command, "stop") - self._is_on = False - - async def async_resume(self, **kwargs): - """Resume the cleaning cycle.""" - await self.hass.async_add_job(self.vacuum.send_command, "resume") - self._is_on = True - - async def async_pause(self): - """Pause the cleaning cycle.""" - await self.hass.async_add_job(self.vacuum.send_command, "pause") - self._is_on = False - - async def async_start_pause(self, **kwargs): - """Pause the cleaning task or resume it.""" - if self.vacuum_state and self.is_on: # vacuum is running - await self.async_pause() - elif self._status == "Stopped": # vacuum is stopped - await self.async_resume() - else: # vacuum is off - await self.async_turn_on() - - async def async_return_to_base(self, **kwargs): - """Set the vacuum cleaner to return to the dock.""" - await self.hass.async_add_job(self.vacuum.send_command, "dock") - self._is_on = False - - async def async_locate(self, **kwargs): - """Located vacuum.""" - await self.hass.async_add_job(self.vacuum.send_command, "find") - - async def async_set_fan_speed(self, fan_speed, **kwargs): - """Set fan speed.""" - if fan_speed.capitalize() in FAN_SPEEDS: - fan_speed = fan_speed.capitalize() - _LOGGER.debug("Set fan speed to: %s", fan_speed) - high_perf = None - carpet_boost = None - if fan_speed == FAN_SPEED_AUTOMATIC: - high_perf = False - carpet_boost = True - self._fan_speed = FAN_SPEED_AUTOMATIC - elif fan_speed == FAN_SPEED_ECO: - high_perf = False - carpet_boost = False - self._fan_speed = FAN_SPEED_ECO - elif fan_speed == FAN_SPEED_PERFORMANCE: - high_perf = True - carpet_boost = False - self._fan_speed = FAN_SPEED_PERFORMANCE - else: - _LOGGER.error("No such fan speed available: %s", fan_speed) - return - # The set_preference method does only accept string values - await self.hass.async_add_job( - self.vacuum.set_preference, "carpetBoost", str(carpet_boost) - ) - await self.hass.async_add_job( - self.vacuum.set_preference, "vacHigh", str(high_perf) - ) - - async def async_send_command(self, command, params=None, **kwargs): - """Send raw command.""" - _LOGGER.debug("async_send_command %s (%s), %s", command, params, kwargs) - await self.hass.async_add_job(self.vacuum.send_command, command, params) - return True - - async def async_update(self): - """Fetch state from the device.""" - # No data, no update - if not self.vacuum.master_state: - _LOGGER.debug("Roomba %s has no data yet. Skip update", self.name) - return - state = self.vacuum.master_state.get("state", {}).get("reported", {}) - _LOGGER.debug("Got new state from the vacuum: %s", state) - self.vacuum_state = state - self._available = True - - # Get the capabilities of our unit - capabilities = state.get("cap", {}) - cap_carpet_boost = capabilities.get("carpetBoost") - cap_pos = capabilities.get("pose") - # Store capabilities - self._capabilities = { - CAP_CARPET_BOOST: cap_carpet_boost == 1, - CAP_POSITION: cap_pos == 1, - } - - # Roomba software version - software_version = state.get("softwareVer") - - # Error message in plain english - error_msg = "None" - if hasattr(self.vacuum, "error_message"): - error_msg = self.vacuum.error_message - - self._battery_level = state.get("batPct") - self._status = self.vacuum.current_state - self._is_on = self._status in ["Running"] - - # Set properties that are to appear in the GUI - self._state_attrs = {ATTR_SOFTWARE_VERSION: software_version} - - # Get bin state - bin_state = self._get_bin_state(state) - self._state_attrs.update(bin_state) - - # Only add cleaning time and cleaned area attrs when the vacuum is - # currently on - if self._is_on: - # Get clean mission status - mission_state = state.get("cleanMissionStatus", {}) - cleaning_time = mission_state.get("mssnM") - cleaned_area = mission_state.get("sqft") # Imperial - # Convert to m2 if the unit_system is set to metric - if cleaned_area and self.hass.config.units.is_metric: - cleaned_area = round(cleaned_area * 0.0929) - self._state_attrs[ATTR_CLEANING_TIME] = cleaning_time - self._state_attrs[ATTR_CLEANED_AREA] = cleaned_area - - # Skip error attr if there is none - if error_msg and error_msg != "None": - self._state_attrs[ATTR_ERROR] = error_msg - - # Not all Roombas expose position data - # https://github.com/koalazak/dorita980/issues/48 - if self._capabilities[CAP_POSITION]: - pos_state = state.get("pose", {}) - position = None - pos_x = pos_state.get("point", {}).get("x") - pos_y = pos_state.get("point", {}).get("y") - theta = pos_state.get("theta") - if all(item is not None for item in [pos_x, pos_y, theta]): - position = f"({pos_x}, {pos_y}, {theta})" - self._state_attrs[ATTR_POSITION] = position - - # Fan speed mode (Performance, Automatic or Eco) - # Not all Roombas expose carpet boost - if self._capabilities[CAP_CARPET_BOOST]: - fan_speed = None - carpet_boost = state.get("carpetBoost") - high_perf = state.get("vacHigh") - - if carpet_boost is not None and high_perf is not None: - if carpet_boost: - fan_speed = FAN_SPEED_AUTOMATIC - elif high_perf: - fan_speed = FAN_SPEED_PERFORMANCE - else: # carpet_boost and high_perf are False - fan_speed = FAN_SPEED_ECO - - self._fan_speed = fan_speed - - @staticmethod - def _get_bin_state(state): - bin_raw_state = state.get("bin", {}) - bin_state = {} - - if bin_raw_state.get("present") is not None: - bin_state[ATTR_BIN_PRESENT] = bin_raw_state.get("present") - - if bin_raw_state.get("full") is not None: - bin_state[ATTR_BIN_FULL] = bin_raw_state.get("full") - - return bin_state diff --git a/homeassistant/components/route53/__init__.py b/homeassistant/components/route53/__init__.py index a84475ab8a1..cda4ba9dc86 100644 --- a/homeassistant/components/route53/__init__.py +++ b/homeassistant/components/route53/__init__.py @@ -7,7 +7,7 @@ import boto3 from ipify import exceptions, get_ip import voluptuous as vol -from homeassistant.const import CONF_DOMAIN, CONF_TTL, CONF_ZONE +from homeassistant.const import CONF_DOMAIN, CONF_TTL, CONF_ZONE, HTTP_OK import homeassistant.helpers.config_validation as cv from homeassistant.helpers.event import track_time_interval @@ -118,5 +118,5 @@ def _update_route53( ) _LOGGER.debug("Response is %s", response) - if response["ResponseMetadata"]["HTTPStatusCode"] != 200: + if response["ResponseMetadata"]["HTTPStatusCode"] != HTTP_OK: _LOGGER.warning(response) diff --git a/homeassistant/components/route53/manifest.json b/homeassistant/components/route53/manifest.json index 62edeafe735..da2b6dc092c 100644 --- a/homeassistant/components/route53/manifest.json +++ b/homeassistant/components/route53/manifest.json @@ -3,6 +3,5 @@ "name": "AWS Route53", "documentation": "https://www.home-assistant.io/integrations/route53", "requirements": ["boto3==1.9.252", "ipify==1.0.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/route53/services.yaml b/homeassistant/components/route53/services.yaml index 20dbfa77f7a..3ca109fcb36 100644 --- a/homeassistant/components/route53/services.yaml +++ b/homeassistant/components/route53/services.yaml @@ -1,2 +1,2 @@ update_records: - description: Trigger update of records. \ No newline at end of file + description: Trigger update of records. diff --git a/homeassistant/components/rova/manifest.json b/homeassistant/components/rova/manifest.json index 0099513dea7..a4ba931da43 100644 --- a/homeassistant/components/rova/manifest.json +++ b/homeassistant/components/rova/manifest.json @@ -3,6 +3,5 @@ "name": "ROVA", "documentation": "https://www.home-assistant.io/integrations/rova", "requirements": ["rova==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rpi_camera/manifest.json b/homeassistant/components/rpi_camera/manifest.json index dd777790db2..5f42be58ffe 100644 --- a/homeassistant/components/rpi_camera/manifest.json +++ b/homeassistant/components/rpi_camera/manifest.json @@ -2,7 +2,5 @@ "domain": "rpi_camera", "name": "Raspberry Pi Camera", "documentation": "https://www.home-assistant.io/integrations/rpi_camera", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rpi_gpio/manifest.json b/homeassistant/components/rpi_gpio/manifest.json index 7b0f8e0f282..523d98dfdb7 100644 --- a/homeassistant/components/rpi_gpio/manifest.json +++ b/homeassistant/components/rpi_gpio/manifest.json @@ -3,6 +3,5 @@ "name": "Raspberry Pi GPIO", "documentation": "https://www.home-assistant.io/integrations/rpi_gpio", "requirements": ["RPi.GPIO==0.7.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rpi_gpio_pwm/manifest.json b/homeassistant/components/rpi_gpio_pwm/manifest.json index 46fe96a6426..9cb082dc2b6 100644 --- a/homeassistant/components/rpi_gpio_pwm/manifest.json +++ b/homeassistant/components/rpi_gpio_pwm/manifest.json @@ -3,6 +3,5 @@ "name": "pigpio Daemon PWM LED", "documentation": "https://www.home-assistant.io/integrations/rpi_gpio_pwm", "requirements": ["pwmled==1.5.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rpi_pfio/manifest.json b/homeassistant/components/rpi_pfio/manifest.json index de2d70cc3a8..f40c34a11a4 100644 --- a/homeassistant/components/rpi_pfio/manifest.json +++ b/homeassistant/components/rpi_pfio/manifest.json @@ -3,6 +3,5 @@ "name": "PiFace Digital I/O (PFIO)", "documentation": "https://www.home-assistant.io/integrations/rpi_pfio", "requirements": ["pifacecommon==4.2.2", "pifacedigitalio==3.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rpi_rf/manifest.json b/homeassistant/components/rpi_rf/manifest.json index defb18cfa98..0a2cc42b633 100644 --- a/homeassistant/components/rpi_rf/manifest.json +++ b/homeassistant/components/rpi_rf/manifest.json @@ -3,6 +3,5 @@ "name": "Raspberry Pi RF", "documentation": "https://www.home-assistant.io/integrations/rpi_rf", "requirements": ["rpi-rf==0.9.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/rss_feed_template/__init__.py b/homeassistant/components/rss_feed_template/__init__.py index 69bc9474267..b979e4d5261 100644 --- a/homeassistant/components/rss_feed_template/__init__.py +++ b/homeassistant/components/rss_feed_template/__init__.py @@ -5,6 +5,7 @@ from aiohttp import web import voluptuous as vol from homeassistant.components.http import HomeAssistantView +from homeassistant.const import HTTP_OK import homeassistant.helpers.config_validation as cv CONTENT_TYPE_XML = "text/xml" @@ -98,4 +99,6 @@ class RssView(HomeAssistantView): response += "\n" - return web.Response(body=response, content_type=CONTENT_TYPE_XML, status=200) + return web.Response( + body=response, content_type=CONTENT_TYPE_XML, status=HTTP_OK + ) diff --git a/homeassistant/components/rss_feed_template/manifest.json b/homeassistant/components/rss_feed_template/manifest.json index 0dfab289920..1ae8fe58d7b 100644 --- a/homeassistant/components/rss_feed_template/manifest.json +++ b/homeassistant/components/rss_feed_template/manifest.json @@ -2,7 +2,6 @@ "domain": "rss_feed_template", "name": "RSS Feed Template", "documentation": "https://www.home-assistant.io/integrations/rss_feed_template", - "requirements": [], "dependencies": ["http"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/rtorrent/manifest.json b/homeassistant/components/rtorrent/manifest.json index 67fd57fe170..137a77b1294 100644 --- a/homeassistant/components/rtorrent/manifest.json +++ b/homeassistant/components/rtorrent/manifest.json @@ -2,7 +2,5 @@ "domain": "rtorrent", "name": "rTorrent", "documentation": "https://www.home-assistant.io/integrations/rtorrent", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/russound_rio/manifest.json b/homeassistant/components/russound_rio/manifest.json index 38ca2095cfb..2fd9f039d53 100644 --- a/homeassistant/components/russound_rio/manifest.json +++ b/homeassistant/components/russound_rio/manifest.json @@ -3,6 +3,5 @@ "name": "Russound RIO", "documentation": "https://www.home-assistant.io/integrations/russound_rio", "requirements": ["russound_rio==0.1.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/russound_rnet/manifest.json b/homeassistant/components/russound_rnet/manifest.json index bb417122f86..6379dd021f2 100644 --- a/homeassistant/components/russound_rnet/manifest.json +++ b/homeassistant/components/russound_rnet/manifest.json @@ -3,6 +3,5 @@ "name": "Russound RNET", "documentation": "https://www.home-assistant.io/integrations/russound_rnet", "requirements": ["russound==0.1.9"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sabnzbd/__init__.py b/homeassistant/components/sabnzbd/__init__.py index b36abbedb48..64265f71903 100644 --- a/homeassistant/components/sabnzbd/__init__.py +++ b/homeassistant/components/sabnzbd/__init__.py @@ -134,7 +134,7 @@ async def async_setup(hass, config): conf = config.get(DOMAIN) if conf is not None: - use_ssl = conf.get(CONF_SSL) + use_ssl = conf[CONF_SSL] name = conf.get(CONF_NAME) api_key = conf.get(CONF_API_KEY) await async_configure_sabnzbd(hass, conf, use_ssl, name, api_key) diff --git a/homeassistant/components/sabnzbd/sensor.py b/homeassistant/components/sabnzbd/sensor.py index 21ac9eefdb2..b232e2e63c5 100644 --- a/homeassistant/components/sabnzbd/sensor.py +++ b/homeassistant/components/sabnzbd/sensor.py @@ -37,7 +37,11 @@ class SabnzbdSensor(Entity): async def async_added_to_hass(self): """Call when entity about to be added to hass.""" - async_dispatcher_connect(self.hass, SIGNAL_SABNZBD_UPDATED, self.update_state) + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_SABNZBD_UPDATED, self.update_state + ) + ) @property def name(self): diff --git a/homeassistant/components/safe_mode/manifest.json b/homeassistant/components/safe_mode/manifest.json index 372ec51de37..6da29c94790 100644 --- a/homeassistant/components/safe_mode/manifest.json +++ b/homeassistant/components/safe_mode/manifest.json @@ -3,10 +3,6 @@ "name": "Safe Mode", "config_flow": false, "documentation": "https://www.home-assistant.io/integrations/safe_mode", - "requirements": [], - "ssdp": [], - "zeroconf": [], - "homekit": {}, "dependencies": ["frontend", "config", "persistent_notification", "cloud"], "codeowners": ["@home-assistant/core"] } diff --git a/homeassistant/components/saj/manifest.json b/homeassistant/components/saj/manifest.json index f1c50d5dbe3..c4002f252e8 100644 --- a/homeassistant/components/saj/manifest.json +++ b/homeassistant/components/saj/manifest.json @@ -3,6 +3,5 @@ "name": "SAJ Solar Inverter", "documentation": "https://www.home-assistant.io/integrations/saj", "requirements": ["pysaj==0.0.14"], - "dependencies": [], "codeowners": ["@fredericvl"] } diff --git a/homeassistant/components/saj/sensor.py b/homeassistant/components/saj/sensor.py index 55c2371aabb..fb0df36d4cb 100644 --- a/homeassistant/components/saj/sensor.py +++ b/homeassistant/components/saj/sensor.py @@ -1,5 +1,4 @@ """SAJ solar inverter interface.""" -import asyncio from datetime import date import logging @@ -100,8 +99,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async def async_saj(): """Update all the SAJ sensors.""" - tasks = [] - values = await saj.read(sensor_def) for sensor in hass_sensors: @@ -118,11 +115,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= not sensor.per_day_basis and not sensor.per_total_basis ): state_unknown = True - task = sensor.async_update_values(unknown_state=state_unknown) - if task: - tasks.append(task) - if tasks: - await asyncio.wait(tasks) + sensor.async_update_values(unknown_state=state_unknown) + return values def start_update_interval(event): @@ -237,7 +231,8 @@ class SAJsensor(Entity): update = True self._state = None - return self.async_update_ha_state() if update else None + if update: + self.async_write_ha_state() @property def unique_id(self): diff --git a/homeassistant/components/salt/manifest.json b/homeassistant/components/salt/manifest.json index 019fdf9ae5f..cad9b6d3661 100644 --- a/homeassistant/components/salt/manifest.json +++ b/homeassistant/components/salt/manifest.json @@ -1,8 +1,7 @@ { - "domain": "salt", - "name": "Salt Fiber Box", - "documentation": "https://www.home-assistant.io/integrations/salt", - "requirements": ["saltbox==0.1.3"], - "dependencies": [], - "codeowners": ["@bjornorri"] + "domain": "salt", + "name": "Salt Fiber Box", + "documentation": "https://www.home-assistant.io/integrations/salt", + "requirements": ["saltbox==0.1.3"], + "codeowners": ["@bjornorri"] } diff --git a/homeassistant/components/samsungtv/.translations/ca.json b/homeassistant/components/samsungtv/.translations/ca.json deleted file mode 100644 index a742cc546b8..00000000000 --- a/homeassistant/components/samsungtv/.translations/ca.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La Samsung TV ja configurada.", - "already_in_progress": "La configuraci\u00f3 de la Samsung TV ja est\u00e0 en curs.", - "auth_missing": "Home Assistant no est\u00e0 autenticat per connectar-se amb aquesta Samsung TV.", - "not_successful": "No s'ha pogut connectar amb el dispositiu Samsung TV.", - "not_supported": "Actualment aquest dispositiu Samsung TV no \u00e9s compatible." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Vols configurar la Samsung TV {model}? Si mai abans l'has connectat a Home Assistant haur\u00edes de veure una finestra emergent a la TV demanant autenticaci\u00f3. Les configuracuons manuals d'aquesta TV es sobreescriuran.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Amfitri\u00f3 o adre\u00e7a IP", - "name": "Nom" - }, - "description": "Introdeix les dades de la Samsung TV. Si mai abans l'has connectat a Home Assistant haur\u00edes de veure una finestra emergent demanant autenticaci\u00f3.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/da.json b/homeassistant/components/samsungtv/.translations/da.json deleted file mode 100644 index 7a6b5540c59..00000000000 --- a/homeassistant/components/samsungtv/.translations/da.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dette Samsung-tv er allerede konfigureret.", - "already_in_progress": "Samsung-tv-konfiguration er allerede i gang.", - "auth_missing": "Home Assistant er ikke godkendt til at oprette forbindelse til dette Samsung-tv. Tjek dit tvs indstillinger for at godkende Home Assistant.", - "not_successful": "Kan ikke oprette forbindelse til denne Samsung tv-enhed.", - "not_supported": "Dette Samsung TV underst\u00f8ttes i \u00f8jeblikket ikke." - }, - "flow_title": "Samsung-tv: {model}", - "step": { - "confirm": { - "description": "Vil du konfigurere Samsung-tv {model}? Hvis du aldrig har oprettet forbindelse til Home Assistant f\u00f8r, b\u00f8r du se en popup p\u00e5 dit tv, der beder om godkendelse. Manuelle konfigurationer for dette tv vil blive overskrevet.", - "title": "Samsung-tv" - }, - "user": { - "data": { - "host": "V\u00e6rt eller IP-adresse", - "name": "Navn" - }, - "description": "Indtast dine Samsung-tv-oplysninger. Hvis du aldrig har oprettet forbindelse til Home Assistant f\u00f8r, b\u00f8r du se en popup p\u00e5 dit tv, der beder om godkendelse.", - "title": "Samsung-tv" - } - }, - "title": "Samsung-tv" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/de.json b/homeassistant/components/samsungtv/.translations/de.json deleted file mode 100644 index 24afa67038d..00000000000 --- a/homeassistant/components/samsungtv/.translations/de.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser Samsung TV ist bereits konfiguriert", - "already_in_progress": "Der Konfigurationsablauf f\u00fcr Samsung TV wird bereits ausgef\u00fchrt.", - "auth_missing": "Home Assistant ist nicht berechtigt, eine Verbindung zu diesem Samsung TV herzustellen. \u00dcberpr\u00fcfe die Einstellungen deines Fernsehger\u00e4ts, um Home Assistant zu autorisieren.", - "not_successful": "Es kann keine Verbindung zu diesem Samsung-Fernsehger\u00e4t hergestellt werden.", - "not_supported": "Dieses Samsung TV-Ger\u00e4t wird derzeit nicht unterst\u00fctzt." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "M\u00f6chtest du Samsung TV {model} einrichten? Wenn du noch nie eine Verbindung zum Home Assistant hergestellt hast, solltest du ein Popup-Fenster auf deinem Fernseher sehen, das nach einer Autorisierung fragt. Manuelle Konfigurationen f\u00fcr dieses Fernsehger\u00e4t werden \u00fcberschrieben.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Host oder IP-Adresse", - "name": "Name" - }, - "description": "Gib deine Samsung TV-Informationen ein. Wenn du noch nie eine Verbindung zum Home Assistant hergestellt hast, solltest du ein Popup-Fenster auf deinem Fernseher sehen, das nach einer Authentifizierung fragt.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/en.json b/homeassistant/components/samsungtv/.translations/en.json deleted file mode 100644 index 37dc84d3e30..00000000000 --- a/homeassistant/components/samsungtv/.translations/en.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This Samsung TV is already configured.", - "already_in_progress": "Samsung TV configuration is already in progress.", - "auth_missing": "Home Assistant is not authorized to connect to this Samsung TV. Please check your TV's settings to authorize Home Assistant.", - "not_successful": "Unable to connect to this Samsung TV device.", - "not_supported": "This Samsung TV device is currently not supported." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Do you want to set up Samsung TV {model}? If you never connected Home Assistant before you should see a popup on your TV asking for authorization. Manual configurations for this TV will be overwritten.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Host or IP address", - "name": "Name" - }, - "description": "Enter your Samsung TV information. If you never connected Home Assistant before you should see a popup on your TV asking for authorization.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/es.json b/homeassistant/components/samsungtv/.translations/es.json deleted file mode 100644 index 91581de59a1..00000000000 --- a/homeassistant/components/samsungtv/.translations/es.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este televisor Samsung ya est\u00e1 configurado.", - "already_in_progress": "La configuraci\u00f3n del televisor Samsung ya est\u00e1 en progreso.", - "auth_missing": "Home Assistant no est\u00e1 autenticado para conectarse a este televisor Samsung.", - "not_successful": "No se puede conectar a este dispositivo Samsung TV.", - "not_supported": "Esta televisi\u00f3n Samsung actualmente no es compatible." - }, - "flow_title": "Televisor Samsung: {model}", - "step": { - "confirm": { - "description": "\u00bfDesea configurar el televisor Samsung {model} ? Si nunca conect\u00f3 Home Assistant antes, deber\u00eda ver una ventana emergente en su televisor pidiendo autenticaci\u00f3n. Las configuraciones manuales para este televisor se sobrescribir\u00e1n.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Host o direcci\u00f3n IP", - "name": "Nombre" - }, - "description": "Introduce la informaci\u00f3n de tu televisor Samsung. Si nunca conect\u00f3 Home Assistant antes de ver una ventana emergente en su televisor pidiendo autenticaci\u00f3n.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/fr.json b/homeassistant/components/samsungtv/.translations/fr.json deleted file mode 100644 index 8e722a7add0..00000000000 --- a/homeassistant/components/samsungtv/.translations/fr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce t\u00e9l\u00e9viseur Samsung est d\u00e9j\u00e0 configur\u00e9.", - "already_in_progress": "La configuration du t\u00e9l\u00e9viseur Samsung est d\u00e9j\u00e0 en cours.", - "auth_missing": "Home Assistant n'est pas authentifi\u00e9 pour se connecter \u00e0 ce t\u00e9l\u00e9viseur Samsung.", - "not_successful": "Impossible de se connecter \u00e0 cet appareil Samsung TV.", - "not_supported": "Ce t\u00e9l\u00e9viseur Samsung n'est actuellement pas pris en charge." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Voulez vous installer la TV {model} Samsung? Si vous n'avez jamais connect\u00e9 Home Assistant avant, vous devriez voir une fen\u00eatre contextuelle sur votre t\u00e9l\u00e9viseur demandant une authentification. Les configurations manuelles de ce t\u00e9l\u00e9viseur seront \u00e9cras\u00e9es.", - "title": "TV Samsung" - }, - "user": { - "data": { - "host": "H\u00f4te ou adresse IP", - "name": "Nom" - }, - "description": "Entrez les informations relatives \u00e0 votre t\u00e9l\u00e9viseur Samsung. Si vous n'avez jamais connect\u00e9 Home Assistant avant, vous devriez voir une fen\u00eatre contextuelle sur votre t\u00e9l\u00e9viseur demandant une authentification.", - "title": "TV Samsung" - } - }, - "title": "TV Samsung" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/hu.json b/homeassistant/components/samsungtv/.translations/hu.json deleted file mode 100644 index 6ed1d806739..00000000000 --- a/homeassistant/components/samsungtv/.translations/hu.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ez a Samsung TV m\u00e1r konfigur\u00e1lva van.", - "already_in_progress": "A Samsung TV konfigur\u00e1l\u00e1sa m\u00e1r folyamatban van.", - "auth_missing": "A Home Assistant nem jogosult csatlakozni ehhez a Samsung TV-hez. Ellen\u0151rizze a TV-k\u00e9sz\u00fcl\u00e9k\u00e9ben a Home Assistant enged\u00e9lyez\u00e9si be\u00e1ll\u00edt\u00e1sait.", - "not_successful": "Nem lehet csatlakozni ehhez a Samsung TV k\u00e9sz\u00fcl\u00e9khez.", - "not_supported": "Ez a Samsung TV k\u00e9sz\u00fcl\u00e9k jelenleg nem t\u00e1mogatott." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Be\u00e1ll\u00edtja a Samsung TV {model} k\u00e9sz\u00fcl\u00e9ket? Ha soha nem csatlakozott home assistant-hez ezel\u0151tt, meg kell jelennie egy felugr\u00f3 ablaknak a TV-ben, ahol hiteles\u00edt\u00e9st k\u00e9r. A tv-k\u00e9sz\u00fcl\u00e9k manu\u00e1lis konfigur\u00e1ci\u00f3i fel\u00fcl\u00edr\u00f3dnak.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Hosztn\u00e9v vagy IP c\u00edm", - "name": "N\u00e9v" - }, - "description": "\u00cdrja be a Samsung TV adatait. Ha soha nem csatlakoztatta a Home Assistant alkalmaz\u00e1st ezel\u0151tt, l\u00e1tnia kell a t\u00e9v\u00e9ben egy felugr\u00f3 ablakot, amely enged\u00e9lyt k\u00e9r.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/it.json b/homeassistant/components/samsungtv/.translations/it.json deleted file mode 100644 index 692f91efea9..00000000000 --- a/homeassistant/components/samsungtv/.translations/it.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo Samsung TV \u00e8 gi\u00e0 configurato.", - "already_in_progress": "La configurazione di Samsung TV \u00e8 gi\u00e0 in corso.", - "auth_missing": "Home Assistant non \u00e8 autorizzato a connettersi a questo Samsung TV. Controlla le impostazioni del tuo TV per autorizzare Home Assistant.", - "not_successful": "Impossibile connettersi a questo dispositivo Samsung TV.", - "not_supported": "Questo dispositivo Samsung TV non \u00e8 attualmente supportato." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Vuoi configurare Samsung TV {model}? Se non hai mai connesso Home Assistant in precedenza, dovresti vedere un messaggio sul tuo TV in cui \u00e8 richiesta l'autorizzazione. Le configurazioni manuali per questo TV verranno sovrascritte.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Host o indirizzo IP", - "name": "Nome" - }, - "description": "Inserisci le informazioni del tuo Samsung TV. Se non hai mai connesso Home Assistant in precedenza, dovresti vedere un messaggio sul TV in cui \u00e8 richiesta l'autorizzazione.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/ko.json b/homeassistant/components/samsungtv/.translations/ko.json deleted file mode 100644 index 20b4496b428..00000000000 --- a/homeassistant/components/samsungtv/.translations/ko.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc0bc\uc131 TV \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "already_in_progress": "\uc0bc\uc131 TV \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", - "auth_missing": "Home Assistant \uac00 \ud574\ub2f9 \uc0bc\uc131 TV \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. TV \uc124\uc815\uc744 \ud655\uc778\ud558\uc5ec Home Assistant \ub97c \uc2b9\uc778\ud574\uc8fc\uc138\uc694.", - "not_successful": "\uc0bc\uc131 TV \uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "not_supported": "\uc774 \uc0bc\uc131 TV \ubaa8\ub378\uc740 \ud604\uc7ac \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." - }, - "flow_title": "\uc0bc\uc131 TV: {model}", - "step": { - "confirm": { - "description": "\uc0bc\uc131 TV {model} \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? Home Assistant \ub97c \uc5f0\uacb0 \ud55c \uc801\uc774 \uc5c6\ub2e4\uba74 TV \uc5d0\uc11c \uc778\uc99d\uc744 \uc694\uccad\ud558\ub294 \ud31d\uc5c5\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4. \uc774 TV \uc758 \uc218\ub3d9\uc73c\ub85c \uad6c\uc131\ub41c \ub0b4\uc6a9\uc744 \ub36e\uc5b4\uc501\ub2c8\ub2e4.", - "title": "\uc0bc\uc131 TV" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c", - "name": "\uc774\ub984" - }, - "description": "\uc0bc\uc131 TV \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. Home Assistant \ub97c \uc5f0\uacb0 \ud55c \uc801\uc774 \uc5c6\ub2e4\uba74 TV \uc5d0\uc11c \uc778\uc99d\uc744 \uc694\uccad\ud558\ub294 \ud31d\uc5c5\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.", - "title": "\uc0bc\uc131 TV" - } - }, - "title": "\uc0bc\uc131 TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/lb.json b/homeassistant/components/samsungtv/.translations/lb.json deleted file mode 100644 index 39ec28d6992..00000000000 --- a/homeassistant/components/samsungtv/.translations/lb.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebs Samsung TV ass scho konfigur\u00e9iert.", - "already_in_progress": "Konfiguratioun fir d\u00ebs Samsung TV ass schonn am gaang.", - "auth_missing": "Home Assistant ass net authentifiz\u00e9iert fir sech mat d\u00ebsem Samsung TV ze verbannen.", - "not_successful": "Keng Verbindung mat d\u00ebsem Samsung TV Apparat m\u00e9iglech.", - "not_supported": "D\u00ebsen Samsung TV Modell g\u00ebtt momentan net \u00ebnnerst\u00ebtzt" - }, - "flow_title": "Samsnung TV:{model}", - "step": { - "confirm": { - "description": "W\u00ebllt dir de Samsung TV {model} ariichten?. Falls dir Home Assistant nach ni domat verbonnen hutt misst den TV eng Meldung mat enger Authentifiz\u00e9ierung uweisen. Manuell Konfiguratioun g\u00ebtt iwwerschriwwen.", - "title": "Samsnung TV" - }, - "user": { - "data": { - "host": "Numm oder IP Adresse", - "name": "Numm" - }, - "description": "Gitt \u00e4r Samsung TV Informatiounen un. Falls dir Home Assistant nach ni domat verbonnen hutt misst den TV eng Meldung mat enger Authentifiz\u00e9ierung uweisen.", - "title": "Samsnung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/nl.json b/homeassistant/components/samsungtv/.translations/nl.json deleted file mode 100644 index 3dcb9e59d74..00000000000 --- a/homeassistant/components/samsungtv/.translations/nl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Deze Samsung TV is al geconfigureerd.", - "already_in_progress": "Samsung TV configuratie is al in uitvoering.", - "auth_missing": "Home Assistant is niet geautoriseerd om verbinding te maken met deze Samsung TV.", - "not_successful": "Niet in staat om verbinding te maken met dit Samsung TV toestel.", - "not_supported": "Deze Samsung TV wordt momenteel niet ondersteund." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Wilt u Samsung TV {model} instellen? Als u nooit eerder Home Assistant hebt verbonden dan zou u een popup op uw TV moeten zien waarin u om toestemming wordt vraagt. Handmatige configuraties voor deze TV worden overschreven", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Hostnaam of IP-adres", - "name": "Naam" - }, - "description": "Voer uw Samsung TV informatie in. Als u nooit eerder Home Assistant hebt verbonden dan zou u een popup op uw TV moeten zien waarin u om toestemming wordt vraagt.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/no.json b/homeassistant/components/samsungtv/.translations/no.json deleted file mode 100644 index 6e02251f271..00000000000 --- a/homeassistant/components/samsungtv/.translations/no.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne Samsung TV-en er allerede konfigurert.", - "already_in_progress": "Samsung TV-konfigurasjon p\u00e5g\u00e5r allerede.", - "auth_missing": "Home Assistant er ikke autorisert til \u00e5 koble til denne Samsung-TV. Vennligst kontroller innstillingene for TV-en for \u00e5 autorisere Home Assistent.", - "not_successful": "Kan ikke koble til denne Samsung TV-enheten.", - "not_supported": "Denne Samsung TV-enhetene st\u00f8ttes forel\u00f8pig ikke." - }, - "flow_title": "", - "step": { - "confirm": { - "description": "Vil du sette opp Samsung TV {model} ? Hvis du aldri har koblet til Home Assistant f\u00f8r, vil en popup p\u00e5 TVen be om godkjenning. Manuelle konfigurasjoner for denne TVen vil bli overskrevet.", - "title": "" - }, - "user": { - "data": { - "host": "Vert eller IP-adresse", - "name": "Navn" - }, - "description": "Skriv inn Samsung TV-informasjonen din. Hvis du aldri har koblet til Home Assistant f\u00f8r, vil en popup p\u00e5 TVen be om godkjenning.", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/pl.json b/homeassistant/components/samsungtv/.translations/pl.json deleted file mode 100644 index 02231169b65..00000000000 --- a/homeassistant/components/samsungtv/.translations/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ten telewizor Samsung jest ju\u017c skonfigurowany.", - "already_in_progress": "Konfiguracja telewizora Samsung jest ju\u017c w toku.", - "auth_missing": "Home Assistant nie jest uwierzytelniony, aby po\u0142\u0105czy\u0107 si\u0119 z tym telewizorem Samsung.", - "not_successful": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 urz\u0105dzeniem Samsung TV.", - "not_supported": "Ten telewizor Samsung nie jest obecnie obs\u0142ugiwany." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 telewizor Samsung {model}? Je\u015bli nigdy wcze\u015bniej ten telewizor nie by\u0142 \u0142\u0105czony z Home Assistant'em na jego ekranie powinna pojawi\u0107 si\u0119 pro\u015bba o uwierzytelnienie. R\u0119czne konfiguracje tego telewizora zostan\u0105 zast\u0105pione.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Nazwa hosta lub adres IP", - "name": "Nazwa" - }, - "description": "Wprowad\u017a informacje o telewizorze Samsung. Je\u015bli nigdy wcze\u015bniej ten telewizor nie by\u0142 \u0142\u0105czony z Home Assistant'em na jego ekranie powinna pojawi\u0107 si\u0119 pro\u015bba o uwierzytelnienie.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/ru.json b/homeassistant/components/samsungtv/.translations/ru.json deleted file mode 100644 index 016979eb330..00000000000 --- a/homeassistant/components/samsungtv/.translations/ru.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", - "auth_missing": "Home Assistant \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430.", - "not_successful": "\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.", - "not_supported": "\u042d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung {model}? \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a Home Assistant, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b.", - "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung" - }, - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0435 Samsung. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a Home Assistant, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung" - } - }, - "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/sl.json b/homeassistant/components/samsungtv/.translations/sl.json deleted file mode 100644 index bbf39de3409..00000000000 --- a/homeassistant/components/samsungtv/.translations/sl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta televizor Samsung je \u017ee konfiguriran.", - "already_in_progress": "Konfiguracija Samsung TV je \u017ee v teku.", - "auth_missing": "Home Assistant nima dovoljenja za povezavo s tem televizorjem Samsung. Preverite nastavitve televizorja, da ga pooblastite.", - "not_successful": "Povezave s to napravo Samsung TV ni mogo\u010de vzpostaviti.", - "not_supported": "Ta naprava Samsung TV trenutno ni podprta." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Vnesite podatke o televizorju Samsung. \u010ce \u0161e nikoli niste povezali Home Assistant, bi morali na televizorju videli pojavno okno, ki zahteva va\u0161e dovoljenje. Ro\u010dna konfiguracija za ta TV bo prepisana.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "Gostitelj ali IP naslov", - "name": "Ime" - }, - "description": "Vnesite podatke o televizorju Samsung. \u010ce \u0161e nikoli niste povezali Home Assistant, bi morali na televizorju videli pojavno okno, ki zahteva va\u0161e dovoljenje.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/sv.json b/homeassistant/components/samsungtv/.translations/sv.json deleted file mode 100644 index 423bf61a750..00000000000 --- a/homeassistant/components/samsungtv/.translations/sv.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denna Samsung TV \u00e4r redan konfigurerad.", - "already_in_progress": "Samsung TV-konfiguration p\u00e5g\u00e5r redan.", - "auth_missing": "Home Assistant har inte beh\u00f6righet att ansluta till denna Samsung TV. Kontrollera tv:ns inst\u00e4llningar f\u00f6r att godk\u00e4nna Home Assistant.", - "not_successful": "Det g\u00e5r inte att ansluta till denna Samsung TV-enhet.", - "not_supported": "Denna Samsung TV-enhet st\u00f6ds f\u00f6r n\u00e4rvarande inte." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "confirm": { - "description": "Vill du st\u00e4lla in Samsung TV {model}? Om du aldrig har anslutit Home Assistant innan du ska se ett popup-f\u00f6nster p\u00e5 tv:n och be om auktorisering. Manuella konfigurationer f\u00f6r den h\u00e4r TV:n skrivs \u00f6ver.", - "title": "Samsung TV" - }, - "user": { - "data": { - "host": "V\u00e4rdnamn eller IP-adress", - "name": "Namn" - }, - "description": "Ange informationen f\u00f6r din Samsung TV. Om du aldrig har anslutit denna till Home Assistant tidigare borde du se en popup om autentisering p\u00e5 din TV.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/tr.json b/homeassistant/components/samsungtv/.translations/tr.json deleted file mode 100644 index e23969be8a2..00000000000 --- a/homeassistant/components/samsungtv/.translations/tr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bu Samsung TV zaten ayarlanm\u0131\u015f.", - "already_in_progress": "Samsung TV ayar\u0131 zaten s\u00fcr\u00fcyor.", - "auth_missing": "Home Assistant'\u0131n bu Samsung TV'ye ba\u011flanma izni yok. Home Assistant'\u0131 yetkilendirmek i\u00e7in l\u00fctfen TV'nin ayarlar\u0131n\u0131 kontrol et.", - "not_successful": "Bu Samsung TV cihaz\u0131na ba\u011flan\u0131lam\u0131yor.", - "not_supported": "Bu Samsung TV cihaz\u0131 \u015fu anda desteklenmiyor." - }, - "flow_title": "Samsung TV: {model}", - "step": { - "user": { - "data": { - "host": "Host veya IP adresi", - "name": "Ad" - }, - "description": "Samsung TV bilgilerini gir. Daha \u00f6nce hi\u00e7 Home Assistant'a ba\u011flamad\u0131ysan, TV'nde izin isteyen bir pencere g\u00f6receksindir.", - "title": "Samsung TV" - } - }, - "title": "Samsung TV" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/.translations/zh-Hant.json b/homeassistant/components/samsungtv/.translations/zh-Hant.json deleted file mode 100644 index d12d47551c8..00000000000 --- a/homeassistant/components/samsungtv/.translations/zh-Hant.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4e09\u661f\u96fb\u8996\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "already_in_progress": "\u4e09\u661f\u96fb\u8996\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", - "auth_missing": "Home Assistant \u672a\u7372\u5f97\u9a57\u8b49\u4ee5\u9023\u7dda\u81f3\u6b64\u4e09\u661f\u96fb\u8996\u3002\u8acb\u6aa2\u67e5\u60a8\u7684\u96fb\u8996\u8a2d\u5b9a\u4ee5\u76e1\u8208\u9a57\u8b49\u3002", - "not_successful": "\u7121\u6cd5\u9023\u7dda\u81f3\u4e09\u661f\u96fb\u8996\u8a2d\u5099\u3002", - "not_supported": "\u4e0d\u652f\u63f4\u6b64\u6b3e\u4e09\u661f\u96fb\u8996\u3002" - }, - "flow_title": "\u4e09\u661f\u96fb\u8996\uff1a{model}", - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u4e09\u661f\u96fb\u8996 {model}\uff1f\u5047\u5982\u60a8\u4e4b\u524d\u672a\u66fe\u9023\u7dda\u81f3 Home Assistant\uff0c\u61c9\u8a72\u6703\u65bc\u96fb\u8996\u4e0a\u6536\u5230\u9a57\u8b49\u8a0a\u606f\u3002\u624b\u52d5\u8a2d\u5b9a\u5c07\u6703\u8986\u84cb\u539f\u8a2d\u5b9a\u3002", - "title": "\u4e09\u661f\u96fb\u8996" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", - "name": "\u540d\u7a31" - }, - "description": "\u8f38\u5165\u4e09\u661f\u96fb\u8996\u8cc7\u8a0a\u3002\u5047\u5982\u60a8\u4e4b\u524d\u672a\u66fe\u9023\u7dda\u81f3 Home Assistant\uff0c\u61c9\u8a72\u6703\u65bc\u96fb\u8996\u4e0a\u6536\u5230\u9a57\u8b49\u8a0a\u606f\u3002", - "title": "\u4e09\u661f\u96fb\u8996" - } - }, - "title": "\u4e09\u661f\u96fb\u8996" - } -} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/manifest.json b/homeassistant/components/samsungtv/manifest.json index 66f71b5c5da..efcb9064208 100644 --- a/homeassistant/components/samsungtv/manifest.json +++ b/homeassistant/components/samsungtv/manifest.json @@ -11,9 +11,6 @@ "st": "urn:samsung.com:device:RemoteControlReceiver:1" } ], - "dependencies": [], - "codeowners": [ - "@escoand" - ], + "codeowners": ["@escoand"], "config_flow": true -} \ No newline at end of file +} diff --git a/homeassistant/components/samsungtv/media_player.py b/homeassistant/components/samsungtv/media_player.py index 8f12341ee4a..35a374688b5 100644 --- a/homeassistant/components/samsungtv/media_player.py +++ b/homeassistant/components/samsungtv/media_player.py @@ -52,13 +52,6 @@ SUPPORT_SAMSUNGTV = ( ) -async def async_setup_platform( - hass, config, add_entities, discovery_info=None -): # pragma: no cover - """Set up the Samsung TV platform.""" - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the Samsung TV from a config entry.""" ip_address = config_entry.data[CONF_IP_ADDRESS] diff --git a/homeassistant/components/samsungtv/strings.json b/homeassistant/components/samsungtv/strings.json index 2e36062669f..4377e0671e9 100644 --- a/homeassistant/components/samsungtv/strings.json +++ b/homeassistant/components/samsungtv/strings.json @@ -1,15 +1,10 @@ { "config": { "flow_title": "Samsung TV: {model}", - "title": "Samsung TV", "step": { "user": { - "title": "Samsung TV", "description": "Enter your Samsung TV information. If you never connected Home Assistant before you should see a popup on your TV asking for authorization.", - "data": { - "host": "Host or IP address", - "name": "Name" - } + "data": { "host": "Host or IP address", "name": "Name" } }, "confirm": { "title": "Samsung TV", diff --git a/homeassistant/components/samsungtv/translations/ca.json b/homeassistant/components/samsungtv/translations/ca.json new file mode 100644 index 00000000000..46ea2bfa4c3 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/ca.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest televisor Samsung ja configurat.", + "already_in_progress": "La configuraci\u00f3 del televisor Samsung ja est\u00e0 en curs.", + "auth_missing": "Home Assistant no est\u00e0 autenticat per connectar-se amb aquest televisor Samsung. V\u00e9s a la configuraci\u00f3 del televisor per autoritzar a Home Assistant.", + "not_successful": "No s'ha pogut connectar amb el dispositiu el televisor Samsung.", + "not_supported": "Actualment aquest televisor Samsung no \u00e9s compatible." + }, + "flow_title": "Televisor Samsung: {model}", + "step": { + "confirm": { + "description": "Vols configurar el televisior Samsung {model}? Si mai abans l'has connectat a Home Assistant haur\u00edes de veure una finestra emergent a la pantalla del televisor demanant autenticaci\u00f3. Les configuracions manuals d'aquest televisor es sobreescriuran.", + "title": "Televisor Samsung" + }, + "user": { + "data": { + "host": "Amfitri\u00f3 o adre\u00e7a IP", + "name": "Nom" + }, + "description": "Introdeix les dades del televisor Samsung. Si mai abans l'has connectat a Home Assistant haur\u00edes de veure una finestra emergent demanant autenticaci\u00f3.", + "title": "Televisor Samsung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/da.json b/homeassistant/components/samsungtv/translations/da.json new file mode 100644 index 00000000000..ec83db6aab8 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/da.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Dette Samsung-tv er allerede konfigureret.", + "already_in_progress": "Samsung-tv-konfiguration er allerede i gang.", + "auth_missing": "Home Assistant er ikke godkendt til at oprette forbindelse til dette Samsung-tv. Tjek dit tvs indstillinger for at godkende Home Assistant.", + "not_successful": "Kan ikke oprette forbindelse til denne Samsung tv-enhed.", + "not_supported": "Dette Samsung TV underst\u00f8ttes i \u00f8jeblikket ikke." + }, + "flow_title": "Samsung-tv: {model}", + "step": { + "confirm": { + "description": "Vil du konfigurere Samsung-tv {model}? Hvis du aldrig har oprettet forbindelse til Home Assistant f\u00f8r, b\u00f8r du se en popup p\u00e5 dit tv, der beder om godkendelse. Manuelle konfigurationer for dette tv vil blive overskrevet.", + "title": "Samsung-tv" + }, + "user": { + "data": { + "host": "V\u00e6rt eller IP-adresse", + "name": "Navn" + }, + "description": "Indtast dine Samsung-tv-oplysninger. Hvis du aldrig har oprettet forbindelse til Home Assistant f\u00f8r, b\u00f8r du se en popup p\u00e5 dit tv, der beder om godkendelse.", + "title": "Samsung-tv" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/de.json b/homeassistant/components/samsungtv/translations/de.json new file mode 100644 index 00000000000..026f00a8cb2 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/de.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Samsung TV ist bereits konfiguriert", + "already_in_progress": "Der Konfigurationsablauf f\u00fcr Samsung TV wird bereits ausgef\u00fchrt.", + "auth_missing": "Home Assistant ist nicht berechtigt, eine Verbindung zu diesem Samsung TV herzustellen. \u00dcberpr\u00fcfe die Einstellungen deines Fernsehger\u00e4ts, um Home Assistant zu autorisieren.", + "not_successful": "Es kann keine Verbindung zu diesem Samsung-Fernsehger\u00e4t hergestellt werden.", + "not_supported": "Dieses Samsung TV-Ger\u00e4t wird derzeit nicht unterst\u00fctzt." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "M\u00f6chtest du Samsung TV {model} einrichten? Wenn du noch nie eine Verbindung zum Home Assistant hergestellt hast, solltest du ein Popup-Fenster auf deinem Fernseher sehen, das nach einer Autorisierung fragt. Manuelle Konfigurationen f\u00fcr dieses Fernsehger\u00e4t werden \u00fcberschrieben.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Host oder IP-Adresse", + "name": "Name" + }, + "description": "Gib deine Samsung TV-Informationen ein. Wenn du noch nie eine Verbindung zum Home Assistant hergestellt hast, solltest du ein Popup-Fenster auf deinem Fernseher sehen, das nach einer Authentifizierung fragt.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/en.json b/homeassistant/components/samsungtv/translations/en.json new file mode 100644 index 00000000000..53a5cd4d061 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/en.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "This Samsung TV is already configured.", + "already_in_progress": "Samsung TV configuration is already in progress.", + "auth_missing": "Home Assistant is not authorized to connect to this Samsung TV. Please check your TV's settings to authorize Home Assistant.", + "not_successful": "Unable to connect to this Samsung TV device.", + "not_supported": "This Samsung TV device is currently not supported." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Do you want to set up Samsung TV {model}? If you never connected Home Assistant before you should see a popup on your TV asking for authorization. Manual configurations for this TV will be overwritten.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Host or IP address", + "name": "Name" + }, + "description": "Enter your Samsung TV information. If you never connected Home Assistant before you should see a popup on your TV asking for authorization.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/es.json b/homeassistant/components/samsungtv/translations/es.json new file mode 100644 index 00000000000..fc997b4974d --- /dev/null +++ b/homeassistant/components/samsungtv/translations/es.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Este televisor Samsung ya est\u00e1 configurado.", + "already_in_progress": "La configuraci\u00f3n del televisor Samsung ya est\u00e1 en progreso.", + "auth_missing": "Home Assistant no est\u00e1 autenticado para conectarse a este televisor Samsung.", + "not_successful": "No se puede conectar a este dispositivo Samsung TV.", + "not_supported": "Esta televisi\u00f3n Samsung actualmente no es compatible." + }, + "flow_title": "Televisor Samsung: {model}", + "step": { + "confirm": { + "description": "\u00bfDesea configurar el televisor Samsung {model} ? Si nunca conect\u00f3 Home Assistant antes, deber\u00eda ver una ventana emergente en su televisor pidiendo autenticaci\u00f3n. Las configuraciones manuales para este televisor se sobrescribir\u00e1n.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Host o direcci\u00f3n IP", + "name": "Nombre" + }, + "description": "Introduce la informaci\u00f3n de tu televisor Samsung. Si nunca conect\u00f3 Home Assistant antes de ver una ventana emergente en su televisor pidiendo autenticaci\u00f3n.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/fr.json b/homeassistant/components/samsungtv/translations/fr.json new file mode 100644 index 00000000000..e37b3104b1c --- /dev/null +++ b/homeassistant/components/samsungtv/translations/fr.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ce t\u00e9l\u00e9viseur Samsung est d\u00e9j\u00e0 configur\u00e9.", + "already_in_progress": "La configuration du t\u00e9l\u00e9viseur Samsung est d\u00e9j\u00e0 en cours.", + "auth_missing": "Home Assistant n'est pas authentifi\u00e9 pour se connecter \u00e0 ce t\u00e9l\u00e9viseur Samsung.", + "not_successful": "Impossible de se connecter \u00e0 cet appareil Samsung TV.", + "not_supported": "Ce t\u00e9l\u00e9viseur Samsung n'est actuellement pas pris en charge." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Voulez vous installer la TV {model} Samsung? Si vous n'avez jamais connect\u00e9 Home Assistant avant, vous devriez voir une fen\u00eatre contextuelle sur votre t\u00e9l\u00e9viseur demandant une authentification. Les configurations manuelles de ce t\u00e9l\u00e9viseur seront \u00e9cras\u00e9es.", + "title": "TV Samsung" + }, + "user": { + "data": { + "host": "H\u00f4te ou adresse IP", + "name": "Nom" + }, + "description": "Entrez les informations relatives \u00e0 votre t\u00e9l\u00e9viseur Samsung. Si vous n'avez jamais connect\u00e9 Home Assistant avant, vous devriez voir une fen\u00eatre contextuelle sur votre t\u00e9l\u00e9viseur demandant une authentification.", + "title": "TV Samsung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/hu.json b/homeassistant/components/samsungtv/translations/hu.json new file mode 100644 index 00000000000..f6f09dab4ee --- /dev/null +++ b/homeassistant/components/samsungtv/translations/hu.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ez a Samsung TV m\u00e1r konfigur\u00e1lva van.", + "already_in_progress": "A Samsung TV konfigur\u00e1l\u00e1sa m\u00e1r folyamatban van.", + "auth_missing": "A Home Assistant nem jogosult csatlakozni ehhez a Samsung TV-hez. Ellen\u0151rizze a TV-k\u00e9sz\u00fcl\u00e9k\u00e9ben a Home Assistant enged\u00e9lyez\u00e9si be\u00e1ll\u00edt\u00e1sait.", + "not_successful": "Nem lehet csatlakozni ehhez a Samsung TV k\u00e9sz\u00fcl\u00e9khez.", + "not_supported": "Ez a Samsung TV k\u00e9sz\u00fcl\u00e9k jelenleg nem t\u00e1mogatott." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Be\u00e1ll\u00edtja a Samsung TV {model} k\u00e9sz\u00fcl\u00e9ket? Ha soha nem csatlakozott home assistant-hez ezel\u0151tt, meg kell jelennie egy felugr\u00f3 ablaknak a TV-ben, ahol hiteles\u00edt\u00e9st k\u00e9r. A tv-k\u00e9sz\u00fcl\u00e9k manu\u00e1lis konfigur\u00e1ci\u00f3i fel\u00fcl\u00edr\u00f3dnak.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Hosztn\u00e9v vagy IP c\u00edm", + "name": "N\u00e9v" + }, + "description": "\u00cdrja be a Samsung TV adatait. Ha soha nem csatlakoztatta a Home Assistant alkalmaz\u00e1st ezel\u0151tt, l\u00e1tnia kell a t\u00e9v\u00e9ben egy felugr\u00f3 ablakot, amely enged\u00e9lyt k\u00e9r.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/it.json b/homeassistant/components/samsungtv/translations/it.json new file mode 100644 index 00000000000..7b62a48e62f --- /dev/null +++ b/homeassistant/components/samsungtv/translations/it.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Questo Samsung TV \u00e8 gi\u00e0 configurato.", + "already_in_progress": "La configurazione di Samsung TV \u00e8 gi\u00e0 in corso.", + "auth_missing": "Home Assistant non \u00e8 autorizzato a connettersi a questo Samsung TV. Controlla le impostazioni del tuo TV per autorizzare Home Assistant.", + "not_successful": "Impossibile connettersi a questo dispositivo Samsung TV.", + "not_supported": "Questo dispositivo Samsung TV non \u00e8 attualmente supportato." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Vuoi configurare Samsung TV {model}? Se non hai mai connesso Home Assistant in precedenza, dovresti vedere un messaggio sul tuo TV in cui \u00e8 richiesta l'autorizzazione. Le configurazioni manuali per questo TV verranno sovrascritte.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Host o indirizzo IP", + "name": "Nome" + }, + "description": "Inserisci le informazioni del tuo Samsung TV. Se non hai mai connesso Home Assistant in precedenza, dovresti vedere un messaggio sul TV in cui \u00e8 richiesta l'autorizzazione.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/ko.json b/homeassistant/components/samsungtv/translations/ko.json new file mode 100644 index 00000000000..228c8b1f71e --- /dev/null +++ b/homeassistant/components/samsungtv/translations/ko.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc0bc\uc131 TV \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "already_in_progress": "\uc0bc\uc131 TV \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4.", + "auth_missing": "Home Assistant \uac00 \ud574\ub2f9 \uc0bc\uc131 TV \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. TV \uc124\uc815\uc744 \ud655\uc778\ud558\uc5ec Home Assistant \ub97c \uc2b9\uc778\ud574\uc8fc\uc138\uc694.", + "not_successful": "\uc0bc\uc131 TV \uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "not_supported": "\uc774 \uc0bc\uc131 TV \ubaa8\ub378\uc740 \ud604\uc7ac \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." + }, + "flow_title": "\uc0bc\uc131 TV: {model}", + "step": { + "confirm": { + "description": "\uc0bc\uc131 TV {model} \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? Home Assistant \ub97c \uc5f0\uacb0 \ud55c \uc801\uc774 \uc5c6\ub2e4\uba74 TV \uc5d0\uc11c \uc778\uc99d\uc744 \uc694\uccad\ud558\ub294 \ud31d\uc5c5\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4. \uc774 TV \uc758 \uc218\ub3d9\uc73c\ub85c \uad6c\uc131\ub41c \ub0b4\uc6a9\uc744 \ub36e\uc5b4\uc501\ub2c8\ub2e4.", + "title": "\uc0bc\uc131 TV" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c", + "name": "\uc774\ub984" + }, + "description": "\uc0bc\uc131 TV \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694. Home Assistant \ub97c \uc5f0\uacb0 \ud55c \uc801\uc774 \uc5c6\ub2e4\uba74 TV \uc5d0\uc11c \uc778\uc99d\uc744 \uc694\uccad\ud558\ub294 \ud31d\uc5c5\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4.", + "title": "\uc0bc\uc131 TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/lb.json b/homeassistant/components/samsungtv/translations/lb.json new file mode 100644 index 00000000000..8e54495a1b8 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/lb.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebs Samsung TV ass scho konfigur\u00e9iert.", + "already_in_progress": "Konfiguratioun fir d\u00ebs Samsung TV ass schonn am gaang.", + "auth_missing": "Home Assistant ass net authentifiz\u00e9iert fir sech mat d\u00ebsem Samsung TV ze verbannen. Iwwerpr\u00e9if d'Astellunge vum Fernseh fir Home Assistant z'erlaben.", + "not_successful": "Keng Verbindung mat d\u00ebsem Samsung TV Apparat m\u00e9iglech.", + "not_supported": "D\u00ebsen Samsung TV Modell g\u00ebtt momentan net \u00ebnnerst\u00ebtzt" + }, + "flow_title": "Samsnung TV:{model}", + "step": { + "confirm": { + "description": "W\u00ebllt dir de Samsung TV {model} ariichten?. Falls dir Home Assistant nach ni domat verbonnen hutt misst den TV eng Meldung mat enger Authentifiz\u00e9ierung uweisen. Manuell Konfiguratioun fir d\u00ebse TV g\u00ebtt iwwerschriwwen.", + "title": "Samsnung TV" + }, + "user": { + "data": { + "host": "Numm oder IP Adresse", + "name": "Numm" + }, + "description": "Gitt \u00e4r Samsung TV Informatiounen un. Falls dir Home Assistant nach ni domat verbonnen hutt misst den TV eng Meldung mat enger Authentifiz\u00e9ierung uweisen.", + "title": "Samsnung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/nl.json b/homeassistant/components/samsungtv/translations/nl.json new file mode 100644 index 00000000000..2760ec7a181 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/nl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Deze Samsung TV is al geconfigureerd.", + "already_in_progress": "Samsung TV configuratie is al in uitvoering.", + "auth_missing": "Home Assistant is niet geautoriseerd om verbinding te maken met deze Samsung TV.", + "not_successful": "Niet in staat om verbinding te maken met dit Samsung TV toestel.", + "not_supported": "Deze Samsung TV wordt momenteel niet ondersteund." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Wilt u Samsung TV {model} instellen? Als u nooit eerder Home Assistant hebt verbonden dan zou u een popup op uw TV moeten zien waarin u om toestemming wordt vraagt. Handmatige configuraties voor deze TV worden overschreven", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Hostnaam of IP-adres", + "name": "Naam" + }, + "description": "Voer uw Samsung TV informatie in. Als u nooit eerder Home Assistant hebt verbonden dan zou u een popup op uw TV moeten zien waarin u om toestemming wordt vraagt.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/no.json b/homeassistant/components/samsungtv/translations/no.json new file mode 100644 index 00000000000..9240842ff97 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/no.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Samsung TV-en er allerede konfigurert.", + "already_in_progress": "Samsung TV-konfigurasjon p\u00e5g\u00e5r allerede.", + "auth_missing": "Home Assistant er ikke autorisert til \u00e5 koble til denne Samsung-TV. Vennligst kontroller innstillingene for TV-en for \u00e5 autorisere Home Assistent.", + "not_successful": "Kan ikke koble til denne Samsung TV-enheten.", + "not_supported": "Denne Samsung TV-enhetene st\u00f8ttes forel\u00f8pig ikke." + }, + "flow_title": "", + "step": { + "confirm": { + "description": "Vil du sette opp Samsung TV {model} ? Hvis du aldri har koblet til Home Assistant f\u00f8r, vil en popup p\u00e5 TVen be om godkjenning. Manuelle konfigurasjoner for denne TVen vil bli overskrevet.", + "title": "" + }, + "user": { + "data": { + "host": "Vert eller IP-adresse", + "name": "Navn" + }, + "description": "Skriv inn Samsung TV-informasjonen din. Hvis du aldri har koblet til Home Assistant f\u00f8r, vil en popup p\u00e5 TVen be om godkjenning.", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/pl.json b/homeassistant/components/samsungtv/translations/pl.json new file mode 100644 index 00000000000..1124b5335a8 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/pl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ten telewizor Samsung jest ju\u017c skonfigurowany.", + "already_in_progress": "Konfiguracja telewizora Samsung jest ju\u017c w toku.", + "auth_missing": "Home Assistant nie jest uwierzytelniony, aby po\u0142\u0105czy\u0107 si\u0119 z tym telewizorem Samsung.", + "not_successful": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 urz\u0105dzeniem Samsung TV.", + "not_supported": "Ten telewizor Samsung nie jest obecnie obs\u0142ugiwany." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 telewizor Samsung {model}? Je\u015bli nigdy wcze\u015bniej ten telewizor nie by\u0142 \u0142\u0105czony z Home Assistant'em na jego ekranie powinna pojawi\u0107 si\u0119 pro\u015bba o uwierzytelnienie. R\u0119czne konfiguracje tego telewizora zostan\u0105 zast\u0105pione.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa" + }, + "description": "Wprowad\u017a informacje o telewizorze Samsung. Je\u015bli nigdy wcze\u015bniej ten telewizor nie by\u0142 \u0142\u0105czony z Home Assistant'em na jego ekranie powinna pojawi\u0107 si\u0119 pro\u015bba o uwierzytelnienie.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/pt.json b/homeassistant/components/samsungtv/translations/pt.json new file mode 100644 index 00000000000..286cd58dd89 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/ru.json b/homeassistant/components/samsungtv/translations/ru.json new file mode 100644 index 00000000000..ab1135498cf --- /dev/null +++ b/homeassistant/components/samsungtv/translations/ru.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.", + "auth_missing": "Home Assistant \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430.", + "not_successful": "\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.", + "not_supported": "\u042d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung {model}? \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a Home Assistant, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b.", + "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung" + }, + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0435 Samsung. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a Home Assistant, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "title": "\u0422\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 Samsung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/sl.json b/homeassistant/components/samsungtv/translations/sl.json new file mode 100644 index 00000000000..f147edad4d9 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/sl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Ta televizor Samsung je \u017ee konfiguriran.", + "already_in_progress": "Konfiguracija Samsung TV je \u017ee v teku.", + "auth_missing": "Home Assistant nima dovoljenja za povezavo s tem televizorjem Samsung. Preverite nastavitve televizorja, da ga pooblastite.", + "not_successful": "Povezave s to napravo Samsung TV ni mogo\u010de vzpostaviti.", + "not_supported": "Ta naprava Samsung TV trenutno ni podprta." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Vnesite podatke o televizorju Samsung. \u010ce \u0161e nikoli niste povezali Home Assistant, bi morali na televizorju videli pojavno okno, ki zahteva va\u0161e dovoljenje. Ro\u010dna konfiguracija za ta TV bo prepisana.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "Gostitelj ali IP naslov", + "name": "Ime" + }, + "description": "Vnesite podatke o televizorju Samsung. \u010ce \u0161e nikoli niste povezali Home Assistant, bi morali na televizorju videli pojavno okno, ki zahteva va\u0161e dovoljenje.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/sv.json b/homeassistant/components/samsungtv/translations/sv.json new file mode 100644 index 00000000000..ce75d775f14 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/sv.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "Denna Samsung TV \u00e4r redan konfigurerad.", + "already_in_progress": "Samsung TV-konfiguration p\u00e5g\u00e5r redan.", + "auth_missing": "Home Assistant har inte beh\u00f6righet att ansluta till denna Samsung TV. Kontrollera tv:ns inst\u00e4llningar f\u00f6r att godk\u00e4nna Home Assistant.", + "not_successful": "Det g\u00e5r inte att ansluta till denna Samsung TV-enhet.", + "not_supported": "Denna Samsung TV-enhet st\u00f6ds f\u00f6r n\u00e4rvarande inte." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "confirm": { + "description": "Vill du st\u00e4lla in Samsung TV {model}? Om du aldrig har anslutit Home Assistant innan du ska se ett popup-f\u00f6nster p\u00e5 tv:n och be om auktorisering. Manuella konfigurationer f\u00f6r den h\u00e4r TV:n skrivs \u00f6ver.", + "title": "Samsung TV" + }, + "user": { + "data": { + "host": "V\u00e4rdnamn eller IP-adress", + "name": "Namn" + }, + "description": "Ange informationen f\u00f6r din Samsung TV. Om du aldrig har anslutit denna till Home Assistant tidigare borde du se en popup om autentisering p\u00e5 din TV.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/tr.json b/homeassistant/components/samsungtv/translations/tr.json new file mode 100644 index 00000000000..3246b833382 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/tr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Bu Samsung TV zaten ayarlanm\u0131\u015f.", + "already_in_progress": "Samsung TV ayar\u0131 zaten s\u00fcr\u00fcyor.", + "auth_missing": "Home Assistant'\u0131n bu Samsung TV'ye ba\u011flanma izni yok. Home Assistant'\u0131 yetkilendirmek i\u00e7in l\u00fctfen TV'nin ayarlar\u0131n\u0131 kontrol et.", + "not_successful": "Bu Samsung TV cihaz\u0131na ba\u011flan\u0131lam\u0131yor.", + "not_supported": "Bu Samsung TV cihaz\u0131 \u015fu anda desteklenmiyor." + }, + "flow_title": "Samsung TV: {model}", + "step": { + "user": { + "data": { + "host": "Host veya IP adresi", + "name": "Ad" + }, + "description": "Samsung TV bilgilerini gir. Daha \u00f6nce hi\u00e7 Home Assistant'a ba\u011flamad\u0131ysan, TV'nde izin isteyen bir pencere g\u00f6receksindir.", + "title": "Samsung TV" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/zh-Hant.json b/homeassistant/components/samsungtv/translations/zh-Hant.json new file mode 100644 index 00000000000..ac440b1225c --- /dev/null +++ b/homeassistant/components/samsungtv/translations/zh-Hant.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "\u4e09\u661f\u96fb\u8996\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "already_in_progress": "\u4e09\u661f\u96fb\u8996\u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002", + "auth_missing": "Home Assistant \u672a\u7372\u5f97\u9a57\u8b49\u4ee5\u9023\u7dda\u81f3\u6b64\u4e09\u661f\u96fb\u8996\u3002\u8acb\u6aa2\u67e5\u60a8\u7684\u96fb\u8996\u8a2d\u5b9a\u4ee5\u76e1\u8208\u9a57\u8b49\u3002", + "not_successful": "\u7121\u6cd5\u9023\u7dda\u81f3\u4e09\u661f\u96fb\u8996\u8a2d\u5099\u3002", + "not_supported": "\u4e0d\u652f\u63f4\u6b64\u6b3e\u4e09\u661f\u96fb\u8996\u3002" + }, + "flow_title": "\u4e09\u661f\u96fb\u8996\uff1a{model}", + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u4e09\u661f\u96fb\u8996 {model}\uff1f\u5047\u5982\u60a8\u4e4b\u524d\u672a\u66fe\u9023\u7dda\u81f3 Home Assistant\uff0c\u61c9\u8a72\u6703\u65bc\u96fb\u8996\u4e0a\u6536\u5230\u9a57\u8b49\u8a0a\u606f\u3002\u624b\u52d5\u8a2d\u5b9a\u5c07\u6703\u8986\u84cb\u539f\u8a2d\u5b9a\u3002", + "title": "\u4e09\u661f\u96fb\u8996" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740", + "name": "\u540d\u7a31" + }, + "description": "\u8f38\u5165\u4e09\u661f\u96fb\u8996\u8cc7\u8a0a\u3002\u5047\u5982\u60a8\u4e4b\u524d\u672a\u66fe\u9023\u7dda\u81f3 Home Assistant\uff0c\u61c9\u8a72\u6703\u65bc\u96fb\u8996\u4e0a\u6536\u5230\u9a57\u8b49\u8a0a\u606f\u3002", + "title": "\u4e09\u661f\u96fb\u8996" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/satel_integra/alarm_control_panel.py b/homeassistant/components/satel_integra/alarm_control_panel.py index d4294788fdd..8a240794580 100644 --- a/homeassistant/components/satel_integra/alarm_control_panel.py +++ b/homeassistant/components/satel_integra/alarm_control_panel.py @@ -67,8 +67,10 @@ class SatelIntegraAlarmPanel(alarm.AlarmControlPanel): """Update alarm status and register callbacks for future updates.""" _LOGGER.debug("Starts listening for panel messages") self._update_alarm_status() - async_dispatcher_connect( - self.hass, SIGNAL_PANEL_MESSAGE, self._update_alarm_status + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_PANEL_MESSAGE, self._update_alarm_status + ) ) @callback @@ -78,7 +80,7 @@ class SatelIntegraAlarmPanel(alarm.AlarmControlPanel): _LOGGER.debug("Got status update, current status: %s", state) if state != self._state: self._state = state - self.async_schedule_update_ha_state() + self.async_write_ha_state() else: _LOGGER.debug("Ignoring alarm status message, same state") diff --git a/homeassistant/components/satel_integra/binary_sensor.py b/homeassistant/components/satel_integra/binary_sensor.py index cbe760c06bf..4a9be339a1c 100644 --- a/homeassistant/components/satel_integra/binary_sensor.py +++ b/homeassistant/components/satel_integra/binary_sensor.py @@ -75,8 +75,10 @@ class SatelIntegraBinarySensor(BinarySensorDevice): self._state = 1 else: self._state = 0 - async_dispatcher_connect( - self.hass, self._react_to_signal, self._devices_updated + self.async_on_remove( + async_dispatcher_connect( + self.hass, self._react_to_signal, self._devices_updated + ) ) @property @@ -110,4 +112,4 @@ class SatelIntegraBinarySensor(BinarySensorDevice): """Update the zone's state, if needed.""" if self._device_number in zones and self._state != zones[self._device_number]: self._state = zones[self._device_number] - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/satel_integra/manifest.json b/homeassistant/components/satel_integra/manifest.json index e9bbd9623c0..0a157cd4deb 100644 --- a/homeassistant/components/satel_integra/manifest.json +++ b/homeassistant/components/satel_integra/manifest.json @@ -3,6 +3,5 @@ "name": "Satel Integra", "documentation": "https://www.home-assistant.io/integrations/satel_integra", "requirements": ["satel_integra==0.3.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/satel_integra/switch.py b/homeassistant/components/satel_integra/switch.py index 9233b3d152d..46f4de2784f 100644 --- a/homeassistant/components/satel_integra/switch.py +++ b/homeassistant/components/satel_integra/switch.py @@ -65,13 +65,13 @@ class SatelIntegraSwitch(SwitchDevice): _LOGGER.debug("New state: %s", new_state) if new_state != self._state: self._state = new_state - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self, **kwargs): """Turn the device on.""" _LOGGER.debug("Switch: %s status: %s, turning on", self._name, self._state) await self._satel.set_output(self._code, self._device_number, True) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the device off.""" @@ -79,7 +79,7 @@ class SatelIntegraSwitch(SwitchDevice): "Switch name: %s status: %s, turning off", self._name, self._state ) await self._satel.set_output(self._code, self._device_number, False) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self): diff --git a/homeassistant/components/scene/__init__.py b/homeassistant/components/scene/__init__.py index 46b06b93698..f4eee8da836 100644 --- a/homeassistant/components/scene/__init__.py +++ b/homeassistant/components/scene/__init__.py @@ -1,9 +1,12 @@ """Allow users to set and activate scenes.""" +import functools as ft import importlib import logging +from typing import Any, Optional import voluptuous as vol +from homeassistant.components.light import ATTR_TRANSITION from homeassistant.const import CONF_PLATFORM, SERVICE_TURN_ON from homeassistant.core import DOMAIN as HA_DOMAIN from homeassistant.helpers.entity import Entity @@ -62,7 +65,11 @@ async def async_setup(hass, config): await component.async_setup(config) # Ensure Home Assistant platform always loaded. await component.async_setup_platform(HA_DOMAIN, {"platform": HA_DOMAIN, STATES: []}) - component.async_register_entity_service(SERVICE_TURN_ON, {}, "async_activate") + component.async_register_entity_service( + SERVICE_TURN_ON, + {ATTR_TRANSITION: vol.All(vol.Coerce(float), vol.Clamp(min=0, max=6553))}, + "async_activate", + ) return True @@ -81,19 +88,22 @@ class Scene(Entity): """A scene is a group of entities and the states we want them to be.""" @property - def should_poll(self): + def should_poll(self) -> bool: """No polling needed.""" return False @property - def state(self): + def state(self) -> Optional[str]: """Return the state of the scene.""" return STATE - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate scene. Try to get entities into requested state.""" raise NotImplementedError() - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate scene. Try to get entities into requested state.""" - await self.hass.async_add_job(self.activate) + assert self.hass + task = self.hass.async_add_job(ft.partial(self.activate, **kwargs)) + if task: + await task diff --git a/homeassistant/components/scene/manifest.json b/homeassistant/components/scene/manifest.json index 1b0361680f4..3134a310042 100644 --- a/homeassistant/components/scene/manifest.json +++ b/homeassistant/components/scene/manifest.json @@ -2,8 +2,6 @@ "domain": "scene", "name": "Scenes", "documentation": "https://www.home-assistant.io/integrations/scene", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/scene/services.yaml b/homeassistant/components/scene/services.yaml index 0c261ed60b5..29fa11e9367 100644 --- a/homeassistant/components/scene/services.yaml +++ b/homeassistant/components/scene/services.yaml @@ -3,6 +3,11 @@ turn_on: description: Activate a scene. fields: + transition: + description: + Transition duration in seconds it takes to bring devices to the state + defined in the scene. + example: 2.5 entity_id: description: Name(s) of scenes to turn on example: "scene.romantic" @@ -11,8 +16,15 @@ reload: description: Reload the scene configuration apply: - description: Activate a scene. Takes same data as the entities field from a single scene in the config. + description: + Activate a scene. Takes same data as the entities field from a single scene + in the config. fields: + transition: + description: + Transition duration in seconds it takes to bring devices to the state + defined in the scene. + example: 2.5 entities: description: The entities and the state that they need to be. example: diff --git a/homeassistant/components/scene/strings.json b/homeassistant/components/scene/strings.json new file mode 100644 index 00000000000..c92838ea322 --- /dev/null +++ b/homeassistant/components/scene/strings.json @@ -0,0 +1 @@ +{ "title": "Scene" } diff --git a/homeassistant/components/scene/translations/af.json b/homeassistant/components/scene/translations/af.json new file mode 100644 index 00000000000..c200e286608 --- /dev/null +++ b/homeassistant/components/scene/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Toneel" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/ar.json b/homeassistant/components/scene/translations/ar.json new file mode 100644 index 00000000000..c5f684d24ce --- /dev/null +++ b/homeassistant/components/scene/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u0645\u0634\u0647\u062f" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/bg.json b/homeassistant/components/scene/translations/bg.json new file mode 100644 index 00000000000..41f87cddbce --- /dev/null +++ b/homeassistant/components/scene/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0421\u0446\u0435\u043d\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/bs.json b/homeassistant/components/scene/translations/bs.json new file mode 100644 index 00000000000..5f89ee79ab9 --- /dev/null +++ b/homeassistant/components/scene/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Scena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/ca.json b/homeassistant/components/scene/translations/ca.json new file mode 100644 index 00000000000..744d02a54b2 --- /dev/null +++ b/homeassistant/components/scene/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Escenes" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/cs.json b/homeassistant/components/scene/translations/cs.json new file mode 100644 index 00000000000..b0c79f52277 --- /dev/null +++ b/homeassistant/components/scene/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Sc\u00e9na" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/cy.json b/homeassistant/components/scene/translations/cy.json new file mode 100644 index 00000000000..5c3577c5ec0 --- /dev/null +++ b/homeassistant/components/scene/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Golygfa" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/da.json b/homeassistant/components/scene/translations/da.json new file mode 100644 index 00000000000..827c0c81f38 --- /dev/null +++ b/homeassistant/components/scene/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Scene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/de.json b/homeassistant/components/scene/translations/de.json new file mode 100644 index 00000000000..2130b6acd80 --- /dev/null +++ b/homeassistant/components/scene/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Szene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/el.json b/homeassistant/components/scene/translations/el.json new file mode 100644 index 00000000000..8f639975a71 --- /dev/null +++ b/homeassistant/components/scene/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u03a3\u03ba\u03b7\u03bd\u03ae" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/en.json b/homeassistant/components/scene/translations/en.json new file mode 100644 index 00000000000..827c0c81f38 --- /dev/null +++ b/homeassistant/components/scene/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Scene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/es-419.json b/homeassistant/components/scene/translations/es-419.json new file mode 100644 index 00000000000..92aa6caa099 --- /dev/null +++ b/homeassistant/components/scene/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Escena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/es.json b/homeassistant/components/scene/translations/es.json new file mode 100644 index 00000000000..92aa6caa099 --- /dev/null +++ b/homeassistant/components/scene/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Escena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/et.json b/homeassistant/components/scene/translations/et.json new file mode 100644 index 00000000000..8f5f2b4ad54 --- /dev/null +++ b/homeassistant/components/scene/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Stseen" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/eu.json b/homeassistant/components/scene/translations/eu.json new file mode 100644 index 00000000000..cb6365c8bb0 --- /dev/null +++ b/homeassistant/components/scene/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Eszena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/fa.json b/homeassistant/components/scene/translations/fa.json new file mode 100644 index 00000000000..de5c94387a4 --- /dev/null +++ b/homeassistant/components/scene/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "\u0635\u062d\u0646\u0647" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/fi.json b/homeassistant/components/scene/translations/fi.json new file mode 100644 index 00000000000..7ad8bb6b9f2 --- /dev/null +++ b/homeassistant/components/scene/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "Skene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/fr.json b/homeassistant/components/scene/translations/fr.json new file mode 100644 index 00000000000..3f93fa35193 --- /dev/null +++ b/homeassistant/components/scene/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Sc\u00e8ne" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/gsw.json b/homeassistant/components/scene/translations/gsw.json new file mode 100644 index 00000000000..2130b6acd80 --- /dev/null +++ b/homeassistant/components/scene/translations/gsw.json @@ -0,0 +1,3 @@ +{ + "title": "Szene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/he.json b/homeassistant/components/scene/translations/he.json new file mode 100644 index 00000000000..569260601dc --- /dev/null +++ b/homeassistant/components/scene/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05e1\u05e6\u05e0\u05d4" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/hi.json b/homeassistant/components/scene/translations/hi.json new file mode 100644 index 00000000000..daf2ad0558d --- /dev/null +++ b/homeassistant/components/scene/translations/hi.json @@ -0,0 +1,3 @@ +{ + "title": "\u0926\u0943\u0936\u094d\u092f" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/hr.json b/homeassistant/components/scene/translations/hr.json new file mode 100644 index 00000000000..5f89ee79ab9 --- /dev/null +++ b/homeassistant/components/scene/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Scena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/hu.json b/homeassistant/components/scene/translations/hu.json new file mode 100644 index 00000000000..11082f7da45 --- /dev/null +++ b/homeassistant/components/scene/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Jelenet" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/hy.json b/homeassistant/components/scene/translations/hy.json new file mode 100644 index 00000000000..61c147c0657 --- /dev/null +++ b/homeassistant/components/scene/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u054f\u0565\u057d\u0561\u0580\u0561\u0576" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/id.json b/homeassistant/components/scene/translations/id.json new file mode 100644 index 00000000000..65f2adf7325 --- /dev/null +++ b/homeassistant/components/scene/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Adegan" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/is.json b/homeassistant/components/scene/translations/is.json new file mode 100644 index 00000000000..e52751789ed --- /dev/null +++ b/homeassistant/components/scene/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Sena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/it.json b/homeassistant/components/scene/translations/it.json new file mode 100644 index 00000000000..5f89ee79ab9 --- /dev/null +++ b/homeassistant/components/scene/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Scena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/ko.json b/homeassistant/components/scene/translations/ko.json new file mode 100644 index 00000000000..a5e3ad22487 --- /dev/null +++ b/homeassistant/components/scene/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc52c" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/lb.json b/homeassistant/components/scene/translations/lb.json new file mode 100644 index 00000000000..8fdfc4c97f2 --- /dev/null +++ b/homeassistant/components/scene/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Zeen" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/lv.json b/homeassistant/components/scene/translations/lv.json new file mode 100644 index 00000000000..e2d73434c3d --- /dev/null +++ b/homeassistant/components/scene/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Si\u017eets" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/nb.json b/homeassistant/components/scene/translations/nb.json new file mode 100644 index 00000000000..827c0c81f38 --- /dev/null +++ b/homeassistant/components/scene/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Scene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/nl.json b/homeassistant/components/scene/translations/nl.json new file mode 100644 index 00000000000..3f93fa35193 --- /dev/null +++ b/homeassistant/components/scene/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Sc\u00e8ne" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/nn.json b/homeassistant/components/scene/translations/nn.json new file mode 100644 index 00000000000..827c0c81f38 --- /dev/null +++ b/homeassistant/components/scene/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Scene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/no.json b/homeassistant/components/scene/translations/no.json new file mode 100644 index 00000000000..827c0c81f38 --- /dev/null +++ b/homeassistant/components/scene/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Scene" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/pl.json b/homeassistant/components/scene/translations/pl.json new file mode 100644 index 00000000000..5f89ee79ab9 --- /dev/null +++ b/homeassistant/components/scene/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Scena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/pt-BR.json b/homeassistant/components/scene/translations/pt-BR.json new file mode 100644 index 00000000000..372fcc493b7 --- /dev/null +++ b/homeassistant/components/scene/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Cena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/pt.json b/homeassistant/components/scene/translations/pt.json new file mode 100644 index 00000000000..372fcc493b7 --- /dev/null +++ b/homeassistant/components/scene/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Cena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/ro.json b/homeassistant/components/scene/translations/ro.json new file mode 100644 index 00000000000..c9251c3ad26 --- /dev/null +++ b/homeassistant/components/scene/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Scen\u0103" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/ru.json b/homeassistant/components/scene/translations/ru.json new file mode 100644 index 00000000000..41f87cddbce --- /dev/null +++ b/homeassistant/components/scene/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0421\u0446\u0435\u043d\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/sk.json b/homeassistant/components/scene/translations/sk.json new file mode 100644 index 00000000000..b0c79f52277 --- /dev/null +++ b/homeassistant/components/scene/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Sc\u00e9na" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/sl.json b/homeassistant/components/scene/translations/sl.json new file mode 100644 index 00000000000..5f89ee79ab9 --- /dev/null +++ b/homeassistant/components/scene/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Scena" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/sv.json b/homeassistant/components/scene/translations/sv.json new file mode 100644 index 00000000000..15a1f9b1542 --- /dev/null +++ b/homeassistant/components/scene/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Scenario" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/ta.json b/homeassistant/components/scene/translations/ta.json new file mode 100644 index 00000000000..9669feac114 --- /dev/null +++ b/homeassistant/components/scene/translations/ta.json @@ -0,0 +1,3 @@ +{ + "title": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/te.json b/homeassistant/components/scene/translations/te.json new file mode 100644 index 00000000000..ec57d754113 --- /dev/null +++ b/homeassistant/components/scene/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "\u0c26\u0c43\u0c36\u0c4d\u0c2f\u0c02" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/th.json b/homeassistant/components/scene/translations/th.json new file mode 100644 index 00000000000..493d0700ee1 --- /dev/null +++ b/homeassistant/components/scene/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e09\u0e32\u0e01" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/tr.json b/homeassistant/components/scene/translations/tr.json new file mode 100644 index 00000000000..05cedace901 --- /dev/null +++ b/homeassistant/components/scene/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Senaryo" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/uk.json b/homeassistant/components/scene/translations/uk.json new file mode 100644 index 00000000000..41f87cddbce --- /dev/null +++ b/homeassistant/components/scene/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0421\u0446\u0435\u043d\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/vi.json b/homeassistant/components/scene/translations/vi.json new file mode 100644 index 00000000000..74aadbed717 --- /dev/null +++ b/homeassistant/components/scene/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "B\u1ed1i c\u1ea3nh" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/zh-Hans.json b/homeassistant/components/scene/translations/zh-Hans.json new file mode 100644 index 00000000000..07f890d41de --- /dev/null +++ b/homeassistant/components/scene/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u573a\u666f" +} \ No newline at end of file diff --git a/homeassistant/components/scene/translations/zh-Hant.json b/homeassistant/components/scene/translations/zh-Hant.json new file mode 100644 index 00000000000..b05878668ab --- /dev/null +++ b/homeassistant/components/scene/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u5834\u666f" +} \ No newline at end of file diff --git a/homeassistant/components/schluter/climate.py b/homeassistant/components/schluter/climate.py index 99dc5b0d495..d91020c7c2b 100644 --- a/homeassistant/components/schluter/climate.py +++ b/homeassistant/components/schluter/climate.py @@ -7,6 +7,7 @@ import voluptuous as vol from homeassistant.components.climate import ( PLATFORM_SCHEMA, SCAN_INTERVAL, + TEMP_CELSIUS, ClimateDevice, ) from homeassistant.components.climate.const import ( @@ -32,7 +33,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= return session_id = hass.data[DOMAIN][DATA_SCHLUTER_SESSION] api = hass.data[DOMAIN][DATA_SCHLUTER_API] - temp_unit = hass.config.units.temperature_unit async def async_update_data(): try: @@ -58,7 +58,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= await coordinator.async_refresh() async_add_entities( - SchluterThermostat(coordinator, serial_number, temp_unit, api, session_id) + SchluterThermostat(coordinator, serial_number, api, session_id) for serial_number, thermostat in coordinator.data.items() ) @@ -66,9 +66,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= class SchluterThermostat(ClimateDevice): """Representation of a Schluter thermostat.""" - def __init__(self, coordinator, serial_number, temp_unit, api, session_id): + def __init__(self, coordinator, serial_number, api, session_id): """Initialize the thermostat.""" - self._unit = temp_unit self._coordinator = coordinator self._serial_number = serial_number self._api = api @@ -102,8 +101,8 @@ class SchluterThermostat(ClimateDevice): @property def temperature_unit(self): - """Return the unit of measurement.""" - return self._unit + """Schluter API always uses celsius.""" + return TEMP_CELSIUS @property def current_temperature(self): diff --git a/homeassistant/components/schluter/manifest.json b/homeassistant/components/schluter/manifest.json index 1a7cebcf06a..46eb2449e3d 100644 --- a/homeassistant/components/schluter/manifest.json +++ b/homeassistant/components/schluter/manifest.json @@ -3,6 +3,5 @@ "name": "Schluter", "documentation": "https://www.home-assistant.io/integrations/schluter", "requirements": ["py-schluter==0.1.7"], - "dependencies": [], "codeowners": ["@prairieapps"] } diff --git a/homeassistant/components/scrape/manifest.json b/homeassistant/components/scrape/manifest.json index 90352bbd108..7a76512f01d 100644 --- a/homeassistant/components/scrape/manifest.json +++ b/homeassistant/components/scrape/manifest.json @@ -2,8 +2,7 @@ "domain": "scrape", "name": "Scrape", "documentation": "https://www.home-assistant.io/integrations/scrape", - "requirements": ["beautifulsoup4==4.8.2"], - "dependencies": [], + "requirements": ["beautifulsoup4==4.9.0"], "after_dependencies": ["rest"], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/script/__init__.py b/homeassistant/components/script/__init__.py index 9384c58db81..6efd4c849aa 100644 --- a/homeassistant/components/script/__init__.py +++ b/homeassistant/components/script/__init__.py @@ -243,7 +243,7 @@ class ScriptEntity(ToggleEntity): self.icon = icon self.entity_id = ENTITY_ID_FORMAT.format(object_id) self.script = Script( - hass, sequence, name, self.async_update_ha_state, logger=_LOGGER + hass, sequence, name, self.async_write_ha_state, logger=_LOGGER ) @property diff --git a/homeassistant/components/script/manifest.json b/homeassistant/components/script/manifest.json index ce9899f021c..32acfcbb93b 100644 --- a/homeassistant/components/script/manifest.json +++ b/homeassistant/components/script/manifest.json @@ -2,8 +2,6 @@ "domain": "script", "name": "Scripts", "documentation": "https://www.home-assistant.io/integrations/script", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/script/services.yaml b/homeassistant/components/script/services.yaml index 736b0ec71c3..1347f760b54 100644 --- a/homeassistant/components/script/services.yaml +++ b/homeassistant/components/script/services.yaml @@ -8,18 +8,18 @@ turn_on: fields: entity_id: description: Name(s) of script to be turned on. - example: 'script.arrive_home' + example: "script.arrive_home" turn_off: description: Turn off script fields: entity_id: description: Name(s) of script to be turned off. - example: 'script.arrive_home' + example: "script.arrive_home" toggle: description: Toggle script fields: entity_id: description: Name(s) of script to be toggled. - example: 'script.arrive_home' + example: "script.arrive_home" diff --git a/homeassistant/components/script/strings.json b/homeassistant/components/script/strings.json new file mode 100644 index 00000000000..2d39b6ac633 --- /dev/null +++ b/homeassistant/components/script/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Script", + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } + } +} diff --git a/homeassistant/components/script/translations/af.json b/homeassistant/components/script/translations/af.json new file mode 100644 index 00000000000..f0055ddab62 --- /dev/null +++ b/homeassistant/components/script/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Skrip" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ar.json b/homeassistant/components/script/translations/ar.json new file mode 100644 index 00000000000..99f0578c770 --- /dev/null +++ b/homeassistant/components/script/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0646\u0635 \u0622\u0644\u064a" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/bg.json b/homeassistant/components/script/translations/bg.json new file mode 100644 index 00000000000..d3a53c6c720 --- /dev/null +++ b/homeassistant/components/script/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u0421\u043a\u0440\u0438\u043f\u0442" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/bs.json b/homeassistant/components/script/translations/bs.json new file mode 100644 index 00000000000..4e081f98eaf --- /dev/null +++ b/homeassistant/components/script/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Skripta" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ca.json b/homeassistant/components/script/translations/ca.json new file mode 100644 index 00000000000..af31164cf4c --- /dev/null +++ b/homeassistant/components/script/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desactivat", + "on": "Activat" + } + }, + "title": "Programes (scripts)" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/cs.json b/homeassistant/components/script/translations/cs.json new file mode 100644 index 00000000000..b75830afdce --- /dev/null +++ b/homeassistant/components/script/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/cy.json b/homeassistant/components/script/translations/cy.json new file mode 100644 index 00000000000..fc0795b56f8 --- /dev/null +++ b/homeassistant/components/script/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Sgript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/da.json b/homeassistant/components/script/translations/da.json new file mode 100644 index 00000000000..1f5d162a541 --- /dev/null +++ b/homeassistant/components/script/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/de.json b/homeassistant/components/script/translations/de.json new file mode 100644 index 00000000000..8a3343cc6cb --- /dev/null +++ b/homeassistant/components/script/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/el.json b/homeassistant/components/script/translations/el.json new file mode 100644 index 00000000000..9fbc773c9f5 --- /dev/null +++ b/homeassistant/components/script/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc" + } + }, + "title": "\u0394\u03ad\u03c3\u03bc\u03b7 \u03b5\u03bd\u03b5\u03c1\u03b3\u03b5\u03b9\u03ce\u03bd" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/en.json b/homeassistant/components/script/translations/en.json new file mode 100644 index 00000000000..ba95cd44721 --- /dev/null +++ b/homeassistant/components/script/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/es-419.json b/homeassistant/components/script/translations/es-419.json new file mode 100644 index 00000000000..11d2b521c4c --- /dev/null +++ b/homeassistant/components/script/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/es.json b/homeassistant/components/script/translations/es.json new file mode 100644 index 00000000000..11d2b521c4c --- /dev/null +++ b/homeassistant/components/script/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/et.json b/homeassistant/components/script/translations/et.json new file mode 100644 index 00000000000..afa6e6130a4 --- /dev/null +++ b/homeassistant/components/script/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/eu.json b/homeassistant/components/script/translations/eu.json new file mode 100644 index 00000000000..1350c7d23a2 --- /dev/null +++ b/homeassistant/components/script/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/fa.json b/homeassistant/components/script/translations/fa.json new file mode 100644 index 00000000000..065f9f42546 --- /dev/null +++ b/homeassistant/components/script/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644", + "on": "\u0641\u0639\u0627\u0644" + } + }, + "title": "\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/fi.json b/homeassistant/components/script/translations/fi.json new file mode 100644 index 00000000000..1a510fc7801 --- /dev/null +++ b/homeassistant/components/script/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Skripti" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/fr.json b/homeassistant/components/script/translations/fr.json new file mode 100644 index 00000000000..910192a5f37 --- /dev/null +++ b/homeassistant/components/script/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Inactif", + "on": "Actif" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/gsw.json b/homeassistant/components/script/translations/gsw.json new file mode 100644 index 00000000000..26afe6133d3 --- /dev/null +++ b/homeassistant/components/script/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/he.json b/homeassistant/components/script/translations/he.json new file mode 100644 index 00000000000..f003c2e1210 --- /dev/null +++ b/homeassistant/components/script/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05ea\u05b7\u05e1\u05e8\u05b4\u05d9\u05d8" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/hi.json b/homeassistant/components/script/translations/hi.json new file mode 100644 index 00000000000..722fdd5a25d --- /dev/null +++ b/homeassistant/components/script/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/hr.json b/homeassistant/components/script/translations/hr.json new file mode 100644 index 00000000000..4e081f98eaf --- /dev/null +++ b/homeassistant/components/script/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Skripta" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/hu.json b/homeassistant/components/script/translations/hu.json new file mode 100644 index 00000000000..781e16c61a3 --- /dev/null +++ b/homeassistant/components/script/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Szkript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/hy.json b/homeassistant/components/script/translations/hy.json new file mode 100644 index 00000000000..d2aaa9a982e --- /dev/null +++ b/homeassistant/components/script/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0544\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u054d\u0581\u0565\u0576\u0561\u0580" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/id.json b/homeassistant/components/script/translations/id.json new file mode 100644 index 00000000000..8b23be94861 --- /dev/null +++ b/homeassistant/components/script/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Skrip" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/is.json b/homeassistant/components/script/translations/is.json new file mode 100644 index 00000000000..6c8135fe5b2 --- /dev/null +++ b/homeassistant/components/script/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u00d3virkt", + "on": "Virkt" + } + }, + "title": "Skrifta" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/it.json b/homeassistant/components/script/translations/it.json new file mode 100644 index 00000000000..0258e17bf7f --- /dev/null +++ b/homeassistant/components/script/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ja.json b/homeassistant/components/script/translations/ja.json new file mode 100644 index 00000000000..a300062e3db --- /dev/null +++ b/homeassistant/components/script/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + }, + "title": "\u30b9\u30af\u30ea\u30d7\u30c8" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ko.json b/homeassistant/components/script/translations/ko.json new file mode 100644 index 00000000000..fb6d8e5014f --- /dev/null +++ b/homeassistant/components/script/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc2a4\ud06c\ub9bd\ud2b8" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/lb.json b/homeassistant/components/script/translations/lb.json new file mode 100644 index 00000000000..786cf9adb0f --- /dev/null +++ b/homeassistant/components/script/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/lt.json b/homeassistant/components/script/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/script/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/lv.json b/homeassistant/components/script/translations/lv.json new file mode 100644 index 00000000000..6c991677f9e --- /dev/null +++ b/homeassistant/components/script/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + } + }, + "title": "Skripts" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/nb.json b/homeassistant/components/script/translations/nb.json new file mode 100644 index 00000000000..a7a2fd68a32 --- /dev/null +++ b/homeassistant/components/script/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/nl.json b/homeassistant/components/script/translations/nl.json new file mode 100644 index 00000000000..fddf969a4a8 --- /dev/null +++ b/homeassistant/components/script/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/nn.json b/homeassistant/components/script/translations/nn.json new file mode 100644 index 00000000000..a7a2fd68a32 --- /dev/null +++ b/homeassistant/components/script/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/no.json b/homeassistant/components/script/translations/no.json new file mode 100644 index 00000000000..caeaf751b81 --- /dev/null +++ b/homeassistant/components/script/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/pl.json b/homeassistant/components/script/translations/pl.json new file mode 100644 index 00000000000..8982527645e --- /dev/null +++ b/homeassistant/components/script/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Skrypt" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/pt-BR.json b/homeassistant/components/script/translations/pt-BR.json new file mode 100644 index 00000000000..0a4ee8f4915 --- /dev/null +++ b/homeassistant/components/script/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/pt.json b/homeassistant/components/script/translations/pt.json new file mode 100644 index 00000000000..c722843c998 --- /dev/null +++ b/homeassistant/components/script/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desativado", + "on": "Ligado" + } + }, + "title": "Script" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ro.json b/homeassistant/components/script/translations/ro.json new file mode 100644 index 00000000000..52f6159d65c --- /dev/null +++ b/homeassistant/components/script/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Scenariu" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ru.json b/homeassistant/components/script/translations/ru.json new file mode 100644 index 00000000000..97dff767c61 --- /dev/null +++ b/homeassistant/components/script/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/sk.json b/homeassistant/components/script/translations/sk.json new file mode 100644 index 00000000000..049d7d9b2a8 --- /dev/null +++ b/homeassistant/components/script/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Vypnut\u00fd", + "on": "Zapnut\u00fd" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/sl.json b/homeassistant/components/script/translations/sl.json new file mode 100644 index 00000000000..cd38e49dcb5 --- /dev/null +++ b/homeassistant/components/script/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Skripta" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/sv.json b/homeassistant/components/script/translations/sv.json new file mode 100644 index 00000000000..a7a2fd68a32 --- /dev/null +++ b/homeassistant/components/script/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Skript" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/ta.json b/homeassistant/components/script/translations/ta.json new file mode 100644 index 00000000000..25fae5b290b --- /dev/null +++ b/homeassistant/components/script/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd" + } + }, + "title": "\u0bb8\u0bcd\u0b95\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0b9f\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/te.json b/homeassistant/components/script/translations/te.json new file mode 100644 index 00000000000..beb7a14450c --- /dev/null +++ b/homeassistant/components/script/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c38\u0c4d\u0c15\u0c4d\u0c30\u0c3f\u0c2a\u0c4d\u0c1f\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/th.json b/homeassistant/components/script/translations/th.json new file mode 100644 index 00000000000..26eb9e4577e --- /dev/null +++ b/homeassistant/components/script/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e2a\u0e04\u0e23\u0e34\u0e1b\u0e15\u0e4c" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/tr.json b/homeassistant/components/script/translations/tr.json new file mode 100644 index 00000000000..4730c0e4c18 --- /dev/null +++ b/homeassistant/components/script/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Senaryo" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/uk.json b/homeassistant/components/script/translations/uk.json new file mode 100644 index 00000000000..bfff0258c66 --- /dev/null +++ b/homeassistant/components/script/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u0421\u0446\u0435\u043d\u0430\u0440\u0456\u0439" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/vi.json b/homeassistant/components/script/translations/vi.json new file mode 100644 index 00000000000..4ef0b77ca14 --- /dev/null +++ b/homeassistant/components/script/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "K\u1ecbch b\u1ea3n" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/zh-Hans.json b/homeassistant/components/script/translations/zh-Hans.json new file mode 100644 index 00000000000..f69275ee344 --- /dev/null +++ b/homeassistant/components/script/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u811a\u672c" +} \ No newline at end of file diff --git a/homeassistant/components/script/translations/zh-Hant.json b/homeassistant/components/script/translations/zh-Hant.json new file mode 100644 index 00000000000..4840b6f8ab0 --- /dev/null +++ b/homeassistant/components/script/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u5553" + } + }, + "title": "\u8173\u672c" +} \ No newline at end of file diff --git a/homeassistant/components/scsgate/__init__.py b/homeassistant/components/scsgate/__init__.py index 21e3608a51b..71a439fe6f9 100644 --- a/homeassistant/components/scsgate/__init__.py +++ b/homeassistant/components/scsgate/__init__.py @@ -14,14 +14,10 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -ATTR_STATE = "state" - CONF_SCS_ID = "scs_id" DOMAIN = "scsgate" -SCSGATE = None - CONFIG_SCHEMA = vol.Schema( {DOMAIN: vol.Schema({vol.Required(CONF_DEVICE): cv.string})}, extra=vol.ALLOW_EXTRA ) @@ -34,11 +30,11 @@ SCSGATE_SCHEMA = vol.Schema( def setup(hass, config): """Set up the SCSGate component.""" device = config[DOMAIN][CONF_DEVICE] - global SCSGATE + scsgate = None try: - SCSGATE = SCSGate(device=device, logger=_LOGGER) - SCSGATE.start() + scsgate = SCSGate(device=device, logger=_LOGGER) + scsgate.start() except Exception as exception: # pylint: disable=broad-except _LOGGER.error("Cannot setup SCSGate component: %s", exception) return False @@ -46,9 +42,10 @@ def setup(hass, config): def stop_monitor(event): """Stop the SCSGate.""" _LOGGER.info("Stopping SCSGate monitor thread") - SCSGATE.stop() + scsgate.stop() hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_monitor) + hass.data[DOMAIN] = scsgate return True diff --git a/homeassistant/components/scsgate/cover.py b/homeassistant/components/scsgate/cover.py index 9d034c146ee..f9ef2e12730 100644 --- a/homeassistant/components/scsgate/cover.py +++ b/homeassistant/components/scsgate/cover.py @@ -8,15 +8,16 @@ from scsgate.tasks import ( ) import voluptuous as vol -from homeassistant.components import scsgate from homeassistant.components.cover import PLATFORM_SCHEMA, CoverDevice from homeassistant.const import CONF_DEVICES, CONF_NAME import homeassistant.helpers.config_validation as cv +from . import CONF_SCS_ID, DOMAIN, SCSGATE_SCHEMA + _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(scsgate.SCSGATE_SCHEMA)} + {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(SCSGATE_SCHEMA)} ) @@ -25,19 +26,22 @@ def setup_platform(hass, config, add_entities, discovery_info=None): devices = config.get(CONF_DEVICES) covers = [] logger = logging.getLogger(__name__) + scsgate = hass.data[DOMAIN] if devices: for _, entity_info in devices.items(): - if entity_info[scsgate.CONF_SCS_ID] in scsgate.SCSGATE.devices: + if entity_info[CONF_SCS_ID] in scsgate.devices: continue name = entity_info[CONF_NAME] - scs_id = entity_info[scsgate.CONF_SCS_ID] + scs_id = entity_info[CONF_SCS_ID] logger.info("Adding %s scsgate.cover", name) - cover = SCSGateCover(name=name, scs_id=scs_id, logger=logger) - scsgate.SCSGATE.add_device(cover) + cover = SCSGateCover( + name=name, scs_id=scs_id, logger=logger, scsgate=scsgate + ) + scsgate.add_device(cover) covers.append(cover) add_entities(covers) @@ -46,11 +50,12 @@ def setup_platform(hass, config, add_entities, discovery_info=None): class SCSGateCover(CoverDevice): """Representation of SCSGate cover.""" - def __init__(self, scs_id, name, logger): + def __init__(self, scs_id, name, logger, scsgate): """Initialize the cover.""" self._scs_id = scs_id self._name = name self._logger = logger + self._scsgate = scsgate @property def scs_id(self): @@ -74,15 +79,15 @@ class SCSGateCover(CoverDevice): def open_cover(self, **kwargs): """Move the cover.""" - scsgate.SCSGATE.append_task(RaiseRollerShutterTask(target=self._scs_id)) + self._scsgate.append_task(RaiseRollerShutterTask(target=self._scs_id)) def close_cover(self, **kwargs): """Move the cover down.""" - scsgate.SCSGATE.append_task(LowerRollerShutterTask(target=self._scs_id)) + self._scsgate.append_task(LowerRollerShutterTask(target=self._scs_id)) def stop_cover(self, **kwargs): """Stop the cover.""" - scsgate.SCSGATE.append_task(HaltRollerShutterTask(target=self._scs_id)) + self._scsgate.append_task(HaltRollerShutterTask(target=self._scs_id)) def process_event(self, message): """Handle a SCSGate message related with this cover.""" diff --git a/homeassistant/components/scsgate/light.py b/homeassistant/components/scsgate/light.py index a04dfdc7e7a..8caa824d5fb 100644 --- a/homeassistant/components/scsgate/light.py +++ b/homeassistant/components/scsgate/light.py @@ -4,15 +4,16 @@ import logging from scsgate.tasks import ToggleStatusTask import voluptuous as vol -from homeassistant.components import scsgate from homeassistant.components.light import PLATFORM_SCHEMA, Light from homeassistant.const import ATTR_ENTITY_ID, ATTR_STATE, CONF_DEVICES, CONF_NAME import homeassistant.helpers.config_validation as cv +from . import CONF_SCS_ID, DOMAIN, SCSGATE_SCHEMA + _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(scsgate.SCSGATE_SCHEMA)} + {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(SCSGATE_SCHEMA)} ) @@ -21,33 +22,37 @@ def setup_platform(hass, config, add_entities, discovery_info=None): devices = config.get(CONF_DEVICES) lights = [] logger = logging.getLogger(__name__) + scsgate = hass.data[DOMAIN] if devices: for _, entity_info in devices.items(): - if entity_info[scsgate.CONF_SCS_ID] in scsgate.SCSGATE.devices: + if entity_info[CONF_SCS_ID] in scsgate.devices: continue name = entity_info[CONF_NAME] - scs_id = entity_info[scsgate.CONF_SCS_ID] + scs_id = entity_info[CONF_SCS_ID] logger.info("Adding %s scsgate.light", name) - light = SCSGateLight(name=name, scs_id=scs_id, logger=logger) + light = SCSGateLight( + name=name, scs_id=scs_id, logger=logger, scsgate=scsgate + ) lights.append(light) add_entities(lights) - scsgate.SCSGATE.add_devices_to_register(lights) + scsgate.add_devices_to_register(lights) class SCSGateLight(Light): """Representation of a SCSGate light.""" - def __init__(self, scs_id, name, logger): + def __init__(self, scs_id, name, logger, scsgate): """Initialize the light.""" self._name = name self._scs_id = scs_id self._toggled = False self._logger = logger + self._scsgate = scsgate @property def scs_id(self): @@ -72,7 +77,7 @@ class SCSGateLight(Light): def turn_on(self, **kwargs): """Turn the device on.""" - scsgate.SCSGATE.append_task(ToggleStatusTask(target=self._scs_id, toggled=True)) + self._scsgate.append_task(ToggleStatusTask(target=self._scs_id, toggled=True)) self._toggled = True self.schedule_update_ha_state() @@ -80,9 +85,7 @@ class SCSGateLight(Light): def turn_off(self, **kwargs): """Turn the device off.""" - scsgate.SCSGATE.append_task( - ToggleStatusTask(target=self._scs_id, toggled=False) - ) + self._scsgate.append_task(ToggleStatusTask(target=self._scs_id, toggled=False)) self._toggled = False self.schedule_update_ha_state() diff --git a/homeassistant/components/scsgate/manifest.json b/homeassistant/components/scsgate/manifest.json index a25dc2f8803..88b55bd6b33 100644 --- a/homeassistant/components/scsgate/manifest.json +++ b/homeassistant/components/scsgate/manifest.json @@ -3,6 +3,5 @@ "name": "SCSGate", "documentation": "https://www.home-assistant.io/integrations/scsgate", "requirements": ["scsgate==0.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/scsgate/switch.py b/homeassistant/components/scsgate/switch.py index b2043d3a4c3..d5c85a5a84f 100644 --- a/homeassistant/components/scsgate/switch.py +++ b/homeassistant/components/scsgate/switch.py @@ -5,85 +5,91 @@ from scsgate.messages import ScenarioTriggeredMessage, StateMessage from scsgate.tasks import ToggleStatusTask import voluptuous as vol -from homeassistant.components import scsgate from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice from homeassistant.const import ATTR_ENTITY_ID, ATTR_STATE, CONF_DEVICES, CONF_NAME import homeassistant.helpers.config_validation as cv +from . import CONF_SCS_ID, DOMAIN, SCSGATE_SCHEMA + ATTR_SCENARIO_ID = "scenario_id" CONF_TRADITIONAL = "traditional" CONF_SCENARIO = "scenario" -CONF_SCS_ID = "scs_id" - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(scsgate.SCSGATE_SCHEMA)} + {vol.Required(CONF_DEVICES): cv.schema_with_slug_keys(SCSGATE_SCHEMA)} ) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the SCSGate switches.""" logger = logging.getLogger(__name__) + scsgate = hass.data[DOMAIN] _setup_traditional_switches( - logger=logger, config=config, add_entities_callback=add_entities + logger=logger, + config=config, + scsgate=scsgate, + add_entities_callback=add_entities, ) - _setup_scenario_switches(logger=logger, config=config, hass=hass) + _setup_scenario_switches(logger=logger, config=config, scsgate=scsgate, hass=hass) -def _setup_traditional_switches(logger, config, add_entities_callback): +def _setup_traditional_switches(logger, config, scsgate, add_entities_callback): """Add traditional SCSGate switches.""" traditional = config.get(CONF_TRADITIONAL) switches = [] if traditional: for _, entity_info in traditional.items(): - if entity_info[scsgate.CONF_SCS_ID] in scsgate.SCSGATE.devices: + if entity_info[CONF_SCS_ID] in scsgate.devices: continue name = entity_info[CONF_NAME] - scs_id = entity_info[scsgate.CONF_SCS_ID] + scs_id = entity_info[CONF_SCS_ID] logger.info("Adding %s scsgate.traditional_switch", name) - switch = SCSGateSwitch(name=name, scs_id=scs_id, logger=logger) + switch = SCSGateSwitch( + name=name, scs_id=scs_id, logger=logger, scsgate=scsgate + ) switches.append(switch) add_entities_callback(switches) - scsgate.SCSGATE.add_devices_to_register(switches) + scsgate.add_devices_to_register(switches) -def _setup_scenario_switches(logger, config, hass): +def _setup_scenario_switches(logger, config, scsgate, hass): """Add only SCSGate scenario switches.""" scenario = config.get(CONF_SCENARIO) if scenario: for _, entity_info in scenario.items(): - if entity_info[scsgate.CONF_SCS_ID] in scsgate.SCSGATE.devices: + if entity_info[CONF_SCS_ID] in scsgate.devices: continue name = entity_info[CONF_NAME] - scs_id = entity_info[scsgate.CONF_SCS_ID] + scs_id = entity_info[CONF_SCS_ID] logger.info("Adding %s scsgate.scenario_switch", name) switch = SCSGateScenarioSwitch( name=name, scs_id=scs_id, logger=logger, hass=hass ) - scsgate.SCSGATE.add_device(switch) + scsgate.add_device(switch) class SCSGateSwitch(SwitchDevice): """Representation of a SCSGate switch.""" - def __init__(self, scs_id, name, logger): + def __init__(self, scs_id, name, logger, scsgate): """Initialize the switch.""" self._name = name self._scs_id = scs_id self._toggled = False self._logger = logger + self._scsgate = scsgate @property def scs_id(self): @@ -108,7 +114,7 @@ class SCSGateSwitch(SwitchDevice): def turn_on(self, **kwargs): """Turn the device on.""" - scsgate.SCSGATE.append_task(ToggleStatusTask(target=self._scs_id, toggled=True)) + self._scsgate.append_task(ToggleStatusTask(target=self._scs_id, toggled=True)) self._toggled = True self.schedule_update_ha_state() @@ -116,9 +122,7 @@ class SCSGateSwitch(SwitchDevice): def turn_off(self, **kwargs): """Turn the device off.""" - scsgate.SCSGATE.append_task( - ToggleStatusTask(target=self._scs_id, toggled=False) - ) + self._scsgate.append_task(ToggleStatusTask(target=self._scs_id, toggled=False)) self._toggled = False self.schedule_update_ha_state() diff --git a/homeassistant/components/search/manifest.json b/homeassistant/components/search/manifest.json index 581a702f514..273a517d111 100644 --- a/homeassistant/components/search/manifest.json +++ b/homeassistant/components/search/manifest.json @@ -2,10 +2,6 @@ "domain": "search", "name": "Search", "documentation": "https://www.home-assistant.io/integrations/search", - "requirements": [], - "ssdp": [], - "zeroconf": [], - "homekit": {}, "dependencies": ["websocket_api"], "after_dependencies": ["scene", "group", "automation", "script"], "codeowners": ["@home-assistant/core"] diff --git a/homeassistant/components/season/.translations/sensor.bg.json b/homeassistant/components/season/.translations/sensor.bg.json deleted file mode 100644 index e3865ca42e5..00000000000 --- a/homeassistant/components/season/.translations/sensor.bg.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u0415\u0441\u0435\u043d", - "spring": "\u041f\u0440\u043e\u043b\u0435\u0442", - "summer": "\u041b\u044f\u0442\u043e", - "winter": "\u0417\u0438\u043c\u0430" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.ca.json b/homeassistant/components/season/.translations/sensor.ca.json deleted file mode 100644 index 9bce187ec65..00000000000 --- a/homeassistant/components/season/.translations/sensor.ca.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Tardor", - "spring": "Primavera", - "summer": "Estiu", - "winter": "Hivern" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.cs.json b/homeassistant/components/season/.translations/sensor.cs.json deleted file mode 100644 index e2d7e7919be..00000000000 --- a/homeassistant/components/season/.translations/sensor.cs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Podzim", - "spring": "Jaro", - "summer": "L\u00e9to", - "winter": "Zima" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.da.json b/homeassistant/components/season/.translations/sensor.da.json deleted file mode 100644 index 9cded2f9c0f..00000000000 --- a/homeassistant/components/season/.translations/sensor.da.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Efter\u00e5r", - "spring": "For\u00e5r", - "summer": "Sommer", - "winter": "Vinter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.de.json b/homeassistant/components/season/.translations/sensor.de.json deleted file mode 100644 index 50d702340b9..00000000000 --- a/homeassistant/components/season/.translations/sensor.de.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Herbst", - "spring": "Fr\u00fchling", - "summer": "Sommer", - "winter": "Winter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.en.json b/homeassistant/components/season/.translations/sensor.en.json deleted file mode 100644 index b42100215ca..00000000000 --- a/homeassistant/components/season/.translations/sensor.en.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Autumn", - "spring": "Spring", - "summer": "Summer", - "winter": "Winter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.es-419.json b/homeassistant/components/season/.translations/sensor.es-419.json deleted file mode 100644 index 09ad22740cd..00000000000 --- a/homeassistant/components/season/.translations/sensor.es-419.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "state": { - "autumn": "Oto\u00f1o", - "spring": "Primavera", - "summer": "Verano" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.es.json b/homeassistant/components/season/.translations/sensor.es.json deleted file mode 100644 index 65df6a58b10..00000000000 --- a/homeassistant/components/season/.translations/sensor.es.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Oto\u00f1o", - "spring": "Primavera", - "summer": "Verano", - "winter": "Invierno" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.fr.json b/homeassistant/components/season/.translations/sensor.fr.json deleted file mode 100644 index ec9f9657428..00000000000 --- a/homeassistant/components/season/.translations/sensor.fr.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Automne", - "spring": "Printemps", - "summer": "\u00c9t\u00e9", - "winter": "Hiver" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.hu.json b/homeassistant/components/season/.translations/sensor.hu.json deleted file mode 100644 index 63596b09784..00000000000 --- a/homeassistant/components/season/.translations/sensor.hu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u0150sz", - "spring": "Tavasz", - "summer": "Ny\u00e1r", - "winter": "T\u00e9l" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.is.json b/homeassistant/components/season/.translations/sensor.is.json deleted file mode 100644 index 2d48745436b..00000000000 --- a/homeassistant/components/season/.translations/sensor.is.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Haust", - "spring": "Vor", - "summer": "Sumar", - "winter": "Vetur" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.it.json b/homeassistant/components/season/.translations/sensor.it.json deleted file mode 100644 index d9138f6b16e..00000000000 --- a/homeassistant/components/season/.translations/sensor.it.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Autunno", - "spring": "Primavera", - "summer": "Estate", - "winter": "Inverno" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.ko.json b/homeassistant/components/season/.translations/sensor.ko.json deleted file mode 100644 index f2bf0a7bae5..00000000000 --- a/homeassistant/components/season/.translations/sensor.ko.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\uac00\uc744", - "spring": "\ubd04", - "summer": "\uc5ec\ub984", - "winter": "\uaca8\uc6b8" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.lb.json b/homeassistant/components/season/.translations/sensor.lb.json deleted file mode 100644 index f33afde7a07..00000000000 --- a/homeassistant/components/season/.translations/sensor.lb.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Hierscht", - "spring": "Fr\u00e9ijoer", - "summer": "Summer", - "winter": "Wanter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.nl.json b/homeassistant/components/season/.translations/sensor.nl.json deleted file mode 100644 index 6054a8e2be5..00000000000 --- a/homeassistant/components/season/.translations/sensor.nl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Herfst", - "spring": "Lente", - "summer": "Zomer", - "winter": "Winter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.nn.json b/homeassistant/components/season/.translations/sensor.nn.json deleted file mode 100644 index 3e8f626c172..00000000000 --- a/homeassistant/components/season/.translations/sensor.nn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "state": { - "summer": "Sommar", - "winter": "Vinter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.no.json b/homeassistant/components/season/.translations/sensor.no.json deleted file mode 100644 index 9d520dae6a5..00000000000 --- a/homeassistant/components/season/.translations/sensor.no.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "H\u00f8st", - "spring": "V\u00e5r", - "summer": "Sommer", - "winter": "Vinter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.pl.json b/homeassistant/components/season/.translations/sensor.pl.json deleted file mode 100644 index 9b313e511c9..00000000000 --- a/homeassistant/components/season/.translations/sensor.pl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "jesie\u0144", - "spring": "wiosna", - "summer": "lato", - "winter": "zima" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.pt-BR.json b/homeassistant/components/season/.translations/sensor.pt-BR.json deleted file mode 100644 index fde45ad6c8e..00000000000 --- a/homeassistant/components/season/.translations/sensor.pt-BR.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Outono", - "spring": "Primavera", - "summer": "Ver\u00e3o", - "winter": "Inverno" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.pt.json b/homeassistant/components/season/.translations/sensor.pt.json deleted file mode 100644 index fde45ad6c8e..00000000000 --- a/homeassistant/components/season/.translations/sensor.pt.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Outono", - "spring": "Primavera", - "summer": "Ver\u00e3o", - "winter": "Inverno" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.ru.json b/homeassistant/components/season/.translations/sensor.ru.json deleted file mode 100644 index 2b04886b72d..00000000000 --- a/homeassistant/components/season/.translations/sensor.ru.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u041e\u0441\u0435\u043d\u044c", - "spring": "\u0412\u0435\u0441\u043d\u0430", - "summer": "\u041b\u0435\u0442\u043e", - "winter": "\u0417\u0438\u043c\u0430" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.sl.json b/homeassistant/components/season/.translations/sensor.sl.json deleted file mode 100644 index f715a3ec13a..00000000000 --- a/homeassistant/components/season/.translations/sensor.sl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "Jesen", - "spring": "Pomlad", - "summer": "Poletje", - "winter": "Zima" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.sv.json b/homeassistant/components/season/.translations/sensor.sv.json deleted file mode 100644 index 02332d76906..00000000000 --- a/homeassistant/components/season/.translations/sensor.sv.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "H\u00f6st", - "spring": "V\u00e5r", - "summer": "Sommar", - "winter": "Vinter" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.th.json b/homeassistant/components/season/.translations/sensor.th.json deleted file mode 100644 index 09799730389..00000000000 --- a/homeassistant/components/season/.translations/sensor.th.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u0e24\u0e14\u0e39\u0e43\u0e1a\u0e44\u0e21\u0e49\u0e23\u0e48\u0e27\u0e07", - "spring": "\u0e24\u0e14\u0e39\u0e43\u0e1a\u0e44\u0e21\u0e49\u0e1c\u0e25\u0e34", - "summer": "\u0e24\u0e14\u0e39\u0e23\u0e49\u0e2d\u0e19", - "winter": "\u0e24\u0e14\u0e39\u0e2b\u0e19\u0e32\u0e27" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.uk.json b/homeassistant/components/season/.translations/sensor.uk.json deleted file mode 100644 index 766e59a43da..00000000000 --- a/homeassistant/components/season/.translations/sensor.uk.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u041e\u0441\u0456\u043d\u044c", - "spring": "\u0412\u0435\u0441\u043d\u0430", - "summer": "\u041b\u0456\u0442\u043e", - "winter": "\u0417\u0438\u043c\u0430" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.zh-Hans.json b/homeassistant/components/season/.translations/sensor.zh-Hans.json deleted file mode 100644 index e441b1aa8ac..00000000000 --- a/homeassistant/components/season/.translations/sensor.zh-Hans.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u79cb", - "spring": "\u6625", - "summer": "\u590f", - "winter": "\u51ac" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.zh-Hant.json b/homeassistant/components/season/.translations/sensor.zh-Hant.json deleted file mode 100644 index 78801f4b1df..00000000000 --- a/homeassistant/components/season/.translations/sensor.zh-Hant.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": { - "autumn": "\u79cb\u5b63", - "spring": "\u6625\u5b63", - "summer": "\u590f\u5b63", - "winter": "\u51ac\u5b63" - } -} \ No newline at end of file diff --git a/homeassistant/components/season/manifest.json b/homeassistant/components/season/manifest.json index ca4edaf76a9..e30c5684d2d 100644 --- a/homeassistant/components/season/manifest.json +++ b/homeassistant/components/season/manifest.json @@ -3,7 +3,6 @@ "name": "Season", "documentation": "https://www.home-assistant.io/integrations/season", "requirements": ["ephem==3.7.7.0"], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/season/sensor.py b/homeassistant/components/season/sensor.py index 8c237c1da19..6e072f7377e 100644 --- a/homeassistant/components/season/sensor.py +++ b/homeassistant/components/season/sensor.py @@ -131,6 +131,11 @@ class Season(Entity): """Return the current season.""" return self.season + @property + def device_class(self): + """Return the device class.""" + return "season__season" + @property def icon(self): """Icon to use in the frontend, if any.""" diff --git a/homeassistant/components/season/strings.sensor.json b/homeassistant/components/season/strings.sensor.json index 63136320d74..0407d99dee4 100644 --- a/homeassistant/components/season/strings.sensor.json +++ b/homeassistant/components/season/strings.sensor.json @@ -1,8 +1,10 @@ { "state": { - "spring": "Spring", - "summer": "Summer", - "autumn": "Autumn", - "winter": "Winter" + "season__season": { + "spring": "Spring", + "summer": "Summer", + "autumn": "Autumn", + "winter": "Winter" + } } } diff --git a/homeassistant/components/season/.translations/sensor.af.json b/homeassistant/components/season/translations/sensor.af.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.af.json rename to homeassistant/components/season/translations/sensor.af.json diff --git a/homeassistant/components/season/translations/sensor.bg.json b/homeassistant/components/season/translations/sensor.bg.json new file mode 100644 index 00000000000..9b2254c2421 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.bg.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "\u0415\u0441\u0435\u043d", + "spring": "\u041f\u0440\u043e\u043b\u0435\u0442", + "summer": "\u041b\u044f\u0442\u043e", + "winter": "\u0417\u0438\u043c\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.ca.json b/homeassistant/components/season/translations/sensor.ca.json new file mode 100644 index 00000000000..939c360f2ef --- /dev/null +++ b/homeassistant/components/season/translations/sensor.ca.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Tardor", + "spring": "Primavera", + "summer": "Estiu", + "winter": "Hivern" + }, + "season__season__": { + "autumn": "Tardor", + "spring": "Primavera", + "summer": "Estiu", + "winter": "Hivern" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.cs.json b/homeassistant/components/season/translations/sensor.cs.json new file mode 100644 index 00000000000..a13e4c1b3c3 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.cs.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Podzim", + "spring": "Jaro", + "summer": "L\u00e9to", + "winter": "Zima" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.cy.json b/homeassistant/components/season/translations/sensor.cy.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.cy.json rename to homeassistant/components/season/translations/sensor.cy.json diff --git a/homeassistant/components/season/translations/sensor.da.json b/homeassistant/components/season/translations/sensor.da.json new file mode 100644 index 00000000000..7a577b90ce1 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.da.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Efter\u00e5r", + "spring": "For\u00e5r", + "summer": "Sommer", + "winter": "Vinter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.de.json b/homeassistant/components/season/translations/sensor.de.json new file mode 100644 index 00000000000..5449e1b553b --- /dev/null +++ b/homeassistant/components/season/translations/sensor.de.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Herbst", + "spring": "Fr\u00fchling", + "summer": "Sommer", + "winter": "Winter" + }, + "season__season__": { + "autumn": "Herbst", + "spring": "Fr\u00fchling", + "summer": "Sommer", + "winter": "Winter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.en.json b/homeassistant/components/season/translations/sensor.en.json new file mode 100644 index 00000000000..54e0ad8e98f --- /dev/null +++ b/homeassistant/components/season/translations/sensor.en.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Autumn", + "spring": "Spring", + "summer": "Summer", + "winter": "Winter" + }, + "season__season__": { + "autumn": "Autumn", + "spring": "Spring", + "summer": "Summer", + "winter": "Winter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.es-419.json b/homeassistant/components/season/translations/sensor.es-419.json new file mode 100644 index 00000000000..c0c3927357b --- /dev/null +++ b/homeassistant/components/season/translations/sensor.es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "season__season__": { + "autumn": "Oto\u00f1o", + "spring": "Primavera", + "summer": "Verano" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.es.json b/homeassistant/components/season/translations/sensor.es.json new file mode 100644 index 00000000000..6837038ff3c --- /dev/null +++ b/homeassistant/components/season/translations/sensor.es.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Oto\u00f1o", + "spring": "Primavera", + "summer": "Verano", + "winter": "Invierno" + }, + "season__season__": { + "autumn": "Oto\u00f1o", + "spring": "Primavera", + "summer": "Verano", + "winter": "Invierno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.et.json b/homeassistant/components/season/translations/sensor.et.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.et.json rename to homeassistant/components/season/translations/sensor.et.json diff --git a/homeassistant/components/season/.translations/sensor.eu.json b/homeassistant/components/season/translations/sensor.eu.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.eu.json rename to homeassistant/components/season/translations/sensor.eu.json diff --git a/homeassistant/components/season/.translations/sensor.fi.json b/homeassistant/components/season/translations/sensor.fi.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.fi.json rename to homeassistant/components/season/translations/sensor.fi.json diff --git a/homeassistant/components/season/translations/sensor.fr.json b/homeassistant/components/season/translations/sensor.fr.json new file mode 100644 index 00000000000..cf2e8155dfe --- /dev/null +++ b/homeassistant/components/season/translations/sensor.fr.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Automne", + "spring": "Printemps", + "summer": "\u00c9t\u00e9", + "winter": "Hiver" + }, + "season__season__": { + "autumn": "Automne", + "spring": "Printemps", + "summer": "\u00c9t\u00e9", + "winter": "Hiver" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.he.json b/homeassistant/components/season/translations/sensor.he.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.he.json rename to homeassistant/components/season/translations/sensor.he.json diff --git a/homeassistant/components/season/translations/sensor.hu.json b/homeassistant/components/season/translations/sensor.hu.json new file mode 100644 index 00000000000..66a9972f3bd --- /dev/null +++ b/homeassistant/components/season/translations/sensor.hu.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "\u0150sz", + "spring": "Tavasz", + "summer": "Ny\u00e1r", + "winter": "T\u00e9l" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.id.json b/homeassistant/components/season/translations/sensor.id.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.id.json rename to homeassistant/components/season/translations/sensor.id.json diff --git a/homeassistant/components/season/translations/sensor.is.json b/homeassistant/components/season/translations/sensor.is.json new file mode 100644 index 00000000000..7e36b70e033 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.is.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Haust", + "spring": "Vor", + "summer": "Sumar", + "winter": "Vetur" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.it.json b/homeassistant/components/season/translations/sensor.it.json new file mode 100644 index 00000000000..e584633325d --- /dev/null +++ b/homeassistant/components/season/translations/sensor.it.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Autunno", + "spring": "Primavera", + "summer": "Estate", + "winter": "Inverno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.ja.json b/homeassistant/components/season/translations/sensor.ja.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.ja.json rename to homeassistant/components/season/translations/sensor.ja.json diff --git a/homeassistant/components/season/translations/sensor.ko.json b/homeassistant/components/season/translations/sensor.ko.json new file mode 100644 index 00000000000..2af78145755 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.ko.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "\uac00\uc744", + "spring": "\ubd04", + "summer": "\uc5ec\ub984", + "winter": "\uaca8\uc6b8" + }, + "season__season__": { + "autumn": "\uac00\uc744", + "spring": "\ubd04", + "summer": "\uc5ec\ub984", + "winter": "\uaca8\uc6b8" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.lb.json b/homeassistant/components/season/translations/sensor.lb.json new file mode 100644 index 00000000000..7c4191c01a5 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.lb.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Hierscht", + "spring": "Fr\u00e9ijoer", + "summer": "Summer", + "winter": "Wanter" + }, + "season__season__": { + "autumn": "Hierscht", + "spring": "Fr\u00e9ijoer", + "summer": "Summer", + "winter": "Wanter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.lv.json b/homeassistant/components/season/translations/sensor.lv.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.lv.json rename to homeassistant/components/season/translations/sensor.lv.json diff --git a/homeassistant/components/season/translations/sensor.nl.json b/homeassistant/components/season/translations/sensor.nl.json new file mode 100644 index 00000000000..6391dc4d73d --- /dev/null +++ b/homeassistant/components/season/translations/sensor.nl.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "Herfst", + "spring": "Lente", + "summer": "Zomer", + "winter": "Winter" + }, + "season__season__": { + "autumn": "Herfst", + "spring": "Lente", + "summer": "Zomer", + "winter": "Winter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.nn.json b/homeassistant/components/season/translations/sensor.nn.json new file mode 100644 index 00000000000..e38a0d894a8 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.nn.json @@ -0,0 +1,8 @@ +{ + "state": { + "season__season__": { + "summer": "Sommar", + "winter": "Vinter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.no.json b/homeassistant/components/season/translations/sensor.no.json new file mode 100644 index 00000000000..e1714b47e9e --- /dev/null +++ b/homeassistant/components/season/translations/sensor.no.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "H\u00f8st", + "spring": "V\u00e5r", + "summer": "Sommer", + "winter": "Vinter" + }, + "season__season__": { + "autumn": "H\u00f8st", + "spring": "V\u00e5r", + "summer": "Sommer", + "winter": "Vinter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.pl.json b/homeassistant/components/season/translations/sensor.pl.json new file mode 100644 index 00000000000..487b2489739 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.pl.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "jesie\u0144", + "spring": "wiosna", + "summer": "lato", + "winter": "zima" + }, + "season__season__": { + "autumn": "jesie\u0144", + "spring": "wiosna", + "summer": "lato", + "winter": "zima" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.pt-BR.json b/homeassistant/components/season/translations/sensor.pt-BR.json new file mode 100644 index 00000000000..4c81e432350 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.pt-BR.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Outono", + "spring": "Primavera", + "summer": "Ver\u00e3o", + "winter": "Inverno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.pt.json b/homeassistant/components/season/translations/sensor.pt.json new file mode 100644 index 00000000000..4c81e432350 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.pt.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Outono", + "spring": "Primavera", + "summer": "Ver\u00e3o", + "winter": "Inverno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.ro.json b/homeassistant/components/season/translations/sensor.ro.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.ro.json rename to homeassistant/components/season/translations/sensor.ro.json diff --git a/homeassistant/components/season/translations/sensor.ru.json b/homeassistant/components/season/translations/sensor.ru.json new file mode 100644 index 00000000000..68c842aaf59 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.ru.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "\u041e\u0441\u0435\u043d\u044c", + "spring": "\u0412\u0435\u0441\u043d\u0430", + "summer": "\u041b\u0435\u0442\u043e", + "winter": "\u0417\u0438\u043c\u0430" + }, + "season__season__": { + "autumn": "\u041e\u0441\u0435\u043d\u044c", + "spring": "\u0412\u0435\u0441\u043d\u0430", + "summer": "\u041b\u0435\u0442\u043e", + "winter": "\u0417\u0438\u043c\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.sl.json b/homeassistant/components/season/translations/sensor.sl.json new file mode 100644 index 00000000000..6be24690d37 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.sl.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "Jesen", + "spring": "Pomlad", + "summer": "Poletje", + "winter": "Zima" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.sv.json b/homeassistant/components/season/translations/sensor.sv.json new file mode 100644 index 00000000000..59875084928 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.sv.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "H\u00f6st", + "spring": "V\u00e5r", + "summer": "Sommar", + "winter": "Vinter" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.th.json b/homeassistant/components/season/translations/sensor.th.json new file mode 100644 index 00000000000..41532c2682f --- /dev/null +++ b/homeassistant/components/season/translations/sensor.th.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "\u0e24\u0e14\u0e39\u0e43\u0e1a\u0e44\u0e21\u0e49\u0e23\u0e48\u0e27\u0e07", + "spring": "\u0e24\u0e14\u0e39\u0e43\u0e1a\u0e44\u0e21\u0e49\u0e1c\u0e25\u0e34", + "summer": "\u0e24\u0e14\u0e39\u0e23\u0e49\u0e2d\u0e19", + "winter": "\u0e24\u0e14\u0e39\u0e2b\u0e19\u0e32\u0e27" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.uk.json b/homeassistant/components/season/translations/sensor.uk.json new file mode 100644 index 00000000000..2c694e287b1 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.uk.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "\u041e\u0441\u0456\u043d\u044c", + "spring": "\u0412\u0435\u0441\u043d\u0430", + "summer": "\u041b\u0456\u0442\u043e", + "winter": "\u0417\u0438\u043c\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/.translations/sensor.vi.json b/homeassistant/components/season/translations/sensor.vi.json similarity index 100% rename from homeassistant/components/season/.translations/sensor.vi.json rename to homeassistant/components/season/translations/sensor.vi.json diff --git a/homeassistant/components/season/translations/sensor.zh-Hans.json b/homeassistant/components/season/translations/sensor.zh-Hans.json new file mode 100644 index 00000000000..2f524d4f910 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.zh-Hans.json @@ -0,0 +1,10 @@ +{ + "state": { + "season__season__": { + "autumn": "\u79cb", + "spring": "\u6625", + "summer": "\u590f", + "winter": "\u51ac" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.zh-Hant.json b/homeassistant/components/season/translations/sensor.zh-Hant.json new file mode 100644 index 00000000000..d7d46a91825 --- /dev/null +++ b/homeassistant/components/season/translations/sensor.zh-Hant.json @@ -0,0 +1,16 @@ +{ + "state": { + "season__season": { + "autumn": "\u79cb\u5b63", + "spring": "\u6625\u5b63", + "summer": "\u590f\u5b63", + "winter": "\u51ac\u5b63" + }, + "season__season__": { + "autumn": "\u79cb\u5b63", + "spring": "\u6625\u5b63", + "summer": "\u590f\u5b63", + "winter": "\u51ac\u5b63" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sendgrid/manifest.json b/homeassistant/components/sendgrid/manifest.json index 63a511809d8..52717c55124 100644 --- a/homeassistant/components/sendgrid/manifest.json +++ b/homeassistant/components/sendgrid/manifest.json @@ -2,7 +2,6 @@ "domain": "sendgrid", "name": "SendGrid", "documentation": "https://www.home-assistant.io/integrations/sendgrid", - "requirements": ["sendgrid==6.1.3"], - "dependencies": [], + "requirements": ["sendgrid==6.2.1"], "codeowners": [] } diff --git a/homeassistant/components/sense/.translations/ca.json b/homeassistant/components/sense/.translations/ca.json deleted file mode 100644 index b1a49974cbd..00000000000 --- a/homeassistant/components/sense/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "data": { - "email": "Correu electr\u00f2nic", - "password": "Contrasenya" - }, - "title": "Connexi\u00f3 amb Sense Energy Monitor" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/de.json b/homeassistant/components/sense/.translations/de.json deleted file mode 100644 index 229b26e56bd..00000000000 --- a/homeassistant/components/sense/.translations/de.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", - "invalid_auth": "Ung\u00fcltige Authentifizierung", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "data": { - "email": "E-Mail-Adresse", - "password": "Passwort" - }, - "title": "Stellen Sie eine Verbindung zu Ihrem Sense Energy Monitor her" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/en.json b/homeassistant/components/sense/.translations/en.json deleted file mode 100644 index 32e6f48e153..00000000000 --- a/homeassistant/components/sense/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "cannot_connect": "Failed to connect, please try again", - "invalid_auth": "Invalid authentication", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "data": { - "email": "Email Address", - "password": "Password" - }, - "title": "Connect to your Sense Energy Monitor" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/es.json b/homeassistant/components/sense/.translations/es.json deleted file mode 100644 index 07078670ace..00000000000 --- a/homeassistant/components/sense/.translations/es.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", - "invalid_auth": "Autentificaci\u00f3n inv\u00e1lida", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "data": { - "email": "Direcci\u00f3n de correo electr\u00f3nico", - "password": "Contrase\u00f1a" - }, - "title": "Conectar a tu Sense Energy Monitor" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/fr.json b/homeassistant/components/sense/.translations/fr.json deleted file mode 100644 index 999ac2a0ac7..00000000000 --- a/homeassistant/components/sense/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "invalid_auth": "Authentification invalide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "data": { - "email": "Adresse e-mail", - "password": "Mot de passe" - }, - "title": "Connectez-vous \u00e0 votre moniteur d'\u00e9nergie Sense" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/it.json b/homeassistant/components/sense/.translations/it.json deleted file mode 100644 index 8bcbbb835a1..00000000000 --- a/homeassistant/components/sense/.translations/it.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" - }, - "error": { - "cannot_connect": "Impossibile connettersi, si prega di riprovare.", - "invalid_auth": "Autenticazione non valida", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "data": { - "email": "Indirizzo E-Mail", - "password": "Password" - }, - "title": "Connettiti al tuo Sense Energy Monitor" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/ko.json b/homeassistant/components/sense/.translations/ko.json deleted file mode 100644 index 6041992e56d..00000000000 --- a/homeassistant/components/sense/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "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", - "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "email": "\uc774\uba54\uc77c \uc8fc\uc18c", - "password": "\ube44\ubc00\ubc88\ud638" - }, - "title": "Sense Energy Monitor \uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/lb.json b/homeassistant/components/sense/.translations/lb.json deleted file mode 100644 index 74e7615cf5c..00000000000 --- a/homeassistant/components/sense/.translations/lb.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatiouns", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "data": { - "email": "E-Mail Adress", - "password": "Passwuert" - }, - "title": "Verbann d\u00e4in Sense Energie Monitor" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/no.json b/homeassistant/components/sense/.translations/no.json deleted file mode 100644 index d3fe4028e0f..00000000000 --- a/homeassistant/components/sense/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "invalid_auth": "Ugyldig godkjenning", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "data": { - "email": "E-postadresse", - "password": "Passord" - }, - "title": "Koble til din Sense Energi Monitor" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/pl.json b/homeassistant/components/sense/.translations/pl.json deleted file mode 100644 index 0e0e7f5da66..00000000000 --- a/homeassistant/components/sense/.translations/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." - }, - "error": { - "invalid_auth": "Niepoprawne uwierzytelnienie.", - "unknown": "Niespodziewany b\u0142\u0105d." - }, - "step": { - "user": { - "data": { - "email": "Adres e-mail", - "password": "Has\u0142o" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/ru.json b/homeassistant/components/sense/.translations/ru.json deleted file mode 100644 index 6a609a05f6d..00000000000 --- a/homeassistant/components/sense/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c" - }, - "title": "Sense Energy Monitor" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/sl.json b/homeassistant/components/sense/.translations/sl.json deleted file mode 100644 index 9f7568ef249..00000000000 --- a/homeassistant/components/sense/.translations/sl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana" - }, - "error": { - "cannot_connect": "Povezava ni uspela, poskusite znova", - "invalid_auth": "Neveljavna avtentikacija", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "data": { - "email": "E-po\u0161tni naslov", - "password": "Geslo" - }, - "title": "Pove\u017eite se s svojim Sense Energy monitor-jem" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/zh-Hant.json b/homeassistant/components/sense/.translations/zh-Hant.json deleted file mode 100644 index 1d911576454..00000000000 --- a/homeassistant/components/sense/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "email": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740", - "password": "\u5bc6\u78bc" - }, - "title": "\u9023\u7dda\u81f3 Sense \u80fd\u6e90\u76e3\u63a7" - } - }, - "title": "Sense" - } -} \ No newline at end of file diff --git a/homeassistant/components/sense/binary_sensor.py b/homeassistant/components/sense/binary_sensor.py index af1b2f34b4a..384bc3d074f 100644 --- a/homeassistant/components/sense/binary_sensor.py +++ b/homeassistant/components/sense/binary_sensor.py @@ -2,12 +2,13 @@ import logging from homeassistant.components.binary_sensor import BinarySensorDevice -from homeassistant.const import DEVICE_CLASS_POWER +from homeassistant.const import ATTR_ATTRIBUTION, DEVICE_CLASS_POWER from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_registry import async_get_registry from .const import ( + ATTRIBUTION, DOMAIN, MDI_ICONS, SENSE_DATA, @@ -99,6 +100,11 @@ class SenseDevice(BinarySensorDevice): """Return the old not so unique id of the binary sensor.""" return self._id + @property + def device_state_attributes(self): + """Return the state attributes.""" + return {ATTR_ATTRIBUTION: ATTRIBUTION} + @property def icon(self): """Return the icon of the binary sensor.""" diff --git a/homeassistant/components/sense/const.py b/homeassistant/components/sense/const.py index cd1d2bfcf4a..07dacc288b5 100644 --- a/homeassistant/components/sense/const.py +++ b/homeassistant/components/sense/const.py @@ -12,11 +12,13 @@ SENSE_DATA = "sense_data" SENSE_DEVICE_UPDATE = "sense_devices_update" SENSE_DEVICES_DATA = "sense_devices_data" SENSE_DISCOVERED_DEVICES_DATA = "sense_discovered_devices" -SENSE_TRENDS_COORDINATOR = "sense_trends_coorindator" +SENSE_TRENDS_COORDINATOR = "sense_trends_coordinator" ACTIVE_NAME = "Energy" ACTIVE_TYPE = "active" +ATTRIBUTION = "Data provided by Sense.com" + CONSUMPTION_NAME = "Usage" CONSUMPTION_ID = "usage" PRODUCTION_NAME = "Production" diff --git a/homeassistant/components/sense/manifest.json b/homeassistant/components/sense/manifest.json index c07e1e4f5c3..d0bed826734 100644 --- a/homeassistant/components/sense/manifest.json +++ b/homeassistant/components/sense/manifest.json @@ -2,12 +2,7 @@ "domain": "sense", "name": "Sense", "documentation": "https://www.home-assistant.io/integrations/sense", - "requirements": [ - "sense_energy==0.7.1" - ], - "dependencies": [], - "codeowners": [ - "@kbickar" - ], + "requirements": ["sense_energy==0.7.1"], + "codeowners": ["@kbickar"], "config_flow": true } diff --git a/homeassistant/components/sense/sensor.py b/homeassistant/components/sense/sensor.py index 0c6bfd7ee1f..8ccb2ad12ff 100644 --- a/homeassistant/components/sense/sensor.py +++ b/homeassistant/components/sense/sensor.py @@ -1,7 +1,12 @@ """Support for monitoring a Sense energy sensor.""" import logging -from homeassistant.const import DEVICE_CLASS_POWER, ENERGY_KILO_WATT_HOUR, POWER_WATT +from homeassistant.const import ( + ATTR_ATTRIBUTION, + DEVICE_CLASS_POWER, + ENERGY_KILO_WATT_HOUR, + POWER_WATT, +) from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity @@ -9,6 +14,7 @@ from homeassistant.helpers.entity import Entity from .const import ( ACTIVE_NAME, ACTIVE_TYPE, + ATTRIBUTION, CONSUMPTION_ID, CONSUMPTION_NAME, DOMAIN, @@ -156,6 +162,11 @@ class SenseActiveSensor(Entity): """Return the unit of measurement of this entity, if any.""" return POWER_WATT + @property + def device_state_attributes(self): + """Return the state attributes.""" + return {ATTR_ATTRIBUTION: ATTRIBUTION} + @property def icon(self): """Icon to use in the frontend, if any.""" @@ -232,6 +243,11 @@ class SenseTrendsSensor(Entity): """Return the unit of measurement of this entity, if any.""" return self._unit_of_measurement + @property + def device_state_attributes(self): + """Return the state attributes.""" + return {ATTR_ATTRIBUTION: ATTRIBUTION} + @property def icon(self): """Icon to use in the frontend, if any.""" @@ -309,6 +325,11 @@ class SenseEnergyDevice(Entity): """Return the unit of measurement of this entity.""" return POWER_WATT + @property + def device_state_attributes(self): + """Return the state attributes.""" + return {ATTR_ATTRIBUTION: ATTRIBUTION} + @property def device_class(self): """Return the device class of the power sensor.""" diff --git a/homeassistant/components/sense/strings.json b/homeassistant/components/sense/strings.json index d3af47b5378..6c90fdbaab8 100644 --- a/homeassistant/components/sense/strings.json +++ b/homeassistant/components/sense/strings.json @@ -1,13 +1,9 @@ { "config": { - "title": "Sense", "step": { "user": { "title": "Connect to your Sense Energy Monitor", - "data": { - "email": "Email Address", - "password": "Password" - } + "data": { "email": "Email Address", "password": "Password" } } }, "error": { @@ -15,8 +11,6 @@ "invalid_auth": "Invalid authentication", "unknown": "Unexpected error" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } } } diff --git a/homeassistant/components/sense/translations/ca.json b/homeassistant/components/sense/translations/ca.json new file mode 100644 index 00000000000..4b1035607d6 --- /dev/null +++ b/homeassistant/components/sense/translations/ca.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "email": "Correu electr\u00f2nic", + "password": "Contrasenya" + }, + "title": "Connexi\u00f3 amb Sense Energy Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/da.json b/homeassistant/components/sense/translations/da.json similarity index 100% rename from homeassistant/components/sense/.translations/da.json rename to homeassistant/components/sense/translations/da.json diff --git a/homeassistant/components/sense/translations/de.json b/homeassistant/components/sense/translations/de.json new file mode 100644 index 00000000000..de9e6877f25 --- /dev/null +++ b/homeassistant/components/sense/translations/de.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "email": "E-Mail-Adresse", + "password": "Passwort" + }, + "title": "Stellen Sie eine Verbindung zu Ihrem Sense Energy Monitor her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/en.json b/homeassistant/components/sense/translations/en.json new file mode 100644 index 00000000000..a5915ae2ced --- /dev/null +++ b/homeassistant/components/sense/translations/en.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "email": "Email Address", + "password": "Password" + }, + "title": "Connect to your Sense Energy Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/es.json b/homeassistant/components/sense/translations/es.json new file mode 100644 index 00000000000..f80a5da1d44 --- /dev/null +++ b/homeassistant/components/sense/translations/es.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se ha podido conectar, por favor, int\u00e9ntalo de nuevo.", + "invalid_auth": "Autentificaci\u00f3n inv\u00e1lida", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "email": "Direcci\u00f3n de correo electr\u00f3nico", + "password": "Contrase\u00f1a" + }, + "title": "Conectar a tu Sense Energy Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/fr.json b/homeassistant/components/sense/translations/fr.json new file mode 100644 index 00000000000..11759880108 --- /dev/null +++ b/homeassistant/components/sense/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "invalid_auth": "Authentification invalide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "email": "Adresse e-mail", + "password": "Mot de passe" + }, + "title": "Connectez-vous \u00e0 votre moniteur d'\u00e9nergie Sense" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/it.json b/homeassistant/components/sense/translations/it.json new file mode 100644 index 00000000000..2320eef1a9b --- /dev/null +++ b/homeassistant/components/sense/translations/it.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare.", + "invalid_auth": "Autenticazione non valida", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "email": "Indirizzo E-Mail", + "password": "Password" + }, + "title": "Connettiti al tuo Sense Energy Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/ko.json b/homeassistant/components/sense/translations/ko.json new file mode 100644 index 00000000000..154094ae971 --- /dev/null +++ b/homeassistant/components/sense/translations/ko.json @@ -0,0 +1,21 @@ +{ + "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", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "email": "\uc774\uba54\uc77c \uc8fc\uc18c", + "password": "\ube44\ubc00\ubc88\ud638" + }, + "title": "Sense Energy Monitor \uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/lb.json b/homeassistant/components/sense/translations/lb.json new file mode 100644 index 00000000000..3627eb72dab --- /dev/null +++ b/homeassistant/components/sense/translations/lb.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9iert w.e.g. nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatiouns", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "data": { + "email": "E-Mail Adress", + "password": "Passwuert" + }, + "title": "Verbann d\u00e4in Sense Energie Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/.translations/lv.json b/homeassistant/components/sense/translations/lv.json similarity index 100% rename from homeassistant/components/sense/.translations/lv.json rename to homeassistant/components/sense/translations/lv.json diff --git a/homeassistant/components/sense/translations/no.json b/homeassistant/components/sense/translations/no.json new file mode 100644 index 00000000000..fdddc6de82d --- /dev/null +++ b/homeassistant/components/sense/translations/no.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "email": "E-postadresse", + "password": "Passord" + }, + "title": "Koble til din Sense Energi Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/pl.json b/homeassistant/components/sense/translations/pl.json new file mode 100644 index 00000000000..6c54984b7cd --- /dev/null +++ b/homeassistant/components/sense/translations/pl.json @@ -0,0 +1,21 @@ +{ + "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.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "email": "Adres e-mail", + "password": "Has\u0142o" + }, + "title": "Po\u0142\u0105czenie z monitorem energii Sense" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/pt.json b/homeassistant/components/sense/translations/pt.json new file mode 100644 index 00000000000..b8a454fbaba --- /dev/null +++ b/homeassistant/components/sense/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/ru.json b/homeassistant/components/sense/translations/ru.json new file mode 100644 index 00000000000..163af6cb512 --- /dev/null +++ b/homeassistant/components/sense/translations/ru.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c" + }, + "title": "Sense Energy Monitor" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/sl.json b/homeassistant/components/sense/translations/sl.json new file mode 100644 index 00000000000..8720f80a2c5 --- /dev/null +++ b/homeassistant/components/sense/translations/sl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "email": "E-po\u0161tni naslov", + "password": "Geslo" + }, + "title": "Pove\u017eite se s svojim Sense Energy monitor-jem" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sense/translations/zh-Hant.json b/homeassistant/components/sense/translations/zh-Hant.json new file mode 100644 index 00000000000..474634692e4 --- /dev/null +++ b/homeassistant/components/sense/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "email": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740", + "password": "\u5bc6\u78bc" + }, + "title": "\u9023\u7dda\u81f3 Sense \u80fd\u6e90\u76e3\u63a7" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sensehat/manifest.json b/homeassistant/components/sensehat/manifest.json index a56c1c57765..3ce37884cd0 100644 --- a/homeassistant/components/sensehat/manifest.json +++ b/homeassistant/components/sensehat/manifest.json @@ -3,6 +3,5 @@ "name": "Sense HAT", "documentation": "https://www.home-assistant.io/integrations/sensehat", "requirements": ["sense-hat==2.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sensibo/manifest.json b/homeassistant/components/sensibo/manifest.json index bcc89e76a69..9d2e3e9e187 100644 --- a/homeassistant/components/sensibo/manifest.json +++ b/homeassistant/components/sensibo/manifest.json @@ -3,6 +3,5 @@ "name": "Sensibo", "documentation": "https://www.home-assistant.io/integrations/sensibo", "requirements": ["pysensibo==1.0.3"], - "dependencies": [], "codeowners": ["@andrey-git"] } diff --git a/homeassistant/components/sensibo/services.yaml b/homeassistant/components/sensibo/services.yaml index d2e5e39c7d8..f981ef7fd32 100644 --- a/homeassistant/components/sensibo/services.yaml +++ b/homeassistant/components/sensibo/services.yaml @@ -3,7 +3,7 @@ assume_state: fields: entity_id: description: Name(s) of entities to change. - example: 'climate.kitchen' + example: "climate.kitchen" state: description: State to set. - example: 'idle' + example: "idle" diff --git a/homeassistant/components/sensor/.translations/bg.json b/homeassistant/components/sensor/.translations/bg.json deleted file mode 100644 index fec70803486..00000000000 --- a/homeassistant/components/sensor/.translations/bg.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "\u0422\u0435\u043a\u0443\u0449\u043e \u043d\u0438\u0432\u043e \u043d\u0430 \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u043d\u0430 {entity_name}", - "is_humidity": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}", - "is_illuminance": "\u0422\u0435\u043a\u0443\u0449\u0430 \u043e\u0441\u0432\u0435\u0442\u0435\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}", - "is_power": "\u0422\u0435\u043a\u0443\u0449\u0430 \u043c\u043e\u0449\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}", - "is_pressure": "\u0422\u0435\u043a\u0443\u0449\u043e \u043d\u0430\u043b\u044f\u0433\u0430\u043d\u0435 \u043d\u0430 {entity_name}", - "is_signal_strength": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u0438\u043b\u0430 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 {entity_name}", - "is_temperature": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430 {entity_name}", - "is_timestamp": "\u0422\u0435\u043a\u0443\u0449\u043e \u0432\u0440\u0435\u043c\u0435 \u043d\u0430 {entity_name}", - "is_value": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}" - }, - "trigger_type": { - "battery_level": "{entity_name} \u043d\u0438\u0432\u043e\u0442\u043e \u043d\u0430 \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u044f", - "humidity": "{entity_name} \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0442\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "illuminance": "{entity_name} \u043e\u0441\u0432\u0435\u0442\u0435\u043d\u043e\u0441\u0442\u0442\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "power": "\u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "pressure": "\u043d\u0430\u043b\u044f\u0433\u0430\u043d\u0435\u0442\u043e \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "signal_strength": "\u0441\u0438\u043b\u0430\u0442\u0430 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "temperature": "\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "timestamp": "\u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", - "value": "\u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/ca.json b/homeassistant/components/sensor/.translations/ca.json deleted file mode 100644 index 94d95e7ddf8..00000000000 --- a/homeassistant/components/sensor/.translations/ca.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Nivell de bateria de {entity_name}", - "is_humidity": "Humitat de {entity_name}", - "is_illuminance": "Il\u00b7luminaci\u00f3 de {entity_name}", - "is_power": "Pot\u00e8ncia de {entity_name}", - "is_pressure": "Pressi\u00f3 de {entity_name}", - "is_signal_strength": "For\u00e7a del senyal de {entity_name}", - "is_temperature": "Temperatura de {entity_name}", - "is_timestamp": "Marca de temps de {entity_name}", - "is_value": "Valor de {entity_name}" - }, - "trigger_type": { - "battery_level": "Nivell de bateria de {entity_name}", - "humidity": "Humitat de {entity_name}", - "illuminance": "Il\u00b7luminaci\u00f3 de {entity_name}", - "power": "Pot\u00e8ncia de {entity_name}", - "pressure": "Pressi\u00f3 de {entity_name}", - "signal_strength": "For\u00e7a del senyal de {entity_name}", - "temperature": "Temperatura de {entity_name}", - "timestamp": "Marca de temps de {entity_name}", - "value": "Valor de {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/cs.json b/homeassistant/components/sensor/.translations/cs.json deleted file mode 100644 index 1b2dbad1a4c..00000000000 --- a/homeassistant/components/sensor/.translations/cs.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Aktu\u00e1ln\u00ed \u00farove\u0148 nabit\u00ed baterie {entity_name}", - "is_humidity": "Aktu\u00e1ln\u00ed vlhkost {entity_name}", - "is_illuminance": "Aktu\u00e1ln\u00ed osv\u011btlen\u00ed {entity_name}", - "is_power": "Aktu\u00e1ln\u00ed v\u00fdkon {entity_name}", - "is_pressure": "Aktu\u00e1ln\u00ed tlak {entity_name}", - "is_signal_strength": "Aktu\u00e1ln\u00ed s\u00edla sign\u00e1lu {entity_name}", - "is_temperature": "Aktu\u00e1ln\u00ed teplota {entity_name}", - "is_timestamp": "Aktu\u00e1ln\u00ed \u010dasov\u00e9 raz\u00edtko {entity_name}", - "is_value": "Aktu\u00e1ln\u00ed hodnota {entity_name}" - }, - "trigger_type": { - "battery_level": "\u00farove\u0148 baterie {entity_name} se zm\u011bn\u00ed", - "humidity": "vlhkost {entity_name} se zm\u011bn\u00ed", - "illuminance": "osv\u011btlen\u00ed {entity_name} se zm\u011bn\u00ed", - "power": "el. v\u00fdkon {entity_name} se zm\u011bn\u00ed", - "pressure": "tlak {entity_name} se zm\u011bn\u00ed", - "signal_strength": "s\u00edla sign\u00e1lu {entity_name} se zm\u011bn\u00ed", - "temperature": "teplota {entity_name} se zm\u011bn\u00ed", - "timestamp": "\u010dasov\u00e9 raz\u00edtko {entity_name} se zm\u011bn\u00ed", - "value": "hodnota {entity_name} se zm\u011bn\u00ed" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/da.json b/homeassistant/components/sensor/.translations/da.json deleted file mode 100644 index 3febed8ac09..00000000000 --- a/homeassistant/components/sensor/.translations/da.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Aktuelt {entity_name}-batteriniveau", - "is_humidity": "Aktuel {entity_name}-luftfugtighed", - "is_illuminance": "Aktuel {entity_name}-lysstyrke", - "is_power": "Aktuel {entity_name}-str\u00f8m", - "is_pressure": "Aktuelt {entity_name}-lufttryk", - "is_signal_strength": "Aktuel {entity_name}-signalstyrke", - "is_temperature": "Aktuel {entity_name}-temperatur", - "is_timestamp": "Aktuel {entity_name}-tidsstempel", - "is_value": "Aktuel {entity_name}-v\u00e6rdi" - }, - "trigger_type": { - "battery_level": "{entity_name} batteriniveau \u00e6ndres", - "humidity": "{entity_name} luftfugtighed \u00e6ndres", - "illuminance": "{entity_name} lysstyrke \u00e6ndres", - "power": "{entity_name} str\u00f8m \u00e6ndres", - "pressure": "{entity_name} lufttryk \u00e6ndres", - "signal_strength": "{entity_name} signalstyrke \u00e6ndres", - "temperature": "{entity_name} temperatur \u00e6ndres", - "timestamp": "{entity_name} tidsstempel \u00e6ndres", - "value": "{entity_name} v\u00e6rdi \u00e6ndres" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/de.json b/homeassistant/components/sensor/.translations/de.json deleted file mode 100644 index 0680bab7b48..00000000000 --- a/homeassistant/components/sensor/.translations/de.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "{entity_name} Batteriestand", - "is_humidity": "{entity_name} Feuchtigkeit", - "is_illuminance": "Aktuelle {entity_name} Helligkeit", - "is_power": "Aktuelle {entity_name} Leistung", - "is_pressure": "{entity_name} Druck", - "is_signal_strength": "Aktuelle {entity_name} Signalst\u00e4rke", - "is_temperature": "Aktuelle {entity_name} Temperatur", - "is_timestamp": "Aktueller Zeitstempel von {entity_name}", - "is_value": "Aktueller {entity_name} Wert" - }, - "trigger_type": { - "battery_level": "{entity_name} Batteriestatus\u00e4nderungen", - "humidity": "{entity_name} Feuchtigkeits\u00e4nderungen", - "illuminance": "{entity_name} Helligkeits\u00e4nderungen", - "power": "{entity_name} Leistungs\u00e4nderungen", - "pressure": "{entity_name} Druck\u00e4nderungen", - "signal_strength": "{entity_name} Signalst\u00e4rke\u00e4nderungen", - "temperature": "{entity_name} Temperatur\u00e4nderungen", - "timestamp": "{entity_name} Zeitstempel\u00e4nderungen", - "value": "{entity_name} Wert\u00e4nderungen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/en.json b/homeassistant/components/sensor/.translations/en.json deleted file mode 100644 index 07411b885b8..00000000000 --- a/homeassistant/components/sensor/.translations/en.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Current {entity_name} battery level", - "is_humidity": "Current {entity_name} humidity", - "is_illuminance": "Current {entity_name} illuminance", - "is_power": "Current {entity_name} power", - "is_pressure": "Current {entity_name} pressure", - "is_signal_strength": "Current {entity_name} signal strength", - "is_temperature": "Current {entity_name} temperature", - "is_timestamp": "Current {entity_name} timestamp", - "is_value": "Current {entity_name} value" - }, - "trigger_type": { - "battery_level": "{entity_name} battery level changes", - "humidity": "{entity_name} humidity changes", - "illuminance": "{entity_name} illuminance changes", - "power": "{entity_name} power changes", - "pressure": "{entity_name} pressure changes", - "signal_strength": "{entity_name} signal strength changes", - "temperature": "{entity_name} temperature changes", - "timestamp": "{entity_name} timestamp changes", - "value": "{entity_name} value changes" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/es.json b/homeassistant/components/sensor/.translations/es.json deleted file mode 100644 index 3c957c715d9..00000000000 --- a/homeassistant/components/sensor/.translations/es.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Nivel de bater\u00eda actual de {entity_name}", - "is_humidity": "Humedad actual de {entity_name}", - "is_illuminance": "Luminosidad actual de {entity_name}", - "is_power": "Potencia actual de {entity_name}", - "is_pressure": "Presi\u00f3n actual de {entity_name}", - "is_signal_strength": "Intensidad de la se\u00f1al actual de {entity_name}", - "is_temperature": "Temperatura actual de {entity_name}", - "is_timestamp": "Marca de tiempo actual de {entity_name}", - "is_value": "Valor actual de {entity_name}" - }, - "trigger_type": { - "battery_level": "Cambios de nivel de bater\u00eda de {entity_name}", - "humidity": "Cambios de humedad de {entity_name}", - "illuminance": "Cambios de luminosidad de {entity_name}", - "power": "Cambios de potencia de {entity_name}", - "pressure": "Cambios de presi\u00f3n de {entity_name}", - "signal_strength": "cambios de la intensidad de se\u00f1al de {entity_name}", - "temperature": "{entity_name} cambios de temperatura", - "timestamp": "{entity_name} cambios de fecha y hora", - "value": "Cambios de valor de la {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/fr.json b/homeassistant/components/sensor/.translations/fr.json deleted file mode 100644 index cc35f93cb51..00000000000 --- a/homeassistant/components/sensor/.translations/fr.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Niveau de la batterie de {entity_name}", - "is_humidity": "Humidit\u00e9 de {entity_name}", - "is_illuminance": "\u00c9clairement de {entity_name}", - "is_power": "Puissance de {entity_name}", - "is_pressure": "Pression de {entity_name}", - "is_signal_strength": "Force du signal de {entity_name}", - "is_temperature": "Temp\u00e9rature de {entity_name}", - "is_timestamp": "Horodatage de {entity_name}", - "is_value": "La valeur actuelle de {entity_name}" - }, - "trigger_type": { - "battery_level": "{entity_name} modification du niveau de batterie", - "humidity": "{entity_name} modification de l'humidit\u00e9", - "illuminance": "{entity_name} modification de l'\u00e9clairement", - "power": "{entity_name} modification de la puissance", - "pressure": "{entity_name} modification de la pression", - "signal_strength": "{entity_name} modification de la force du signal", - "temperature": "{entity_name} modification de temp\u00e9rature", - "timestamp": "{entity_name} modification d'horodatage", - "value": "Changements de valeur de {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/hu.json b/homeassistant/components/sensor/.translations/hu.json deleted file mode 100644 index a83db67b3e1..00000000000 --- a/homeassistant/components/sensor/.translations/hu.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "{entity_name} aktu\u00e1lis akku szintje", - "is_humidity": "{entity_name} aktu\u00e1lis p\u00e1ratartalma", - "is_illuminance": "{entity_name} aktu\u00e1lis megvil\u00e1g\u00edt\u00e1sa", - "is_power": "{entity_name} aktu\u00e1lis teljes\u00edtm\u00e9nye", - "is_pressure": "{entity_name} aktu\u00e1lis nyom\u00e1sa", - "is_signal_strength": "{entity_name} aktu\u00e1lis jeler\u0151ss\u00e9ge", - "is_temperature": "{entity_name} aktu\u00e1lis h\u0151m\u00e9rs\u00e9klete", - "is_timestamp": "{entity_name} aktu\u00e1lis id\u0151b\u00e9lyege", - "is_value": "{entity_name} aktu\u00e1lis \u00e9rt\u00e9ke" - }, - "trigger_type": { - "battery_level": "{entity_name} akku szintje v\u00e1ltozik", - "humidity": "{entity_name} p\u00e1ratartalma v\u00e1ltozik", - "illuminance": "{entity_name} megvil\u00e1g\u00edt\u00e1sa v\u00e1ltozik", - "power": "{entity_name} teljes\u00edtm\u00e9nye v\u00e1ltozik", - "pressure": "{entity_name} nyom\u00e1sa v\u00e1ltozik", - "signal_strength": "{entity_name} jeler\u0151ss\u00e9ge v\u00e1ltozik", - "temperature": "{entity_name} h\u0151m\u00e9rs\u00e9klete v\u00e1ltozik", - "timestamp": "{entity_name} id\u0151b\u00e9lyege v\u00e1ltozik", - "value": "{entity_name} \u00e9rt\u00e9ke v\u00e1ltozik" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/it.json b/homeassistant/components/sensor/.translations/it.json deleted file mode 100644 index 0a1b0d13cb0..00000000000 --- a/homeassistant/components/sensor/.translations/it.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Livello della batteria attuale di {entity_name}", - "is_humidity": "Umidit\u00e0 attuale di {entity_name}", - "is_illuminance": "Illuminazione attuale di {entity_name}", - "is_power": "Alimentazione attuale di {entity_name}", - "is_pressure": "Pressione attuale di {entity_name}", - "is_signal_strength": "Potenza del segnale attuale di {entity_name}", - "is_temperature": "Temperatura attuale di {entity_name}", - "is_timestamp": "Data e ora attuali di {entity_name}", - "is_value": "Valore attuale di {entity_name}" - }, - "trigger_type": { - "battery_level": "variazioni del livello di batteria di {entity_name} ", - "humidity": "variazioni di umidit\u00e0 di {entity_name} ", - "illuminance": "variazioni dell'illuminazione di {entity_name}", - "power": "variazioni di alimentazione di {entity_name}", - "pressure": "variazioni della pressione di {entity_name}", - "signal_strength": "variazioni della potenza del segnale di {entity_name}", - "temperature": "variazioni di temperatura di {entity_name}", - "timestamp": "variazioni di data e ora di {entity_name}", - "value": "{entity_name} valori cambiati" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/ko.json b/homeassistant/components/sensor/.translations/ko.json deleted file mode 100644 index 7716cc016c3..00000000000 --- a/homeassistant/components/sensor/.translations/ko.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "\ud604\uc7ac {entity_name} \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 ~ \uc774\uba74", - "is_humidity": "\ud604\uc7ac {entity_name} \uc2b5\ub3c4\uac00 ~ \uc774\uba74", - "is_illuminance": "\ud604\uc7ac {entity_name} \uc870\ub3c4\uac00 ~ \uc774\uba74", - "is_power": "\ud604\uc7ac {entity_name} \uc18c\ube44 \uc804\ub825\uc774 ~ \uc774\uba74", - "is_pressure": "\ud604\uc7ac {entity_name} \uc555\ub825\uc774 ~ \uc774\uba74", - "is_signal_strength": "\ud604\uc7ac {entity_name} \uc2e0\ud638 \uac15\ub3c4\uac00 ~ \uc774\uba74", - "is_temperature": "\ud604\uc7ac {entity_name} \uc628\ub3c4\uac00 ~ \uc774\uba74", - "is_timestamp": "\ud604\uc7ac {entity_name} \uc2dc\uac01\uc774 ~ \uc774\uba74", - "is_value": "\ud604\uc7ac {entity_name} \uac12\uc774 ~ \uc774\uba74" - }, - "trigger_type": { - "battery_level": "{entity_name} \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 \ubc14\ub014 \ub54c", - "humidity": "{entity_name} \uc2b5\ub3c4\uac00 \ubc14\ub014 \ub54c", - "illuminance": "{entity_name} \uc870\ub3c4\uac00 \ubc14\ub014 \ub54c", - "power": "{entity_name} \uc18c\ube44 \uc804\ub825\uc774 \ubc14\ub014 \ub54c", - "pressure": "{entity_name} \uc555\ub825\uc774 \ubc14\ub014 \ub54c", - "signal_strength": "{entity_name} \uc2e0\ud638 \uac15\ub3c4\uac00 \ubc14\ub014 \ub54c", - "temperature": "{entity_name} \uc628\ub3c4\uac00 \ubc14\ub014 \ub54c", - "timestamp": "{entity_name} \uc2dc\uac01\uc774 \ubc14\ub014 \ub54c", - "value": "{entity_name} \uac12\uc774 \ubc14\ub014 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/lb.json b/homeassistant/components/sensor/.translations/lb.json deleted file mode 100644 index f999e3c16f0..00000000000 --- a/homeassistant/components/sensor/.translations/lb.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Aktuell {entity_name} Batterie niveau", - "is_humidity": "Aktuell {entity_name} Fiichtegkeet", - "is_illuminance": "Aktuell {entity_name} Beliichtung", - "is_power": "Aktuell {entity_name} Leeschtung", - "is_pressure": "Aktuell {entity_name} Drock", - "is_signal_strength": "Aktuell {entity_name} Signal St\u00e4erkt", - "is_temperature": "Aktuell {entity_name} Temperatur", - "is_timestamp": "Aktuelle {entity_name} Z\u00e4itstempel", - "is_value": "Aktuelle {entity_name} W\u00e4ert" - }, - "trigger_type": { - "battery_level": "{entity_name} Batterie niveau \u00e4nnert", - "humidity": "{entity_name} Fiichtegkeet \u00e4nnert", - "illuminance": "{entity_name} Beliichtung \u00e4nnert", - "power": "{entity_name} Leeschtung \u00e4nnert", - "pressure": "{entity_name} Drock \u00e4nnert", - "signal_strength": "{entity_name} Signal St\u00e4erkt \u00e4nnert", - "temperature": "{entity_name} Temperatur \u00e4nnert", - "timestamp": "{entity_name} Z\u00e4itstempel \u00e4nnert", - "value": "{entity_name} W\u00e4ert \u00e4nnert" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/nl.json b/homeassistant/components/sensor/.translations/nl.json deleted file mode 100644 index 03eff2a7f6d..00000000000 --- a/homeassistant/components/sensor/.translations/nl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Huidige batterijniveau {entity_name}", - "is_humidity": "Huidige {entity_name} vochtigheidsgraad", - "is_illuminance": "Huidige {entity_name} verlichtingssterkte", - "is_power": "Huidige {entity_name}\nvermogen", - "is_pressure": "Huidige {entity_name} druk", - "is_signal_strength": "Huidige {entity_name} signaalsterkte", - "is_temperature": "Huidige {entity_name} temperatuur", - "is_timestamp": "Huidige {entity_name} tijdstip", - "is_value": "Huidige {entity_name} waarde" - }, - "trigger_type": { - "battery_level": "{entity_name} batterijniveau gewijzigd", - "humidity": "{entity_name} vochtigheidsgraad gewijzigd", - "illuminance": "{entity_name} verlichtingssterkte gewijzigd", - "power": "{entity_name} vermogen gewijzigd", - "pressure": "{entity_name} druk gewijzigd", - "signal_strength": "{entity_name} signaalsterkte gewijzigd", - "temperature": "{entity_name} temperatuur gewijzigd", - "timestamp": "{entity_name} tijdstip gewijzigd", - "value": "{entity_name} waarde gewijzigd" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/no.json b/homeassistant/components/sensor/.translations/no.json deleted file mode 100644 index 010f835cf3d..00000000000 --- a/homeassistant/components/sensor/.translations/no.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Gjeldende {entity_name} batteriniv\u00e5", - "is_humidity": "Gjeldende {entity_name} fuktighet", - "is_illuminance": "Gjeldende {entity_name} belysningsstyrke", - "is_power": "Gjeldende {entity_name}-effekt", - "is_pressure": "Gjeldende {entity_name} trykk", - "is_signal_strength": "Gjeldende {entity_name} signalstyrke", - "is_temperature": "Gjeldende {entity_name} temperatur", - "is_timestamp": "Gjeldende {entity_name} tidsstempel", - "is_value": "Gjeldende {entity_name} verdi" - }, - "trigger_type": { - "battery_level": "{entity_name} batteriniv\u00e5 endres", - "humidity": "{entity_name} fuktighets endringer", - "illuminance": "{entity_name} belysningsstyrke endringer", - "power": "{entity_name} effektendringer", - "pressure": "{entity_name} trykk endringer", - "signal_strength": "{entity_name} signalstyrkeendringer", - "temperature": "{entity_name} temperaturendringer", - "timestamp": "{entity_name} tidsstempel endringer", - "value": "{entity_name} verdi endringer" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/pl.json b/homeassistant/components/sensor/.translations/pl.json deleted file mode 100644 index 7ef982e0d13..00000000000 --- a/homeassistant/components/sensor/.translations/pl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "obecny poziom na\u0142adowania baterii {entity_name}", - "is_humidity": "obecna wilgotno\u015b\u0107 {entity_name}", - "is_illuminance": "obecne nat\u0119\u017cenie o\u015bwietlenia {entity_name}", - "is_power": "obecna moc {entity_name}", - "is_pressure": "obecne ci\u015bnienie {entity_name}", - "is_signal_strength": "obecna si\u0142a sygna\u0142u {entity_name}", - "is_temperature": "obecna temperatura {entity_name}", - "is_timestamp": "obecny znacznik czasu {entity_name}", - "is_value": "obecna warto\u015b\u0107 {entity_name}" - }, - "trigger_type": { - "battery_level": "zmieni si\u0119 poziom baterii {entity_name}", - "humidity": "zmieni si\u0119 wilgotno\u015b\u0107 {entity_name}", - "illuminance": "zmieni si\u0119 nat\u0119\u017cenie o\u015bwietlenia {entity_name}", - "power": "zmieni si\u0119 moc {entity_name}", - "pressure": "zmieni si\u0119 ci\u015bnienie {entity_name}", - "signal_strength": "zmieni si\u0119 si\u0142a sygna\u0142u {entity_name}", - "temperature": "zmieni si\u0119 temperatura {entity_name}", - "timestamp": "zmieni si\u0119 znacznik czasu {entity_name}", - "value": "zmieni si\u0119 warto\u015b\u0107 {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/pt.json b/homeassistant/components/sensor/.translations/pt.json deleted file mode 100644 index 032d88e02d9..00000000000 --- a/homeassistant/components/sensor/.translations/pt.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "N\u00edvel de bateria atual de {entity_name}", - "is_humidity": "humidade {entity_name}", - "is_illuminance": "Luminancia atual de {entity_name}", - "is_power": "Pot\u00eancia atual de {entity_name}", - "is_pressure": "Press\u00e3o atual de {entity_name}", - "is_signal_strength": "Intensidade atual do sinal de {entity_name}", - "is_temperature": "Temperatura atual de {entity_name}", - "is_timestamp": "momento temporal de {entity_name}", - "is_value": "valor {entity_name}" - }, - "trigger_type": { - "battery_level": "n\u00edvel da bateria {entity_name}", - "humidity": "humidade {entity_name}", - "illuminance": "ilumin\u00e2ncia {entity_name}", - "power": "pot\u00eancia {entity_name}", - "pressure": "press\u00e3o {entity_name}", - "signal_strength": "for\u00e7a do sinal de {entity_name}", - "temperature": "temperatura de {entity_name}", - "timestamp": "momento temporal de {entity_name}", - "value": "valor {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/ru.json b/homeassistant/components/sensor/.translations/ru.json deleted file mode 100644 index 0f2c1bc0e4e..00000000000 --- a/homeassistant/components/sensor/.translations/ru.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_humidity": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_illuminance": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_power": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_pressure": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_signal_strength": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_temperature": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_timestamp": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "is_value": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435" - }, - "trigger_type": { - "battery_level": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "humidity": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "illuminance": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "power": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "pressure": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "signal_strength": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "temperature": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "timestamp": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", - "value": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/sl.json b/homeassistant/components/sensor/.translations/sl.json deleted file mode 100644 index 3f29b62e665..00000000000 --- a/homeassistant/components/sensor/.translations/sl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Trenutna raven baterije {entity_name}", - "is_humidity": "Trenutna vla\u017enost {entity_name}", - "is_illuminance": "Trenutna svetilnost {entity_name}", - "is_power": "Trenutna mo\u010d {entity_name}", - "is_pressure": "Trenutni tlak {entity_name}", - "is_signal_strength": "Trenutna jakost signala {entity_name}", - "is_temperature": "Trenutna temperatura {entity_name}", - "is_timestamp": "Trenutni {entity_name} \u010dasovni \u017eig", - "is_value": "Trenutna vrednost {entity_name}" - }, - "trigger_type": { - "battery_level": "{entity_name} spremembe ravni baterije", - "humidity": "{entity_name} spremembe vla\u017enosti", - "illuminance": "{entity_name} spremembe osvetlitve", - "power": "{entity_name} spremembe mo\u010di", - "pressure": "{entity_name} spremembe tlaka", - "signal_strength": "{entity_name} spremembe mo\u010di signala", - "temperature": "{entity_name} spremembe temperatur", - "timestamp": "{entity_name} spremembe \u010dasovnega \u017eiga", - "value": "{entity_name} spremembe vrednosti" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/sv.json b/homeassistant/components/sensor/.translations/sv.json deleted file mode 100644 index 90001148f12..00000000000 --- a/homeassistant/components/sensor/.translations/sv.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "Aktuell {entity_name} batteriniv\u00e5", - "is_humidity": "Aktuell {entity_name} fuktighet", - "is_illuminance": "Aktuell {entity_name} belysning", - "is_power": "Aktuell {entity_name} str\u00f6m", - "is_pressure": "Aktuellt {entity_name} tryck", - "is_signal_strength": "Aktuell {entity_name} signalstyrka", - "is_temperature": "Aktuell {entity_name} temperatur", - "is_timestamp": "Aktuell {entity_name} tidsst\u00e4mpel", - "is_value": "Aktuellt {entity_name} v\u00e4rde" - }, - "trigger_type": { - "battery_level": "{entity_name} batteriniv\u00e5 \u00e4ndras", - "humidity": "{entity_name} fuktighet \u00e4ndras", - "illuminance": "{entity_name} belysning \u00e4ndras", - "power": "{entity_name} str\u00f6mf\u00f6r\u00e4ndringar", - "pressure": "{entity_name} tryckf\u00f6r\u00e4ndringar", - "signal_strength": "{entity_name} signalstyrka \u00e4ndras", - "temperature": "{entity_name} temperaturf\u00f6r\u00e4ndringar", - "timestamp": "{entity_name} tidst\u00e4mpel \u00e4ndras", - "value": "{entity_name} v\u00e4rde \u00e4ndras" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/zh-Hans.json b/homeassistant/components/sensor/.translations/zh-Hans.json deleted file mode 100644 index 12059aa6b1b..00000000000 --- a/homeassistant/components/sensor/.translations/zh-Hans.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "{entity_name} \u5f53\u524d\u7684\u7535\u6c60\u7535\u91cf", - "is_humidity": "{entity_name} \u5f53\u524d\u7684\u6e7f\u5ea6", - "is_illuminance": "{entity_name} \u5f53\u524d\u7684\u5149\u7167\u5f3a\u5ea6", - "is_power": "{entity_name} \u5f53\u524d\u7684\u529f\u7387", - "is_pressure": "{entity_name} \u5f53\u524d\u7684\u538b\u529b", - "is_signal_strength": "{entity_name} \u5f53\u524d\u7684\u4fe1\u53f7\u5f3a\u5ea6", - "is_temperature": "{entity_name} \u5f53\u524d\u7684\u6e29\u5ea6", - "is_timestamp": "{entity_name} \u5f53\u524d\u7684\u65f6\u95f4\u6233", - "is_value": "{entity_name} \u5f53\u524d\u7684\u503c" - }, - "trigger_type": { - "battery_level": "{entity_name} \u7684\u7535\u6c60\u7535\u91cf\u53d8\u5316", - "humidity": "{entity_name} \u7684\u6e7f\u5ea6\u53d8\u5316", - "illuminance": "{entity_name} \u7684\u5149\u7167\u5f3a\u5ea6\u53d8\u5316", - "power": "{entity_name} \u7684\u529f\u7387\u53d8\u5316", - "pressure": "{entity_name} \u7684\u538b\u529b\u53d8\u5316", - "signal_strength": "{entity_name} \u7684\u4fe1\u53f7\u5f3a\u5ea6\u53d8\u5316", - "temperature": "{entity_name} \u7684\u6e29\u5ea6\u53d8\u5316", - "timestamp": "{entity_name} \u7684\u65f6\u95f4\u6233\u53d8\u5316", - "value": "{entity_name} \u7684\u503c\u53d8\u5316" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/zh-Hant.json b/homeassistant/components/sensor/.translations/zh-Hant.json deleted file mode 100644 index 9bf8abc8230..00000000000 --- a/homeassistant/components/sensor/.translations/zh-Hant.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "device_automation": { - "condition_type": { - "is_battery_level": "\u76ee\u524d{entity_name}\u96fb\u91cf", - "is_humidity": "\u76ee\u524d{entity_name}\u6fd5\u5ea6", - "is_illuminance": "\u76ee\u524d{entity_name}\u7167\u5ea6", - "is_power": "\u76ee\u524d{entity_name}\u96fb\u529b", - "is_pressure": "\u76ee\u524d{entity_name}\u58d3\u529b", - "is_signal_strength": "\u76ee\u524d{entity_name}\u8a0a\u865f\u5f37\u5ea6", - "is_temperature": "\u76ee\u524d{entity_name}\u6eab\u5ea6", - "is_timestamp": "\u76ee\u524d{entity_name}\u6642\u9593\u6a19\u8a18", - "is_value": "\u76ee\u524d{entity_name}\u503c" - }, - "trigger_type": { - "battery_level": "{entity_name}\u96fb\u91cf\u8b8a\u66f4", - "humidity": "{entity_name}\u6fd5\u5ea6\u8b8a\u66f4", - "illuminance": "{entity_name}\u7167\u5ea6\u8b8a\u66f4", - "power": "{entity_name}\u96fb\u529b\u8b8a\u66f4", - "pressure": "{entity_name}\u58d3\u529b\u8b8a\u66f4", - "signal_strength": "{entity_name}\u8a0a\u865f\u5f37\u5ea6\u8b8a\u66f4", - "temperature": "{entity_name}\u6eab\u5ea6\u8b8a\u66f4", - "timestamp": "{entity_name}\u6642\u9593\u6a19\u8a18\u8b8a\u66f4", - "value": "{entity_name}\u503c\u8b8a\u66f4" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/sensor/device_condition.py b/homeassistant/components/sensor/device_condition.py index bb0348eb6a7..3c4337c1dba 100644 --- a/homeassistant/components/sensor/device_condition.py +++ b/homeassistant/components/sensor/device_condition.py @@ -113,16 +113,14 @@ async def async_get_conditions( ) conditions.extend( - ( - { - **template, - "condition": "device", - "device_id": device_id, - "entity_id": entry.entity_id, - "domain": DOMAIN, - } - for template in templates - ) + { + **template, + "condition": "device", + "device_id": device_id, + "entity_id": entry.entity_id, + "domain": DOMAIN, + } + for template in templates ) return conditions diff --git a/homeassistant/components/sensor/device_trigger.py b/homeassistant/components/sensor/device_trigger.py index 1af8a5e4ab0..57c32da97e9 100644 --- a/homeassistant/components/sensor/device_trigger.py +++ b/homeassistant/components/sensor/device_trigger.py @@ -129,16 +129,14 @@ async def async_get_triggers(hass, device_id): ) triggers.extend( - ( - { - **automation, - "platform": "device", - "device_id": device_id, - "entity_id": entry.entity_id, - "domain": DOMAIN, - } - for automation in templates - ) + { + **automation, + "platform": "device", + "device_id": device_id, + "entity_id": entry.entity_id, + "domain": DOMAIN, + } + for automation in templates ) return triggers diff --git a/homeassistant/components/sensor/manifest.json b/homeassistant/components/sensor/manifest.json index b57022b963c..dc62ae3b031 100644 --- a/homeassistant/components/sensor/manifest.json +++ b/homeassistant/components/sensor/manifest.json @@ -2,8 +2,6 @@ "domain": "sensor", "name": "Sensor", "documentation": "https://www.home-assistant.io/integrations/sensor", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/sensor/strings.json b/homeassistant/components/sensor/strings.json index a05f57f4584..024f942280c 100644 --- a/homeassistant/components/sensor/strings.json +++ b/homeassistant/components/sensor/strings.json @@ -1,4 +1,5 @@ { + "title": "Sensor", "device_automation": { "condition_type": { "is_battery_level": "Current {entity_name} battery level", @@ -22,5 +23,11 @@ "timestamp": "{entity_name} timestamp changes", "value": "{entity_name} value changes" } + }, + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } } } diff --git a/homeassistant/components/sensor/translations/af.json b/homeassistant/components/sensor/translations/af.json new file mode 100644 index 00000000000..a9292d0f13e --- /dev/null +++ b/homeassistant/components/sensor/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ar.json b/homeassistant/components/sensor/translations/ar.json new file mode 100644 index 00000000000..ba6168d5a65 --- /dev/null +++ b/homeassistant/components/sensor/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644" + } + }, + "title": "\u0623\u062c\u0647\u0632\u0629 \u0627\u0644\u0627\u0633\u062a\u0634\u0639\u0627\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/bg.json b/homeassistant/components/sensor/translations/bg.json new file mode 100644 index 00000000000..8d0881c6dd5 --- /dev/null +++ b/homeassistant/components/sensor/translations/bg.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "\u0422\u0435\u043a\u0443\u0449\u043e \u043d\u0438\u0432\u043e \u043d\u0430 \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u043d\u0430 {entity_name}", + "is_humidity": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}", + "is_illuminance": "\u0422\u0435\u043a\u0443\u0449\u0430 \u043e\u0441\u0432\u0435\u0442\u0435\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}", + "is_power": "\u0422\u0435\u043a\u0443\u0449\u0430 \u043c\u043e\u0449\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}", + "is_pressure": "\u0422\u0435\u043a\u0443\u0449\u043e \u043d\u0430\u043b\u044f\u0433\u0430\u043d\u0435 \u043d\u0430 {entity_name}", + "is_signal_strength": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u0438\u043b\u0430 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 {entity_name}", + "is_temperature": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430 {entity_name}", + "is_timestamp": "\u0422\u0435\u043a\u0443\u0449\u043e \u0432\u0440\u0435\u043c\u0435 \u043d\u0430 {entity_name}", + "is_value": "\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442 \u043d\u0430 {entity_name}" + }, + "trigger_type": { + "battery_level": "{entity_name} \u043d\u0438\u0432\u043e\u0442\u043e \u043d\u0430 \u0431\u0430\u0442\u0435\u0440\u0438\u044f\u0442\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u044f", + "humidity": "{entity_name} \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0442\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "illuminance": "{entity_name} \u043e\u0441\u0432\u0435\u0442\u0435\u043d\u043e\u0441\u0442\u0442\u0430 \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "power": "\u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "pressure": "\u043d\u0430\u043b\u044f\u0433\u0430\u043d\u0435\u0442\u043e \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "signal_strength": "\u0441\u0438\u043b\u0430\u0442\u0430 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "temperature": "\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "timestamp": "\u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438", + "value": "\u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0442\u0430 \u043d\u0430 {entity_name} \u0441\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438" + } + }, + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u0421\u0435\u043d\u0437\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/bs.json b/homeassistant/components/sensor/translations/bs.json new file mode 100644 index 00000000000..b81121c1f8e --- /dev/null +++ b/homeassistant/components/sensor/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Senzor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ca.json b/homeassistant/components/sensor/translations/ca.json new file mode 100644 index 00000000000..d2b34d0d70e --- /dev/null +++ b/homeassistant/components/sensor/translations/ca.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Nivell de bateria de {entity_name}", + "is_humidity": "Humitat de {entity_name}", + "is_illuminance": "Il\u00b7luminaci\u00f3 de {entity_name}", + "is_power": "Pot\u00e8ncia de {entity_name}", + "is_pressure": "Pressi\u00f3 de {entity_name}", + "is_signal_strength": "For\u00e7a del senyal de {entity_name}", + "is_temperature": "Temperatura de {entity_name}", + "is_timestamp": "Marca de temps de {entity_name}", + "is_value": "Valor de {entity_name}" + }, + "trigger_type": { + "battery_level": "Nivell de bateria de {entity_name}", + "humidity": "Humitat de {entity_name}", + "illuminance": "Il\u00b7luminaci\u00f3 de {entity_name}", + "power": "Pot\u00e8ncia de {entity_name}", + "pressure": "Pressi\u00f3 de {entity_name}", + "signal_strength": "For\u00e7a del senyal de {entity_name}", + "temperature": "Temperatura de {entity_name}", + "timestamp": "Marca de temps de {entity_name}", + "value": "Valor de {entity_name}" + } + }, + "state": { + "_": { + "off": "Desactivat", + "on": "Activat" + } + }, + "title": "Sensors" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/cs.json b/homeassistant/components/sensor/translations/cs.json new file mode 100644 index 00000000000..53a2da0872b --- /dev/null +++ b/homeassistant/components/sensor/translations/cs.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Aktu\u00e1ln\u00ed \u00farove\u0148 nabit\u00ed baterie {entity_name}", + "is_humidity": "Aktu\u00e1ln\u00ed vlhkost {entity_name}", + "is_illuminance": "Aktu\u00e1ln\u00ed osv\u011btlen\u00ed {entity_name}", + "is_power": "Aktu\u00e1ln\u00ed v\u00fdkon {entity_name}", + "is_pressure": "Aktu\u00e1ln\u00ed tlak {entity_name}", + "is_signal_strength": "Aktu\u00e1ln\u00ed s\u00edla sign\u00e1lu {entity_name}", + "is_temperature": "Aktu\u00e1ln\u00ed teplota {entity_name}", + "is_timestamp": "Aktu\u00e1ln\u00ed \u010dasov\u00e9 raz\u00edtko {entity_name}", + "is_value": "Aktu\u00e1ln\u00ed hodnota {entity_name}" + }, + "trigger_type": { + "battery_level": "\u00farove\u0148 baterie {entity_name} se zm\u011bn\u00ed", + "humidity": "vlhkost {entity_name} se zm\u011bn\u00ed", + "illuminance": "osv\u011btlen\u00ed {entity_name} se zm\u011bn\u00ed", + "power": "el. v\u00fdkon {entity_name} se zm\u011bn\u00ed", + "pressure": "tlak {entity_name} se zm\u011bn\u00ed", + "signal_strength": "s\u00edla sign\u00e1lu {entity_name} se zm\u011bn\u00ed", + "temperature": "teplota {entity_name} se zm\u011bn\u00ed", + "timestamp": "\u010dasov\u00e9 raz\u00edtko {entity_name} se zm\u011bn\u00ed", + "value": "hodnota {entity_name} se zm\u011bn\u00ed" + } + }, + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Senzor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/cy.json b/homeassistant/components/sensor/translations/cy.json new file mode 100644 index 00000000000..73f9194287b --- /dev/null +++ b/homeassistant/components/sensor/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Synhwyrydd" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/da.json b/homeassistant/components/sensor/translations/da.json new file mode 100644 index 00000000000..25e6597023a --- /dev/null +++ b/homeassistant/components/sensor/translations/da.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Aktuelt {entity_name}-batteriniveau", + "is_humidity": "Aktuel {entity_name}-luftfugtighed", + "is_illuminance": "Aktuel {entity_name}-lysstyrke", + "is_power": "Aktuel {entity_name}-str\u00f8m", + "is_pressure": "Aktuelt {entity_name}-lufttryk", + "is_signal_strength": "Aktuel {entity_name}-signalstyrke", + "is_temperature": "Aktuel {entity_name}-temperatur", + "is_timestamp": "Aktuel {entity_name}-tidsstempel", + "is_value": "Aktuel {entity_name}-v\u00e6rdi" + }, + "trigger_type": { + "battery_level": "{entity_name} batteriniveau \u00e6ndres", + "humidity": "{entity_name} luftfugtighed \u00e6ndres", + "illuminance": "{entity_name} lysstyrke \u00e6ndres", + "power": "{entity_name} str\u00f8m \u00e6ndres", + "pressure": "{entity_name} lufttryk \u00e6ndres", + "signal_strength": "{entity_name} signalstyrke \u00e6ndres", + "temperature": "{entity_name} temperatur \u00e6ndres", + "timestamp": "{entity_name} tidsstempel \u00e6ndres", + "value": "{entity_name} v\u00e6rdi \u00e6ndres" + } + }, + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/de.json b/homeassistant/components/sensor/translations/de.json new file mode 100644 index 00000000000..0f72b344982 --- /dev/null +++ b/homeassistant/components/sensor/translations/de.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "{entity_name} Batteriestand", + "is_humidity": "{entity_name} Feuchtigkeit", + "is_illuminance": "Aktuelle {entity_name} Helligkeit", + "is_power": "Aktuelle {entity_name} Leistung", + "is_pressure": "{entity_name} Druck", + "is_signal_strength": "Aktuelle {entity_name} Signalst\u00e4rke", + "is_temperature": "Aktuelle {entity_name} Temperatur", + "is_timestamp": "Aktueller Zeitstempel von {entity_name}", + "is_value": "Aktueller {entity_name} Wert" + }, + "trigger_type": { + "battery_level": "{entity_name} Batteriestatus\u00e4nderungen", + "humidity": "{entity_name} Feuchtigkeits\u00e4nderungen", + "illuminance": "{entity_name} Helligkeits\u00e4nderungen", + "power": "{entity_name} Leistungs\u00e4nderungen", + "pressure": "{entity_name} Druck\u00e4nderungen", + "signal_strength": "{entity_name} Signalst\u00e4rke\u00e4nderungen", + "temperature": "{entity_name} Temperatur\u00e4nderungen", + "timestamp": "{entity_name} Zeitstempel\u00e4nderungen", + "value": "{entity_name} Wert\u00e4nderungen" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/el.json b/homeassistant/components/sensor/translations/el.json new file mode 100644 index 00000000000..21bcb9e378c --- /dev/null +++ b/homeassistant/components/sensor/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u0391\u03b9\u03c3\u03b8\u03b7\u03c4\u03ae\u03c1\u03b1\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/en.json b/homeassistant/components/sensor/translations/en.json new file mode 100644 index 00000000000..69138fec001 --- /dev/null +++ b/homeassistant/components/sensor/translations/en.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Current {entity_name} battery level", + "is_humidity": "Current {entity_name} humidity", + "is_illuminance": "Current {entity_name} illuminance", + "is_power": "Current {entity_name} power", + "is_pressure": "Current {entity_name} pressure", + "is_signal_strength": "Current {entity_name} signal strength", + "is_temperature": "Current {entity_name} temperature", + "is_timestamp": "Current {entity_name} timestamp", + "is_value": "Current {entity_name} value" + }, + "trigger_type": { + "battery_level": "{entity_name} battery level changes", + "humidity": "{entity_name} humidity changes", + "illuminance": "{entity_name} illuminance changes", + "power": "{entity_name} power changes", + "pressure": "{entity_name} pressure changes", + "signal_strength": "{entity_name} signal strength changes", + "temperature": "{entity_name} temperature changes", + "timestamp": "{entity_name} timestamp changes", + "value": "{entity_name} value changes" + } + }, + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/es-419.json b/homeassistant/components/sensor/translations/es-419.json new file mode 100644 index 00000000000..6ed28293a90 --- /dev/null +++ b/homeassistant/components/sensor/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "", + "on": "" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/es.json b/homeassistant/components/sensor/translations/es.json new file mode 100644 index 00000000000..0a6335f97a0 --- /dev/null +++ b/homeassistant/components/sensor/translations/es.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Nivel de bater\u00eda actual de {entity_name}", + "is_humidity": "Humedad actual de {entity_name}", + "is_illuminance": "Luminosidad actual de {entity_name}", + "is_power": "Potencia actual de {entity_name}", + "is_pressure": "Presi\u00f3n actual de {entity_name}", + "is_signal_strength": "Intensidad de la se\u00f1al actual de {entity_name}", + "is_temperature": "Temperatura actual de {entity_name}", + "is_timestamp": "Marca de tiempo actual de {entity_name}", + "is_value": "Valor actual de {entity_name}" + }, + "trigger_type": { + "battery_level": "Cambios de nivel de bater\u00eda de {entity_name}", + "humidity": "Cambios de humedad de {entity_name}", + "illuminance": "Cambios de luminosidad de {entity_name}", + "power": "Cambios de potencia de {entity_name}", + "pressure": "Cambios de presi\u00f3n de {entity_name}", + "signal_strength": "cambios de la intensidad de se\u00f1al de {entity_name}", + "temperature": "{entity_name} cambios de temperatura", + "timestamp": "{entity_name} cambios de fecha y hora", + "value": "Cambios de valor de la {entity_name}" + } + }, + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/et.json b/homeassistant/components/sensor/translations/et.json new file mode 100644 index 00000000000..8238a8b6ab0 --- /dev/null +++ b/homeassistant/components/sensor/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "Andur" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/eu.json b/homeassistant/components/sensor/translations/eu.json new file mode 100644 index 00000000000..ea0c5a33c31 --- /dev/null +++ b/homeassistant/components/sensor/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + }, + "title": "Sentsorea" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/fa.json b/homeassistant/components/sensor/translations/fa.json new file mode 100644 index 00000000000..d48f634a714 --- /dev/null +++ b/homeassistant/components/sensor/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644", + "on": "\u0641\u0639\u0627\u0644" + } + }, + "title": "\u0633\u0646\u0633\u0648\u0631" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/fi.json b/homeassistant/components/sensor/translations/fi.json new file mode 100644 index 00000000000..1d302e920fe --- /dev/null +++ b/homeassistant/components/sensor/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Sensori" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/fr.json b/homeassistant/components/sensor/translations/fr.json new file mode 100644 index 00000000000..8f7cbf0f8aa --- /dev/null +++ b/homeassistant/components/sensor/translations/fr.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Niveau de la batterie de {entity_name}", + "is_humidity": "Humidit\u00e9 de {entity_name}", + "is_illuminance": "\u00c9clairement de {entity_name}", + "is_power": "Puissance de {entity_name}", + "is_pressure": "Pression de {entity_name}", + "is_signal_strength": "Force du signal de {entity_name}", + "is_temperature": "Temp\u00e9rature de {entity_name}", + "is_timestamp": "Horodatage de {entity_name}", + "is_value": "La valeur actuelle de {entity_name}" + }, + "trigger_type": { + "battery_level": "{entity_name} modification du niveau de batterie", + "humidity": "{entity_name} modification de l'humidit\u00e9", + "illuminance": "{entity_name} modification de l'\u00e9clairement", + "power": "{entity_name} modification de la puissance", + "pressure": "{entity_name} modification de la pression", + "signal_strength": "{entity_name} modification de la force du signal", + "temperature": "{entity_name} modification de temp\u00e9rature", + "timestamp": "{entity_name} modification d'horodatage", + "value": "Changements de valeur de {entity_name}" + } + }, + "state": { + "_": { + "off": "Inactif", + "on": "Actif" + } + }, + "title": "Capteur" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/gsw.json b/homeassistant/components/sensor/translations/gsw.json new file mode 100644 index 00000000000..712f0758e22 --- /dev/null +++ b/homeassistant/components/sensor/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/he.json b/homeassistant/components/sensor/translations/he.json new file mode 100644 index 00000000000..2fec6a8d81f --- /dev/null +++ b/homeassistant/components/sensor/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05d7\u05d9\u05d9\u05e9\u05df" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/hi.json b/homeassistant/components/sensor/translations/hi.json new file mode 100644 index 00000000000..07cf7ede44d --- /dev/null +++ b/homeassistant/components/sensor/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u0938\u0947\u0902\u0938\u0930" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/hr.json b/homeassistant/components/sensor/translations/hr.json new file mode 100644 index 00000000000..b81121c1f8e --- /dev/null +++ b/homeassistant/components/sensor/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Senzor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/hu.json b/homeassistant/components/sensor/translations/hu.json new file mode 100644 index 00000000000..7be96984451 --- /dev/null +++ b/homeassistant/components/sensor/translations/hu.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "{entity_name} aktu\u00e1lis akku szintje", + "is_humidity": "{entity_name} aktu\u00e1lis p\u00e1ratartalma", + "is_illuminance": "{entity_name} aktu\u00e1lis megvil\u00e1g\u00edt\u00e1sa", + "is_power": "{entity_name} aktu\u00e1lis teljes\u00edtm\u00e9nye", + "is_pressure": "{entity_name} aktu\u00e1lis nyom\u00e1sa", + "is_signal_strength": "{entity_name} aktu\u00e1lis jeler\u0151ss\u00e9ge", + "is_temperature": "{entity_name} aktu\u00e1lis h\u0151m\u00e9rs\u00e9klete", + "is_timestamp": "{entity_name} aktu\u00e1lis id\u0151b\u00e9lyege", + "is_value": "{entity_name} aktu\u00e1lis \u00e9rt\u00e9ke" + }, + "trigger_type": { + "battery_level": "{entity_name} akku szintje v\u00e1ltozik", + "humidity": "{entity_name} p\u00e1ratartalma v\u00e1ltozik", + "illuminance": "{entity_name} megvil\u00e1g\u00edt\u00e1sa v\u00e1ltozik", + "power": "{entity_name} teljes\u00edtm\u00e9nye v\u00e1ltozik", + "pressure": "{entity_name} nyom\u00e1sa v\u00e1ltozik", + "signal_strength": "{entity_name} jeler\u0151ss\u00e9ge v\u00e1ltozik", + "temperature": "{entity_name} h\u0151m\u00e9rs\u00e9klete v\u00e1ltozik", + "timestamp": "{entity_name} id\u0151b\u00e9lyege v\u00e1ltozik", + "value": "{entity_name} \u00e9rt\u00e9ke v\u00e1ltozik" + } + }, + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "\u00c9rz\u00e9kel\u0151" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/hy.json b/homeassistant/components/sensor/translations/hy.json new file mode 100644 index 00000000000..7250a3404cc --- /dev/null +++ b/homeassistant/components/sensor/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0574\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u054d\u0565\u0576\u057d\u0578\u0580" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/id.json b/homeassistant/components/sensor/translations/id.json new file mode 100644 index 00000000000..e2d0cdb057d --- /dev/null +++ b/homeassistant/components/sensor/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/is.json b/homeassistant/components/sensor/translations/is.json new file mode 100644 index 00000000000..0444c7b2866 --- /dev/null +++ b/homeassistant/components/sensor/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "\u00c1" + } + }, + "title": "Skynjari" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/it.json b/homeassistant/components/sensor/translations/it.json new file mode 100644 index 00000000000..e8cd7046231 --- /dev/null +++ b/homeassistant/components/sensor/translations/it.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Livello della batteria attuale di {entity_name}", + "is_humidity": "Umidit\u00e0 attuale di {entity_name}", + "is_illuminance": "Illuminazione attuale di {entity_name}", + "is_power": "Alimentazione attuale di {entity_name}", + "is_pressure": "Pressione attuale di {entity_name}", + "is_signal_strength": "Potenza del segnale attuale di {entity_name}", + "is_temperature": "Temperatura attuale di {entity_name}", + "is_timestamp": "Data e ora attuali di {entity_name}", + "is_value": "Valore attuale di {entity_name}" + }, + "trigger_type": { + "battery_level": "variazioni del livello di batteria di {entity_name} ", + "humidity": "variazioni di umidit\u00e0 di {entity_name} ", + "illuminance": "variazioni dell'illuminazione di {entity_name}", + "power": "variazioni di alimentazione di {entity_name}", + "pressure": "variazioni della pressione di {entity_name}", + "signal_strength": "variazioni della potenza del segnale di {entity_name}", + "temperature": "variazioni di temperatura di {entity_name}", + "timestamp": "variazioni di data e ora di {entity_name}", + "value": "{entity_name} valori cambiati" + } + }, + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Sensore" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ja.json b/homeassistant/components/sensor/translations/ja.json new file mode 100644 index 00000000000..0497959372c --- /dev/null +++ b/homeassistant/components/sensor/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + }, + "title": "\u30bb\u30f3\u30b5\u30fc" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ko.json b/homeassistant/components/sensor/translations/ko.json new file mode 100644 index 00000000000..92fcd5d37a2 --- /dev/null +++ b/homeassistant/components/sensor/translations/ko.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "\ud604\uc7ac {entity_name} \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 ~ \uc774\uba74", + "is_humidity": "\ud604\uc7ac {entity_name} \uc2b5\ub3c4\uac00 ~ \uc774\uba74", + "is_illuminance": "\ud604\uc7ac {entity_name} \uc870\ub3c4\uac00 ~ \uc774\uba74", + "is_power": "\ud604\uc7ac {entity_name} \uc18c\ube44 \uc804\ub825\uc774 ~ \uc774\uba74", + "is_pressure": "\ud604\uc7ac {entity_name} \uc555\ub825\uc774 ~ \uc774\uba74", + "is_signal_strength": "\ud604\uc7ac {entity_name} \uc2e0\ud638 \uac15\ub3c4\uac00 ~ \uc774\uba74", + "is_temperature": "\ud604\uc7ac {entity_name} \uc628\ub3c4\uac00 ~ \uc774\uba74", + "is_timestamp": "\ud604\uc7ac {entity_name} \uc2dc\uac01\uc774 ~ \uc774\uba74", + "is_value": "\ud604\uc7ac {entity_name} \uac12\uc774 ~ \uc774\uba74" + }, + "trigger_type": { + "battery_level": "{entity_name} \ubc30\ud130\ub9ac \uc794\ub7c9\uc774 \ubc14\ub014 \ub54c", + "humidity": "{entity_name} \uc2b5\ub3c4\uac00 \ubc14\ub014 \ub54c", + "illuminance": "{entity_name} \uc870\ub3c4\uac00 \ubc14\ub014 \ub54c", + "power": "{entity_name} \uc18c\ube44 \uc804\ub825\uc774 \ubc14\ub014 \ub54c", + "pressure": "{entity_name} \uc555\ub825\uc774 \ubc14\ub014 \ub54c", + "signal_strength": "{entity_name} \uc2e0\ud638 \uac15\ub3c4\uac00 \ubc14\ub014 \ub54c", + "temperature": "{entity_name} \uc628\ub3c4\uac00 \ubc14\ub014 \ub54c", + "timestamp": "{entity_name} \uc2dc\uac01\uc774 \ubc14\ub014 \ub54c", + "value": "{entity_name} \uac12\uc774 \ubc14\ub014 \ub54c" + } + }, + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc13c\uc11c" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/lb.json b/homeassistant/components/sensor/translations/lb.json new file mode 100644 index 00000000000..e57edbb656b --- /dev/null +++ b/homeassistant/components/sensor/translations/lb.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Aktuell {entity_name} Batterie niveau", + "is_humidity": "Aktuell {entity_name} Fiichtegkeet", + "is_illuminance": "Aktuell {entity_name} Beliichtung", + "is_power": "Aktuell {entity_name} Leeschtung", + "is_pressure": "Aktuell {entity_name} Drock", + "is_signal_strength": "Aktuell {entity_name} Signal St\u00e4erkt", + "is_temperature": "Aktuell {entity_name} Temperatur", + "is_timestamp": "Aktuelle {entity_name} Z\u00e4itstempel", + "is_value": "Aktuelle {entity_name} W\u00e4ert" + }, + "trigger_type": { + "battery_level": "{entity_name} Batterie niveau \u00e4nnert", + "humidity": "{entity_name} Fiichtegkeet \u00e4nnert", + "illuminance": "{entity_name} Beliichtung \u00e4nnert", + "power": "{entity_name} Leeschtung \u00e4nnert", + "pressure": "{entity_name} Drock \u00e4nnert", + "signal_strength": "{entity_name} Signal St\u00e4erkt \u00e4nnert", + "temperature": "{entity_name} Temperatur \u00e4nnert", + "timestamp": "{entity_name} Z\u00e4itstempel \u00e4nnert", + "value": "{entity_name} W\u00e4ert \u00e4nnert" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/lt.json b/homeassistant/components/sensor/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/sensor/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/lv.json b/homeassistant/components/sensor/translations/lv.json new file mode 100644 index 00000000000..2b6f4a778d1 --- /dev/null +++ b/homeassistant/components/sensor/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + } + }, + "title": "Sensors" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/moon.ar.json b/homeassistant/components/sensor/translations/moon.ar.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.ar.json rename to homeassistant/components/sensor/translations/moon.ar.json diff --git a/homeassistant/components/sensor/.translations/moon.bg.json b/homeassistant/components/sensor/translations/moon.bg.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.bg.json rename to homeassistant/components/sensor/translations/moon.bg.json diff --git a/homeassistant/components/sensor/.translations/moon.ca.json b/homeassistant/components/sensor/translations/moon.ca.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.ca.json rename to homeassistant/components/sensor/translations/moon.ca.json diff --git a/homeassistant/components/sensor/.translations/moon.cs.json b/homeassistant/components/sensor/translations/moon.cs.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.cs.json rename to homeassistant/components/sensor/translations/moon.cs.json diff --git a/homeassistant/components/sensor/.translations/moon.da.json b/homeassistant/components/sensor/translations/moon.da.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.da.json rename to homeassistant/components/sensor/translations/moon.da.json diff --git a/homeassistant/components/sensor/.translations/moon.de.json b/homeassistant/components/sensor/translations/moon.de.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.de.json rename to homeassistant/components/sensor/translations/moon.de.json diff --git a/homeassistant/components/sensor/.translations/moon.en.json b/homeassistant/components/sensor/translations/moon.en.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.en.json rename to homeassistant/components/sensor/translations/moon.en.json diff --git a/homeassistant/components/sensor/.translations/moon.es-419.json b/homeassistant/components/sensor/translations/moon.es-419.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.es-419.json rename to homeassistant/components/sensor/translations/moon.es-419.json diff --git a/homeassistant/components/sensor/.translations/moon.es.json b/homeassistant/components/sensor/translations/moon.es.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.es.json rename to homeassistant/components/sensor/translations/moon.es.json diff --git a/homeassistant/components/sensor/.translations/moon.et.json b/homeassistant/components/sensor/translations/moon.et.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.et.json rename to homeassistant/components/sensor/translations/moon.et.json diff --git a/homeassistant/components/sensor/.translations/moon.fi.json b/homeassistant/components/sensor/translations/moon.fi.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.fi.json rename to homeassistant/components/sensor/translations/moon.fi.json diff --git a/homeassistant/components/sensor/.translations/moon.fr.json b/homeassistant/components/sensor/translations/moon.fr.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.fr.json rename to homeassistant/components/sensor/translations/moon.fr.json diff --git a/homeassistant/components/sensor/.translations/moon.he.json b/homeassistant/components/sensor/translations/moon.he.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.he.json rename to homeassistant/components/sensor/translations/moon.he.json diff --git a/homeassistant/components/sensor/.translations/moon.hu.json b/homeassistant/components/sensor/translations/moon.hu.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.hu.json rename to homeassistant/components/sensor/translations/moon.hu.json diff --git a/homeassistant/components/sensor/.translations/moon.id.json b/homeassistant/components/sensor/translations/moon.id.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.id.json rename to homeassistant/components/sensor/translations/moon.id.json diff --git a/homeassistant/components/sensor/.translations/moon.it.json b/homeassistant/components/sensor/translations/moon.it.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.it.json rename to homeassistant/components/sensor/translations/moon.it.json diff --git a/homeassistant/components/sensor/.translations/moon.ko.json b/homeassistant/components/sensor/translations/moon.ko.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.ko.json rename to homeassistant/components/sensor/translations/moon.ko.json diff --git a/homeassistant/components/sensor/.translations/moon.lb.json b/homeassistant/components/sensor/translations/moon.lb.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.lb.json rename to homeassistant/components/sensor/translations/moon.lb.json diff --git a/homeassistant/components/sensor/.translations/moon.nl.json b/homeassistant/components/sensor/translations/moon.nl.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.nl.json rename to homeassistant/components/sensor/translations/moon.nl.json diff --git a/homeassistant/components/sensor/.translations/moon.nn.json b/homeassistant/components/sensor/translations/moon.nn.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.nn.json rename to homeassistant/components/sensor/translations/moon.nn.json diff --git a/homeassistant/components/sensor/.translations/moon.no.json b/homeassistant/components/sensor/translations/moon.no.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.no.json rename to homeassistant/components/sensor/translations/moon.no.json diff --git a/homeassistant/components/sensor/.translations/moon.pl.json b/homeassistant/components/sensor/translations/moon.pl.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.pl.json rename to homeassistant/components/sensor/translations/moon.pl.json diff --git a/homeassistant/components/sensor/.translations/moon.pt-BR.json b/homeassistant/components/sensor/translations/moon.pt-BR.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.pt-BR.json rename to homeassistant/components/sensor/translations/moon.pt-BR.json diff --git a/homeassistant/components/sensor/.translations/moon.pt.json b/homeassistant/components/sensor/translations/moon.pt.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.pt.json rename to homeassistant/components/sensor/translations/moon.pt.json diff --git a/homeassistant/components/sensor/.translations/moon.ro.json b/homeassistant/components/sensor/translations/moon.ro.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.ro.json rename to homeassistant/components/sensor/translations/moon.ro.json diff --git a/homeassistant/components/sensor/.translations/moon.ru.json b/homeassistant/components/sensor/translations/moon.ru.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.ru.json rename to homeassistant/components/sensor/translations/moon.ru.json diff --git a/homeassistant/components/sensor/.translations/moon.sl.json b/homeassistant/components/sensor/translations/moon.sl.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.sl.json rename to homeassistant/components/sensor/translations/moon.sl.json diff --git a/homeassistant/components/sensor/.translations/moon.sv.json b/homeassistant/components/sensor/translations/moon.sv.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.sv.json rename to homeassistant/components/sensor/translations/moon.sv.json diff --git a/homeassistant/components/sensor/.translations/moon.th.json b/homeassistant/components/sensor/translations/moon.th.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.th.json rename to homeassistant/components/sensor/translations/moon.th.json diff --git a/homeassistant/components/sensor/.translations/moon.uk.json b/homeassistant/components/sensor/translations/moon.uk.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.uk.json rename to homeassistant/components/sensor/translations/moon.uk.json diff --git a/homeassistant/components/sensor/.translations/moon.zh-Hans.json b/homeassistant/components/sensor/translations/moon.zh-Hans.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.zh-Hans.json rename to homeassistant/components/sensor/translations/moon.zh-Hans.json diff --git a/homeassistant/components/sensor/.translations/moon.zh-Hant.json b/homeassistant/components/sensor/translations/moon.zh-Hant.json similarity index 100% rename from homeassistant/components/sensor/.translations/moon.zh-Hant.json rename to homeassistant/components/sensor/translations/moon.zh-Hant.json diff --git a/homeassistant/components/sensor/translations/nb.json b/homeassistant/components/sensor/translations/nb.json new file mode 100644 index 00000000000..28122450085 --- /dev/null +++ b/homeassistant/components/sensor/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/nl.json b/homeassistant/components/sensor/translations/nl.json new file mode 100644 index 00000000000..7b4c1e71d57 --- /dev/null +++ b/homeassistant/components/sensor/translations/nl.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Huidige batterijniveau {entity_name}", + "is_humidity": "Huidige {entity_name} vochtigheidsgraad", + "is_illuminance": "Huidige {entity_name} verlichtingssterkte", + "is_power": "Huidige {entity_name}\nvermogen", + "is_pressure": "Huidige {entity_name} druk", + "is_signal_strength": "Huidige {entity_name} signaalsterkte", + "is_temperature": "Huidige {entity_name} temperatuur", + "is_timestamp": "Huidige {entity_name} tijdstip", + "is_value": "Huidige {entity_name} waarde" + }, + "trigger_type": { + "battery_level": "{entity_name} batterijniveau gewijzigd", + "humidity": "{entity_name} vochtigheidsgraad gewijzigd", + "illuminance": "{entity_name} verlichtingssterkte gewijzigd", + "power": "{entity_name} vermogen gewijzigd", + "pressure": "{entity_name} druk gewijzigd", + "signal_strength": "{entity_name} signaalsterkte gewijzigd", + "temperature": "{entity_name} temperatuur gewijzigd", + "timestamp": "{entity_name} tijdstip gewijzigd", + "value": "{entity_name} waarde gewijzigd" + } + }, + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/nn.json b/homeassistant/components/sensor/translations/nn.json new file mode 100644 index 00000000000..8b749ff13e8 --- /dev/null +++ b/homeassistant/components/sensor/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/no.json b/homeassistant/components/sensor/translations/no.json new file mode 100644 index 00000000000..e09aa8dead0 --- /dev/null +++ b/homeassistant/components/sensor/translations/no.json @@ -0,0 +1,27 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Gjeldende {entity_name} batteriniv\u00e5", + "is_humidity": "Gjeldende {entity_name} fuktighet", + "is_illuminance": "Gjeldende {entity_name} belysningsstyrke", + "is_power": "Gjeldende {entity_name}-effekt", + "is_pressure": "Gjeldende {entity_name} trykk", + "is_signal_strength": "Gjeldende {entity_name} signalstyrke", + "is_temperature": "Gjeldende {entity_name} temperatur", + "is_timestamp": "Gjeldende {entity_name} tidsstempel", + "is_value": "Gjeldende {entity_name} verdi" + }, + "trigger_type": { + "battery_level": "{entity_name} batteriniv\u00e5 endres", + "humidity": "{entity_name} fuktighets endringer", + "illuminance": "{entity_name} belysningsstyrke endringer", + "power": "{entity_name} effektendringer", + "pressure": "{entity_name} trykk endringer", + "signal_strength": "{entity_name} signalstyrkeendringer", + "temperature": "{entity_name} temperaturendringer", + "timestamp": "{entity_name} tidsstempel endringer", + "value": "{entity_name} verdi endringer" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/pl.json b/homeassistant/components/sensor/translations/pl.json new file mode 100644 index 00000000000..84c32d8dc9a --- /dev/null +++ b/homeassistant/components/sensor/translations/pl.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "obecny poziom na\u0142adowania baterii {entity_name}", + "is_humidity": "obecna wilgotno\u015b\u0107 {entity_name}", + "is_illuminance": "obecne nat\u0119\u017cenie o\u015bwietlenia {entity_name}", + "is_power": "obecna moc {entity_name}", + "is_pressure": "obecne ci\u015bnienie {entity_name}", + "is_signal_strength": "obecna si\u0142a sygna\u0142u {entity_name}", + "is_temperature": "obecna temperatura {entity_name}", + "is_timestamp": "obecny znacznik czasu {entity_name}", + "is_value": "obecna warto\u015b\u0107 {entity_name}" + }, + "trigger_type": { + "battery_level": "zmieni si\u0119 poziom baterii {entity_name}", + "humidity": "zmieni si\u0119 wilgotno\u015b\u0107 {entity_name}", + "illuminance": "zmieni si\u0119 nat\u0119\u017cenie o\u015bwietlenia {entity_name}", + "power": "zmieni si\u0119 moc {entity_name}", + "pressure": "zmieni si\u0119 ci\u015bnienie {entity_name}", + "signal_strength": "zmieni si\u0119 si\u0142a sygna\u0142u {entity_name}", + "temperature": "zmieni si\u0119 temperatura {entity_name}", + "timestamp": "zmieni si\u0119 znacznik czasu {entity_name}", + "value": "zmieni si\u0119 warto\u015b\u0107 {entity_name}" + } + }, + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/pt-BR.json b/homeassistant/components/sensor/translations/pt-BR.json new file mode 100644 index 00000000000..5da527abbab --- /dev/null +++ b/homeassistant/components/sensor/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/pt.json b/homeassistant/components/sensor/translations/pt.json new file mode 100644 index 00000000000..94a516b8aef --- /dev/null +++ b/homeassistant/components/sensor/translations/pt.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "N\u00edvel de bateria atual de {entity_name}", + "is_humidity": "humidade {entity_name}", + "is_illuminance": "Luminancia atual de {entity_name}", + "is_power": "Pot\u00eancia atual de {entity_name}", + "is_pressure": "Press\u00e3o atual de {entity_name}", + "is_signal_strength": "Intensidade atual do sinal de {entity_name}", + "is_temperature": "Temperatura atual de {entity_name}", + "is_timestamp": "momento temporal de {entity_name}", + "is_value": "valor {entity_name}" + }, + "trigger_type": { + "battery_level": "n\u00edvel da bateria {entity_name}", + "humidity": "humidade {entity_name}", + "illuminance": "ilumin\u00e2ncia {entity_name}", + "power": "pot\u00eancia {entity_name}", + "pressure": "press\u00e3o {entity_name}", + "signal_strength": "for\u00e7a do sinal de {entity_name}", + "temperature": "temperatura de {entity_name}", + "timestamp": "momento temporal de {entity_name}", + "value": "valor {entity_name}" + } + }, + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ro.json b/homeassistant/components/sensor/translations/ro.json new file mode 100644 index 00000000000..dbced7ecbea --- /dev/null +++ b/homeassistant/components/sensor/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Senzor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ru.json b/homeassistant/components/sensor/translations/ru.json new file mode 100644 index 00000000000..576affdf40d --- /dev/null +++ b/homeassistant/components/sensor/translations/ru.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_humidity": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_illuminance": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_power": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_pressure": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_signal_strength": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_temperature": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_timestamp": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "is_value": "{entity_name} \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435" + }, + "trigger_type": { + "battery_level": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "humidity": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "illuminance": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "power": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "pressure": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "signal_strength": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "temperature": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "timestamp": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435", + "value": "{entity_name} \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435" + } + }, + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u0421\u0435\u043d\u0441\u043e\u0440" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/season.af.json b/homeassistant/components/sensor/translations/season.af.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.af.json rename to homeassistant/components/sensor/translations/season.af.json diff --git a/homeassistant/components/sensor/.translations/season.bg.json b/homeassistant/components/sensor/translations/season.bg.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.bg.json rename to homeassistant/components/sensor/translations/season.bg.json diff --git a/homeassistant/components/sensor/.translations/season.ca.json b/homeassistant/components/sensor/translations/season.ca.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.ca.json rename to homeassistant/components/sensor/translations/season.ca.json diff --git a/homeassistant/components/sensor/.translations/season.cs.json b/homeassistant/components/sensor/translations/season.cs.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.cs.json rename to homeassistant/components/sensor/translations/season.cs.json diff --git a/homeassistant/components/sensor/.translations/season.cy.json b/homeassistant/components/sensor/translations/season.cy.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.cy.json rename to homeassistant/components/sensor/translations/season.cy.json diff --git a/homeassistant/components/sensor/.translations/season.da.json b/homeassistant/components/sensor/translations/season.da.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.da.json rename to homeassistant/components/sensor/translations/season.da.json diff --git a/homeassistant/components/sensor/.translations/season.de.json b/homeassistant/components/sensor/translations/season.de.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.de.json rename to homeassistant/components/sensor/translations/season.de.json diff --git a/homeassistant/components/sensor/.translations/season.en.json b/homeassistant/components/sensor/translations/season.en.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.en.json rename to homeassistant/components/sensor/translations/season.en.json diff --git a/homeassistant/components/sensor/.translations/season.es-419.json b/homeassistant/components/sensor/translations/season.es-419.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.es-419.json rename to homeassistant/components/sensor/translations/season.es-419.json diff --git a/homeassistant/components/sensor/.translations/season.es.json b/homeassistant/components/sensor/translations/season.es.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.es.json rename to homeassistant/components/sensor/translations/season.es.json diff --git a/homeassistant/components/sensor/.translations/season.et.json b/homeassistant/components/sensor/translations/season.et.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.et.json rename to homeassistant/components/sensor/translations/season.et.json diff --git a/homeassistant/components/sensor/.translations/season.eu.json b/homeassistant/components/sensor/translations/season.eu.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.eu.json rename to homeassistant/components/sensor/translations/season.eu.json diff --git a/homeassistant/components/sensor/.translations/season.fi.json b/homeassistant/components/sensor/translations/season.fi.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.fi.json rename to homeassistant/components/sensor/translations/season.fi.json diff --git a/homeassistant/components/sensor/.translations/season.fr.json b/homeassistant/components/sensor/translations/season.fr.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.fr.json rename to homeassistant/components/sensor/translations/season.fr.json diff --git a/homeassistant/components/sensor/.translations/season.he.json b/homeassistant/components/sensor/translations/season.he.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.he.json rename to homeassistant/components/sensor/translations/season.he.json diff --git a/homeassistant/components/sensor/.translations/season.hr.json b/homeassistant/components/sensor/translations/season.hr.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.hr.json rename to homeassistant/components/sensor/translations/season.hr.json diff --git a/homeassistant/components/sensor/.translations/season.hu.json b/homeassistant/components/sensor/translations/season.hu.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.hu.json rename to homeassistant/components/sensor/translations/season.hu.json diff --git a/homeassistant/components/sensor/.translations/season.id.json b/homeassistant/components/sensor/translations/season.id.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.id.json rename to homeassistant/components/sensor/translations/season.id.json diff --git a/homeassistant/components/sensor/.translations/season.it.json b/homeassistant/components/sensor/translations/season.it.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.it.json rename to homeassistant/components/sensor/translations/season.it.json diff --git a/homeassistant/components/sensor/.translations/season.ja.json b/homeassistant/components/sensor/translations/season.ja.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.ja.json rename to homeassistant/components/sensor/translations/season.ja.json diff --git a/homeassistant/components/sensor/.translations/season.ko.json b/homeassistant/components/sensor/translations/season.ko.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.ko.json rename to homeassistant/components/sensor/translations/season.ko.json diff --git a/homeassistant/components/sensor/.translations/season.lb.json b/homeassistant/components/sensor/translations/season.lb.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.lb.json rename to homeassistant/components/sensor/translations/season.lb.json diff --git a/homeassistant/components/sensor/.translations/season.lv.json b/homeassistant/components/sensor/translations/season.lv.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.lv.json rename to homeassistant/components/sensor/translations/season.lv.json diff --git a/homeassistant/components/sensor/.translations/season.nl.json b/homeassistant/components/sensor/translations/season.nl.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.nl.json rename to homeassistant/components/sensor/translations/season.nl.json diff --git a/homeassistant/components/sensor/.translations/season.nn.json b/homeassistant/components/sensor/translations/season.nn.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.nn.json rename to homeassistant/components/sensor/translations/season.nn.json diff --git a/homeassistant/components/sensor/.translations/season.no.json b/homeassistant/components/sensor/translations/season.no.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.no.json rename to homeassistant/components/sensor/translations/season.no.json diff --git a/homeassistant/components/sensor/.translations/season.pl.json b/homeassistant/components/sensor/translations/season.pl.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.pl.json rename to homeassistant/components/sensor/translations/season.pl.json diff --git a/homeassistant/components/sensor/.translations/season.pt-BR.json b/homeassistant/components/sensor/translations/season.pt-BR.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.pt-BR.json rename to homeassistant/components/sensor/translations/season.pt-BR.json diff --git a/homeassistant/components/sensor/.translations/season.pt.json b/homeassistant/components/sensor/translations/season.pt.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.pt.json rename to homeassistant/components/sensor/translations/season.pt.json diff --git a/homeassistant/components/sensor/.translations/season.ro.json b/homeassistant/components/sensor/translations/season.ro.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.ro.json rename to homeassistant/components/sensor/translations/season.ro.json diff --git a/homeassistant/components/sensor/.translations/season.ru.json b/homeassistant/components/sensor/translations/season.ru.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.ru.json rename to homeassistant/components/sensor/translations/season.ru.json diff --git a/homeassistant/components/sensor/.translations/season.sl.json b/homeassistant/components/sensor/translations/season.sl.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.sl.json rename to homeassistant/components/sensor/translations/season.sl.json diff --git a/homeassistant/components/sensor/.translations/season.sv.json b/homeassistant/components/sensor/translations/season.sv.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.sv.json rename to homeassistant/components/sensor/translations/season.sv.json diff --git a/homeassistant/components/sensor/.translations/season.th.json b/homeassistant/components/sensor/translations/season.th.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.th.json rename to homeassistant/components/sensor/translations/season.th.json diff --git a/homeassistant/components/sensor/.translations/season.uk.json b/homeassistant/components/sensor/translations/season.uk.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.uk.json rename to homeassistant/components/sensor/translations/season.uk.json diff --git a/homeassistant/components/sensor/.translations/season.vi.json b/homeassistant/components/sensor/translations/season.vi.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.vi.json rename to homeassistant/components/sensor/translations/season.vi.json diff --git a/homeassistant/components/sensor/.translations/season.zh-Hans.json b/homeassistant/components/sensor/translations/season.zh-Hans.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.zh-Hans.json rename to homeassistant/components/sensor/translations/season.zh-Hans.json diff --git a/homeassistant/components/sensor/.translations/season.zh-Hant.json b/homeassistant/components/sensor/translations/season.zh-Hant.json similarity index 100% rename from homeassistant/components/sensor/.translations/season.zh-Hant.json rename to homeassistant/components/sensor/translations/season.zh-Hant.json diff --git a/homeassistant/components/sensor/translations/sk.json b/homeassistant/components/sensor/translations/sk.json new file mode 100644 index 00000000000..8f3507f56c1 --- /dev/null +++ b/homeassistant/components/sensor/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neakt\u00edvny", + "on": "Akt\u00edvny" + } + }, + "title": "Senzor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/sl.json b/homeassistant/components/sensor/translations/sl.json new file mode 100644 index 00000000000..0a8a3454584 --- /dev/null +++ b/homeassistant/components/sensor/translations/sl.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Trenutna raven baterije {entity_name}", + "is_humidity": "Trenutna vla\u017enost {entity_name}", + "is_illuminance": "Trenutna svetilnost {entity_name}", + "is_power": "Trenutna mo\u010d {entity_name}", + "is_pressure": "Trenutni tlak {entity_name}", + "is_signal_strength": "Trenutna jakost signala {entity_name}", + "is_temperature": "Trenutna temperatura {entity_name}", + "is_timestamp": "Trenutni {entity_name} \u010dasovni \u017eig", + "is_value": "Trenutna vrednost {entity_name}" + }, + "trigger_type": { + "battery_level": "{entity_name} spremembe ravni baterije", + "humidity": "{entity_name} spremembe vla\u017enosti", + "illuminance": "{entity_name} spremembe osvetlitve", + "power": "{entity_name} spremembe mo\u010di", + "pressure": "{entity_name} spremembe tlaka", + "signal_strength": "{entity_name} spremembe mo\u010di signala", + "temperature": "{entity_name} spremembe temperatur", + "timestamp": "{entity_name} spremembe \u010dasovnega \u017eiga", + "value": "{entity_name} spremembe vrednosti" + } + }, + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Senzor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/sv.json b/homeassistant/components/sensor/translations/sv.json new file mode 100644 index 00000000000..855034e690a --- /dev/null +++ b/homeassistant/components/sensor/translations/sv.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "Aktuell {entity_name} batteriniv\u00e5", + "is_humidity": "Aktuell {entity_name} fuktighet", + "is_illuminance": "Aktuell {entity_name} belysning", + "is_power": "Aktuell {entity_name} str\u00f6m", + "is_pressure": "Aktuellt {entity_name} tryck", + "is_signal_strength": "Aktuell {entity_name} signalstyrka", + "is_temperature": "Aktuell {entity_name} temperatur", + "is_timestamp": "Aktuell {entity_name} tidsst\u00e4mpel", + "is_value": "Aktuellt {entity_name} v\u00e4rde" + }, + "trigger_type": { + "battery_level": "{entity_name} batteriniv\u00e5 \u00e4ndras", + "humidity": "{entity_name} fuktighet \u00e4ndras", + "illuminance": "{entity_name} belysning \u00e4ndras", + "power": "{entity_name} str\u00f6mf\u00f6r\u00e4ndringar", + "pressure": "{entity_name} tryckf\u00f6r\u00e4ndringar", + "signal_strength": "{entity_name} signalstyrka \u00e4ndras", + "temperature": "{entity_name} temperaturf\u00f6r\u00e4ndringar", + "timestamp": "{entity_name} tidst\u00e4mpel \u00e4ndras", + "value": "{entity_name} v\u00e4rde \u00e4ndras" + } + }, + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Sensor" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/ta.json b/homeassistant/components/sensor/translations/ta.json new file mode 100644 index 00000000000..02926b1fd6b --- /dev/null +++ b/homeassistant/components/sensor/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd" + } + }, + "title": "\u0b9a\u0bc6\u0ba9\u0bcd\u0b9a\u0bbe\u0bb0\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/te.json b/homeassistant/components/sensor/translations/te.json new file mode 100644 index 00000000000..3d4314e2a2e --- /dev/null +++ b/homeassistant/components/sensor/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c38\u0c46\u0c28\u0c4d\u0c38\u0c30\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/th.json b/homeassistant/components/sensor/translations/th.json new file mode 100644 index 00000000000..c6cf55151ff --- /dev/null +++ b/homeassistant/components/sensor/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/tr.json b/homeassistant/components/sensor/translations/tr.json new file mode 100644 index 00000000000..3bf1ba6f368 --- /dev/null +++ b/homeassistant/components/sensor/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Sens\u00f6r" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/uk.json b/homeassistant/components/sensor/translations/uk.json new file mode 100644 index 00000000000..56e587bb44c --- /dev/null +++ b/homeassistant/components/sensor/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u0414\u0430\u0442\u0447\u0438\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/vi.json b/homeassistant/components/sensor/translations/vi.json new file mode 100644 index 00000000000..ac69b2319f2 --- /dev/null +++ b/homeassistant/components/sensor/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "C\u1ea3m bi\u1ebfn" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/zh-Hans.json b/homeassistant/components/sensor/translations/zh-Hans.json new file mode 100644 index 00000000000..44f3b415d4d --- /dev/null +++ b/homeassistant/components/sensor/translations/zh-Hans.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "{entity_name} \u5f53\u524d\u7684\u7535\u6c60\u7535\u91cf", + "is_humidity": "{entity_name} \u5f53\u524d\u7684\u6e7f\u5ea6", + "is_illuminance": "{entity_name} \u5f53\u524d\u7684\u5149\u7167\u5f3a\u5ea6", + "is_power": "{entity_name} \u5f53\u524d\u7684\u529f\u7387", + "is_pressure": "{entity_name} \u5f53\u524d\u7684\u538b\u529b", + "is_signal_strength": "{entity_name} \u5f53\u524d\u7684\u4fe1\u53f7\u5f3a\u5ea6", + "is_temperature": "{entity_name} \u5f53\u524d\u7684\u6e29\u5ea6", + "is_timestamp": "{entity_name} \u5f53\u524d\u7684\u65f6\u95f4\u6233", + "is_value": "{entity_name} \u5f53\u524d\u7684\u503c" + }, + "trigger_type": { + "battery_level": "{entity_name} \u7684\u7535\u6c60\u7535\u91cf\u53d8\u5316", + "humidity": "{entity_name} \u7684\u6e7f\u5ea6\u53d8\u5316", + "illuminance": "{entity_name} \u7684\u5149\u7167\u5f3a\u5ea6\u53d8\u5316", + "power": "{entity_name} \u7684\u529f\u7387\u53d8\u5316", + "pressure": "{entity_name} \u7684\u538b\u529b\u53d8\u5316", + "signal_strength": "{entity_name} \u7684\u4fe1\u53f7\u5f3a\u5ea6\u53d8\u5316", + "temperature": "{entity_name} \u7684\u6e29\u5ea6\u53d8\u5316", + "timestamp": "{entity_name} \u7684\u65f6\u95f4\u6233\u53d8\u5316", + "value": "{entity_name} \u7684\u503c\u53d8\u5316" + } + }, + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u4f20\u611f\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/sensor/translations/zh-Hant.json b/homeassistant/components/sensor/translations/zh-Hant.json new file mode 100644 index 00000000000..20221a91d60 --- /dev/null +++ b/homeassistant/components/sensor/translations/zh-Hant.json @@ -0,0 +1,33 @@ +{ + "device_automation": { + "condition_type": { + "is_battery_level": "\u76ee\u524d{entity_name}\u96fb\u91cf", + "is_humidity": "\u76ee\u524d{entity_name}\u6fd5\u5ea6", + "is_illuminance": "\u76ee\u524d{entity_name}\u7167\u5ea6", + "is_power": "\u76ee\u524d{entity_name}\u96fb\u529b", + "is_pressure": "\u76ee\u524d{entity_name}\u58d3\u529b", + "is_signal_strength": "\u76ee\u524d{entity_name}\u8a0a\u865f\u5f37\u5ea6", + "is_temperature": "\u76ee\u524d{entity_name}\u6eab\u5ea6", + "is_timestamp": "\u76ee\u524d{entity_name}\u6642\u9593\u6a19\u8a18", + "is_value": "\u76ee\u524d{entity_name}\u503c" + }, + "trigger_type": { + "battery_level": "{entity_name}\u96fb\u91cf\u8b8a\u66f4", + "humidity": "{entity_name}\u6fd5\u5ea6\u8b8a\u66f4", + "illuminance": "{entity_name}\u7167\u5ea6\u8b8a\u66f4", + "power": "{entity_name}\u96fb\u529b\u8b8a\u66f4", + "pressure": "{entity_name}\u58d3\u529b\u8b8a\u66f4", + "signal_strength": "{entity_name}\u8a0a\u865f\u5f37\u5ea6\u8b8a\u66f4", + "temperature": "{entity_name}\u6eab\u5ea6\u8b8a\u66f4", + "timestamp": "{entity_name}\u6642\u9593\u6a19\u8a18\u8b8a\u66f4", + "value": "{entity_name}\u503c\u8b8a\u66f4" + } + }, + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u5553" + } + }, + "title": "\u50b3\u611f\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/af.json b/homeassistant/components/sentry/.translations/af.json deleted file mode 100644 index 61ef8f8d389..00000000000 --- a/homeassistant/components/sentry/.translations/af.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/ca.json b/homeassistant/components/sentry/.translations/ca.json deleted file mode 100644 index cf0ca26fdd3..00000000000 --- a/homeassistant/components/sentry/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry ja est\u00e0 configurat" - }, - "error": { - "bad_dsn": "DSN inv\u00e0lid", - "unknown": "Error inesperat" - }, - "step": { - "user": { - "description": "Introdueix el DSN de Sentry", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/da.json b/homeassistant/components/sentry/.translations/da.json deleted file mode 100644 index 7377dfd8aea..00000000000 --- a/homeassistant/components/sentry/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry er allerede konfigureret" - }, - "error": { - "bad_dsn": "Ugyldigt DSN", - "unknown": "Uventet fejl" - }, - "step": { - "user": { - "description": "Indtast dit Sentry-DSN", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/de.json b/homeassistant/components/sentry/.translations/de.json deleted file mode 100644 index db71d8818bc..00000000000 --- a/homeassistant/components/sentry/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry ist bereits konfiguriert" - }, - "error": { - "bad_dsn": "Ung\u00fcltiger DSN", - "unknown": "Unerwarteter Fehler" - }, - "step": { - "user": { - "description": "Gib deine Sentry-DSN ein", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/en.json b/homeassistant/components/sentry/.translations/en.json deleted file mode 100644 index 4d37438ff3f..00000000000 --- a/homeassistant/components/sentry/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry is already configured" - }, - "error": { - "bad_dsn": "Invalid DSN", - "unknown": "Unexpected error" - }, - "step": { - "user": { - "description": "Enter your Sentry DSN", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/es.json b/homeassistant/components/sentry/.translations/es.json deleted file mode 100644 index 7951076a95e..00000000000 --- a/homeassistant/components/sentry/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry ya est\u00e1 configurado" - }, - "error": { - "bad_dsn": "DSN no v\u00e1lido", - "unknown": "Error inesperado" - }, - "step": { - "user": { - "description": "Introduzca su DSN Sentry", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/fr.json b/homeassistant/components/sentry/.translations/fr.json deleted file mode 100644 index 7702874866a..00000000000 --- a/homeassistant/components/sentry/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "bad_dsn": "DSN invalide", - "unknown": "Erreur inattendue" - }, - "step": { - "user": { - "description": "Entrez votre DSN Sentry", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/hu.json b/homeassistant/components/sentry/.translations/hu.json deleted file mode 100644 index 64318828e6d..00000000000 --- a/homeassistant/components/sentry/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Az Sentry m\u00e1r konfigur\u00e1lva van" - }, - "error": { - "bad_dsn": "\u00c9rv\u00e9nytelen DSN", - "unknown": "V\u00e1ratlan hiba" - }, - "step": { - "user": { - "description": "Add meg a Sentry DSN-t", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/it.json b/homeassistant/components/sentry/.translations/it.json deleted file mode 100644 index 4d0cd3178e7..00000000000 --- a/homeassistant/components/sentry/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry \u00e8 gi\u00e0 configurato" - }, - "error": { - "bad_dsn": "DSN non valido", - "unknown": "Errore imprevisto" - }, - "step": { - "user": { - "description": "Inserisci il tuo DSN Sentry", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/ko.json b/homeassistant/components/sentry/.translations/ko.json deleted file mode 100644 index b0dde032b73..00000000000 --- a/homeassistant/components/sentry/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "bad_dsn": "DSN \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": { - "description": "Sentry DSN \uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/lb.json b/homeassistant/components/sentry/.translations/lb.json deleted file mode 100644 index e91f57a1585..00000000000 --- a/homeassistant/components/sentry/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry ass scho konfigur\u00e9iert" - }, - "error": { - "bad_dsn": "Ong\u00eblteg DSN", - "unknown": "Onerwaarte Feeler" - }, - "step": { - "user": { - "description": "Gitt \u00e4r Sentry DSN un", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/nl.json b/homeassistant/components/sentry/.translations/nl.json deleted file mode 100644 index 67bd1ea54e2..00000000000 --- a/homeassistant/components/sentry/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry is al geconfigureerd" - }, - "error": { - "bad_dsn": "Ongeldige DSN", - "unknown": "Onverwachte fout" - }, - "step": { - "user": { - "description": "Voer uw Sentry DSN in", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/no.json b/homeassistant/components/sentry/.translations/no.json deleted file mode 100644 index 36ce52f74ea..00000000000 --- a/homeassistant/components/sentry/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry er allerede konfigurert" - }, - "error": { - "bad_dsn": "Ugyldig datakildenavn (DSN)", - "unknown": "Uventet feil" - }, - "step": { - "user": { - "description": "Fyll inn din Sentry DNS", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/pl.json b/homeassistant/components/sentry/.translations/pl.json deleted file mode 100644 index d97fa159a87..00000000000 --- a/homeassistant/components/sentry/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry jest ju\u017c skonfigurowane." - }, - "error": { - "bad_dsn": "Nieprawid\u0142owy DSN", - "unknown": "Niespodziewany b\u0142\u0105d" - }, - "step": { - "user": { - "description": "Wprowad\u017a DSN Sentry", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/ru.json b/homeassistant/components/sentry/.translations/ru.json deleted file mode 100644 index ada10db6c82..00000000000 --- a/homeassistant/components/sentry/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "bad_dsn": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 DSN.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448 DSN Sentry", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/sl.json b/homeassistant/components/sentry/.translations/sl.json deleted file mode 100644 index b99381722ad..00000000000 --- a/homeassistant/components/sentry/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry je \u017ee nastavljen" - }, - "error": { - "bad_dsn": "Neveljaven DSN", - "unknown": "Nepri\u010dakovana napaka" - }, - "step": { - "user": { - "description": "Vpi\u0161ite va\u0161 Sentry DSN", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/sv.json b/homeassistant/components/sentry/.translations/sv.json deleted file mode 100644 index 7f0968e7dbe..00000000000 --- a/homeassistant/components/sentry/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry har redan konfigurerats" - }, - "error": { - "bad_dsn": "Ogiltig DSN", - "unknown": "Ov\u00e4ntat fel" - }, - "step": { - "user": { - "description": "Ange din Sentry DSN", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/zh-Hant.json b/homeassistant/components/sentry/.translations/zh-Hant.json deleted file mode 100644 index f1599b58be6..00000000000 --- a/homeassistant/components/sentry/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Sentry \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "bad_dsn": "DSN \u7121\u6548", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" - }, - "step": { - "user": { - "description": "\u8f38\u5165 Sentry DSN", - "title": "Sentry" - } - }, - "title": "Sentry" - } -} \ No newline at end of file diff --git a/homeassistant/components/sentry/manifest.json b/homeassistant/components/sentry/manifest.json index 6a7428f7ea1..12c808b6d7b 100644 --- a/homeassistant/components/sentry/manifest.json +++ b/homeassistant/components/sentry/manifest.json @@ -4,9 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/sentry", "requirements": ["sentry-sdk==0.13.5"], - "ssdp": [], - "zeroconf": [], - "homekit": {}, - "dependencies": [], "codeowners": ["@dcramer"] } diff --git a/homeassistant/components/sentry/strings.json b/homeassistant/components/sentry/strings.json index 8d5042731ca..97a945a5a9d 100644 --- a/homeassistant/components/sentry/strings.json +++ b/homeassistant/components/sentry/strings.json @@ -1,18 +1,9 @@ { "config": { - "title": "Sentry", "step": { - "user": { - "title": "Sentry", - "description": "Enter your Sentry DSN" - } + "user": { "title": "Sentry", "description": "Enter your Sentry DSN" } }, - "error": { - "unknown": "Unexpected error", - "bad_dsn": "Invalid DSN" - }, - "abort": { - "already_configured": "Sentry is already configured" - } + "error": { "unknown": "Unexpected error", "bad_dsn": "Invalid DSN" }, + "abort": { "already_configured": "Sentry is already configured" } } } diff --git a/homeassistant/components/sentry/translations/af.json b/homeassistant/components/sentry/translations/af.json new file mode 100644 index 00000000000..7db651b6b96 --- /dev/null +++ b/homeassistant/components/sentry/translations/af.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/ca.json b/homeassistant/components/sentry/translations/ca.json new file mode 100644 index 00000000000..43302714b97 --- /dev/null +++ b/homeassistant/components/sentry/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry ja est\u00e0 configurat" + }, + "error": { + "bad_dsn": "DSN inv\u00e0lid", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "description": "Introdueix el DSN de Sentry", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/da.json b/homeassistant/components/sentry/translations/da.json new file mode 100644 index 00000000000..c84a80d0ccb --- /dev/null +++ b/homeassistant/components/sentry/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry er allerede konfigureret" + }, + "error": { + "bad_dsn": "Ugyldigt DSN", + "unknown": "Uventet fejl" + }, + "step": { + "user": { + "description": "Indtast dit Sentry-DSN", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/de.json b/homeassistant/components/sentry/translations/de.json new file mode 100644 index 00000000000..5d6e27bd737 --- /dev/null +++ b/homeassistant/components/sentry/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry ist bereits konfiguriert" + }, + "error": { + "bad_dsn": "Ung\u00fcltiger DSN", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "description": "Gib deine Sentry-DSN ein", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/en.json b/homeassistant/components/sentry/translations/en.json new file mode 100644 index 00000000000..13387488ea6 --- /dev/null +++ b/homeassistant/components/sentry/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry is already configured" + }, + "error": { + "bad_dsn": "Invalid DSN", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "description": "Enter your Sentry DSN", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/es.json b/homeassistant/components/sentry/translations/es.json new file mode 100644 index 00000000000..445d7566240 --- /dev/null +++ b/homeassistant/components/sentry/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry ya est\u00e1 configurado" + }, + "error": { + "bad_dsn": "DSN no v\u00e1lido", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "description": "Introduzca su DSN Sentry", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/fr.json b/homeassistant/components/sentry/translations/fr.json new file mode 100644 index 00000000000..fce57ec4b9c --- /dev/null +++ b/homeassistant/components/sentry/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "bad_dsn": "DSN invalide", + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "description": "Entrez votre DSN Sentry", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/hu.json b/homeassistant/components/sentry/translations/hu.json new file mode 100644 index 00000000000..d79de976a83 --- /dev/null +++ b/homeassistant/components/sentry/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Az Sentry m\u00e1r konfigur\u00e1lva van" + }, + "error": { + "bad_dsn": "\u00c9rv\u00e9nytelen DSN", + "unknown": "V\u00e1ratlan hiba" + }, + "step": { + "user": { + "description": "Add meg a Sentry DSN-t", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/it.json b/homeassistant/components/sentry/translations/it.json new file mode 100644 index 00000000000..44090de0b62 --- /dev/null +++ b/homeassistant/components/sentry/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry \u00e8 gi\u00e0 configurato" + }, + "error": { + "bad_dsn": "DSN non valido", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "description": "Inserisci il tuo DSN Sentry", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/ko.json b/homeassistant/components/sentry/translations/ko.json new file mode 100644 index 00000000000..7e60891e166 --- /dev/null +++ b/homeassistant/components/sentry/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "bad_dsn": "DSN \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": { + "description": "Sentry DSN \uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/lb.json b/homeassistant/components/sentry/translations/lb.json new file mode 100644 index 00000000000..92baa5502d7 --- /dev/null +++ b/homeassistant/components/sentry/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry ass scho konfigur\u00e9iert" + }, + "error": { + "bad_dsn": "Ong\u00eblteg DSN", + "unknown": "Onerwaarte Feeler" + }, + "step": { + "user": { + "description": "Gitt \u00e4r Sentry DSN un", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/nl.json b/homeassistant/components/sentry/translations/nl.json new file mode 100644 index 00000000000..a3aae138232 --- /dev/null +++ b/homeassistant/components/sentry/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry is al geconfigureerd" + }, + "error": { + "bad_dsn": "Ongeldige DSN", + "unknown": "Onverwachte fout" + }, + "step": { + "user": { + "description": "Voer uw Sentry DSN in", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/no.json b/homeassistant/components/sentry/translations/no.json new file mode 100644 index 00000000000..26a469ce341 --- /dev/null +++ b/homeassistant/components/sentry/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry er allerede konfigurert" + }, + "error": { + "bad_dsn": "Ugyldig datakildenavn (DSN)", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "description": "Fyll inn din Sentry DNS", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/pl.json b/homeassistant/components/sentry/translations/pl.json new file mode 100644 index 00000000000..e9bf022b12c --- /dev/null +++ b/homeassistant/components/sentry/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry jest ju\u017c skonfigurowane." + }, + "error": { + "bad_dsn": "Nieprawid\u0142owy DSN", + "unknown": "Niespodziewany b\u0142\u0105d" + }, + "step": { + "user": { + "description": "Wprowad\u017a DSN Sentry", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/.translations/pt-BR.json b/homeassistant/components/sentry/translations/pt-BR.json similarity index 100% rename from homeassistant/components/sentry/.translations/pt-BR.json rename to homeassistant/components/sentry/translations/pt-BR.json diff --git a/homeassistant/components/sentry/translations/ru.json b/homeassistant/components/sentry/translations/ru.json new file mode 100644 index 00000000000..29ae44ca9eb --- /dev/null +++ b/homeassistant/components/sentry/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "bad_dsn": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 DSN.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0412\u0430\u0448 DSN Sentry", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/sl.json b/homeassistant/components/sentry/translations/sl.json new file mode 100644 index 00000000000..114eaa6c9f9 --- /dev/null +++ b/homeassistant/components/sentry/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry je \u017ee nastavljen" + }, + "error": { + "bad_dsn": "Neveljaven DSN", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "description": "Vpi\u0161ite va\u0161 Sentry DSN", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/sv.json b/homeassistant/components/sentry/translations/sv.json new file mode 100644 index 00000000000..1d07a82818c --- /dev/null +++ b/homeassistant/components/sentry/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry har redan konfigurerats" + }, + "error": { + "bad_dsn": "Ogiltig DSN", + "unknown": "Ov\u00e4ntat fel" + }, + "step": { + "user": { + "description": "Ange din Sentry DSN", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sentry/translations/zh-Hant.json b/homeassistant/components/sentry/translations/zh-Hant.json new file mode 100644 index 00000000000..277bff66dcb --- /dev/null +++ b/homeassistant/components/sentry/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Sentry \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "bad_dsn": "DSN \u7121\u6548", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "description": "\u8f38\u5165 Sentry DSN", + "title": "Sentry" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/serial/manifest.json b/homeassistant/components/serial/manifest.json index fa536a4c508..d8305d10553 100644 --- a/homeassistant/components/serial/manifest.json +++ b/homeassistant/components/serial/manifest.json @@ -3,6 +3,5 @@ "name": "Serial", "documentation": "https://www.home-assistant.io/integrations/serial", "requirements": ["pyserial-asyncio==0.4"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/serial/sensor.py b/homeassistant/components/serial/sensor.py index a08f9522c4b..905167ea3ff 100644 --- a/homeassistant/components/serial/sensor.py +++ b/homeassistant/components/serial/sensor.py @@ -1,12 +1,15 @@ """Support for reading data from a serial port.""" +import asyncio import json import logging +from serial import SerialException import serial_asyncio import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE, EVENT_HOMEASSISTANT_STOP +from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -40,7 +43,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= sensor = SerialSensor(name, port, baudrate, value_template) - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, sensor.stop_serial_read()) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, sensor.stop_serial_read) async_add_entities([sensor], True) @@ -55,7 +58,7 @@ class SerialSensor(Entity): self._baudrate = baudrate self._serial_loop_task = None self._template = value_template - self._attributes = [] + self._attributes = None async def async_added_to_hass(self): """Handle when an entity is about to be added to Home Assistant.""" @@ -65,28 +68,61 @@ class SerialSensor(Entity): async def serial_read(self, device, rate, **kwargs): """Read the data from the port.""" - reader, _ = await serial_asyncio.open_serial_connection( - url=device, baudrate=rate, **kwargs - ) + logged_error = False while True: - line = await reader.readline() - line = line.decode("utf-8").strip() - try: - data = json.loads(line) - if isinstance(data, dict): - self._attributes = data - except ValueError: - pass + reader, _ = await serial_asyncio.open_serial_connection( + url=device, baudrate=rate, **kwargs + ) + except SerialException as exc: + if not logged_error: + _LOGGER.exception( + "Unable to connect to the serial device %s: %s. Will retry", + device, + exc, + ) + logged_error = True + await self._handle_error() + else: + _LOGGER.info("Serial device %s connected", device) + while True: + try: + line = await reader.readline() + except SerialException as exc: + _LOGGER.exception( + "Error while reading serial device %s: %s", device, exc + ) + await self._handle_error() + break + else: + line = line.decode("utf-8").strip() - if self._template is not None: - line = self._template.async_render_with_possible_json_value(line) + try: + data = json.loads(line) + except ValueError: + pass + else: + if isinstance(data, dict): + self._attributes = data - _LOGGER.debug("Received: %s", line) - self._state = line - self.async_schedule_update_ha_state() + if self._template is not None: + line = self._template.async_render_with_possible_json_value( + line + ) - async def stop_serial_read(self): + _LOGGER.debug("Received: %s", line) + self._state = line + self.async_write_ha_state() + + async def _handle_error(self): + """Handle error for serial connection.""" + self._state = None + self._attributes = None + self.async_write_ha_state() + await asyncio.sleep(5) + + @callback + def stop_serial_read(self, event): """Close resources.""" if self._serial_loop_task: self._serial_loop_task.cancel() diff --git a/homeassistant/components/serial_pm/manifest.json b/homeassistant/components/serial_pm/manifest.json index 9e8f39ced79..b40090ca497 100644 --- a/homeassistant/components/serial_pm/manifest.json +++ b/homeassistant/components/serial_pm/manifest.json @@ -3,6 +3,5 @@ "name": "Serial Particulate Matter", "documentation": "https://www.home-assistant.io/integrations/serial_pm", "requirements": ["pmsensor==0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sesame/manifest.json b/homeassistant/components/sesame/manifest.json index 720e33b9cd9..0ba0fa8c8eb 100644 --- a/homeassistant/components/sesame/manifest.json +++ b/homeassistant/components/sesame/manifest.json @@ -3,6 +3,5 @@ "name": "Sesame Smart Lock", "documentation": "https://www.home-assistant.io/integrations/sesame", "requirements": ["pysesame2==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/seven_segments/image_processing.py b/homeassistant/components/seven_segments/image_processing.py index 315b5c39fec..4515ec7441b 100644 --- a/homeassistant/components/seven_segments/image_processing.py +++ b/homeassistant/components/seven_segments/image_processing.py @@ -69,14 +69,12 @@ class ImageProcessingSsocr(ImageProcessingEntity): if name: self._name = name else: - self._name = "SevenSegment OCR {0}".format( - split_entity_id(camera_entity)[1] - ) + self._name = "SevenSegment OCR {}".format(split_entity_id(camera_entity)[1]) self._state = None self.filepath = os.path.join( self.hass.config.config_dir, - "ssocr-{0}.png".format(self._name.replace(" ", "_")), + "ssocr-{}.png".format(self._name.replace(" ", "_")), ) crop = [ "crop", diff --git a/homeassistant/components/seven_segments/manifest.json b/homeassistant/components/seven_segments/manifest.json index eba33e75f71..ef155676d1f 100644 --- a/homeassistant/components/seven_segments/manifest.json +++ b/homeassistant/components/seven_segments/manifest.json @@ -2,9 +2,6 @@ "domain": "seven_segments", "name": "Seven Segments OCR", "documentation": "https://www.home-assistant.io/integrations/seven_segments", - "requirements": [ - "pillow==7.0.0" - ], - "dependencies": [], - "codeowners": [] -} \ No newline at end of file + "requirements": ["pillow==7.1.1"], + "codeowners": ["@fabaff"] +} diff --git a/homeassistant/components/seventeentrack/manifest.json b/homeassistant/components/seventeentrack/manifest.json index c5082b8c05f..2cec9dea954 100644 --- a/homeassistant/components/seventeentrack/manifest.json +++ b/homeassistant/components/seventeentrack/manifest.json @@ -3,6 +3,5 @@ "name": "17TRACK", "documentation": "https://www.home-assistant.io/integrations/seventeentrack", "requirements": ["py17track==2.2.2"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/seventeentrack/sensor.py b/homeassistant/components/seventeentrack/sensor.py index 000019abb51..53b16944cb2 100644 --- a/homeassistant/components/seventeentrack/sensor.py +++ b/homeassistant/components/seventeentrack/sensor.py @@ -130,7 +130,7 @@ class SeventeenTrackSummarySensor(Entity): @property def unique_id(self): """Return a unique, Home Assistant friendly identifier for this entity.""" - return "summary_{0}_{1}".format(self._data.account_id, slugify(self._status)) + return "summary_{}_{}".format(self._data.account_id, slugify(self._status)) @property def unit_of_measurement(self): diff --git a/homeassistant/components/shell_command/manifest.json b/homeassistant/components/shell_command/manifest.json index e05824a87a9..bdef9467d85 100644 --- a/homeassistant/components/shell_command/manifest.json +++ b/homeassistant/components/shell_command/manifest.json @@ -2,8 +2,6 @@ "domain": "shell_command", "name": "Shell Command", "documentation": "https://www.home-assistant.io/integrations/shell_command", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/shiftr/manifest.json b/homeassistant/components/shiftr/manifest.json index dc9ec618a79..79189e6b047 100644 --- a/homeassistant/components/shiftr/manifest.json +++ b/homeassistant/components/shiftr/manifest.json @@ -3,6 +3,5 @@ "name": "shiftr.io", "documentation": "https://www.home-assistant.io/integrations/shiftr", "requirements": ["paho-mqtt==1.5.0"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/shodan/manifest.json b/homeassistant/components/shodan/manifest.json index 86006191942..264ae3655f6 100644 --- a/homeassistant/components/shodan/manifest.json +++ b/homeassistant/components/shodan/manifest.json @@ -2,7 +2,6 @@ "domain": "shodan", "name": "Shodan", "documentation": "https://www.home-assistant.io/integrations/shodan", - "requirements": ["shodan==1.22.0"], - "dependencies": [], + "requirements": ["shodan==1.23.0"], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/shopping_list/.translations/ca.json b/homeassistant/components/shopping_list/.translations/ca.json deleted file mode 100644 index 541ee0c0e9c..00000000000 --- a/homeassistant/components/shopping_list/.translations/ca.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La llista de compres ja est\u00e0 configurada." - }, - "step": { - "user": { - "description": "Vols configurar la llista de compres?", - "title": "Llista de compres" - } - }, - "title": "Llista de compres" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/de.json b/homeassistant/components/shopping_list/.translations/de.json deleted file mode 100644 index 13638985ee2..00000000000 --- a/homeassistant/components/shopping_list/.translations/de.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Die Einkaufsliste ist bereits konfiguriert." - }, - "step": { - "user": { - "description": "M\u00f6chten Sie die Einkaufsliste konfigurieren?", - "title": "Einkaufsliste" - } - }, - "title": "Einkaufsliste" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/en.json b/homeassistant/components/shopping_list/.translations/en.json deleted file mode 100644 index 6a22409e8c6..00000000000 --- a/homeassistant/components/shopping_list/.translations/en.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "The shopping list is already configured." - }, - "step": { - "user": { - "description": "Do you want to configure the shopping list?", - "title": "Shopping List" - } - }, - "title": "Shopping List" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/es.json b/homeassistant/components/shopping_list/.translations/es.json deleted file mode 100644 index a2c89f0032f..00000000000 --- a/homeassistant/components/shopping_list/.translations/es.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La lista de la compra ya est\u00e1 configurada." - }, - "step": { - "user": { - "description": "\u00bfQuieres configurar la lista de la compra?", - "title": "Lista de la compra" - } - }, - "title": "Lista de la compra" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/fr.json b/homeassistant/components/shopping_list/.translations/fr.json deleted file mode 100644 index 05034e3e58e..00000000000 --- a/homeassistant/components/shopping_list/.translations/fr.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La liste d'achats est d\u00e9j\u00e0 configur\u00e9e." - }, - "step": { - "user": { - "description": "Voulez-vous configurer la liste d'achats ?", - "title": "Liste d'achats" - } - }, - "title": "Liste d\u2019achats" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/it.json b/homeassistant/components/shopping_list/.translations/it.json deleted file mode 100644 index ffd1c1d7f67..00000000000 --- a/homeassistant/components/shopping_list/.translations/it.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "La lista della spesa \u00e8 gi\u00e0 configurata." - }, - "step": { - "user": { - "description": "Vuoi configurare la lista della spesa?", - "title": "Lista della Spesa" - } - }, - "title": "Lista della Spesa" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/ko.json b/homeassistant/components/shopping_list/.translations/ko.json deleted file mode 100644 index 7885890d8b4..00000000000 --- a/homeassistant/components/shopping_list/.translations/ko.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc7a5\ubcf4\uae30\ubaa9\ub85d\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "description": "\uc7a5\ubcf4\uae30\ubaa9\ub85d\uc744 \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\uc7a5\ubcf4\uae30\ubaa9\ub85d" - } - }, - "title": "\uc7a5\ubcf4\uae30\ubaa9\ub85d" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/lb.json b/homeassistant/components/shopping_list/.translations/lb.json deleted file mode 100644 index 46f26637689..00000000000 --- a/homeassistant/components/shopping_list/.translations/lb.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Akafsl\u00ebscht ass scho konfigur\u00e9iert." - }, - "step": { - "user": { - "description": "Soll Akafsl\u00ebscht konfigur\u00e9iert ginn?", - "title": "Akafsl\u00ebscht" - } - }, - "title": "Akafsl\u00ebscht" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/no.json b/homeassistant/components/shopping_list/.translations/no.json deleted file mode 100644 index 7945f3b0d3f..00000000000 --- a/homeassistant/components/shopping_list/.translations/no.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Handlelisten er allerede konfigurert." - }, - "step": { - "user": { - "description": "\u00d8nsker du \u00e5 konfigurere handleliste?", - "title": "Handleliste" - } - }, - "title": "Handleliste" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/pl.json b/homeassistant/components/shopping_list/.translations/pl.json deleted file mode 100644 index d16122d0df9..00000000000 --- a/homeassistant/components/shopping_list/.translations/pl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Lista zakup\u00f3w jest ju\u017c skonfigurowana." - }, - "step": { - "user": { - "description": "Czy chcesz skonfigurowa\u0107 list\u0119 zakup\u00f3w?", - "title": "Lista zakup\u00f3w" - } - }, - "title": "Lista zakup\u00f3w" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/ru.json b/homeassistant/components/shopping_list/.translations/ru.json deleted file mode 100644 index e230421909d..00000000000 --- a/homeassistant/components/shopping_list/.translations/ru.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043a\u0443\u043f\u043e\u043a?", - "title": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043a\u0443\u043f\u043e\u043a" - } - }, - "title": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043a\u0443\u043f\u043e\u043a" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/sk.json b/homeassistant/components/shopping_list/.translations/sk.json deleted file mode 100644 index 857ef6488e5..00000000000 --- a/homeassistant/components/shopping_list/.translations/sk.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "N\u00e1kupn\u00fd zoznam je u\u017e nakonfigurovan\u00fd." - }, - "step": { - "user": { - "description": "Chcete nakonfigurova\u0165 n\u00e1kupn\u00fd zoznam?", - "title": "N\u00e1kupn\u00fd zoznam" - } - }, - "title": "N\u00e1kupn\u00fd zoznam" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/sl.json b/homeassistant/components/shopping_list/.translations/sl.json deleted file mode 100644 index f5d594ed6f5..00000000000 --- a/homeassistant/components/shopping_list/.translations/sl.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Nakupovalni seznam je \u017ee konfiguriran." - }, - "step": { - "user": { - "description": "Ali \u017eelite konfigurirati nakupovalni seznam?", - "title": "Nakupovalni seznam" - } - }, - "title": "Nakupovalni seznam" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/.translations/zh-Hant.json b/homeassistant/components/shopping_list/.translations/zh-Hant.json deleted file mode 100644 index aea7a9b6409..00000000000 --- a/homeassistant/components/shopping_list/.translations/zh-Hant.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u8cfc\u7269\u6e05\u55ae\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u8cfc\u7269\u6e05\u55ae\uff1f", - "title": "\u8cfc\u7269\u6e05\u55ae" - } - }, - "title": "\u8cfc\u7269\u6e05\u55ae" - } -} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/manifest.json b/homeassistant/components/shopping_list/manifest.json index ad060f16756..38829d80f0a 100644 --- a/homeassistant/components/shopping_list/manifest.json +++ b/homeassistant/components/shopping_list/manifest.json @@ -2,7 +2,6 @@ "domain": "shopping_list", "name": "Shopping List", "documentation": "https://www.home-assistant.io/integrations/shopping_list", - "requirements": [], "dependencies": ["http"], "codeowners": [], "config_flow": true, diff --git a/homeassistant/components/shopping_list/services.yaml b/homeassistant/components/shopping_list/services.yaml index 1d667e43fa6..04457e2abec 100644 --- a/homeassistant/components/shopping_list/services.yaml +++ b/homeassistant/components/shopping_list/services.yaml @@ -1,9 +1,12 @@ add_item: description: Adds an item to the shopping list. fields: - name: {description: The name of the item to add., example: Beer} + name: + description: The name of the item to add. + example: Beer complete_item: - description: Marks an item as completed in the shopping list. It does not remove - the item. + description: Marks an item as completed in the shopping list. It does not remove the item. fields: - name: {description: The name of the item to mark as completed., example: Beer} + name: + description: The name of the item to mark as completed. + example: Beer diff --git a/homeassistant/components/shopping_list/strings.json b/homeassistant/components/shopping_list/strings.json index 9e56dd7eaa4..8c17d683886 100644 --- a/homeassistant/components/shopping_list/strings.json +++ b/homeassistant/components/shopping_list/strings.json @@ -1,14 +1,14 @@ { - "config": { + "title": "Shopping List", + "config": { + "step": { + "user": { "title": "Shopping List", - "step": { - "user": { - "title": "Shopping List", - "description": "Do you want to configure the shopping list?" - } - }, - "abort": { - "already_configured": "The shopping list is already configured." - } + "description": "Do you want to configure the shopping list?" + } + }, + "abort": { + "already_configured": "The shopping list is already configured." } + } } diff --git a/homeassistant/components/shopping_list/translations/ca.json b/homeassistant/components/shopping_list/translations/ca.json new file mode 100644 index 00000000000..d384e46641d --- /dev/null +++ b/homeassistant/components/shopping_list/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "La llista de compres ja est\u00e0 configurada." + }, + "step": { + "user": { + "description": "Vols configurar la llista de compres?", + "title": "Llista de compres" + } + } + }, + "title": "Llista de compres" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/de.json b/homeassistant/components/shopping_list/translations/de.json new file mode 100644 index 00000000000..d2d6a42fe24 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "Die Einkaufsliste ist bereits konfiguriert." + }, + "step": { + "user": { + "description": "M\u00f6chten Sie die Einkaufsliste konfigurieren?", + "title": "Einkaufsliste" + } + } + }, + "title": "Einkaufsliste" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/en.json b/homeassistant/components/shopping_list/translations/en.json new file mode 100644 index 00000000000..e28b5076dcb --- /dev/null +++ b/homeassistant/components/shopping_list/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "The shopping list is already configured." + }, + "step": { + "user": { + "description": "Do you want to configure the shopping list?", + "title": "Shopping List" + } + } + }, + "title": "Shopping List" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/es.json b/homeassistant/components/shopping_list/translations/es.json new file mode 100644 index 00000000000..b7baefbaa80 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "La lista de la compra ya est\u00e1 configurada." + }, + "step": { + "user": { + "description": "\u00bfQuieres configurar la lista de la compra?", + "title": "Lista de la compra" + } + } + }, + "title": "Lista de la compra" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/fr.json b/homeassistant/components/shopping_list/translations/fr.json new file mode 100644 index 00000000000..b5265a70784 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "La liste d'achats est d\u00e9j\u00e0 configur\u00e9e." + }, + "step": { + "user": { + "description": "Voulez-vous configurer la liste d'achats ?", + "title": "Liste d'achats" + } + } + }, + "title": "Liste d\u2019achats" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/it.json b/homeassistant/components/shopping_list/translations/it.json new file mode 100644 index 00000000000..c1b10bc84b6 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "La lista della spesa \u00e8 gi\u00e0 configurata." + }, + "step": { + "user": { + "description": "Vuoi configurare la lista della spesa?", + "title": "Lista della Spesa" + } + } + }, + "title": "Lista della Spesa" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/ko.json b/homeassistant/components/shopping_list/translations/ko.json new file mode 100644 index 00000000000..247fa8d9f4d --- /dev/null +++ b/homeassistant/components/shopping_list/translations/ko.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "\uc7a5\ubcf4\uae30\ubaa9\ub85d\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "description": "\uc7a5\ubcf4\uae30\ubaa9\ub85d\uc744 \uad6c\uc131\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "\uc7a5\ubcf4\uae30\ubaa9\ub85d" + } + } + }, + "title": "\uc7a5\ubcf4\uae30\ubaa9\ub85d" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/lb.json b/homeassistant/components/shopping_list/translations/lb.json new file mode 100644 index 00000000000..129d1b0e8e7 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "Akafsl\u00ebscht ass scho konfigur\u00e9iert." + }, + "step": { + "user": { + "description": "Soll Akafsl\u00ebscht konfigur\u00e9iert ginn?", + "title": "Akafsl\u00ebscht" + } + } + }, + "title": "Akafsl\u00ebscht" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/no.json b/homeassistant/components/shopping_list/translations/no.json new file mode 100644 index 00000000000..56a92234c70 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "Handlelisten er allerede konfigurert." + }, + "step": { + "user": { + "description": "\u00d8nsker du \u00e5 konfigurere handleliste?", + "title": "Handleliste" + } + } + }, + "title": "Handleliste" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/pl.json b/homeassistant/components/shopping_list/translations/pl.json new file mode 100644 index 00000000000..75f09a944ef --- /dev/null +++ b/homeassistant/components/shopping_list/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "Lista zakup\u00f3w jest ju\u017c skonfigurowana." + }, + "step": { + "user": { + "description": "Czy chcesz skonfigurowa\u0107 list\u0119 zakup\u00f3w?", + "title": "Lista zakup\u00f3w" + } + } + }, + "title": "Lista zakup\u00f3w" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/ru.json b/homeassistant/components/shopping_list/translations/ru.json new file mode 100644 index 00000000000..84c6e2762f7 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043a\u0443\u043f\u043e\u043a?", + "title": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043a\u0443\u043f\u043e\u043a" + } + } + }, + "title": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043a\u0443\u043f\u043e\u043a" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/sk.json b/homeassistant/components/shopping_list/translations/sk.json new file mode 100644 index 00000000000..5875ad80888 --- /dev/null +++ b/homeassistant/components/shopping_list/translations/sk.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "N\u00e1kupn\u00fd zoznam je u\u017e nakonfigurovan\u00fd." + }, + "step": { + "user": { + "description": "Chcete nakonfigurova\u0165 n\u00e1kupn\u00fd zoznam?", + "title": "N\u00e1kupn\u00fd zoznam" + } + } + }, + "title": "N\u00e1kupn\u00fd zoznam" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/sl.json b/homeassistant/components/shopping_list/translations/sl.json new file mode 100644 index 00000000000..6d90e9485cb --- /dev/null +++ b/homeassistant/components/shopping_list/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "Nakupovalni seznam je \u017ee konfiguriran." + }, + "step": { + "user": { + "description": "Ali \u017eelite konfigurirati nakupovalni seznam?", + "title": "Nakupovalni seznam" + } + } + }, + "title": "Nakupovalni seznam" +} \ No newline at end of file diff --git a/homeassistant/components/shopping_list/translations/zh-Hant.json b/homeassistant/components/shopping_list/translations/zh-Hant.json new file mode 100644 index 00000000000..dbb7d941b2d --- /dev/null +++ b/homeassistant/components/shopping_list/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_configured": "\u8cfc\u7269\u6e05\u55ae\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a\u8cfc\u7269\u6e05\u55ae\uff1f", + "title": "\u8cfc\u7269\u6e05\u55ae" + } + } + }, + "title": "\u8cfc\u7269\u6e05\u55ae" +} \ No newline at end of file diff --git a/homeassistant/components/sht31/manifest.json b/homeassistant/components/sht31/manifest.json index 3d36e7f5797..899215ffe71 100644 --- a/homeassistant/components/sht31/manifest.json +++ b/homeassistant/components/sht31/manifest.json @@ -3,6 +3,5 @@ "name": "Sensirion SHT31", "documentation": "https://www.home-assistant.io/integrations/sht31", "requirements": ["Adafruit-GPIO==1.0.3", "Adafruit-SHT31==1.0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sigfox/manifest.json b/homeassistant/components/sigfox/manifest.json index 689703302a7..b3ad57f3727 100644 --- a/homeassistant/components/sigfox/manifest.json +++ b/homeassistant/components/sigfox/manifest.json @@ -2,7 +2,5 @@ "domain": "sigfox", "name": "Sigfox", "documentation": "https://www.home-assistant.io/integrations/sigfox", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sigfox/sensor.py b/homeassistant/components/sigfox/sensor.py index da07290f422..6df6e1d0c82 100644 --- a/homeassistant/components/sigfox/sensor.py +++ b/homeassistant/components/sigfox/sensor.py @@ -8,7 +8,7 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, HTTP_OK import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -66,7 +66,7 @@ class SigfoxAPI: """Check API credentials are valid.""" url = urljoin(API_URL, "devicetypes") response = requests.get(url, auth=self._auth, timeout=10) - if response.status_code != 200: + if response.status_code != HTTP_OK: if response.status_code == 401: _LOGGER.error("Invalid credentials for Sigfox API") else: diff --git a/homeassistant/components/sighthound/manifest.json b/homeassistant/components/sighthound/manifest.json index a891d807f57..78f38f5316f 100644 --- a/homeassistant/components/sighthound/manifest.json +++ b/homeassistant/components/sighthound/manifest.json @@ -1,13 +1,7 @@ { - "domain": "sighthound", - "name": "Sighthound", - "documentation": "https://www.home-assistant.io/integrations/sighthound", - "requirements": [ - "pillow==7.0.0", - "simplehound==0.3" - ], - "dependencies": [], - "codeowners": [ - "@robmarkcole" - ] -} \ No newline at end of file + "domain": "sighthound", + "name": "Sighthound", + "documentation": "https://www.home-assistant.io/integrations/sighthound", + "requirements": ["pillow==7.1.1", "simplehound==0.3"], + "codeowners": ["@robmarkcole"] +} diff --git a/homeassistant/components/signal_messenger/manifest.json b/homeassistant/components/signal_messenger/manifest.json index 3efa1c33e85..f1db6a8af30 100644 --- a/homeassistant/components/signal_messenger/manifest.json +++ b/homeassistant/components/signal_messenger/manifest.json @@ -2,7 +2,6 @@ "domain": "signal_messenger", "name": "Signal Messenger", "documentation": "https://www.home-assistant.io/integrations/signal_messenger", - "dependencies": [], "codeowners": ["@bbernhard"], "requirements": ["pysignalclirestapi==0.2.4"] } diff --git a/homeassistant/components/simplepush/manifest.json b/homeassistant/components/simplepush/manifest.json index b6d8005431b..70c4f1b4580 100644 --- a/homeassistant/components/simplepush/manifest.json +++ b/homeassistant/components/simplepush/manifest.json @@ -3,6 +3,5 @@ "name": "Simplepush", "documentation": "https://www.home-assistant.io/integrations/simplepush", "requirements": ["simplepush==1.1.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/simplisafe/.translations/bg.json b/homeassistant/components/simplisafe/.translations/bg.json deleted file mode 100644 index 0ec8fd3c6b1..00000000000 --- a/homeassistant/components/simplisafe/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d", - "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "E-mail \u0430\u0434\u0440\u0435\u0441" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/ca.json b/homeassistant/components/simplisafe/.translations/ca.json deleted file mode 100644 index f2d9db5797d..00000000000 --- a/homeassistant/components/simplisafe/.translations/ca.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest compte SimpliSafe ja est\u00e0 en \u00fas." - }, - "error": { - "identifier_exists": "Aquest compte ja est\u00e0 registrat", - "invalid_credentials": "Credencials inv\u00e0lides" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Correu electr\u00f2nic" - }, - "title": "Introdueix la teva informaci\u00f3" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Codi (per la UI de Home Assistant)" - }, - "title": "Configuraci\u00f3 de SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/cs.json b/homeassistant/components/simplisafe/.translations/cs.json deleted file mode 100644 index 2160dc226d9..00000000000 --- a/homeassistant/components/simplisafe/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n", - "invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje" - }, - "step": { - "user": { - "data": { - "password": "Heslo", - "username": "E-mailov\u00e1 adresa" - }, - "title": "Vypl\u0148te va\u0161e \u00fadaje" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/da.json b/homeassistant/components/simplisafe/.translations/da.json deleted file mode 100644 index 39324fe5f51..00000000000 --- a/homeassistant/components/simplisafe/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne SimpliSafe-konto er allerede i brug." - }, - "error": { - "identifier_exists": "Konto er allerede registreret", - "invalid_credentials": "Ugyldige legitimationsoplysninger" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Emailadresse" - }, - "title": "Udfyld dine oplysninger" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/de.json b/homeassistant/components/simplisafe/.translations/de.json deleted file mode 100644 index 08d5b31d202..00000000000 --- a/homeassistant/components/simplisafe/.translations/de.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses SimpliSafe-Konto wird bereits verwendet." - }, - "error": { - "identifier_exists": "Konto bereits registriert", - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "E-Mail-Adresse" - }, - "title": "Gib deine Informationen ein" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Code (wird in der Benutzeroberfl\u00e4che von Home Assistant verwendet)" - }, - "title": "Konfigurieren Sie SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/en.json b/homeassistant/components/simplisafe/.translations/en.json deleted file mode 100644 index 60c3784ee9d..00000000000 --- a/homeassistant/components/simplisafe/.translations/en.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This SimpliSafe account is already in use." - }, - "error": { - "identifier_exists": "Account already registered", - "invalid_credentials": "Invalid credentials" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Email Address" - }, - "title": "Fill in your information" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Code (used in Home Assistant UI)" - }, - "title": "Configure SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/es-419.json b/homeassistant/components/simplisafe/.translations/es-419.json deleted file mode 100644 index bf4127fbd84..00000000000 --- a/homeassistant/components/simplisafe/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Cuenta ya registrada", - "invalid_credentials": "Credenciales no v\u00e1lidas" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Completa tu informaci\u00f3n" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/es.json b/homeassistant/components/simplisafe/.translations/es.json deleted file mode 100644 index fe159cf9fa8..00000000000 --- a/homeassistant/components/simplisafe/.translations/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta cuenta SimpliSafe ya est\u00e1 en uso." - }, - "error": { - "identifier_exists": "Cuenta ya registrada", - "invalid_credentials": "Credenciales no v\u00e1lidas" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Completa tus datos" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "C\u00f3digo (utilizado en el interfaz de usuario de Home Assistant)" - }, - "title": "Configurar SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/fr.json b/homeassistant/components/simplisafe/.translations/fr.json deleted file mode 100644 index e204fa96f1b..00000000000 --- a/homeassistant/components/simplisafe/.translations/fr.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ce compte SimpliSafe est d\u00e9j\u00e0 utilis\u00e9." - }, - "error": { - "identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9", - "invalid_credentials": "Informations d'identification invalides" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Adresse e-mail" - }, - "title": "Veuillez saisir vos informations" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Code (utilis\u00e9 dans l'interface Home Assistant)" - }, - "title": "Configurer SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/hu.json b/homeassistant/components/simplisafe/.translations/hu.json deleted file mode 100644 index 613b5565470..00000000000 --- a/homeassistant/components/simplisafe/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Fi\u00f3k m\u00e1r regisztr\u00e1lva van", - "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" - }, - "step": { - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Email c\u00edm" - }, - "title": "T\u00f6ltsd ki az adataid" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/it.json b/homeassistant/components/simplisafe/.translations/it.json deleted file mode 100644 index 71581e845f4..00000000000 --- a/homeassistant/components/simplisafe/.translations/it.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo account SimpliSafe \u00e8 gi\u00e0 in uso." - }, - "error": { - "identifier_exists": "Account gi\u00e0 registrato", - "invalid_credentials": "Credenziali non valide" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Indirizzo E-mail" - }, - "title": "Inserisci i tuoi dati" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Codice (utilizzato nell'Interfaccia Utente di Home Assistant)" - }, - "title": "Configurare SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/ko.json b/homeassistant/components/simplisafe/.translations/ko.json deleted file mode 100644 index 53e67cd5506..00000000000 --- a/homeassistant/components/simplisafe/.translations/ko.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 SimpliSafe \uacc4\uc815\uc740 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4." - }, - "error": { - "identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_credentials": "\ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc774\uba54\uc77c \uc8fc\uc18c" - }, - "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "\ucf54\ub4dc (Home Assistant UI \uc5d0\uc11c \uc0ac\uc6a9\ub428)" - }, - "title": "SimpliSafe \uad6c\uc131" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/lb.json b/homeassistant/components/simplisafe/.translations/lb.json deleted file mode 100644 index a7e56f817d5..00000000000 --- a/homeassistant/components/simplisafe/.translations/lb.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse SimpliSafe Kont g\u00ebtt scho benotzt." - }, - "error": { - "identifier_exists": "Konto ass scho registr\u00e9iert", - "invalid_credentials": "Ong\u00eblteg Login Informatioune" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "E-Mail Adress" - }, - "title": "F\u00ebllt \u00e4r Informatiounen aus" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Code (den am Home Assistant Interface benotzt g\u00ebtt)" - }, - "title": "Simplisafe konfigur\u00e9ieren" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/nl.json b/homeassistant/components/simplisafe/.translations/nl.json deleted file mode 100644 index bad1c408144..00000000000 --- a/homeassistant/components/simplisafe/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Account bestaat al", - "invalid_credentials": "Ongeldige gebruikersgegevens" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "E-mailadres" - }, - "title": "Vul uw gegevens in" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/nn.json b/homeassistant/components/simplisafe/.translations/nn.json deleted file mode 100644 index 0568cad3f6d..00000000000 --- a/homeassistant/components/simplisafe/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/no.json b/homeassistant/components/simplisafe/.translations/no.json deleted file mode 100644 index 436fba8fd06..00000000000 --- a/homeassistant/components/simplisafe/.translations/no.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne SimpliSafe-kontoen er allerede i bruk." - }, - "error": { - "identifier_exists": "Konto er allerede registrert", - "invalid_credentials": "Ugyldig legitimasjon" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "E-postadresse" - }, - "title": "Fyll ut informasjonen din" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Kode (brukt i home assistant ui)" - }, - "title": "Konfigurer SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/pl.json b/homeassistant/components/simplisafe/.translations/pl.json deleted file mode 100644 index b673d28a7ca..00000000000 --- a/homeassistant/components/simplisafe/.translations/pl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "To konto SimpliSafe jest ju\u017c w u\u017cyciu." - }, - "error": { - "identifier_exists": "Konto jest ju\u017c zarejestrowane.", - "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Adres e-mail" - }, - "title": "Wprowad\u017a dane" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Kod (u\u017cywany w interfejsie u\u017cytkownika Home Assistant'a)" - }, - "title": "Konfiguracja SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/pt-BR.json b/homeassistant/components/simplisafe/.translations/pt-BR.json deleted file mode 100644 index 2f1fe9ca10a..00000000000 --- a/homeassistant/components/simplisafe/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Conta j\u00e1 cadastrada", - "invalid_credentials": "C\u00f3digo inv\u00e1lido" - }, - "step": { - "user": { - "data": { - "password": "Senha", - "username": "Endere\u00e7o de e-mail" - }, - "title": "Preencha suas informa\u00e7\u00f5es" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/pt.json b/homeassistant/components/simplisafe/.translations/pt.json deleted file mode 100644 index 809c8fc29a4..00000000000 --- a/homeassistant/components/simplisafe/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Conta j\u00e1 registada", - "invalid_credentials": "Credenciais inv\u00e1lidas" - }, - "step": { - "user": { - "data": { - "password": "Palavra-passe", - "username": "Endere\u00e7o de e-mail" - }, - "title": "Preencha as suas informa\u00e7\u00f5es" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/ro.json b/homeassistant/components/simplisafe/.translations/ro.json deleted file mode 100644 index 33f284e93c2..00000000000 --- a/homeassistant/components/simplisafe/.translations/ro.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Contul este deja \u00eenregistrat", - "invalid_credentials": "Credentiale invalide" - }, - "step": { - "user": { - "data": { - "password": "Parola", - "username": "Adresa de email" - }, - "title": "Completa\u021bi informa\u021biile dvs." - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/ru.json b/homeassistant/components/simplisafe/.translations/ru.json deleted file mode 100644 index 1e06319672a..00000000000 --- a/homeassistant/components/simplisafe/.translations/ru.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." - }, - "error": { - "identifier_exists": "\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" - }, - "title": "SimpliSafe" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "\u041a\u043e\u0434 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 Home Assistant)" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/sl.json b/homeassistant/components/simplisafe/.translations/sl.json deleted file mode 100644 index 15131fb1198..00000000000 --- a/homeassistant/components/simplisafe/.translations/sl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta ra\u010dun SimpliSafe je \u017ee v uporabi." - }, - "error": { - "identifier_exists": "Ra\u010dun je \u017ee registriran", - "invalid_credentials": "Neveljavne poverilnice" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "E-po\u0161tni naslov" - }, - "title": "Izpolnite svoje podatke" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "Koda (uporablja se v uporabni\u0161kem vmesniku Home Assistant)" - }, - "title": "Konfigurirajte SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/sv.json b/homeassistant/components/simplisafe/.translations/sv.json deleted file mode 100644 index 28ae99c1dc4..00000000000 --- a/homeassistant/components/simplisafe/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "Kontot \u00e4r redan registrerat", - "invalid_credentials": "Ogiltiga autentiseringsuppgifter" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "E-postadress" - }, - "title": "Fyll i din information" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/zh-Hans.json b/homeassistant/components/simplisafe/.translations/zh-Hans.json deleted file mode 100644 index 2981ee71634..00000000000 --- a/homeassistant/components/simplisafe/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "error": { - "identifier_exists": "\u8d26\u6237\u5df2\u6ce8\u518c", - "invalid_credentials": "\u65e0\u6548\u7684\u8eab\u4efd\u8ba4\u8bc1" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u7801", - "username": "\u7535\u5b50\u90ae\u4ef6\u5730\u5740" - }, - "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" - } - }, - "title": "SimpliSafe" - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/zh-Hant.json b/homeassistant/components/simplisafe/.translations/zh-Hant.json deleted file mode 100644 index bbe44a4fdea..00000000000 --- a/homeassistant/components/simplisafe/.translations/zh-Hant.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64 SimpliSafe \u5e33\u865f\u5df2\u88ab\u4f7f\u7528\u3002" - }, - "error": { - "identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a", - "invalid_credentials": "\u6191\u8b49\u7121\u6548" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" - }, - "title": "\u586b\u5beb\u8cc7\u8a0a" - } - }, - "title": "SimpliSafe" - }, - "options": { - "step": { - "init": { - "data": { - "code": "\u9a57\u8b49\u78bc\uff08Home Assistant UI \u4f7f\u7528\uff09" - }, - "title": "\u8a2d\u5b9a SimpliSafe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/__init__.py b/homeassistant/components/simplisafe/__init__.py index bf12951e2ae..963195e6f64 100644 --- a/homeassistant/components/simplisafe/__init__.py +++ b/homeassistant/components/simplisafe/__init__.py @@ -24,7 +24,7 @@ from homeassistant.const import ( CONF_TOKEN, CONF_USERNAME, ) -from homeassistant.core import callback +from homeassistant.core import CoreState, callback from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import ( aiohttp_client, @@ -63,7 +63,8 @@ _LOGGER = logging.getLogger(__name__) CONF_ACCOUNTS = "accounts" DATA_LISTENER = "listener" -TOPIC_UPDATE = "simplisafe_update_data_{0}" +TOPIC_UPDATE_REST_API = "simplisafe_update_rest_api_{0}" +TOPIC_UPDATE_WEBSOCKET = "simplisafe_update_websocket_{0}" EVENT_SIMPLISAFE_EVENT = "SIMPLISAFE_EVENT" EVENT_SIMPLISAFE_NOTIFICATION = "SIMPLISAFE_NOTIFICATION" @@ -354,7 +355,6 @@ class SimpliSafeWebsocket: """Initialize.""" self._hass = hass self._websocket = websocket - self.last_events = {} @staticmethod def _on_connect(): @@ -369,8 +369,9 @@ class SimpliSafeWebsocket: def _on_event(self, event): """Define a handler to fire when a new SimpliSafe event arrives.""" _LOGGER.debug("New websocket event: %s", event) - self.last_events[event.system_id] = event - async_dispatcher_send(self._hass, TOPIC_UPDATE.format(event.system_id)) + async_dispatcher_send( + self._hass, TOPIC_UPDATE_WEBSOCKET.format(event.system_id), event + ) if event.event_type not in WEBSOCKET_EVENTS_TO_TRIGGER_HASS_EVENT: return @@ -421,20 +422,25 @@ class SimpliSafe: @callback def _async_process_new_notifications(self, system): """Act on any new system notifications.""" - old_notifications = self._system_notifications.get(system.system_id, []) - latest_notifications = system.notifications + if self._hass.state != CoreState.running: + # If HASS isn't fully running yet, it may cause the SIMPLISAFE_NOTIFICATION + # event to fire before dependent components (like automation) are fully + # ready. If that's the case, skip: + return - # Save the latest notifications: - self._system_notifications[system.system_id] = latest_notifications + latest_notifications = set(system.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: @@ -456,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 @@ -491,7 +499,9 @@ class SimpliSafe: await system.update() self._async_process_new_notifications(system) _LOGGER.debug('Updated REST API data for "%s"', system.address) - async_dispatcher_send(self._hass, TOPIC_UPDATE.format(system.system_id)) + async_dispatcher_send( + self._hass, TOPIC_UPDATE_REST_API.format(system.system_id) + ) tasks = [update_system(system) for system in self.systems.values()] @@ -538,8 +548,6 @@ class SimpliSafeEntity(Entity): def __init__(self, simplisafe, system, name, *, serial=None): """Initialize.""" - self._async_unsub_dispatcher_connect = None - self._last_processed_websocket_event = None self._name = name self._online = True self._simplisafe = simplisafe @@ -606,91 +614,9 @@ class SimpliSafeEntity(Entity): """Return the unique ID of the entity.""" return self._serial - @callback - def _async_should_ignore_websocket_event(self, event): - """Return whether this entity should ignore a particular websocket event. - - Note that we can't check for a final condition – whether the event belongs to - a particular entity, like a lock – because some events (like arming the system - from a keypad _or_ from the website) should impact the same entity. - """ - # We've already processed this event: - if self._last_processed_websocket_event == event: - return True - - # This is an event for a system other than the one this entity belongs to: - if event.system_id != self._system.system_id: - return True - - # This isn't an event that this entity cares about: - if event.event_type not in self.websocket_events_to_listen_for: - return True - - # This event is targeted at a specific entity whose serial number is different - # from this one's: - if ( - event.event_type in WEBSOCKET_EVENTS_REQUIRING_SERIAL - and event.sensor_serial != self._serial - ): - return True - - return False - - async def async_added_to_hass(self): - """Register callbacks.""" - - @callback - def update(): - """Update the state.""" - self.update_from_latest_data() - self.async_write_ha_state() - - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, TOPIC_UPDATE.format(self._system.system_id), update - ) - - self.update_from_latest_data() - - @callback - def update_from_latest_data(self): - """Update the entity.""" - self.async_update_from_rest_api() - - last_websocket_event = self._simplisafe.websocket.last_events.get( - self._system.system_id - ) - - if self._async_should_ignore_websocket_event(last_websocket_event): - return - - self._last_processed_websocket_event = last_websocket_event - - if last_websocket_event.sensor_type: - sensor_type = last_websocket_event.sensor_type.name - else: - sensor_type = None - - self._attrs.update( - { - ATTR_LAST_EVENT_INFO: last_websocket_event.info, - ATTR_LAST_EVENT_SENSOR_NAME: last_websocket_event.sensor_name, - ATTR_LAST_EVENT_SENSOR_TYPE: sensor_type, - ATTR_LAST_EVENT_TIMESTAMP: last_websocket_event.timestamp, - } - ) - self._async_internal_update_from_websocket_event(last_websocket_event) - - @callback - def async_update_from_rest_api(self): - """Update the entity with the provided REST API data.""" - pass - @callback def _async_internal_update_from_websocket_event(self, event): - """Check for connection events and set offline appropriately. - - Should not be called directly. - """ + """Perform internal websocket handling prior to handing off.""" if event.event_type == EVENT_CONNECTION_LOST: self._online = False elif event.event_type == EVENT_CONNECTION_RESTORED: @@ -702,14 +628,77 @@ class SimpliSafeEntity(Entity): if not self._online: return + if event.sensor_type: + sensor_type = event.sensor_type.name + else: + sensor_type = None + + self._attrs.update( + { + ATTR_LAST_EVENT_INFO: event.info, + ATTR_LAST_EVENT_SENSOR_NAME: event.sensor_name, + ATTR_LAST_EVENT_SENSOR_TYPE: sensor_type, + ATTR_LAST_EVENT_TIMESTAMP: event.timestamp, + } + ) + self.async_update_from_websocket_event(event) + async def async_added_to_hass(self): + """Register callbacks.""" + + @callback + def rest_api_update(): + """Update the entity with new REST API data.""" + self.async_update_from_rest_api() + self.async_write_ha_state() + + self.async_on_remove( + async_dispatcher_connect( + self.hass, + TOPIC_UPDATE_REST_API.format(self._system.system_id), + rest_api_update, + ) + ) + + @callback + def websocket_update(event): + """Update the entity with new websocket data.""" + # Ignore this event if it belongs to a system other than this one: + if event.system_id != self._system.system_id: + return + + # Ignore this event if this entity hasn't expressed interest in its type: + if event.event_type not in self.websocket_events_to_listen_for: + return + + # Ignore this event if it belongs to a entity with a different serial + # number from this one's: + if ( + event.event_type in WEBSOCKET_EVENTS_REQUIRING_SERIAL + and event.sensor_serial != self._serial + ): + return + + self._async_internal_update_from_websocket_event(event) + self.async_write_ha_state() + + self.async_on_remove( + async_dispatcher_connect( + self.hass, + TOPIC_UPDATE_WEBSOCKET.format(self._system.system_id), + websocket_update, + ) + ) + + self.async_update_from_rest_api() + + @callback + def async_update_from_rest_api(self): + """Update the entity with the provided REST API data.""" + raise NotImplementedError() + @callback def async_update_from_websocket_event(self, event): - """Update the entity with the provided websocket API data.""" - pass - - async def async_will_remove_from_hass(self) -> None: - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() + """Update the entity with the provided websocket event.""" + raise NotImplementedError() diff --git a/homeassistant/components/simplisafe/alarm_control_panel.py b/homeassistant/components/simplisafe/alarm_control_panel.py index 4e2393bd238..867a1044856 100644 --- a/homeassistant/components/simplisafe/alarm_control_panel.py +++ b/homeassistant/components/simplisafe/alarm_control_panel.py @@ -217,6 +217,22 @@ class SimpliSafeAlarm(SimpliSafeEntity, AlarmControlPanel): } ) + # Although system state updates are designed the come via the websocket, the + # SimpliSafe cloud can sporadically fail to send those updates as expected; so, + # just in case, we synchronize the state via the REST API, too: + if self._system.state == SystemStates.alarm: + self._state = STATE_ALARM_TRIGGERED + elif self._system.state == SystemStates.away: + self._state = STATE_ALARM_ARMED_AWAY + elif self._system.state in (SystemStates.away_count, SystemStates.exit_delay): + self._state = STATE_ALARM_ARMING + elif self._system.state == SystemStates.home: + self._state = STATE_ALARM_ARMED_HOME + elif self._system.state == SystemStates.off: + self._state = STATE_ALARM_DISARMED + else: + self._state = None + @callback def async_update_from_websocket_event(self, event): """Update the entity with the provided websocket API event data.""" diff --git a/homeassistant/components/simplisafe/manifest.json b/homeassistant/components/simplisafe/manifest.json index cd0cda68125..c03f05fc0c1 100644 --- a/homeassistant/components/simplisafe/manifest.json +++ b/homeassistant/components/simplisafe/manifest.json @@ -3,6 +3,6 @@ "name": "SimpliSafe", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/simplisafe", - "requirements": ["simplisafe-python==9.0.6"], + "requirements": ["simplisafe-python==9.0.7"], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/simplisafe/services.yaml b/homeassistant/components/simplisafe/services.yaml index 6d01dfd8e46..e52af4f2665 100644 --- a/homeassistant/components/simplisafe/services.yaml +++ b/homeassistant/components/simplisafe/services.yaml @@ -1,6 +1,4 @@ # Describes the format for available SimpliSafe services - ---- remove_pin: description: Remove a PIN by its label or value. fields: diff --git a/homeassistant/components/simplisafe/strings.json b/homeassistant/components/simplisafe/strings.json index 1c8aadc2192..3d9d832c99a 100644 --- a/homeassistant/components/simplisafe/strings.json +++ b/homeassistant/components/simplisafe/strings.json @@ -1,13 +1,9 @@ { "config": { - "title": "SimpliSafe", "step": { "user": { "title": "Fill in your information", - "data": { - "username": "Email Address", - "password": "Password" - } + "data": { "username": "Email Address", "password": "Password" } } }, "error": { @@ -22,9 +18,7 @@ "step": { "init": { "title": "Configure SimpliSafe", - "data": { - "code": "Code (used in Home Assistant UI)" - } + "data": { "code": "Code (used in Home Assistant UI)" } } } } diff --git a/homeassistant/components/simplisafe/translations/bg.json b/homeassistant/components/simplisafe/translations/bg.json new file mode 100644 index 00000000000..9d9f60d309c --- /dev/null +++ b/homeassistant/components/simplisafe/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d", + "invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "E-mail \u0430\u0434\u0440\u0435\u0441" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/ca.json b/homeassistant/components/simplisafe/translations/ca.json new file mode 100644 index 00000000000..32ff418a7bd --- /dev/null +++ b/homeassistant/components/simplisafe/translations/ca.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest compte SimpliSafe ja est\u00e0 en \u00fas." + }, + "error": { + "identifier_exists": "Aquest compte ja est\u00e0 registrat", + "invalid_credentials": "Credencials inv\u00e0lides" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Correu electr\u00f2nic" + }, + "title": "Introdueix la teva informaci\u00f3" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Codi (per la UI de Home Assistant)" + }, + "title": "Configuraci\u00f3 de SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/cs.json b/homeassistant/components/simplisafe/translations/cs.json new file mode 100644 index 00000000000..c2bc5447d16 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n", + "invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje" + }, + "step": { + "user": { + "data": { + "password": "Heslo", + "username": "E-mailov\u00e1 adresa" + }, + "title": "Vypl\u0148te va\u0161e \u00fadaje" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/da.json b/homeassistant/components/simplisafe/translations/da.json new file mode 100644 index 00000000000..eca91f39a40 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Denne SimpliSafe-konto er allerede i brug." + }, + "error": { + "identifier_exists": "Konto er allerede registreret", + "invalid_credentials": "Ugyldige legitimationsoplysninger" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Emailadresse" + }, + "title": "Udfyld dine oplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/de.json b/homeassistant/components/simplisafe/translations/de.json new file mode 100644 index 00000000000..2c5a0d0971c --- /dev/null +++ b/homeassistant/components/simplisafe/translations/de.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses SimpliSafe-Konto wird bereits verwendet." + }, + "error": { + "identifier_exists": "Konto bereits registriert", + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "E-Mail-Adresse" + }, + "title": "Gib deine Informationen ein" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Code (wird in der Benutzeroberfl\u00e4che von Home Assistant verwendet)" + }, + "title": "Konfigurieren Sie SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/en.json b/homeassistant/components/simplisafe/translations/en.json new file mode 100644 index 00000000000..1cbaeffe958 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/en.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "This SimpliSafe account is already in use." + }, + "error": { + "identifier_exists": "Account already registered", + "invalid_credentials": "Invalid credentials" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Email Address" + }, + "title": "Fill in your information" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Code (used in Home Assistant UI)" + }, + "title": "Configure SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/es-419.json b/homeassistant/components/simplisafe/translations/es-419.json new file mode 100644 index 00000000000..135e9f843e9 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Cuenta ya registrada", + "invalid_credentials": "Credenciales no v\u00e1lidas" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Completa tu informaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/es.json b/homeassistant/components/simplisafe/translations/es.json new file mode 100644 index 00000000000..8ffd687b228 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/es.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Esta cuenta SimpliSafe ya est\u00e1 en uso." + }, + "error": { + "identifier_exists": "Cuenta ya registrada", + "invalid_credentials": "Credenciales no v\u00e1lidas" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Completa tus datos" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "C\u00f3digo (utilizado en el interfaz de usuario de Home Assistant)" + }, + "title": "Configurar SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/fr.json b/homeassistant/components/simplisafe/translations/fr.json new file mode 100644 index 00000000000..4454c82c8f8 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/fr.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Ce compte SimpliSafe est d\u00e9j\u00e0 utilis\u00e9." + }, + "error": { + "identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9", + "invalid_credentials": "Informations d'identification invalides" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Adresse e-mail" + }, + "title": "Veuillez saisir vos informations" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Code (utilis\u00e9 dans l'interface Home Assistant)" + }, + "title": "Configurer SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/hu.json b/homeassistant/components/simplisafe/translations/hu.json new file mode 100644 index 00000000000..95331d8c8d2 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Fi\u00f3k m\u00e1r regisztr\u00e1lva van", + "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok" + }, + "step": { + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Email c\u00edm" + }, + "title": "T\u00f6ltsd ki az adataid" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/it.json b/homeassistant/components/simplisafe/translations/it.json new file mode 100644 index 00000000000..c30d967d012 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/it.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Questo account SimpliSafe \u00e8 gi\u00e0 in uso." + }, + "error": { + "identifier_exists": "Account gi\u00e0 registrato", + "invalid_credentials": "Credenziali non valide" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Indirizzo E-mail" + }, + "title": "Inserisci i tuoi dati" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Codice (utilizzato nell'Interfaccia Utente di Home Assistant)" + }, + "title": "Configurare SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/ko.json b/homeassistant/components/simplisafe/translations/ko.json new file mode 100644 index 00000000000..97da5ac4e8b --- /dev/null +++ b/homeassistant/components/simplisafe/translations/ko.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 SimpliSafe \uacc4\uc815\uc740 \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4." + }, + "error": { + "identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_credentials": "\ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc774\uba54\uc77c \uc8fc\uc18c" + }, + "title": "\uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "\ucf54\ub4dc (Home Assistant UI \uc5d0\uc11c \uc0ac\uc6a9\ub428)" + }, + "title": "SimpliSafe \uad6c\uc131" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/lb.json b/homeassistant/components/simplisafe/translations/lb.json new file mode 100644 index 00000000000..8e460289ef3 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/lb.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse SimpliSafe Kont g\u00ebtt scho benotzt." + }, + "error": { + "identifier_exists": "Konto ass scho registr\u00e9iert", + "invalid_credentials": "Ong\u00eblteg Login Informatioune" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "E-Mail Adress" + }, + "title": "F\u00ebllt \u00e4r Informatiounen aus" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Code (den am Home Assistant Interface benotzt g\u00ebtt)" + }, + "title": "Simplisafe konfigur\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/nl.json b/homeassistant/components/simplisafe/translations/nl.json new file mode 100644 index 00000000000..0aeb9cb1d95 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Account bestaat al", + "invalid_credentials": "Ongeldige gebruikersgegevens" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "E-mailadres" + }, + "title": "Vul uw gegevens in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/nn.json b/homeassistant/components/simplisafe/translations/nn.json new file mode 100644 index 00000000000..1bcfd463ce8 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "SimpliSafe" +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/no.json b/homeassistant/components/simplisafe/translations/no.json new file mode 100644 index 00000000000..8fcc86ffb82 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/no.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Denne SimpliSafe-kontoen er allerede i bruk." + }, + "error": { + "identifier_exists": "Konto er allerede registrert", + "invalid_credentials": "Ugyldig legitimasjon" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "E-postadresse" + }, + "title": "Fyll ut informasjonen din" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Kode (brukt i home assistant ui)" + }, + "title": "Konfigurer SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/pl.json b/homeassistant/components/simplisafe/translations/pl.json new file mode 100644 index 00000000000..6bfc6ce6037 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/pl.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "To konto SimpliSafe jest ju\u017c w u\u017cyciu." + }, + "error": { + "identifier_exists": "Konto jest ju\u017c zarejestrowane.", + "invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Adres e-mail" + }, + "title": "Wprowad\u017a dane" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Kod (u\u017cywany w interfejsie u\u017cytkownika Home Assistant'a)" + }, + "title": "Konfiguracja SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/pt-BR.json b/homeassistant/components/simplisafe/translations/pt-BR.json new file mode 100644 index 00000000000..800ac719ca9 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Conta j\u00e1 cadastrada", + "invalid_credentials": "C\u00f3digo inv\u00e1lido" + }, + "step": { + "user": { + "data": { + "password": "Senha", + "username": "Endere\u00e7o de e-mail" + }, + "title": "Preencha suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/pt.json b/homeassistant/components/simplisafe/translations/pt.json new file mode 100644 index 00000000000..731ab4ad9a0 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Conta j\u00e1 registada", + "invalid_credentials": "Credenciais inv\u00e1lidas" + }, + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Endere\u00e7o de correio eletr\u00f3nico" + }, + "title": "Preencha as suas informa\u00e7\u00f5es" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/ro.json b/homeassistant/components/simplisafe/translations/ro.json new file mode 100644 index 00000000000..7046b0992b1 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/ro.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Contul este deja \u00eenregistrat", + "invalid_credentials": "Credentiale invalide" + }, + "step": { + "user": { + "data": { + "password": "Parola", + "username": "Adresa de email" + }, + "title": "Completa\u021bi informa\u021biile dvs." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/ru.json b/homeassistant/components/simplisafe/translations/ru.json new file mode 100644 index 00000000000..4f0b9bf4ee3 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/ru.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "error": { + "identifier_exists": "\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" + }, + "title": "SimpliSafe" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "\u041a\u043e\u0434 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 Home Assistant)" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/sl.json b/homeassistant/components/simplisafe/translations/sl.json new file mode 100644 index 00000000000..5b10cd96808 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/sl.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "Ta ra\u010dun SimpliSafe je \u017ee v uporabi." + }, + "error": { + "identifier_exists": "Ra\u010dun je \u017ee registriran", + "invalid_credentials": "Neveljavne poverilnice" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "E-po\u0161tni naslov" + }, + "title": "Izpolnite svoje podatke" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "Koda (uporablja se v uporabni\u0161kem vmesniku Home Assistant)" + }, + "title": "Konfigurirajte SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/sv.json b/homeassistant/components/simplisafe/translations/sv.json new file mode 100644 index 00000000000..48744428b1d --- /dev/null +++ b/homeassistant/components/simplisafe/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "Kontot \u00e4r redan registrerat", + "invalid_credentials": "Ogiltiga autentiseringsuppgifter" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "E-postadress" + }, + "title": "Fyll i din information" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/.translations/th.json b/homeassistant/components/simplisafe/translations/th.json similarity index 100% rename from homeassistant/components/simplisafe/.translations/th.json rename to homeassistant/components/simplisafe/translations/th.json diff --git a/homeassistant/components/simplisafe/.translations/tr.json b/homeassistant/components/simplisafe/translations/tr.json similarity index 100% rename from homeassistant/components/simplisafe/.translations/tr.json rename to homeassistant/components/simplisafe/translations/tr.json diff --git a/homeassistant/components/simplisafe/.translations/uk.json b/homeassistant/components/simplisafe/translations/uk.json similarity index 100% rename from homeassistant/components/simplisafe/.translations/uk.json rename to homeassistant/components/simplisafe/translations/uk.json diff --git a/homeassistant/components/simplisafe/translations/zh-Hans.json b/homeassistant/components/simplisafe/translations/zh-Hans.json new file mode 100644 index 00000000000..721ce3a94f4 --- /dev/null +++ b/homeassistant/components/simplisafe/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "identifier_exists": "\u8d26\u6237\u5df2\u6ce8\u518c", + "invalid_credentials": "\u65e0\u6548\u7684\u8eab\u4efd\u8ba4\u8bc1" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u7801", + "username": "\u7535\u5b50\u90ae\u4ef6\u5730\u5740" + }, + "title": "\u586b\u5199\u60a8\u7684\u4fe1\u606f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/zh-Hant.json b/homeassistant/components/simplisafe/translations/zh-Hant.json new file mode 100644 index 00000000000..975c863d95d --- /dev/null +++ b/homeassistant/components/simplisafe/translations/zh-Hant.json @@ -0,0 +1,30 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64 SimpliSafe \u5e33\u865f\u5df2\u88ab\u4f7f\u7528\u3002" + }, + "error": { + "identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a", + "invalid_credentials": "\u6191\u8b49\u7121\u6548" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" + }, + "title": "\u586b\u5beb\u8cc7\u8a0a" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "code": "\u9a57\u8b49\u78bc\uff08Home Assistant UI \u4f7f\u7528\uff09" + }, + "title": "\u8a2d\u5b9a SimpliSafe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simulated/manifest.json b/homeassistant/components/simulated/manifest.json index 6a30f6a00cc..72514c80f97 100644 --- a/homeassistant/components/simulated/manifest.json +++ b/homeassistant/components/simulated/manifest.json @@ -2,8 +2,6 @@ "domain": "simulated", "name": "Simulated", "documentation": "https://www.home-assistant.io/integrations/simulated", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/sinch/manifest.json b/homeassistant/components/sinch/manifest.json index d69362901ec..c1968cff445 100644 --- a/homeassistant/components/sinch/manifest.json +++ b/homeassistant/components/sinch/manifest.json @@ -2,7 +2,6 @@ "domain": "sinch", "name": "Sinch SMS", "documentation": "https://www.home-assistant.io/integrations/sinch", - "dependencies": [], "codeowners": ["@bendikrb"], "requirements": ["clx-sdk-xms==1.0.0"] } diff --git a/homeassistant/components/sisyphus/light.py b/homeassistant/components/sisyphus/light.py index 7c1b0ece4bf..271db41ac22 100644 --- a/homeassistant/components/sisyphus/light.py +++ b/homeassistant/components/sisyphus/light.py @@ -36,7 +36,7 @@ class SisyphusLight(Light): async def async_added_to_hass(self): """Add listeners after this object has been initialized.""" - self._table.add_listener(lambda: self.async_schedule_update_ha_state(False)) + self._table.add_listener(self.async_write_ha_state) @property def available(self): diff --git a/homeassistant/components/sisyphus/manifest.json b/homeassistant/components/sisyphus/manifest.json index c545adda281..fdd5961d33a 100644 --- a/homeassistant/components/sisyphus/manifest.json +++ b/homeassistant/components/sisyphus/manifest.json @@ -3,6 +3,5 @@ "name": "Sisyphus", "documentation": "https://www.home-assistant.io/integrations/sisyphus", "requirements": ["sisyphus-control==2.2.1"], - "dependencies": [], "codeowners": ["@jkeljo"] } diff --git a/homeassistant/components/sisyphus/media_player.py b/homeassistant/components/sisyphus/media_player.py index e708504ff7e..103ec694d83 100644 --- a/homeassistant/components/sisyphus/media_player.py +++ b/homeassistant/components/sisyphus/media_player.py @@ -67,7 +67,7 @@ class SisyphusPlayer(MediaPlayerDevice): async def async_added_to_hass(self): """Add listeners after this object has been initialized.""" - self._table.add_listener(lambda: self.async_schedule_update_ha_state(False)) + self._table.add_listener(self.async_write_ha_state) @property def unique_id(self): diff --git a/homeassistant/components/sky_hub/device_tracker.py b/homeassistant/components/sky_hub/device_tracker.py index c7dc1092b73..2537196f21d 100644 --- a/homeassistant/components/sky_hub/device_tracker.py +++ b/homeassistant/components/sky_hub/device_tracker.py @@ -10,7 +10,7 @@ from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DeviceScanner, ) -from homeassistant.const import CONF_HOST +from homeassistant.const import CONF_HOST, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -85,7 +85,7 @@ def _get_skyhub_data(url): except requests.exceptions.Timeout: _LOGGER.exception("Connection to the router timed out") return - if response.status_code == 200: + if response.status_code == HTTP_OK: return _parse_skyhub_response(response.text) _LOGGER.error("Invalid response from Sky Hub: %s", response) diff --git a/homeassistant/components/sky_hub/manifest.json b/homeassistant/components/sky_hub/manifest.json index 4d2b3733a0c..b358fa76fbf 100644 --- a/homeassistant/components/sky_hub/manifest.json +++ b/homeassistant/components/sky_hub/manifest.json @@ -2,7 +2,5 @@ "domain": "sky_hub", "name": "Sky Hub", "documentation": "https://www.home-assistant.io/integrations/sky_hub", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/skybeacon/manifest.json b/homeassistant/components/skybeacon/manifest.json index 03ff593bb4a..2ce19afc6c5 100644 --- a/homeassistant/components/skybeacon/manifest.json +++ b/homeassistant/components/skybeacon/manifest.json @@ -3,6 +3,5 @@ "name": "Skybeacon", "documentation": "https://www.home-assistant.io/integrations/skybeacon", "requirements": ["pygatt[GATTTOOL]==4.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/skybeacon/sensor.py b/homeassistant/components/skybeacon/sensor.py index 9bd02aec7c4..d976e6e9408 100644 --- a/homeassistant/components/skybeacon/sensor.py +++ b/homeassistant/components/skybeacon/sensor.py @@ -176,7 +176,7 @@ class Monitor(threading.Thread): value[2], value[1], ) - self.data["temp"] = float(("%d.%d" % (value[0], value[2]))) + self.data["temp"] = float("%d.%d" % (value[0], value[2])) self.data["humid"] = value[1] def terminate(self): diff --git a/homeassistant/components/skybell/binary_sensor.py b/homeassistant/components/skybell/binary_sensor.py index 776281e1510..f0df663eba3 100644 --- a/homeassistant/components/skybell/binary_sensor.py +++ b/homeassistant/components/skybell/binary_sensor.py @@ -51,7 +51,7 @@ class SkybellBinarySensor(SkybellDevice, BinarySensorDevice): """Initialize a binary sensor for a Skybell device.""" super().__init__(device) self._sensor_type = sensor_type - self._name = "{0} {1}".format( + self._name = "{} {}".format( self._device.name, SENSOR_TYPES[self._sensor_type][0] ) self._device_class = SENSOR_TYPES[self._sensor_type][1] diff --git a/homeassistant/components/skybell/manifest.json b/homeassistant/components/skybell/manifest.json index 8e3ec66356c..9e0a0be8905 100644 --- a/homeassistant/components/skybell/manifest.json +++ b/homeassistant/components/skybell/manifest.json @@ -3,6 +3,5 @@ "name": "SkyBell", "documentation": "https://www.home-assistant.io/integrations/skybell", "requirements": ["skybellpy==0.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/skybell/sensor.py b/homeassistant/components/skybell/sensor.py index 7d266b7d3f6..24b63b6271c 100644 --- a/homeassistant/components/skybell/sensor.py +++ b/homeassistant/components/skybell/sensor.py @@ -49,7 +49,7 @@ class SkybellSensor(SkybellDevice): super().__init__(device) self._sensor_type = sensor_type self._icon = "mdi:{}".format(SENSOR_TYPES[self._sensor_type][1]) - self._name = "{0} {1}".format( + self._name = "{} {}".format( self._device.name, SENSOR_TYPES[self._sensor_type][0] ) self._state = None diff --git a/homeassistant/components/skybell/switch.py b/homeassistant/components/skybell/switch.py index e5a6975ddbb..03ea74a2340 100644 --- a/homeassistant/components/skybell/switch.py +++ b/homeassistant/components/skybell/switch.py @@ -48,7 +48,7 @@ class SkybellSwitch(SkybellDevice, SwitchDevice): """Initialize a light for a Skybell device.""" super().__init__(device) self._switch_type = switch_type - self._name = "{0} {1}".format( + self._name = "{} {}".format( self._device.name, SWITCH_TYPES[self._switch_type][0] ) diff --git a/homeassistant/components/slack/manifest.json b/homeassistant/components/slack/manifest.json index 86785868170..ad45abbe3c0 100644 --- a/homeassistant/components/slack/manifest.json +++ b/homeassistant/components/slack/manifest.json @@ -3,6 +3,5 @@ "name": "Slack", "documentation": "https://www.home-assistant.io/integrations/slack", "requirements": ["slackclient==2.5.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sleepiq/__init__.py b/homeassistant/components/sleepiq/__init__.py index 2b4d9d010a3..3fc065264ca 100644 --- a/homeassistant/components/sleepiq/__init__.py +++ b/homeassistant/components/sleepiq/__init__.py @@ -11,22 +11,12 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle -DOMAIN = "sleepiq" +from .const import DOMAIN MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=30) -IS_IN_BED = "is_in_bed" -SLEEP_NUMBER = "sleep_number" -SENSOR_TYPES = {SLEEP_NUMBER: "SleepNumber", IS_IN_BED: "Is In Bed"} - -LEFT = "left" -RIGHT = "right" -SIDES = [LEFT, RIGHT] - _LOGGER = logging.getLogger(__name__) -DATA = None - CONFIG_SCHEMA = vol.Schema( { vol.Required(DOMAIN): vol.Schema( @@ -46,14 +36,12 @@ def setup(hass, config): Will automatically load sensor components to support devices discovered on the account. """ - global DATA - username = config[DOMAIN][CONF_USERNAME] password = config[DOMAIN][CONF_PASSWORD] client = Sleepyq(username, password) try: - DATA = SleepIQData(client) - DATA.update() + data = SleepIQData(client) + data.update() except ValueError: message = """ SleepIQ failed to login, double check your username and password" @@ -61,6 +49,7 @@ def setup(hass, config): _LOGGER.error(message) return False + hass.data[DOMAIN] = data discovery.load_platform(hass, "sensor", DOMAIN, {}, config) discovery.load_platform(hass, "binary_sensor", DOMAIN, {}, config) diff --git a/homeassistant/components/sleepiq/binary_sensor.py b/homeassistant/components/sleepiq/binary_sensor.py index b9278fab278..3ba39a38764 100644 --- a/homeassistant/components/sleepiq/binary_sensor.py +++ b/homeassistant/components/sleepiq/binary_sensor.py @@ -1,33 +1,34 @@ """Support for SleepIQ sensors.""" -from homeassistant.components import sleepiq from homeassistant.components.binary_sensor import BinarySensorDevice +from . import SleepIQSensor +from .const import DOMAIN, IS_IN_BED, SENSOR_TYPES, SIDES + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the SleepIQ sensors.""" if discovery_info is None: return - data = sleepiq.DATA + data = hass.data[DOMAIN] data.update() - dev = list() + dev = [] for bed_id, bed in data.beds.items(): - for side in sleepiq.SIDES: + for side in SIDES: if getattr(bed, side) is not None: dev.append(IsInBedBinarySensor(data, bed_id, side)) add_entities(dev) -class IsInBedBinarySensor(sleepiq.SleepIQSensor, BinarySensorDevice): +class IsInBedBinarySensor(SleepIQSensor, BinarySensorDevice): """Implementation of a SleepIQ presence sensor.""" def __init__(self, sleepiq_data, bed_id, side): """Initialize the sensor.""" - sleepiq.SleepIQSensor.__init__(self, sleepiq_data, bed_id, side) - self.type = sleepiq.IS_IN_BED + super().__init__(sleepiq_data, bed_id, side) self._state = None - self._name = sleepiq.SENSOR_TYPES[self.type] + self._name = SENSOR_TYPES[IS_IN_BED] self.update() @property @@ -42,5 +43,5 @@ class IsInBedBinarySensor(sleepiq.SleepIQSensor, BinarySensorDevice): def update(self): """Get the latest data from SleepIQ and updates the states.""" - sleepiq.SleepIQSensor.update(self) + super().update() self._state = self.side.is_in_bed diff --git a/homeassistant/components/sleepiq/const.py b/homeassistant/components/sleepiq/const.py new file mode 100644 index 00000000000..64f508167e1 --- /dev/null +++ b/homeassistant/components/sleepiq/const.py @@ -0,0 +1,11 @@ +"""Define constants for the SleepIQ component.""" + +DOMAIN = "sleepiq" + +IS_IN_BED = "is_in_bed" +SLEEP_NUMBER = "sleep_number" +SENSOR_TYPES = {SLEEP_NUMBER: "SleepNumber", IS_IN_BED: "Is In Bed"} + +LEFT = "left" +RIGHT = "right" +SIDES = [LEFT, RIGHT] diff --git a/homeassistant/components/sleepiq/manifest.json b/homeassistant/components/sleepiq/manifest.json index e6b0fe5c34a..44e519f57da 100644 --- a/homeassistant/components/sleepiq/manifest.json +++ b/homeassistant/components/sleepiq/manifest.json @@ -3,6 +3,5 @@ "name": "SleepIQ", "documentation": "https://www.home-assistant.io/integrations/sleepiq", "requirements": ["sleepyq==0.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sleepiq/sensor.py b/homeassistant/components/sleepiq/sensor.py index 3c2df69331c..b4c3054268d 100644 --- a/homeassistant/components/sleepiq/sensor.py +++ b/homeassistant/components/sleepiq/sensor.py @@ -1,5 +1,6 @@ """Support for SleepIQ sensors.""" -from homeassistant.components import sleepiq +from . import SleepIQSensor +from .const import DOMAIN, SENSOR_TYPES, SIDES, SLEEP_NUMBER ICON = "mdi:hotel" @@ -9,27 +10,27 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if discovery_info is None: return - data = sleepiq.DATA + data = hass.data[DOMAIN] data.update() - dev = list() + dev = [] for bed_id, bed in data.beds.items(): - for side in sleepiq.SIDES: + for side in SIDES: if getattr(bed, side) is not None: dev.append(SleepNumberSensor(data, bed_id, side)) add_entities(dev) -class SleepNumberSensor(sleepiq.SleepIQSensor): +class SleepNumberSensor(SleepIQSensor): """Implementation of a SleepIQ sensor.""" def __init__(self, sleepiq_data, bed_id, side): """Initialize the sensor.""" - sleepiq.SleepIQSensor.__init__(self, sleepiq_data, bed_id, side) + SleepIQSensor.__init__(self, sleepiq_data, bed_id, side) self._state = None - self.type = sleepiq.SLEEP_NUMBER - self._name = sleepiq.SENSOR_TYPES[self.type] + self.type = SLEEP_NUMBER + self._name = SENSOR_TYPES[self.type] self.update() @@ -45,5 +46,5 @@ class SleepNumberSensor(sleepiq.SleepIQSensor): def update(self): """Get the latest data from SleepIQ and updates the states.""" - sleepiq.SleepIQSensor.update(self) + SleepIQSensor.update(self) self._state = self.side.sleep_number diff --git a/homeassistant/components/slide/__init__.py b/homeassistant/components/slide/__init__.py index ccf4465577b..2fd3df1acb7 100644 --- a/homeassistant/components/slide/__init__.py +++ b/homeassistant/components/slide/__init__.py @@ -1,4 +1,4 @@ -"""Component for the Go Slide API.""" +"""Component for the Slide API.""" from datetime import timedelta import logging @@ -19,7 +19,15 @@ from homeassistant.helpers import config_validation as cv from homeassistant.helpers.discovery import async_load_platform from homeassistant.helpers.event import async_call_later, async_track_time_interval -from .const import API, COMPONENT, DEFAULT_RETRY, DOMAIN, SLIDES +from .const import ( + API, + COMPONENT, + CONF_INVERT_POSITION, + DEFAULT_OFFSET, + DEFAULT_RETRY, + DOMAIN, + SLIDES, +) _LOGGER = logging.getLogger(__name__) @@ -34,6 +42,7 @@ CONFIG_SCHEMA = vol.Schema( vol.Optional( CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL ): cv.time_period, + vol.Optional(CONF_INVERT_POSITION, default=False): cv.boolean, } ) }, @@ -60,7 +69,7 @@ async def async_setup(hass, config): for slide in result: if "device_id" not in slide: _LOGGER.error( - "Found invalid Slide entry, device_id is missing. Entry=%s", slide, + "Found invalid Slide entry, device_id is missing. Entry=%s", slide ) continue @@ -73,6 +82,7 @@ async def async_setup(hass, config): oldpos = slidenew.get("pos") slidenew["pos"] = None slidenew["online"] = False + slidenew["invert"] = config[DOMAIN][CONF_INVERT_POSITION] if "device_info" not in slide: _LOGGER.error( @@ -91,15 +101,21 @@ async def async_setup(hass, config): if oldpos is None or oldpos == slidenew["pos"]: slidenew["state"] = ( - STATE_CLOSED if slidenew["pos"] > 0.95 else STATE_OPEN + STATE_CLOSED + if slidenew["pos"] > (1 - DEFAULT_OFFSET) + else STATE_OPEN ) elif oldpos < slidenew["pos"]: slidenew["state"] = ( - STATE_CLOSED if slidenew["pos"] >= 0.95 else STATE_CLOSING + STATE_CLOSED + if slidenew["pos"] >= (1 - DEFAULT_OFFSET) + else STATE_CLOSING ) else: slidenew["state"] = ( - STATE_OPEN if slidenew["pos"] <= 0.05 else STATE_OPENING + STATE_OPEN + if slidenew["pos"] <= DEFAULT_OFFSET + else STATE_OPENING ) elif "code" in slide["device_info"]: _LOGGER.warning( @@ -135,7 +151,7 @@ async def async_setup(hass, config): result = await hass.data[DOMAIN][API].login() except (goslideapi.ClientConnectionError, goslideapi.ClientTimeoutError) as err: _LOGGER.error( - "Error connecting to Slide Cloud: %s, going to retry in %s seconds", + "Error connecting to Slide Cloud: %s, going to retry in %s second(s)", err, DEFAULT_RETRY, ) diff --git a/homeassistant/components/slide/const.py b/homeassistant/components/slide/const.py index de3d2e560c1..9748e5e0f8c 100644 --- a/homeassistant/components/slide/const.py +++ b/homeassistant/components/slide/const.py @@ -1,7 +1,9 @@ -"""Define constants for the Go Slide component.""" +"""Define constants for the Slide component.""" API = "api" COMPONENT = "cover" +CONF_INVERT_POSITION = "invert_position" DOMAIN = "slide" SLIDES = "slides" +DEFAULT_OFFSET = 0.15 DEFAULT_RETRY = 120 diff --git a/homeassistant/components/slide/cover.py b/homeassistant/components/slide/cover.py index a567a9bf61b..f50226b9f01 100644 --- a/homeassistant/components/slide/cover.py +++ b/homeassistant/components/slide/cover.py @@ -1,4 +1,4 @@ -"""Support for Go Slide slides.""" +"""Support for Slide slides.""" import logging @@ -12,13 +12,13 @@ from homeassistant.components.cover import ( ) from homeassistant.const import ATTR_ID -from .const import API, DOMAIN, SLIDES +from .const import API, DEFAULT_OFFSET, DOMAIN, SLIDES _LOGGER = logging.getLogger(__name__) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Set up cover(s) for Go Slide platform.""" + """Set up cover(s) for Slide platform.""" if discovery_info is None: return @@ -33,7 +33,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= class SlideCover(CoverDevice): - """Representation of a Go Slide cover.""" + """Representation of a Slide cover.""" def __init__(self, api, slide): """Initialize the cover.""" @@ -42,6 +42,7 @@ class SlideCover(CoverDevice): self._id = slide["id"] self._unique_id = slide["mac"] self._name = slide["name"] + self._invert = slide["invert"] @property def unique_id(self): @@ -95,6 +96,10 @@ class SlideCover(CoverDevice): """Return the current position of cover shutter.""" pos = self._slide["pos"] if pos is not None: + if (1 - pos) <= DEFAULT_OFFSET or pos <= DEFAULT_OFFSET: + pos = round(pos) + if not self._invert: + pos = 1 - pos pos = int(pos * 100) return pos @@ -115,6 +120,8 @@ class SlideCover(CoverDevice): async def async_set_cover_position(self, **kwargs): """Move the cover to a specific position.""" position = kwargs[ATTR_POSITION] / 100 + if not self._invert: + position = 1 - position if self._slide["pos"] is not None: if position > self._slide["pos"]: diff --git a/homeassistant/components/slide/manifest.json b/homeassistant/components/slide/manifest.json index 74dc562203f..d5567b0d347 100644 --- a/homeassistant/components/slide/manifest.json +++ b/homeassistant/components/slide/manifest.json @@ -3,6 +3,5 @@ "name": "Slide", "documentation": "https://www.home-assistant.io/integrations/slide", "requirements": ["goslide-api==0.5.1"], - "dependencies": [], "codeowners": ["@ualex73"] } diff --git a/homeassistant/components/sma/manifest.json b/homeassistant/components/sma/manifest.json index a56fe7ab151..9cadec377a2 100644 --- a/homeassistant/components/sma/manifest.json +++ b/homeassistant/components/sma/manifest.json @@ -3,6 +3,5 @@ "name": "SMA Solar", "documentation": "https://www.home-assistant.io/integrations/sma", "requirements": ["pysma==0.3.5"], - "dependencies": [], "codeowners": ["@kellerza"] } diff --git a/homeassistant/components/sma/sensor.py b/homeassistant/components/sma/sensor.py index 40ec4179cd1..ce61d4ff17b 100644 --- a/homeassistant/components/sma/sensor.py +++ b/homeassistant/components/sma/sensor.py @@ -1,5 +1,4 @@ """SMA Solar Webconnect interface.""" -import asyncio from datetime import timedelta import logging @@ -132,7 +131,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= session = async_get_clientsession(hass, verify_ssl=config[CONF_VERIFY_SSL]) grp = config[CONF_GROUP] - url = "http{}://{}".format("s" if config[CONF_SSL] else "", config[CONF_HOST]) + protocol = "https" if config[CONF_SSL] else "http" + url = f"{protocol}://{config[CONF_HOST]}" sma = pysma.SMA(session, url, config[CONF_PASSWORD], group=grp) @@ -163,13 +163,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= return backoff_step = 0 - tasks = [] for sensor in hass_sensors: - task = sensor.async_update_values() - if task: - tasks.append(task) - if tasks: - await asyncio.wait(tasks) + sensor.async_update_values() interval = config.get(CONF_SCAN_INTERVAL) or timedelta(seconds=5) async_track_time_interval(hass, async_sma, interval) @@ -226,7 +221,8 @@ class SMAsensor(Entity): update = True self._state = self._sensor.value - return self.async_update_ha_state() if update else None + if update: + self.async_write_ha_state() @property def unique_id(self): diff --git a/homeassistant/components/smappee/manifest.json b/homeassistant/components/smappee/manifest.json index f3ed9c6e620..e2c24bf6d71 100644 --- a/homeassistant/components/smappee/manifest.json +++ b/homeassistant/components/smappee/manifest.json @@ -3,6 +3,5 @@ "name": "Smappee", "documentation": "https://www.home-assistant.io/integrations/smappee", "requirements": ["smappy==0.2.16"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/smappee/sensor.py b/homeassistant/components/smappee/sensor.py index 8f1e034dcac..cb252dda98b 100644 --- a/homeassistant/components/smappee/sensor.py +++ b/homeassistant/components/smappee/sensor.py @@ -3,9 +3,11 @@ from datetime import timedelta import logging from homeassistant.const import ( + DEGREE, ENERGY_KILO_WATT_HOUR, POWER_WATT, UNIT_PERCENTAGE, + VOLT, VOLUME_CUBIC_METERS, ) from homeassistant.helpers.entity import Entity @@ -25,7 +27,7 @@ SENSOR_TYPES = { "active_power", ], "current": ["Current", "mdi:gauge", "local", "A", "current"], - "voltage": ["Voltage", "mdi:gauge", "local", "V", "voltage"], + "voltage": ["Voltage", "mdi:gauge", "local", VOLT, "voltage"], "active_cosfi": [ "Power Factor", "mdi:gauge", @@ -72,7 +74,7 @@ SENSOR_TYPES = { "Water Sensor Temperature", "mdi:temperature-celsius", "water", - "°", + DEGREE, "temperature", ], "water_sensor_humidity": [ diff --git a/homeassistant/components/smarthab/manifest.json b/homeassistant/components/smarthab/manifest.json index dc3a2857659..141928d2d92 100644 --- a/homeassistant/components/smarthab/manifest.json +++ b/homeassistant/components/smarthab/manifest.json @@ -3,6 +3,5 @@ "name": "SmartHab", "documentation": "https://www.home-assistant.io/integrations/smarthab", "requirements": ["smarthab==0.20"], - "dependencies": [], "codeowners": ["@outadoc"] } diff --git a/homeassistant/components/smartthings/.translations/bg.json b/homeassistant/components/smartthings/.translations/bg.json deleted file mode 100644 index 8a13a76a2a9..00000000000 --- a/homeassistant/components/smartthings/.translations/bg.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "\u041c\u043e\u043b\u044f, \u0443\u0432\u0435\u0440\u0435\u0442\u0435 \u0441\u0435, \u0447\u0435 \u0441\u0442\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043b\u0438 \u0438 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043b\u0438 HomeAmistant SmartApp \u0438 \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "app_setup_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 SmartApp. \u041c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", - "base_url_not_https": "`base_url` \u0437\u0430 `http` \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u0438 \u0434\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441 `https://`", - "token_already_setup": "\u041a\u043e\u0434\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d.", - "token_forbidden": "\u041a\u043e\u0434\u044a\u0442 \u043d\u044f\u043c\u0430 \u0438\u0437\u0438\u0441\u043a\u0443\u0435\u043c\u0438\u0442\u0435 OAuth \u043f\u0440\u0430\u0432\u0430.", - "token_invalid_format": "\u041a\u043e\u0434\u044a\u0442 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 UID/GUID", - "token_unauthorized": "\u041a\u043e\u0434\u044a\u0442 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u0438\u043b\u0438 \u0432\u0435\u0447\u0435 \u043d\u0435 \u0435 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d.", - "webhook_error": "SmartThings \u043d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0430 \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u0432 `base_url`. \u041c\u043e\u043b\u044f, \u043f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u0439\u0442\u0435 \u0438\u0437\u0438\u0441\u043a\u0432\u0430\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430." - }, - "step": { - "user": { - "data": { - "access_token": "\u041a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 SmartThings [Personal Access Token] ( {token_url} ), \u043a\u043e\u0439\u0442\u043e \u0435 \u0441\u044a\u0437\u0434\u0430\u0434\u0435\u043d \u0441\u043f\u043e\u0440\u0435\u0434 [\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u0442\u0430] ( {component_url} ).", - "title": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f (Personal Access Token)" - }, - "wait_install": { - "description": "\u041c\u043e\u043b\u044f, \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0439\u0442\u0435 Home Assistant SmartApp \u043f\u043e\u043d\u0435 \u043d\u0430 \u0435\u0434\u043d\u043e \u043c\u044f\u0441\u0442\u043e \u0438 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0417\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435.", - "title": "\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0439\u0442\u0435 SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/ca.json b/homeassistant/components/smartthings/.translations/ca.json deleted file mode 100644 index e1fca79c24e..00000000000 --- a/homeassistant/components/smartthings/.translations/ca.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Assegura't que has instal\u00b7lat i autoritzat l'aplicaci\u00f3 SmartApp de Home Assistant i torna-ho a provar.", - "app_setup_error": "No s'ha pogut configurar SmartApp. Siusplau, torna-ho a provar.", - "base_url_not_https": "L'`base_url` per al component `http` ha d'estar configurat i comen\u00e7ar amb `https://`.", - "token_already_setup": "El testimoni d'autenticaci\u00f3 ja ha estat configurat.", - "token_forbidden": "El testimoni d'autenticaci\u00f3 no t\u00e9 cont\u00e9 els apartats OAuth obligatoris.", - "token_invalid_format": "El testimoni d'autenticaci\u00f3 ha d'estar en format UID/GUID", - "token_unauthorized": "El testimoni d'autenticaci\u00f3 no \u00e9s v\u00e0lid o ja no t\u00e9 autoritzaci\u00f3.", - "webhook_error": "SmartThings no ha pogut validar l'adre\u00e7a final configurada a `base_url`. Revisa els requisits del component." - }, - "step": { - "user": { - "data": { - "access_token": "Testimoni d'acc\u00e9s" - }, - "description": "Introdueix un [testimoni d'acc\u00e9s personal]({token_url}) de SmartThings que s'ha creat a trav\u00e9s les [instruccions]({component_url}).", - "title": "Introdueix el testimoni d'autenticaci\u00f3 personal" - }, - "wait_install": { - "description": "Instal\u00b7la l'SmartApp de Home Assistant en almenys una ubicaci\u00f3 i prem a Envia.", - "title": "Instal\u00b7laci\u00f3 de SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/cs.json b/homeassistant/components/smartthings/.translations/cs.json deleted file mode 100644 index f0d55c50b26..00000000000 --- a/homeassistant/components/smartthings/.translations/cs.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Zkontrolujte, zda jste nainstalovali a autorizovali aplikaci Home Assistant SmartApp a zkuste to znovu.", - "app_setup_error": "Nelze nastavit SmartApp. Pros\u00edm zkuste to znovu.", - "base_url_not_https": "' Base_url ' pro komponentu ' http ' mus\u00ed b\u00fdt nakonfigurov\u00e1na a za\u010d\u00ednat ' https://'.", - "token_already_setup": "Token ji\u017e byl nastaven.", - "token_forbidden": "Token nem\u00e1 po\u017eadovan\u00e9 rozsahy OAuth.", - "token_invalid_format": "Token mus\u00ed b\u00fdt ve form\u00e1tu UID/GUID.", - "token_unauthorized": "Token je neplatn\u00fd nebo ji\u017e nen\u00ed autorizov\u00e1n.", - "webhook_error": "SmartThings nemohly ov\u011b\u0159it koncov\u00fd bod nakonfigurovan\u00fd v `base_url`. P\u0159e\u010dt\u011bte si pros\u00edm po\u017eadavky na komponenty." - }, - "step": { - "user": { - "data": { - "access_token": "P\u0159\u00edstupov\u00fd token" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/da.json b/homeassistant/components/smartthings/.translations/da.json deleted file mode 100644 index 04fe2171f39..00000000000 --- a/homeassistant/components/smartthings/.translations/da.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "S\u00f8rg for, at du har installeret og godkendt Home Assistant SmartApp, og pr\u00f8v igen.", - "app_setup_error": "SmartApp kunne ikke konfigureres. Pr\u00f8v igen.", - "base_url_not_https": "`base_url` til `http`-komponenten skal konfigureres og starte med `https://`.", - "token_already_setup": "Token er allerede konfigureret.", - "token_forbidden": "Adgangstoken er ikke indenfor OAuth", - "token_invalid_format": "Adgangstoken skal v\u00e6re i UID/GUID format", - "token_unauthorized": "Adgangstoken er ugyldigt eller ikke l\u00e6ngere godkendt.", - "webhook_error": "SmartThings kunne ikke validere slutpunktet konfigureret i `base_url`. Gennemg\u00e5 venligst komponentkravene." - }, - "step": { - "user": { - "data": { - "access_token": "Adgangstoken" - }, - "description": "Indtast venligst en SmartThings [Personal Access Token]({token_url}), som er oprettet if\u00f8lge [instruktionerne]({component_url}).", - "title": "Indtast personlig adgangstoken" - }, - "wait_install": { - "description": "Installer Home Assistant SmartApp mindst et sted og klik p\u00e5 send.", - "title": "Installer SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/de.json b/homeassistant/components/smartthings/.translations/de.json deleted file mode 100644 index c6baac67898..00000000000 --- a/homeassistant/components/smartthings/.translations/de.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Stelle sicher, dass du die Home Assistant SmartApp installiert und autorisiert hast, und versuche es erneut.", - "app_setup_error": "SmartApp kann nicht eingerichtet werden. Bitte versuche es erneut.", - "base_url_not_https": "Die `base_url` f\u00fcr die` http`-Komponente muss konfiguriert sein und mit `https://` beginnen.", - "token_already_setup": "Das Token wurde bereits eingerichtet.", - "token_forbidden": "Das Token verf\u00fcgt nicht \u00fcber die erforderlichen OAuth-Bereiche.", - "token_invalid_format": "Das Token muss im UID/GUID-Format vorliegen.", - "token_unauthorized": "Das Token ist ung\u00fcltig oder nicht mehr autorisiert.", - "webhook_error": "SmartThings konnte den in 'base_url' angegebenen Endpunkt nicht validieren. Bitte \u00fcberpr\u00fcfe die Komponentenanforderungen." - }, - "step": { - "user": { - "data": { - "access_token": "Zugangstoken" - }, - "description": "Bitte gib einen SmartThings [pers\u00f6nlichen Zugangstoken]({token_url}) ein, welcher gem\u00e4\u00df den [Anweisungen]({component_url}) erstellt wurde.", - "title": "Gib den pers\u00f6nlichen Zugangstoken an" - }, - "wait_install": { - "description": "Installiere die Home-Assistent SmartApp an mindestens einer Stelle, und klicke auf Absenden.", - "title": "SmartApp installieren" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/en.json b/homeassistant/components/smartthings/.translations/en.json deleted file mode 100644 index e35035b8fa0..00000000000 --- a/homeassistant/components/smartthings/.translations/en.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Please ensure you have installed and authorized the Home Assistant SmartApp and try again.", - "app_setup_error": "Unable to setup the SmartApp. Please try again.", - "base_url_not_https": "The `base_url` for the `http` component must be configured and start with `https://`.", - "token_already_setup": "The token has already been setup.", - "token_forbidden": "The token does not have the required OAuth scopes.", - "token_invalid_format": "The token must be in the UID/GUID format", - "token_unauthorized": "The token is invalid or no longer authorized.", - "webhook_error": "SmartThings could not validate the endpoint configured in `base_url`. Please review the component requirements." - }, - "step": { - "user": { - "data": { - "access_token": "Access Token" - }, - "description": "Please enter a SmartThings [Personal Access Token]({token_url}) that has been created per the [instructions]({component_url}).", - "title": "Enter Personal Access Token" - }, - "wait_install": { - "description": "Please install the Home Assistant SmartApp in at least one location and click submit.", - "title": "Install SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/es-419.json b/homeassistant/components/smartthings/.translations/es-419.json deleted file mode 100644 index 4dc94324695..00000000000 --- a/homeassistant/components/smartthings/.translations/es-419.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "error": { - "app_setup_error": "No se puede configurar el SmartApp. Por favor, int\u00e9ntelo de nuevo.", - "base_url_not_https": "El `base_url` para el componente `http` debe estar configurado y empezar por `https://`.", - "token_already_setup": "El token ya ha sido configurado.", - "token_invalid_format": "El token debe estar en formato UID/GUID", - "token_unauthorized": "El token no es v\u00e1lido o ya no est\u00e1 autorizado.", - "webhook_error": "SmartThings no pudo validar el endpoint configurado en `base_url`. Por favor, revise los requisitos de los componentes." - }, - "step": { - "user": { - "data": { - "access_token": "Token de acceso" - }, - "title": "Ingresar token de acceso personal" - }, - "wait_install": { - "description": "Instale la SmartApp de Home Assistant en al menos una ubicaci\u00f3n y haga clic en enviar.", - "title": "Instalar SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/es.json b/homeassistant/components/smartthings/.translations/es.json deleted file mode 100644 index 513b8ba3ffe..00000000000 --- a/homeassistant/components/smartthings/.translations/es.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Aseg\u00farate de haber instalado y autorizado la SmartApp de Home Assistant y vuelve a intentarlo.", - "app_setup_error": "No se pudo configurar el SmartApp. Por favor, int\u00e9ntelo de nuevo.", - "base_url_not_https": "La 'base_url' del componente 'http' debe empezar por 'https://'.", - "token_already_setup": "El token ya ha sido configurado.", - "token_forbidden": "El token no tiene los \u00e1mbitos de OAuth necesarios.", - "token_invalid_format": "El token debe estar en formato UID/GUID", - "token_unauthorized": "El token no es v\u00e1lido o ya no est\u00e1 autorizado.", - "webhook_error": "SmartThings no ha podido validar el endpoint configurado en 'base_url'. Por favor, revisa los requisitos del componente." - }, - "step": { - "user": { - "data": { - "access_token": "Token de acceso" - }, - "description": "Por favor, introduce el [token de acceso personal]({token_url}) de SmartThings que se haya creado seg\u00fan las [instrucciones]({component_url}).", - "title": "Introduce el token de acceso personal" - }, - "wait_install": { - "description": "Por favor, instala Home Assistant SmartApp en al menos una ubicaci\u00f3n y pulsa en enviar.", - "title": "Instalar SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/fr.json b/homeassistant/components/smartthings/.translations/fr.json deleted file mode 100644 index 56c30acbf1b..00000000000 --- a/homeassistant/components/smartthings/.translations/fr.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Assurez-vous d'avoir install\u00e9 et autoris\u00e9 l'application Home Assistant SmartApp, puis r\u00e9essayez.", - "app_setup_error": "Impossible de configurer la SmartApp. Veuillez r\u00e9essayer.", - "base_url_not_https": "Le param\u00e8tre `base_url` du composant` http` doit \u00eatre configur\u00e9 et commencer par `https: //`.", - "token_already_setup": "Le jeton a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9.", - "token_forbidden": "Le jeton n'a pas les port\u00e9es OAuth requises.", - "token_invalid_format": "Le jeton doit \u00eatre au format UID / GUID", - "token_unauthorized": "Le jeton est invalide ou n'est plus autoris\u00e9.", - "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": { - "user": { - "data": { - "access_token": "Jeton d'acc\u00e8s" - }, - "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" - }, - "wait_install": { - "description": "Veuillez installer la SmartApp de Home Assistant dans au moins un emplacement et cliquez sur Soumettre.", - "title": "Installer SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/he.json b/homeassistant/components/smartthings/.translations/he.json deleted file mode 100644 index 7f80900d828..00000000000 --- a/homeassistant/components/smartthings/.translations/he.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "\u05d0\u05e0\u05d0 \u05d5\u05d3\u05d0 \u05e9\u05d4\u05ea\u05e7\u05e0\u05ea \u05d0\u05d9\u05e9\u05e8\u05ea \u05d0\u05ea Home Assistant SmartApp \u05d5\u05dc\u05e0\u05e1\u05d5\u05ea \u05e9\u05d5\u05d1.", - "app_setup_error": "\u05d0\u05d9\u05df \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea SmartApp. \u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", - "base_url_not_https": "\u05d9\u05e9 \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea \u05d4- `base_url` \u05e2\u05d1\u05d5\u05e8 \u05e8\u05db\u05d9\u05d1` http` \u05d5\u05dc\u05d4\u05ea\u05d7\u05d9\u05dc \u05d1- `https: //.", - "token_already_setup": "\u05d4\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05db\u05d1\u05e8 \u05d4\u05d5\u05d2\u05d3\u05e8.", - "token_forbidden": "\u05dc\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d0\u05d9\u05df \u05d0\u05ea \u05d8\u05d5\u05d5\u05d7\u05d9 OAuth \u05d4\u05d3\u05e8\u05d5\u05e9\u05d9\u05dd.", - "token_invalid_format": "\u05d4\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d1\u05e4\u05d5\u05e8\u05de\u05d8 UID / GUID", - "token_unauthorized": "\u05d4\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d0\u05d9\u05e0\u05d5 \u05d7\u05d5\u05e7\u05d9 \u05d0\u05d5 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4 \u05e2\u05d5\u05d3.", - "webhook_error": "SmartThings \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d9\u05d7 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05e0\u05e7\u05d5\u05d3\u05ea \u05d4\u05e7\u05e6\u05d4 \u05e9\u05d4\u05d5\u05d2\u05d3\u05e8\u05d4 \u05d1- `base_url`. \u05e2\u05d9\u05d9\u05df \u05d1\u05d3\u05e8\u05d9\u05e9\u05d5\u05ea \u05d4\u05e8\u05db\u05d9\u05d1." - }, - "step": { - "user": { - "data": { - "access_token": "\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d2\u05d9\u05e9\u05d4" - }, - "description": "\u05d4\u05d6\u05df SmartThings [\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d2\u05d9\u05e9\u05d4 \u05d0\u05d9\u05e9\u05d9\u05ea] ( {token_url} ) \u05e9\u05e0\u05d5\u05e6\u05e8 \u05dc\u05e4\u05d9 [\u05d4\u05d5\u05e8\u05d0\u05d5\u05ea] ( {component_url} ).", - "title": "\u05d4\u05d6\u05df \u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d2\u05d9\u05e9\u05d4 \u05d0\u05d9\u05e9 " - }, - "wait_install": { - "description": "\u05d4\u05ea\u05e7\u05df \u05d0\u05ea \u05d4- Home Assistant SmartApp \u05dc\u05e4\u05d7\u05d5\u05ea \u05d1\u05de\u05d9\u05e7\u05d5\u05dd \u05d0\u05d7\u05d3 \u05d5\u05dc\u05d7\u05e5 \u05e2\u05dc \u05e9\u05dc\u05d7.", - "title": "\u05d4\u05ea\u05e7\u05df \u05d0\u05ea SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/hu.json b/homeassistant/components/smartthings/.translations/hu.json deleted file mode 100644 index e4970780bc0..00000000000 --- a/homeassistant/components/smartthings/.translations/hu.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Gy\u0151z\u0151dj meg r\u00f3la, hogy telep\u00edtetted \u00e9s enged\u00e9lyezted a SmartApp Home Assistant alkalmaz\u00e1st, \u00e9s pr\u00f3b\u00e1lkozz \u00fajra.", - "app_setup_error": "A SmartApp be\u00e1ll\u00edt\u00e1sa nem siker\u00fclt. K\u00e9rlek pr\u00f3b\u00e1ld \u00fajra.", - "base_url_not_https": "A `http` \u00f6sszetev\u0151 `base_url` be\u00e1ll\u00edt\u00e1s\u00e1t konfigur\u00e1lni kell, \u00e9s `https: //` -vel kell kezdeni.", - "token_already_setup": "A tokent m\u00e1r be\u00e1ll\u00edtottuk.", - "token_forbidden": "A token nem rendelkezik a sz\u00fcks\u00e9ges OAuth-tartom\u00e1nyokkal.", - "token_invalid_format": "A tokennek UID / GUID form\u00e1tumban kell lennie", - "token_unauthorized": "A token \u00e9rv\u00e9nytelen vagy m\u00e1r nem enged\u00e9lyezett.", - "webhook_error": "A SmartThings nem tudta \u00e9rv\u00e9nyes\u00edteni a `base_url`-ben konfigur\u00e1lt v\u00e9gpontot. K\u00e9rlek, tekintsd \u00e1t az \u00f6sszetev\u0151 k\u00f6vetelm\u00e9nyeit." - }, - "step": { - "user": { - "data": { - "access_token": "Hozz\u00e1f\u00e9r\u00e9s a Tokenhez" - }, - "description": "K\u00e9rlek add meg a SmartThings [Personal Access Tokent]({token_url}), amit az [instrukci\u00f3k] ({component_url}) alapj\u00e1n hozt\u00e1l l\u00e9tre.", - "title": "Adja meg a szem\u00e9lyes hozz\u00e1f\u00e9r\u00e9si Tokent" - }, - "wait_install": { - "description": "K\u00e9rj\u00fck, telep\u00edtse a Home Assistant SmartAppot legal\u00e1bb egy helyre, \u00e9s kattintson a K\u00fcld\u00e9s gombra.", - "title": "A SmartApp telep\u00edt\u00e9se" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/it.json b/homeassistant/components/smartthings/.translations/it.json deleted file mode 100644 index c2b17eed04d..00000000000 --- a/homeassistant/components/smartthings/.translations/it.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Assicurati di avere installato ed autorizzato la SmartApp Home Assistant e riprova.", - "app_setup_error": "Impossibile configurare SmartApp. Riprovare.", - "base_url_not_https": "Il `base_url` per il componente `http` deve essere configurato e deve iniziare con `https://`.", - "token_already_setup": "Il token \u00e8 gi\u00e0 stato configurato.", - "token_forbidden": "Il token non dispone degli ambiti OAuth necessari.", - "token_invalid_format": "Il token deve essere nel formato UID/GUID", - "token_unauthorized": "Il token non \u00e8 valido o non \u00e8 pi\u00f9 autorizzato.", - "webhook_error": "SmartThings non ha potuto convalidare l'endpoint configurato in `base_url`. Si prega di rivedere i requisiti del componente." - }, - "step": { - "user": { - "data": { - "access_token": "Token di accesso" - }, - "description": "Inserisci un [Token di Accesso Personale]({token_url}) di SmartThings che \u00e8 stato creato secondo lo [istruzioni]({component_url}).", - "title": "Inserisci il Token di Accesso Personale" - }, - "wait_install": { - "description": "Si prega di installare l'Home Assistant SmartApp in almeno una posizione e fare clic su Invia.", - "title": "Installa SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/ko.json b/homeassistant/components/smartthings/.translations/ko.json deleted file mode 100644 index f7d86af8394..00000000000 --- a/homeassistant/components/smartthings/.translations/ko.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Home Assistant SmartApp \uc744 \uc124\uce58\ud558\uace0 \uc778\uc99d\ud588\ub294\uc9c0 \ud655\uc778\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "app_setup_error": "SmartApp \uc744 \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "base_url_not_https": "`http` \uad6c\uc131\uc694\uc18c\uc758 `base_url` \uc740 \ubc18\ub4dc\uc2dc `https://`\ub85c \uc2dc\uc791\ud558\ub3c4\ub85d \uad6c\uc131\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "token_already_setup": "\ud1a0\ud070\uc774 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "token_forbidden": "\ud1a0\ud070\uc5d0 \ud544\uc694\ud55c OAuth \ubc94\uc704\ubaa9\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.", - "token_invalid_format": "\ud1a0\ud070\uc740 UID/GUID \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4", - "token_unauthorized": "\ud1a0\ud070\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uac70\ub098 \uc2b9\uc778\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "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": { - "user": { - "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.", - "title": "\uac1c\uc778 \uc561\uc138\uc2a4 \ud1a0\ud070 \uc785\ub825" - }, - "wait_install": { - "description": "\ud558\ub098 \uc774\uc0c1\uc758 \uc704\uce58\uc5d0 Home Assistant SmartApp \uc744 \uc124\uce58\ud558\uace0 submit \uc744 \ud074\ub9ad\ud574\uc8fc\uc138\uc694.", - "title": "SmartApp \uc124\uce58" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/lb.json b/homeassistant/components/smartthings/.translations/lb.json deleted file mode 100644 index fc80ba9f722..00000000000 --- a/homeassistant/components/smartthings/.translations/lb.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Stellt w.e.g s\u00e9cher dass d'Home Assistant SmartApp install\u00e9iert an autoris\u00e9iert ass, a prob\u00e9iert nach emol.", - "app_setup_error": "Kann SmartApp net install\u00e9ieren. Prob\u00e9iert w.e.g. nach emol.", - "base_url_not_https": "`base_url` fir den `http` Komponent muss konfigur\u00e9iert sinn a mat `https://`uf\u00e4nken.", - "token_already_setup": "Den Jeton gouf schonn ageriicht.", - "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" - }, - "step": { - "user": { - "data": { - "access_token": "Acc\u00e8ss Jeton" - }, - "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" - }, - "wait_install": { - "description": "Install\u00e9iert d'Home Assistant SmartApp op mannst ee mol a klickt op Ofsch\u00e9cken.", - "title": "SmartApp install\u00e9ieren" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/nl.json b/homeassistant/components/smartthings/.translations/nl.json deleted file mode 100644 index 2b5b646c458..00000000000 --- a/homeassistant/components/smartthings/.translations/nl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Zorg ervoor dat u de Home Assistant SmartApp heeft ge\u00efnstalleerd en geautoriseerd en probeer het opnieuw.", - "app_setup_error": "Instellen van SmartApp mislukt. Probeer het opnieuw.", - "base_url_not_https": "De `base_url` voor het `http` component moet worden geconfigureerd en beginnen met `https://`.", - "token_already_setup": "Het token is al ingesteld.", - "token_forbidden": "Het token heeft niet de vereiste OAuth-scopes.", - "token_invalid_format": "Het token moet de UID/GUID-indeling hebben", - "token_unauthorized": "Het token is ongeldig of niet langer geautoriseerd.", - "webhook_error": "SmartThings kon het in 'base_url` geconfigureerde endpoint niet goedkeuren. Lees de componentvereisten door." - }, - "step": { - "user": { - "data": { - "access_token": "Toegangstoken" - }, - "description": "Voer een SmartThings [Personal Access Token]({token_url}) in die is aangemaakt volgens de [instructies]({component_url}).", - "title": "Persoonlijk toegangstoken invoeren" - }, - "wait_install": { - "description": "Installeer de Home Assistant SmartApp in tenminste \u00e9\u00e9n locatie en klik Verzenden.", - "title": "Installeer SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/nn.json b/homeassistant/components/smartthings/.translations/nn.json deleted file mode 100644 index 929e95dc2ff..00000000000 --- a/homeassistant/components/smartthings/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/no.json b/homeassistant/components/smartthings/.translations/no.json deleted file mode 100644 index a25de0e2feb..00000000000 --- a/homeassistant/components/smartthings/.translations/no.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "V\u00e6r sikker p\u00e5 at du har installert og autorisert Home Assistant SmartApp og pr\u00f8v igjen.", - "app_setup_error": "Kan ikke konfigurere SmartApp. Vennligst pr\u00f8v p\u00e5 nytt.", - "base_url_not_https": "`base_url` for `http` komponenten m\u00e5 konfigureres og starte med `https://`.", - "token_already_setup": "Token har allerede blitt satt opp.", - "token_forbidden": "Tokenet har ikke de n\u00f8dvendige OAuth-omfangene.", - "token_invalid_format": "Token m\u00e5 v\u00e6re i UID/GUID format", - "token_unauthorized": "Tollet er ugyldig eller ikke lenger autorisert.", - "webhook_error": "SmartThings kunne ikke validere endepunktet konfigurert i `base_url`. Vennligst se komponent krav." - }, - "step": { - "user": { - "data": { - "access_token": "Tilgangstoken" - }, - "description": "Vennligst skriv inn en SmartThings [Personlig tilgangstoken]({token_url}) som er opprettet etter [instruksjonene]({component_url}).", - "title": "Oppgi Personlig Tilgangstoken" - }, - "wait_install": { - "description": "Vennligst installer Home Assistant SmartApp p\u00e5 minst ett sted og klikk p\u00e5 send.", - "title": "Installer SmartApp" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/pl.json b/homeassistant/components/smartthings/.translations/pl.json deleted file mode 100644 index 849ad174134..00000000000 --- a/homeassistant/components/smartthings/.translations/pl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Upewnij si\u0119, \u017ce zainstalowa\u0142e\u015b i autoryzowa\u0142e\u015b Home Assistant SmartApp i spr\u00f3buj ponownie.", - "app_setup_error": "Nie mo\u017cna skonfigurowa\u0107 SmartApp. Spr\u00f3buj ponownie.", - "base_url_not_https": "Parametr `base_url` dla komponentu `http` musi by\u0107 skonfigurowany i rozpoczyna\u0107 si\u0119 od `https://`.", - "token_already_setup": "Token zosta\u0142 ju\u017c skonfigurowany.", - "token_forbidden": "Token nie ma wymaganych zakres\u00f3w OAuth.", - "token_invalid_format": "Token musi by\u0107 w formacie UID/GUID", - "token_unauthorized": "Token jest niewa\u017cny lub nie ma ju\u017c autoryzacji.", - "webhook_error": "SmartThings nie mo\u017ce sprawdzi\u0107 poprawno\u015bci punktu ko\u0144cowego skonfigurowanego w `base_url`. Sprawd\u017a wymagania dotycz\u0105ce komponentu." - }, - "step": { - "user": { - "data": { - "access_token": "Token dost\u0119pu" - }, - "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" - }, - "wait_install": { - "description": "Prosz\u0119 zainstalowa\u0107 Home Assistant SmartApp w co najmniej jednej lokalizacji i klikn\u0105\u0107 przycisk Wy\u015blij.", - "title": "Zainstaluj SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/pt-BR.json b/homeassistant/components/smartthings/.translations/pt-BR.json deleted file mode 100644 index 84194fee482..00000000000 --- a/homeassistant/components/smartthings/.translations/pt-BR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Por favor, certifique-se de ter instalado e autorizado o Home Assistant SmartApp e tente novamente.", - "app_setup_error": "N\u00e3o \u00e9 poss\u00edvel configurar o SmartApp. Por favor, tente novamente.", - "base_url_not_https": "O `base_url` para o componente` http` deve ser configurado e iniciar com `https: //`.", - "token_already_setup": "O token j\u00e1 foi configurado.", - "token_forbidden": "O token n\u00e3o possui os escopos necess\u00e1rios do OAuth.", - "token_invalid_format": "O token deve estar no formato UID / GUID", - "token_unauthorized": "O token \u00e9 inv\u00e1lido ou n\u00e3o est\u00e1 mais autorizado.", - "webhook_error": "O SmartThings n\u00e3o p\u00f4de validar o terminal configurado em `base_url`. Por favor, revise os requisitos do componente." - }, - "step": { - "user": { - "data": { - "access_token": "Token de Acesso" - }, - "description": "Por favor, insira um SmartThings [Personal Access Token] ( {token_url} ) que foi criado de acordo com as [instru\u00e7\u00f5es] ( {component_url} ).", - "title": "Digite o token de acesso pessoal" - }, - "wait_install": { - "description": "Por favor, instale o Home Assistant SmartApp em pelo menos um local e clique em enviar.", - "title": "Instalar o SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/pt.json b/homeassistant/components/smartthings/.translations/pt.json deleted file mode 100644 index f49fe04ae8e..00000000000 --- a/homeassistant/components/smartthings/.translations/pt.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Por favor, instale o Home Assistant SmartApp em pelo menos um local e tente de novo.", - "app_setup_error": "N\u00e3o \u00e9 poss\u00edvel configurar o SmartApp. Por favor, tente novamente.", - "base_url_not_https": "O `base_url` para o componente` http` deve ser configurado e iniciar com `https://`.", - "token_already_setup": "O token j\u00e1 foi configurado.", - "token_forbidden": "O token n\u00e3o tem tem a cobertura OAuth necess\u00e1ria.", - "token_invalid_format": "O token deve estar no formato UID/GUID", - "token_unauthorized": "O token \u00e9 inv\u00e1lido ou ja n\u00e3o est\u00e1 autorizado." - }, - "step": { - "user": { - "data": { - "access_token": "Token de Acesso" - }, - "description": "Por favor, insira um SmartThings [Personal Access Token]({token_url} ) que foi criado de acordo com as [instru\u00e7\u00f5es]({component_url}).", - "title": "Insira o Token de acesso pessoal" - }, - "wait_install": { - "description": "Por favor, instale o Home Assistant SmartApp em pelo menos um local e clique em enviar.", - "title": "Instalar SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/ru.json b/homeassistant/components/smartthings/.translations/ru.json deleted file mode 100644 index f07586c16e3..00000000000 --- a/homeassistant/components/smartthings/.translations/ru.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0412\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0438 SmartApp 'Home Assistant' \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", - "app_setup_error": "\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c SmartApp. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", - "base_url_not_https": "\u0412 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 `http` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `base_url`, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441 `https://`.", - "token_already_setup": "\u0422\u043e\u043a\u0435\u043d \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d.", - "token_forbidden": "\u0422\u043e\u043a\u0435\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f OAuth.", - "token_invalid_format": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 UID / GUID.", - "token_unauthorized": "\u0422\u043e\u043a\u0435\u043d \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d.", - "webhook_error": "SmartThings \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0432 `base_url`. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443." - }, - "step": { - "user": { - "data": { - "access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430" - }, - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 [\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430]({token_url}) SmartThings, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({component_url}).", - "title": "SmartThings" - }, - "wait_install": { - "description": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 SmartApp 'Home Assistant' \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**.", - "title": "SmartThings" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/sl.json b/homeassistant/components/smartthings/.translations/sl.json deleted file mode 100644 index 506eb98cc95..00000000000 --- a/homeassistant/components/smartthings/.translations/sl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "Prepri\u010dajte se, da ste namestili in pooblastili Home Assistant SmartApp in poskusite znova.", - "app_setup_error": "SmartApp ni mogo\u010de nastaviti. Prosim poskusite ponovno.", - "base_url_not_https": "`Base_url` za` http 'komponento je treba konfigurirati in za\u010deti z `https: //`.", - "token_already_setup": "\u017deton je \u017ee nastavljen.", - "token_forbidden": "\u017deton nima zahtevanih OAuth obsegov.", - "token_invalid_format": "\u017deton mora biti v formatu UID / GUID", - "token_unauthorized": "\u017deton ni veljaven ali ni ve\u010d poobla\u0161\u010den.", - "webhook_error": "SmartThings ni mogel potrditi kon\u010dne to\u010dke nastavljene v 'base_url`. Prosimo, preglejte zahteve komponente." - }, - "step": { - "user": { - "data": { - "access_token": "\u017deton za dostop" - }, - "description": "Prosimo vnesite Smartthings [\u017deton za osebni dostop]({token_url}) ki je bil kreiran v skladu z [navodili]({component_url}).", - "title": "Vnesite \u017eeton za osebni dostop" - }, - "wait_install": { - "description": "Prosimo, namestite Home Assistant SmartApp v vsaj eni lokaciji in kliknite po\u0161lji.", - "title": "Namesti SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/sv.json b/homeassistant/components/smartthings/.translations/sv.json deleted file mode 100644 index 725957682ad..00000000000 --- a/homeassistant/components/smartthings/.translations/sv.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "V\u00e4nligen se till att du har installerat och auktoriserad Home Assistant SmartApp och f\u00f6rs\u00f6k igen.", - "app_setup_error": "Det gick inte att installera Home Assistant SmartApp. V\u00e4nligen f\u00f6rs\u00f6k igen.", - "base_url_not_https": "Den `base_url`f\u00f6r `http` komponenten m\u00e5ste konfigureras och b\u00f6rja med `https://`.", - "token_already_setup": "Token har redan installerats.", - "token_forbidden": "Token har inte det som kr\u00e4vs inom omf\u00e5ng f\u00f6r OAuth.", - "token_invalid_format": "Token m\u00e5ste vara i UID/GUID-format", - "token_unauthorized": "Denna token \u00e4r ogiltig eller inte l\u00e4ngre auktoriserad.", - "webhook_error": "SmartThings kunde inte validera endpoint konfigurerad i \" base_url`. V\u00e4nligen granska kraven f\u00f6r komponenten." - }, - "step": { - "user": { - "data": { - "access_token": "\u00c5tkomstnyckel" - }, - "description": "V\u00e4nligen ange en [personlig \u00e5tkomsttoken]({token_url}) f\u00f6r SmartThings som har skapats enligt [instruktionerna]({component_url}).", - "title": "Ange personlig \u00e5tkomsttoken" - }, - "wait_install": { - "description": "Installera Home Assistant SmartApp p\u00e5 minst en plats och klicka p\u00e5 Skicka.", - "title": "Installera SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/th.json b/homeassistant/components/smartthings/.translations/th.json deleted file mode 100644 index c871679860e..00000000000 --- a/homeassistant/components/smartthings/.translations/th.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "step": { - "wait_install": { - "description": "\u0e42\u0e1b\u0e23\u0e14\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07 Home Assistant SmartApp \u0e43\u0e19\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e19\u0e49\u0e2d\u0e22\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e41\u0e2b\u0e48\u0e07\u0e41\u0e25\u0e49\u0e27\u0e04\u0e25\u0e34\u0e01\u0e2a\u0e48\u0e07", - "title": "\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07 SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/zh-Hans.json b/homeassistant/components/smartthings/.translations/zh-Hans.json deleted file mode 100644 index 2326c394cc0..00000000000 --- a/homeassistant/components/smartthings/.translations/zh-Hans.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "\u8bf7\u786e\u4fdd\u60a8\u5df2\u5b89\u88c5\u5e76\u6388\u6743 Home Assistant SmartApp\uff0c\u7136\u540e\u518d\u8bd5\u4e00\u6b21\u3002", - "app_setup_error": "\u65e0\u6cd5\u8bbe\u7f6e SmartApp\u3002\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002", - "base_url_not_https": "\u5fc5\u987b\u914d\u7f6e `http` \u7ec4\u4ef6\u7684 `base_url` \u5e76\u4ee5 `https://` \u5f00\u5934\u3002", - "token_already_setup": "\u4ee4\u724c\u5df2\u7ecf\u8bbe\u7f6e\u3002", - "token_forbidden": "\u4ee4\u724c\u6ca1\u6709\u6240\u9700\u7684 OAuth \u4f5c\u7528\u57df\u3002", - "token_invalid_format": "\u4ee4\u724c\u5fc5\u987b\u7b26\u5408 UID/GUID \u683c\u5f0f", - "token_unauthorized": "\u4ee4\u724c\u65e0\u6548\u6216\u5df2\u5931\u6548\u3002", - "webhook_error": "SmartThings \u65e0\u6cd5\u9a8c\u8bc1 `base_url` \u4e2d\u914d\u7f6e\u7684\u7aef\u70b9\u3002\u8bf7\u67e5\u770b\u7ec4\u4ef6\u9700\u6c42\u3002" - }, - "step": { - "user": { - "data": { - "access_token": "\u8bbf\u95ee\u4ee4\u724c" - }, - "description": "\u8bf7\u8f93\u5165\u6309\u7167[\u8bf4\u660e]({component_url})\u521b\u5efa\u7684 SmartThings [\u4e2a\u4eba\u8bbf\u95ee\u4ee4\u724c]({token_url})\u3002", - "title": "\u8f93\u5165\u4e2a\u4eba\u8bbf\u95ee\u4ee4\u724c" - }, - "wait_install": { - "description": "\u8bf7\u81f3\u5c11\u5728\u4e00\u4e2a\u4f4d\u7f6e\u5b89\u88c5 Home Assistant SmartApp\uff0c\u7136\u540e\u70b9\u51fb\u201c\u63d0\u4ea4\u201d\u3002", - "title": "\u5b89\u88c5 SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/.translations/zh-Hant.json b/homeassistant/components/smartthings/.translations/zh-Hant.json deleted file mode 100644 index 10d73f8be35..00000000000 --- a/homeassistant/components/smartthings/.translations/zh-Hant.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "error": { - "app_not_installed": "\u8acb\u78ba\u8a8d\u5df2\u7d93\u5b89\u88dd\u4e26\u6388\u6b0a Home Assistant Smartapp \u5f8c\u518d\u8a66\u4e00\u6b21\u3002", - "app_setup_error": "\u7121\u6cd5\u8a2d\u5b9a SmartApp\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", - "base_url_not_https": "\u5fc5\u9808\u8a2d\u5b9a\u300chttp\u300d\u5143\u4ef6\u4e4b\u300cbase_url\u300d\uff0c\u4e26\u4ee5\u300chttps://\u300d\u70ba\u958b\u982d\u3002", - "token_already_setup": "\u5bc6\u9470\u5df2\u8a2d\u5b9a\u904e\u3002", - "token_forbidden": "\u5bc6\u9470\u4e0d\u5177\u6240\u9700\u7684 OAuth \u7bc4\u570d\u3002", - "token_invalid_format": "\u5bc6\u9470\u5fc5\u9808\u70ba UID/GUID \u683c\u5f0f", - "token_unauthorized": "\u5bc6\u9470\u7121\u6548\u6216\u4e0d\u518d\u5177\u6709\u6388\u6b0a\u3002", - "webhook_error": "SmartThings \u7121\u6cd5\u8a8d\u8b49\u300cbase_url\u300d\u4e2d\u8a2d\u5b9a\u4e4b\u7aef\u9ede\u3002\u8acb\u518d\u6b21\u78ba\u8a8d\u5143\u4ef6\u9700\u6c42\u3002" - }, - "step": { - "user": { - "data": { - "access_token": "\u5b58\u53d6\u5bc6\u9470" - }, - "description": "\u8acb\u8f38\u5165\u8ddf\u8457[ \u6307\u5f15]({component_url})\u6240\u7522\u751f\u7684 SmartThings [\u500b\u4eba\u5b58\u53d6\u5bc6\u9470]({token_url})\u3002", - "title": "\u8f38\u5165\u500b\u4eba\u5b58\u53d6\u5bc6\u9470" - }, - "wait_install": { - "description": "\u8acb\u81f3\u5c11\u65bc\u4e00\u500b\u4f4d\u7f6e\u4e2d\u5b89\u88dd Home Assistant Smartapp\uff0c\u4e26\u9ede\u9078\u50b3\u9001\u3002", - "title": "\u5b89\u88dd SmartApp" - } - }, - "title": "SmartThings" - } -} \ No newline at end of file diff --git a/homeassistant/components/smartthings/__init__.py b/homeassistant/components/smartthings/__init__.py index a1ea4f98c85..97a7d32a9c1 100644 --- a/homeassistant/components/smartthings/__init__.py +++ b/homeassistant/components/smartthings/__init__.py @@ -9,7 +9,7 @@ from pysmartapp.event import EVENT_TYPE_DEVICE from pysmartthings import Attribute, Capability, SmartThings from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_ACCESS_TOKEN +from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_FORBIDDEN from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.dispatcher import ( @@ -145,7 +145,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry): hass.data[DOMAIN][DATA_BROKERS][entry.entry_id] = broker except ClientResponseError as ex: - if ex.status in (401, 403): + if ex.status in (401, HTTP_FORBIDDEN): _LOGGER.exception( "Unable to setup configuration entry '%s' - please reconfigure the integration", entry.title, @@ -182,7 +182,7 @@ async def async_get_entry_scenes(entry: ConfigEntry, api): try: return await api.scenes(location_id=entry.data[CONF_LOCATION_ID]) except ClientResponseError as ex: - if ex.status == 403: + if ex.status == HTTP_FORBIDDEN: _LOGGER.exception( "Unable to load scenes for configuration entry '%s' because the access token does not have the required access", entry.title, @@ -209,12 +209,12 @@ async def async_remove_entry(hass: HomeAssistantType, entry: ConfigEntry) -> Non """Perform clean-up when entry is being removed.""" api = SmartThings(async_get_clientsession(hass), entry.data[CONF_ACCESS_TOKEN]) - # Remove the installed_app, which if already removed raises a 403 error. + # Remove the installed_app, which if already removed raises a HTTP_FORBIDDEN error. installed_app_id = entry.data[CONF_INSTALLED_APP_ID] try: await api.delete_installed_app(installed_app_id) except ClientResponseError as ex: - if ex.status == 403: + if ex.status == HTTP_FORBIDDEN: _LOGGER.debug( "Installed app %s has already been removed", installed_app_id, @@ -225,7 +225,7 @@ async def async_remove_entry(hass: HomeAssistantType, entry: ConfigEntry) -> Non _LOGGER.debug("Removed installed app %s", installed_app_id) # Remove the app if not referenced by other entries, which if already - # removed raises a 403 error. + # removed raises a HTTP_FORBIDDEN error. all_entries = hass.config_entries.async_entries(DOMAIN) app_id = entry.data[CONF_APP_ID] app_count = sum(1 for entry in all_entries if entry.data[CONF_APP_ID] == app_id) @@ -239,7 +239,7 @@ async def async_remove_entry(hass: HomeAssistantType, entry: ConfigEntry) -> Non try: await api.delete_app(app_id) except ClientResponseError as ex: - if ex.status == 403: + if ex.status == HTTP_FORBIDDEN: _LOGGER.debug("App %s has already been removed", app_id, exc_info=True) else: raise diff --git a/homeassistant/components/smartthings/climate.py b/homeassistant/components/smartthings/climate.py index 232540ee47b..83a1af981db 100644 --- a/homeassistant/components/smartthings/climate.py +++ b/homeassistant/components/smartthings/climate.py @@ -336,7 +336,7 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateDevice): await self._device.set_fan_mode(fan_mode, set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_hvac_mode(self, hvac_mode): """Set new target operation mode.""" @@ -355,7 +355,7 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateDevice): await asyncio.gather(*tasks) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_temperature(self, **kwargs): """Set new target temperature.""" @@ -376,21 +376,21 @@ class SmartThingsAirConditioner(SmartThingsEntity, ClimateDevice): await asyncio.gather(*tasks) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self): """Turn device on.""" await self._device.switch_on(set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self): """Turn device off.""" await self._device.switch_off(set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update the calculated fields of the AC.""" diff --git a/homeassistant/components/smartthings/config_flow.py b/homeassistant/components/smartthings/config_flow.py index 54c9f815008..cb4623cea1c 100644 --- a/homeassistant/components/smartthings/config_flow.py +++ b/homeassistant/components/smartthings/config_flow.py @@ -3,26 +3,30 @@ import logging from aiohttp import ClientResponseError from pysmartthings import APIResponseError, AppOAuth, SmartThings +from pysmartthings.installedapp import format_install_url import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import CONF_ACCESS_TOKEN +from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_FORBIDDEN from homeassistant.helpers.aiohttp_client import async_get_clientsession +# pylint: disable=unused-import from .const import ( APP_OAUTH_CLIENT_NAME, APP_OAUTH_SCOPES, CONF_APP_ID, - CONF_INSTALLED_APPS, + CONF_INSTALLED_APP_ID, CONF_LOCATION_ID, CONF_OAUTH_CLIENT_ID, CONF_OAUTH_CLIENT_SECRET, + CONF_REFRESH_TOKEN, DOMAIN, VAL_UID_MATCHER, ) from .smartapp import ( create_app, find_app, + get_webhook_url, setup_smartapp, setup_smartapp_endpoint, update_app, @@ -32,23 +36,8 @@ from .smartapp import ( _LOGGER = logging.getLogger(__name__) -@config_entries.HANDLERS.register(DOMAIN) -class SmartThingsFlowHandler(config_entries.ConfigFlow): - """ - Handle configuration of SmartThings integrations. - - Any number of integrations are supported. The high level flow follows: - 1) Flow initiated - a) User initiates through the UI - b) Re-configuration of a failed entry setup - 2) Enter access token - a) Check not already setup - b) Validate format - c) Setup SmartApp - 3) Wait for Installation - a) Check user installed into one or more locations - b) Config entries setup for all installations - """ +class SmartThingsFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): + """Handle configuration of SmartThings integrations.""" VERSION = 2 CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_PUSH @@ -60,55 +49,84 @@ class SmartThingsFlowHandler(config_entries.ConfigFlow): self.api = None self.oauth_client_secret = None self.oauth_client_id = None + self.installed_app_id = None + self.refresh_token = None + self.location_id = None async def async_step_import(self, user_input=None): """Occurs when a previously entry setup fails and is re-initiated.""" return await self.async_step_user(user_input) async def async_step_user(self, user_input=None): - """Get access token and validate it.""" + """Validate and confirm webhook setup.""" + await setup_smartapp_endpoint(self.hass) + webhook_url = get_webhook_url(self.hass) + + # Abort if the webhook is invalid + if not validate_webhook_requirements(self.hass): + return self.async_abort( + reason="invalid_webhook_url", + description_placeholders={ + "webhook_url": webhook_url, + "component_url": "https://www.home-assistant.io/integrations/smartthings/", + }, + ) + + # Show the confirmation + if user_input is None: + return self.async_show_form( + step_id="user", description_placeholders={"webhook_url": webhook_url}, + ) + + # Show the next screen + return await self.async_step_pat() + + async def async_step_pat(self, user_input=None): + """Get the Personal Access Token and validate it.""" errors = {} if user_input is None or CONF_ACCESS_TOKEN not in user_input: - return self._show_step_user(errors) + return self._show_step_pat(errors) - self.access_token = user_input.get(CONF_ACCESS_TOKEN, "") - self.api = SmartThings(async_get_clientsession(self.hass), self.access_token) + self.access_token = user_input[CONF_ACCESS_TOKEN] # Ensure token is a UUID if not VAL_UID_MATCHER.match(self.access_token): errors[CONF_ACCESS_TOKEN] = "token_invalid_format" - return self._show_step_user(errors) - # Check not already setup in another entry - if any( - entry.data.get(CONF_ACCESS_TOKEN) == self.access_token - for entry in self.hass.config_entries.async_entries(DOMAIN) - ): - errors[CONF_ACCESS_TOKEN] = "token_already_setup" - return self._show_step_user(errors) + return self._show_step_pat(errors) # Setup end-point - await setup_smartapp_endpoint(self.hass) - - if not validate_webhook_requirements(self.hass): - errors["base"] = "base_url_not_https" - return self._show_step_user(errors) - + self.api = SmartThings(async_get_clientsession(self.hass), self.access_token) try: app = await find_app(self.hass, self.api) if app: await app.refresh() # load all attributes await update_app(self.hass, app) - # Get oauth client id/secret by regenerating it - app_oauth = AppOAuth(app.app_id) - app_oauth.client_name = APP_OAUTH_CLIENT_NAME - app_oauth.scope.extend(APP_OAUTH_SCOPES) - client = await self.api.generate_app_oauth(app_oauth) + # Find an existing entry to copy the oauth client + existing = next( + ( + entry + for entry in self._async_current_entries() + if entry.data[CONF_APP_ID] == app.app_id + ), + None, + ) + if existing: + self.oauth_client_id = existing.data[CONF_OAUTH_CLIENT_ID] + self.oauth_client_secret = existing.data[CONF_OAUTH_CLIENT_SECRET] + else: + # Get oauth client id/secret by regenerating it + app_oauth = AppOAuth(app.app_id) + app_oauth.client_name = APP_OAUTH_CLIENT_NAME + app_oauth.scope.extend(APP_OAUTH_SCOPES) + client = await self.api.generate_app_oauth(app_oauth) + self.oauth_client_secret = client.client_secret + self.oauth_client_id = client.client_id else: app, client = await create_app(self.hass, self.api) + self.oauth_client_secret = client.client_secret + self.oauth_client_id = client.client_id setup_smartapp(self.hass, app) self.app_id = app.app_id - self.oauth_client_secret = client.client_secret - self.oauth_client_id = client.client_id except APIResponseError as ex: if ex.is_target_error(): @@ -118,58 +136,80 @@ class SmartThingsFlowHandler(config_entries.ConfigFlow): _LOGGER.exception( "API error setting up the SmartApp: %s", ex.raw_error_response ) - return self._show_step_user(errors) + return self._show_step_pat(errors) except ClientResponseError as ex: if ex.status == 401: errors[CONF_ACCESS_TOKEN] = "token_unauthorized" - elif ex.status == 403: + _LOGGER.debug( + "Unauthorized error received setting up SmartApp", exc_info=True + ) + elif ex.status == HTTP_FORBIDDEN: errors[CONF_ACCESS_TOKEN] = "token_forbidden" + _LOGGER.debug( + "Forbidden error received setting up SmartApp", exc_info=True + ) else: errors["base"] = "app_setup_error" _LOGGER.exception("Unexpected error setting up the SmartApp") - return self._show_step_user(errors) + return self._show_step_pat(errors) except Exception: # pylint:disable=broad-except errors["base"] = "app_setup_error" _LOGGER.exception("Unexpected error setting up the SmartApp") - return self._show_step_user(errors) + return self._show_step_pat(errors) - return await self.async_step_wait_install() + return await self.async_step_select_location() - async def async_step_wait_install(self, user_input=None): - """Wait for SmartApp installation.""" - errors = {} - if user_input is None: - return self._show_step_wait_install(errors) + async def async_step_select_location(self, user_input=None): + """Ask user to select the location to setup.""" + if user_input is None or CONF_LOCATION_ID not in user_input: + # Get available locations + existing_locations = [ + entry.data[CONF_LOCATION_ID] for entry in self._async_current_entries() + ] + locations = await self.api.locations() + locations_options = { + location.location_id: location.name + for location in locations + if location.location_id not in existing_locations + } + if not locations_options: + return self.async_abort(reason="no_available_locations") - # Find installed apps that were authorized - installed_apps = self.hass.data[DOMAIN][CONF_INSTALLED_APPS].copy() - if not installed_apps: - errors["base"] = "app_not_installed" - return self._show_step_wait_install(errors) - self.hass.data[DOMAIN][CONF_INSTALLED_APPS].clear() - - # Enrich the data - for installed_app in installed_apps: - installed_app[CONF_APP_ID] = self.app_id - installed_app[CONF_ACCESS_TOKEN] = self.access_token - installed_app[CONF_OAUTH_CLIENT_ID] = self.oauth_client_id - installed_app[CONF_OAUTH_CLIENT_SECRET] = self.oauth_client_secret - - # User may have installed the SmartApp in more than one SmartThings - # location. Config flows are created for the additional installations - for installed_app in installed_apps[1:]: - self.hass.async_create_task( - self.hass.config_entries.flow.async_init( - DOMAIN, context={"source": "install"}, data=installed_app - ) + return self.async_show_form( + step_id="select_location", + data_schema=vol.Schema( + {vol.Required(CONF_LOCATION_ID): vol.In(locations_options)} + ), ) - # Create config entity for the first one. - return await self.async_step_install(installed_apps[0]) + self.location_id = user_input[CONF_LOCATION_ID] + return await self.async_step_authorize() + + async def async_step_authorize(self, user_input=None): + """Wait for the user to authorize the app installation.""" + user_input = {} if user_input is None else user_input + self.installed_app_id = user_input.get(CONF_INSTALLED_APP_ID) + self.refresh_token = user_input.get(CONF_REFRESH_TOKEN) + if self.installed_app_id is None: + # Launch the external setup URL + url = format_install_url(self.app_id, self.location_id) + return self.async_external_step(step_id="authorize", url=url) + + return self.async_external_step_done(next_step_id="install") + + def _show_step_pat(self, errors): + if self.access_token is None: + # Get the token from an existing entry to make it easier to setup multiple locations. + self.access_token = next( + ( + entry.data.get(CONF_ACCESS_TOKEN) + for entry in self._async_current_entries() + ), + None, + ) - def _show_step_user(self, errors): return self.async_show_form( - step_id="user", + step_id="pat", data_schema=vol.Schema( {vol.Required(CONF_ACCESS_TOKEN, default=self.access_token): str} ), @@ -180,21 +220,18 @@ class SmartThingsFlowHandler(config_entries.ConfigFlow): }, ) - def _show_step_wait_install(self, errors): - return self.async_show_form(step_id="wait_install", errors=errors) - async def async_step_install(self, data=None): - """ - Create a config entry at completion of a flow. - - Launched when the user completes the flow or when the SmartApp - is installed into an additional location. - """ - if not self.api: - # Launched from the SmartApp install event handler - self.api = SmartThings( - async_get_clientsession(self.hass), data[CONF_ACCESS_TOKEN] - ) + """Create a config entry at completion of a flow and authorization of the app.""" + data = { + CONF_ACCESS_TOKEN: self.access_token, + CONF_REFRESH_TOKEN: self.refresh_token, + CONF_OAUTH_CLIENT_ID: self.oauth_client_id, + CONF_OAUTH_CLIENT_SECRET: self.oauth_client_secret, + CONF_LOCATION_ID: self.location_id, + CONF_APP_ID: self.app_id, + CONF_INSTALLED_APP_ID: self.installed_app_id, + } location = await self.api.location(data[CONF_LOCATION_ID]) + return self.async_create_entry(title=location.name, data=data) diff --git a/homeassistant/components/smartthings/const.py b/homeassistant/components/smartthings/const.py index c258101da70..8e323c0a715 100644 --- a/homeassistant/components/smartthings/const.py +++ b/homeassistant/components/smartthings/const.py @@ -8,7 +8,6 @@ APP_NAME_PREFIX = "homeassistant." CONF_APP_ID = "app_id" CONF_CLOUDHOOK_URL = "cloudhook_url" CONF_INSTALLED_APP_ID = "installed_app_id" -CONF_INSTALLED_APPS = "installed_apps" CONF_INSTANCE_ID = "instance_id" CONF_LOCATION_ID = "location_id" CONF_OAUTH_CLIENT_ID = "client_id" diff --git a/homeassistant/components/smartthings/fan.py b/homeassistant/components/smartthings/fan.py index aad62aed486..e366f6bb3e3 100644 --- a/homeassistant/components/smartthings/fan.py +++ b/homeassistant/components/smartthings/fan.py @@ -48,7 +48,7 @@ class SmartThingsFan(SmartThingsEntity, FanEntity): await self._device.set_fan_speed(value, set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self, speed: str = None, **kwargs) -> None: """Turn the fan on.""" @@ -59,14 +59,14 @@ class SmartThingsFan(SmartThingsEntity, FanEntity): await self._device.switch_on(set_status=True) # State is set optimistically in the commands above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs) -> None: """Turn the fan off.""" await self._device.switch_off(set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_on(self) -> bool: diff --git a/homeassistant/components/smartthings/lock.py b/homeassistant/components/smartthings/lock.py index 2895bde0bf7..d249cc5ac94 100644 --- a/homeassistant/components/smartthings/lock.py +++ b/homeassistant/components/smartthings/lock.py @@ -44,12 +44,12 @@ class SmartThingsLock(SmartThingsEntity, LockDevice): async def async_lock(self, **kwargs): """Lock the device.""" await self._device.lock(set_status=True) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_unlock(self, **kwargs): """Unlock the device.""" await self._device.unlock(set_status=True) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def is_locked(self): diff --git a/homeassistant/components/smartthings/manifest.json b/homeassistant/components/smartthings/manifest.json index 9fa156e0b28..3f9ee75b173 100644 --- a/homeassistant/components/smartthings/manifest.json +++ b/homeassistant/components/smartthings/manifest.json @@ -1,9 +1,9 @@ { "domain": "smartthings", - "name": "Smartthings", + "name": "SmartThings", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/smartthings", - "requirements": ["pysmartapp==0.3.2", "pysmartthings==0.7.0"], + "requirements": ["pysmartapp==0.3.2", "pysmartthings==0.7.1"], "dependencies": ["webhook"], "after_dependencies": ["cloud"], "codeowners": ["@andrewsayre"] diff --git a/homeassistant/components/smartthings/scene.py b/homeassistant/components/smartthings/scene.py index a92f2f99ea3..11ee6dc83e1 100644 --- a/homeassistant/components/smartthings/scene.py +++ b/homeassistant/components/smartthings/scene.py @@ -1,4 +1,6 @@ """Support for scenes through the SmartThings cloud API.""" +from typing import Any + from homeassistant.components.scene import Scene from .const import DATA_BROKERS, DOMAIN @@ -17,7 +19,7 @@ class SmartThingsScene(Scene): """Init the scene class.""" self._scene = scene - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate scene.""" await self._scene.execute() diff --git a/homeassistant/components/smartthings/sensor.py b/homeassistant/components/smartthings/sensor.py index 630fbaadd3a..8a6cf3cc215 100644 --- a/homeassistant/components/smartthings/sensor.py +++ b/homeassistant/components/smartthings/sensor.py @@ -17,6 +17,7 @@ from homeassistant.const import ( TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE, + VOLT, ) from . import SmartThingsEntity @@ -40,7 +41,7 @@ CAPABILITY_TO_SENSORS = { Map(Attribute.battery, "Battery", UNIT_PERCENTAGE, DEVICE_CLASS_BATTERY) ], Capability.body_mass_index_measurement: [ - Map(Attribute.bmi_measurement, "Body Mass Index", "kg/m^2", None) + Map(Attribute.bmi_measurement, "Body Mass Index", f"{MASS_KILOGRAMS}/m^2", None) ], Capability.body_weight_measurement: [ Map(Attribute.body_weight_measurement, "Body Weight", MASS_KILOGRAMS, None) @@ -233,7 +234,7 @@ CAPABILITY_TO_SENSORS = { Map(Attribute.ultraviolet_index, "Ultraviolet Index", None, None) ], Capability.voltage_measurement: [ - Map(Attribute.voltage, "Voltage Measurement", "V", None) + Map(Attribute.voltage, "Voltage Measurement", VOLT, None) ], Capability.washer_mode: [Map(Attribute.washer_mode, "Washer Mode", None, None)], Capability.washer_operating_state: [ diff --git a/homeassistant/components/smartthings/smartapp.py b/homeassistant/components/smartthings/smartapp.py index 402fdbd0715..0b86a430d89 100644 --- a/homeassistant/components/smartthings/smartapp.py +++ b/homeassistant/components/smartthings/smartapp.py @@ -36,10 +36,8 @@ from .const import ( APP_NAME_PREFIX, APP_OAUTH_CLIENT_NAME, APP_OAUTH_SCOPES, - CONF_APP_ID, CONF_CLOUDHOOK_URL, CONF_INSTALLED_APP_ID, - CONF_INSTALLED_APPS, CONF_INSTANCE_ID, CONF_LOCATION_ID, CONF_REFRESH_TOKEN, @@ -258,7 +256,6 @@ async def setup_smartapp_endpoint(hass: HomeAssistantType): CONF_WEBHOOK_ID: config[CONF_WEBHOOK_ID], # Will not be present if not enabled CONF_CLOUDHOOK_URL: config.get(CONF_CLOUDHOOK_URL), - CONF_INSTALLED_APPS: [], } _LOGGER.debug( "Setup endpoint for %s", @@ -370,40 +367,30 @@ async def smartapp_sync_subscriptions( async def smartapp_install(hass: HomeAssistantType, req, resp, app): - """ - Handle when a SmartApp is installed by the user into a location. - - Create a config entry representing the installation if this is not - the first installation under the account, otherwise store the data - for the config flow. - """ - install_data = { - CONF_INSTALLED_APP_ID: req.installed_app_id, - CONF_LOCATION_ID: req.location_id, - CONF_REFRESH_TOKEN: req.refresh_token, - } - # App attributes (client id/secret, etc...) are copied from another entry - # with the same parent app_id. If one is not found, the install data is - # stored for the config flow to retrieve during the wait step. - entry = next( + """Handle a SmartApp installation and continue the config flow.""" + flow = next( ( - entry - for entry in hass.config_entries.async_entries(DOMAIN) - if entry.data[CONF_APP_ID] == app.app_id + flow + for flow in hass.config_entries.flow.async_progress() + if flow["handler"] == DOMAIN ), None, ) - if entry: - data = entry.data.copy() - data.update(install_data) - # Add as job not needed because the current coroutine was invoked - # from the dispatcher and is not being awaited. - await hass.config_entries.flow.async_init( - DOMAIN, context={"source": "install"}, data=data + if flow is not None: + await hass.config_entries.flow.async_configure( + flow["flow_id"], + { + CONF_INSTALLED_APP_ID: req.installed_app_id, + CONF_LOCATION_ID: req.location_id, + CONF_REFRESH_TOKEN: req.refresh_token, + }, + ) + _LOGGER.debug( + "Continued config flow '%s' for SmartApp '%s' under parent app '%s'", + flow["flow_id"], + req.installed_app_id, + app.app_id, ) - else: - # Store the data where the flow can find it - hass.data[DOMAIN][CONF_INSTALLED_APPS].append(install_data) _LOGGER.debug( "Installed SmartApp '%s' under parent app '%s'", @@ -413,12 +400,7 @@ async def smartapp_install(hass: HomeAssistantType, req, resp, app): async def smartapp_update(hass: HomeAssistantType, req, resp, app): - """ - Handle when a SmartApp is updated (reconfigured) by the user. - - Store the refresh token in the config entry. - """ - # Update refresh token in config entry + """Handle a SmartApp update and either update the entry or continue the flow.""" entry = next( ( entry @@ -431,6 +413,36 @@ async def smartapp_update(hass: HomeAssistantType, req, resp, app): hass.config_entries.async_update_entry( entry, data={**entry.data, CONF_REFRESH_TOKEN: req.refresh_token} ) + _LOGGER.debug( + "Updated config entry '%s' for SmartApp '%s' under parent app '%s'", + entry.entry_id, + req.installed_app_id, + app.app_id, + ) + + flow = next( + ( + flow + for flow in hass.config_entries.flow.async_progress() + if flow["handler"] == DOMAIN + ), + None, + ) + if flow is not None: + await hass.config_entries.flow.async_configure( + flow["flow_id"], + { + CONF_INSTALLED_APP_ID: req.installed_app_id, + CONF_LOCATION_ID: req.location_id, + CONF_REFRESH_TOKEN: req.refresh_token, + }, + ) + _LOGGER.debug( + "Continued config flow '%s' for SmartApp '%s' under parent app '%s'", + flow["flow_id"], + req.installed_app_id, + app.app_id, + ) _LOGGER.debug( "Updated SmartApp '%s' under parent app '%s'", req.installed_app_id, app.app_id diff --git a/homeassistant/components/smartthings/strings.json b/homeassistant/components/smartthings/strings.json index 3578bcd5138..c8b938ebc6a 100644 --- a/homeassistant/components/smartthings/strings.json +++ b/homeassistant/components/smartthings/strings.json @@ -1,28 +1,32 @@ { "config": { - "title": "SmartThings", "step": { "user": { - "title": "Enter Personal Access Token", - "description": "Please enter a SmartThings [Personal Access Token]({token_url}) that has been created per the [instructions]({component_url}).", - "data": { - "access_token": "Access Token" - } + "title": "Confirm Callback URL", + "description": "SmartThings will be configured to send push updates to Home Assistant at:\n> {webhook_url}\n\nIf this is not correct, please update your configuration, restart Home Assistant, and try again." }, - "wait_install": { - "title": "Install SmartApp", - "description": "Please install the Home Assistant SmartApp in at least one location and click submit." - } + "pat": { + "title": "Enter Personal Access Token", + "description": "Please enter a SmartThings [Personal Access Token]({token_url}) that has been created per the [instructions]({component_url}). This will be used to create the Home Assistant integration within your SmartThings account.", + "data": { "access_token": "Access Token" } + }, + "select_location": { + "title": "Select Location", + "description": "Please select the SmartThings Location you wish to add to Home Assistant. We will then open a new window and ask you to login and authorize installation of the Home Assistant integration into the selected location.", + "data": { "location_id": "Location" } + }, + "authorize": { "title": "Authorize Home Assistant" } + }, + "abort": { + "invalid_webhook_url": "Home Assistant is not configured correctly to receive updates from SmartThings. The webhook URL is invalid:\n> {webhook_url}\n\nPlease update your configuration per the [instructions]({component_url}), restart Home Assistant, and try again.", + "no_available_locations": "There are no available SmartThings Locations to setup in Home Assistant." }, "error": { - "token_invalid_format": "The token must be in the UID/GUID format", - "token_unauthorized": "The token is invalid or no longer authorized.", - "token_forbidden": "The token does not have the required OAuth scopes.", - "token_already_setup": "The token has already been setup.", - "app_setup_error": "Unable to setup the SmartApp. Please try again.", - "app_not_installed": "Please ensure you have installed and authorized the Home Assistant SmartApp and try again.", - "base_url_not_https": "The `base_url` for the `http` component must be configured and start with `https://`.", - "webhook_error": "SmartThings could not validate the endpoint configured in `base_url`. Please review the component requirements." + "token_invalid_format": "The token must be in the UID/GUID format", + "token_unauthorized": "The token is invalid or no longer authorized.", + "token_forbidden": "The token does not have the required OAuth scopes.", + "app_setup_error": "Unable to setup the SmartApp. Please try again.", + "webhook_error": "SmartThings could not validate the webhook URL. Please ensure the webhook URL is reachable from the internet and try again." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/smartthings/switch.py b/homeassistant/components/smartthings/switch.py index ace47a56d2c..eb9c9c90c4b 100644 --- a/homeassistant/components/smartthings/switch.py +++ b/homeassistant/components/smartthings/switch.py @@ -37,14 +37,14 @@ class SmartThingsSwitch(SmartThingsEntity, SwitchDevice): await self._device.switch_off(set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self, **kwargs) -> None: """Turn the switch on.""" await self._device.switch_on(set_status=True) # State is set optimistically in the command above, therefore update # the entity state ahead of receiving the confirming push updates - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def current_power_w(self): diff --git a/homeassistant/components/smartthings/translations/bg.json b/homeassistant/components/smartthings/translations/bg.json new file mode 100644 index 00000000000..9def747bbb4 --- /dev/null +++ b/homeassistant/components/smartthings/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 SmartApp. \u041c\u043e\u043b\u044f \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.", + "token_forbidden": "\u041a\u043e\u0434\u044a\u0442 \u043d\u044f\u043c\u0430 \u0438\u0437\u0438\u0441\u043a\u0443\u0435\u043c\u0438\u0442\u0435 OAuth \u043f\u0440\u0430\u0432\u0430.", + "token_invalid_format": "\u041a\u043e\u0434\u044a\u0442 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0432\u044a\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 UID/GUID", + "token_unauthorized": "\u041a\u043e\u0434\u044a\u0442 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u0438\u043b\u0438 \u0432\u0435\u0447\u0435 \u043d\u0435 \u0435 \u043e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d.", + "webhook_error": "SmartThings \u043d\u0435 \u043c\u043e\u0436\u0430 \u0434\u0430 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0430 \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d \u0432 `base_url`. \u041c\u043e\u043b\u044f, \u043f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u0439\u0442\u0435 \u0438\u0437\u0438\u0441\u043a\u0432\u0430\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430." + }, + "step": { + "user": { + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 SmartThings [Personal Access Token] ( {token_url} ), \u043a\u043e\u0439\u0442\u043e \u0435 \u0441\u044a\u0437\u0434\u0430\u0434\u0435\u043d \u0441\u043f\u043e\u0440\u0435\u0434 [\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u0442\u0430] ( {component_url} ).", + "title": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f (Personal Access Token)" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/ca.json b/homeassistant/components/smartthings/translations/ca.json new file mode 100644 index 00000000000..3950d5027e9 --- /dev/null +++ b/homeassistant/components/smartthings/translations/ca.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant not est\u00e0 configurat correctament per a rebre actualitzacions de SmartThings.\nEl seg\u00fcent URL webhook no \u00e9s v\u00e0lid:\n> {webhook_url}\n\nActualitza la teva configuraci\u00f3 segons les [instruccions]({component_url}), reinicia Home Assistant i torna-ho a provar.", + "no_available_locations": "No hi ha ubicacions SmartThings configurables amb Home Assistant." + }, + "error": { + "app_setup_error": "No s'ha pogut configurar SmartApp. Siusplau, torna-ho a provar.", + "token_forbidden": "El testimoni d'autenticaci\u00f3 no t\u00e9 cont\u00e9 els apartats OAuth obligatoris.", + "token_invalid_format": "El testimoni d'autenticaci\u00f3 ha d'estar en format UID/GUID", + "token_unauthorized": "El testimoni d'autenticaci\u00f3 no \u00e9s v\u00e0lid o ja no t\u00e9 autoritzaci\u00f3.", + "webhook_error": "SmartThings no ha pogut validar l'adre\u00e7a final configurada a `base_url`. Revisa els requisits del component." + }, + "step": { + "authorize": { + "title": "Autoritzaci\u00f3 de Home Assistant" + }, + "pat": { + "data": { + "access_token": "Testimoni d'acc\u00e9s" + }, + "description": "Introdueix un [testimoni d'acc\u00e9s personal]({token_url}) de SmartThings creat a partir de les [instruccions]({component_url}). S\u2019utilitzar\u00e0 per crear la integraci\u00f3 de Home Assistant dins el teu compte de SmartThings.", + "title": "Introdueix el testimoni d'acc\u00e9s personal" + }, + "select_location": { + "data": { + "location_id": "Ubicaci\u00f3" + }, + "description": "Selecciona la ubicaci\u00f3 de SmartThings que vols afegir a Home Assistant. A continuaci\u00f3, s'obrir\u00e0 una finestra on se't demanar\u00e0 que inici\u00efs sessi\u00f3 i autoritzis la instal\u00b7laci\u00f3 de la integraci\u00f3 de Home Assistant a la ubicaci\u00f3 seleccionada.", + "title": "Selecci\u00f3 d'ubicaci\u00f3" + }, + "user": { + "description": "SmartThings es configurar\u00e0 per a enviar actualitzacions push a Home Assistant a:\n> {webhook_url}\n\nSi no \u00e9s correcte, actualitza la teva configuraci\u00f3, reinicia Home Assistant i torna-ho a provar.", + "title": "Introdueix el testimoni d'autenticaci\u00f3 personal" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/cs.json b/homeassistant/components/smartthings/translations/cs.json new file mode 100644 index 00000000000..60a0ba0e158 --- /dev/null +++ b/homeassistant/components/smartthings/translations/cs.json @@ -0,0 +1,11 @@ +{ + "config": { + "error": { + "app_setup_error": "Nelze nastavit SmartApp. Pros\u00edm zkuste to znovu.", + "token_forbidden": "Token nem\u00e1 po\u017eadovan\u00e9 rozsahy OAuth.", + "token_invalid_format": "Token mus\u00ed b\u00fdt ve form\u00e1tu UID/GUID.", + "token_unauthorized": "Token je neplatn\u00fd nebo ji\u017e nen\u00ed autorizov\u00e1n.", + "webhook_error": "SmartThings nemohly ov\u011b\u0159it koncov\u00fd bod nakonfigurovan\u00fd v `base_url`. P\u0159e\u010dt\u011bte si pros\u00edm po\u017eadavky na komponenty." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/da.json b/homeassistant/components/smartthings/translations/da.json new file mode 100644 index 00000000000..ccddbe6ceff --- /dev/null +++ b/homeassistant/components/smartthings/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "SmartApp kunne ikke konfigureres. Pr\u00f8v igen.", + "token_forbidden": "Adgangstoken er ikke indenfor OAuth", + "token_invalid_format": "Adgangstoken skal v\u00e6re i UID/GUID format", + "token_unauthorized": "Adgangstoken er ugyldigt eller ikke l\u00e6ngere godkendt.", + "webhook_error": "SmartThings kunne ikke validere slutpunktet konfigureret i `base_url`. Gennemg\u00e5 venligst komponentkravene." + }, + "step": { + "user": { + "description": "Indtast venligst en SmartThings [Personal Access Token]({token_url}), som er oprettet if\u00f8lge [instruktionerne]({component_url}).", + "title": "Indtast personlig adgangstoken" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/de.json b/homeassistant/components/smartthings/translations/de.json new file mode 100644 index 00000000000..3dc406200f5 --- /dev/null +++ b/homeassistant/components/smartthings/translations/de.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant ist nicht richtig konfiguriert, um Updates von SmartThings zu erhalten. Die Webhook-URL ist ung\u00fcltig: \n > {webhook_url} \n\n Bitte aktualisieren Sie Ihre Konfiguration gem\u00e4\u00df den [Anweisungen] ({component_url}), starten Sie den Home Assistant neu und versuchen Sie es erneut.", + "no_available_locations": "In Home Assistant sind keine SmartThings-Standorte zum Einrichten verf\u00fcgbar." + }, + "error": { + "app_setup_error": "SmartApp kann nicht eingerichtet werden. Bitte versuche es erneut.", + "token_forbidden": "Das Token verf\u00fcgt nicht \u00fcber die erforderlichen OAuth-Bereiche.", + "token_invalid_format": "Das Token muss im UID/GUID-Format vorliegen.", + "token_unauthorized": "Das Token ist ung\u00fcltig oder nicht mehr autorisiert.", + "webhook_error": "SmartThings konnte die Webhook-URL nicht \u00fcberpr\u00fcfen. Bitte stellen Sie sicher, dass die Webhook-URL \u00fcber das Internet erreichbar ist, und versuchen Sie es erneut." + }, + "step": { + "authorize": { + "title": "Home Assistant autorisieren" + }, + "pat": { + "data": { + "access_token": "Zugangstoken" + }, + "description": "Bitte geben Sie ein SmartThings [Personal Access Token] ({token_url}) ein, das gem\u00e4\u00df den [Anweisungen] ({component_url}) erstellt wurde. Dies wird zur Erstellung der Home Assistant-Integration in Ihrem SmartThings-Konto verwendet.", + "title": "Gib den pers\u00f6nlichen Zugangstoken an" + }, + "select_location": { + "data": { + "location_id": "Standort" + }, + "description": "Bitte w\u00e4hlen Sie den SmartThings-Standort aus, den Sie Home Assistant hinzuf\u00fcgen m\u00f6chten. Wir \u00f6ffnen dann ein neues Fenster und bitten Sie, sich anzumelden und die Installation der Home Assistant-Integration am ausgew\u00e4hlten Standort zu autorisieren.", + "title": "Standort ausw\u00e4hlen" + }, + "user": { + "description": "SmartThings wird so konfiguriert, dass Push-Updates an Home Assistant gesendet werden an die URL: \n > {webhook_url} \n\nWenn dies nicht korrekt ist, aktualisieren Sie bitte Ihre Konfiguration, starten Sie Home Assistant neu und versuchen Sie es erneut.", + "title": "R\u00fcckruf-URL best\u00e4tigen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/en.json b/homeassistant/components/smartthings/translations/en.json new file mode 100644 index 00000000000..ded899ad4aa --- /dev/null +++ b/homeassistant/components/smartthings/translations/en.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant is not configured correctly to receive updates from SmartThings. The webhook URL is invalid:\n> {webhook_url}\n\nPlease update your configuration per the [instructions]({component_url}), restart Home Assistant, and try again.", + "no_available_locations": "There are no available SmartThings Locations to setup in Home Assistant." + }, + "error": { + "app_setup_error": "Unable to setup the SmartApp. Please try again.", + "token_forbidden": "The token does not have the required OAuth scopes.", + "token_invalid_format": "The token must be in the UID/GUID format", + "token_unauthorized": "The token is invalid or no longer authorized.", + "webhook_error": "SmartThings could not validate the webhook URL. Please ensure the webhook URL is reachable from the internet and try again." + }, + "step": { + "authorize": { + "title": "Authorize Home Assistant" + }, + "pat": { + "data": { + "access_token": "Access Token" + }, + "description": "Please enter a SmartThings [Personal Access Token]({token_url}) that has been created per the [instructions]({component_url}). This will be used to create the Home Assistant integration within your SmartThings account.", + "title": "Enter Personal Access Token" + }, + "select_location": { + "data": { + "location_id": "Location" + }, + "description": "Please select the SmartThings Location you wish to add to Home Assistant. We will then open a new window and ask you to login and authorize installation of the Home Assistant integration into the selected location.", + "title": "Select Location" + }, + "user": { + "description": "SmartThings will be configured to send push updates to Home Assistant at:\n> {webhook_url}\n\nIf this is not correct, please update your configuration, restart Home Assistant, and try again.", + "title": "Confirm Callback URL" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/es-419.json b/homeassistant/components/smartthings/translations/es-419.json new file mode 100644 index 00000000000..d5446773700 --- /dev/null +++ b/homeassistant/components/smartthings/translations/es-419.json @@ -0,0 +1,15 @@ +{ + "config": { + "error": { + "app_setup_error": "No se puede configurar el SmartApp. Por favor, int\u00e9ntelo de nuevo.", + "token_invalid_format": "El token debe estar en formato UID/GUID", + "token_unauthorized": "El token no es v\u00e1lido o ya no est\u00e1 autorizado.", + "webhook_error": "SmartThings no pudo validar el endpoint configurado en `base_url`. Por favor, revise los requisitos de los componentes." + }, + "step": { + "user": { + "title": "Ingresar token de acceso personal" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/es.json b/homeassistant/components/smartthings/translations/es.json new file mode 100644 index 00000000000..db1b2f88877 --- /dev/null +++ b/homeassistant/components/smartthings/translations/es.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant no est\u00e1 configurado correctamente para recibir actualizaciones de SmartThings. La URL del webhook no es v\u00e1lida: \n > {webhook_url} \n\n Actualiza tu configuraci\u00f3n seg\u00fan las [instrucciones]({component_url}), reinicia Home Assistant e int\u00e9ntalo de nuevo.", + "no_available_locations": "No hay Ubicaciones SmartThings disponibles para configurar en Home Assistant." + }, + "error": { + "app_setup_error": "No se pudo configurar el SmartApp. Por favor, int\u00e9ntelo de nuevo.", + "token_forbidden": "El token no tiene los \u00e1mbitos de OAuth necesarios.", + "token_invalid_format": "El token debe estar en formato UID/GUID", + "token_unauthorized": "El token no es v\u00e1lido o ya no est\u00e1 autorizado.", + "webhook_error": "SmartThings no ha podido validar el endpoint configurado en 'base_url'. Por favor, revisa los requisitos del componente." + }, + "step": { + "authorize": { + "title": "Autorizar a Home Assistant" + }, + "pat": { + "data": { + "access_token": "Token de acceso" + }, + "description": "Por favor, introduce un [token de acceso personal]({token_url}) de SmartThings creado seg\u00fan las [instrucciones]({component_url}). Se usar\u00e1 para crear la integraci\u00f3n de Home Assistant en tu cuenta de SmartThings.", + "title": "Introduce el token de acceso personal" + }, + "select_location": { + "data": { + "location_id": "Ubicaci\u00f3n" + }, + "description": "Selecciona la Ubicaci\u00f3n SmartThings que quieres a\u00f1adir a Home Assistant. Se abrir\u00e1 una nueva ventana que te pedir\u00e1 que inicies sesi\u00f3n y autorices la instalaci\u00f3n de la integraci\u00f3n de Home Assistant en la ubicaci\u00f3n seleccionada.", + "title": "Seleccionar Ubicaci\u00f3n" + }, + "user": { + "description": "Por favor, introduce el [token de acceso personal]({token_url}) de SmartThings que se haya creado seg\u00fan las [instrucciones]({component_url}).", + "title": "Introduce el token de acceso personal" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/fr.json b/homeassistant/components/smartthings/translations/fr.json new file mode 100644 index 00000000000..1fbd4abada4 --- /dev/null +++ b/homeassistant/components/smartthings/translations/fr.json @@ -0,0 +1,27 @@ +{ + "config": { + "error": { + "app_setup_error": "Impossible de configurer la SmartApp. Veuillez r\u00e9essayer.", + "token_forbidden": "Le jeton n'a pas les port\u00e9es OAuth requises.", + "token_invalid_format": "Le jeton doit \u00eatre au format UID / GUID", + "token_unauthorized": "Le jeton est invalide ou n'est plus autoris\u00e9.", + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/he.json b/homeassistant/components/smartthings/translations/he.json new file mode 100644 index 00000000000..5cb63393be8 --- /dev/null +++ b/homeassistant/components/smartthings/translations/he.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "\u05d0\u05d9\u05df \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea SmartApp. \u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", + "token_forbidden": "\u05dc\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d0\u05d9\u05df \u05d0\u05ea \u05d8\u05d5\u05d5\u05d7\u05d9 OAuth \u05d4\u05d3\u05e8\u05d5\u05e9\u05d9\u05dd.", + "token_invalid_format": "\u05d4\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d1\u05e4\u05d5\u05e8\u05de\u05d8 UID / GUID", + "token_unauthorized": "\u05d4\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d0\u05d9\u05e0\u05d5 \u05d7\u05d5\u05e7\u05d9 \u05d0\u05d5 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4 \u05e2\u05d5\u05d3.", + "webhook_error": "SmartThings \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d9\u05d7 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05e0\u05e7\u05d5\u05d3\u05ea \u05d4\u05e7\u05e6\u05d4 \u05e9\u05d4\u05d5\u05d2\u05d3\u05e8\u05d4 \u05d1- `base_url`. \u05e2\u05d9\u05d9\u05df \u05d1\u05d3\u05e8\u05d9\u05e9\u05d5\u05ea \u05d4\u05e8\u05db\u05d9\u05d1." + }, + "step": { + "user": { + "description": "\u05d4\u05d6\u05df SmartThings [\u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d2\u05d9\u05e9\u05d4 \u05d0\u05d9\u05e9\u05d9\u05ea] ( {token_url} ) \u05e9\u05e0\u05d5\u05e6\u05e8 \u05dc\u05e4\u05d9 [\u05d4\u05d5\u05e8\u05d0\u05d5\u05ea] ( {component_url} ).", + "title": "\u05d4\u05d6\u05df \u05d0\u05e1\u05d9\u05de\u05d5\u05df \u05d2\u05d9\u05e9\u05d4 \u05d0\u05d9\u05e9 " + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/hu.json b/homeassistant/components/smartthings/translations/hu.json new file mode 100644 index 00000000000..d71e29e0171 --- /dev/null +++ b/homeassistant/components/smartthings/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "A SmartApp be\u00e1ll\u00edt\u00e1sa nem siker\u00fclt. K\u00e9rlek pr\u00f3b\u00e1ld \u00fajra.", + "token_forbidden": "A token nem rendelkezik a sz\u00fcks\u00e9ges OAuth-tartom\u00e1nyokkal.", + "token_invalid_format": "A tokennek UID / GUID form\u00e1tumban kell lennie", + "token_unauthorized": "A token \u00e9rv\u00e9nytelen vagy m\u00e1r nem enged\u00e9lyezett.", + "webhook_error": "A SmartThings nem tudta \u00e9rv\u00e9nyes\u00edteni a `base_url`-ben konfigur\u00e1lt v\u00e9gpontot. K\u00e9rlek, tekintsd \u00e1t az \u00f6sszetev\u0151 k\u00f6vetelm\u00e9nyeit." + }, + "step": { + "user": { + "description": "K\u00e9rlek add meg a SmartThings [Personal Access Tokent]({token_url}), amit az [instrukci\u00f3k] ({component_url}) alapj\u00e1n hozt\u00e1l l\u00e9tre.", + "title": "Adja meg a szem\u00e9lyes hozz\u00e1f\u00e9r\u00e9si Tokent" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/it.json b/homeassistant/components/smartthings/translations/it.json new file mode 100644 index 00000000000..248ea85eb3f --- /dev/null +++ b/homeassistant/components/smartthings/translations/it.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant non \u00e8 configurato correttamente per ricevere gli aggiornamenti da SmartThings. L'URL del webhook non \u00e8 valido:\n> {webhook_url}\n\nSi prega di aggiornare la configurazione secondo le [istruzioni]({component_url}), riavviare Home Assistant e riprovare.", + "no_available_locations": "Non ci sono posizioni SmartThings disponibili da configurare in Home Assistant." + }, + "error": { + "app_setup_error": "Impossibile configurare SmartApp. Riprovare.", + "token_forbidden": "Il token non dispone degli ambiti OAuth necessari.", + "token_invalid_format": "Il token deve essere nel formato UID/GUID", + "token_unauthorized": "Il token non \u00e8 valido o non \u00e8 pi\u00f9 autorizzato.", + "webhook_error": "SmartThings non \u00e8 riuscito a convalidare l'URL del webhook. Assicurati che l'URL del webhook sia raggiungibile da Internet e riprova." + }, + "step": { + "authorize": { + "title": "Autorizza Home Assistant" + }, + "pat": { + "data": { + "access_token": "Token di accesso" + }, + "description": "Si prega di inserire un SmartThings [Personal Access Token]({token_url}) che \u00e8 stato creato secondo le [istruzioni]({component_url}). Questo verr\u00e0 utilizzato per creare l'integrazione Home Assistant all'interno del vostro account SmartThings.", + "title": "Inserisci il Token di Accesso Personale" + }, + "select_location": { + "data": { + "location_id": "Posizione" + }, + "description": "Selezionare la posizione SmartThings che si desidera aggiungere a Home Assistant. Apriremo quindi una nuova finestra e vi chiederemo di effettuare il login e di autorizzare l'installazione dell'integrazione dell'Home Assistant nella posizione selezionata.", + "title": "Seleziona posizione" + }, + "user": { + "description": "SmartThings sar\u00e0 configurato per inviare aggiornamenti push a Home Assistant su: \n > {webhook_url} \n\nSe ci\u00f2 non fosse corretto, aggiornare la configurazione, riavviare Home Assistant e riprovare.", + "title": "Confermare l'URL di richiamo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/ko.json b/homeassistant/components/smartthings/translations/ko.json new file mode 100644 index 00000000000..383b1a9412c --- /dev/null +++ b/homeassistant/components/smartthings/translations/ko.json @@ -0,0 +1,38 @@ +{ + "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.", + "token_invalid_format": "\ud1a0\ud070\uc740 UID/GUID \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4", + "token_unauthorized": "\ud1a0\ud070\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uac70\ub098 \uc2b9\uc778\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/lb.json b/homeassistant/components/smartthings/translations/lb.json new file mode 100644 index 00000000000..af1e70eedd8 --- /dev/null +++ b/homeassistant/components/smartthings/translations/lb.json @@ -0,0 +1,38 @@ +{ + "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": { + "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.", + "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 d'Webhook URL valid\u00e9ieren. Stell s\u00e9cher dass d'URL vum Internet aus ereechbar ass a prob\u00e9ier nach eemol." + }, + "step": { + "authorize": { + "title": "Home Assistant erlaaben" + }, + "pat": { + "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": { + "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": "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/nl.json b/homeassistant/components/smartthings/translations/nl.json new file mode 100644 index 00000000000..b7e40798e83 --- /dev/null +++ b/homeassistant/components/smartthings/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "error": { + "app_setup_error": "Instellen van SmartApp mislukt. Probeer het opnieuw.", + "token_forbidden": "Het token heeft niet de vereiste OAuth-scopes.", + "token_invalid_format": "Het token moet de UID/GUID-indeling hebben", + "token_unauthorized": "Het token is ongeldig of niet langer geautoriseerd.", + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/nn.json b/homeassistant/components/smartthings/translations/nn.json new file mode 100644 index 00000000000..68782329fac --- /dev/null +++ b/homeassistant/components/smartthings/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "SmartThings" +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/no.json b/homeassistant/components/smartthings/translations/no.json new file mode 100644 index 00000000000..7f843bfd7da --- /dev/null +++ b/homeassistant/components/smartthings/translations/no.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant er ikke konfigurert riktig for \u00e5 motta oppdateringer fra SmartThings. URLen til nettkroken er ugyldig: \n > {webhook_url} \n\n Oppdater konfigurasjonen i henhold til [instruksjonene] ( {component_url} ), start Home Assistant p\u00e5 nytt, og pr\u00f8v igjen.", + "no_available_locations": "Det er ingen tilgjengelige SmartThings-lokasjoner \u00e5 konfigurere i Home Assistant." + }, + "error": { + "app_setup_error": "Kan ikke konfigurere SmartApp. Vennligst pr\u00f8v p\u00e5 nytt.", + "token_forbidden": "Tokenet har ikke de n\u00f8dvendige OAuth-omfangene.", + "token_invalid_format": "Token m\u00e5 v\u00e6re i UID/GUID format", + "token_unauthorized": "Tollet er ugyldig eller ikke lenger autorisert.", + "webhook_error": "SmartThings kan ikke validere URL-adressen for webhook. Kontroller at URL-adressen for webhook kan n\u00e5s fra Internett, og pr\u00f8v p\u00e5 nytt." + }, + "step": { + "authorize": { + "title": "Autoriser Home Assistant" + }, + "pat": { + "data": { + "access_token": "Tilgangstoken" + }, + "description": "Skriv inn et SmartThings [Personal Access Token] ( {token_url} ) som er opprettet i henhold til [instruksjonene] ( {component_url} ). Dette vil bli brukt til \u00e5 opprette Home Assistant-integrasjonen i SmartThings-kontoen din.", + "title": "Oppgi Personlig Tilgangstoken" + }, + "select_location": { + "data": { + "location_id": "Lokasjon" + }, + "description": "Velg SmartThings Lokasjon du vil legge til Home Assistant. Vi \u00e5pner deretter et nytt vindu og ber deg om \u00e5 logge inn og autorisere installasjon av Home Assistant-integrasjonen p\u00e5 det valgte stedet.", + "title": "Velg Posisjon" + }, + "user": { + "description": "SmartThings konfigureres til \u00e5 sende push-oppdateringer til Home Assistant p\u00e5:\n\" {webhook_url}\n\nHvis dette ikke er riktig, m\u00e5 du oppdatere konfigurasjonen, starte Home Assistant p\u00e5 nytt og pr\u00f8ve p\u00e5 nytt.", + "title": "Bekreft URL-adresse for tilbakeringing" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/pl.json b/homeassistant/components/smartthings/translations/pl.json new file mode 100644 index 00000000000..517127a5091 --- /dev/null +++ b/homeassistant/components/smartthings/translations/pl.json @@ -0,0 +1,36 @@ +{ + "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.", + "token_invalid_format": "Token musi by\u0107 w formacie UID/GUID", + "token_unauthorized": "Token jest niewa\u017cny lub nie ma ju\u017c autoryzacji.", + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/pt-BR.json b/homeassistant/components/smartthings/translations/pt-BR.json new file mode 100644 index 00000000000..a28daf34acc --- /dev/null +++ b/homeassistant/components/smartthings/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "N\u00e3o \u00e9 poss\u00edvel configurar o SmartApp. Por favor, tente novamente.", + "token_forbidden": "O token n\u00e3o possui os escopos necess\u00e1rios do OAuth.", + "token_invalid_format": "O token deve estar no formato UID / GUID", + "token_unauthorized": "O token \u00e9 inv\u00e1lido ou n\u00e3o est\u00e1 mais autorizado.", + "webhook_error": "O SmartThings n\u00e3o p\u00f4de validar o terminal configurado em `base_url`. Por favor, revise os requisitos do componente." + }, + "step": { + "user": { + "description": "Por favor, insira um SmartThings [Personal Access Token] ( {token_url} ) que foi criado de acordo com as [instru\u00e7\u00f5es] ( {component_url} ).", + "title": "Digite o token de acesso pessoal" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/pt.json b/homeassistant/components/smartthings/translations/pt.json new file mode 100644 index 00000000000..9f2ed5a4b90 --- /dev/null +++ b/homeassistant/components/smartthings/translations/pt.json @@ -0,0 +1,36 @@ +{ + "config": { + "abort": { + "no_available_locations": "N\u00e3o h\u00e1 localiza\u00e7\u00f5es SmartThings dispon\u00edveis para configura\u00e7\u00e3o no Home Assistant." + }, + "error": { + "app_setup_error": "N\u00e3o \u00e9 poss\u00edvel configurar o SmartApp. Por favor, tente novamente.", + "token_forbidden": "O token n\u00e3o tem tem a cobertura OAuth necess\u00e1ria.", + "token_invalid_format": "O token deve estar no formato UID/GUID", + "token_unauthorized": "O token \u00e9 inv\u00e1lido ou ja n\u00e3o est\u00e1 autorizado.", + "webhook_error": "O SmartThings n\u00e3o p\u00f4de validar o URL do webhook. Verifique se o URL do webhook est\u00e1 acess\u00edvel pela Internet e tente novamente." + }, + "step": { + "authorize": { + "title": "Autorizar o Home Assistant" + }, + "pat": { + "data": { + "access_token": "Token de Acesso" + }, + "title": "Insira o Token de acesso pessoal" + }, + "select_location": { + "data": { + "location_id": "Localiza\u00e7\u00e3o" + }, + "description": "Por favor, selecione a localiza\u00e7\u00e3o do SmartThings que voc\u00ea deseja adicionar ao Home Assistant. Em seguida, abriremos uma nova janela e solicitaremos que voc\u00ea fa\u00e7a o login e autorize a instala\u00e7\u00e3o da integra\u00e7\u00e3o do Home Assistant na localiza\u00e7\u00e3o selecionada.", + "title": "Selecionar Localiza\u00e7\u00e3o" + }, + "user": { + "description": "Por favor, insira um SmartThings [Personal Access Token]({token_url} ) que foi criado de acordo com as [instru\u00e7\u00f5es]({component_url}).", + "title": "Insira o Token de acesso pessoal" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/ru.json b/homeassistant/components/smartthings/translations/ru.json new file mode 100644 index 00000000000..5087506fc82 --- /dev/null +++ b/homeassistant/components/smartthings/translations/ru.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Webhook URL, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043e\u0442 SmartThings, \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d: \n> {webhook_url} \n\n\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0432\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({component_url}), \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Home Assistant \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", + "no_available_locations": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 SmartThings." + }, + "error": { + "app_setup_error": "\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c SmartApp. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", + "token_forbidden": "\u0422\u043e\u043a\u0435\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f OAuth.", + "token_invalid_format": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 UID / GUID.", + "token_unauthorized": "\u0422\u043e\u043a\u0435\u043d \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d.", + "webhook_error": "SmartThings \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c Webhook URL. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 Webhook URL \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443." + }, + "step": { + "authorize": { + "title": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f Home Assistant" + }, + "pat": { + "data": { + "access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 [\u041b\u0438\u0447\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 SmartThings]({token_url}), \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({component_url}).", + "title": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430" + }, + "select_location": { + "data": { + "location_id": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 SmartThings, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 Home Assistant. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e, \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Home Assistant \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438.", + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + }, + "user": { + "description": "SmartThings \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 push-\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: \n> {webhook_url} \n\n\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Home Assistant \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", + "title": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 Callback URL" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/sl.json b/homeassistant/components/smartthings/translations/sl.json new file mode 100644 index 00000000000..b2959577adc --- /dev/null +++ b/homeassistant/components/smartthings/translations/sl.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant ni pravilno konfiguriran za sprejemanje posodobitev SmartThings. URL webhook-a je neveljaven: \n > {webhook_url} \n\n Posodobite konfiguracijo po [navodilih] ({component_url}), nato znova za\u017eenite Home Assistant-a in poskusite znova.", + "no_available_locations": "Na voljo ni nobenih lokacij SmartThings, ki bi jih bilo mogo\u010de nastaviti v programu Home Assistant." + }, + "error": { + "app_setup_error": "SmartApp ni mogo\u010de nastaviti. Prosim poskusite ponovno.", + "token_forbidden": "\u017deton nima zahtevanih OAuth obsegov.", + "token_invalid_format": "\u017deton mora biti v formatu UID / GUID", + "token_unauthorized": "\u017deton ni veljaven ali ni ve\u010d poobla\u0161\u010den.", + "webhook_error": "SmartThings ni mogel preveriti URL-ja spletnega koda. Prepri\u010dajte se, da je spletni brskalnik dosegljiv iz interneta in poskusite znova." + }, + "step": { + "authorize": { + "title": "Pooblastite Home Assistant" + }, + "pat": { + "data": { + "access_token": "\u017deton za dostop" + }, + "description": "Vnesite SmartThings [\u017deton osebnega dostopa] ({token_url}), ki je bil ustvarjen po [navodilih] ({component_url}). To bo uporabljeno za ustvarjanje integracije Home Assistant v va\u0161em ra\u010dunu SmartThings.", + "title": "Vnesite \u017eeton za osebni dostop" + }, + "select_location": { + "data": { + "location_id": "Lokacija" + }, + "description": "Izberite lokacijo SmartThings, ki jo \u017eelite dodati v Home Assistant. Nato odpremo novo okno in vas prosimo, da se prijavite in pooblastite namestitev integracije Home Assistant na izbrano lokacijo.", + "title": "Izberite Lokacijo" + }, + "user": { + "description": "SmartThings bo konfiguriran za po\u0161iljanje push posodobitev na Home Assistant na: \n > {webhook_url} \n\n \u010ce to ni pravilno, posodobite konfiguracijo, znova za\u017eenite Home Assistant in poskusite znova.", + "title": "Potrdite URL za povratni klic" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/sv.json b/homeassistant/components/smartthings/translations/sv.json new file mode 100644 index 00000000000..a02483baa47 --- /dev/null +++ b/homeassistant/components/smartthings/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "Det gick inte att installera Home Assistant SmartApp. V\u00e4nligen f\u00f6rs\u00f6k igen.", + "token_forbidden": "Token har inte det som kr\u00e4vs inom omf\u00e5ng f\u00f6r OAuth.", + "token_invalid_format": "Token m\u00e5ste vara i UID/GUID-format", + "token_unauthorized": "Denna token \u00e4r ogiltig eller inte l\u00e4ngre auktoriserad.", + "webhook_error": "SmartThings kunde inte validera endpoint konfigurerad i \" base_url`. V\u00e4nligen granska kraven f\u00f6r komponenten." + }, + "step": { + "user": { + "description": "V\u00e4nligen ange en [personlig \u00e5tkomsttoken]({token_url}) f\u00f6r SmartThings som har skapats enligt [instruktionerna]({component_url}).", + "title": "Ange personlig \u00e5tkomsttoken" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/th.json b/homeassistant/components/smartthings/translations/th.json new file mode 100644 index 00000000000..47b04ed2c6a --- /dev/null +++ b/homeassistant/components/smartthings/translations/th.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "wait_install": { + "description": "\u0e42\u0e1b\u0e23\u0e14\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07 Home Assistant SmartApp \u0e43\u0e19\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e19\u0e49\u0e2d\u0e22\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e41\u0e2b\u0e48\u0e07\u0e41\u0e25\u0e49\u0e27\u0e04\u0e25\u0e34\u0e01\u0e2a\u0e48\u0e07", + "title": "\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07 SmartApp" + } + } + }, + "title": "SmartThings" +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/zh-Hans.json b/homeassistant/components/smartthings/translations/zh-Hans.json new file mode 100644 index 00000000000..849d69d55e5 --- /dev/null +++ b/homeassistant/components/smartthings/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "app_setup_error": "\u65e0\u6cd5\u8bbe\u7f6e SmartApp\u3002\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002", + "token_forbidden": "\u4ee4\u724c\u6ca1\u6709\u6240\u9700\u7684 OAuth \u4f5c\u7528\u57df\u3002", + "token_invalid_format": "\u4ee4\u724c\u5fc5\u987b\u7b26\u5408 UID/GUID \u683c\u5f0f", + "token_unauthorized": "\u4ee4\u724c\u65e0\u6548\u6216\u5df2\u5931\u6548\u3002", + "webhook_error": "SmartThings \u65e0\u6cd5\u9a8c\u8bc1 `base_url` \u4e2d\u914d\u7f6e\u7684\u7aef\u70b9\u3002\u8bf7\u67e5\u770b\u7ec4\u4ef6\u9700\u6c42\u3002" + }, + "step": { + "user": { + "description": "\u8bf7\u8f93\u5165\u6309\u7167[\u8bf4\u660e]({component_url})\u521b\u5efa\u7684 SmartThings [\u4e2a\u4eba\u8bbf\u95ee\u4ee4\u724c]({token_url})\u3002", + "title": "\u8f93\u5165\u4e2a\u4eba\u8bbf\u95ee\u4ee4\u724c" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/zh-Hant.json b/homeassistant/components/smartthings/translations/zh-Hant.json new file mode 100644 index 00000000000..8a8735a8077 --- /dev/null +++ b/homeassistant/components/smartthings/translations/zh-Hant.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "invalid_webhook_url": "Home Assistant \u672a\u8a2d\u5b9a\u6b63\u78ba\u4ee5\u63a5\u6536 SmartThings \u66f4\u65b0\u3002Webhook URL \u7121\u6548\uff1a\n> {webhook_url}\n\n\u8acb\u8ddf\u96a8\u6b64[\u6559\u5b78]({component_url}) \u66f4\u65b0\u8a2d\u5b9a\u3002\u91cd\u65b0\u555f\u52d5 Home Assistant \u5f8c\u3001\u518d\n\u8a66\u4e00\u6b21\u3002", + "no_available_locations": "\u6c92\u6709\u53ef\u7528 SmartThings \u4f4d\u7f6e\u4ee5\u8a2d\u5b9a Home Assistant\u3002" + }, + "error": { + "app_setup_error": "\u7121\u6cd5\u8a2d\u5b9a SmartApp\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002", + "token_forbidden": "\u5bc6\u9470\u4e0d\u5177\u6240\u9700\u7684 OAuth \u7bc4\u570d\u3002", + "token_invalid_format": "\u5bc6\u9470\u5fc5\u9808\u70ba UID/GUID \u683c\u5f0f", + "token_unauthorized": "\u5bc6\u9470\u7121\u6548\u6216\u4e0d\u518d\u5177\u6709\u6388\u6b0a\u3002", + "webhook_error": "SmartThings \u7121\u6cd5\u8a8d\u8b49 Webhook URL\u3002\u8acb\u78ba\u8a8d Webhook URL \u53ef\u7531\u7db2\u8def\u5b58\u53d6\u5f8c\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "authorize": { + "title": "\u8a8d\u8b49 Home Assistant" + }, + "pat": { + "data": { + "access_token": "\u5b58\u53d6\u5bc6\u9470" + }, + "description": "\u8acb\u8f38\u5165\u8ddf\u96a8\u6b64[\u6559\u5b78]({component_url}) \u6240\u5efa\u7acb\u7684 SmartThings [\u500b\u4eba\u5b58\u53d6\u5bc6\u9470]({token_url})\u3002\u5c07\u4f7f\u7528 SmartThings \u5e33\u865f\u65b0\u589e Home Assistant \u6574\u5408\u3002", + "title": "\u8f38\u5165\u500b\u4eba\u5b58\u53d6\u5bc6\u9470" + }, + "select_location": { + "data": { + "location_id": "\u4f4d\u7f6e" + }, + "description": "\u8acb\u9078\u64c7\u6240\u8981\u52a0\u5165\u81f3 Home Assistant \u7684 SmartThings \u4f4d\u7f6e\u3002\u5c07\u6703\u958b\u555f\u65b0\u8996\u7a97\u4e26\u8a62\u554f\u767b\u5165\u8207\u8a8d\u8b49\u5b89\u88dd Home Assistant \u6574\u5408\u81f3\u6240\u9078\u4f4d\u7f6e\u3002", + "title": "\u9078\u64c7\u4f4d\u7f6e" + }, + "user": { + "description": "SmartThings \u9700\u8981\u9032\u884c\u8a2d\u5b9a\u4ee5\u50b3\u9001\u63a8\u64a5\u66f4\u65b0\u81f3 Home Assistant\uff0c\u8a2d\u5b9a\u4f4d\u5740\uff1a\n> {webhook_url}\n\n\u5047\u5982\u8cc7\u8a0a\u4e0d\u6b63\u78ba\uff0c\u8acb\u66f4\u65b0\u8a2d\u5b9a\u3001\u91cd\u65b0\u555f\u52d5 Home Assistant \u5f8c\u3001\u518d\u8a66\u4e00\u6b21\u3002", + "title": "\u78ba\u8a8d Callback URL" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smarty/manifest.json b/homeassistant/components/smarty/manifest.json index 1e56cf84e47..b55f3f11c3e 100644 --- a/homeassistant/components/smarty/manifest.json +++ b/homeassistant/components/smarty/manifest.json @@ -3,6 +3,5 @@ "name": "Salda Smarty", "documentation": "https://www.home-assistant.io/integrations/smarty", "requirements": ["pysmarty==0.8"], - "dependencies": [], "codeowners": ["@z0mbieprocess"] } diff --git a/homeassistant/components/smhi/.translations/bg.json b/homeassistant/components/smhi/.translations/bg.json deleted file mode 100644 index 9a8767fa7c7..00000000000 --- a/homeassistant/components/smhi/.translations/bg.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430", - "wrong_location": "\u041f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0442 \u0441\u0435 \u0441\u0430\u043c\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0428\u0432\u0435\u0446\u0438\u044f" - }, - "step": { - "user": { - "data": { - "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", - "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430", - "name": "\u0418\u043c\u0435" - }, - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0428\u0432\u0435\u0446\u0438\u044f" - } - }, - "title": "\u0428\u0432\u0435\u0434\u0441\u043a\u0430 \u043c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u0441\u043b\u0443\u0436\u0431\u0430 (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/ca.json b/homeassistant/components/smhi/.translations/ca.json deleted file mode 100644 index e265df40217..00000000000 --- a/homeassistant/components/smhi/.translations/ca.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nom ja existeix", - "wrong_location": "La ubicaci\u00f3 ha d'estar a Su\u00e8cia" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nom" - }, - "title": "Ubicaci\u00f3 a Su\u00e8cia" - } - }, - "title": "Servei meteorol\u00f2gic suec (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/cs.json b/homeassistant/components/smhi/.translations/cs.json deleted file mode 100644 index 356603c9cf8..00000000000 --- a/homeassistant/components/smhi/.translations/cs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "N\u00e1zev ji\u017e existuje", - "wrong_location": "Lokalita pouze pro \u0160v\u00e9dsko" - }, - "step": { - "user": { - "data": { - "latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka", - "longitude": "Zem\u011bpisn\u00e1 d\u00e9lka", - "name": "N\u00e1zev" - }, - "title": "Lokalita ve \u0160v\u00e9dsku" - } - }, - "title": "\u0160v\u00e9dsk\u00e1 meteorologick\u00e1 slu\u017eba (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/da.json b/homeassistant/components/smhi/.translations/da.json deleted file mode 100644 index 52c4f54ebd7..00000000000 --- a/homeassistant/components/smhi/.translations/da.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Navnet findes allerede", - "wrong_location": "Lokalitet kun i Sverige" - }, - "step": { - "user": { - "data": { - "latitude": "Breddegrad", - "longitude": "L\u00e6ngdegrad", - "name": "Navn" - }, - "title": "Lokalitet i Sverige" - } - }, - "title": "Svensk vejr service (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/de.json b/homeassistant/components/smhi/.translations/de.json deleted file mode 100644 index 7c41731988c..00000000000 --- a/homeassistant/components/smhi/.translations/de.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Name existiert bereits", - "wrong_location": "Standort nur in Schweden" - }, - "step": { - "user": { - "data": { - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad", - "name": "Name" - }, - "title": "Standort in Schweden" - } - }, - "title": "Schwedischer Wetterdienst (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/en.json b/homeassistant/components/smhi/.translations/en.json deleted file mode 100644 index 6aa256d87d4..00000000000 --- a/homeassistant/components/smhi/.translations/en.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Name already exists", - "wrong_location": "Location Sweden only" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Name" - }, - "title": "Location in Sweden" - } - }, - "title": "Swedish weather service (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/es-419.json b/homeassistant/components/smhi/.translations/es-419.json deleted file mode 100644 index a3fb9ee5e27..00000000000 --- a/homeassistant/components/smhi/.translations/es-419.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "El nombre ya existe", - "wrong_location": "Ubicaci\u00f3n Suecia solamente" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre" - }, - "title": "Ubicaci\u00f3n en Suecia" - } - }, - "title": "Servicio meteorol\u00f3gico sueco (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/es.json b/homeassistant/components/smhi/.translations/es.json deleted file mode 100644 index 627c534f6dd..00000000000 --- a/homeassistant/components/smhi/.translations/es.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Nombre ya existe", - "wrong_location": "Ubicaci\u00f3n Suecia solamente" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Nombre" - }, - "title": "Ubicaci\u00f3n en Suecia" - } - }, - "title": "Servicio meteorol\u00f3gico sueco (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/fr.json b/homeassistant/components/smhi/.translations/fr.json deleted file mode 100644 index aa4589e558d..00000000000 --- a/homeassistant/components/smhi/.translations/fr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9", - "wrong_location": "En Su\u00e8de uniquement" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nom" - }, - "title": "Localisation en Su\u00e8de" - } - }, - "title": "Service m\u00e9t\u00e9orologique su\u00e9dois (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/hu.json b/homeassistant/components/smhi/.translations/hu.json deleted file mode 100644 index 8c79ff3bfaf..00000000000 --- a/homeassistant/components/smhi/.translations/hu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik", - "wrong_location": "Csak sv\u00e9dorsz\u00e1gi helysz\u00edn megengedett" - }, - "step": { - "user": { - "data": { - "latitude": "Sz\u00e9less\u00e9g", - "longitude": "Hossz\u00fas\u00e1g", - "name": "N\u00e9v" - }, - "title": "Helysz\u00edn Sv\u00e9dorsz\u00e1gban" - } - }, - "title": "Sv\u00e9d Meteorol\u00f3giai Szolg\u00e1lat (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/it.json b/homeassistant/components/smhi/.translations/it.json deleted file mode 100644 index 1c886e4f20e..00000000000 --- a/homeassistant/components/smhi/.translations/it.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Il nome \u00e8 gi\u00e0 esistente", - "wrong_location": "Localit\u00e0 solamente della Svezia" - }, - "step": { - "user": { - "data": { - "latitude": "Latitudine", - "longitude": "Longitudine", - "name": "Nome" - }, - "title": "Localit\u00e0 in Svezia" - } - }, - "title": "Servizio meteo svedese (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/ko.json b/homeassistant/components/smhi/.translations/ko.json deleted file mode 100644 index f307fa1ad23..00000000000 --- a/homeassistant/components/smhi/.translations/ko.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", - "wrong_location": "\uc2a4\uc6e8\ub374 \uc9c0\uc5ed \uc804\uc6a9\uc785\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4", - "name": "\uc774\ub984" - }, - "title": "\uc2a4\uc6e8\ub374 \uc9c0\uc5ed \uc704\uce58" - } - }, - "title": "\uc2a4\uc6e8\ub374 \uae30\uc0c1 \uc11c\ube44\uc2a4 (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/lb.json b/homeassistant/components/smhi/.translations/lb.json deleted file mode 100644 index 46abfd2677f..00000000000 --- a/homeassistant/components/smhi/.translations/lb.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Numm g\u00ebtt et schonn", - "wrong_location": "N\u00ebmmen Uertschaften an Schweden" - }, - "step": { - "user": { - "data": { - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad", - "name": "Numm" - }, - "title": "Uertschaft an Schweden" - } - }, - "title": "Schwedeschen Wieder D\u00e9ngscht (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/nl.json b/homeassistant/components/smhi/.translations/nl.json deleted file mode 100644 index 88edc116e74..00000000000 --- a/homeassistant/components/smhi/.translations/nl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Naam bestaat al", - "wrong_location": "Locatie alleen Zweden" - }, - "step": { - "user": { - "data": { - "latitude": "Breedtegraad", - "longitude": "Lengtegraad", - "name": "Naam" - }, - "title": "Locatie in Zweden" - } - }, - "title": "Zweedse weerdienst (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/no.json b/homeassistant/components/smhi/.translations/no.json deleted file mode 100644 index 19c90f8ec5c..00000000000 --- a/homeassistant/components/smhi/.translations/no.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Navnet eksisterer allerede", - "wrong_location": "Bare plassering i Sverige" - }, - "step": { - "user": { - "data": { - "latitude": "Breddegrad", - "longitude": "Lengdegrad", - "name": "Navn" - }, - "title": "Plassering i Sverige" - } - }, - "title": "Sveriges Meteorologiske og Hydrologiske Institut (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/pl.json b/homeassistant/components/smhi/.translations/pl.json deleted file mode 100644 index 818f27853ff..00000000000 --- a/homeassistant/components/smhi/.translations/pl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Nazwa ju\u017c istnieje.", - "wrong_location": "Lokalizacja w Szwecji" - }, - "step": { - "user": { - "data": { - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna", - "name": "Nazwa" - }, - "title": "Lokalizacja w Szwecji" - } - }, - "title": "Szwedzka us\u0142uga pogodowa (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/pt-BR.json b/homeassistant/components/smhi/.translations/pt-BR.json deleted file mode 100644 index 848f85ed133..00000000000 --- a/homeassistant/components/smhi/.translations/pt-BR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "O nome j\u00e1 existe", - "wrong_location": "Localiza\u00e7\u00e3o apenas na Su\u00e9cia" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nome" - }, - "title": "Localiza\u00e7\u00e3o na Su\u00e9cia" - } - }, - "title": "Servi\u00e7o meteorol\u00f3gico sueco (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/pt.json b/homeassistant/components/smhi/.translations/pt.json deleted file mode 100644 index e814ffd5046..00000000000 --- a/homeassistant/components/smhi/.translations/pt.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Nome j\u00e1 existe", - "wrong_location": "Localiza\u00e7\u00e3o apenas na Su\u00e9cia" - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "name": "Nome" - }, - "title": "Localiza\u00e7\u00e3o na Su\u00e9cia" - } - }, - "title": "Servi\u00e7o meteorol\u00f3gico sueco (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/ro.json b/homeassistant/components/smhi/.translations/ro.json deleted file mode 100644 index 6249e49d2d7..00000000000 --- a/homeassistant/components/smhi/.translations/ro.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Numele exist\u0103 deja", - "wrong_location": "Loca\u021bia numai \u00een Suedia" - }, - "step": { - "user": { - "data": { - "latitude": "Latitudine", - "longitude": "Longitudine", - "name": "Nume" - }, - "title": "Loca\u021bie \u00een Suedia" - } - }, - "title": "Serviciul meteorologic suedez (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/ru.json b/homeassistant/components/smhi/.translations/ru.json deleted file mode 100644 index f3ba34adac3..00000000000 --- a/homeassistant/components/smhi/.translations/ru.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.", - "wrong_location": "\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0428\u0432\u0435\u0446\u0438\u0438." - }, - "step": { - "user": { - "data": { - "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", - "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0428\u0432\u0435\u0446\u0438\u0438" - } - }, - "title": "\u041c\u0435\u0442\u0435\u043e\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430 \u0428\u0432\u0435\u0446\u0438\u0438 (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/sl.json b/homeassistant/components/smhi/.translations/sl.json deleted file mode 100644 index 94c3750f06f..00000000000 --- a/homeassistant/components/smhi/.translations/sl.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Ime \u017ee obstaja", - "wrong_location": "Lokacija le na \u0160vedskem" - }, - "step": { - "user": { - "data": { - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina", - "name": "Ime" - }, - "title": "Lokacija na \u0160vedskem" - } - }, - "title": "\u0160vedska vremenska slu\u017eba (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/sv.json b/homeassistant/components/smhi/.translations/sv.json deleted file mode 100644 index 69073a0eb73..00000000000 --- a/homeassistant/components/smhi/.translations/sv.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "Namnet finns redan", - "wrong_location": "Plats i Sverige endast" - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "name": "Namn" - }, - "title": "Plats i Sverige" - } - }, - "title": "Svensk v\u00e4derservice (SMHI)" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/zh-Hans.json b/homeassistant/components/smhi/.translations/zh-Hans.json deleted file mode 100644 index a70bb7a6722..00000000000 --- a/homeassistant/components/smhi/.translations/zh-Hans.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u540d\u79f0\u5df2\u5b58\u5728", - "wrong_location": "\u4ec5\u9650\u745e\u5178\u7684\u4f4d\u7f6e" - }, - "step": { - "user": { - "data": { - "latitude": "\u7eac\u5ea6", - "longitude": "\u7ecf\u5ea6", - "name": "\u540d\u79f0" - }, - "title": "\u5728\u745e\u5178\u7684\u4f4d\u7f6e" - } - }, - "title": "\u745e\u5178\u6c14\u8c61\u670d\u52a1\uff08SMHI\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/zh-Hant.json b/homeassistant/components/smhi/.translations/zh-Hant.json deleted file mode 100644 index b982baac2f8..00000000000 --- a/homeassistant/components/smhi/.translations/zh-Hant.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728", - "wrong_location": "\u50c5\u9650\u745e\u5178\u5ea7\u6a19" - }, - "step": { - "user": { - "data": { - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6", - "name": "\u540d\u7a31" - }, - "title": "\u745e\u5178\u5ea7\u6a19" - } - }, - "title": "\u745e\u5178\u6c23\u8c61\u670d\u52d9\uff08SMHI\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/smhi/config_flow.py b/homeassistant/components/smhi/config_flow.py index 2c04896497a..8853680af33 100644 --- a/homeassistant/components/smhi/config_flow.py +++ b/homeassistant/components/smhi/config_flow.py @@ -15,10 +15,10 @@ from .const import DOMAIN, HOME_LOCATION_NAME @callback def smhi_locations(hass: HomeAssistant): """Return configurations of SMHI component.""" - return set( + return { (slugify(entry.data[CONF_NAME])) for entry in hass.config_entries.async_entries(DOMAIN) - ) + } @config_entries.HANDLERS.register(DOMAIN) diff --git a/homeassistant/components/smhi/manifest.json b/homeassistant/components/smhi/manifest.json index af8c64ac06f..2e21f62a599 100644 --- a/homeassistant/components/smhi/manifest.json +++ b/homeassistant/components/smhi/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/smhi", "requirements": ["smhi-pkg==1.0.13"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/smhi/strings.json b/homeassistant/components/smhi/strings.json index dbf1172b7d6..245260b0fce 100644 --- a/homeassistant/components/smhi/strings.json +++ b/homeassistant/components/smhi/strings.json @@ -1,19 +1,18 @@ { - "config": { - "title": "Swedish weather service (SMHI)", - "step": { - "user": { - "title": "Location in Sweden", - "data": { - "name": "Name", - "latitude": "Latitude", - "longitude": "Longitude" - } - } - }, - "error": { - "name_exists": "Name already exists", - "wrong_location": "Location Sweden only" + "config": { + "step": { + "user": { + "title": "Location in Sweden", + "data": { + "name": "Name", + "latitude": "Latitude", + "longitude": "Longitude" } + } + }, + "error": { + "name_exists": "Name already exists", + "wrong_location": "Location Sweden only" } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/smhi/translations/bg.json b/homeassistant/components/smhi/translations/bg.json new file mode 100644 index 00000000000..85ccdf9abca --- /dev/null +++ b/homeassistant/components/smhi/translations/bg.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430", + "wrong_location": "\u041f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0442 \u0441\u0435 \u0441\u0430\u043c\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0428\u0432\u0435\u0446\u0438\u044f" + }, + "step": { + "user": { + "data": { + "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", + "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430", + "name": "\u0418\u043c\u0435" + }, + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0428\u0432\u0435\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/ca.json b/homeassistant/components/smhi/translations/ca.json new file mode 100644 index 00000000000..11fe5675d5d --- /dev/null +++ b/homeassistant/components/smhi/translations/ca.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "El nom ja existeix", + "wrong_location": "La ubicaci\u00f3 ha d'estar a Su\u00e8cia" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nom" + }, + "title": "Ubicaci\u00f3 a Su\u00e8cia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/cs.json b/homeassistant/components/smhi/translations/cs.json new file mode 100644 index 00000000000..437c2105e73 --- /dev/null +++ b/homeassistant/components/smhi/translations/cs.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "N\u00e1zev ji\u017e existuje", + "wrong_location": "Lokalita pouze pro \u0160v\u00e9dsko" + }, + "step": { + "user": { + "data": { + "latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka", + "longitude": "Zem\u011bpisn\u00e1 d\u00e9lka", + "name": "N\u00e1zev" + }, + "title": "Lokalita ve \u0160v\u00e9dsku" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/da.json b/homeassistant/components/smhi/translations/da.json new file mode 100644 index 00000000000..979f4b0f7b6 --- /dev/null +++ b/homeassistant/components/smhi/translations/da.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Navnet findes allerede", + "wrong_location": "Lokalitet kun i Sverige" + }, + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "L\u00e6ngdegrad", + "name": "Navn" + }, + "title": "Lokalitet i Sverige" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/de.json b/homeassistant/components/smhi/translations/de.json new file mode 100644 index 00000000000..d17d577bfed --- /dev/null +++ b/homeassistant/components/smhi/translations/de.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Name existiert bereits", + "wrong_location": "Standort nur in Schweden" + }, + "step": { + "user": { + "data": { + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "name": "Name" + }, + "title": "Standort in Schweden" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/en.json b/homeassistant/components/smhi/translations/en.json new file mode 100644 index 00000000000..904ade6ef0a --- /dev/null +++ b/homeassistant/components/smhi/translations/en.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Name already exists", + "wrong_location": "Location Sweden only" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Name" + }, + "title": "Location in Sweden" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/es-419.json b/homeassistant/components/smhi/translations/es-419.json new file mode 100644 index 00000000000..3db65a34ad9 --- /dev/null +++ b/homeassistant/components/smhi/translations/es-419.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "El nombre ya existe", + "wrong_location": "Ubicaci\u00f3n Suecia solamente" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre" + }, + "title": "Ubicaci\u00f3n en Suecia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/es.json b/homeassistant/components/smhi/translations/es.json new file mode 100644 index 00000000000..d9902ba7d08 --- /dev/null +++ b/homeassistant/components/smhi/translations/es.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Nombre ya existe", + "wrong_location": "Ubicaci\u00f3n Suecia solamente" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Nombre" + }, + "title": "Ubicaci\u00f3n en Suecia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/fr.json b/homeassistant/components/smhi/translations/fr.json new file mode 100644 index 00000000000..ec535090348 --- /dev/null +++ b/homeassistant/components/smhi/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9", + "wrong_location": "En Su\u00e8de uniquement" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nom" + }, + "title": "Localisation en Su\u00e8de" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/hu.json b/homeassistant/components/smhi/translations/hu.json new file mode 100644 index 00000000000..425cf927631 --- /dev/null +++ b/homeassistant/components/smhi/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik", + "wrong_location": "Csak sv\u00e9dorsz\u00e1gi helysz\u00edn megengedett" + }, + "step": { + "user": { + "data": { + "latitude": "Sz\u00e9less\u00e9g", + "longitude": "Hossz\u00fas\u00e1g", + "name": "N\u00e9v" + }, + "title": "Helysz\u00edn Sv\u00e9dorsz\u00e1gban" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/it.json b/homeassistant/components/smhi/translations/it.json new file mode 100644 index 00000000000..b45b60babfe --- /dev/null +++ b/homeassistant/components/smhi/translations/it.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Il nome \u00e8 gi\u00e0 esistente", + "wrong_location": "Localit\u00e0 solamente della Svezia" + }, + "step": { + "user": { + "data": { + "latitude": "Latitudine", + "longitude": "Longitudine", + "name": "Nome" + }, + "title": "Localit\u00e0 in Svezia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/ko.json b/homeassistant/components/smhi/translations/ko.json new file mode 100644 index 00000000000..dac6c9018b2 --- /dev/null +++ b/homeassistant/components/smhi/translations/ko.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", + "wrong_location": "\uc2a4\uc6e8\ub374 \uc9c0\uc5ed \uc804\uc6a9\uc785\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "name": "\uc774\ub984" + }, + "title": "\uc2a4\uc6e8\ub374 \uc9c0\uc5ed \uc704\uce58" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/lb.json b/homeassistant/components/smhi/translations/lb.json new file mode 100644 index 00000000000..9444569c4a1 --- /dev/null +++ b/homeassistant/components/smhi/translations/lb.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Numm g\u00ebtt et schonn", + "wrong_location": "N\u00ebmmen Uertschaften an Schweden" + }, + "step": { + "user": { + "data": { + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad", + "name": "Numm" + }, + "title": "Uertschaft an Schweden" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/nl.json b/homeassistant/components/smhi/translations/nl.json new file mode 100644 index 00000000000..06ce8442ad2 --- /dev/null +++ b/homeassistant/components/smhi/translations/nl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Naam bestaat al", + "wrong_location": "Locatie alleen Zweden" + }, + "step": { + "user": { + "data": { + "latitude": "Breedtegraad", + "longitude": "Lengtegraad", + "name": "Naam" + }, + "title": "Locatie in Zweden" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/no.json b/homeassistant/components/smhi/translations/no.json new file mode 100644 index 00000000000..952e98b6481 --- /dev/null +++ b/homeassistant/components/smhi/translations/no.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Navnet eksisterer allerede", + "wrong_location": "Bare plassering i Sverige" + }, + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "name": "Navn" + }, + "title": "Plassering i Sverige" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/pl.json b/homeassistant/components/smhi/translations/pl.json new file mode 100644 index 00000000000..612d12e7717 --- /dev/null +++ b/homeassistant/components/smhi/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Nazwa ju\u017c istnieje.", + "wrong_location": "Lokalizacja w Szwecji" + }, + "step": { + "user": { + "data": { + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "name": "Nazwa" + }, + "title": "Lokalizacja w Szwecji" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/pt-BR.json b/homeassistant/components/smhi/translations/pt-BR.json new file mode 100644 index 00000000000..0bc966fdd6c --- /dev/null +++ b/homeassistant/components/smhi/translations/pt-BR.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "O nome j\u00e1 existe", + "wrong_location": "Localiza\u00e7\u00e3o apenas na Su\u00e9cia" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nome" + }, + "title": "Localiza\u00e7\u00e3o na Su\u00e9cia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/pt.json b/homeassistant/components/smhi/translations/pt.json new file mode 100644 index 00000000000..c23a33b6e19 --- /dev/null +++ b/homeassistant/components/smhi/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Nome j\u00e1 existe", + "wrong_location": "Localiza\u00e7\u00e3o apenas na Su\u00e9cia" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "name": "Nome" + }, + "title": "Localiza\u00e7\u00e3o na Su\u00e9cia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/ro.json b/homeassistant/components/smhi/translations/ro.json new file mode 100644 index 00000000000..0261289fd31 --- /dev/null +++ b/homeassistant/components/smhi/translations/ro.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Numele exist\u0103 deja", + "wrong_location": "Loca\u021bia numai \u00een Suedia" + }, + "step": { + "user": { + "data": { + "latitude": "Latitudine", + "longitude": "Longitudine", + "name": "Nume" + }, + "title": "Loca\u021bie \u00een Suedia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/ru.json b/homeassistant/components/smhi/translations/ru.json new file mode 100644 index 00000000000..35c182455da --- /dev/null +++ b/homeassistant/components/smhi/translations/ru.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.", + "wrong_location": "\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0428\u0432\u0435\u0446\u0438\u0438." + }, + "step": { + "user": { + "data": { + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0428\u0432\u0435\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/sl.json b/homeassistant/components/smhi/translations/sl.json new file mode 100644 index 00000000000..91fe7d8375f --- /dev/null +++ b/homeassistant/components/smhi/translations/sl.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Ime \u017ee obstaja", + "wrong_location": "Lokacija le na \u0160vedskem" + }, + "step": { + "user": { + "data": { + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina", + "name": "Ime" + }, + "title": "Lokacija na \u0160vedskem" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/sv.json b/homeassistant/components/smhi/translations/sv.json new file mode 100644 index 00000000000..b6afc479b70 --- /dev/null +++ b/homeassistant/components/smhi/translations/sv.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "Namnet finns redan", + "wrong_location": "Plats i Sverige endast" + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "name": "Namn" + }, + "title": "Plats i Sverige" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/.translations/th.json b/homeassistant/components/smhi/translations/th.json similarity index 100% rename from homeassistant/components/smhi/.translations/th.json rename to homeassistant/components/smhi/translations/th.json diff --git a/homeassistant/components/smhi/.translations/tr.json b/homeassistant/components/smhi/translations/tr.json similarity index 100% rename from homeassistant/components/smhi/.translations/tr.json rename to homeassistant/components/smhi/translations/tr.json diff --git a/homeassistant/components/smhi/translations/zh-Hans.json b/homeassistant/components/smhi/translations/zh-Hans.json new file mode 100644 index 00000000000..b2ddc3aa1d7 --- /dev/null +++ b/homeassistant/components/smhi/translations/zh-Hans.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "\u540d\u79f0\u5df2\u5b58\u5728", + "wrong_location": "\u4ec5\u9650\u745e\u5178\u7684\u4f4d\u7f6e" + }, + "step": { + "user": { + "data": { + "latitude": "\u7eac\u5ea6", + "longitude": "\u7ecf\u5ea6", + "name": "\u540d\u79f0" + }, + "title": "\u5728\u745e\u5178\u7684\u4f4d\u7f6e" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/translations/zh-Hant.json b/homeassistant/components/smhi/translations/zh-Hant.json new file mode 100644 index 00000000000..a37d47cd150 --- /dev/null +++ b/homeassistant/components/smhi/translations/zh-Hant.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728", + "wrong_location": "\u50c5\u9650\u745e\u5178\u5ea7\u6a19" + }, + "step": { + "user": { + "data": { + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "name": "\u540d\u7a31" + }, + "title": "\u745e\u5178\u5ea7\u6a19" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smhi/weather.py b/homeassistant/components/smhi/weather.py index 574b8d85767..0c5450b5ddd 100644 --- a/homeassistant/components/smhi/weather.py +++ b/homeassistant/components/smhi/weather.py @@ -51,15 +51,6 @@ RETRY_TIMEOUT = 5 * 60 MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=31) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up components. - - Can only be called when a user accidentally mentions smhi in the - config. In that case it will be ignored. - """ - pass - - async def async_setup_entry( hass: HomeAssistant, config_entry: ConfigEntry, config_entries ) -> bool: diff --git a/homeassistant/components/sms/manifest.json b/homeassistant/components/sms/manifest.json index c58139993bb..8b65ac77e59 100644 --- a/homeassistant/components/sms/manifest.json +++ b/homeassistant/components/sms/manifest.json @@ -3,6 +3,5 @@ "name": "SMS notifications via GSM-modem", "documentation": "https://www.home-assistant.io/integrations/sms", "requirements": ["python-gammu==2.12"], - "dependencies": [], "codeowners": ["@ocalvo"] } diff --git a/homeassistant/components/sms/notify.py b/homeassistant/components/sms/notify.py index 0a47e0aad25..f39ae8153bd 100644 --- a/homeassistant/components/sms/notify.py +++ b/homeassistant/components/sms/notify.py @@ -34,14 +34,25 @@ class SMSNotificationService(BaseNotificationService): def send_message(self, message="", **kwargs): """Send SMS message.""" - # Prepare message data - # We tell that we want to use first SMSC number stored in phone - gammu_message = { - "Text": message, - "SMSC": {"Location": 1}, - "Number": self.number, + smsinfo = { + "Class": -1, + "Unicode": False, + "Entries": [{"ID": "ConcatenatedTextLong", "Buffer": message}], } try: - self.gateway.SendSMS(gammu_message) + # Encode messages + encoded = gammu.EncodeSMS(smsinfo) # pylint: disable=no-member except gammu.GSMError as exc: # pylint: disable=no-member - _LOGGER.error("Sending to %s failed: %s", self.number, exc) + _LOGGER.error("Encoding message %s failed: %s", message, exc) + return + + # Send messages + for encoded_message in encoded: + # Fill in numbers + encoded_message["SMSC"] = {"Location": 1} + encoded_message["Number"] = self.number + try: + # Actually send the message + self.gateway.SendSMS(encoded_message) + except gammu.GSMError as exc: # pylint: disable=no-member + _LOGGER.error("Sending to %s failed: %s", self.number, exc) diff --git a/homeassistant/components/smtp/manifest.json b/homeassistant/components/smtp/manifest.json index 974eb684765..334687a8047 100644 --- a/homeassistant/components/smtp/manifest.json +++ b/homeassistant/components/smtp/manifest.json @@ -2,7 +2,5 @@ "domain": "smtp", "name": "SMTP", "documentation": "https://www.home-assistant.io/integrations/smtp", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/snapcast/__init__.py b/homeassistant/components/snapcast/__init__.py index e6c574b7b2b..b5279fa3ce0 100644 --- a/homeassistant/components/snapcast/__init__.py +++ b/homeassistant/components/snapcast/__init__.py @@ -1,50 +1 @@ """The snapcast component.""" - -import asyncio - -import voluptuous as vol - -from homeassistant.const import ATTR_ENTITY_ID -from homeassistant.helpers import config_validation as cv -from homeassistant.helpers.dispatcher import async_dispatcher_send - -DOMAIN = "snapcast" - -SERVICE_SNAPSHOT = "snapshot" -SERVICE_RESTORE = "restore" -SERVICE_JOIN = "join" -SERVICE_UNJOIN = "unjoin" - -ATTR_MASTER = "master" - -SERVICE_SCHEMA = vol.Schema({vol.Required(ATTR_ENTITY_ID): cv.entity_ids}) - -JOIN_SERVICE_SCHEMA = SERVICE_SCHEMA.extend({vol.Required(ATTR_MASTER): cv.entity_id}) - - -async def async_setup(hass, config): - """Handle service configuration.""" - service_event = asyncio.Event() - - async def service_handle(service): - """Dispatch a service call.""" - service_event.clear() - async_dispatcher_send( - hass, DOMAIN, service_event, service.service, service.data - ) - await service_event.wait() - - hass.services.async_register( - DOMAIN, SERVICE_SNAPSHOT, service_handle, schema=SERVICE_SCHEMA - ) - hass.services.async_register( - DOMAIN, SERVICE_RESTORE, service_handle, schema=SERVICE_SCHEMA - ) - hass.services.async_register( - DOMAIN, SERVICE_JOIN, service_handle, schema=JOIN_SERVICE_SCHEMA - ) - hass.services.async_register( - DOMAIN, SERVICE_UNJOIN, service_handle, schema=SERVICE_SCHEMA - ) - - return True diff --git a/homeassistant/components/snapcast/const.py b/homeassistant/components/snapcast/const.py new file mode 100644 index 00000000000..674a22993b9 --- /dev/null +++ b/homeassistant/components/snapcast/const.py @@ -0,0 +1,17 @@ +"""Constants for Snapcast.""" + +DATA_KEY = "snapcast" + +GROUP_PREFIX = "snapcast_group_" +GROUP_SUFFIX = "Snapcast Group" +CLIENT_PREFIX = "snapcast_client_" +CLIENT_SUFFIX = "Snapcast Client" + +SERVICE_SNAPSHOT = "snapshot" +SERVICE_RESTORE = "restore" +SERVICE_JOIN = "join" +SERVICE_UNJOIN = "unjoin" +SERVICE_SET_LATENCY = "set_latency" + +ATTR_MASTER = "master" +ATTR_LATENCY = "latency" diff --git a/homeassistant/components/snapcast/manifest.json b/homeassistant/components/snapcast/manifest.json index e64d062b320..31eb0491eb4 100644 --- a/homeassistant/components/snapcast/manifest.json +++ b/homeassistant/components/snapcast/manifest.json @@ -3,6 +3,5 @@ "name": "Snapcast", "documentation": "https://www.home-assistant.io/integrations/snapcast", "requirements": ["snapcast==2.0.10"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/snapcast/media_player.py b/homeassistant/components/snapcast/media_player.py index c3c9138eb89..1bd44959ab1 100644 --- a/homeassistant/components/snapcast/media_player.py +++ b/homeassistant/components/snapcast/media_player.py @@ -13,7 +13,6 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, ) from homeassistant.const import ( - ATTR_ENTITY_ID, CONF_HOST, CONF_PORT, STATE_IDLE, @@ -22,22 +21,25 @@ from homeassistant.const import ( STATE_PLAYING, STATE_UNKNOWN, ) -import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers import config_validation as cv, entity_platform -from . import ( +from .const import ( + ATTR_LATENCY, ATTR_MASTER, - DOMAIN, + CLIENT_PREFIX, + CLIENT_SUFFIX, + DATA_KEY, + GROUP_PREFIX, + GROUP_SUFFIX, SERVICE_JOIN, SERVICE_RESTORE, + SERVICE_SET_LATENCY, SERVICE_SNAPSHOT, SERVICE_UNJOIN, ) _LOGGER = logging.getLogger(__name__) -DATA_KEY = "snapcast" - SUPPORT_SNAPCAST_CLIENT = ( SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_SET | SUPPORT_SELECT_SOURCE ) @@ -45,11 +47,6 @@ SUPPORT_SNAPCAST_GROUP = ( SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_SET | SUPPORT_SELECT_SOURCE ) -GROUP_PREFIX = "snapcast_group_" -GROUP_SUFFIX = "Snapcast Group" -CLIENT_PREFIX = "snapcast_client_" -CLIENT_SUFFIX = "Snapcast Client" - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( {vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT): cv.port} ) @@ -61,33 +58,18 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= host = config.get(CONF_HOST) port = config.get(CONF_PORT, CONTROL_PORT) - async def async_service_handle(service_event, service, data): - """Handle dispatched services.""" - entity_ids = data.get(ATTR_ENTITY_ID) - devices = [ - device for device in hass.data[DATA_KEY] if device.entity_id in entity_ids - ] - for device in devices: - if service == SERVICE_SNAPSHOT: - device.snapshot() - elif service == SERVICE_RESTORE: - await device.async_restore() - elif service == SERVICE_JOIN: - if isinstance(device, SnapcastClientDevice): - master = [ - e - for e in hass.data[DATA_KEY] - if e.entity_id == data[ATTR_MASTER] - ] - if isinstance(master[0], SnapcastClientDevice): - await device.async_join(master[0]) - elif service == SERVICE_UNJOIN: - if isinstance(device, SnapcastClientDevice): - await device.async_unjoin() - - service_event.set() - - async_dispatcher_connect(hass, DOMAIN, async_service_handle) + platform = entity_platform.current_platform.get() + platform.async_register_entity_service(SERVICE_SNAPSHOT, {}, "snapshot") + platform.async_register_entity_service(SERVICE_RESTORE, {}, "async_restore") + platform.async_register_entity_service( + SERVICE_JOIN, {vol.Required(ATTR_MASTER): cv.entity_id}, handle_async_join + ) + platform.async_register_entity_service(SERVICE_UNJOIN, {}, handle_async_unjoin) + platform.async_register_entity_service( + SERVICE_SET_LATENCY, + {vol.Required(ATTR_LATENCY): cv.positive_int}, + handle_set_latency, + ) try: server = await snapcast.control.create_server( @@ -107,6 +89,27 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async_add_entities(devices) +async def handle_async_join(entity, service_call): + """Handle the entity service join.""" + if not isinstance(entity, SnapcastClientDevice): + raise ValueError("Entity is not a client. Can only join clients.") + await entity.async_join(service_call.data[ATTR_MASTER]) + + +async def handle_async_unjoin(entity, service_call): + """Handle the entity service unjoin.""" + if not isinstance(entity, SnapcastClientDevice): + raise ValueError("Entity is not a client. Can only unjoin clients.") + await entity.async_unjoin() + + +async def handle_set_latency(entity, service_call): + """Handle the entity service set_latency.""" + if not isinstance(entity, SnapcastClientDevice): + raise ValueError("Latency can only be set for a Snapcast client.") + await entity.async_set_latency(service_call.data[ATTR_LATENCY]) + + class SnapcastGroupDevice(MediaPlayerDevice): """Representation of a Snapcast group device.""" @@ -176,17 +179,17 @@ class SnapcastGroupDevice(MediaPlayerDevice): streams = self._group.streams_by_name() if source in streams: await self._group.set_stream(streams[source].identifier) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_mute_volume(self, mute): """Send the mute command.""" await self._group.set_muted(mute) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_volume_level(self, volume): """Set the volume level.""" await self._group.set_volume(round(volume * 100)) - self.async_schedule_update_ha_state() + self.async_write_ha_state() def snapshot(self): """Snapshot the group state.""" @@ -260,45 +263,61 @@ class SnapcastClientDevice(MediaPlayerDevice): @property def device_state_attributes(self): """Return the state attributes.""" + state_attrs = {} + if self.latency is not None: + state_attrs["latency"] = self.latency name = f"{self._client.friendly_name} {CLIENT_SUFFIX}" - return {"friendly_name": name} + state_attrs["friendly_name"] = name + return state_attrs @property def should_poll(self): """Do not poll for state.""" return False + @property + def latency(self): + """Latency for Client.""" + return self._client.latency + async def async_select_source(self, source): """Set input source.""" streams = self._client.group.streams_by_name() if source in streams: await self._client.group.set_stream(streams[source].identifier) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_mute_volume(self, mute): """Send the mute command.""" await self._client.set_muted(mute) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_volume_level(self, volume): """Set the volume level.""" await self._client.set_volume(round(volume * 100)) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_join(self, master): """Join the group of the master player.""" - master_group = [ + + master_entity = next( + entity for entity in self.hass.data[DATA_KEY] if entity.entity_id == master + ) + if not isinstance(master_entity, SnapcastClientDevice): + raise ValueError("Master is not a client device. Can only join clients.") + + master_group = next( group for group in self._client.groups_available() - if master.identifier in group.clients - ] - await master_group[0].add_client(self._client.identifier) - self.async_schedule_update_ha_state() + if master_entity.identifier in group.clients + ) + await master_group.add_client(self._client.identifier) + self.async_write_ha_state() async def async_unjoin(self): """Unjoin the group the player is currently in.""" await self._client.group.remove_client(self._client.identifier) - self.async_schedule_update_ha_state() + self.async_write_ha_state() def snapshot(self): """Snapshot the client state.""" @@ -307,3 +326,8 @@ class SnapcastClientDevice(MediaPlayerDevice): async def async_restore(self): """Restore the client state.""" await self._client.restore() + + async def async_set_latency(self, latency): + """Set the latency of the client.""" + await self._client.set_latency(latency) + self.async_write_ha_state() diff --git a/homeassistant/components/snapcast/services.yaml b/homeassistant/components/snapcast/services.yaml index 3e5dadbf5c1..3b83aa3774d 100644 --- a/homeassistant/components/snapcast/services.yaml +++ b/homeassistant/components/snapcast/services.yaml @@ -3,28 +3,37 @@ join: fields: master: description: Entity ID of the player to synchronize to. - example: 'media_player.living_room' + example: "media_player.living_room" entity_id: description: Entity ID of the players to join to the "master". - example: 'media_player.bedroom' + example: "media_player.bedroom" unjoin: description: Unjoin the player from a group. fields: entity_id: description: Entity ID of the player to unjoin. - example: 'media_player.living_room' + example: "media_player.living_room" snapshot: description: Take a snapshot of the media player. fields: entity_id: description: Name(s) of entities that will be snapshotted. Platform dependent. - example: 'media_player.living_room' + example: "media_player.living_room" restore: description: Restore a snapshot of the media player. fields: entity_id: description: Name(s) of entities that will be restored. Platform dependent. - example: 'media_player.living_room' + example: "media_player.living_room" + +set_latency: + description: Set client set_latency + fields: + entity_id: + description: Name of entities that will have adjusted latency + latency: + description: Latency in master + example: 14 diff --git a/homeassistant/components/snips/manifest.json b/homeassistant/components/snips/manifest.json index 8aeb5bbb186..c704164c17f 100644 --- a/homeassistant/components/snips/manifest.json +++ b/homeassistant/components/snips/manifest.json @@ -2,7 +2,6 @@ "domain": "snips", "name": "Snips", "documentation": "https://www.home-assistant.io/integrations/snips", - "requirements": [], "dependencies": ["mqtt"], "codeowners": [] } diff --git a/homeassistant/components/snips/services.yaml b/homeassistant/components/snips/services.yaml index cca39062ce9..f06b94b9eaa 100644 --- a/homeassistant/components/snips/services.yaml +++ b/homeassistant/components/snips/services.yaml @@ -1,31 +1,42 @@ feedback_off: description: Turns feedback sounds off. fields: - site_id: {description: 'Site to turn sounds on, defaults to all sites (optional)', - example: bedroom} + site_id: + description: Site to turn sounds on, defaults to all sites (optional) + example: bedroom feedback_on: description: Turns feedback sounds on. fields: - site_id: {description: 'Site to turn sounds on, defaults to all sites (optional)', - example: bedroom} + site_id: + description: Site to turn sounds on, defaults to all sites (optional) + example: bedroom say: description: Send a TTS message to Snips. fields: - custom_data: {description: custom data that will be included with all messages - in this session, example: user=UserName} - site_id: {description: 'Site to use to start session, defaults to default (optional)', - example: bedroom} - text: {description: Text to say., example: My name is snips} + custom_data: + description: custom data that will be included with all messages in this session + example: user=UserName + site_id: + description: Site to use to start session, defaults to default (optional) + example: bedroom + text: + description: Text to say. + example: My name is snips say_action: description: Send a TTS message to Snips to listen for a response. fields: - can_be_enqueued: {description: 'If True, session waits for an open session to - end, if False session is dropped if one is running', example: true} - custom_data: {description: custom data that will be included with all messages - in this session, example: user=UserName} - intent_filter: {description: Optional Array of Strings - A list of intents names - to restrict the NLU resolution to on the first query., example: 'turnOnLights, - turnOffLights'} - site_id: {description: 'Site to use to start session, defaults to default (optional)', - example: bedroom} - text: {description: Text to say, example: My name is snips} + can_be_enqueued: + description: If True, session waits for an open session to end, if False session is dropped if one is running + example: true + custom_data: + description: custom data that will be included with all messages in this session + example: user=UserName + intent_filter: + description: Optional Array of Strings - A list of intents names to restrict the NLU resolution to on the first query. + example: "turnOnLights, turnOffLights" + site_id: + description: Site to use to start session, defaults to default (optional) + example: bedroom + text: + description: Text to say + example: My name is snips diff --git a/homeassistant/components/snmp/manifest.json b/homeassistant/components/snmp/manifest.json index a01bee29b33..1dfdc36a0cb 100644 --- a/homeassistant/components/snmp/manifest.json +++ b/homeassistant/components/snmp/manifest.json @@ -3,6 +3,5 @@ "name": "SNMP", "documentation": "https://www.home-assistant.io/integrations/snmp", "requirements": ["pysnmp==4.4.12"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sochain/manifest.json b/homeassistant/components/sochain/manifest.json index 1cc3a76c3be..db89dfc219e 100644 --- a/homeassistant/components/sochain/manifest.json +++ b/homeassistant/components/sochain/manifest.json @@ -3,6 +3,5 @@ "name": "SoChain", "documentation": "https://www.home-assistant.io/integrations/sochain", "requirements": ["python-sochain-api==0.0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/socialblade/manifest.json b/homeassistant/components/socialblade/manifest.json index 540febe7f2e..d73e7686947 100644 --- a/homeassistant/components/socialblade/manifest.json +++ b/homeassistant/components/socialblade/manifest.json @@ -3,6 +3,5 @@ "name": "Social Blade", "documentation": "https://www.home-assistant.io/integrations/socialblade", "requirements": ["socialbladeclient==0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/solaredge/.translations/bg.json b/homeassistant/components/solaredge/.translations/bg.json deleted file mode 100644 index e4223e373fd..00000000000 --- a/homeassistant/components/solaredge/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "\u0422\u043e\u0432\u0430 site_id \u0432\u0435\u0447\u0435 \u0435 \u0437\u0430\u0434\u0430\u0434\u0435\u043d\u043e" - }, - "error": { - "site_exists": "\u0422\u043e\u0432\u0430 site_id \u0432\u0435\u0447\u0435 \u0435 \u0437\u0430\u0434\u0430\u0434\u0435\u043d\u043e" - }, - "step": { - "user": { - "data": { - "api_key": "API \u043a\u043b\u044e\u0447\u0430 \u0437\u0430 \u0442\u043e\u0437\u0438 \u0441\u0430\u0439\u0442", - "name": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0442\u0430\u0437\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f", - "site_id": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440\u044a\u0442 site-id \u043d\u0430 SolarEdge" - }, - "title": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (API) \u0437\u0430 \u0442\u0430\u0437\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/ca.json b/homeassistant/components/solaredge/.translations/ca.json deleted file mode 100644 index fd3707af3dd..00000000000 --- a/homeassistant/components/solaredge/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Aquest site_id ja est\u00e0 configurat" - }, - "error": { - "site_exists": "Aquest site_id ja est\u00e0 configurat" - }, - "step": { - "user": { - "data": { - "api_key": "Clau API d\u2019aquest lloc", - "name": "Nom d\u2019aquesta instal\u00b7laci\u00f3", - "site_id": "SolarEdge site_id" - }, - "title": "Configuraci\u00f3 dels par\u00e0metres de l'API per aquesta instal\u00b7laci\u00f3" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/da.json b/homeassistant/components/solaredge/.translations/da.json deleted file mode 100644 index 7ed64f51083..00000000000 --- a/homeassistant/components/solaredge/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Dette site_id er allerede konfigureret" - }, - "error": { - "site_exists": "Dette site_id er allerede konfigureret" - }, - "step": { - "user": { - "data": { - "api_key": "API-n\u00f8glen til dette websted", - "name": "Navnet p\u00e5 denne installation", - "site_id": "SolarEdge site-id" - }, - "title": "Definer API-parametre til denne installation" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/de.json b/homeassistant/components/solaredge/.translations/de.json deleted file mode 100644 index cbe913e131c..00000000000 --- a/homeassistant/components/solaredge/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Diese site_id ist bereits konfiguriert" - }, - "error": { - "site_exists": "Diese site_id ist bereits konfiguriert" - }, - "step": { - "user": { - "data": { - "api_key": "Der API-Schl\u00fcssel f\u00fcr diese Site", - "name": "Der Name dieser Installation", - "site_id": "Die SolarEdge-Site-ID" - }, - "title": "Definiere die API-Parameter f\u00fcr diese Installation" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/en.json b/homeassistant/components/solaredge/.translations/en.json deleted file mode 100644 index 7b06c110397..00000000000 --- a/homeassistant/components/solaredge/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "This site_id is already configured" - }, - "error": { - "site_exists": "This site_id is already configured" - }, - "step": { - "user": { - "data": { - "api_key": "The API key for this site", - "name": "The name of this installation", - "site_id": "The SolarEdge site-id" - }, - "title": "Define the API parameters for this installation" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/es.json b/homeassistant/components/solaredge/.translations/es.json deleted file mode 100644 index 8708729bf4a..00000000000 --- a/homeassistant/components/solaredge/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Este site_id ya est\u00e1 configurado" - }, - "error": { - "site_exists": "Este site_id ya est\u00e1 configurado" - }, - "step": { - "user": { - "data": { - "api_key": "La clave de la API para este sitio", - "name": "El nombre de esta instalaci\u00f3n", - "site_id": "La identificaci\u00f3n del sitio de SolarEdge" - }, - "title": "Definir los par\u00e1metros de la API para esta instalaci\u00f3n" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/fr.json b/homeassistant/components/solaredge/.translations/fr.json deleted file mode 100644 index 201e3ff49c6..00000000000 --- a/homeassistant/components/solaredge/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Ce site est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "site_exists": "Ce site est d\u00e9j\u00e0 configur\u00e9" - }, - "step": { - "user": { - "data": { - "api_key": "La cl\u00e9 API pour ce site", - "name": "Le nom de cette installation", - "site_id": "L'identifiant de site SolarEdge" - }, - "title": "D\u00e9finir les param\u00e8tres de l'API pour cette installation" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/hu.json b/homeassistant/components/solaredge/.translations/hu.json deleted file mode 100644 index ae8f51983ea..00000000000 --- a/homeassistant/components/solaredge/.translations/hu.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "name": "Ennek az install\u00e1ci\u00f3nak a neve" - }, - "title": "Az API param\u00e9terek megad\u00e1sa ehhez a telep\u00edt\u00e9shez" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/it.json b/homeassistant/components/solaredge/.translations/it.json deleted file mode 100644 index 6523f393628..00000000000 --- a/homeassistant/components/solaredge/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Questo site_id \u00e8 gi\u00e0 configurato" - }, - "error": { - "site_exists": "Questo site_id \u00e8 gi\u00e0 configurato" - }, - "step": { - "user": { - "data": { - "api_key": "La chiave API per questo sito", - "name": "Il nome di questa installazione", - "site_id": "Il sito-id di SolarEdge" - }, - "title": "Definire i parametri API per questa installazione" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/ko.json b/homeassistant/components/solaredge/.translations/ko.json deleted file mode 100644 index 3d4b3448252..00000000000 --- a/homeassistant/components/solaredge/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "\uc774 site_id \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "site_exists": "\uc774 site_id \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "api_key": "\uc774 \uc0ac\uc774\ud2b8\uc758 API \ud0a4", - "name": "\uc774 \uc124\uce58\uc758 \uc774\ub984", - "site_id": "SolarEdge site-id" - }, - "title": "\uc774 \uc124\uce58\uc5d0 \ub300\ud55c API \ub9e4\uac1c\ubcc0\uc218\ub97c \uc815\uc758\ud574\uc8fc\uc138\uc694" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/lb.json b/homeassistant/components/solaredge/.translations/lb.json deleted file mode 100644 index afc558ca80c..00000000000 --- a/homeassistant/components/solaredge/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "D\u00ebs site_id ass scho konfigur\u00e9iert" - }, - "error": { - "site_exists": "D\u00ebs site_id ass scho konfigur\u00e9iert" - }, - "step": { - "user": { - "data": { - "api_key": "API Schl\u00ebssel fir d\u00ebsen Site", - "name": "Numm vun d\u00ebser Installatioun", - "site_id": "SolarEdge site-ID" - }, - "title": "API Parameter fir d\u00ebs Installatioun d\u00e9fin\u00e9ieren" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/nl.json b/homeassistant/components/solaredge/.translations/nl.json deleted file mode 100644 index 3cc52b43a63..00000000000 --- a/homeassistant/components/solaredge/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Deze site_id is al geconfigureerd" - }, - "error": { - "site_exists": "Deze site_id is al geconfigureerd" - }, - "step": { - "user": { - "data": { - "api_key": "De API-sleutel voor deze site", - "name": "De naam van deze installatie", - "site_id": "De SolarEdge site-id" - }, - "title": "Definieer de API-parameters voor deze installatie" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/no.json b/homeassistant/components/solaredge/.translations/no.json deleted file mode 100644 index 4dd4177dd15..00000000000 --- a/homeassistant/components/solaredge/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Denne site_id er allerede konfigurert" - }, - "error": { - "site_exists": "Denne site_id er allerede konfigurert" - }, - "step": { - "user": { - "data": { - "api_key": "API-n\u00f8kkelen for dette nettstedet", - "name": "Navnet p\u00e5 denne installasjonen", - "site_id": "SolarEdge nettsted-id" - }, - "title": "Definer API-parametrene for denne installasjonen" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/pl.json b/homeassistant/components/solaredge/.translations/pl.json deleted file mode 100644 index 5e80c1563f4..00000000000 --- a/homeassistant/components/solaredge/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "To site_id jest ju\u017c skonfigurowane." - }, - "error": { - "site_exists": "To site_id jest ju\u017c skonfigurowane." - }, - "step": { - "user": { - "data": { - "api_key": "Klucz API dla tej strony", - "name": "Nazwa tej instalacji", - "site_id": "SolarEdge site-id" - }, - "title": "Zdefiniuj parametry API dla tej instalacji" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/ru.json b/homeassistant/components/solaredge/.translations/ru.json deleted file mode 100644 index e6e7094648d..00000000000 --- a/homeassistant/components/solaredge/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "\u042d\u0442\u043e\u0442 site_id \u0443\u0436\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d." - }, - "error": { - "site_exists": "\u042d\u0442\u043e\u0442 site_id \u0443\u0436\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d." - }, - "step": { - "user": { - "data": { - "api_key": "\u041a\u043b\u044e\u0447 API", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "site_id": "site-id" - }, - "title": "SolarEdge" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/sl.json b/homeassistant/components/solaredge/.translations/sl.json deleted file mode 100644 index ebfefe40b0e..00000000000 --- a/homeassistant/components/solaredge/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Ta site_id je \u017ee nastavljen" - }, - "error": { - "site_exists": "Ta site_id je \u017ee nastavljen" - }, - "step": { - "user": { - "data": { - "api_key": "API klju\u010d za to stran", - "name": "Ime te namestitve", - "site_id": "SolarEdge site-ID" - }, - "title": "Dolo\u010dite parametre API za to namestitev" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/sv.json b/homeassistant/components/solaredge/.translations/sv.json deleted file mode 100644 index 25bb0f325a1..00000000000 --- a/homeassistant/components/solaredge/.translations/sv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "Denna site_id \u00e4r redan konfigurerad" - }, - "error": { - "site_exists": "Denna site_id \u00e4r redan konfigurerad" - }, - "step": { - "user": { - "data": { - "api_key": "API-nyckeln f\u00f6r den h\u00e4r webbplatsen", - "name": "Namnet p\u00e5 den h\u00e4r installationen", - "site_id": "SolarEdge webbplats-id" - }, - "title": "Definiera API-parametrarna f\u00f6r den h\u00e4r installationen" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/.translations/zh-Hant.json b/homeassistant/components/solaredge/.translations/zh-Hant.json deleted file mode 100644 index 698c28d99bf..00000000000 --- a/homeassistant/components/solaredge/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "site_exists": "site_id \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "site_exists": "site_id \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "step": { - "user": { - "data": { - "api_key": "API \u91d1\u9470", - "name": "\u5b89\u88dd\u540d\u7a31", - "site_id": "SolarEdge site-id" - }, - "title": "\u8a2d\u5b9a API \u53c3\u6578" - } - }, - "title": "SolarEdge" - } -} \ No newline at end of file diff --git a/homeassistant/components/solaredge/config_flow.py b/homeassistant/components/solaredge/config_flow.py index 62bf99ab383..8a7f2af3a99 100644 --- a/homeassistant/components/solaredge/config_flow.py +++ b/homeassistant/components/solaredge/config_flow.py @@ -14,10 +14,10 @@ from .const import CONF_SITE_ID, DEFAULT_NAME, DOMAIN @callback def solaredge_entries(hass: HomeAssistant): """Return the site_ids for the domain.""" - return set( + return { (entry.data[CONF_SITE_ID]) for entry in hass.config_entries.async_entries(DOMAIN) - ) + } class SolarEdgeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/solaredge/manifest.json b/homeassistant/components/solaredge/manifest.json index f3c10e98dcf..59b8cba7446 100644 --- a/homeassistant/components/solaredge/manifest.json +++ b/homeassistant/components/solaredge/manifest.json @@ -4,6 +4,5 @@ "documentation": "https://www.home-assistant.io/integrations/solaredge", "requirements": ["solaredge==0.0.2", "stringcase==1.2.0"], "config_flow": true, - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/solaredge/strings.json b/homeassistant/components/solaredge/strings.json index 3265e3bb1b0..03b14c51a18 100644 --- a/homeassistant/components/solaredge/strings.json +++ b/homeassistant/components/solaredge/strings.json @@ -1,21 +1,16 @@ { - "config": { - "title": "SolarEdge", - "step": { - "user": { - "title": "Define the API parameters for this installation", - "data": { - "name": "The name of this installation", - "site_id": "The SolarEdge site-id", - "api_key": "The API key for this site" - } - } - }, - "error": { - "site_exists": "This site_id is already configured" - }, - "abort": { - "site_exists": "This site_id is already configured" + "config": { + "step": { + "user": { + "title": "Define the API parameters for this installation", + "data": { + "name": "The name of this installation", + "site_id": "The SolarEdge site-id", + "api_key": "The API key for this site" } - } + } + }, + "error": { "site_exists": "This site_id is already configured" }, + "abort": { "site_exists": "This site_id is already configured" } + } } diff --git a/homeassistant/components/solaredge/translations/bg.json b/homeassistant/components/solaredge/translations/bg.json new file mode 100644 index 00000000000..72f1ad2a4c7 --- /dev/null +++ b/homeassistant/components/solaredge/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "\u0422\u043e\u0432\u0430 site_id \u0432\u0435\u0447\u0435 \u0435 \u0437\u0430\u0434\u0430\u0434\u0435\u043d\u043e" + }, + "error": { + "site_exists": "\u0422\u043e\u0432\u0430 site_id \u0432\u0435\u0447\u0435 \u0435 \u0437\u0430\u0434\u0430\u0434\u0435\u043d\u043e" + }, + "step": { + "user": { + "data": { + "api_key": "API \u043a\u043b\u044e\u0447\u0430 \u0437\u0430 \u0442\u043e\u0437\u0438 \u0441\u0430\u0439\u0442", + "name": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0442\u0430\u0437\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f", + "site_id": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u044a\u0440\u044a\u0442 site-id \u043d\u0430 SolarEdge" + }, + "title": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (API) \u0437\u0430 \u0442\u0430\u0437\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u0430\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/ca.json b/homeassistant/components/solaredge/translations/ca.json new file mode 100644 index 00000000000..56e1633e3a1 --- /dev/null +++ b/homeassistant/components/solaredge/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Aquest site_id ja est\u00e0 configurat" + }, + "error": { + "site_exists": "Aquest site_id ja est\u00e0 configurat" + }, + "step": { + "user": { + "data": { + "api_key": "Clau API d\u2019aquest lloc", + "name": "Nom d\u2019aquesta instal\u00b7laci\u00f3", + "site_id": "SolarEdge site_id" + }, + "title": "Configuraci\u00f3 dels par\u00e0metres de l'API per aquesta instal\u00b7laci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/da.json b/homeassistant/components/solaredge/translations/da.json new file mode 100644 index 00000000000..ed452d2c9a8 --- /dev/null +++ b/homeassistant/components/solaredge/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Dette site_id er allerede konfigureret" + }, + "error": { + "site_exists": "Dette site_id er allerede konfigureret" + }, + "step": { + "user": { + "data": { + "api_key": "API-n\u00f8glen til dette websted", + "name": "Navnet p\u00e5 denne installation", + "site_id": "SolarEdge site-id" + }, + "title": "Definer API-parametre til denne installation" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/de.json b/homeassistant/components/solaredge/translations/de.json new file mode 100644 index 00000000000..236ff724a06 --- /dev/null +++ b/homeassistant/components/solaredge/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Diese site_id ist bereits konfiguriert" + }, + "error": { + "site_exists": "Diese site_id ist bereits konfiguriert" + }, + "step": { + "user": { + "data": { + "api_key": "Der API-Schl\u00fcssel f\u00fcr diese Site", + "name": "Der Name dieser Installation", + "site_id": "Die SolarEdge-Site-ID" + }, + "title": "Definiere die API-Parameter f\u00fcr diese Installation" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/en.json b/homeassistant/components/solaredge/translations/en.json new file mode 100644 index 00000000000..75ce6f53612 --- /dev/null +++ b/homeassistant/components/solaredge/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "This site_id is already configured" + }, + "error": { + "site_exists": "This site_id is already configured" + }, + "step": { + "user": { + "data": { + "api_key": "The API key for this site", + "name": "The name of this installation", + "site_id": "The SolarEdge site-id" + }, + "title": "Define the API parameters for this installation" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/es.json b/homeassistant/components/solaredge/translations/es.json new file mode 100644 index 00000000000..f3a97d29f50 --- /dev/null +++ b/homeassistant/components/solaredge/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Este site_id ya est\u00e1 configurado" + }, + "error": { + "site_exists": "Este site_id ya est\u00e1 configurado" + }, + "step": { + "user": { + "data": { + "api_key": "La clave de la API para este sitio", + "name": "El nombre de esta instalaci\u00f3n", + "site_id": "La identificaci\u00f3n del sitio de SolarEdge" + }, + "title": "Definir los par\u00e1metros de la API para esta instalaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/fr.json b/homeassistant/components/solaredge/translations/fr.json new file mode 100644 index 00000000000..b03a29ad2e1 --- /dev/null +++ b/homeassistant/components/solaredge/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Ce site est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "site_exists": "Ce site est d\u00e9j\u00e0 configur\u00e9" + }, + "step": { + "user": { + "data": { + "api_key": "La cl\u00e9 API pour ce site", + "name": "Le nom de cette installation", + "site_id": "L'identifiant de site SolarEdge" + }, + "title": "D\u00e9finir les param\u00e8tres de l'API pour cette installation" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/hu.json b/homeassistant/components/solaredge/translations/hu.json new file mode 100644 index 00000000000..ed182671709 --- /dev/null +++ b/homeassistant/components/solaredge/translations/hu.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Ennek az install\u00e1ci\u00f3nak a neve" + }, + "title": "Az API param\u00e9terek megad\u00e1sa ehhez a telep\u00edt\u00e9shez" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/it.json b/homeassistant/components/solaredge/translations/it.json new file mode 100644 index 00000000000..eeac06cee2d --- /dev/null +++ b/homeassistant/components/solaredge/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Questo site_id \u00e8 gi\u00e0 configurato" + }, + "error": { + "site_exists": "Questo site_id \u00e8 gi\u00e0 configurato" + }, + "step": { + "user": { + "data": { + "api_key": "La chiave API per questo sito", + "name": "Il nome di questa installazione", + "site_id": "Il sito-id di SolarEdge" + }, + "title": "Definire i parametri API per questa installazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/ko.json b/homeassistant/components/solaredge/translations/ko.json new file mode 100644 index 00000000000..be49825c8fb --- /dev/null +++ b/homeassistant/components/solaredge/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "\uc774 site_id \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "site_exists": "\uc774 site_id \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "api_key": "\uc774 \uc0ac\uc774\ud2b8\uc758 API \ud0a4", + "name": "\uc774 \uc124\uce58\uc758 \uc774\ub984", + "site_id": "SolarEdge site-id" + }, + "title": "\uc774 \uc124\uce58\uc5d0 \ub300\ud55c API \ub9e4\uac1c\ubcc0\uc218\ub97c \uc815\uc758\ud574\uc8fc\uc138\uc694" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/lb.json b/homeassistant/components/solaredge/translations/lb.json new file mode 100644 index 00000000000..eec29815f64 --- /dev/null +++ b/homeassistant/components/solaredge/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "D\u00ebs site_id ass scho konfigur\u00e9iert" + }, + "error": { + "site_exists": "D\u00ebs site_id ass scho konfigur\u00e9iert" + }, + "step": { + "user": { + "data": { + "api_key": "API Schl\u00ebssel fir d\u00ebsen Site", + "name": "Numm vun d\u00ebser Installatioun", + "site_id": "SolarEdge site-ID" + }, + "title": "API Parameter fir d\u00ebs Installatioun d\u00e9fin\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/nl.json b/homeassistant/components/solaredge/translations/nl.json new file mode 100644 index 00000000000..4b468218410 --- /dev/null +++ b/homeassistant/components/solaredge/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Deze site_id is al geconfigureerd" + }, + "error": { + "site_exists": "Deze site_id is al geconfigureerd" + }, + "step": { + "user": { + "data": { + "api_key": "De API-sleutel voor deze site", + "name": "De naam van deze installatie", + "site_id": "De SolarEdge site-id" + }, + "title": "Definieer de API-parameters voor deze installatie" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/no.json b/homeassistant/components/solaredge/translations/no.json new file mode 100644 index 00000000000..f2c380ca30d --- /dev/null +++ b/homeassistant/components/solaredge/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Denne site_id er allerede konfigurert" + }, + "error": { + "site_exists": "Denne site_id er allerede konfigurert" + }, + "step": { + "user": { + "data": { + "api_key": "API-n\u00f8kkelen for dette nettstedet", + "name": "Navnet p\u00e5 denne installasjonen", + "site_id": "SolarEdge nettsted-id" + }, + "title": "Definer API-parametrene for denne installasjonen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/pl.json b/homeassistant/components/solaredge/translations/pl.json new file mode 100644 index 00000000000..afef3401cad --- /dev/null +++ b/homeassistant/components/solaredge/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "To site_id jest ju\u017c skonfigurowane." + }, + "error": { + "site_exists": "To site_id jest ju\u017c skonfigurowane." + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API dla tej strony", + "name": "Nazwa tej instalacji", + "site_id": "SolarEdge site-id" + }, + "title": "Zdefiniuj parametry API dla tej instalacji" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/ru.json b/homeassistant/components/solaredge/translations/ru.json new file mode 100644 index 00000000000..1dadfbf94ee --- /dev/null +++ b/homeassistant/components/solaredge/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "\u042d\u0442\u043e\u0442 site_id \u0443\u0436\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d." + }, + "error": { + "site_exists": "\u042d\u0442\u043e\u0442 site_id \u0443\u0436\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d." + }, + "step": { + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "site_id": "site-id" + }, + "title": "SolarEdge" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/sl.json b/homeassistant/components/solaredge/translations/sl.json new file mode 100644 index 00000000000..3f6e78fd3b4 --- /dev/null +++ b/homeassistant/components/solaredge/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Ta site_id je \u017ee nastavljen" + }, + "error": { + "site_exists": "Ta site_id je \u017ee nastavljen" + }, + "step": { + "user": { + "data": { + "api_key": "API klju\u010d za to stran", + "name": "Ime te namestitve", + "site_id": "SolarEdge site-ID" + }, + "title": "Dolo\u010dite parametre API za to namestitev" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/sv.json b/homeassistant/components/solaredge/translations/sv.json new file mode 100644 index 00000000000..01c52eb7fb4 --- /dev/null +++ b/homeassistant/components/solaredge/translations/sv.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "Denna site_id \u00e4r redan konfigurerad" + }, + "error": { + "site_exists": "Denna site_id \u00e4r redan konfigurerad" + }, + "step": { + "user": { + "data": { + "api_key": "API-nyckeln f\u00f6r den h\u00e4r webbplatsen", + "name": "Namnet p\u00e5 den h\u00e4r installationen", + "site_id": "SolarEdge webbplats-id" + }, + "title": "Definiera API-parametrarna f\u00f6r den h\u00e4r installationen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge/translations/zh-Hant.json b/homeassistant/components/solaredge/translations/zh-Hant.json new file mode 100644 index 00000000000..a63485cf300 --- /dev/null +++ b/homeassistant/components/solaredge/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "site_exists": "site_id \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "site_exists": "site_id \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "step": { + "user": { + "data": { + "api_key": "API \u91d1\u9470", + "name": "\u5b89\u88dd\u540d\u7a31", + "site_id": "SolarEdge site-id" + }, + "title": "\u8a2d\u5b9a API \u53c3\u6578" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solaredge_local/manifest.json b/homeassistant/components/solaredge_local/manifest.json index 02fe4dad398..8f8b80c2c65 100644 --- a/homeassistant/components/solaredge_local/manifest.json +++ b/homeassistant/components/solaredge_local/manifest.json @@ -3,6 +3,5 @@ "name": "SolarEdge Local", "documentation": "https://www.home-assistant.io/integrations/solaredge_local", "requirements": ["solaredge-local==0.2.0"], - "dependencies": [], "codeowners": ["@drobtravels", "@scheric"] } diff --git a/homeassistant/components/solaredge_local/sensor.py b/homeassistant/components/solaredge_local/sensor.py index ecf9dfde8b1..94aa06c2647 100644 --- a/homeassistant/components/solaredge_local/sensor.py +++ b/homeassistant/components/solaredge_local/sensor.py @@ -13,9 +13,11 @@ from homeassistant.const import ( CONF_IP_ADDRESS, CONF_NAME, ENERGY_WATT_HOUR, + FREQUENCY_HERTZ, POWER_WATT, TEMP_CELSIUS, TEMP_FAHRENHEIT, + VOLT, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -40,12 +42,12 @@ INVERTER_MODES = ( # Supported sensor types: # Key: ['json_key', 'name', unit, icon, attribute name] SENSOR_TYPES = { - "current_AC_voltage": ["gridvoltage", "Grid Voltage", "V", "mdi:current-ac", None], - "current_DC_voltage": ["dcvoltage", "DC Voltage", "V", "mdi:current-dc", None], + "current_AC_voltage": ["gridvoltage", "Grid Voltage", VOLT, "mdi:current-ac", None], + "current_DC_voltage": ["dcvoltage", "DC Voltage", VOLT, "mdi:current-dc", None], "current_frequency": [ "gridfrequency", "Grid Frequency", - "Hz", + FREQUENCY_HERTZ, "mdi:current-ac", None, ], @@ -122,7 +124,7 @@ SENSOR_TYPES = { "optimizer_voltage": [ "optimizervoltage", "Average Optimizer Voltage", - "V", + VOLT, "mdi:solar-panel", None, ], diff --git a/homeassistant/components/solarlog/.translations/bg.json b/homeassistant/components/solarlog/.translations/bg.json deleted file mode 100644 index 6dabc169f12..00000000000 --- a/homeassistant/components/solarlog/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e" - }, - "error": { - "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", - "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435, \u043c\u043e\u043b\u044f, \u043f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430" - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441\u0430 \u0438\u043b\u0438 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 \u0412\u0430\u0448\u0435\u0442\u043e Solar-Log \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", - "name": "\u041f\u0440\u0435\u0444\u0438\u043a\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0437\u0430 \u0432\u0430\u0448\u0438\u0442\u0435 Solar-Log \u0441\u0435\u043d\u0437\u043e\u0440\u0438" - }, - "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441\u0438 \u0441\u044a\u0441 Solar-log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/ca.json b/homeassistant/components/solarlog/.translations/ca.json deleted file mode 100644 index 6a041c7ea4f..00000000000 --- a/homeassistant/components/solarlog/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositiu ja est\u00e0 configurat" - }, - "error": { - "already_configured": "El dispositiu ja est\u00e0 configurat", - "cannot_connect": "No s'ha pogut connectar, verifica l'adre\u00e7a de l'amfitri\u00f3" - }, - "step": { - "user": { - "data": { - "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP del dispositiu Solar-Log", - "name": "Prefix utilitzat pels sensors de Solar-Log" - }, - "title": "Configuraci\u00f3 de la connexi\u00f3 amb Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/cs.json b/homeassistant/components/solarlog/.translations/cs.json deleted file mode 100644 index f2294823ebb..00000000000 --- a/homeassistant/components/solarlog/.translations/cs.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Za\u0159\u00edzen\u00ed je ji\u017e nakonfigurov\u00e1no" - }, - "error": { - "already_configured": "Za\u0159\u00edzen\u00ed je ji\u017e nakonfigurov\u00e1no", - "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit, ov\u011b\u0159te pros\u00edm adresu hostitele" - }, - "step": { - "user": { - "data": { - "host": "N\u00e1zev hostitele nebo IP adresa va\u0161eho za\u0159\u00edzen\u00ed Solar-Log", - "name": "Prefix, kter\u00fd se m\u00e1 pou\u017e\u00edt pro va\u0161e senzory Solar-Log" - }, - "title": "Definujte sv\u00e9 p\u0159ipojen\u00ed Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/da.json b/homeassistant/components/solarlog/.translations/da.json deleted file mode 100644 index a344832c61c..00000000000 --- a/homeassistant/components/solarlog/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheden er allerede konfigureret" - }, - "error": { - "already_configured": "Enheden er allerede konfigureret", - "cannot_connect": "Kunne ikke oprette forbindelse, verificer v\u00e6rtsadressen" - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rtsnavnet eller ip-adressen p\u00e5 din Solar-Log-enhed", - "name": "Pr\u00e6fikset, der skal bruges til dine Solar-Log sensorer" - }, - "title": "Angiv dit Solar-Log forbindelse" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/de.json b/homeassistant/components/solarlog/.translations/de.json deleted file mode 100644 index 3e71154b383..00000000000 --- a/homeassistant/components/solarlog/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert" - }, - "error": { - "already_configured": "Ger\u00e4t ist bereits konfiguriert", - "cannot_connect": "Verbindung fehlgeschlagen. \u00dcberpr\u00fcfe die Host-Adresse" - }, - "step": { - "user": { - "data": { - "host": "Der Hostname oder die IP-Adresse Ihres Solar-Log-Ger\u00e4ts", - "name": "Das Pr\u00e4fix, das f\u00fcr Ihre Solar-Log-Sensoren verwendet werden soll" - }, - "title": "Definiere deine Solar-Log-Verbindung" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/en.json b/homeassistant/components/solarlog/.translations/en.json deleted file mode 100644 index f1396045819..00000000000 --- a/homeassistant/components/solarlog/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Device is already configured" - }, - "error": { - "already_configured": "Device is already configured", - "cannot_connect": "Failed to connect, please verify host address" - }, - "step": { - "user": { - "data": { - "host": "The hostname or ip-address of your Solar-Log device", - "name": "The prefix to be used for your Solar-Log sensors" - }, - "title": "Define your Solar-Log connection" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/es.json b/homeassistant/components/solarlog/.translations/es.json deleted file mode 100644 index 2e6778ffbf3..00000000000 --- a/homeassistant/components/solarlog/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El dispositivo ya est\u00e1 configurado" - }, - "error": { - "already_configured": "El dispositivo ya est\u00e1 configurado", - "cannot_connect": "Si no se ha conectado, verifique la direcci\u00f3n del host" - }, - "step": { - "user": { - "data": { - "host": "El nombre del host o la direcci\u00f3n IP de su dispositivo Solar-Log", - "name": "El prefijo que se utilizar\u00e1 para los sensores Solar-Log" - }, - "title": "Defina su conexi\u00f3n Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/fr.json b/homeassistant/components/solarlog/.translations/fr.json deleted file mode 100644 index 0f1b4944ed9..00000000000 --- a/homeassistant/components/solarlog/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", - "cannot_connect": "\u00c9chec de la connexion, veuillez v\u00e9rifier l'adresse de l'h\u00f4te." - }, - "step": { - "user": { - "data": { - "host": "Le nom d'h\u00f4te ou l'adresse IP de votre p\u00e9riph\u00e9rique Solar-Log", - "name": "Le pr\u00e9fixe \u00e0 utiliser pour vos capteurs Solar-Log" - }, - "title": "D\u00e9finissez votre connexion Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/it.json b/homeassistant/components/solarlog/.translations/it.json deleted file mode 100644 index 65c13f052d3..00000000000 --- a/homeassistant/components/solarlog/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" - }, - "error": { - "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", - "cannot_connect": "Impossibile connettersi, verifica l'indirizzo host" - }, - "step": { - "user": { - "data": { - "host": "Il nome host o l'indirizzo IP del dispositivo Solar-Log", - "name": "Il prefisso da utilizzare per i sensori Solar-Log" - }, - "title": "Definire la connessione Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/ko.json b/homeassistant/components/solarlog/.translations/ko.json deleted file mode 100644 index ea337d1e675..00000000000 --- a/homeassistant/components/solarlog/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8 \uc8fc\uc18c\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "data": { - "host": "Solar-Log \uae30\uae30\uc758 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", - "name": "Solar-Log \uc13c\uc11c\uc5d0 \uc0ac\uc6a9\ub420 \uc811\ub450\uc0ac" - }, - "title": "Solar-Log \uc5f0\uacb0 \uc815\uc758" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/lb.json b/homeassistant/components/solarlog/.translations/lb.json deleted file mode 100644 index 8bfaca69d94..00000000000 --- a/homeassistant/components/solarlog/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "already_configured": "Apparat ass scho konfigur\u00e9iert", - "cannot_connect": "Feeler beim verbannen, iwwerpr\u00e9ift w.e.g d'Adresse vum Apparat" - }, - "step": { - "user": { - "data": { - "host": "De Numm oder IP Adresse vun \u00e4rem Solar-Log Apparat", - "name": "Prefix dee fir \u00e4r Solar-Log Sensoren soll benotz ginn" - }, - "title": "D\u00e9fin\u00e9iert \u00e4r Solar-Log Verbindung" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/nl.json b/homeassistant/components/solarlog/.translations/nl.json deleted file mode 100644 index 3965f71e992..00000000000 --- a/homeassistant/components/solarlog/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparaat is al geconfigureerd" - }, - "error": { - "already_configured": "Apparaat is al geconfigureerd", - "cannot_connect": "Verbinding mislukt, controleer het host-adres" - }, - "step": { - "user": { - "data": { - "host": "De hostnaam of het IP-adres van uw Solar-Log apparaat", - "name": "Het voorvoegsel dat moet worden gebruikt voor uw Solar-Log sensoren" - }, - "title": "Definieer uw Solar-Log verbinding" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/nn.json b/homeassistant/components/solarlog/.translations/nn.json deleted file mode 100644 index 3ce86b4e10a..00000000000 --- a/homeassistant/components/solarlog/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/no.json b/homeassistant/components/solarlog/.translations/no.json deleted file mode 100644 index 9fddb46cdcf..00000000000 --- a/homeassistant/components/solarlog/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten er allerede konfigurert" - }, - "error": { - "already_configured": "Enheten er allerede konfigurert", - "cannot_connect": "Kunne ikke koble til, vennligst bekreft vertsadresse" - }, - "step": { - "user": { - "data": { - "host": "Vertsnavnet eller ip-adressen til din Solar-Log-enhet", - "name": "Prefikset som skal brukes til dine Solar-Log sensorer" - }, - "title": "Definer din Solar-Log tilkobling" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/pl.json b/homeassistant/components/solarlog/.translations/pl.json deleted file mode 100644 index fdbf21feb92..00000000000 --- a/homeassistant/components/solarlog/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." - }, - "error": { - "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", - "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, sprawd\u017a adres hosta" - }, - "step": { - "user": { - "data": { - "host": "Nazwa hosta lub adres IP urz\u0105dzenia Solar-Log", - "name": "Prefiks dla sensor\u00f3w Solar-Log" - }, - "title": "Zdefiniuj po\u0142\u0105czenie z Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/ru.json b/homeassistant/components/solarlog/.translations/ru.json deleted file mode 100644 index 3333d5c0d5f..00000000000 --- a/homeassistant/components/solarlog/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430." - }, - "step": { - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", - "name": "\u041f\u0440\u0435\u0444\u0438\u043a\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 Solar-Log" - }, - "title": "Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/sl.json b/homeassistant/components/solarlog/.translations/sl.json deleted file mode 100644 index 152152eacf7..00000000000 --- a/homeassistant/components/solarlog/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Naprava je \u017ee konfigurirana" - }, - "error": { - "already_configured": "Naprava je \u017ee konfigurirana", - "cannot_connect": "Ni mogo\u010de vzpostaviti povezave, preverite naslov gostitelja" - }, - "step": { - "user": { - "data": { - "host": "Ime gostitelja ali ip naslov va\u0161e naprave Solar-Log", - "name": "Predpona, ki jo \u017eelite uporabiti za senzorje Solar-log" - }, - "title": "Dolo\u010dite povezavo Solar-Log" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/sv.json b/homeassistant/components/solarlog/.translations/sv.json deleted file mode 100644 index 981bd9fb167..00000000000 --- a/homeassistant/components/solarlog/.translations/sv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Enheten \u00e4r redan konfigurerad" - }, - "error": { - "already_configured": "Enheten \u00e4r redan konfigurerad", - "cannot_connect": "Det gick inte att ansluta, kontrollera v\u00e4rdadressen" - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rdnamnet eller ip-adressen f\u00f6r din Solar-Log-enhet", - "name": "Prefixet som ska anv\u00e4ndas f\u00f6r dina Solar-Log sensorer" - }, - "title": "Definiera din Solar-Log-anslutning" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/zh-Hant.json b/homeassistant/components/solarlog/.translations/zh-Hant.json deleted file mode 100644 index 19ec431d2ca..00000000000 --- a/homeassistant/components/solarlog/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "already_configured": "\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u78ba\u8a8d\u4e3b\u6a5f\u4f4d\u5740" - }, - "step": { - "user": { - "data": { - "host": "Solar-Log \u8a2d\u5099\u4e4b\u4e3b\u6a5f\u540d\u7a31\u6216 IP \u4f4d\u5740", - "name": "Solar-Log \u50b3\u611f\u5668\u6240\u4f7f\u7528\u5b57\u9996" - }, - "title": "\u5b9a\u7fa9 Solar-Log \u9023\u7dda" - } - }, - "title": "Solar-Log" - } -} \ No newline at end of file diff --git a/homeassistant/components/solarlog/config_flow.py b/homeassistant/components/solarlog/config_flow.py index 111155b27b6..39a752855aa 100644 --- a/homeassistant/components/solarlog/config_flow.py +++ b/homeassistant/components/solarlog/config_flow.py @@ -19,9 +19,9 @@ _LOGGER = logging.getLogger(__name__) @callback def solarlog_entries(hass: HomeAssistant): """Return the hosts already configured.""" - return set( + return { entry.data[CONF_HOST] for entry in hass.config_entries.async_entries(DOMAIN) - ) + } class SolarLogConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/solarlog/const.py b/homeassistant/components/solarlog/const.py index 26176e97e46..07dd101b943 100644 --- a/homeassistant/components/solarlog/const.py +++ b/homeassistant/components/solarlog/const.py @@ -1,7 +1,7 @@ """Constants for the Solar-Log integration.""" from datetime import timedelta -from homeassistant.const import ENERGY_KILO_WATT_HOUR, POWER_WATT, UNIT_PERCENTAGE +from homeassistant.const import ENERGY_KILO_WATT_HOUR, POWER_WATT, UNIT_PERCENTAGE, VOLT DOMAIN = "solarlog" @@ -17,8 +17,8 @@ SENSOR_TYPES = { "time": ["TIME", "last update", None, "mdi:calendar-clock"], "power_ac": ["powerAC", "power AC", POWER_WATT, "mdi:solar-power"], "power_dc": ["powerDC", "power DC", POWER_WATT, "mdi:solar-power"], - "voltage_ac": ["voltageAC", "voltage AC", "V", "mdi:flash"], - "voltage_dc": ["voltageDC", "voltage DC", "V", "mdi:flash"], + "voltage_ac": ["voltageAC", "voltage AC", VOLT, "mdi:flash"], + "voltage_dc": ["voltageDC", "voltage DC", VOLT, "mdi:flash"], "yield_day": ["yieldDAY", "yield day", ENERGY_KILO_WATT_HOUR, "mdi:solar-power"], "yield_yesterday": [ "yieldYESTERDAY", @@ -78,7 +78,12 @@ SENSOR_TYPES = { "mdi:solar-power", ], "capacity": ["CAPACITY", "capacity", UNIT_PERCENTAGE, "mdi:solar-power"], - "efficiency": ["EFFICIENCY", "efficiency", "% W/Wp", "mdi:solar-power"], + "efficiency": [ + "EFFICIENCY", + "efficiency", + f"% {POWER_WATT}/{POWER_WATT}p", + "mdi:solar-power", + ], "power_available": [ "powerAVAILABLE", "power available", diff --git a/homeassistant/components/solarlog/manifest.json b/homeassistant/components/solarlog/manifest.json index b626da456a9..f24f9b9473c 100644 --- a/homeassistant/components/solarlog/manifest.json +++ b/homeassistant/components/solarlog/manifest.json @@ -3,7 +3,6 @@ "name": "Solar-Log", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/solarlog", - "dependencies": [], "codeowners": ["@Ernst79"], "requirements": ["sunwatcher==0.2.1"] } diff --git a/homeassistant/components/solarlog/strings.json b/homeassistant/components/solarlog/strings.json index 5399d5176c9..6d54e5a8be9 100644 --- a/homeassistant/components/solarlog/strings.json +++ b/homeassistant/components/solarlog/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Solar-Log", "step": { "user": { "title": "Define your Solar-Log connection", @@ -14,8 +13,6 @@ "already_configured": "Device is already configured", "cannot_connect": "Failed to connect, please verify host address" }, - "abort": { - "already_configured": "Device is already configured" - } + "abort": { "already_configured": "Device is already configured" } } } diff --git a/homeassistant/components/solarlog/translations/bg.json b/homeassistant/components/solarlog/translations/bg.json new file mode 100644 index 00000000000..bf4d97de505 --- /dev/null +++ b/homeassistant/components/solarlog/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e" + }, + "error": { + "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e", + "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435, \u043c\u043e\u043b\u044f, \u043f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430" + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441\u0430 \u0438\u043b\u0438 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 \u0412\u0430\u0448\u0435\u0442\u043e Solar-Log \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", + "name": "\u041f\u0440\u0435\u0444\u0438\u043a\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0437\u0430 \u0432\u0430\u0448\u0438\u0442\u0435 Solar-Log \u0441\u0435\u043d\u0437\u043e\u0440\u0438" + }, + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0439\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441\u0438 \u0441\u044a\u0441 Solar-log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/ca.json b/homeassistant/components/solarlog/translations/ca.json new file mode 100644 index 00000000000..a159dd1f6e3 --- /dev/null +++ b/homeassistant/components/solarlog/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "already_configured": "El dispositiu ja est\u00e0 configurat", + "cannot_connect": "No s'ha pogut connectar, verifica l'adre\u00e7a de l'amfitri\u00f3" + }, + "step": { + "user": { + "data": { + "host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP del dispositiu Solar-Log", + "name": "Prefix utilitzat pels sensors de Solar-Log" + }, + "title": "Configuraci\u00f3 de la connexi\u00f3 amb Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/cs.json b/homeassistant/components/solarlog/translations/cs.json new file mode 100644 index 00000000000..1c4afe26662 --- /dev/null +++ b/homeassistant/components/solarlog/translations/cs.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Za\u0159\u00edzen\u00ed je ji\u017e nakonfigurov\u00e1no" + }, + "error": { + "already_configured": "Za\u0159\u00edzen\u00ed je ji\u017e nakonfigurov\u00e1no", + "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit, ov\u011b\u0159te pros\u00edm adresu hostitele" + }, + "step": { + "user": { + "data": { + "host": "N\u00e1zev hostitele nebo IP adresa va\u0161eho za\u0159\u00edzen\u00ed Solar-Log", + "name": "Prefix, kter\u00fd se m\u00e1 pou\u017e\u00edt pro va\u0161e senzory Solar-Log" + }, + "title": "Definujte sv\u00e9 p\u0159ipojen\u00ed Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/da.json b/homeassistant/components/solarlog/translations/da.json new file mode 100644 index 00000000000..8d02a79a5ae --- /dev/null +++ b/homeassistant/components/solarlog/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Enheden er allerede konfigureret" + }, + "error": { + "already_configured": "Enheden er allerede konfigureret", + "cannot_connect": "Kunne ikke oprette forbindelse, verificer v\u00e6rtsadressen" + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rtsnavnet eller ip-adressen p\u00e5 din Solar-Log-enhed", + "name": "Pr\u00e6fikset, der skal bruges til dine Solar-Log sensorer" + }, + "title": "Angiv dit Solar-Log forbindelse" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/de.json b/homeassistant/components/solarlog/translations/de.json new file mode 100644 index 00000000000..8b10d00e538 --- /dev/null +++ b/homeassistant/components/solarlog/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert", + "cannot_connect": "Verbindung fehlgeschlagen. \u00dcberpr\u00fcfe die Host-Adresse" + }, + "step": { + "user": { + "data": { + "host": "Der Hostname oder die IP-Adresse Ihres Solar-Log-Ger\u00e4ts", + "name": "Das Pr\u00e4fix, das f\u00fcr Ihre Solar-Log-Sensoren verwendet werden soll" + }, + "title": "Definiere deine Solar-Log-Verbindung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/en.json b/homeassistant/components/solarlog/translations/en.json new file mode 100644 index 00000000000..72c1acf7bd1 --- /dev/null +++ b/homeassistant/components/solarlog/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "already_configured": "Device is already configured", + "cannot_connect": "Failed to connect, please verify host address" + }, + "step": { + "user": { + "data": { + "host": "The hostname or ip-address of your Solar-Log device", + "name": "The prefix to be used for your Solar-Log sensors" + }, + "title": "Define your Solar-Log connection" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/es.json b/homeassistant/components/solarlog/translations/es.json new file mode 100644 index 00000000000..fcf2b0c58bb --- /dev/null +++ b/homeassistant/components/solarlog/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "already_configured": "El dispositivo ya est\u00e1 configurado", + "cannot_connect": "Si no se ha conectado, verifique la direcci\u00f3n del host" + }, + "step": { + "user": { + "data": { + "host": "El nombre del host o la direcci\u00f3n IP de su dispositivo Solar-Log", + "name": "El prefijo que se utilizar\u00e1 para los sensores Solar-Log" + }, + "title": "Defina su conexi\u00f3n Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/fr.json b/homeassistant/components/solarlog/translations/fr.json new file mode 100644 index 00000000000..2de03d82c31 --- /dev/null +++ b/homeassistant/components/solarlog/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9", + "cannot_connect": "\u00c9chec de la connexion, veuillez v\u00e9rifier l'adresse de l'h\u00f4te." + }, + "step": { + "user": { + "data": { + "host": "Le nom d'h\u00f4te ou l'adresse IP de votre p\u00e9riph\u00e9rique Solar-Log", + "name": "Le pr\u00e9fixe \u00e0 utiliser pour vos capteurs Solar-Log" + }, + "title": "D\u00e9finissez votre connexion Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/.translations/hu.json b/homeassistant/components/solarlog/translations/hu.json similarity index 100% rename from homeassistant/components/solarlog/.translations/hu.json rename to homeassistant/components/solarlog/translations/hu.json diff --git a/homeassistant/components/solarlog/translations/it.json b/homeassistant/components/solarlog/translations/it.json new file mode 100644 index 00000000000..046faae52f7 --- /dev/null +++ b/homeassistant/components/solarlog/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato", + "cannot_connect": "Impossibile connettersi, verifica l'indirizzo host" + }, + "step": { + "user": { + "data": { + "host": "Il nome host o l'indirizzo IP del dispositivo Solar-Log", + "name": "Il prefisso da utilizzare per i sensori Solar-Log" + }, + "title": "Definire la connessione Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/ko.json b/homeassistant/components/solarlog/translations/ko.json new file mode 100644 index 00000000000..058f9ac9a9c --- /dev/null +++ b/homeassistant/components/solarlog/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8 \uc8fc\uc18c\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "data": { + "host": "Solar-Log \uae30\uae30\uc758 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", + "name": "Solar-Log \uc13c\uc11c\uc5d0 \uc0ac\uc6a9\ub420 \uc811\ub450\uc0ac" + }, + "title": "Solar-Log \uc5f0\uacb0 \uc815\uc758" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/lb.json b/homeassistant/components/solarlog/translations/lb.json new file mode 100644 index 00000000000..e0008dcb4cd --- /dev/null +++ b/homeassistant/components/solarlog/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "already_configured": "Apparat ass scho konfigur\u00e9iert", + "cannot_connect": "Feeler beim verbannen, iwwerpr\u00e9ift w.e.g d'Adresse vum Apparat" + }, + "step": { + "user": { + "data": { + "host": "De Numm oder IP Adresse vun \u00e4rem Solar-Log Apparat", + "name": "Prefix dee fir \u00e4r Solar-Log Sensoren soll benotz ginn" + }, + "title": "D\u00e9fin\u00e9iert \u00e4r Solar-Log Verbindung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/nl.json b/homeassistant/components/solarlog/translations/nl.json new file mode 100644 index 00000000000..8ccf5e626c7 --- /dev/null +++ b/homeassistant/components/solarlog/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd" + }, + "error": { + "already_configured": "Apparaat is al geconfigureerd", + "cannot_connect": "Verbinding mislukt, controleer het host-adres" + }, + "step": { + "user": { + "data": { + "host": "De hostnaam of het IP-adres van uw Solar-Log apparaat", + "name": "Het voorvoegsel dat moet worden gebruikt voor uw Solar-Log sensoren" + }, + "title": "Definieer uw Solar-Log verbinding" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/nn.json b/homeassistant/components/solarlog/translations/nn.json new file mode 100644 index 00000000000..7ea0915a124 --- /dev/null +++ b/homeassistant/components/solarlog/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Solar-Log" +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/no.json b/homeassistant/components/solarlog/translations/no.json new file mode 100644 index 00000000000..5b7f2e43e3b --- /dev/null +++ b/homeassistant/components/solarlog/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "already_configured": "Enheten er allerede konfigurert", + "cannot_connect": "Kunne ikke koble til, vennligst bekreft vertsadresse" + }, + "step": { + "user": { + "data": { + "host": "Vertsnavnet eller ip-adressen til din Solar-Log-enhet", + "name": "Prefikset som skal brukes til dine Solar-Log sensorer" + }, + "title": "Definer din Solar-Log tilkobling" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/pl.json b/homeassistant/components/solarlog/translations/pl.json new file mode 100644 index 00000000000..a61257b6d16 --- /dev/null +++ b/homeassistant/components/solarlog/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane.", + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, sprawd\u017a adres hosta" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP urz\u0105dzenia Solar-Log", + "name": "Prefiks dla sensor\u00f3w Solar-Log" + }, + "title": "Zdefiniuj po\u0142\u0105czenie z Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/ru.json b/homeassistant/components/solarlog/translations/ru.json new file mode 100644 index 00000000000..ecaaee01aef --- /dev/null +++ b/homeassistant/components/solarlog/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430." + }, + "step": { + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "name": "\u041f\u0440\u0435\u0444\u0438\u043a\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 Solar-Log" + }, + "title": "Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/sl.json b/homeassistant/components/solarlog/translations/sl.json new file mode 100644 index 00000000000..8f2682b3fb1 --- /dev/null +++ b/homeassistant/components/solarlog/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "already_configured": "Naprava je \u017ee konfigurirana", + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave, preverite naslov gostitelja" + }, + "step": { + "user": { + "data": { + "host": "Ime gostitelja ali ip naslov va\u0161e naprave Solar-Log", + "name": "Predpona, ki jo \u017eelite uporabiti za senzorje Solar-log" + }, + "title": "Dolo\u010dite povezavo Solar-Log" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/sv.json b/homeassistant/components/solarlog/translations/sv.json new file mode 100644 index 00000000000..5522840f189 --- /dev/null +++ b/homeassistant/components/solarlog/translations/sv.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten \u00e4r redan konfigurerad" + }, + "error": { + "already_configured": "Enheten \u00e4r redan konfigurerad", + "cannot_connect": "Det gick inte att ansluta, kontrollera v\u00e4rdadressen" + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rdnamnet eller ip-adressen f\u00f6r din Solar-Log-enhet", + "name": "Prefixet som ska anv\u00e4ndas f\u00f6r dina Solar-Log sensorer" + }, + "title": "Definiera din Solar-Log-anslutning" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solarlog/translations/zh-Hant.json b/homeassistant/components/solarlog/translations/zh-Hant.json new file mode 100644 index 00000000000..435b7564bcc --- /dev/null +++ b/homeassistant/components/solarlog/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u78ba\u8a8d\u4e3b\u6a5f\u4f4d\u5740" + }, + "step": { + "user": { + "data": { + "host": "Solar-Log \u8a2d\u5099\u4e4b\u4e3b\u6a5f\u540d\u7a31\u6216 IP \u4f4d\u5740", + "name": "Solar-Log \u50b3\u611f\u5668\u6240\u4f7f\u7528\u5b57\u9996" + }, + "title": "\u5b9a\u7fa9 Solar-Log \u9023\u7dda" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/solax/manifest.json b/homeassistant/components/solax/manifest.json index 6c0e9c3b01d..296c1b73ba9 100644 --- a/homeassistant/components/solax/manifest.json +++ b/homeassistant/components/solax/manifest.json @@ -3,6 +3,5 @@ "name": "SolaX Power", "documentation": "https://www.home-assistant.io/integrations/solax", "requirements": ["solax==0.2.2"], - "dependencies": [], "codeowners": ["@squishykid"] } diff --git a/homeassistant/components/soma/.translations/bg.json b/homeassistant/components/soma/.translations/bg.json deleted file mode 100644 index 0b7dd3b689f..00000000000 --- a/homeassistant/components/soma/.translations/bg.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Soma \u0430\u043a\u0430\u0443\u043d\u0442.", - "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", - "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044a\u0442 Soma \u043d\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d. \u041c\u043e\u043b\u044f, \u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430." - }, - "create_entry": { - "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441\u044a\u0441 Soma." - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "port": "\u041f\u043e\u0440\u0442" - }, - "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0438\u044f SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/ca.json b/homeassistant/components/soma/.translations/ca.json deleted file mode 100644 index 00bc3eef39c..00000000000 --- a/homeassistant/components/soma/.translations/ca.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Soma.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "connection_error": "No s'ha pogut connectar amb SOMA Connect.", - "missing_configuration": "El component Soma no est\u00e0 configurat. Mira'n la documentaci\u00f3.", - "result_error": "SOMA Connect ha respost amb un estat d'error." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Soma." - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "port": "Port" - }, - "description": "Introdueix la informaci\u00f3 de connexi\u00f3 de SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/da.json b/homeassistant/components/soma/.translations/da.json deleted file mode 100644 index 49bf83148a2..00000000000 --- a/homeassistant/components/soma/.translations/da.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en Soma-konto.", - "authorize_url_timeout": "Timeout ved generering af autoriseret url.", - "connection_error": "Kunne ikke oprette forbindelse til SOMA Connect.", - "missing_configuration": "Soma-komponenten er ikke konfigureret. F\u00f8lg venligst dokumentationen.", - "result_error": "SOMA Connect svarede med fejlstatus." - }, - "create_entry": { - "default": "Godkendt med Soma." - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "port": "Port" - }, - "description": "Indtast forbindelsesindstillinger for din SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/de.json b/homeassistant/components/soma/.translations/de.json deleted file mode 100644 index 384e7ec4207..00000000000 --- a/homeassistant/components/soma/.translations/de.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kannst nur ein einziges Soma-Konto konfigurieren.", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", - "connection_error": "Verbindung zu SOMA Connect fehlgeschlagen.", - "missing_configuration": "Die Soma-Komponente ist nicht konfiguriert. Bitte folgen Sie der Dokumentation.", - "result_error": "SOMA Connect hat mit einem Fehlerstatus geantwortet." - }, - "create_entry": { - "default": "Erfolgreich bei Soma authentifiziert." - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Bitte gib die Verbindungsinformationen f\u00fcr SOMA Connect ein.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/en.json b/homeassistant/components/soma/.translations/en.json deleted file mode 100644 index 46bfd441fc4..00000000000 --- a/homeassistant/components/soma/.translations/en.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure one Soma account.", - "authorize_url_timeout": "Timeout generating authorize url.", - "connection_error": "Failed to connect to SOMA Connect.", - "missing_configuration": "The Soma component is not configured. Please follow the documentation.", - "result_error": "SOMA Connect responded with error status." - }, - "create_entry": { - "default": "Successfully authenticated with Soma." - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Please enter connection settings of your SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/es.json b/homeassistant/components/soma/.translations/es.json deleted file mode 100644 index 6df113b82c9..00000000000 --- a/homeassistant/components/soma/.translations/es.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3lo puede configurar una cuenta de Soma.", - "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", - "connection_error": "No se ha podido conectar a SOMA Connect.", - "missing_configuration": "El componente Soma no est\u00e1 configurado. Por favor, leer la documentaci\u00f3n.", - "result_error": "SOMA Connect respondi\u00f3 con un error." - }, - "create_entry": { - "default": "Autenticado con \u00e9xito con Soma." - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Puerto" - }, - "description": "Por favor, introduzca los ajustes de conexi\u00f3n de SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/fr.json b/homeassistant/components/soma/.translations/fr.json deleted file mode 100644 index 0889cdea2ec..00000000000 --- a/homeassistant/components/soma/.translations/fr.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Soma.", - "authorize_url_timeout": "D\u00e9lai d'attente g\u00e9n\u00e9rant l'autorisation de l'URL.", - "connection_error": "Impossible de se connecter \u00e0 SOMA Connect.", - "missing_configuration": "Le composant Soma n'est pas configur\u00e9. Veuillez suivre la documentation.", - "result_error": "SOMA Connect a r\u00e9pondu avec l'\u00e9tat d'erreur." - }, - "create_entry": { - "default": "Authentifi\u00e9 avec succ\u00e8s avec Soma." - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "port": "Port" - }, - "description": "Veuillez entrer les param\u00e8tres de connexion de votre SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/hu.json b/homeassistant/components/soma/.translations/hu.json deleted file mode 100644 index 797cfa1b2d8..00000000000 --- a/homeassistant/components/soma/.translations/hu.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "connection_error": "Nem siker\u00fclt csatlakozni a SOMA Connecthez.", - "missing_configuration": "A Soma \u00f6sszetev\u0151 nincs konfigur\u00e1lva. K\u00e9rj\u00fck, k\u00f6vesse a dokument\u00e1ci\u00f3t.", - "result_error": "A SOMA Connect hiba\u00e1llapottal v\u00e1laszolt." - }, - "create_entry": { - "default": "Soma sikeresen hiteles\u00edtett." - }, - "step": { - "user": { - "data": { - "host": "Kiszolg\u00e1l\u00f3", - "port": "Port" - }, - "description": "K\u00e9rj\u00fck, adja meg a SOMA Connect csatlakoz\u00e1si be\u00e1ll\u00edt\u00e1sait.", - "title": "SOMA csatlakoz\u00e1s" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/it.json b/homeassistant/components/soma/.translations/it.json deleted file mode 100644 index 6c7d0129708..00000000000 --- a/homeassistant/components/soma/.translations/it.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account Soma.", - "authorize_url_timeout": "Timeout durante la generazione dell'URL di autorizzazione.", - "connection_error": "Impossibile connettersi a SOMA Connect.", - "missing_configuration": "Il componente Soma non \u00e8 configurato. Si prega di seguire la documentazione.", - "result_error": "SOMA Connect ha risposto con stato di errore." - }, - "create_entry": { - "default": "Autenticato con successo con Soma." - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Porta" - }, - "description": "Inserisci le impostazioni di connessione del tuo SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/ko.json b/homeassistant/components/soma/.translations/ko.json deleted file mode 100644 index ea79a455924..00000000000 --- a/homeassistant/components/soma/.translations/ko.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "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.", - "result_error": "SOMA Connect \uac00 \uc624\ub958 \uc0c1\ud0dc\ub85c \uc751\ub2f5\ud588\uc2b5\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Soma \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "port": "\ud3ec\ud2b8" - }, - "description": "SOMA Connect \uc5f0\uacb0 \uc124\uc815\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/lb.json b/homeassistant/components/soma/.translations/lb.json deleted file mode 100644 index fdf180a1a61..00000000000 --- a/homeassistant/components/soma/.translations/lb.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Soma Kont konfigur\u00e9ieren.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "connection_error": "Feeler beim verbannen mat SOMA Connect.", - "missing_configuration": "D'Soma Komponent ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun.", - "result_error": "SOMA Connect \u00e4ntwert mat engem Feeler Code." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Soma authentifiz\u00e9iert." - }, - "step": { - "user": { - "data": { - "host": "Apparat", - "port": "Port" - }, - "description": "Gitt Verbindungs Informatioune vun \u00e4rem SOMA Connect an.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/nl.json b/homeassistant/components/soma/.translations/nl.json deleted file mode 100644 index 058f7222666..00000000000 --- a/homeassistant/components/soma/.translations/nl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n Soma-account configureren.", - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "connection_error": "Kan geen verbinding maken met SOMA Connect.", - "missing_configuration": "De Soma-component is niet geconfigureerd. Gelieve de documentatie te volgen.", - "result_error": "SOMA Connect reageerde met een foutstatus." - }, - "create_entry": { - "default": "Succesvol geverifieerd met Soma." - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Poort" - }, - "description": "Voer de verbindingsinstellingen van uw SOMA Connect in.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/nn.json b/homeassistant/components/soma/.translations/nn.json deleted file mode 100644 index 6eeb4f75a3c..00000000000 --- a/homeassistant/components/soma/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/no.json b/homeassistant/components/soma/.translations/no.json deleted file mode 100644 index c8cfa1473fe..00000000000 --- a/homeassistant/components/soma/.translations/no.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bare konfigurere \u00e9n Soma-konto.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "connection_error": "Kunne ikke koble til SOMA Connect.", - "missing_configuration": "Soma-komponenten er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen.", - "result_error": "SOMA Connect svarte med feilstatus." - }, - "create_entry": { - "default": "Vellykket autentisering med Somfy." - }, - "step": { - "user": { - "data": { - "host": "Vert", - "port": "" - }, - "description": "Vennligst skriv tilkoblingsinnstillingene for din SOMA Connect.", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/pl.json b/homeassistant/components/soma/.translations/pl.json deleted file mode 100644 index 102413bf446..00000000000 --- a/homeassistant/components/soma/.translations/pl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Soma.", - "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", - "connection_error": "Nie uda\u0142o si\u0119 po\u0142\u0105czy\u0107 z SOMA Connect.", - "missing_configuration": "Komponent Soma nie jest skonfigurowany. Post\u0119puj zgodnie z dokumentacj\u0105.", - "result_error": "SOMA Connect odpowiedzia\u0142 statusem b\u0142\u0119du." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Soma" - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Wprowad\u017a ustawienia po\u0142\u0105czenia SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/ru.json b/homeassistant/components/soma/.translations/ru.json deleted file mode 100644 index fa581eb0821..00000000000 --- a/homeassistant/components/soma/.translations/ru.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a SOMA Connect.", - "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Soma \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438.", - "result_error": "SOMA Connect \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "port": "\u041f\u043e\u0440\u0442" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/sl.json b/homeassistant/components/soma/.translations/sl.json deleted file mode 100644 index 01f7e50eb96..00000000000 --- a/homeassistant/components/soma/.translations/sl.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nastavite lahko samo en ra\u010dun Soma.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "connection_error": "Povezava s SOMA Connect ni uspela.", - "missing_configuration": "Komponenta Soma ni konfigurirana. Upo\u0161tevajte dokumentacijo.", - "result_error": "SOMA Connect se je odzvala s statusom napake." - }, - "create_entry": { - "default": "Uspe\u0161no overjen s Soma." - }, - "step": { - "user": { - "data": { - "host": "Gostitelj", - "port": "Vrata" - }, - "description": "Prosimo, vnesite nastavitve povezave za va\u0161 SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/sv.json b/homeassistant/components/soma/.translations/sv.json deleted file mode 100644 index bb3ce895fd5..00000000000 --- a/homeassistant/components/soma/.translations/sv.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bara konfigurera ett Soma-konto.", - "authorize_url_timeout": "Timeout vid generering av auktoriserings-url.", - "connection_error": "Det gick inte att ansluta till SOMA Connect.", - "missing_configuration": "Soma-komponenten \u00e4r inte konfigurerad. F\u00f6lj dokumentationen.", - "result_error": "SOMA Connect svarade med felstatus." - }, - "create_entry": { - "default": "Lyckad autentisering med Soma." - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rd", - "port": "Port" - }, - "description": "Ange anslutningsinst\u00e4llningar f\u00f6r din SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/zh-Hant.json b/homeassistant/components/soma/.translations/zh-Hant.json deleted file mode 100644 index 73b26cb91f1..00000000000 --- a/homeassistant/components/soma/.translations/zh-Hant.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Soma \u5e33\u865f\u3002", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", - "connection_error": "SOMA \u9023\u7dda\u5931\u6557\u3002", - "missing_configuration": "Soma \u5143\u4ef6\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002", - "result_error": "SOMA \u9023\u7dda\u56de\u61c9\u72c0\u614b\u932f\u8aa4\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Soma \u8a2d\u5099\u3002" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "port": "\u901a\u8a0a\u57e0" - }, - "description": "\u8acb\u8f38\u5165 SOMA Connect \u9023\u7dda\u8a2d\u5b9a\u3002", - "title": "SOMA Connect" - } - }, - "title": "Soma" - } -} \ No newline at end of file diff --git a/homeassistant/components/soma/cover.py b/homeassistant/components/soma/cover.py index d23cc9ec5d0..9bfe903e724 100644 --- a/homeassistant/components/soma/cover.py +++ b/homeassistant/components/soma/cover.py @@ -18,15 +18,6 @@ async def async_setup_entry(hass, config_entry, async_add_entities): ) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up platform. - - Can only be called when a user accidentally mentions the platform in their - config. But even in that case it would have been ignored. - """ - pass - - class SomaCover(SomaEntity, CoverDevice): """Representation of a Soma cover device.""" diff --git a/homeassistant/components/soma/manifest.json b/homeassistant/components/soma/manifest.json index a724a3d4485..3c96ef2efdd 100644 --- a/homeassistant/components/soma/manifest.json +++ b/homeassistant/components/soma/manifest.json @@ -3,7 +3,6 @@ "name": "Soma Connect", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/soma", - "dependencies": [], "codeowners": ["@ratsept"], "requirements": ["pysoma==0.0.10"] } diff --git a/homeassistant/components/soma/strings.json b/homeassistant/components/soma/strings.json index 67f1f6b7d46..7b82a658a72 100644 --- a/homeassistant/components/soma/strings.json +++ b/homeassistant/components/soma/strings.json @@ -1,25 +1,19 @@ { - "config": { - "abort": { - "already_setup": "You can only configure one Soma account.", - "authorize_url_timeout": "Timeout generating authorize url.", - "missing_configuration": "The Soma component is not configured. Please follow the documentation.", - "result_error": "SOMA Connect responded with error status.", - "connection_error": "Failed to connect to SOMA Connect." - }, - "create_entry": { - "default": "Successfully authenticated with Soma." - }, - "step": { - "user": { - "data": { - "host": "Host", - "port": "Port" - }, - "description": "Please enter connection settings of your SOMA Connect.", - "title": "SOMA Connect" - } - }, - "title": "Soma" + "config": { + "abort": { + "already_setup": "You can only configure one Soma account.", + "authorize_url_timeout": "Timeout generating authorize url.", + "missing_configuration": "The Soma component is not configured. Please follow the documentation.", + "result_error": "SOMA Connect responded with error status.", + "connection_error": "Failed to connect to SOMA Connect." + }, + "create_entry": { "default": "Successfully authenticated with Soma." }, + "step": { + "user": { + "data": { "host": "Host", "port": "Port" }, + "description": "Please enter connection settings of your SOMA Connect.", + "title": "SOMA Connect" + } } + } } diff --git a/homeassistant/components/soma/translations/bg.json b/homeassistant/components/soma/translations/bg.json new file mode 100644 index 00000000000..bfdebd385a6 --- /dev/null +++ b/homeassistant/components/soma/translations/bg.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Soma \u0430\u043a\u0430\u0443\u043d\u0442.", + "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", + "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044a\u0442 Soma \u043d\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d. \u041c\u043e\u043b\u044f, \u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430." + }, + "create_entry": { + "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441\u044a\u0441 Soma." + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "port": "\u041f\u043e\u0440\u0442" + }, + "description": "\u041c\u043e\u043b\u044f, \u0432\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0438\u044f SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/ca.json b/homeassistant/components/soma/translations/ca.json new file mode 100644 index 00000000000..3d79c8d744d --- /dev/null +++ b/homeassistant/components/soma/translations/ca.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Soma.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "connection_error": "No s'ha pogut connectar amb SOMA Connect.", + "missing_configuration": "El component Soma no est\u00e0 configurat. Mira'n la documentaci\u00f3.", + "result_error": "SOMA Connect ha respost amb un estat d'error." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Soma." + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port" + }, + "description": "Introdueix la informaci\u00f3 de connexi\u00f3 de SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/cs.json b/homeassistant/components/soma/translations/cs.json similarity index 100% rename from homeassistant/components/soma/.translations/cs.json rename to homeassistant/components/soma/translations/cs.json diff --git a/homeassistant/components/soma/translations/da.json b/homeassistant/components/soma/translations/da.json new file mode 100644 index 00000000000..2f582b0826d --- /dev/null +++ b/homeassistant/components/soma/translations/da.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en Soma-konto.", + "authorize_url_timeout": "Timeout ved generering af autoriseret url.", + "connection_error": "Kunne ikke oprette forbindelse til SOMA Connect.", + "missing_configuration": "Soma-komponenten er ikke konfigureret. F\u00f8lg venligst dokumentationen.", + "result_error": "SOMA Connect svarede med fejlstatus." + }, + "create_entry": { + "default": "Godkendt med Soma." + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "port": "Port" + }, + "description": "Indtast forbindelsesindstillinger for din SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/de.json b/homeassistant/components/soma/translations/de.json new file mode 100644 index 00000000000..79cd15df3be --- /dev/null +++ b/homeassistant/components/soma/translations/de.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Du kannst nur ein einziges Soma-Konto konfigurieren.", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", + "connection_error": "Verbindung zu SOMA Connect fehlgeschlagen.", + "missing_configuration": "Die Soma-Komponente ist nicht konfiguriert. Bitte folgen Sie der Dokumentation.", + "result_error": "SOMA Connect hat mit einem Fehlerstatus geantwortet." + }, + "create_entry": { + "default": "Erfolgreich bei Soma authentifiziert." + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Port" + }, + "description": "Bitte gib die Verbindungsinformationen f\u00fcr SOMA Connect ein.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/en.json b/homeassistant/components/soma/translations/en.json new file mode 100644 index 00000000000..6f28ee53ae2 --- /dev/null +++ b/homeassistant/components/soma/translations/en.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure one Soma account.", + "authorize_url_timeout": "Timeout generating authorize url.", + "connection_error": "Failed to connect to SOMA Connect.", + "missing_configuration": "The Soma component is not configured. Please follow the documentation.", + "result_error": "SOMA Connect responded with error status." + }, + "create_entry": { + "default": "Successfully authenticated with Soma." + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Port" + }, + "description": "Please enter connection settings of your SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/es.json b/homeassistant/components/soma/translations/es.json new file mode 100644 index 00000000000..008404df599 --- /dev/null +++ b/homeassistant/components/soma/translations/es.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3lo puede configurar una cuenta de Soma.", + "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", + "connection_error": "No se ha podido conectar a SOMA Connect.", + "missing_configuration": "El componente Soma no est\u00e1 configurado. Por favor, leer la documentaci\u00f3n.", + "result_error": "SOMA Connect respondi\u00f3 con un error." + }, + "create_entry": { + "default": "Autenticado con \u00e9xito con Soma." + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Puerto" + }, + "description": "Por favor, introduzca los ajustes de conexi\u00f3n de SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/fr.json b/homeassistant/components/soma/translations/fr.json new file mode 100644 index 00000000000..b0a287b1708 --- /dev/null +++ b/homeassistant/components/soma/translations/fr.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Soma.", + "authorize_url_timeout": "D\u00e9lai d'attente g\u00e9n\u00e9rant l'autorisation de l'URL.", + "connection_error": "Impossible de se connecter \u00e0 SOMA Connect.", + "missing_configuration": "Le composant Soma n'est pas configur\u00e9. Veuillez suivre la documentation.", + "result_error": "SOMA Connect a r\u00e9pondu avec l'\u00e9tat d'erreur." + }, + "create_entry": { + "default": "Authentifi\u00e9 avec succ\u00e8s avec Soma." + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "port": "Port" + }, + "description": "Veuillez entrer les param\u00e8tres de connexion de votre SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/hu.json b/homeassistant/components/soma/translations/hu.json new file mode 100644 index 00000000000..357ff2ac170 --- /dev/null +++ b/homeassistant/components/soma/translations/hu.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "connection_error": "Nem siker\u00fclt csatlakozni a SOMA Connecthez.", + "missing_configuration": "A Soma \u00f6sszetev\u0151 nincs konfigur\u00e1lva. K\u00e9rj\u00fck, k\u00f6vesse a dokument\u00e1ci\u00f3t.", + "result_error": "A SOMA Connect hiba\u00e1llapottal v\u00e1laszolt." + }, + "create_entry": { + "default": "Soma sikeresen hiteles\u00edtett." + }, + "step": { + "user": { + "data": { + "host": "Kiszolg\u00e1l\u00f3", + "port": "Port" + }, + "description": "K\u00e9rj\u00fck, adja meg a SOMA Connect csatlakoz\u00e1si be\u00e1ll\u00edt\u00e1sait.", + "title": "SOMA csatlakoz\u00e1s" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/it.json b/homeassistant/components/soma/translations/it.json new file mode 100644 index 00000000000..0119fca7388 --- /dev/null +++ b/homeassistant/components/soma/translations/it.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account Soma.", + "authorize_url_timeout": "Timeout durante la generazione dell'URL di autorizzazione.", + "connection_error": "Impossibile connettersi a SOMA Connect.", + "missing_configuration": "Il componente Soma non \u00e8 configurato. Si prega di seguire la documentazione.", + "result_error": "SOMA Connect ha risposto con stato di errore." + }, + "create_entry": { + "default": "Autenticato con successo con Soma." + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Porta" + }, + "description": "Inserisci le impostazioni di connessione del tuo SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/ko.json b/homeassistant/components/soma/translations/ko.json new file mode 100644 index 00000000000..b987c7b2b73 --- /dev/null +++ b/homeassistant/components/soma/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "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.", + "result_error": "SOMA Connect \uac00 \uc624\ub958 \uc0c1\ud0dc\ub85c \uc751\ub2f5\ud588\uc2b5\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Soma \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "port": "\ud3ec\ud2b8" + }, + "description": "SOMA Connect \uc5f0\uacb0 \uc124\uc815\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/lb.json b/homeassistant/components/soma/translations/lb.json new file mode 100644 index 00000000000..af48b1ab8c8 --- /dev/null +++ b/homeassistant/components/soma/translations/lb.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Soma Kont konfigur\u00e9ieren.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "connection_error": "Feeler beim verbannen mat SOMA Connect.", + "missing_configuration": "D'Soma Komponent ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun.", + "result_error": "SOMA Connect \u00e4ntwert mat engem Feeler Code." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Soma authentifiz\u00e9iert." + }, + "step": { + "user": { + "data": { + "host": "Apparat", + "port": "Port" + }, + "description": "Gitt Verbindungs Informatioune vun \u00e4rem SOMA Connect an.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/lv.json b/homeassistant/components/soma/translations/lv.json similarity index 100% rename from homeassistant/components/soma/.translations/lv.json rename to homeassistant/components/soma/translations/lv.json diff --git a/homeassistant/components/soma/translations/nl.json b/homeassistant/components/soma/translations/nl.json new file mode 100644 index 00000000000..fad7efdf398 --- /dev/null +++ b/homeassistant/components/soma/translations/nl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n Soma-account configureren.", + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "connection_error": "Kan geen verbinding maken met SOMA Connect.", + "missing_configuration": "De Soma-component is niet geconfigureerd. Gelieve de documentatie te volgen.", + "result_error": "SOMA Connect reageerde met een foutstatus." + }, + "create_entry": { + "default": "Succesvol geverifieerd met Soma." + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Poort" + }, + "description": "Voer de verbindingsinstellingen van uw SOMA Connect in.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/nn.json b/homeassistant/components/soma/translations/nn.json new file mode 100644 index 00000000000..961b47595e7 --- /dev/null +++ b/homeassistant/components/soma/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Soma" +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/no.json b/homeassistant/components/soma/translations/no.json new file mode 100644 index 00000000000..e71dd3c4ea5 --- /dev/null +++ b/homeassistant/components/soma/translations/no.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bare konfigurere \u00e9n Soma-konto.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "connection_error": "Kunne ikke koble til SOMA Connect.", + "missing_configuration": "Soma-komponenten er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen.", + "result_error": "SOMA Connect svarte med feilstatus." + }, + "create_entry": { + "default": "Vellykket autentisering med Somfy." + }, + "step": { + "user": { + "data": { + "host": "Vert", + "port": "" + }, + "description": "Vennligst skriv tilkoblingsinnstillingene for din SOMA Connect.", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/pl.json b/homeassistant/components/soma/translations/pl.json new file mode 100644 index 00000000000..dc71b001bde --- /dev/null +++ b/homeassistant/components/soma/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Soma.", + "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", + "connection_error": "Nie uda\u0142o si\u0119 po\u0142\u0105czy\u0107 z SOMA Connect.", + "missing_configuration": "Komponent Soma nie jest skonfigurowany. Post\u0119puj zgodnie z dokumentacj\u0105.", + "result_error": "SOMA Connect odpowiedzia\u0142 statusem b\u0142\u0119du." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Soma" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port" + }, + "description": "Wprowad\u017a ustawienia po\u0142\u0105czenia SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/.translations/pt-BR.json b/homeassistant/components/soma/translations/pt-BR.json similarity index 100% rename from homeassistant/components/soma/.translations/pt-BR.json rename to homeassistant/components/soma/translations/pt-BR.json diff --git a/homeassistant/components/soma/.translations/pt.json b/homeassistant/components/soma/translations/pt.json similarity index 100% rename from homeassistant/components/soma/.translations/pt.json rename to homeassistant/components/soma/translations/pt.json diff --git a/homeassistant/components/soma/translations/ru.json b/homeassistant/components/soma/translations/ru.json new file mode 100644 index 00000000000..119bd828c60 --- /dev/null +++ b/homeassistant/components/soma/translations/ru.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a SOMA Connect.", + "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Soma \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438.", + "result_error": "SOMA Connect \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/sl.json b/homeassistant/components/soma/translations/sl.json new file mode 100644 index 00000000000..4b68d5dd42f --- /dev/null +++ b/homeassistant/components/soma/translations/sl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Nastavite lahko samo en ra\u010dun Soma.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "connection_error": "Povezava s SOMA Connect ni uspela.", + "missing_configuration": "Komponenta Soma ni konfigurirana. Upo\u0161tevajte dokumentacijo.", + "result_error": "SOMA Connect se je odzvala s statusom napake." + }, + "create_entry": { + "default": "Uspe\u0161no overjen s Soma." + }, + "step": { + "user": { + "data": { + "host": "Gostitelj", + "port": "Vrata" + }, + "description": "Prosimo, vnesite nastavitve povezave za va\u0161 SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/sv.json b/homeassistant/components/soma/translations/sv.json new file mode 100644 index 00000000000..e71d816b412 --- /dev/null +++ b/homeassistant/components/soma/translations/sv.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bara konfigurera ett Soma-konto.", + "authorize_url_timeout": "Timeout vid generering av auktoriserings-url.", + "connection_error": "Det gick inte att ansluta till SOMA Connect.", + "missing_configuration": "Soma-komponenten \u00e4r inte konfigurerad. F\u00f6lj dokumentationen.", + "result_error": "SOMA Connect svarade med felstatus." + }, + "create_entry": { + "default": "Lyckad autentisering med Soma." + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rd", + "port": "Port" + }, + "description": "Ange anslutningsinst\u00e4llningar f\u00f6r din SOMA Connect.", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/soma/translations/zh-Hant.json b/homeassistant/components/soma/translations/zh-Hant.json new file mode 100644 index 00000000000..16659304045 --- /dev/null +++ b/homeassistant/components/soma/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Soma \u5e33\u865f\u3002", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", + "connection_error": "SOMA \u9023\u7dda\u5931\u6557\u3002", + "missing_configuration": "Soma \u5143\u4ef6\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002", + "result_error": "SOMA \u9023\u7dda\u56de\u61c9\u72c0\u614b\u932f\u8aa4\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Soma \u8a2d\u5099\u3002" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0" + }, + "description": "\u8acb\u8f38\u5165 SOMA Connect \u9023\u7dda\u8a2d\u5b9a\u3002", + "title": "SOMA Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/bg.json b/homeassistant/components/somfy/.translations/bg.json deleted file mode 100644 index 4741ccdba6d..00000000000 --- a/homeassistant/components/somfy/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Somfy \u0430\u043a\u0430\u0443\u043d\u0442.", - "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", - "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044a\u0442 Somfy \u043d\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d. \u041c\u043e\u043b\u044f, \u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430." - }, - "create_entry": { - "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441\u044a\u0441 Somfy." - }, - "step": { - "pick_implementation": { - "title": "\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/ca.json b/homeassistant/components/somfy/.translations/ca.json deleted file mode 100644 index 58b8853cd51..00000000000 --- a/homeassistant/components/somfy/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Somfy.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "missing_configuration": "El component Somfy no est\u00e0 configurat. Mira'n la documentaci\u00f3." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Somfy." - }, - "step": { - "pick_implementation": { - "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/da.json b/homeassistant/components/somfy/.translations/da.json deleted file mode 100644 index b50c030c636..00000000000 --- a/homeassistant/components/somfy/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt Somfy konto.", - "authorize_url_timeout": "Timeout ved generering af autoriseret url.", - "missing_configuration": "Komponenten Somfy er ikke konfigureret. F\u00f8lg venligst dokumentationen." - }, - "create_entry": { - "default": "Godkendt med Somfy." - }, - "step": { - "pick_implementation": { - "title": "V\u00e6lg godkendelsesmetode" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/de.json b/homeassistant/components/somfy/.translations/de.json deleted file mode 100644 index b950a439ef3..00000000000 --- a/homeassistant/components/somfy/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Es kann nur ein Somfy-Account konfiguriert werden.", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", - "missing_configuration": "Die Somfy-Komponente ist nicht konfiguriert. Folge bitte der Dokumentation." - }, - "create_entry": { - "default": "Erfolgreich mit Somfy authentifiziert." - }, - "step": { - "pick_implementation": { - "title": "W\u00e4hle die Authentifizierungsmethode" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/en.json b/homeassistant/components/somfy/.translations/en.json deleted file mode 100644 index 3b2f2e6beaf..00000000000 --- a/homeassistant/components/somfy/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure one Somfy account.", - "authorize_url_timeout": "Timeout generating authorize url.", - "missing_configuration": "The Somfy component is not configured. Please follow the documentation." - }, - "create_entry": { - "default": "Successfully authenticated with Somfy." - }, - "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/es-419.json b/homeassistant/components/somfy/.translations/es-419.json deleted file mode 100644 index ff0383c7f01..00000000000 --- a/homeassistant/components/somfy/.translations/es-419.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/es.json b/homeassistant/components/somfy/.translations/es.json deleted file mode 100644 index d20eb71cc55..00000000000 --- a/homeassistant/components/somfy/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo puedes configurar una cuenta de Somfy.", - "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n", - "missing_configuration": "El componente Somfy no est\u00e1 configurado. Por favor, sigue la documentaci\u00f3n." - }, - "create_entry": { - "default": "Autenticado correctamente con Somfy." - }, - "step": { - "pick_implementation": { - "title": "Seleccione el m\u00e9todo de autenticaci\u00f3n" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/fr.json b/homeassistant/components/somfy/.translations/fr.json deleted file mode 100644 index 29a3eb77853..00000000000 --- a/homeassistant/components/somfy/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Somfy.", - "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration d'url autoriser.", - "missing_configuration": "Le composant Somfy n'est pas configur\u00e9. Veuillez suivre la documentation." - }, - "create_entry": { - "default": "Authentifi\u00e9 avec succ\u00e8s avec Somfy." - }, - "step": { - "pick_implementation": { - "title": "Choisir la m\u00e9thode d'authentification" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/hr.json b/homeassistant/components/somfy/.translations/hr.json deleted file mode 100644 index 3a904102076..00000000000 --- a/homeassistant/components/somfy/.translations/hr.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "config": { - "create_entry": { - "default": "Uspje\u0161no autentificirano sa Somfy." - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/it.json b/homeassistant/components/somfy/.translations/it.json deleted file mode 100644 index c91536abc77..00000000000 --- a/homeassistant/components/somfy/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account Somfy.", - "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", - "missing_configuration": "Il componente Somfy non \u00e8 configurato. Si prega di seguire la documentazione." - }, - "create_entry": { - "default": "Autenticato con successo con Somfy." - }, - "step": { - "pick_implementation": { - "title": "Seleziona il metodo di autenticazione" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/ko.json b/homeassistant/components/somfy/.translations/ko.json deleted file mode 100644 index c7fa0e4d293..00000000000 --- a/homeassistant/components/somfy/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "create_entry": { - "default": "Somfy \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "pick_implementation": { - "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/lb.json b/homeassistant/components/somfy/.translations/lb.json deleted file mode 100644 index 0a1cfa83250..00000000000 --- a/homeassistant/components/somfy/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Somfy Kont konfigur\u00e9ieren.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "missing_configuration": "D'Somfy Komponent ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Somfy authentifiz\u00e9iert." - }, - "step": { - "pick_implementation": { - "title": "Wielt Authentifikatiouns Method aus" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/nl.json b/homeassistant/components/somfy/.translations/nl.json deleted file mode 100644 index b08bc3431cd..00000000000 --- a/homeassistant/components/somfy/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n Somfy-account configureren.", - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "missing_configuration": "Het Somfy-component is niet geconfigureerd. Gelieve de documentatie te volgen." - }, - "create_entry": { - "default": "Succesvol geverifieerd met Somfy." - }, - "step": { - "pick_implementation": { - "title": "Kies de authenticatie methode" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/nn.json b/homeassistant/components/somfy/.translations/nn.json deleted file mode 100644 index ff0383c7f01..00000000000 --- a/homeassistant/components/somfy/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/no.json b/homeassistant/components/somfy/.translations/no.json deleted file mode 100644 index f5944cbf9c7..00000000000 --- a/homeassistant/components/somfy/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere \u00e9n Somfy-konto.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "missing_configuration": "Somfy-komponenten er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen." - }, - "create_entry": { - "default": "Vellykket autentisering med Somfy." - }, - "step": { - "pick_implementation": { - "title": "Velg autentiseringsmetode" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/pl.json b/homeassistant/components/somfy/.translations/pl.json deleted file mode 100644 index e08e921cf1a..00000000000 --- a/homeassistant/components/somfy/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Somfy.", - "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", - "missing_configuration": "Komponent Somfy nie jest skonfigurowany. Post\u0119puj zgodnie z dokumentacj\u0105." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Somfy" - }, - "step": { - "pick_implementation": { - "title": "Wybierz metod\u0119 uwierzytelniania" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/pt-BR.json b/homeassistant/components/somfy/.translations/pt-BR.json deleted file mode 100644 index 302ac53bb62..00000000000 --- a/homeassistant/components/somfy/.translations/pt-BR.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Voc\u00ea s\u00f3 pode configurar uma conta Somfy.", - "authorize_url_timeout": "Excedido tempo limite gerando a URL de autoriza\u00e7\u00e3o.", - "missing_configuration": "O componente Somfy n\u00e3o est\u00e1 configurado. Por favor, siga a documenta\u00e7\u00e3o." - }, - "create_entry": { - "default": "Autenticado com sucesso pela Somfy." - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/ru.json b/homeassistant/components/somfy/.translations/ru.json deleted file mode 100644 index 0cdb43e4241..00000000000 --- a/homeassistant/components/somfy/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Somfy \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "step": { - "pick_implementation": { - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/sl.json b/homeassistant/components/somfy/.translations/sl.json deleted file mode 100644 index bdfbade2bbe..00000000000 --- a/homeassistant/components/somfy/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nastavite lahko samo en ra\u010dun Somfy.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "missing_configuration": "Komponenta Somfy ni konfigurirana. Upo\u0161tevajte dokumentacijo." - }, - "create_entry": { - "default": "Uspe\u0161no overjen s Somfy-jem." - }, - "step": { - "pick_implementation": { - "title": "Izberite na\u010din preverjanja pristnosti" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/sv.json b/homeassistant/components/somfy/.translations/sv.json deleted file mode 100644 index 982b32a90a1..00000000000 --- a/homeassistant/components/somfy/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan endast konfigurera ett Somfy-konto.", - "authorize_url_timeout": "Timeout vid skapandet av en auktoriseringsadress.", - "missing_configuration": "Somfy-komponenten \u00e4r inte konfigurerad. V\u00e4nligen f\u00f6lj dokumentationen." - }, - "create_entry": { - "default": "Lyckad autentisering med Somfy." - }, - "step": { - "pick_implementation": { - "title": "V\u00e4lj autentiseringsmetod" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/zh-Hant.json b/homeassistant/components/somfy/.translations/zh-Hant.json deleted file mode 100644 index 3b11e6ef6e0..00000000000 --- a/homeassistant/components/somfy/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Somfy \u5e33\u865f\u3002", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", - "missing_configuration": "Somfy \u5143\u4ef6\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Somfy \u8a2d\u5099\u3002" - }, - "step": { - "pick_implementation": { - "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" - } - }, - "title": "Somfy" - } -} \ No newline at end of file diff --git a/homeassistant/components/somfy/manifest.json b/homeassistant/components/somfy/manifest.json index 82e62e7dd08..6e15b01e961 100644 --- a/homeassistant/components/somfy/manifest.json +++ b/homeassistant/components/somfy/manifest.json @@ -1,6 +1,6 @@ { "domain": "somfy", - "name": "Somfy Open API", + "name": "Somfy", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/somfy", "dependencies": ["http"], diff --git a/homeassistant/components/somfy/strings.json b/homeassistant/components/somfy/strings.json index 81308ba18af..90ea98f7a87 100644 --- a/homeassistant/components/somfy/strings.json +++ b/homeassistant/components/somfy/strings.json @@ -1,18 +1,13 @@ { "config": { "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - } + "pick_implementation": { "title": "Pick Authentication Method" } }, "abort": { "already_setup": "You can only configure one Somfy account.", "authorize_url_timeout": "Timeout generating authorize url.", "missing_configuration": "The Somfy component is not configured. Please follow the documentation." }, - "create_entry": { - "default": "Successfully authenticated with Somfy." - }, - "title": "Somfy" + "create_entry": { "default": "Successfully authenticated with Somfy." } } } diff --git a/homeassistant/components/somfy/translations/bg.json b/homeassistant/components/somfy/translations/bg.json new file mode 100644 index 00000000000..f115865a2b8 --- /dev/null +++ b/homeassistant/components/somfy/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Somfy \u0430\u043a\u0430\u0443\u043d\u0442.", + "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", + "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044a\u0442 Somfy \u043d\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d. \u041c\u043e\u043b\u044f, \u0441\u043b\u0435\u0434\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430." + }, + "create_entry": { + "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441\u044a\u0441 Somfy." + }, + "step": { + "pick_implementation": { + "title": "\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/ca.json b/homeassistant/components/somfy/translations/ca.json new file mode 100644 index 00000000000..d3e2f7b16aa --- /dev/null +++ b/homeassistant/components/somfy/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Somfy.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "missing_configuration": "El component Somfy no est\u00e0 configurat. Mira'n la documentaci\u00f3." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Somfy." + }, + "step": { + "pick_implementation": { + "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/cs.json b/homeassistant/components/somfy/translations/cs.json similarity index 100% rename from homeassistant/components/somfy/.translations/cs.json rename to homeassistant/components/somfy/translations/cs.json diff --git a/homeassistant/components/somfy/translations/da.json b/homeassistant/components/somfy/translations/da.json new file mode 100644 index 00000000000..be7d8e94193 --- /dev/null +++ b/homeassistant/components/somfy/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt Somfy konto.", + "authorize_url_timeout": "Timeout ved generering af autoriseret url.", + "missing_configuration": "Komponenten Somfy er ikke konfigureret. F\u00f8lg venligst dokumentationen." + }, + "create_entry": { + "default": "Godkendt med Somfy." + }, + "step": { + "pick_implementation": { + "title": "V\u00e6lg godkendelsesmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/de.json b/homeassistant/components/somfy/translations/de.json new file mode 100644 index 00000000000..b2f27a8fcca --- /dev/null +++ b/homeassistant/components/somfy/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Es kann nur ein Somfy-Account konfiguriert werden.", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", + "missing_configuration": "Die Somfy-Komponente ist nicht konfiguriert. Folge bitte der Dokumentation." + }, + "create_entry": { + "default": "Erfolgreich mit Somfy authentifiziert." + }, + "step": { + "pick_implementation": { + "title": "W\u00e4hle die Authentifizierungsmethode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/en.json b/homeassistant/components/somfy/translations/en.json new file mode 100644 index 00000000000..da7890f959b --- /dev/null +++ b/homeassistant/components/somfy/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure one Somfy account.", + "authorize_url_timeout": "Timeout generating authorize url.", + "missing_configuration": "The Somfy component is not configured. Please follow the documentation." + }, + "create_entry": { + "default": "Successfully authenticated with Somfy." + }, + "step": { + "pick_implementation": { + "title": "Pick Authentication Method" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/es-419.json b/homeassistant/components/somfy/translations/es-419.json new file mode 100644 index 00000000000..ea066156c71 --- /dev/null +++ b/homeassistant/components/somfy/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Somfy" +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/es.json b/homeassistant/components/somfy/translations/es.json new file mode 100644 index 00000000000..bbb1cedad98 --- /dev/null +++ b/homeassistant/components/somfy/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Solo puedes configurar una cuenta de Somfy.", + "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n", + "missing_configuration": "El componente Somfy no est\u00e1 configurado. Por favor, sigue la documentaci\u00f3n." + }, + "create_entry": { + "default": "Autenticado correctamente con Somfy." + }, + "step": { + "pick_implementation": { + "title": "Seleccione el m\u00e9todo de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/fr.json b/homeassistant/components/somfy/translations/fr.json new file mode 100644 index 00000000000..5df01fe951b --- /dev/null +++ b/homeassistant/components/somfy/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Somfy.", + "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration d'url autoriser.", + "missing_configuration": "Le composant Somfy n'est pas configur\u00e9. Veuillez suivre la documentation." + }, + "create_entry": { + "default": "Authentifi\u00e9 avec succ\u00e8s avec Somfy." + }, + "step": { + "pick_implementation": { + "title": "Choisir la m\u00e9thode d'authentification" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/hr.json b/homeassistant/components/somfy/translations/hr.json new file mode 100644 index 00000000000..a601eb2b9bf --- /dev/null +++ b/homeassistant/components/somfy/translations/hr.json @@ -0,0 +1,7 @@ +{ + "config": { + "create_entry": { + "default": "Uspje\u0161no autentificirano sa Somfy." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/.translations/hu.json b/homeassistant/components/somfy/translations/hu.json similarity index 100% rename from homeassistant/components/somfy/.translations/hu.json rename to homeassistant/components/somfy/translations/hu.json diff --git a/homeassistant/components/somfy/translations/it.json b/homeassistant/components/somfy/translations/it.json new file mode 100644 index 00000000000..7e1a15cbde8 --- /dev/null +++ b/homeassistant/components/somfy/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account Somfy.", + "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", + "missing_configuration": "Il componente Somfy non \u00e8 configurato. Si prega di seguire la documentazione." + }, + "create_entry": { + "default": "Autenticato con successo con Somfy." + }, + "step": { + "pick_implementation": { + "title": "Seleziona il metodo di autenticazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/ko.json b/homeassistant/components/somfy/translations/ko.json new file mode 100644 index 00000000000..9748da483bf --- /dev/null +++ b/homeassistant/components/somfy/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "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." + }, + "create_entry": { + "default": "Somfy \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "pick_implementation": { + "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/lb.json b/homeassistant/components/somfy/translations/lb.json new file mode 100644 index 00000000000..f34c07efd06 --- /dev/null +++ b/homeassistant/components/somfy/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Somfy Kont konfigur\u00e9ieren.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "missing_configuration": "D'Somfy Komponent ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Somfy authentifiz\u00e9iert." + }, + "step": { + "pick_implementation": { + "title": "Wielt Authentifikatiouns Method aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/nl.json b/homeassistant/components/somfy/translations/nl.json new file mode 100644 index 00000000000..b0afb6ef168 --- /dev/null +++ b/homeassistant/components/somfy/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n Somfy-account configureren.", + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "missing_configuration": "Het Somfy-component is niet geconfigureerd. Gelieve de documentatie te volgen." + }, + "create_entry": { + "default": "Succesvol geverifieerd met Somfy." + }, + "step": { + "pick_implementation": { + "title": "Kies de authenticatie methode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/nn.json b/homeassistant/components/somfy/translations/nn.json new file mode 100644 index 00000000000..ea066156c71 --- /dev/null +++ b/homeassistant/components/somfy/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Somfy" +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/no.json b/homeassistant/components/somfy/translations/no.json new file mode 100644 index 00000000000..64bd20acf94 --- /dev/null +++ b/homeassistant/components/somfy/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere \u00e9n Somfy-konto.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "missing_configuration": "Somfy-komponenten er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen." + }, + "create_entry": { + "default": "Vellykket autentisering med Somfy." + }, + "step": { + "pick_implementation": { + "title": "Velg autentiseringsmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/pl.json b/homeassistant/components/somfy/translations/pl.json new file mode 100644 index 00000000000..0f062f65faa --- /dev/null +++ b/homeassistant/components/somfy/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Somfy.", + "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", + "missing_configuration": "Komponent Somfy nie jest skonfigurowany. Post\u0119puj zgodnie z dokumentacj\u0105." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Somfy" + }, + "step": { + "pick_implementation": { + "title": "Wybierz metod\u0119 uwierzytelniania" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/pt-BR.json b/homeassistant/components/somfy/translations/pt-BR.json new file mode 100644 index 00000000000..81c0de81e70 --- /dev/null +++ b/homeassistant/components/somfy/translations/pt-BR.json @@ -0,0 +1,12 @@ +{ + "config": { + "abort": { + "already_setup": "Voc\u00ea s\u00f3 pode configurar uma conta Somfy.", + "authorize_url_timeout": "Excedido tempo limite gerando a URL de autoriza\u00e7\u00e3o.", + "missing_configuration": "O componente Somfy n\u00e3o est\u00e1 configurado. Por favor, siga a documenta\u00e7\u00e3o." + }, + "create_entry": { + "default": "Autenticado com sucesso pela Somfy." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/ru.json b/homeassistant/components/somfy/translations/ru.json new file mode 100644 index 00000000000..cc1fe4c17d9 --- /dev/null +++ b/homeassistant/components/somfy/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "missing_configuration": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Somfy \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "step": { + "pick_implementation": { + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/sl.json b/homeassistant/components/somfy/translations/sl.json new file mode 100644 index 00000000000..b86ea9b33cb --- /dev/null +++ b/homeassistant/components/somfy/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Nastavite lahko samo en ra\u010dun Somfy.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "missing_configuration": "Komponenta Somfy ni konfigurirana. Upo\u0161tevajte dokumentacijo." + }, + "create_entry": { + "default": "Uspe\u0161no overjen s Somfy-jem." + }, + "step": { + "pick_implementation": { + "title": "Izberite na\u010din preverjanja pristnosti" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/sv.json b/homeassistant/components/somfy/translations/sv.json new file mode 100644 index 00000000000..6f3d15206eb --- /dev/null +++ b/homeassistant/components/somfy/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan endast konfigurera ett Somfy-konto.", + "authorize_url_timeout": "Timeout vid skapandet av en auktoriseringsadress.", + "missing_configuration": "Somfy-komponenten \u00e4r inte konfigurerad. V\u00e4nligen f\u00f6lj dokumentationen." + }, + "create_entry": { + "default": "Lyckad autentisering med Somfy." + }, + "step": { + "pick_implementation": { + "title": "V\u00e4lj autentiseringsmetod" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy/translations/zh-Hant.json b/homeassistant/components/somfy/translations/zh-Hant.json new file mode 100644 index 00000000000..b5875aaf088 --- /dev/null +++ b/homeassistant/components/somfy/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Somfy \u5e33\u865f\u3002", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", + "missing_configuration": "Somfy \u5143\u4ef6\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Somfy \u8a2d\u5099\u3002" + }, + "step": { + "pick_implementation": { + "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/somfy_mylink/manifest.json b/homeassistant/components/somfy_mylink/manifest.json index 03b69f070d0..c259f827d51 100644 --- a/homeassistant/components/somfy_mylink/manifest.json +++ b/homeassistant/components/somfy_mylink/manifest.json @@ -3,6 +3,5 @@ "name": "Somfy MyLink", "documentation": "https://www.home-assistant.io/integrations/somfy_mylink", "requirements": ["somfy-mylink-synergy==1.0.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/sonarr/manifest.json b/homeassistant/components/sonarr/manifest.json index ae32083da39..2fe375fb1df 100644 --- a/homeassistant/components/sonarr/manifest.json +++ b/homeassistant/components/sonarr/manifest.json @@ -2,7 +2,5 @@ "domain": "sonarr", "name": "Sonarr", "documentation": "https://www.home-assistant.io/integrations/sonarr", - "requirements": [], - "dependencies": [], - "codeowners": [] + "codeowners": ["@ctalkington"] } diff --git a/homeassistant/components/sonarr/sensor.py b/homeassistant/components/sonarr/sensor.py index c0781b37603..65513db3571 100644 --- a/homeassistant/components/sonarr/sensor.py +++ b/homeassistant/components/sonarr/sensor.py @@ -1,9 +1,7 @@ """Support for Sonarr.""" -from datetime import datetime +from datetime import timedelta import logging -import time -from pytz import timezone import requests import voluptuous as vol @@ -23,9 +21,11 @@ from homeassistant.const import ( DATA_TERABYTES, DATA_YOTTABYTES, DATA_ZETTABYTES, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity +import homeassistant.util.dt as dt_util _LOGGER = logging.getLogger(__name__) @@ -51,13 +51,13 @@ SENSOR_TYPES = { } ENDPOINTS = { - "diskspace": "http{0}://{1}:{2}/{3}api/diskspace", - "queue": "http{0}://{1}:{2}/{3}api/queue", - "upcoming": "http{0}://{1}:{2}/{3}api/calendar?start={4}&end={5}", - "wanted": "http{0}://{1}:{2}/{3}api/wanted/missing", - "series": "http{0}://{1}:{2}/{3}api/series", - "commands": "http{0}://{1}:{2}/{3}api/command", - "status": "http{0}://{1}:{2}/{3}api/system/status", + "diskspace": "{0}://{1}:{2}/{3}api/diskspace", + "queue": "{0}://{1}:{2}/{3}api/queue", + "upcoming": "{0}://{1}:{2}/{3}api/calendar?start={4}&end={5}", + "wanted": "{0}://{1}:{2}/{3}api/wanted/missing", + "series": "{0}://{1}:{2}/{3}api/series", + "commands": "{0}://{1}:{2}/{3}api/command", + "status": "{0}://{1}:{2}/{3}api/system/status", } # Support to Yottabytes for the future, why not @@ -92,13 +92,13 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Sonarr platform.""" conditions = config.get(CONF_MONITORED_CONDITIONS) - add_entities([SonarrSensor(hass, config, sensor) for sensor in conditions], True) + add_entities([SonarrSensor(config, sensor) for sensor in conditions], True) class SonarrSensor(Entity): """Implementation of the Sonarr sensor.""" - def __init__(self, hass, conf, sensor_type): + def __init__(self, conf, sensor_type): """Create Sonarr entity.""" self.conf = conf @@ -110,10 +110,9 @@ class SonarrSensor(Entity): self.apikey = conf.get(CONF_API_KEY) self.included = conf.get(CONF_INCLUDED) self.days = int(conf.get(CONF_DAYS)) - self.ssl = "s" if conf.get(CONF_SSL) else "" + self.ssl = "https" if conf.get(CONF_SSL) else "http" self._state = None self.data = [] - self._tz = timezone(str(hass.config.time_zone)) self.type = sensor_type self._name = SENSOR_TYPES[self.type][0] if self.type == "diskspace": @@ -149,6 +148,9 @@ class SonarrSensor(Entity): attributes = {} if self.type == "upcoming": for show in self.data: + if show["series"]["title"] in attributes: + continue + attributes[show["series"]["title"]] = "S{:02d}E{:02d}".format( show["seasonNumber"], show["episodeNumber"] ) @@ -204,12 +206,18 @@ class SonarrSensor(Entity): def update(self): """Update the data for the sensor.""" - start = get_date(self._tz) - end = get_date(self._tz, self.days) + 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( ENDPOINTS[self.type].format( - self.ssl, self.host, self.port, self.urlbase, start, end + self.ssl, + self.host, + self.port, + self.urlbase, + start.isoformat().replace("+00:00", "Z"), + end.isoformat().replace("+00:00", "Z"), ), headers={"X-Api-Key": self.apikey}, timeout=10, @@ -220,16 +228,9 @@ class SonarrSensor(Entity): self._state = None return - if res.status_code == 200: + if res.status_code == HTTP_OK: if self.type in ["upcoming", "queue", "series", "commands"]: - if self.days == 1 and self.type == "upcoming": - # Sonarr API returns an empty array if start and end dates - # are the same, so we need to filter to just today - self.data = list( - filter(lambda x: x["airDate"] == str(start), res.json()) - ) - else: - self.data = res.json() + self.data = res.json() self._state = len(self.data) elif self.type == "wanted": data = res.json() @@ -263,12 +264,6 @@ class SonarrSensor(Entity): self._available = True -def get_date(zone, offset=0): - """Get date based on timezone and offset of days.""" - day = 60 * 60 * 24 - return datetime.date(datetime.fromtimestamp(time.time() + day * offset, tz=zone)) - - def to_unit(value, unit): """Convert bytes to give unit.""" return value / 1024 ** BYTE_SIZES.index(unit) diff --git a/homeassistant/components/songpal/manifest.json b/homeassistant/components/songpal/manifest.json index a82ffc41e29..583f0dff6ef 100644 --- a/homeassistant/components/songpal/manifest.json +++ b/homeassistant/components/songpal/manifest.json @@ -3,6 +3,5 @@ "name": "Sony Songpal", "documentation": "https://www.home-assistant.io/integrations/songpal", "requirements": ["python-songpal==0.11.2"], - "dependencies": [], "codeowners": ["@rytilahti"] } diff --git a/homeassistant/components/songpal/media_player.py b/homeassistant/components/songpal/media_player.py index 27a81b2a667..d11ff84a73c 100644 --- a/homeassistant/components/songpal/media_player.py +++ b/homeassistant/components/songpal/media_player.py @@ -159,21 +159,21 @@ class SongpalDevice(MediaPlayerDevice): _LOGGER.debug("Volume changed: %s", volume) self._volume = volume.volume self._is_muted = volume.mute - await self.async_update_ha_state() + self.async_write_ha_state() async def _source_changed(content: ContentChange): _LOGGER.debug("Source changed: %s", content) if content.is_input: self._active_source = self._sources[content.source] _LOGGER.debug("New active source: %s", self._active_source) - await self.async_update_ha_state() + self.async_write_ha_state() else: _LOGGER.debug("Got non-handled content change: %s", content) async def _power_changed(power: PowerChange): _LOGGER.debug("Power changed: %s", power) self._state = power.status - await self.async_update_ha_state() + self.async_write_ha_state() async def _try_reconnect(connect: ConnectChange): _LOGGER.error( @@ -181,7 +181,7 @@ class SongpalDevice(MediaPlayerDevice): ) self._available = False self.dev.clear_notification_callbacks() - await self.async_update_ha_state() + self.async_write_ha_state() # Try to reconnect forever, a successful reconnect will initialize # the websocket connection again. diff --git a/homeassistant/components/songpal/services.yaml b/homeassistant/components/songpal/services.yaml index 8cf1a664276..e08ae2098fe 100644 --- a/homeassistant/components/songpal/services.yaml +++ b/homeassistant/components/songpal/services.yaml @@ -4,10 +4,10 @@ set_sound_setting: fields: entity_id: description: Target device. - example: 'media_player.my_soundbar' + example: "media_player.my_soundbar" name: description: Name of the setting. - example: 'nightMode' + example: "nightMode" value: description: Value to set. - example: 'on' + example: "on" diff --git a/homeassistant/components/sonos/.translations/bg.json b/homeassistant/components/sonos/.translations/bg.json deleted file mode 100644 index 392a30d01fc..00000000000 --- a/homeassistant/components/sonos/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 Sonos \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", - "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Sonos." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/ca.json b/homeassistant/components/sonos/.translations/ca.json deleted file mode 100644 index 67fd26f1b5a..00000000000 --- a/homeassistant/components/sonos/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'han trobat dispositius Sonos a la xarxa.", - "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de Sonos." - }, - "step": { - "confirm": { - "description": "Vols configurar Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/cs.json b/homeassistant/components/sonos/.translations/cs.json deleted file mode 100644 index c0b26284cdf..00000000000 --- a/homeassistant/components/sonos/.translations/cs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V s\u00edti nebyly nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed Sonos.", - "single_instance_allowed": "Je t\u0159eba jen jedna konfigurace Sonos." - }, - "step": { - "confirm": { - "description": "Chcete nastavit Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/da.json b/homeassistant/components/sonos/.translations/da.json deleted file mode 100644 index c4b1a555245..00000000000 --- a/homeassistant/components/sonos/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Der blev ikke fundet nogen Sonos-enheder p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Sonos" - }, - "step": { - "confirm": { - "description": "Vil du ops\u00e6tte Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/de.json b/homeassistant/components/sonos/.translations/de.json deleted file mode 100644 index 920d25a3bfa..00000000000 --- a/homeassistant/components/sonos/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keine Sonos Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Nur eine einzige Konfiguration von Sonos ist notwendig." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du Sonos einrichten?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/en.json b/homeassistant/components/sonos/.translations/en.json deleted file mode 100644 index df9e9d2239d..00000000000 --- a/homeassistant/components/sonos/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No Sonos devices found on the network.", - "single_instance_allowed": "Only a single configuration of Sonos is necessary." - }, - "step": { - "confirm": { - "description": "Do you want to set up Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/es-419.json b/homeassistant/components/sonos/.translations/es-419.json deleted file mode 100644 index ff6924389d6..00000000000 --- a/homeassistant/components/sonos/.translations/es-419.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos Sonos en la red.", - "single_instance_allowed": "S\u00f3lo se necesita una \u00fanica configuraci\u00f3n de Sonos." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/es.json b/homeassistant/components/sonos/.translations/es.json deleted file mode 100644 index d2372a7d9b7..00000000000 --- a/homeassistant/components/sonos/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se han encontrado dispositivos Sonos en la red.", - "single_instance_allowed": "S\u00f3lo se necesita una \u00fanica configuraci\u00f3n de Sonos." - }, - "step": { - "confirm": { - "description": "\u00bfQuieres configurar Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/et.json b/homeassistant/components/sonos/.translations/et.json deleted file mode 100644 index 987c54955f2..00000000000 --- a/homeassistant/components/sonos/.translations/et.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/fr.json b/homeassistant/components/sonos/.translations/fr.json deleted file mode 100644 index fd2a77bd129..00000000000 --- a/homeassistant/components/sonos/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun p\u00e9riph\u00e9rique Sonos trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration de Sonos est n\u00e9cessaire." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/he.json b/homeassistant/components/sonos/.translations/he.json deleted file mode 100644 index 54aa43c6151..00000000000 --- a/homeassistant/components/sonos/.translations/he.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05db\u05e9\u05d9\u05e8\u05d9 Sonos \u05d1\u05e8\u05e9\u05ea.", - "single_instance_allowed": "\u05e8\u05e7 \u05ea\u05e6\u05d5\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Sonos \u05e0\u05d7\u05d5\u05e6\u05d4." - }, - "step": { - "confirm": { - "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/hr.json b/homeassistant/components/sonos/.translations/hr.json deleted file mode 100644 index c91f9a78c29..00000000000 --- a/homeassistant/components/sonos/.translations/hr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/hu.json b/homeassistant/components/sonos/.translations/hu.json deleted file mode 100644 index 7811a31ebdb..00000000000 --- a/homeassistant/components/sonos/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nem tal\u00e1lhat\u00f3k Sonos eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", - "single_instance_allowed": "Csak egyetlen Sonos konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "confirm": { - "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a Sonos-t?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/id.json b/homeassistant/components/sonos/.translations/id.json deleted file mode 100644 index dc810d9773c..00000000000 --- a/homeassistant/components/sonos/.translations/id.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Tidak ada perangkat Sonos yang ditemukan pada jaringan.", - "single_instance_allowed": "Hanya satu konfigurasi Sonos yang diperlukan." - }, - "step": { - "confirm": { - "description": "Apakah Anda ingin mengatur Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/it.json b/homeassistant/components/sonos/.translations/it.json deleted file mode 100644 index 06c873b436e..00000000000 --- a/homeassistant/components/sonos/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Non sono presenti dispositivi Sonos in rete.", - "single_instance_allowed": "\u00c8 necessaria una sola configurazione di Sonos." - }, - "step": { - "confirm": { - "description": "Vuoi configurare Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/ko.json b/homeassistant/components/sonos/.translations/ko.json deleted file mode 100644 index 931a0beadfc..00000000000 --- a/homeassistant/components/sonos/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "Sonos \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/lb.json b/homeassistant/components/sonos/.translations/lb.json deleted file mode 100644 index 26eaec4584d..00000000000 --- a/homeassistant/components/sonos/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng Sonos Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Sonos ass n\u00e9ideg." - }, - "step": { - "confirm": { - "description": "Soll Sonos konfigur\u00e9iert ginn?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/nl.json b/homeassistant/components/sonos/.translations/nl.json deleted file mode 100644 index de84482cc63..00000000000 --- a/homeassistant/components/sonos/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen Sonos-apparaten gevonden op het netwerk.", - "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van Sonos nodig." - }, - "step": { - "confirm": { - "description": "Wilt u Sonos instellen?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/nn.json b/homeassistant/components/sonos/.translations/nn.json deleted file mode 100644 index e7df1f23f20..00000000000 --- a/homeassistant/components/sonos/.translations/nn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Det vart ikkje funne noko Sonos-einingar p\u00e5 nettverket.", - "single_instance_allowed": "Du treng berre \u00e5 sette opp \u00e9in Sonos-konfigurasjon." - }, - "step": { - "confirm": { - "description": "Vil du sette opp Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/no.json b/homeassistant/components/sonos/.translations/no.json deleted file mode 100644 index ae47916ac85..00000000000 --- a/homeassistant/components/sonos/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen Sonos enheter funnet p\u00e5 nettverket.", - "single_instance_allowed": "Kun en konfigurasjon av Sonos er n\u00f8dvendig." - }, - "step": { - "confirm": { - "description": "\u00d8nsker du \u00e5 sette opp Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/pl.json b/homeassistant/components/sonos/.translations/pl.json deleted file mode 100644 index a45cb4e9824..00000000000 --- a/homeassistant/components/sonos/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Sonos.", - "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja Sonos." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/pt-BR.json b/homeassistant/components/sonos/.translations/pt-BR.json deleted file mode 100644 index e8264b2d6e0..00000000000 --- a/homeassistant/components/sonos/.translations/pt-BR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo Sonos encontrado na rede.", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Sonos \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Voc\u00ea quer configurar o Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/pt.json b/homeassistant/components/sonos/.translations/pt.json deleted file mode 100644 index 379ca965314..00000000000 --- a/homeassistant/components/sonos/.translations/pt.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo Sonos encontrado na rede.", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Sonos \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar o Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/ro.json b/homeassistant/components/sonos/.translations/ro.json deleted file mode 100644 index e442ab9504e..00000000000 --- a/homeassistant/components/sonos/.translations/ro.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nu exist\u0103 dispozitive Sonos g\u0103site \u00een re\u021bea.", - "single_instance_allowed": "Este necesar\u0103 o singur\u0103 configurare a Sonos." - }, - "step": { - "confirm": { - "description": "Dori\u021bi s\u0103 configura\u021bi Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/ru.json b/homeassistant/components/sonos/.translations/ru.json deleted file mode 100644 index 1bff827d273..00000000000 --- a/homeassistant/components/sonos/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Sonos \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/sl.json b/homeassistant/components/sonos/.translations/sl.json deleted file mode 100644 index 6773465bbbf..00000000000 --- a/homeassistant/components/sonos/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V omre\u017eju ni najdenih naprav Sonos.", - "single_instance_allowed": "Potrebna je samo ena konfiguracija Sonosa." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/sv.json b/homeassistant/components/sonos/.translations/sv.json deleted file mode 100644 index 756fe8a7483..00000000000 --- a/homeassistant/components/sonos/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga Sonos-enheter hittades i n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration av Sonos \u00e4r n\u00f6dv\u00e4ndig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera Sonos?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/vi.json b/homeassistant/components/sonos/.translations/vi.json deleted file mode 100644 index ebeb1a8b07c..00000000000 --- a/homeassistant/components/sonos/.translations/vi.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Kh\u00f4ng t\u00ecm th\u1ea5y thi\u1ebft b\u1ecb Sonos n\u00e0o tr\u00ean m\u1ea1ng.", - "single_instance_allowed": "Ch\u1ec9 c\u1ea7n m\u1ed9t c\u1ea5u h\u00ecnh duy nh\u1ea5t c\u1ee7a Sonos l\u00e0 \u0111\u1ee7." - }, - "step": { - "confirm": { - "description": "B\u1ea1n c\u00f3 mu\u1ed1n thi\u1ebft l\u1eadp Sonos kh\u00f4ng?", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/zh-Hans.json b/homeassistant/components/sonos/.translations/zh-Hans.json deleted file mode 100644 index de2609f4a71..00000000000 --- a/homeassistant/components/sonos/.translations/zh-Hans.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 Sonos \u8bbe\u5907\u3002", - "single_instance_allowed": "\u53ea\u9700\u8bbe\u7f6e\u4e00\u6b21 Sonos \u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u60a8\u60f3\u8981\u914d\u7f6e Sonos \u5417\uff1f", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/zh-Hant.json b/homeassistant/components/sonos/.translations/zh-Hant.json deleted file mode 100644 index c6fb13c3605..00000000000 --- a/homeassistant/components/sonos/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 Sonos \u8a2d\u5099\u3002", - "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 Sonos \u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Sonos\uff1f", - "title": "Sonos" - } - }, - "title": "Sonos" - } -} \ No newline at end of file diff --git a/homeassistant/components/sonos/manifest.json b/homeassistant/components/sonos/manifest.json index a015e7a5095..ee035fb59c1 100644 --- a/homeassistant/components/sonos/manifest.json +++ b/homeassistant/components/sonos/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/sonos", "requirements": ["pysonos==0.0.25"], - "dependencies": [], "ssdp": [ { "st": "urn:schemas-upnp-org:device:ZonePlayer:1" diff --git a/homeassistant/components/sonos/media_player.py b/homeassistant/components/sonos/media_player.py index 03f5999066d..634952dcfdc 100644 --- a/homeassistant/components/sonos/media_player.py +++ b/homeassistant/components/sonos/media_player.py @@ -464,7 +464,7 @@ class SonosEntity(MediaPlayerDevice): self._seen_timer() self.async_unseen() - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def async_unseen(self, now=None): @@ -483,7 +483,7 @@ class SonosEntity(MediaPlayerDevice): self._subscriptions = [] - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def available(self) -> bool: @@ -732,7 +732,7 @@ class SonosEntity(MediaPlayerDevice): self._coordinator = None self._sonos_group = sonos_group - self.async_schedule_update_ha_state() + self.async_write_ha_state() for slave_uid in group[1:]: slave = _get_entity_from_soco_uid(self.hass, slave_uid) @@ -1116,7 +1116,7 @@ class SonosEntity(MediaPlayerDevice): entity.restore() # Find all affected players - entities = set(e for e in entities if e._soco_snapshot) + entities = {e for e in entities if e._soco_snapshot} if with_group: for entity in [e for e in entities if e._snapshot_group]: entities.update(entity._snapshot_group) diff --git a/homeassistant/components/sonos/services.yaml b/homeassistant/components/sonos/services.yaml index 480eeeeba9f..37effe7d6ab 100644 --- a/homeassistant/components/sonos/services.yaml +++ b/homeassistant/components/sonos/services.yaml @@ -3,74 +3,74 @@ join: fields: master: description: Entity ID of the player that should become the coordinator of the group. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" entity_id: description: Name(s) of entities that will join the master. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" unjoin: description: Unjoin the player from a group. fields: entity_id: description: Name(s) of entities that will be unjoined from their group. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" snapshot: description: Take a snapshot of the media player. fields: entity_id: description: Name(s) of entities that will be snapshot. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" with_group: description: True (default) or False. Also snapshot the group layout. - example: 'true' + example: "true" restore: description: Restore a snapshot of the media player. fields: entity_id: description: Name(s) of entities that will be restored. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" with_group: description: True (default) or False. Also restore the group layout. - example: 'true' + example: "true" set_sleep_timer: description: Set a Sonos timer. fields: entity_id: description: Name(s) of entities that will have a timer set. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" sleep_time: description: Number of seconds to set the timer. - example: '900' + example: "900" clear_sleep_timer: description: Clear a Sonos timer. fields: entity_id: description: Name(s) of entities that will have the timer cleared. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" set_option: description: Set Sonos sound options. fields: entity_id: description: Name(s) of entities that will have options set. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" night_sound: description: Enable Night Sound mode - example: 'true' + example: "true" speech_enhance: description: Enable Speech Enhancement mode - example: 'true' + example: "true" play_queue: description: Starts playing the queue from the first item. fields: entity_id: description: Name(s) of entities that will start playing. - example: 'media_player.living_room_sonos' + example: "media_player.living_room_sonos" queue_position: description: Position of the song in the queue to start playing from. - example: '0' + example: "0" diff --git a/homeassistant/components/sonos/strings.json b/homeassistant/components/sonos/strings.json index 0422919c1aa..22414453af9 100644 --- a/homeassistant/components/sonos/strings.json +++ b/homeassistant/components/sonos/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "Sonos", "step": { "confirm": { - "title": "Sonos", "description": "Do you want to set up Sonos?" } }, diff --git a/homeassistant/components/sonos/translations/bg.json b/homeassistant/components/sonos/translations/bg.json new file mode 100644 index 00000000000..0c9d9a8d8e5 --- /dev/null +++ b/homeassistant/components/sonos/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 Sonos \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Sonos." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/ca.json b/homeassistant/components/sonos/translations/ca.json new file mode 100644 index 00000000000..683149c6fd8 --- /dev/null +++ b/homeassistant/components/sonos/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'han trobat dispositius Sonos a la xarxa.", + "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de Sonos." + }, + "step": { + "confirm": { + "description": "Vols configurar Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/cs.json b/homeassistant/components/sonos/translations/cs.json new file mode 100644 index 00000000000..9f87f719b5e --- /dev/null +++ b/homeassistant/components/sonos/translations/cs.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V s\u00edti nebyly nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed Sonos.", + "single_instance_allowed": "Je t\u0159eba jen jedna konfigurace Sonos." + }, + "step": { + "confirm": { + "description": "Chcete nastavit Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/da.json b/homeassistant/components/sonos/translations/da.json new file mode 100644 index 00000000000..5c8c3cdeb3e --- /dev/null +++ b/homeassistant/components/sonos/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Der blev ikke fundet nogen Sonos-enheder p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Sonos" + }, + "step": { + "confirm": { + "description": "Vil du ops\u00e6tte Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/de.json b/homeassistant/components/sonos/translations/de.json new file mode 100644 index 00000000000..b08900034ed --- /dev/null +++ b/homeassistant/components/sonos/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keine Sonos Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Nur eine einzige Konfiguration von Sonos ist notwendig." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du Sonos einrichten?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/en.json b/homeassistant/components/sonos/translations/en.json new file mode 100644 index 00000000000..69b8bd6c3b8 --- /dev/null +++ b/homeassistant/components/sonos/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No Sonos devices found on the network.", + "single_instance_allowed": "Only a single configuration of Sonos is necessary." + }, + "step": { + "confirm": { + "description": "Do you want to set up Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/es-419.json b/homeassistant/components/sonos/translations/es-419.json new file mode 100644 index 00000000000..ba750323426 --- /dev/null +++ b/homeassistant/components/sonos/translations/es-419.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos Sonos en la red.", + "single_instance_allowed": "S\u00f3lo se necesita una \u00fanica configuraci\u00f3n de Sonos." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/es.json b/homeassistant/components/sonos/translations/es.json new file mode 100644 index 00000000000..296dc3f222e --- /dev/null +++ b/homeassistant/components/sonos/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se han encontrado dispositivos Sonos en la red.", + "single_instance_allowed": "S\u00f3lo se necesita una \u00fanica configuraci\u00f3n de Sonos." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/et.json b/homeassistant/components/sonos/translations/et.json new file mode 100644 index 00000000000..0e652624ef6 --- /dev/null +++ b/homeassistant/components/sonos/translations/et.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/fr.json b/homeassistant/components/sonos/translations/fr.json new file mode 100644 index 00000000000..d15390fdcf0 --- /dev/null +++ b/homeassistant/components/sonos/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun p\u00e9riph\u00e9rique Sonos trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration de Sonos est n\u00e9cessaire." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/he.json b/homeassistant/components/sonos/translations/he.json new file mode 100644 index 00000000000..609cc3747be --- /dev/null +++ b/homeassistant/components/sonos/translations/he.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05db\u05e9\u05d9\u05e8\u05d9 Sonos \u05d1\u05e8\u05e9\u05ea.", + "single_instance_allowed": "\u05e8\u05e7 \u05ea\u05e6\u05d5\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Sonos \u05e0\u05d7\u05d5\u05e6\u05d4." + }, + "step": { + "confirm": { + "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/hr.json b/homeassistant/components/sonos/translations/hr.json new file mode 100644 index 00000000000..213ae1e4bce --- /dev/null +++ b/homeassistant/components/sonos/translations/hr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/hu.json b/homeassistant/components/sonos/translations/hu.json new file mode 100644 index 00000000000..771f48d1d9b --- /dev/null +++ b/homeassistant/components/sonos/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nem tal\u00e1lhat\u00f3k Sonos eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", + "single_instance_allowed": "Csak egyetlen Sonos konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "confirm": { + "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a Sonos-t?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/id.json b/homeassistant/components/sonos/translations/id.json new file mode 100644 index 00000000000..b5b421d2d79 --- /dev/null +++ b/homeassistant/components/sonos/translations/id.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Tidak ada perangkat Sonos yang ditemukan pada jaringan.", + "single_instance_allowed": "Hanya satu konfigurasi Sonos yang diperlukan." + }, + "step": { + "confirm": { + "description": "Apakah Anda ingin mengatur Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/it.json b/homeassistant/components/sonos/translations/it.json new file mode 100644 index 00000000000..1307f4cfe7b --- /dev/null +++ b/homeassistant/components/sonos/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Non sono presenti dispositivi Sonos in rete.", + "single_instance_allowed": "\u00c8 necessaria una sola configurazione di Sonos." + }, + "step": { + "confirm": { + "description": "Vuoi configurare Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/ko.json b/homeassistant/components/sonos/translations/ko.json new file mode 100644 index 00000000000..baa5200f264 --- /dev/null +++ b/homeassistant/components/sonos/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "Sonos \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/lb.json b/homeassistant/components/sonos/translations/lb.json new file mode 100644 index 00000000000..f2c1675a14c --- /dev/null +++ b/homeassistant/components/sonos/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng Sonos Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Sonos ass n\u00e9ideg." + }, + "step": { + "confirm": { + "description": "Soll Sonos konfigur\u00e9iert ginn?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/nl.json b/homeassistant/components/sonos/translations/nl.json new file mode 100644 index 00000000000..5efd65b1c79 --- /dev/null +++ b/homeassistant/components/sonos/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen Sonos-apparaten gevonden op het netwerk.", + "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van Sonos nodig." + }, + "step": { + "confirm": { + "description": "Wilt u Sonos instellen?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/nn.json b/homeassistant/components/sonos/translations/nn.json new file mode 100644 index 00000000000..cb08944d26b --- /dev/null +++ b/homeassistant/components/sonos/translations/nn.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Det vart ikkje funne noko Sonos-einingar p\u00e5 nettverket.", + "single_instance_allowed": "Du treng berre \u00e5 sette opp \u00e9in Sonos-konfigurasjon." + }, + "step": { + "confirm": { + "description": "Vil du sette opp Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/no.json b/homeassistant/components/sonos/translations/no.json new file mode 100644 index 00000000000..5e6560a294a --- /dev/null +++ b/homeassistant/components/sonos/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen Sonos enheter funnet p\u00e5 nettverket.", + "single_instance_allowed": "Kun en konfigurasjon av Sonos er n\u00f8dvendig." + }, + "step": { + "confirm": { + "description": "\u00d8nsker du \u00e5 sette opp Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/pl.json b/homeassistant/components/sonos/translations/pl.json new file mode 100644 index 00000000000..56a0e6d5341 --- /dev/null +++ b/homeassistant/components/sonos/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Sonos.", + "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja Sonos." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/pt-BR.json b/homeassistant/components/sonos/translations/pt-BR.json new file mode 100644 index 00000000000..77e2c75540a --- /dev/null +++ b/homeassistant/components/sonos/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo Sonos encontrado na rede.", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Sonos \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Voc\u00ea quer configurar o Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/pt.json b/homeassistant/components/sonos/translations/pt.json new file mode 100644 index 00000000000..765d5803675 --- /dev/null +++ b/homeassistant/components/sonos/translations/pt.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo Sonos encontrado na rede.", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do Sonos \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar o Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/ro.json b/homeassistant/components/sonos/translations/ro.json new file mode 100644 index 00000000000..338539bf25b --- /dev/null +++ b/homeassistant/components/sonos/translations/ro.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nu exist\u0103 dispozitive Sonos g\u0103site \u00een re\u021bea.", + "single_instance_allowed": "Este necesar\u0103 o singur\u0103 configurare a Sonos." + }, + "step": { + "confirm": { + "description": "Dori\u021bi s\u0103 configura\u021bi Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/ru.json b/homeassistant/components/sonos/translations/ru.json new file mode 100644 index 00000000000..fd5f3f6ef09 --- /dev/null +++ b/homeassistant/components/sonos/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Sonos \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/sl.json b/homeassistant/components/sonos/translations/sl.json new file mode 100644 index 00000000000..b3d4cc352f5 --- /dev/null +++ b/homeassistant/components/sonos/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V omre\u017eju ni najdenih naprav Sonos.", + "single_instance_allowed": "Potrebna je samo ena konfiguracija Sonosa." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/sv.json b/homeassistant/components/sonos/translations/sv.json new file mode 100644 index 00000000000..789c9b84a65 --- /dev/null +++ b/homeassistant/components/sonos/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga Sonos-enheter hittades i n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration av Sonos \u00e4r n\u00f6dv\u00e4ndig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera Sonos?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/th.json b/homeassistant/components/sonos/translations/th.json similarity index 100% rename from homeassistant/components/sonos/.translations/th.json rename to homeassistant/components/sonos/translations/th.json diff --git a/homeassistant/components/sonos/translations/vi.json b/homeassistant/components/sonos/translations/vi.json new file mode 100644 index 00000000000..b047e636eea --- /dev/null +++ b/homeassistant/components/sonos/translations/vi.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Kh\u00f4ng t\u00ecm th\u1ea5y thi\u1ebft b\u1ecb Sonos n\u00e0o tr\u00ean m\u1ea1ng.", + "single_instance_allowed": "Ch\u1ec9 c\u1ea7n m\u1ed9t c\u1ea5u h\u00ecnh duy nh\u1ea5t c\u1ee7a Sonos l\u00e0 \u0111\u1ee7." + }, + "step": { + "confirm": { + "description": "B\u1ea1n c\u00f3 mu\u1ed1n thi\u1ebft l\u1eadp Sonos kh\u00f4ng?", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/zh-Hans.json b/homeassistant/components/sonos/translations/zh-Hans.json new file mode 100644 index 00000000000..7ea329dc903 --- /dev/null +++ b/homeassistant/components/sonos/translations/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 Sonos \u8bbe\u5907\u3002", + "single_instance_allowed": "\u53ea\u9700\u8bbe\u7f6e\u4e00\u6b21 Sonos \u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u60a8\u60f3\u8981\u914d\u7f6e Sonos \u5417\uff1f", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sonos/translations/zh-Hant.json b/homeassistant/components/sonos/translations/zh-Hant.json new file mode 100644 index 00000000000..3b56f9ece6b --- /dev/null +++ b/homeassistant/components/sonos/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 Sonos \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 Sonos \u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Sonos\uff1f", + "title": "Sonos" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sony_projector/manifest.json b/homeassistant/components/sony_projector/manifest.json index b92d7bd204e..3e86eae6b80 100644 --- a/homeassistant/components/sony_projector/manifest.json +++ b/homeassistant/components/sony_projector/manifest.json @@ -3,6 +3,5 @@ "name": "Sony Projector", "documentation": "https://www.home-assistant.io/integrations/sony_projector", "requirements": ["pysdcp==1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/soundtouch/manifest.json b/homeassistant/components/soundtouch/manifest.json index 25c4f7d1d1c..6477983d94f 100644 --- a/homeassistant/components/soundtouch/manifest.json +++ b/homeassistant/components/soundtouch/manifest.json @@ -3,6 +3,5 @@ "name": "Bose Soundtouch", "documentation": "https://www.home-assistant.io/integrations/soundtouch", "requirements": ["libsoundtouch==0.7.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/soundtouch/services.yaml b/homeassistant/components/soundtouch/services.yaml index fd848b76b2d..79fd1d41665 100644 --- a/homeassistant/components/soundtouch/services.yaml +++ b/homeassistant/components/soundtouch/services.yaml @@ -3,34 +3,34 @@ play_everywhere: fields: master: description: Name of the master entity that will coordinate the grouping. Platform dependent. It is a shortcut for creating a multi-room zone with all devices - example: 'media_player.soundtouch_home' + example: "media_player.soundtouch_home" create_zone: description: Create a Sountouch multi-room zone. fields: master: description: Name of the master entity that will coordinate the multi-room zone. Platform dependent. - example: 'media_player.soundtouch_home' + example: "media_player.soundtouch_home" slaves: description: Name of slaves entities to add to the new zone. - example: 'media_player.soundtouch_bedroom' + example: "media_player.soundtouch_bedroom" add_zone_slave: description: Add a slave to a Sountouch multi-room zone. fields: master: description: Name of the master entity that is coordinating the multi-room zone. Platform dependent. - example: 'media_player.soundtouch_home' + example: "media_player.soundtouch_home" slaves: description: Name of slaves entities to add to the existing zone. - example: 'media_player.soundtouch_bedroom' + example: "media_player.soundtouch_bedroom" remove_zone_slave: description: Remove a slave from the Sounttouch multi-room zone. fields: master: description: Name of the master entity that is coordinating the multi-room zone. Platform dependent. - example: 'media_player.soundtouch_home' + example: "media_player.soundtouch_home" slaves: description: Name of slaves entities to remove from the existing zone. - example: 'media_player.soundtouch_bedroom' + example: "media_player.soundtouch_bedroom" diff --git a/homeassistant/components/spaceapi/manifest.json b/homeassistant/components/spaceapi/manifest.json index 10580321c29..598ea05ace6 100644 --- a/homeassistant/components/spaceapi/manifest.json +++ b/homeassistant/components/spaceapi/manifest.json @@ -2,7 +2,6 @@ "domain": "spaceapi", "name": "Space API", "documentation": "https://www.home-assistant.io/integrations/spaceapi", - "requirements": [], "dependencies": ["http"], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/spc/alarm_control_panel.py b/homeassistant/components/spc/alarm_control_panel.py index ca5d77b2a82..982c0fe2bab 100644 --- a/homeassistant/components/spc/alarm_control_panel.py +++ b/homeassistant/components/spc/alarm_control_panel.py @@ -57,8 +57,12 @@ class SpcAlarm(alarm.AlarmControlPanel): async def async_added_to_hass(self): """Call for adding new entities.""" - async_dispatcher_connect( - self.hass, SIGNAL_UPDATE_ALARM.format(self._area.id), self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_UPDATE_ALARM.format(self._area.id), + self._update_callback, + ) ) @callback diff --git a/homeassistant/components/spc/binary_sensor.py b/homeassistant/components/spc/binary_sensor.py index 34689c4dccf..626e30849df 100644 --- a/homeassistant/components/spc/binary_sensor.py +++ b/homeassistant/components/spc/binary_sensor.py @@ -1,7 +1,7 @@ """Support for Vanderbilt (formerly Siemens) SPC alarm systems.""" import logging -from pyspcwebgw.const import ZoneInput +from pyspcwebgw.const import ZoneInput, ZoneType from homeassistant.components.binary_sensor import BinarySensorDevice from homeassistant.core import callback @@ -13,8 +13,6 @@ _LOGGER = logging.getLogger(__name__) def _get_device_class(zone_type): - from pyspcwebgw.const import ZoneType - return { ZoneType.ALARM: "motion", ZoneType.ENTRY_EXIT: "opening", @@ -46,8 +44,12 @@ class SpcBinarySensor(BinarySensorDevice): async def async_added_to_hass(self): """Call for adding new entities.""" - async_dispatcher_connect( - self.hass, SIGNAL_UPDATE_SENSOR.format(self._zone.id), self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_UPDATE_SENSOR.format(self._zone.id), + self._update_callback, + ) ) @callback diff --git a/homeassistant/components/spc/manifest.json b/homeassistant/components/spc/manifest.json index 99e6bc48012..63fb359371f 100644 --- a/homeassistant/components/spc/manifest.json +++ b/homeassistant/components/spc/manifest.json @@ -3,6 +3,5 @@ "name": "Vanderbilt SPC", "documentation": "https://www.home-assistant.io/integrations/spc", "requirements": ["pyspcwebgw==0.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/speedtestdotnet/manifest.json b/homeassistant/components/speedtestdotnet/manifest.json index c3c76101ce7..1ba5f418fc3 100644 --- a/homeassistant/components/speedtestdotnet/manifest.json +++ b/homeassistant/components/speedtestdotnet/manifest.json @@ -3,6 +3,5 @@ "name": "Speedtest.net", "documentation": "https://www.home-assistant.io/integrations/speedtestdotnet", "requirements": ["speedtest-cli==2.1.2"], - "dependencies": [], "codeowners": ["@rohankapoorcom"] } diff --git a/homeassistant/components/speedtestdotnet/sensor.py b/homeassistant/components/speedtestdotnet/sensor.py index c1f51ab269a..41db6c26930 100644 --- a/homeassistant/components/speedtestdotnet/sensor.py +++ b/homeassistant/components/speedtestdotnet/sensor.py @@ -91,8 +91,10 @@ class SpeedtestSensor(RestoreEntity): return self._state = state.state - async_dispatcher_connect( - self.hass, DATA_UPDATED, self._schedule_immediate_update + self.async_on_remove( + async_dispatcher_connect( + self.hass, DATA_UPDATED, self._schedule_immediate_update + ) ) def update(self): diff --git a/homeassistant/components/speedtestdotnet/services.yaml b/homeassistant/components/speedtestdotnet/services.yaml index db813affe76..299d457350d 100644 --- a/homeassistant/components/speedtestdotnet/services.yaml +++ b/homeassistant/components/speedtestdotnet/services.yaml @@ -1,2 +1,2 @@ speedtest: - description: Immediately take a speedest with Speedtest.net \ No newline at end of file + description: Immediately take a speedest with Speedtest.net diff --git a/homeassistant/components/spider/manifest.json b/homeassistant/components/spider/manifest.json index c61b4186847..8fa108f24f7 100644 --- a/homeassistant/components/spider/manifest.json +++ b/homeassistant/components/spider/manifest.json @@ -3,6 +3,5 @@ "name": "Itho Daalderop Spider", "documentation": "https://www.home-assistant.io/integrations/spider", "requirements": ["spiderpy==1.3.1"], - "dependencies": [], "codeowners": ["@peternijssen"] } diff --git a/homeassistant/components/splunk/__init__.py b/homeassistant/components/splunk/__init__.py index 1d5d39416a3..bbff510db14 100644 --- a/homeassistant/components/splunk/__init__.py +++ b/homeassistant/components/splunk/__init__.py @@ -70,7 +70,7 @@ def setup(hass, config): host = conf.get(CONF_HOST) port = conf.get(CONF_PORT) token = conf.get(CONF_TOKEN) - use_ssl = conf.get(CONF_SSL) + use_ssl = conf[CONF_SSL] verify_ssl = conf.get(CONF_VERIFY_SSL) name = conf.get(CONF_NAME) entity_filter = conf[CONF_FILTER] @@ -80,8 +80,8 @@ def setup(hass, config): else: uri_scheme = "http://" - event_collector = "{}{}:{}/services/collector/event".format(uri_scheme, host, port) - headers = {AUTHORIZATION: "Splunk {}".format(token)} + event_collector = f"{uri_scheme}{host}:{port}/services/collector/event" + headers = {AUTHORIZATION: f"Splunk {token}"} def splunk_event_listener(event): """Listen for new messages on the bus and sends them to Splunk.""" diff --git a/homeassistant/components/splunk/manifest.json b/homeassistant/components/splunk/manifest.json index a6972e8881d..337458b4c3f 100644 --- a/homeassistant/components/splunk/manifest.json +++ b/homeassistant/components/splunk/manifest.json @@ -2,7 +2,5 @@ "domain": "splunk", "name": "Splunk", "documentation": "https://www.home-assistant.io/integrations/splunk", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/spotcrime/manifest.json b/homeassistant/components/spotcrime/manifest.json index 6fa2b10544d..fd0184f1b21 100644 --- a/homeassistant/components/spotcrime/manifest.json +++ b/homeassistant/components/spotcrime/manifest.json @@ -3,6 +3,5 @@ "name": "Spot Crime", "documentation": "https://www.home-assistant.io/integrations/spotcrime", "requirements": ["spotcrime==1.0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/spotify/.translations/ca.json b/homeassistant/components/spotify/.translations/ca.json deleted file mode 100644 index fa0fa734353..00000000000 --- a/homeassistant/components/spotify/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Spotify.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "missing_configuration": "La integraci\u00f3 Spotify no est\u00e0 configurada. Mira'n la documentaci\u00f3." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Spotify." - }, - "step": { - "pick_implementation": { - "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/cs.json b/homeassistant/components/spotify/.translations/cs.json deleted file mode 100644 index bcb73eb66b0..00000000000 --- a/homeassistant/components/spotify/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "M\u016f\u017eete nakonfigurovat pouze jeden \u00fa\u010det Spotify.", - "authorize_url_timeout": "\u010casov\u00fd limit autoriza\u010dn\u00edho URL vypr\u0161el", - "missing_configuration": "Integrace Spotify nen\u00ed nakonfigurov\u00e1na. Postupujte podle n\u00e1vodu." - }, - "create_entry": { - "default": "\u00dasp\u011b\u0161n\u011b ov\u011b\u0159eno pomoc\u00ed Spotify." - }, - "step": { - "pick_implementation": { - "title": "Vyberte metodu ov\u011b\u0159en\u00ed" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/da.json b/homeassistant/components/spotify/.translations/da.json deleted file mode 100644 index f4f4950317a..00000000000 --- a/homeassistant/components/spotify/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan kun konfigurere en enkelt Spotify-konto.", - "authorize_url_timeout": "Timeout ved generering af godkendelses-url.", - "missing_configuration": "Spotify-integrationen er ikke konfigureret. F\u00f8lg venligst dokumentationen." - }, - "create_entry": { - "default": "Godkendt med Spotify." - }, - "step": { - "pick_implementation": { - "title": "V\u00e6lg godkendelsesmetode" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/de.json b/homeassistant/components/spotify/.translations/de.json deleted file mode 100644 index 49670e77285..00000000000 --- a/homeassistant/components/spotify/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Sie k\u00f6nnen nur ein Spotify-Konto konfigurieren.", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", - "missing_configuration": "Die Spotify-Integration ist nicht konfiguriert. Bitte folgen Sie der Dokumentation." - }, - "create_entry": { - "default": "Erfolgreich mit Spotify authentifiziert." - }, - "step": { - "pick_implementation": { - "title": "Authentifizierungsmethode ausw\u00e4hlen" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/en.json b/homeassistant/components/spotify/.translations/en.json deleted file mode 100644 index b26b2b6daf5..00000000000 --- a/homeassistant/components/spotify/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "You can only configure one Spotify account.", - "authorize_url_timeout": "Timeout generating authorize url.", - "missing_configuration": "The Spotify integration is not configured. Please follow the documentation." - }, - "create_entry": { - "default": "Successfully authenticated with Spotify." - }, - "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/es.json b/homeassistant/components/spotify/.translations/es.json deleted file mode 100644 index 1e8a90246eb..00000000000 --- a/homeassistant/components/spotify/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "S\u00f3lo puedes configurar una cuenta de Spotify.", - "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", - "missing_configuration": "La integraci\u00f3n de Spotify no est\u00e1 configurada. Por favor, siga la documentaci\u00f3n." - }, - "create_entry": { - "default": "Autentificado con \u00e9xito con Spotify." - }, - "step": { - "pick_implementation": { - "title": "Elija el m\u00e9todo de autenticaci\u00f3n" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/fr.json b/homeassistant/components/spotify/.translations/fr.json deleted file mode 100644 index 9c233b9b947..00000000000 --- a/homeassistant/components/spotify/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Vous ne pouvez configurer qu'un seul compte Spotify.", - "authorize_url_timeout": "D\u00e9lai d'expiration g\u00e9n\u00e9rant une URL d'autorisation.", - "missing_configuration": "L'int\u00e9gration Spotify n'est pas configur\u00e9e. Veuillez suivre la documentation." - }, - "create_entry": { - "default": "Authentification r\u00e9ussie avec Spotify." - }, - "step": { - "pick_implementation": { - "title": "Choisissez la m\u00e9thode d'authentification" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/hu.json b/homeassistant/components/spotify/.translations/hu.json deleted file mode 100644 index 414c82751b5..00000000000 --- a/homeassistant/components/spotify/.translations/hu.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Csak egy Spotify-fi\u00f3kot konfigur\u00e1lhat.", - "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n.", - "missing_configuration": "A Spotify integr\u00e1ci\u00f3 nincs konfigur\u00e1lva. K\u00e9rj\u00fck, k\u00f6vesse a dokument\u00e1ci\u00f3t." - }, - "create_entry": { - "default": "A Spotify sikeresen hiteles\u00edtett." - }, - "step": { - "pick_implementation": { - "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/it.json b/homeassistant/components/spotify/.translations/it.json deleted file mode 100644 index ffe78aa0c02..00000000000 --- a/homeassistant/components/spotify/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 possibile configurare un solo account di Spotify.", - "authorize_url_timeout": "Tempo scaduto nel generare l'URL di autorizzazione", - "missing_configuration": "L'integrazione di Spotify non \u00e8 configurata. Si prega di seguire la documentazione." - }, - "create_entry": { - "default": "Autenticato con successo con Spotify." - }, - "step": { - "pick_implementation": { - "title": "Scegli il metodo di autenticazione" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/ko.json b/homeassistant/components/spotify/.translations/ko.json deleted file mode 100644 index af151ecc2d0..00000000000 --- a/homeassistant/components/spotify/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "create_entry": { - "default": "Spotify \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "pick_implementation": { - "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/lb.json b/homeassistant/components/spotify/.translations/lb.json deleted file mode 100644 index b7d555cbce1..00000000000 --- a/homeassistant/components/spotify/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Spotify Kont konfigur\u00e9ieren.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "missing_configuration": "Spotifiy Integratioun ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mat Spotify authentifiz\u00e9iert." - }, - "step": { - "pick_implementation": { - "title": "Wielt Authentifikatiouns Method aus" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/lv.json b/homeassistant/components/spotify/.translations/lv.json deleted file mode 100644 index 2721c5fdffa..00000000000 --- a/homeassistant/components/spotify/.translations/lv.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/nl.json b/homeassistant/components/spotify/.translations/nl.json deleted file mode 100644 index abe59854044..00000000000 --- a/homeassistant/components/spotify/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "U kunt slechts \u00e9\u00e9n Spotify-account configureren.", - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "missing_configuration": "De Spotify integratie is niet geconfigureerd. Gelieve de documentatie te volgen." - }, - "create_entry": { - "default": "Succesvol geauthenticeerd met Spotify." - }, - "step": { - "pick_implementation": { - "title": "Kies Authenticatiemethode" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/no.json b/homeassistant/components/spotify/.translations/no.json deleted file mode 100644 index 7a545d32bad..00000000000 --- a/homeassistant/components/spotify/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan bare konfigurere en Spotify-konto.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "missing_configuration": "Spotify-integrasjonen er ikke konfigurert. F\u00f8lg dokumentasjonen." - }, - "create_entry": { - "default": "Vellykket autentisering med Spotify." - }, - "step": { - "pick_implementation": { - "title": "Velg autentiseringsmetode" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/pl.json b/homeassistant/components/spotify/.translations/pl.json deleted file mode 100644 index 1f2e1213882..00000000000 --- a/homeassistant/components/spotify/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Spotify.", - "authorize_url_timeout": "Min\u0105\u0142 limit czasu generowania url autoryzacji.", - "missing_configuration": "Integracja ze Spotify nie jest skonfigurowana. Post\u0119puj zgodnie z dokumentacj\u0105." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Spotify" - }, - "step": { - "pick_implementation": { - "title": "Wybierz metod\u0119 uwierzytelnienia" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/ru.json b/homeassistant/components/spotify/.translations/ru.json deleted file mode 100644 index b19f226d8bb..00000000000 --- a/homeassistant/components/spotify/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "missing_configuration": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Spotify \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "step": { - "pick_implementation": { - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/sl.json b/homeassistant/components/spotify/.translations/sl.json deleted file mode 100644 index 6ab0b0a40a6..00000000000 --- a/homeassistant/components/spotify/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Konfigurirate lahko samo en ra\u010dun Spotify.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "missing_configuration": "Integracija Spotify ni konfigurirana. Prosimo, upo\u0161tevajte dokumentacijo." - }, - "create_entry": { - "default": "Uspe\u0161no overjena s Spotify." - }, - "step": { - "pick_implementation": { - "title": "Izberite na\u010din preverjanja pristnosti" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/sv.json b/homeassistant/components/spotify/.translations/sv.json deleted file mode 100644 index 5c720a1f26e..00000000000 --- a/homeassistant/components/spotify/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Du kan endast konfigurera ett Spotify-konto.", - "authorize_url_timeout": "Skapandet av en auktoriseringsadress \u00f6verskred tidsgr\u00e4nsen.", - "missing_configuration": "Spotify-integrationen \u00e4r inte konfigurerad. V\u00e4nligen f\u00f6lj dokumentationen." - }, - "create_entry": { - "default": "Lyckad autentisering med Spotify." - }, - "step": { - "pick_implementation": { - "title": "V\u00e4lj autentiseringsmetod." - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/tr.json b/homeassistant/components/spotify/.translations/tr.json deleted file mode 100644 index 88755b800f4..00000000000 --- a/homeassistant/components/spotify/.translations/tr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Yaln\u0131zca bir Spotify hesab\u0131 ayarlayabilirsin.", - "authorize_url_timeout": "Kimlik do\u011frulama URL'sini olu\u015ftururken zaman a\u015f\u0131m\u0131 ger\u00e7ekle\u015fti.", - "missing_configuration": "Spotify entegrasyonu ayarlanmam\u0131\u015f. L\u00fctfen dok\u00fcmentasyonu takip et." - }, - "create_entry": { - "default": "Spotify ile kimlik ba\u015far\u0131yla do\u011fruland\u0131." - }, - "step": { - "pick_implementation": { - "title": "Kimlik Do\u011frulama Y\u00f6ntemini Se\u00e7" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/.translations/zh-Hant.json b/homeassistant/components/spotify/.translations/zh-Hant.json deleted file mode 100644 index c4ba3d46343..00000000000 --- a/homeassistant/components/spotify/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Spotify \u5e33\u865f\u3002", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642\u3002", - "missing_configuration": "Spotify \u6574\u5408\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Spotify\u3002" - }, - "step": { - "pick_implementation": { - "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" - } - }, - "title": "Spotify" - } -} \ No newline at end of file diff --git a/homeassistant/components/spotify/manifest.json b/homeassistant/components/spotify/manifest.json index f246c657708..bbbfb75a536 100644 --- a/homeassistant/components/spotify/manifest.json +++ b/homeassistant/components/spotify/manifest.json @@ -2,7 +2,7 @@ "domain": "spotify", "name": "Spotify", "documentation": "https://www.home-assistant.io/integrations/spotify", - "requirements": ["spotipy==2.10.0"], + "requirements": ["spotipy==2.11.1"], "zeroconf": ["_spotify-connect._tcp.local."], "dependencies": ["http"], "codeowners": ["@frenck"], diff --git a/homeassistant/components/spotify/strings.json b/homeassistant/components/spotify/strings.json index 316fbd946db..c7831e31ca4 100644 --- a/homeassistant/components/spotify/strings.json +++ b/homeassistant/components/spotify/strings.json @@ -1,18 +1,13 @@ { "config": { "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - } + "pick_implementation": { "title": "Pick Authentication Method" } }, "abort": { "already_setup": "You can only configure one Spotify account.", "authorize_url_timeout": "Timeout generating authorize url.", "missing_configuration": "The Spotify integration is not configured. Please follow the documentation." }, - "create_entry": { - "default": "Successfully authenticated with Spotify." - }, - "title": "Spotify" + "create_entry": { "default": "Successfully authenticated with Spotify." } } } diff --git a/homeassistant/components/spotify/translations/ca.json b/homeassistant/components/spotify/translations/ca.json new file mode 100644 index 00000000000..887d3b7236c --- /dev/null +++ b/homeassistant/components/spotify/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Spotify.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "missing_configuration": "La integraci\u00f3 Spotify no est\u00e0 configurada. Mira'n la documentaci\u00f3." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Spotify." + }, + "step": { + "pick_implementation": { + "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/cs.json b/homeassistant/components/spotify/translations/cs.json new file mode 100644 index 00000000000..10c58c119aa --- /dev/null +++ b/homeassistant/components/spotify/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "M\u016f\u017eete nakonfigurovat pouze jeden \u00fa\u010det Spotify.", + "authorize_url_timeout": "\u010casov\u00fd limit autoriza\u010dn\u00edho URL vypr\u0161el", + "missing_configuration": "Integrace Spotify nen\u00ed nakonfigurov\u00e1na. Postupujte podle n\u00e1vodu." + }, + "create_entry": { + "default": "\u00dasp\u011b\u0161n\u011b ov\u011b\u0159eno pomoc\u00ed Spotify." + }, + "step": { + "pick_implementation": { + "title": "Vyberte metodu ov\u011b\u0159en\u00ed" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/da.json b/homeassistant/components/spotify/translations/da.json new file mode 100644 index 00000000000..1b6611c4cb6 --- /dev/null +++ b/homeassistant/components/spotify/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan kun konfigurere en enkelt Spotify-konto.", + "authorize_url_timeout": "Timeout ved generering af godkendelses-url.", + "missing_configuration": "Spotify-integrationen er ikke konfigureret. F\u00f8lg venligst dokumentationen." + }, + "create_entry": { + "default": "Godkendt med Spotify." + }, + "step": { + "pick_implementation": { + "title": "V\u00e6lg godkendelsesmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/de.json b/homeassistant/components/spotify/translations/de.json new file mode 100644 index 00000000000..ff17a3ada82 --- /dev/null +++ b/homeassistant/components/spotify/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Sie k\u00f6nnen nur ein Spotify-Konto konfigurieren.", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", + "missing_configuration": "Die Spotify-Integration ist nicht konfiguriert. Bitte folgen Sie der Dokumentation." + }, + "create_entry": { + "default": "Erfolgreich mit Spotify authentifiziert." + }, + "step": { + "pick_implementation": { + "title": "Authentifizierungsmethode ausw\u00e4hlen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/en.json b/homeassistant/components/spotify/translations/en.json new file mode 100644 index 00000000000..c869d06cab3 --- /dev/null +++ b/homeassistant/components/spotify/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "You can only configure one Spotify account.", + "authorize_url_timeout": "Timeout generating authorize url.", + "missing_configuration": "The Spotify integration is not configured. Please follow the documentation." + }, + "create_entry": { + "default": "Successfully authenticated with Spotify." + }, + "step": { + "pick_implementation": { + "title": "Pick Authentication Method" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/es.json b/homeassistant/components/spotify/translations/es.json new file mode 100644 index 00000000000..78b71486b71 --- /dev/null +++ b/homeassistant/components/spotify/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "S\u00f3lo puedes configurar una cuenta de Spotify.", + "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", + "missing_configuration": "La integraci\u00f3n de Spotify no est\u00e1 configurada. Por favor, siga la documentaci\u00f3n." + }, + "create_entry": { + "default": "Autentificado con \u00e9xito con Spotify." + }, + "step": { + "pick_implementation": { + "title": "Elija el m\u00e9todo de autenticaci\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/fr.json b/homeassistant/components/spotify/translations/fr.json new file mode 100644 index 00000000000..d4adbe155fe --- /dev/null +++ b/homeassistant/components/spotify/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Vous ne pouvez configurer qu'un seul compte Spotify.", + "authorize_url_timeout": "D\u00e9lai d'expiration g\u00e9n\u00e9rant une URL d'autorisation.", + "missing_configuration": "L'int\u00e9gration Spotify n'est pas configur\u00e9e. Veuillez suivre la documentation." + }, + "create_entry": { + "default": "Authentification r\u00e9ussie avec Spotify." + }, + "step": { + "pick_implementation": { + "title": "Choisissez la m\u00e9thode d'authentification" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/hu.json b/homeassistant/components/spotify/translations/hu.json new file mode 100644 index 00000000000..48ebf35a97f --- /dev/null +++ b/homeassistant/components/spotify/translations/hu.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Csak egy Spotify-fi\u00f3kot konfigur\u00e1lhat.", + "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n.", + "missing_configuration": "A Spotify integr\u00e1ci\u00f3 nincs konfigur\u00e1lva. K\u00e9rj\u00fck, k\u00f6vesse a dokument\u00e1ci\u00f3t." + }, + "create_entry": { + "default": "A Spotify sikeresen hiteles\u00edtett." + }, + "step": { + "pick_implementation": { + "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/it.json b/homeassistant/components/spotify/translations/it.json new file mode 100644 index 00000000000..c3bfaa47f32 --- /dev/null +++ b/homeassistant/components/spotify/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 possibile configurare un solo account di Spotify.", + "authorize_url_timeout": "Tempo scaduto nel generare l'URL di autorizzazione", + "missing_configuration": "L'integrazione di Spotify non \u00e8 configurata. Si prega di seguire la documentazione." + }, + "create_entry": { + "default": "Autenticato con successo con Spotify." + }, + "step": { + "pick_implementation": { + "title": "Scegli il metodo di autenticazione" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/ko.json b/homeassistant/components/spotify/translations/ko.json new file mode 100644 index 00000000000..4892d7a45c0 --- /dev/null +++ b/homeassistant/components/spotify/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "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." + }, + "create_entry": { + "default": "Spotify \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "pick_implementation": { + "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/lb.json b/homeassistant/components/spotify/translations/lb.json new file mode 100644 index 00000000000..fedaff526a6 --- /dev/null +++ b/homeassistant/components/spotify/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Dir k\u00ebnnt n\u00ebmmen een eenzegen Spotify Kont konfigur\u00e9ieren.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "missing_configuration": "Spotifiy Integratioun ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Spotify authentifiz\u00e9iert." + }, + "step": { + "pick_implementation": { + "title": "Wielt Authentifikatiouns Method aus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/lv.json b/homeassistant/components/spotify/translations/lv.json new file mode 100644 index 00000000000..01b2b7a38bd --- /dev/null +++ b/homeassistant/components/spotify/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Spotify" +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/nl.json b/homeassistant/components/spotify/translations/nl.json new file mode 100644 index 00000000000..82b25512001 --- /dev/null +++ b/homeassistant/components/spotify/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "U kunt slechts \u00e9\u00e9n Spotify-account configureren.", + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "missing_configuration": "De Spotify integratie is niet geconfigureerd. Gelieve de documentatie te volgen." + }, + "create_entry": { + "default": "Succesvol geauthenticeerd met Spotify." + }, + "step": { + "pick_implementation": { + "title": "Kies Authenticatiemethode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/no.json b/homeassistant/components/spotify/translations/no.json new file mode 100644 index 00000000000..35b3e4c45f5 --- /dev/null +++ b/homeassistant/components/spotify/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan bare konfigurere en Spotify-konto.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "missing_configuration": "Spotify-integrasjonen er ikke konfigurert. F\u00f8lg dokumentasjonen." + }, + "create_entry": { + "default": "Vellykket autentisering med Spotify." + }, + "step": { + "pick_implementation": { + "title": "Velg autentiseringsmetode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/pl.json b/homeassistant/components/spotify/translations/pl.json new file mode 100644 index 00000000000..ca93393c779 --- /dev/null +++ b/homeassistant/components/spotify/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Mo\u017cesz skonfigurowa\u0107 tylko jedno konto Spotify.", + "authorize_url_timeout": "Min\u0105\u0142 limit czasu generowania url autoryzacji.", + "missing_configuration": "Integracja ze Spotify nie jest skonfigurowana. Post\u0119puj zgodnie z dokumentacj\u0105." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Spotify" + }, + "step": { + "pick_implementation": { + "title": "Wybierz metod\u0119 uwierzytelnienia" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/ru.json b/homeassistant/components/spotify/translations/ru.json new file mode 100644 index 00000000000..aa14f158300 --- /dev/null +++ b/homeassistant/components/spotify/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "missing_configuration": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Spotify \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "step": { + "pick_implementation": { + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/sl.json b/homeassistant/components/spotify/translations/sl.json new file mode 100644 index 00000000000..5a996e47547 --- /dev/null +++ b/homeassistant/components/spotify/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Konfigurirate lahko samo en ra\u010dun Spotify.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "missing_configuration": "Integracija Spotify ni konfigurirana. Prosimo, upo\u0161tevajte dokumentacijo." + }, + "create_entry": { + "default": "Uspe\u0161no overjena s Spotify." + }, + "step": { + "pick_implementation": { + "title": "Izberite na\u010din preverjanja pristnosti" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/sv.json b/homeassistant/components/spotify/translations/sv.json new file mode 100644 index 00000000000..25daba13b87 --- /dev/null +++ b/homeassistant/components/spotify/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Du kan endast konfigurera ett Spotify-konto.", + "authorize_url_timeout": "Skapandet av en auktoriseringsadress \u00f6verskred tidsgr\u00e4nsen.", + "missing_configuration": "Spotify-integrationen \u00e4r inte konfigurerad. V\u00e4nligen f\u00f6lj dokumentationen." + }, + "create_entry": { + "default": "Lyckad autentisering med Spotify." + }, + "step": { + "pick_implementation": { + "title": "V\u00e4lj autentiseringsmetod." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/tr.json b/homeassistant/components/spotify/translations/tr.json new file mode 100644 index 00000000000..29641464f57 --- /dev/null +++ b/homeassistant/components/spotify/translations/tr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "Yaln\u0131zca bir Spotify hesab\u0131 ayarlayabilirsin.", + "authorize_url_timeout": "Kimlik do\u011frulama URL'sini olu\u015ftururken zaman a\u015f\u0131m\u0131 ger\u00e7ekle\u015fti.", + "missing_configuration": "Spotify entegrasyonu ayarlanmam\u0131\u015f. L\u00fctfen dok\u00fcmentasyonu takip et." + }, + "create_entry": { + "default": "Spotify ile kimlik ba\u015far\u0131yla do\u011fruland\u0131." + }, + "step": { + "pick_implementation": { + "title": "Kimlik Do\u011frulama Y\u00f6ntemini Se\u00e7" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/spotify/translations/zh-Hant.json b/homeassistant/components/spotify/translations/zh-Hant.json new file mode 100644 index 00000000000..33efd72a6d8 --- /dev/null +++ b/homeassistant/components/spotify/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44 Spotify \u5e33\u865f\u3002", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642\u3002", + "missing_configuration": "Spotify \u6574\u5408\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Spotify\u3002" + }, + "step": { + "pick_implementation": { + "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sql/manifest.json b/homeassistant/components/sql/manifest.json index 9d6e7f7b62b..9bfc5b35288 100644 --- a/homeassistant/components/sql/manifest.json +++ b/homeassistant/components/sql/manifest.json @@ -2,7 +2,6 @@ "domain": "sql", "name": "SQL", "documentation": "https://www.home-assistant.io/integrations/sql", - "requirements": ["sqlalchemy==1.3.15"], - "dependencies": [], + "requirements": ["sqlalchemy==1.3.16"], "codeowners": ["@dgomes"] } diff --git a/homeassistant/components/sql/sensor.py b/homeassistant/components/sql/sensor.py index 52899c7da80..f19941ed043 100644 --- a/homeassistant/components/sql/sensor.py +++ b/homeassistant/components/sql/sensor.py @@ -44,7 +44,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the SQL sensor platform.""" - db_url = config.get(CONF_DB_URL, None) + db_url = config.get(CONF_DB_URL) if not db_url: db_url = DEFAULT_URL.format(hass_config_path=hass.config.path(DEFAULT_DB_FILE)) diff --git a/homeassistant/components/squeezebox/manifest.json b/homeassistant/components/squeezebox/manifest.json index b5297db96ce..bbd32e9eefe 100644 --- a/homeassistant/components/squeezebox/manifest.json +++ b/homeassistant/components/squeezebox/manifest.json @@ -2,7 +2,5 @@ "domain": "squeezebox", "name": "Logitech Squeezebox", "documentation": "https://www.home-assistant.io/integrations/squeezebox", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/squeezebox/media_player.py b/homeassistant/components/squeezebox/media_player.py index 0610d4d9cf2..57305a3b4c0 100644 --- a/homeassistant/components/squeezebox/media_player.py +++ b/homeassistant/components/squeezebox/media_player.py @@ -33,6 +33,7 @@ from homeassistant.const import ( CONF_PASSWORD, CONF_PORT, CONF_USERNAME, + HTTP_OK, STATE_IDLE, STATE_OFF, STATE_PAUSED, @@ -223,7 +224,7 @@ class LogitechMediaServer: with async_timeout.timeout(TIMEOUT): response = await websession.post(url, data=data, auth=auth) - if response.status != 200: + if response.status != HTTP_OK: _LOGGER.error( "Query failed, response code: %s Full message: %s", response.status, diff --git a/homeassistant/components/squeezebox/services.yaml b/homeassistant/components/squeezebox/services.yaml index 0c81c369e73..b1768949258 100644 --- a/homeassistant/components/squeezebox/services.yaml +++ b/homeassistant/components/squeezebox/services.yaml @@ -3,10 +3,10 @@ call_method: fields: entity_id: description: Name(s) of the Squeezebox entities where to run the API method. - example: 'media_player.squeezebox_radio' + example: "media_player.squeezebox_radio" command: description: Command to pass to Logitech Media Server (p0 in the CLI documentation). - example: 'playlist' + example: "playlist" parameters: description: Array of additional parameters to pass to Logitech Media Server (p1, ..., pN in the CLI documentation). example: ["loadtracks", "album.titlesearch="] diff --git a/homeassistant/components/ssdp/manifest.json b/homeassistant/components/ssdp/manifest.json index 77e212a0833..a2683346b63 100644 --- a/homeassistant/components/ssdp/manifest.json +++ b/homeassistant/components/ssdp/manifest.json @@ -3,6 +3,5 @@ "name": "Simple Service Discovery Protocol (SSDP)", "documentation": "https://www.home-assistant.io/integrations/ssdp", "requirements": ["defusedxml==0.6.0", "netdisco==2.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/starline/.translations/bg.json b/homeassistant/components/starline/.translations/bg.json deleted file mode 100644 index 702c061c629..00000000000 --- a/homeassistant/components/starline/.translations/bg.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e ID \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0442\u0430\u0439\u043d\u0430", - "error_auth_mfa": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043a\u043e\u0434", - "error_auth_user": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430" - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435", - "app_secret": "\u0422\u0430\u0439\u043d\u0430" - }, - "description": "\u0418\u0414 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0442\u0430\u0435\u043d \u043a\u043e\u0434 \u043e\u0442 StarLine \u0430\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a", - "title": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e" - }, - "auth_captcha": { - "data": { - "captcha_code": "\u041a\u043e\u0434 \u043e\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS \u043a\u043e\u0434" - }, - "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043a\u043e\u0434\u0430, \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435\u043d \u043d\u043e\u043c\u0435\u0440 {phone_number}", - "title": "\u0414\u0432\u0443\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f" - }, - "auth_user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "description": "\u0418\u043c\u0435\u0439\u043b \u0438 \u043f\u0430\u0440\u043e\u043b\u0430 \u0437\u0430 \u0430\u043a\u0430\u0443\u043d\u0442 \u0432 StarLine", - "title": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/ca.json b/homeassistant/components/starline/.translations/ca.json deleted file mode 100644 index 72cf1a66760..00000000000 --- a/homeassistant/components/starline/.translations/ca.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "ID d'aplicaci\u00f3 o secret incorrectes", - "error_auth_mfa": "Codi incorrecte", - "error_auth_user": "Nom d'usuari o contrasenya incorrectes" - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID d'aplicaci\u00f3", - "app_secret": "Secret" - }, - "description": "ID d'aplicaci\u00f3 i codi secret de compte de desenvolupador de StarLine", - "title": "Credencials d'aplicaci\u00f3" - }, - "auth_captcha": { - "data": { - "captcha_code": "Codi des de imatge" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "Codi SMS" - }, - "description": "Introdueix el codi rebut al n\u00famero {phone_number}", - "title": "Verificaci\u00f3 en dos passos" - }, - "auth_user": { - "data": { - "password": "Contrasenya", - "username": "Nom d'usuari" - }, - "description": "Correu electr\u00f2nic i contrasenya del compte StarLine", - "title": "Credencials d\u2019usuari" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/da.json b/homeassistant/components/starline/.translations/da.json deleted file mode 100644 index 2a8cbcf1270..00000000000 --- a/homeassistant/components/starline/.translations/da.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Forkert applikations-id eller hemmelighed", - "error_auth_mfa": "Forkert kode", - "error_auth_user": "Forkert brugernavn eller adgangskode" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App-id", - "app_secret": "Hemmelighed" - }, - "description": "Applikations-id og hemmelig kode fra StarLine-udviklerkonto ", - "title": "Applikations-legitimationsoplysninger" - }, - "auth_captcha": { - "data": { - "captcha_code": "Kode fra billede" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS-kode" - }, - "description": "Indtast koden, der er sendt til telefon {phone_number}", - "title": "Tofaktor-godkendelse" - }, - "auth_user": { - "data": { - "password": "Adgangskode", - "username": "Brugernavn" - }, - "description": "StarLine-konto email og adgangskode", - "title": "Brugeroplysninger" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/de.json b/homeassistant/components/starline/.translations/de.json deleted file mode 100644 index 28332124f9c..00000000000 --- a/homeassistant/components/starline/.translations/de.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Falsche Anwendungs-ID oder Secret", - "error_auth_mfa": "Ung\u00fcltiger Code", - "error_auth_user": "Falscher Benutzername oder falsches Passwort" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App-ID", - "app_secret": "Geheimnis" - }, - "description": "Anwendungs-ID und Geheimcode aus dem StarLine-Entwicklerkonto", - "title": "Anmeldeinformationen der Anwendung" - }, - "auth_captcha": { - "data": { - "captcha_code": "Code aus dem Bild" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS Code" - }, - "description": "Gib den an das Telefon gesendeten Code ein {Telefon_Nummer}", - "title": "2-Faktor-Authentifizierung" - }, - "auth_user": { - "data": { - "password": "Passwort", - "username": "Benutzername" - }, - "description": "StarLine Konto E-Mail und Passwort", - "title": "Anmeldeinformationen" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/en.json b/homeassistant/components/starline/.translations/en.json deleted file mode 100644 index afe8f8c732b..00000000000 --- a/homeassistant/components/starline/.translations/en.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Incorrect application id or secret", - "error_auth_mfa": "Incorrect code", - "error_auth_user": "Incorrect username or password" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App ID", - "app_secret": "Secret" - }, - "description": "Application ID and secret code from StarLine developer account", - "title": "Application credentials" - }, - "auth_captcha": { - "data": { - "captcha_code": "Code from image" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS code" - }, - "description": "Enter the code sent to phone {phone_number}", - "title": "Two-factor authorization" - }, - "auth_user": { - "data": { - "password": "Password", - "username": "Username" - }, - "description": "StarLine account email and password", - "title": "User credentials" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/es.json b/homeassistant/components/starline/.translations/es.json deleted file mode 100644 index bc881ced6a2..00000000000 --- a/homeassistant/components/starline/.translations/es.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Id de aplicaci\u00f3n o secreto incorrectos", - "error_auth_mfa": "C\u00f3digo incorrecto", - "error_auth_user": "Nombre de usuario o contrase\u00f1a incorrectos" - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID de la aplicaci\u00f3n", - "app_secret": "Secreto" - }, - "description": "ID de la aplicaci\u00f3n y c\u00f3digo secreto de la cuenta de desarrollador de StarLine", - "title": "Credenciales de la aplicaci\u00f3n" - }, - "auth_captcha": { - "data": { - "captcha_code": "C\u00f3digo de la imagen" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "C\u00f3digo SMS" - }, - "description": "Introduce el c\u00f3digo enviado al tel\u00e9fono {phone_number}", - "title": "Autorizaci\u00f3n de dos factores" - }, - "auth_user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Usuario" - }, - "description": "Correo electr\u00f3nico y contrase\u00f1a de la cuenta StarLine", - "title": "Credenciales de usuario" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/fr.json b/homeassistant/components/starline/.translations/fr.json deleted file mode 100644 index d15f5c37edf..00000000000 --- a/homeassistant/components/starline/.translations/fr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "ID applicatif ou code secret incorrect", - "error_auth_mfa": "code incorrect", - "error_auth_user": "identifiant ou mot de passe incorrect" - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID de l'application", - "app_secret": "Secret" - }, - "description": "ID applicatif et code secret du compte d\u00e9veloppeur StarLine", - "title": "Informations d'identification de l'application" - }, - "auth_captcha": { - "data": { - "captcha_code": "Code de l'image" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "Code SMS" - }, - "description": "Entrez le code envoy\u00e9 au t\u00e9l\u00e9phone {phone_number}", - "title": "Autorisation \u00e0 deux facteurs" - }, - "auth_user": { - "data": { - "password": "Mot de passe", - "username": "Nom d'utilisateur" - }, - "description": "Adresse e-mail et mot de passe du compte StarLine", - "title": "Informations d'identification de l'utilisateur" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/hu.json b/homeassistant/components/starline/.translations/hu.json deleted file mode 100644 index ccc5b7983d0..00000000000 --- a/homeassistant/components/starline/.translations/hu.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Helytelen alkalmaz\u00e1sazonos\u00edt\u00f3 vagy jelsz\u00f3", - "error_auth_mfa": "Helytelen k\u00f3d", - "error_auth_user": "Helytelen felhaszn\u00e1l\u00f3n\u00e9v vagy jelsz\u00f3" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App ID", - "app_secret": "Titok" - }, - "description": "Alkalmaz\u00e1s azonos\u00edt\u00f3ja \u00e9s titkos k\u00f3dja a StarLine fejleszt\u0151i fi\u00f3kb\u00f3l ", - "title": "Alkalmaz\u00e1si hiteles\u00edt\u0151 adatok" - }, - "auth_captcha": { - "data": { - "captcha_code": "K\u00f3d a k\u00e9pr\u0151l" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS k\u00f3d" - }, - "description": "Adja meg a {phone_number} telefonra k\u00fcld\u00f6tt k\u00f3dot.", - "title": "K\u00e9tfaktoros hiteles\u00edt\u00e9s" - }, - "auth_user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - }, - "description": "A StarLine fi\u00f3k e-mail c\u00edme \u00e9s jelszava", - "title": "Felhaszn\u00e1l\u00f3i hiteles\u00edt\u0151 adatok" - } - }, - "title": "Starline" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/it.json b/homeassistant/components/starline/.translations/it.json deleted file mode 100644 index f68732354c6..00000000000 --- a/homeassistant/components/starline/.translations/it.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "ID applicazione o Segreto errati", - "error_auth_mfa": "Codice errato", - "error_auth_user": "Nome utente o password errati" - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID applicazione", - "app_secret": "Segreto" - }, - "description": "ID applicazione e codice segreto da Account sviluppatore StarLine ", - "title": "Credenziali dell'applicazione" - }, - "auth_captcha": { - "data": { - "captcha_code": "Codice dall'immagine" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "Codice SMS" - }, - "description": "Inserisci il codice inviato al telefono {phone_number}.", - "title": "Autenticazione a due fattori" - }, - "auth_user": { - "data": { - "password": "Password", - "username": "Nome utente" - }, - "description": "Email e password dell'account StarLine", - "title": "Credenziali utente" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/ko.json b/homeassistant/components/starline/.translations/ko.json deleted file mode 100644 index 4d7ecf427f8..00000000000 --- a/homeassistant/components/starline/.translations/ko.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 ID \ud639\uc740 \ubcf4\uc548\ud0a4\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "error_auth_mfa": "\ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", - "error_auth_user": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4" - }, - "step": { - "auth_app": { - "data": { - "app_id": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 ID", - "app_secret": "\ubcf4\uc548\ud0a4" - }, - "description": "StarLine \uac1c\ubc1c\uc790 \uacc4\uc815\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 ID \ubc0f \ube44\ubc00\ubc88\ud638", - "title": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc790\uaca9 \uc99d\uba85" - }, - "auth_captcha": { - "data": { - "captcha_code": "\uc774\ubbf8\uc9c0\uc758 \ucf54\ub4dc" - }, - "description": "{captcha_img}", - "title": "\ubcf4\uc548 \ubb38\uc790" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS \ucf54\ub4dc" - }, - "description": "{phone_number} \uc804\ud654\ub85c \uc804\uc1a1\ub41c \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "2\ub2e8\uacc4 \uc778\uc99d" - }, - "auth_user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "StarLine \uacc4\uc815 \uc774\uba54\uc77c \ubc0f \ube44\ubc00\ubc88\ud638", - "title": "\uc0ac\uc6a9\uc790 \uc790\uaca9 \uc99d\uba85" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/lb.json b/homeassistant/components/starline/.translations/lb.json deleted file mode 100644 index 527add9920b..00000000000 --- a/homeassistant/components/starline/.translations/lb.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Ong\u00ebltege Applikatioun's ID oder Schl\u00ebssel", - "error_auth_mfa": "Ong\u00ebltegte Code", - "error_auth_user": "Ong\u00ebltege Benotzernumm oder Passwuert" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App ID", - "app_secret": "Schl\u00ebssel" - }, - "description": "Applikatioun's ID an Schl\u00ebssel vum StarLine Developpeur's Kont", - "title": "Login Informatioune vun der Applikatioun" - }, - "auth_captcha": { - "data": { - "captcha_code": "Cod vum Bild" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS Code" - }, - "description": "Gitt de Code an deen un d'Telefondnummer {phone_number} gesch\u00e9ckt gouf", - "title": "2-Faktor-Authentifikatioun" - }, - "auth_user": { - "data": { - "password": "Passwuert", - "username": "Benotzernumm" - }, - "description": "StarLine Konto Email a Passwuert", - "title": "Login Informatiounen" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/nl.json b/homeassistant/components/starline/.translations/nl.json deleted file mode 100644 index df6a51136b6..00000000000 --- a/homeassistant/components/starline/.translations/nl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Onjuiste applicatie-ID of geheim", - "error_auth_mfa": "Ongeldige code", - "error_auth_user": "Ongeldige gebruikersnaam of wachtwoord" - }, - "step": { - "auth_app": { - "data": { - "app_id": "Toepassings-ID", - "app_secret": "Geheime code" - }, - "description": "Toepassings-ID en de geheime code van StarLine developer account", - "title": "Inloggegevens van de applicatie" - }, - "auth_captcha": { - "data": { - "captcha_code": "Code van afbeelding" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS code" - }, - "description": "Voer de code in die wordt verzonden naar telefoon {phone_number}", - "title": "Tweestapsverificatie" - }, - "auth_user": { - "data": { - "password": "Wachtwoord", - "username": "Gebruikersnaam" - }, - "description": "StarLine-account e-mailadres en wachtwoord", - "title": "Gebruikersgegevens" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/nn.json b/homeassistant/components/starline/.translations/nn.json deleted file mode 100644 index 88b146144fb..00000000000 --- a/homeassistant/components/starline/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "auth_captcha": { - "description": "{captcha_img}" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/no.json b/homeassistant/components/starline/.translations/no.json deleted file mode 100644 index 37d55aea194..00000000000 --- a/homeassistant/components/starline/.translations/no.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Feil applikasjons-ID eller hemmelighet", - "error_auth_mfa": "Feil kode", - "error_auth_user": "Ugyldig brukernavn eller passord" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App-ID", - "app_secret": "Hemmelig" - }, - "description": "S\u00f8knads-ID og hemmelig kode fra StarLine utviklerkonto ", - "title": "Bruksanvisning" - }, - "auth_captcha": { - "data": { - "captcha_code": "Kode fra bilde" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS-kode" - }, - "description": "Skriv inn koden som er sendt til telefonen {phone_number}", - "title": "Tofaktorautentisering" - }, - "auth_user": { - "data": { - "password": "Passord", - "username": "Brukernavn" - }, - "description": "E-postadresse og passord for StarLine-kontoen", - "title": "Brukerlegitimasjon" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/pl.json b/homeassistant/components/starline/.translations/pl.json deleted file mode 100644 index 71d54bbbcd1..00000000000 --- a/homeassistant/components/starline/.translations/pl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Niepoprawny identyfikator aplikacji lub tajny kod", - "error_auth_mfa": "Niepoprawny kod", - "error_auth_user": "Niepoprawna nazwa u\u017cytkownika lub has\u0142o" - }, - "step": { - "auth_app": { - "data": { - "app_id": "Identyfikator aplikacji", - "app_secret": "Tajny kod" - }, - "description": "Identyfikator aplikacji i tajny kod z konta programisty StarLine", - "title": "Po\u015bwiadczenia aplikacji" - }, - "auth_captcha": { - "data": { - "captcha_code": "Kod z obrazka" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "Kod SMS" - }, - "description": "Wprowad\u017a kod wys\u0142any na numer telefonu {phone_number}", - "title": "Uwierzytelnianie dwusk\u0142adnikowe" - }, - "auth_user": { - "data": { - "password": "Has\u0142o", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Adres e-mail i has\u0142o do konta StarLine", - "title": "Po\u015bwiadczenia u\u017cytkownika" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/ru.json b/homeassistant/components/starline/.translations/ru.json deleted file mode 100644 index aa84c36772b..00000000000 --- a/homeassistant/components/starline/.translations/ru.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434.", - "error_auth_mfa": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.", - "error_auth_user": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f", - "app_secret": "\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434" - }, - "description": "ID \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 StarLine", - "title": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f" - }, - "auth_captcha": { - "data": { - "captcha_code": "\u041a\u043e\u0434 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438" - }, - "description": "{captcha_img}", - "title": "CAPTCHA" - }, - "auth_mfa": { - "data": { - "mfa_code": "\u041a\u043e\u0434 \u0438\u0437 SMS" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 {phone_number}", - "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" - }, - "auth_user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 StarLine", - "title": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/sl.json b/homeassistant/components/starline/.translations/sl.json deleted file mode 100644 index 3cdc5bc4bac..00000000000 --- a/homeassistant/components/starline/.translations/sl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Nepravilen ID ali skrivnost", - "error_auth_mfa": "Napa\u010dna koda", - "error_auth_user": "Nepravilno uporabni\u0161ko ime ali geslo" - }, - "step": { - "auth_app": { - "data": { - "app_id": "ID aplikacije", - "app_secret": "Skrivnost" - }, - "description": "ID aplikacije in tajna koda iz ra\u010duna za razvijalce StarLine ", - "title": "Poverilnice programa" - }, - "auth_captcha": { - "data": { - "captcha_code": "\u0160ifra iz slike" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS koda" - }, - "description": "Vnesite kodo, poslano na telefon {phone_number}", - "title": "2-faktorska avtorizacija" - }, - "auth_user": { - "data": { - "password": "Geslo", - "username": "Uporabni\u0161ko ime" - }, - "description": "StarLine e-po\u0161tni ra\u010dun in geslo", - "title": "Uporabni\u0161ke poverilnice" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/sv.json b/homeassistant/components/starline/.translations/sv.json deleted file mode 100644 index 83f2300892d..00000000000 --- a/homeassistant/components/starline/.translations/sv.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "Fel applikations-id eller hemlighet", - "error_auth_mfa": "Felaktig kod", - "error_auth_user": "Felaktigt anv\u00e4ndarnamn eller l\u00f6senord" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App-ID", - "app_secret": "Hemlighet" - }, - "description": "Applikations-ID och hemlig kod fr\u00e5n StarLine-utvecklarkonto", - "title": "Autentiseringsuppgifter f\u00f6r applikation" - }, - "auth_captcha": { - "data": { - "captcha_code": "Kod fr\u00e5n bild" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "SMS-kod" - }, - "description": "Ange koden som skickas till telefonen {phone_number}", - "title": "Tv\u00e5faktorautentisering" - }, - "auth_user": { - "data": { - "password": "L\u00f6senord", - "username": "Anv\u00e4ndarnamn" - }, - "description": "StarLine-kontots e-postadress och l\u00f6senord", - "title": "Anv\u00e4ndaruppgifter" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/zh-Hant.json b/homeassistant/components/starline/.translations/zh-Hant.json deleted file mode 100644 index 6f8eeffc8b1..00000000000 --- a/homeassistant/components/starline/.translations/zh-Hant.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "config": { - "error": { - "error_auth_app": "\u61c9\u7528\u7a0b\u5f0f ID \u932f\u8aa4\u6216\u4e0d\u6b63\u78ba", - "error_auth_mfa": "\u5bc6\u78bc\u932f\u8aa4", - "error_auth_user": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u932f\u8aa4" - }, - "step": { - "auth_app": { - "data": { - "app_id": "App ID", - "app_secret": "\u5bc6\u78bc" - }, - "description": "Application ID and secret code \u7531 StarLine \u958b\u767c\u8005\u5e33\u865f \u6240\u53d6\u5f97\u7684\u61c9\u7528\u7a0b\u5f0f ID \u8207\u5bc6\u78bc", - "title": "\u61c9\u7528\u6191\u8b49" - }, - "auth_captcha": { - "data": { - "captcha_code": "\u5716\u50cf\u5bc6\u78bc" - }, - "description": "{captcha_img}", - "title": "Captcha" - }, - "auth_mfa": { - "data": { - "mfa_code": "\u7c21\u8a0a\u5bc6\u78bc" - }, - "description": "\u8f38\u5165\u50b3\u9001\u81f3 {phone_number} \u7684\u9a57\u8b49\u78bc", - "title": "\u96d9\u91cd\u9a57\u8b49" - }, - "auth_user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "StarLine \u5e33\u865f\u90f5\u4ef6\u8207\u5bc6\u78bc", - "title": "\u4f7f\u7528\u8005\u6191\u8b49" - } - }, - "title": "StarLine" - } -} \ No newline at end of file diff --git a/homeassistant/components/starline/account.py b/homeassistant/components/starline/account.py index 8d0214d1b5c..3ee716ec856 100644 --- a/homeassistant/components/starline/account.py +++ b/homeassistant/components/starline/account.py @@ -61,7 +61,6 @@ class StarlineAccount: ) except Exception as err: # pylint: disable=broad-except LOGGER.error("Error updating SLNet token: %s", err) - pass def _update_data(self): """Update StarLine data.""" diff --git a/homeassistant/components/starline/manifest.json b/homeassistant/components/starline/manifest.json index a7bdd241b55..d0cba029787 100644 --- a/homeassistant/components/starline/manifest.json +++ b/homeassistant/components/starline/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/starline", "requirements": ["starline==0.1.3"], - "dependencies": [], "codeowners": ["@anonym-tsk"] } diff --git a/homeassistant/components/starline/sensor.py b/homeassistant/components/starline/sensor.py index 8e17caad86c..83392b31380 100644 --- a/homeassistant/components/starline/sensor.py +++ b/homeassistant/components/starline/sensor.py @@ -1,6 +1,6 @@ """Reads vehicle status from StarLine API.""" from homeassistant.components.sensor import DEVICE_CLASS_TEMPERATURE -from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE +from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE, VOLT from homeassistant.helpers.entity import Entity from homeassistant.helpers.icon import icon_for_battery_level, icon_for_signal_level @@ -9,7 +9,7 @@ from .const import DOMAIN from .entity import StarlineEntity SENSOR_TYPES = { - "battery": ["Battery", None, "V", None], + "battery": ["Battery", None, VOLT, None], "balance": ["Balance", None, None, "mdi:cash-multiple"], "ctemp": ["Interior Temperature", DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None], "etemp": ["Engine Temperature", DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None], diff --git a/homeassistant/components/starline/strings.json b/homeassistant/components/starline/strings.json index bf83f652c3c..41d303b7876 100644 --- a/homeassistant/components/starline/strings.json +++ b/homeassistant/components/starline/strings.json @@ -1,42 +1,31 @@ { - "config": { - "title": "StarLine", - "step": { - "auth_app": { - "title": "Application credentials", - "description": "Application ID and secret code from StarLine developer account", - "data": { - "app_id": "App ID", - "app_secret": "Secret" - } - }, - "auth_user": { - "title": "User credentials", - "description": "StarLine account email and password", - "data": { - "username": "Username", - "password": "Password" - } - }, - "auth_mfa": { - "title": "Two-factor authorization", - "description": "Enter the code sent to phone {phone_number}", - "data": { - "mfa_code": "SMS code" - } - }, - "auth_captcha": { - "title": "Captcha", - "description": "{captcha_img}", - "data": { - "captcha_code": "Code from image" - } - } - }, - "error": { - "error_auth_app": "Incorrect application id or secret", - "error_auth_user": "Incorrect username or password", - "error_auth_mfa": "Incorrect code" - } + "config": { + "step": { + "auth_app": { + "title": "Application credentials", + "description": "Application ID and secret code from StarLine developer account", + "data": { "app_id": "App ID", "app_secret": "Secret" } + }, + "auth_user": { + "title": "User credentials", + "description": "StarLine account email and password", + "data": { "username": "Username", "password": "Password" } + }, + "auth_mfa": { + "title": "Two-factor authorization", + "description": "Enter the code sent to phone {phone_number}", + "data": { "mfa_code": "SMS code" } + }, + "auth_captcha": { + "title": "Captcha", + "description": "{captcha_img}", + "data": { "captcha_code": "Code from image" } + } + }, + "error": { + "error_auth_app": "Incorrect application id or secret", + "error_auth_user": "Incorrect username or password", + "error_auth_mfa": "Incorrect code" } + } } diff --git a/homeassistant/components/starline/translations/bg.json b/homeassistant/components/starline/translations/bg.json new file mode 100644 index 00000000000..1f3fb32b8e3 --- /dev/null +++ b/homeassistant/components/starline/translations/bg.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e ID \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0442\u0430\u0439\u043d\u0430", + "error_auth_mfa": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043a\u043e\u0434", + "error_auth_user": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430" + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435", + "app_secret": "\u0422\u0430\u0439\u043d\u0430" + }, + "description": "\u0418\u0414 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0442\u0430\u0435\u043d \u043a\u043e\u0434 \u043e\u0442 StarLine \u0430\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a", + "title": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e" + }, + "auth_captcha": { + "data": { + "captcha_code": "\u041a\u043e\u0434 \u043e\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS \u043a\u043e\u0434" + }, + "description": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043a\u043e\u0434\u0430, \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435\u043d \u043d\u043e\u043c\u0435\u0440 {phone_number}", + "title": "\u0414\u0432\u0443\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f" + }, + "auth_user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "description": "\u0418\u043c\u0435\u0439\u043b \u0438 \u043f\u0430\u0440\u043e\u043b\u0430 \u0437\u0430 \u0430\u043a\u0430\u0443\u043d\u0442 \u0432 StarLine", + "title": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/ca.json b/homeassistant/components/starline/translations/ca.json new file mode 100644 index 00000000000..d8c76856480 --- /dev/null +++ b/homeassistant/components/starline/translations/ca.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "ID d'aplicaci\u00f3 o secret incorrectes", + "error_auth_mfa": "Codi incorrecte", + "error_auth_user": "Nom d'usuari o contrasenya incorrectes" + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID d'aplicaci\u00f3", + "app_secret": "Secret" + }, + "description": "ID d'aplicaci\u00f3 i codi secret de compte de desenvolupador de StarLine", + "title": "Credencials d'aplicaci\u00f3" + }, + "auth_captcha": { + "data": { + "captcha_code": "Codi des de imatge" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "Codi SMS" + }, + "description": "Introdueix el codi rebut al n\u00famero {phone_number}", + "title": "Verificaci\u00f3 en dos passos" + }, + "auth_user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "description": "Correu electr\u00f2nic i contrasenya del compte StarLine", + "title": "Credencials d\u2019usuari" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/da.json b/homeassistant/components/starline/translations/da.json new file mode 100644 index 00000000000..d891baee822 --- /dev/null +++ b/homeassistant/components/starline/translations/da.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Forkert applikations-id eller hemmelighed", + "error_auth_mfa": "Forkert kode", + "error_auth_user": "Forkert brugernavn eller adgangskode" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App-id", + "app_secret": "Hemmelighed" + }, + "description": "Applikations-id og hemmelig kode fra StarLine-udviklerkonto ", + "title": "Applikations-legitimationsoplysninger" + }, + "auth_captcha": { + "data": { + "captcha_code": "Kode fra billede" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS-kode" + }, + "description": "Indtast koden, der er sendt til telefon {phone_number}", + "title": "Tofaktor-godkendelse" + }, + "auth_user": { + "data": { + "password": "Adgangskode", + "username": "Brugernavn" + }, + "description": "StarLine-konto email og adgangskode", + "title": "Brugeroplysninger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/de.json b/homeassistant/components/starline/translations/de.json new file mode 100644 index 00000000000..5788b570eba --- /dev/null +++ b/homeassistant/components/starline/translations/de.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Falsche Anwendungs-ID oder Secret", + "error_auth_mfa": "Ung\u00fcltiger Code", + "error_auth_user": "Falscher Benutzername oder falsches Passwort" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App-ID", + "app_secret": "Geheimnis" + }, + "description": "Anwendungs-ID und Geheimcode aus dem StarLine-Entwicklerkonto", + "title": "Anmeldeinformationen der Anwendung" + }, + "auth_captcha": { + "data": { + "captcha_code": "Code aus dem Bild" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS Code" + }, + "description": "Gib den an das Telefon gesendeten Code ein {Telefon_Nummer}", + "title": "2-Faktor-Authentifizierung" + }, + "auth_user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "description": "StarLine Konto E-Mail und Passwort", + "title": "Anmeldeinformationen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/en.json b/homeassistant/components/starline/translations/en.json new file mode 100644 index 00000000000..cf71829bf29 --- /dev/null +++ b/homeassistant/components/starline/translations/en.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Incorrect application id or secret", + "error_auth_mfa": "Incorrect code", + "error_auth_user": "Incorrect username or password" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App ID", + "app_secret": "Secret" + }, + "description": "Application ID and secret code from StarLine developer account", + "title": "Application credentials" + }, + "auth_captcha": { + "data": { + "captcha_code": "Code from image" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS code" + }, + "description": "Enter the code sent to phone {phone_number}", + "title": "Two-factor authorization" + }, + "auth_user": { + "data": { + "password": "Password", + "username": "Username" + }, + "description": "StarLine account email and password", + "title": "User credentials" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/es.json b/homeassistant/components/starline/translations/es.json new file mode 100644 index 00000000000..6df1cdf8f01 --- /dev/null +++ b/homeassistant/components/starline/translations/es.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Id de aplicaci\u00f3n o secreto incorrectos", + "error_auth_mfa": "C\u00f3digo incorrecto", + "error_auth_user": "Nombre de usuario o contrase\u00f1a incorrectos" + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID de la aplicaci\u00f3n", + "app_secret": "Secreto" + }, + "description": "ID de la aplicaci\u00f3n y c\u00f3digo secreto de la cuenta de desarrollador de StarLine", + "title": "Credenciales de la aplicaci\u00f3n" + }, + "auth_captcha": { + "data": { + "captcha_code": "C\u00f3digo de la imagen" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "C\u00f3digo SMS" + }, + "description": "Introduce el c\u00f3digo enviado al tel\u00e9fono {phone_number}", + "title": "Autorizaci\u00f3n de dos factores" + }, + "auth_user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "description": "Correo electr\u00f3nico y contrase\u00f1a de la cuenta StarLine", + "title": "Credenciales de usuario" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/fr.json b/homeassistant/components/starline/translations/fr.json new file mode 100644 index 00000000000..3720cf10211 --- /dev/null +++ b/homeassistant/components/starline/translations/fr.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "ID applicatif ou code secret incorrect", + "error_auth_mfa": "code incorrect", + "error_auth_user": "identifiant ou mot de passe incorrect" + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID de l'application", + "app_secret": "Secret" + }, + "description": "ID applicatif et code secret du compte d\u00e9veloppeur StarLine", + "title": "Informations d'identification de l'application" + }, + "auth_captcha": { + "data": { + "captcha_code": "Code de l'image" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "Code SMS" + }, + "description": "Entrez le code envoy\u00e9 au t\u00e9l\u00e9phone {phone_number}", + "title": "Autorisation \u00e0 deux facteurs" + }, + "auth_user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, + "description": "Adresse e-mail et mot de passe du compte StarLine", + "title": "Informations d'identification de l'utilisateur" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/hu.json b/homeassistant/components/starline/translations/hu.json new file mode 100644 index 00000000000..9d544eb0337 --- /dev/null +++ b/homeassistant/components/starline/translations/hu.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Helytelen alkalmaz\u00e1sazonos\u00edt\u00f3 vagy jelsz\u00f3", + "error_auth_mfa": "Helytelen k\u00f3d", + "error_auth_user": "Helytelen felhaszn\u00e1l\u00f3n\u00e9v vagy jelsz\u00f3" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App ID", + "app_secret": "Titok" + }, + "description": "Alkalmaz\u00e1s azonos\u00edt\u00f3ja \u00e9s titkos k\u00f3dja a StarLine fejleszt\u0151i fi\u00f3kb\u00f3l ", + "title": "Alkalmaz\u00e1si hiteles\u00edt\u0151 adatok" + }, + "auth_captcha": { + "data": { + "captcha_code": "K\u00f3d a k\u00e9pr\u0151l" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS k\u00f3d" + }, + "description": "Adja meg a {phone_number} telefonra k\u00fcld\u00f6tt k\u00f3dot.", + "title": "K\u00e9tfaktoros hiteles\u00edt\u00e9s" + }, + "auth_user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + }, + "description": "A StarLine fi\u00f3k e-mail c\u00edme \u00e9s jelszava", + "title": "Felhaszn\u00e1l\u00f3i hiteles\u00edt\u0151 adatok" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/it.json b/homeassistant/components/starline/translations/it.json new file mode 100644 index 00000000000..01364b9c3ce --- /dev/null +++ b/homeassistant/components/starline/translations/it.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "ID applicazione o Segreto errati", + "error_auth_mfa": "Codice errato", + "error_auth_user": "Nome utente o password errati" + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID applicazione", + "app_secret": "Segreto" + }, + "description": "ID applicazione e codice segreto da Account sviluppatore StarLine ", + "title": "Credenziali dell'applicazione" + }, + "auth_captcha": { + "data": { + "captcha_code": "Codice dall'immagine" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "Codice SMS" + }, + "description": "Inserisci il codice inviato al telefono {phone_number}.", + "title": "Autenticazione a due fattori" + }, + "auth_user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "description": "Email e password dell'account StarLine", + "title": "Credenziali utente" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/ko.json b/homeassistant/components/starline/translations/ko.json new file mode 100644 index 00000000000..6d9e06c5a3d --- /dev/null +++ b/homeassistant/components/starline/translations/ko.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 ID \ud639\uc740 \ubcf4\uc548\ud0a4\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "error_auth_mfa": "\ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "error_auth_user": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4" + }, + "step": { + "auth_app": { + "data": { + "app_id": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 ID", + "app_secret": "\ubcf4\uc548\ud0a4" + }, + "description": "StarLine \uac1c\ubc1c\uc790 \uacc4\uc815\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 ID \ubc0f \ube44\ubc00\ubc88\ud638", + "title": "\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc790\uaca9 \uc99d\uba85" + }, + "auth_captcha": { + "data": { + "captcha_code": "\uc774\ubbf8\uc9c0\uc758 \ucf54\ub4dc" + }, + "description": "{captcha_img}", + "title": "\ubcf4\uc548 \ubb38\uc790" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS \ucf54\ub4dc" + }, + "description": "{phone_number} \uc804\ud654\ub85c \uc804\uc1a1\ub41c \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "2\ub2e8\uacc4 \uc778\uc99d" + }, + "auth_user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "StarLine \uacc4\uc815 \uc774\uba54\uc77c \ubc0f \ube44\ubc00\ubc88\ud638", + "title": "\uc0ac\uc6a9\uc790 \uc790\uaca9 \uc99d\uba85" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/lb.json b/homeassistant/components/starline/translations/lb.json new file mode 100644 index 00000000000..dce368d62d7 --- /dev/null +++ b/homeassistant/components/starline/translations/lb.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Ong\u00ebltege Applikatioun's ID oder Schl\u00ebssel", + "error_auth_mfa": "Ong\u00ebltegte Code", + "error_auth_user": "Ong\u00ebltege Benotzernumm oder Passwuert" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App ID", + "app_secret": "Schl\u00ebssel" + }, + "description": "Applikatioun's ID an Schl\u00ebssel vum StarLine Developpeur's Kont", + "title": "Login Informatioune vun der Applikatioun" + }, + "auth_captcha": { + "data": { + "captcha_code": "Cod vum Bild" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS Code" + }, + "description": "Gitt de Code an deen un d'Telefondnummer {phone_number} gesch\u00e9ckt gouf", + "title": "2-Faktor-Authentifikatioun" + }, + "auth_user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "description": "StarLine Konto Email a Passwuert", + "title": "Login Informatiounen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/lv.json b/homeassistant/components/starline/translations/lv.json similarity index 100% rename from homeassistant/components/starline/.translations/lv.json rename to homeassistant/components/starline/translations/lv.json diff --git a/homeassistant/components/starline/translations/nl.json b/homeassistant/components/starline/translations/nl.json new file mode 100644 index 00000000000..e92372f3d86 --- /dev/null +++ b/homeassistant/components/starline/translations/nl.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Onjuiste applicatie-ID of geheim", + "error_auth_mfa": "Ongeldige code", + "error_auth_user": "Ongeldige gebruikersnaam of wachtwoord" + }, + "step": { + "auth_app": { + "data": { + "app_id": "Toepassings-ID", + "app_secret": "Geheime code" + }, + "description": "Toepassings-ID en de geheime code van StarLine developer account", + "title": "Inloggegevens van de applicatie" + }, + "auth_captcha": { + "data": { + "captcha_code": "Code van afbeelding" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS code" + }, + "description": "Voer de code in die wordt verzonden naar telefoon {phone_number}", + "title": "Tweestapsverificatie" + }, + "auth_user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + }, + "description": "StarLine-account e-mailadres en wachtwoord", + "title": "Gebruikersgegevens" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/nn.json b/homeassistant/components/starline/translations/nn.json new file mode 100644 index 00000000000..c682de447b0 --- /dev/null +++ b/homeassistant/components/starline/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "auth_captcha": { + "description": "{captcha_img}" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/no.json b/homeassistant/components/starline/translations/no.json new file mode 100644 index 00000000000..e17bd9ad95e --- /dev/null +++ b/homeassistant/components/starline/translations/no.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Feil applikasjons-ID eller hemmelighet", + "error_auth_mfa": "Feil kode", + "error_auth_user": "Ugyldig brukernavn eller passord" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App-ID", + "app_secret": "Hemmelig" + }, + "description": "S\u00f8knads-ID og hemmelig kode fra StarLine utviklerkonto ", + "title": "Bruksanvisning" + }, + "auth_captcha": { + "data": { + "captcha_code": "Kode fra bilde" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS-kode" + }, + "description": "Skriv inn koden som er sendt til telefonen {phone_number}", + "title": "Tofaktorautentisering" + }, + "auth_user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "description": "E-postadresse og passord for StarLine-kontoen", + "title": "Brukerlegitimasjon" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/pl.json b/homeassistant/components/starline/translations/pl.json new file mode 100644 index 00000000000..5e5a293fc82 --- /dev/null +++ b/homeassistant/components/starline/translations/pl.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Niepoprawny identyfikator aplikacji lub tajny kod", + "error_auth_mfa": "Niepoprawny kod", + "error_auth_user": "Niepoprawna nazwa u\u017cytkownika lub has\u0142o" + }, + "step": { + "auth_app": { + "data": { + "app_id": "Identyfikator aplikacji", + "app_secret": "Tajny kod" + }, + "description": "Identyfikator aplikacji i tajny kod z konta programisty StarLine", + "title": "Po\u015bwiadczenia aplikacji" + }, + "auth_captcha": { + "data": { + "captcha_code": "Kod z obrazka" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "Kod SMS" + }, + "description": "Wprowad\u017a kod wys\u0142any na numer telefonu {phone_number}", + "title": "Uwierzytelnianie dwusk\u0142adnikowe" + }, + "auth_user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Adres e-mail i has\u0142o do konta StarLine", + "title": "Po\u015bwiadczenia u\u017cytkownika" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/.translations/pt-BR.json b/homeassistant/components/starline/translations/pt-BR.json similarity index 100% rename from homeassistant/components/starline/.translations/pt-BR.json rename to homeassistant/components/starline/translations/pt-BR.json diff --git a/homeassistant/components/starline/translations/pt.json b/homeassistant/components/starline/translations/pt.json new file mode 100644 index 00000000000..4bd578b953f --- /dev/null +++ b/homeassistant/components/starline/translations/pt.json @@ -0,0 +1,28 @@ +{ + "config": { + "error": { + "error_auth_mfa": "C\u00f3digo incorreto", + "error_auth_user": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "auth_app": { + "data": { + "app_secret": "Segredo" + } + }, + "auth_mfa": { + "data": { + "mfa_code": "C\u00f3digo SMS" + } + }, + "auth_user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + }, + "description": "Conta de email StarLine e palavra-passe", + "title": "Credenciais de utilizador" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/ru.json b/homeassistant/components/starline/translations/ru.json new file mode 100644 index 00000000000..156f7fb8262 --- /dev/null +++ b/homeassistant/components/starline/translations/ru.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434.", + "error_auth_mfa": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.", + "error_auth_user": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f", + "app_secret": "\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434" + }, + "description": "ID \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 StarLine", + "title": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f" + }, + "auth_captcha": { + "data": { + "captcha_code": "\u041a\u043e\u0434 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438" + }, + "description": "{captcha_img}", + "title": "CAPTCHA" + }, + "auth_mfa": { + "data": { + "mfa_code": "\u041a\u043e\u0434 \u0438\u0437 SMS" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 {phone_number}", + "title": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" + }, + "auth_user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 StarLine", + "title": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/sl.json b/homeassistant/components/starline/translations/sl.json new file mode 100644 index 00000000000..e73585c2e0a --- /dev/null +++ b/homeassistant/components/starline/translations/sl.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Nepravilen ID ali skrivnost", + "error_auth_mfa": "Napa\u010dna koda", + "error_auth_user": "Nepravilno uporabni\u0161ko ime ali geslo" + }, + "step": { + "auth_app": { + "data": { + "app_id": "ID aplikacije", + "app_secret": "Skrivnost" + }, + "description": "ID aplikacije in tajna koda iz ra\u010duna za razvijalce StarLine ", + "title": "Poverilnice programa" + }, + "auth_captcha": { + "data": { + "captcha_code": "\u0160ifra iz slike" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS koda" + }, + "description": "Vnesite kodo, poslano na telefon {phone_number}", + "title": "2-faktorska avtorizacija" + }, + "auth_user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "description": "StarLine e-po\u0161tni ra\u010dun in geslo", + "title": "Uporabni\u0161ke poverilnice" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/sv.json b/homeassistant/components/starline/translations/sv.json new file mode 100644 index 00000000000..36d627645cd --- /dev/null +++ b/homeassistant/components/starline/translations/sv.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "Fel applikations-id eller hemlighet", + "error_auth_mfa": "Felaktig kod", + "error_auth_user": "Felaktigt anv\u00e4ndarnamn eller l\u00f6senord" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App-ID", + "app_secret": "Hemlighet" + }, + "description": "Applikations-ID och hemlig kod fr\u00e5n StarLine-utvecklarkonto", + "title": "Autentiseringsuppgifter f\u00f6r applikation" + }, + "auth_captcha": { + "data": { + "captcha_code": "Kod fr\u00e5n bild" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "SMS-kod" + }, + "description": "Ange koden som skickas till telefonen {phone_number}", + "title": "Tv\u00e5faktorautentisering" + }, + "auth_user": { + "data": { + "password": "L\u00f6senord", + "username": "Anv\u00e4ndarnamn" + }, + "description": "StarLine-kontots e-postadress och l\u00f6senord", + "title": "Anv\u00e4ndaruppgifter" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starline/translations/zh-Hant.json b/homeassistant/components/starline/translations/zh-Hant.json new file mode 100644 index 00000000000..d1635d0bc27 --- /dev/null +++ b/homeassistant/components/starline/translations/zh-Hant.json @@ -0,0 +1,41 @@ +{ + "config": { + "error": { + "error_auth_app": "\u61c9\u7528\u7a0b\u5f0f ID \u932f\u8aa4\u6216\u4e0d\u6b63\u78ba", + "error_auth_mfa": "\u5bc6\u78bc\u932f\u8aa4", + "error_auth_user": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u932f\u8aa4" + }, + "step": { + "auth_app": { + "data": { + "app_id": "App ID", + "app_secret": "\u5bc6\u78bc" + }, + "description": "Application ID and secret code \u7531 StarLine \u958b\u767c\u8005\u5e33\u865f \u6240\u53d6\u5f97\u7684\u61c9\u7528\u7a0b\u5f0f ID \u8207\u5bc6\u78bc", + "title": "\u61c9\u7528\u6191\u8b49" + }, + "auth_captcha": { + "data": { + "captcha_code": "\u5716\u50cf\u5bc6\u78bc" + }, + "description": "{captcha_img}", + "title": "Captcha" + }, + "auth_mfa": { + "data": { + "mfa_code": "\u7c21\u8a0a\u5bc6\u78bc" + }, + "description": "\u8f38\u5165\u50b3\u9001\u81f3 {phone_number} \u7684\u9a57\u8b49\u78bc", + "title": "\u96d9\u91cd\u9a57\u8b49" + }, + "auth_user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "StarLine \u5e33\u865f\u90f5\u4ef6\u8207\u5bc6\u78bc", + "title": "\u4f7f\u7528\u8005\u6191\u8b49" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/starlingbank/manifest.json b/homeassistant/components/starlingbank/manifest.json index 82ac665031e..cb0ecc63d69 100644 --- a/homeassistant/components/starlingbank/manifest.json +++ b/homeassistant/components/starlingbank/manifest.json @@ -3,6 +3,5 @@ "name": "Starling Bank", "documentation": "https://www.home-assistant.io/integrations/starlingbank", "requirements": ["starlingbank==3.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/starlingbank/sensor.py b/homeassistant/components/starlingbank/sensor.py index 1e046192347..20fa646ce41 100644 --- a/homeassistant/components/starlingbank/sensor.py +++ b/homeassistant/components/starlingbank/sensor.py @@ -75,7 +75,7 @@ class StarlingBalanceSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "{0} {1}".format( + return "{} {}".format( self._account_name, self._balance_data_type.replace("_", " ").capitalize() ) diff --git a/homeassistant/components/startca/manifest.json b/homeassistant/components/startca/manifest.json index a8aafee91ac..68ac1aeb65b 100644 --- a/homeassistant/components/startca/manifest.json +++ b/homeassistant/components/startca/manifest.json @@ -3,6 +3,5 @@ "name": "Start.ca", "documentation": "https://www.home-assistant.io/integrations/startca", "requirements": ["xmltodict==0.12.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/startca/sensor.py b/homeassistant/components/startca/sensor.py index b6d90b99302..19c80a82e9f 100644 --- a/homeassistant/components/startca/sensor.py +++ b/homeassistant/components/startca/sensor.py @@ -13,6 +13,7 @@ from homeassistant.const import ( CONF_MONITORED_VARIABLES, CONF_NAME, DATA_GIGABYTES, + HTTP_OK, UNIT_PERCENTAGE, ) from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -146,7 +147,7 @@ class StartcaData: url = f"https://www.start.ca/support/usage/api?key={self.api_key}" with async_timeout.timeout(REQUEST_TIMEOUT): req = await self.websession.get(url) - if req.status != 200: + if req.status != HTTP_OK: _LOGGER.error("Request failed with status: %u", req.status) return False diff --git a/homeassistant/components/statistics/manifest.json b/homeassistant/components/statistics/manifest.json index 8df384dd0bd..bf0de54aa82 100644 --- a/homeassistant/components/statistics/manifest.json +++ b/homeassistant/components/statistics/manifest.json @@ -2,8 +2,6 @@ "domain": "statistics", "name": "Statistics", "documentation": "https://www.home-assistant.io/integrations/statistics", - "requirements": [], - "dependencies": [], "after_dependencies": ["recorder"], "codeowners": ["@fabaff"], "quality_scale": "internal" diff --git a/homeassistant/components/statistics/sensor.py b/homeassistant/components/statistics/sensor.py index 0fb08a0fecb..226d278633b 100644 --- a/homeassistant/components/statistics/sensor.py +++ b/homeassistant/components/statistics/sensor.py @@ -69,7 +69,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= entity_id = config.get(CONF_ENTITY_ID) name = config.get(CONF_NAME) sampling_size = config.get(CONF_SAMPLING_SIZE) - max_age = config.get(CONF_MAX_AGE, None) + max_age = config.get(CONF_MAX_AGE) precision = config.get(CONF_PRECISION) async_add_entities( diff --git a/homeassistant/components/statsd/__init__.py b/homeassistant/components/statsd/__init__.py index 79065f7ba53..7ca3068f003 100644 --- a/homeassistant/components/statsd/__init__.py +++ b/homeassistant/components/statsd/__init__.py @@ -79,7 +79,7 @@ def setup(hass, config): # Send attribute values for key, value in states.items(): if isinstance(value, (float, int)): - stat = "%s.%s" % (state.entity_id, key.replace(" ", "_")) + stat = "{}.{}".format(state.entity_id, key.replace(" ", "_")) statsd_client.gauge(stat, value, sample_rate) else: diff --git a/homeassistant/components/statsd/manifest.json b/homeassistant/components/statsd/manifest.json index 22478ee0fc7..c2e5f0bc33f 100644 --- a/homeassistant/components/statsd/manifest.json +++ b/homeassistant/components/statsd/manifest.json @@ -3,6 +3,5 @@ "name": "StatsD", "documentation": "https://www.home-assistant.io/integrations/statsd", "requirements": ["statsd==3.2.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/steam_online/manifest.json b/homeassistant/components/steam_online/manifest.json index d45aea51388..99015e54a4c 100644 --- a/homeassistant/components/steam_online/manifest.json +++ b/homeassistant/components/steam_online/manifest.json @@ -3,6 +3,5 @@ "name": "Steam", "documentation": "https://www.home-assistant.io/integrations/steam_online", "requirements": ["steamodd==4.21"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/steam_online/sensor.py b/homeassistant/components/steam_online/sensor.py index d25ebb7221b..97109decae2 100644 --- a/homeassistant/components/steam_online/sensor.py +++ b/homeassistant/components/steam_online/sensor.py @@ -11,7 +11,7 @@ from homeassistant.const import CONF_API_KEY from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -from homeassistant.helpers.event import async_track_time_interval +from homeassistant.helpers.event import track_time_interval from homeassistant.util.dt import utc_from_timestamp _LOGGER = logging.getLogger(__name__) @@ -65,7 +65,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): entities[entity_next].async_schedule_update_ha_state(True) entity_next = (entity_next + 1) % len(entities) - async_track_time_interval(hass, do_update, BASE_INTERVAL) + track_time_interval(hass, do_update, BASE_INTERVAL) class SteamSensor(Entity): diff --git a/homeassistant/components/stookalert/manifest.json b/homeassistant/components/stookalert/manifest.json index 73e59c2eddb..dc12512920e 100644 --- a/homeassistant/components/stookalert/manifest.json +++ b/homeassistant/components/stookalert/manifest.json @@ -2,7 +2,6 @@ "domain": "stookalert", "name": "RIVM Stookalert", "documentation": "https://www.home-assistant.io/integrations/stookalert", - "dependencies": [], "codeowners": ["@fwestenberg"], "requirements": ["stookalert==0.1.4"] } diff --git a/homeassistant/components/stream/services.yaml b/homeassistant/components/stream/services.yaml index c3b25e06348..a8652335bf1 100644 --- a/homeassistant/components/stream/services.yaml +++ b/homeassistant/components/stream/services.yaml @@ -5,11 +5,11 @@ record: description: The input source for the stream. example: "rtsp://my.stream.feed:554" filename: - description: The file name string. + description: The file name string. example: "/tmp/my_stream.mp4" duration: description: "Target recording length (in seconds). Default: 30" example: 30 lookback: description: "Target lookback period (in seconds) to include in addition to duration. Only available if there is currently an active HLS stream for stream_source. Default: 0" - example: 5 \ No newline at end of file + example: 5 diff --git a/homeassistant/components/streamlabswater/manifest.json b/homeassistant/components/streamlabswater/manifest.json index 52d6fb724f8..d1c01cb66b5 100644 --- a/homeassistant/components/streamlabswater/manifest.json +++ b/homeassistant/components/streamlabswater/manifest.json @@ -3,6 +3,5 @@ "name": "StreamLabs", "documentation": "https://www.home-assistant.io/integrations/streamlabswater", "requirements": ["streamlabswater==1.0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/streamlabswater/services.yaml b/homeassistant/components/streamlabswater/services.yaml index fa2a04c9586..63ab2be9759 100644 --- a/homeassistant/components/streamlabswater/services.yaml +++ b/homeassistant/components/streamlabswater/services.yaml @@ -1,4 +1,6 @@ set_away_mode: - description: 'Set the home/away mode for a Streamlabs Water Monitor.' + description: "Set the home/away mode for a Streamlabs Water Monitor." fields: - away_mode: {description: home or away, example: 'home'} \ No newline at end of file + away_mode: + description: home or away + example: "home" diff --git a/homeassistant/components/stt/__init__.py b/homeassistant/components/stt/__init__.py index b39ab88484b..43ef01a497e 100644 --- a/homeassistant/components/stt/__init__.py +++ b/homeassistant/components/stt/__init__.py @@ -184,7 +184,7 @@ class SpeechToTextView(HomeAssistantView): return None # Convert Header data - args = dict() + args = {} for value in data: value = value.strip() args[value.partition("=")[0]] = value.partition("=")[2] diff --git a/homeassistant/components/stt/manifest.json b/homeassistant/components/stt/manifest.json index c25221f5baa..a3529dcd0b5 100644 --- a/homeassistant/components/stt/manifest.json +++ b/homeassistant/components/stt/manifest.json @@ -2,7 +2,6 @@ "domain": "stt", "name": "Speech-to-Text (STT)", "documentation": "https://www.home-assistant.io/integrations/stt", - "requirements": [], "dependencies": ["http"], "codeowners": ["@pvizeli"] } diff --git a/homeassistant/components/suez_water/manifest.json b/homeassistant/components/suez_water/manifest.json index 90b6f2ebc73..fface9b495a 100644 --- a/homeassistant/components/suez_water/manifest.json +++ b/homeassistant/components/suez_water/manifest.json @@ -2,7 +2,6 @@ "domain": "suez_water", "name": "Suez Water", "documentation": "https://www.home-assistant.io/integrations/suez_water", - "dependencies": [], "codeowners": ["@ooii"], "requirements": ["pysuez==0.1.17"] } diff --git a/homeassistant/components/sun/manifest.json b/homeassistant/components/sun/manifest.json index f0fb80923b1..c406a339a5f 100644 --- a/homeassistant/components/sun/manifest.json +++ b/homeassistant/components/sun/manifest.json @@ -2,8 +2,6 @@ "domain": "sun", "name": "Sun", "documentation": "https://www.home-assistant.io/integrations/sun", - "requirements": [], - "dependencies": [], "codeowners": ["@Swamp-Ig"], "quality_scale": "internal" } diff --git a/homeassistant/components/sun/strings.json b/homeassistant/components/sun/strings.json new file mode 100644 index 00000000000..980879b95cb --- /dev/null +++ b/homeassistant/components/sun/strings.json @@ -0,0 +1,9 @@ +{ + "title": "Sun", + "state": { + "_": { + "above_horizon": "Above horizon", + "below_horizon": "Below horizon" + } + } +} diff --git a/homeassistant/components/sun/translations/af.json b/homeassistant/components/sun/translations/af.json new file mode 100644 index 00000000000..76955ae04ac --- /dev/null +++ b/homeassistant/components/sun/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Bo horison", + "below_horizon": "Onder horison" + } + }, + "title": "Son" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ar.json b/homeassistant/components/sun/translations/ar.json new file mode 100644 index 00000000000..0da557f0dfe --- /dev/null +++ b/homeassistant/components/sun/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0641\u0648\u0642 \u0627\u0644\u0623\u0641\u0642", + "below_horizon": "\u062a\u062d\u062a \u0627\u0644\u0623\u0641\u0642" + } + }, + "title": "\u0627\u0644\u0634\u0645\u0633" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/bg.json b/homeassistant/components/sun/translations/bg.json new file mode 100644 index 00000000000..7b6c5241cd2 --- /dev/null +++ b/homeassistant/components/sun/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u041d\u0430\u0434 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430", + "below_horizon": "\u041f\u043e\u0434 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430" + } + }, + "title": "\u0421\u043b\u044a\u043d\u0446\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/bs.json b/homeassistant/components/sun/translations/bs.json new file mode 100644 index 00000000000..c120f9460a0 --- /dev/null +++ b/homeassistant/components/sun/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Iznad horizonta", + "below_horizon": "Ispod horizonta" + } + }, + "title": "Sunce" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ca.json b/homeassistant/components/sun/translations/ca.json new file mode 100644 index 00000000000..5a49afefc5d --- /dev/null +++ b/homeassistant/components/sun/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Sobre l'horitz\u00f3", + "below_horizon": "Sota l'horitz\u00f3" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/cs.json b/homeassistant/components/sun/translations/cs.json new file mode 100644 index 00000000000..3a8426bf51d --- /dev/null +++ b/homeassistant/components/sun/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Nad horizontem", + "below_horizon": "Za horizontem" + } + }, + "title": "Slunce" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/cy.json b/homeassistant/components/sun/translations/cy.json new file mode 100644 index 00000000000..9b7c2375c96 --- /dev/null +++ b/homeassistant/components/sun/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Dros y gorwel", + "below_horizon": "Islaw'r gorwel" + } + }, + "title": "Haul" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/da.json b/homeassistant/components/sun/translations/da.json new file mode 100644 index 00000000000..8597fea2ce5 --- /dev/null +++ b/homeassistant/components/sun/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Over horisonten", + "below_horizon": "Under horisonten" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/de.json b/homeassistant/components/sun/translations/de.json new file mode 100644 index 00000000000..6b81cf14f76 --- /dev/null +++ b/homeassistant/components/sun/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u00dcber dem Horizont", + "below_horizon": "Unter dem Horizont" + } + }, + "title": "Sonne" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/el.json b/homeassistant/components/sun/translations/el.json new file mode 100644 index 00000000000..5079c2476aa --- /dev/null +++ b/homeassistant/components/sun/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u03a0\u03ac\u03bd\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03bf\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1", + "below_horizon": "\u039a\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03bf\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1" + } + }, + "title": "\u0389\u03bb\u03b9\u03bf\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/en.json b/homeassistant/components/sun/translations/en.json new file mode 100644 index 00000000000..2278e262bb8 --- /dev/null +++ b/homeassistant/components/sun/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Above horizon", + "below_horizon": "Below horizon" + } + }, + "title": "Sun" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/es-419.json b/homeassistant/components/sun/translations/es-419.json new file mode 100644 index 00000000000..d8ce466236e --- /dev/null +++ b/homeassistant/components/sun/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Sobre el horizonte", + "below_horizon": "Bajo el horizonte" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/es.json b/homeassistant/components/sun/translations/es.json new file mode 100644 index 00000000000..d8ce466236e --- /dev/null +++ b/homeassistant/components/sun/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Sobre el horizonte", + "below_horizon": "Bajo el horizonte" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/et.json b/homeassistant/components/sun/translations/et.json new file mode 100644 index 00000000000..1a4020215f0 --- /dev/null +++ b/homeassistant/components/sun/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "T\u00f5usnud", + "below_horizon": "Loojunud" + } + }, + "title": "P\u00e4ike" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/eu.json b/homeassistant/components/sun/translations/eu.json new file mode 100644 index 00000000000..ae17447dae1 --- /dev/null +++ b/homeassistant/components/sun/translations/eu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Horizonte gainetik", + "below_horizon": "Horizonte azpitik" + } + }, + "title": "Eguzkia" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/fa.json b/homeassistant/components/sun/translations/fa.json new file mode 100644 index 00000000000..c03a2409ae8 --- /dev/null +++ b/homeassistant/components/sun/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0628\u0627\u0644\u0627\u06cc \u0627\u0641\u0642", + "below_horizon": "\u0632\u06cc\u0631 \u0627\u0641\u0642" + } + }, + "title": "\u0622\u0641\u062a\u0627\u0628" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/fi.json b/homeassistant/components/sun/translations/fi.json new file mode 100644 index 00000000000..dbebc411ee8 --- /dev/null +++ b/homeassistant/components/sun/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Horisontin yll\u00e4", + "below_horizon": "Horisontin alapuolella" + } + }, + "title": "Aurinko" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/fr.json b/homeassistant/components/sun/translations/fr.json new file mode 100644 index 00000000000..a878c8022b1 --- /dev/null +++ b/homeassistant/components/sun/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Au-dessus de l'horizon", + "below_horizon": "Sous l\u2019horizon" + } + }, + "title": "Soleil" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/gsw.json b/homeassistant/components/sun/translations/gsw.json new file mode 100644 index 00000000000..66b2b2a9e0c --- /dev/null +++ b/homeassistant/components/sun/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u00dcberem Horizont", + "below_horizon": "Underem Horizont" + } + }, + "title": "Sunne" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/he.json b/homeassistant/components/sun/translations/he.json new file mode 100644 index 00000000000..26a2def7d00 --- /dev/null +++ b/homeassistant/components/sun/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u05de\u05e2\u05dc \u05d4\u05d0\u05d5\u05e4\u05e7", + "below_horizon": "\u05de\u05ea\u05d7\u05ea \u05dc\u05d0\u05d5\u05e4\u05e7" + } + }, + "title": "\u05e9\u05de\u05e9" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/hi.json b/homeassistant/components/sun/translations/hi.json new file mode 100644 index 00000000000..075c08da94a --- /dev/null +++ b/homeassistant/components/sun/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0915\u094d\u0937\u093f\u0924\u093f\u091c \u0938\u0947 \u090a\u092a\u0930", + "below_horizon": "\u0915\u094d\u0937\u093f\u0924\u093f\u091c \u0915\u0947 \u0928\u0940\u091a\u0947" + } + }, + "title": "\u0938\u0942\u0930\u091c" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/hr.json b/homeassistant/components/sun/translations/hr.json new file mode 100644 index 00000000000..c120f9460a0 --- /dev/null +++ b/homeassistant/components/sun/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Iznad horizonta", + "below_horizon": "Ispod horizonta" + } + }, + "title": "Sunce" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/hu.json b/homeassistant/components/sun/translations/hu.json new file mode 100644 index 00000000000..2275d61b35a --- /dev/null +++ b/homeassistant/components/sun/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "L\u00e1t\u00f3hat\u00e1r felett", + "below_horizon": "L\u00e1t\u00f3hat\u00e1r alatt" + } + }, + "title": "Nap" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/hy.json b/homeassistant/components/sun/translations/hy.json new file mode 100644 index 00000000000..b2b3cbbd5a2 --- /dev/null +++ b/homeassistant/components/sun/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u056b \u057e\u0565\u0580\u0587\u0578\u0582\u0574", + "below_horizon": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u056b \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574" + } + }, + "title": "\u0531\u0580\u0587" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/id.json b/homeassistant/components/sun/translations/id.json new file mode 100644 index 00000000000..374da4e0db9 --- /dev/null +++ b/homeassistant/components/sun/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Terbit", + "below_horizon": "Tenggelam" + } + }, + "title": "Matahari" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/is.json b/homeassistant/components/sun/translations/is.json new file mode 100644 index 00000000000..8c3d61d279d --- /dev/null +++ b/homeassistant/components/sun/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Yfir sj\u00f3ndeildarhring", + "below_horizon": "Undir sj\u00f3ndeildarhring" + } + }, + "title": "S\u00f3l" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/it.json b/homeassistant/components/sun/translations/it.json new file mode 100644 index 00000000000..fe2c65461cd --- /dev/null +++ b/homeassistant/components/sun/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Sopra l'orizzonte", + "below_horizon": "Sotto l'orizzonte" + } + }, + "title": "Sole" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ja.json b/homeassistant/components/sun/translations/ja.json new file mode 100644 index 00000000000..579f1b5817f --- /dev/null +++ b/homeassistant/components/sun/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u5730\u5e73\u7dda\u306e\u4e0a", + "below_horizon": "\u5730\u5e73\u7dda\u3088\u308a\u4e0b" + } + }, + "title": "\u592a\u967d" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ko.json b/homeassistant/components/sun/translations/ko.json new file mode 100644 index 00000000000..d9d6f6ff081 --- /dev/null +++ b/homeassistant/components/sun/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\uc8fc\uac04", + "below_horizon": "\uc57c\uac04" + } + }, + "title": "\ud0dc\uc591" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/lb.json b/homeassistant/components/sun/translations/lb.json new file mode 100644 index 00000000000..d62722c1cd3 --- /dev/null +++ b/homeassistant/components/sun/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Iwwert dem Horizont", + "below_horizon": "\u00cbnnert dem Horizont" + } + }, + "title": "Sonn" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/lv.json b/homeassistant/components/sun/translations/lv.json new file mode 100644 index 00000000000..d2b8c336fb9 --- /dev/null +++ b/homeassistant/components/sun/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Virs horizonta", + "below_horizon": "Zem horizonta" + } + }, + "title": "Saule" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/nb.json b/homeassistant/components/sun/translations/nb.json new file mode 100644 index 00000000000..8597fea2ce5 --- /dev/null +++ b/homeassistant/components/sun/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Over horisonten", + "below_horizon": "Under horisonten" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/nl.json b/homeassistant/components/sun/translations/nl.json new file mode 100644 index 00000000000..6abe34481fa --- /dev/null +++ b/homeassistant/components/sun/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Boven de horizon", + "below_horizon": "Onder de horizon" + } + }, + "title": "Zon" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/nn.json b/homeassistant/components/sun/translations/nn.json new file mode 100644 index 00000000000..8597fea2ce5 --- /dev/null +++ b/homeassistant/components/sun/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Over horisonten", + "below_horizon": "Under horisonten" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/no.json b/homeassistant/components/sun/translations/no.json new file mode 100644 index 00000000000..8597fea2ce5 --- /dev/null +++ b/homeassistant/components/sun/translations/no.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Over horisonten", + "below_horizon": "Under horisonten" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/pl.json b/homeassistant/components/sun/translations/pl.json new file mode 100644 index 00000000000..fb90b9bd232 --- /dev/null +++ b/homeassistant/components/sun/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "powy\u017cej horyzontu", + "below_horizon": "poni\u017cej horyzontu" + } + }, + "title": "S\u0142o\u0144ce" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/pt-BR.json b/homeassistant/components/sun/translations/pt-BR.json new file mode 100644 index 00000000000..2f060112a0c --- /dev/null +++ b/homeassistant/components/sun/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Acima do horizonte", + "below_horizon": "Abaixo do horizonte" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/pt.json b/homeassistant/components/sun/translations/pt.json new file mode 100644 index 00000000000..2f060112a0c --- /dev/null +++ b/homeassistant/components/sun/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Acima do horizonte", + "below_horizon": "Abaixo do horizonte" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ro.json b/homeassistant/components/sun/translations/ro.json new file mode 100644 index 00000000000..6465fe4414f --- /dev/null +++ b/homeassistant/components/sun/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Deasupra orizontului", + "below_horizon": "Sub orizont" + } + }, + "title": "Soare" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ru.json b/homeassistant/components/sun/translations/ru.json new file mode 100644 index 00000000000..7ddf3165aa9 --- /dev/null +++ b/homeassistant/components/sun/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u041d\u0430\u0434 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c", + "below_horizon": "\u0417\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c" + } + }, + "title": "\u0421\u043e\u043b\u043d\u0446\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/sk.json b/homeassistant/components/sun/translations/sk.json new file mode 100644 index 00000000000..a5bc4d5339e --- /dev/null +++ b/homeassistant/components/sun/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Nad horizontom", + "below_horizon": "Za horizontom" + } + }, + "title": "Slnko" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/sl.json b/homeassistant/components/sun/translations/sl.json new file mode 100644 index 00000000000..1c74d48c5c0 --- /dev/null +++ b/homeassistant/components/sun/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Nad obzorjem", + "below_horizon": "Pod obzorjem" + } + }, + "title": "Sonce" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/sr.json b/homeassistant/components/sun/translations/sr.json new file mode 100644 index 00000000000..74814ba01fc --- /dev/null +++ b/homeassistant/components/sun/translations/sr.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "above_horizon": "Iznad horizonta", + "below_horizon": "Ispod horizonta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/sv.json b/homeassistant/components/sun/translations/sv.json new file mode 100644 index 00000000000..7494630ac88 --- /dev/null +++ b/homeassistant/components/sun/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Ovanf\u00f6r horisonten", + "below_horizon": "Nedanf\u00f6r horisonten" + } + }, + "title": "Sol" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/ta.json b/homeassistant/components/sun/translations/ta.json new file mode 100644 index 00000000000..ac61beaf122 --- /dev/null +++ b/homeassistant/components/sun/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0ba4\u0bca\u0b9f\u0bc1\u0bb5\u0bbe\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb2\u0bc7", + "below_horizon": "\u0ba4\u0bca\u0b9f\u0bc1\u0bb5\u0bbe\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1\u0b95\u0bcd \u0b95\u0bc0\u0bb4\u0bc7" + } + }, + "title": "\u0b9a\u0bc2\u0bb0\u0bbf\u0baf\u0ba9\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/te.json b/homeassistant/components/sun/translations/te.json new file mode 100644 index 00000000000..2b2f6866324 --- /dev/null +++ b/homeassistant/components/sun/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0c39\u0c4b\u0c30\u0c3f\u0c1c\u0c4b\u0c28\u0c4d \u0c2a\u0c48\u0c28", + "below_horizon": "\u0c39\u0c4b\u0c30\u0c3f\u0c1c\u0c4b\u0c28\u0c4d \u0c15\u0c4d\u0c30\u0c3f\u0c02\u0c26" + } + }, + "title": "\u0c38\u0c42\u0c30\u0c4d\u0c2f\u0c41\u0c21\u0c41" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/th.json b/homeassistant/components/sun/translations/th.json new file mode 100644 index 00000000000..8bda77f4504 --- /dev/null +++ b/homeassistant/components/sun/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u0e40\u0e2b\u0e19\u0e37\u0e2d\u0e02\u0e2d\u0e1a\u0e1f\u0e49\u0e32", + "below_horizon": "\u0e15\u0e01\u0e14\u0e34\u0e19" + } + }, + "title": "\u0e14\u0e27\u0e07\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/tr.json b/homeassistant/components/sun/translations/tr.json new file mode 100644 index 00000000000..9f3cb5d412f --- /dev/null +++ b/homeassistant/components/sun/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Ufkun \u00fczerinde", + "below_horizon": "Ufkun alt\u0131nda" + } + }, + "title": "G\u00fcne\u015f" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/uk.json b/homeassistant/components/sun/translations/uk.json new file mode 100644 index 00000000000..92d727a5919 --- /dev/null +++ b/homeassistant/components/sun/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u041d\u0430\u0434 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c", + "below_horizon": "\u0417\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c" + } + }, + "title": "\u0421\u043e\u043d\u0446\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/vi.json b/homeassistant/components/sun/translations/vi.json new file mode 100644 index 00000000000..58f120c509c --- /dev/null +++ b/homeassistant/components/sun/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "Tr\u00ean \u0111\u01b0\u1eddng ch\u00e2n tr\u1eddi", + "below_horizon": "D\u01b0\u1edbi \u0111\u01b0\u1eddng ch\u00e2n tr\u1eddi" + } + }, + "title": "M\u1eb7t tr\u1eddi" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/zh-Hans.json b/homeassistant/components/sun/translations/zh-Hans.json new file mode 100644 index 00000000000..146a99113b5 --- /dev/null +++ b/homeassistant/components/sun/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u65e5\u51fa", + "below_horizon": "\u65e5\u843d" + } + }, + "title": "\u592a\u9633" +} \ No newline at end of file diff --git a/homeassistant/components/sun/translations/zh-Hant.json b/homeassistant/components/sun/translations/zh-Hant.json new file mode 100644 index 00000000000..4b8da898c70 --- /dev/null +++ b/homeassistant/components/sun/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "above_horizon": "\u65e5\u51fa\u6771\u6d77", + "below_horizon": "\u65e5\u843d\u897f\u5c71" + } + }, + "title": "\u592a\u967d" +} \ No newline at end of file diff --git a/homeassistant/components/supervisord/manifest.json b/homeassistant/components/supervisord/manifest.json index eaf1e66cff4..82f4027d359 100644 --- a/homeassistant/components/supervisord/manifest.json +++ b/homeassistant/components/supervisord/manifest.json @@ -2,7 +2,5 @@ "domain": "supervisord", "name": "Supervisord", "documentation": "https://www.home-assistant.io/integrations/supervisord", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/supla/manifest.json b/homeassistant/components/supla/manifest.json index 742e6a07c4a..a4ab0e72719 100644 --- a/homeassistant/components/supla/manifest.json +++ b/homeassistant/components/supla/manifest.json @@ -3,6 +3,5 @@ "name": "Supla", "documentation": "https://www.home-assistant.io/integrations/supla", "requirements": ["pysupla==0.0.3"], - "dependencies": [], "codeowners": ["@mwegrzynek"] } diff --git a/homeassistant/components/surepetcare/manifest.json b/homeassistant/components/surepetcare/manifest.json index b1efa4ce639..6d34ff477ce 100644 --- a/homeassistant/components/surepetcare/manifest.json +++ b/homeassistant/components/surepetcare/manifest.json @@ -2,7 +2,6 @@ "domain": "surepetcare", "name": "Sure Petcare", "documentation": "https://www.home-assistant.io/integrations/surepetcare", - "dependencies": [], "codeowners": ["@benleb"], "requirements": ["surepy==0.2.3"] } diff --git a/homeassistant/components/swiss_hydrological_data/manifest.json b/homeassistant/components/swiss_hydrological_data/manifest.json index 88d7bfe5104..b293e5c2e1d 100644 --- a/homeassistant/components/swiss_hydrological_data/manifest.json +++ b/homeassistant/components/swiss_hydrological_data/manifest.json @@ -3,6 +3,5 @@ "name": "Swiss Hydrological Data", "documentation": "https://www.home-assistant.io/integrations/swiss_hydrological_data", "requirements": ["swisshydrodata==0.0.3"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/swiss_hydrological_data/sensor.py b/homeassistant/components/swiss_hydrological_data/sensor.py index d4624e82bb7..61423312b2a 100644 --- a/homeassistant/components/swiss_hydrological_data/sensor.py +++ b/homeassistant/components/swiss_hydrological_data/sensor.py @@ -97,7 +97,7 @@ class SwissHydrologicalDataSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "{0} {1}".format(self._data["water-body-name"], self._condition) + return "{} {}".format(self._data["water-body-name"], self._condition) @property def unique_id(self) -> str: diff --git a/homeassistant/components/swiss_public_transport/manifest.json b/homeassistant/components/swiss_public_transport/manifest.json index 2ef1e8fa69d..ae7601ebc8e 100644 --- a/homeassistant/components/swiss_public_transport/manifest.json +++ b/homeassistant/components/swiss_public_transport/manifest.json @@ -3,6 +3,5 @@ "name": "Swiss public transport", "documentation": "https://www.home-assistant.io/integrations/swiss_public_transport", "requirements": ["python_opendata_transport==0.2.1"], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/swisscom/manifest.json b/homeassistant/components/swisscom/manifest.json index caf18c8da3e..f9f023e8e3c 100644 --- a/homeassistant/components/swisscom/manifest.json +++ b/homeassistant/components/swisscom/manifest.json @@ -2,7 +2,5 @@ "domain": "swisscom", "name": "Swisscom Internet-Box", "documentation": "https://www.home-assistant.io/integrations/swisscom", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/switch/.translations/bg.json b/homeassistant/components/switch/.translations/bg.json deleted file mode 100644 index 19a853dba97..00000000000 --- a/homeassistant/components/switch/.translations/bg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0438 {entity_name}", - "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438 {entity_name}", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", - "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" - }, - "trigger_type": { - "turned_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 {entity_name}", - "turned_on": "\u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/ca.json b/homeassistant/components/switch/.translations/ca.json deleted file mode 100644 index 0f1101eca75..00000000000 --- a/homeassistant/components/switch/.translations/ca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Commuta {entity_name}", - "turn_off": "Desactiva {entity_name}", - "turn_on": "Activa {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e0 apagat", - "is_on": "{entity_name} est\u00e0 enc\u00e8s" - }, - "trigger_type": { - "turned_off": "{entity_name} desactivat", - "turned_on": "{entity_name} activat" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/da.json b/homeassistant/components/switch/.translations/da.json deleted file mode 100644 index eefa1e8bb6e..00000000000 --- a/homeassistant/components/switch/.translations/da.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Skift {entity_name}", - "turn_off": "Sluk {entity_name}", - "turn_on": "T\u00e6nd for {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} er fra", - "is_on": "{entity_name} er til" - }, - "trigger_type": { - "turned_off": "{entity_name} slukkede", - "turned_on": "{entity_name} t\u00e6ndte" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/de.json b/homeassistant/components/switch/.translations/de.json deleted file mode 100644 index 76496da6dc8..00000000000 --- a/homeassistant/components/switch/.translations/de.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "{entity_name} umschalten", - "turn_off": "Schalte {entity_name} aus.", - "turn_on": "Schalte {entity_name} ein." - }, - "condition_type": { - "is_off": "{entity_name} ist ausgeschaltet", - "is_on": "{entity_name} ist eingeschaltet" - }, - "trigger_type": { - "turned_off": "{entity_name} ausgeschaltet", - "turned_on": "{entity_name} eingeschaltet" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/en.json b/homeassistant/components/switch/.translations/en.json deleted file mode 100644 index 3f37de5331e..00000000000 --- a/homeassistant/components/switch/.translations/en.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Toggle {entity_name}", - "turn_off": "Turn off {entity_name}", - "turn_on": "Turn on {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} is off", - "is_on": "{entity_name} is on" - }, - "trigger_type": { - "turned_off": "{entity_name} turned off", - "turned_on": "{entity_name} turned on" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/es-419.json b/homeassistant/components/switch/.translations/es-419.json deleted file mode 100644 index b42b2ce56fa..00000000000 --- a/homeassistant/components/switch/.translations/es-419.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "turn_off": "Desactivar {entity_name}", - "turn_on": "Activar {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 apagado", - "is_on": "{entity_name} est\u00e1 encendido" - }, - "trigger_type": { - "turned_off": "{entity_name} apagado", - "turned_on": "{entity_name} encendido" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/es.json b/homeassistant/components/switch/.translations/es.json deleted file mode 100644 index c6790619182..00000000000 --- a/homeassistant/components/switch/.translations/es.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Alternar {entity_name}", - "turn_off": "Apagar {entity_name}", - "turn_on": "Encender {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est\u00e1 apagada", - "is_on": "{entity_name} est\u00e1 encendida" - }, - "trigger_type": { - "turned_off": "{entity_name} apagado", - "turned_on": "{entity_name} encendido" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/fr.json b/homeassistant/components/switch/.translations/fr.json deleted file mode 100644 index adc91477a23..00000000000 --- a/homeassistant/components/switch/.translations/fr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Basculer {entity_name}", - "turn_off": "\u00c9teindre {entity_name}", - "turn_on": "Allumer {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} est \u00e9teint", - "is_on": "{entity_name} est allum\u00e9" - }, - "trigger_type": { - "turned_off": "{entity_name} \u00e9teint", - "turned_on": "{entity_name} allum\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/hu.json b/homeassistant/components/switch/.translations/hu.json deleted file mode 100644 index 3fba61a4848..00000000000 --- a/homeassistant/components/switch/.translations/hu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "{entity_name} be/kikapcsol\u00e1sa", - "turn_off": "{entity_name} kikapcsol\u00e1sa", - "turn_on": "{entity_name} bekapcsol\u00e1sa" - }, - "condition_type": { - "is_off": "{entity_name} ki van kapcsolva", - "is_on": "{entity_name} be van kapcsolva" - }, - "trigger_type": { - "turned_off": "{entity_name} ki lett kapcsolva", - "turned_on": "{entity_name} be lett kapcsolva" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/it.json b/homeassistant/components/switch/.translations/it.json deleted file mode 100644 index 32f479b8b5c..00000000000 --- a/homeassistant/components/switch/.translations/it.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Attivare / Disattivare {entity_name}", - "turn_off": "Disattivare {entity_name}", - "turn_on": "Attivare {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u00e8 disattivato", - "is_on": "{entity_name} \u00e8 attivo" - }, - "trigger_type": { - "turned_off": "{entity_name} disattivato", - "turned_on": "{entity_name} attivato" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/ko.json b/homeassistant/components/switch/.translations/ko.json deleted file mode 100644 index b923fdb210e..00000000000 --- a/homeassistant/components/switch/.translations/ko.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "{entity_name} \ud1a0\uae00", - "turn_off": "{entity_name} \ub044\uae30", - "turn_on": "{entity_name} \ucf1c\uae30" - }, - "condition_type": { - "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", - "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74" - }, - "trigger_type": { - "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", - "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/lb.json b/homeassistant/components/switch/.translations/lb.json deleted file mode 100644 index a7f807e8dcd..00000000000 --- a/homeassistant/components/switch/.translations/lb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "{entity_name} \u00ebmschalten", - "turn_off": "{entity_name} ausschalten", - "turn_on": "{entity_name} uschalten" - }, - "condition_type": { - "is_off": "{entity_name} ass aus", - "is_on": "{entity_name} ass un" - }, - "trigger_type": { - "turned_off": "{entity_name} gouf ausgeschalt", - "turned_on": "{entity_name} gouf ugeschalt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/lv.json b/homeassistant/components/switch/.translations/lv.json deleted file mode 100644 index 7668dfa5ac8..00000000000 --- a/homeassistant/components/switch/.translations/lv.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "device_automation": { - "trigger_type": { - "turned_off": "{entity_name} tika izsl\u0113gta", - "turned_on": "{entity_name} tika iesl\u0113gta" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/nl.json b/homeassistant/components/switch/.translations/nl.json deleted file mode 100644 index 905ad413090..00000000000 --- a/homeassistant/components/switch/.translations/nl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Omschakelen {entity_name}", - "turn_off": "Zet {entity_name} uit.", - "turn_on": "Zet {entity_name} aan." - }, - "condition_type": { - "is_off": "{entity_name} is uitgeschakeld", - "is_on": "{entity_name} is ingeschakeld" - }, - "trigger_type": { - "turned_off": "{entity_name} uitgeschakeld", - "turned_on": "{entity_name} ingeschakeld" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/no.json b/homeassistant/components/switch/.translations/no.json deleted file mode 100644 index 785e9ca2912..00000000000 --- a/homeassistant/components/switch/.translations/no.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Veksle {entity_name}", - "turn_off": "Sl\u00e5 av {entity_name}", - "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} er av", - "is_on": "{entity_name} er p\u00e5" - }, - "trigger_type": { - "turned_off": "{entity_name} sl\u00e5tt av", - "turned_on": "{entity_name} sl\u00e5tt p\u00e5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/pl.json b/homeassistant/components/switch/.translations/pl.json deleted file mode 100644 index 930694de8ca..00000000000 --- a/homeassistant/components/switch/.translations/pl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "prze\u0142\u0105cz {entity_name}", - "turn_off": "wy\u0142\u0105cz {entity_name}", - "turn_on": "w\u0142\u0105cz {entity_name}" - }, - "condition_type": { - "is_off": "prze\u0142\u0105cznik {entity_name} jest wy\u0142\u0105czony", - "is_on": "prze\u0142\u0105cznik {entity_name} jest w\u0142\u0105czony" - }, - "trigger_type": { - "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", - "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/ru.json b/homeassistant/components/switch/.translations/ru.json deleted file mode 100644 index 8ca964606ae..00000000000 --- a/homeassistant/components/switch/.translations/ru.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", - "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" - }, - "trigger_type": { - "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/sl.json b/homeassistant/components/switch/.translations/sl.json deleted file mode 100644 index bef4f1583b6..00000000000 --- a/homeassistant/components/switch/.translations/sl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "Preklopite {entity_name}", - "turn_off": "Izklopite {entity_name}", - "turn_on": "Vklopite {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} je izklopljen", - "is_on": "{entity_name} je vklopljen" - }, - "trigger_type": { - "turned_off": "{entity_name} izklopljen", - "turned_on": "{entity_name} vklopljen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/sv.json b/homeassistant/components/switch/.translations/sv.json deleted file mode 100644 index ed5367e0013..00000000000 --- a/homeassistant/components/switch/.translations/sv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "V\u00e4xla {entity_name}", - "turn_off": "St\u00e4ng av {entity_name}", - "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" - }, - "condition_type": { - "is_off": "{entity_name} \u00e4r avst\u00e4ngd", - "is_on": "{entity_name} \u00e4r p\u00e5" - }, - "trigger_type": { - "turned_off": "{entity_name} st\u00e4ngdes av", - "turned_on": "{entity_name} slogs p\u00e5" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/.translations/zh-Hant.json b/homeassistant/components/switch/.translations/zh-Hant.json deleted file mode 100644 index d8bda90de85..00000000000 --- a/homeassistant/components/switch/.translations/zh-Hant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "device_automation": { - "action_type": { - "toggle": "\u5207\u63db{entity_name}", - "turn_off": "\u95dc\u9589{entity_name}", - "turn_on": "\u958b\u555f{entity_name}" - }, - "condition_type": { - "is_off": "{entity_name}\u5df2\u95dc\u9589", - "is_on": "{entity_name}\u5df2\u958b\u555f" - }, - "trigger_type": { - "turned_off": "{entity_name}\u5df2\u95dc\u9589", - "turned_on": "{entity_name}\u5df2\u958b\u555f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/switch/manifest.json b/homeassistant/components/switch/manifest.json index 37cdf77172c..6f0113d1b9c 100644 --- a/homeassistant/components/switch/manifest.json +++ b/homeassistant/components/switch/manifest.json @@ -2,8 +2,6 @@ "domain": "switch", "name": "Switch", "documentation": "https://www.home-assistant.io/integrations/switch", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/switch/reproduce_state.py b/homeassistant/components/switch/reproduce_state.py index d2bfc569956..0527f558f35 100644 --- a/homeassistant/components/switch/reproduce_state.py +++ b/homeassistant/components/switch/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Switch state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -21,7 +21,11 @@ VALID_STATES = {STATE_ON, STATE_OFF} async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -53,9 +57,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Switch states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/switch/services.yaml b/homeassistant/components/switch/services.yaml index 352ffb6feec..74dda2ddf4f 100644 --- a/homeassistant/components/switch/services.yaml +++ b/homeassistant/components/switch/services.yaml @@ -5,18 +5,18 @@ turn_on: fields: entity_id: description: Name(s) of entities to turn on - example: 'switch.living_room' + example: "switch.living_room" turn_off: description: Turn a switch off. fields: entity_id: description: Name(s) of entities to turn off. - example: 'switch.living_room' + example: "switch.living_room" toggle: description: Toggles a switch state. fields: entity_id: description: Name(s) of entities to toggle. - example: 'switch.living_room' + example: "switch.living_room" diff --git a/homeassistant/components/switch/strings.json b/homeassistant/components/switch/strings.json index 77b842ba078..45fa08ab1d6 100644 --- a/homeassistant/components/switch/strings.json +++ b/homeassistant/components/switch/strings.json @@ -1,4 +1,5 @@ { + "title": "Switch", "device_automation": { "action_type": { "toggle": "Toggle {entity_name}", @@ -13,5 +14,11 @@ "turned_on": "{entity_name} turned on", "turned_off": "{entity_name} turned off" } + }, + "state": { + "_": { + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]" + } } } diff --git a/homeassistant/components/switch/translations/af.json b/homeassistant/components/switch/translations/af.json new file mode 100644 index 00000000000..414dc496a7a --- /dev/null +++ b/homeassistant/components/switch/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Af", + "on": "Aan" + } + }, + "title": "Skakelaar" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ar.json b/homeassistant/components/switch/translations/ar.json new file mode 100644 index 00000000000..f11ab6dfe7e --- /dev/null +++ b/homeassistant/components/switch/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0625\u064a\u0642\u0627\u0641", + "on": "\u0645\u064f\u0634\u064e\u063a\u0651\u0644" + } + }, + "title": "\u0645\u0641\u062a\u0627\u062d" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/bg.json b/homeassistant/components/switch/translations/bg.json new file mode 100644 index 00000000000..15d23dff01b --- /dev/null +++ b/homeassistant/components/switch/translations/bg.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0438 {entity_name}", + "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438 {entity_name}", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u0435 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "is_on": "{entity_name} \u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d" + }, + "trigger_type": { + "turned_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 {entity_name}", + "turned_on": "\u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 {entity_name}" + } + }, + "state": { + "_": { + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d" + } + }, + "title": "\u041a\u043b\u044e\u0447" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/bs.json b/homeassistant/components/switch/translations/bs.json new file mode 100644 index 00000000000..abb44768b46 --- /dev/null +++ b/homeassistant/components/switch/translations/bs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Prekida\u010d" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ca.json b/homeassistant/components/switch/translations/ca.json new file mode 100644 index 00000000000..e7d31e28da0 --- /dev/null +++ b/homeassistant/components/switch/translations/ca.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Commuta {entity_name}", + "turn_off": "Desactiva {entity_name}", + "turn_on": "Activa {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e0 apagat", + "is_on": "{entity_name} est\u00e0 enc\u00e8s" + }, + "trigger_type": { + "turned_off": "{entity_name} desactivat", + "turned_on": "{entity_name} activat" + } + }, + "state": { + "_": { + "off": "Apagat", + "on": "Enc\u00e8s" + } + }, + "title": "Interruptors" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/cs.json b/homeassistant/components/switch/translations/cs.json new file mode 100644 index 00000000000..a4729db91dc --- /dev/null +++ b/homeassistant/components/switch/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Neaktivn\u00ed", + "on": "Aktivn\u00ed" + } + }, + "title": "Sp\u00edna\u010d" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/cy.json b/homeassistant/components/switch/translations/cy.json new file mode 100644 index 00000000000..5e1adae65c0 --- /dev/null +++ b/homeassistant/components/switch/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "i ffwrdd", + "on": "Ar" + } + }, + "title": "Newid" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/da.json b/homeassistant/components/switch/translations/da.json new file mode 100644 index 00000000000..406e2633f9f --- /dev/null +++ b/homeassistant/components/switch/translations/da.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Skift {entity_name}", + "turn_off": "Sluk {entity_name}", + "turn_on": "T\u00e6nd for {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} er fra", + "is_on": "{entity_name} er til" + }, + "trigger_type": { + "turned_off": "{entity_name} slukkede", + "turned_on": "{entity_name} t\u00e6ndte" + } + }, + "state": { + "_": { + "off": "Fra", + "on": "Til" + } + }, + "title": "Kontakt" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/de.json b/homeassistant/components/switch/translations/de.json new file mode 100644 index 00000000000..8883d1c1086 --- /dev/null +++ b/homeassistant/components/switch/translations/de.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "{entity_name} umschalten", + "turn_off": "Schalte {entity_name} aus.", + "turn_on": "Schalte {entity_name} ein." + }, + "condition_type": { + "is_off": "{entity_name} ist ausgeschaltet", + "is_on": "{entity_name} ist eingeschaltet" + }, + "trigger_type": { + "turned_off": "{entity_name} ausgeschaltet", + "turned_on": "{entity_name} eingeschaltet" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "An" + } + }, + "title": "Schalter" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/el.json b/homeassistant/components/switch/translations/el.json new file mode 100644 index 00000000000..99f3c728d01 --- /dev/null +++ b/homeassistant/components/switch/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc", + "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc" + } + }, + "title": "\u0394\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/en.json b/homeassistant/components/switch/translations/en.json new file mode 100644 index 00000000000..080cc8c6bbe --- /dev/null +++ b/homeassistant/components/switch/translations/en.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Toggle {entity_name}", + "turn_off": "Turn off {entity_name}", + "turn_on": "Turn on {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} is off", + "is_on": "{entity_name} is on" + }, + "trigger_type": { + "turned_off": "{entity_name} turned off", + "turned_on": "{entity_name} turned on" + } + }, + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Switch" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/es-419.json b/homeassistant/components/switch/translations/es-419.json new file mode 100644 index 00000000000..83dc31ade83 --- /dev/null +++ b/homeassistant/components/switch/translations/es-419.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "turn_off": "Desactivar {entity_name}", + "turn_on": "Activar {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 apagado", + "is_on": "{entity_name} est\u00e1 encendido" + }, + "trigger_type": { + "turned_off": "{entity_name} apagado", + "turned_on": "{entity_name} encendido" + } + }, + "state": { + "_": { + "off": "", + "on": "" + } + }, + "title": "Interruptor" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/es.json b/homeassistant/components/switch/translations/es.json new file mode 100644 index 00000000000..60c567e4888 --- /dev/null +++ b/homeassistant/components/switch/translations/es.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Alternar {entity_name}", + "turn_off": "Apagar {entity_name}", + "turn_on": "Encender {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est\u00e1 apagada", + "is_on": "{entity_name} est\u00e1 encendida" + }, + "trigger_type": { + "turned_off": "{entity_name} apagado", + "turned_on": "{entity_name} encendido" + } + }, + "state": { + "_": { + "off": "Apagado", + "on": "Encendido" + } + }, + "title": "Interruptor" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/et.json b/homeassistant/components/switch/translations/et.json new file mode 100644 index 00000000000..d992df0421f --- /dev/null +++ b/homeassistant/components/switch/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "V\u00e4ljas", + "on": "Sees" + } + }, + "title": "L\u00fcliti" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/eu.json b/homeassistant/components/switch/translations/eu.json new file mode 100644 index 00000000000..54b94079bed --- /dev/null +++ b/homeassistant/components/switch/translations/eu.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "Itzalita", + "on": "Piztuta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/fa.json b/homeassistant/components/switch/translations/fa.json new file mode 100644 index 00000000000..28b0ccee4b2 --- /dev/null +++ b/homeassistant/components/switch/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u062e\u0627\u0645\u0648\u0634", + "on": "\u0631\u0648\u0634\u0646" + } + }, + "title": "\u0633\u0648\u0626\u06cc\u0686" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/fi.json b/homeassistant/components/switch/translations/fi.json new file mode 100644 index 00000000000..301588056f4 --- /dev/null +++ b/homeassistant/components/switch/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Pois", + "on": "P\u00e4\u00e4ll\u00e4" + } + }, + "title": "Kytkin" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/fr.json b/homeassistant/components/switch/translations/fr.json new file mode 100644 index 00000000000..d0349369515 --- /dev/null +++ b/homeassistant/components/switch/translations/fr.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Basculer {entity_name}", + "turn_off": "\u00c9teindre {entity_name}", + "turn_on": "Allumer {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} est \u00e9teint", + "is_on": "{entity_name} est allum\u00e9" + }, + "trigger_type": { + "turned_off": "{entity_name} \u00e9teint", + "turned_on": "{entity_name} allum\u00e9" + } + }, + "state": { + "_": { + "off": "Inactif", + "on": "On" + } + }, + "title": "Interrupteur" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/gsw.json b/homeassistant/components/switch/translations/gsw.json new file mode 100644 index 00000000000..4f25a96724c --- /dev/null +++ b/homeassistant/components/switch/translations/gsw.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Us", + "on": "Ah" + } + }, + "title": "Schauter" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/he.json b/homeassistant/components/switch/translations/he.json new file mode 100644 index 00000000000..23fbb7755f3 --- /dev/null +++ b/homeassistant/components/switch/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u05db\u05d1\u05d5\u05d9", + "on": "\u05d3\u05dc\u05d5\u05e7" + } + }, + "title": "\u05de\u05ea\u05d2" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/hi.json b/homeassistant/components/switch/translations/hi.json new file mode 100644 index 00000000000..50622ef47cb --- /dev/null +++ b/homeassistant/components/switch/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" + } + }, + "title": "\u0938\u094d\u0935\u093f\u091a" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/hr.json b/homeassistant/components/switch/translations/hr.json new file mode 100644 index 00000000000..abb44768b46 --- /dev/null +++ b/homeassistant/components/switch/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + }, + "title": "Prekida\u010d" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/hu.json b/homeassistant/components/switch/translations/hu.json new file mode 100644 index 00000000000..96d32588a20 --- /dev/null +++ b/homeassistant/components/switch/translations/hu.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "{entity_name} be/kikapcsol\u00e1sa", + "turn_off": "{entity_name} kikapcsol\u00e1sa", + "turn_on": "{entity_name} bekapcsol\u00e1sa" + }, + "condition_type": { + "is_off": "{entity_name} ki van kapcsolva", + "is_on": "{entity_name} be van kapcsolva" + }, + "trigger_type": { + "turned_off": "{entity_name} ki lett kapcsolva", + "turned_on": "{entity_name} be lett kapcsolva" + } + }, + "state": { + "_": { + "off": "Ki", + "on": "Be" + } + }, + "title": "Kapcsol\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/hy.json b/homeassistant/components/switch/translations/hy.json new file mode 100644 index 00000000000..c6ffaf0d179 --- /dev/null +++ b/homeassistant/components/switch/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0561\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u0574\u056b\u0561\u0581\u0561\u056e" + } + }, + "title": "\u0531\u0576\u057b\u0561\u057f\u056b\u0579" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/id.json b/homeassistant/components/switch/translations/id.json new file mode 100644 index 00000000000..891b1b00681 --- /dev/null +++ b/homeassistant/components/switch/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Off", + "on": "On" + } + }, + "title": "Sakelar" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/is.json b/homeassistant/components/switch/translations/is.json new file mode 100644 index 00000000000..35751f3f4f6 --- /dev/null +++ b/homeassistant/components/switch/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Sl\u00f6kkt", + "on": "Kveikt" + } + }, + "title": "Rofi" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/it.json b/homeassistant/components/switch/translations/it.json new file mode 100644 index 00000000000..4ffd50e538f --- /dev/null +++ b/homeassistant/components/switch/translations/it.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Attivare / Disattivare {entity_name}", + "turn_off": "Disattivare {entity_name}", + "turn_on": "Attivare {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u00e8 disattivato", + "is_on": "{entity_name} \u00e8 attivo" + }, + "trigger_type": { + "turned_off": "{entity_name} disattivato", + "turned_on": "{entity_name} attivato" + } + }, + "state": { + "_": { + "off": "Spento", + "on": "Acceso" + } + }, + "title": "Interruttore" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ja.json b/homeassistant/components/switch/translations/ja.json new file mode 100644 index 00000000000..42b7ddc7d06 --- /dev/null +++ b/homeassistant/components/switch/translations/ja.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u30aa\u30d5", + "on": "\u30aa\u30f3" + } + }, + "title": "\u30b9\u30a4\u30c3\u30c1" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ko.json b/homeassistant/components/switch/translations/ko.json new file mode 100644 index 00000000000..1779f3e1f64 --- /dev/null +++ b/homeassistant/components/switch/translations/ko.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "{entity_name} \ud1a0\uae00", + "turn_off": "{entity_name} \ub044\uae30", + "turn_on": "{entity_name} \ucf1c\uae30" + }, + "condition_type": { + "is_off": "{entity_name} \uc774(\uac00) \uaebc\uc838 \uc788\uc73c\uba74", + "is_on": "{entity_name} \uc774(\uac00) \ucf1c\uc838 \uc788\uc73c\uba74" + }, + "trigger_type": { + "turned_off": "{entity_name} \uc774(\uac00) \uaebc\uc9c8 \ub54c", + "turned_on": "{entity_name} \uc774(\uac00) \ucf1c\uc9c8 \ub54c" + } + }, + "state": { + "_": { + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0" + } + }, + "title": "\uc2a4\uc704\uce58" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/lb.json b/homeassistant/components/switch/translations/lb.json new file mode 100644 index 00000000000..7b644bd37ad --- /dev/null +++ b/homeassistant/components/switch/translations/lb.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "{entity_name} \u00ebmschalten", + "turn_off": "{entity_name} ausschalten", + "turn_on": "{entity_name} uschalten" + }, + "condition_type": { + "is_off": "{entity_name} ass aus", + "is_on": "{entity_name} ass un" + }, + "trigger_type": { + "turned_off": "{entity_name} gouf ausgeschalt", + "turned_on": "{entity_name} gouf ugeschalt" + } + }, + "state": { + "_": { + "off": "Aus", + "on": "Un" + } + }, + "title": "Schalter" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/lt.json b/homeassistant/components/switch/translations/lt.json new file mode 100644 index 00000000000..3cf0e9b442d --- /dev/null +++ b/homeassistant/components/switch/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "I\u0161jungta", + "on": "\u012ejungta" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/lv.json b/homeassistant/components/switch/translations/lv.json new file mode 100644 index 00000000000..f737d26dedd --- /dev/null +++ b/homeassistant/components/switch/translations/lv.json @@ -0,0 +1,15 @@ +{ + "device_automation": { + "trigger_type": { + "turned_off": "{entity_name} tika izsl\u0113gta", + "turned_on": "{entity_name} tika iesl\u0113gta" + } + }, + "state": { + "_": { + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts" + } + }, + "title": "Sl\u0113dzis" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/nb.json b/homeassistant/components/switch/translations/nb.json new file mode 100644 index 00000000000..f6f13d99f27 --- /dev/null +++ b/homeassistant/components/switch/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Bryter" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/nl.json b/homeassistant/components/switch/translations/nl.json new file mode 100644 index 00000000000..25864a8727e --- /dev/null +++ b/homeassistant/components/switch/translations/nl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Omschakelen {entity_name}", + "turn_off": "Zet {entity_name} uit.", + "turn_on": "Zet {entity_name} aan." + }, + "condition_type": { + "is_off": "{entity_name} is uitgeschakeld", + "is_on": "{entity_name} is ingeschakeld" + }, + "trigger_type": { + "turned_off": "{entity_name} uitgeschakeld", + "turned_on": "{entity_name} ingeschakeld" + } + }, + "state": { + "_": { + "off": "Uit", + "on": "Aan" + } + }, + "title": "Schakelaar" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/nn.json b/homeassistant/components/switch/translations/nn.json new file mode 100644 index 00000000000..dcd44653057 --- /dev/null +++ b/homeassistant/components/switch/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Brytar" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/no.json b/homeassistant/components/switch/translations/no.json new file mode 100644 index 00000000000..dc57fa94203 --- /dev/null +++ b/homeassistant/components/switch/translations/no.json @@ -0,0 +1,18 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Veksle {entity_name}", + "turn_off": "Sl\u00e5 av {entity_name}", + "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} er av", + "is_on": "{entity_name} er p\u00e5" + }, + "trigger_type": { + "turned_off": "{entity_name} sl\u00e5tt av", + "turned_on": "{entity_name} sl\u00e5tt p\u00e5" + } + }, + "title": "Bryter" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/pl.json b/homeassistant/components/switch/translations/pl.json new file mode 100644 index 00000000000..4b3aebf30b4 --- /dev/null +++ b/homeassistant/components/switch/translations/pl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "prze\u0142\u0105cz {entity_name}", + "turn_off": "wy\u0142\u0105cz {entity_name}", + "turn_on": "w\u0142\u0105cz {entity_name}" + }, + "condition_type": { + "is_off": "prze\u0142\u0105cznik {entity_name} jest wy\u0142\u0105czony", + "is_on": "prze\u0142\u0105cznik {entity_name} jest w\u0142\u0105czony" + }, + "trigger_type": { + "turned_off": "nast\u0105pi wy\u0142\u0105czenie {entity_name}", + "turned_on": "nast\u0105pi w\u0142\u0105czenie {entity_name}" + } + }, + "state": { + "_": { + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony" + } + }, + "title": "Prze\u0142\u0105cznik" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/pt-BR.json b/homeassistant/components/switch/translations/pt-BR.json new file mode 100644 index 00000000000..a3dcc96c80b --- /dev/null +++ b/homeassistant/components/switch/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Interruptor" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/pt.json b/homeassistant/components/switch/translations/pt.json new file mode 100644 index 00000000000..a3dcc96c80b --- /dev/null +++ b/homeassistant/components/switch/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Desligado", + "on": "Ligado" + } + }, + "title": "Interruptor" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ro.json b/homeassistant/components/switch/translations/ro.json new file mode 100644 index 00000000000..96487ad0721 --- /dev/null +++ b/homeassistant/components/switch/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Oprit", + "on": "Pornit" + } + }, + "title": "Comutator" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ru.json b/homeassistant/components/switch/translations/ru.json new file mode 100644 index 00000000000..4ff5c7c208e --- /dev/null +++ b/homeassistant/components/switch/translations/ru.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438", + "is_on": "{entity_name} \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438" + }, + "trigger_type": { + "turned_off": "{entity_name} \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turned_on": "{entity_name} \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + } + }, + "state": { + "_": { + "off": "\u0412\u044b\u043a\u043b", + "on": "\u0412\u043a\u043b" + } + }, + "title": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/sk.json b/homeassistant/components/switch/translations/sk.json new file mode 100644 index 00000000000..3f871c8a4a1 --- /dev/null +++ b/homeassistant/components/switch/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Vypnut\u00fd", + "on": "Zapnut\u00fd" + } + }, + "title": "Prep\u00edna\u010d" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/sl.json b/homeassistant/components/switch/translations/sl.json new file mode 100644 index 00000000000..7995033d1c2 --- /dev/null +++ b/homeassistant/components/switch/translations/sl.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "Preklopite {entity_name}", + "turn_off": "Izklopite {entity_name}", + "turn_on": "Vklopite {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} je izklopljen", + "is_on": "{entity_name} je vklopljen" + }, + "trigger_type": { + "turned_off": "{entity_name} izklopljen", + "turned_on": "{entity_name} vklopljen" + } + }, + "state": { + "_": { + "off": "Izklju\u010den", + "on": "Vklopljen" + } + }, + "title": "Stikalo" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/sr.json b/homeassistant/components/switch/translations/sr.json new file mode 100644 index 00000000000..2fd5c74c86c --- /dev/null +++ b/homeassistant/components/switch/translations/sr.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "off": "Isklju\u010den", + "on": "Uklju\u010den" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/sv.json b/homeassistant/components/switch/translations/sv.json new file mode 100644 index 00000000000..a2cd74434eb --- /dev/null +++ b/homeassistant/components/switch/translations/sv.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "V\u00e4xla {entity_name}", + "turn_off": "St\u00e4ng av {entity_name}", + "turn_on": "Sl\u00e5 p\u00e5 {entity_name}" + }, + "condition_type": { + "is_off": "{entity_name} \u00e4r avst\u00e4ngd", + "is_on": "{entity_name} \u00e4r p\u00e5" + }, + "trigger_type": { + "turned_off": "{entity_name} st\u00e4ngdes av", + "turned_on": "{entity_name} slogs p\u00e5" + } + }, + "state": { + "_": { + "off": "Av", + "on": "P\u00e5" + } + }, + "title": "Kontakt" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/ta.json b/homeassistant/components/switch/translations/ta.json new file mode 100644 index 00000000000..8d78a2dc1be --- /dev/null +++ b/homeassistant/components/switch/translations/ta.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0b86\u0b83\u0baa\u0bcd", + "on": "\u0b86\u0ba9\u0bcd" + } + }, + "title": "\u0bb8\u0bcd\u0bb5\u0bbf\u0b9f\u0bcd\u0b9a\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/te.json b/homeassistant/components/switch/translations/te.json new file mode 100644 index 00000000000..12c8917f822 --- /dev/null +++ b/homeassistant/components/switch/translations/te.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0c06\u0c2b\u0c4d", + "on": "\u0c06\u0c28\u0c4d" + } + }, + "title": "\u0c38\u0c4d\u0c35\u0c3f\u0c1a\u0c4d" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/th.json b/homeassistant/components/switch/translations/th.json new file mode 100644 index 00000000000..13fa61d7fb1 --- /dev/null +++ b/homeassistant/components/switch/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14" + } + }, + "title": "\u0e2a\u0e27\u0e34\u0e15\u0e0b\u0e4c" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/tr.json b/homeassistant/components/switch/translations/tr.json new file mode 100644 index 00000000000..0bbe4d5abf6 --- /dev/null +++ b/homeassistant/components/switch/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k" + } + }, + "title": "Anahtar" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/uk.json b/homeassistant/components/switch/translations/uk.json new file mode 100644 index 00000000000..7ac96bd7039 --- /dev/null +++ b/homeassistant/components/switch/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e" + } + }, + "title": "\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u0447" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/vi.json b/homeassistant/components/switch/translations/vi.json new file mode 100644 index 00000000000..d501c306187 --- /dev/null +++ b/homeassistant/components/switch/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "T\u1eaft", + "on": "B\u1eadt" + } + }, + "title": "C\u00f4ng t\u1eafc" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/zh-Hans.json b/homeassistant/components/switch/translations/zh-Hans.json new file mode 100644 index 00000000000..eed1df46204 --- /dev/null +++ b/homeassistant/components/switch/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "off": "\u5173", + "on": "\u5f00" + } + }, + "title": "\u5f00\u5173" +} \ No newline at end of file diff --git a/homeassistant/components/switch/translations/zh-Hant.json b/homeassistant/components/switch/translations/zh-Hant.json new file mode 100644 index 00000000000..6ce2ab3d29a --- /dev/null +++ b/homeassistant/components/switch/translations/zh-Hant.json @@ -0,0 +1,24 @@ +{ + "device_automation": { + "action_type": { + "toggle": "\u5207\u63db{entity_name}", + "turn_off": "\u95dc\u9589{entity_name}", + "turn_on": "\u958b\u555f{entity_name}" + }, + "condition_type": { + "is_off": "{entity_name}\u5df2\u95dc\u9589", + "is_on": "{entity_name}\u5df2\u958b\u555f" + }, + "trigger_type": { + "turned_off": "{entity_name}\u5df2\u95dc\u9589", + "turned_on": "{entity_name}\u5df2\u958b\u555f" + } + }, + "state": { + "_": { + "off": "\u95dc\u9589", + "on": "\u958b\u5553" + } + }, + "title": "\u958b\u95dc" +} \ No newline at end of file diff --git a/homeassistant/components/switchbot/manifest.json b/homeassistant/components/switchbot/manifest.json index b076b254b9f..2bbca5ae50a 100644 --- a/homeassistant/components/switchbot/manifest.json +++ b/homeassistant/components/switchbot/manifest.json @@ -3,6 +3,5 @@ "name": "SwitchBot", "documentation": "https://www.home-assistant.io/integrations/switchbot", "requirements": ["PySwitchbot==0.8.0"], - "dependencies": [], "codeowners": ["@danielhiversen"] } diff --git a/homeassistant/components/switcher_kis/services.yaml b/homeassistant/components/switcher_kis/services.yaml index 5408a204990..39691752445 100644 --- a/homeassistant/components/switcher_kis/services.yaml +++ b/homeassistant/components/switcher_kis/services.yaml @@ -1,9 +1,9 @@ set_auto_off: - description: 'Update Switcher device auto off setting.' + description: "Update Switcher device auto off setting." fields: entity_id: description: "Name of the entity id associated with the integration, used for permission validation." example: "switch.switcher_kis_boiler" auto_off: - description: 'Time period string containing hours and minutes.' + description: "Time period string containing hours and minutes." example: '"02:30"' diff --git a/homeassistant/components/switcher_kis/switch.py b/homeassistant/components/switcher_kis/switch.py index 8c9c9e1a6fa..ea32183b511 100644 --- a/homeassistant/components/switcher_kis/switch.py +++ b/homeassistant/components/switcher_kis/switch.py @@ -109,8 +109,10 @@ class SwitcherControl(SwitchDevice): async def async_added_to_hass(self) -> None: """Run when entity about to be added to hass.""" - async_dispatcher_connect( - self.hass, SIGNAL_SWITCHER_DEVICE_UPDATE, self.async_update_data + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_SWITCHER_DEVICE_UPDATE, self.async_update_data + ) ) async def async_update_data(self, device_data: "SwitcherV2Device") -> None: @@ -121,7 +123,7 @@ class SwitcherControl(SwitchDevice): else: self._device_data = device_data self._state = self._device_data.state - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_on(self, **kwargs: Dict) -> None: """Turn the entity on.""" @@ -149,4 +151,4 @@ class SwitcherControl(SwitchDevice): if response and response.successful: self._self_initiated = True self._state = SWITCHER_STATE_ON if send_on else SWITCHER_STATE_OFF - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/switchmate/manifest.json b/homeassistant/components/switchmate/manifest.json index 1035b86d6ce..30dc08d1dce 100644 --- a/homeassistant/components/switchmate/manifest.json +++ b/homeassistant/components/switchmate/manifest.json @@ -3,6 +3,5 @@ "name": "Switchmate SimplySmart Home", "documentation": "https://www.home-assistant.io/integrations/switchmate", "requirements": ["pySwitchmate==0.4.6"], - "dependencies": [], "codeowners": ["@danielhiversen"] } diff --git a/homeassistant/components/syncthru/manifest.json b/homeassistant/components/syncthru/manifest.json index ac9f6f8b2cc..a891a00f41d 100644 --- a/homeassistant/components/syncthru/manifest.json +++ b/homeassistant/components/syncthru/manifest.json @@ -3,6 +3,5 @@ "name": "Samsung SyncThru Printer", "documentation": "https://www.home-assistant.io/integrations/syncthru", "requirements": ["pysyncthru==0.5.0"], - "dependencies": [], "codeowners": ["@nielstron"] } diff --git a/homeassistant/components/synology/camera.py b/homeassistant/components/synology/camera.py index c144a251608..5a619c821dc 100644 --- a/homeassistant/components/synology/camera.py +++ b/homeassistant/components/synology/camera.py @@ -1,4 +1,5 @@ """Support for Synology Surveillance Station Cameras.""" +from functools import partial import logging import requests @@ -45,12 +46,15 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= timeout = config.get(CONF_TIMEOUT) try: - surveillance = SurveillanceStation( - config.get(CONF_URL), - config.get(CONF_USERNAME), - config.get(CONF_PASSWORD), - verify_ssl=verify_ssl, - timeout=timeout, + surveillance = await hass.async_add_executor_job( + partial( + SurveillanceStation, + config.get(CONF_URL), + config.get(CONF_USERNAME), + config.get(CONF_PASSWORD), + verify_ssl=verify_ssl, + timeout=timeout, + ) ) except (requests.exceptions.RequestException, ValueError): _LOGGER.exception("Error when initializing SurveillanceStation") diff --git a/homeassistant/components/synology/manifest.json b/homeassistant/components/synology/manifest.json index c541a4903c1..a29dccc2a78 100644 --- a/homeassistant/components/synology/manifest.json +++ b/homeassistant/components/synology/manifest.json @@ -3,6 +3,5 @@ "name": "Synology", "documentation": "https://www.home-assistant.io/integrations/synology", "requirements": ["py-synology==0.2.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/synology_chat/manifest.json b/homeassistant/components/synology_chat/manifest.json index bfc888b99d9..e11e7911488 100644 --- a/homeassistant/components/synology_chat/manifest.json +++ b/homeassistant/components/synology_chat/manifest.json @@ -2,7 +2,5 @@ "domain": "synology_chat", "name": "Synology Chat", "documentation": "https://www.home-assistant.io/integrations/synology_chat", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/synology_chat/notify.py b/homeassistant/components/synology_chat/notify.py index 3e1aeb4ce13..c8f665cb408 100644 --- a/homeassistant/components/synology_chat/notify.py +++ b/homeassistant/components/synology_chat/notify.py @@ -10,7 +10,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONF_RESOURCE, CONF_VERIFY_SSL +from homeassistant.const import CONF_RESOURCE, CONF_VERIFY_SSL, HTTP_OK import homeassistant.helpers.config_validation as cv ATTR_FILE_URL = "file_url" @@ -57,7 +57,7 @@ class SynologyChatNotificationService(BaseNotificationService): self._resource, data=to_send, timeout=10, verify=self._verify_ssl ) - if response.status_code not in (200, 201): + if response.status_code not in (HTTP_OK, 201): _LOGGER.exception( "Error sending message. Response %d: %s:", response.status_code, diff --git a/homeassistant/components/synology_dsm/__init__.py b/homeassistant/components/synology_dsm/__init__.py new file mode 100644 index 00000000000..3fbed6955d9 --- /dev/null +++ b/homeassistant/components/synology_dsm/__init__.py @@ -0,0 +1,161 @@ +"""The Synology DSM component.""" +from datetime import timedelta + +from synology_dsm import SynologyDSM +from synology_dsm.api.core.utilization import SynoCoreUtilization +from synology_dsm.api.dsm.information import SynoDSMInformation +from synology_dsm.api.storage.storage import SynoStorage +import voluptuous as vol + +from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry +from homeassistant.const import ( + CONF_DISKS, + CONF_HOST, + CONF_PASSWORD, + CONF_PORT, + CONF_SSL, + CONF_USERNAME, +) +import homeassistant.helpers.config_validation as cv +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_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.Required(CONF_USERNAME): cv.string, + vol.Required(CONF_PASSWORD): cv.string, + vol.Optional(CONF_DISKS): cv.ensure_list, + vol.Optional(CONF_VOLUMES): cv.ensure_list, + } +) + +CONFIG_SCHEMA = vol.Schema( + {DOMAIN: vol.Schema(vol.All(cv.ensure_list, [CONFIG_SCHEMA]))}, + extra=vol.ALLOW_EXTRA, +) + +SCAN_INTERVAL = timedelta(minutes=15) + + +async def async_setup(hass, config): + """Set up Synology DSM sensors from legacy config file.""" + + conf = config.get(DOMAIN) + if conf is None: + return True + + for dsm_conf in conf: + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_IMPORT}, data=dsm_conf, + ) + ) + + return True + + +async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry): + """Set up Synology DSM sensors.""" + host = entry.data[CONF_HOST] + port = entry.data[CONF_PORT] + username = entry.data[CONF_USERNAME] + password = entry.data[CONF_PASSWORD] + unit = hass.config.units.temperature_unit + use_ssl = entry.data[CONF_SSL] + device_token = entry.data.get("device_token") + + api = SynoApi(hass, host, port, username, password, unit, use_ssl, device_token) + + await api.async_setup() + + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN][entry.unique_id] = api + + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, "sensor") + ) + + return True + + +async def async_unload_entry(hass: HomeAssistantType, entry: ConfigEntry): + """Unload Synology DSM sensors.""" + api = hass.data[DOMAIN][entry.unique_id] + await api.async_unload() + return await hass.config_entries.async_forward_entry_unload(entry, "sensor") + + +class SynoApi: + """Class to interface with Synology DSM API.""" + + def __init__( + self, + hass: HomeAssistantType, + host: str, + port: int, + username: str, + password: str, + temp_unit: str, + use_ssl: bool, + device_token: str, + ): + """Initialize the API wrapper class.""" + self._hass = hass + self._host = host + self._port = port + self._username = username + self._password = password + self._use_ssl = use_ssl + self._device_token = device_token + self.temp_unit = temp_unit + + self._dsm: SynologyDSM = None + self.information: SynoDSMInformation = None + self.utilisation: SynoCoreUtilization = None + self.storage: SynoStorage = None + + self._unsub_dispatcher = None + + @property + def signal_sensor_update(self) -> str: + """Event specific per Synology DSM entry to signal updates in sensors.""" + return f"{DOMAIN}-{self.information.serial}-sensor-update" + + async def async_setup(self): + """Start interacting with the NAS.""" + self._dsm = SynologyDSM( + self._host, + self._port, + self._username, + self._password, + self._use_ssl, + device_token=self._device_token, + ) + + await self._hass.async_add_executor_job(self._fetch_device_configuration) + await self.update() + + self._unsub_dispatcher = async_track_time_interval( + self._hass, self.update, SCAN_INTERVAL + ) + + def _fetch_device_configuration(self): + """Fetch initial device config.""" + self.information = self._dsm.information + self.utilisation = self._dsm.utilisation + self.storage = self._dsm.storage + + async def async_unload(self): + """Stop interacting with the NAS and prepare for removal from hass.""" + self._unsub_dispatcher() + + async def update(self, now=None): + """Update function for updating API information.""" + await self._hass.async_add_executor_job(self._dsm.update) + async_dispatcher_send(self._hass, self.signal_sensor_update) diff --git a/homeassistant/components/synology_dsm/config_flow.py b/homeassistant/components/synology_dsm/config_flow.py new file mode 100644 index 00000000000..4b09e516451 --- /dev/null +++ b/homeassistant/components/synology_dsm/config_flow.py @@ -0,0 +1,235 @@ +"""Config flow to configure the Synology DSM integration.""" +import logging +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_DISKS, + CONF_HOST, + CONF_NAME, + CONF_PASSWORD, + CONF_PORT, + CONF_SSL, + CONF_USERNAME, +) + +from .const import CONF_VOLUMES, DEFAULT_PORT, DEFAULT_PORT_SSL, DEFAULT_SSL +from .const import DOMAIN # pylint: disable=unused-import + +_LOGGER = logging.getLogger(__name__) + +CONF_OTP_CODE = "otp_code" + + +def _discovery_schema_with_defaults(discovery_info): + return vol.Schema(_ordered_shared_schema(discovery_info)) + + +def _user_schema_with_defaults(user_input): + user_schema = { + vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str, + } + user_schema.update(_ordered_shared_schema(user_input)) + + return vol.Schema(user_schema) + + +def _ordered_shared_schema(schema_input): + return { + vol.Required(CONF_USERNAME, default=schema_input.get(CONF_USERNAME, "")): str, + 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, + } + + +class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL + + def __init__(self): + """Initialize the synology_dsm config flow.""" + self.saved_user_input = {} + self.discovered_conf = {} + + async def _show_setup_form(self, user_input=None, errors=None): + """Show the setup form to the user.""" + if not user_input: + user_input = {} + + if self.discovered_conf: + user_input.update(self.discovered_conf) + step_id = "link" + data_schema = _discovery_schema_with_defaults(user_input) + else: + step_id = "user" + data_schema = _user_schema_with_defaults(user_input) + + return self.async_show_form( + step_id=step_id, + data_schema=data_schema, + errors=errors or {}, + description_placeholders=self.discovered_conf or {}, + ) + + async def async_step_user(self, user_input=None): + """Handle a flow initiated by the user.""" + errors = {} + + if user_input is None: + return await self._show_setup_form(user_input, None) + + if self.discovered_conf: + user_input.update(self.discovered_conf) + + host = user_input[CONF_HOST] + port = user_input.get(CONF_PORT) + username = user_input[CONF_USERNAME] + password = user_input[CONF_PASSWORD] + use_ssl = user_input.get(CONF_SSL, DEFAULT_SSL) + otp_code = user_input.get(CONF_OTP_CODE) + + if not port: + if use_ssl is True: + port = DEFAULT_PORT_SSL + else: + port = DEFAULT_PORT + + api = SynologyDSM(host, port, username, password, use_ssl) + + try: + serial = await self.hass.async_add_executor_job( + _login_and_fetch_syno_info, api, otp_code + ) + except SynologyDSMLogin2SARequiredException: + return await self.async_step_2sa(user_input) + except SynologyDSMLogin2SAFailedException: + errors[CONF_OTP_CODE] = "otp_failed" + user_input[CONF_OTP_CODE] = None + return await self.async_step_2sa(user_input, errors) + except SynologyDSMLoginInvalidException as ex: + _LOGGER.error(ex) + errors[CONF_USERNAME] = "login" + except SynologyDSMRequestException as ex: + _LOGGER.error(ex) + errors[CONF_HOST] = "connection" + except SynologyDSMException as ex: + _LOGGER.error(ex) + errors["base"] = "unknown" + except InvalidData: + errors["base"] = "missing_data" + + if errors: + return await self._show_setup_form(user_input, errors) + + # Check if already configured + await self.async_set_unique_id(serial, raise_on_progress=False) + self._abort_if_unique_id_configured() + + config_data = { + CONF_HOST: host, + CONF_PORT: port, + CONF_SSL: use_ssl, + CONF_USERNAME: username, + CONF_PASSWORD: password, + } + if otp_code: + config_data["device_token"] = api.device_token + if user_input.get(CONF_DISKS): + config_data[CONF_DISKS] = user_input[CONF_DISKS] + if user_input.get(CONF_VOLUMES): + config_data[CONF_VOLUMES] = user_input[CONF_VOLUMES] + + return self.async_create_entry(title=host, data=config_data) + + async def async_step_ssdp(self, discovery_info): + """Handle a discovered synology_dsm.""" + parsed_url = urlparse(discovery_info[ssdp.ATTR_SSDP_LOCATION]) + friendly_name = ( + discovery_info[ssdp.ATTR_UPNP_FRIENDLY_NAME].split("(", 1)[0].strip() + ) + + 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, + } + # pylint: disable=no-member # https://github.com/PyCQA/pylint/issues/3167 + self.context["title_placeholders"] = self.discovered_conf + return await self.async_step_user() + + async def async_step_import(self, user_input=None): + """Import a config entry.""" + return await self.async_step_user(user_input) + + async def async_step_link(self, user_input): + """Link a config entry from discovery.""" + return await self.async_step_user(user_input) + + async def async_step_2sa(self, user_input, errors=None): + """Enter 2SA code to anthenticate.""" + if not self.saved_user_input: + self.saved_user_input = user_input + + if not user_input.get(CONF_OTP_CODE): + return self.async_show_form( + step_id="2sa", + data_schema=vol.Schema({vol.Required(CONF_OTP_CODE): str}), + errors=errors or {}, + ) + + user_input = {**self.saved_user_input, **user_input} + self.saved_user_input = {} + + return await self.async_step_user(user_input) + + def _host_already_configured(self, hostname): + """See if we already have a host matching user input configured.""" + existing_hosts = { + entry.data[CONF_HOST] for entry in self._async_current_entries() + } + return hostname in existing_hosts + + +def _login_and_fetch_syno_info(api, otp_code): + """Login to the NAS and fetch basic data.""" + # These do i/o + api.login(otp_code) + utilisation = api.utilisation + storage = api.storage + + if ( + 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 api.information.serial + + +class InvalidData(exceptions.HomeAssistantError): + """Error to indicate we get invalid data from the nas.""" diff --git a/homeassistant/components/synology_dsm/const.py b/homeassistant/components/synology_dsm/const.py new file mode 100644 index 00000000000..8c17de5e997 --- /dev/null +++ b/homeassistant/components/synology_dsm/const.py @@ -0,0 +1,54 @@ +"""Constants for Synology DSM.""" +from homeassistant.const import ( + DATA_MEGABYTES, + DATA_RATE_KILOBYTES_PER_SECOND, + UNIT_PERCENTAGE, +) + +DOMAIN = "synology_dsm" +BASE_NAME = "Synology" + +CONF_VOLUMES = "volumes" +DEFAULT_SSL = True +DEFAULT_PORT = 5000 +DEFAULT_PORT_SSL = 5001 + +UTILISATION_SENSORS = { + "cpu_other_load": ["CPU Load (Other)", UNIT_PERCENTAGE, "mdi:chip"], + "cpu_user_load": ["CPU Load (User)", UNIT_PERCENTAGE, "mdi:chip"], + "cpu_system_load": ["CPU Load (System)", UNIT_PERCENTAGE, "mdi:chip"], + "cpu_total_load": ["CPU Load (Total)", UNIT_PERCENTAGE, "mdi:chip"], + "cpu_1min_load": ["CPU Load (1 min)", UNIT_PERCENTAGE, "mdi:chip"], + "cpu_5min_load": ["CPU Load (5 min)", UNIT_PERCENTAGE, "mdi:chip"], + "cpu_15min_load": ["CPU Load (15 min)", UNIT_PERCENTAGE, "mdi:chip"], + "memory_real_usage": ["Memory Usage (Real)", UNIT_PERCENTAGE, "mdi:memory"], + "memory_size": ["Memory Size", DATA_MEGABYTES, "mdi:memory"], + "memory_cached": ["Memory Cached", DATA_MEGABYTES, "mdi:memory"], + "memory_available_swap": ["Memory Available (Swap)", DATA_MEGABYTES, "mdi:memory"], + "memory_available_real": ["Memory Available (Real)", DATA_MEGABYTES, "mdi:memory"], + "memory_total_swap": ["Memory Total (Swap)", DATA_MEGABYTES, "mdi:memory"], + "memory_total_real": ["Memory Total (Real)", DATA_MEGABYTES, "mdi:memory"], + "network_up": ["Network Up", DATA_RATE_KILOBYTES_PER_SECOND, "mdi:upload"], + "network_down": ["Network Down", DATA_RATE_KILOBYTES_PER_SECOND, "mdi:download"], +} +STORAGE_VOL_SENSORS = { + "volume_status": ["Status", None, "mdi:checkbox-marked-circle-outline"], + "volume_device_type": ["Type", None, "mdi:harddisk"], + "volume_size_total": ["Total Size", None, "mdi:chart-pie"], + "volume_size_used": ["Used Space", None, "mdi:chart-pie"], + "volume_percentage_used": ["Volume Used", UNIT_PERCENTAGE, "mdi:chart-pie"], + "volume_disk_temp_avg": ["Average Disk Temp", None, "mdi:thermometer"], + "volume_disk_temp_max": ["Maximum Disk Temp", None, "mdi:thermometer"], +} +STORAGE_DISK_SENSORS = { + "disk_name": ["Name", None, "mdi:harddisk"], + "disk_device": ["Device", None, "mdi:dots-horizontal"], + "disk_smart_status": ["Status (Smart)", None, "mdi:checkbox-marked-circle-outline"], + "disk_status": ["Status", None, "mdi:checkbox-marked-circle-outline"], + "disk_exceed_bad_sector_thr": ["Exceeded Max Bad Sectors", None, "mdi:test-tube"], + "disk_below_remain_life_thr": ["Below Min Remaining Life", None, "mdi:test-tube"], + "disk_temp": ["Temperature", None, "mdi:thermometer"], +} + + +TEMP_SENSORS_KEYS = ["volume_disk_temp_avg", "volume_disk_temp_max", "disk_temp"] diff --git a/homeassistant/components/synology_dsm/manifest.json b/homeassistant/components/synology_dsm/manifest.json new file mode 100644 index 00000000000..bb3c5ce3aec --- /dev/null +++ b/homeassistant/components/synology_dsm/manifest.json @@ -0,0 +1,14 @@ +{ + "domain": "synology_dsm", + "name": "Synology DSM", + "documentation": "https://www.home-assistant.io/integrations/synology_dsm", + "requirements": ["python-synology==0.7.3"], + "codeowners": ["@ProtoThis", "@Quentame"], + "config_flow": true, + "ssdp": [ + { + "manufacturer": "Synology", + "deviceType": "urn:schemas-upnp-org:device:Basic:1" + } + ] +} diff --git a/homeassistant/components/synology_dsm/sensor.py b/homeassistant/components/synology_dsm/sensor.py new file mode 100644 index 00000000000..6e5a486ab89 --- /dev/null +++ b/homeassistant/components/synology_dsm/sensor.py @@ -0,0 +1,199 @@ +"""Support for Synology DSM Sensors.""" +from typing import Dict + +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ( + ATTR_ATTRIBUTION, + CONF_DISKS, + DATA_MEGABYTES, + DATA_RATE_KILOBYTES_PER_SECOND, + TEMP_CELSIUS, +) +from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity import Entity +from homeassistant.helpers.typing import HomeAssistantType + +from . import SynoApi +from .const import ( + BASE_NAME, + CONF_VOLUMES, + DOMAIN, + STORAGE_DISK_SENSORS, + STORAGE_VOL_SENSORS, + TEMP_SENSORS_KEYS, + UTILISATION_SENSORS, +) + +ATTRIBUTION = "Data provided by Synology" + + +async def async_setup_entry( + hass: HomeAssistantType, entry: ConfigEntry, async_add_entities +) -> None: + """Set up the Synology NAS Sensor.""" + + api = hass.data[DOMAIN][entry.unique_id] + + sensors = [ + SynoNasUtilSensor(api, sensor_type, UTILISATION_SENSORS[sensor_type]) + for sensor_type in UTILISATION_SENSORS + ] + + # Handle all volumes + if api.storage.volumes_ids: + for volume in entry.data.get(CONF_VOLUMES, api.storage.volumes_ids): + sensors += [ + SynoNasStorageSensor( + api, sensor_type, STORAGE_VOL_SENSORS[sensor_type], volume + ) + for sensor_type in STORAGE_VOL_SENSORS + ] + + # Handle all disks + if api.storage.disks_ids: + for disk in entry.data.get(CONF_DISKS, api.storage.disks_ids): + sensors += [ + SynoNasStorageSensor( + api, sensor_type, STORAGE_DISK_SENSORS[sensor_type], disk + ) + for sensor_type in STORAGE_DISK_SENSORS + ] + + async_add_entities(sensors, True) + + +class SynoNasSensor(Entity): + """Representation of a Synology NAS Sensor.""" + + def __init__( + self, + api: SynoApi, + sensor_type: str, + sensor_info: Dict[str, str], + monitored_device: str = None, + ): + """Initialize the sensor.""" + self._api = api + self.sensor_type = sensor_type + self._name = f"{BASE_NAME} {sensor_info[0]}" + self._unit = sensor_info[1] + self._icon = sensor_info[2] + self.monitored_device = monitored_device + self._unique_id = f"{self._api.information.serial}_{sensor_info[0]}" + + if self.monitored_device: + self._name += f" ({self.monitored_device})" + self._unique_id += f"_{self.monitored_device}" + + self._unsub_dispatcher = None + + @property + def unique_id(self) -> str: + """Return a unique ID.""" + return self._unique_id + + @property + def name(self) -> str: + """Return the name.""" + return self._name + + @property + def icon(self) -> str: + """Return the icon.""" + return self._icon + + @property + def unit_of_measurement(self) -> str: + """Return the unit the value is expressed in.""" + if self.sensor_type in TEMP_SENSORS_KEYS: + return self._api.temp_unit + return self._unit + + @property + def device_state_attributes(self) -> Dict[str, any]: + """Return the state attributes.""" + return {ATTR_ATTRIBUTION: ATTRIBUTION} + + @property + def device_info(self) -> Dict[str, any]: + """Return the device information.""" + return { + "identifiers": {(DOMAIN, self._api.information.serial)}, + "name": "Synology NAS", + "manufacturer": "Synology", + "model": self._api.information.model, + "sw_version": self._api.information.version_string, + } + + @property + def should_poll(self) -> bool: + """No polling needed.""" + return False + + async def async_added_to_hass(self): + """Register state update callback.""" + self._unsub_dispatcher = async_dispatcher_connect( + self.hass, self._api.signal_sensor_update, self.async_write_ha_state + ) + + async def async_will_remove_from_hass(self): + """Clean up after entity before removal.""" + self._unsub_dispatcher() + + +class SynoNasUtilSensor(SynoNasSensor): + """Representation a Synology Utilisation Sensor.""" + + @property + def state(self): + """Return the state.""" + if self._unit == DATA_RATE_KILOBYTES_PER_SECOND or self._unit == DATA_MEGABYTES: + attr = getattr(self._api.utilisation, self.sensor_type)(False) + + if attr is None: + return None + + if self._unit == DATA_RATE_KILOBYTES_PER_SECOND: + return round(attr / 1024.0, 1) + if self._unit == DATA_MEGABYTES: + return round(attr / 1024.0 / 1024.0, 1) + else: + return getattr(self._api.utilisation, self.sensor_type) + + +class SynoNasStorageSensor(SynoNasSensor): + """Representation a Synology Storage Sensor.""" + + @property + def state(self): + """Return the state.""" + if self.monitored_device: + if self.sensor_type in TEMP_SENSORS_KEYS: + attr = getattr(self._api.storage, self.sensor_type)( + self.monitored_device + ) + + if attr is None: + return None + + if self._api.temp_unit == TEMP_CELSIUS: + return attr + + return round(attr * 1.8 + 32.0, 1) + + return getattr(self._api.storage, self.sensor_type)(self.monitored_device) + return None + + @property + def device_info(self) -> Dict[str, any]: + """Return the device information.""" + return { + "identifiers": { + (DOMAIN, self._api.information.serial, self.monitored_device) + }, + "name": f"Synology NAS ({self.monitored_device})", + "manufacturer": "Synology", + "model": self._api.information.model, + "sw_version": self._api.information.version_string, + "via_device": (DOMAIN, self._api.information.serial), + } diff --git a/homeassistant/components/synology_dsm/strings.json b/homeassistant/components/synology_dsm/strings.json new file mode 100644 index 00000000000..c58b0d819ea --- /dev/null +++ b/homeassistant/components/synology_dsm/strings.json @@ -0,0 +1,41 @@ +{ + "config": { + "flow_title": "Synology DSM {name} ({host})", + "step": { + "user": { + "title": "Synology DSM", + "data": { + "host": "Host", + "port": "Port (Optional)", + "ssl": "Use SSL/TLS to connect to your NAS", + "username": "Username", + "password": "Password" + } + }, + "2sa": { + "title": "Synology DSM: two-step authentication", + "data": { + "otp_code": "Code" + } + }, + "link": { + "title": "Synology DSM", + "description": "Do you want to setup {name} ({host})?", + "data": { + "ssl": "Use SSL/TLS to connect to your NAS", + "username": "Username", + "password": "Password", + "port": "Port (Optional)" + } + } + }, + "error": { + "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", + "unknown": "Unknown error: please check logs to get more details" + }, + "abort": { "already_configured": "Host already configured" } + } +} diff --git a/homeassistant/components/synology_dsm/translations/ca.json b/homeassistant/components/synology_dsm/translations/ca.json new file mode 100644 index 00000000000..f593ac26182 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/ca.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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", + "unknown": "Error desconegut: consulta els registres per a m\u00e9s detalls." + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "2sa": { + "data": { + "otp_code": "Codi" + }, + "title": "Synology DSM: autenticaci\u00f3 en dos passos" + }, + "link": { + "data": { + "api_version": "Versi\u00f3 DSM", + "password": "Contrasenya", + "port": "Port (opcional)", + "ssl": "Utilitza SSL/TLS per connectar-te al servidor NAS", + "username": "Nom d'usuari" + }, + "description": "Vols configurar {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "Versi\u00f3 DSM", + "host": "Amfitri\u00f3", + "password": "Contrasenya", + "port": "Port", + "ssl": "Utilitza SSL/TLS per connectar-te al servidor NAS", + "username": "Nom d'usuari" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/.translations/synology_dsm.da.json b/homeassistant/components/synology_dsm/translations/da.json similarity index 100% rename from homeassistant/components/.translations/synology_dsm.da.json rename to homeassistant/components/synology_dsm/translations/da.json diff --git a/homeassistant/components/synology_dsm/translations/de.json b/homeassistant/components/synology_dsm/translations/de.json new file mode 100644 index 00000000000..625bec2c5ae --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/de.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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", + "unknown": "Unbekannter Fehler: Bitte \u00fcberpr\u00fcfen Sie die Protokolle, um weitere Details zu erhalten" + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "2sa": { + "data": { + "otp_code": "Code" + }, + "title": "Synology DSM: zweistufige Authentifizierung" + }, + "link": { + "data": { + "api_version": "DSM-Version", + "password": "Passwort", + "port": "Port (optional)", + "ssl": "Verwenden Sie SSL/TLS, um eine Verbindung zu Ihrem NAS herzustellen", + "username": "Benutzername" + }, + "description": "M\u00f6chten Sie {name} ({host}) einrichten?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "DSM-Version", + "host": "Host", + "password": "Passwort", + "port": "Port (optional)", + "ssl": "Verwenden Sie SSL/TLS, um eine Verbindung zu Ihrem NAS herzustellen", + "username": "Benutzername" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/en.json b/homeassistant/components/synology_dsm/translations/en.json new file mode 100644 index 00000000000..50860f96639 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/en.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "already_configured": "Host already configured" + }, + "error": { + "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", + "unknown": "Unknown error: please check logs to get more details" + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "2sa": { + "data": { + "otp_code": "Code" + }, + "title": "Synology DSM: two-step authentication" + }, + "link": { + "data": { + "password": "Password", + "port": "Port (Optional)", + "ssl": "Use SSL/TLS to connect to your NAS", + "username": "Username" + }, + "description": "Do you want to setup {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Port (Optional)", + "ssl": "Use SSL/TLS to connect to your NAS", + "username": "Username" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/es.json b/homeassistant/components/synology_dsm/translations/es.json new file mode 100644 index 00000000000..122f8bef51d --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/es.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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", + "unknown": "Error desconocido: por favor, consulta logs para obtener m\u00e1s detalles" + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "2sa": { + "data": { + "otp_code": "C\u00f3digo" + }, + "title": "Synology DSM: autenticaci\u00f3n en dos pasos" + }, + "link": { + "data": { + "api_version": "Versi\u00f3n del DSM", + "password": "Contrase\u00f1a", + "port": "Puerto (opcional)", + "ssl": "Usar SSL/TLS para conectar con tu NAS", + "username": "Usuario" + }, + "description": "\u00bfQuieres configurar {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "Versi\u00f3n del DSM", + "host": "Host", + "password": "Contrase\u00f1a", + "port": "Puerto", + "ssl": "Usar SSL/TLS para conectar con tu NAS", + "username": "Usuario" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/fr.json b/homeassistant/components/synology_dsm/translations/fr.json new file mode 100644 index 00000000000..4859b10073c --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/fr.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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", + "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", + "password": "Mot de passe", + "port": "Port (facultatif)", + "ssl": "Utilisez SSL/TLS pour vous connecter \u00e0 votre NAS", + "username": "Nom d'utilisateur" + }, + "description": "Voulez-vous configurer {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "Version du DSM", + "host": "H\u00f4te", + "password": "Mot de passe", + "port": "Port (facultatif)", + "ssl": "Utilisez SSL/TLS pour vous connecter \u00e0 votre NAS", + "username": "Nom d'utilisateur" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/hi.json b/homeassistant/components/synology_dsm/translations/hi.json new file mode 100644 index 00000000000..de48b719ea7 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/hi.json @@ -0,0 +1,8 @@ +{ + "config": { + "error": { + "connection": "\u0915\u0928\u0947\u0915\u094d\u0936\u0928 \u0924\u094d\u0930\u0941\u091f\u093f: \u0915\u0943\u092a\u092f\u093e \u0905\u092a\u0928\u0947 \u0939\u094b\u0938\u094d\u091f, \u092a\u094b\u0930\u094d\u091f \u0914\u0930 \u090f\u0938\u090f\u0938\u090f\u0932 \u0915\u0940 \u091c\u093e\u0902\u091a \u0915\u0930\u0947\u0902", + "unknown": "\u0905\u091c\u094d\u091e\u093e\u0924 \u0924\u094d\u0930\u0941\u091f\u093f: \u0905\u0927\u093f\u0915 \u0935\u093f\u0935\u0930\u0923 \u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0932\u0949\u0917 \u0915\u0940 \u091c\u093e\u0902\u091a \u0915\u0930\u0947\u0902" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/it.json b/homeassistant/components/synology_dsm/translations/it.json new file mode 100644 index 00000000000..e7ce33ec43c --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/it.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "already_configured": "Host gi\u00e0 configurato" + }, + "error": { + "login": "Errore di accesso: si prega di controllare il nome utente e la password", + "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 {name} ({host})", + "step": { + "2sa": { + "data": { + "otp_code": "Codice" + }, + "title": "Synology DSM: autenticazione in due fasi" + }, + "link": { + "data": { + "api_version": "Versione DSM", + "password": "Password", + "port": "Porta (opzionale)", + "ssl": "Utilizzare SSL/TLS per connettersi al NAS", + "username": "Nome utente" + }, + "description": "Vuoi impostare {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "Versione DSM", + "host": "Host", + "password": "Password", + "port": "Porta (opzionale)", + "ssl": "Utilizzare SSL/TLS per connettersi al NAS", + "username": "Nome utente" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/ko.json b/homeassistant/components/synology_dsm/translations/ko.json new file mode 100644 index 00000000000..d2085b7a097 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/ko.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "\ud638\uc2a4\ud2b8\uac00 \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" + }, + "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", + "host": "\ud638\uc2a4\ud2b8", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "ssl": "SSL/TLS \ub97c \uc0ac\uc6a9\ud558\uc5ec NAS \uc5d0 \uc5f0\uacb0", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/lb.json b/homeassistant/components/synology_dsm/translations/lb.json new file mode 100644 index 00000000000..5453b078a3e --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/lb.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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", + "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": { + "api_version": "DSM Versioun", + "password": "Passwuert", + "port": "Port (Optionell)", + "ssl": "Benotz SSL/TLS fir d'Verbindung mam NAS", + "username": "Benotzernumm" + }, + "description": "Soll {name} ({host}) konfigur\u00e9iert ginn?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "DSM Versioun", + "host": "Apparat", + "password": "Passwuert", + "port": "Port (Optionell)", + "ssl": "Benotzt SSL/TLS fir sech mam NAS ze verbannen", + "username": "Benotzernumm" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/nl.json b/homeassistant/components/synology_dsm/translations/nl.json new file mode 100644 index 00000000000..bda3e337dda --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/nl.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "already_configured": "Host is al geconfigureerd." + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "2sa": { + "data": { + "otp_code": "Code" + } + }, + "link": { + "data": { + "api_version": "DSM-versie", + "password": "Wachtwoord", + "port": "Poort (optioneel)", + "ssl": "Gebruik SSL/TLS om verbinding te maken met uw NAS", + "username": "Gebruikersnaam" + }, + "description": "Wil je {name} ({host}) instellen?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "DSM-versie", + "host": "Host", + "password": "Wachtwoord", + "port": "Poort (optioneel)", + "ssl": "Gebruik SSL/TLS om verbinding te maken met uw NAS", + "username": "Gebruikersnaam" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/no.json b/homeassistant/components/synology_dsm/translations/no.json new file mode 100644 index 00000000000..d9e24638f72 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/no.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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})", + "step": { + "2sa": { + "data": { + "otp_code": "Kode" + }, + "title": "Synology DSM: totrinns autentisering" + }, + "link": { + "data": { + "api_version": "DSM-versjon", + "password": "Passord", + "port": "Port (valgfritt)", + "ssl": "Bruk SSL/TLS til \u00e5 koble til NAS-en", + "username": "Brukernavn" + }, + "description": "Vil du konfigurere {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "DSM-versjon", + "host": "Vert", + "password": "Passord", + "port": "Port (valgfritt)", + "ssl": "Bruk SSL/TLS til \u00e5 koble til NAS-en", + "username": "Brukernavn" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/pl.json b/homeassistant/components/synology_dsm/translations/pl.json new file mode 100644 index 00000000000..d7714de27eb --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/pl.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "already_configured": "Host jest ju\u017c skonfigurowany." + }, + "error": { + "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", + "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": "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", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/pt.json b/homeassistant/components/synology_dsm/translations/pt.json new file mode 100644 index 00000000000..446b2d6a134 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/pt.json @@ -0,0 +1,28 @@ +{ + "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": { + "host": "Servidor", + "password": "Palavra-passe", + "port": "Porta (opcional)", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/ru.json b/homeassistant/components/synology_dsm/translations/ru.json new file mode 100644 index 00000000000..d136f171397 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/ru.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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.", + "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": { + "2sa": { + "data": { + "otp_code": "\u041a\u043e\u0434" + }, + "title": "Synology DSM: \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f" + }, + "link": { + "data": { + "api_version": "\u0412\u0435\u0440\u0441\u0438\u044f DSM", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL / TLS \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "\u0412\u0435\u0440\u0441\u0438\u044f DSM", + "host": "\u0425\u043e\u0441\u0442", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442 (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)", + "ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL / TLS \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/sl.json b/homeassistant/components/synology_dsm/translations/sl.json new file mode 100644 index 00000000000..168454a4331 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/sl.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "Gostitelj je \u017ee konfiguriran" + }, + "error": { + "login": "Napaka pri prijavi: preverite svoje uporabni\u0161ko ime in geslo" + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "link": { + "data": { + "api_version": "Razli\u010dica DSM", + "password": "Geslo", + "port": "Vrata (Izbirno)", + "ssl": "Uporabite SSL/TLS za povezavo z va\u0161im NAS-om", + "username": "Uporabni\u0161ko ime" + }, + "description": "Ali \u017eelite nastaviti {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "Razli\u010dica DSM", + "host": "Gostitelj", + "password": "Geslo", + "port": "Vrata (Izbirno)", + "ssl": "Uporabite SSL/TLS za povezavo z va\u0161im NAS-om", + "username": "Uporabni\u0161ko ime" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/zh-Hant.json b/homeassistant/components/synology_dsm/translations/zh-Hant.json new file mode 100644 index 00000000000..4e2173324c3 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/zh-Hant.json @@ -0,0 +1,45 @@ +{ + "config": { + "abort": { + "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", + "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": { + "2sa": { + "data": { + "otp_code": "\u4ee3\u78bc" + }, + "title": "Synology DSM\uff1a\u96d9\u91cd\u9a57\u8b49" + }, + "link": { + "data": { + "api_version": "DSM \u7248\u672c", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0\uff08\u9078\u9805\uff09", + "ssl": "\u4f7f\u7528 SSL/TLS \u9023\u7dda\u81f3 NAS", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u662f\u5426\u8981\u8a2d\u5b9a {name} ({host})\uff1f", + "title": "\u7fa4\u6689 DSM" + }, + "user": { + "data": { + "api_version": "DSM \u7248\u672c", + "host": "\u4e3b\u6a5f\u7aef", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0\uff08\u9078\u9805\uff09", + "ssl": "\u4f7f\u7528 SSL/TLS \u9023\u7dda\u81f3 NAS", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u7fa4\u6689 DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_srm/__init__.py b/homeassistant/components/synology_srm/__init__.py index cd77bce1014..72fd0c17821 100644 --- a/homeassistant/components/synology_srm/__init__.py +++ b/homeassistant/components/synology_srm/__init__.py @@ -1 +1 @@ -"""The synology_srm component.""" +"""The Synology SRM component.""" diff --git a/homeassistant/components/synology_srm/device_tracker.py b/homeassistant/components/synology_srm/device_tracker.py index af7a3ea5f63..55f455ad7cc 100644 --- a/homeassistant/components/synology_srm/device_tracker.py +++ b/homeassistant/components/synology_srm/device_tracker.py @@ -132,7 +132,11 @@ class SynologySrmDeviceScanner(DeviceScanner): """Check the router for connected devices.""" _LOGGER.debug("Scanning for connected devices") - self.devices = self.client.core.network_nsm_device({"is_online": True}) + try: + self.devices = self.client.core.get_network_nsm_device({"is_online": True}) + except synology_srm.http.SynologyException as ex: + _LOGGER.error("Error with the Synology SRM: %s", ex) + return False _LOGGER.debug("Found %d device(s) connected to the router", len(self.devices)) diff --git a/homeassistant/components/synology_srm/manifest.json b/homeassistant/components/synology_srm/manifest.json index 47c8c46fee1..798d7e7ef82 100644 --- a/homeassistant/components/synology_srm/manifest.json +++ b/homeassistant/components/synology_srm/manifest.json @@ -2,7 +2,6 @@ "domain": "synology_srm", "name": "Synology SRM", "documentation": "https://www.home-assistant.io/integrations/synology_srm", - "requirements": ["synology-srm==0.0.7"], - "dependencies": [], + "requirements": ["synology-srm==0.2.0"], "codeowners": ["@aerialls"] } diff --git a/homeassistant/components/synologydsm/__init__.py b/homeassistant/components/synologydsm/__init__.py deleted file mode 100644 index 137a3975b99..00000000000 --- a/homeassistant/components/synologydsm/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""The synologydsm component.""" diff --git a/homeassistant/components/synologydsm/manifest.json b/homeassistant/components/synologydsm/manifest.json deleted file mode 100644 index 586fe75c697..00000000000 --- a/homeassistant/components/synologydsm/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "domain": "synologydsm", - "name": "SynologyDSM", - "documentation": "https://www.home-assistant.io/integrations/synologydsm", - "requirements": ["python-synology==0.4.0"], - "dependencies": [], - "codeowners": [] -} diff --git a/homeassistant/components/synologydsm/sensor.py b/homeassistant/components/synologydsm/sensor.py deleted file mode 100644 index 84921b3b8d3..00000000000 --- a/homeassistant/components/synologydsm/sensor.py +++ /dev/null @@ -1,279 +0,0 @@ -"""Support for Synology NAS Sensors.""" -from datetime import timedelta -import logging - -from SynologyDSM import SynologyDSM -import voluptuous as vol - -from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ( - ATTR_ATTRIBUTION, - CONF_API_VERSION, - CONF_DISKS, - CONF_HOST, - CONF_MONITORED_CONDITIONS, - CONF_NAME, - CONF_PASSWORD, - CONF_PORT, - CONF_SSL, - CONF_USERNAME, - DATA_MEGABYTES, - DATA_RATE_KILOBYTES_PER_SECOND, - EVENT_HOMEASSISTANT_START, - TEMP_CELSIUS, - UNIT_PERCENTAGE, -) -import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle - -_LOGGER = logging.getLogger(__name__) - -ATTRIBUTION = "Data provided by Synology" - -CONF_VOLUMES = "volumes" -DEFAULT_NAME = "Synology DSM" -DEFAULT_PORT = 5001 - -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15) - -_UTILISATION_MON_COND = { - "cpu_other_load": ["CPU Load (Other)", UNIT_PERCENTAGE, "mdi:chip"], - "cpu_user_load": ["CPU Load (User)", UNIT_PERCENTAGE, "mdi:chip"], - "cpu_system_load": ["CPU Load (System)", UNIT_PERCENTAGE, "mdi:chip"], - "cpu_total_load": ["CPU Load (Total)", UNIT_PERCENTAGE, "mdi:chip"], - "cpu_1min_load": ["CPU Load (1 min)", UNIT_PERCENTAGE, "mdi:chip"], - "cpu_5min_load": ["CPU Load (5 min)", UNIT_PERCENTAGE, "mdi:chip"], - "cpu_15min_load": ["CPU Load (15 min)", UNIT_PERCENTAGE, "mdi:chip"], - "memory_real_usage": ["Memory Usage (Real)", UNIT_PERCENTAGE, "mdi:memory"], - "memory_size": ["Memory Size", DATA_MEGABYTES, "mdi:memory"], - "memory_cached": ["Memory Cached", DATA_MEGABYTES, "mdi:memory"], - "memory_available_swap": ["Memory Available (Swap)", DATA_MEGABYTES, "mdi:memory"], - "memory_available_real": ["Memory Available (Real)", DATA_MEGABYTES, "mdi:memory"], - "memory_total_swap": ["Memory Total (Swap)", DATA_MEGABYTES, "mdi:memory"], - "memory_total_real": ["Memory Total (Real)", DATA_MEGABYTES, "mdi:memory"], - "network_up": ["Network Up", DATA_RATE_KILOBYTES_PER_SECOND, "mdi:upload"], - "network_down": ["Network Down", DATA_RATE_KILOBYTES_PER_SECOND, "mdi:download"], -} -_STORAGE_VOL_MON_COND = { - "volume_status": ["Status", None, "mdi:checkbox-marked-circle-outline"], - "volume_device_type": ["Type", None, "mdi:harddisk"], - "volume_size_total": ["Total Size", None, "mdi:chart-pie"], - "volume_size_used": ["Used Space", None, "mdi:chart-pie"], - "volume_percentage_used": ["Volume Used", UNIT_PERCENTAGE, "mdi:chart-pie"], - "volume_disk_temp_avg": ["Average Disk Temp", None, "mdi:thermometer"], - "volume_disk_temp_max": ["Maximum Disk Temp", None, "mdi:thermometer"], -} -_STORAGE_DSK_MON_COND = { - "disk_name": ["Name", None, "mdi:harddisk"], - "disk_device": ["Device", None, "mdi:dots-horizontal"], - "disk_smart_status": ["Status (Smart)", None, "mdi:checkbox-marked-circle-outline"], - "disk_status": ["Status", None, "mdi:checkbox-marked-circle-outline"], - "disk_exceed_bad_sector_thr": ["Exceeded Max Bad Sectors", None, "mdi:test-tube"], - "disk_below_remain_life_thr": ["Below Min Remaining Life", None, "mdi:test-tube"], - "disk_temp": ["Temperature", None, "mdi:thermometer"], -} - -_MONITORED_CONDITIONS = ( - list(_UTILISATION_MON_COND.keys()) - + list(_STORAGE_VOL_MON_COND.keys()) - + list(_STORAGE_DSK_MON_COND.keys()) -) - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, - vol.Optional(CONF_SSL, default=True): cv.boolean, - vol.Optional(CONF_API_VERSION): cv.positive_int, - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_MONITORED_CONDITIONS): vol.All( - cv.ensure_list, [vol.In(_MONITORED_CONDITIONS)] - ), - vol.Optional(CONF_DISKS): cv.ensure_list, - vol.Optional(CONF_VOLUMES): cv.ensure_list, - } -) - - -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Synology NAS Sensor.""" - - def run_setup(event): - """Wait until Home Assistant is fully initialized before creating. - - Delay the setup until Home Assistant is fully initialized. - This allows any entities to be created already - """ - name = config.get(CONF_NAME) - host = config.get(CONF_HOST) - port = config.get(CONF_PORT) - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) - use_ssl = config.get(CONF_SSL) - unit = hass.config.units.temperature_unit - monitored_conditions = config.get(CONF_MONITORED_CONDITIONS) - api_version = config.get(CONF_API_VERSION) - - api = SynoApi(host, port, username, password, unit, use_ssl, api_version) - - sensors = [ - SynoNasUtilSensor(api, name, variable, _UTILISATION_MON_COND[variable]) - for variable in monitored_conditions - if variable in _UTILISATION_MON_COND - ] - - # Handle all volumes - if api.storage.volumes is not None: - for volume in config.get(CONF_VOLUMES, api.storage.volumes): - sensors += [ - SynoNasStorageSensor( - api, name, variable, _STORAGE_VOL_MON_COND[variable], volume - ) - for variable in monitored_conditions - if variable in _STORAGE_VOL_MON_COND - ] - - # Handle all disks - if api.storage.disks is not None: - for disk in config.get(CONF_DISKS, api.storage.disks): - sensors += [ - SynoNasStorageSensor( - api, name, variable, _STORAGE_DSK_MON_COND[variable], disk - ) - for variable in monitored_conditions - if variable in _STORAGE_DSK_MON_COND - ] - - add_entities(sensors, True) - - # Wait until start event is sent to load this component. - hass.bus.listen_once(EVENT_HOMEASSISTANT_START, run_setup) - - -class SynoApi: - """Class to interface with Synology DSM API.""" - - def __init__(self, host, port, username, password, temp_unit, use_ssl, api_version): - """Initialize the API wrapper class.""" - - self.temp_unit = temp_unit - - try: - self._api = SynologyDSM( - host, - port, - username, - password, - use_https=use_ssl, - debugmode=False, - dsm_version=api_version, - ) - except: # noqa: E722 pylint: disable=bare-except - _LOGGER.error("Error setting up Synology DSM") - - # Will be updated when update() gets called. - self.utilisation = self._api.utilisation - self.storage = self._api.storage - - @Throttle(MIN_TIME_BETWEEN_UPDATES) - def update(self): - """Update function for updating api information.""" - self._api.update() - - -class SynoNasSensor(Entity): - """Representation of a Synology NAS Sensor.""" - - def __init__(self, api, name, variable, variable_info, monitor_device=None): - """Initialize the sensor.""" - self.var_id = variable - self.var_name = "{} {}".format(name, variable_info[0]) - self.var_units = variable_info[1] - self.var_icon = variable_info[2] - self.monitor_device = monitor_device - self._api = api - - @property - def name(self): - """Return the name of the sensor, if any.""" - if self.monitor_device is not None: - return f"{self.var_name} ({self.monitor_device})" - return self.var_name - - @property - def icon(self): - """Icon to use in the frontend, if any.""" - return self.var_icon - - @property - def unit_of_measurement(self): - """Return the unit the value is expressed in.""" - if self.var_id in ["volume_disk_temp_avg", "volume_disk_temp_max", "disk_temp"]: - return self._api.temp_unit - return self.var_units - - def update(self): - """Get the latest data for the states.""" - if self._api is not None: - self._api.update() - - @property - def device_state_attributes(self): - """Return the state attributes.""" - return {ATTR_ATTRIBUTION: ATTRIBUTION} - - -class SynoNasUtilSensor(SynoNasSensor): - """Representation a Synology Utilisation Sensor.""" - - @property - def state(self): - """Return the state of the sensor.""" - network_sensors = ["network_up", "network_down"] - memory_sensors = [ - "memory_size", - "memory_cached", - "memory_available_swap", - "memory_available_real", - "memory_total_swap", - "memory_total_real", - ] - - if self.var_id in network_sensors or self.var_id in memory_sensors: - attr = getattr(self._api.utilisation, self.var_id)(False) - - if attr is None: - return None - - if self.var_id in network_sensors: - return round(attr / 1024.0, 1) - if self.var_id in memory_sensors: - return round(attr / 1024.0 / 1024.0, 1) - else: - return getattr(self._api.utilisation, self.var_id) - - -class SynoNasStorageSensor(SynoNasSensor): - """Representation a Synology Utilisation Sensor.""" - - @property - def state(self): - """Return the state of the sensor.""" - temp_sensors = ["volume_disk_temp_avg", "volume_disk_temp_max", "disk_temp"] - - if self.monitor_device is not None: - if self.var_id in temp_sensors: - attr = getattr(self._api.storage, self.var_id)(self.monitor_device) - - if attr is None: - return None - - if self._api.temp_unit == TEMP_CELSIUS: - return attr - - return round(attr * 1.8 + 32.0, 1) - - return getattr(self._api.storage, self.var_id)(self.monitor_device) diff --git a/homeassistant/components/syslog/manifest.json b/homeassistant/components/syslog/manifest.json index d3964b747a2..07a74b66364 100644 --- a/homeassistant/components/syslog/manifest.json +++ b/homeassistant/components/syslog/manifest.json @@ -2,7 +2,5 @@ "domain": "syslog", "name": "Syslog", "documentation": "https://www.home-assistant.io/integrations/syslog", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/system_health/manifest.json b/homeassistant/components/system_health/manifest.json index c75054232bc..4109855d466 100644 --- a/homeassistant/components/system_health/manifest.json +++ b/homeassistant/components/system_health/manifest.json @@ -2,7 +2,6 @@ "domain": "system_health", "name": "System Health", "documentation": "https://www.home-assistant.io/integrations/system_health", - "requirements": [], "dependencies": ["http"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/system_health/strings.json b/homeassistant/components/system_health/strings.json new file mode 100644 index 00000000000..c1fb1480047 --- /dev/null +++ b/homeassistant/components/system_health/strings.json @@ -0,0 +1 @@ +{ "title": "System Health" } diff --git a/homeassistant/components/system_health/translations/af.json b/homeassistant/components/system_health/translations/af.json new file mode 100644 index 00000000000..3f92fabd3d8 --- /dev/null +++ b/homeassistant/components/system_health/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Stelsel Gesondheid" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/bg.json b/homeassistant/components/system_health/translations/bg.json new file mode 100644 index 00000000000..d7b359e0d6d --- /dev/null +++ b/homeassistant/components/system_health/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u0417\u0434\u0440\u0430\u0432\u0435 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/ca.json b/homeassistant/components/system_health/translations/ca.json new file mode 100644 index 00000000000..80cddceda2d --- /dev/null +++ b/homeassistant/components/system_health/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Estat del Sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/cs.json b/homeassistant/components/system_health/translations/cs.json new file mode 100644 index 00000000000..4bc9bb8858e --- /dev/null +++ b/homeassistant/components/system_health/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Kondice syst\u00e9mu" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/cy.json b/homeassistant/components/system_health/translations/cy.json new file mode 100644 index 00000000000..11f8a8d2f0b --- /dev/null +++ b/homeassistant/components/system_health/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Iechyd System" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/da.json b/homeassistant/components/system_health/translations/da.json new file mode 100644 index 00000000000..5eddff89b50 --- /dev/null +++ b/homeassistant/components/system_health/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Systemsundhed" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/de.json b/homeassistant/components/system_health/translations/de.json new file mode 100644 index 00000000000..607a7eaa8cf --- /dev/null +++ b/homeassistant/components/system_health/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Systemzustand" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/el.json b/homeassistant/components/system_health/translations/el.json new file mode 100644 index 00000000000..e0c4c7043f5 --- /dev/null +++ b/homeassistant/components/system_health/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u03a5\u03b3\u03b5\u03af\u03b1 \u03a3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/en.json b/homeassistant/components/system_health/translations/en.json new file mode 100644 index 00000000000..1c75d04a716 --- /dev/null +++ b/homeassistant/components/system_health/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "System Health" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/es-419.json b/homeassistant/components/system_health/translations/es-419.json new file mode 100644 index 00000000000..ada0964a358 --- /dev/null +++ b/homeassistant/components/system_health/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Estado del sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/es.json b/homeassistant/components/system_health/translations/es.json new file mode 100644 index 00000000000..11ee35782b1 --- /dev/null +++ b/homeassistant/components/system_health/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Estado del Sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/et.json b/homeassistant/components/system_health/translations/et.json new file mode 100644 index 00000000000..e517d9331aa --- /dev/null +++ b/homeassistant/components/system_health/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "S\u00fcsteemi tervis" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/eu.json b/homeassistant/components/system_health/translations/eu.json new file mode 100644 index 00000000000..5f21851b67e --- /dev/null +++ b/homeassistant/components/system_health/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Sistemaren Osasuna" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/fa.json b/homeassistant/components/system_health/translations/fa.json new file mode 100644 index 00000000000..c91e442617d --- /dev/null +++ b/homeassistant/components/system_health/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "\u0633\u0644\u0627\u0645\u062a \u0633\u06cc\u0633\u062a\u0645" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/fi.json b/homeassistant/components/system_health/translations/fi.json new file mode 100644 index 00000000000..576e66ba6b5 --- /dev/null +++ b/homeassistant/components/system_health/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "J\u00e4rjestelm\u00e4n kunto" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/fr.json b/homeassistant/components/system_health/translations/fr.json new file mode 100644 index 00000000000..819c35ac3d6 --- /dev/null +++ b/homeassistant/components/system_health/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Sant\u00e9 du syst\u00e8me" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/he.json b/homeassistant/components/system_health/translations/he.json new file mode 100644 index 00000000000..2c46fb48c7d --- /dev/null +++ b/homeassistant/components/system_health/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05d1\u05e8\u05d9\u05d0\u05d5\u05ea \u05de\u05e2\u05e8\u05db\u05ea" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/hr.json b/homeassistant/components/system_health/translations/hr.json new file mode 100644 index 00000000000..5aed0b89255 --- /dev/null +++ b/homeassistant/components/system_health/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Zdravlje sustava" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/hu.json b/homeassistant/components/system_health/translations/hu.json new file mode 100644 index 00000000000..721dce2501e --- /dev/null +++ b/homeassistant/components/system_health/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Rendszer\u00e1llapot" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/hy.json b/homeassistant/components/system_health/translations/hy.json new file mode 100644 index 00000000000..a8de004c3ad --- /dev/null +++ b/homeassistant/components/system_health/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0540\u0561\u0574\u0561\u056f\u0561\u0580\u0563\u056b \u0561\u057c\u0578\u0572\u057b\u0578\u0582\u0569\u0575\u0578\u0582\u0576" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/is.json b/homeassistant/components/system_health/translations/is.json new file mode 100644 index 00000000000..5d798b7cd84 --- /dev/null +++ b/homeassistant/components/system_health/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Heilbrig\u00f0i kerfis" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/it.json b/homeassistant/components/system_health/translations/it.json new file mode 100644 index 00000000000..b270bd0f2e9 --- /dev/null +++ b/homeassistant/components/system_health/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Integrit\u00e0 del Sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/ja.json b/homeassistant/components/system_health/translations/ja.json new file mode 100644 index 00000000000..09ddfeaf5c6 --- /dev/null +++ b/homeassistant/components/system_health/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "\u30b7\u30b9\u30c6\u30e0\u306e\u6b63\u5e38\u6027" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/ko.json b/homeassistant/components/system_health/translations/ko.json new file mode 100644 index 00000000000..3424269bfba --- /dev/null +++ b/homeassistant/components/system_health/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc2dc\uc2a4\ud15c \uc0c1\ud0dc" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/lb.json b/homeassistant/components/system_health/translations/lb.json new file mode 100644 index 00000000000..f9982152d87 --- /dev/null +++ b/homeassistant/components/system_health/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "System Zoustand" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/lt.json b/homeassistant/components/system_health/translations/lt.json new file mode 100644 index 00000000000..1f10e34d6f9 --- /dev/null +++ b/homeassistant/components/system_health/translations/lt.json @@ -0,0 +1,3 @@ +{ + "title": "Sistemos sveikata" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/nb.json b/homeassistant/components/system_health/translations/nb.json new file mode 100644 index 00000000000..e0e6b2fb228 --- /dev/null +++ b/homeassistant/components/system_health/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Systemhelse" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/nl.json b/homeassistant/components/system_health/translations/nl.json new file mode 100644 index 00000000000..3da64e71c19 --- /dev/null +++ b/homeassistant/components/system_health/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Systeemstatus" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/nn.json b/homeassistant/components/system_health/translations/nn.json new file mode 100644 index 00000000000..e0e6b2fb228 --- /dev/null +++ b/homeassistant/components/system_health/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Systemhelse" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/no.json b/homeassistant/components/system_health/translations/no.json new file mode 100644 index 00000000000..e0e6b2fb228 --- /dev/null +++ b/homeassistant/components/system_health/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Systemhelse" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/pl.json b/homeassistant/components/system_health/translations/pl.json new file mode 100644 index 00000000000..f6fdab9cc89 --- /dev/null +++ b/homeassistant/components/system_health/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Kondycja systemu" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/pt-BR.json b/homeassistant/components/system_health/translations/pt-BR.json new file mode 100644 index 00000000000..eb6f66e8784 --- /dev/null +++ b/homeassistant/components/system_health/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Integridade Do Sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/pt.json b/homeassistant/components/system_health/translations/pt.json new file mode 100644 index 00000000000..15f9774cb16 --- /dev/null +++ b/homeassistant/components/system_health/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Integridade do Sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/ro.json b/homeassistant/components/system_health/translations/ro.json new file mode 100644 index 00000000000..538cdd3cbdc --- /dev/null +++ b/homeassistant/components/system_health/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Stare Sistem" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/ru.json b/homeassistant/components/system_health/translations/ru.json new file mode 100644 index 00000000000..e9169fedf57 --- /dev/null +++ b/homeassistant/components/system_health/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/sk.json b/homeassistant/components/system_health/translations/sk.json new file mode 100644 index 00000000000..726f9d917a5 --- /dev/null +++ b/homeassistant/components/system_health/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Stav syst\u00e9mu" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/sl.json b/homeassistant/components/system_health/translations/sl.json new file mode 100644 index 00000000000..96c2bfe6601 --- /dev/null +++ b/homeassistant/components/system_health/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Zdravje sistema" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/sv.json b/homeassistant/components/system_health/translations/sv.json new file mode 100644 index 00000000000..9d0ff4c10e2 --- /dev/null +++ b/homeassistant/components/system_health/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Systemh\u00e4lsa" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/th.json b/homeassistant/components/system_health/translations/th.json new file mode 100644 index 00000000000..ffe94d56469 --- /dev/null +++ b/homeassistant/components/system_health/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e02\u0e2d\u0e07\u0e23\u0e30\u0e1a\u0e1a" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/tr.json b/homeassistant/components/system_health/translations/tr.json new file mode 100644 index 00000000000..1ff23478201 --- /dev/null +++ b/homeassistant/components/system_health/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "Sistem Sa\u011fl\u0131\u011f\u0131" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/uk.json b/homeassistant/components/system_health/translations/uk.json new file mode 100644 index 00000000000..267fcb83a61 --- /dev/null +++ b/homeassistant/components/system_health/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u0411\u0435\u0437\u043f\u0435\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0438" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/vi.json b/homeassistant/components/system_health/translations/vi.json new file mode 100644 index 00000000000..fb787ad6a0a --- /dev/null +++ b/homeassistant/components/system_health/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "S\u1ee9c kh\u1ecfe h\u1ec7 th\u1ed1ng" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/zh-Hans.json b/homeassistant/components/system_health/translations/zh-Hans.json new file mode 100644 index 00000000000..8bd2f9f0410 --- /dev/null +++ b/homeassistant/components/system_health/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u7cfb\u7edf\u72b6\u6001" +} \ No newline at end of file diff --git a/homeassistant/components/system_health/translations/zh-Hant.json b/homeassistant/components/system_health/translations/zh-Hant.json new file mode 100644 index 00000000000..fc4734b2f31 --- /dev/null +++ b/homeassistant/components/system_health/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u7cfb\u7d71\u5065\u5eb7\u72c0\u614b" +} \ No newline at end of file diff --git a/homeassistant/components/system_log/manifest.json b/homeassistant/components/system_log/manifest.json index 77cfbd62059..f717af2ad85 100644 --- a/homeassistant/components/system_log/manifest.json +++ b/homeassistant/components/system_log/manifest.json @@ -2,7 +2,6 @@ "domain": "system_log", "name": "System Log", "documentation": "https://www.home-assistant.io/integrations/system_log", - "requirements": [], "dependencies": ["http"], "codeowners": [], "quality_scale": "internal" diff --git a/homeassistant/components/systemmonitor/manifest.json b/homeassistant/components/systemmonitor/manifest.json index de8228f09a9..5753dbbf682 100644 --- a/homeassistant/components/systemmonitor/manifest.json +++ b/homeassistant/components/systemmonitor/manifest.json @@ -3,6 +3,5 @@ "name": "System Monitor", "documentation": "https://www.home-assistant.io/integrations/systemmonitor", "requirements": ["psutil==5.7.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tado/__init__.py b/homeassistant/components/tado/__init__.py index 1dba5f5f29e..1261311c767 100644 --- a/homeassistant/components/tado/__init__.py +++ b/homeassistant/components/tado/__init__.py @@ -1,25 +1,34 @@ """Support for the (unofficial) Tado API.""" +import asyncio from datetime import timedelta import logging from PyTado.interface import Tado from requests import RequestException +import requests.exceptions import voluptuous as vol from homeassistant.components.climate.const import PRESET_AWAY, PRESET_HOME +from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import config_validation as cv -from homeassistant.helpers.discovery import load_platform from homeassistant.helpers.dispatcher import dispatcher_send +from homeassistant.helpers.event import async_track_time_interval from homeassistant.util import Throttle -from .const import CONF_FALLBACK, DATA +from .const import ( + CONF_FALLBACK, + DATA, + DOMAIN, + SIGNAL_TADO_UPDATE_RECEIVED, + UPDATE_LISTENER, + UPDATE_TRACK, +) _LOGGER = logging.getLogger(__name__) -DOMAIN = "tado" - -SIGNAL_TADO_UPDATE_RECEIVED = "tado_update_received_{}_{}" TADO_COMPONENTS = ["sensor", "climate", "water_heater"] @@ -43,45 +52,106 @@ CONFIG_SCHEMA = vol.Schema( ) -def setup(hass, config): - """Set up of the Tado component.""" - acc_list = config[DOMAIN] +async def async_setup(hass: HomeAssistant, config: dict): + """Set up the Tado component.""" - api_data_list = [] + hass.data.setdefault(DOMAIN, {}) - for acc in acc_list: - username = acc[CONF_USERNAME] - password = acc[CONF_PASSWORD] - fallback = acc[CONF_FALLBACK] + if DOMAIN not in config: + return True - tadoconnector = TadoConnector(hass, username, password, fallback) - if not tadoconnector.setup(): - continue - - # Do first update - tadoconnector.update() - - api_data_list.append(tadoconnector) - # Poll for updates in the background - hass.helpers.event.track_time_interval( - # we're using here tadoconnector as a parameter of lambda - # to capture actual value instead of closuring of latest value - lambda now, tc=tadoconnector: tc.update(), - SCAN_INTERVAL, - ) - - hass.data[DOMAIN] = {} - hass.data[DOMAIN][DATA] = api_data_list - - # Load components - for component in TADO_COMPONENTS: - load_platform( - hass, component, DOMAIN, {}, config, + for conf in config[DOMAIN]: + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_IMPORT}, data=conf, + ) ) return True +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): + """Set up Tado from a config entry.""" + + _async_import_options_from_data_if_missing(hass, entry) + + username = entry.data[CONF_USERNAME] + password = entry.data[CONF_PASSWORD] + fallback = entry.options.get(CONF_FALLBACK, True) + + tadoconnector = TadoConnector(hass, username, password, fallback) + + try: + await hass.async_add_executor_job(tadoconnector.setup) + except KeyError: + _LOGGER.error("Failed to login to tado") + return False + except RuntimeError as exc: + _LOGGER.error("Failed to setup tado: %s", exc) + return ConfigEntryNotReady + except requests.exceptions.HTTPError as ex: + if ex.response.status_code > 400 and ex.response.status_code < 500: + _LOGGER.error("Failed to login to tado: %s", ex) + return False + raise ConfigEntryNotReady + + # Do first update + await hass.async_add_executor_job(tadoconnector.update) + + # Poll for updates in the background + update_track = async_track_time_interval( + hass, lambda now: tadoconnector.update(), SCAN_INTERVAL, + ) + + update_listener = entry.add_update_listener(_async_update_listener) + + hass.data[DOMAIN][entry.entry_id] = { + DATA: tadoconnector, + UPDATE_TRACK: update_track, + UPDATE_LISTENER: update_listener, + } + + for component in TADO_COMPONENTS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, component) + ) + + return True + + +@callback +def _async_import_options_from_data_if_missing(hass: HomeAssistant, entry: ConfigEntry): + options = dict(entry.options) + if CONF_FALLBACK not in options: + options[CONF_FALLBACK] = entry.data.get(CONF_FALLBACK, True) + hass.config_entries.async_update_entry(entry, options=options) + + +async def _async_update_listener(hass: HomeAssistant, entry: ConfigEntry): + """Handle options update.""" + await hass.config_entries.async_reload(entry.entry_id) + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): + """Unload a config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, component) + for component in TADO_COMPONENTS + ] + ) + ) + + hass.data[DOMAIN][entry.entry_id][UPDATE_TRACK]() + hass.data[DOMAIN][entry.entry_id][UPDATE_LISTENER]() + + if unload_ok: + hass.data[DOMAIN].pop(entry.entry_id) + + return unload_ok + + class TadoConnector: """An object to store the Tado data.""" @@ -108,19 +178,12 @@ class TadoConnector: def setup(self): """Connect to Tado and fetch the zones.""" - try: - self.tado = Tado(self._username, self._password) - except (RuntimeError, RequestException) as exc: - _LOGGER.error("Unable to connect: %s", exc) - return False - + self.tado = Tado(self._username, self._password) self.tado.setDebugging(True) - # Load zones and devices self.zones = self.tado.getZones() self.devices = self.tado.getMe()["homes"] self.device_id = self.devices[0]["id"] - return True @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): @@ -154,9 +217,16 @@ class TadoConnector: self.data[sensor_type][sensor] = data - _LOGGER.debug("Dispatching update to %s %s: %s", sensor_type, sensor, data) + _LOGGER.debug( + "Dispatching update to %s %s %s: %s", + self.device_id, + sensor_type, + sensor, + data, + ) dispatcher_send( - self.hass, SIGNAL_TADO_UPDATE_RECEIVED.format(sensor_type, sensor) + self.hass, + SIGNAL_TADO_UPDATE_RECEIVED.format(self.device_id, sensor_type, sensor), ) def get_capabilities(self, zone_id): diff --git a/homeassistant/components/tado/climate.py b/homeassistant/components/tado/climate.py index 2c6e49f3273..5e1bfa94dec 100644 --- a/homeassistant/components/tado/climate.py +++ b/homeassistant/components/tado/climate.py @@ -14,11 +14,11 @@ from homeassistant.components.climate.const import ( SUPPORT_SWING_MODE, SUPPORT_TARGET_TEMPERATURE, ) +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, PRECISION_TENTHS, TEMP_CELSIUS -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect -from . import DOMAIN, SIGNAL_TADO_UPDATE_RECEIVED from .const import ( CONST_FAN_AUTO, CONST_FAN_OFF, @@ -30,42 +30,52 @@ from .const import ( CONST_OVERLAY_MANUAL, CONST_OVERLAY_TADO_MODE, DATA, + DOMAIN, HA_TO_TADO_FAN_MODE_MAP, HA_TO_TADO_HVAC_MODE_MAP, ORDERED_KNOWN_TADO_MODES, + SIGNAL_TADO_UPDATE_RECEIVED, SUPPORT_PRESET, TADO_HVAC_ACTION_TO_HA_HVAC_ACTION, TADO_MODES_WITH_NO_TEMP_SETTING, TADO_SWING_OFF, + TADO_SWING_ON, TADO_TO_HA_FAN_MODE_MAP, TADO_TO_HA_HVAC_MODE_MAP, TYPE_AIR_CONDITIONING, TYPE_HEATING, ) +from .entity import TadoZoneEntity _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities +): """Set up the Tado climate platform.""" - if discovery_info is None: - return - api_list = hass.data[DOMAIN][DATA] - entities = [] - - for tado in api_list: - for zone in tado.zones: - if zone["type"] in [TYPE_HEATING, TYPE_AIR_CONDITIONING]: - entity = create_climate_entity(tado, zone["name"], zone["id"]) - if entity: - entities.append(entity) + tado = hass.data[DOMAIN][entry.entry_id][DATA] + entities = await hass.async_add_executor_job(_generate_entities, tado) if entities: - add_entities(entities, True) + async_add_entities(entities, True) -def create_climate_entity(tado, name: str, zone_id: int): +def _generate_entities(tado): + """Create all climate entities.""" + entities = [] + for zone in tado.zones: + if zone["type"] in [TYPE_HEATING, TYPE_AIR_CONDITIONING]: + entity = create_climate_entity( + tado, zone["name"], zone["id"], zone["devices"][0] + ) + if entity: + entities.append(entity) + return entities + + +def create_climate_entity(tado, name: str, zone_id: int, zone: dict): """Create a Tado climate entity.""" capabilities = tado.get_capabilities(zone_id) _LOGGER.debug("Capabilities for zone %s: %s", zone_id, capabilities) @@ -148,11 +158,12 @@ def create_climate_entity(tado, name: str, zone_id: int): supported_hvac_modes, supported_fan_modes, support_flags, + zone, ) return entity -class TadoClimate(ClimateDevice): +class TadoClimate(TadoZoneEntity, ClimateDevice): """Representation of a Tado climate entity.""" def __init__( @@ -170,11 +181,12 @@ class TadoClimate(ClimateDevice): supported_hvac_modes, supported_fan_modes, support_flags, + device_info, ): """Initialize of Tado climate entity.""" self._tado = tado + super().__init__(zone_name, device_info, tado.device_id, zone_id) - self.zone_name = zone_name self.zone_id = zone_id self.zone_type = zone_type self._unique_id = f"{zone_type} {zone_id} {tado.device_id}" @@ -204,22 +216,21 @@ class TadoClimate(ClimateDevice): self._current_tado_hvac_action = CURRENT_HVAC_OFF self._current_tado_swing_mode = TADO_SWING_OFF - self._undo_dispatcher = None self._tado_zone_data = None - self._async_update_zone_data() - async def async_will_remove_from_hass(self): - """When entity will be removed from hass.""" - if self._undo_dispatcher: - self._undo_dispatcher() + self._async_update_zone_data() async def async_added_to_hass(self): """Register for sensor updates.""" - self._undo_dispatcher = async_dispatcher_connect( - self.hass, - SIGNAL_TADO_UPDATE_RECEIVED.format("zone", self.zone_id), - self._async_update_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_TADO_UPDATE_RECEIVED.format( + self._tado.device_id, "zone", self.zone_id + ), + self._async_update_callback, + ) ) @property @@ -237,11 +248,6 @@ class TadoClimate(ClimateDevice): """Return the unique id.""" return self._unique_id - @property - def should_poll(self) -> bool: - """Do not poll.""" - return False - @property def current_humidity(self): """Return the current humidity.""" @@ -393,10 +399,7 @@ class TadoClimate(ClimateDevice): def swing_modes(self): """Swing modes for the device.""" if self._support_flags & SUPPORT_SWING_MODE: - # Currently we only support off. - # On will be added in the future in an update - # to PyTado - return [TADO_SWING_OFF] + return [TADO_SWING_ON, TADO_SWING_OFF] return None def set_swing_mode(self, swing_mode): @@ -410,6 +413,7 @@ class TadoClimate(ClimateDevice): self._current_tado_fan_speed = self._tado_zone_data.current_fan_speed self._current_tado_hvac_mode = self._tado_zone_data.current_hvac_mode self._current_tado_hvac_action = self._tado_zone_data.current_hvac_action + self._current_tado_swing_mode = self._tado_zone_data.current_swing_mode @callback def _async_update_callback(self): diff --git a/homeassistant/components/tado/config_flow.py b/homeassistant/components/tado/config_flow.py new file mode 100644 index 00000000000..c14b4284cf3 --- /dev/null +++ b/homeassistant/components/tado/config_flow.py @@ -0,0 +1,148 @@ +"""Config flow for Tado integration.""" +import logging + +from PyTado.interface import Tado +import requests.exceptions +import voluptuous as vol + +from homeassistant import config_entries, core, exceptions +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import callback + +from .const import CONF_FALLBACK, UNIQUE_ID +from .const import DOMAIN # pylint:disable=unused-import + +_LOGGER = logging.getLogger(__name__) + +DATA_SCHEMA = vol.Schema( + {vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str} +) + + +async def validate_input(hass: core.HomeAssistant, data): + """Validate the user input allows us to connect. + + Data has the keys from DATA_SCHEMA with values provided by the user. + """ + + try: + tado = await hass.async_add_executor_job( + Tado, data[CONF_USERNAME], data[CONF_PASSWORD] + ) + tado_me = await hass.async_add_executor_job(tado.getMe) + except KeyError: + raise InvalidAuth + except RuntimeError: + raise CannotConnect + except requests.exceptions.HTTPError as ex: + if ex.response.status_code > 400 and ex.response.status_code < 500: + raise InvalidAuth + raise CannotConnect + + if "homes" not in tado_me or len(tado_me["homes"]) == 0: + raise NoHomes + + home = tado_me["homes"][0] + unique_id = str(home["id"]) + name = home["name"] + + return {"title": name, UNIQUE_ID: unique_id} + + +class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow for Tado.""" + + VERSION = 1 + CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL + + async def async_step_user(self, user_input=None): + """Handle the initial step.""" + errors = {} + if user_input is not None: + try: + validated = await validate_input(self.hass, user_input) + except CannotConnect: + errors["base"] = "cannot_connect" + except InvalidAuth: + errors["base"] = "invalid_auth" + except NoHomes: + errors["base"] = "no_homes" + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected exception") + errors["base"] = "unknown" + + if "base" not in errors: + await self.async_set_unique_id(validated[UNIQUE_ID]) + self._abort_if_unique_id_configured() + return self.async_create_entry( + title=validated["title"], data=user_input + ) + + return self.async_show_form( + step_id="user", data_schema=DATA_SCHEMA, errors=errors + ) + + async def async_step_homekit(self, homekit_info): + """Handle HomeKit discovery.""" + if self._async_current_entries(): + # We can see tado on the network to tell them to configure + # it, but since the device will not give up the account it is + # bound to and there can be multiple tado devices on a single + # account, we avoid showing the device as discovered once + # they already have one configured as they can always + # add a new one via "+" + return self.async_abort(reason="already_configured") + return await self.async_step_user() + + async def async_step_import(self, user_input): + """Handle import.""" + if self._username_already_configured(user_input): + return self.async_abort(reason="already_configured") + return await self.async_step_user(user_input) + + def _username_already_configured(self, user_input): + """See if we already have a username matching user input configured.""" + existing_username = { + entry.data[CONF_USERNAME] for entry in self._async_current_entries() + } + return user_input[CONF_USERNAME] in existing_username + + @staticmethod + @callback + def async_get_options_flow(config_entry): + """Get the options flow for this handler.""" + return OptionsFlowHandler(config_entry) + + +class OptionsFlowHandler(config_entries.OptionsFlow): + """Handle a option flow for tado.""" + + def __init__(self, config_entry: config_entries.ConfigEntry): + """Initialize options flow.""" + self.config_entry = config_entry + + async def async_step_init(self, user_input=None): + """Handle options flow.""" + if user_input is not None: + return self.async_create_entry(title="", data=user_input) + + data_schema = vol.Schema( + { + vol.Required( + CONF_FALLBACK, default=self.config_entry.options.get(CONF_FALLBACK) + ): bool, + } + ) + return self.async_show_form(step_id="init", data_schema=data_schema) + + +class CannotConnect(exceptions.HomeAssistantError): + """Error to indicate we cannot connect.""" + + +class InvalidAuth(exceptions.HomeAssistantError): + """Error to indicate there is invalid auth.""" + + +class NoHomes(exceptions.HomeAssistantError): + """Error to indicate the account has no homes.""" diff --git a/homeassistant/components/tado/const.py b/homeassistant/components/tado/const.py index ab965de035a..9fc7b198054 100644 --- a/homeassistant/components/tado/const.py +++ b/homeassistant/components/tado/const.py @@ -46,6 +46,7 @@ TADO_HVAC_ACTION_TO_HA_HVAC_ACTION = { # Configuration CONF_FALLBACK = "fallback" DATA = "data" +UPDATE_TRACK = "update_track" # Types TYPE_AIR_CONDITIONING = "AIR_CONDITIONING" @@ -135,3 +136,14 @@ SUPPORT_PRESET = [PRESET_AWAY, PRESET_HOME] TADO_SWING_OFF = "OFF" TADO_SWING_ON = "ON" + +DOMAIN = "tado" + +SIGNAL_TADO_UPDATE_RECEIVED = "tado_update_received_{}_{}_{}" +UNIQUE_ID = "unique_id" + +DEFAULT_NAME = "Tado" + +TADO_BRIDGE = "Tado Bridge" + +UPDATE_LISTENER = "update_listener" diff --git a/homeassistant/components/tado/device_tracker.py b/homeassistant/components/tado/device_tracker.py index ea797754da8..5d87bfe8e34 100644 --- a/homeassistant/components/tado/device_tracker.py +++ b/homeassistant/components/tado/device_tracker.py @@ -13,7 +13,7 @@ from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DeviceScanner, ) -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, HTTP_OK from homeassistant.helpers.aiohttp_client import async_create_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.util import Throttle @@ -114,7 +114,7 @@ class TadoDeviceScanner(DeviceScanner): response = await self.websession.get(url) - if response.status != 200: + if response.status != HTTP_OK: _LOGGER.warning("Error %d on %s.", response.status, self.tadoapiurl) return False diff --git a/homeassistant/components/tado/entity.py b/homeassistant/components/tado/entity.py new file mode 100644 index 00000000000..97a3e3bdc39 --- /dev/null +++ b/homeassistant/components/tado/entity.py @@ -0,0 +1,37 @@ +"""Base class for August entity.""" + +import logging + +from homeassistant.helpers.entity import Entity + +from .const import DEFAULT_NAME, DOMAIN + +_LOGGER = logging.getLogger(__name__) + + +class TadoZoneEntity(Entity): + """Base implementation for tado device.""" + + def __init__(self, zone_name, device_info, device_id, zone_id): + """Initialize an August device.""" + super().__init__() + self._device_zone_id = f"{device_id}_{zone_id}" + self._device_info = device_info + self.zone_name = zone_name + + @property + def device_info(self): + """Return the device_info of the device.""" + return { + "identifiers": {(DOMAIN, self._device_zone_id)}, + "name": self.zone_name, + "manufacturer": DEFAULT_NAME, + "sw_version": self._device_info["currentFwVersion"], + "model": self._device_info["deviceType"], + "via_device": (DOMAIN, self._device_info["serialNo"]), + } + + @property + def should_poll(self): + """Do not poll.""" + return False diff --git a/homeassistant/components/tado/manifest.json b/homeassistant/components/tado/manifest.json index ce4679a23e2..feff03d0b81 100644 --- a/homeassistant/components/tado/manifest.json +++ b/homeassistant/components/tado/manifest.json @@ -2,11 +2,10 @@ "domain": "tado", "name": "Tado", "documentation": "https://www.home-assistant.io/integrations/tado", - "requirements": [ - "python-tado==0.6.0" - ], - "dependencies": [], - "codeowners": [ - "@michaelarnauts", "@bdraco" - ] + "requirements": ["python-tado==0.8.1"], + "codeowners": ["@michaelarnauts", "@bdraco"], + "config_flow": true, + "homekit": { + "models": ["tado", "AC02"] + } } diff --git a/homeassistant/components/tado/sensor.py b/homeassistant/components/tado/sensor.py index fea81dcb586..ceca0e0170e 100644 --- a/homeassistant/components/tado/sensor.py +++ b/homeassistant/components/tado/sensor.py @@ -1,13 +1,23 @@ """Support for Tado sensors for each zone.""" import logging +from homeassistant.config_entries import ConfigEntry from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity -from . import DATA, DOMAIN, SIGNAL_TADO_UPDATE_RECEIVED -from .const import TYPE_AIR_CONDITIONING, TYPE_HEATING, TYPE_HOT_WATER +from .const import ( + DATA, + DEFAULT_NAME, + DOMAIN, + SIGNAL_TADO_UPDATE_RECEIVED, + TADO_BRIDGE, + TYPE_AIR_CONDITIONING, + TYPE_HEATING, + TYPE_HOT_WATER, +) +from .entity import TadoZoneEntity _LOGGER = logging.getLogger(__name__) @@ -39,50 +49,53 @@ ZONE_SENSORS = { DEVICE_SENSORS = ["tado bridge status"] -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the sensor platform.""" - api_list = hass.data[DOMAIN][DATA] +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities +): + """Set up the Tado sensor platform.""" + tado = hass.data[DOMAIN][entry.entry_id][DATA] + # Create zone sensors + zones = tado.zones + devices = tado.devices entities = [] - for tado in api_list: - # Create zone sensors - zones = tado.zones - devices = tado.devices + for zone in zones: + zone_type = zone["type"] + if zone_type not in ZONE_SENSORS: + _LOGGER.warning("Unknown zone type skipped: %s", zone_type) + continue - for zone in zones: - zone_type = zone["type"] - if zone_type not in ZONE_SENSORS: - _LOGGER.warning("Unknown zone type skipped: %s", zone_type) - continue + entities.extend( + [ + TadoZoneSensor( + tado, zone["name"], zone["id"], variable, zone["devices"][0] + ) + for variable in ZONE_SENSORS[zone_type] + ] + ) - entities.extend( - [ - TadoZoneSensor(tado, zone["name"], zone["id"], variable) - for variable in ZONE_SENSORS[zone_type] - ] - ) + # Create device sensors + for device in devices: + entities.extend( + [ + TadoDeviceSensor(tado, device["name"], device["id"], variable, device) + for variable in DEVICE_SENSORS + ] + ) - # Create device sensors - for device in devices: - entities.extend( - [ - TadoDeviceSensor(tado, device["name"], device["id"], variable) - for variable in DEVICE_SENSORS - ] - ) - - add_entities(entities, True) + if entities: + async_add_entities(entities, True) -class TadoZoneSensor(Entity): +class TadoZoneSensor(TadoZoneEntity, Entity): """Representation of a tado Sensor.""" - def __init__(self, tado, zone_name, zone_id, zone_variable): + def __init__(self, tado, zone_name, zone_id, zone_variable, device_info): """Initialize of the Tado Sensor.""" self._tado = tado + super().__init__(zone_name, device_info, tado.device_id, zone_id) - self.zone_name = zone_name self.zone_id = zone_id self.zone_variable = zone_variable @@ -91,20 +104,18 @@ class TadoZoneSensor(Entity): self._state = None self._state_attributes = None self._tado_zone_data = None - self._undo_dispatcher = None - - async def async_will_remove_from_hass(self): - """When entity will be removed from hass.""" - if self._undo_dispatcher: - self._undo_dispatcher() async def async_added_to_hass(self): """Register for sensor updates.""" - self._undo_dispatcher = async_dispatcher_connect( - self.hass, - SIGNAL_TADO_UPDATE_RECEIVED.format("zone", self.zone_id), - self._async_update_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_TADO_UPDATE_RECEIVED.format( + self._tado.device_id, "zone", self.zone_id + ), + self._async_update_callback, + ) ) self._async_update_zone_data() @@ -148,11 +159,6 @@ class TadoZoneSensor(Entity): if self.zone_variable == "humidity": return "mdi:water-percent" - @property - def should_poll(self): - """Do not poll.""" - return False - @callback def _async_update_callback(self): """Update and write state.""" @@ -223,10 +229,11 @@ class TadoZoneSensor(Entity): class TadoDeviceSensor(Entity): """Representation of a tado Sensor.""" - def __init__(self, tado, device_name, device_id, device_variable): + def __init__(self, tado, device_name, device_id, device_variable, device_info): """Initialize of the Tado Sensor.""" self._tado = tado + self._device_info = device_info self.device_name = device_name self.device_id = device_id self.device_variable = device_variable @@ -236,20 +243,18 @@ class TadoDeviceSensor(Entity): self._state = None self._state_attributes = None self._tado_device_data = None - self._undo_dispatcher = None - - async def async_will_remove_from_hass(self): - """When entity will be removed from hass.""" - if self._undo_dispatcher: - self._undo_dispatcher() async def async_added_to_hass(self): """Register for sensor updates.""" - self._undo_dispatcher = async_dispatcher_connect( - self.hass, - SIGNAL_TADO_UPDATE_RECEIVED.format("device", self.device_id), - self._async_update_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_TADO_UPDATE_RECEIVED.format( + self._tado.device_id, "device", self.device_id + ), + self._async_update_callback, + ) ) self._async_update_device_data() @@ -289,3 +294,13 @@ class TadoDeviceSensor(Entity): if self.device_variable == "tado bridge status": self._state = data.get("connectionState", {}).get("value", False) + + @property + def device_info(self): + """Return the device_info of the device.""" + return { + "identifiers": {(DOMAIN, self.device_id)}, + "name": self.device_name, + "manufacturer": DEFAULT_NAME, + "model": TADO_BRIDGE, + } diff --git a/homeassistant/components/tado/strings.json b/homeassistant/components/tado/strings.json new file mode 100644 index 00000000000..1192ba544d9 --- /dev/null +++ b/homeassistant/components/tado/strings.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { "already_configured": "Device is already configured" }, + "step": { + "user": { + "data": { "password": "Password", "username": "Username" }, + "title": "Connect to your Tado account" + } + }, + "error": { + "unknown": "Unexpected error", + "no_homes": "There are no homes linked to this tado account.", + "invalid_auth": "Invalid authentication", + "cannot_connect": "Failed to connect, please try again" + } + }, + "options": { + "step": { + "init": { + "description": "Fallback mode will switch to Smart Schedule at next schedule switch after manually adjusting a zone.", + "data": { "fallback": "Enable fallback mode." }, + "title": "Adjust Tado options." + } + } + } +} diff --git a/homeassistant/components/tado/translations/ca.json b/homeassistant/components/tado/translations/ca.json new file mode 100644 index 00000000000..df340784f7f --- /dev/null +++ b/homeassistant/components/tado/translations/ca.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositiu ja est\u00e0 configurat" + }, + "error": { + "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida", + "no_homes": "No hi ha cases enlla\u00e7ades a aquest compte Tado.", + "unknown": "Error inesperat" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "title": "Connexi\u00f3 amb compte Tado" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Activa el mode salvaguarda." + }, + "description": "El mode salvaguarda canviar\u00e0 a Planificaci\u00f3 Intel\u00b7ligent en el proper canvi de programaci\u00f3 o quan s'ajusti manualment una zona.", + "title": "Ajusta les opcions de Tado" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/de.json b/homeassistant/components/tado/translations/de.json new file mode 100644 index 00000000000..ffab091f726 --- /dev/null +++ b/homeassistant/components/tado/translations/de.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Ger\u00e4t ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung fehlgeschlagen, versuchen Sie es erneut", + "invalid_auth": "Ung\u00fcltige Authentifizierung", + "no_homes": "Es sind keine Standorte mit diesem Tado-Konto verkn\u00fcpft.", + "unknown": "Unerwarteter Fehler" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "title": "Stellen Sie eine Verbindung zu Ihrem Tado-Konto her" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Aktivieren Sie den Fallback-Modus." + }, + "description": "Der Fallback-Modus wechselt beim n\u00e4chsten Zeitplanwechsel nach dem manuellen Anpassen einer Zone zu Smart Schedule.", + "title": "Passen Sie die Tado-Optionen an." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/en.json b/homeassistant/components/tado/translations/en.json new file mode 100644 index 00000000000..d6f28c43cb2 --- /dev/null +++ b/homeassistant/components/tado/translations/en.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Device is already configured" + }, + "error": { + "cannot_connect": "Failed to connect, please try again", + "invalid_auth": "Invalid authentication", + "no_homes": "There are no homes linked to this tado account.", + "unknown": "Unexpected error" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "title": "Connect to your Tado account" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Enable fallback mode." + }, + "description": "Fallback mode will switch to Smart Schedule at next schedule switch after manually adjusting a zone.", + "title": "Adjust Tado options." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/es.json b/homeassistant/components/tado/translations/es.json new file mode 100644 index 00000000000..fec4e448182 --- /dev/null +++ b/homeassistant/components/tado/translations/es.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "El dispositivo ya est\u00e1 configurado" + }, + "error": { + "cannot_connect": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida", + "no_homes": "No hay casas asociadas a esta cuenta de Tado", + "unknown": "Error inesperado" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "title": "Conectar con tu cuenta de Tado" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Activar modo de salvaguarda." + }, + "description": "El modo de salvaguarda volver\u00e1 a la Planificaci\u00f3n Inteligente en el siguiente cambio de programaci\u00f3n despu\u00e9s de ajustar manualmente una zona.", + "title": "Ajustar las opciones de Tado" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/fr.json b/homeassistant/components/tado/translations/fr.json new file mode 100644 index 00000000000..3fa024bb95e --- /dev/null +++ b/homeassistant/components/tado/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/it.json b/homeassistant/components/tado/translations/it.json new file mode 100644 index 00000000000..775ef702b84 --- /dev/null +++ b/homeassistant/components/tado/translations/it.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato" + }, + "error": { + "cannot_connect": "Impossibile connettersi, si prega di riprovare", + "invalid_auth": "Autenticazione non valida", + "no_homes": "Non ci sono case collegate a questo account tado.", + "unknown": "Errore imprevisto" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "title": "Collegati al tuo account Tado" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Abilitare la modalit\u00e0 di fallback." + }, + "description": "La modalit\u00e0 di fallback passer\u00e0 a Smart Schedule al prossimo cambio di programma dopo aver regolato manualmente una zona.", + "title": "Regolare le opzioni di Tado." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/ko.json b/homeassistant/components/tado/translations/ko.json new file mode 100644 index 00000000000..08561ee43aa --- /dev/null +++ b/homeassistant/components/tado/translations/ko.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "no_homes": "\uc774 Tado \uacc4\uc815\uc5d0 \uc5f0\uacb0\ub41c \uc9d1\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Tado \uacc4\uc815\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "\ub300\uccb4 \ubaa8\ub4dc\ub97c \ud65c\uc131\ud654\ud569\ub2c8\ub2e4." + }, + "description": "\uc601\uc5ed\uc744 \uc218\ub3d9\uc73c\ub85c \uc804\ud658\ud558\uba74 \ub300\uccb4 \ubaa8\ub4dc\ub294 \ub2e4\uc74c \uc77c\uc815\uc744 \uc2a4\ub9c8\ud2b8 \uc77c\uc815\uc73c\ub85c \uc804\ud658\ud569\ub2c8\ub2e4.", + "title": "Tado \uc635\uc158 \uc870\uc815." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/lb.json b/homeassistant/components/tado/translations/lb.json new file mode 100644 index 00000000000..91a81f03177 --- /dev/null +++ b/homeassistant/components/tado/translations/lb.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "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": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "title": "Verbann dech mat dengem Tado Kont." + } + } + }, + "options": { + "step": { + "init": { + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/no.json b/homeassistant/components/tado/translations/no.json new file mode 100644 index 00000000000..594084c6571 --- /dev/null +++ b/homeassistant/components/tado/translations/no.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Enheten er allerede konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", + "invalid_auth": "Ugyldig godkjenning", + "no_homes": "Det er ingen hjem knyttet til denne tado-kontoen.", + "unknown": "Uventet feil" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "title": "Koble til Tado-kontoen din" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Aktiver tilbakefallsmodus." + }, + "description": "Fallback-modus bytter til Smart Schedule ved neste planbryter etter manuell justering av en sone.", + "title": "Juster Tado-alternativene." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/pl.json b/homeassistant/components/tado/translations/pl.json new file mode 100644 index 00000000000..65a23d58359 --- /dev/null +++ b/homeassistant/components/tado/translations/pl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie", + "no_homes": "Brak dom\u00f3w powi\u0105zanych z tym kontem Tado.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105cz z kontem Tado" + } + } + }, + "options": { + "step": { + "init": { + "title": "Dostosuj opcje Tado" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/pt.json b/homeassistant/components/tado/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/tado/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/ru.json b/homeassistant/components/tado/translations/ru.json new file mode 100644 index 00000000000..04d1a0d9545 --- /dev/null +++ b/homeassistant/components/tado/translations/ru.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.", + "no_homes": "\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0434\u043e\u043c\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "Tado" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c Fallback" + }, + "description": "\u0420\u0435\u0436\u0438\u043c Fallback \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043d\u0430 Smart Schedule \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0440\u0443\u0447\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u043e\u043d\u044b.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Tado" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/sl.json b/homeassistant/components/tado/translations/sl.json new file mode 100644 index 00000000000..061e511eb52 --- /dev/null +++ b/homeassistant/components/tado/translations/sl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Naprava je \u017ee konfigurirana" + }, + "error": { + "cannot_connect": "Povezava ni uspela, poskusite znova", + "invalid_auth": "Neveljavna avtentikacija", + "no_homes": "Ni domov, povezanih s tem Tado ra\u010dunom.", + "unknown": "Nepri\u010dakovana napaka" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "title": "Pove\u017eite se s svojim ra\u010dunom Tado" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Omogo\u010di rezervni na\u010din." + }, + "description": "Rezervni na\u010din bo preklopili na pametni urnik ob naslednjem preklopnem stikalu po ro\u010dni prilagoditvi obmo\u010dja.", + "title": "Prilagodite Tado mo\u017enosti." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/translations/zh-Hant.json b/homeassistant/components/tado/translations/zh-Hant.json new file mode 100644 index 00000000000..911520065fc --- /dev/null +++ b/homeassistant/components/tado/translations/zh-Hant.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", + "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548", + "no_homes": "\u6b64 Tado \u5e33\u865f\u672a\u7d81\u5b9a\u4efb\u4f55\u5bb6\u5ead\u3002", + "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u9023\u7dda\u81f3 Tado \u5e33\u865f" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "\u958b\u555f\u5f8c\u964d\u6a21\u5f0f" + }, + "description": "\u5f8c\u964d\u6a21\u5f0f\u5c07\u6703\u65bc\u624b\u52d5\u8abf\u6574\u5340\u57df\u5f8c\uff0c\u4e0b\u4e00\u6b21\u898f\u5283\u5207\u63db\u6642\u3001\u5207\u63db\u5230\u667a\u80fd\u884c\u7a0b\u3002", + "title": "\u8abf\u6574 Tado \u9078\u9805\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tado/water_heater.py b/homeassistant/components/tado/water_heater.py index 51ff2ede57d..aeb2d1ee106 100644 --- a/homeassistant/components/tado/water_heater.py +++ b/homeassistant/components/tado/water_heater.py @@ -6,11 +6,11 @@ from homeassistant.components.water_heater import ( SUPPORT_TARGET_TEMPERATURE, WaterHeaterDevice, ) +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect -from . import DOMAIN, SIGNAL_TADO_UPDATE_RECEIVED from .const import ( CONST_HVAC_HEAT, CONST_MODE_AUTO, @@ -21,8 +21,11 @@ from .const import ( CONST_OVERLAY_TADO_MODE, CONST_OVERLAY_TIMER, DATA, + DOMAIN, + SIGNAL_TADO_UPDATE_RECEIVED, TYPE_HOT_WATER, ) +from .entity import TadoZoneEntity _LOGGER = logging.getLogger(__name__) @@ -44,25 +47,31 @@ WATER_HEATER_MAP_TADO = { SUPPORT_FLAGS_HEATER = SUPPORT_OPERATION_MODE -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities +): """Set up the Tado water heater platform.""" - if discovery_info is None: - return - api_list = hass.data[DOMAIN][DATA] - entities = [] - - for tado in api_list: - for zone in tado.zones: - if zone["type"] == TYPE_HOT_WATER: - entity = create_water_heater_entity(tado, zone["name"], zone["id"]) - entities.append(entity) + tado = hass.data[DOMAIN][entry.entry_id][DATA] + entities = await hass.async_add_executor_job(_generate_entities, tado) if entities: - add_entities(entities, True) + async_add_entities(entities, True) -def create_water_heater_entity(tado, name: str, zone_id: int): +def _generate_entities(tado): + """Create all water heater entities.""" + entities = [] + + for zone in tado.zones: + if zone["type"] == TYPE_HOT_WATER: + entity = create_water_heater_entity(tado, zone["name"], zone["id"], zone) + entities.append(entity) + + return entities + + +def create_water_heater_entity(tado, name: str, zone_id: int, zone: str): """Create a Tado water heater device.""" capabilities = tado.get_capabilities(zone_id) @@ -77,13 +86,19 @@ def create_water_heater_entity(tado, name: str, zone_id: int): max_temp = None entity = TadoWaterHeater( - tado, name, zone_id, supports_temperature_control, min_temp, max_temp + tado, + name, + zone_id, + supports_temperature_control, + min_temp, + max_temp, + zone["devices"][0], ) return entity -class TadoWaterHeater(WaterHeaterDevice): +class TadoWaterHeater(TadoZoneEntity, WaterHeaterDevice): """Representation of a Tado water heater.""" def __init__( @@ -94,11 +109,13 @@ class TadoWaterHeater(WaterHeaterDevice): supports_temperature_control, min_temp, max_temp, + device_info, ): """Initialize of Tado water heater entity.""" - self._tado = tado - self.zone_name = zone_name + self._tado = tado + super().__init__(zone_name, device_info, tado.device_id, zone_id) + self.zone_id = zone_id self._unique_id = f"{zone_id} {tado.device_id}" @@ -117,20 +134,18 @@ class TadoWaterHeater(WaterHeaterDevice): self._current_tado_hvac_mode = CONST_MODE_SMART_SCHEDULE self._overlay_mode = CONST_MODE_SMART_SCHEDULE self._tado_zone_data = None - self._undo_dispatcher = None - - async def async_will_remove_from_hass(self): - """When entity will be removed from hass.""" - if self._undo_dispatcher: - self._undo_dispatcher() async def async_added_to_hass(self): """Register for sensor updates.""" - self._undo_dispatcher = async_dispatcher_connect( - self.hass, - SIGNAL_TADO_UPDATE_RECEIVED.format("zone", self.zone_id), - self._async_update_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_TADO_UPDATE_RECEIVED.format( + self._tado.device_id, "zone", self.zone_id + ), + self._async_update_callback, + ) ) self._async_update_data() @@ -149,11 +164,6 @@ class TadoWaterHeater(WaterHeaterDevice): """Return the unique id.""" return self._unique_id - @property - def should_poll(self) -> bool: - """Do not poll.""" - return False - @property def current_operation(self): """Return current readable operation mode.""" diff --git a/homeassistant/components/tahoma/__init__.py b/homeassistant/components/tahoma/__init__.py index f14e3019ac0..1e1bbd31eae 100644 --- a/homeassistant/components/tahoma/__init__.py +++ b/homeassistant/components/tahoma/__init__.py @@ -37,6 +37,7 @@ TAHOMA_TYPES = { "io:AwningValanceIOComponent": "cover", "io:ExteriorVenetianBlindIOComponent": "cover", "io:DiscreteGarageOpenerIOComponent": "cover", + "io:DiscreteGarageOpenerWithPartialPositionIOComponent": "cover", "io:HorizontalAwningIOComponent": "cover", "io:GarageOpenerIOComponent": "cover", "io:LightIOSystemSensor": "sensor", diff --git a/homeassistant/components/tahoma/cover.py b/homeassistant/components/tahoma/cover.py index 7692e9bedf7..e13f9bb8859 100644 --- a/homeassistant/components/tahoma/cover.py +++ b/homeassistant/components/tahoma/cover.py @@ -30,6 +30,7 @@ HORIZONTAL_AWNING = "io:HorizontalAwningIOComponent" TAHOMA_DEVICE_CLASSES = { HORIZONTAL_AWNING: DEVICE_CLASS_AWNING, "io:AwningValanceIOComponent": DEVICE_CLASS_AWNING, + "io:DiscreteGarageOpenerWithPartialPositionIOComponent": DEVICE_CLASS_GARAGE, "io:DiscreteGarageOpenerIOComponent": DEVICE_CLASS_GARAGE, "io:ExteriorVenetianBlindIOComponent": DEVICE_CLASS_BLIND, "io:GarageOpenerIOComponent": DEVICE_CLASS_GARAGE, @@ -155,6 +156,11 @@ class TahomaCover(TahomaDevice, CoverDevice): self._closed = ( self.tahoma_device.active_states["core:OpenClosedState"] == "closed" ) + if "core:OpenClosedPartialState" in self.tahoma_device.active_states: + self._closed = ( + self.tahoma_device.active_states["core:OpenClosedPartialState"] + == "closed" + ) else: self._closed = False diff --git a/homeassistant/components/tahoma/manifest.json b/homeassistant/components/tahoma/manifest.json index f01d6740b56..12f1eb7d0a1 100644 --- a/homeassistant/components/tahoma/manifest.json +++ b/homeassistant/components/tahoma/manifest.json @@ -3,6 +3,5 @@ "name": "Tahoma", "documentation": "https://www.home-assistant.io/integrations/tahoma", "requirements": ["tahoma-api==0.0.16"], - "dependencies": [], "codeowners": ["@philklei"] } diff --git a/homeassistant/components/tahoma/scene.py b/homeassistant/components/tahoma/scene.py index c60f245fc50..55b89dfcd47 100644 --- a/homeassistant/components/tahoma/scene.py +++ b/homeassistant/components/tahoma/scene.py @@ -1,5 +1,6 @@ """Support for Tahoma scenes.""" import logging +from typing import Any from homeassistant.components.scene import Scene @@ -13,9 +14,10 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if discovery_info is None: return controller = hass.data[TAHOMA_DOMAIN]["controller"] - scenes = [] - for scene in hass.data[TAHOMA_DOMAIN]["scenes"]: - scenes.append(TahomaScene(scene, controller)) + scenes = [ + TahomaScene(scene, controller) for scene in hass.data[TAHOMA_DOMAIN]["scenes"] + ] + add_entities(scenes, True) @@ -28,7 +30,7 @@ class TahomaScene(Scene): self.controller = controller self._name = self.tahoma_scene.name - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self.controller.launch_action_group(self.tahoma_scene.oid) diff --git a/homeassistant/components/tank_utility/manifest.json b/homeassistant/components/tank_utility/manifest.json index 68d487ce5c5..dafe90193f6 100644 --- a/homeassistant/components/tank_utility/manifest.json +++ b/homeassistant/components/tank_utility/manifest.json @@ -3,6 +3,5 @@ "name": "Tank Utility", "documentation": "https://www.home-assistant.io/integrations/tank_utility", "requirements": ["tank_utility==1.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tankerkoenig/__init__.py b/homeassistant/components/tankerkoenig/__init__.py old mode 100755 new mode 100644 index e8b4e92327c..bf2468b704c --- a/homeassistant/components/tankerkoenig/__init__.py +++ b/homeassistant/components/tankerkoenig/__init__.py @@ -13,6 +13,7 @@ from homeassistant.const import ( CONF_LONGITUDE, CONF_RADIUS, CONF_SCAN_INTERVAL, + CONF_SHOW_ON_MAP, ) from homeassistant.exceptions import HomeAssistantError import homeassistant.helpers.config_validation as cv @@ -52,6 +53,7 @@ CONFIG_SCHEMA = vol.Schema( vol.Optional(CONF_STATIONS, default=[]): vol.All( cv.ensure_list, [cv.string] ), + vol.Optional(CONF_SHOW_ON_MAP, default=True): cv.boolean, } ) }, @@ -106,6 +108,7 @@ class TankerkoenigData: self.stations = {} self.fuel_types = conf[CONF_FUEL_TYPES] self.update_interval = conf[CONF_SCAN_INTERVAL] + self.show_on_map = conf[CONF_SHOW_ON_MAP] self._hass = hass def setup(self, latitude, longitude, radius, additional_stations): diff --git a/homeassistant/components/tankerkoenig/manifest.json b/homeassistant/components/tankerkoenig/manifest.json old mode 100755 new mode 100644 index 1b22e62d5ef..d9a63037a8f --- a/homeassistant/components/tankerkoenig/manifest.json +++ b/homeassistant/components/tankerkoenig/manifest.json @@ -3,8 +3,5 @@ "name": "Tankerkoenig", "documentation": "https://www.home-assistant.io/integrations/tankerkoenig", "requirements": ["pytankerkoenig==0.0.6"], - "dependencies": [], - "codeowners": [ - "@guillempages" - ] + "codeowners": ["@guillempages"] } diff --git a/homeassistant/components/tankerkoenig/sensor.py b/homeassistant/components/tankerkoenig/sensor.py old mode 100755 new mode 100644 index 2fb184848ea..d78b5eb2641 --- a/homeassistant/components/tankerkoenig/sensor.py +++ b/homeassistant/components/tankerkoenig/sensor.py @@ -59,7 +59,11 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= ) continue sensor = FuelPriceSensor( - fuel, station, coordinator, f"{NAME}_{station['name']}_{fuel}" + fuel, + station, + coordinator, + f"{NAME}_{station['name']}_{fuel}", + tankerkoenig.show_on_map, ) entities.append(sensor) _LOGGER.debug("Added sensors %s", entities) @@ -70,7 +74,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= class FuelPriceSensor(Entity): """Contains prices for fuel in a given station.""" - def __init__(self, fuel_type, station, coordinator, name): + def __init__(self, fuel_type, station, coordinator, name, show_on_map): """Initialize the sensor.""" self._station = station self._station_id = station["id"] @@ -84,6 +88,7 @@ class FuelPriceSensor(Entity): self._postcode = station["postCode"] self._street = station["street"] self._price = station[fuel_type] + self._show_on_map = show_on_map @property def name(self): @@ -111,6 +116,11 @@ class FuelPriceSensor(Entity): # key Fuel_type is not available when the fuel station is closed, use "get" instead of "[]" to avoid exceptions return self._coordinator.data[self._station_id].get(self._fuel_type) + @property + def unique_id(self) -> str: + """Return a unique identifier for this entity.""" + return f"{self._station_id}_{self._fuel_type}" + @property def device_state_attributes(self): """Return the attributes of the device.""" @@ -125,9 +135,12 @@ class FuelPriceSensor(Entity): ATTR_HOUSE_NUMBER: self._house_number, ATTR_POSTCODE: self._postcode, ATTR_CITY: self._city, - ATTR_LATITUDE: self._latitude, - ATTR_LONGITUDE: self._longitude, } + + if self._show_on_map: + attrs[ATTR_LATITUDE] = self._latitude + attrs[ATTR_LONGITUDE] = self._longitude + if data is not None and "status" in data: attrs[ATTR_IS_OPEN] = data["status"] == "open" return attrs diff --git a/homeassistant/components/tapsaff/manifest.json b/homeassistant/components/tapsaff/manifest.json index bfdb1adda79..7d78491ad14 100644 --- a/homeassistant/components/tapsaff/manifest.json +++ b/homeassistant/components/tapsaff/manifest.json @@ -3,6 +3,5 @@ "name": "Taps Aff", "documentation": "https://www.home-assistant.io/integrations/tapsaff", "requirements": ["tapsaff==0.2.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tautulli/manifest.json b/homeassistant/components/tautulli/manifest.json index 338943a3e6c..c821fb49853 100644 --- a/homeassistant/components/tautulli/manifest.json +++ b/homeassistant/components/tautulli/manifest.json @@ -3,6 +3,5 @@ "name": "Tautulli", "documentation": "https://www.home-assistant.io/integrations/tautulli", "requirements": ["pytautulli==0.5.0"], - "dependencies": [], "codeowners": ["@ludeeus"] } diff --git a/homeassistant/components/tautulli/sensor.py b/homeassistant/components/tautulli/sensor.py index b800bf6af1e..3c61559bcfa 100644 --- a/homeassistant/components/tautulli/sensor.py +++ b/homeassistant/components/tautulli/sensor.py @@ -59,7 +59,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= api_key = config[CONF_API_KEY] monitored_conditions = config.get(CONF_MONITORED_CONDITIONS) user = config.get(CONF_MONITORED_USERS) - use_ssl = config.get(CONF_SSL) + use_ssl = config[CONF_SSL] verify_ssl = config.get(CONF_VERIFY_SSL) session = async_get_clientsession(hass, verify_ssl) diff --git a/homeassistant/components/tcp/manifest.json b/homeassistant/components/tcp/manifest.json index fea16a087c8..b05a3ff58fb 100644 --- a/homeassistant/components/tcp/manifest.json +++ b/homeassistant/components/tcp/manifest.json @@ -2,7 +2,5 @@ "domain": "tcp", "name": "TCP", "documentation": "https://www.home-assistant.io/integrations/tcp", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tcp/sensor.py b/homeassistant/components/tcp/sensor.py index 2732f2d6bd1..5d457f2df7b 100644 --- a/homeassistant/components/tcp/sensor.py +++ b/homeassistant/components/tcp/sensor.py @@ -51,7 +51,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): class TcpSensor(Entity): """Implementation of a TCP socket based sensor.""" - required = tuple() + required = () def __init__(self, hass, config): """Set all the config values if they exist and get initial state.""" @@ -99,7 +99,7 @@ class TcpSensor(Entity): sock.settimeout(self._config[CONF_TIMEOUT]) try: sock.connect((self._config[CONF_HOST], self._config[CONF_PORT])) - except socket.error as err: + except OSError as err: _LOGGER.error( "Unable to connect to %s on port %s: %s", self._config[CONF_HOST], @@ -110,7 +110,7 @@ class TcpSensor(Entity): try: sock.send(self._config[CONF_PAYLOAD].encode()) - except socket.error as err: + except OSError as err: _LOGGER.error( "Unable to send payload %r to %s on port %s: %s", self._config[CONF_PAYLOAD], diff --git a/homeassistant/components/ted5000/manifest.json b/homeassistant/components/ted5000/manifest.json index 820ee348b3b..d328d42b019 100644 --- a/homeassistant/components/ted5000/manifest.json +++ b/homeassistant/components/ted5000/manifest.json @@ -3,6 +3,5 @@ "name": "The Energy Detective TED5000", "documentation": "https://www.home-assistant.io/integrations/ted5000", "requirements": ["xmltodict==0.12.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ted5000/sensor.py b/homeassistant/components/ted5000/sensor.py index e0025a050c3..3ea26286b18 100644 --- a/homeassistant/components/ted5000/sensor.py +++ b/homeassistant/components/ted5000/sensor.py @@ -7,7 +7,7 @@ import voluptuous as vol import xmltodict from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, POWER_WATT +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, POWER_WATT, VOLT from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -43,7 +43,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): dev = [] for mtu in gateway.data: dev.append(Ted5000Sensor(gateway, name, mtu, POWER_WATT)) - dev.append(Ted5000Sensor(gateway, name, mtu, "V")) + dev.append(Ted5000Sensor(gateway, name, mtu, VOLT)) add_entities(dev) return True @@ -54,7 +54,7 @@ class Ted5000Sensor(Entity): def __init__(self, gateway, name, mtu, unit): """Initialize the sensor.""" - units = {POWER_WATT: "power", "V": "voltage"} + units = {POWER_WATT: "power", VOLT: "voltage"} self._gateway = gateway self._name = "{} mtu{} {}".format(name, mtu, units[unit]) self._mtu = mtu @@ -90,7 +90,7 @@ class Ted5000Gateway: def __init__(self, url): """Initialize the data object.""" self.url = url - self.data = dict() + self.data = {} @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): @@ -108,4 +108,4 @@ class Ted5000Gateway: power = int(doc["LiveData"]["Power"]["MTU%d" % mtu]["PowerNow"]) voltage = int(doc["LiveData"]["Voltage"]["MTU%d" % mtu]["VoltageNow"]) - self.data[mtu] = {POWER_WATT: power, "V": voltage / 10} + self.data[mtu] = {POWER_WATT: power, VOLT: voltage / 10} diff --git a/homeassistant/components/teksavvy/manifest.json b/homeassistant/components/teksavvy/manifest.json index 9de98dcffb6..e114efdce9f 100644 --- a/homeassistant/components/teksavvy/manifest.json +++ b/homeassistant/components/teksavvy/manifest.json @@ -2,7 +2,5 @@ "domain": "teksavvy", "name": "TekSavvy", "documentation": "https://www.home-assistant.io/integrations/teksavvy", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/teksavvy/sensor.py b/homeassistant/components/teksavvy/sensor.py index 0d2d290fed9..96331cb5347 100644 --- a/homeassistant/components/teksavvy/sensor.py +++ b/homeassistant/components/teksavvy/sensor.py @@ -11,6 +11,7 @@ from homeassistant.const import ( CONF_MONITORED_VARIABLES, CONF_NAME, DATA_GIGABYTES, + HTTP_OK, UNIT_PERCENTAGE, ) from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -144,7 +145,7 @@ class TekSavvyData: ) with async_timeout.timeout(REQUEST_TIMEOUT): req = await self.websession.get(url, headers=headers) - if req.status != 200: + if req.status != HTTP_OK: _LOGGER.error("Request failed with status: %u", req.status) return False diff --git a/homeassistant/components/telegram/manifest.json b/homeassistant/components/telegram/manifest.json index 55700521cd5..6f661ba5741 100644 --- a/homeassistant/components/telegram/manifest.json +++ b/homeassistant/components/telegram/manifest.json @@ -2,7 +2,6 @@ "domain": "telegram", "name": "Telegram", "documentation": "https://www.home-assistant.io/integrations/telegram", - "requirements": [], "dependencies": ["telegram_bot"], "codeowners": [] } diff --git a/homeassistant/components/telegram/notify.py b/homeassistant/components/telegram/notify.py index ceb660d9e1d..673935d8283 100644 --- a/homeassistant/components/telegram/notify.py +++ b/homeassistant/components/telegram/notify.py @@ -62,14 +62,14 @@ class TelegramNotificationService(BaseNotificationService): # Send a photo, video, document, or location if data is not None and ATTR_PHOTO in data: - photos = data.get(ATTR_PHOTO, None) + photos = data.get(ATTR_PHOTO) photos = photos if isinstance(photos, list) else [photos] for photo_data in photos: service_data.update(photo_data) self.hass.services.call(DOMAIN, "send_photo", service_data=service_data) return if data is not None and ATTR_VIDEO in data: - videos = data.get(ATTR_VIDEO, None) + videos = data.get(ATTR_VIDEO) videos = videos if isinstance(videos, list) else [videos] for video_data in videos: service_data.update(video_data) diff --git a/homeassistant/components/telegram_bot/services.yaml b/homeassistant/components/telegram_bot/services.yaml index e3d303a2c52..8e42b25c0ca 100644 --- a/homeassistant/components/telegram_bot/services.yaml +++ b/homeassistant/components/telegram_bot/services.yaml @@ -8,13 +8,13 @@ send_message: example: The garage door has been open for 10 minutes. title: description: Optional title for your notification. Will be composed as '%title\n%message' - example: 'Your Garage Door Friend' + example: "Your Garage Door Friend" target: description: An array of pre-authorized chat_ids to send the notification to. If not present, first allowed chat_id is the default. - example: '[12345, 67890] or 12345' + example: "[12345, 67890] or 12345" parse_mode: description: "Parser for the message text: `html` or `markdown`." - example: 'html' + example: "html" disable_notification: description: Sends the message silently. iOS users and Web users will not receive a notification, Android users will receive a notification with no sound. example: true @@ -23,7 +23,7 @@ send_message: example: true timeout: description: Timeout for send message. Will help with timeout errors (poor internet connection, etc) - example: '1000' + example: "1000" keyboard: description: List of rows of commands, comma-separated, to make a custom keyboard. Empty list clears a previously set keyboard. example: '["/command1, /command2", "/command3"]' @@ -36,13 +36,13 @@ send_photo: fields: url: description: Remote path to an image. - example: 'http://example.org/path/to/the/image.png' + example: "http://example.org/path/to/the/image.png" file: description: Local path to an image. - example: '/path/to/the/image.png' + example: "/path/to/the/image.png" caption: description: The title of the image. - example: 'My image' + example: "My image" username: description: Username for a URL which require HTTP basic authentication. example: myuser @@ -51,7 +51,7 @@ send_photo: example: myuser_pwd target: description: An array of pre-authorized chat_ids to send the document to. If not present, first allowed chat_id is the default. - example: '[12345, 67890] or 12345' + example: "[12345, 67890] or 12345" disable_notification: description: Sends the message silently. iOS users and Web users will not receive a notification, Android users will receive a notification with no sound. example: true @@ -60,7 +60,7 @@ send_photo: example: false timeout: description: Timeout for send photo. Will help with timeout errors (poor internet connection, etc) - example: '1000' + example: "1000" keyboard: description: List of rows of commands, comma-separated, to make a custom keyboard. example: '["/command1, /command2", "/command3"]' @@ -73,10 +73,10 @@ send_sticker: fields: url: description: Remote path to an webp sticker. - example: 'http://example.org/path/to/the/sticker.webp' + example: "http://example.org/path/to/the/sticker.webp" file: description: Local path to an webp sticker. - example: '/path/to/the/sticker.webp' + example: "/path/to/the/sticker.webp" username: description: Username for a URL which require HTTP basic authentication. example: myuser @@ -85,7 +85,7 @@ send_sticker: example: myuser_pwd target: description: An array of pre-authorized chat_ids to send the document to. If not present, first allowed chat_id is the default. - example: '[12345, 67890] or 12345' + example: "[12345, 67890] or 12345" disable_notification: description: Sends the message silently. iOS users and Web users will not receive a notification, Android users will receive a notification with no sound. example: true @@ -94,7 +94,7 @@ send_sticker: example: false timeout: description: Timeout for send sticker. Will help with timeout errors (poor internet connection, etc) - example: '1000' + example: "1000" keyboard: description: List of rows of commands, comma-separated, to make a custom keyboard. example: '["/command1, /command2", "/command3"]' @@ -107,13 +107,13 @@ send_video: fields: url: description: Remote path to a video. - example: 'http://example.org/path/to/the/video.mp4' + example: "http://example.org/path/to/the/video.mp4" file: description: Local path to an image. - example: '/path/to/the/video.mp4' + example: "/path/to/the/video.mp4" caption: description: The title of the video. - example: 'My video' + example: "My video" username: description: Username for a URL which require HTTP basic authentication. example: myuser @@ -122,7 +122,7 @@ send_video: example: myuser_pwd target: description: An array of pre-authorized chat_ids to send the document to. If not present, first allowed chat_id is the default. - example: '[12345, 67890] or 12345' + example: "[12345, 67890] or 12345" disable_notification: description: Sends the message silently. iOS users and Web users will not receive a notification, Android users will receive a notification with no sound. example: true @@ -131,7 +131,7 @@ send_video: example: false timeout: description: Timeout for send video. Will help with timeout errors (poor internet connection, etc) - example: '1000' + example: "1000" keyboard: description: List of rows of commands, comma-separated, to make a custom keyboard. example: '["/command1, /command2", "/command3"]' @@ -144,10 +144,10 @@ send_document: fields: url: description: Remote path to a document. - example: 'http://example.org/path/to/the/document.odf' + example: "http://example.org/path/to/the/document.odf" file: description: Local path to a document. - example: '/tmp/whatever.odf' + example: "/tmp/whatever.odf" caption: description: The title of the document. example: Document Title xy @@ -159,7 +159,7 @@ send_document: example: myuser_pwd target: description: An array of pre-authorized chat_ids to send the document to. If not present, first allowed chat_id is the default. - example: '[12345, 67890] or 12345' + example: "[12345, 67890] or 12345" disable_notification: description: Sends the message silently. iOS users and Web users will not receive a notification, Android users will receive a notification with no sound. example: true @@ -168,7 +168,7 @@ send_document: example: false timeout: description: Timeout for send document. Will help with timeout errors (poor internet connection, etc) - example: '1000' + example: "1000" keyboard: description: List of rows of commands, comma-separated, to make a custom keyboard. example: '["/command1, /command2", "/command3"]' @@ -187,13 +187,13 @@ send_location: example: 38.123 target: description: An array of pre-authorized chat_ids to send the location to. If not present, first allowed chat_id is the default. - example: '[12345, 67890] or 12345' + example: "[12345, 67890] or 12345" disable_notification: description: Sends the message silently. iOS users and Web users will not receive a notification, Android users will receive a notification with no sound. example: true timeout: description: Timeout for send photo. Will help with timeout errors (poor internet connection, etc) - example: '1000' + example: "1000" keyboard: description: List of rows of commands, comma-separated, to make a custom keyboard. example: '["/command1, /command2", "/command3"]' @@ -206,7 +206,7 @@ edit_message: fields: message_id: description: id of the message to edit. - example: '{{ trigger.event.data.message.message_id }}' + example: "{{ trigger.event.data.message.message_id }}" chat_id: description: The chat_id where to edit the message. example: 12345 @@ -215,10 +215,10 @@ edit_message: example: The garage door has been open for 10 minutes. title: description: Optional title for your notification. Will be composed as '%title\n%message' - example: 'Your Garage Door Friend' + example: "Your Garage Door Friend" parse_mode: description: "Parser for the message text: `html` or `markdown`." - example: 'html' + example: "html" disable_web_page_preview: description: Disables link previews for links in the message. example: true @@ -231,7 +231,7 @@ edit_caption: fields: message_id: description: id of the message to edit. - example: '{{ trigger.event.data.message.message_id }}' + example: "{{ trigger.event.data.message.message_id }}" chat_id: description: The chat_id where to edit the caption. example: 12345 @@ -247,7 +247,7 @@ edit_replymarkup: fields: message_id: description: id of the message to edit. - example: '{{ trigger.event.data.message.message_id }}' + example: "{{ trigger.event.data.message.message_id }}" chat_id: description: The chat_id where to edit the reply_markup. example: 12345 @@ -263,17 +263,17 @@ answer_callback_query: example: "OK, I'm listening" callback_query_id: description: Unique id of the callback response. - example: '{{ trigger.event.data.id }}' + example: "{{ trigger.event.data.id }}" show_alert: description: Show a permanent notification. example: true delete_message: - description: Delete a previously sent message.

 + description: Delete a previously sent message. fields: message_id: description: id of the message to delete. - example: '{{ trigger.event.data.message.message_id }}'

 + example: "{{ trigger.event.data.message.message_id }}" chat_id: description: The chat_id where to delete the message. example: 12345 diff --git a/homeassistant/components/tellduslive/.translations/bg.json b/homeassistant/components/tellduslive/.translations/bg.json deleted file mode 100644 index 46ae4eba463..00000000000 --- a/homeassistant/components/tellduslive/.translations/bg.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f.", - "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" - }, - "error": { - "auth_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f\u0442\u0430. \u041c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e" - }, - "step": { - "auth": { - "description": "\u0417\u0430 \u0434\u0430 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 TelldusLive: \n 1. \u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u043f\u043e-\u0434\u043e\u043b\u0443 \n 2. \u0412\u043b\u0435\u0437\u0442\u0435 \u0432 Telldus Live \n 3. \u041e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 **{app_name}** (\u0449\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 **\u0414\u0430**). \n 4. \u0412\u044a\u0440\u043d\u0435\u0442\u0435 \u0441\u0435 \u0442\u0443\u043a \u0438 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 **\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435**. \n\n [\u0412\u0440\u044a\u0437\u043a\u0430 \u0441 TelldusLive \u043f\u0440\u043e\u0444\u0438\u043b]({auth_url})", - "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 TelldusLive" - }, - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441" - }, - "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043a\u0440\u0430\u0439\u043d\u0430 \u0442\u043e\u0447\u043a\u0430." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/ca.json b/homeassistant/components/tellduslive/.translations/ca.json deleted file mode 100644 index 6f337d9a4d3..00000000000 --- a/homeassistant/components/tellduslive/.translations/ca.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive ja est\u00e0 configurat", - "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.", - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "unknown": "S'ha produ\u00eft un error desconegut" - }, - "error": { - "auth_error": "Error d'autenticaci\u00f3, torna-ho a provar" - }, - "step": { - "auth": { - "description": "Per enlla\u00e7ar el teu compte de TelldusLive:\n 1. Clica l'enlla\u00e7 de sota.\n 2. Inicia sessi\u00f3 a Telldus Live.\n 3. Autoritza **{app_name}** (clica **Yes**).\n 4. Torna aqu\u00ed i clica **SUBMIT**.\n \n [Enlla\u00e7 al compte de TelldusLive]({auth_url})", - "title": "Autenticaci\u00f3 amb TelldusLive" - }, - "user": { - "data": { - "host": "Amfitri\u00f3" - }, - "description": "buit", - "title": "Selecci\u00f3 extrem" - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/da.json b/homeassistant/components/tellduslive/.translations/da.json deleted file mode 100644 index 895570c3698..00000000000 --- a/homeassistant/components/tellduslive/.translations/da.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive er allerede konfigureret", - "authorize_url_fail": "Ukendt fejl ved generering af en autoriseret url.", - "authorize_url_timeout": "Timeout ved generering af autoriseret url.", - "unknown": "Ukendt fejl opstod" - }, - "error": { - "auth_error": "Godkendelsesfejl, pr\u00f8v venligst igen" - }, - "step": { - "auth": { - "description": "For at forbinde din TelldusLive-konto:\n 1. Klik p\u00e5 linket herunder\n 2. Log p\u00e5 Telldus Live\n 3. Tillad **{app_name}** (klik **Ja**). \n 4. Vend tilbage hertil og klik **SUBMIT**.\n\n [Forbind TelldusLive konto]({auth_url})", - "title": "Godkendelse mod TelldusLive" - }, - "user": { - "data": { - "host": "V\u00e6rt" - }, - "description": "Tom", - "title": "V\u00e6lg slutpunkt." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/de.json b/homeassistant/components/tellduslive/.translations/de.json deleted file mode 100644 index c07ff528363..00000000000 --- a/homeassistant/components/tellduslive/.translations/de.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive ist bereits konfiguriert", - "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL", - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", - "unknown": "Unbekannter Fehler ist aufgetreten" - }, - "error": { - "auth_error": "Authentifizierungsfehler, bitte versuche es erneut" - }, - "step": { - "auth": { - "description": "So verkn\u00fcpfest du dein TelldusLive-Konto: \n 1. Klicke auf den Link unten \n 2. Melde dich bei Telldus Live an \n 3. Autorisiere ** {app_name} ** (klicke auf ** Yes **). \n 4. Komme hierher zur\u00fcck und klicke auf ** SUBMIT **. \n\n [Link TelldusLive-Konto]({auth_url})", - "title": "Authentifiziere dich gegen TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "description": "Leer", - "title": "Endpunkt ausw\u00e4hlen." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/en.json b/homeassistant/components/tellduslive/.translations/en.json deleted file mode 100644 index 4ed9ef597f4..00000000000 --- a/homeassistant/components/tellduslive/.translations/en.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive is already configured", - "authorize_url_fail": "Unknown error generating an authorize url.", - "authorize_url_timeout": "Timeout generating authorize url.", - "unknown": "Unknown error occurred" - }, - "error": { - "auth_error": "Authentication error, please try again" - }, - "step": { - "auth": { - "description": "To link your TelldusLive account:\n 1. Click the link below\n 2. Login to Telldus Live\n 3. Authorize **{app_name}** (click **Yes**).\n 4. Come back here and click **SUBMIT**.\n\n [Link TelldusLive account]({auth_url})", - "title": "Authenticate against TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "title": "Pick endpoint." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/es-419.json b/homeassistant/components/tellduslive/.translations/es-419.json deleted file mode 100644 index 1281784dceb..00000000000 --- a/homeassistant/components/tellduslive/.translations/es-419.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive ya est\u00e1 configurado", - "authorize_url_fail": "Error desconocido al generar una URL de autorizaci\u00f3n.", - "unknown": "Se produjo un error desconocido" - }, - "error": { - "auth_error": "Error de autenticaci\u00f3n, por favor intente de nuevo" - }, - "step": { - "auth": { - "description": "Para vincular su cuenta de TelldusLive: \n 1. Haga clic en el siguiente enlace \n 2. Inicia sesi\u00f3n en Telldus Live \n 3. Autorice ** {app_name} ** (haga clic en ** S\u00ed **). \n 4. Vuelve aqu\u00ed y haz clic en ** ENVIAR **. \n\n [Enlace a la cuenta de TelldusLive] ( {auth_url} )", - "title": "Autenticar con TelldusLive" - }, - "user": { - "data": { - "host": "Host" - } - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/es.json b/homeassistant/components/tellduslive/.translations/es.json deleted file mode 100644 index 0cee7ade0d7..00000000000 --- a/homeassistant/components/tellduslive/.translations/es.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive ya est\u00e1 configurado", - "authorize_url_fail": "Error desconocido generando la url de autorizaci\u00f3n", - "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n", - "unknown": "Se produjo un error desconocido" - }, - "error": { - "auth_error": "Error de autenticaci\u00f3n, por favor int\u00e9ntalo de nuevo" - }, - "step": { - "auth": { - "description": "Para vincular tu cuenta de Telldus Live:\n 1. Pulsa el siguiente enlace\n 2. Inicia sesi\u00f3n en Telldus Live\n 3. Autoriza **{app_name}** (pulsa en **Yes**).\n 4. Vuelve atr\u00e1s y pulsa **ENVIAR**.\n\n [Link TelldusLive account]({auth_url})", - "title": "Autenticaci\u00f3n contra TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "description": "Vac\u00edo", - "title": "Elige el punto final." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/fr.json b/homeassistant/components/tellduslive/.translations/fr.json deleted file mode 100644 index 70f4ef6f1d9..00000000000 --- a/homeassistant/components/tellduslive/.translations/fr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive est d\u00e9j\u00e0 configur\u00e9", - "authorize_url_fail": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'une URL d'autorisation.", - "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", - "unknown": "Une erreur inconnue s'est produite" - }, - "error": { - "auth_error": "Erreur d'authentification, veuillez r\u00e9essayer." - }, - "step": { - "auth": { - "description": "Pour lier votre compte TelldusLive: \n 1. Cliquez sur le lien ci-dessous \n 2. Connectez-vous \u00e0 Telldus Live \n 3. Autorisez ** {app_name} ** (cliquez sur ** Oui **). \n 4. Revenez ici et cliquez sur ** ENVOYER **. \n\n [Lien compte TelldusLive] ( {auth_url} )", - "title": "S\u2019authentifier sur TelldusLive" - }, - "user": { - "data": { - "host": "H\u00f4te" - }, - "description": "Vide", - "title": "Choisissez le point de terminaison." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/hu.json b/homeassistant/components/tellduslive/.translations/hu.json deleted file mode 100644 index 8519f02ef5b..00000000000 --- a/homeassistant/components/tellduslive/.translations/hu.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "A TelldusLive m\u00e1r be van \u00e1ll\u00edtva", - "authorize_url_fail": "Ismeretlen hiba t\u00f6rt\u00e9nt a hiteles\u00edt\u00e9si link gener\u00e1l\u00e1sa sor\u00e1n.", - "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n.", - "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt" - }, - "error": { - "auth_error": "Hiteles\u00edt\u00e9si hiba, pr\u00f3b\u00e1lkozz \u00fajra" - }, - "step": { - "user": { - "data": { - "host": "Hoszt" - }, - "description": "\u00dcres", - "title": "V\u00e1lassz v\u00e9gpontot." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/it.json b/homeassistant/components/tellduslive/.translations/it.json deleted file mode 100644 index ce152285e75..00000000000 --- a/homeassistant/components/tellduslive/.translations/it.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive \u00e8 gi\u00e0 configurato", - "authorize_url_fail": "Errore sconosciuto nel generare l'url di autorizzazione", - "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", - "unknown": "Si \u00e8 verificato un errore sconosciuto." - }, - "error": { - "auth_error": "Errore di autenticazione, riprovare" - }, - "step": { - "auth": { - "description": "Per collegare il tuo account TelldusLive:\n 1. Clicca sul link sottostante\n 2. Accedi a Telldus Live\n 3. Autorizzare **{app_name}**** (cliccare **S\u00ec**).\n 4. Torna qui e clicca su **SUBMIT**.\n\n [Collega account TelldusLive]({auth_url})", - "title": "Autenticati con TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "description": "Vuoto", - "title": "Scegli l'endpoint." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/ko.json b/homeassistant/components/tellduslive/.translations/ko.json deleted file mode 100644 index 10e289f2520..00000000000 --- a/homeassistant/components/tellduslive/.translations/ko.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\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.", - "unknown": "\uc54c \uc218\uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" - }, - "error": { - "auth_error": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." - }, - "step": { - "auth": { - "description": "TelldusLive \uacc4\uc815\uc744 \uc5f0\uacb0\ud558\ub824\uba74:\n 1. \ud558\ub2e8\uc758 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud574\uc8fc\uc138\uc694\n 2. Telldus Live \uc5d0 \ub85c\uadf8\uc778 \ud558\uc138\uc694\n 3. Authorize **{app_name}** (**Yes** \ub97c \ud074\ub9ad\ud558\uc138\uc694).\n 4. \ub2e4\uc2dc \uc5ec\uae30\ub85c \ub3cc\uc544\uc640\uc11c **SUBMIT** \uc744 \ud074\ub9ad\ud558\uc138\uc694.\n\n [TelldusLive \uacc4\uc815 \uc5f0\uacb0\ud558\uae30]({auth_url})", - "title": "TelldusLive \uc778\uc99d" - }, - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8" - }, - "description": "\uc8c4\uc1a1\ud569\ub2c8\ub2e4. \uad00\ub828 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0 \ubc18\uc601\ub420 \uc608\uc815\uc774\ub2c8 \uc870\uae08\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694.", - "title": "\uc5d4\ub4dc\ud3ec\uc778\ud2b8 \uc120\ud0dd" - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/lb.json b/homeassistant/components/tellduslive/.translations/lb.json deleted file mode 100644 index a01436f9ba8..00000000000 --- a/homeassistant/components/tellduslive/.translations/lb.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive ass scho konfigur\u00e9iert", - "authorize_url_fail": "Onbekannte Feeler beim gener\u00e9ieren vun der Autorisatiouns URL.", - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "unknown": "Onbekannten Feeler opgetrueden" - }, - "error": { - "auth_error": "Feeler bei der Authentifikatioun, prob\u00e9iert w.e.g. nach emol" - }, - "step": { - "auth": { - "description": "Fir den TelldusLive Kont ze verbannen:\n1. Klickt op de Link \u00ebnnen\n2. Verbannt iech mat TelldusLive\n3. Autoris\u00e9iert **{app_name}** (klickt **Yes**)\n4. Kommt heihinner zer\u00e9ck a klickt **Ofsch\u00e9cken**\n\n[Tellduslive Kont verbannen]({auth_url})", - "title": "Mat TelldusLive authentifiz\u00e9ieren" - }, - "user": { - "data": { - "host": "Apparat" - }, - "description": "Eidel", - "title": "Endpoint auswielen" - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/nl.json b/homeassistant/components/tellduslive/.translations/nl.json deleted file mode 100644 index fac9475f6f3..00000000000 --- a/homeassistant/components/tellduslive/.translations/nl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive is al geconfigureerd", - "authorize_url_fail": "Onbekende fout bij het genereren van een autorisatie url.", - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "unknown": "Onbekende fout opgetreden" - }, - "error": { - "auth_error": "Authenticatiefout, probeer het opnieuw." - }, - "step": { - "auth": { - "description": "Om uw TelldusLive-account te linken: \n 1. Klik op de onderstaande link \n 2. Log in op Telldus Live \n 3. Autoriseer ** {app_name} ** (klik op ** Ja **). \n 4. Kom hier terug en klik op ** VERSTUREN **. \n\n [Link TelldusLive account]({auth_url})", - "title": "Verifi\u00ebren tegen TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "description": "Leeg", - "title": "Kies eindpunt." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/nn.json b/homeassistant/components/tellduslive/.translations/nn.json deleted file mode 100644 index 934f56a420b..00000000000 --- a/homeassistant/components/tellduslive/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/no.json b/homeassistant/components/tellduslive/.translations/no.json deleted file mode 100644 index 3977bde4a3c..00000000000 --- a/homeassistant/components/tellduslive/.translations/no.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive er allerede konfigurert", - "authorize_url_fail": "Ukjent feil ved generering av autoriseringsadresse.", - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "unknown": "Ukjent feil oppstod" - }, - "error": { - "auth_error": "Autentiseringsfeil, vennligst pr\u00f8v igjen" - }, - "step": { - "auth": { - "description": "For \u00e5 koble TelldusLive-kontoen din:\n 1. Klikk p\u00e5 linken under\n 2. Logg inn p\u00e5 Telldus Live \n 3. Tillat **{app_name}** (klikk**Ja**). \n 4. Kom tilbake hit og klikk **SUBMIT**. \n\n [Link TelldusLive-konto]({auth_url})", - "title": "Godkjenn mot TelldusLive" - }, - "user": { - "data": { - "host": "Vert" - }, - "description": "Tom", - "title": "Velg endepunkt." - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/pl.json b/homeassistant/components/tellduslive/.translations/pl.json deleted file mode 100644 index 68e53df57f1..00000000000 --- a/homeassistant/components/tellduslive/.translations/pl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive jest ju\u017c skonfigurowany.", - "authorize_url_fail": "Nieznany b\u0142\u0105d podczas generowania url autoryzacji.", - "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", - "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d" - }, - "error": { - "auth_error": "B\u0142\u0105d uwierzytelniania, spr\u00f3buj ponownie" - }, - "step": { - "auth": { - "description": "Aby po\u0142\u0105czy\u0107 konto TelldusLive: \n 1. Kliknij poni\u017cszy link \n 2. Zaloguj si\u0119 do Telldus Live \n 3. Autoryzuj **{app_name}** (kliknij **Tak**). \n 4. Wr\u00f3\u0107 tutaj i kliknij **SUBMIT**. \n\n [Link do konta TelldusLive]({auth_url})", - "title": "Uwierzytelnienie na TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "description": "Puste", - "title": "Wybierz punkt ko\u0144cowy." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/pt-BR.json b/homeassistant/components/tellduslive/.translations/pt-BR.json deleted file mode 100644 index 2183b9068b8..00000000000 --- a/homeassistant/components/tellduslive/.translations/pt-BR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive j\u00e1 est\u00e1 configurado", - "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", - "authorize_url_timeout": "Tempo limite de gera\u00e7\u00e3o de url de autoriza\u00e7\u00e3o.", - "unknown": "Ocorreu um erro desconhecido" - }, - "error": { - "auth_error": "Erro de autentica\u00e7\u00e3o, por favor, tente novamente" - }, - "step": { - "auth": { - "description": "Para vincular sua conta do TelldusLive: \n 1. Clique no link abaixo \n 2. Fa\u00e7a o login no Telldus Live \n 3. Autorize **{app_name}** (clique em **Sim**). \n 4. Volte aqui e clique em **ENVIAR**. \n\n [Vincular conta TelldusLive]({auth_url})", - "title": "Autenticar no TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "description": "Vazio", - "title": "Escolha o ponto final." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/pt.json b/homeassistant/components/tellduslive/.translations/pt.json deleted file mode 100644 index 9f8134ed07d..00000000000 --- a/homeassistant/components/tellduslive/.translations/pt.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive j\u00e1 est\u00e1 configurado", - "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", - "authorize_url_timeout": "Limite temporal ultrapassado ao gerar um URL de autoriza\u00e7\u00e3o.", - "unknown": "Ocorreu um erro desconhecido" - }, - "error": { - "auth_error": "Erro de autentica\u00e7\u00e3o, por favor tente novamente" - }, - "step": { - "auth": { - "description": "Para ligar \u00e0 sua conta do TelldusLive: \n 1. Clique no link abaixo \n 2. Fa\u00e7a o login no Telldus Live \n 3. Autorize **{app_name}** (clique em **Sim**). \n 4. Volte aqui e clique em **ENVIAR**. \n\n [Ligar \u00e0 TelldusLive] ( {auth_url} )", - "title": "Autenticar no TelldusLive" - }, - "user": { - "data": { - "host": "Servidor" - }, - "description": "Vazio", - "title": "Escolher endpoint." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/ru.json b/homeassistant/components/tellduslive/.translations/ru.json deleted file mode 100644 index fa5b7e2d319..00000000000 --- a/homeassistant/components/tellduslive/.translations/ru.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "error": { - "auth_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443." - }, - "step": { - "auth": { - "description": "\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Telldus Live:\n 1. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0436\u0435\n 2. \u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 Telldus Live\n 3. Authorize **{app_name}** (\u043d\u0430\u0436\u043c\u0438\u0442\u0435 **Yes**).\n 4. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**.\n\n [\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 Telldus Live]({auth_url})", - "title": "Telldus Live" - }, - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442" - }, - "description": "\u043f\u0443\u0441\u0442\u043e", - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/sl.json b/homeassistant/components/tellduslive/.translations/sl.json deleted file mode 100644 index 7e0a8d28b9a..00000000000 --- a/homeassistant/components/tellduslive/.translations/sl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive je \u017ee konfiguriran", - "authorize_url_fail": "Neznana napaka pri generiranju potrditvenega URL-ja.", - "authorize_url_timeout": "\u010casovna omejitev za generiranje URL-ja je potekla.", - "unknown": "Pri\u0161lo je do neznane napake" - }, - "error": { - "auth_error": "Napaka pri preverjanju pristnosti, poskusite znova" - }, - "step": { - "auth": { - "description": "\u010ce \u017eelite povezati svoj ra\u010dun TelldusLive: \n 1. Kliknite spodnjo povezavo \n 2. Prijavite se v Telldus Live \n 3. Dovolite ** {app_name} ** (kliknite ** Da **). \n 4. Pridi nazaj in kliknite ** SUBMIT **. \n\n [Link TelldusLive ra\u010dun] ( {auth_url} )", - "title": "Preverjanje pristnosti za TelldusLive" - }, - "user": { - "data": { - "host": "Gostitelj" - }, - "description": "Prazno", - "title": "Izberite kon\u010dno to\u010dko." - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/sv.json b/homeassistant/components/tellduslive/.translations/sv.json deleted file mode 100644 index 809132e01b0..00000000000 --- a/homeassistant/components/tellduslive/.translations/sv.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Telldus Live! \u00e4r redan konfigurerad", - "authorize_url_fail": "Ok\u00e4nt fel n\u00e4r genererar en url f\u00f6r att auktorisera.", - "authorize_url_timeout": "Timeout n\u00e4r genererar auktorisera url.", - "unknown": "Ok\u00e4nt fel intr\u00e4ffade" - }, - "error": { - "auth_error": "Autentiseringsfel, v\u00e4nligen f\u00f6rs\u00f6k igen" - }, - "step": { - "auth": { - "description": "F\u00f6r att l\u00e4nka ditt \"Telldus Live!\" konto: \n 1. Klicka p\u00e5 l\u00e4nken nedan \n 2. Logga in p\u00e5 Telldus Live!\n 3. Godk\u00e4nn **{app_name}** (klicka **Yes**). \n 4. Kom tillbaka hit och klicka p\u00e5 **SUBMIT**. \n\n [L\u00e4nk till Telldus Live konto]({auth_url})", - "title": "Autentisera mot Telldus Live!" - }, - "user": { - "data": { - "host": "V\u00e4rddatorn" - }, - "description": "?", - "title": "V\u00e4lj endpoint." - } - }, - "title": "Telldus Live!" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/zh-Hans.json b/homeassistant/components/tellduslive/.translations/zh-Hans.json deleted file mode 100644 index 657722f7f13..00000000000 --- a/homeassistant/components/tellduslive/.translations/zh-Hans.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive \u5df2\u914d\u7f6e\u5b8c\u6210", - "authorize_url_fail": "\u751f\u6210\u6388\u6743\u7f51\u5740\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002", - "authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002", - "unknown": "\u53d1\u751f\u672a\u77e5\u7684\u9519\u8bef" - }, - "error": { - "auth_error": "\u53cc\u91cd\u8ba4\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\u3002" - }, - "step": { - "auth": { - "description": "\u8981\u94fe\u63a5\u60a8\u7684TelldusLive\u8d26\u6237\uff1a \n 1. \u70b9\u51fb\u4e0b\u9762\u7684\u94fe\u63a5\n 2. \u767b\u5f55 Telldus Live \n 3. \u6388\u6743 **{app_name}** (\u70b9\u51fb **\u662f**)\u3002 \n 4. \u8fd4\u56de\u6b64\u9875\uff0c\u7136\u540e\u70b9\u51fb**\u63d0\u4ea4**\u3002 \n\n [\u94fe\u63a5 TelldusLive \u8d26\u6237]({auth_url})", - "title": "\u4f7f\u7528 TelldusLive \u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1" - }, - "user": { - "data": { - "host": "\u4e3b\u673a" - }, - "description": "\u7a7a", - "title": "\u9009\u62e9 endpoint\u3002" - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/zh-Hant.json b/homeassistant/components/tellduslive/.translations/zh-Hant.json deleted file mode 100644 index 23093d247ee..00000000000 --- a/homeassistant/components/tellduslive/.translations/zh-Hant.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "TelldusLive \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "authorize_url_fail": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4", - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", - "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "error": { - "auth_error": "\u8a8d\u8b49\u932f\u8aa4\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" - }, - "step": { - "auth": { - "description": "\u6b32\u9023\u7d50 TelldusLive \u5e33\u865f\uff1a\n 1. \u9ede\u9078\u4e0b\u65b9\u9023\u7d50\n 2. \u767b\u5165\u81f3 Telldus Live\n 3. \u5c0d **{app_name}** \u9032\u884c\u6388\u6b0a\uff08\u9ede\u9078 **Yes**\uff09\u3002\n 4. \u56de\u5230\u672c\u9801\u9762\u4e26\u9ede\u9078 **\u50b3\u9001**\u3002\n\n [Link TelldusLive account]({auth_url})", - "title": "TelldusLive \u8a8d\u8b49" - }, - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef" - }, - "description": "\u7a7a\u767d", - "title": "\u9078\u64c7\u7aef\u9ede\u3002" - } - }, - "title": "Telldus Live" - } -} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/binary_sensor.py b/homeassistant/components/tellduslive/binary_sensor.py index ef1cd52f75b..09541a120fd 100644 --- a/homeassistant/components/tellduslive/binary_sensor.py +++ b/homeassistant/components/tellduslive/binary_sensor.py @@ -10,15 +10,6 @@ from .entry import TelldusLiveEntity _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up TelldusLive. - - Can only be called when a user accidentally mentions the platform in their - config. But even in that case it would have been ignored. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up tellduslive sensors dynamically.""" diff --git a/homeassistant/components/tellduslive/cover.py b/homeassistant/components/tellduslive/cover.py index 230f89b0531..6e31cd595bf 100644 --- a/homeassistant/components/tellduslive/cover.py +++ b/homeassistant/components/tellduslive/cover.py @@ -10,15 +10,6 @@ from .entry import TelldusLiveEntity _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up TelldusLive. - - Can only be called when a user accidentally mentions the platform in their - config. But even in that case it would have been ignored. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up tellduslive sensors dynamically.""" diff --git a/homeassistant/components/tellduslive/entry.py b/homeassistant/components/tellduslive/entry.py index 50a219bf7a1..851823385dc 100644 --- a/homeassistant/components/tellduslive/entry.py +++ b/homeassistant/components/tellduslive/entry.py @@ -43,7 +43,7 @@ class TelldusLiveEntity(Entity): """Return the property of the device might have changed.""" if self.device.name: self._name = self.device.name - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def device_id(self): diff --git a/homeassistant/components/tellduslive/light.py b/homeassistant/components/tellduslive/light.py index c4921e3855e..3087c4cdf08 100644 --- a/homeassistant/components/tellduslive/light.py +++ b/homeassistant/components/tellduslive/light.py @@ -10,15 +10,6 @@ from .entry import TelldusLiveEntity _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up TelldusLive. - - Can only be called when a user accidentally mentions the platform in their - config. But even in that case it would have been ignored. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up tellduslive sensors dynamically.""" diff --git a/homeassistant/components/tellduslive/manifest.json b/homeassistant/components/tellduslive/manifest.json index fda47109146..55149369427 100644 --- a/homeassistant/components/tellduslive/manifest.json +++ b/homeassistant/components/tellduslive/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tellduslive", "requirements": ["tellduslive==0.10.10"], - "dependencies": [], "codeowners": ["@fredrike"], "quality_scale": "gold" } diff --git a/homeassistant/components/tellduslive/sensor.py b/homeassistant/components/tellduslive/sensor.py index 11411e1d6ea..2e36f8f3ac2 100644 --- a/homeassistant/components/tellduslive/sensor.py +++ b/homeassistant/components/tellduslive/sensor.py @@ -11,6 +11,7 @@ from homeassistant.const import ( TEMP_CELSIUS, TIME_HOURS, UNIT_PERCENTAGE, + UV_INDEX, ) from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -44,7 +45,7 @@ SENSOR_TYPES = { SENSOR_TYPE_WINDDIRECTION: ["Wind direction", "", "", None], SENSOR_TYPE_WINDAVERAGE: ["Wind average", SPEED_METERS_PER_SECOND, "", None], SENSOR_TYPE_WINDGUST: ["Wind gust", SPEED_METERS_PER_SECOND, "", None], - SENSOR_TYPE_UV: ["UV", "UV", "", None], + SENSOR_TYPE_UV: ["UV", UV_INDEX, "", None], SENSOR_TYPE_WATT: ["Power", POWER_WATT, "", None], SENSOR_TYPE_LUMINANCE: ["Luminance", "lx", None, DEVICE_CLASS_ILLUMINANCE], SENSOR_TYPE_DEW_POINT: ["Dew Point", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE], @@ -52,15 +53,6 @@ SENSOR_TYPES = { } -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up TelldusLive. - - Can only be called when a user accidentally mentions the platform in their - config. But even in that case it would have been ignored. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up tellduslive sensors dynamically.""" diff --git a/homeassistant/components/tellduslive/strings.json b/homeassistant/components/tellduslive/strings.json index bb62889085b..d94b8965ce8 100644 --- a/homeassistant/components/tellduslive/strings.json +++ b/homeassistant/components/tellduslive/strings.json @@ -1,26 +1,18 @@ { "config": { - "abort": { - "already_setup": "TelldusLive is already configured", - "authorize_url_fail": "Unknown error generating an authorize url.", - "authorize_url_timeout": "Timeout generating authorize url.", - "unknown": "Unknown error occurred" + "abort": { + "already_setup": "TelldusLive is already configured", + "authorize_url_fail": "Unknown error generating an authorize url.", + "authorize_url_timeout": "Timeout generating authorize url.", + "unknown": "Unknown error occurred" + }, + "error": { "auth_error": "Authentication error, please try again" }, + "step": { + "auth": { + "description": "To link your TelldusLive account:\n 1. Click the link below\n 2. Login to Telldus Live\n 3. Authorize **{app_name}** (click **Yes**).\n 4. Come back here and click **SUBMIT**.\n\n [Link TelldusLive account]({auth_url})", + "title": "Authenticate against TelldusLive" }, - "error": { - "auth_error": "Authentication error, please try again" - }, - "step": { - "auth": { - "description": "To link your TelldusLive account:\n 1. Click the link below\n 2. Login to Telldus Live\n 3. Authorize **{app_name}** (click **Yes**).\n 4. Come back here and click **SUBMIT**.\n\n [Link TelldusLive account]({auth_url})", - "title": "Authenticate against TelldusLive" - }, - "user": { - "data": { - "host": "Host" - }, - "title": "Pick endpoint." - } - }, - "title": "Telldus Live" + "user": { "data": { "host": "Host" }, "title": "Pick endpoint." } + } } -} \ No newline at end of file +} diff --git a/homeassistant/components/tellduslive/switch.py b/homeassistant/components/tellduslive/switch.py index 20c5fba7f9f..05a3c166213 100644 --- a/homeassistant/components/tellduslive/switch.py +++ b/homeassistant/components/tellduslive/switch.py @@ -10,15 +10,6 @@ from .entry import TelldusLiveEntity _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Old way of setting up TelldusLive. - - Can only be called when a user accidentally mentions the platform in their - config. But even in that case it would have been ignored. - """ - pass - - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up tellduslive sensors dynamically.""" diff --git a/homeassistant/components/tellduslive/translations/bg.json b/homeassistant/components/tellduslive/translations/bg.json new file mode 100644 index 00000000000..eef994a608e --- /dev/null +++ b/homeassistant/components/tellduslive/translations/bg.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f.", + "authorize_url_timeout": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430 \u043e\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0441\u0440\u043e\u043a.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430" + }, + "error": { + "auth_error": "\u0413\u0440\u0435\u0448\u043a\u0430 \u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f\u0442\u0430. \u041c\u043e\u043b\u044f, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e" + }, + "step": { + "auth": { + "description": "\u0417\u0430 \u0434\u0430 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0441\u0438 \u0432 TelldusLive: \n 1. \u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u043f\u043e-\u0434\u043e\u043b\u0443 \n 2. \u0412\u043b\u0435\u0437\u0442\u0435 \u0432 Telldus Live \n 3. \u041e\u0442\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 **{app_name}** (\u0449\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 **\u0414\u0430**). \n 4. \u0412\u044a\u0440\u043d\u0435\u0442\u0435 \u0441\u0435 \u0442\u0443\u043a \u0438 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 **\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435**. \n\n [\u0412\u0440\u044a\u0437\u043a\u0430 \u0441 TelldusLive \u043f\u0440\u043e\u0444\u0438\u043b]({auth_url})", + "title": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 TelldusLive" + }, + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441" + }, + "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043a\u0440\u0430\u0439\u043d\u0430 \u0442\u043e\u0447\u043a\u0430." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/ca.json b/homeassistant/components/tellduslive/translations/ca.json new file mode 100644 index 00000000000..7a467844c75 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/ca.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive ja est\u00e0 configurat", + "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.", + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "unknown": "S'ha produ\u00eft un error desconegut" + }, + "error": { + "auth_error": "Error d'autenticaci\u00f3, torna-ho a provar" + }, + "step": { + "auth": { + "description": "Per enlla\u00e7ar el teu compte de TelldusLive:\n 1. Clica l'enlla\u00e7 de sota.\n 2. Inicia sessi\u00f3 a Telldus Live.\n 3. Autoritza **{app_name}** (clica **Yes**).\n 4. Torna aqu\u00ed i clica **SUBMIT**.\n \n [Enlla\u00e7 al compte de TelldusLive]({auth_url})", + "title": "Autenticaci\u00f3 amb TelldusLive" + }, + "user": { + "data": { + "host": "Amfitri\u00f3" + }, + "description": "buit", + "title": "Selecci\u00f3 extrem" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/.translations/cs.json b/homeassistant/components/tellduslive/translations/cs.json similarity index 100% rename from homeassistant/components/tellduslive/.translations/cs.json rename to homeassistant/components/tellduslive/translations/cs.json diff --git a/homeassistant/components/tellduslive/translations/da.json b/homeassistant/components/tellduslive/translations/da.json new file mode 100644 index 00000000000..2ceb78b6bd0 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/da.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive er allerede konfigureret", + "authorize_url_fail": "Ukendt fejl ved generering af en autoriseret url.", + "authorize_url_timeout": "Timeout ved generering af autoriseret url.", + "unknown": "Ukendt fejl opstod" + }, + "error": { + "auth_error": "Godkendelsesfejl, pr\u00f8v venligst igen" + }, + "step": { + "auth": { + "description": "For at forbinde din TelldusLive-konto:\n 1. Klik p\u00e5 linket herunder\n 2. Log p\u00e5 Telldus Live\n 3. Tillad **{app_name}** (klik **Ja**). \n 4. Vend tilbage hertil og klik **SUBMIT**.\n\n [Forbind TelldusLive konto]({auth_url})", + "title": "Godkendelse mod TelldusLive" + }, + "user": { + "data": { + "host": "V\u00e6rt" + }, + "description": "Tom", + "title": "V\u00e6lg slutpunkt." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/de.json b/homeassistant/components/tellduslive/translations/de.json new file mode 100644 index 00000000000..7d2ab21d81f --- /dev/null +++ b/homeassistant/components/tellduslive/translations/de.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive ist bereits konfiguriert", + "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL", + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL.", + "unknown": "Unbekannter Fehler ist aufgetreten" + }, + "error": { + "auth_error": "Authentifizierungsfehler, bitte versuche es erneut" + }, + "step": { + "auth": { + "description": "So verkn\u00fcpfest du dein TelldusLive-Konto: \n 1. Klicke auf den Link unten \n 2. Melde dich bei Telldus Live an \n 3. Autorisiere ** {app_name} ** (klicke auf ** Yes **). \n 4. Komme hierher zur\u00fcck und klicke auf ** SUBMIT **. \n\n [Link TelldusLive-Konto]({auth_url})", + "title": "Authentifiziere dich gegen TelldusLive" + }, + "user": { + "data": { + "host": "Host" + }, + "description": "Leer", + "title": "Endpunkt ausw\u00e4hlen." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/en.json b/homeassistant/components/tellduslive/translations/en.json new file mode 100644 index 00000000000..fb7a76de106 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/en.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive is already configured", + "authorize_url_fail": "Unknown error generating an authorize url.", + "authorize_url_timeout": "Timeout generating authorize url.", + "unknown": "Unknown error occurred" + }, + "error": { + "auth_error": "Authentication error, please try again" + }, + "step": { + "auth": { + "description": "To link your TelldusLive account:\n 1. Click the link below\n 2. Login to Telldus Live\n 3. Authorize **{app_name}** (click **Yes**).\n 4. Come back here and click **SUBMIT**.\n\n [Link TelldusLive account]({auth_url})", + "title": "Authenticate against TelldusLive" + }, + "user": { + "data": { + "host": "Host" + }, + "title": "Pick endpoint." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/es-419.json b/homeassistant/components/tellduslive/translations/es-419.json new file mode 100644 index 00000000000..36b358192be --- /dev/null +++ b/homeassistant/components/tellduslive/translations/es-419.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive ya est\u00e1 configurado", + "authorize_url_fail": "Error desconocido al generar una URL de autorizaci\u00f3n.", + "unknown": "Se produjo un error desconocido" + }, + "error": { + "auth_error": "Error de autenticaci\u00f3n, por favor intente de nuevo" + }, + "step": { + "auth": { + "description": "Para vincular su cuenta de TelldusLive: \n 1. Haga clic en el siguiente enlace \n 2. Inicia sesi\u00f3n en Telldus Live \n 3. Autorice ** {app_name} ** (haga clic en ** S\u00ed **). \n 4. Vuelve aqu\u00ed y haz clic en ** ENVIAR **. \n\n [Enlace a la cuenta de TelldusLive] ( {auth_url} )", + "title": "Autenticar con TelldusLive" + }, + "user": { + "data": { + "host": "Host" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/es.json b/homeassistant/components/tellduslive/translations/es.json new file mode 100644 index 00000000000..37b1c15f896 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/es.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive ya est\u00e1 configurado", + "authorize_url_fail": "Error desconocido generando la url de autorizaci\u00f3n", + "authorize_url_timeout": "Tiempo de espera agotado generando la url de autorizaci\u00f3n", + "unknown": "Se produjo un error desconocido" + }, + "error": { + "auth_error": "Error de autenticaci\u00f3n, por favor int\u00e9ntalo de nuevo" + }, + "step": { + "auth": { + "description": "Para vincular tu cuenta de Telldus Live:\n 1. Pulsa el siguiente enlace\n 2. Inicia sesi\u00f3n en Telldus Live\n 3. Autoriza **{app_name}** (pulsa en **Yes**).\n 4. Vuelve atr\u00e1s y pulsa **ENVIAR**.\n\n [Link TelldusLive account]({auth_url})", + "title": "Autenticaci\u00f3n contra TelldusLive" + }, + "user": { + "data": { + "host": "Host" + }, + "description": "Vac\u00edo", + "title": "Elige el punto final." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/fr.json b/homeassistant/components/tellduslive/translations/fr.json new file mode 100644 index 00000000000..236f682184a --- /dev/null +++ b/homeassistant/components/tellduslive/translations/fr.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive est d\u00e9j\u00e0 configur\u00e9", + "authorize_url_fail": "Erreur inconnue lors de la g\u00e9n\u00e9ration d'une URL d'autorisation.", + "authorize_url_timeout": "D\u00e9lai de g\u00e9n\u00e9ration de l'URL d'authentification d\u00e9pass\u00e9.", + "unknown": "Une erreur inconnue s'est produite" + }, + "error": { + "auth_error": "Erreur d'authentification, veuillez r\u00e9essayer." + }, + "step": { + "auth": { + "description": "Pour lier votre compte TelldusLive: \n 1. Cliquez sur le lien ci-dessous \n 2. Connectez-vous \u00e0 Telldus Live \n 3. Autorisez ** {app_name} ** (cliquez sur ** Oui **). \n 4. Revenez ici et cliquez sur ** ENVOYER **. \n\n [Lien compte TelldusLive] ( {auth_url} )", + "title": "S\u2019authentifier sur TelldusLive" + }, + "user": { + "data": { + "host": "H\u00f4te" + }, + "description": "Vide", + "title": "Choisissez le point de terminaison." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/hu.json b/homeassistant/components/tellduslive/translations/hu.json new file mode 100644 index 00000000000..ace432f6a3f --- /dev/null +++ b/homeassistant/components/tellduslive/translations/hu.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_setup": "A TelldusLive m\u00e1r be van \u00e1ll\u00edtva", + "authorize_url_fail": "Ismeretlen hiba t\u00f6rt\u00e9nt a hiteles\u00edt\u00e9si link gener\u00e1l\u00e1sa sor\u00e1n.", + "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n.", + "unknown": "Ismeretlen hiba t\u00f6rt\u00e9nt" + }, + "error": { + "auth_error": "Hiteles\u00edt\u00e9si hiba, pr\u00f3b\u00e1lkozz \u00fajra" + }, + "step": { + "user": { + "data": { + "host": "Hoszt" + }, + "description": "\u00dcres", + "title": "V\u00e1lassz v\u00e9gpontot." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/it.json b/homeassistant/components/tellduslive/translations/it.json new file mode 100644 index 00000000000..7776c23dbaa --- /dev/null +++ b/homeassistant/components/tellduslive/translations/it.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive \u00e8 gi\u00e0 configurato", + "authorize_url_fail": "Errore sconosciuto nel generare l'url di autorizzazione", + "authorize_url_timeout": "Tempo scaduto nel generare l'url di autorizzazione", + "unknown": "Si \u00e8 verificato un errore sconosciuto." + }, + "error": { + "auth_error": "Errore di autenticazione, riprovare" + }, + "step": { + "auth": { + "description": "Per collegare il tuo account TelldusLive:\n 1. Clicca sul link sottostante\n 2. Accedi a Telldus Live\n 3. Autorizzare **{app_name}**** (cliccare **S\u00ec**).\n 4. Torna qui e clicca su **SUBMIT**.\n\n [Collega account TelldusLive]({auth_url})", + "title": "Autenticati con TelldusLive" + }, + "user": { + "data": { + "host": "Host" + }, + "description": "Vuoto", + "title": "Scegli l'endpoint." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/ko.json b/homeassistant/components/tellduslive/translations/ko.json new file mode 100644 index 00000000000..7851f9d64bf --- /dev/null +++ b/homeassistant/components/tellduslive/translations/ko.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\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.", + "unknown": "\uc54c \uc218\uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "error": { + "auth_error": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "step": { + "auth": { + "description": "TelldusLive \uacc4\uc815\uc744 \uc5f0\uacb0\ud558\ub824\uba74:\n 1. \ud558\ub2e8\uc758 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud574\uc8fc\uc138\uc694\n 2. Telldus Live \uc5d0 \ub85c\uadf8\uc778 \ud558\uc138\uc694\n 3. Authorize **{app_name}** (**Yes** \ub97c \ud074\ub9ad\ud558\uc138\uc694).\n 4. \ub2e4\uc2dc \uc5ec\uae30\ub85c \ub3cc\uc544\uc640\uc11c **SUBMIT** \uc744 \ud074\ub9ad\ud558\uc138\uc694.\n\n [TelldusLive \uacc4\uc815 \uc5f0\uacb0\ud558\uae30]({auth_url})", + "title": "TelldusLive \uc778\uc99d" + }, + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8" + }, + "description": "\uc8c4\uc1a1\ud569\ub2c8\ub2e4. \uad00\ub828 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc5c5\ub370\uc774\ud2b8 \ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4\uc5d0 \ubc18\uc601\ub420 \uc608\uc815\uc774\ub2c8 \uc870\uae08\ub9cc \uae30\ub2e4\ub824\uc8fc\uc138\uc694.", + "title": "\uc5d4\ub4dc\ud3ec\uc778\ud2b8 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/lb.json b/homeassistant/components/tellduslive/translations/lb.json new file mode 100644 index 00000000000..f9191fe7866 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/lb.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive ass scho konfigur\u00e9iert", + "authorize_url_fail": "Onbekannte Feeler beim gener\u00e9ieren vun der Autorisatiouns URL.", + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "unknown": "Onbekannten Feeler opgetrueden" + }, + "error": { + "auth_error": "Feeler bei der Authentifikatioun, prob\u00e9iert w.e.g. nach emol" + }, + "step": { + "auth": { + "description": "Fir den TelldusLive Kont ze verbannen:\n1. Klickt op de Link \u00ebnnen\n2. Verbannt iech mat TelldusLive\n3. Autoris\u00e9iert **{app_name}** (klickt **Yes**)\n4. Kommt heihinner zer\u00e9ck a klickt **Ofsch\u00e9cken**\n\n[Tellduslive Kont verbannen]({auth_url})", + "title": "Mat TelldusLive authentifiz\u00e9ieren" + }, + "user": { + "data": { + "host": "Apparat" + }, + "description": "Eidel", + "title": "Endpoint auswielen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/nl.json b/homeassistant/components/tellduslive/translations/nl.json new file mode 100644 index 00000000000..d17637e7c2c --- /dev/null +++ b/homeassistant/components/tellduslive/translations/nl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive is al geconfigureerd", + "authorize_url_fail": "Onbekende fout bij het genereren van een autorisatie url.", + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "unknown": "Onbekende fout opgetreden" + }, + "error": { + "auth_error": "Authenticatiefout, probeer het opnieuw." + }, + "step": { + "auth": { + "description": "Om uw TelldusLive-account te linken: \n 1. Klik op de onderstaande link \n 2. Log in op Telldus Live \n 3. Autoriseer ** {app_name} ** (klik op ** Ja **). \n 4. Kom hier terug en klik op ** VERSTUREN **. \n\n [Link TelldusLive account]({auth_url})", + "title": "Verifi\u00ebren tegen TelldusLive" + }, + "user": { + "data": { + "host": "Host" + }, + "description": "Leeg", + "title": "Kies eindpunt." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/nn.json b/homeassistant/components/tellduslive/translations/nn.json new file mode 100644 index 00000000000..a98ce99c970 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Telldus Live" +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/no.json b/homeassistant/components/tellduslive/translations/no.json new file mode 100644 index 00000000000..9eb459e53e6 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/no.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive er allerede konfigurert", + "authorize_url_fail": "Ukjent feil ved generering av autoriseringsadresse.", + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "unknown": "Ukjent feil oppstod" + }, + "error": { + "auth_error": "Autentiseringsfeil, vennligst pr\u00f8v igjen" + }, + "step": { + "auth": { + "description": "For \u00e5 koble TelldusLive-kontoen din:\n 1. Klikk p\u00e5 linken under\n 2. Logg inn p\u00e5 Telldus Live \n 3. Tillat **{app_name}** (klikk**Ja**). \n 4. Kom tilbake hit og klikk **SUBMIT**. \n\n [Link TelldusLive-konto]({auth_url})", + "title": "Godkjenn mot TelldusLive" + }, + "user": { + "data": { + "host": "Vert" + }, + "description": "Tom", + "title": "Velg endepunkt." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/pl.json b/homeassistant/components/tellduslive/translations/pl.json new file mode 100644 index 00000000000..c07f9de7b3d --- /dev/null +++ b/homeassistant/components/tellduslive/translations/pl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive jest ju\u017c skonfigurowany.", + "authorize_url_fail": "Nieznany b\u0142\u0105d podczas generowania url autoryzacji.", + "authorize_url_timeout": "Przekroczono limit czasu generowania URL autoryzacji.", + "unknown": "Wyst\u0105pi\u0142 nieznany b\u0142\u0105d" + }, + "error": { + "auth_error": "B\u0142\u0105d uwierzytelniania, spr\u00f3buj ponownie" + }, + "step": { + "auth": { + "description": "Aby po\u0142\u0105czy\u0107 konto TelldusLive: \n 1. Kliknij poni\u017cszy link \n 2. Zaloguj si\u0119 do Telldus Live \n 3. Autoryzuj **{app_name}** (kliknij **Tak**). \n 4. Wr\u00f3\u0107 tutaj i kliknij **SUBMIT**. \n\n [Link do konta TelldusLive]({auth_url})", + "title": "Uwierzytelnienie na TelldusLive" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP" + }, + "description": "Puste", + "title": "Wybierz punkt ko\u0144cowy." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/pt-BR.json b/homeassistant/components/tellduslive/translations/pt-BR.json new file mode 100644 index 00000000000..a1114965a4b --- /dev/null +++ b/homeassistant/components/tellduslive/translations/pt-BR.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive j\u00e1 est\u00e1 configurado", + "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", + "authorize_url_timeout": "Tempo limite de gera\u00e7\u00e3o de url de autoriza\u00e7\u00e3o.", + "unknown": "Ocorreu um erro desconhecido" + }, + "error": { + "auth_error": "Erro de autentica\u00e7\u00e3o, por favor, tente novamente" + }, + "step": { + "auth": { + "description": "Para vincular sua conta do TelldusLive: \n 1. Clique no link abaixo \n 2. Fa\u00e7a o login no Telldus Live \n 3. Autorize **{app_name}** (clique em **Sim**). \n 4. Volte aqui e clique em **ENVIAR**. \n\n [Vincular conta TelldusLive]({auth_url})", + "title": "Autenticar no TelldusLive" + }, + "user": { + "data": { + "host": "Host" + }, + "description": "Vazio", + "title": "Escolha o ponto final." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/pt.json b/homeassistant/components/tellduslive/translations/pt.json new file mode 100644 index 00000000000..549fa406253 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/pt.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive j\u00e1 est\u00e1 configurado", + "authorize_url_fail": "Erro desconhecido ao gerar um URL de autoriza\u00e7\u00e3o.", + "authorize_url_timeout": "Limite temporal ultrapassado ao gerar um URL de autoriza\u00e7\u00e3o.", + "unknown": "Ocorreu um erro desconhecido" + }, + "error": { + "auth_error": "Erro de autentica\u00e7\u00e3o, por favor tente novamente" + }, + "step": { + "auth": { + "description": "Para ligar \u00e0 sua conta do TelldusLive: \n 1. Clique no link abaixo \n 2. Fa\u00e7a o login no Telldus Live \n 3. Autorize **{app_name}** (clique em **Sim**). \n 4. Volte aqui e clique em **ENVIAR**. \n\n [Ligar \u00e0 TelldusLive] ( {auth_url} )", + "title": "Autenticar no TelldusLive" + }, + "user": { + "data": { + "host": "Servidor" + }, + "description": "Vazio", + "title": "Escolher endpoint." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/ru.json b/homeassistant/components/tellduslive/translations/ru.json new file mode 100644 index 00000000000..2fb298f781c --- /dev/null +++ b/homeassistant/components/tellduslive/translations/ru.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "authorize_url_fail": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "error": { + "auth_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443." + }, + "step": { + "auth": { + "description": "\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Telldus Live:\n 1. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0436\u0435\n 2. \u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 Telldus Live\n 3. Authorize **{app_name}** (\u043d\u0430\u0436\u043c\u0438\u0442\u0435 **Yes**).\n 4. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 **\u041f\u041e\u0414\u0422\u0412\u0415\u0420\u0414\u0418\u0422\u042c**.\n\n [\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 Telldus Live]({auth_url})", + "title": "Telldus Live" + }, + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442" + }, + "description": "\u043f\u0443\u0441\u0442\u043e", + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/sl.json b/homeassistant/components/tellduslive/translations/sl.json new file mode 100644 index 00000000000..0775e47f694 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/sl.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive je \u017ee konfiguriran", + "authorize_url_fail": "Neznana napaka pri generiranju potrditvenega URL-ja.", + "authorize_url_timeout": "\u010casovna omejitev za generiranje URL-ja je potekla.", + "unknown": "Pri\u0161lo je do neznane napake" + }, + "error": { + "auth_error": "Napaka pri preverjanju pristnosti, poskusite znova" + }, + "step": { + "auth": { + "description": "\u010ce \u017eelite povezati svoj ra\u010dun TelldusLive: \n 1. Kliknite spodnjo povezavo \n 2. Prijavite se v Telldus Live \n 3. Dovolite ** {app_name} ** (kliknite ** Da **). \n 4. Pridi nazaj in kliknite ** SUBMIT **. \n\n [Link TelldusLive ra\u010dun] ( {auth_url} )", + "title": "Preverjanje pristnosti za TelldusLive" + }, + "user": { + "data": { + "host": "Gostitelj" + }, + "description": "Prazno", + "title": "Izberite kon\u010dno to\u010dko." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/sv.json b/homeassistant/components/tellduslive/translations/sv.json new file mode 100644 index 00000000000..1a8affa7c31 --- /dev/null +++ b/homeassistant/components/tellduslive/translations/sv.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "Telldus Live! \u00e4r redan konfigurerad", + "authorize_url_fail": "Ok\u00e4nt fel n\u00e4r genererar en url f\u00f6r att auktorisera.", + "authorize_url_timeout": "Timeout n\u00e4r genererar auktorisera url.", + "unknown": "Ok\u00e4nt fel intr\u00e4ffade" + }, + "error": { + "auth_error": "Autentiseringsfel, v\u00e4nligen f\u00f6rs\u00f6k igen" + }, + "step": { + "auth": { + "description": "F\u00f6r att l\u00e4nka ditt \"Telldus Live!\" konto: \n 1. Klicka p\u00e5 l\u00e4nken nedan \n 2. Logga in p\u00e5 Telldus Live!\n 3. Godk\u00e4nn **{app_name}** (klicka **Yes**). \n 4. Kom tillbaka hit och klicka p\u00e5 **SUBMIT**. \n\n [L\u00e4nk till Telldus Live konto]({auth_url})", + "title": "Autentisera mot Telldus Live!" + }, + "user": { + "data": { + "host": "V\u00e4rddatorn" + }, + "description": "?", + "title": "V\u00e4lj endpoint." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/th.json b/homeassistant/components/tellduslive/translations/th.json new file mode 100644 index 00000000000..4d01bb3e14c --- /dev/null +++ b/homeassistant/components/tellduslive/translations/th.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "\u0e42\u0e2e\u0e2a\u0e15\u0e4c" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/zh-Hans.json b/homeassistant/components/tellduslive/translations/zh-Hans.json new file mode 100644 index 00000000000..f28bb62b10a --- /dev/null +++ b/homeassistant/components/tellduslive/translations/zh-Hans.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive \u5df2\u914d\u7f6e\u5b8c\u6210", + "authorize_url_fail": "\u751f\u6210\u6388\u6743\u7f51\u5740\u65f6\u53d1\u751f\u672a\u77e5\u9519\u8bef\u3002", + "authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002", + "unknown": "\u53d1\u751f\u672a\u77e5\u7684\u9519\u8bef" + }, + "error": { + "auth_error": "\u53cc\u91cd\u8ba4\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\u3002" + }, + "step": { + "auth": { + "description": "\u8981\u94fe\u63a5\u60a8\u7684TelldusLive\u8d26\u6237\uff1a \n 1. \u70b9\u51fb\u4e0b\u9762\u7684\u94fe\u63a5\n 2. \u767b\u5f55 Telldus Live \n 3. \u6388\u6743 **{app_name}** (\u70b9\u51fb **\u662f**)\u3002 \n 4. \u8fd4\u56de\u6b64\u9875\uff0c\u7136\u540e\u70b9\u51fb**\u63d0\u4ea4**\u3002 \n\n [\u94fe\u63a5 TelldusLive \u8d26\u6237]({auth_url})", + "title": "\u4f7f\u7528 TelldusLive \u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1" + }, + "user": { + "data": { + "host": "\u4e3b\u673a" + }, + "description": "\u7a7a", + "title": "\u9009\u62e9 endpoint\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/zh-Hant.json b/homeassistant/components/tellduslive/translations/zh-Hant.json new file mode 100644 index 00000000000..0901d927a2b --- /dev/null +++ b/homeassistant/components/tellduslive/translations/zh-Hant.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_setup": "TelldusLive \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "authorize_url_fail": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4", + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642", + "unknown": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "error": { + "auth_error": "\u8a8d\u8b49\u932f\u8aa4\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "auth": { + "description": "\u6b32\u9023\u7d50 TelldusLive \u5e33\u865f\uff1a\n 1. \u9ede\u9078\u4e0b\u65b9\u9023\u7d50\n 2. \u767b\u5165\u81f3 Telldus Live\n 3. \u5c0d **{app_name}** \u9032\u884c\u6388\u6b0a\uff08\u9ede\u9078 **Yes**\uff09\u3002\n 4. \u56de\u5230\u672c\u9801\u9762\u4e26\u9ede\u9078 **\u50b3\u9001**\u3002\n\n [Link TelldusLive account]({auth_url})", + "title": "TelldusLive \u8a8d\u8b49" + }, + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef" + }, + "description": "\u7a7a\u767d", + "title": "\u9078\u64c7\u7aef\u9ede\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellstick/__init__.py b/homeassistant/components/tellstick/__init__.py index e7f341c90b2..db37f4669d3 100644 --- a/homeassistant/components/tellstick/__init__.py +++ b/homeassistant/components/tellstick/__init__.py @@ -182,8 +182,10 @@ class TellstickDevice(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_TELLCORE_CALLBACK, self.update_from_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_TELLCORE_CALLBACK, self.update_from_callback + ) ) @property diff --git a/homeassistant/components/tellstick/cover.py b/homeassistant/components/tellstick/cover.py index 87571baa2c9..0a5643fc1ea 100644 --- a/homeassistant/components/tellstick/cover.py +++ b/homeassistant/components/tellstick/cover.py @@ -55,12 +55,9 @@ class TellstickCover(TellstickDevice, CoverDevice): def _parse_tellcore_data(self, tellcore_data): """Turn the value received from tellcore into something useful.""" - pass def _parse_ha_data(self, kwargs): """Turn the value from HA into something useful.""" - pass def _update_model(self, new_state, data): """Update the device entity state to match the arguments.""" - pass diff --git a/homeassistant/components/tellstick/manifest.json b/homeassistant/components/tellstick/manifest.json index 189a4e12c4a..4a5a3dd15c6 100644 --- a/homeassistant/components/tellstick/manifest.json +++ b/homeassistant/components/tellstick/manifest.json @@ -3,6 +3,5 @@ "name": "TellStick", "documentation": "https://www.home-assistant.io/integrations/tellstick", "requirements": ["tellcore-net==0.4", "tellcore-py==1.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tellstick/sensor.py b/homeassistant/components/tellstick/sensor.py index 4a3ff75b864..93c510e2fa1 100644 --- a/homeassistant/components/tellstick/sensor.py +++ b/homeassistant/components/tellstick/sensor.py @@ -93,9 +93,9 @@ def setup_platform(hass, config, add_entities, discovery_info=None): id_ = named_sensor[CONF_ID] if proto is not None: if model is not None: - named_sensors["{}{}{}".format(proto, model, id_)] = name + named_sensors[f"{proto}{model}{id_}"] = name else: - named_sensors["{}{}".format(proto, id_)] = name + named_sensors[f"{proto}{id_}"] = name else: named_sensors[id_] = name @@ -103,7 +103,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if not config[CONF_ONLY_NAMED]: sensor_name = str(tellcore_sensor.id) else: - proto_id = "{}{}".format(tellcore_sensor.protocol, tellcore_sensor.id) + proto_id = f"{tellcore_sensor.protocol}{tellcore_sensor.id}" proto_model_id = "{}{}{}".format( tellcore_sensor.protocol, tellcore_sensor.model, tellcore_sensor.id ) diff --git a/homeassistant/components/tellstick/switch.py b/homeassistant/components/tellstick/switch.py index e16f9983d00..8797e8e61e6 100644 --- a/homeassistant/components/tellstick/switch.py +++ b/homeassistant/components/tellstick/switch.py @@ -34,11 +34,9 @@ class TellstickSwitch(TellstickDevice, ToggleEntity): def _parse_ha_data(self, kwargs): """Turn the value from HA into something useful.""" - pass def _parse_tellcore_data(self, tellcore_data): """Turn the value received from tellcore into something useful.""" - pass def _update_model(self, new_state, data): """Update the device entity state to match the arguments.""" diff --git a/homeassistant/components/telnet/manifest.json b/homeassistant/components/telnet/manifest.json index afba0e38301..d4f07051993 100644 --- a/homeassistant/components/telnet/manifest.json +++ b/homeassistant/components/telnet/manifest.json @@ -2,7 +2,5 @@ "domain": "telnet", "name": "Telnet", "documentation": "https://www.home-assistant.io/integrations/telnet", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/temper/manifest.json b/homeassistant/components/temper/manifest.json index 4879ecddc16..e88cd1fb043 100644 --- a/homeassistant/components/temper/manifest.json +++ b/homeassistant/components/temper/manifest.json @@ -3,6 +3,5 @@ "name": "TEMPer", "documentation": "https://www.home-assistant.io/integrations/temper", "requirements": ["temperusb==1.5.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/template/__init__.py b/homeassistant/components/template/__init__.py index f100d663d8c..11ad02975ee 100644 --- a/homeassistant/components/template/__init__.py +++ b/homeassistant/components/template/__init__.py @@ -11,7 +11,7 @@ _LOGGER = logging.getLogger(__name__) def initialise_templates(hass, templates, attribute_templates=None): """Initialise templates and attribute templates.""" if attribute_templates is None: - attribute_templates = dict() + attribute_templates = {} for template in chain(templates.values(), attribute_templates.values()): if template is None: continue @@ -23,7 +23,7 @@ def extract_entities( ): """Extract entity ids from templates and attribute templates.""" if attribute_templates is None: - attribute_templates = dict() + attribute_templates = {} entity_ids = set() if manual_entity_ids is None: invalid_templates = [] diff --git a/homeassistant/components/template/alarm_control_panel.py b/homeassistant/components/template/alarm_control_panel.py index 45cccef9766..937119ff6d4 100644 --- a/homeassistant/components/template/alarm_control_panel.py +++ b/homeassistant/components/template/alarm_control_panel.py @@ -236,7 +236,7 @@ class AlarmControlPanelTemplate(AlarmControlPanel): _LOGGER.error("No script action defined for %s", state) if optimistic_set: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_alarm_arm_away(self, code=None): """Arm the panel to Away.""" diff --git a/homeassistant/components/template/binary_sensor.py b/homeassistant/components/template/binary_sensor.py index 8991ce4c65b..df918d3dd77 100644 --- a/homeassistant/components/template/binary_sensor.py +++ b/homeassistant/components/template/binary_sensor.py @@ -283,7 +283,7 @@ class BinarySensorTemplate(BinarySensorDevice): def set_state(): """Set state of template binary sensor.""" self._state = state - self.async_schedule_update_ha_state() + self.async_write_ha_state() # state without delay if (state and not self._delay_on) or (not state and not self._delay_off): diff --git a/homeassistant/components/template/cover.py b/homeassistant/components/template/cover.py index 14fc6996378..3e3232f2b91 100644 --- a/homeassistant/components/template/cover.py +++ b/homeassistant/components/template/cover.py @@ -322,7 +322,7 @@ class CoverTemplate(CoverDevice): ) if self._optimistic: self._position = 100 - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_close_cover(self, **kwargs): """Move the cover down.""" @@ -334,7 +334,7 @@ class CoverTemplate(CoverDevice): ) if self._optimistic: self._position = 0 - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_stop_cover(self, **kwargs): """Fire the stop action.""" @@ -348,7 +348,7 @@ class CoverTemplate(CoverDevice): {"position": self._position}, context=self._context ) if self._optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_open_cover_tilt(self, **kwargs): """Tilt the cover open.""" @@ -357,7 +357,7 @@ class CoverTemplate(CoverDevice): {"tilt": self._tilt_value}, context=self._context ) if self._tilt_optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_close_cover_tilt(self, **kwargs): """Tilt the cover closed.""" @@ -366,7 +366,7 @@ class CoverTemplate(CoverDevice): {"tilt": self._tilt_value}, context=self._context ) if self._tilt_optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_set_cover_tilt_position(self, **kwargs): """Move the cover tilt to a specific position.""" @@ -375,7 +375,7 @@ class CoverTemplate(CoverDevice): {"tilt": self._tilt_value}, context=self._context ) if self._tilt_optimistic: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update the state from the template.""" diff --git a/homeassistant/components/template/light.py b/homeassistant/components/template/light.py index 7948782479b..1c19dfb33a6 100644 --- a/homeassistant/components/template/light.py +++ b/homeassistant/components/template/light.py @@ -7,10 +7,12 @@ from homeassistant.components.light import ( ATTR_BRIGHTNESS, ATTR_COLOR_TEMP, ATTR_HS_COLOR, + ATTR_WHITE_VALUE, ENTITY_ID_FORMAT, SUPPORT_BRIGHTNESS, SUPPORT_COLOR, SUPPORT_COLOR_TEMP, + SUPPORT_WHITE_VALUE, Light, ) from homeassistant.const import ( @@ -46,6 +48,8 @@ CONF_TEMPERATURE_TEMPLATE = "temperature_template" CONF_TEMPERATURE_ACTION = "set_temperature" CONF_COLOR_TEMPLATE = "color_template" CONF_COLOR_ACTION = "set_color" +CONF_WHITE_VALUE_TEMPLATE = "white_value_template" +CONF_WHITE_VALUE_ACTION = "set_white_value" LIGHT_SCHEMA = vol.Schema( { @@ -63,6 +67,8 @@ LIGHT_SCHEMA = vol.Schema( vol.Optional(CONF_TEMPERATURE_ACTION): cv.SCRIPT_SCHEMA, vol.Optional(CONF_COLOR_TEMPLATE): cv.template, vol.Optional(CONF_COLOR_ACTION): cv.SCRIPT_SCHEMA, + vol.Optional(CONF_WHITE_VALUE_TEMPLATE): cv.template, + vol.Optional(CONF_WHITE_VALUE_ACTION): cv.SCRIPT_SCHEMA, } ) @@ -95,6 +101,9 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= color_action = device_config.get(CONF_COLOR_ACTION) color_template = device_config.get(CONF_COLOR_TEMPLATE) + white_value_action = device_config.get(CONF_WHITE_VALUE_ACTION) + white_value_template = device_config.get(CONF_WHITE_VALUE_TEMPLATE) + templates = { CONF_VALUE_TEMPLATE: state_template, CONF_ICON_TEMPLATE: icon_template, @@ -103,6 +112,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= CONF_LEVEL_TEMPLATE: level_template, CONF_TEMPERATURE_TEMPLATE: temperature_template, CONF_COLOR_TEMPLATE: color_template, + CONF_WHITE_VALUE_TEMPLATE: white_value_template, } initialise_templates(hass, templates) @@ -128,6 +138,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= temperature_template, color_action, color_template, + white_value_action, + white_value_template, ) ) @@ -155,6 +167,8 @@ class LightTemplate(Light): temperature_template, color_action, color_template, + white_value_action, + white_value_template, ): """Initialize the light.""" self.hass = hass @@ -180,6 +194,10 @@ class LightTemplate(Light): if color_action is not None: self._color_script = Script(hass, color_action) self._color_template = color_template + self._white_value_script = None + if white_value_action is not None: + self._white_value_script = Script(hass, white_value_action) + self._white_value_template = white_value_template self._state = False self._icon = None @@ -187,6 +205,7 @@ class LightTemplate(Light): self._brightness = None self._temperature = None self._color = None + self._white_value = None self._entities = entity_ids self._available = True @@ -200,6 +219,11 @@ class LightTemplate(Light): """Return the CT color value in mireds.""" return self._temperature + @property + def white_value(self): + """Return the white value.""" + return self._white_value + @property def hs_color(self): """Return the hue and saturation color value [float, float].""" @@ -220,6 +244,8 @@ class LightTemplate(Light): supported_features |= SUPPORT_COLOR_TEMP if self._color_script is not None: supported_features |= SUPPORT_COLOR + if self._white_value_script is not None: + supported_features |= SUPPORT_WHITE_VALUE return supported_features @property @@ -263,6 +289,7 @@ class LightTemplate(Light): or self._level_template is not None or self._temperature_template is not None or self._color_template is not None + or self._white_value_template is not None or self._availability_template is not None ): async_track_state_change( @@ -290,6 +317,13 @@ class LightTemplate(Light): self._brightness = kwargs[ATTR_BRIGHTNESS] optimistic_set = True + if self._white_value_template is None and ATTR_WHITE_VALUE in kwargs: + _LOGGER.info( + "Optimistically setting white value to %s", kwargs[ATTR_WHITE_VALUE] + ) + self._white_value = kwargs[ATTR_WHITE_VALUE] + optimistic_set = True + if self._temperature_template is None and ATTR_COLOR_TEMP in kwargs: _LOGGER.info( "Optimistically setting color temperature to %s", @@ -306,6 +340,10 @@ class LightTemplate(Light): await self._temperature_script.async_run( {"color_temp": kwargs[ATTR_COLOR_TEMP]}, context=self._context ) + elif ATTR_WHITE_VALUE in kwargs and self._white_value_script: + await self._white_value_script.async_run( + {"white_value": kwargs[ATTR_WHITE_VALUE]}, context=self._context + ) elif ATTR_HS_COLOR in kwargs and self._color_script: hs_value = kwargs[ATTR_HS_COLOR] await self._color_script.async_run( @@ -316,14 +354,14 @@ class LightTemplate(Light): await self._on_script.async_run() if optimistic_set: - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the light off.""" await self._off_script.async_run(context=self._context) if self._template is None: self._state = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_update(self): """Update from templates.""" @@ -335,6 +373,8 @@ class LightTemplate(Light): self.update_color() + self.update_white_value() + for property_name, template in ( ("_icon", self._icon_template), ("_entity_picture", self._entity_picture_template), @@ -378,6 +418,9 @@ class LightTemplate(Light): return try: brightness = self._level_template.async_render() + if brightness in ("None", ""): + self._brightness = None + return if 0 <= int(brightness) <= 255: self._brightness = int(brightness) else: @@ -385,6 +428,39 @@ class LightTemplate(Light): "Received invalid brightness : %s. Expected: 0-255", brightness ) self._brightness = None + except ValueError: + _LOGGER.error( + "Template must supply an integer brightness from 0-255, or 'None'", + exc_info=True, + ) + self._brightness = None + except TemplateError: + _LOGGER.error("Invalid template", exc_info=True) + self._brightness = None + + @callback + def update_white_value(self): + """Update the white value from the template.""" + if self._white_value_template is None: + return + try: + white_value = self._white_value_template.async_render() + if white_value in ("None", ""): + self._white_value = None + return + if 0 <= int(white_value) <= 255: + self._white_value = int(white_value) + else: + _LOGGER.error( + "Received invalid white value: %s. Expected: 0-255", white_value + ) + self._white_value = None + except ValueError: + _LOGGER.error( + "Template must supply an integer white_value from 0-255, or 'None'", + exc_info=True, + ) + self._white_value = None except TemplateError as ex: _LOGGER.error(ex) self._state = None @@ -415,7 +491,11 @@ class LightTemplate(Light): if self._temperature_template is None: return try: - temperature = int(self._temperature_template.async_render()) + render = self._temperature_template.async_render() + if render in ("None", ""): + self._temperature = None + return + temperature = int(render) if self.min_mireds <= temperature <= self.max_mireds: self._temperature = temperature else: @@ -425,6 +505,12 @@ class LightTemplate(Light): self.max_mireds, ) self._temperature = None + except ValueError: + _LOGGER.error( + "Template must supply an integer temperature within the range for this light, or 'None'", + exc_info=True, + ) + self._temperature = None except TemplateError: _LOGGER.error("Cannot evaluate temperature template", exc_info=True) self._temperature = None @@ -435,10 +521,11 @@ class LightTemplate(Light): if self._color_template is None: return - self._color = None - try: render = self._color_template.async_render() + if render in ("None", ""): + self._color = None + return h_str, s_str = map( float, render.replace("(", "").replace(")", "").split(",", 1) ) @@ -455,7 +542,10 @@ class LightTemplate(Light): h_str, s_str, ) + self._color = None else: _LOGGER.error("Received invalid hs_color : (%s)", render) - except TemplateError as ex: - _LOGGER.error(ex) + self._color = None + except TemplateError: + _LOGGER.error("Cannot evaluate hs_color template", exc_info=True) + self._color = None diff --git a/homeassistant/components/template/lock.py b/homeassistant/components/template/lock.py index f4a6b55dd18..a5caac00123 100644 --- a/homeassistant/components/template/lock.py +++ b/homeassistant/components/template/lock.py @@ -174,12 +174,12 @@ class TemplateLock(LockDevice): """Lock the device.""" if self._optimistic: self._state = True - self.async_schedule_update_ha_state() + self.async_write_ha_state() await self._command_lock.async_run(context=self._context) async def async_unlock(self, **kwargs): """Unlock the device.""" if self._optimistic: self._state = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() await self._command_unlock.async_run(context=self._context) diff --git a/homeassistant/components/template/manifest.json b/homeassistant/components/template/manifest.json index 8dfe3441edd..4ad03db22bb 100644 --- a/homeassistant/components/template/manifest.json +++ b/homeassistant/components/template/manifest.json @@ -2,8 +2,6 @@ "domain": "template", "name": "Template", "documentation": "https://www.home-assistant.io/integrations/template", - "requirements": [], - "dependencies": [], "codeowners": ["@PhracturedBlue", "@tetienne"], "quality_scale": "internal" } diff --git a/homeassistant/components/tensorflow/image_processing.py b/homeassistant/components/tensorflow/image_processing.py index 26cf0fed5e8..f4eb5342c46 100644 --- a/homeassistant/components/tensorflow/image_processing.py +++ b/homeassistant/components/tensorflow/image_processing.py @@ -92,7 +92,9 @@ def setup_platform(hass, config, add_entities, discovery_info=None): os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" # These imports shouldn't be moved to the top, because they depend on code from the model_dir. # (The model_dir is created during the manual setup process. See integration docs.) - import tensorflow as tf + import tensorflow as tf # pylint: disable=import-outside-toplevel + + # pylint: disable=import-outside-toplevel from object_detection.utils import label_map_util except ImportError: _LOGGER.error( @@ -104,7 +106,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): try: # Display warning that PIL will be used if no OpenCV is found. - import cv2 # noqa: F401 pylint: disable=unused-import + import cv2 # noqa: F401 pylint: disable=unused-import, import-outside-toplevel except ImportError: _LOGGER.warning( "No OpenCV library found. TensorFlow will process image with " @@ -166,7 +168,7 @@ class TensorFlowImageProcessor(ImageProcessingEntity): if name: self._name = name else: - self._name = "TensorFlow {0}".format(split_entity_id(camera_entity)[1]) + self._name = "TensorFlow {}".format(split_entity_id(camera_entity)[1]) self._session = session self._graph = detection_graph self._category_index = category_index @@ -256,7 +258,7 @@ class TensorFlowImageProcessor(ImageProcessingEntity): 1, 1, ]: - label = "{} Detection Area".format(category.capitalize()) + label = f"{category.capitalize()} Detection Area" draw_box( draw, self._category_areas[category], @@ -268,7 +270,7 @@ class TensorFlowImageProcessor(ImageProcessingEntity): # Draw detected objects for instance in values: - label = "{0} {1:.1f}%".format(category, instance["score"]) + label = "{} {:.1f}%".format(category, instance["score"]) draw_box( draw, instance["box"], img_width, img_height, label, (255, 255, 0) ) @@ -281,7 +283,7 @@ class TensorFlowImageProcessor(ImageProcessingEntity): """Process the image.""" try: - import cv2 # pylint: disable=import-error + import cv2 # pylint: disable=import-error, import-outside-toplevel img = cv2.imdecode(np.asarray(bytearray(image)), cv2.IMREAD_UNCHANGED) inp = img[:, :, [2, 1, 0]] # BGR->RGB diff --git a/homeassistant/components/tensorflow/manifest.json b/homeassistant/components/tensorflow/manifest.json index 024dc2b7bdd..2ea292e8ff5 100644 --- a/homeassistant/components/tensorflow/manifest.json +++ b/homeassistant/components/tensorflow/manifest.json @@ -4,10 +4,9 @@ "documentation": "https://www.home-assistant.io/integrations/tensorflow", "requirements": [ "tensorflow==1.13.2", - "numpy==1.18.1", + "numpy==1.18.2", "protobuf==3.6.1", - "pillow==7.0.0" + "pillow==7.1.1" ], - "dependencies": [], "codeowners": [] -} \ No newline at end of file +} diff --git a/homeassistant/components/tesla/.translations/ca.json b/homeassistant/components/tesla/.translations/ca.json deleted file mode 100644 index 2f0257d47a4..00000000000 --- a/homeassistant/components/tesla/.translations/ca.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Error de connexi\u00f3; comprova la xarxa i torna-ho a intentar", - "identifier_exists": "Correu electr\u00f2nic ja registrat", - "invalid_credentials": "Credencials inv\u00e0lides", - "unknown_error": "Error desconegut, si us plau, envia la informaci\u00f3 del registre" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Correu electr\u00f2nic" - }, - "description": "Introdueix la teva informaci\u00f3.", - "title": "Configuraci\u00f3 de Tesla" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "For\u00e7a el despertar del cotxe en la posada en marxa", - "scan_interval": "Segons entre escanejos" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/da.json b/homeassistant/components/tesla/.translations/da.json deleted file mode 100644 index 85091c350d8..00000000000 --- a/homeassistant/components/tesla/.translations/da.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Fejl ved tilslutning; tjek netv\u00e6rk og pr\u00f8v igen", - "identifier_exists": "Email er allerede registreret", - "invalid_credentials": "Ugyldige legitimationsoplysninger", - "unknown_error": "Ukendt fejl, rapporter venligst loginfo" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Email-adresse" - }, - "description": "Indtast dine oplysninger.", - "title": "Tesla - Konfiguration" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Sekunder mellem scanninger" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/de.json b/homeassistant/components/tesla/.translations/de.json deleted file mode 100644 index 4f435aa7839..00000000000 --- a/homeassistant/components/tesla/.translations/de.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Fehler beim Verbinden; \u00dcberpr\u00fcfe dein Netzwerk und versuche es erneut", - "identifier_exists": "E-Mail bereits registriert", - "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", - "unknown_error": "Unbekannter Fehler, bitte Log-Info melden" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "E-Mail-Adresse" - }, - "description": "Bitte gib deine Daten ein.", - "title": "Tesla - Konfiguration" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Sekunden zwischen den Scans" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/en.json b/homeassistant/components/tesla/.translations/en.json deleted file mode 100644 index 4dbee73717e..00000000000 --- a/homeassistant/components/tesla/.translations/en.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Error connecting; check network and retry", - "identifier_exists": "Email already registered", - "invalid_credentials": "Invalid credentials", - "unknown_error": "Unknown error, please report log info" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Email Address" - }, - "description": "Please enter your information.", - "title": "Tesla - Configuration" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "Force cars awake on startup", - "scan_interval": "Seconds between scans" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/es.json b/homeassistant/components/tesla/.translations/es.json deleted file mode 100644 index ad456dd28b6..00000000000 --- a/homeassistant/components/tesla/.translations/es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Error de conexi\u00f3n; compruebe la red y vuelva a intentarlo", - "identifier_exists": "Correo electr\u00f3nico ya registrado", - "invalid_credentials": "Credenciales no v\u00e1lidas", - "unknown_error": "Error desconocido, por favor reporte la informaci\u00f3n de registro" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "description": "Por favor, introduzca su informaci\u00f3n.", - "title": "Tesla - Configuraci\u00f3n" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "Forzar autom\u00f3viles despiertos al inicio", - "scan_interval": "Segundos entre escaneos" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/fr.json b/homeassistant/components/tesla/.translations/fr.json deleted file mode 100644 index ef9d5162899..00000000000 --- a/homeassistant/components/tesla/.translations/fr.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Erreur de connexion; v\u00e9rifier le r\u00e9seau et r\u00e9essayer", - "identifier_exists": "Email d\u00e9j\u00e0 enregistr\u00e9", - "invalid_credentials": "Informations d'identification invalides", - "unknown_error": "Erreur inconnue, veuillez signaler les informations du journal" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Adresse e-mail" - }, - "description": "Veuillez saisir vos informations.", - "title": "Tesla - Configuration" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "Forcer les voitures \u00e0 se r\u00e9veiller au d\u00e9marrage", - "scan_interval": "Secondes entre les scans" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/hu.json b/homeassistant/components/tesla/.translations/hu.json deleted file mode 100644 index 01090bbfa9e..00000000000 --- a/homeassistant/components/tesla/.translations/hu.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Hiba a csatlakoz\u00e1skor; ellen\u0151rizd a h\u00e1l\u00f3zatot \u00e9s pr\u00f3b\u00e1ld \u00fajra", - "identifier_exists": "Az e-mail c\u00edm m\u00e1r regisztr\u00e1lva van", - "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok", - "unknown_error": "Ismeretlen hiba, k\u00e9rlek jelentsd a napl\u00f3f\u00e1jlban l\u00e9v\u0151 adatokat" - }, - "step": { - "user": { - "data": { - "password": "Jelsz\u00f3", - "username": "Email c\u00edm" - }, - "description": "K\u00e9rlek, add meg az adataidat.", - "title": "Tesla - Konfigur\u00e1ci\u00f3" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Szkennel\u00e9sek k\u00f6z\u00f6tti m\u00e1sodpercek" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/it.json b/homeassistant/components/tesla/.translations/it.json deleted file mode 100644 index e9bf5e2d4fe..00000000000 --- a/homeassistant/components/tesla/.translations/it.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Errore durante la connessione; controllare la rete e riprovare", - "identifier_exists": "E-mail gi\u00e0 registrata", - "invalid_credentials": "Credenziali non valide", - "unknown_error": "Errore sconosciuto, si prega di segnalare le informazioni del registro" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Indirizzo E-Mail" - }, - "description": "Si prega di inserire le tue informazioni.", - "title": "Tesla - Configurazione" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "Forza il risveglio delle auto all'avvio", - "scan_interval": "Secondi tra le scansioni" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/ko.json b/homeassistant/components/tesla/.translations/ko.json deleted file mode 100644 index a0f8d353349..00000000000 --- a/homeassistant/components/tesla/.translations/ko.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "\uc5f0\uacb0 \uc624\ub958; \ub124\ud2b8\uc6cc\ud06c\ub97c \ud655\uc778\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694", - "identifier_exists": "\uc774\uba54\uc77c \uc8fc\uc18c\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "invalid_credentials": "\uc774\uba54\uc77c \uc8fc\uc18c \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "unknown_error": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub85c\uadf8 \ub0b4\uc6a9\uc744 \uc54c\ub824\uc8fc\uc138\uc694" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc774\uba54\uc77c \uc8fc\uc18c" - }, - "description": "\uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", - "title": "Tesla - \uad6c\uc131" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "\uc2dc\ub3d9 \uc2dc \ucc28\ub7c9 \uae68\uc6b0\uae30", - "scan_interval": "\uc2a4\uce94 \uac04\uaca9(\ucd08)" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/lb.json b/homeassistant/components/tesla/.translations/lb.json deleted file mode 100644 index 64bf528e95f..00000000000 --- a/homeassistant/components/tesla/.translations/lb.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Feeler beim verbannen, Iwwerpr\u00e9ift Netzwierk a prob\u00e9iert nach emol", - "identifier_exists": "E-Mail ass scho registr\u00e9iert", - "invalid_credentials": "Ong\u00eblteg Login Informatioune", - "unknown_error": "Onbekannte Feeler, mellt w.e.g. Logbuch Info" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "E-Mail Adress" - }, - "description": "F\u00ebllt \u00e4r Informatiounen aus.", - "title": "Tesla - Konfiguratioun" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "Forc\u00e9ier d'Erw\u00e4chen vun den Autoen beim starten", - "scan_interval": "Sekonnen t\u00ebscht Scannen" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/nl.json b/homeassistant/components/tesla/.translations/nl.json deleted file mode 100644 index 5f3e83dd248..00000000000 --- a/homeassistant/components/tesla/.translations/nl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Fout bij verbinden; controleer het netwerk en probeer het opnieuw", - "identifier_exists": "E-mail al geregistreerd", - "invalid_credentials": "Ongeldige inloggegevens", - "unknown_error": "Onbekende fout, meldt u log info" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "E-mailadres" - }, - "description": "Vul alstublieft uw gegevens in.", - "title": "Tesla - Configuratie" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Seconden tussen scans" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/no.json b/homeassistant/components/tesla/.translations/no.json deleted file mode 100644 index 8df2cdd2018..00000000000 --- a/homeassistant/components/tesla/.translations/no.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Feil ved tilkobling; sjekk nettverket og pr\u00f8v p\u00e5 nytt", - "identifier_exists": "E-post er allerede registrert", - "invalid_credentials": "Ugyldig brukerinformasjon", - "unknown_error": "Ukjent feil, Vennligst rapporter informasjon fra Loggen" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "E-postadresse" - }, - "description": "Vennligst skriv inn informasjonen din.", - "title": "Tesla - Konfigurasjon" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "Tving biler til \u00e5 v\u00e5kne ved oppstart", - "scan_interval": "Sekunder mellom skanninger" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/pl.json b/homeassistant/components/tesla/.translations/pl.json deleted file mode 100644 index 89233646ef0..00000000000 --- a/homeassistant/components/tesla/.translations/pl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "B\u0142\u0105d po\u0142\u0105czenia; sprawd\u017a sie\u0107 i spr\u00f3buj ponownie", - "identifier_exists": "Adres e-mail jest ju\u017c zarejestrowany.", - "invalid_credentials": "Nieprawid\u0142owe po\u015bwiadczenia", - "unknown_error": "Nieznany b\u0142\u0105d, prosz\u0119 zg\u0142osi\u0107 dane z loga" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Adres e-mail" - }, - "description": "Wprowad\u017a dane", - "title": "Tesla - konfiguracja" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/pt-BR.json b/homeassistant/components/tesla/.translations/pt-BR.json deleted file mode 100644 index 4b6de20d2d7..00000000000 --- a/homeassistant/components/tesla/.translations/pt-BR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Erro na conex\u00e3o; verifique a rede e tente novamente", - "identifier_exists": "E-mail j\u00e1 registrado", - "invalid_credentials": "Credenciais inv\u00e1lidas", - "unknown_error": "Erro desconhecido, por favor, relate informa\u00e7\u00f5es do log" - }, - "step": { - "user": { - "data": { - "password": "Senha", - "username": "Endere\u00e7o de e-mail" - }, - "description": "Por favor, insira suas informa\u00e7\u00f5es.", - "title": "Tesla - Configura\u00e7\u00e3o" - } - }, - "title": "Tesla" - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/ru.json b/homeassistant/components/tesla/.translations/ru.json deleted file mode 100644 index 5354e4e6390..00000000000 --- a/homeassistant/components/tesla/.translations/ru.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "\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 \u0441\u0435\u0442\u044c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", - "identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", - "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "unknown_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" - }, - "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.", - "title": "Tesla" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435", - "scan_interval": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 (\u0441\u0435\u043a.)" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/sl.json b/homeassistant/components/tesla/.translations/sl.json deleted file mode 100644 index ec6d5850d92..00000000000 --- a/homeassistant/components/tesla/.translations/sl.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Napaka pri povezovanju; preverite omre\u017eje in poskusite znova", - "identifier_exists": "E-po\u0161ta je \u017ee registrirana", - "invalid_credentials": "Neveljavne poverilnice", - "unknown_error": "Neznana napaka, sporo\u010dite podatke dnevnika" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "E-po\u0161tni naslov" - }, - "description": "Prosimo, vnesite svoje podatke.", - "title": "Tesla - konfiguracija" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Sekund med skeniranjem" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/sv.json b/homeassistant/components/tesla/.translations/sv.json deleted file mode 100644 index 46263ff64ae..00000000000 --- a/homeassistant/components/tesla/.translations/sv.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "Fel vid anslutning; kontrollera n\u00e4tverket och f\u00f6rs\u00f6k igen", - "identifier_exists": "E-post redan registrerad", - "invalid_credentials": "Ogiltiga autentiseringsuppgifter", - "unknown_error": "Ok\u00e4nt fel, var god att rapportera logginformation" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "E-postadress" - }, - "description": "V\u00e4nligen ange din information.", - "title": "Tesla - Konfiguration" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Sekunder mellan skanningar" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/zh-Hant.json b/homeassistant/components/tesla/.translations/zh-Hant.json deleted file mode 100644 index c35cbfb944a..00000000000 --- a/homeassistant/components/tesla/.translations/zh-Hant.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "error": { - "connection_error": "\u9023\u7dda\u932f\u8aa4\uff1b\u8acb\u6aa2\u5bdf\u7db2\u8def\u5f8c\u518d\u8a66\u4e00\u6b21", - "identifier_exists": "\u90f5\u4ef6\u5df2\u8a3b\u518a", - "invalid_credentials": "\u6191\u8b49\u7121\u6548", - "unknown_error": "\u672a\u77e5\u932f\u8aa4\uff0c\u8acb\u56de\u5831\u7d00\u9304" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" - }, - "description": "\u8acb\u8f38\u5165\u8cc7\u8a0a\u3002", - "title": "Tesla - \u8a2d\u5b9a" - } - }, - "title": "Tesla" - }, - "options": { - "step": { - "init": { - "data": { - "enable_wake_on_start": "\u65bc\u555f\u52d5\u6642\u5f37\u5236\u559a\u9192\u6c7d\u8eca", - "scan_interval": "\u6383\u63cf\u9593\u9694\u79d2\u6578" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/tesla/__init__.py b/homeassistant/components/tesla/__init__.py index 2d08b48e0af..d2b5f091021 100644 --- a/homeassistant/components/tesla/__init__.py +++ b/homeassistant/components/tesla/__init__.py @@ -250,11 +250,9 @@ class TeslaDevice(Entity): async def async_added_to_hass(self): """Register state update callback.""" - pass async def async_will_remove_from_hass(self): """Prepare for unload.""" - pass async def async_update(self): """Update the state of the device.""" diff --git a/homeassistant/components/tesla/climate.py b/homeassistant/components/tesla/climate.py index d438f94f4c3..5ba6f182c0a 100644 --- a/homeassistant/components/tesla/climate.py +++ b/homeassistant/components/tesla/climate.py @@ -1,10 +1,14 @@ """Support for Tesla HVAC system.""" import logging +from typing import List, Optional + +from teslajsonpy.exceptions import UnknownPresetMode from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF, + SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, ) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT @@ -45,7 +49,7 @@ class TeslaThermostat(TeslaDevice, ClimateDevice): @property def supported_features(self): """Return the list of supported features.""" - return SUPPORT_TARGET_TEMPERATURE + return SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE @property def hvac_mode(self): @@ -93,15 +97,39 @@ class TeslaThermostat(TeslaDevice, ClimateDevice): async def async_set_temperature(self, **kwargs): """Set new target temperatures.""" - _LOGGER.debug("Setting temperature for: %s", self._name) temperature = kwargs.get(ATTR_TEMPERATURE) if temperature: + _LOGGER.debug("%s: Setting temperature to %s", self._name, temperature) await self.tesla_device.set_temperature(temperature) async def async_set_hvac_mode(self, hvac_mode): """Set new target hvac mode.""" - _LOGGER.debug("Setting mode for: %s", self._name) + _LOGGER.debug("%s: Setting hvac mode to %s", self._name, hvac_mode) if hvac_mode == HVAC_MODE_OFF: await self.tesla_device.set_status(False) elif hvac_mode == HVAC_MODE_HEAT_COOL: await self.tesla_device.set_status(True) + + async def async_set_preset_mode(self, preset_mode: str) -> None: + """Set new preset mode.""" + _LOGGER.debug("%s: Setting preset_mode to: %s", self.name, preset_mode) + try: + await self.tesla_device.set_preset_mode(preset_mode) + except UnknownPresetMode as ex: + _LOGGER.error("%s", ex.message) + + @property + def preset_mode(self) -> Optional[str]: + """Return the current preset mode, e.g., home, away, temp. + + Requires SUPPORT_PRESET_MODE. + """ + return self.tesla_device.preset_mode + + @property + def preset_modes(self) -> Optional[List[str]]: + """Return a list of available preset modes. + + Requires SUPPORT_PRESET_MODE. + """ + return self.tesla_device.preset_modes diff --git a/homeassistant/components/tesla/config_flow.py b/homeassistant/components/tesla/config_flow.py index b8407653d1b..f9a218d2f5f 100644 --- a/homeassistant/components/tesla/config_flow.py +++ b/homeassistant/components/tesla/config_flow.py @@ -33,7 +33,7 @@ DATA_SCHEMA = vol.Schema( @callback def configured_instances(hass): """Return a set of configured Tesla instances.""" - return set(entry.title for entry in hass.config_entries.async_entries(DOMAIN)) + return {entry.title for entry in hass.config_entries.async_entries(DOMAIN)} class TeslaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/tesla/manifest.json b/homeassistant/components/tesla/manifest.json index 1bba8436312..3d21fbae960 100644 --- a/homeassistant/components/tesla/manifest.json +++ b/homeassistant/components/tesla/manifest.json @@ -3,12 +3,6 @@ "name": "Tesla", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tesla", - "requirements": [ - "teslajsonpy==0.6.0" - ], - "dependencies": [], - "codeowners": [ - "@zabuldon", - "@alandtse" - ] -} \ No newline at end of file + "requirements": ["teslajsonpy==0.8.0"], + "codeowners": ["@zabuldon", "@alandtse"] +} diff --git a/homeassistant/components/tesla/strings.json b/homeassistant/components/tesla/strings.json index 3c8017a7d76..7a15e5d35d9 100644 --- a/homeassistant/components/tesla/strings.json +++ b/homeassistant/components/tesla/strings.json @@ -8,15 +8,11 @@ }, "step": { "user": { - "data": { - "username": "Email Address", - "password": "Password" - }, + "data": { "username": "Email Address", "password": "Password" }, "description": "Please enter your information.", "title": "Tesla - Configuration" } - }, - "title": "Tesla" + } }, "options": { "step": { @@ -28,4 +24,4 @@ } } } -} \ No newline at end of file +} diff --git a/homeassistant/components/tesla/translations/ca.json b/homeassistant/components/tesla/translations/ca.json new file mode 100644 index 00000000000..35169f70245 --- /dev/null +++ b/homeassistant/components/tesla/translations/ca.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Error de connexi\u00f3; comprova la xarxa i torna-ho a intentar", + "identifier_exists": "Correu electr\u00f2nic ja registrat", + "invalid_credentials": "Credencials inv\u00e0lides", + "unknown_error": "Error desconegut, si us plau, envia la informaci\u00f3 del registre" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Correu electr\u00f2nic" + }, + "description": "Introdueix la teva informaci\u00f3.", + "title": "Configuraci\u00f3 de Tesla" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "For\u00e7a el despertar del cotxe en la posada en marxa", + "scan_interval": "Segons entre escanejos" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/da.json b/homeassistant/components/tesla/translations/da.json new file mode 100644 index 00000000000..da4d71058bc --- /dev/null +++ b/homeassistant/components/tesla/translations/da.json @@ -0,0 +1,29 @@ +{ + "config": { + "error": { + "connection_error": "Fejl ved tilslutning; tjek netv\u00e6rk og pr\u00f8v igen", + "identifier_exists": "Email er allerede registreret", + "invalid_credentials": "Ugyldige legitimationsoplysninger", + "unknown_error": "Ukendt fejl, rapporter venligst loginfo" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Email-adresse" + }, + "description": "Indtast dine oplysninger.", + "title": "Tesla - Konfiguration" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Sekunder mellem scanninger" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/de.json b/homeassistant/components/tesla/translations/de.json new file mode 100644 index 00000000000..c6c2bc115f4 --- /dev/null +++ b/homeassistant/components/tesla/translations/de.json @@ -0,0 +1,29 @@ +{ + "config": { + "error": { + "connection_error": "Fehler beim Verbinden; \u00dcberpr\u00fcfe dein Netzwerk und versuche es erneut", + "identifier_exists": "E-Mail bereits registriert", + "invalid_credentials": "Ung\u00fcltige Anmeldeinformationen", + "unknown_error": "Unbekannter Fehler, bitte Log-Info melden" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "E-Mail-Adresse" + }, + "description": "Bitte gib deine Daten ein.", + "title": "Tesla - Konfiguration" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Sekunden zwischen den Scans" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/en.json b/homeassistant/components/tesla/translations/en.json new file mode 100644 index 00000000000..34fdb66c098 --- /dev/null +++ b/homeassistant/components/tesla/translations/en.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Error connecting; check network and retry", + "identifier_exists": "Email already registered", + "invalid_credentials": "Invalid credentials", + "unknown_error": "Unknown error, please report log info" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Email Address" + }, + "description": "Please enter your information.", + "title": "Tesla - Configuration" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Force cars awake on startup", + "scan_interval": "Seconds between scans" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/es.json b/homeassistant/components/tesla/translations/es.json new file mode 100644 index 00000000000..e0f5f81e5ae --- /dev/null +++ b/homeassistant/components/tesla/translations/es.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Error de conexi\u00f3n; comprueba la red y vuelve a intentarlo", + "identifier_exists": "Correo electr\u00f3nico ya registrado", + "invalid_credentials": "Credenciales no v\u00e1lidas", + "unknown_error": "Error desconocido, por favor reporte la informaci\u00f3n de registro" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "description": "Por favor, introduzca su informaci\u00f3n.", + "title": "Tesla - Configuraci\u00f3n" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Forzar autom\u00f3viles despiertos al inicio", + "scan_interval": "Segundos entre escaneos" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/fr.json b/homeassistant/components/tesla/translations/fr.json new file mode 100644 index 00000000000..638557f1035 --- /dev/null +++ b/homeassistant/components/tesla/translations/fr.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Erreur de connexion; v\u00e9rifier le r\u00e9seau et r\u00e9essayer", + "identifier_exists": "Email d\u00e9j\u00e0 enregistr\u00e9", + "invalid_credentials": "Informations d'identification invalides", + "unknown_error": "Erreur inconnue, veuillez signaler les informations du journal" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Adresse e-mail" + }, + "description": "Veuillez saisir vos informations.", + "title": "Tesla - Configuration" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Forcer les voitures \u00e0 se r\u00e9veiller au d\u00e9marrage", + "scan_interval": "Secondes entre les scans" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/hu.json b/homeassistant/components/tesla/translations/hu.json new file mode 100644 index 00000000000..0b9dbbf06a7 --- /dev/null +++ b/homeassistant/components/tesla/translations/hu.json @@ -0,0 +1,29 @@ +{ + "config": { + "error": { + "connection_error": "Hiba a csatlakoz\u00e1skor; ellen\u0151rizd a h\u00e1l\u00f3zatot \u00e9s pr\u00f3b\u00e1ld \u00fajra", + "identifier_exists": "Az e-mail c\u00edm m\u00e1r regisztr\u00e1lva van", + "invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok", + "unknown_error": "Ismeretlen hiba, k\u00e9rlek jelentsd a napl\u00f3f\u00e1jlban l\u00e9v\u0151 adatokat" + }, + "step": { + "user": { + "data": { + "password": "Jelsz\u00f3", + "username": "Email c\u00edm" + }, + "description": "K\u00e9rlek, add meg az adataidat.", + "title": "Tesla - Konfigur\u00e1ci\u00f3" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Szkennel\u00e9sek k\u00f6z\u00f6tti m\u00e1sodpercek" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/it.json b/homeassistant/components/tesla/translations/it.json new file mode 100644 index 00000000000..3a77ce669eb --- /dev/null +++ b/homeassistant/components/tesla/translations/it.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Errore durante la connessione; controllare la rete e riprovare", + "identifier_exists": "E-mail gi\u00e0 registrata", + "invalid_credentials": "Credenziali non valide", + "unknown_error": "Errore sconosciuto, si prega di segnalare le informazioni del registro" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Indirizzo E-Mail" + }, + "description": "Si prega di inserire le tue informazioni.", + "title": "Tesla - Configurazione" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Forza il risveglio delle auto all'avvio", + "scan_interval": "Secondi tra le scansioni" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/ko.json b/homeassistant/components/tesla/translations/ko.json new file mode 100644 index 00000000000..24cb45a5c45 --- /dev/null +++ b/homeassistant/components/tesla/translations/ko.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "\uc5f0\uacb0 \uc624\ub958; \ub124\ud2b8\uc6cc\ud06c\ub97c \ud655\uc778\ud558\uace0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694", + "identifier_exists": "\uc774\uba54\uc77c \uc8fc\uc18c\uac00 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "invalid_credentials": "\uc774\uba54\uc77c \uc8fc\uc18c \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unknown_error": "\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uc785\ub2c8\ub2e4. \ub85c\uadf8 \ub0b4\uc6a9\uc744 \uc54c\ub824\uc8fc\uc138\uc694" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc774\uba54\uc77c \uc8fc\uc18c" + }, + "description": "\uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694", + "title": "Tesla - \uad6c\uc131" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "\uc2dc\ub3d9 \uc2dc \ucc28\ub7c9 \uae68\uc6b0\uae30", + "scan_interval": "\uc2a4\uce94 \uac04\uaca9(\ucd08)" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/lb.json b/homeassistant/components/tesla/translations/lb.json new file mode 100644 index 00000000000..4d8fde97eaf --- /dev/null +++ b/homeassistant/components/tesla/translations/lb.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Feeler beim verbannen, Iwwerpr\u00e9ift Netzwierk a prob\u00e9iert nach emol", + "identifier_exists": "E-Mail ass scho registr\u00e9iert", + "invalid_credentials": "Ong\u00eblteg Login Informatioune", + "unknown_error": "Onbekannte Feeler, mellt w.e.g. Logbuch Info" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "E-Mail Adress" + }, + "description": "F\u00ebllt \u00e4r Informatiounen aus.", + "title": "Tesla - Konfiguratioun" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Forc\u00e9ier d'Erw\u00e4chen vun den Autoen beim starten", + "scan_interval": "Sekonnen t\u00ebscht Scannen" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/.translations/lv.json b/homeassistant/components/tesla/translations/lv.json similarity index 100% rename from homeassistant/components/tesla/.translations/lv.json rename to homeassistant/components/tesla/translations/lv.json diff --git a/homeassistant/components/tesla/translations/nl.json b/homeassistant/components/tesla/translations/nl.json new file mode 100644 index 00000000000..02bbd32e417 --- /dev/null +++ b/homeassistant/components/tesla/translations/nl.json @@ -0,0 +1,29 @@ +{ + "config": { + "error": { + "connection_error": "Fout bij verbinden; controleer het netwerk en probeer het opnieuw", + "identifier_exists": "E-mail al geregistreerd", + "invalid_credentials": "Ongeldige inloggegevens", + "unknown_error": "Onbekende fout, meldt u log info" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "E-mailadres" + }, + "description": "Vul alstublieft uw gegevens in.", + "title": "Tesla - Configuratie" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Seconden tussen scans" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/no.json b/homeassistant/components/tesla/translations/no.json new file mode 100644 index 00000000000..1593319c8e1 --- /dev/null +++ b/homeassistant/components/tesla/translations/no.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Feil ved tilkobling; sjekk nettverket og pr\u00f8v p\u00e5 nytt", + "identifier_exists": "E-post er allerede registrert", + "invalid_credentials": "Ugyldig brukerinformasjon", + "unknown_error": "Ukjent feil, Vennligst rapporter informasjon fra Loggen" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "E-postadresse" + }, + "description": "Vennligst skriv inn informasjonen din.", + "title": "Tesla - Konfigurasjon" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Tving biler til \u00e5 v\u00e5kne ved oppstart", + "scan_interval": "Sekunder mellom skanninger" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/pl.json b/homeassistant/components/tesla/translations/pl.json new file mode 100644 index 00000000000..e2a6b6a09c8 --- /dev/null +++ b/homeassistant/components/tesla/translations/pl.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "B\u0142\u0105d po\u0142\u0105czenia; sprawd\u017a sie\u0107 i spr\u00f3buj ponownie", + "identifier_exists": "Adres e-mail jest ju\u017c zarejestrowany.", + "invalid_credentials": "Nieprawid\u0142owe po\u015bwiadczenia", + "unknown_error": "Nieznany b\u0142\u0105d, prosz\u0119 zg\u0142osi\u0107 dane z loga" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Adres e-mail" + }, + "description": "Wprowad\u017a dane", + "title": "Tesla - konfiguracja" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Wymu\u015b wybudzenie samochod\u00f3w podczas uruchamiania", + "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/pt-BR.json b/homeassistant/components/tesla/translations/pt-BR.json new file mode 100644 index 00000000000..c06b4fabf99 --- /dev/null +++ b/homeassistant/components/tesla/translations/pt-BR.json @@ -0,0 +1,20 @@ +{ + "config": { + "error": { + "connection_error": "Erro na conex\u00e3o; verifique a rede e tente novamente", + "identifier_exists": "E-mail j\u00e1 registrado", + "invalid_credentials": "Credenciais inv\u00e1lidas", + "unknown_error": "Erro desconhecido, por favor, relate informa\u00e7\u00f5es do log" + }, + "step": { + "user": { + "data": { + "password": "Senha", + "username": "Endere\u00e7o de e-mail" + }, + "description": "Por favor, insira suas informa\u00e7\u00f5es.", + "title": "Tesla - Configura\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/pt.json b/homeassistant/components/tesla/translations/pt.json new file mode 100644 index 00000000000..0df67a94182 --- /dev/null +++ b/homeassistant/components/tesla/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Endere\u00e7o de e-mail" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/ru.json b/homeassistant/components/tesla/translations/ru.json new file mode 100644 index 00000000000..dae30a669b3 --- /dev/null +++ b/homeassistant/components/tesla/translations/ru.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "\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 \u0441\u0435\u0442\u044c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", + "identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.", + "invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "unknown_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" + }, + "description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.", + "title": "Tesla" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435", + "scan_interval": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 (\u0441\u0435\u043a.)" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/sl.json b/homeassistant/components/tesla/translations/sl.json new file mode 100644 index 00000000000..76890e749d7 --- /dev/null +++ b/homeassistant/components/tesla/translations/sl.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "Napaka pri povezovanju; preverite omre\u017eje in poskusite znova", + "identifier_exists": "E-po\u0161ta je \u017ee registrirana", + "invalid_credentials": "Neveljavne poverilnice", + "unknown_error": "Neznana napaka, sporo\u010dite podatke dnevnika" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "E-po\u0161tni naslov" + }, + "description": "Prosimo, vnesite svoje podatke.", + "title": "Tesla - konfiguracija" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "Vsili zbujanje avtomobila ob zagonu", + "scan_interval": "Sekund med skeniranjem" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/sv.json b/homeassistant/components/tesla/translations/sv.json new file mode 100644 index 00000000000..5eebeef1553 --- /dev/null +++ b/homeassistant/components/tesla/translations/sv.json @@ -0,0 +1,29 @@ +{ + "config": { + "error": { + "connection_error": "Fel vid anslutning; kontrollera n\u00e4tverket och f\u00f6rs\u00f6k igen", + "identifier_exists": "E-post redan registrerad", + "invalid_credentials": "Ogiltiga autentiseringsuppgifter", + "unknown_error": "Ok\u00e4nt fel, var god att rapportera logginformation" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "E-postadress" + }, + "description": "V\u00e4nligen ange din information.", + "title": "Tesla - Konfiguration" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Sekunder mellan skanningar" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/zh-Hant.json b/homeassistant/components/tesla/translations/zh-Hant.json new file mode 100644 index 00000000000..522b42dd500 --- /dev/null +++ b/homeassistant/components/tesla/translations/zh-Hant.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "connection_error": "\u9023\u7dda\u932f\u8aa4\uff1b\u8acb\u6aa2\u5bdf\u7db2\u8def\u5f8c\u518d\u8a66\u4e00\u6b21", + "identifier_exists": "\u90f5\u4ef6\u5df2\u8a3b\u518a", + "invalid_credentials": "\u6191\u8b49\u7121\u6548", + "unknown_error": "\u672a\u77e5\u932f\u8aa4\uff0c\u8acb\u56de\u5831\u7d00\u9304" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" + }, + "description": "\u8acb\u8f38\u5165\u8cc7\u8a0a\u3002", + "title": "Tesla - \u8a2d\u5b9a" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "enable_wake_on_start": "\u65bc\u555f\u52d5\u6642\u5f37\u5236\u559a\u9192\u6c7d\u8eca", + "scan_interval": "\u6383\u63cf\u9593\u9694\u79d2\u6578" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tfiac/manifest.json b/homeassistant/components/tfiac/manifest.json index d0b36598ce5..1e86e6a0218 100644 --- a/homeassistant/components/tfiac/manifest.json +++ b/homeassistant/components/tfiac/manifest.json @@ -3,6 +3,5 @@ "name": "Tfiac", "documentation": "https://www.home-assistant.io/integrations/tfiac", "requirements": ["pytfiac==0.4"], - "dependencies": [], "codeowners": ["@fredrike", "@mellado"] } diff --git a/homeassistant/components/thermoworks_smoke/manifest.json b/homeassistant/components/thermoworks_smoke/manifest.json index a11d3ac98ab..e69b1d40874 100644 --- a/homeassistant/components/thermoworks_smoke/manifest.json +++ b/homeassistant/components/thermoworks_smoke/manifest.json @@ -3,6 +3,5 @@ "name": "ThermoWorks Smoke", "documentation": "https://www.home-assistant.io/integrations/thermoworks_smoke", "requirements": ["stringcase==1.2.0", "thermoworks_smoke==0.1.8"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/thethingsnetwork/manifest.json b/homeassistant/components/thethingsnetwork/manifest.json index d121996cb4a..ffd2291e158 100644 --- a/homeassistant/components/thethingsnetwork/manifest.json +++ b/homeassistant/components/thethingsnetwork/manifest.json @@ -2,7 +2,5 @@ "domain": "thethingsnetwork", "name": "The Things Network", "documentation": "https://www.home-assistant.io/integrations/thethingsnetwork", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"] } diff --git a/homeassistant/components/thethingsnetwork/sensor.py b/homeassistant/components/thethingsnetwork/sensor.py index 3ba58a688fe..35a16d30f32 100644 --- a/homeassistant/components/thethingsnetwork/sensor.py +++ b/homeassistant/components/thethingsnetwork/sensor.py @@ -8,7 +8,7 @@ import async_timeout import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONTENT_TYPE_JSON +from homeassistant.const import CONTENT_TYPE_JSON, HTTP_NOT_FOUND from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -139,7 +139,7 @@ class TtnDataStorage: _LOGGER.error("Not authorized for Application ID: %s", self._app_id) return None - if status == 404: + if status == HTTP_NOT_FOUND: _LOGGER.error("Application ID is not available: %s", self._app_id) return None diff --git a/homeassistant/components/thingspeak/manifest.json b/homeassistant/components/thingspeak/manifest.json index 9e6403e6eaf..e22dfeb9166 100644 --- a/homeassistant/components/thingspeak/manifest.json +++ b/homeassistant/components/thingspeak/manifest.json @@ -3,6 +3,5 @@ "name": "ThingSpeak", "documentation": "https://www.home-assistant.io/integrations/thingspeak", "requirements": ["thingspeak==1.0.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/thinkingcleaner/manifest.json b/homeassistant/components/thinkingcleaner/manifest.json index c82859893b2..4515f7f4ed3 100644 --- a/homeassistant/components/thinkingcleaner/manifest.json +++ b/homeassistant/components/thinkingcleaner/manifest.json @@ -3,6 +3,5 @@ "name": "Thinking Cleaner", "documentation": "https://www.home-assistant.io/integrations/thinkingcleaner", "requirements": ["pythinkingcleaner==0.0.3"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/thinkingcleaner/switch.py b/homeassistant/components/thinkingcleaner/switch.py index 172951ed1ef..6ef1a6f9556 100644 --- a/homeassistant/components/thinkingcleaner/switch.py +++ b/homeassistant/components/thinkingcleaner/switch.py @@ -98,7 +98,7 @@ class ThinkingCleanerSwitch(ToggleEntity): @property def name(self): """Return the name of the sensor.""" - return self._tc_object.name + " " + SWITCH_TYPES[self.type][0] + return f"{self._tc_object.name} {SWITCH_TYPES[self.type][0]}" @property def is_on(self): diff --git a/homeassistant/components/thomson/device_tracker.py b/homeassistant/components/thomson/device_tracker.py index 1f3fda6cc72..05e7a49b625 100644 --- a/homeassistant/components/thomson/device_tracker.py +++ b/homeassistant/components/thomson/device_tracker.py @@ -98,9 +98,9 @@ class ThomsonDeviceScanner(DeviceScanner): telnet.read_until(b"Password : ") telnet.write((self.password + "\r\n").encode("ascii")) telnet.read_until(b"=>") - telnet.write(("hostmgr list\r\n").encode("ascii")) + telnet.write(b"hostmgr list\r\n") devices_result = telnet.read_until(b"=>").split(b"\r\n") - telnet.write("exit\r\n".encode("ascii")) + telnet.write(b"exit\r\n") except EOFError: _LOGGER.exception("Unexpected response from router") return diff --git a/homeassistant/components/thomson/manifest.json b/homeassistant/components/thomson/manifest.json index ac07a2f77ad..cca5b05854b 100644 --- a/homeassistant/components/thomson/manifest.json +++ b/homeassistant/components/thomson/manifest.json @@ -2,7 +2,5 @@ "domain": "thomson", "name": "Thomson", "documentation": "https://www.home-assistant.io/integrations/thomson", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/threshold/manifest.json b/homeassistant/components/threshold/manifest.json index 939c1095c2b..6cf871ee8a5 100644 --- a/homeassistant/components/threshold/manifest.json +++ b/homeassistant/components/threshold/manifest.json @@ -2,8 +2,6 @@ "domain": "threshold", "name": "Threshold", "documentation": "https://www.home-assistant.io/integrations/threshold", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/tibber/manifest.json b/homeassistant/components/tibber/manifest.json index 48ff76a2b34..78249a96291 100644 --- a/homeassistant/components/tibber/manifest.json +++ b/homeassistant/components/tibber/manifest.json @@ -2,8 +2,7 @@ "domain": "tibber", "name": "Tibber", "documentation": "https://www.home-assistant.io/integrations/tibber", - "requirements": ["pyTibber==0.13.6"], - "dependencies": [], + "requirements": ["pyTibber==0.13.8"], "codeowners": ["@danielhiversen"], "quality_scale": "silver" } diff --git a/homeassistant/components/tibber/sensor.py b/homeassistant/components/tibber/sensor.py index a5a7f320d93..36f1a65222c 100644 --- a/homeassistant/components/tibber/sensor.py +++ b/homeassistant/components/tibber/sensor.py @@ -5,6 +5,7 @@ import logging import aiohttp +from homeassistant.const import POWER_WATT from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle, dt as dt_util @@ -109,7 +110,7 @@ class TibberSensorElPrice(TibberSensor): @property def name(self): """Return the name of the sensor.""" - return "Electricity price {}".format(self._name) + return f"Electricity price {self._name}" @property def icon(self): @@ -169,7 +170,7 @@ class TibberSensorRT(TibberSensor): continue self._device_state_attributes[key] = value - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def available(self): @@ -179,7 +180,7 @@ class TibberSensorRT(TibberSensor): @property def name(self): """Return the name of the sensor.""" - return "Real time consumption {}".format(self._name) + return f"Real time consumption {self._name}" @property def should_poll(self): @@ -194,7 +195,7 @@ class TibberSensorRT(TibberSensor): @property def unit_of_measurement(self): """Return the unit of measurement of this entity.""" - return "W" + return POWER_WATT @property def unique_id(self): diff --git a/homeassistant/components/tikteck/manifest.json b/homeassistant/components/tikteck/manifest.json index 2f6cec846fd..4b64d385213 100644 --- a/homeassistant/components/tikteck/manifest.json +++ b/homeassistant/components/tikteck/manifest.json @@ -3,6 +3,5 @@ "name": "Tikteck", "documentation": "https://www.home-assistant.io/integrations/tikteck", "requirements": ["tikteck==0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tile/device_tracker.py b/homeassistant/components/tile/device_tracker.py index 8bc4fb11cdf..6cfe6121ccb 100644 --- a/homeassistant/components/tile/device_tracker.py +++ b/homeassistant/components/tile/device_tracker.py @@ -121,7 +121,7 @@ class TileScanner: for tile in tiles: await self._async_see( - dev_id="tile_{0}".format(slugify(tile["tile_uuid"])), + dev_id="tile_{}".format(slugify(tile["tile_uuid"])), gps=( tile["last_tile_state"]["latitude"], tile["last_tile_state"]["longitude"], diff --git a/homeassistant/components/tile/manifest.json b/homeassistant/components/tile/manifest.json index b3f032e95e8..553c1e50823 100644 --- a/homeassistant/components/tile/manifest.json +++ b/homeassistant/components/tile/manifest.json @@ -3,6 +3,5 @@ "name": "Tile", "documentation": "https://www.home-assistant.io/integrations/tile", "requirements": ["pytile==3.0.1"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/time_date/manifest.json b/homeassistant/components/time_date/manifest.json index 9acac2fa4bc..e3f5c6d3cf4 100644 --- a/homeassistant/components/time_date/manifest.json +++ b/homeassistant/components/time_date/manifest.json @@ -2,8 +2,6 @@ "domain": "time_date", "name": "Time & Date", "documentation": "https://www.home-assistant.io/integrations/time_date", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/time_date/sensor.py b/homeassistant/components/time_date/sensor.py index 1deb564133e..6081f1dfca6 100644 --- a/homeassistant/components/time_date/sensor.py +++ b/homeassistant/components/time_date/sensor.py @@ -136,7 +136,7 @@ class TimeDateSensor(Entity): def point_in_time_listener(self, time_date): """Get the latest data and update state.""" self._update_internal_state(time_date) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async_track_point_in_utc_time( self.hass, self.point_in_time_listener, self.get_next_interval() ) diff --git a/homeassistant/components/timer/__init__.py b/homeassistant/components/timer/__init__.py index 5172322a63d..e47ac69be5b 100644 --- a/homeassistant/components/timer/__init__.py +++ b/homeassistant/components/timer/__init__.py @@ -201,6 +201,11 @@ class Timer(RestoreEntity): """If entity should be polled.""" return False + @property + def force_update(self) -> bool: + """Return True to fix restart issues.""" + return True + @property def name(self): """Return name of the timer.""" diff --git a/homeassistant/components/timer/manifest.json b/homeassistant/components/timer/manifest.json index 6aa33f743cd..19748332221 100644 --- a/homeassistant/components/timer/manifest.json +++ b/homeassistant/components/timer/manifest.json @@ -2,8 +2,6 @@ "domain": "timer", "name": "Timer", "documentation": "https://www.home-assistant.io/integrations/timer", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/timer/reproduce_state.py b/homeassistant/components/timer/reproduce_state.py index c765ed7da9c..71abb0bfd71 100644 --- a/homeassistant/components/timer/reproduce_state.py +++ b/homeassistant/components/timer/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Timer state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import Context, State @@ -24,7 +24,11 @@ VALID_STATES = {STATUS_IDLE, STATUS_ACTIVE, STATUS_PAUSED} async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -62,9 +66,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Timer states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/timer/services.yaml b/homeassistant/components/timer/services.yaml index b299aaa8185..cd810c21de5 100644 --- a/homeassistant/components/timer/services.yaml +++ b/homeassistant/components/timer/services.yaml @@ -6,10 +6,10 @@ start: fields: entity_id: description: Entity id of the timer to start. [optional] - example: 'timer.timer0' + example: "timer.timer0" duration: description: Duration the timer requires to finish. [optional] - example: '00:01:00 or 60' + example: "00:01:00 or 60" pause: description: Pause a timer. @@ -17,7 +17,7 @@ pause: fields: entity_id: description: Entity id of the timer to pause. [optional] - example: 'timer.timer0' + example: "timer.timer0" cancel: description: Cancel a timer. @@ -25,7 +25,7 @@ cancel: fields: entity_id: description: Entity id of the timer to cancel. [optional] - example: 'timer.timer0' + example: "timer.timer0" finish: description: Finish a timer. @@ -33,4 +33,4 @@ finish: fields: entity_id: description: Entity id of the timer to finish. [optional] - example: 'timer.timer0' \ No newline at end of file + example: "timer.timer0" diff --git a/homeassistant/components/timer/strings.json b/homeassistant/components/timer/strings.json new file mode 100644 index 00000000000..985cea0aa6e --- /dev/null +++ b/homeassistant/components/timer/strings.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "[%key:common::state::active%]", + "idle": "[%key:common::state::idle%]", + "paused": "[%key:common::state::paused%]" + } + } +} diff --git a/homeassistant/components/timer/translations/af.json b/homeassistant/components/timer/translations/af.json new file mode 100644 index 00000000000..4db39b9e2de --- /dev/null +++ b/homeassistant/components/timer/translations/af.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktief", + "idle": "onaktief", + "paused": "Onderbreek" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/ar.json b/homeassistant/components/timer/translations/ar.json new file mode 100644 index 00000000000..6f2665b03df --- /dev/null +++ b/homeassistant/components/timer/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0645\u0641\u0639\u0644", + "idle": "\u062e\u0627\u0645\u0644", + "paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/bg.json b/homeassistant/components/timer/translations/bg.json new file mode 100644 index 00000000000..c471d3eff18 --- /dev/null +++ b/homeassistant/components/timer/translations/bg.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0430\u043a\u0442\u0438\u0432\u0435\u043d", + "idle": "\u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449", + "paused": "\u0432 \u043f\u0430\u0443\u0437\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/ca.json b/homeassistant/components/timer/translations/ca.json new file mode 100644 index 00000000000..b5e9555940d --- /dev/null +++ b/homeassistant/components/timer/translations/ca.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Actiu", + "idle": "inactiu", + "paused": "Pausat" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/cs.json b/homeassistant/components/timer/translations/cs.json new file mode 100644 index 00000000000..bd6f2fd5374 --- /dev/null +++ b/homeassistant/components/timer/translations/cs.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktivn\u00ed", + "idle": "ne\u010dinn\u00e9", + "paused": "pozastaveno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/cy.json b/homeassistant/components/timer/translations/cy.json new file mode 100644 index 00000000000..e81cb4d8025 --- /dev/null +++ b/homeassistant/components/timer/translations/cy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "gweithredol", + "idle": "segur", + "paused": "wedi rhewi" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/da.json b/homeassistant/components/timer/translations/da.json new file mode 100644 index 00000000000..962798e3653 --- /dev/null +++ b/homeassistant/components/timer/translations/da.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiv", + "idle": "inaktiv", + "paused": "pause" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/de.json b/homeassistant/components/timer/translations/de.json new file mode 100644 index 00000000000..cd35c9bac5e --- /dev/null +++ b/homeassistant/components/timer/translations/de.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiv", + "idle": "Leerlauf", + "paused": "pausiert" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/el.json b/homeassistant/components/timer/translations/el.json new file mode 100644 index 00000000000..ec4c4ab42e8 --- /dev/null +++ b/homeassistant/components/timer/translations/el.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc", + "idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1", + "paused": "\u03c3\u03b5 \u03c0\u03b1\u03cd\u03c3\u03b7" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/en.json b/homeassistant/components/timer/translations/en.json new file mode 100644 index 00000000000..c76dcd29980 --- /dev/null +++ b/homeassistant/components/timer/translations/en.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Active", + "idle": "Idle", + "paused": "Paused" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/es-419.json b/homeassistant/components/timer/translations/es-419.json new file mode 100644 index 00000000000..b180c81a18e --- /dev/null +++ b/homeassistant/components/timer/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "activo", + "idle": "inactivo", + "paused": "pausado" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/es.json b/homeassistant/components/timer/translations/es.json new file mode 100644 index 00000000000..b180c81a18e --- /dev/null +++ b/homeassistant/components/timer/translations/es.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "activo", + "idle": "inactivo", + "paused": "pausado" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/et.json b/homeassistant/components/timer/translations/et.json new file mode 100644 index 00000000000..9a1260e633e --- /dev/null +++ b/homeassistant/components/timer/translations/et.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiivne", + "idle": "ootel", + "paused": "peatatud" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/fa.json b/homeassistant/components/timer/translations/fa.json new file mode 100644 index 00000000000..0c4023f2a58 --- /dev/null +++ b/homeassistant/components/timer/translations/fa.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0641\u0639\u0627\u0644", + "idle": "\u0628\u06cc\u06a9\u0627\u0631 ", + "paused": "\u0645\u062a\u0648\u0642\u0641 \u0634\u062f" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/fi.json b/homeassistant/components/timer/translations/fi.json new file mode 100644 index 00000000000..d617eaece52 --- /dev/null +++ b/homeassistant/components/timer/translations/fi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiivinen", + "idle": "Lepotilassa", + "paused": "Pys\u00e4ytetty" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/fr.json b/homeassistant/components/timer/translations/fr.json new file mode 100644 index 00000000000..7c15fdc8dd6 --- /dev/null +++ b/homeassistant/components/timer/translations/fr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "actif", + "idle": "en veille", + "paused": "en pause" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/he.json b/homeassistant/components/timer/translations/he.json new file mode 100644 index 00000000000..2203ca93e5b --- /dev/null +++ b/homeassistant/components/timer/translations/he.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u05e4\u05e2\u05d9\u05dc", + "idle": "\u05dc\u05d0 \u05e4\u05e2\u05d9\u05dc", + "paused": "\u05de\u05d5\u05e9\u05d4\u05d4" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/hi.json b/homeassistant/components/timer/translations/hi.json new file mode 100644 index 00000000000..9504ef064ed --- /dev/null +++ b/homeassistant/components/timer/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0938\u0915\u094d\u0930\u093f\u092f", + "idle": "\u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f", + "paused": "\u0935\u093f\u0930\u093e\u092e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/hr.json b/homeassistant/components/timer/translations/hr.json new file mode 100644 index 00000000000..07f49a08a72 --- /dev/null +++ b/homeassistant/components/timer/translations/hr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktivan", + "idle": "neaktivan", + "paused": "pauzirano" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/hu.json b/homeassistant/components/timer/translations/hu.json new file mode 100644 index 00000000000..0f7314e662e --- /dev/null +++ b/homeassistant/components/timer/translations/hu.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Akt\u00edv", + "idle": "T\u00e9tlen", + "paused": "Sz\u00fcnetel" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/hy.json b/homeassistant/components/timer/translations/hy.json new file mode 100644 index 00000000000..162f8283faa --- /dev/null +++ b/homeassistant/components/timer/translations/hy.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0561\u056f\u057f\u056b\u057e", + "idle": "\u057a\u0561\u0580\u0561\u057a", + "paused": "\u0564\u0561\u0564\u0561\u0580 " + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/id.json b/homeassistant/components/timer/translations/id.json new file mode 100644 index 00000000000..91a96ca0d4b --- /dev/null +++ b/homeassistant/components/timer/translations/id.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Aktif", + "idle": "Siaga", + "paused": "Jeda" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/is.json b/homeassistant/components/timer/translations/is.json new file mode 100644 index 00000000000..1165d50eafe --- /dev/null +++ b/homeassistant/components/timer/translations/is.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "virkur", + "idle": "a\u00f0ger\u00f0alaus", + "paused": "\u00ed bi\u00f0" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/it.json b/homeassistant/components/timer/translations/it.json new file mode 100644 index 00000000000..464a2feb501 --- /dev/null +++ b/homeassistant/components/timer/translations/it.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "attivo", + "idle": "inattivo", + "paused": "in pausa" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/ko.json b/homeassistant/components/timer/translations/ko.json new file mode 100644 index 00000000000..5350e64524e --- /dev/null +++ b/homeassistant/components/timer/translations/ko.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\ud65c\uc131\ud654", + "idle": "\ub300\uae30\uc911", + "paused": "\uc77c\uc2dc\uc911\uc9c0\ub428" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/lb.json b/homeassistant/components/timer/translations/lb.json new file mode 100644 index 00000000000..b0c7def7821 --- /dev/null +++ b/homeassistant/components/timer/translations/lb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Aktiv", + "idle": "Waart", + "paused": "Pauseiert" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/lt.json b/homeassistant/components/timer/translations/lt.json new file mode 100644 index 00000000000..71332a925ad --- /dev/null +++ b/homeassistant/components/timer/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "active": "aktyvus", + "paused": "pristabdytas" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/lv.json b/homeassistant/components/timer/translations/lv.json new file mode 100644 index 00000000000..257ac4bffc3 --- /dev/null +++ b/homeassistant/components/timer/translations/lv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "akt\u012bvs", + "idle": "d\u012bkst\u0101ve", + "paused": "aptur\u0113ts" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/nb.json b/homeassistant/components/timer/translations/nb.json new file mode 100644 index 00000000000..56d06958b0f --- /dev/null +++ b/homeassistant/components/timer/translations/nb.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiv", + "idle": "inaktiv", + "paused": "pauset" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/nl.json b/homeassistant/components/timer/translations/nl.json new file mode 100644 index 00000000000..1cfd9c72c46 --- /dev/null +++ b/homeassistant/components/timer/translations/nl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Actief", + "idle": "Inactief", + "paused": "Gepauzeerd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/nn.json b/homeassistant/components/timer/translations/nn.json new file mode 100644 index 00000000000..2b9fa275095 --- /dev/null +++ b/homeassistant/components/timer/translations/nn.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiv", + "idle": "tomgang", + "paused": "pausa" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/pl.json b/homeassistant/components/timer/translations/pl.json new file mode 100644 index 00000000000..e077327fa21 --- /dev/null +++ b/homeassistant/components/timer/translations/pl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktywny", + "idle": "nieaktywny", + "paused": "wstrzymany" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/pt-BR.json b/homeassistant/components/timer/translations/pt-BR.json new file mode 100644 index 00000000000..0e37123d3ef --- /dev/null +++ b/homeassistant/components/timer/translations/pt-BR.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "ativo", + "idle": "ocioso", + "paused": "Pausado" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/pt.json b/homeassistant/components/timer/translations/pt.json new file mode 100644 index 00000000000..a49163aed8c --- /dev/null +++ b/homeassistant/components/timer/translations/pt.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "ativo", + "idle": "Em espera", + "paused": "Em pausa" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/ro.json b/homeassistant/components/timer/translations/ro.json new file mode 100644 index 00000000000..3ea74968c43 --- /dev/null +++ b/homeassistant/components/timer/translations/ro.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "activ", + "idle": "inactiv", + "paused": "\u00cen pauz\u0103" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/ru.json b/homeassistant/components/timer/translations/ru.json new file mode 100644 index 00000000000..506b322ceb9 --- /dev/null +++ b/homeassistant/components/timer/translations/ru.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u041e\u0442\u0441\u0447\u0451\u0442", + "idle": "\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435", + "paused": "\u041f\u0430\u0443\u0437\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/sk.json b/homeassistant/components/timer/translations/sk.json new file mode 100644 index 00000000000..529c5c69144 --- /dev/null +++ b/homeassistant/components/timer/translations/sk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "akt\u00edvny", + "idle": "ne\u010dinn\u00fd", + "paused": "pozastaven\u00fd" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/sl.json b/homeassistant/components/timer/translations/sl.json new file mode 100644 index 00000000000..c599fdbd333 --- /dev/null +++ b/homeassistant/components/timer/translations/sl.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiven", + "idle": "V pripravljenosti", + "paused": "Na pavzi" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/sr.json b/homeassistant/components/timer/translations/sr.json new file mode 100644 index 00000000000..f628ba69ba0 --- /dev/null +++ b/homeassistant/components/timer/translations/sr.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "active": "\u0443\u043a\u0459\u0443\u0447\u0435\u043d", + "idle": "\u043d\u0435\u0430\u043a\u0442\u043d\u0430 \u0447\u0435\u043a\u0430\u045a\u0443" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/sv.json b/homeassistant/components/timer/translations/sv.json new file mode 100644 index 00000000000..296883335ab --- /dev/null +++ b/homeassistant/components/timer/translations/sv.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "aktiv", + "idle": "inaktiv", + "paused": "pausad" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/th.json b/homeassistant/components/timer/translations/th.json new file mode 100644 index 00000000000..ab4a73b6f17 --- /dev/null +++ b/homeassistant/components/timer/translations/th.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e39\u0e48", + "idle": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "paused": "\u0e2b\u0e22\u0e38\u0e14\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/tr.json b/homeassistant/components/timer/translations/tr.json new file mode 100644 index 00000000000..0711eb71f7a --- /dev/null +++ b/homeassistant/components/timer/translations/tr.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "Aktif", + "idle": "Bo\u015fta", + "paused": "Durduruldu" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/uk.json b/homeassistant/components/timer/translations/uk.json new file mode 100644 index 00000000000..df690bded93 --- /dev/null +++ b/homeassistant/components/timer/translations/uk.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439", + "idle": "\u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f", + "paused": "\u043d\u0430 \u043f\u0430\u0443\u0437\u0456" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/vi.json b/homeassistant/components/timer/translations/vi.json new file mode 100644 index 00000000000..82357c2fedd --- /dev/null +++ b/homeassistant/components/timer/translations/vi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "ho\u1ea1t \u0111\u1ed9ng", + "idle": "nh\u00e0n r\u1ed7i", + "paused": "t\u1ea1m d\u1eebng" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/zh-Hans.json b/homeassistant/components/timer/translations/zh-Hans.json new file mode 100644 index 00000000000..4fb53f8da60 --- /dev/null +++ b/homeassistant/components/timer/translations/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u6fc0\u6d3b", + "idle": "\u7a7a\u95f2", + "paused": "\u6682\u505c" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/zh-Hant.json b/homeassistant/components/timer/translations/zh-Hant.json new file mode 100644 index 00000000000..9867885682b --- /dev/null +++ b/homeassistant/components/timer/translations/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u555f\u7528", + "idle": "\u66ab\u505c", + "paused": "\u66ab\u505c" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tmb/manifest.json b/homeassistant/components/tmb/manifest.json index bb76b3193fc..fb4270f641d 100644 --- a/homeassistant/components/tmb/manifest.json +++ b/homeassistant/components/tmb/manifest.json @@ -2,11 +2,6 @@ "domain": "tmb", "name": "Transports Metropolitans de Barcelona", "documentation": "https://www.home-assistant.io/integrations/tmb", - "requirements": [ - "tmb==0.0.4" - ], - "dependencies": [], - "codeowners": [ - "@alemuro" - ] -} \ No newline at end of file + "requirements": ["tmb==0.0.4"], + "codeowners": ["@alemuro"] +} diff --git a/homeassistant/components/tod/binary_sensor.py b/homeassistant/components/tod/binary_sensor.py index 72507b3d148..ee9969c9974 100644 --- a/homeassistant/components/tod/binary_sensor.py +++ b/homeassistant/components/tod/binary_sensor.py @@ -234,7 +234,7 @@ class TodSensor(BinarySensorDevice): def _point_in_time_listener(self, now): """Run when the state of the sensor should be updated.""" self._calculate_next_update() - self.async_schedule_update_ha_state() + self.async_write_ha_state() async_track_point_in_utc_time( self.hass, self._point_in_time_listener, self.next_update diff --git a/homeassistant/components/tod/manifest.json b/homeassistant/components/tod/manifest.json index 8a3b3bc8540..d5f62562f83 100644 --- a/homeassistant/components/tod/manifest.json +++ b/homeassistant/components/tod/manifest.json @@ -2,8 +2,6 @@ "domain": "tod", "name": "Times of the Day", "documentation": "https://www.home-assistant.io/integrations/tod", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/todoist/manifest.json b/homeassistant/components/todoist/manifest.json index d9f14172ff1..eac7f761c50 100644 --- a/homeassistant/components/todoist/manifest.json +++ b/homeassistant/components/todoist/manifest.json @@ -3,6 +3,5 @@ "name": "Todoist", "documentation": "https://www.home-assistant.io/integrations/todoist", "requirements": ["todoist-python==8.0.0"], - "dependencies": [], "codeowners": ["@boralyl"] } diff --git a/homeassistant/components/todoist/services.yaml b/homeassistant/components/todoist/services.yaml index 3382e27693d..186b15a18a9 100644 --- a/homeassistant/components/todoist/services.yaml +++ b/homeassistant/components/todoist/services.yaml @@ -22,4 +22,3 @@ new_task: due_date: description: The day this task is due, in format YYYY-MM-DD. example: "2019-10-22" - diff --git a/homeassistant/components/tomato/device_tracker.py b/homeassistant/components/tomato/device_tracker.py index 5a5f1b1985b..873da5a7864 100644 --- a/homeassistant/components/tomato/device_tracker.py +++ b/homeassistant/components/tomato/device_tracker.py @@ -18,6 +18,7 @@ from homeassistant.const import ( CONF_SSL, CONF_USERNAME, CONF_VERIFY_SSL, + HTTP_OK, ) import homeassistant.helpers.config_validation as cv @@ -102,7 +103,7 @@ class TomatoDeviceScanner(DeviceScanner): # Calling and parsing the Tomato api here. We only need the # wldev and dhcpd_lease values. - if response.status_code == 200: + if response.status_code == HTTP_OK: for param, value in self.parse_api_pattern.findall(response.text): @@ -113,10 +114,7 @@ class TomatoDeviceScanner(DeviceScanner): if response.status_code == 401: # Authentication error _LOGGER.exception( - ( - "Failed to authenticate, " - "please check your username and password" - ) + "Failed to authenticate, please check your username and password" ) return False diff --git a/homeassistant/components/tomato/manifest.json b/homeassistant/components/tomato/manifest.json index 5f6584ce250..54dd37a63db 100644 --- a/homeassistant/components/tomato/manifest.json +++ b/homeassistant/components/tomato/manifest.json @@ -2,7 +2,5 @@ "domain": "tomato", "name": "Tomato", "documentation": "https://www.home-assistant.io/integrations/tomato", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/toon/.translations/bg.json b/homeassistant/components/toon/.translations/bg.json deleted file mode 100644 index 0de9452b3cd..00000000000 --- a/homeassistant/components/toon/.translations/bg.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u044f\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d.", - "client_secret": "\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u0430 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430.", - "no_agreements": "\u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0444\u0438\u043b \u043d\u044f\u043c\u0430 Toon \u0434\u0438\u0441\u043f\u043b\u0435\u0438.", - "no_app": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Toon, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435] (https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f." - }, - "error": { - "credentials": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0441\u0430 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438.", - "display_exists": "\u0418\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d." - }, - "step": { - "authenticate": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "tenant": "\u041d\u0430\u0435\u043c\u0430\u0442\u0435\u043b", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "description": "\u0423\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0438\u044f Eneco Toon \u043f\u0440\u043e\u0444\u0438\u043b (\u043d\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u0446\u0438).", - "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f \u0430\u043a\u0430\u0443\u043d\u0442 \u0432 \u0422\u043e\u043e\u043d" - }, - "display": { - "data": { - "display": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439" - }, - "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 Toon, \u0441 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435.", - "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/ca.json b/homeassistant/components/toon/.translations/ca.json deleted file mode 100644 index 0a88b82f829..00000000000 --- a/homeassistant/components/toon/.translations/ca.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "L'identificador de client de la configuraci\u00f3 no \u00e9s v\u00e0lid.", - "client_secret": "El codi secret de client de la configuraci\u00f3 no \u00e9s v\u00e0lid.", - "no_agreements": "Aquest compte no t\u00e9 pantalles Toon.", - "no_app": "Has de configurar Toon abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "S'ha produ\u00eft un error inesperat durant l'autenticaci\u00f3." - }, - "error": { - "credentials": "Les credencials proporcionades no s\u00f3n v\u00e0lides.", - "display_exists": "La pantalla seleccionada ja est\u00e0 configurada." - }, - "step": { - "authenticate": { - "data": { - "password": "Contrasenya", - "tenant": "Tenant", - "username": "Nom d'usuari" - }, - "description": "Autentica't amb el teu compte d'Eneco Toon (no el compte de desenvolupador).", - "title": "Enlla\u00e7ar compte de Toon" - }, - "display": { - "data": { - "display": "Tria la visualitzaci\u00f3" - }, - "description": "Selecciona la pantalla Toon amb la qual vols connectar-te.", - "title": "Selecci\u00f3 de pantalla" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/da.json b/homeassistant/components/toon/.translations/da.json deleted file mode 100644 index e4f73bc7c6b..00000000000 --- a/homeassistant/components/toon/.translations/da.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Klient-id'et fra konfigurationen er ugyldigt.", - "client_secret": "Klientens hemmelighed fra konfigurationen er ugyldig.", - "no_agreements": "Denne konto har ingen Toon-sk\u00e6rme.", - "no_app": "Du skal konfigurere Toon f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Der opstod en uventet fejl under godkendelse." - }, - "error": { - "credentials": "De angivne legitimationsoplysninger er ugyldige.", - "display_exists": "Den valgte sk\u00e6rm er allerede konfigureret." - }, - "step": { - "authenticate": { - "data": { - "password": "Adgangskode", - "tenant": "Tenant", - "username": "Brugernavn" - }, - "description": "Godkend med din Eneco Toon-konto (ikke udviklerkontoen).", - "title": "Forbind din Toon-konto" - }, - "display": { - "data": { - "display": "V\u00e6lg sk\u00e6rm" - }, - "description": "V\u00e6lg den Toon sk\u00e6rm, du vil oprette forbindelse til.", - "title": "V\u00e6lg sk\u00e6rm" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/de.json b/homeassistant/components/toon/.translations/de.json deleted file mode 100644 index cbcfd5d4adc..00000000000 --- a/homeassistant/components/toon/.translations/de.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Die Client-ID aus der Konfiguration ist ung\u00fcltig.", - "client_secret": "Das Client-Secret aus der Konfiguration ist ung\u00fcltig.", - "no_agreements": "Dieses Konto hat keine Toon-Anzeigen.", - "no_app": "Toon muss konfiguriert werden, bevor die Authentifizierung durchgef\u00fchrt werden kann. [Lies bitte die Anleitung](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Beim Authentifizieren ist ein unerwarteter Fehler aufgetreten." - }, - "error": { - "credentials": "Die angegebenen Anmeldeinformationen sind ung\u00fcltig.", - "display_exists": "Die ausgew\u00e4hlte Anzeige ist bereits konfiguriert." - }, - "step": { - "authenticate": { - "data": { - "password": "Passwort", - "tenant": "Tenant", - "username": "Benutzername" - }, - "description": "Authentifiziere dich mit deinem Eneco Toon-Konto (nicht dem Entwicklerkonto).", - "title": "Verkn\u00fcpfe dein Toon-Konto" - }, - "display": { - "data": { - "display": "Anzeige w\u00e4hlen" - }, - "description": "W\u00e4hle die Toon-Anzeige aus, die verbunden werden soll.", - "title": "Anzeige ausw\u00e4hlen" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/en.json b/homeassistant/components/toon/.translations/en.json deleted file mode 100644 index 7d7d6c73e16..00000000000 --- a/homeassistant/components/toon/.translations/en.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "The client ID from the configuration is invalid.", - "client_secret": "The client secret from the configuration is invalid.", - "no_agreements": "This account has no Toon displays.", - "no_app": "You need to configure Toon before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Unexpected error occurred, while authenticating." - }, - "error": { - "credentials": "The provided credentials are invalid.", - "display_exists": "The selected display is already configured." - }, - "step": { - "authenticate": { - "data": { - "password": "Password", - "tenant": "Tenant", - "username": "Username" - }, - "description": "Authenticate with your Eneco Toon account (not the developer account).", - "title": "Link your Toon account" - }, - "display": { - "data": { - "display": "Choose display" - }, - "description": "Select the Toon display to connect with.", - "title": "Select display" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/es-419.json b/homeassistant/components/toon/.translations/es-419.json deleted file mode 100644 index 598bc77aee9..00000000000 --- a/homeassistant/components/toon/.translations/es-419.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "config": { - "abort": { - "no_agreements": "Esta cuenta no tiene pantallas Toon.", - "unknown_auth_fail": "Ocurri\u00f3 un error inesperado, mientras se autenticaba." - }, - "error": { - "credentials": "Las credenciales proporcionadas no son v\u00e1lidas.", - "display_exists": "La pantalla seleccionada ya est\u00e1 configurada." - }, - "step": { - "authenticate": { - "data": { - "password": "Contrase\u00f1a", - "username": "Nombre de usuario" - }, - "title": "Vincula tu cuenta de Toon" - }, - "display": { - "data": { - "display": "Elegir pantalla" - }, - "description": "Seleccione la pantalla Toon para conectarse.", - "title": "Seleccionar pantalla" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/es.json b/homeassistant/components/toon/.translations/es.json deleted file mode 100644 index db5745ca090..00000000000 --- a/homeassistant/components/toon/.translations/es.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "El ID de cliente en la configuraci\u00f3n no es v\u00e1lido.", - "client_secret": "El secreto de la configuraci\u00f3n no es v\u00e1lido.", - "no_agreements": "Esta cuenta no tiene pantallas Toon.", - "no_app": "Es necesario configurar Toon antes de poder autenticarse con \u00e9l. [Por favor, lee las instrucciones](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Se ha producido un error inesperado al autenticar." - }, - "error": { - "credentials": "Las credenciales proporcionadas no son v\u00e1lidas.", - "display_exists": "La pantalla seleccionada ya est\u00e1 configurada." - }, - "step": { - "authenticate": { - "data": { - "password": "Contrase\u00f1a", - "tenant": "Inquilino", - "username": "Nombre de usuario" - }, - "description": "Identif\u00edcate con tu cuenta de Eneco Toon (no con la cuenta de desarrollador).", - "title": "Vincular tu cuenta Toon" - }, - "display": { - "data": { - "display": "Elige una pantalla" - }, - "description": "Selecciona la pantalla Toon que quieres conectar.", - "title": "Seleccionar pantalla" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/fr.json b/homeassistant/components/toon/.translations/fr.json deleted file mode 100644 index 7c41cdc0d24..00000000000 --- a/homeassistant/components/toon/.translations/fr.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "L'ID client de la configuration n'est pas valide.", - "client_secret": "Le client secret de la configuration n'est pas valide.", - "no_agreements": "Ce compte n'a pas d'affichages Toon.", - "no_app": "Vous devez configurer Toon avant de pouvoir vous authentifier avec celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Une erreur inattendue s'est produite lors de l'authentification." - }, - "error": { - "credentials": "Les informations d'identification fournies ne sont pas valides.", - "display_exists": "L'affichage s\u00e9lectionn\u00e9 est d\u00e9j\u00e0 configur\u00e9." - }, - "step": { - "authenticate": { - "data": { - "password": "Mot de passe", - "tenant": "Locataire", - "username": "Nom d'utilisateur" - }, - "description": "Authentifiez-vous avec votre compte Eneco Toon (pas le compte d\u00e9veloppeur).", - "title": "Lier un compte Toon" - }, - "display": { - "data": { - "display": "Choisissez l'affichage" - }, - "description": "S\u00e9lectionnez l'affichage Toon avec lequel vous connecter.", - "title": "S\u00e9lectionnez l'affichage" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/it.json b/homeassistant/components/toon/.translations/it.json deleted file mode 100644 index 79349135581..00000000000 --- a/homeassistant/components/toon/.translations/it.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "L'ID client dalla configurazione non \u00e8 valido.", - "client_secret": "Il client segreto della configurazione non \u00e8 valido.", - "no_agreements": "Questo account non ha display Toon.", - "no_app": "\u00c8 necessario configurare Toon prima di poter eseguire l'autenticazione con esso. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Si \u00e8 verificato un errore imprevisto durante l'autenticazione." - }, - "error": { - "credentials": "Le credenziali fornite non sono valide.", - "display_exists": "Il display selezionato \u00e8 gi\u00e0 configurato." - }, - "step": { - "authenticate": { - "data": { - "password": "Password", - "tenant": "Inquilino", - "username": "Nome utente" - }, - "description": "Autenticati con il tuo account Eneco Toon (non l'account sviluppatore).", - "title": "Collega il tuo account Toon" - }, - "display": { - "data": { - "display": "Seleziona il display" - }, - "description": "Seleziona il display Toon con cui connettersi.", - "title": "Seleziona il display" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/ko.json b/homeassistant/components/toon/.translations/ko.json deleted file mode 100644 index dcdf19ca1c3..00000000000 --- a/homeassistant/components/toon/.translations/ko.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "\ud074\ub77c\uc774\uc5b8\ud2b8 ID \uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", - "client_secret": "\ud074\ub77c\uc774\uc5b8\ud2b8 \ube44\ubc00\ubc88\ud638\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", - "no_agreements": "\uc774 \uacc4\uc815\uc5d0\ub294 Toon \ub514\uc2a4\ud50c\ub808\uc774\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.", - "no_app": "Toon \uc744 \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Toon \uc744 \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/toon/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694.", - "unknown_auth_fail": "\uc778\uc99d\ud558\ub294 \ub3d9\uc548 \uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4." - }, - "error": { - "credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "display_exists": "\uc120\ud0dd\ub41c \ub514\uc2a4\ud50c\ub808\uc774\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "authenticate": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "tenant": "\uac70\uc8fc\uc790", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "description": "Eneco Toon \uacc4\uc815\uc73c\ub85c \uc778\uc99d\ud574\uc8fc\uc138\uc694. (\uac1c\ubc1c\uc790 \uacc4\uc815 \uc544\ub2d8)", - "title": "Toon \uacc4\uc815 \uc5f0\uacb0" - }, - "display": { - "data": { - "display": "\ub514\uc2a4\ud50c\ub808\uc774 \uc120\ud0dd" - }, - "description": "\uc5f0\uacb0\ud560 Toon \ub514\uc2a4\ud50c\ub808\uc774\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", - "title": "\ub514\uc2a4\ud50c\ub808\uc774 \uc120\ud0dd" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/lb.json b/homeassistant/components/toon/.translations/lb.json deleted file mode 100644 index 6ea86c00057..00000000000 --- a/homeassistant/components/toon/.translations/lb.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Client ID vun der Konfiguratioun ass ong\u00eblteg.", - "client_secret": "Client Passwuert vun der Konfiguratioun ass ong\u00eblteg.", - "no_agreements": "D\u00ebse Kont huet keen Toon Ecran.", - "no_app": "Dir musst Toon konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Onerwaarte Feeler bei der Authentifikatioun." - }, - "error": { - "credentials": "Ong\u00eblteg Login Informatioune.", - "display_exists": "Den ausgewielten Ecran ass scho konfigur\u00e9iert." - }, - "step": { - "authenticate": { - "data": { - "password": "Passwuert", - "tenant": "Notzer", - "username": "Benotzernumm" - }, - "description": "Authentifikatioun mat \u00e4rem Eneco Toon Kont (net de Kont vum Entw\u00e9ckler)", - "title": "Toon Kont verbannnen" - }, - "display": { - "data": { - "display": "Ecran auswielen" - }, - "description": "Wielt den Toon Ecran aus fir sech domat ze verbannen.", - "title": "Ecran auswielen" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/nl.json b/homeassistant/components/toon/.translations/nl.json deleted file mode 100644 index 2ca887b1766..00000000000 --- a/homeassistant/components/toon/.translations/nl.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "De client ID uit de configuratie is ongeldig.", - "client_secret": "De client secret uit de configuratie is ongeldig.", - "no_agreements": "Dit account heeft geen Toon schermen.", - "no_app": "Je moet Toon configureren voordat je ermee kunt aanmelden. [Lees de instructies](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Onverwachte fout tijdens het verifi\u00ebren." - }, - "error": { - "credentials": "De opgegeven inloggegevens zijn ongeldig.", - "display_exists": "Het gekozen scherm is al geconfigureerd." - }, - "step": { - "authenticate": { - "data": { - "password": "Wachtwoord", - "tenant": "Huurder", - "username": "Gebruikersnaam" - }, - "description": "Verifieer met je Eneco Toon account (niet het ontwikkelaars account).", - "title": "Link je Toon-account" - }, - "display": { - "data": { - "display": "Kies scherm" - }, - "description": "Kies het Toon-scherm om mee te verbinden.", - "title": "Kies scherm" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/nn.json b/homeassistant/components/toon/.translations/nn.json deleted file mode 100644 index eed288a5e39..00000000000 --- a/homeassistant/components/toon/.translations/nn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "authenticate": { - "data": { - "username": "Brukarnamn" - } - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/no.json b/homeassistant/components/toon/.translations/no.json deleted file mode 100644 index 80a101ac67b..00000000000 --- a/homeassistant/components/toon/.translations/no.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Klient ID fra konfigurasjonen er ugyldig.", - "client_secret": "Klient hemmeligheten fra konfigurasjonen er ugyldig.", - "no_agreements": "Denne kontoen har ingen Toon skjermer.", - "no_app": "Du m\u00e5 konfigurere Toon f\u00f8r du kan autentisere den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Det oppstod en uventet feil under godkjenning." - }, - "error": { - "credentials": "Den oppgitte kontoinformasjonen er ugyldig.", - "display_exists": "Den valgte skjermen er allerede konfigurert." - }, - "step": { - "authenticate": { - "data": { - "password": "Passord", - "tenant": "Leietaker", - "username": "Brukernavn" - }, - "description": "Godkjenn med Eneco Toon kontoen din (ikke utviklerkontoen).", - "title": "Linken din Toon konto" - }, - "display": { - "data": { - "display": "Velg skjerm" - }, - "description": "Velg Toon skjerm \u00e5 koble til.", - "title": "Velg skjerm" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/pl.json b/homeassistant/components/toon/.translations/pl.json deleted file mode 100644 index 52da6579a03..00000000000 --- a/homeassistant/components/toon/.translations/pl.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Identyfikator klienta z konfiguracji jest nieprawid\u0142owy.", - "client_secret": "Tajny klucz klienta z konfiguracji jest nieprawid\u0142owy.", - "no_agreements": "To konto nie posiada wy\u015bwietlaczy Toon.", - "no_app": "Musisz skonfigurowa\u0107 Toon, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d podczas uwierzytelniania." - }, - "error": { - "credentials": "Wprowadzone dane logowania s\u0105 nieprawid\u0142owe.", - "display_exists": "Wybrany ekran jest ju\u017c skonfigurowany." - }, - "step": { - "authenticate": { - "data": { - "password": "Has\u0142o", - "tenant": "Najemca", - "username": "Nazwa u\u017cytkownika" - }, - "description": "Uwierzytelnij konto Eneco Toon (nie konto programisty).", - "title": "Po\u0142\u0105cz konto Toon" - }, - "display": { - "data": { - "display": "Wybierz wy\u015bwietlacz" - }, - "description": "Wybierz wy\u015bwietlacz Toon, z kt\u00f3rym chcesz si\u0119 po\u0142\u0105czy\u0107.", - "title": "Wybierz wy\u015bwietlacz" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/pt-BR.json b/homeassistant/components/toon/.translations/pt-BR.json deleted file mode 100644 index 8cb5ddaadd8..00000000000 --- a/homeassistant/components/toon/.translations/pt-BR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "O ID do cliente da configura\u00e7\u00e3o \u00e9 inv\u00e1lido.", - "client_secret": "O segredo do cliente da configura\u00e7\u00e3o \u00e9 inv\u00e1lido.", - "no_agreements": "Esta conta n\u00e3o possui exibi\u00e7\u00f5es Toon.", - "no_app": "Voc\u00ea precisa configurar o Toon antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Ocorreu um erro inesperado durante a autentica\u00e7\u00e3o." - }, - "error": { - "credentials": "As credenciais fornecidas s\u00e3o inv\u00e1lidas.", - "display_exists": "A exibi\u00e7\u00e3o selecionada j\u00e1 est\u00e1 configurada." - }, - "step": { - "authenticate": { - "data": { - "password": "Senha", - "tenant": "Inquilino", - "username": "Usu\u00e1rio" - }, - "description": "Autentique-se com sua conta Eneco Toon (n\u00e3o com a conta do desenvolvedor).", - "title": "Vincule sua conta Toon" - }, - "display": { - "data": { - "display": "Escolha a exibi\u00e7\u00e3o" - }, - "description": "Selecione a exibi\u00e7\u00e3o Toon para se conectar.", - "title": "Selecione a exibi\u00e7\u00e3o" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/pt.json b/homeassistant/components/toon/.translations/pt.json deleted file mode 100644 index ebec0df356f..00000000000 --- a/homeassistant/components/toon/.translations/pt.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "config": { - "step": { - "authenticate": { - "data": { - "password": "Palavra-passe", - "username": "Nome de Utilizador" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/ru.json b/homeassistant/components/toon/.translations/ru.json deleted file mode 100644 index 75b46d3f600..00000000000 --- a/homeassistant/components/toon/.translations/ru.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Client ID \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", - "client_secret": "Client secret \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", - "no_agreements": "\u0423 \u044d\u0442\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u0442 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u0432 Toon.", - "no_app": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Toon \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." - }, - "error": { - "credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "display_exists": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "authenticate": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "tenant": "\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "description": "\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Eneco Toon (\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430).", - "title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Toon" - }, - "display": { - "data": { - "display": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439" - }, - "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 Toon \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", - "title": "Toon" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/sl.json b/homeassistant/components/toon/.translations/sl.json deleted file mode 100644 index 8fb71b80acc..00000000000 --- a/homeassistant/components/toon/.translations/sl.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "ID odjemalca iz konfiguracije je neveljaven.", - "client_secret": "Skrivnost iz konfiguracije odjemalca ni veljaven.", - "no_agreements": "Ta ra\u010dun nima prikazov Toon.", - "no_app": "Toon morate konfigurirati, preden ga boste lahko uporabili za overitev. [Preberite navodila] (https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Med preverjanjem pristnosti je pri\u0161lo do nepri\u010dakovane napake." - }, - "error": { - "credentials": "Navedene poverilnice niso veljavne.", - "display_exists": "Izbrani zaslon je \u017ee konfiguriran." - }, - "step": { - "authenticate": { - "data": { - "password": "Geslo", - "tenant": "Najemnik", - "username": "Uporabni\u0161ko ime" - }, - "description": "Prijavite se s svojim Eneco toon ra\u010dunom (ne razvijalskim).", - "title": "Pove\u017eite svoj Toon ra\u010dun" - }, - "display": { - "data": { - "display": "Izberite zaslon" - }, - "description": "Izberite zaslon Toon, s katerim se \u017eelite povezati.", - "title": "Izberite zaslon" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/sv.json b/homeassistant/components/toon/.translations/sv.json deleted file mode 100644 index 4427b90ab9c..00000000000 --- a/homeassistant/components/toon/.translations/sv.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "Client ID fr\u00e5n konfiguration \u00e4r ogiltig.", - "client_secret": "Client secret fr\u00e5n konfigurationen \u00e4r ogiltig.", - "no_agreements": "Det h\u00e4r kontot har inga Toon-sk\u00e4rmar.", - "no_app": "Du m\u00e5ste konfigurera Toon innan du kan autentisera med den. [L\u00e4s instruktioner] (https://www.home-assistant.io/components/toon/).", - "unknown_auth_fail": "Ov\u00e4ntat fel uppstod under autentisering." - }, - "error": { - "credentials": "De angivna uppgifterna \u00e4r ogiltiga.", - "display_exists": "Den valda sk\u00e4rmen \u00e4r redan konfigurerad" - }, - "step": { - "authenticate": { - "data": { - "password": "L\u00f6senord", - "tenant": "Hyresg\u00e4st", - "username": "Anv\u00e4ndarnamn" - }, - "description": "Autentisera med ditt Eneco Toon-konto (inte developer-kontot).", - "title": "L\u00e4nk ditt Toon-konto" - }, - "display": { - "data": { - "display": "V\u00e4lj sk\u00e4rm" - }, - "description": "V\u00e4lj Toon-sk\u00e4rm att ansluta till.", - "title": "V\u00e4lj sk\u00e4rm" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/zh-Hant.json b/homeassistant/components/toon/.translations/zh-Hant.json deleted file mode 100644 index 0156b58c9ac..00000000000 --- a/homeassistant/components/toon/.translations/zh-Hant.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "client_id": "\u8a2d\u5b9a\u5167\u7528\u6236\u7aef ID \u7121\u6548\u3002", - "client_secret": "\u8a2d\u5b9a\u5167\u5ba2\u6236\u7aef\u5bc6\u78bc\u7121\u6548\u3002", - "no_agreements": "\u6b64\u5e33\u865f\u4e26\u672a\u64c1\u6709 Toon \u88dd\u7f6e\u3002", - "no_app": "\u5fc5\u9808\u5148\u8a2d\u5b9a Toon \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/toon/(\u3002", - "unknown_auth_fail": "\u9a57\u8b49\u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "error": { - "credentials": "\u6240\u63d0\u4f9b\u7684\u6191\u8b49\u7121\u6548\u3002", - "display_exists": "\u6240\u9078\u64c7\u7684\u88dd\u7f6e\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "step": { - "authenticate": { - "data": { - "password": "\u5bc6\u78bc", - "tenant": "\u79df\u7528", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "description": "\u4f7f\u7528 Eneco Toon \u5e33\u865f\uff08\u975e\u958b\u767c\u8005\u5e33\u865f\uff09\u9032\u884c\u9a57\u8b49\u3002", - "title": "\u9023\u7d50 Toon \u5e33\u865f" - }, - "display": { - "data": { - "display": "\u9078\u64c7\u88dd\u7f6e" - }, - "description": "\u9078\u64c7\u6240\u8981\u9023\u63a5\u7684 Toon display\u3002", - "title": "\u9078\u64c7\u88dd\u7f6e" - } - }, - "title": "Toon" - } -} \ No newline at end of file diff --git a/homeassistant/components/toon/__init__.py b/homeassistant/components/toon/__init__.py index 612561707b1..b078dab898d 100644 --- a/homeassistant/components/toon/__init__.py +++ b/homeassistant/components/toon/__init__.py @@ -96,7 +96,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigType) -> bool: def update(call): """Service call to manually update the data.""" - called_display = call.data.get(CONF_DISPLAY, None) + called_display = call.data.get(CONF_DISPLAY) for toon_data in hass.data[DATA_TOON].values(): if ( called_display and called_display == toon_data.display_name diff --git a/homeassistant/components/toon/binary_sensor.py b/homeassistant/components/toon/binary_sensor.py index 7cf52919efe..e6ef780ec8e 100644 --- a/homeassistant/components/toon/binary_sensor.py +++ b/homeassistant/components/toon/binary_sensor.py @@ -177,16 +177,10 @@ class ToonBinarySensor(ToonEntity, BinarySensorDevice): class ToonBoilerBinarySensor(ToonBinarySensor, ToonBoilerDeviceEntity): """Defines a Boiler binary sensor.""" - pass - class ToonDisplayBinarySensor(ToonBinarySensor, ToonDisplayDeviceEntity): """Defines a Toon Display binary sensor.""" - pass - class ToonBoilerModuleBinarySensor(ToonBinarySensor, ToonBoilerModuleDeviceEntity): """Defines a Boiler module binary sensor.""" - - pass diff --git a/homeassistant/components/toon/climate.py b/homeassistant/components/toon/climate.py index 9ce9991c371..fac9cf4ffc2 100644 --- a/homeassistant/components/toon/climate.py +++ b/homeassistant/components/toon/climate.py @@ -142,7 +142,6 @@ class ToonThermostatDevice(ToonDisplayDeviceEntity, ClimateDevice): def set_hvac_mode(self, hvac_mode: str) -> None: """Set new target hvac mode.""" - pass def update(self) -> None: """Update local state.""" diff --git a/homeassistant/components/toon/config_flow.py b/homeassistant/components/toon/config_flow.py index ce4f347eaf2..c8b4b537853 100644 --- a/homeassistant/components/toon/config_flow.py +++ b/homeassistant/components/toon/config_flow.py @@ -31,9 +31,9 @@ _LOGGER = logging.getLogger(__name__) @callback def configured_displays(hass): """Return a set of configured Toon displays.""" - return set( + return { entry.data[CONF_DISPLAY] for entry in hass.config_entries.async_entries(DOMAIN) - ) + } @config_entries.HANDLERS.register(DOMAIN) diff --git a/homeassistant/components/toon/manifest.json b/homeassistant/components/toon/manifest.json index 78c0c6cf57f..230b7986fbd 100644 --- a/homeassistant/components/toon/manifest.json +++ b/homeassistant/components/toon/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/toon", "requirements": ["toonapilib==3.2.4"], - "dependencies": [], "codeowners": ["@frenck"] } diff --git a/homeassistant/components/toon/sensor.py b/homeassistant/components/toon/sensor.py index a5e88bb3d2f..157c357e180 100644 --- a/homeassistant/components/toon/sensor.py +++ b/homeassistant/components/toon/sensor.py @@ -283,22 +283,14 @@ class ToonSensor(ToonEntity): class ToonElectricityMeterDeviceSensor(ToonSensor, ToonElectricityMeterDeviceEntity): """Defines a Electricity Meter sensor.""" - pass - class ToonGasMeterDeviceSensor(ToonSensor, ToonGasMeterDeviceEntity): """Defines a Gas Meter sensor.""" - pass - class ToonSolarDeviceSensor(ToonSensor, ToonSolarDeviceEntity): """Defines a Solar sensor.""" - pass - class ToonBoilerDeviceSensor(ToonSensor, ToonBoilerDeviceEntity): """Defines a Boiler sensor.""" - - pass diff --git a/homeassistant/components/toon/strings.json b/homeassistant/components/toon/strings.json index 20d6ba3d72c..3ab64dafa24 100644 --- a/homeassistant/components/toon/strings.json +++ b/homeassistant/components/toon/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Toon", "step": { "authenticate": { "title": "Link your Toon account", @@ -14,9 +13,7 @@ "display": { "title": "Select display", "description": "Select the Toon display to connect with.", - "data": { - "display": "Choose display" - } + "data": { "display": "Choose display" } } }, "error": { @@ -31,4 +28,4 @@ "no_app": "You need to configure Toon before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/toon/)." } } -} \ No newline at end of file +} diff --git a/homeassistant/components/toon/translations/bg.json b/homeassistant/components/toon/translations/bg.json new file mode 100644 index 00000000000..0108f532d6a --- /dev/null +++ b/homeassistant/components/toon/translations/bg.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u044f\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d.", + "client_secret": "\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u0430 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430.", + "no_agreements": "\u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0444\u0438\u043b \u043d\u044f\u043c\u0430 Toon \u0434\u0438\u0441\u043f\u043b\u0435\u0438.", + "no_app": "\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Toon, \u043f\u0440\u0435\u0434\u0438 \u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0430\u0442\u0435. [\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u0442\u0435] (https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "\u0412\u044a\u0437\u043d\u0438\u043a\u043d\u0430 \u043d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f." + }, + "error": { + "credentials": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438 \u0441\u0430 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438.", + "display_exists": "\u0418\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d." + }, + "step": { + "authenticate": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "tenant": "\u041d\u0430\u0435\u043c\u0430\u0442\u0435\u043b", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "description": "\u0423\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0441 \u0412\u0430\u0448\u0438\u044f Eneco Toon \u043f\u0440\u043e\u0444\u0438\u043b (\u043d\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0430 \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u0446\u0438).", + "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f \u0430\u043a\u0430\u0443\u043d\u0442 \u0432 \u0422\u043e\u043e\u043d" + }, + "display": { + "data": { + "display": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439" + }, + "description": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 Toon, \u0441 \u043a\u043e\u0439\u0442\u043e \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0436\u0435\u0442\u0435.", + "title": "\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/ca.json b/homeassistant/components/toon/translations/ca.json new file mode 100644 index 00000000000..1ff63331f52 --- /dev/null +++ b/homeassistant/components/toon/translations/ca.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "L'identificador de client de la configuraci\u00f3 no \u00e9s v\u00e0lid.", + "client_secret": "El codi secret de client de la configuraci\u00f3 no \u00e9s v\u00e0lid.", + "no_agreements": "Aquest compte no t\u00e9 pantalles Toon.", + "no_app": "Has de configurar Toon abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "S'ha produ\u00eft un error inesperat durant l'autenticaci\u00f3." + }, + "error": { + "credentials": "Les credencials proporcionades no s\u00f3n v\u00e0lides.", + "display_exists": "La pantalla seleccionada ja est\u00e0 configurada." + }, + "step": { + "authenticate": { + "data": { + "password": "Contrasenya", + "tenant": "Tenant", + "username": "Nom d'usuari" + }, + "description": "Autentica't amb el teu compte d'Eneco Toon (no el compte de desenvolupador).", + "title": "Enlla\u00e7ar compte de Toon" + }, + "display": { + "data": { + "display": "Tria la visualitzaci\u00f3" + }, + "description": "Selecciona la pantalla Toon amb la qual vols connectar-te.", + "title": "Selecci\u00f3 de pantalla" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/da.json b/homeassistant/components/toon/translations/da.json new file mode 100644 index 00000000000..73d18f22911 --- /dev/null +++ b/homeassistant/components/toon/translations/da.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Klient-id'et fra konfigurationen er ugyldigt.", + "client_secret": "Klientens hemmelighed fra konfigurationen er ugyldig.", + "no_agreements": "Denne konto har ingen Toon-sk\u00e6rme.", + "no_app": "Du skal konfigurere Toon f\u00f8r du kan godkende med det. [L\u00e6s venligst vejledningen](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Der opstod en uventet fejl under godkendelse." + }, + "error": { + "credentials": "De angivne legitimationsoplysninger er ugyldige.", + "display_exists": "Den valgte sk\u00e6rm er allerede konfigureret." + }, + "step": { + "authenticate": { + "data": { + "password": "Adgangskode", + "tenant": "Tenant", + "username": "Brugernavn" + }, + "description": "Godkend med din Eneco Toon-konto (ikke udviklerkontoen).", + "title": "Forbind din Toon-konto" + }, + "display": { + "data": { + "display": "V\u00e6lg sk\u00e6rm" + }, + "description": "V\u00e6lg den Toon sk\u00e6rm, du vil oprette forbindelse til.", + "title": "V\u00e6lg sk\u00e6rm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/de.json b/homeassistant/components/toon/translations/de.json new file mode 100644 index 00000000000..0c4aee8cdbf --- /dev/null +++ b/homeassistant/components/toon/translations/de.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Die Client-ID aus der Konfiguration ist ung\u00fcltig.", + "client_secret": "Das Client-Secret aus der Konfiguration ist ung\u00fcltig.", + "no_agreements": "Dieses Konto hat keine Toon-Anzeigen.", + "no_app": "Toon muss konfiguriert werden, bevor die Authentifizierung durchgef\u00fchrt werden kann. [Lies bitte die Anleitung](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Beim Authentifizieren ist ein unerwarteter Fehler aufgetreten." + }, + "error": { + "credentials": "Die angegebenen Anmeldeinformationen sind ung\u00fcltig.", + "display_exists": "Die ausgew\u00e4hlte Anzeige ist bereits konfiguriert." + }, + "step": { + "authenticate": { + "data": { + "password": "Passwort", + "tenant": "Tenant", + "username": "Benutzername" + }, + "description": "Authentifiziere dich mit deinem Eneco Toon-Konto (nicht dem Entwicklerkonto).", + "title": "Verkn\u00fcpfe dein Toon-Konto" + }, + "display": { + "data": { + "display": "Anzeige w\u00e4hlen" + }, + "description": "W\u00e4hle die Toon-Anzeige aus, die verbunden werden soll.", + "title": "Anzeige ausw\u00e4hlen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/en.json b/homeassistant/components/toon/translations/en.json new file mode 100644 index 00000000000..8d8b837e987 --- /dev/null +++ b/homeassistant/components/toon/translations/en.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "The client ID from the configuration is invalid.", + "client_secret": "The client secret from the configuration is invalid.", + "no_agreements": "This account has no Toon displays.", + "no_app": "You need to configure Toon before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Unexpected error occurred, while authenticating." + }, + "error": { + "credentials": "The provided credentials are invalid.", + "display_exists": "The selected display is already configured." + }, + "step": { + "authenticate": { + "data": { + "password": "Password", + "tenant": "Tenant", + "username": "Username" + }, + "description": "Authenticate with your Eneco Toon account (not the developer account).", + "title": "Link your Toon account" + }, + "display": { + "data": { + "display": "Choose display" + }, + "description": "Select the Toon display to connect with.", + "title": "Select display" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/es-419.json b/homeassistant/components/toon/translations/es-419.json new file mode 100644 index 00000000000..6fa63e591a3 --- /dev/null +++ b/homeassistant/components/toon/translations/es-419.json @@ -0,0 +1,28 @@ +{ + "config": { + "abort": { + "no_agreements": "Esta cuenta no tiene pantallas Toon.", + "unknown_auth_fail": "Ocurri\u00f3 un error inesperado, mientras se autenticaba." + }, + "error": { + "credentials": "Las credenciales proporcionadas no son v\u00e1lidas.", + "display_exists": "La pantalla seleccionada ya est\u00e1 configurada." + }, + "step": { + "authenticate": { + "data": { + "password": "Contrase\u00f1a", + "username": "Nombre de usuario" + }, + "title": "Vincula tu cuenta de Toon" + }, + "display": { + "data": { + "display": "Elegir pantalla" + }, + "description": "Seleccione la pantalla Toon para conectarse.", + "title": "Seleccionar pantalla" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/es.json b/homeassistant/components/toon/translations/es.json new file mode 100644 index 00000000000..737cc1d0612 --- /dev/null +++ b/homeassistant/components/toon/translations/es.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "El ID de cliente en la configuraci\u00f3n no es v\u00e1lido.", + "client_secret": "El secreto de la configuraci\u00f3n no es v\u00e1lido.", + "no_agreements": "Esta cuenta no tiene pantallas Toon.", + "no_app": "Es necesario configurar Toon antes de poder autenticarse con \u00e9l. [Por favor, lee las instrucciones](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Se ha producido un error inesperado al autenticar." + }, + "error": { + "credentials": "Las credenciales proporcionadas no son v\u00e1lidas.", + "display_exists": "La pantalla seleccionada ya est\u00e1 configurada." + }, + "step": { + "authenticate": { + "data": { + "password": "Contrase\u00f1a", + "tenant": "Inquilino", + "username": "Usuario" + }, + "description": "Identif\u00edcate con tu cuenta de Eneco Toon (no con la cuenta de desarrollador).", + "title": "Vincular tu cuenta Toon" + }, + "display": { + "data": { + "display": "Elige una pantalla" + }, + "description": "Selecciona la pantalla Toon que quieres conectar.", + "title": "Seleccionar pantalla" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/fr.json b/homeassistant/components/toon/translations/fr.json new file mode 100644 index 00000000000..9da12e7aeaa --- /dev/null +++ b/homeassistant/components/toon/translations/fr.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "L'ID client de la configuration n'est pas valide.", + "client_secret": "Le client secret de la configuration n'est pas valide.", + "no_agreements": "Ce compte n'a pas d'affichages Toon.", + "no_app": "Vous devez configurer Toon avant de pouvoir vous authentifier avec celui-ci. [Veuillez lire les instructions] (https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Une erreur inattendue s'est produite lors de l'authentification." + }, + "error": { + "credentials": "Les informations d'identification fournies ne sont pas valides.", + "display_exists": "L'affichage s\u00e9lectionn\u00e9 est d\u00e9j\u00e0 configur\u00e9." + }, + "step": { + "authenticate": { + "data": { + "password": "Mot de passe", + "tenant": "Locataire", + "username": "Nom d'utilisateur" + }, + "description": "Authentifiez-vous avec votre compte Eneco Toon (pas le compte d\u00e9veloppeur).", + "title": "Lier un compte Toon" + }, + "display": { + "data": { + "display": "Choisissez l'affichage" + }, + "description": "S\u00e9lectionnez l'affichage Toon avec lequel vous connecter.", + "title": "S\u00e9lectionnez l'affichage" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/hu.json b/homeassistant/components/toon/translations/hu.json similarity index 100% rename from homeassistant/components/toon/.translations/hu.json rename to homeassistant/components/toon/translations/hu.json diff --git a/homeassistant/components/toon/translations/it.json b/homeassistant/components/toon/translations/it.json new file mode 100644 index 00000000000..62f4031660d --- /dev/null +++ b/homeassistant/components/toon/translations/it.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "L'ID client dalla configurazione non \u00e8 valido.", + "client_secret": "Il client segreto della configurazione non \u00e8 valido.", + "no_agreements": "Questo account non ha display Toon.", + "no_app": "\u00c8 necessario configurare Toon prima di poter eseguire l'autenticazione con esso. [Si prega di leggere le istruzioni] (https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Si \u00e8 verificato un errore imprevisto durante l'autenticazione." + }, + "error": { + "credentials": "Le credenziali fornite non sono valide.", + "display_exists": "Il display selezionato \u00e8 gi\u00e0 configurato." + }, + "step": { + "authenticate": { + "data": { + "password": "Password", + "tenant": "Inquilino", + "username": "Nome utente" + }, + "description": "Autenticati con il tuo account Eneco Toon (non l'account sviluppatore).", + "title": "Collega il tuo account Toon" + }, + "display": { + "data": { + "display": "Seleziona il display" + }, + "description": "Seleziona il display Toon con cui connettersi.", + "title": "Seleziona il display" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/ko.json b/homeassistant/components/toon/translations/ko.json new file mode 100644 index 00000000000..6940f8ca33f --- /dev/null +++ b/homeassistant/components/toon/translations/ko.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "\ud074\ub77c\uc774\uc5b8\ud2b8 ID \uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "client_secret": "\ud074\ub77c\uc774\uc5b8\ud2b8 \ube44\ubc00\ubc88\ud638\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "no_agreements": "\uc774 \uacc4\uc815\uc5d0\ub294 Toon \ub514\uc2a4\ud50c\ub808\uc774\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.", + "no_app": "Toon \uc744 \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Toon \uc744 \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/toon/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694.", + "unknown_auth_fail": "\uc778\uc99d\ud558\ub294 \ub3d9\uc548 \uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4." + }, + "error": { + "credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "display_exists": "\uc120\ud0dd\ub41c \ub514\uc2a4\ud50c\ub808\uc774\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "authenticate": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "tenant": "\uac70\uc8fc\uc790", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "Eneco Toon \uacc4\uc815\uc73c\ub85c \uc778\uc99d\ud574\uc8fc\uc138\uc694. (\uac1c\ubc1c\uc790 \uacc4\uc815 \uc544\ub2d8)", + "title": "Toon \uacc4\uc815 \uc5f0\uacb0" + }, + "display": { + "data": { + "display": "\ub514\uc2a4\ud50c\ub808\uc774 \uc120\ud0dd" + }, + "description": "\uc5f0\uacb0\ud560 Toon \ub514\uc2a4\ud50c\ub808\uc774\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694.", + "title": "\ub514\uc2a4\ud50c\ub808\uc774 \uc120\ud0dd" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/lb.json b/homeassistant/components/toon/translations/lb.json new file mode 100644 index 00000000000..57837479d4c --- /dev/null +++ b/homeassistant/components/toon/translations/lb.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Client ID vun der Konfiguratioun ass ong\u00eblteg.", + "client_secret": "Client Passwuert vun der Konfiguratioun ass ong\u00eblteg.", + "no_agreements": "D\u00ebse Kont huet keen Toon Ecran.", + "no_app": "Dir musst Toon konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Onerwaarte Feeler bei der Authentifikatioun." + }, + "error": { + "credentials": "Ong\u00eblteg Login Informatioune.", + "display_exists": "Den ausgewielten Ecran ass scho konfigur\u00e9iert." + }, + "step": { + "authenticate": { + "data": { + "password": "Passwuert", + "tenant": "Notzer", + "username": "Benotzernumm" + }, + "description": "Authentifikatioun mat \u00e4rem Eneco Toon Kont (net de Kont vum Entw\u00e9ckler)", + "title": "Toon Kont verbannnen" + }, + "display": { + "data": { + "display": "Ecran auswielen" + }, + "description": "Wielt den Toon Ecran aus fir sech domat ze verbannen.", + "title": "Ecran auswielen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/lt.json b/homeassistant/components/toon/translations/lt.json similarity index 100% rename from homeassistant/components/toon/.translations/lt.json rename to homeassistant/components/toon/translations/lt.json diff --git a/homeassistant/components/toon/translations/nl.json b/homeassistant/components/toon/translations/nl.json new file mode 100644 index 00000000000..bcced85e29d --- /dev/null +++ b/homeassistant/components/toon/translations/nl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "De client ID uit de configuratie is ongeldig.", + "client_secret": "De client secret uit de configuratie is ongeldig.", + "no_agreements": "Dit account heeft geen Toon schermen.", + "no_app": "Je moet Toon configureren voordat je ermee kunt aanmelden. [Lees de instructies](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Onverwachte fout tijdens het verifi\u00ebren." + }, + "error": { + "credentials": "De opgegeven inloggegevens zijn ongeldig.", + "display_exists": "Het gekozen scherm is al geconfigureerd." + }, + "step": { + "authenticate": { + "data": { + "password": "Wachtwoord", + "tenant": "Huurder", + "username": "Gebruikersnaam" + }, + "description": "Verifieer met je Eneco Toon account (niet het ontwikkelaars account).", + "title": "Link je Toon-account" + }, + "display": { + "data": { + "display": "Kies scherm" + }, + "description": "Kies het Toon-scherm om mee te verbinden.", + "title": "Kies scherm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/nn.json b/homeassistant/components/toon/translations/nn.json new file mode 100644 index 00000000000..b9bb31d468b --- /dev/null +++ b/homeassistant/components/toon/translations/nn.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "authenticate": { + "data": { + "username": "Brukarnamn" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/no.json b/homeassistant/components/toon/translations/no.json new file mode 100644 index 00000000000..a41438b332a --- /dev/null +++ b/homeassistant/components/toon/translations/no.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Klient ID fra konfigurasjonen er ugyldig.", + "client_secret": "Klient hemmeligheten fra konfigurasjonen er ugyldig.", + "no_agreements": "Denne kontoen har ingen Toon skjermer.", + "no_app": "Du m\u00e5 konfigurere Toon f\u00f8r du kan autentisere den. [Vennligst les instruksjonene](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Det oppstod en uventet feil under godkjenning." + }, + "error": { + "credentials": "Den oppgitte kontoinformasjonen er ugyldig.", + "display_exists": "Den valgte skjermen er allerede konfigurert." + }, + "step": { + "authenticate": { + "data": { + "password": "Passord", + "tenant": "Leietaker", + "username": "Brukernavn" + }, + "description": "Godkjenn med Eneco Toon kontoen din (ikke utviklerkontoen).", + "title": "Linken din Toon konto" + }, + "display": { + "data": { + "display": "Velg skjerm" + }, + "description": "Velg Toon skjerm \u00e5 koble til.", + "title": "Velg skjerm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/pl.json b/homeassistant/components/toon/translations/pl.json new file mode 100644 index 00000000000..c3d783a9034 --- /dev/null +++ b/homeassistant/components/toon/translations/pl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Identyfikator klienta z konfiguracji jest nieprawid\u0142owy.", + "client_secret": "Tajny klucz klienta z konfiguracji jest nieprawid\u0142owy.", + "no_agreements": "To konto nie posiada wy\u015bwietlaczy Toon.", + "no_app": "Musisz skonfigurowa\u0107 Toon, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d podczas uwierzytelniania." + }, + "error": { + "credentials": "Wprowadzone dane logowania s\u0105 nieprawid\u0142owe.", + "display_exists": "Wybrany ekran jest ju\u017c skonfigurowany." + }, + "step": { + "authenticate": { + "data": { + "password": "Has\u0142o", + "tenant": "Najemca", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Uwierzytelnij konto Eneco Toon (nie konto programisty).", + "title": "Po\u0142\u0105cz konto Toon" + }, + "display": { + "data": { + "display": "Wybierz wy\u015bwietlacz" + }, + "description": "Wybierz wy\u015bwietlacz Toon, z kt\u00f3rym chcesz si\u0119 po\u0142\u0105czy\u0107.", + "title": "Wybierz wy\u015bwietlacz" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/pt-BR.json b/homeassistant/components/toon/translations/pt-BR.json new file mode 100644 index 00000000000..3e6829f6596 --- /dev/null +++ b/homeassistant/components/toon/translations/pt-BR.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "O ID do cliente da configura\u00e7\u00e3o \u00e9 inv\u00e1lido.", + "client_secret": "O segredo do cliente da configura\u00e7\u00e3o \u00e9 inv\u00e1lido.", + "no_agreements": "Esta conta n\u00e3o possui exibi\u00e7\u00f5es Toon.", + "no_app": "Voc\u00ea precisa configurar o Toon antes de poder autenticar com ele. [Por favor, leia as instru\u00e7\u00f5es] (https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Ocorreu um erro inesperado durante a autentica\u00e7\u00e3o." + }, + "error": { + "credentials": "As credenciais fornecidas s\u00e3o inv\u00e1lidas.", + "display_exists": "A exibi\u00e7\u00e3o selecionada j\u00e1 est\u00e1 configurada." + }, + "step": { + "authenticate": { + "data": { + "password": "Senha", + "tenant": "Inquilino", + "username": "Usu\u00e1rio" + }, + "description": "Autentique-se com sua conta Eneco Toon (n\u00e3o com a conta do desenvolvedor).", + "title": "Vincule sua conta Toon" + }, + "display": { + "data": { + "display": "Escolha a exibi\u00e7\u00e3o" + }, + "description": "Selecione a exibi\u00e7\u00e3o Toon para se conectar.", + "title": "Selecione a exibi\u00e7\u00e3o" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/pt.json b/homeassistant/components/toon/translations/pt.json new file mode 100644 index 00000000000..a4b601f7899 --- /dev/null +++ b/homeassistant/components/toon/translations/pt.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "client_id": "O ID do cliente da configura\u00e7\u00e3o \u00e9 inv\u00e1lido.", + "client_secret": "O segredo do cliente da configura\u00e7\u00e3o \u00e9 inv\u00e1lido.", + "unknown_auth_fail": "Ocorreu um erro inesperado durante a autentica\u00e7\u00e3o." + }, + "error": { + "credentials": "As credenciais fornecidas s\u00e3o inv\u00e1lidas." + }, + "step": { + "authenticate": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/ru.json b/homeassistant/components/toon/translations/ru.json new file mode 100644 index 00000000000..afa73467479 --- /dev/null +++ b/homeassistant/components/toon/translations/ru.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Client ID \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", + "client_secret": "Client secret \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d.", + "no_agreements": "\u0423 \u044d\u0442\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u0442 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u0432 Toon.", + "no_app": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Toon \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + }, + "error": { + "credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "display_exists": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "authenticate": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "tenant": "\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "description": "\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Eneco Toon (\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430).", + "title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Toon" + }, + "display": { + "data": { + "display": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 Toon \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", + "title": "Toon" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/sl.json b/homeassistant/components/toon/translations/sl.json new file mode 100644 index 00000000000..f86289d5a08 --- /dev/null +++ b/homeassistant/components/toon/translations/sl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "ID odjemalca iz konfiguracije je neveljaven.", + "client_secret": "Skrivnost iz konfiguracije odjemalca ni veljaven.", + "no_agreements": "Ta ra\u010dun nima prikazov Toon.", + "no_app": "Toon morate konfigurirati, preden ga boste lahko uporabili za overitev. [Preberite navodila] (https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Med preverjanjem pristnosti je pri\u0161lo do nepri\u010dakovane napake." + }, + "error": { + "credentials": "Navedene poverilnice niso veljavne.", + "display_exists": "Izbrani zaslon je \u017ee konfiguriran." + }, + "step": { + "authenticate": { + "data": { + "password": "Geslo", + "tenant": "Najemnik", + "username": "Uporabni\u0161ko ime" + }, + "description": "Prijavite se s svojim Eneco toon ra\u010dunom (ne razvijalskim).", + "title": "Pove\u017eite svoj Toon ra\u010dun" + }, + "display": { + "data": { + "display": "Izberite zaslon" + }, + "description": "Izberite zaslon Toon, s katerim se \u017eelite povezati.", + "title": "Izberite zaslon" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/translations/sv.json b/homeassistant/components/toon/translations/sv.json new file mode 100644 index 00000000000..bb1c89e1e3c --- /dev/null +++ b/homeassistant/components/toon/translations/sv.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "Client ID fr\u00e5n konfiguration \u00e4r ogiltig.", + "client_secret": "Client secret fr\u00e5n konfigurationen \u00e4r ogiltig.", + "no_agreements": "Det h\u00e4r kontot har inga Toon-sk\u00e4rmar.", + "no_app": "Du m\u00e5ste konfigurera Toon innan du kan autentisera med den. [L\u00e4s instruktioner] (https://www.home-assistant.io/components/toon/).", + "unknown_auth_fail": "Ov\u00e4ntat fel uppstod under autentisering." + }, + "error": { + "credentials": "De angivna uppgifterna \u00e4r ogiltiga.", + "display_exists": "Den valda sk\u00e4rmen \u00e4r redan konfigurerad" + }, + "step": { + "authenticate": { + "data": { + "password": "L\u00f6senord", + "tenant": "Hyresg\u00e4st", + "username": "Anv\u00e4ndarnamn" + }, + "description": "Autentisera med ditt Eneco Toon-konto (inte developer-kontot).", + "title": "L\u00e4nk ditt Toon-konto" + }, + "display": { + "data": { + "display": "V\u00e4lj sk\u00e4rm" + }, + "description": "V\u00e4lj Toon-sk\u00e4rm att ansluta till.", + "title": "V\u00e4lj sk\u00e4rm" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/toon/.translations/th.json b/homeassistant/components/toon/translations/th.json similarity index 100% rename from homeassistant/components/toon/.translations/th.json rename to homeassistant/components/toon/translations/th.json diff --git a/homeassistant/components/toon/.translations/zh-Hans.json b/homeassistant/components/toon/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/toon/.translations/zh-Hans.json rename to homeassistant/components/toon/translations/zh-Hans.json diff --git a/homeassistant/components/toon/translations/zh-Hant.json b/homeassistant/components/toon/translations/zh-Hant.json new file mode 100644 index 00000000000..618a3a5fd00 --- /dev/null +++ b/homeassistant/components/toon/translations/zh-Hant.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "client_id": "\u8a2d\u5b9a\u5167\u7528\u6236\u7aef ID \u7121\u6548\u3002", + "client_secret": "\u8a2d\u5b9a\u5167\u5ba2\u6236\u7aef\u5bc6\u78bc\u7121\u6548\u3002", + "no_agreements": "\u6b64\u5e33\u865f\u4e26\u672a\u64c1\u6709 Toon \u986f\u793a\u8a2d\u5099\u3002", + "no_app": "\u5fc5\u9808\u5148\u8a2d\u5b9a Toon \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/toon/(\u3002", + "unknown_auth_fail": "\u9a57\u8b49\u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "error": { + "credentials": "\u6240\u63d0\u4f9b\u7684\u6191\u8b49\u7121\u6548\u3002", + "display_exists": "\u6240\u9078\u64c7\u7684\u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "step": { + "authenticate": { + "data": { + "password": "\u5bc6\u78bc", + "tenant": "\u79df\u7528", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "description": "\u4f7f\u7528 Eneco Toon \u5e33\u865f\uff08\u975e\u958b\u767c\u8005\u5e33\u865f\uff09\u9032\u884c\u9a57\u8b49\u3002", + "title": "\u9023\u7d50 Toon \u5e33\u865f" + }, + "display": { + "data": { + "display": "\u9078\u64c7\u8a2d\u5099" + }, + "description": "\u9078\u64c7\u6240\u8981\u9023\u63a5\u7684 Toon display\u3002", + "title": "\u9078\u64c7\u8a2d\u5099" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/torque/manifest.json b/homeassistant/components/torque/manifest.json index 14b41ed82de..5350ae95f2d 100644 --- a/homeassistant/components/torque/manifest.json +++ b/homeassistant/components/torque/manifest.json @@ -2,7 +2,6 @@ "domain": "torque", "name": "Torque", "documentation": "https://www.home-assistant.io/integrations/torque", - "requirements": [], "dependencies": ["http"], "codeowners": [] } diff --git a/homeassistant/components/torque/sensor.py b/homeassistant/components/torque/sensor.py index f084c135e47..b4b44bdfb4f 100644 --- a/homeassistant/components/torque/sensor.py +++ b/homeassistant/components/torque/sensor.py @@ -6,7 +6,7 @@ import voluptuous as vol from homeassistant.components.http import HomeAssistantView from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_EMAIL, CONF_NAME +from homeassistant.const import CONF_EMAIL, CONF_NAME, DEGREE from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -91,7 +91,7 @@ class TorqueReceiveDataView(HomeAssistantView): temp_unit = data[key] if "\\xC2\\xB0" in temp_unit: - temp_unit = temp_unit.replace("\\xC2\\xB0", "°") + temp_unit = temp_unit.replace("\\xC2\\xB0", DEGREE) units[pid] = temp_unit elif is_value: @@ -102,8 +102,7 @@ class TorqueReceiveDataView(HomeAssistantView): for pid in names: if pid not in self.sensors: self.sensors[pid] = TorqueSensor( - ENTITY_NAME_FORMAT.format(self.vehicle, names[pid]), - units.get(pid, None), + ENTITY_NAME_FORMAT.format(self.vehicle, names[pid]), units.get(pid) ) hass.async_add_job(self.add_entities, [self.sensors[pid]]) @@ -143,4 +142,4 @@ class TorqueSensor(Entity): def async_on_update(self, value): """Receive an update.""" self._state = value - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/totalconnect/__init__.py b/homeassistant/components/totalconnect/__init__.py index e6cfbbc629a..fce67f71b24 100644 --- a/homeassistant/components/totalconnect/__init__.py +++ b/homeassistant/components/totalconnect/__init__.py @@ -1,16 +1,20 @@ """The totalconnect component.""" +import asyncio import logging from total_connect_client import TotalConnectClient import voluptuous as vol +from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.helpers import discovery +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from .const import DOMAIN + _LOGGER = logging.getLogger(__name__) -DOMAIN = "totalconnect" +PLATFORMS = ["alarm_control_panel", "binary_sensor"] CONFIG_SCHEMA = vol.Schema( { @@ -20,39 +24,61 @@ CONFIG_SCHEMA = vol.Schema( vol.Required(CONF_PASSWORD): cv.string, } ) - }, - extra=vol.ALLOW_EXTRA, + } ) -TOTALCONNECT_PLATFORMS = ["alarm_control_panel", "binary_sensor"] +async def async_setup(hass: HomeAssistant, config: dict): + """Set up by configuration file.""" + if DOMAIN not in config: + return True -def setup(hass, config): - """Set up TotalConnect component.""" - conf = config[DOMAIN] - - username = conf[CONF_USERNAME] - password = conf[CONF_PASSWORD] - - client = TotalConnectClient.TotalConnectClient(username, password) - - if client.token is False: - _LOGGER.error("TotalConnect authentication failed") - return False - - hass.data[DOMAIN] = TotalConnectSystem(username, password, client) - - for platform in TOTALCONNECT_PLATFORMS: - discovery.load_platform(hass, platform, DOMAIN, {}, config) + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_IMPORT}, data=config[DOMAIN], + ) + ) return True -class TotalConnectSystem: - """TotalConnect System class.""" +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): + """Set up upon config entry in user interface.""" + hass.data.setdefault(DOMAIN, {}) - def __init__(self, username, password, client): - """Initialize the TotalConnect system.""" - self._username = username - self._password = password - self.client = client + conf = entry.data + username = conf[CONF_USERNAME] + password = conf[CONF_PASSWORD] + + client = await hass.async_add_executor_job( + TotalConnectClient.TotalConnectClient, username, password + ) + + if not client.is_valid_credentials(): + _LOGGER.error("TotalConnect authentication failed") + return False + + hass.data[DOMAIN][entry.entry_id] = client + + for component in PLATFORMS: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(entry, component) + ) + + return True + + +async def async_unload_entry(hass, entry: ConfigEntry): + """Unload a config entry.""" + unload_ok = all( + await asyncio.gather( + *[ + hass.config_entries.async_forward_entry_unload(entry, platform) + for platform in PLATFORMS + ] + ) + ) + if unload_ok: + hass.data[DOMAIN].pop(entry.entry_id) + + return unload_ok diff --git a/homeassistant/components/totalconnect/alarm_control_panel.py b/homeassistant/components/totalconnect/alarm_control_panel.py index 2ab06e2f6bd..2a32ae89b4a 100644 --- a/homeassistant/components/totalconnect/alarm_control_panel.py +++ b/homeassistant/components/totalconnect/alarm_control_panel.py @@ -23,19 +23,17 @@ from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up an alarm control panel for a TotalConnect device.""" - if discovery_info is None: - return - +async def async_setup_entry(hass, entry, async_add_entities) -> None: + """Set up TotalConnect alarm panels based on a config entry.""" alarms = [] - client = hass.data[DOMAIN].client + client = hass.data[DOMAIN][entry.entry_id] for location_id, location in client.locations.items(): location_name = location.location_name alarms.append(TotalConnectAlarm(location_name, location_id, client)) - add_entities(alarms) + + async_add_entities(alarms, True) class TotalConnectAlarm(alarm.AlarmControlPanel): diff --git a/homeassistant/components/totalconnect/binary_sensor.py b/homeassistant/components/totalconnect/binary_sensor.py index 28bd58cfff8..48d9a96a483 100644 --- a/homeassistant/components/totalconnect/binary_sensor.py +++ b/homeassistant/components/totalconnect/binary_sensor.py @@ -8,24 +8,22 @@ from homeassistant.components.binary_sensor import ( BinarySensorDevice, ) -from . import DOMAIN as TOTALCONNECT_DOMAIN +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up a sensor for a TotalConnect device.""" - if discovery_info is None: - return - +async def async_setup_entry(hass, entry, async_add_entities) -> None: + """Set up TotalConnect device sensors based on a config entry.""" sensors = [] - client_locations = hass.data[TOTALCONNECT_DOMAIN].client.locations + client_locations = hass.data[DOMAIN][entry.entry_id].locations for location_id, location in client_locations.items(): for zone_id, zone in location.zones.items(): sensors.append(TotalConnectBinarySensor(zone_id, location_id, zone)) - add_entities(sensors, True) + + async_add_entities(sensors, True) class TotalConnectBinarySensor(BinarySensorDevice): diff --git a/homeassistant/components/totalconnect/config_flow.py b/homeassistant/components/totalconnect/config_flow.py new file mode 100644 index 00000000000..03ddd0a432a --- /dev/null +++ b/homeassistant/components/totalconnect/config_flow.py @@ -0,0 +1,60 @@ +"""Config flow for the Total Connect component.""" +import logging + +from total_connect_client import TotalConnectClient +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME + +from .const import DOMAIN # pylint: disable=unused-import + +_LOGGER = logging.getLogger(__name__) + + +class TotalConnectConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Total Connect config flow.""" + + VERSION = 1 + + async def async_step_user(self, user_input=None): + """Handle a flow initiated by the user.""" + errors = {} + + if user_input is not None: + # Validate user input + username = user_input[CONF_USERNAME] + password = user_input[CONF_PASSWORD] + + await self.async_set_unique_id(username) + self._abort_if_unique_id_configured() + + valid = await self.is_valid(username, password) + + if valid: + # authentication success / valid + return self.async_create_entry( + title="Total Connect", + data={CONF_USERNAME: username, CONF_PASSWORD: password}, + ) + # authentication failed / invalid + errors["base"] = "login" + + data_schema = vol.Schema( + {vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str} + ) + + return self.async_show_form( + step_id="user", data_schema=data_schema, errors=errors + ) + + async def async_step_import(self, user_input): + """Import a config entry.""" + return await self.async_step_user(user_input) + + async def is_valid(self, username="", password=""): + """Return true if the given username and password are valid.""" + client = await self.hass.async_add_executor_job( + TotalConnectClient.TotalConnectClient, username, password + ) + return client.is_valid_credentials() diff --git a/homeassistant/components/totalconnect/manifest.json b/homeassistant/components/totalconnect/manifest.json index 4675ef0ffaf..fc19c889d8b 100644 --- a/homeassistant/components/totalconnect/manifest.json +++ b/homeassistant/components/totalconnect/manifest.json @@ -4,5 +4,6 @@ "documentation": "https://www.home-assistant.io/integrations/totalconnect", "requirements": ["total_connect_client==0.54.1"], "dependencies": [], - "codeowners": ["@austinmroczek"] + "codeowners": ["@austinmroczek"], + "config_flow": true } diff --git a/homeassistant/components/totalconnect/strings.json b/homeassistant/components/totalconnect/strings.json new file mode 100644 index 00000000000..0ce98c7c4d4 --- /dev/null +++ b/homeassistant/components/totalconnect/strings.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "title": "Total Connect", + "data": { "username": "Username", "password": "Password" } + } + }, + "error": { "login": "Login error: please check your username & password" }, + "abort": { "already_configured": "Account already configured" } + } +} diff --git a/homeassistant/components/totalconnect/translations/ca.json b/homeassistant/components/totalconnect/translations/ca.json new file mode 100644 index 00000000000..19106050c6d --- /dev/null +++ b/homeassistant/components/totalconnect/translations/ca.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "El compte ja ha estat configurat" + }, + "error": { + "login": "Error d\u2019inici de sessi\u00f3: comprova el nom d'usuari i la contrasenya" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Nom d'usuari" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/de.json b/homeassistant/components/totalconnect/translations/de.json new file mode 100644 index 00000000000..d3130bd7e80 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Konto bereits konfiguriert" + }, + "error": { + "login": "Login-Fehler: Bitte \u00fcberpr\u00fcfen Sie Ihren Benutzernamen & Passwort" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/en.json b/homeassistant/components/totalconnect/translations/en.json new file mode 100644 index 00000000000..3486d42ae3d --- /dev/null +++ b/homeassistant/components/totalconnect/translations/en.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Account already configured" + }, + "error": { + "login": "Login error: please check your username & password" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Username" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/es.json b/homeassistant/components/totalconnect/translations/es.json new file mode 100644 index 00000000000..18b45f390b2 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/es.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "La cuenta ya est\u00e1 configurada" + }, + "error": { + "login": "Error de inicio de sesi\u00f3n: comprueba tu nombre de usuario y contrase\u00f1a" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Usuario" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/fr.json b/homeassistant/components/totalconnect/translations/fr.json new file mode 100644 index 00000000000..d2c211a7c7c --- /dev/null +++ b/homeassistant/components/totalconnect/translations/fr.json @@ -0,0 +1,7 @@ +{ + "config": { + "abort": { + "already_configured": "Compte d\u00e9j\u00e0 configur\u00e9" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/it.json b/homeassistant/components/totalconnect/translations/it.json new file mode 100644 index 00000000000..455b8a7967f --- /dev/null +++ b/homeassistant/components/totalconnect/translations/it.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Account gi\u00e0 configurato" + }, + "error": { + "login": "Errore di accesso: si prega di controllare il nome utente e la password" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/ko.json b/homeassistant/components/totalconnect/translations/ko.json new file mode 100644 index 00000000000..fac8916a54f --- /dev/null +++ b/homeassistant/components/totalconnect/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc0ac\uc6a9\uc790 \uc774\ub984 \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/lb.json b/homeassistant/components/totalconnect/translations/lb.json new file mode 100644 index 00000000000..a75e63e9b58 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/lb.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Kont ass scho konfigur\u00e9iert" + }, + "error": { + "login": "Feeler beim Login: iwwerpr\u00e9if de Benotzernumm & Passwuert" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "Benotzernumm" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/no.json b/homeassistant/components/totalconnect/translations/no.json new file mode 100644 index 00000000000..f93f2cc4748 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/no.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Kontoen er allerede konfigurert" + }, + "error": { + "login": "P\u00e5loggingsfeil: Vennligst sjekk brukernavnet ditt og passordet ditt" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "Brukernavn" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/pl.json b/homeassistant/components/totalconnect/translations/pl.json new file mode 100644 index 00000000000..58a0f7018da --- /dev/null +++ b/homeassistant/components/totalconnect/translations/pl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Konto jest ju\u017c skonfigurowane." + }, + "error": { + "login": "B\u0142\u0105d logowania: sprawd\u017a swoj\u0105 nazw\u0119 u\u017cytkownika i has\u0142o" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/pt.json b/homeassistant/components/totalconnect/translations/pt.json new file mode 100644 index 00000000000..de29ebd0489 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Conta j\u00e1 configurada" + }, + "error": { + "login": "Erro de login: verifique seu nome de utilizador e palavra-passe" + }, + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/ru.json b/homeassistant/components/totalconnect/translations/ru.json new file mode 100644 index 00000000000..b2ccada9e63 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/ru.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430." + }, + "error": { + "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." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/sl.json b/homeassistant/components/totalconnect/translations/sl.json new file mode 100644 index 00000000000..80127b053d6 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/sl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Ra\u010dun \u017ee nastavljen" + }, + "error": { + "login": "Napaka pri prijavi: preverite svoje uporabni\u0161ko ime in geslo" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "Uporabni\u0161ko ime" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/zh-Hant.json b/homeassistant/components/totalconnect/translations/zh-Hant.json new file mode 100644 index 00000000000..0424db3cdc3 --- /dev/null +++ b/homeassistant/components/totalconnect/translations/zh-Hant.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "\u5e33\u865f\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u5bc6\u78bc" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/touchline/manifest.json b/homeassistant/components/touchline/manifest.json index 95415e70fa1..cbfb7d85839 100644 --- a/homeassistant/components/touchline/manifest.json +++ b/homeassistant/components/touchline/manifest.json @@ -3,6 +3,5 @@ "name": "Roth Touchline", "documentation": "https://www.home-assistant.io/integrations/touchline", "requirements": ["pytouchline==0.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tplink/.translations/bg.json b/homeassistant/components/tplink/.translations/bg.json deleted file mode 100644 index 25ffb753076..00000000000 --- a/homeassistant/components/tplink/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 TP-Link \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", - "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 TP-Link \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/ca.json b/homeassistant/components/tplink/.translations/ca.json deleted file mode 100644 index cf286f853f2..00000000000 --- a/homeassistant/components/tplink/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'han trobat dispositius TP-Link a la xarxa.", - "single_instance_allowed": "Nom\u00e9s cal una \u00fanica configuraci\u00f3." - }, - "step": { - "confirm": { - "description": "Vols configurar dispositius intel\u00b7ligents TP-Link?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/cs.json b/homeassistant/components/tplink/.translations/cs.json deleted file mode 100644 index 1d9fb41fc8c..00000000000 --- a/homeassistant/components/tplink/.translations/cs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/da.json b/homeassistant/components/tplink/.translations/da.json deleted file mode 100644 index 5225a89fb95..00000000000 --- a/homeassistant/components/tplink/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen TP-Link enheder kunne findes p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere TP-Link-smartenheder?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/de.json b/homeassistant/components/tplink/.translations/de.json deleted file mode 100644 index ba19fd04390..00000000000 --- a/homeassistant/components/tplink/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Es wurden keine TP-Link-Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Es ist nur eine einzige Konfiguration erforderlich." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du TP-Link Smart Devices einrichten?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/en.json b/homeassistant/components/tplink/.translations/en.json deleted file mode 100644 index ff349fe1b68..00000000000 --- a/homeassistant/components/tplink/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No TP-Link devices found on the network.", - "single_instance_allowed": "Only a single configuration is necessary." - }, - "step": { - "confirm": { - "description": "Do you want to setup TP-Link smart devices?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/es-419.json b/homeassistant/components/tplink/.translations/es-419.json deleted file mode 100644 index 2832804113a..00000000000 --- a/homeassistant/components/tplink/.translations/es-419.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos TP-Link en la red.", - "single_instance_allowed": "Solo es necesaria una \u00fanica configuraci\u00f3n." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar dispositivos inteligentes TP-Link?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/es.json b/homeassistant/components/tplink/.translations/es.json deleted file mode 100644 index 9b6e34f6c35..00000000000 --- a/homeassistant/components/tplink/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se han encontrado dispositivos TP-Link en la red.", - "single_instance_allowed": "S\u00f3lo es necesaria una configuraci\u00f3n." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar dispositivos de TP-Link?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/fr.json b/homeassistant/components/tplink/.translations/fr.json deleted file mode 100644 index 7351825398f..00000000000 --- a/homeassistant/components/tplink/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun p\u00e9riph\u00e9rique TP-Link trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration est n\u00e9cessaire." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer TP-Link smart devices?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/he.json b/homeassistant/components/tplink/.translations/he.json deleted file mode 100644 index 094174b09c1..00000000000 --- a/homeassistant/components/tplink/.translations/he.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05d4\u05ea\u05e7\u05e0\u05d9 TP-Link \u05d1\u05e8\u05e9\u05ea.", - "single_instance_allowed": "\u05e0\u05d3\u05e8\u05e9\u05ea \u05ea\u05e6\u05d5\u05e8\u05d4 \u05d0\u05d7\u05ea \u05d1\u05dc\u05d1\u05d3" - }, - "step": { - "confirm": { - "description": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d4\u05ea\u05e7\u05e0\u05d9\u05dd \u05d7\u05db\u05de\u05d9\u05dd \u05e9\u05dc TP-Link ?", - "title": "\u05d1\u05d9\u05ea \u05d7\u05db\u05dd \u05e9\u05dc TP-Link" - } - }, - "title": "\u05d1\u05d9\u05ea \u05d7\u05db\u05dd \u05e9\u05dc TP-Link" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/it.json b/homeassistant/components/tplink/.translations/it.json deleted file mode 100644 index 4931e2293dd..00000000000 --- a/homeassistant/components/tplink/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nessun dispositivo TP-Link trovato in rete.", - "single_instance_allowed": "\u00c8 necessaria una sola configurazione." - }, - "step": { - "confirm": { - "description": "Vuoi configurare i dispositivi intelligenti TP-Link?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/ko.json b/homeassistant/components/tplink/.translations/ko.json deleted file mode 100644 index 89255d78518..00000000000 --- a/homeassistant/components/tplink/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "TP-Link \uc2a4\ub9c8\ud2b8 \uae30\uae30\ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/lb.json b/homeassistant/components/tplink/.translations/lb.json deleted file mode 100644 index 11ca7218e11..00000000000 --- a/homeassistant/components/tplink/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng TP-Link Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun ass n\u00e9ideg." - }, - "step": { - "confirm": { - "description": "Soll TP-Link Smart Home konfigur\u00e9iert ginn?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/nl.json b/homeassistant/components/tplink/.translations/nl.json deleted file mode 100644 index 622315fd84c..00000000000 --- a/homeassistant/components/tplink/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen TP-Link apparaten gevonden op het netwerk.", - "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie is nodig." - }, - "step": { - "confirm": { - "description": "Wil je TP-Link slimme apparaten instellen?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/nn.json b/homeassistant/components/tplink/.translations/nn.json deleted file mode 100644 index 1d9fb41fc8c..00000000000 --- a/homeassistant/components/tplink/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/no.json b/homeassistant/components/tplink/.translations/no.json deleted file mode 100644 index 2cb30df1a42..00000000000 --- a/homeassistant/components/tplink/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen TP-Link enheter funnet p\u00e5 nettverket.", - "single_instance_allowed": "Kun en konfigurasjon av TP-Link er n\u00f8dvendig." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere TP-Link smart enheter?", - "title": "" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/pl.json b/homeassistant/components/tplink/.translations/pl.json deleted file mode 100644 index fa90495a5bf..00000000000 --- a/homeassistant/components/tplink/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono urz\u0105dze\u0144 TP-Link w sieci.", - "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 urz\u0105dzenia TP-Link smart?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/pt-BR.json b/homeassistant/components/tplink/.translations/pt-BR.json deleted file mode 100644 index 1289a9178f4..00000000000 --- a/homeassistant/components/tplink/.translations/pt-BR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo TP-Link encontrado na rede.", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar dispositivos inteligentes TP-Link?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/pt.json b/homeassistant/components/tplink/.translations/pt.json deleted file mode 100644 index 1d9fb41fc8c..00000000000 --- a/homeassistant/components/tplink/.translations/pt.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/ru.json b/homeassistant/components/tplink/.translations/ru.json deleted file mode 100644 index b7d76793245..00000000000 --- a/homeassistant/components/tplink/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 TP-Link \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c TP-Link Smart Home?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/sl.json b/homeassistant/components/tplink/.translations/sl.json deleted file mode 100644 index e686ee4bc04..00000000000 --- a/homeassistant/components/tplink/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "TP-Link naprav ni mogo\u010de najti v omre\u017eju.", - "single_instance_allowed": "Potrebna je samo ena konfiguracija." - }, - "step": { - "confirm": { - "description": "\u017delite namestiti pametne naprave TP-Link?", - "title": "TP-Link Pametni Dom" - } - }, - "title": "TP-Link Pametni Dom" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/sv.json b/homeassistant/components/tplink/.translations/sv.json deleted file mode 100644 index 14b6417d593..00000000000 --- a/homeassistant/components/tplink/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga TP-Link enheter hittades p\u00e5 n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration \u00e4r n\u00f6dv\u00e4ndig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera TP-Link smart enheter?", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/th.json b/homeassistant/components/tplink/.translations/th.json deleted file mode 100644 index 80740c9190f..00000000000 --- a/homeassistant/components/tplink/.translations/th.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/zh-Hans.json b/homeassistant/components/tplink/.translations/zh-Hans.json deleted file mode 100644 index ca3ac913375..00000000000 --- a/homeassistant/components/tplink/.translations/zh-Hans.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 TP-Link \u8bbe\u5907\u3002", - "single_instance_allowed": "\u53ea\u80fd\u914d\u7f6e\u4e00\u6b21\u3002" - }, - "step": { - "confirm": { - "description": "\u60a8\u60f3\u8981\u914d\u7f6e TP-Link \u667a\u80fd\u8bbe\u5907\u5417\uff1f", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/.translations/zh-Hant.json b/homeassistant/components/tplink/.translations/zh-Hant.json deleted file mode 100644 index 250a5509c4c..00000000000 --- a/homeassistant/components/tplink/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 TP-Link \u88dd\u7f6e\u3002", - "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21\u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a TP-Link \u667a\u80fd\u8a2d\u5099\uff1f", - "title": "TP-Link Smart Home" - } - }, - "title": "TP-Link Smart Home" - } -} \ No newline at end of file diff --git a/homeassistant/components/tplink/light.py b/homeassistant/components/tplink/light.py index b1a79a03c8c..9910fe42e03 100644 --- a/homeassistant/components/tplink/light.py +++ b/homeassistant/components/tplink/light.py @@ -55,23 +55,11 @@ LIGHT_SYSINFO_IS_VARIABLE_COLOR_TEMP = "is_variable_color_temp" LIGHT_SYSINFO_IS_COLOR = "is_color" -async def async_setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the platform. - - Deprecated. - """ - _LOGGER.warning( - "Loading as a platform is no longer supported, " - "convert to use the tplink component." - ) - - async def async_setup_entry(hass: HomeAssistantType, config_entry, async_add_entities): """Set up switches.""" await async_add_entities_retry( hass, async_add_entities, hass.data[TPLINK_DOMAIN][CONF_LIGHT], add_entity ) - return True @@ -87,12 +75,12 @@ def add_entity(device: SmartBulb, async_add_entities): def brightness_to_percentage(byt): """Convert brightness from absolute 0..255 to percentage.""" - return int((byt * 100.0) / 255.0) + return round((byt * 100.0) / 255.0) def brightness_from_percentage(percent): """Convert percentage to absolute value 0..255.""" - return (percent * 255.0) / 100.0 + return round((percent * 255.0) / 100.0) class LightState(NamedTuple): diff --git a/homeassistant/components/tplink/manifest.json b/homeassistant/components/tplink/manifest.json index 8b55ad7da71..62c9fcf5081 100644 --- a/homeassistant/components/tplink/manifest.json +++ b/homeassistant/components/tplink/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tplink", "requirements": ["pyHS100==0.3.5"], - "dependencies": [], "codeowners": ["@rytilahti"] } diff --git a/homeassistant/components/tplink/strings.json b/homeassistant/components/tplink/strings.json index e353c1363ab..cbb89653607 100644 --- a/homeassistant/components/tplink/strings.json +++ b/homeassistant/components/tplink/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "TP-Link Smart Home", "step": { "confirm": { - "title": "TP-Link Smart Home", "description": "Do you want to setup TP-Link smart devices?" } }, diff --git a/homeassistant/components/tplink/switch.py b/homeassistant/components/tplink/switch.py index b6ca69f4ccd..59d993477df 100644 --- a/homeassistant/components/tplink/switch.py +++ b/homeassistant/components/tplink/switch.py @@ -24,17 +24,6 @@ ATTR_TOTAL_ENERGY_KWH = "total_energy_kwh" ATTR_CURRENT_A = "current_a" -async def async_setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the platform. - - Deprecated. - """ - _LOGGER.warning( - "Loading as a platform is no longer supported, " - "convert to use the tplink component." - ) - - def add_entity(device: SmartPlug, async_add_entities): """Check if device is online and add the entity.""" # Attempt to get the sysinfo. If it fails, it will raise an diff --git a/homeassistant/components/tplink/translations/bg.json b/homeassistant/components/tplink/translations/bg.json new file mode 100644 index 00000000000..288ae9de670 --- /dev/null +++ b/homeassistant/components/tplink/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 TP-Link \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", + "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 TP-Link \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/ca.json b/homeassistant/components/tplink/translations/ca.json new file mode 100644 index 00000000000..41470c2bd6a --- /dev/null +++ b/homeassistant/components/tplink/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'han trobat dispositius TP-Link a la xarxa.", + "single_instance_allowed": "Nom\u00e9s cal una \u00fanica configuraci\u00f3." + }, + "step": { + "confirm": { + "description": "Vols configurar dispositius intel\u00b7ligents TP-Link?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/cs.json b/homeassistant/components/tplink/translations/cs.json new file mode 100644 index 00000000000..bc9be34a83e --- /dev/null +++ b/homeassistant/components/tplink/translations/cs.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/da.json b/homeassistant/components/tplink/translations/da.json new file mode 100644 index 00000000000..fa55b4ff92f --- /dev/null +++ b/homeassistant/components/tplink/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen TP-Link enheder kunne findes p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere TP-Link-smartenheder?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/de.json b/homeassistant/components/tplink/translations/de.json new file mode 100644 index 00000000000..bd391ed762c --- /dev/null +++ b/homeassistant/components/tplink/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Es wurden keine TP-Link-Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Es ist nur eine einzige Konfiguration erforderlich." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du TP-Link Smart Devices einrichten?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/en.json b/homeassistant/components/tplink/translations/en.json new file mode 100644 index 00000000000..49c7f40d4ad --- /dev/null +++ b/homeassistant/components/tplink/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No TP-Link devices found on the network.", + "single_instance_allowed": "Only a single configuration is necessary." + }, + "step": { + "confirm": { + "description": "Do you want to setup TP-Link smart devices?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/es-419.json b/homeassistant/components/tplink/translations/es-419.json new file mode 100644 index 00000000000..c349c395733 --- /dev/null +++ b/homeassistant/components/tplink/translations/es-419.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos TP-Link en la red.", + "single_instance_allowed": "Solo es necesaria una \u00fanica configuraci\u00f3n." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar dispositivos inteligentes TP-Link?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/es.json b/homeassistant/components/tplink/translations/es.json new file mode 100644 index 00000000000..6fa2fd5fd16 --- /dev/null +++ b/homeassistant/components/tplink/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se han encontrado dispositivos TP-Link en la red.", + "single_instance_allowed": "S\u00f3lo es necesaria una configuraci\u00f3n." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar dispositivos inteligentes de TP-Link?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/fr.json b/homeassistant/components/tplink/translations/fr.json new file mode 100644 index 00000000000..b67464cb97c --- /dev/null +++ b/homeassistant/components/tplink/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun p\u00e9riph\u00e9rique TP-Link trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration est n\u00e9cessaire." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer TP-Link smart devices?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/he.json b/homeassistant/components/tplink/translations/he.json new file mode 100644 index 00000000000..f947ce87933 --- /dev/null +++ b/homeassistant/components/tplink/translations/he.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05d4\u05ea\u05e7\u05e0\u05d9 TP-Link \u05d1\u05e8\u05e9\u05ea.", + "single_instance_allowed": "\u05e0\u05d3\u05e8\u05e9\u05ea \u05ea\u05e6\u05d5\u05e8\u05d4 \u05d0\u05d7\u05ea \u05d1\u05dc\u05d1\u05d3" + }, + "step": { + "confirm": { + "description": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d4\u05ea\u05e7\u05e0\u05d9\u05dd \u05d7\u05db\u05de\u05d9\u05dd \u05e9\u05dc TP-Link ?", + "title": "\u05d1\u05d9\u05ea \u05d7\u05db\u05dd \u05e9\u05dc TP-Link" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/it.json b/homeassistant/components/tplink/translations/it.json new file mode 100644 index 00000000000..fd46e40d33f --- /dev/null +++ b/homeassistant/components/tplink/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nessun dispositivo TP-Link trovato in rete.", + "single_instance_allowed": "\u00c8 necessaria una sola configurazione." + }, + "step": { + "confirm": { + "description": "Vuoi configurare i dispositivi intelligenti TP-Link?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/ko.json b/homeassistant/components/tplink/translations/ko.json new file mode 100644 index 00000000000..45e5c525e35 --- /dev/null +++ b/homeassistant/components/tplink/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "TP-Link \uc2a4\ub9c8\ud2b8 \uae30\uae30\ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/lb.json b/homeassistant/components/tplink/translations/lb.json new file mode 100644 index 00000000000..740b1684d6e --- /dev/null +++ b/homeassistant/components/tplink/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng TP-Link Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun ass n\u00e9ideg." + }, + "step": { + "confirm": { + "description": "Soll TP-Link Smart Home konfigur\u00e9iert ginn?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/nl.json b/homeassistant/components/tplink/translations/nl.json new file mode 100644 index 00000000000..0d6ace9da78 --- /dev/null +++ b/homeassistant/components/tplink/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen TP-Link apparaten gevonden op het netwerk.", + "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie is nodig." + }, + "step": { + "confirm": { + "description": "Wil je TP-Link slimme apparaten instellen?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/nn.json b/homeassistant/components/tplink/translations/nn.json new file mode 100644 index 00000000000..bc9be34a83e --- /dev/null +++ b/homeassistant/components/tplink/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/no.json b/homeassistant/components/tplink/translations/no.json new file mode 100644 index 00000000000..f2ba2085918 --- /dev/null +++ b/homeassistant/components/tplink/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen TP-Link enheter funnet p\u00e5 nettverket.", + "single_instance_allowed": "Kun en konfigurasjon av TP-Link er n\u00f8dvendig." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere TP-Link smart enheter?", + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/pl.json b/homeassistant/components/tplink/translations/pl.json new file mode 100644 index 00000000000..33b963e9813 --- /dev/null +++ b/homeassistant/components/tplink/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono urz\u0105dze\u0144 TP-Link w sieci.", + "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 urz\u0105dzenia TP-Link smart?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/pt-BR.json b/homeassistant/components/tplink/translations/pt-BR.json new file mode 100644 index 00000000000..f86d5d5b2a2 --- /dev/null +++ b/homeassistant/components/tplink/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo TP-Link encontrado na rede.", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar dispositivos inteligentes TP-Link?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/pt.json b/homeassistant/components/tplink/translations/pt.json new file mode 100644 index 00000000000..27c9fd6fbb1 --- /dev/null +++ b/homeassistant/components/tplink/translations/pt.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo TP-Link encontrado na rede.", + "single_instance_allowed": "S\u00f3 \u00e9 necess\u00e1ria uma \u00fanica configura\u00e7\u00e3o." + }, + "step": { + "confirm": { + "description": "Deseja configurar os dispositivos inteligentes TP-Link?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/ru.json b/homeassistant/components/tplink/translations/ru.json new file mode 100644 index 00000000000..5797fb63bd7 --- /dev/null +++ b/homeassistant/components/tplink/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 TP-Link \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c TP-Link Smart Home?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/sl.json b/homeassistant/components/tplink/translations/sl.json new file mode 100644 index 00000000000..9bbf88cae15 --- /dev/null +++ b/homeassistant/components/tplink/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "TP-Link naprav ni mogo\u010de najti v omre\u017eju.", + "single_instance_allowed": "Potrebna je samo ena konfiguracija." + }, + "step": { + "confirm": { + "description": "\u017delite namestiti pametne naprave TP-Link?", + "title": "TP-Link Pametni Dom" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/sv.json b/homeassistant/components/tplink/translations/sv.json new file mode 100644 index 00000000000..c60162e6e31 --- /dev/null +++ b/homeassistant/components/tplink/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga TP-Link enheter hittades p\u00e5 n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration \u00e4r n\u00f6dv\u00e4ndig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera TP-Link smart enheter?", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/th.json b/homeassistant/components/tplink/translations/th.json new file mode 100644 index 00000000000..23c027fa4af --- /dev/null +++ b/homeassistant/components/tplink/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "TP-Link Smart Home" +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/zh-Hans.json b/homeassistant/components/tplink/translations/zh-Hans.json new file mode 100644 index 00000000000..22ff788e9bb --- /dev/null +++ b/homeassistant/components/tplink/translations/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 TP-Link \u8bbe\u5907\u3002", + "single_instance_allowed": "\u53ea\u80fd\u914d\u7f6e\u4e00\u6b21\u3002" + }, + "step": { + "confirm": { + "description": "\u60a8\u60f3\u8981\u914d\u7f6e TP-Link \u667a\u80fd\u8bbe\u5907\u5417\uff1f", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/zh-Hant.json b/homeassistant/components/tplink/translations/zh-Hant.json new file mode 100644 index 00000000000..08a4779e593 --- /dev/null +++ b/homeassistant/components/tplink/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 TP-Link \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21\u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a TP-Link \u667a\u80fd\u8a2d\u5099\uff1f", + "title": "TP-Link Smart Home" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink_lte/manifest.json b/homeassistant/components/tplink_lte/manifest.json index 249fb4db1fa..a2602527b31 100644 --- a/homeassistant/components/tplink_lte/manifest.json +++ b/homeassistant/components/tplink_lte/manifest.json @@ -3,6 +3,5 @@ "name": "TP-Link LTE", "documentation": "https://www.home-assistant.io/integrations/tplink_lte", "requirements": ["tp-connected==0.0.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/traccar/.translations/bg.json b/homeassistant/components/traccar/.translations/bg.json deleted file mode 100644 index 7fe89d491c9..00000000000 --- a/homeassistant/components/traccar/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Traccar.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Traccar. \n\n \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441: ` {webhook_url} ` \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Traccar?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/ca.json b/homeassistant/components/traccar/.translations/ca.json deleted file mode 100644 index 0cfb9738d5d..00000000000 --- a/homeassistant/components/traccar/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Traccar.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de Traccar.\n\nUtilitza el seg\u00fcent enlla\u00e7: `{webhook_url}`\n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar Traccar?", - "title": "Configura Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/da.json b/homeassistant/components/traccar/.translations/da.json deleted file mode 100644 index b1ab350c905..00000000000 --- a/homeassistant/components/traccar/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Traccar-meddelelser.", - "one_instance_allowed": "Kun en enkelt instans er n\u00f8dvendig." - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i Traccar.\n\nBrug f\u00f8lgende webadresse: `{webhook_url}`\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Traccar?", - "title": "Konfigurer Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/de.json b/homeassistant/components/traccar/.translations/de.json deleted file mode 100644 index 92b1f3e6b29..00000000000 --- a/homeassistant/components/traccar/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet zug\u00e4nglich sein, um Nachrichten von Traccar zu empfangen.", - "one_instance_allowed": "Es ist nur eine einzelne Instanz erforderlich." - }, - "create_entry": { - "default": "Um Ereignisse an den Heimassistenten zu senden, m\u00fcssen die Webhook-Funktionen in Traccar eingerichtet werden.\n\nVerwende die folgende URL: `{webhook_url}}`\n\nSiehe [die Dokumentation]( {docs_url} ) f\u00fcr weitere Details." - }, - "step": { - "user": { - "description": "M\u00f6chtest du Traccar wirklich einrichten?", - "title": "Traccar einrichten" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/en.json b/homeassistant/components/traccar/.translations/en.json deleted file mode 100644 index a8804835278..00000000000 --- a/homeassistant/components/traccar/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Traccar.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup the webhook feature in Traccar.\n\nUse the following url: `{webhook_url}`\n\nSee [the documentation]({docs_url}) for further details." - }, - "step": { - "user": { - "description": "Are you sure you want to set up Traccar?", - "title": "Set up Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/es.json b/homeassistant/components/traccar/.translations/es.json deleted file mode 100644 index dedaf02971c..00000000000 --- a/homeassistant/components/traccar/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Traccar.", - "one_instance_allowed": "S\u00f3lo se necesita una \u00fanica instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, necesitar\u00e1 configurar la funci\u00f3n de webhook en Traccar.\n\nUtilice la siguiente url: ``{webhook_url}``\n\nConsulte la [documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1 seguro de querer configurar Traccar?", - "title": "Configurar Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/fr.json b/homeassistant/components/traccar/.translations/fr.json deleted file mode 100644 index 0948a31739f..00000000000 --- a/homeassistant/components/traccar/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages de Traccar.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans Traccar. \n\n Utilisez l'URL suivante: ` {webhook_url} ` \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer Traccar?", - "title": "Configurer Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/it.json b/homeassistant/components/traccar/.translations/it.json deleted file mode 100644 index a0980644a71..00000000000 --- a/homeassistant/components/traccar/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Traccar.", - "one_instance_allowed": "\u00c8 necessaria solo una singola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, \u00e8 necessario configurare la funzionalit\u00e0 webhook in Traccar.\n\nUtilizzare l'URL seguente: `{webhook_url}`\n\nPer ulteriori dettagli, vedere [la documentazione]({docs_url}) ." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare Traccar?", - "title": "Imposta Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/ko.json b/homeassistant/components/traccar/.translations/ko.json deleted file mode 100644 index 40e1aaf4d6b..00000000000 --- a/homeassistant/components/traccar/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Traccar \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Traccar \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c URL \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4: `{webhook_url}`\n \n\uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Traccar \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Traccar \uc124\uc815" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/lb.json b/homeassistant/components/traccar/.translations/lb.json deleted file mode 100644 index 8808d85a1d6..00000000000 --- a/homeassistant/components/traccar/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Traccar Noriichten z'empf\u00e4nken.", - "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." - }, - "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am Traccar ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider Informatiounen." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Traccar anzeriichten?", - "title": "Traccar ariichten" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/nl.json b/homeassistant/components/traccar/.translations/nl.json deleted file mode 100644 index c4ee0544a2e..00000000000 --- a/homeassistant/components/traccar/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant-exemplaar moet toegankelijk zijn vanaf internet om berichten van Traccar te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." - }, - "create_entry": { - "default": "Voor het verzenden van gebeurtenissen naar Home Assistant, moet u de webhook-functie in Traccar instellen.\n\nGebruik de volgende URL: ' {webhook_url} '\n\nZie [de documentatie] ({docs_url}) voor meer informatie." - }, - "step": { - "user": { - "description": "Weet u zeker dat u Traccar wilt instellen?", - "title": "Traccar instellen" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/nn.json b/homeassistant/components/traccar/.translations/nn.json deleted file mode 100644 index 9fc23b3e394..00000000000 --- a/homeassistant/components/traccar/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/no.json b/homeassistant/components/traccar/.translations/no.json deleted file mode 100644 index 805b952690e..00000000000 --- a/homeassistant/components/traccar/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-forekomst m\u00e5 v\u00e6re tilgjengelig fra Internett for \u00e5 motta meldinger fra Traccar.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "Hvis du vil sende hendelser til Home Assistant, m\u00e5 du konfigurere webhook-funksjonen i Traccar.\n\nBruk f\u00f8lgende URL-adresse: ' {webhook_url} '\n\nSe [dokumentasjonen] ({docs_url}) for mer informasjon." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil sette opp Traccar?", - "title": "Sett opp Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/pl.json b/homeassistant/components/traccar/.translations/pl.json deleted file mode 100644 index b7eaf7fe16e..00000000000 --- a/homeassistant/components/traccar/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z Traccar.", - "one_instance_allowed": "Niezb\u0119dna jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 webhook w Traccar. \n\n U\u017cyj nast\u0119puj\u0105cego URL: `{webhook_url}` \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Traccar?", - "title": "Konfiguracja Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/pt-BR.json b/homeassistant/components/traccar/.translations/pt-BR.json deleted file mode 100644 index 4fa0c4e6714..00000000000 --- a/homeassistant/components/traccar/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens do Traccar.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos ao Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso de webhook no Traccar. \n\n Use o seguinte URL: ` {webhook_url} ` \n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) para mais detalhes." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Traccar?", - "title": "Configurar Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/ru.json b/homeassistant/components/traccar/.translations/ru.json deleted file mode 100644 index 1a215c90d4b..00000000000 --- a/homeassistant/components/traccar/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Traccar.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Traccar.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Traccar?", - "title": "Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/sl.json b/homeassistant/components/traccar/.translations/sl.json deleted file mode 100644 index 95aaca7e67d..00000000000 --- a/homeassistant/components/traccar/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopen prek interneta, da boste lahko prejemali Traccar sporo\u010dila.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "\u010ce \u017eelite poslati dogodke v Home Assistant, boste morali nastaviti funkcijo \"webhook\" v traccar.\n\nUporabite naslednji URL: ' {webhook_url} '\n\nZa podrobnej\u0161e informacije glejte [dokumentacijo] ({docs_url})." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Traccar?", - "title": "Nastavite Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/sv.json b/homeassistant/components/traccar/.translations/sv.json deleted file mode 100644 index ddd33235e01..00000000000 --- a/homeassistant/components/traccar/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot meddelanden fr\u00e5n Traccar.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du st\u00e4lla in webhook-funktionen i Traccar.\n\nAnv\u00e4nd f\u00f6ljande url: `{webhook_url}`\n\nMer information finns i [dokumentationen]({docs_url})." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill st\u00e4lla in Traccar?", - "title": "St\u00e4ll in Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/tr.json b/homeassistant/components/traccar/.translations/tr.json deleted file mode 100644 index 22944e1c4cc..00000000000 --- a/homeassistant/components/traccar/.translations/tr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Traccar'\u0131 kur" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/zh-Hant.json b/homeassistant/components/traccar/.translations/zh-Hant.json deleted file mode 100644 index 85e8994dc55..00000000000 --- a/homeassistant/components/traccar/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Traccar \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Traccar \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u4f7f\u7528 url: `{webhook_url}`\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Traccar\uff1f", - "title": "\u8a2d\u5b9a Traccar" - } - }, - "title": "Traccar" - } -} \ No newline at end of file diff --git a/homeassistant/components/traccar/__init__.py b/homeassistant/components/traccar/__init__.py index 7e94ab0a351..03482292135 100644 --- a/homeassistant/components/traccar/__init__.py +++ b/homeassistant/components/traccar/__init__.py @@ -28,7 +28,7 @@ _LOGGER = logging.getLogger(__name__) TRACKER_UPDATE = f"{DOMAIN}_tracker_update" -DEFAULT_ACCURACY = 200 +DEFAULT_ACCURACY = HTTP_OK DEFAULT_BATTERY = -1 diff --git a/homeassistant/components/traccar/device_tracker.py b/homeassistant/components/traccar/device_tracker.py index b6e829750e9..dc2b60dec1a 100644 --- a/homeassistant/components/traccar/device_tracker.py +++ b/homeassistant/components/traccar/device_tracker.py @@ -316,7 +316,7 @@ class TraccarScanner: None, ) self._hass.bus.async_fire( - "traccar_" + self._event_types.get(event["type"]), + f"traccar_{self._event_types.get(event['type'])}", { "device_traccar_id": event["deviceId"], "device_name": device_name, diff --git a/homeassistant/components/traccar/strings.json b/homeassistant/components/traccar/strings.json index 19f4eb0da22..8574f4f34f1 100644 --- a/homeassistant/components/traccar/strings.json +++ b/homeassistant/components/traccar/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Traccar", "step": { "user": { "title": "Set up Traccar", diff --git a/homeassistant/components/traccar/translations/bg.json b/homeassistant/components/traccar/translations/bg.json new file mode 100644 index 00000000000..19faba84640 --- /dev/null +++ b/homeassistant/components/traccar/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Traccar.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 Traccar. \n\n \u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441: ` {webhook_url} ` \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Traccar?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/ca.json b/homeassistant/components/traccar/translations/ca.json new file mode 100644 index 00000000000..2fa93690553 --- /dev/null +++ b/homeassistant/components/traccar/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Traccar.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar l'opci\u00f3 webhook de Traccar.\n\nUtilitza el seg\u00fcent enlla\u00e7: `{webhook_url}`\n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar Traccar?", + "title": "Configura Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/da.json b/homeassistant/components/traccar/translations/da.json new file mode 100644 index 00000000000..e836d84aea7 --- /dev/null +++ b/homeassistant/components/traccar/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Traccar-meddelelser.", + "one_instance_allowed": "Kun en enkelt instans er n\u00f8dvendig." + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i Traccar.\n\nBrug f\u00f8lgende webadresse: `{webhook_url}`\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Traccar?", + "title": "Konfigurer Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/de.json b/homeassistant/components/traccar/translations/de.json new file mode 100644 index 00000000000..b4488c854f8 --- /dev/null +++ b/homeassistant/components/traccar/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet zug\u00e4nglich sein, um Nachrichten von Traccar zu empfangen.", + "one_instance_allowed": "Es ist nur eine einzelne Instanz erforderlich." + }, + "create_entry": { + "default": "Um Ereignisse an den Heimassistenten zu senden, m\u00fcssen die Webhook-Funktionen in Traccar eingerichtet werden.\n\nVerwende die folgende URL: `{webhook_url}}`\n\nSiehe [die Dokumentation]( {docs_url} ) f\u00fcr weitere Details." + }, + "step": { + "user": { + "description": "M\u00f6chtest du Traccar wirklich einrichten?", + "title": "Traccar einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/en.json b/homeassistant/components/traccar/translations/en.json new file mode 100644 index 00000000000..1e6b286def2 --- /dev/null +++ b/homeassistant/components/traccar/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive messages from Traccar.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup the webhook feature in Traccar.\n\nUse the following url: `{webhook_url}`\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up Traccar?", + "title": "Set up Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/es-419.json b/homeassistant/components/traccar/translations/es-419.json similarity index 100% rename from homeassistant/components/traccar/.translations/es-419.json rename to homeassistant/components/traccar/translations/es-419.json diff --git a/homeassistant/components/traccar/translations/es.json b/homeassistant/components/traccar/translations/es.json new file mode 100644 index 00000000000..b9cd4b9def9 --- /dev/null +++ b/homeassistant/components/traccar/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Traccar.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, necesitar\u00e1 configurar la funci\u00f3n de webhook en Traccar.\n\nUtilice la siguiente url: ``{webhook_url}``\n\nConsulte la [documentaci\u00f3n]({docs_url}) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1 seguro de querer configurar Traccar?", + "title": "Configurar Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/fr.json b/homeassistant/components/traccar/translations/fr.json new file mode 100644 index 00000000000..faf64359f0d --- /dev/null +++ b/homeassistant/components/traccar/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages de Traccar.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans Traccar. \n\n Utilisez l'URL suivante: ` {webhook_url} ` \n\n Voir [la documentation] ( {docs_url} ) pour plus de d\u00e9tails." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer Traccar?", + "title": "Configurer Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/it.json b/homeassistant/components/traccar/translations/it.json new file mode 100644 index 00000000000..54e46e8d31d --- /dev/null +++ b/homeassistant/components/traccar/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Traccar.", + "one_instance_allowed": "\u00c8 necessaria solo una singola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, \u00e8 necessario configurare la funzionalit\u00e0 webhook in Traccar.\n\nUtilizzare l'URL seguente: `{webhook_url}`\n\nPer ulteriori dettagli, vedere [la documentazione]({docs_url}) ." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare Traccar?", + "title": "Imposta Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/ko.json b/homeassistant/components/traccar/translations/ko.json new file mode 100644 index 00000000000..4d4282dc4c1 --- /dev/null +++ b/homeassistant/components/traccar/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Traccar \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 Traccar \uc5d0\uc11c Webhook \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c URL \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4: `{webhook_url}`\n \n\uc790\uc138\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Traccar \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Traccar \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/lb.json b/homeassistant/components/traccar/translations/lb.json new file mode 100644 index 00000000000..a4d1da866e0 --- /dev/null +++ b/homeassistant/components/traccar/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Traccar Noriichten z'empf\u00e4nken.", + "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am Traccar ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider Informatiounen." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Traccar anzeriichten?", + "title": "Traccar ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/nl.json b/homeassistant/components/traccar/translations/nl.json new file mode 100644 index 00000000000..fd238b09bd9 --- /dev/null +++ b/homeassistant/components/traccar/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant-exemplaar moet toegankelijk zijn vanaf internet om berichten van Traccar te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n instantie is nodig." + }, + "create_entry": { + "default": "Voor het verzenden van gebeurtenissen naar Home Assistant, moet u de webhook-functie in Traccar instellen.\n\nGebruik de volgende URL: ' {webhook_url} '\n\nZie [de documentatie] ({docs_url}) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet u zeker dat u Traccar wilt instellen?", + "title": "Traccar instellen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/nn.json b/homeassistant/components/traccar/translations/nn.json new file mode 100644 index 00000000000..8db28ed6982 --- /dev/null +++ b/homeassistant/components/traccar/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Traccar" +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/no.json b/homeassistant/components/traccar/translations/no.json new file mode 100644 index 00000000000..41a05ac1c6f --- /dev/null +++ b/homeassistant/components/traccar/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-forekomst m\u00e5 v\u00e6re tilgjengelig fra Internett for \u00e5 motta meldinger fra Traccar.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "Hvis du vil sende hendelser til Home Assistant, m\u00e5 du konfigurere webhook-funksjonen i Traccar.\n\nBruk f\u00f8lgende URL-adresse: ' {webhook_url} '\n\nSe [dokumentasjonen] ({docs_url}) for mer informasjon." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp Traccar?", + "title": "Sett opp Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/pl.json b/homeassistant/components/traccar/translations/pl.json new file mode 100644 index 00000000000..5b1ad10c74d --- /dev/null +++ b/homeassistant/components/traccar/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Twoja instancja Home Assistant musi by\u0107 dost\u0119pna z Internetu, aby otrzymywa\u0107 wiadomo\u015bci z Traccar.", + "one_instance_allowed": "Niezb\u0119dna jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 webhook w Traccar. \n\n U\u017cyj nast\u0119puj\u0105cego URL: `{webhook_url}` \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Traccar?", + "title": "Konfiguracja Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/pt-BR.json b/homeassistant/components/traccar/translations/pt-BR.json new file mode 100644 index 00000000000..2a7afb38268 --- /dev/null +++ b/homeassistant/components/traccar/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens do Traccar.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos ao Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso de webhook no Traccar. \n\n Use o seguinte URL: ` {webhook_url} ` \n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) para mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Traccar?", + "title": "Configurar Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/ru.json b/homeassistant/components/traccar/translations/ru.json new file mode 100644 index 00000000000..a2979379e18 --- /dev/null +++ b/homeassistant/components/traccar/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Traccar.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f Traccar.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Traccar?", + "title": "Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/sl.json b/homeassistant/components/traccar/translations/sl.json new file mode 100644 index 00000000000..016f3bbbeb2 --- /dev/null +++ b/homeassistant/components/traccar/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161 Home Assistant mora biti dostopen prek interneta, da boste lahko prejemali Traccar sporo\u010dila.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "\u010ce \u017eelite poslati dogodke v Home Assistant, boste morali nastaviti funkcijo \"webhook\" v traccar.\n\nUporabite naslednji URL: ' {webhook_url} '\n\nZa podrobnej\u0161e informacije glejte [dokumentacijo] ({docs_url})." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Traccar?", + "title": "Nastavite Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/sv.json b/homeassistant/components/traccar/translations/sv.json new file mode 100644 index 00000000000..ce32171eba5 --- /dev/null +++ b/homeassistant/components/traccar/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot meddelanden fr\u00e5n Traccar.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du st\u00e4lla in webhook-funktionen i Traccar.\n\nAnv\u00e4nd f\u00f6ljande url: `{webhook_url}`\n\nMer information finns i [dokumentationen]({docs_url})." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill st\u00e4lla in Traccar?", + "title": "St\u00e4ll in Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/translations/tr.json b/homeassistant/components/traccar/translations/tr.json new file mode 100644 index 00000000000..7d044949a6e --- /dev/null +++ b/homeassistant/components/traccar/translations/tr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Traccar'\u0131 kur" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/traccar/.translations/zh-Hans.json b/homeassistant/components/traccar/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/traccar/.translations/zh-Hans.json rename to homeassistant/components/traccar/translations/zh-Hans.json diff --git a/homeassistant/components/traccar/translations/zh-Hant.json b/homeassistant/components/traccar/translations/zh-Hant.json new file mode 100644 index 00000000000..c469020aef6 --- /dev/null +++ b/homeassistant/components/traccar/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Traccar \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc Traccar \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u4f7f\u7528 url: `{webhook_url}`\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Traccar\uff1f", + "title": "\u8a2d\u5b9a Traccar" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/trackr/manifest.json b/homeassistant/components/trackr/manifest.json index 6b3368382c8..d59d13102e2 100644 --- a/homeassistant/components/trackr/manifest.json +++ b/homeassistant/components/trackr/manifest.json @@ -3,6 +3,5 @@ "name": "TrackR", "documentation": "https://www.home-assistant.io/integrations/trackr", "requirements": ["pytrackr==0.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tradfri/.translations/bg.json b/homeassistant/components/tradfri/.translations/bg.json deleted file mode 100644 index a9ce5213d45..00000000000 --- a/homeassistant/components/tradfri/.translations/bg.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0428\u043b\u044e\u0437\u0430 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f." - }, - "error": { - "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0448\u043b\u044e\u0437\u0430.", - "invalid_key": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0435 \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447. \u0410\u043a\u043e \u0442\u043e\u0432\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0430\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u0434\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0442\u0435 \u0448\u043b\u044e\u0437\u0430.", - "timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430 \u0438\u0437\u0442\u0435\u0447\u0435." - }, - "step": { - "auth": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "security_code": "\u041a\u043e\u0434 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442" - }, - "description": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043d\u0430\u043c\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u0434\u0430 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442 \u043d\u0430 \u0433\u044a\u0440\u0431\u0430 \u043d\u0430 \u0448\u043b\u044e\u0437\u0430.", - "title": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043a\u043e\u0434 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/ca.json b/homeassistant/components/tradfri/.translations/ca.json deleted file mode 100644 index eb3f25e8b49..00000000000 --- a/homeassistant/components/tradfri/.translations/ca.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'enlla\u00e7 ja est\u00e0 configurat", - "already_in_progress": "La configuraci\u00f3 de l'enlla\u00e7 ja est\u00e0 en curs." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar a la passarel\u00b7la d'enlla\u00e7", - "invalid_key": "Ha fallat el registre amb la clau proporcionada. Si aix\u00f2 continua passant, intenta reiniciar la passarel\u00b7la d'enlla\u00e7.", - "timeout": "S'ha acabat el temps d'espera durant la validaci\u00f3 del codi." - }, - "step": { - "auth": { - "data": { - "host": "Amfitri\u00f3", - "security_code": "Codi de seguretat" - }, - "description": "Pots trobar el codi de seguretat a la part posterior de la teva passarel\u00b7la d'enlla\u00e7.", - "title": "Introdueix el codi de seguretat" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/cs.json b/homeassistant/components/tradfri/.translations/cs.json deleted file mode 100644 index 58782a1b421..00000000000 --- a/homeassistant/components/tradfri/.translations/cs.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge je ji\u017e nakonfigurov\u00e1n" - }, - "error": { - "cannot_connect": "Nelze se p\u0159ipojit k br\u00e1n\u011b.", - "invalid_key": "Nepoda\u0159ilo se zaregistrovat pomoc\u00ed zadan\u00e9ho kl\u00ed\u010de. Pokud se situace opakuje, zkuste restartovat gateway.", - "timeout": "\u010casov\u00fd limit ov\u011b\u0159ov\u00e1n\u00ed k\u00f3du vypr\u0161el" - }, - "step": { - "auth": { - "data": { - "host": "Hostitel", - "security_code": "Bezpe\u010dnostn\u00ed k\u00f3d" - }, - "description": "Bezpe\u010dnostn\u00ed k\u00f3d naleznete na zadn\u00ed stran\u011b za\u0159\u00edzen\u00ed.", - "title": "Zadejte bezpe\u010dnostn\u00ed k\u00f3d" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/da.json b/homeassistant/components/tradfri/.translations/da.json deleted file mode 100644 index 36995aaae46..00000000000 --- a/homeassistant/components/tradfri/.translations/da.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bro er allerede konfigureret.", - "already_in_progress": "Bro konfiguration er allerede i gang." - }, - "error": { - "cannot_connect": "Kan ikke oprette forbindelse til gateway.", - "invalid_key": "Fejl ved registrerering med den leverede n\u00f8gle. Hvis dette sker konsekvent skal du pr\u00f8ve at genstarte gatewayen.", - "timeout": "Timeout ved validering af kode" - }, - "step": { - "auth": { - "data": { - "host": "V\u00e6rt", - "security_code": "Sikkerhedskode" - }, - "description": "Du kan finde sikkerhedskoden p\u00e5 bagsiden af din gateway.", - "title": "Indtast sikkerhedskode" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/de.json b/homeassistant/components/tradfri/.translations/de.json deleted file mode 100644 index 68165dbb291..00000000000 --- a/homeassistant/components/tradfri/.translations/de.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge ist bereits konfiguriert.", - "already_in_progress": "Der Konfigurationsablauf f\u00fcr die Bridge wird bereits ausgef\u00fchrt." - }, - "error": { - "cannot_connect": "Verbindung zum Gateway nicht m\u00f6glich.", - "invalid_key": "Fehler beim Registrieren mit dem angegebenen Schl\u00fcssel. Wenn dies weiterhin geschieht, versuche, das Gateway neu zu starten.", - "timeout": "Timeout bei der \u00dcberpr\u00fcfung des Codes." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "Sicherheitscode" - }, - "description": "Du findest den Sicherheitscode auf der R\u00fcckseite deines Gateways.", - "title": "Sicherheitscode eingeben" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/en.json b/homeassistant/components/tradfri/.translations/en.json deleted file mode 100644 index 0b11474d677..00000000000 --- a/homeassistant/components/tradfri/.translations/en.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge is already configured.", - "already_in_progress": "Bridge configuration is already in progress." - }, - "error": { - "cannot_connect": "Unable to connect to the gateway.", - "invalid_key": "Failed to register with provided key. If this keeps happening, try restarting the gateway.", - "timeout": "Timeout validating the code." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "Security Code" - }, - "description": "You can find the security code on the back of your gateway.", - "title": "Enter security code" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/es-419.json b/homeassistant/components/tradfri/.translations/es-419.json deleted file mode 100644 index 4b3e1ed52d4..00000000000 --- a/homeassistant/components/tradfri/.translations/es-419.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El Bridge ya est\u00e1 configurado", - "already_in_progress": "La configuraci\u00f3n del puente ya est\u00e1 en progreso." - }, - "error": { - "cannot_connect": "No se puede conectar a la puerta de enlace.", - "invalid_key": "Error al registrarse con la clave proporcionada. Si esto sigue sucediendo, intente reiniciar el gateway.", - "timeout": "Tiempo de espera para validar el c\u00f3digo." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "C\u00f3digo de seguridad" - }, - "description": "Puede encontrar el c\u00f3digo de seguridad en la parte posterior de su puerta de enlace.", - "title": "Ingrese el c\u00f3digo de seguridad" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/es.json b/homeassistant/components/tradfri/.translations/es.json deleted file mode 100644 index 343810f92cf..00000000000 --- a/homeassistant/components/tradfri/.translations/es.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El puente ya esta configurado", - "already_in_progress": "La configuraci\u00f3n del bridge ya est\u00e1 en marcha." - }, - "error": { - "cannot_connect": "No se puede conectar a la puerta de enlace.", - "invalid_key": "No se ha podido registrar con la clave proporcionada. Si esto sigue ocurriendo, intenta reiniciar el gateway.", - "timeout": "Tiempo de espera agotado validando el c\u00f3digo." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "C\u00f3digo de seguridad" - }, - "description": "Puedes encontrar el c\u00f3digo de seguridad en la parte posterior de tu gateway.", - "title": "Introduzca el c\u00f3digo de seguridad" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/fr.json b/homeassistant/components/tradfri/.translations/fr.json deleted file mode 100644 index c1dc31028a8..00000000000 --- a/homeassistant/components/tradfri/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le pont est d\u00e9j\u00e0 configur\u00e9.", - "already_in_progress": "La configuration du pont est d\u00e9j\u00e0 en cours." - }, - "error": { - "cannot_connect": "Impossible de se connecter \u00e0 la passerelle.", - "invalid_key": "\u00c9chec de l'enregistrement avec la cl\u00e9 fournie. Si cela se reproduit, essayez de red\u00e9marrer la passerelle.", - "timeout": "D\u00e9lai d'attente de la validation du code expir\u00e9" - }, - "step": { - "auth": { - "data": { - "host": "H\u00f4te", - "security_code": "Code de s\u00e9curit\u00e9" - }, - "description": "Vous pouvez trouver le code de s\u00e9curit\u00e9 au dos de votre passerelle.", - "title": "Entrer le code de s\u00e9curit\u00e9" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/he.json b/homeassistant/components/tradfri/.translations/he.json deleted file mode 100644 index 09af3d09bdc..00000000000 --- a/homeassistant/components/tradfri/.translations/he.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8" - }, - "error": { - "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05de\u05d2\u05e9\u05e8", - "invalid_key": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc \u05e2\u05dd \u05d4\u05de\u05e4\u05ea\u05d7 \u05e9\u05e1\u05d5\u05e4\u05e7. \u05d0\u05dd \u05d6\u05d4 \u05e7\u05d5\u05e8\u05d4 \u05e9\u05d5\u05d1, \u05e0\u05e1\u05d4 \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05de\u05d2\u05e9\u05e8.", - "timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3" - }, - "step": { - "auth": { - "data": { - "host": "\u05de\u05d0\u05e8\u05d7", - "security_code": "\u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4" - }, - "description": "\u05ea\u05d5\u05db\u05dc \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05e7\u05d5\u05d3 \u05d4\u05d0\u05d1\u05d8\u05d7\u05d4 \u05d1\u05d2\u05d1 \u05d4\u05de\u05d2\u05e9\u05e8 \u05e9\u05dc\u05da.", - "title": "\u05d4\u05d6\u05df \u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/hr.json b/homeassistant/components/tradfri/.translations/hr.json deleted file mode 100644 index b9b9cc6c0eb..00000000000 --- a/homeassistant/components/tradfri/.translations/hr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "already_in_progress": "Konfiguracija premosnice je ve\u0107 u tijeku." - }, - "step": { - "auth": { - "data": { - "host": "Host" - } - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/hu.json b/homeassistant/components/tradfri/.translations/hu.json deleted file mode 100644 index 88ff9e6104b..00000000000 --- a/homeassistant/components/tradfri/.translations/hu.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A bridge m\u00e1r konfigur\u00e1lva van" - }, - "error": { - "cannot_connect": "Nem siker\u00fclt csatlakozni a gatewayhez.", - "invalid_key": "Nem siker\u00fclt regisztr\u00e1lni a megadott kulcs seg\u00edts\u00e9g\u00e9vel. Ha ez t\u00f6bbsz\u00f6r megt\u00f6rt\u00e9nik, pr\u00f3b\u00e1lja meg \u00fajraind\u00edtani a gatewayt.", - "timeout": "Id\u0151t\u00fall\u00e9p\u00e9s a k\u00f3d \u00e9rv\u00e9nyes\u00edt\u00e9se sor\u00e1n." - }, - "step": { - "auth": { - "data": { - "host": "Hoszt", - "security_code": "Biztons\u00e1gi K\u00f3d" - }, - "description": "A biztons\u00e1gi k\u00f3dot a Gatewayed h\u00e1toldal\u00e1n tal\u00e1lod.", - "title": "Add meg a biztons\u00e1gi k\u00f3dot" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/id.json b/homeassistant/components/tradfri/.translations/id.json deleted file mode 100644 index 5e1439c8d7d..00000000000 --- a/homeassistant/components/tradfri/.translations/id.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge sudah dikonfigurasi" - }, - "error": { - "cannot_connect": "Tidak dapat terhubung ke gateway.", - "invalid_key": "Gagal mendaftar dengan kunci yang disediakan. Jika ini terus terjadi, coba mulai ulang gateway.", - "timeout": "Waktu tunggu memvalidasi kode telah habis." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "Kode keamanan" - }, - "description": "Anda dapat menemukan kode keamanan di belakang gateway Anda.", - "title": "Masukkan kode keamanan" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/it.json b/homeassistant/components/tradfri/.translations/it.json deleted file mode 100644 index 99ba9053d79..00000000000 --- a/homeassistant/components/tradfri/.translations/it.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge gi\u00e0 configurato.", - "already_in_progress": "La configurazione del Bridge \u00e8 gi\u00e0 in corso." - }, - "error": { - "cannot_connect": "Impossibile connettersi al gateway.", - "invalid_key": "Impossibile registrarsi con la chiave fornita. Se questo continua a succedere, prova a riavviare il gateway.", - "timeout": "Tempo scaduto per la validazione del codice." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "Codice di sicurezza" - }, - "description": "Puoi trovare il codice di sicurezza sul retro del tuo gateway.", - "title": "Inserisci il codice di sicurezza" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/ko.json b/homeassistant/components/tradfri/.translations/ko.json deleted file mode 100644 index 02c46b52f6d..00000000000 --- a/homeassistant/components/tradfri/.translations/ko.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "already_in_progress": "\ube0c\ub9bf\uc9c0 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4." - }, - "error": { - "cannot_connect": "\uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "invalid_key": "\uc81c\uacf5\ub41c \ud0a4\ub85c \ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\uac00 \uacc4\uc18d \ubc1c\uc0dd\ud558\uba74 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud574\ubcf4\uc138\uc694.", - "timeout": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "auth": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "security_code": "\ubcf4\uc548 \ucf54\ub4dc" - }, - "description": "\uac8c\uc774\ud2b8\uc6e8\uc774 \ub4b7\uba74\uc5d0\uc11c \ubcf4\uc548 \ucf54\ub4dc\ub97c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "\ubcf4\uc548 \ucf54\ub4dc \uc785\ub825" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/lb.json b/homeassistant/components/tradfri/.translations/lb.json deleted file mode 100644 index cd3e61a42ce..00000000000 --- a/homeassistant/components/tradfri/.translations/lb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge ass schon konfigur\u00e9iert", - "already_in_progress": "Bridge Konfiguratioun ass schonn am gaang." - }, - "error": { - "cannot_connect": "Keng Verbindung mat der Gateway m\u00e9iglech.", - "invalid_key": "Konnt sech net mam ugebuedenem Schl\u00ebssel registr\u00e9ieren. Falls d\u00ebst widderhuelt optr\u00ebtt, prob\u00e9iert de Gateway fr\u00ebsch ze starten.", - "timeout": "Z\u00e4it Iwwerschreidung\u00a0beim valid\u00e9ieren vum Code" - }, - "step": { - "auth": { - "data": { - "host": "Apparat", - "security_code": "S\u00e9cherheets Code" - }, - "description": "Dir fannt de S\u00e9cherheets Code op der R\u00e9cks\u00e4it vun \u00e4rem Gateway.", - "title": "Gitt de S\u00e9cherheets Code an" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/nl.json b/homeassistant/components/tradfri/.translations/nl.json deleted file mode 100644 index f190d378ec7..00000000000 --- a/homeassistant/components/tradfri/.translations/nl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge is al geconfigureerd.", - "already_in_progress": "Bridge configuratie is al in volle gang." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met bridge", - "invalid_key": "Mislukt om te registreren met de meegeleverde sleutel. Als dit blijft gebeuren, probeer dan de gateway opnieuw op te starten.", - "timeout": "Time-out bij validatie van code" - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "Beveiligingscode" - }, - "description": "U vindt de beveiligingscode op de achterkant van uw gateway.", - "title": "Voer beveiligingscode in" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/nn.json b/homeassistant/components/tradfri/.translations/nn.json deleted file mode 100644 index 544604e2b2a..00000000000 --- a/homeassistant/components/tradfri/.translations/nn.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Brua er allereie konfigurert" - }, - "error": { - "cannot_connect": "Klarte ikkje \u00e5 kople til gatewayen.", - "invalid_key": "Kunne ikkje registrere med den brukte n\u00f8kkelen. Dersom dette held fram, pr\u00f8v \u00e5 starta gatewayen p\u00e5 ny.", - "timeout": "Tida gjekk ut for validering av kode" - }, - "step": { - "auth": { - "data": { - "host": "Vert", - "security_code": "Sikkerheitskode" - }, - "description": "Du finn sikkerheitskoda p\u00e5 baksida av gatewayen din.", - "title": "Skriv inn sikkerheitskode" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/no.json b/homeassistant/components/tradfri/.translations/no.json deleted file mode 100644 index 490fbaed5aa..00000000000 --- a/homeassistant/components/tradfri/.translations/no.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge er allerede konfigurert.", - "already_in_progress": "Brokonfigurasjon er allerede i gang." - }, - "error": { - "cannot_connect": "Kan ikke koble til gatewayen.", - "invalid_key": "Kunne ikke registrere med gitt n\u00f8kkel. Hvis dette fortsetter, pr\u00f8v \u00e5 starte gatewayen p\u00e5 nytt.", - "timeout": "Tidsavbrudd ved validering av kode." - }, - "step": { - "auth": { - "data": { - "host": "Vert", - "security_code": "Sikkerhetskode" - }, - "description": "Du finner sikkerhetskoden p\u00e5 baksiden av gatewayen din.", - "title": "Skriv inn sikkerhetskode" - } - }, - "title": "Ikea Tr\u00e5dfri" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/pl.json b/homeassistant/components/tradfri/.translations/pl.json deleted file mode 100644 index 208687839dd..00000000000 --- a/homeassistant/components/tradfri/.translations/pl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Mostek jest ju\u017c skonfigurowany.", - "already_in_progress": "Konfiguracja mostka jest ju\u017c w toku." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z bram\u0105.", - "invalid_key": "Rejestracja si\u0119 nie powiod\u0142a z podanym kluczem. Je\u015bli tak si\u0119 stanie, spr\u00f3buj ponownie uruchomi\u0107 bramk\u0119.", - "timeout": "Przekroczono limit czasu sprawdzania poprawno\u015bci kodu." - }, - "step": { - "auth": { - "data": { - "host": "Host", - "security_code": "Kod bezpiecze\u0144stwa" - }, - "description": "Mo\u017cesz znale\u017a\u0107 kod bezpiecze\u0144stwa z ty\u0142u bramki.", - "title": "Wprowad\u017a kod bezpiecze\u0144stwa" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/pt-BR.json b/homeassistant/components/tradfri/.translations/pt-BR.json deleted file mode 100644 index 50c987dba61..00000000000 --- a/homeassistant/components/tradfri/.translations/pt-BR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge j\u00e1 est\u00e1 configurado", - "already_in_progress": "A configura\u00e7\u00e3o de ponte j\u00e1 est\u00e1 em andamento." - }, - "error": { - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao gateway.", - "invalid_key": "Falha ao registrar-se com a chave fornecida. Se isso continuar acontecendo, tente reiniciar o gateway.", - "timeout": "Excedido tempo limite para validar c\u00f3digo" - }, - "step": { - "auth": { - "data": { - "host": "Hospedeiro", - "security_code": "C\u00f3digo de seguran\u00e7a" - }, - "description": "Voc\u00ea pode encontrar o c\u00f3digo de seguran\u00e7a na parte de tr\u00e1s do seu gateway.", - "title": "Digite o c\u00f3digo de seguran\u00e7a" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/pt.json b/homeassistant/components/tradfri/.translations/pt.json deleted file mode 100644 index d728bc32f0b..00000000000 --- a/homeassistant/components/tradfri/.translations/pt.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge j\u00e1 est\u00e1 configurada" - }, - "error": { - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel ligar \u00e0 gateway.", - "invalid_key": "Falha ao registar-se com a chave fornecida. Se o problema persistir, tente reiniciar a gateway.", - "timeout": "Tempo excedido a validar o c\u00f3digo." - }, - "step": { - "auth": { - "data": { - "host": "Servidor", - "security_code": "C\u00f3digo de Seguran\u00e7a" - }, - "description": "Encontra o c\u00f3digo de seguran\u00e7a na base da gateway.", - "title": "Introduzir c\u00f3digo de seguran\u00e7a" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/ro.json b/homeassistant/components/tradfri/.translations/ro.json deleted file mode 100644 index cea0e6d938f..00000000000 --- a/homeassistant/components/tradfri/.translations/ro.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge-ul este deja configurat" - }, - "error": { - "cannot_connect": "Nu se poate conecta la gateway.", - "invalid_key": "Nu s-a \u00eenregistrat cu cheia furnizat\u0103. Dac\u0103 acest lucru se \u00eent\u00e2mpl\u0103 \u00een continuare, \u00eencerca\u021bi s\u0103 reporni\u021bi gateway-ul.", - "timeout": "Timeout la validarea codului." - }, - "step": { - "auth": { - "data": { - "host": "Gazd\u0103", - "security_code": "Cod de securitate" - }, - "description": "Pute\u021bi g\u0103si codul de securitate pe spatele gateway-ului.", - "title": "Introduce\u021bi codul de securitate" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/ru.json b/homeassistant/components/tradfri/.translations/ru.json deleted file mode 100644 index 7d2925fd3f2..00000000000 --- a/homeassistant/components/tradfri/.translations/ru.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0448\u043b\u044e\u0437\u0443.", - "invalid_key": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0448\u043b\u044e\u0437.", - "timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430." - }, - "step": { - "auth": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "security_code": "\u041a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438" - }, - "description": "\u041a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0437\u0430\u0434\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0448\u043b\u044e\u0437\u0430.", - "title": "IKEA TR\u00c5DFRI" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/sl.json b/homeassistant/components/tradfri/.translations/sl.json deleted file mode 100644 index dbdc39c6047..00000000000 --- a/homeassistant/components/tradfri/.translations/sl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Most je \u017ee konfiguriran", - "already_in_progress": "Konfiguracija mostu je \u017ee v teku." - }, - "error": { - "cannot_connect": "Povezava s prehodom ni mogo\u010de.", - "invalid_key": "Ni se bilo mogo\u010de registrirati s prilo\u017eenim klju\u010dem. \u010ce se to dogaja, poskusite znova zagnati prehod.", - "timeout": "\u010casovna omejitev za potrditev kode je potekla." - }, - "step": { - "auth": { - "data": { - "host": "Gostitelj", - "security_code": "Varnostna koda" - }, - "description": "Varnostno kodo najdete na hrbtni strani va\u0161ega prehoda.", - "title": "Vnesite varnostno kodo" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/sv.json b/homeassistant/components/tradfri/.translations/sv.json deleted file mode 100644 index 65c7bbd9401..00000000000 --- a/homeassistant/components/tradfri/.translations/sv.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bryggan \u00e4r redan konfigurerad", - "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r bryggan p\u00e5g\u00e5r redan." - }, - "error": { - "cannot_connect": "Det gick inte att ansluta till gatewayen.", - "invalid_key": "Misslyckades med att registrera den angivna nyckeln. Om det h\u00e4r h\u00e4nder, f\u00f6rs\u00f6k starta om gatewayen igen.", - "timeout": "Timeout vid valididering av kod" - }, - "step": { - "auth": { - "data": { - "host": "V\u00e4rd", - "security_code": "S\u00e4kerhetskod" - }, - "description": "Du kan hitta s\u00e4kerhetskoden p\u00e5 baksidan av din gateway.", - "title": "Ange s\u00e4kerhetskod" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/zh-Hans.json b/homeassistant/components/tradfri/.translations/zh-Hans.json deleted file mode 100644 index d5c46f63f0b..00000000000 --- a/homeassistant/components/tradfri/.translations/zh-Hans.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6865\u63a5\u5668\u5df2\u914d\u7f6e\u5b8c\u6210", - "already_in_progress": "\u6865\u914d\u7f6e\u5df2\u5728\u8fdb\u884c\u4e2d\u3002" - }, - "error": { - "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230\u7f51\u5173\u3002", - "invalid_key": "\u65e0\u6cd5\u7528\u63d0\u4f9b\u7684\u5bc6\u94a5\u6ce8\u518c\u3002\u5982\u679c\u9519\u8bef\u6301\u7eed\u53d1\u751f\uff0c\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u542f\u52a8\u7f51\u5173\u3002", - "timeout": "\u4ee3\u7801\u9a8c\u8bc1\u8d85\u65f6" - }, - "step": { - "auth": { - "data": { - "host": "\u4e3b\u673a", - "security_code": "\u5b89\u5168\u7801" - }, - "description": "\u60a8\u53ef\u4ee5\u5728\u7f51\u5173\u80cc\u9762\u627e\u5230\u5b89\u5168\u7801\u3002", - "title": "\u8f93\u5165\u5b89\u5168\u7801" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/zh-Hant.json b/homeassistant/components/tradfri/.translations/zh-Hant.json deleted file mode 100644 index 4ca6970b5c6..00000000000 --- a/homeassistant/components/tradfri/.translations/zh-Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Bridge \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", - "already_in_progress": "Bridge \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u9598\u9053\u5668\u3002", - "invalid_key": "\u63d0\u4f9b\u4e4b\u5b89\u5168\u78bc\u8a3b\u518a\u5931\u6557\u3002\u5047\u5982\u6b64\u60c5\u6cc1\u6301\u7e8c\u767c\u751f\uff0c\u8acb\u5617\u8a66\u91cd\u555f\u9598\u9053\u5668\u3002", - "timeout": "\u8a8d\u8b49\u78bc\u903e\u6642\u3002" - }, - "step": { - "auth": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "security_code": "\u5b89\u5168\u78bc" - }, - "description": "\u60a8\u53ef\u4ee5\u65bc\u9598\u9053\u5668\u80cc\u9762\u627e\u5230\u5b89\u5168\u78bc\u3002", - "title": "\u8f38\u5165\u5b89\u5168\u78bc" - } - }, - "title": "IKEA TR\u00c5DFRI" - } -} \ No newline at end of file diff --git a/homeassistant/components/tradfri/base_class.py b/homeassistant/components/tradfri/base_class.py index 358056d7ef6..0850bec6c9b 100644 --- a/homeassistant/components/tradfri/base_class.py +++ b/homeassistant/components/tradfri/base_class.py @@ -33,7 +33,7 @@ class TradfriBaseClass(Entity): def _async_start_observe(self, exc=None): """Start observation of device.""" if exc: - self.async_schedule_update_ha_state() + self.async_write_ha_state() _LOGGER.warning("Observation failed for %s", self._name, exc_info=exc) try: @@ -70,7 +70,7 @@ class TradfriBaseClass(Entity): def _observe_update(self, device): """Receive new state data for this device.""" self._refresh(device) - self.async_schedule_update_ha_state() + self.async_write_ha_state() def _refresh(self, device): """Refresh the device data.""" diff --git a/homeassistant/components/tradfri/const.py b/homeassistant/components/tradfri/const.py index 88225d3282a..ffb5d64f6d7 100644 --- a/homeassistant/components/tradfri/const.py +++ b/homeassistant/components/tradfri/const.py @@ -9,6 +9,7 @@ ATTR_TRADFRI_GATEWAY = "Gateway" ATTR_TRADFRI_GATEWAY_MODEL = "E1526" ATTR_TRADFRI_MANUFACTURER = "IKEA of Sweden" ATTR_TRANSITION_TIME = "transition_time" +ATTR_MODEL = "model" CONF_ALLOW_TRADFRI_GROUPS = "allow_tradfri_groups" CONF_IDENTITY = "identity" CONF_IMPORT_GROUPS = "import_groups" diff --git a/homeassistant/components/tradfri/cover.py b/homeassistant/components/tradfri/cover.py index d978e512920..744ba2e13b1 100644 --- a/homeassistant/components/tradfri/cover.py +++ b/homeassistant/components/tradfri/cover.py @@ -3,7 +3,7 @@ from homeassistant.components.cover import ATTR_POSITION, CoverDevice from .base_class import TradfriBaseDevice -from .const import CONF_GATEWAY_ID, KEY_API, KEY_GATEWAY +from .const import ATTR_MODEL, CONF_GATEWAY_ID, KEY_API, KEY_GATEWAY async def async_setup_entry(hass, config_entry, async_add_entities): @@ -29,6 +29,12 @@ class TradfriCover(TradfriBaseDevice, CoverDevice): self._refresh(device) + @property + def device_state_attributes(self): + """Return the state attributes.""" + attr = {ATTR_MODEL: self._device.device_info.model_number} + return attr + @property def current_cover_position(self): """Return current position of cover. diff --git a/homeassistant/components/tradfri/manifest.json b/homeassistant/components/tradfri/manifest.json index 7948b96d7e1..ce88766039b 100644 --- a/homeassistant/components/tradfri/manifest.json +++ b/homeassistant/components/tradfri/manifest.json @@ -1,13 +1,12 @@ { "domain": "tradfri", - "name": "IKEA TRÅDFRI (TRADFRI)", + "name": "IKEA TRÅDFRI", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tradfri", "requirements": ["pytradfri[async]==6.4.0"], "homekit": { "models": ["TRADFRI"] }, - "dependencies": [], "zeroconf": ["_coap._udp.local."], "codeowners": ["@ggravlingen"] } diff --git a/homeassistant/components/tradfri/strings.json b/homeassistant/components/tradfri/strings.json index 868fbbed550..5f33549260d 100644 --- a/homeassistant/components/tradfri/strings.json +++ b/homeassistant/components/tradfri/strings.json @@ -1,14 +1,10 @@ { "config": { - "title": "IKEA TRÅDFRI", "step": { "auth": { "title": "Enter security code", "description": "You can find the security code on the back of your gateway.", - "data": { - "host": "Host", - "security_code": "Security Code" - } + "data": { "host": "Host", "security_code": "Security Code" } } }, "error": { diff --git a/homeassistant/components/tradfri/translations/bg.json b/homeassistant/components/tradfri/translations/bg.json new file mode 100644 index 00000000000..c9732c24fef --- /dev/null +++ b/homeassistant/components/tradfri/translations/bg.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u0428\u043b\u044e\u0437\u0430 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "already_in_progress": "\u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f." + }, + "error": { + "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0448\u043b\u044e\u0437\u0430.", + "invalid_key": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0435 \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447. \u0410\u043a\u043e \u0442\u043e\u0432\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0430\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430, \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u0434\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0442\u0435 \u0448\u043b\u044e\u0437\u0430.", + "timeout": "\u0412\u0440\u0435\u043c\u0435\u0442\u043e \u0437\u0430 \u043f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434\u0430 \u0438\u0437\u0442\u0435\u0447\u0435." + }, + "step": { + "auth": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "security_code": "\u041a\u043e\u0434 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442" + }, + "description": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043d\u0430\u043c\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u0434\u0430 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442 \u043d\u0430 \u0433\u044a\u0440\u0431\u0430 \u043d\u0430 \u0448\u043b\u044e\u0437\u0430.", + "title": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043a\u043e\u0434 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/ca.json b/homeassistant/components/tradfri/translations/ca.json new file mode 100644 index 00000000000..cee54ccca79 --- /dev/null +++ b/homeassistant/components/tradfri/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "L'enlla\u00e7 ja est\u00e0 configurat", + "already_in_progress": "La configuraci\u00f3 de l'enlla\u00e7 ja est\u00e0 en curs." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar a la passarel\u00b7la d'enlla\u00e7", + "invalid_key": "Ha fallat el registre amb la clau proporcionada. Si aix\u00f2 continua passant, intenta reiniciar la passarel\u00b7la d'enlla\u00e7.", + "timeout": "S'ha acabat el temps d'espera durant la validaci\u00f3 del codi." + }, + "step": { + "auth": { + "data": { + "host": "Amfitri\u00f3", + "security_code": "Codi de seguretat" + }, + "description": "Pots trobar el codi de seguretat a la part posterior de la teva passarel\u00b7la d'enlla\u00e7.", + "title": "Introdueix el codi de seguretat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/cs.json b/homeassistant/components/tradfri/translations/cs.json new file mode 100644 index 00000000000..e4c328c3020 --- /dev/null +++ b/homeassistant/components/tradfri/translations/cs.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge je ji\u017e nakonfigurov\u00e1n" + }, + "error": { + "cannot_connect": "Nelze se p\u0159ipojit k br\u00e1n\u011b.", + "invalid_key": "Nepoda\u0159ilo se zaregistrovat pomoc\u00ed zadan\u00e9ho kl\u00ed\u010de. Pokud se situace opakuje, zkuste restartovat gateway.", + "timeout": "\u010casov\u00fd limit ov\u011b\u0159ov\u00e1n\u00ed k\u00f3du vypr\u0161el" + }, + "step": { + "auth": { + "data": { + "host": "Hostitel", + "security_code": "Bezpe\u010dnostn\u00ed k\u00f3d" + }, + "description": "Bezpe\u010dnostn\u00ed k\u00f3d naleznete na zadn\u00ed stran\u011b za\u0159\u00edzen\u00ed.", + "title": "Zadejte bezpe\u010dnostn\u00ed k\u00f3d" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/da.json b/homeassistant/components/tradfri/translations/da.json new file mode 100644 index 00000000000..6f68e6a6a73 --- /dev/null +++ b/homeassistant/components/tradfri/translations/da.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bro er allerede konfigureret.", + "already_in_progress": "Bro konfiguration er allerede i gang." + }, + "error": { + "cannot_connect": "Kan ikke oprette forbindelse til gateway.", + "invalid_key": "Fejl ved registrerering med den leverede n\u00f8gle. Hvis dette sker konsekvent skal du pr\u00f8ve at genstarte gatewayen.", + "timeout": "Timeout ved validering af kode" + }, + "step": { + "auth": { + "data": { + "host": "V\u00e6rt", + "security_code": "Sikkerhedskode" + }, + "description": "Du kan finde sikkerhedskoden p\u00e5 bagsiden af din gateway.", + "title": "Indtast sikkerhedskode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/de.json b/homeassistant/components/tradfri/translations/de.json new file mode 100644 index 00000000000..181631047ea --- /dev/null +++ b/homeassistant/components/tradfri/translations/de.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge ist bereits konfiguriert.", + "already_in_progress": "Der Konfigurationsablauf f\u00fcr die Bridge wird bereits ausgef\u00fchrt." + }, + "error": { + "cannot_connect": "Verbindung zum Gateway nicht m\u00f6glich.", + "invalid_key": "Fehler beim Registrieren mit dem angegebenen Schl\u00fcssel. Wenn dies weiterhin geschieht, versuche, das Gateway neu zu starten.", + "timeout": "Timeout bei der \u00dcberpr\u00fcfung des Codes." + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "Sicherheitscode" + }, + "description": "Du findest den Sicherheitscode auf der R\u00fcckseite deines Gateways.", + "title": "Sicherheitscode eingeben" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/en.json b/homeassistant/components/tradfri/translations/en.json new file mode 100644 index 00000000000..f1ee9b9238a --- /dev/null +++ b/homeassistant/components/tradfri/translations/en.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge is already configured.", + "already_in_progress": "Bridge configuration is already in progress." + }, + "error": { + "cannot_connect": "Unable to connect to the gateway.", + "invalid_key": "Failed to register with provided key. If this keeps happening, try restarting the gateway.", + "timeout": "Timeout validating the code." + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "Security Code" + }, + "description": "You can find the security code on the back of your gateway.", + "title": "Enter security code" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/es-419.json b/homeassistant/components/tradfri/translations/es-419.json new file mode 100644 index 00000000000..9ab753bab37 --- /dev/null +++ b/homeassistant/components/tradfri/translations/es-419.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "El Bridge ya est\u00e1 configurado", + "already_in_progress": "La configuraci\u00f3n del puente ya est\u00e1 en progreso." + }, + "error": { + "cannot_connect": "No se puede conectar a la puerta de enlace.", + "invalid_key": "Error al registrarse con la clave proporcionada. Si esto sigue sucediendo, intente reiniciar el gateway.", + "timeout": "Tiempo de espera para validar el c\u00f3digo." + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "C\u00f3digo de seguridad" + }, + "description": "Puede encontrar el c\u00f3digo de seguridad en la parte posterior de su puerta de enlace.", + "title": "Ingrese el c\u00f3digo de seguridad" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/es.json b/homeassistant/components/tradfri/translations/es.json new file mode 100644 index 00000000000..1c66cca87b6 --- /dev/null +++ b/homeassistant/components/tradfri/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "El puente ya esta configurado", + "already_in_progress": "La configuraci\u00f3n del bridge ya est\u00e1 en marcha." + }, + "error": { + "cannot_connect": "No se puede conectar a la puerta de enlace.", + "invalid_key": "No se ha podido registrar con la clave proporcionada. Si esto sigue ocurriendo, intenta reiniciar el gateway.", + "timeout": "Tiempo de espera agotado validando el c\u00f3digo." + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "C\u00f3digo de seguridad" + }, + "description": "Puedes encontrar el c\u00f3digo de seguridad en la parte posterior de tu gateway.", + "title": "Introduzca el c\u00f3digo de seguridad" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/et.json b/homeassistant/components/tradfri/translations/et.json similarity index 100% rename from homeassistant/components/tradfri/.translations/et.json rename to homeassistant/components/tradfri/translations/et.json diff --git a/homeassistant/components/tradfri/translations/fr.json b/homeassistant/components/tradfri/translations/fr.json new file mode 100644 index 00000000000..ebafa93b07f --- /dev/null +++ b/homeassistant/components/tradfri/translations/fr.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Le pont est d\u00e9j\u00e0 configur\u00e9.", + "already_in_progress": "La configuration du pont est d\u00e9j\u00e0 en cours." + }, + "error": { + "cannot_connect": "Impossible de se connecter \u00e0 la passerelle.", + "invalid_key": "\u00c9chec de l'enregistrement avec la cl\u00e9 fournie. Si cela se reproduit, essayez de red\u00e9marrer la passerelle.", + "timeout": "D\u00e9lai d'attente de la validation du code expir\u00e9" + }, + "step": { + "auth": { + "data": { + "host": "H\u00f4te", + "security_code": "Code de s\u00e9curit\u00e9" + }, + "description": "Vous pouvez trouver le code de s\u00e9curit\u00e9 au dos de votre passerelle.", + "title": "Entrer le code de s\u00e9curit\u00e9" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/he.json b/homeassistant/components/tradfri/translations/he.json new file mode 100644 index 00000000000..f1731579816 --- /dev/null +++ b/homeassistant/components/tradfri/translations/he.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8" + }, + "error": { + "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05de\u05d2\u05e9\u05e8", + "invalid_key": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc \u05e2\u05dd \u05d4\u05de\u05e4\u05ea\u05d7 \u05e9\u05e1\u05d5\u05e4\u05e7. \u05d0\u05dd \u05d6\u05d4 \u05e7\u05d5\u05e8\u05d4 \u05e9\u05d5\u05d1, \u05e0\u05e1\u05d4 \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05de\u05d2\u05e9\u05e8.", + "timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3" + }, + "step": { + "auth": { + "data": { + "host": "\u05de\u05d0\u05e8\u05d7", + "security_code": "\u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4" + }, + "description": "\u05ea\u05d5\u05db\u05dc \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05e7\u05d5\u05d3 \u05d4\u05d0\u05d1\u05d8\u05d7\u05d4 \u05d1\u05d2\u05d1 \u05d4\u05de\u05d2\u05e9\u05e8 \u05e9\u05dc\u05da.", + "title": "\u05d4\u05d6\u05df \u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/hr.json b/homeassistant/components/tradfri/translations/hr.json new file mode 100644 index 00000000000..bb242ca60f0 --- /dev/null +++ b/homeassistant/components/tradfri/translations/hr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "already_in_progress": "Konfiguracija premosnice je ve\u0107 u tijeku." + }, + "step": { + "auth": { + "data": { + "host": "Host" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/hu.json b/homeassistant/components/tradfri/translations/hu.json new file mode 100644 index 00000000000..8be065fe797 --- /dev/null +++ b/homeassistant/components/tradfri/translations/hu.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "A bridge m\u00e1r konfigur\u00e1lva van" + }, + "error": { + "cannot_connect": "Nem siker\u00fclt csatlakozni a gatewayhez.", + "invalid_key": "Nem siker\u00fclt regisztr\u00e1lni a megadott kulcs seg\u00edts\u00e9g\u00e9vel. Ha ez t\u00f6bbsz\u00f6r megt\u00f6rt\u00e9nik, pr\u00f3b\u00e1lja meg \u00fajraind\u00edtani a gatewayt.", + "timeout": "Id\u0151t\u00fall\u00e9p\u00e9s a k\u00f3d \u00e9rv\u00e9nyes\u00edt\u00e9se sor\u00e1n." + }, + "step": { + "auth": { + "data": { + "host": "Hoszt", + "security_code": "Biztons\u00e1gi K\u00f3d" + }, + "description": "A biztons\u00e1gi k\u00f3dot a Gatewayed h\u00e1toldal\u00e1n tal\u00e1lod.", + "title": "Add meg a biztons\u00e1gi k\u00f3dot" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/id.json b/homeassistant/components/tradfri/translations/id.json new file mode 100644 index 00000000000..0671b162e1c --- /dev/null +++ b/homeassistant/components/tradfri/translations/id.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge sudah dikonfigurasi" + }, + "error": { + "cannot_connect": "Tidak dapat terhubung ke gateway.", + "invalid_key": "Gagal mendaftar dengan kunci yang disediakan. Jika ini terus terjadi, coba mulai ulang gateway.", + "timeout": "Waktu tunggu memvalidasi kode telah habis." + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "Kode keamanan" + }, + "description": "Anda dapat menemukan kode keamanan di belakang gateway Anda.", + "title": "Masukkan kode keamanan" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/it.json b/homeassistant/components/tradfri/translations/it.json new file mode 100644 index 00000000000..4fe9b2a7c9c --- /dev/null +++ b/homeassistant/components/tradfri/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge gi\u00e0 configurato.", + "already_in_progress": "La configurazione del Bridge \u00e8 gi\u00e0 in corso." + }, + "error": { + "cannot_connect": "Impossibile connettersi al gateway.", + "invalid_key": "Impossibile registrarsi con la chiave fornita. Se questo continua a succedere, prova a riavviare il gateway.", + "timeout": "Tempo scaduto per la validazione del codice." + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "Codice di sicurezza" + }, + "description": "Puoi trovare il codice di sicurezza sul retro del tuo gateway.", + "title": "Inserisci il codice di sicurezza" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/ko.json b/homeassistant/components/tradfri/translations/ko.json new file mode 100644 index 00000000000..a7fe2522c70 --- /dev/null +++ b/homeassistant/components/tradfri/translations/ko.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\ube0c\ub9bf\uc9c0\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "already_in_progress": "\ube0c\ub9bf\uc9c0 \uad6c\uc131\uc774 \uc774\ubbf8 \uc9c4\ud589\uc911\uc785\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uac8c\uc774\ud2b8\uc6e8\uc774\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", + "invalid_key": "\uc81c\uacf5\ub41c \ud0a4\ub85c \ub4f1\ub85d\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\uac00 \uacc4\uc18d \ubc1c\uc0dd\ud558\uba74 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud574\ubcf4\uc138\uc694.", + "timeout": "\ucf54\ub4dc \uc720\ud6a8\uc131 \uac80\uc0ac \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "auth": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "security_code": "\ubcf4\uc548 \ucf54\ub4dc" + }, + "description": "\uac8c\uc774\ud2b8\uc6e8\uc774 \ub4b7\uba74\uc5d0\uc11c \ubcf4\uc548 \ucf54\ub4dc\ub97c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "\ubcf4\uc548 \ucf54\ub4dc \uc785\ub825" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/lb.json b/homeassistant/components/tradfri/translations/lb.json new file mode 100644 index 00000000000..c86016fa0b6 --- /dev/null +++ b/homeassistant/components/tradfri/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge ass schon konfigur\u00e9iert", + "already_in_progress": "Bridge Konfiguratioun ass schonn am gaang." + }, + "error": { + "cannot_connect": "Keng Verbindung mat der Gateway m\u00e9iglech.", + "invalid_key": "Konnt sech net mam ugebuedenem Schl\u00ebssel registr\u00e9ieren. Falls d\u00ebst widderhuelt optr\u00ebtt, prob\u00e9iert de Gateway fr\u00ebsch ze starten.", + "timeout": "Z\u00e4it Iwwerschreidung\u00a0beim valid\u00e9ieren vum Code" + }, + "step": { + "auth": { + "data": { + "host": "Apparat", + "security_code": "S\u00e9cherheets Code" + }, + "description": "Dir fannt de S\u00e9cherheets Code op der R\u00e9cks\u00e4it vun \u00e4rem Gateway.", + "title": "Gitt de S\u00e9cherheets Code an" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/nl.json b/homeassistant/components/tradfri/translations/nl.json new file mode 100644 index 00000000000..1d0453704d0 --- /dev/null +++ b/homeassistant/components/tradfri/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge is al geconfigureerd.", + "already_in_progress": "Bridge configuratie is al in volle gang." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met bridge", + "invalid_key": "Mislukt om te registreren met de meegeleverde sleutel. Als dit blijft gebeuren, probeer dan de gateway opnieuw op te starten.", + "timeout": "Time-out bij validatie van code" + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "Beveiligingscode" + }, + "description": "U vindt de beveiligingscode op de achterkant van uw gateway.", + "title": "Voer beveiligingscode in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/nn.json b/homeassistant/components/tradfri/translations/nn.json new file mode 100644 index 00000000000..2d02081f6b3 --- /dev/null +++ b/homeassistant/components/tradfri/translations/nn.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Brua er allereie konfigurert" + }, + "error": { + "cannot_connect": "Klarte ikkje \u00e5 kople til gatewayen.", + "invalid_key": "Kunne ikkje registrere med den brukte n\u00f8kkelen. Dersom dette held fram, pr\u00f8v \u00e5 starta gatewayen p\u00e5 ny.", + "timeout": "Tida gjekk ut for validering av kode" + }, + "step": { + "auth": { + "data": { + "host": "Vert", + "security_code": "Sikkerheitskode" + }, + "description": "Du finn sikkerheitskoda p\u00e5 baksida av gatewayen din.", + "title": "Skriv inn sikkerheitskode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/no.json b/homeassistant/components/tradfri/translations/no.json new file mode 100644 index 00000000000..aed5dd1032b --- /dev/null +++ b/homeassistant/components/tradfri/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge er allerede konfigurert.", + "already_in_progress": "Brokonfigurasjon er allerede i gang." + }, + "error": { + "cannot_connect": "Kan ikke koble til gatewayen.", + "invalid_key": "Kunne ikke registrere med gitt n\u00f8kkel. Hvis dette fortsetter, pr\u00f8v \u00e5 starte gatewayen p\u00e5 nytt.", + "timeout": "Tidsavbrudd ved validering av kode." + }, + "step": { + "auth": { + "data": { + "host": "Vert", + "security_code": "Sikkerhetskode" + }, + "description": "Du finner sikkerhetskoden p\u00e5 baksiden av gatewayen din.", + "title": "Skriv inn sikkerhetskode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/pl.json b/homeassistant/components/tradfri/translations/pl.json new file mode 100644 index 00000000000..028956ec6b3 --- /dev/null +++ b/homeassistant/components/tradfri/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Mostek jest ju\u017c skonfigurowany.", + "already_in_progress": "Konfiguracja mostka jest ju\u017c w toku." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z bram\u0105.", + "invalid_key": "Rejestracja si\u0119 nie powiod\u0142a z podanym kluczem. Je\u015bli tak si\u0119 stanie, spr\u00f3buj ponownie uruchomi\u0107 bramk\u0119.", + "timeout": "Przekroczono limit czasu sprawdzania poprawno\u015bci kodu." + }, + "step": { + "auth": { + "data": { + "host": "Nazwa hosta lub adres IP", + "security_code": "Kod bezpiecze\u0144stwa" + }, + "description": "Mo\u017cesz znale\u017a\u0107 kod bezpiecze\u0144stwa z ty\u0142u bramki.", + "title": "Wprowad\u017a kod bezpiecze\u0144stwa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/pt-BR.json b/homeassistant/components/tradfri/translations/pt-BR.json new file mode 100644 index 00000000000..b1c853f5f2b --- /dev/null +++ b/homeassistant/components/tradfri/translations/pt-BR.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge j\u00e1 est\u00e1 configurado", + "already_in_progress": "A configura\u00e7\u00e3o de ponte j\u00e1 est\u00e1 em andamento." + }, + "error": { + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao gateway.", + "invalid_key": "Falha ao registrar-se com a chave fornecida. Se isso continuar acontecendo, tente reiniciar o gateway.", + "timeout": "Excedido tempo limite para validar c\u00f3digo" + }, + "step": { + "auth": { + "data": { + "host": "Hospedeiro", + "security_code": "C\u00f3digo de seguran\u00e7a" + }, + "description": "Voc\u00ea pode encontrar o c\u00f3digo de seguran\u00e7a na parte de tr\u00e1s do seu gateway.", + "title": "Digite o c\u00f3digo de seguran\u00e7a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/pt.json b/homeassistant/components/tradfri/translations/pt.json new file mode 100644 index 00000000000..e4cf0e97879 --- /dev/null +++ b/homeassistant/components/tradfri/translations/pt.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge j\u00e1 est\u00e1 configurada" + }, + "error": { + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel ligar \u00e0 gateway.", + "invalid_key": "Falha ao registar-se com a chave fornecida. Se o problema persistir, tente reiniciar a gateway.", + "timeout": "Tempo excedido a validar o c\u00f3digo." + }, + "step": { + "auth": { + "data": { + "host": "Servidor", + "security_code": "C\u00f3digo de Seguran\u00e7a" + }, + "description": "Encontra o c\u00f3digo de seguran\u00e7a na base da gateway.", + "title": "Introduzir c\u00f3digo de seguran\u00e7a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/ro.json b/homeassistant/components/tradfri/translations/ro.json new file mode 100644 index 00000000000..9641c63dfa0 --- /dev/null +++ b/homeassistant/components/tradfri/translations/ro.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge-ul este deja configurat" + }, + "error": { + "cannot_connect": "Nu se poate conecta la gateway.", + "invalid_key": "Nu s-a \u00eenregistrat cu cheia furnizat\u0103. Dac\u0103 acest lucru se \u00eent\u00e2mpl\u0103 \u00een continuare, \u00eencerca\u021bi s\u0103 reporni\u021bi gateway-ul.", + "timeout": "Timeout la validarea codului." + }, + "step": { + "auth": { + "data": { + "host": "Gazd\u0103", + "security_code": "Cod de securitate" + }, + "description": "Pute\u021bi g\u0103si codul de securitate pe spatele gateway-ului.", + "title": "Introduce\u021bi codul de securitate" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/ru.json b/homeassistant/components/tradfri/translations/ru.json new file mode 100644 index 00000000000..03077907aab --- /dev/null +++ b/homeassistant/components/tradfri/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "already_in_progress": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0448\u043b\u044e\u0437\u0443.", + "invalid_key": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0448\u043b\u044e\u0437.", + "timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430." + }, + "step": { + "auth": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "security_code": "\u041a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438" + }, + "description": "\u041a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0437\u0430\u0434\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0448\u043b\u044e\u0437\u0430.", + "title": "IKEA TR\u00c5DFRI" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/sl.json b/homeassistant/components/tradfri/translations/sl.json new file mode 100644 index 00000000000..47714ea31b3 --- /dev/null +++ b/homeassistant/components/tradfri/translations/sl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Most je \u017ee konfiguriran", + "already_in_progress": "Konfiguracija mostu je \u017ee v teku." + }, + "error": { + "cannot_connect": "Povezava s prehodom ni mogo\u010de.", + "invalid_key": "Ni se bilo mogo\u010de registrirati s prilo\u017eenim klju\u010dem. \u010ce se to dogaja, poskusite znova zagnati prehod.", + "timeout": "\u010casovna omejitev za potrditev kode je potekla." + }, + "step": { + "auth": { + "data": { + "host": "Gostitelj", + "security_code": "Varnostna koda" + }, + "description": "Varnostno kodo najdete na hrbtni strani va\u0161ega prehoda.", + "title": "Vnesite varnostno kodo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/sv.json b/homeassistant/components/tradfri/translations/sv.json new file mode 100644 index 00000000000..69d7f7ba3c5 --- /dev/null +++ b/homeassistant/components/tradfri/translations/sv.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bryggan \u00e4r redan konfigurerad", + "already_in_progress": "Konfigurations fl\u00f6det f\u00f6r bryggan p\u00e5g\u00e5r redan." + }, + "error": { + "cannot_connect": "Det gick inte att ansluta till gatewayen.", + "invalid_key": "Misslyckades med att registrera den angivna nyckeln. Om det h\u00e4r h\u00e4nder, f\u00f6rs\u00f6k starta om gatewayen igen.", + "timeout": "Timeout vid valididering av kod" + }, + "step": { + "auth": { + "data": { + "host": "V\u00e4rd", + "security_code": "S\u00e4kerhetskod" + }, + "description": "Du kan hitta s\u00e4kerhetskoden p\u00e5 baksidan av din gateway.", + "title": "Ange s\u00e4kerhetskod" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/uk.json b/homeassistant/components/tradfri/translations/uk.json similarity index 100% rename from homeassistant/components/tradfri/.translations/uk.json rename to homeassistant/components/tradfri/translations/uk.json diff --git a/homeassistant/components/tradfri/translations/zh-Hans.json b/homeassistant/components/tradfri/translations/zh-Hans.json new file mode 100644 index 00000000000..85c9d4251ed --- /dev/null +++ b/homeassistant/components/tradfri/translations/zh-Hans.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u6865\u63a5\u5668\u5df2\u914d\u7f6e\u5b8c\u6210", + "already_in_progress": "\u6865\u914d\u7f6e\u5df2\u5728\u8fdb\u884c\u4e2d\u3002" + }, + "error": { + "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230\u7f51\u5173\u3002", + "invalid_key": "\u65e0\u6cd5\u7528\u63d0\u4f9b\u7684\u5bc6\u94a5\u6ce8\u518c\u3002\u5982\u679c\u9519\u8bef\u6301\u7eed\u53d1\u751f\uff0c\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u542f\u52a8\u7f51\u5173\u3002", + "timeout": "\u4ee3\u7801\u9a8c\u8bc1\u8d85\u65f6" + }, + "step": { + "auth": { + "data": { + "host": "\u4e3b\u673a", + "security_code": "\u5b89\u5168\u7801" + }, + "description": "\u60a8\u53ef\u4ee5\u5728\u7f51\u5173\u80cc\u9762\u627e\u5230\u5b89\u5168\u7801\u3002", + "title": "\u8f93\u5165\u5b89\u5168\u7801" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/zh-Hant.json b/homeassistant/components/tradfri/translations/zh-Hant.json new file mode 100644 index 00000000000..adbb0e148f4 --- /dev/null +++ b/homeassistant/components/tradfri/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", + "already_in_progress": "Bridge \u8a2d\u5b9a\u5df2\u7d93\u9032\u884c\u4e2d\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u9598\u9053\u5668\u3002", + "invalid_key": "\u63d0\u4f9b\u4e4b\u5b89\u5168\u78bc\u8a3b\u518a\u5931\u6557\u3002\u5047\u5982\u6b64\u60c5\u6cc1\u6301\u7e8c\u767c\u751f\uff0c\u8acb\u5617\u8a66\u91cd\u555f\u9598\u9053\u5668\u3002", + "timeout": "\u8a8d\u8b49\u78bc\u903e\u6642\u3002" + }, + "step": { + "auth": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "security_code": "\u5b89\u5168\u78bc" + }, + "description": "\u60a8\u53ef\u4ee5\u65bc\u9598\u9053\u5668\u80cc\u9762\u627e\u5230\u5b89\u5168\u78bc\u3002", + "title": "\u8f38\u5165\u5b89\u5168\u78bc" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/trafikverket_train/manifest.json b/homeassistant/components/trafikverket_train/manifest.json index 1458b717fc6..8e5cc6cb3d3 100644 --- a/homeassistant/components/trafikverket_train/manifest.json +++ b/homeassistant/components/trafikverket_train/manifest.json @@ -3,6 +3,5 @@ "name": "Trafikverket Train", "documentation": "https://www.home-assistant.io/integrations/trafikverket_train", "requirements": ["pytrafikverket==0.1.6.1"], - "dependencies": [], "codeowners": ["@endor-force"] -} \ No newline at end of file +} diff --git a/homeassistant/components/trafikverket_weatherstation/manifest.json b/homeassistant/components/trafikverket_weatherstation/manifest.json index 3224df25c3f..a34dcdca874 100644 --- a/homeassistant/components/trafikverket_weatherstation/manifest.json +++ b/homeassistant/components/trafikverket_weatherstation/manifest.json @@ -3,6 +3,5 @@ "name": "Trafikverket Weather Station", "documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation", "requirements": ["pytrafikverket==0.1.6.1"], - "dependencies": [], "codeowners": [] -} \ No newline at end of file +} diff --git a/homeassistant/components/trafikverket_weatherstation/sensor.py b/homeassistant/components/trafikverket_weatherstation/sensor.py index f2e7387aa6b..a8d992e02d5 100644 --- a/homeassistant/components/trafikverket_weatherstation/sensor.py +++ b/homeassistant/components/trafikverket_weatherstation/sensor.py @@ -14,6 +14,7 @@ from homeassistant.const import ( CONF_API_KEY, CONF_MONITORED_CONDITIONS, CONF_NAME, + DEGREE, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE, SPEED_METERS_PER_SECOND, @@ -61,7 +62,7 @@ SENSOR_TYPES = { ], "wind_direction": [ "Wind direction", - "°", + DEGREE, "winddirection", "mdi:flag-triangle", None, diff --git a/homeassistant/components/transmission/.translations/bg.json b/homeassistant/components/transmission/.translations/bg.json deleted file mode 100644 index 3278f7a3a4c..00000000000 --- a/homeassistant/components/transmission/.translations/bg.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d." - }, - "error": { - "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430", - "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430", - "wrong_credentials": "\u0413\u0440\u0435\u0448\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430" - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "name": "\u0418\u043c\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 Transmission \u043a\u043b\u0438\u0435\u043d\u0442" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\u0427\u0435\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435" - }, - "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/ca.json b/homeassistant/components/transmission/.translations/ca.json deleted file mode 100644 index 7630b50cdcf..00000000000 --- a/homeassistant/components/transmission/.translations/ca.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar amb l'amfitri\u00f3", - "name_exists": "El nom ja existeix", - "wrong_credentials": "Nom d'usuari o contrasenya incorrectes" - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "name": "Nom", - "password": "Contrasenya", - "port": "Port", - "username": "Nom d'usuari" - }, - "title": "Configuraci\u00f3 del client de Transmission" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Freq\u00fc\u00e8ncia d\u2019actualitzaci\u00f3" - }, - "title": "Opcions de configuraci\u00f3 de Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/da.json b/homeassistant/components/transmission/.translations/da.json deleted file mode 100644 index feabb364344..00000000000 --- a/homeassistant/components/transmission/.translations/da.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "V\u00e6rten er allerede konfigureret." - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse til v\u00e6rt", - "name_exists": "Navnet findes allerede", - "wrong_credentials": "Ugyldigt brugernavn eller adgangskode" - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "name": "Navn", - "password": "Adgangskode", - "port": "Port", - "username": "Brugernavn" - }, - "title": "Konfigurer Transmission-klient" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Opdateringsfrekvens" - }, - "title": "Konfigurationsindstillinger for Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/de.json b/homeassistant/components/transmission/.translations/de.json deleted file mode 100644 index c3d912e5e77..00000000000 --- a/homeassistant/components/transmission/.translations/de.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host ist bereits konfiguriert." - }, - "error": { - "cannot_connect": "Verbindung zum Host nicht m\u00f6glich", - "name_exists": "Name existiert bereits", - "wrong_credentials": "Falscher Benutzername oder Kennwort" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name", - "password": "Passwort", - "port": "Port", - "username": "Benutzername" - }, - "title": "Transmission-Client einrichten" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Aktualisierungsfrequenz" - }, - "title": "Konfiguriere die Optionen f\u00fcr die \u00dcbertragung" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/en.json b/homeassistant/components/transmission/.translations/en.json deleted file mode 100644 index 3605f21e140..00000000000 --- a/homeassistant/components/transmission/.translations/en.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is already configured." - }, - "error": { - "cannot_connect": "Unable to Connect to host", - "name_exists": "Name already exists", - "wrong_credentials": "Wrong username or password" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Name", - "password": "Password", - "port": "Port", - "username": "Username" - }, - "title": "Setup Transmission Client" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Update frequency" - }, - "title": "Configure options for Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/es.json b/homeassistant/components/transmission/.translations/es.json deleted file mode 100644 index a1d0f364769..00000000000 --- a/homeassistant/components/transmission/.translations/es.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El host ya est\u00e1 configurado." - }, - "error": { - "cannot_connect": "No se puede conectar al host", - "name_exists": "El nombre ya existe", - "wrong_credentials": "Nombre de usuario o contrase\u00f1a incorrectos" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nombre", - "password": "Contrase\u00f1a", - "port": "Puerto", - "username": "Nombre de usuario" - }, - "title": "Configuraci\u00f3n del cliente de transmisi\u00f3n" - } - }, - "title": "Transmisi\u00f3n" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Frecuencia de actualizaci\u00f3n" - }, - "title": "Configurar opciones para la transmisi\u00f3n" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/fr.json b/homeassistant/components/transmission/.translations/fr.json deleted file mode 100644 index c7a78201797..00000000000 --- a/homeassistant/components/transmission/.translations/fr.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'h\u00f4te est d\u00e9j\u00e0 configur\u00e9." - }, - "error": { - "cannot_connect": "Impossible de se connecter \u00e0 l'h\u00f4te", - "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9", - "wrong_credentials": "Mauvais nom d'utilisateur ou mot de passe" - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "name": "Nom", - "password": "Mot de passe", - "port": "Port", - "username": "Nom d'utilisateur" - }, - "title": "Configuration du client Transmission" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Fr\u00e9quence de mise \u00e0 jour" - }, - "title": "Configurer les options pour Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/hu.json b/homeassistant/components/transmission/.translations/hu.json deleted file mode 100644 index cbd2f44c340..00000000000 --- a/homeassistant/components/transmission/.translations/hu.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "error": { - "cannot_connect": "Nem lehet csatlakozni az \u00e1llom\u00e1shoz", - "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik", - "wrong_credentials": "Rossz felhaszn\u00e1l\u00f3n\u00e9v vagy jelsz\u00f3" - }, - "step": { - "user": { - "data": { - "host": "Kiszolg\u00e1l\u00f3", - "name": "N\u00e9v", - "password": "Jelsz\u00f3", - "port": "Port", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v" - }, - "title": "\u00c1tviteli \u00fcgyf\u00e9l be\u00e1ll\u00edt\u00e1sa" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/it.json b/homeassistant/components/transmission/.translations/it.json deleted file mode 100644 index 8a1f01783c1..00000000000 --- a/homeassistant/components/transmission/.translations/it.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'host \u00e8 gi\u00e0 configurato." - }, - "error": { - "cannot_connect": "Impossibile connettersi all'host", - "name_exists": "Il nome \u00e8 gi\u00e0 esistente", - "wrong_credentials": "Nome utente o password non validi" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nome", - "password": "Password", - "port": "Porta", - "username": "Nome utente" - }, - "title": "Configura client di Trasmissione" - } - }, - "title": "Trasmissione" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Frequenza di aggiornamento" - }, - "title": "Configurare le opzioni per Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/ko.json b/homeassistant/components/transmission/.translations/ko.json deleted file mode 100644 index 4d3537818b7..00000000000 --- a/homeassistant/components/transmission/.translations/ko.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "cannot_connect": "\ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", - "wrong_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "name": "\uc774\ub984", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" - }, - "title": "Transmission \ud074\ub77c\uc774\uc5b8\ud2b8 \uc124\uc815" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\uc5c5\ub370\uc774\ud2b8 \ube48\ub3c4" - }, - "title": "Transmission \uc635\uc158 \uc124\uc815" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/lb.json b/homeassistant/components/transmission/.translations/lb.json deleted file mode 100644 index 0533574efb0..00000000000 --- a/homeassistant/components/transmission/.translations/lb.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Apparat ass scho konfigur\u00e9iert" - }, - "error": { - "cannot_connect": "Kann sech net mam Server verbannen.", - "name_exists": "Numm g\u00ebtt et schonn", - "wrong_credentials": "Falsche Benotzernumm oder Passwuert" - }, - "step": { - "user": { - "data": { - "host": "Server", - "name": "Numm", - "password": "Passwuert", - "port": "Port", - "username": "Benotzernumm" - }, - "title": "Transmission Client ariichten" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Intervalle vun de Mise \u00e0 jour" - }, - "title": "Optioune fir Transmission konfigur\u00e9ieren" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/nl.json b/homeassistant/components/transmission/.translations/nl.json deleted file mode 100644 index 5abf25e286c..00000000000 --- a/homeassistant/components/transmission/.translations/nl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host is al geconfigureerd." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met host", - "name_exists": "Naam bestaat al", - "wrong_credentials": "verkeerde gebruikersnaam of wachtwoord" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Naam", - "password": "Wachtwoord", - "port": "Poort", - "username": "Gebruikersnaam" - }, - "title": "Verzendclient instellen" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Update frequentie" - }, - "title": "Configureer de opties voor Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/no.json b/homeassistant/components/transmission/.translations/no.json deleted file mode 100644 index d18a854d6e3..00000000000 --- a/homeassistant/components/transmission/.translations/no.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Verten er allerede konfigurert." - }, - "error": { - "cannot_connect": "Kan ikke koble til vert", - "name_exists": "Navnet eksisterer allerede", - "wrong_credentials": "Ugyldig brukernavn eller passord" - }, - "step": { - "user": { - "data": { - "host": "Vert", - "name": "Navn", - "password": "Passord", - "port": "", - "username": "Brukernavn" - }, - "title": "Oppsett av Transmission-klient" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Oppdater frekvens" - }, - "title": "Konfigurer alternativer for Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/pl.json b/homeassistant/components/transmission/.translations/pl.json deleted file mode 100644 index f3e8c01f3d7..00000000000 --- a/homeassistant/components/transmission/.translations/pl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Host jest ju\u017c skonfigurowany." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z hostem", - "name_exists": "Nazwa ju\u017c istnieje.", - "wrong_credentials": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nazwa", - "password": "Has\u0142o", - "port": "Port", - "username": "Nazwa u\u017cytkownika" - }, - "title": "Konfiguracja klienta Transmission" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" - }, - "title": "Konfiguracja opcji dla Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/pt-BR.json b/homeassistant/components/transmission/.translations/pt-BR.json deleted file mode 100644 index 2c162e66ce7..00000000000 --- a/homeassistant/components/transmission/.translations/pt-BR.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O host j\u00e1 est\u00e1 configurado." - }, - "error": { - "cannot_connect": "N\u00e3o foi poss\u00edvel conectar ao host", - "name_exists": "O nome j\u00e1 existe", - "wrong_credentials": "Nome de usu\u00e1rio ou senha incorretos" - }, - "step": { - "user": { - "data": { - "host": "Host", - "name": "Nome", - "password": "Senha", - "port": "Porta", - "username": "Usu\u00e1rio" - }, - "title": "Configurar o cliente de transmiss\u00e3o" - } - }, - "title": "Transmiss\u00e3o" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Frequ\u00eancia de atualiza\u00e7\u00e3o" - }, - "title": "Configurar op\u00e7\u00f5es para Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/pt.json b/homeassistant/components/transmission/.translations/pt.json deleted file mode 100644 index 0421228d0f0..00000000000 --- a/homeassistant/components/transmission/.translations/pt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "error": { - "wrong_credentials": "Nome de utilizador ou palavra passe incorretos" - }, - "step": { - "user": { - "data": { - "host": "Servidor", - "password": "Palavra-passe", - "port": "Porta", - "username": "Utilizador" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/ru.json b/homeassistant/components/transmission/.translations/ru.json deleted file mode 100644 index ad43d3ee600..00000000000 --- a/homeassistant/components/transmission/.translations/ru.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0445\u043e\u0441\u0442\u0443.", - "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.", - "wrong_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "username": "\u041b\u043e\u0433\u0438\u043d" - }, - "title": "Transmission" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/sl.json b/homeassistant/components/transmission/.translations/sl.json deleted file mode 100644 index 765fb284c3a..00000000000 --- a/homeassistant/components/transmission/.translations/sl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Gostitelj je \u017ee konfiguriran." - }, - "error": { - "cannot_connect": "Ni mogo\u010de vzpostaviti povezave z gostiteljem", - "name_exists": "Ime \u017ee obstaja", - "wrong_credentials": "Napa\u010dno uporabni\u0161ko ime ali geslo" - }, - "step": { - "user": { - "data": { - "host": "Gostitelj", - "name": "Ime", - "password": "Geslo", - "port": "Vrata", - "username": "Uporabni\u0161ko ime" - }, - "title": "Namestitev odjemalca Transmission" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Pogostost posodabljanja" - }, - "title": "Nastavite mo\u017enosti za Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/sv.json b/homeassistant/components/transmission/.translations/sv.json deleted file mode 100644 index 289c9f985e3..00000000000 --- a/homeassistant/components/transmission/.translations/sv.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "V\u00e4rden \u00e4r redan konfigurerad." - }, - "error": { - "cannot_connect": "Det g\u00e5r inte att ansluta till v\u00e4rden", - "name_exists": "Namnet finns redan", - "wrong_credentials": "Fel anv\u00e4ndarnamn eller l\u00f6senord" - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rd", - "name": "Namn", - "password": "L\u00f6senord", - "port": "Port", - "username": "Anv\u00e4ndarnamn" - }, - "title": "St\u00e4ll in Transmission-klienten" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "Uppdateringsfrekvens" - }, - "title": "Konfigurera alternativ f\u00f6r Transmission" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/zh-Hant.json b/homeassistant/components/transmission/.translations/zh-Hant.json deleted file mode 100644 index 6ae573211c6..00000000000 --- a/homeassistant/components/transmission/.translations/zh-Hant.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u4e3b\u6a5f\u7aef", - "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728", - "wrong_credentials": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u932f\u8aa4" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "name": "\u540d\u7a31", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "username": "\u4f7f\u7528\u8005\u540d\u7a31" - }, - "title": "\u8a2d\u5b9a Transmission \u5ba2\u6236\u7aef" - } - }, - "title": "Transmission" - }, - "options": { - "step": { - "init": { - "data": { - "scan_interval": "\u66f4\u65b0\u983b\u7387" - }, - "title": "Transmission \u8a2d\u5b9a\u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/transmission/__init__.py b/homeassistant/components/transmission/__init__.py index 08aa52e3a13..32177e91160 100644 --- a/homeassistant/components/transmission/__init__.py +++ b/homeassistant/components/transmission/__init__.py @@ -9,6 +9,7 @@ import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT from homeassistant.const import ( CONF_HOST, + CONF_ID, CONF_NAME, CONF_PASSWORD, CONF_PORT, @@ -21,13 +22,19 @@ from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.event import async_track_time_interval from .const import ( + ATTR_DELETE_DATA, ATTR_TORRENT, DATA_UPDATED, + DEFAULT_DELETE_DATA, DEFAULT_NAME, DEFAULT_PORT, DEFAULT_SCAN_INTERVAL, DOMAIN, + EVENT_DOWNLOADED_TORRENT, + EVENT_REMOVED_TORRENT, + EVENT_STARTED_TORRENT, SERVICE_ADD_TORRENT, + SERVICE_REMOVE_TORRENT, ) from .errors import AuthenticationError, CannotConnect, UnknownError @@ -38,6 +45,14 @@ SERVICE_ADD_TORRENT_SCHEMA = vol.Schema( {vol.Required(ATTR_TORRENT): cv.string, vol.Required(CONF_NAME): cv.string} ) +SERVICE_REMOVE_TORRENT_SCHEMA = vol.Schema( + { + vol.Required(CONF_NAME): cv.string, + vol.Required(CONF_ID): cv.positive_int, + vol.Optional(ATTR_DELETE_DATA, default=DEFAULT_DELETE_DATA): cv.boolean, + } +) + TRANS_SCHEMA = vol.All( vol.Schema( { @@ -95,6 +110,7 @@ async def async_unload_entry(hass, config_entry): if not hass.data[DOMAIN]: hass.services.async_remove(DOMAIN, SERVICE_ADD_TORRENT) + hass.services.async_remove(DOMAIN, SERVICE_REMOVE_TORRENT) return True @@ -180,15 +196,38 @@ class TransmissionClient: ("http", "ftp:", "magnet:") ) or self.hass.config.is_allowed_path(torrent): tm_client.tm_api.add_torrent(torrent) + tm_client.api.update() else: _LOGGER.warning( "Could not add torrent: unsupported type or no permission" ) + def remove_torrent(service): + """Remove torrent.""" + tm_client = None + for entry in self.hass.config_entries.async_entries(DOMAIN): + if entry.data[CONF_NAME] == service.data[CONF_NAME]: + tm_client = self.hass.data[DOMAIN][entry.entry_id] + break + if tm_client is None: + _LOGGER.error("Transmission instance is not found") + return + torrent_id = service.data[CONF_ID] + delete_data = service.data[ATTR_DELETE_DATA] + tm_client.tm_api.remove_torrent(torrent_id, delete_data=delete_data) + tm_client.api.update() + self.hass.services.async_register( DOMAIN, SERVICE_ADD_TORRENT, add_torrent, schema=SERVICE_ADD_TORRENT_SCHEMA ) + self.hass.services.async_register( + DOMAIN, + SERVICE_REMOVE_TORRENT, + remove_torrent, + schema=SERVICE_REMOVE_TORRENT_SCHEMA, + ) + self.config_entry.add_update_listener(self.async_options_updated) return True @@ -234,13 +273,13 @@ class TransmissionData: self.hass = hass self.config = config self.data = None - self.torrents = None + self.torrents = [] self.session = None self.available = True self._api = api self.completed_torrents = [] self.started_torrents = [] - self.started_torrent_dict = {} + self.all_torrents = [] @property def host(self): @@ -259,9 +298,9 @@ class TransmissionData: self.torrents = self._api.get_torrents() self.session = self._api.get_session() - self.check_started_torrent_info() self.check_completed_torrent() self.check_started_torrent() + self.check_removed_torrent() _LOGGER.debug("Torrent Data for %s Updated", self.host) self.available = True @@ -292,7 +331,7 @@ class TransmissionData: ) for var in tmp_completed_torrents: - self.hass.bus.fire("transmission_downloaded_torrent", {"name": var}) + self.hass.bus.fire(EVENT_DOWNLOADED_TORRENT, {"name": var}) self.completed_torrents = actual_completed_torrents @@ -308,41 +347,18 @@ class TransmissionData: ) for var in tmp_started_torrents: - self.hass.bus.fire("transmission_started_torrent", {"name": var}) + self.hass.bus.fire(EVENT_STARTED_TORRENT, {"name": var}) self.started_torrents = actual_started_torrents - def check_started_torrent_info(self): - """Get started torrent info functionality.""" - all_torrents = self._api.get_torrents() - current_down = {} + def check_removed_torrent(self): + """Get removed torrent functionality.""" + actual_torrents = self.torrents + actual_all_torrents = [var.name for var in actual_torrents] - for torrent in all_torrents: - if torrent.status == "downloading": - info = self.started_torrent_dict[torrent.name] = { - "added_date": torrent.addedDate, - "percent_done": f"{torrent.percentDone * 100:.2f}", - } - try: - info["eta"] = str(torrent.eta) - except ValueError: - info["eta"] = "unknown" - - current_down[torrent.name] = True - - elif torrent.name in self.started_torrent_dict: - self.started_torrent_dict.pop(torrent.name) - - for torrent in list(self.started_torrent_dict): - if torrent not in current_down: - self.started_torrent_dict.pop(torrent) - - def get_started_torrent_count(self): - """Get the number of started torrents.""" - return len(self.started_torrents) - - def get_completed_torrent_count(self): - """Get the number of completed torrents.""" - return len(self.completed_torrents) + removed_torrents = list(set(self.all_torrents).difference(actual_all_torrents)) + for var in removed_torrents: + self.hass.bus.fire(EVENT_REMOVED_TORRENT, {"name": var}) + self.all_torrents = actual_all_torrents def start_torrents(self): """Start all torrents.""" diff --git a/homeassistant/components/transmission/const.py b/homeassistant/components/transmission/const.py index 659ef97d9de..8edbf944890 100644 --- a/homeassistant/components/transmission/const.py +++ b/homeassistant/components/transmission/const.py @@ -1,27 +1,24 @@ """Constants for the Transmission Bittorent Client component.""" -from homeassistant.const import DATA_RATE_MEGABYTES_PER_SECOND - DOMAIN = "transmission" -SENSOR_TYPES = { - "active_torrents": ["Active Torrents", "Torrents"], - "current_status": ["Status", None], - "download_speed": ["Down Speed", DATA_RATE_MEGABYTES_PER_SECOND], - "paused_torrents": ["Paused Torrents", "Torrents"], - "total_torrents": ["Total Torrents", "Torrents"], - "upload_speed": ["Up Speed", DATA_RATE_MEGABYTES_PER_SECOND], - "completed_torrents": ["Completed Torrents", "Torrents"], - "started_torrents": ["Started Torrents", "Torrents"], -} SWITCH_TYPES = {"on_off": "Switch", "turtle_mode": "Turtle Mode"} +DEFAULT_DELETE_DATA = False DEFAULT_NAME = "Transmission" DEFAULT_PORT = 9091 DEFAULT_SCAN_INTERVAL = 120 STATE_ATTR_TORRENT_INFO = "torrent_info" + +ATTR_DELETE_DATA = "delete_data" ATTR_TORRENT = "torrent" + SERVICE_ADD_TORRENT = "add_torrent" +SERVICE_REMOVE_TORRENT = "remove_torrent" DATA_UPDATED = "transmission_data_updated" + +EVENT_STARTED_TORRENT = "transmission_started_torrent" +EVENT_REMOVED_TORRENT = "transmission_removed_torrent" +EVENT_DOWNLOADED_TORRENT = "transmission_downloaded_torrent" diff --git a/homeassistant/components/transmission/manifest.json b/homeassistant/components/transmission/manifest.json index 117dd3cc246..d0861baafb5 100644 --- a/homeassistant/components/transmission/manifest.json +++ b/homeassistant/components/transmission/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/transmission", "requirements": ["transmissionrpc==0.11"], - "dependencies": [], "codeowners": ["@engrbm87", "@JPHutchins"] } diff --git a/homeassistant/components/transmission/sensor.py b/homeassistant/components/transmission/sensor.py index 0db731d6f01..812d63f24d8 100644 --- a/homeassistant/components/transmission/sensor.py +++ b/homeassistant/components/transmission/sensor.py @@ -1,12 +1,12 @@ """Support for monitoring the Transmission BitTorrent client API.""" import logging -from homeassistant.const import CONF_NAME, STATE_IDLE +from homeassistant.const import CONF_NAME, DATA_RATE_MEGABYTES_PER_SECOND, STATE_IDLE from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity -from .const import DOMAIN, SENSOR_TYPES, STATE_ATTR_TORRENT_INFO +from .const import DOMAIN, STATE_ATTR_TORRENT_INFO _LOGGER = logging.getLogger(__name__) @@ -17,41 +17,35 @@ async def async_setup_entry(hass, config_entry, async_add_entities): tm_client = hass.data[DOMAIN][config_entry.entry_id] name = config_entry.data[CONF_NAME] - dev = [] - for sensor_type in SENSOR_TYPES: - dev.append( - TransmissionSensor( - sensor_type, - tm_client, - name, - SENSOR_TYPES[sensor_type][0], - SENSOR_TYPES[sensor_type][1], - ) - ) + dev = [ + TransmissionSpeedSensor(tm_client, name, "Down Speed", "download"), + TransmissionSpeedSensor(tm_client, name, "Up Speed", "upload"), + TransmissionStatusSensor(tm_client, name, "Status"), + TransmissionTorrentsSensor(tm_client, name, "Active Torrents", "active"), + TransmissionTorrentsSensor(tm_client, name, "Paused Torrents", "paused"), + TransmissionTorrentsSensor(tm_client, name, "Total Torrents", "total"), + TransmissionTorrentsSensor(tm_client, name, "Completed Torrents", "completed"), + TransmissionTorrentsSensor(tm_client, name, "Started Torrents", "started"), + ] async_add_entities(dev, True) class TransmissionSensor(Entity): - """Representation of a Transmission sensor.""" + """A base class for all Transmission sensors.""" - def __init__( - self, sensor_type, tm_client, client_name, sensor_name, unit_of_measurement - ): + def __init__(self, tm_client, client_name, sensor_name, sub_type=None): """Initialize the sensor.""" - self._name = sensor_name - self._state = None self._tm_client = tm_client - self._unit_of_measurement = unit_of_measurement - self._data = None - self.client_name = client_name - self.type = sensor_type - self.unsub_update = None + self._client_name = client_name + self._name = sensor_name + self._sub_type = sub_type + self._state = None @property def name(self): """Return the name of the sensor.""" - return f"{self.client_name} {self._name}" + return f"{self._client_name} {self._name}" @property def unique_id(self): @@ -68,77 +62,109 @@ class TransmissionSensor(Entity): """Return the polling requirement for this sensor.""" return False - @property - def unit_of_measurement(self): - """Return the unit of measurement of this entity, if any.""" - return self._unit_of_measurement - @property def available(self): """Could the device be accessed during the last update call.""" return self._tm_client.api.available - @property - def device_state_attributes(self): - """Return the state attributes, if any.""" - if self._tm_client.api.started_torrent_dict and self.type == "started_torrents": - return {STATE_ATTR_TORRENT_INFO: self._tm_client.api.started_torrent_dict} - return None - async def async_added_to_hass(self): """Handle entity which will be added.""" - self.unsub_update = async_dispatcher_connect( - self.hass, - self._tm_client.api.signal_update, - self._schedule_immediate_update, + + @callback + def update(): + """Update the state.""" + self.async_schedule_update_ha_state(True) + + self.async_on_remove( + async_dispatcher_connect( + self.hass, self._tm_client.api.signal_update, update + ) ) - @callback - def _schedule_immediate_update(self): - self.async_schedule_update_ha_state(True) - async def will_remove_from_hass(self): - """Unsubscribe from update dispatcher.""" - if self.unsub_update: - self.unsub_update() - self.unsub_update = None +class TransmissionSpeedSensor(TransmissionSensor): + """Representation of a Transmission speed sensor.""" + + @property + def unit_of_measurement(self): + """Return the unit of measurement of this entity, if any.""" + return DATA_RATE_MEGABYTES_PER_SECOND def update(self): """Get the latest data from Transmission and updates the state.""" - self._data = self._tm_client.api.data + data = self._tm_client.api.data + if data: + mb_spd = ( + float(data.downloadSpeed) + if self._sub_type == "download" + else float(data.uploadSpeed) + ) + mb_spd = mb_spd / 1024 / 1024 + self._state = round(mb_spd, 2 if mb_spd < 0.1 else 1) - if self.type == "completed_torrents": - self._state = self._tm_client.api.get_completed_torrent_count() - elif self.type == "started_torrents": - self._state = self._tm_client.api.get_started_torrent_count() - if self.type == "current_status": - if self._data: - upload = self._data.uploadSpeed - download = self._data.downloadSpeed - if upload > 0 and download > 0: - self._state = "Up/Down" - elif upload > 0 and download == 0: - self._state = "Seeding" - elif upload == 0 and download > 0: - self._state = "Downloading" - else: - self._state = STATE_IDLE +class TransmissionStatusSensor(TransmissionSensor): + """Representation of a Transmission status sensor.""" + + def update(self): + """Get the latest data from Transmission and updates the state.""" + data = self._tm_client.api.data + if data: + upload = data.uploadSpeed + download = data.downloadSpeed + if upload > 0 and download > 0: + self._state = "Up/Down" + elif upload > 0 and download == 0: + self._state = "Seeding" + elif upload == 0 and download > 0: + self._state = "Downloading" else: - self._state = None + self._state = STATE_IDLE + else: + self._state = None - if self._data: - if self.type == "download_speed": - mb_spd = float(self._data.downloadSpeed) - mb_spd = mb_spd / 1024 / 1024 - self._state = round(mb_spd, 2 if mb_spd < 0.1 else 1) - elif self.type == "upload_speed": - mb_spd = float(self._data.uploadSpeed) - mb_spd = mb_spd / 1024 / 1024 - self._state = round(mb_spd, 2 if mb_spd < 0.1 else 1) - elif self.type == "active_torrents": - self._state = self._data.activeTorrentCount - elif self.type == "paused_torrents": - self._state = self._data.pausedTorrentCount - elif self.type == "total_torrents": - self._state = self._data.torrentCount + +class TransmissionTorrentsSensor(TransmissionSensor): + """Representation of a Transmission torrents sensor.""" + + SUBTYPE_MODES = { + "started": ("downloading"), + "completed": ("seeding"), + "paused": ("stopped"), + "active": ("seeding", "downloading"), + "total": None, + } + + @property + def unit_of_measurement(self): + """Return the unit of measurement of this entity, if any.""" + return "Torrents" + + @property + def device_state_attributes(self): + """Return the state attributes, if any.""" + info = _torrents_info( + self._tm_client.api.torrents, self.SUBTYPE_MODES[self._sub_type] + ) + return {STATE_ATTR_TORRENT_INFO: info} + + def update(self): + """Get the latest data from Transmission and updates the state.""" + self._state = len(self.device_state_attributes[STATE_ATTR_TORRENT_INFO]) + + +def _torrents_info(torrents, statuses=None): + infos = {} + for torrent in torrents: + if statuses is None or torrent.status in statuses: + info = infos[torrent.name] = { + "added_date": torrent.addedDate, + "percent_done": f"{torrent.percentDone * 100:.2f}", + "status": torrent.status, + "id": torrent.id, + } + try: + info["eta"] = str(torrent.eta) + except ValueError: + pass + return infos diff --git a/homeassistant/components/transmission/services.yaml b/homeassistant/components/transmission/services.yaml index de3314e20f6..e8114b680ab 100644 --- a/homeassistant/components/transmission/services.yaml +++ b/homeassistant/components/transmission/services.yaml @@ -7,3 +7,16 @@ add_torrent: torrent: description: URL, magnet link or Base64 encoded file. example: http://releases.ubuntu.com/19.04/ubuntu-19.04-desktop-amd64.iso.torrent + +remove_torrent: + description: Remove a torrent + fields: + name: + description: Instance name as entered during entry config + example: Transmission + id: + description: ID of a torrent + example: 123 + delete_data: + description: Delete torrent data + example: false diff --git a/homeassistant/components/transmission/strings.json b/homeassistant/components/transmission/strings.json index 45c16be36e2..ef8f49ab3d1 100644 --- a/homeassistant/components/transmission/strings.json +++ b/homeassistant/components/transmission/strings.json @@ -1,35 +1,30 @@ { - "config": { - "title": "Transmission", - "step": { - "user": { - "title": "Setup Transmission Client", - "data": { - "name": "Name", - "host": "Host", - "username": "Username", - "password": "Password", - "port": "Port" - } - } - }, - "error": { - "name_exists": "Name already exists", - "wrong_credentials": "Wrong username or password", - "cannot_connect": "Unable to Connect to host" - }, - "abort": { - "already_configured": "Host is already configured." + "config": { + "step": { + "user": { + "title": "Setup Transmission Client", + "data": { + "name": "Name", + "host": "Host", + "username": "Username", + "password": "Password", + "port": "Port" } + } }, - "options": { - "step": { - "init": { - "title": "Configure options for Transmission", - "data": { - "scan_interval": "Update frequency" - } - } - } + "error": { + "name_exists": "Name already exists", + "wrong_credentials": "Wrong username or password", + "cannot_connect": "Unable to Connect to host" + }, + "abort": { "already_configured": "Host is already configured." } + }, + "options": { + "step": { + "init": { + "title": "Configure options for Transmission", + "data": { "scan_interval": "Update frequency" } + } } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/transmission/translations/bg.json b/homeassistant/components/transmission/translations/bg.json new file mode 100644 index 00000000000..d817129e11a --- /dev/null +++ b/homeassistant/components/transmission/translations/bg.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d." + }, + "error": { + "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430", + "name_exists": "\u0418\u043c\u0435\u0442\u043e \u0432\u0435\u0447\u0435 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430", + "wrong_credentials": "\u0413\u0440\u0435\u0448\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430" + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "name": "\u0418\u043c\u0435", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430 Transmission \u043a\u043b\u0438\u0435\u043d\u0442" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\u0427\u0435\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435" + }, + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/ca.json b/homeassistant/components/transmission/translations/ca.json new file mode 100644 index 00000000000..837766ba6ed --- /dev/null +++ b/homeassistant/components/transmission/translations/ca.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar amb l'amfitri\u00f3", + "name_exists": "El nom ja existeix", + "wrong_credentials": "Nom d'usuari o contrasenya incorrectes" + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "name": "Nom", + "password": "Contrasenya", + "port": "Port", + "username": "Nom d'usuari" + }, + "title": "Configuraci\u00f3 del client de Transmission" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Freq\u00fc\u00e8ncia d\u2019actualitzaci\u00f3" + }, + "title": "Opcions de configuraci\u00f3 de Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/cs.json b/homeassistant/components/transmission/translations/cs.json similarity index 100% rename from homeassistant/components/transmission/.translations/cs.json rename to homeassistant/components/transmission/translations/cs.json diff --git a/homeassistant/components/transmission/translations/da.json b/homeassistant/components/transmission/translations/da.json new file mode 100644 index 00000000000..469c9ba6ff6 --- /dev/null +++ b/homeassistant/components/transmission/translations/da.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "V\u00e6rten er allerede konfigureret." + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse til v\u00e6rt", + "name_exists": "Navnet findes allerede", + "wrong_credentials": "Ugyldigt brugernavn eller adgangskode" + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "name": "Navn", + "password": "Adgangskode", + "port": "Port", + "username": "Brugernavn" + }, + "title": "Konfigurer Transmission-klient" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Opdateringsfrekvens" + }, + "title": "Konfigurationsindstillinger for Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/de.json b/homeassistant/components/transmission/translations/de.json new file mode 100644 index 00000000000..4d2b3d6acd8 --- /dev/null +++ b/homeassistant/components/transmission/translations/de.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Host ist bereits konfiguriert." + }, + "error": { + "cannot_connect": "Verbindung zum Host nicht m\u00f6glich", + "name_exists": "Name existiert bereits", + "wrong_credentials": "Falscher Benutzername oder Kennwort" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name", + "password": "Passwort", + "port": "Port", + "username": "Benutzername" + }, + "title": "Transmission-Client einrichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Aktualisierungsfrequenz" + }, + "title": "Konfiguriere die Optionen f\u00fcr die \u00dcbertragung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/en.json b/homeassistant/components/transmission/translations/en.json new file mode 100644 index 00000000000..702fda2dcd5 --- /dev/null +++ b/homeassistant/components/transmission/translations/en.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Host is already configured." + }, + "error": { + "cannot_connect": "Unable to Connect to host", + "name_exists": "Name already exists", + "wrong_credentials": "Wrong username or password" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Name", + "password": "Password", + "port": "Port", + "username": "Username" + }, + "title": "Setup Transmission Client" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Update frequency" + }, + "title": "Configure options for Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/es.json b/homeassistant/components/transmission/translations/es.json new file mode 100644 index 00000000000..9626b5bd863 --- /dev/null +++ b/homeassistant/components/transmission/translations/es.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "El host ya est\u00e1 configurado." + }, + "error": { + "cannot_connect": "No se puede conectar al host", + "name_exists": "El nombre ya existe", + "wrong_credentials": "Nombre de usuario o contrase\u00f1a incorrectos" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nombre", + "password": "Contrase\u00f1a", + "port": "Puerto", + "username": "Usuario" + }, + "title": "Configuraci\u00f3n del cliente de transmisi\u00f3n" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Frecuencia de actualizaci\u00f3n" + }, + "title": "Configurar opciones para la transmisi\u00f3n" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/fr.json b/homeassistant/components/transmission/translations/fr.json new file mode 100644 index 00000000000..3e5c87b7962 --- /dev/null +++ b/homeassistant/components/transmission/translations/fr.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "L'h\u00f4te est d\u00e9j\u00e0 configur\u00e9." + }, + "error": { + "cannot_connect": "Impossible de se connecter \u00e0 l'h\u00f4te", + "name_exists": "Ce nom est d\u00e9j\u00e0 utilis\u00e9", + "wrong_credentials": "Mauvais nom d'utilisateur ou mot de passe" + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "name": "Nom", + "password": "Mot de passe", + "port": "Port", + "username": "Nom d'utilisateur" + }, + "title": "Configuration du client Transmission" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Fr\u00e9quence de mise \u00e0 jour" + }, + "title": "Configurer les options pour Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/hu.json b/homeassistant/components/transmission/translations/hu.json new file mode 100644 index 00000000000..fd9bb9e64cb --- /dev/null +++ b/homeassistant/components/transmission/translations/hu.json @@ -0,0 +1,30 @@ +{ + "config": { + "error": { + "cannot_connect": "Nem lehet csatlakozni az \u00e1llom\u00e1shoz", + "name_exists": "A n\u00e9v m\u00e1r l\u00e9tezik", + "wrong_credentials": "Rossz felhaszn\u00e1l\u00f3n\u00e9v vagy jelsz\u00f3" + }, + "step": { + "user": { + "data": { + "host": "Kiszolg\u00e1l\u00f3", + "name": "N\u00e9v", + "password": "Jelsz\u00f3", + "port": "Port", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v" + }, + "title": "\u00c1tviteli \u00fcgyf\u00e9l be\u00e1ll\u00edt\u00e1sa" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Friss\u00edt\u00e9si gyakoris\u00e1g" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/it.json b/homeassistant/components/transmission/translations/it.json new file mode 100644 index 00000000000..7c19cf4bc06 --- /dev/null +++ b/homeassistant/components/transmission/translations/it.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "L'host \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Impossibile connettersi all'host", + "name_exists": "Il nome \u00e8 gi\u00e0 esistente", + "wrong_credentials": "Nome utente o password non validi" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nome", + "password": "Password", + "port": "Porta", + "username": "Nome utente" + }, + "title": "Configura client di Trasmissione" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Frequenza di aggiornamento" + }, + "title": "Configurare le opzioni per Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/ko.json b/homeassistant/components/transmission/translations/ko.json new file mode 100644 index 00000000000..b82e80a342d --- /dev/null +++ b/homeassistant/components/transmission/translations/ko.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\ud638\uc2a4\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\ud638\uc2a4\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "name_exists": "\uc774\ub984\uc774 \uc774\ubbf8 \uc874\uc7ac\ud569\ub2c8\ub2e4", + "wrong_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "name": "\uc774\ub984", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Transmission \ud074\ub77c\uc774\uc5b8\ud2b8 \uc124\uc815" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\uc5c5\ub370\uc774\ud2b8 \ube48\ub3c4" + }, + "title": "Transmission \uc635\uc158 \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/lb.json b/homeassistant/components/transmission/translations/lb.json new file mode 100644 index 00000000000..e1301cd2df1 --- /dev/null +++ b/homeassistant/components/transmission/translations/lb.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Apparat ass scho konfigur\u00e9iert" + }, + "error": { + "cannot_connect": "Kann sech net mam Server verbannen.", + "name_exists": "Numm g\u00ebtt et schonn", + "wrong_credentials": "Falsche Benotzernumm oder Passwuert" + }, + "step": { + "user": { + "data": { + "host": "Server", + "name": "Numm", + "password": "Passwuert", + "port": "Port", + "username": "Benotzernumm" + }, + "title": "Transmission Client ariichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Intervalle vun de Mise \u00e0 jour" + }, + "title": "Optioune fir Transmission konfigur\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/nl.json b/homeassistant/components/transmission/translations/nl.json new file mode 100644 index 00000000000..3f6fba583c0 --- /dev/null +++ b/homeassistant/components/transmission/translations/nl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Host is al geconfigureerd." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met host", + "name_exists": "Naam bestaat al", + "wrong_credentials": "verkeerde gebruikersnaam of wachtwoord" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Naam", + "password": "Wachtwoord", + "port": "Poort", + "username": "Gebruikersnaam" + }, + "title": "Verzendclient instellen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Update frequentie" + }, + "title": "Configureer de opties voor Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/.translations/nn.json b/homeassistant/components/transmission/translations/nn.json similarity index 100% rename from homeassistant/components/transmission/.translations/nn.json rename to homeassistant/components/transmission/translations/nn.json diff --git a/homeassistant/components/transmission/translations/no.json b/homeassistant/components/transmission/translations/no.json new file mode 100644 index 00000000000..33bd4d3bff4 --- /dev/null +++ b/homeassistant/components/transmission/translations/no.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Verten er allerede konfigurert." + }, + "error": { + "cannot_connect": "Kan ikke koble til vert", + "name_exists": "Navnet eksisterer allerede", + "wrong_credentials": "Ugyldig brukernavn eller passord" + }, + "step": { + "user": { + "data": { + "host": "Vert", + "name": "Navn", + "password": "Passord", + "port": "", + "username": "Brukernavn" + }, + "title": "Oppsett av Transmission-klient" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Oppdater frekvens" + }, + "title": "Konfigurer alternativer for Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/pl.json b/homeassistant/components/transmission/translations/pl.json new file mode 100644 index 00000000000..52efb32b551 --- /dev/null +++ b/homeassistant/components/transmission/translations/pl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Host jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z hostem", + "name_exists": "Nazwa ju\u017c istnieje.", + "wrong_credentials": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa", + "password": "Has\u0142o", + "port": "Port", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Konfiguracja klienta Transmission" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" + }, + "title": "Konfiguracja opcji dla Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/pt-BR.json b/homeassistant/components/transmission/translations/pt-BR.json new file mode 100644 index 00000000000..92921d34512 --- /dev/null +++ b/homeassistant/components/transmission/translations/pt-BR.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "O host j\u00e1 est\u00e1 configurado." + }, + "error": { + "cannot_connect": "N\u00e3o foi poss\u00edvel conectar ao host", + "name_exists": "O nome j\u00e1 existe", + "wrong_credentials": "Nome de usu\u00e1rio ou senha incorretos" + }, + "step": { + "user": { + "data": { + "host": "Host", + "name": "Nome", + "password": "Senha", + "port": "Porta", + "username": "Usu\u00e1rio" + }, + "title": "Configurar o cliente de transmiss\u00e3o" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Frequ\u00eancia de atualiza\u00e7\u00e3o" + }, + "title": "Configurar op\u00e7\u00f5es para Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/pt.json b/homeassistant/components/transmission/translations/pt.json new file mode 100644 index 00000000000..6b238362fd6 --- /dev/null +++ b/homeassistant/components/transmission/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "wrong_credentials": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "user": { + "data": { + "host": "Servidor", + "name": "Nome", + "password": "Palavra-passe", + "port": "Porta", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/ru.json b/homeassistant/components/transmission/translations/ru.json new file mode 100644 index 00000000000..17868c1e39e --- /dev/null +++ b/homeassistant/components/transmission/translations/ru.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0445\u043e\u0441\u0442\u0443.", + "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.", + "wrong_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "username": "\u041b\u043e\u0433\u0438\u043d" + }, + "title": "Transmission" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/sl.json b/homeassistant/components/transmission/translations/sl.json new file mode 100644 index 00000000000..90ae364c97b --- /dev/null +++ b/homeassistant/components/transmission/translations/sl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "Gostitelj je \u017ee konfiguriran." + }, + "error": { + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave z gostiteljem", + "name_exists": "Ime \u017ee obstaja", + "wrong_credentials": "Napa\u010dno uporabni\u0161ko ime ali geslo" + }, + "step": { + "user": { + "data": { + "host": "Gostitelj", + "name": "Ime", + "password": "Geslo", + "port": "Vrata", + "username": "Uporabni\u0161ko ime" + }, + "title": "Namestitev odjemalca Transmission" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Pogostost posodabljanja" + }, + "title": "Nastavite mo\u017enosti za Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/sv.json b/homeassistant/components/transmission/translations/sv.json new file mode 100644 index 00000000000..84023ea7c9c --- /dev/null +++ b/homeassistant/components/transmission/translations/sv.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "V\u00e4rden \u00e4r redan konfigurerad." + }, + "error": { + "cannot_connect": "Det g\u00e5r inte att ansluta till v\u00e4rden", + "name_exists": "Namnet finns redan", + "wrong_credentials": "Fel anv\u00e4ndarnamn eller l\u00f6senord" + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rd", + "name": "Namn", + "password": "L\u00f6senord", + "port": "Port", + "username": "Anv\u00e4ndarnamn" + }, + "title": "St\u00e4ll in Transmission-klienten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "Uppdateringsfrekvens" + }, + "title": "Konfigurera alternativ f\u00f6r Transmission" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/zh-Hant.json b/homeassistant/components/transmission/translations/zh-Hant.json new file mode 100644 index 00000000000..b8b30ab4159 --- /dev/null +++ b/homeassistant/components/transmission/translations/zh-Hant.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u4e3b\u6a5f\u7aef", + "name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728", + "wrong_credentials": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u932f\u8aa4" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "name": "\u540d\u7a31", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "username": "\u4f7f\u7528\u8005\u540d\u7a31" + }, + "title": "\u8a2d\u5b9a Transmission \u5ba2\u6236\u7aef" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "scan_interval": "\u66f4\u65b0\u983b\u7387" + }, + "title": "Transmission \u8a2d\u5b9a\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/transport_nsw/manifest.json b/homeassistant/components/transport_nsw/manifest.json index 34baf54c9ff..452bad9be8a 100644 --- a/homeassistant/components/transport_nsw/manifest.json +++ b/homeassistant/components/transport_nsw/manifest.json @@ -3,6 +3,5 @@ "name": "Transport NSW", "documentation": "https://www.home-assistant.io/integrations/transport_nsw", "requirements": ["PyTransportNSW==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/travisci/manifest.json b/homeassistant/components/travisci/manifest.json index 3dba3733f70..c5f05fb6dae 100644 --- a/homeassistant/components/travisci/manifest.json +++ b/homeassistant/components/travisci/manifest.json @@ -3,6 +3,5 @@ "name": "Travis-CI", "documentation": "https://www.home-assistant.io/integrations/travisci", "requirements": ["TravisPy==0.3.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/travisci/sensor.py b/homeassistant/components/travisci/sensor.py index ffbe5239cc9..c2ce599f5c3 100644 --- a/homeassistant/components/travisci/sensor.py +++ b/homeassistant/components/travisci/sensor.py @@ -106,9 +106,7 @@ class TravisCISensor(Entity): self._user = user self._branch = branch self._state = None - self._name = "{0} {1}".format( - self._repo_name, SENSOR_TYPES[self._sensor_type][0] - ) + self._name = "{} {}".format(self._repo_name, SENSOR_TYPES[self._sensor_type][0]) @property def name(self): diff --git a/homeassistant/components/trend/manifest.json b/homeassistant/components/trend/manifest.json index 2026816c090..edd0bea977d 100644 --- a/homeassistant/components/trend/manifest.json +++ b/homeassistant/components/trend/manifest.json @@ -2,8 +2,7 @@ "domain": "trend", "name": "Trend", "documentation": "https://www.home-assistant.io/integrations/trend", - "requirements": ["numpy==1.18.1"], - "dependencies": [], + "requirements": ["numpy==1.18.2"], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/tts/__init__.py b/homeassistant/components/tts/__init__.py index d9d513198ce..1946207337b 100644 --- a/homeassistant/components/tts/__init__.py +++ b/homeassistant/components/tts/__init__.py @@ -22,7 +22,13 @@ from homeassistant.components.media_player.const import ( MEDIA_TYPE_MUSIC, SERVICE_PLAY_MEDIA, ) -from homeassistant.const import ATTR_ENTITY_ID, CONF_PLATFORM +from homeassistant.const import ( + ATTR_ENTITY_ID, + CONF_PLATFORM, + HTTP_BAD_REQUEST, + HTTP_NOT_FOUND, + HTTP_OK, +) from homeassistant.core import callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_per_platform, discovery @@ -507,7 +513,7 @@ def _get_cache_files(cache_dir): record = _RE_VOICE_FILE.match(file_data) if record: key = KEY_PATTERN.format( - record.group(1), record.group(2), record.group(3), record.group(4), + record.group(1), record.group(2), record.group(3), record.group(4) ) cache[key.lower()] = file_data.lower() return cache @@ -529,9 +535,11 @@ class TextToSpeechUrlView(HomeAssistantView): try: data = await request.json() except ValueError: - return self.json_message("Invalid JSON specified", 400) + return self.json_message("Invalid JSON specified", HTTP_BAD_REQUEST) if not data.get(ATTR_PLATFORM) and data.get(ATTR_MESSAGE): - return self.json_message("Must specify platform and message", 400) + return self.json_message( + "Must specify platform and message", HTTP_BAD_REQUEST + ) p_type = data[ATTR_PLATFORM] message = data[ATTR_MESSAGE] @@ -543,10 +551,10 @@ class TextToSpeechUrlView(HomeAssistantView): url = await self.tts.async_get_url( p_type, message, cache=cache, language=language, options=options ) - resp = self.json({"url": url}, 200) + resp = self.json({"url": url}, HTTP_OK) except HomeAssistantError as err: _LOGGER.error("Error on init tts: %s", err) - resp = self.json({"error": err}, 400) + resp = self.json({"error": err}, HTTP_BAD_REQUEST) return resp @@ -568,6 +576,6 @@ class TextToSpeechView(HomeAssistantView): content, data = await self.tts.async_read_tts(filename) except HomeAssistantError as err: _LOGGER.error("Error on load tts: %s", err) - return web.Response(status=404) + return web.Response(status=HTTP_NOT_FOUND) return web.Response(body=data, content_type=content) diff --git a/homeassistant/components/tts/manifest.json b/homeassistant/components/tts/manifest.json index 817ca00a818..a53357b1a2b 100644 --- a/homeassistant/components/tts/manifest.json +++ b/homeassistant/components/tts/manifest.json @@ -2,7 +2,7 @@ "domain": "tts", "name": "Text-to-Speech (TTS)", "documentation": "https://www.home-assistant.io/integrations/tts", - "requirements": ["mutagen==1.43.0"], + "requirements": ["mutagen==1.44.0"], "dependencies": ["http"], "after_dependencies": ["media_player"], "codeowners": ["@pvizeli"] diff --git a/homeassistant/components/tts/services.yaml b/homeassistant/components/tts/services.yaml index 823eef632f3..7d1bf95572b 100644 --- a/homeassistant/components/tts/services.yaml +++ b/homeassistant/components/tts/services.yaml @@ -5,16 +5,16 @@ say: fields: entity_id: description: Name(s) of media player entities. - example: 'media_player.floor' + example: "media_player.floor" message: description: Text to speak on devices. - example: 'My name is hanna' + example: "My name is hanna" cache: description: Control file cache of this message. - example: 'true' + example: "true" language: description: Language to use for speech generation. - example: 'ru' + example: "ru" options: description: A dictionary containing platform-specific options. Optional depending on the platform. example: platform specific diff --git a/homeassistant/components/tuya/__init__.py b/homeassistant/components/tuya/__init__.py index dffd66265a6..74b1d1439ad 100644 --- a/homeassistant/components/tuya/__init__.py +++ b/homeassistant/components/tuya/__init__.py @@ -17,6 +17,8 @@ _LOGGER = logging.getLogger(__name__) CONF_COUNTRYCODE = "country_code" +PARALLEL_UPDATES = 0 + DOMAIN = "tuya" DATA_TUYA = "data_tuya" @@ -134,7 +136,7 @@ class TuyaDevice(Entity): @property def unique_id(self): """Return a unique ID.""" - return "tuya.{}".format(self.tuya.object_id()) + return f"tuya.{self.tuya.object_id()}" @property def name(self): diff --git a/homeassistant/components/tuya/climate.py b/homeassistant/components/tuya/climate.py index 8537e61a3ae..fe1fcc802ff 100644 --- a/homeassistant/components/tuya/climate.py +++ b/homeassistant/components/tuya/climate.py @@ -23,6 +23,8 @@ from . import DATA_TUYA, TuyaDevice DEVICE_TYPE = "climate" +PARALLEL_UPDATES = 0 + HA_STATE_TO_TUYA = { HVAC_MODE_AUTO: "auto", HVAC_MODE_COOL: "cold", diff --git a/homeassistant/components/tuya/cover.py b/homeassistant/components/tuya/cover.py index 446b2fa085d..35fd4719fdb 100644 --- a/homeassistant/components/tuya/cover.py +++ b/homeassistant/components/tuya/cover.py @@ -9,6 +9,8 @@ from homeassistant.components.cover import ( from . import DATA_TUYA, TuyaDevice +PARALLEL_UPDATES = 0 + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Tuya cover devices.""" diff --git a/homeassistant/components/tuya/fan.py b/homeassistant/components/tuya/fan.py index c76015889b9..90cf452db5b 100644 --- a/homeassistant/components/tuya/fan.py +++ b/homeassistant/components/tuya/fan.py @@ -9,6 +9,8 @@ from homeassistant.const import STATE_OFF from . import DATA_TUYA, TuyaDevice +PARALLEL_UPDATES = 0 + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Tuya fan platform.""" diff --git a/homeassistant/components/tuya/light.py b/homeassistant/components/tuya/light.py index 9ac72419612..6c05f4f2cc7 100644 --- a/homeassistant/components/tuya/light.py +++ b/homeassistant/components/tuya/light.py @@ -13,6 +13,8 @@ from homeassistant.util import color as colorutil from . import DATA_TUYA, TuyaDevice +PARALLEL_UPDATES = 0 + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Tuya light platform.""" diff --git a/homeassistant/components/tuya/manifest.json b/homeassistant/components/tuya/manifest.json index e249fb3f89f..cd6cb333020 100644 --- a/homeassistant/components/tuya/manifest.json +++ b/homeassistant/components/tuya/manifest.json @@ -3,6 +3,5 @@ "name": "Tuya", "documentation": "https://www.home-assistant.io/integrations/tuya", "requirements": ["tuyaha==0.0.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/tuya/scene.py b/homeassistant/components/tuya/scene.py index 0c9791b00ce..71d83417ca8 100644 --- a/homeassistant/components/tuya/scene.py +++ b/homeassistant/components/tuya/scene.py @@ -1,10 +1,14 @@ """Support for the Tuya scenes.""" +from typing import Any + from homeassistant.components.scene import DOMAIN, Scene from . import DATA_TUYA, TuyaDevice ENTITY_ID_FORMAT = DOMAIN + ".{}" +PARALLEL_UPDATES = 0 + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Tuya scenes.""" @@ -29,6 +33,6 @@ class TuyaScene(TuyaDevice, Scene): super().__init__(tuya) self.entity_id = ENTITY_ID_FORMAT.format(tuya.object_id()) - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self.tuya.activate() diff --git a/homeassistant/components/tuya/switch.py b/homeassistant/components/tuya/switch.py index 9c021766637..17cf5ae873a 100644 --- a/homeassistant/components/tuya/switch.py +++ b/homeassistant/components/tuya/switch.py @@ -3,6 +3,8 @@ from homeassistant.components.switch import ENTITY_ID_FORMAT, SwitchDevice from . import DATA_TUYA, TuyaDevice +PARALLEL_UPDATES = 0 + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Tuya Switch device.""" diff --git a/homeassistant/components/twentemilieu/.translations/bg.json b/homeassistant/components/twentemilieu/.translations/bg.json deleted file mode 100644 index df36ab070d7..00000000000 --- a/homeassistant/components/twentemilieu/.translations/bg.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d." - }, - "error": { - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435.", - "invalid_address": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d \u0432 \u0437\u043e\u043d\u0430 \u0437\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0432\u0430\u043d\u0435 \u043d\u0430 Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "\u0414\u043e\u043c\u0430\u0448\u043d\u043e \u043f\u0438\u0441\u043c\u043e/\u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u043e", - "house_number": "\u041d\u043e\u043c\u0435\u0440 \u043d\u0430 \u043a\u044a\u0449\u0430", - "post_code": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u0434" - }, - "description": "\u0421\u044a\u0437\u0434\u0430\u0439\u0442\u0435 Twente Milieu, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044f\u0449\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u044a\u0431\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u043f\u0430\u0434\u044a\u0446\u0438 \u043d\u0430 \u0432\u0430\u0448\u0438\u044f \u0430\u0434\u0440\u0435\u0441.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/ca.json b/homeassistant/components/twentemilieu/.translations/ca.json deleted file mode 100644 index 27ab8e8a8b2..00000000000 --- a/homeassistant/components/twentemilieu/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adre\u00e7a ja configurada." - }, - "error": { - "connection_error": "No s'ha pogut connectar.", - "invalid_address": "No s'ha trobat l'adre\u00e7a a l'\u00e0rea de servei de Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Lletra/addicional de casa", - "house_number": "N\u00famero de casa", - "post_code": "Codi postal" - }, - "description": "Configura Twente Milieu amb informaci\u00f3 de la recollida de residus a la teva adre\u00e7a.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/da.json b/homeassistant/components/twentemilieu/.translations/da.json deleted file mode 100644 index 1e3ca933e38..00000000000 --- a/homeassistant/components/twentemilieu/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adresse er allerede konfigureret." - }, - "error": { - "connection_error": "Forbindelse mislykkedes.", - "invalid_address": "Adresse ikke fundet i Twente Milieu serviceomr\u00e5de." - }, - "step": { - "user": { - "data": { - "house_letter": "Hus nummer/yderligere", - "house_number": "Husnummer", - "post_code": "Postnummer" - }, - "description": "Konfigurer Twente Milieu, der leverer oplysninger om indsamling af affald p\u00e5 din adresse.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/de.json b/homeassistant/components/twentemilieu/.translations/de.json deleted file mode 100644 index 586e36a5d31..00000000000 --- a/homeassistant/components/twentemilieu/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adresse bereits eingerichtet." - }, - "error": { - "connection_error": "Fehler beim Herstellen einer Verbindung.", - "invalid_address": "Adresse nicht im Einzugsgebiet von Twente Milieu gefunden." - }, - "step": { - "user": { - "data": { - "house_letter": "Hausbrief/zusatz", - "house_number": "Hausnummer", - "post_code": "Postleitzahl" - }, - "description": "Richte Twente Milieu mit Informationen zur Abfallsammlung unter Ihrer Adresse ein.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/en.json b/homeassistant/components/twentemilieu/.translations/en.json deleted file mode 100644 index ce969a4f464..00000000000 --- a/homeassistant/components/twentemilieu/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Address already set up." - }, - "error": { - "connection_error": "Failed to connect.", - "invalid_address": "Address not found in Twente Milieu service area." - }, - "step": { - "user": { - "data": { - "house_letter": "House letter/additional", - "house_number": "House number", - "post_code": "Postal code" - }, - "description": "Set up Twente Milieu providing waste collection information on your address.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/es-419.json b/homeassistant/components/twentemilieu/.translations/es-419.json deleted file mode 100644 index 02ac8ecf27a..00000000000 --- a/homeassistant/components/twentemilieu/.translations/es-419.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/es.json b/homeassistant/components/twentemilieu/.translations/es.json deleted file mode 100644 index 60a412684f7..00000000000 --- a/homeassistant/components/twentemilieu/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Direcci\u00f3n ya configurada." - }, - "error": { - "connection_error": "No se conect\u00f3.", - "invalid_address": "Direcci\u00f3n no encontrada en el \u00e1rea de servicio de Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Letra de la casa/adicional", - "house_number": "N\u00famero de casa", - "post_code": "C\u00f3digo postal" - }, - "description": "Configure Twente Milieu proporcionando informaci\u00f3n sobre la recolecci\u00f3n de residuos en su direcci\u00f3n.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/fr.json b/homeassistant/components/twentemilieu/.translations/fr.json deleted file mode 100644 index 0321a6b73ce..00000000000 --- a/homeassistant/components/twentemilieu/.translations/fr.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adresse d\u00e9j\u00e0 configur\u00e9e." - }, - "error": { - "connection_error": "\u00c9chec de connexion.", - "invalid_address": "Adresse introuvable dans la zone de service de Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Lettre de la maison / suppl\u00e9mentaire", - "house_number": "Num\u00e9ro de maison", - "post_code": "Code postal" - }, - "description": "Configurez Twente Milieu en fournissant des informations sur la collecte des d\u00e9chets sur votre adresse.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/it.json b/homeassistant/components/twentemilieu/.translations/it.json deleted file mode 100644 index 27850d207b0..00000000000 --- a/homeassistant/components/twentemilieu/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Indirizzo gi\u00e0 impostato." - }, - "error": { - "connection_error": "Impossibile connettersi.", - "invalid_address": "Indirizzo non trovato nell'area di servizio di Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Edificio, Scala, Interno, ecc. / Informazioni aggiuntive", - "house_number": "Numero civico", - "post_code": "Codice di Avviamento Postale" - }, - "description": "Imposta Twente Milieu fornendo le informazioni sulla raccolta dei rifiuti al tuo indirizzo.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/ko.json b/homeassistant/components/twentemilieu/.translations/ko.json deleted file mode 100644 index a78867d86a8..00000000000 --- a/homeassistant/components/twentemilieu/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "\uc8fc\uc18c\uac00 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "connection_error": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.", - "invalid_address": "Twente Milieu \uc11c\ube44\uc2a4 \uc9c0\uc5ed\uc5d0\uc11c \uc8fc\uc18c\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "house_letter": "\uc9d1 \uc8fc\uc18c/\ucd94\uac00\uc815\ubcf4", - "house_number": "\uc9d1 \ubc88\ud638", - "post_code": "\uc6b0\ud3b8\ubc88\ud638" - }, - "description": "\uc8fc\uc18c\uc5d0 \uc4f0\ub808\uae30 \uc218\uac70 \uc815\ubcf4\ub97c \ub123\uc5b4 Twente Milieu \ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/lb.json b/homeassistant/components/twentemilieu/.translations/lb.json deleted file mode 100644 index b6f10842b4d..00000000000 --- a/homeassistant/components/twentemilieu/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adresse ass scho ageriicht." - }, - "error": { - "connection_error": "Feeler beim verbannen.", - "invalid_address": "Adresse net am Twente Milieu Service Ber\u00e4ich fonnt" - }, - "step": { - "user": { - "data": { - "house_letter": "Haus Buschtaf/zous\u00e4tzlech", - "house_number": "Haus Nummer", - "post_code": "Postleitzuel" - }, - "description": "Offallsammlung Informatiounen vun Twente Milieu zu \u00e4erer Adresse ariichten.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/nl.json b/homeassistant/components/twentemilieu/.translations/nl.json deleted file mode 100644 index a420133f464..00000000000 --- a/homeassistant/components/twentemilieu/.translations/nl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adres al ingesteld." - }, - "error": { - "connection_error": "Kon niet verbinden.", - "invalid_address": "Adres niet gevonden in servicegebied Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Huisnummer / toevoeging", - "house_number": "Huisnummer", - "post_code": "Postcode" - }, - "description": "Stel Twente Milieu in voor het inzamelen van afval op uw adres.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/nn.json b/homeassistant/components/twentemilieu/.translations/nn.json deleted file mode 100644 index 02ac8ecf27a..00000000000 --- a/homeassistant/components/twentemilieu/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/no.json b/homeassistant/components/twentemilieu/.translations/no.json deleted file mode 100644 index 1d4395bb2c8..00000000000 --- a/homeassistant/components/twentemilieu/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adressen er allerede konfigurert." - }, - "error": { - "connection_error": "Tilkobling mislyktes.", - "invalid_address": "Adresse ble ikke funnet i Twente Milieu tjenesteomr\u00e5de." - }, - "step": { - "user": { - "data": { - "house_letter": "Hus brev/ekstra", - "house_number": "Husnummer", - "post_code": "Postnummer" - }, - "description": "Sett opp Twente Milieu som gir informasjon om innsamling av avfall p\u00e5 adressen din.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/pl.json b/homeassistant/components/twentemilieu/.translations/pl.json deleted file mode 100644 index 130672906ef..00000000000 --- a/homeassistant/components/twentemilieu/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adres jest ju\u017c skonfigurowany." - }, - "error": { - "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia.", - "invalid_address": "Nie znaleziono adresu w obszarze us\u0142ugi Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "List domowy/dodatkowy", - "house_number": "Numer domu", - "post_code": "Kod pocztowy" - }, - "description": "Skonfiguruj Twente Milieu, dostarczaj\u0105c informacji o zbieraniu odpad\u00f3w pod swoim adresem.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/pt-BR.json b/homeassistant/components/twentemilieu/.translations/pt-BR.json deleted file mode 100644 index 73735dda1d9..00000000000 --- a/homeassistant/components/twentemilieu/.translations/pt-BR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Endere\u00e7o j\u00e1 configurado." - }, - "error": { - "connection_error": "Falha ao conectar.", - "invalid_address": "Endere\u00e7o n\u00e3o encontrado na \u00e1rea de servi\u00e7o de Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Carta da casa/adicional", - "house_number": "N\u00famero da casa", - "post_code": "C\u00f3digo postal" - }, - "description": "Configure o Twente Milieu, fornecendo informa\u00e7\u00f5es de coleta de lixo em seu endere\u00e7o.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/ru.json b/homeassistant/components/twentemilieu/.translations/ru.json deleted file mode 100644 index 5d964604a77..00000000000 --- a/homeassistant/components/twentemilieu/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "\u0410\u0434\u0440\u0435\u0441 \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d." - }, - "error": { - "connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", - "invalid_address": "\u0410\u0434\u0440\u0435\u0441 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u0437\u043e\u043d\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "\u041b\u0438\u0442\u0435\u0440 \u0434\u043e\u043c\u0430 / \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435", - "house_number": "\u041d\u043e\u043c\u0435\u0440 \u0434\u043e\u043c\u0430", - "post_code": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 Twente Milieu \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0432\u044b\u0432\u043e\u0437\u0435 \u043c\u0443\u0441\u043e\u0440\u0430 \u043f\u043e \u0412\u0430\u0448\u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/sl.json b/homeassistant/components/twentemilieu/.translations/sl.json deleted file mode 100644 index 7b74b96d057..00000000000 --- a/homeassistant/components/twentemilieu/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Naslov je \u017ee nastavljen." - }, - "error": { - "connection_error": "Povezava ni uspela.", - "invalid_address": "V storitvenem obmo\u010dju Twente Milieu ni mogo\u010de najti naslova." - }, - "step": { - "user": { - "data": { - "house_letter": "Hi\u0161na \u0161tevilka -\u010drka/dodatno", - "house_number": "Hi\u0161na \u0161tevilka", - "post_code": "Po\u0161tna \u0161tevilka" - }, - "description": "Nastavite Twente milieu, ki zagotavlja informacije o zbiranju odpadkov na va\u0161em naslovu.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/sv.json b/homeassistant/components/twentemilieu/.translations/sv.json deleted file mode 100644 index ba2d8743681..00000000000 --- a/homeassistant/components/twentemilieu/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "Adressen har redan st\u00e4llts in." - }, - "error": { - "connection_error": "Det gick inte att ansluta.", - "invalid_address": "Adress hittades inte i serviceomr\u00e5det Twente Milieu." - }, - "step": { - "user": { - "data": { - "house_letter": "Husbrev/till\u00e4gg", - "house_number": "Husnummer", - "post_code": "Postnummer" - }, - "description": "St\u00e4ll in Twente Milieu som ger information om avfallshantering p\u00e5 din adress.", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/zh-Hant.json b/homeassistant/components/twentemilieu/.translations/zh-Hant.json deleted file mode 100644 index 0e0083ec5c1..00000000000 --- a/homeassistant/components/twentemilieu/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "address_exists": "\u5730\u5740\u5df2\u8a2d\u5b9a\u3002" - }, - "error": { - "connection_error": "\u9023\u7dda\u5931\u6557\u3002", - "invalid_address": "Twente Milieu \u670d\u52d9\u5340\u57df\u5167\u627e\u4e0d\u5230\u6b64\u5730\u5740\u3002" - }, - "step": { - "user": { - "data": { - "house_letter": "\u9580\u724c\u5b57\u6bcd/\u9644\u52a0\u8cc7\u8a0a", - "house_number": "\u9580\u724c\u865f\u78bc", - "post_code": "\u90f5\u905e\u5340\u865f" - }, - "description": "\u8a2d\u5b9a Twente Milieu \u4ee5\u53d6\u5f97\u8a72\u5730\u5740\u5ee2\u68c4\u7269\u56de\u6536\u8cc7\u8a0a\u3002", - "title": "Twente Milieu" - } - }, - "title": "Twente Milieu" - } -} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/strings.json b/homeassistant/components/twentemilieu/strings.json index 811ecdbfa6e..75005e7cb37 100644 --- a/homeassistant/components/twentemilieu/strings.json +++ b/homeassistant/components/twentemilieu/strings.json @@ -1,23 +1,20 @@ { - "config": { + "config": { + "step": { + "user": { "title": "Twente Milieu", - "step": { - "user": { - "title": "Twente Milieu", - "description": "Set up Twente Milieu providing waste collection information on your address.", - "data": { - "post_code": "Postal code", - "house_number": "House number", - "house_letter": "House letter/additional" - } - } - }, - "error": { - "connection_error": "Failed to connect.", - "invalid_address": "Address not found in Twente Milieu service area." - }, - "abort": { - "address_exists": "Address already set up." + "description": "Set up Twente Milieu providing waste collection information on your address.", + "data": { + "post_code": "Postal code", + "house_number": "House number", + "house_letter": "House letter/additional" } - } -} \ No newline at end of file + } + }, + "error": { + "connection_error": "Failed to connect.", + "invalid_address": "Address not found in Twente Milieu service area." + }, + "abort": { "address_exists": "Address already set up." } + } +} diff --git a/homeassistant/components/twentemilieu/translations/bg.json b/homeassistant/components/twentemilieu/translations/bg.json new file mode 100644 index 00000000000..bff7e40f8ce --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/bg.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u0432\u0435\u0447\u0435 \u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d." + }, + "error": { + "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435.", + "invalid_address": "\u0410\u0434\u0440\u0435\u0441\u044a\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d \u0432 \u0437\u043e\u043d\u0430 \u0437\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0432\u0430\u043d\u0435 \u043d\u0430 Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "\u0414\u043e\u043c\u0430\u0448\u043d\u043e \u043f\u0438\u0441\u043c\u043e/\u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u043e", + "house_number": "\u041d\u043e\u043c\u0435\u0440 \u043d\u0430 \u043a\u044a\u0449\u0430", + "post_code": "\u041f\u043e\u0449\u0435\u043d\u0441\u043a\u0438 \u043a\u043e\u0434" + }, + "description": "\u0421\u044a\u0437\u0434\u0430\u0439\u0442\u0435 Twente Milieu, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044f\u0449\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u044a\u0431\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u043f\u0430\u0434\u044a\u0446\u0438 \u043d\u0430 \u0432\u0430\u0448\u0438\u044f \u0430\u0434\u0440\u0435\u0441.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/ca.json b/homeassistant/components/twentemilieu/translations/ca.json new file mode 100644 index 00000000000..4c5e1ffeee7 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adre\u00e7a ja configurada." + }, + "error": { + "connection_error": "No s'ha pogut connectar.", + "invalid_address": "No s'ha trobat l'adre\u00e7a a l'\u00e0rea de servei de Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Lletra/addicional de casa", + "house_number": "N\u00famero de casa", + "post_code": "Codi postal" + }, + "description": "Configura Twente Milieu amb informaci\u00f3 de la recollida de residus a la teva adre\u00e7a.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/da.json b/homeassistant/components/twentemilieu/translations/da.json new file mode 100644 index 00000000000..23dfbb372ed --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adresse er allerede konfigureret." + }, + "error": { + "connection_error": "Forbindelse mislykkedes.", + "invalid_address": "Adresse ikke fundet i Twente Milieu serviceomr\u00e5de." + }, + "step": { + "user": { + "data": { + "house_letter": "Hus nummer/yderligere", + "house_number": "Husnummer", + "post_code": "Postnummer" + }, + "description": "Konfigurer Twente Milieu, der leverer oplysninger om indsamling af affald p\u00e5 din adresse.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/de.json b/homeassistant/components/twentemilieu/translations/de.json new file mode 100644 index 00000000000..8a1bf403940 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adresse bereits eingerichtet." + }, + "error": { + "connection_error": "Fehler beim Herstellen einer Verbindung.", + "invalid_address": "Adresse nicht im Einzugsgebiet von Twente Milieu gefunden." + }, + "step": { + "user": { + "data": { + "house_letter": "Hausbrief/zusatz", + "house_number": "Hausnummer", + "post_code": "Postleitzahl" + }, + "description": "Richte Twente Milieu mit Informationen zur Abfallsammlung unter Ihrer Adresse ein.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/en.json b/homeassistant/components/twentemilieu/translations/en.json new file mode 100644 index 00000000000..bc48832db9d --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Address already set up." + }, + "error": { + "connection_error": "Failed to connect.", + "invalid_address": "Address not found in Twente Milieu service area." + }, + "step": { + "user": { + "data": { + "house_letter": "House letter/additional", + "house_number": "House number", + "post_code": "Postal code" + }, + "description": "Set up Twente Milieu providing waste collection information on your address.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/es-419.json b/homeassistant/components/twentemilieu/translations/es-419.json new file mode 100644 index 00000000000..ed333bb9b51 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/es-419.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/es.json b/homeassistant/components/twentemilieu/translations/es.json new file mode 100644 index 00000000000..d336c5ec105 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Direcci\u00f3n ya configurada." + }, + "error": { + "connection_error": "No se conect\u00f3.", + "invalid_address": "Direcci\u00f3n no encontrada en el \u00e1rea de servicio de Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Letra de la casa/adicional", + "house_number": "N\u00famero de casa", + "post_code": "C\u00f3digo postal" + }, + "description": "Configure Twente Milieu proporcionando informaci\u00f3n sobre la recolecci\u00f3n de residuos en su direcci\u00f3n.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/fr.json b/homeassistant/components/twentemilieu/translations/fr.json new file mode 100644 index 00000000000..bbdd8f92d7b --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/fr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adresse d\u00e9j\u00e0 configur\u00e9e." + }, + "error": { + "connection_error": "\u00c9chec de connexion.", + "invalid_address": "Adresse introuvable dans la zone de service de Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Lettre de la maison / suppl\u00e9mentaire", + "house_number": "Num\u00e9ro de maison", + "post_code": "Code postal" + }, + "description": "Configurez Twente Milieu en fournissant des informations sur la collecte des d\u00e9chets sur votre adresse.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/hu.json b/homeassistant/components/twentemilieu/translations/hu.json similarity index 100% rename from homeassistant/components/twentemilieu/.translations/hu.json rename to homeassistant/components/twentemilieu/translations/hu.json diff --git a/homeassistant/components/twentemilieu/translations/it.json b/homeassistant/components/twentemilieu/translations/it.json new file mode 100644 index 00000000000..a429a565beb --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Indirizzo gi\u00e0 impostato." + }, + "error": { + "connection_error": "Impossibile connettersi.", + "invalid_address": "Indirizzo non trovato nell'area di servizio di Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Edificio, Scala, Interno, ecc. / Informazioni aggiuntive", + "house_number": "Numero civico", + "post_code": "Codice di Avviamento Postale" + }, + "description": "Imposta Twente Milieu fornendo le informazioni sulla raccolta dei rifiuti al tuo indirizzo.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/ko.json b/homeassistant/components/twentemilieu/translations/ko.json new file mode 100644 index 00000000000..1f3359ca184 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "\uc8fc\uc18c\uac00 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "connection_error": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.", + "invalid_address": "Twente Milieu \uc11c\ube44\uc2a4 \uc9c0\uc5ed\uc5d0\uc11c \uc8fc\uc18c\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "house_letter": "\uc9d1 \uc8fc\uc18c/\ucd94\uac00\uc815\ubcf4", + "house_number": "\uc9d1 \ubc88\ud638", + "post_code": "\uc6b0\ud3b8\ubc88\ud638" + }, + "description": "\uc8fc\uc18c\uc5d0 \uc4f0\ub808\uae30 \uc218\uac70 \uc815\ubcf4\ub97c \ub123\uc5b4 Twente Milieu \ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/lb.json b/homeassistant/components/twentemilieu/translations/lb.json new file mode 100644 index 00000000000..8af5df35f1d --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adresse ass scho ageriicht." + }, + "error": { + "connection_error": "Feeler beim verbannen.", + "invalid_address": "Adresse net am Twente Milieu Service Ber\u00e4ich fonnt" + }, + "step": { + "user": { + "data": { + "house_letter": "Haus Buschtaf/zous\u00e4tzlech", + "house_number": "Haus Nummer", + "post_code": "Postleitzuel" + }, + "description": "Offallsammlung Informatiounen vun Twente Milieu zu \u00e4erer Adresse ariichten.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/nl.json b/homeassistant/components/twentemilieu/translations/nl.json new file mode 100644 index 00000000000..32177d590f4 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/nl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adres al ingesteld." + }, + "error": { + "connection_error": "Kon niet verbinden.", + "invalid_address": "Adres niet gevonden in servicegebied Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Huisnummer / toevoeging", + "house_number": "Huisnummer", + "post_code": "Postcode" + }, + "description": "Stel Twente Milieu in voor het inzamelen van afval op uw adres.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/nn.json b/homeassistant/components/twentemilieu/translations/nn.json new file mode 100644 index 00000000000..ed333bb9b51 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/no.json b/homeassistant/components/twentemilieu/translations/no.json new file mode 100644 index 00000000000..84fe87eda04 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adressen er allerede konfigurert." + }, + "error": { + "connection_error": "Tilkobling mislyktes.", + "invalid_address": "Adresse ble ikke funnet i Twente Milieu tjenesteomr\u00e5de." + }, + "step": { + "user": { + "data": { + "house_letter": "Hus brev/ekstra", + "house_number": "Husnummer", + "post_code": "Postnummer" + }, + "description": "Sett opp Twente Milieu som gir informasjon om innsamling av avfall p\u00e5 adressen din.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/pl.json b/homeassistant/components/twentemilieu/translations/pl.json new file mode 100644 index 00000000000..bfa38f9ef8a --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adres jest ju\u017c skonfigurowany." + }, + "error": { + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia.", + "invalid_address": "Nie znaleziono adresu w obszarze us\u0142ugi Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "List domowy/dodatkowy", + "house_number": "Numer domu", + "post_code": "Kod pocztowy" + }, + "description": "Skonfiguruj Twente Milieu, dostarczaj\u0105c informacji o zbieraniu odpad\u00f3w pod swoim adresem.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/pt-BR.json b/homeassistant/components/twentemilieu/translations/pt-BR.json new file mode 100644 index 00000000000..127f0241a3f --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/pt-BR.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Endere\u00e7o j\u00e1 configurado." + }, + "error": { + "connection_error": "Falha ao conectar.", + "invalid_address": "Endere\u00e7o n\u00e3o encontrado na \u00e1rea de servi\u00e7o de Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Carta da casa/adicional", + "house_number": "N\u00famero da casa", + "post_code": "C\u00f3digo postal" + }, + "description": "Configure o Twente Milieu, fornecendo informa\u00e7\u00f5es de coleta de lixo em seu endere\u00e7o.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/ru.json b/homeassistant/components/twentemilieu/translations/ru.json new file mode 100644 index 00000000000..4f470da8385 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "\u0410\u0434\u0440\u0435\u0441 \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d." + }, + "error": { + "connection_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.", + "invalid_address": "\u0410\u0434\u0440\u0435\u0441 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u0437\u043e\u043d\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "\u041b\u0438\u0442\u0435\u0440 \u0434\u043e\u043c\u0430 / \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435", + "house_number": "\u041d\u043e\u043c\u0435\u0440 \u0434\u043e\u043c\u0430", + "post_code": "\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 Twente Milieu \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0432\u044b\u0432\u043e\u0437\u0435 \u043c\u0443\u0441\u043e\u0440\u0430 \u043f\u043e \u0412\u0430\u0448\u0435\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/sl.json b/homeassistant/components/twentemilieu/translations/sl.json new file mode 100644 index 00000000000..00c8a01e3b9 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Naslov je \u017ee nastavljen." + }, + "error": { + "connection_error": "Povezava ni uspela.", + "invalid_address": "V storitvenem obmo\u010dju Twente Milieu ni mogo\u010de najti naslova." + }, + "step": { + "user": { + "data": { + "house_letter": "Hi\u0161na \u0161tevilka -\u010drka/dodatno", + "house_number": "Hi\u0161na \u0161tevilka", + "post_code": "Po\u0161tna \u0161tevilka" + }, + "description": "Nastavite Twente milieu, ki zagotavlja informacije o zbiranju odpadkov na va\u0161em naslovu.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/translations/sv.json b/homeassistant/components/twentemilieu/translations/sv.json new file mode 100644 index 00000000000..f3a60a56c99 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "Adressen har redan st\u00e4llts in." + }, + "error": { + "connection_error": "Det gick inte att ansluta.", + "invalid_address": "Adress hittades inte i serviceomr\u00e5det Twente Milieu." + }, + "step": { + "user": { + "data": { + "house_letter": "Husbrev/till\u00e4gg", + "house_number": "Husnummer", + "post_code": "Postnummer" + }, + "description": "St\u00e4ll in Twente Milieu som ger information om avfallshantering p\u00e5 din adress.", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twentemilieu/.translations/tr.json b/homeassistant/components/twentemilieu/translations/tr.json similarity index 100% rename from homeassistant/components/twentemilieu/.translations/tr.json rename to homeassistant/components/twentemilieu/translations/tr.json diff --git a/homeassistant/components/twentemilieu/.translations/zh-Hans.json b/homeassistant/components/twentemilieu/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/twentemilieu/.translations/zh-Hans.json rename to homeassistant/components/twentemilieu/translations/zh-Hans.json diff --git a/homeassistant/components/twentemilieu/translations/zh-Hant.json b/homeassistant/components/twentemilieu/translations/zh-Hant.json new file mode 100644 index 00000000000..7ee372b14d2 --- /dev/null +++ b/homeassistant/components/twentemilieu/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "address_exists": "\u5730\u5740\u5df2\u8a2d\u5b9a\u3002" + }, + "error": { + "connection_error": "\u9023\u7dda\u5931\u6557\u3002", + "invalid_address": "Twente Milieu \u670d\u52d9\u5340\u57df\u5167\u627e\u4e0d\u5230\u6b64\u5730\u5740\u3002" + }, + "step": { + "user": { + "data": { + "house_letter": "\u9580\u724c\u5b57\u6bcd/\u9644\u52a0\u8cc7\u8a0a", + "house_number": "\u9580\u724c\u865f\u78bc", + "post_code": "\u90f5\u905e\u5340\u865f" + }, + "description": "\u8a2d\u5b9a Twente Milieu \u4ee5\u53d6\u5f97\u8a72\u5730\u5740\u5ee2\u68c4\u7269\u56de\u6536\u8cc7\u8a0a\u3002", + "title": "Twente Milieu" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/bg.json b/homeassistant/components/twilio/.translations/bg.json deleted file mode 100644 index 1329a8418ae..00000000000 --- a/homeassistant/components/twilio/.translations/bg.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Twilio.", - "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." - }, - "create_entry": { - "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 [Webhooks \u0441 Twilio]({twilio_url}). \n\n\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/x-www-form-urlencoded\n\n\u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u0442\u043e\u0432\u0430 \u043a\u0430\u043a \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438 \u0434\u0430\u043d\u043d\u0438." - }, - "step": { - "user": { - "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Twilio?", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/ca.json b/homeassistant/components/twilio/.translations/ca.json deleted file mode 100644 index bad78e51a36..00000000000 --- a/homeassistant/components/twilio/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Twilio.", - "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." - }, - "create_entry": { - "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar [Webhooks amb Twilio]({twilio_url}).\n\nCompleta la seg\u00fcent informaci\u00f3 : \n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n- Tipus de contingut: application/x-www-form-urlencoded\n\nConsulta la [documentaci\u00f3]({docs_url}) sobre com configurar les automatitzacions per gestionar dades entrants." - }, - "step": { - "user": { - "description": "Est\u00e0s segur que vols configurar Twilio?", - "title": "Configuraci\u00f3 del Webhook de Twilio" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/cs.json b/homeassistant/components/twilio/.translations/cs.json deleted file mode 100644 index d484ede413e..00000000000 --- a/homeassistant/components/twilio/.translations/cs.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy Twilio.", - "one_instance_allowed": "Povolena je pouze jedna instance." - }, - "create_entry": { - "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, mus\u00edte nastavit [Webhooks s Twilio]({twilio_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}' \n - Metoda: POST \n - Typ obsahu: application/x-www-form-urlencoded \n\n Viz [dokumentace]({docs_url}), jak konfigurovat automatizace pro zpracov\u00e1n\u00ed p\u0159\u00edchoz\u00edch dat." - }, - "step": { - "user": { - "description": "Opravdu chcete nastavit slu\u017ebu Twilio?", - "title": "Nastaven\u00ed Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/da.json b/homeassistant/components/twilio/.translations/da.json deleted file mode 100644 index d5f40d56446..00000000000 --- a/homeassistant/components/twilio/.translations/da.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Twilio-meddelelser.", - "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning." - }, - "create_entry": { - "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere [Webhooks med Twilio]({twilio_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/x-www-form-urlencoded\n\nSe [dokumentationen]({docs_url}) om hvordan du konfigurerer automatiseringer til at h\u00e5ndtere indg\u00e5ende data." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du vil konfigurere Twilio?", - "title": "Konfigurer Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/de.json b/homeassistant/components/twilio/.translations/de.json deleted file mode 100644 index 46e53e182a1..00000000000 --- a/homeassistant/components/twilio/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Twilio-Nachrichten empfangen zu k\u00f6nnen.", - "one_instance_allowed": "Es ist nur eine einzige Instanz erforderlich." - }, - "create_entry": { - "default": "Um Ereignisse an den Home Assistant zu senden, musst du [Webhooks mit Twilio]({twilio_url}) einrichten. \n\n F\u00fclle die folgenden Informationen aus: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhaltstyp: application / x-www-form-urlencoded \n\nLies in der [Dokumentation]({docs_url}) wie du Automationen f\u00fcr die Verarbeitung eingehender Daten konfigurierst." - }, - "step": { - "user": { - "description": "M\u00f6chtest du Twilio wirklich einrichten?", - "title": "Twilio-Webhook einrichten" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/en.json b/homeassistant/components/twilio/.translations/en.json deleted file mode 100644 index 3ee0421469c..00000000000 --- a/homeassistant/components/twilio/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive Twilio messages.", - "one_instance_allowed": "Only a single instance is necessary." - }, - "create_entry": { - "default": "To send events to Home Assistant, you will need to setup [Webhooks with Twilio]({twilio_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data." - }, - "step": { - "user": { - "description": "Are you sure you want to set up Twilio?", - "title": "Set up the Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/es-419.json b/homeassistant/components/twilio/.translations/es-419.json deleted file mode 100644 index a5fd83abef4..00000000000 --- a/homeassistant/components/twilio/.translations/es-419.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir los mensajes de Twilio.", - "one_instance_allowed": "Solo una instancia es necesaria." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar [Webhooks with Twilio] ( {twilio_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: application / x-www-form-urlencoded \n\n Consulte [la documentaci\u00f3n] ( {docs_url} ) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar Twilio?", - "title": "Configurar el Webhook Twilio" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/es.json b/homeassistant/components/twilio/.translations/es.json deleted file mode 100644 index 8112c2a47c3..00000000000 --- a/homeassistant/components/twilio/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Twilio.", - "one_instance_allowed": "S\u00f3lo se necesita una sola instancia." - }, - "create_entry": { - "default": "Para enviar eventos a Home Assistant debes configurar los [Webhooks en Twilio]({twilio_url}). \n\n Completa la siguiente informaci\u00f3n: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n - Tipo de contenido: application/x-www-form-urlencoded \n\nConsulta [la documentaci\u00f3n]({docs_url}) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." - }, - "step": { - "user": { - "description": "\u00bfEst\u00e1s seguro de que quieres configurar Twilio?", - "title": "Configurar el Webhook de Twilio" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/fr.json b/homeassistant/components/twilio/.translations/fr.json deleted file mode 100644 index 09ca0f63cfd..00000000000 --- a/homeassistant/components/twilio/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages Twilio.", - "one_instance_allowed": "Une seule instance est n\u00e9cessaire." - }, - "create_entry": { - "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer [Webhooks avec Twilio] ( {twilio_url} ). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / x-www-form-urlencoded \n\n Voir [la documentation] ( {docs_url} ) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." - }, - "step": { - "user": { - "description": "\u00cates-vous s\u00fbr de vouloir configurer Twilio?", - "title": "Configurer le Webhook Twilio" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/hu.json b/homeassistant/components/twilio/.translations/hu.json deleted file mode 100644 index ae96d08976d..00000000000 --- a/homeassistant/components/twilio/.translations/hu.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A Home Assistant rendszerednek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l a Twilio \u00fczenetek fogad\u00e1s\u00e1hoz.", - "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "step": { - "user": { - "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Twilio-t?", - "title": "A Twilio Webhook be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/it.json b/homeassistant/components/twilio/.translations/it.json deleted file mode 100644 index 4f8926c23e5..00000000000 --- a/homeassistant/components/twilio/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Twilio.", - "one_instance_allowed": "\u00c8 necessaria una sola istanza." - }, - "create_entry": { - "default": "Per inviare eventi a Home Assistant, dovrai configurare [Webhooks con Twilio]({twilio_url})\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n - Content Type: application/x-www-form-urlencoded\n\n Vedi [la documentazione]({docs_url}) su come configurare le automazioni per gestire i dati in arrivo." - }, - "step": { - "user": { - "description": "Sei sicuro di voler configurare Twilio?", - "title": "Configura il webhook di Twilio" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/ko.json b/homeassistant/components/twilio/.translations/ko.json deleted file mode 100644 index b8e88820590..00000000000 --- a/homeassistant/components/twilio/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Twilio \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.", - "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." - }, - "create_entry": { - "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 [Twilio Webhook]({twilio_url}) \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n - Content Type: application/x-www-form-urlencoded\n \nHome Assistant \ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc790\ub3d9\ud654\ub97c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." - }, - "step": { - "user": { - "description": "Twilio \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Twilio Webhook \uc124\uc815" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/lb.json b/homeassistant/components/twilio/.translations/lb.json deleted file mode 100644 index 96b884b0c8e..00000000000 --- a/homeassistant/components/twilio/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Twilio Noriichten z'empf\u00e4nken.", - "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 Twilio]({twilio_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." - }, - "step": { - "user": { - "description": "S\u00e9cher fir Twilio anzeriichten?", - "title": "Twilio Webhook ariichten" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/nl.json b/homeassistant/components/twilio/.translations/nl.json deleted file mode 100644 index 842307c666b..00000000000 --- a/homeassistant/components/twilio/.translations/nl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Twillo-berichten te ontvangen.", - "one_instance_allowed": "Slechts \u00e9\u00e9n exemplaar is nodig." - }, - "create_entry": { - "default": "Om evenementen naar de Home Assistant te verzenden, moet u [Webhooks with Twilio] ( {twilio_url} ) instellen. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhoudstype: application / x-www-form-urlencoded \n\n Zie [de documentatie] ( {docs_url} ) voor informatie over het configureren van automatiseringen om binnenkomende gegevens te verwerken." - }, - "step": { - "user": { - "description": "Weet u zeker dat u Twilio wilt instellen?", - "title": "Stel de Twilio Webhook in" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/nn.json b/homeassistant/components/twilio/.translations/nn.json deleted file mode 100644 index 86e5d9051b3..00000000000 --- a/homeassistant/components/twilio/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/no.json b/homeassistant/components/twilio/.translations/no.json deleted file mode 100644 index c3d6ff16e2d..00000000000 --- a/homeassistant/components/twilio/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant forekomst m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 motta Twilio-meldinger.", - "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." - }, - "create_entry": { - "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp [Webhooks with Twilio]({twilio_url}). \n\nFyll ut f\u00f8lgende informasjon: \n\n- URL: `{webhook_url}` \n- Metode: POST\n- Innholdstype: application/x-www-form-urlencoded \n\n Se [dokumentasjonen]({docs_url}) om hvordan du konfigurerer automatiseringer for \u00e5 h\u00e5ndtere innkommende data." - }, - "step": { - "user": { - "description": "Er du sikker p\u00e5 at du \u00f8nsker \u00e5 sette opp Twilio?", - "title": "Sett opp Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/pl.json b/homeassistant/components/twilio/.translations/pl.json deleted file mode 100644 index c61d22db880..00000000000 --- a/homeassistant/components/twilio/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty Twilio.", - "one_instance_allowed": "Wymagana jest tylko jedna instancja." - }, - "create_entry": { - "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 [Twilio Webhook]({twilio_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n - Typ zawarto\u015bci: application/x-www-form-urlencoded \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}) na temat konfiguracji automatyzacji, by obs\u0142u\u017cy\u0107 przychodz\u0105ce dane." - }, - "step": { - "user": { - "description": "Na pewno chcesz skonfigurowa\u0107 Twilio?", - "title": "Konfiguracja Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/pt-BR.json b/homeassistant/components/twilio/.translations/pt-BR.json deleted file mode 100644 index 28d6488f2ed..00000000000 --- a/homeassistant/components/twilio/.translations/pt-BR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens do Twilio.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar [Webhooks com Twilio] ( {twilio_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / x-www-form-urlencoded \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Twilio?", - "title": "Configurar o Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/pt.json b/homeassistant/components/twilio/.translations/pt.json deleted file mode 100644 index 30495e5854f..00000000000 --- a/homeassistant/components/twilio/.translations/pt.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens Twilio.", - "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." - }, - "create_entry": { - "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar [Webhooks with Twilio] ({twilio_url}). \n\nPreencha as seguintes informa\u00e7\u00f5es: \n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST \n- Tipo de Conte\u00fado: application/x-www-form-urlencoded \n\nVeja [a documenta\u00e7\u00e3o] ({docs_url}) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." - }, - "step": { - "user": { - "description": "Tem certeza de que deseja configurar o Twilio?", - "title": "Configurar o Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/ru.json b/homeassistant/components/twilio/.translations/ru.json deleted file mode 100644 index ba8ed6179d4..00000000000 --- a/homeassistant/components/twilio/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Twilio.", - "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "create_entry": { - "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f [Twilio]({twilio_url}).\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445." - }, - "step": { - "user": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Twilio?", - "title": "Twilio" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/sl.json b/homeassistant/components/twilio/.translations/sl.json deleted file mode 100644 index 86d2c44f11c..00000000000 --- a/homeassistant/components/twilio/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u010ce \u017eelite prejemati sporo\u010dila Twilio, mora biti Home Assistant dostopen prek interneta.", - "one_instance_allowed": "Potrebna je samo ena instanca." - }, - "create_entry": { - "default": "Za po\u0161iljanje dogodkov Home Assistant-u, boste morali nastaviti [Webhooks z Twilio]({twilio_url}).\n\nIzpolnite naslednje informacije:\n\n- URL: `{webhook_url}`\n- Metoda: POST\n- Vrsta vsebine: application/x-www-form-urlencoded\n\nGlej [dokumentacijo]({docs_url}) o tem, kako nastavite avtomatizacijo za obravnavo dohodnih podatkov." - }, - "step": { - "user": { - "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Twilio?", - "title": "Nastavite Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/sv.json b/homeassistant/components/twilio/.translations/sv.json deleted file mode 100644 index 673997d5aa9..00000000000 --- a/homeassistant/components/twilio/.translations/sv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot Twilio meddelanden.", - "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." - }, - "create_entry": { - "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera [Webhooks med Twilio]({twilio_url}).\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n Se [dokumentationen]({docs_url}) om hur du konfigurerar automatiseringar f\u00f6r att hantera inkommande data." - }, - "step": { - "user": { - "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Twilio?", - "title": "Konfigurera Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/zh-Hans.json b/homeassistant/components/twilio/.translations/zh-Hans.json deleted file mode 100644 index 6fda9f0143c..00000000000 --- a/homeassistant/components/twilio/.translations/zh-Hans.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u63a5\u5165\u4e92\u8054\u7f51\u4ee5\u63a5\u6536 Twilio \u6d88\u606f\u3002", - "one_instance_allowed": "\u4ec5\u9700\u4e00\u4e2a\u5b9e\u4f8b" - }, - "create_entry": { - "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e [Twilio \u7684 Webhook]({twilio_url})\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u6709\u5173\u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u5316\u4ee5\u5904\u7406\u4f20\u5165\u7684\u6570\u636e\uff0c\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u3002" - }, - "step": { - "user": { - "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Twilio \u5417\uff1f", - "title": "\u8bbe\u7f6e Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/.translations/zh-Hant.json b/homeassistant/components/twilio/.translations/zh-Hant.json deleted file mode 100644 index 858970539cd..00000000000 --- a/homeassistant/components/twilio/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Twilio \u8a0a\u606f\u3002", - "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" - }, - "create_entry": { - "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8a2d\u5b9a [Webhooks with Twilio]({twilio_url})\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u95dc\u65bc\u5982\u4f55\u50b3\u5165\u8cc7\u6599\u81ea\u52d5\u5316\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1[\u6587\u4ef6]({docs_url})\u4ee5\u9032\u884c\u4e86\u89e3\u3002" - }, - "step": { - "user": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Twilio\uff1f", - "title": "\u8a2d\u5b9a Twilio Webhook" - } - }, - "title": "Twilio" - } -} \ No newline at end of file diff --git a/homeassistant/components/twilio/strings.json b/homeassistant/components/twilio/strings.json index ca75fff0737..96e0249df9a 100644 --- a/homeassistant/components/twilio/strings.json +++ b/homeassistant/components/twilio/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Twilio", "step": { "user": { "title": "Set up the Twilio Webhook", diff --git a/homeassistant/components/twilio/translations/bg.json b/homeassistant/components/twilio/translations/bg.json new file mode 100644 index 00000000000..0bf90ce427b --- /dev/null +++ b/homeassistant/components/twilio/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0437\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 Twilio.", + "one_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 [Webhooks \u0441 Twilio]({twilio_url}). \n\n\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: `{webhook_url}` \n - Method: POST \n - Content Type: application/x-www-form-urlencoded\n\n\u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u0442\u043e\u0432\u0430 \u043a\u0430\u043a \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438 \u0434\u0430\u043d\u043d\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Twilio?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/ca.json b/homeassistant/components/twilio/translations/ca.json new file mode 100644 index 00000000000..591124fda28 --- /dev/null +++ b/homeassistant/components/twilio/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per rebre missatges de Twilio.", + "one_instance_allowed": "Nom\u00e9s cal una sola inst\u00e0ncia." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, haur\u00e0s de configurar [Webhooks amb Twilio]({twilio_url}).\n\nCompleta la seg\u00fcent informaci\u00f3 : \n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n- Tipus de contingut: application/x-www-form-urlencoded\n\nConsulta la [documentaci\u00f3]({docs_url}) sobre com configurar les automatitzacions per gestionar dades entrants." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar Twilio?", + "title": "Configuraci\u00f3 del Webhook de Twilio" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/cs.json b/homeassistant/components/twilio/translations/cs.json new file mode 100644 index 00000000000..073aab126c1 --- /dev/null +++ b/homeassistant/components/twilio/translations/cs.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Va\u0161e Home Assistant instance mus\u00ed b\u00fdt p\u0159\u00edstupn\u00e1 z internetu aby mohla p\u0159ij\u00edmat zpr\u00e1vy Twilio.", + "one_instance_allowed": "Povolena je pouze jedna instance." + }, + "create_entry": { + "default": "Chcete-li odeslat ud\u00e1losti do aplikace Home Assistant, mus\u00edte nastavit [Webhooks s Twilio]({twilio_url}). \n\n Vypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: `{webhook_url}' \n - Metoda: POST \n - Typ obsahu: application/x-www-form-urlencoded \n\n Viz [dokumentace]({docs_url}), jak konfigurovat automatizace pro zpracov\u00e1n\u00ed p\u0159\u00edchoz\u00edch dat." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit slu\u017ebu Twilio?", + "title": "Nastaven\u00ed Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/da.json b/homeassistant/components/twilio/translations/da.json new file mode 100644 index 00000000000..0e89342bb0e --- /dev/null +++ b/homeassistant/components/twilio/translations/da.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage Twilio-meddelelser.", + "one_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning." + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere [Webhooks med Twilio]({twilio_url}).\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n - Indholdstype: application/x-www-form-urlencoded\n\nSe [dokumentationen]({docs_url}) om hvordan du konfigurerer automatiseringer til at h\u00e5ndtere indg\u00e5ende data." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere Twilio?", + "title": "Konfigurer Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/de.json b/homeassistant/components/twilio/translations/de.json new file mode 100644 index 00000000000..07860456754 --- /dev/null +++ b/homeassistant/components/twilio/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Ihre Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Twilio-Nachrichten empfangen zu k\u00f6nnen.", + "one_instance_allowed": "Es ist nur eine einzige Instanz erforderlich." + }, + "create_entry": { + "default": "Um Ereignisse an den Home Assistant zu senden, musst du [Webhooks mit Twilio]({twilio_url}) einrichten. \n\n F\u00fclle die folgenden Informationen aus: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhaltstyp: application / x-www-form-urlencoded \n\nLies in der [Dokumentation]({docs_url}) wie du Automationen f\u00fcr die Verarbeitung eingehender Daten konfigurierst." + }, + "step": { + "user": { + "description": "M\u00f6chtest du Twilio wirklich einrichten?", + "title": "Twilio-Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/en.json b/homeassistant/components/twilio/translations/en.json new file mode 100644 index 00000000000..32df9de104d --- /dev/null +++ b/homeassistant/components/twilio/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive Twilio messages.", + "one_instance_allowed": "Only a single instance is necessary." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to setup [Webhooks with Twilio]({twilio_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data." + }, + "step": { + "user": { + "description": "Are you sure you want to set up Twilio?", + "title": "Set up the Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/es-419.json b/homeassistant/components/twilio/translations/es-419.json new file mode 100644 index 00000000000..f2772383104 --- /dev/null +++ b/homeassistant/components/twilio/translations/es-419.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Su instancia de Home Assistant debe ser accesible desde Internet para recibir los mensajes de Twilio.", + "one_instance_allowed": "Solo una instancia es necesaria." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar [Webhooks with Twilio] ( {twilio_url} ). \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de contenido: application / x-www-form-urlencoded \n\n Consulte [la documentaci\u00f3n] ( {docs_url} ) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar Twilio?", + "title": "Configurar el Webhook Twilio" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/es.json b/homeassistant/components/twilio/translations/es.json new file mode 100644 index 00000000000..a470b3619a4 --- /dev/null +++ b/homeassistant/components/twilio/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tu instancia de Home Assistant debe ser accesible desde Internet para recibir mensajes de Twilio.", + "one_instance_allowed": "S\u00f3lo se necesita una instancia." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant debes configurar los [Webhooks en Twilio]({twilio_url}). \n\n Completa la siguiente informaci\u00f3n: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n - Tipo de contenido: application/x-www-form-urlencoded \n\nConsulta [la documentaci\u00f3n]({docs_url}) sobre c\u00f3mo configurar las automatizaciones para manejar los datos entrantes." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar Twilio?", + "title": "Configurar el Webhook de Twilio" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/fr.json b/homeassistant/components/twilio/translations/fr.json new file mode 100644 index 00000000000..2144fdd1d48 --- /dev/null +++ b/homeassistant/components/twilio/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Votre instance de Home Assistant doit \u00eatre accessible depuis Internet pour recevoir les messages Twilio.", + "one_instance_allowed": "Une seule instance est n\u00e9cessaire." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer [Webhooks avec Twilio] ( {twilio_url} ). \n\n Remplissez les informations suivantes: \n\n - URL: ` {webhook_url} ` \n - M\u00e9thode: POST \n - Type de contenu: application / x-www-form-urlencoded \n\n Voir [la documentation] ( {docs_url} ) pour savoir comment configurer les automatisations pour g\u00e9rer les donn\u00e9es entrantes." + }, + "step": { + "user": { + "description": "\u00cates-vous s\u00fbr de vouloir configurer Twilio?", + "title": "Configurer le Webhook Twilio" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/hu.json b/homeassistant/components/twilio/translations/hu.json new file mode 100644 index 00000000000..92e797917ed --- /dev/null +++ b/homeassistant/components/twilio/translations/hu.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A Home Assistant rendszerednek el\u00e9rhet\u0151nek kell lennie az internetr\u0151l a Twilio \u00fczenetek fogad\u00e1s\u00e1hoz.", + "one_instance_allowed": "Csak egyetlen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "step": { + "user": { + "description": "Biztosan be szeretn\u00e9d \u00e1ll\u00edtani a Twilio-t?", + "title": "A Twilio Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/it.json b/homeassistant/components/twilio/translations/it.json new file mode 100644 index 00000000000..b50d82bfeb1 --- /dev/null +++ b/homeassistant/components/twilio/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "La tua istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi da Twilio.", + "one_instance_allowed": "\u00c8 necessaria una sola istanza." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai configurare [Webhooks con Twilio]({twilio_url})\n\n Compila le seguenti informazioni: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n - Content Type: application/x-www-form-urlencoded\n\n Vedi [la documentazione]({docs_url}) su come configurare le automazioni per gestire i dati in arrivo." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare Twilio?", + "title": "Configura il webhook di Twilio" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/ko.json b/homeassistant/components/twilio/translations/ko.json new file mode 100644 index 00000000000..63859a000d0 --- /dev/null +++ b/homeassistant/components/twilio/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Twilio \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc561\uc138\uc2a4 \ud560 \uc218 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4.", + "one_instance_allowed": "\ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant \ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 [Twilio Webhook]({twilio_url}) \uc744 \uc124\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694:\n\n - URL: `{webhook_url}`\n - Method: POST\n - Content Type: application/x-www-form-urlencoded\n \nHome Assistant \ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc790\ub3d9\ud654\ub97c \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc740 [\uc548\ub0b4]({docs_url}) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694." + }, + "step": { + "user": { + "description": "Twilio \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Twilio Webhook \uc124\uc815" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/lb.json b/homeassistant/components/twilio/translations/lb.json new file mode 100644 index 00000000000..8f741409059 --- /dev/null +++ b/homeassistant/components/twilio/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u00c4r Home Assistant Instanz muss iwwert Internet accessibel si fir Twilio Noriichten z'empf\u00e4nken.", + "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 Twilio]({twilio_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." + }, + "step": { + "user": { + "description": "S\u00e9cher fir Twilio anzeriichten?", + "title": "Twilio Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/nl.json b/homeassistant/components/twilio/translations/nl.json new file mode 100644 index 00000000000..0af84ebb172 --- /dev/null +++ b/homeassistant/components/twilio/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Uw Home Assistant instantie moet toegankelijk zijn vanaf het internet om Twillo-berichten te ontvangen.", + "one_instance_allowed": "Slechts \u00e9\u00e9n exemplaar is nodig." + }, + "create_entry": { + "default": "Om evenementen naar de Home Assistant te verzenden, moet u [Webhooks with Twilio] ( {twilio_url} ) instellen. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n - Inhoudstype: application / x-www-form-urlencoded \n\n Zie [de documentatie] ( {docs_url} ) voor informatie over het configureren van automatiseringen om binnenkomende gegevens te verwerken." + }, + "step": { + "user": { + "description": "Weet u zeker dat u Twilio wilt instellen?", + "title": "Stel de Twilio Webhook in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/nn.json b/homeassistant/components/twilio/translations/nn.json new file mode 100644 index 00000000000..8831caab476 --- /dev/null +++ b/homeassistant/components/twilio/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Twilio" +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/no.json b/homeassistant/components/twilio/translations/no.json new file mode 100644 index 00000000000..98b2575d691 --- /dev/null +++ b/homeassistant/components/twilio/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant forekomst m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 motta Twilio-meldinger.", + "one_instance_allowed": "Kun en forekomst er n\u00f8dvendig." + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp [Webhooks with Twilio]({twilio_url}). \n\nFyll ut f\u00f8lgende informasjon: \n\n- URL: `{webhook_url}` \n- Metode: POST\n- Innholdstype: application/x-www-form-urlencoded \n\n Se [dokumentasjonen]({docs_url}) om hvordan du konfigurerer automatiseringer for \u00e5 h\u00e5ndtere innkommende data." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du \u00f8nsker \u00e5 sette opp Twilio?", + "title": "Sett opp Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/pl.json b/homeassistant/components/twilio/translations/pl.json new file mode 100644 index 00000000000..8d2f02ade2a --- /dev/null +++ b/homeassistant/components/twilio/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty Twilio.", + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 zdarzenia do Home Assistant'a, musisz skonfigurowa\u0107 [Twilio Webhook]({twilio_url}). \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n - Typ zawarto\u015bci: application/x-www-form-urlencoded \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}) na temat konfiguracji automatyzacji, by obs\u0142u\u017cy\u0107 przychodz\u0105ce dane." + }, + "step": { + "user": { + "description": "Na pewno chcesz skonfigurowa\u0107 Twilio?", + "title": "Konfiguracja Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/pt-BR.json b/homeassistant/components/twilio/translations/pt-BR.json new file mode 100644 index 00000000000..0b377b5ab24 --- /dev/null +++ b/homeassistant/components/twilio/translations/pt-BR.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel na Internet para receber mensagens do Twilio.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar [Webhooks com Twilio] ( {twilio_url} ). \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n - Tipo de Conte\u00fado: application / x-www-form-urlencoded \n\n Veja [a documenta\u00e7\u00e3o] ( {docs_url} ) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Twilio?", + "title": "Configurar o Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/pt.json b/homeassistant/components/twilio/translations/pt.json new file mode 100644 index 00000000000..27f0f3d4888 --- /dev/null +++ b/homeassistant/components/twilio/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "A sua inst\u00e2ncia Home Assistant precisa de ser acess\u00edvel a partir da internet para receber mensagens Twilio.", + "one_instance_allowed": "Apenas uma \u00fanica inst\u00e2ncia \u00e9 necess\u00e1ria." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar [Webhooks with Twilio] ({twilio_url}). \n\nPreencha as seguintes informa\u00e7\u00f5es: \n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST \n- Tipo de Conte\u00fado: application/x-www-form-urlencoded \n\nVeja [a documenta\u00e7\u00e3o] ({docs_url}) sobre como configurar automa\u00e7\u00f5es para manipular dados de entrada." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o Twilio?", + "title": "Configurar o Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/ru.json b/homeassistant/components/twilio/translations/ru.json new file mode 100644 index 00000000000..cdb9377cd99 --- /dev/null +++ b/homeassistant/components/twilio/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Twilio.", + "one_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f [Twilio]({twilio_url}).\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438]({docs_url}) \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Twilio?", + "title": "Twilio" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/sl.json b/homeassistant/components/twilio/translations/sl.json new file mode 100644 index 00000000000..a0ce124c69a --- /dev/null +++ b/homeassistant/components/twilio/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u010ce \u017eelite prejemati sporo\u010dila Twilio, mora biti Home Assistant dostopen prek interneta.", + "one_instance_allowed": "Potrebna je samo ena instanca." + }, + "create_entry": { + "default": "Za po\u0161iljanje dogodkov Home Assistant-u, boste morali nastaviti [Webhooks z Twilio]({twilio_url}).\n\nIzpolnite naslednje informacije:\n\n- URL: `{webhook_url}`\n- Metoda: POST\n- Vrsta vsebine: application/x-www-form-urlencoded\n\nGlej [dokumentacijo]({docs_url}) o tem, kako nastavite avtomatizacijo za obravnavo dohodnih podatkov." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti Twilio?", + "title": "Nastavite Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/sv.json b/homeassistant/components/twilio/translations/sv.json new file mode 100644 index 00000000000..47c7bc15be7 --- /dev/null +++ b/homeassistant/components/twilio/translations/sv.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Din Home Assistant instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot Twilio meddelanden.", + "one_instance_allowed": "Endast en enda instans \u00e4r n\u00f6dv\u00e4ndig." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera [Webhooks med Twilio]({twilio_url}).\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n Se [dokumentationen]({docs_url}) om hur du konfigurerar automatiseringar f\u00f6r att hantera inkommande data." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera Twilio?", + "title": "Konfigurera Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/zh-Hans.json b/homeassistant/components/twilio/translations/zh-Hans.json new file mode 100644 index 00000000000..0f769fecb5e --- /dev/null +++ b/homeassistant/components/twilio/translations/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u63a5\u5165\u4e92\u8054\u7f51\u4ee5\u63a5\u6536 Twilio \u6d88\u606f\u3002", + "one_instance_allowed": "\u4ec5\u9700\u4e00\u4e2a\u5b9e\u4f8b" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e [Twilio \u7684 Webhook]({twilio_url})\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\n\u6709\u5173\u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u5316\u4ee5\u5904\u7406\u4f20\u5165\u7684\u6570\u636e\uff0c\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e Twilio \u5417\uff1f", + "title": "\u8bbe\u7f6e Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio/translations/zh-Hant.json b/homeassistant/components/twilio/translations/zh-Hant.json new file mode 100644 index 00000000000..8cb926fe259 --- /dev/null +++ b/homeassistant/components/twilio/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "not_internet_accessible": "Home Assistant \u7269\u4ef6\u5fc5\u9808\u80fd\u5920\u7531\u7db2\u969b\u7db2\u8def\u5b58\u53d6\uff0c\u65b9\u80fd\u63a5\u53d7 Twilio \u8a0a\u606f\u3002", + "one_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u7d44\u7269\u4ef6\u5373\u53ef\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u8a2d\u5b9a [Webhooks with Twilio]({twilio_url})\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\n\u95dc\u65bc\u5982\u4f55\u50b3\u5165\u8cc7\u6599\u81ea\u52d5\u5316\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1[\u6587\u4ef6]({docs_url})\u4ee5\u9032\u884c\u4e86\u89e3\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Twilio\uff1f", + "title": "\u8a2d\u5b9a Twilio Webhook" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/twilio_call/manifest.json b/homeassistant/components/twilio_call/manifest.json index 626a8fea89a..2d66c463995 100644 --- a/homeassistant/components/twilio_call/manifest.json +++ b/homeassistant/components/twilio_call/manifest.json @@ -2,7 +2,6 @@ "domain": "twilio_call", "name": "Twilio Call", "documentation": "https://www.home-assistant.io/integrations/twilio_call", - "requirements": [], "dependencies": ["twilio"], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/twilio_sms/manifest.json b/homeassistant/components/twilio_sms/manifest.json index 35d549c5268..946b5196147 100644 --- a/homeassistant/components/twilio_sms/manifest.json +++ b/homeassistant/components/twilio_sms/manifest.json @@ -2,7 +2,6 @@ "domain": "twilio_sms", "name": "Twilio SMS", "documentation": "https://www.home-assistant.io/integrations/twilio_sms", - "requirements": [], "dependencies": ["twilio"], "codeowners": ["@robbiet480"] } diff --git a/homeassistant/components/twitch/manifest.json b/homeassistant/components/twitch/manifest.json index 639624c352f..2fc29fc9be8 100644 --- a/homeassistant/components/twitch/manifest.json +++ b/homeassistant/components/twitch/manifest.json @@ -3,6 +3,5 @@ "name": "Twitch", "documentation": "https://www.home-assistant.io/integrations/twitch", "requirements": ["python-twitch-client==0.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/twitter/manifest.json b/homeassistant/components/twitter/manifest.json index 514f976df34..81048758889 100644 --- a/homeassistant/components/twitter/manifest.json +++ b/homeassistant/components/twitter/manifest.json @@ -2,7 +2,6 @@ "domain": "twitter", "name": "Twitter", "documentation": "https://www.home-assistant.io/integrations/twitter", - "requirements": ["TwitterAPI==2.5.10"], - "dependencies": [], + "requirements": ["TwitterAPI==2.5.11"], "codeowners": [] } diff --git a/homeassistant/components/twitter/notify.py b/homeassistant/components/twitter/notify.py index 768e1ee7316..62e8fc17dff 100644 --- a/homeassistant/components/twitter/notify.py +++ b/homeassistant/components/twitter/notify.py @@ -14,7 +14,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONF_ACCESS_TOKEN, CONF_USERNAME +from homeassistant.const import CONF_ACCESS_TOKEN, CONF_USERNAME, HTTP_OK import homeassistant.helpers.config_validation as cv from homeassistant.helpers.event import async_track_point_in_time @@ -88,7 +88,7 @@ class TwitterNotificationService(BaseNotificationService): if self.user: user_resp = self.api.request("users/lookup", {"screen_name": self.user}) user_id = user_resp.json()[0]["id"] - if user_resp.status_code != 200: + if user_resp.status_code != HTTP_OK: self.log_error_resp(user_resp) else: _LOGGER.debug("Message posted: %s", user_resp.json()) @@ -108,7 +108,7 @@ class TwitterNotificationService(BaseNotificationService): "statuses/update", {"status": message, "media_ids": media_id} ) - if resp.status_code != 200: + if resp.status_code != HTTP_OK: self.log_error_resp(resp) else: _LOGGER.debug("Message posted: %s", resp.json()) @@ -171,7 +171,7 @@ class TwitterNotificationService(BaseNotificationService): while bytes_sent < total_bytes: chunk = file.read(4 * 1024 * 1024) resp = self.upload_media_append(chunk, media_id, segment_id) - if resp.status_code not in range(200, 299): + if resp.status_code not in range(HTTP_OK, 299): self.log_error_resp_append(resp) return None segment_id = segment_id + 1 @@ -200,7 +200,7 @@ class TwitterNotificationService(BaseNotificationService): {"command": "STATUS", "media_id": media_id}, method_override="GET", ) - if resp.status_code != 200: + if resp.status_code != HTTP_OK: _LOGGER.error("media processing error: %s", resp.json()) processing_info = resp.json()["processing_info"] diff --git a/homeassistant/components/ubee/manifest.json b/homeassistant/components/ubee/manifest.json index 446bc2c62d5..0603ffe8757 100644 --- a/homeassistant/components/ubee/manifest.json +++ b/homeassistant/components/ubee/manifest.json @@ -3,6 +3,5 @@ "name": "Ubee Router", "documentation": "https://www.home-assistant.io/integrations/ubee", "requirements": ["pyubee==0.10"], - "dependencies": [], "codeowners": ["@mzdrale"] } diff --git a/homeassistant/components/ubus/device_tracker.py b/homeassistant/components/ubus/device_tracker.py index 8c83de202a4..4cefefc2f96 100644 --- a/homeassistant/components/ubus/device_tracker.py +++ b/homeassistant/components/ubus/device_tracker.py @@ -11,7 +11,7 @@ from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DeviceScanner, ) -from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, HTTP_OK from homeassistant.exceptions import HomeAssistantError import homeassistant.helpers.config_validation as cv @@ -94,7 +94,7 @@ class UbusDeviceScanner(DeviceScanner): def _generate_mac2name(self): """Return empty MAC to name dict. Overridden if DHCP server is set.""" - self.mac2name = dict() + self.mac2name = {} @_refresh_on_access_denied def get_device_name(self, device): @@ -170,7 +170,7 @@ class DnsmasqUbusDeviceScanner(UbusDeviceScanner): self.url, self.session_id, "call", "file", "read", path=self.leasefile ) if result: - self.mac2name = dict() + self.mac2name = {} for line in result["data"].splitlines(): hosts = line.split(" ") self.mac2name[hosts[1].upper()] = hosts[3] @@ -185,7 +185,7 @@ class OdhcpdUbusDeviceScanner(UbusDeviceScanner): def _generate_mac2name(self): result = _req_json_rpc(self.url, self.session_id, "call", "dhcp", "ipv4leases") if result: - self.mac2name = dict() + self.mac2name = {} for device in result["device"].values(): for lease in device["leases"]: mac = lease["mac"] # mac = aabbccddeeff @@ -214,7 +214,7 @@ def _req_json_rpc(url, session_id, rpcmethod, subsystem, method, **params): except (requests.exceptions.ConnectionError, requests.exceptions.Timeout): return - if res.status_code == 200: + if res.status_code == HTTP_OK: response = res.json() if "error" in response: if ( diff --git a/homeassistant/components/ubus/manifest.json b/homeassistant/components/ubus/manifest.json index d48e55d5e2a..af7fb50b6c4 100644 --- a/homeassistant/components/ubus/manifest.json +++ b/homeassistant/components/ubus/manifest.json @@ -2,7 +2,5 @@ "domain": "ubus", "name": "OpenWrt (ubus)", "documentation": "https://www.home-assistant.io/integrations/ubus", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ue_smart_radio/manifest.json b/homeassistant/components/ue_smart_radio/manifest.json index 7ddb8d69284..365bb9b822d 100644 --- a/homeassistant/components/ue_smart_radio/manifest.json +++ b/homeassistant/components/ue_smart_radio/manifest.json @@ -2,7 +2,5 @@ "domain": "ue_smart_radio", "name": "Logitech UE Smart Radio", "documentation": "https://www.home-assistant.io/integrations/ue_smart_radio", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/uk_transport/manifest.json b/homeassistant/components/uk_transport/manifest.json index a9924715373..b7200a35994 100644 --- a/homeassistant/components/uk_transport/manifest.json +++ b/homeassistant/components/uk_transport/manifest.json @@ -2,7 +2,5 @@ "domain": "uk_transport", "name": "UK Transport", "documentation": "https://www.home-assistant.io/integrations/uk_transport", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/uk_transport/sensor.py b/homeassistant/components/uk_transport/sensor.py index 77929436283..e7c01479a96 100644 --- a/homeassistant/components/uk_transport/sensor.py +++ b/homeassistant/components/uk_transport/sensor.py @@ -7,7 +7,7 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_MODE, TIME_MINUTES +from homeassistant.const import CONF_MODE, HTTP_OK, TIME_MINUTES import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -133,7 +133,7 @@ class UkTransportSensor(Entity): ) response = requests.get(self._url, params=request_params) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.warning("Invalid response from API") elif "error" in response.json(): if "exceeded" in response.json()["error"]: diff --git a/homeassistant/components/unifi/.translations/bg.json b/homeassistant/components/unifi/.translations/bg.json deleted file mode 100644 index 4b8b8977491..00000000000 --- a/homeassistant/components/unifi/.translations/bg.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0421\u0430\u0439\u0442\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "user_privilege": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440" - }, - "error": { - "faulty_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", - "service_unavailable": "\u041d\u044f\u043c\u0430 \u043d\u0430\u043b\u0438\u0447\u043d\u0430 \u0443\u0441\u043b\u0443\u0433\u0430" - }, - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441", - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "port": "\u041f\u043e\u0440\u0442", - "site": "Site ID", - "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", - "verify_ssl": "\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440\u044a\u0442 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043d\u0430\u0434\u0435\u0436\u0434\u0435\u043d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 UniFi \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440" - } - }, - "title": "UniFi \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "detection_time": "\u0412\u0440\u0435\u043c\u0435 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0438 \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u043e\u0442\u043e \u0432\u0438\u0436\u0434\u0430\u043d\u0435 \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0441\u0447\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u0430\u0442\u043e \u043e\u0442\u0441\u044a\u0441\u0442\u0432\u0430\u0449\u043e", - "track_clients": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0440\u0435\u0436\u043e\u0432\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0438", - "track_devices": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0440\u0435\u0436\u043e\u0432\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (Ubiquiti \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)", - "track_wired_clients": "\u0412\u043a\u043b\u044e\u0447\u0435\u0442\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0438 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441 \u043a\u0430\u0431\u0435\u043b" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "\u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0435\u043d\u0437\u043e\u0440\u0438 \u0437\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u043c\u0440\u0435\u0436\u043e\u0432\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0438" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/ca.json b/homeassistant/components/unifi/.translations/ca.json deleted file mode 100644 index 7eefb77b3d2..00000000000 --- a/homeassistant/components/unifi/.translations/ca.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El lloc del controlador ja est\u00e0 configurat", - "user_privilege": "L'usuari ha de ser administrador" - }, - "error": { - "faulty_credentials": "Credencials d'usuari incorrectes", - "service_unavailable": "Servei no disponible", - "unknown_client_mac": "No hi ha cap client disponible en aquesta adre\u00e7a MAC" - }, - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3", - "password": "Contrasenya", - "port": "Port", - "site": "ID del lloc", - "username": "Nom d'usuari", - "verify_ssl": "El controlador est\u00e0 utilitzant un certificat adequat" - }, - "title": "Configuraci\u00f3 del controlador UniFi" - } - }, - "title": "Controlador UniFi" - }, - "error": { - "unknown_client_mac": "No hi ha cap client disponible a UniFi en aquesta adre\u00e7a MAC" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Clients controlats amb acc\u00e9s a la xarxa", - "new_client": "Afegeix un client nou per al control d\u2019acc\u00e9s a la xarxa", - "poe_clients": "Permet control POE dels clients" - }, - "description": "Configura els controls del client \n\nConfigura interruptors per als n\u00fameros de s\u00e8rie als quals vulguis controlar l'acc\u00e9s a la xarxa.", - "title": "Opcions d'UniFi 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Temps (en segons) des de s'ha vist per \u00faltima vegada fins que es considera a fora", - "ssid_filter": "Selecciona els SSID's on fer-hi el seguiment de clients", - "track_clients": "Segueix clients de la xarxa", - "track_devices": "Segueix dispositius de la xarxa (dispositius Ubiquiti)", - "track_wired_clients": "Inclou clients de xarxa per cable" - }, - "description": "Configuraci\u00f3 de seguiment de dispositius", - "title": "Opcions d'UniFi" - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Crea sensors d'\u00fas d'ample de banda per a clients de la xarxa" - }, - "description": "Configuraci\u00f3 dels sensors d\u2019estad\u00edstiques", - "title": "Opcions d'UniFi" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/cs.json b/homeassistant/components/unifi/.translations/cs.json deleted file mode 100644 index 32711da56f7..00000000000 --- a/homeassistant/components/unifi/.translations/cs.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0158adi\u010d je ji\u017e nakonfigurov\u00e1n", - "user_privilege": "U\u017eivatel mus\u00ed b\u00fdt spr\u00e1vcem" - }, - "error": { - "faulty_credentials": "Chybn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje", - "service_unavailable": "Slu\u017eba nen\u00ed dostupn\u00e1" - }, - "step": { - "user": { - "data": { - "host": "Hostitel", - "password": "Heslo", - "port": "Port", - "site": "ID s\u00edt\u011b", - "username": "U\u017eivatelsk\u00e9 jm\u00e9no", - "verify_ssl": "\u0158adi\u010d pou\u017e\u00edv\u00e1 spr\u00e1vn\u00fd certifik\u00e1t" - }, - "title": "Nastaven\u00ed UniFi \u0159adi\u010de" - } - }, - "title": "UniFi \u0159adi\u010d" - }, - "options": { - "step": { - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Vytvo\u0159it senzory vyu\u017eit\u00ed \u0161\u00ed\u0159ky p\u00e1sma pro s\u00ed\u0165ov\u00e9 klienty" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/da.json b/homeassistant/components/unifi/.translations/da.json deleted file mode 100644 index 1afd1ca96ce..00000000000 --- a/homeassistant/components/unifi/.translations/da.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Controller site er allerede konfigureret", - "user_privilege": "Bruger skal v\u00e6re administrator" - }, - "error": { - "faulty_credentials": "Ugyldige legitimationsoplysninger", - "service_unavailable": "Service utilg\u00e6ngelig" - }, - "step": { - "user": { - "data": { - "host": "V\u00e6rt", - "password": "Adgangskode", - "port": "Port", - "site": "Site ID", - "username": "Brugernavn", - "verify_ssl": "Controller bruger korrekt certifikat" - }, - "title": "Konfigurer UniFi Controller" - } - }, - "title": "UniFi Controller" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "detection_time": "Tid i sekunder fra sidst set indtil betragtet som v\u00e6k", - "ssid_filter": "V\u00e6lg SSIDer, der skal spores tr\u00e5dl\u00f8se klienter p\u00e5", - "track_clients": "Spor netv\u00e6rksklienter", - "track_devices": "Spor netv\u00e6rksenheder (Ubiquiti-enheder)", - "track_wired_clients": "Inkluder kablede netv\u00e6rksklienter" - }, - "description": "Konfigurer enhedssporing", - "title": "UniFi-indstillinger" - }, - "init": { - "data": { - "one": "EN", - "other": "ANDEN" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "B\u00e5ndbreddeforbrugssensorer for netv\u00e6rksklienter" - }, - "description": "Konfigurer statistiksensorer", - "title": "UniFi-indstillinger" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/de.json b/homeassistant/components/unifi/.translations/de.json deleted file mode 100644 index afdea87956b..00000000000 --- a/homeassistant/components/unifi/.translations/de.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Controller-Site ist bereits konfiguriert", - "user_privilege": "Der Benutzer muss Administrator sein" - }, - "error": { - "faulty_credentials": "Ung\u00fcltige Anmeldeinformationen", - "service_unavailable": "Kein Dienst verf\u00fcgbar", - "unknown_client_mac": "Unter dieser MAC-Adresse ist kein Client verf\u00fcgbar." - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Passwort", - "port": "Port", - "site": "Site-ID", - "username": "Benutzername", - "verify_ssl": "Controller mit ordnungsgem\u00e4ssem Zertifikat" - }, - "title": "UniFi-Controller einrichten" - } - }, - "title": "UniFi-Controller" - }, - "error": { - "unknown_client_mac": "Unter dieser MAC-Adresse ist in UniFi kein Client verf\u00fcgbar" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Clients mit Netzwerkzugriffskontrolle", - "new_client": "F\u00fcgen Sie einen neuen Client f\u00fcr die Netzwerkzugangskontrolle hinzu", - "poe_clients": "POE-Kontrolle von Clients zulassen" - }, - "description": "Konfigurieren Sie Client-Steuerelemente \n\nErstellen Sie Switches f\u00fcr Seriennummern, f\u00fcr die Sie den Netzwerkzugriff steuern m\u00f6chten.", - "title": "UniFi-Optionen 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Zeit in Sekunden vom letzten Gesehenen bis zur Entfernung", - "ssid_filter": "W\u00e4hlen Sie SSIDs zur Verfolgung von drahtlosen Clients aus", - "track_clients": "Nachverfolgen von Netzwerkclients", - "track_devices": "Verfolgen von Netzwerkger\u00e4ten (Ubiquiti-Ger\u00e4te)", - "track_wired_clients": "Einbinden von kabelgebundenen Netzwerk-Clients" - }, - "description": "Konfigurieren Sie die Ger\u00e4teverfolgung", - "title": "UniFi-Optionen 1/3" - }, - "init": { - "data": { - "one": "eins", - "other": "andere" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Bandbreitennutzungssensoren f\u00fcr Netzwerkclients" - }, - "description": "Konfigurieren Sie Statistiksensoren", - "title": "UniFi-Optionen 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/en.json b/homeassistant/components/unifi/.translations/en.json deleted file mode 100644 index d42a647c82f..00000000000 --- a/homeassistant/components/unifi/.translations/en.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Controller site is already configured", - "user_privilege": "User needs to be administrator" - }, - "error": { - "faulty_credentials": "Bad user credentials", - "service_unavailable": "No service available", - "unknown_client_mac": "No client available on that MAC address" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Password", - "port": "Port", - "site": "Site ID", - "username": "User name", - "verify_ssl": "Controller using proper certificate" - }, - "title": "Set up UniFi Controller" - } - }, - "title": "UniFi Controller" - }, - "error": { - "unknown_client_mac": "No client available in UniFi on that MAC address" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Network access controlled clients", - "new_client": "Add new client for network access control", - "poe_clients": "Allow POE control of clients" - }, - "description": "Configure client controls\n\nCreate switches for serial numbers you want to control network access for.", - "title": "UniFi options 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Time in seconds from last seen until considered away", - "ssid_filter": "Select SSIDs to track wireless clients on", - "track_clients": "Track network clients", - "track_devices": "Track network devices (Ubiquiti devices)", - "track_wired_clients": "Include wired network clients" - }, - "description": "Configure device tracking", - "title": "UniFi options 1/3" - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Bandwidth usage sensors for network clients" - }, - "description": "Configure statistics sensors", - "title": "UniFi options 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/es-419.json b/homeassistant/components/unifi/.translations/es-419.json deleted file mode 100644 index 9b729e4c4ab..00000000000 --- a/homeassistant/components/unifi/.translations/es-419.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El sitio del controlador ya est\u00e1 configurado", - "user_privilege": "El usuario necesita ser administrador" - }, - "error": { - "faulty_credentials": "Credenciales de usuario incorrectas", - "service_unavailable": "No hay servicio disponible" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Contrase\u00f1a", - "port": "Puerto", - "site": "ID del sitio", - "username": "Nombre de usuario", - "verify_ssl": "Controlador usando el certificado apropiado" - }, - "title": "Configurar el controlador UniFi" - } - }, - "title": "Controlador UniFi" - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/es.json b/homeassistant/components/unifi/.translations/es.json deleted file mode 100644 index 31c7e6c0bcd..00000000000 --- a/homeassistant/components/unifi/.translations/es.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "El sitio del controlador ya est\u00e1 configurado", - "user_privilege": "El usuario debe ser administrador" - }, - "error": { - "faulty_credentials": "Credenciales de usuario incorrectas", - "service_unavailable": "Servicio No disponible", - "unknown_client_mac": "Ning\u00fan cliente disponible en esa direcci\u00f3n MAC" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Contrase\u00f1a", - "port": "Puerto", - "site": "ID del sitio", - "username": "Nombre de usuario", - "verify_ssl": "Controlador usando el certificado adecuado" - }, - "title": "Configurar el controlador UniFi" - } - }, - "title": "Controlador UniFi" - }, - "error": { - "unknown_client_mac": "Ning\u00fan cliente disponible en UniFi en esa direcci\u00f3n MAC" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Clientes con acceso controlado a la red", - "new_client": "A\u00f1adir nuevo cliente para el control de acceso a la red", - "poe_clients": "Permitir control PoE de clientes" - }, - "description": "Configurar controles de cliente\n\nCrea conmutadores para los n\u00fameros de serie para los que deseas controlar el acceso a la red.", - "title": "Opciones UniFi 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Tiempo en segundos desde la \u00faltima vez que se vio hasta considerarlo desconectado", - "ssid_filter": "Seleccione los SSIDs para realizar seguimiento de clientes inal\u00e1mbricos", - "track_clients": "Seguimiento de los clientes de red", - "track_devices": "Rastree dispositivos de red (dispositivos Ubiquiti)", - "track_wired_clients": "Incluir clientes de red cableada" - }, - "description": "Configurar dispositivo de seguimiento", - "title": "Opciones UniFi 1/3" - }, - "init": { - "data": { - "one": "vac\u00edo", - "other": "vac\u00edo" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Crear sensores para monitorizar uso de ancho de banda de clientes de red" - }, - "description": "Configurar estad\u00edsticas de los sensores", - "title": "Opciones UniFi 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/fr.json b/homeassistant/components/unifi/.translations/fr.json deleted file mode 100644 index 659a567a91f..00000000000 --- a/homeassistant/components/unifi/.translations/fr.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Le contr\u00f4leur est d\u00e9j\u00e0 configur\u00e9", - "user_privilege": "L'utilisateur doit \u00eatre administrateur" - }, - "error": { - "faulty_credentials": "Mauvaises informations d'identification de l'utilisateur", - "service_unavailable": "Aucun service disponible", - "unknown_client_mac": "Aucun client disponible sur cette adresse MAC" - }, - "step": { - "user": { - "data": { - "host": "H\u00f4te", - "password": "Mot de passe", - "port": "Port", - "site": "ID du site", - "username": "Nom d'utilisateur", - "verify_ssl": "Contr\u00f4leur utilisant un certificat appropri\u00e9" - }, - "title": "Configurer le contr\u00f4leur UniFi" - } - }, - "title": "Contr\u00f4leur UniFi" - }, - "error": { - "unknown_client_mac": "Aucun client disponible dans UniFi sur cette adresse MAC" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Clients contr\u00f4l\u00e9s par acc\u00e8s r\u00e9seau", - "new_client": "Ajouter un nouveau client pour le contr\u00f4le d'acc\u00e8s au r\u00e9seau" - }, - "title": "Options UniFi 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Temps en secondes depuis la derni\u00e8re vue avant de consid\u00e9rer comme absent", - "track_clients": "Suivre les clients du r\u00e9seau", - "track_devices": "Suivre les p\u00e9riph\u00e9riques r\u00e9seau (p\u00e9riph\u00e9riques Ubiquiti)", - "track_wired_clients": "Inclure les clients du r\u00e9seau filaire" - }, - "description": "Configurer le suivi des appareils", - "title": "Options UniFi 1/3" - }, - "init": { - "data": { - "one": "Vide", - "other": "Vide" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Cr\u00e9er des capteurs d'utilisation de la bande passante pour les clients r\u00e9seau" - }, - "description": "Configurer des capteurs de statistiques", - "title": "Options UniFi 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/hu.json b/homeassistant/components/unifi/.translations/hu.json deleted file mode 100644 index f6919f985dc..00000000000 --- a/homeassistant/components/unifi/.translations/hu.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "user_privilege": "A felhaszn\u00e1l\u00f3nak rendszergazd\u00e1nak kell lennie" - }, - "error": { - "faulty_credentials": "Rossz felhaszn\u00e1l\u00f3i hiteles\u00edt\u0151 adatok", - "service_unavailable": "Nincs el\u00e9rhet\u0151 szolg\u00e1ltat\u00e1s" - }, - "step": { - "user": { - "data": { - "host": "Hoszt", - "password": "Jelsz\u00f3", - "port": "Port", - "site": "Site azonos\u00edt\u00f3", - "username": "Felhaszn\u00e1l\u00f3n\u00e9v", - "verify_ssl": "Vez\u00e9rl\u0151 megfelel\u0151 tan\u00fas\u00edtv\u00e1nnyal" - }, - "title": "UniFi vez\u00e9rl\u0151 be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "UniFi Vez\u00e9rl\u0151" - }, - "options": { - "step": { - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "S\u00e1vsz\u00e9less\u00e9g-haszn\u00e1lati \u00e9rz\u00e9kel\u0151k l\u00e9trehoz\u00e1sa a h\u00e1l\u00f3zati \u00fcgyfelek sz\u00e1m\u00e1ra" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/it.json b/homeassistant/components/unifi/.translations/it.json deleted file mode 100644 index 9439715fe79..00000000000 --- a/homeassistant/components/unifi/.translations/it.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Il sito del Controller \u00e8 gi\u00e0 configurato", - "user_privilege": "L'utente deve essere amministratore" - }, - "error": { - "faulty_credentials": "Credenziali utente non valide", - "service_unavailable": "Servizio non disponibile", - "unknown_client_mac": "Nessun client disponibile su quell'indirizzo MAC" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Password", - "port": "Porta", - "site": "ID del sito", - "username": "Nome utente", - "verify_ssl": "Il Controller sta utilizzando il certificato corretto" - }, - "title": "Configura l'UniFi Controller" - } - }, - "title": "UniFi Controller" - }, - "error": { - "unknown_client_mac": "Nessun client disponibile in UniFi su quell'indirizzo MAC" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Client controllati per l'accesso alla rete", - "new_client": "Aggiungere un nuovo client per il controllo dell'accesso alla rete" - }, - "description": "Configurare i controlli client \n\nCreare interruttori per i numeri di serie dei quali si desidera controllare l'accesso alla rete.", - "title": "Opzioni UniFi 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Tempo in secondi dall'ultima volta che viene visto fino a quando non \u00e8 considerato lontano", - "ssid_filter": "Selezionare gli SSID su cui tracciare i client wireless", - "track_clients": "Traccia i client di rete", - "track_devices": "Tracciare i dispositivi di rete (dispositivi Ubiquiti)", - "track_wired_clients": "Includi i client di rete cablata" - }, - "description": "Configurare il tracciamento del dispositivo", - "title": "Opzioni UniFi 1/3" - }, - "init": { - "data": { - "one": "uno", - "other": "altri" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Sensori di utilizzo della larghezza di banda per i client di rete" - }, - "description": "Configurare i sensori delle statistiche", - "title": "Opzioni UniFi 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/ko.json b/homeassistant/components/unifi/.translations/ko.json deleted file mode 100644 index d57d80c7911..00000000000 --- a/homeassistant/components/unifi/.translations/ko.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ucee8\ud2b8\ub864\ub7ec \uc0ac\uc774\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "user_privilege": "\uc0ac\uc6a9\uc790\ub294 \uad00\ub9ac\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4" - }, - "error": { - "faulty_credentials": "\uc0ac\uc6a9\uc790 \uc790\uaca9\uc99d\uba85\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "service_unavailable": "\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc11c\ube44\uc2a4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", - "unknown_client_mac": "\ud574\ub2f9 MAC \uc8fc\uc18c\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8", - "password": "\ube44\ubc00\ubc88\ud638", - "port": "\ud3ec\ud2b8", - "site": "\uc0ac\uc774\ud2b8 ID", - "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", - "verify_ssl": "\uc62c\ubc14\ub978 \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\ub294 \ucee8\ud2b8\ub864\ub7ec" - }, - "title": "UniFi \ucee8\ud2b8\ub864\ub7ec \uc124\uc815" - } - }, - "title": "UniFi \ucee8\ud2b8\ub864\ub7ec" - }, - "error": { - "unknown_client_mac": "\ud574\ub2f9 MAC \uc8fc\uc18c\uc758 UniFi \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "\ub124\ud2b8\uc6cc\ud06c \uc561\uc138\uc2a4 \uc81c\uc5b4 \ud074\ub77c\uc774\uc5b8\ud2b8", - "new_client": "\ub124\ud2b8\uc6cc\ud06c \uc561\uc138\uc2a4 \uc81c\uc5b4\ub97c \uc704\ud55c \uc0c8\ub85c\uc6b4 \ud074\ub77c\uc774\uc5b8\ud2b8 \ucd94\uac00", - "poe_clients": "\ud074\ub77c\uc774\uc5b8\ud2b8\uc758 POE \uc81c\uc5b4 \ud5c8\uc6a9" - }, - "description": "\ud074\ub77c\uc774\uc5b8\ud2b8 \ucee8\ud2b8\ub864 \uad6c\uc131 \n\n\ub124\ud2b8\uc6cc\ud06c \uc561\uc138\uc2a4\ub97c \uc81c\uc5b4\ud558\ub824\ub294 \uc2dc\ub9ac\uc5bc \ubc88\ud638\uc5d0 \ub300\ud55c \uc2a4\uc704\uce58\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.", - "title": "UniFi \uc635\uc158 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ud655\uc778\ub41c \uc2dc\uac04\ubd80\ud130 \uc678\ucd9c \uc0c1\ud0dc\ub85c \uac04\uc8fc\ub418\ub294 \uc2dc\uac04 (\ucd08)", - "ssid_filter": "\ubb34\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ucd94\uc801\ud558\ub824\uba74 SSID\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694", - "track_clients": "\ub124\ud2b8\uc6cc\ud06c \ud074\ub77c\uc774\uc5b8\ud2b8 \ucd94\uc801 \ub300\uc0c1", - "track_devices": "\ub124\ud2b8\uc6cc\ud06c \uae30\uae30 \ucd94\uc801 (Ubiquiti \uae30\uae30)", - "track_wired_clients": "\uc720\uc120 \ub124\ud2b8\uc6cc\ud06c \ud074\ub77c\uc774\uc5b8\ud2b8 \ud3ec\ud568" - }, - "description": "\uae30\uae30 \ucd94\uc801 \uad6c\uc131", - "title": "UniFi \uc635\uc158 1/3" - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "\ub124\ud2b8\uc6cc\ud06c \ud074\ub77c\uc774\uc5b8\ud2b8 \ub300\uc5ed\ud3ed \uc0ac\uc6a9\ub7c9 \uc13c\uc11c" - }, - "description": "\ud1b5\uacc4 \uc13c\uc11c \uad6c\uc131", - "title": "UniFi \uc635\uc158 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/lb.json b/homeassistant/components/unifi/.translations/lb.json deleted file mode 100644 index a3d7d685ed2..00000000000 --- a/homeassistant/components/unifi/.translations/lb.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontroller Site ass scho konfigur\u00e9iert", - "user_privilege": "Benotzer muss een Administrator sinn" - }, - "error": { - "faulty_credentials": "Ong\u00eblteg Login Informatioune", - "service_unavailable": "Keen Service disponibel", - "unknown_client_mac": "Kee Cliwent mat der MAC Adress disponibel" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Passwuert", - "port": "Port", - "site": "Site ID", - "username": "Benotzer", - "verify_ssl": "Kontroller benotzt g\u00ebltegen Zertifikat" - }, - "title": "Unifi Kontroller ariichten" - } - }, - "title": "Unifi Kontroller" - }, - "error": { - "unknown_client_mac": "Kee Client am Unifi disponibel mat der MAC Adress" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Netzwierk Zougang kontroll\u00e9iert Clienten", - "new_client": "Neie Client fir Netzwierk Zougang Kontroll b\u00e4isetzen", - "poe_clients": "POE Kontroll vun Clienten erlaben" - }, - "description": "Client Kontroll konfigur\u00e9ieren\n\nErstell Schalter fir Serienummer d\u00e9i sollen fir Netzwierk Zougangs Kontroll kontroll\u00e9iert ginn.", - "title": "UniFi Optiounen 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Z\u00e4it a Sekonne vum leschten Z\u00e4itpunkt un bis den Apparat als \u00ebnnerwee consider\u00e9iert g\u00ebtt", - "ssid_filter": "SSIDs auswielen fir Clienten ze verfollegen", - "track_clients": "Netzwierk Cliente verfollegen", - "track_devices": "Netzwierk Apparater (Ubiquiti Apparater) verfollegen", - "track_wired_clients": "Kabel Netzwierk Cliente abez\u00e9ien" - }, - "description": "Apparate verfollegen ariichten", - "title": "UniFi Optiounen 1/3" - }, - "init": { - "data": { - "one": "Een", - "other": "M\u00e9i" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Bandbreet Benotzung Sensore fir Netzwierk Cliente erstellen" - }, - "description": "Statistik Sensoren konfigur\u00e9ieren", - "title": "UniFi Optiounen 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/nl.json b/homeassistant/components/unifi/.translations/nl.json deleted file mode 100644 index 36e21728f1d..00000000000 --- a/homeassistant/components/unifi/.translations/nl.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Controller site is al geconfigureerd", - "user_privilege": "Gebruiker moet beheerder zijn" - }, - "error": { - "faulty_credentials": "Foutieve gebruikersgegevens", - "service_unavailable": "Geen service beschikbaar" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Wachtwoord", - "port": "Poort", - "site": "Site ID", - "username": "Gebruikersnaam", - "verify_ssl": "Controller gebruik van het juiste certificaat" - }, - "title": "Stel de UniFi-controller in" - } - }, - "title": "UniFi-controller" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "detection_time": "Tijd in seconden vanaf laatst gezien tot beschouwd als weg", - "track_clients": "Volg netwerkclients", - "track_devices": "Netwerkapparaten volgen (Ubiquiti-apparaten)", - "track_wired_clients": "Inclusief bedrade netwerkcli\u00ebnten" - } - }, - "init": { - "data": { - "one": "Leeg", - "other": "Leeg" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Maak bandbreedtegebruiksensoren voor netwerkclients" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/no.json b/homeassistant/components/unifi/.translations/no.json deleted file mode 100644 index 156faf83d92..00000000000 --- a/homeassistant/components/unifi/.translations/no.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Kontroller nettstedet er allerede konfigurert", - "user_privilege": "Bruker m\u00e5 v\u00e6re administrator" - }, - "error": { - "faulty_credentials": "Ugyldig brukerlegitimasjon", - "service_unavailable": "Ingen tjeneste tilgjengelig", - "unknown_client_mac": "Ingen klient tilgjengelig p\u00e5 den MAC-adressen" - }, - "step": { - "user": { - "data": { - "host": "Vert", - "password": "Passord", - "port": "", - "site": "Nettsted-ID", - "username": "Brukernavn", - "verify_ssl": "Kontroller bruker riktig sertifikat" - }, - "title": "Sett opp UniFi kontroller" - } - }, - "title": "UniFi kontroller" - }, - "error": { - "unknown_client_mac": "Ingen klient tilgjengelig i UniFi p\u00e5 den MAC-adressen" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Nettverkskontrollerte klienter", - "new_client": "Legg til ny klient for nettverkstilgangskontroll" - }, - "description": "Konfigurere klient-kontroller\n\nOpprette brytere for serienumre du \u00f8nsker \u00e5 kontrollere tilgang til nettverk for.", - "title": "UniFi-alternativ 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "Tid i sekunder fra sist sett til den ble ansett borte", - "ssid_filter": "Velg SSID-er for \u00e5 spore tr\u00e5dl\u00f8se klienter p\u00e5", - "track_clients": "Spor nettverksklienter", - "track_devices": "Spore nettverksenheter (Ubiquiti-enheter)", - "track_wired_clients": "Inkluder kablede nettverksklienter" - }, - "description": "Konfigurere enhetssporing", - "title": "UniFi-alternativ 1/3" - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "B\u00e5ndbreddebrukssensorer for nettverksklienter" - }, - "description": "Konfigurer statistikk sensorer", - "title": "UniFi-alternativ 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/pl.json b/homeassistant/components/unifi/.translations/pl.json deleted file mode 100644 index 08329aed574..00000000000 --- a/homeassistant/components/unifi/.translations/pl.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Witryna kontrolera jest ju\u017c skonfigurowana.", - "user_privilege": "U\u017cytkownik musi by\u0107 administratorem" - }, - "error": { - "faulty_credentials": "B\u0142\u0119dne dane uwierzytelniaj\u0105ce", - "service_unavailable": "Brak dost\u0119pnych us\u0142ug", - "unknown_client_mac": "Brak klienta z tym adresem MAC" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Has\u0142o", - "port": "Port", - "site": "Identyfikator witryny", - "username": "Nazwa u\u017cytkownika", - "verify_ssl": "Kontroler u\u017cywa prawid\u0142owego certyfikatu" - }, - "title": "Konfiguracja kontrolera UniFi" - } - }, - "title": "Kontroler UniFi" - }, - "error": { - "unknown_client_mac": "Brak klienta w UniFi z tym adresem MAC" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Klienci z kontrol\u0105 dost\u0119pu do sieci", - "new_client": "Dodaj nowego klienta do kontroli dost\u0119pu do sieci" - }, - "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" - }, - "device_tracker": { - "data": { - "detection_time": "Czas w sekundach od momentu, kiedy ostatnio widziano, a\u017c do momentu, kiedy uznano go za nieobecny.", - "ssid_filter": "Wybierz SSIDy do \u015bledzenia klient\u00f3w bezprzewodowych", - "track_clients": "\u015aled\u017a klient\u00f3w sieciowych", - "track_devices": "\u015aled\u017a urz\u0105dzenia sieciowe (urz\u0105dzenia Ubiquiti)", - "track_wired_clients": "Uwzgl\u0119dnij klient\u00f3w sieci przewodowej" - }, - "description": "Konfiguracja \u015bledzenia urz\u0105dze\u0144", - "title": "Opcje UniFi" - }, - "init": { - "data": { - "few": "Kilka", - "many": "Wiele", - "one": "Jeden", - "other": "Inne" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Stw\u00f3rz sensory wykorzystania przepustowo\u015bci przez klient\u00f3w sieciowych" - }, - "description": "Konfiguracja sensora statystyk", - "title": "Opcje UniFi" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/pt-BR.json b/homeassistant/components/unifi/.translations/pt-BR.json deleted file mode 100644 index a57bb33ee7a..00000000000 --- a/homeassistant/components/unifi/.translations/pt-BR.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O site de controle j\u00e1 est\u00e1 configurado", - "user_privilege": "O usu\u00e1rio precisa ser administrador" - }, - "error": { - "faulty_credentials": "Credenciais do usu\u00e1rio inv\u00e1lidas", - "service_unavailable": "Servi\u00e7o indispon\u00edvel" - }, - "step": { - "user": { - "data": { - "host": "Host", - "password": "Senha", - "port": "Porta", - "site": "ID do site", - "username": "Usu\u00e1rio", - "verify_ssl": "Controlador usando certificado apropriado" - }, - "title": "Configurar o Controlador UniFi" - } - }, - "title": "Controlador UniFi" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "detection_time": "Tempo em segundos desde a \u00faltima vez que foi visto at\u00e9 ser considerado afastado", - "track_clients": "Rastrear clientes da rede", - "track_devices": "Rastrear dispositivos de rede (dispositivos Ubiquiti)", - "track_wired_clients": "Incluir clientes de rede com fio" - } - }, - "init": { - "data": { - "one": "um", - "other": "uns" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/pt.json b/homeassistant/components/unifi/.translations/pt.json deleted file mode 100644 index c602a58660b..00000000000 --- a/homeassistant/components/unifi/.translations/pt.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O site do controlador j\u00e1 se encontra configurado", - "user_privilege": "Utilizador tem que ser administrador" - }, - "error": { - "faulty_credentials": "Credenciais do utilizador erradas", - "service_unavailable": "Nenhum servi\u00e7o dispon\u00edvel" - }, - "step": { - "user": { - "data": { - "host": "Servidor", - "password": "Palavra-passe", - "port": "Porto", - "site": "Site ID", - "username": "Nome do utilizador", - "verify_ssl": "Controlador com certificados adequados" - }, - "title": "Configurar o controlador UniFi" - } - }, - "title": "Controlador UniFi" - }, - "options": { - "step": { - "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" - } - }, - "init": { - "data": { - "one": "Vazio", - "other": "Vazios" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Criar sensores de uso de largura de banda para clientes da rede" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/ro.json b/homeassistant/components/unifi/.translations/ro.json deleted file mode 100644 index 99b1ac57e0b..00000000000 --- a/homeassistant/components/unifi/.translations/ro.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "user_privilege": "Utilizatorul trebuie s\u0103 fie administrator" - }, - "error": { - "faulty_credentials": "Credentiale utilizator invalide", - "service_unavailable": "Nici un serviciu disponibil" - }, - "step": { - "user": { - "data": { - "host": "Gazd\u0103", - "password": "Parol\u0103", - "port": "Port", - "username": "Nume de utilizator", - "verify_ssl": "Controler utiliz\u00e2nd certificatul adecvat" - }, - "title": "Configura\u021bi un controler UniFi" - } - }, - "title": "Controler UniFi" - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/ru.json b/homeassistant/components/unifi/.translations/ru.json deleted file mode 100644 index 6cd09a947eb..00000000000 --- a/homeassistant/components/unifi/.translations/ru.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "user_privilege": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c." - }, - "error": { - "faulty_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", - "service_unavailable": "\u0421\u043b\u0443\u0436\u0431\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430.", - "unknown_client_mac": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u043c MAC-\u0430\u0434\u0440\u0435\u0441\u0435." - }, - "step": { - "user": { - "data": { - "host": "\u0425\u043e\u0441\u0442", - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "port": "\u041f\u043e\u0440\u0442", - "site": "ID \u0441\u0430\u0439\u0442\u0430", - "username": "\u041b\u043e\u0433\u0438\u043d", - "verify_ssl": "\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" - }, - "title": "UniFi Controller" - } - }, - "title": "UniFi Controller" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "\u041a\u043b\u0438\u0435\u043d\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430", - "new_client": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430", - "poe_clients": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c POE \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432" - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 UniFi. \u0428\u0430\u0433 2" - }, - "device_tracker": { - "data": { - "detection_time": "\u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c (\u0441\u0435\u043a.), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u041d\u0435 \u0434\u043e\u043c\u0430\".", - "ssid_filter": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 SSID \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432", - "track_clients": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0435\u0442\u0438", - "track_devices": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Ubiquiti)", - "track_wired_clients": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 UniFi. \u0428\u0430\u0433 1" - }, - "init": { - "data": { - "few": "\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e", - "many": "\u043c\u043d\u043e\u0433\u043e", - "one": "\u043e\u0434\u043d\u0438", - "other": "\u0434\u0440\u0443\u0433\u0438\u0435" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "\u0421\u0435\u043d\u0441\u043e\u0440\u044b \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 UniFi. \u0428\u0430\u0433 3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/sl.json b/homeassistant/components/unifi/.translations/sl.json deleted file mode 100644 index a2c37f027b2..00000000000 --- a/homeassistant/components/unifi/.translations/sl.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Nadzornik je \u017ee konfiguriran", - "user_privilege": "Uporabnik mora biti skrbnik" - }, - "error": { - "faulty_credentials": "Napa\u010dni uporabni\u0161ki podatki", - "service_unavailable": "Nobena storitev ni na voljo", - "unknown_client_mac": "Na tem MAC naslovu ni na voljo nobenega odjemalca" - }, - "step": { - "user": { - "data": { - "host": "Gostitelj", - "password": "Geslo", - "port": "Vrata", - "site": "Mesto ID", - "username": "Uporabni\u0161ko ime", - "verify_ssl": "Kontroler uporablja ustrezen certifikat" - }, - "title": "Nastavi UniFi Controller" - } - }, - "title": "UniFi Krmilnik" - }, - "error": { - "unknown_client_mac": "V UniFi na tem naslovu MAC ni na voljo nobenega odjemalca" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "Odjemalci pod nadzorom dostopa do omre\u017eja", - "new_client": "Dodajte novega odjemalca za nadzor dostopa do omre\u017eja" - }, - "description": "Konfigurirajte nadzor odjemalcev \n\n Ustvarite stikala za serijske \u0161tevilke, za katere \u017eelite nadzirati dostop do omre\u017eja.", - "title": "Mo\u017enosti UniFi 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "\u010cas v sekundah od zadnjega videnja na omre\u017eju do odsotnosti", - "ssid_filter": "Izberite SSID-e za sledenje brez\u017ei\u010dnim odjemalcem", - "track_clients": "Sledite odjemalcem omre\u017eja", - "track_devices": "Sledite omre\u017enim napravam (naprave Ubiquiti)", - "track_wired_clients": "Vklju\u010dite kliente iz o\u017ei\u010denega omre\u017eja" - }, - "description": "Konfigurirajte sledenje napravam", - "title": "Mo\u017enosti UniFi 1/3" - }, - "init": { - "data": { - "few": "NEKAJ", - "one": "ENA", - "other": "OSTALO", - "two": "DVA" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Senzorji uporabe pasovne \u0161irine za omre\u017ene odjemalce" - }, - "description": "Konfigurirajte statisti\u010dne senzorje", - "title": "Mo\u017enosti UniFi 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/sv.json b/homeassistant/components/unifi/.translations/sv.json deleted file mode 100644 index dbf5373aa9a..00000000000 --- a/homeassistant/components/unifi/.translations/sv.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Controller-platsen \u00e4r redan konfigurerad", - "user_privilege": "Anv\u00e4ndaren m\u00e5ste vara administrat\u00f6r" - }, - "error": { - "faulty_credentials": "Felaktiga anv\u00e4ndaruppgifter", - "service_unavailable": "Ingen tj\u00e4nst tillg\u00e4nglig" - }, - "step": { - "user": { - "data": { - "host": "V\u00e4rddatorn", - "password": "L\u00f6senord", - "port": "Port", - "site": "Plats-ID", - "username": "Anv\u00e4ndarnamn", - "verify_ssl": "Controller med korrekt certifikat" - }, - "title": "Konfigurera UniFi Controller" - } - }, - "title": "UniFi Controller" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "detection_time": "Tid i sekunder fr\u00e5n senast sett tills den anses borta", - "track_clients": "Sp\u00e5ra n\u00e4tverksklienter", - "track_devices": "Sp\u00e5ra n\u00e4tverksenheter (Ubiquiti-enheter)", - "track_wired_clients": "Inkludera tr\u00e5dbundna n\u00e4tverksklienter" - } - }, - "init": { - "data": { - "one": "Tom", - "other": "Tomma" - } - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Skapa bandbreddsanv\u00e4ndningssensorer f\u00f6r n\u00e4tverksklienter" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/zh-Hans.json b/homeassistant/components/unifi/.translations/zh-Hans.json deleted file mode 100644 index ebed653732f..00000000000 --- a/homeassistant/components/unifi/.translations/zh-Hans.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u63a7\u5236\u5668\u7ad9\u70b9\u5df2\u914d\u7f6e\u5b8c\u6210", - "user_privilege": "\u7528\u6237\u987b\u4e3a\u7ba1\u7406\u5458" - }, - "error": { - "faulty_credentials": "\u9519\u8bef\u7684\u7528\u6237\u51ed\u636e", - "service_unavailable": "\u6ca1\u6709\u53ef\u7528\u7684\u670d\u52a1" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u673a", - "password": "\u5bc6\u7801", - "port": "\u7aef\u53e3", - "site": "\u7ad9\u70b9 ID", - "username": "\u7528\u6237\u540d", - "verify_ssl": "\u4f7f\u7528\u6b63\u786e\u8bc1\u4e66\u7684\u63a7\u5236\u5668" - }, - "title": "\u914d\u7f6e UniFi \u63a7\u5236\u5668" - } - }, - "title": "UniFi \u63a7\u5236\u5668" - }, - "options": { - "step": { - "device_tracker": { - "data": { - "detection_time": "\u8ddd\u79bb\u4e0a\u6b21\u53d1\u73b0\u591a\u5c11\u79d2\u540e\u8ba4\u4e3a\u79bb\u5f00", - "ssid_filter": "\u9009\u62e9\u6240\u8981\u8ffd\u8e2a\u7684\u65e0\u7ebf\u7f51\u7edcSSID", - "track_clients": "\u8ddf\u8e2a\u7f51\u7edc\u5ba2\u6237\u7aef", - "track_devices": "\u8ddf\u8e2a\u7f51\u7edc\u8bbe\u5907\uff08Ubiquiti \u8bbe\u5907\uff09", - "track_wired_clients": "\u5305\u62ec\u6709\u7ebf\u7f51\u7edc\u5ba2\u6237\u7aef" - }, - "description": "\u914d\u7f6e\u8bbe\u5907\u8ddf\u8e2a", - "title": "UniFi \u9009\u9879" - }, - "statistics_sensors": { - "description": "\u914d\u7f6e\u7edf\u8ba1\u4f20\u611f\u5668", - "title": "UniFi \u9009\u9879" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/zh-Hant.json b/homeassistant/components/unifi/.translations/zh-Hant.json deleted file mode 100644 index e91bfca407c..00000000000 --- a/homeassistant/components/unifi/.translations/zh-Hant.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u63a7\u5236\u5668\u4f4d\u5740\u5df2\u7d93\u8a2d\u5b9a", - "user_privilege": "\u4f7f\u7528\u8005\u5fc5\u9808\u70ba\u7ba1\u7406\u54e1\u8eab\u4efd" - }, - "error": { - "faulty_credentials": "\u4f7f\u7528\u8005\u6191\u8b49\u7121\u6548", - "service_unavailable": "\u7121\u670d\u52d9\u53ef\u7528", - "unknown_client_mac": "\u8a72 Mac \u4f4d\u5740\u7121\u53ef\u7528\u5ba2\u6236\u7aef" - }, - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u7aef", - "password": "\u5bc6\u78bc", - "port": "\u901a\u8a0a\u57e0", - "site": "\u4f4d\u5740 ID", - "username": "\u4f7f\u7528\u8005\u540d\u7a31", - "verify_ssl": "\u63a7\u5236\u5668\u4f7f\u7528\u9a57\u8b49" - }, - "title": "\u8a2d\u5b9a UniFi \u63a7\u5236\u5668" - } - }, - "title": "UniFi \u63a7\u5236\u5668" - }, - "error": { - "unknown_client_mac": "\u8a72 Mac \u4f4d\u5740\u7121\u53ef\u7528 UniFi \u5ba2\u6236\u7aef" - }, - "options": { - "step": { - "client_control": { - "data": { - "block_client": "\u7db2\u8def\u5b58\u53d6\u63a7\u5236\u5ba2\u6236\u7aef", - "new_client": "\u65b0\u589e\u9396\u8981\u63a7\u5236\u7db2\u8def\u5b58\u53d6\u7684\u5ba2\u6236\u7aef", - "poe_clients": "\u5141\u8a31 POE \u63a7\u5236\u5ba2\u6236\u7aef" - }, - "description": "\u8a2d\u5b9a\u5ba2\u6236\u7aef\u63a7\u5236\n\n\u65b0\u589e\u9396\u8981\u63a7\u5236\u7db2\u8def\u5b58\u53d6\u7684\u958b\u95dc\u5e8f\u865f\u3002", - "title": "UniFi \u9078\u9805 2/3" - }, - "device_tracker": { - "data": { - "detection_time": "\u6700\u7d42\u51fa\u73fe\u5f8c\u8996\u70ba\u96e2\u958b\u7684\u6642\u9593\uff08\u4ee5\u79d2\u70ba\u55ae\u4f4d\uff09", - "ssid_filter": "\u9078\u64c7\u6240\u8981\u8ffd\u8e64\u7684\u7121\u7dda\u7db2\u8def", - "track_clients": "\u8ffd\u8e64\u7db2\u8def\u5ba2\u6236\u7aef", - "track_devices": "\u8ffd\u8e64\u7db2\u8def\u8a2d\u5099\uff08Ubiquiti \u8a2d\u5099\uff09", - "track_wired_clients": "\u5305\u542b\u6709\u7dda\u7db2\u8def\u5ba2\u6236\u7aef" - }, - "description": "\u8a2d\u5b9a\u8a2d\u5099\u8ffd\u8e64", - "title": "UniFi \u9078\u9805 1/3" - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "\u7db2\u8def\u5ba2\u6236\u7aef\u983b\u5bec\u7528\u91cf\u611f\u61c9\u5668" - }, - "description": "\u8a2d\u5b9a\u7d71\u8a08\u6578\u64da\u611f\u61c9\u5668", - "title": "UniFi \u9078\u9805 3/3" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/unifi/__init__.py b/homeassistant/components/unifi/__init__.py index e9f534360d7..e3225a2d210 100644 --- a/homeassistant/components/unifi/__init__.py +++ b/homeassistant/components/unifi/__init__.py @@ -7,7 +7,7 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC from .config_flow import get_controller_id_from_config_entry -from .const import ATTR_MANUFACTURER, DOMAIN, UNIFI_WIRELESS_CLIENTS +from .const import ATTR_MANUFACTURER, DOMAIN, LOGGER, UNIFI_WIRELESS_CLIENTS from .controller import UniFiController SAVE_DELAY = 10 @@ -42,6 +42,8 @@ async def async_setup_entry(hass, config_entry): hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, controller.shutdown) + LOGGER.debug("UniFi config options %s", config_entry.options) + if controller.mac is None: return True diff --git a/homeassistant/components/unifi/config_flow.py b/homeassistant/components/unifi/config_flow.py index e0bb1c3bb9f..e91001e51be 100644 --- a/homeassistant/components/unifi/config_flow.py +++ b/homeassistant/components/unifi/config_flow.py @@ -19,19 +19,21 @@ from .const import ( CONF_BLOCK_CLIENT, CONF_CONTROLLER, CONF_DETECTION_TIME, + CONF_IGNORE_WIRED_BUG, + CONF_POE_CLIENTS, CONF_SITE_ID, CONF_SSID_FILTER, CONF_TRACK_CLIENTS, CONF_TRACK_DEVICES, CONF_TRACK_WIRED_CLIENTS, CONTROLLER_ID, + DEFAULT_POE_CLIENTS, DOMAIN, LOGGER, ) from .controller import get_controller from .errors import AlreadyConfigured, AuthenticationRequired, CannotConnect -CONF_NEW_CLIENT = "new_client" DEFAULT_PORT = 8443 DEFAULT_SITE_ID = "default" DEFAULT_VERIFY_SSL = False @@ -214,6 +216,10 @@ class UnifiOptionsFlowHandler(config_entries.OptionsFlow): self.controller.option_detection_time.total_seconds() ), ): int, + vol.Optional( + CONF_IGNORE_WIRED_BUG, + default=self.controller.option_ignore_wired_bug, + ): bool, } ), ) @@ -223,40 +229,15 @@ class UnifiOptionsFlowHandler(config_entries.OptionsFlow): errors = {} if user_input is not None: - new_client = user_input.pop(CONF_NEW_CLIENT, None) self.options.update(user_input) - - if new_client: - if ( - new_client in self.controller.api.clients - or new_client in self.controller.api.clients_all - ): - self.options[CONF_BLOCK_CLIENT].append(new_client) - - else: - errors["base"] = "unknown_client_mac" - - else: - return await self.async_step_statistics_sensors() + return await self.async_step_statistics_sensors() clients_to_block = {} - for mac in self.options[CONF_BLOCK_CLIENT]: - - name = None - - for clients in [ - self.controller.api.clients, - self.controller.api.clients_all, - ]: - if mac in clients: - name = f"{clients[mac].name or clients[mac].hostname} ({mac})" - break - - if not name: - name = mac - - clients_to_block[mac] = name + for client in self.controller.api.clients.values(): + clients_to_block[ + client.mac + ] = f"{client.name or client.hostname} ({client.mac})" return self.async_show_form( step_id="client_control", @@ -265,7 +246,10 @@ class UnifiOptionsFlowHandler(config_entries.OptionsFlow): vol.Optional( CONF_BLOCK_CLIENT, default=self.options[CONF_BLOCK_CLIENT] ): cv.multi_select(clients_to_block), - vol.Optional(CONF_NEW_CLIENT): str, + vol.Optional( + CONF_POE_CLIENTS, + default=self.options.get(CONF_POE_CLIENTS, DEFAULT_POE_CLIENTS), + ): bool, } ), errors=errors, diff --git a/homeassistant/components/unifi/const.py b/homeassistant/components/unifi/const.py index fd94601db50..803a892647f 100644 --- a/homeassistant/components/unifi/const.py +++ b/homeassistant/components/unifi/const.py @@ -14,12 +14,16 @@ UNIFI_WIRELESS_CLIENTS = "unifi_wireless_clients" CONF_ALLOW_BANDWIDTH_SENSORS = "allow_bandwidth_sensors" CONF_BLOCK_CLIENT = "block_client" CONF_DETECTION_TIME = "detection_time" +CONF_IGNORE_WIRED_BUG = "ignore_wired_bug" +CONF_POE_CLIENTS = "poe_clients" CONF_TRACK_CLIENTS = "track_clients" CONF_TRACK_DEVICES = "track_devices" CONF_TRACK_WIRED_CLIENTS = "track_wired_clients" CONF_SSID_FILTER = "ssid_filter" DEFAULT_ALLOW_BANDWIDTH_SENSORS = False +DEFAULT_IGNORE_WIRED_BUG = False +DEFAULT_POE_CLIENTS = True DEFAULT_TRACK_CLIENTS = True DEFAULT_TRACK_DEVICES = True DEFAULT_TRACK_WIRED_CLIENTS = True diff --git a/homeassistant/components/unifi/controller.py b/homeassistant/components/unifi/controller.py index 50b758f01af..33e7fc3836b 100644 --- a/homeassistant/components/unifi/controller.py +++ b/homeassistant/components/unifi/controller.py @@ -5,7 +5,14 @@ import ssl from aiohttp import CookieJar import aiounifi -from aiounifi.controller import SIGNAL_CONNECTION_STATE +from aiounifi.controller import ( + DATA_CLIENT, + DATA_CLIENT_REMOVED, + DATA_DEVICE, + DATA_EVENT, + SIGNAL_CONNECTION_STATE, + SIGNAL_DATA, +) from aiounifi.events import WIRELESS_CLIENT_CONNECTED, WIRELESS_GUEST_CONNECTED from aiounifi.websocket import STATE_DISCONNECTED, STATE_RUNNING import async_timeout @@ -24,6 +31,8 @@ from .const import ( CONF_BLOCK_CLIENT, CONF_CONTROLLER, CONF_DETECTION_TIME, + CONF_IGNORE_WIRED_BUG, + CONF_POE_CLIENTS, CONF_SITE_ID, CONF_SSID_FILTER, CONF_TRACK_CLIENTS, @@ -32,6 +41,8 @@ from .const import ( CONTROLLER_ID, DEFAULT_ALLOW_BANDWIDTH_SENSORS, DEFAULT_DETECTION_TIME, + DEFAULT_IGNORE_WIRED_BUG, + DEFAULT_POE_CLIENTS, DEFAULT_TRACK_CLIENTS, DEFAULT_TRACK_DEVICES, DEFAULT_TRACK_WIRED_CLIENTS, @@ -61,6 +72,8 @@ class UniFiController: self._site_name = None self._site_role = None + self.entities = {} + @property def controller_id(self): """Return the controller ID.""" @@ -87,27 +100,20 @@ class UniFiController: return self._site_role @property - def option_allow_bandwidth_sensors(self): - """Config entry option to allow bandwidth sensors.""" - return self.config_entry.options.get( - CONF_ALLOW_BANDWIDTH_SENSORS, DEFAULT_ALLOW_BANDWIDTH_SENSORS - ) + def mac(self): + """Return the mac address of this controller.""" + for client in self.api.clients.values(): + if self.host == client.ip: + return client.mac + return None - @property - def option_block_clients(self): - """Config entry option with list of clients to control network access.""" - return self.config_entry.options.get(CONF_BLOCK_CLIENT, []) + # Device tracker options @property def option_track_clients(self): """Config entry option to not track clients.""" return self.config_entry.options.get(CONF_TRACK_CLIENTS, DEFAULT_TRACK_CLIENTS) - @property - def option_track_devices(self): - """Config entry option to not track devices.""" - return self.config_entry.options.get(CONF_TRACK_DEVICES, DEFAULT_TRACK_DEVICES) - @property def option_track_wired_clients(self): """Config entry option to not track wired clients.""" @@ -115,6 +121,16 @@ class UniFiController: CONF_TRACK_WIRED_CLIENTS, DEFAULT_TRACK_WIRED_CLIENTS ) + @property + def option_track_devices(self): + """Config entry option to not track devices.""" + return self.config_entry.options.get(CONF_TRACK_DEVICES, DEFAULT_TRACK_DEVICES) + + @property + def option_ssid_filter(self): + """Config entry option listing what SSIDs are being used to track clients.""" + return self.config_entry.options.get(CONF_SSID_FILTER, []) + @property def option_detection_time(self): """Config entry option defining number of seconds from last seen to away.""" @@ -125,17 +141,32 @@ class UniFiController: ) @property - def option_ssid_filter(self): - """Config entry option listing what SSIDs are being used to track clients.""" - return self.config_entry.options.get(CONF_SSID_FILTER, []) + def option_ignore_wired_bug(self): + """Config entry option to ignore wired bug.""" + return self.config_entry.options.get( + CONF_IGNORE_WIRED_BUG, DEFAULT_IGNORE_WIRED_BUG + ) + + # Client control options @property - def mac(self): - """Return the mac address of this controller.""" - for client in self.api.clients.values(): - if self.host == client.ip: - return client.mac - return None + def option_poe_clients(self): + """Config entry option to control poe clients.""" + return self.config_entry.options.get(CONF_POE_CLIENTS, DEFAULT_POE_CLIENTS) + + @property + def option_block_clients(self): + """Config entry option with list of clients to control network access.""" + return self.config_entry.options.get(CONF_BLOCK_CLIENT, []) + + # Statistics sensor options + + @property + def option_allow_bandwidth_sensors(self): + """Config entry option to allow bandwidth sensors.""" + return self.config_entry.options.get( + CONF_ALLOW_BANDWIDTH_SENSORS, DEFAULT_ALLOW_BANDWIDTH_SENSORS + ) @callback def async_unifi_signalling_callback(self, signal, data): @@ -154,16 +185,23 @@ class UniFiController: if not self.available: self.hass.loop.call_later(RETRY_TIMER, self.reconnect) - elif signal == "new_data" and data: - if "event" in data: - if data["event"].event in ( + elif signal == SIGNAL_DATA and data: + + if DATA_EVENT in data: + if data[DATA_EVENT].event in ( WIRELESS_CLIENT_CONNECTED, WIRELESS_GUEST_CONNECTED, ): self.update_wireless_clients() - elif "clients" in data or "devices" in data: + + elif DATA_CLIENT in data or DATA_DEVICE in data: async_dispatcher_send(self.hass, self.signal_update) + elif DATA_CLIENT_REMOVED in data: + async_dispatcher_send( + self.hass, self.signal_remove, data[DATA_CLIENT_REMOVED] + ) + @property def signal_reachable(self) -> str: """Integration specific event to signal a change in connection status.""" @@ -174,6 +212,11 @@ class UniFiController: """Event specific per UniFi entry to signal new data.""" return f"unifi-update-{self.controller_id}" + @property + def signal_remove(self): + """Event specific per UniFi entry to signal removal of entities.""" + return f"unifi-remove-{self.controller_id}" + @property def signal_options_update(self): """Event specific per UniFi entry to signal new options.""" @@ -320,6 +363,7 @@ async def get_controller( try: with async_timeout.timeout(10): + await controller.check_unifi_os() await controller.login() return controller diff --git a/homeassistant/components/unifi/device_tracker.py b/homeassistant/components/unifi/device_tracker.py index 07e96a45fce..2ac516fac55 100644 --- a/homeassistant/components/unifi/device_tracker.py +++ b/homeassistant/components/unifi/device_tracker.py @@ -1,10 +1,11 @@ """Track devices using UniFi controllers.""" import logging -from homeassistant.components.device_tracker import DOMAIN as DEVICE_TRACKER_DOMAIN +from homeassistant.components.device_tracker import DOMAIN from homeassistant.components.device_tracker.config_entry import ScannerEntity from homeassistant.components.device_tracker.const import SOURCE_TYPE_ROUTER from homeassistant.components.unifi.config_flow import get_controller_from_config_entry +from homeassistant.components.unifi.unifi_entity_base import UniFiBase from homeassistant.core import callback from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -16,148 +17,73 @@ from .unifi_client import UniFiClient LOGGER = logging.getLogger(__name__) -DEVICE_ATTRIBUTES = [ +CLIENT_CONNECTED_ATTRIBUTES = [ "_is_guest_by_uap", "ap_mac", "authorized", "essid", - "hostname", "ip", "is_11r", "is_guest", - "mac", - "name", "noted", - "oui", "qos_policy_applied", "radio", "radio_proto", - "site_id", "vlan", ] +CLIENT_STATIC_ATTRIBUTES = [ + "hostname", + "mac", + "name", + "oui", +] + +CLIENT_TRACKER = "client" +DEVICE_TRACKER = "device" + async def async_setup_entry(hass, config_entry, async_add_entities): """Set up device tracker for UniFi component.""" controller = get_controller_from_config_entry(hass, config_entry) - tracked = {} - - option_track_clients = controller.option_track_clients - option_track_devices = controller.option_track_devices - option_track_wired_clients = controller.option_track_wired_clients - option_ssid_filter = controller.option_ssid_filter - - registry = await hass.helpers.entity_registry.async_get_registry() + controller.entities[DOMAIN] = {CLIENT_TRACKER: set(), DEVICE_TRACKER: set()} # Restore clients that is not a part of active clients list. - for entity in registry.entities.values(): + entity_registry = await hass.helpers.entity_registry.async_get_registry() + for entity in entity_registry.entities.values(): if ( entity.config_entry_id == config_entry.entry_id - and entity.domain == DEVICE_TRACKER_DOMAIN + and entity.domain == DOMAIN and "-" in entity.unique_id ): mac, _ = entity.unique_id.split("-", 1) - if mac in controller.api.clients or mac not in controller.api.clients_all: continue client = controller.api.clients_all[mac] controller.api.clients.process_raw([client.raw]) + LOGGER.debug( + "Restore disconnected client %s (%s)", entity.entity_id, client.mac, + ) @callback - def update_controller(): + def items_added(): """Update the values of the controller.""" - nonlocal option_track_clients - nonlocal option_track_devices + if controller.option_track_clients or controller.option_track_devices: + add_entities(controller, async_add_entities) - if not option_track_clients and not option_track_devices: - return + for signal in (controller.signal_update, controller.signal_options_update): + controller.listeners.append(async_dispatcher_connect(hass, signal, items_added)) - add_entities(controller, async_add_entities, tracked) - - controller.listeners.append( - async_dispatcher_connect(hass, controller.signal_update, update_controller) - ) - - @callback - def options_updated(): - """Manage entities affected by config entry options.""" - nonlocal option_track_clients - nonlocal option_track_devices - nonlocal option_track_wired_clients - nonlocal option_ssid_filter - - update = False - remove = set() - - for current_option, config_entry_option, tracker_class in ( - (option_track_clients, controller.option_track_clients, UniFiClientTracker), - (option_track_devices, controller.option_track_devices, UniFiDeviceTracker), - ): - if current_option == config_entry_option: - continue - - if config_entry_option: - update = True - else: - for mac, entity in tracked.items(): - if isinstance(entity, tracker_class): - remove.add(mac) - - if ( - controller.option_track_clients - and option_track_wired_clients != controller.option_track_wired_clients - ): - - if controller.option_track_wired_clients: - update = True - else: - for mac, entity in tracked.items(): - if isinstance(entity, UniFiClientTracker) and entity.is_wired: - remove.add(mac) - - if option_ssid_filter != controller.option_ssid_filter: - option_ssid_filter = controller.option_ssid_filter - update = True - - for mac, entity in tracked.items(): - if ( - isinstance(entity, UniFiClientTracker) - and not entity.is_wired - and entity.client.essid not in option_ssid_filter - ): - remove.add(mac) - - option_track_clients = controller.option_track_clients - option_track_devices = controller.option_track_devices - option_track_wired_clients = controller.option_track_wired_clients - - for mac in remove: - entity = tracked.pop(mac) - - if registry.async_is_registered(entity.entity_id): - registry.async_remove(entity.entity_id) - - hass.async_create_task(entity.async_remove()) - - if update: - update_controller() - - controller.listeners.append( - async_dispatcher_connect( - hass, controller.signal_options_update, options_updated - ) - ) - - update_controller() + items_added() @callback -def add_entities(controller, async_add_entities, tracked): +def add_entities(controller, async_add_entities): """Add new tracker entities from the controller.""" - new_tracked = [] + trackers = [] for items, tracker_class, track in ( (controller.api.clients, UniFiClientTracker, controller.option_track_clients), @@ -166,34 +92,38 @@ def add_entities(controller, async_add_entities, tracked): if not track: continue - for item_id in items: + for mac in items: - if item_id in tracked: + if mac in controller.entities[DOMAIN][tracker_class.TYPE]: continue + item = items[mac] + if tracker_class is UniFiClientTracker: - client = items[item_id] - if not controller.option_track_wired_clients and client.is_wired: - continue + if item.is_wired: + if not controller.option_track_wired_clients: + continue + else: + if ( + item.essid + and controller.option_ssid_filter + and item.essid not in controller.option_ssid_filter + ): + continue - if ( - controller.option_ssid_filter - and not client.is_wired - and client.essid not in controller.option_ssid_filter - ): - continue + trackers.append(tracker_class(item, controller)) - tracked[item_id] = tracker_class(items[item_id], controller) - new_tracked.append(tracked[item_id]) - - if new_tracked: - async_add_entities(new_tracked) + if trackers: + async_add_entities(trackers) class UniFiClientTracker(UniFiClient, ScannerEntity): """Representation of a network client.""" + DOMAIN = DOMAIN + TYPE = CLIENT_TRACKER + def __init__(self, client, controller): """Set up tracked client.""" super().__init__(client, controller) @@ -217,14 +147,7 @@ class UniFiClientTracker(UniFiClient, ScannerEntity): """Scheduled callback for update.""" self.is_disconnected = True self.cancel_scheduled_update = None - self.async_schedule_update_ha_state() - - if ( - not self.is_wired - and self.controller.option_ssid_filter - and self.client.essid not in self.controller.option_ssid_filter - ): - return False + self.async_write_ha_state() if (self.is_wired and self.wired_connection) or ( not self.is_wired and self.wireless_connection @@ -245,6 +168,15 @@ class UniFiClientTracker(UniFiClient, ScannerEntity): dt_util.utcnow() + self.controller.option_detection_time, ) + if ( + not self.is_wired + and self.client.essid + and self.controller.option_ssid_filter + and self.client.essid not in self.controller.option_ssid_filter + and not self.cancel_scheduled_update + ): + return False + if self.is_disconnected is not None: return not self.is_disconnected @@ -284,46 +216,64 @@ class UniFiClientTracker(UniFiClient, ScannerEntity): """Return the client state attributes.""" attributes = {} - for variable in DEVICE_ATTRIBUTES: - if variable in self.client.raw: - attributes[variable] = self.client.raw[variable] - attributes["is_wired"] = self.is_wired + for variable in CLIENT_STATIC_ATTRIBUTES + CLIENT_CONNECTED_ATTRIBUTES: + if variable in self.client.raw: + if self.is_disconnected and variable in CLIENT_CONNECTED_ATTRIBUTES: + continue + attributes[variable] = self.client.raw[variable] + return attributes + async def options_updated(self) -> None: + """Config entry options are updated, remove entity if option is disabled.""" + if not self.controller.option_track_clients: + await self.async_remove() -class UniFiDeviceTracker(ScannerEntity): + elif self.is_wired: + if not self.controller.option_track_wired_clients: + await self.async_remove() + else: + if ( + self.controller.option_ssid_filter + and self.client.essid not in self.controller.option_ssid_filter + ): + await self.async_remove() + + +class UniFiDeviceTracker(UniFiBase, ScannerEntity): """Representation of a network infrastructure device.""" + DOMAIN = DOMAIN + TYPE = DEVICE_TRACKER + def __init__(self, device, controller): """Set up tracked device.""" self.device = device - self.controller = controller - self.listeners = [] + super().__init__(controller) + + @property + def mac(self): + """Return MAC of device.""" + return self.device.mac async def async_added_to_hass(self): """Subscribe to device events.""" - LOGGER.debug("New UniFi device tracker %s (%s)", self.name, self.device.mac) + await super().async_added_to_hass() + LOGGER.debug("New device %s (%s)", self.entity_id, self.device.mac) self.device.register_callback(self.async_update_callback) - self.listeners.append( - async_dispatcher_connect( - self.hass, self.controller.signal_reachable, self.async_update_callback - ) - ) async def async_will_remove_from_hass(self) -> None: """Disconnect device object when removed.""" + await super().async_will_remove_from_hass() self.device.remove_callback(self.async_update_callback) - for unsub_dispatcher in self.listeners: - unsub_dispatcher() @callback def async_update_callback(self): """Update the sensor's state.""" - LOGGER.debug("Updating UniFi tracked device %s", self.entity_id) - - self.async_schedule_update_ha_state() + LOGGER.debug("Updating device %s (%s)", self.entity_id, self.device.mac) + self.async_write_ha_state() @property def is_connected(self): @@ -390,7 +340,7 @@ class UniFiDeviceTracker(ScannerEntity): return attributes - @property - def should_poll(self): - """No polling needed.""" - return True + async def options_updated(self) -> None: + """Config entry options are updated, remove entity if option is disabled.""" + if not self.controller.option_track_devices: + await self.async_remove() diff --git a/homeassistant/components/unifi/manifest.json b/homeassistant/components/unifi/manifest.json index 01aa245f608..0a5ba84cdb3 100644 --- a/homeassistant/components/unifi/manifest.json +++ b/homeassistant/components/unifi/manifest.json @@ -3,12 +3,7 @@ "name": "Ubiquiti UniFi", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/unifi", - "requirements": [ - "aiounifi==15" - ], - "dependencies": [], - "codeowners": [ - "@kane610" - ], + "requirements": ["aiounifi==18"], + "codeowners": ["@kane610"], "quality_scale": "platinum" -} \ No newline at end of file +} diff --git a/homeassistant/components/unifi/sensor.py b/homeassistant/components/unifi/sensor.py index 2e82ecb4f6f..964db5820b8 100644 --- a/homeassistant/components/unifi/sensor.py +++ b/homeassistant/components/unifi/sensor.py @@ -1,6 +1,7 @@ """Support for bandwidth sensors with UniFi clients.""" import logging +from homeassistant.components.sensor import DOMAIN from homeassistant.components.unifi.config_flow import get_controller_from_config_entry from homeassistant.const import DATA_MEGABYTES from homeassistant.core import callback @@ -10,6 +11,9 @@ from .unifi_client import UniFiClient LOGGER = logging.getLogger(__name__) +RX_SENSOR = "rx" +TX_SENSOR = "tx" + async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Sensor platform doesn't support configuration through configuration.yaml.""" @@ -18,124 +22,76 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async def async_setup_entry(hass, config_entry, async_add_entities): """Set up sensors for UniFi integration.""" controller = get_controller_from_config_entry(hass, config_entry) - sensors = {} - - option_allow_bandwidth_sensors = controller.option_allow_bandwidth_sensors - - entity_registry = await hass.helpers.entity_registry.async_get_registry() + controller.entities[DOMAIN] = {RX_SENSOR: set(), TX_SENSOR: set()} @callback - def update_controller(): + def items_added(): """Update the values of the controller.""" - nonlocal option_allow_bandwidth_sensors + if controller.option_allow_bandwidth_sensors: + add_entities(controller, async_add_entities) - if not option_allow_bandwidth_sensors: - return + for signal in (controller.signal_update, controller.signal_options_update): + controller.listeners.append(async_dispatcher_connect(hass, signal, items_added)) - add_entities(controller, async_add_entities, sensors) - - controller.listeners.append( - async_dispatcher_connect(hass, controller.signal_update, update_controller) - ) - - @callback - def options_updated(): - """Update the values of the controller.""" - nonlocal option_allow_bandwidth_sensors - - if option_allow_bandwidth_sensors != controller.option_allow_bandwidth_sensors: - option_allow_bandwidth_sensors = controller.option_allow_bandwidth_sensors - - if option_allow_bandwidth_sensors: - update_controller() - - else: - for sensor in sensors.values(): - - if entity_registry.async_is_registered(sensor.entity_id): - entity_registry.async_remove(sensor.entity_id) - - hass.async_create_task(sensor.async_remove()) - - sensors.clear() - - controller.listeners.append( - async_dispatcher_connect( - hass, controller.signal_options_update, options_updated - ) - ) - - update_controller() + items_added() @callback -def add_entities(controller, async_add_entities, sensors): +def add_entities(controller, async_add_entities): """Add new sensor entities from the controller.""" - new_sensors = [] + sensors = [] - for client_id in controller.api.clients: - for direction, sensor_class in ( - ("rx", UniFiRxBandwidthSensor), - ("tx", UniFiTxBandwidthSensor), - ): - item_id = f"{direction}-{client_id}" + for mac in controller.api.clients: + for sensor_class in (UniFiRxBandwidthSensor, UniFiTxBandwidthSensor): + if mac not in controller.entities[DOMAIN][sensor_class.TYPE]: + sensors.append(sensor_class(controller.api.clients[mac], controller)) - if item_id in sensors: - continue - - sensors[item_id] = sensor_class( - controller.api.clients[client_id], controller - ) - new_sensors.append(sensors[item_id]) - - if new_sensors: - async_add_entities(new_sensors) + if sensors: + async_add_entities(sensors) -class UniFiRxBandwidthSensor(UniFiClient): - """Receiving bandwidth sensor.""" +class UniFiBandwidthSensor(UniFiClient): + """UniFi bandwidth sensor base class.""" + + DOMAIN = DOMAIN @property - def state(self): - """Return the state of the sensor.""" - if self.is_wired: - return self.client.wired_rx_bytes / 1000000 - return self.client.raw.get("rx_bytes", 0) / 1000000 - - @property - def name(self): + def name(self) -> str: """Return the name of the client.""" - name = self.client.name or self.client.hostname - return f"{name} RX" + return f"{super().name} {self.TYPE.upper()}" @property - def unique_id(self): - """Return a unique identifier for this bandwidth sensor.""" - return f"rx-{self.client.mac}" - - @property - def unit_of_measurement(self): + def unit_of_measurement(self) -> str: """Return the unit of measurement of this entity.""" return DATA_MEGABYTES + async def options_updated(self) -> None: + """Config entry options are updated, remove entity if option is disabled.""" + if not self.controller.option_allow_bandwidth_sensors: + await self.async_remove() -class UniFiTxBandwidthSensor(UniFiRxBandwidthSensor): + +class UniFiRxBandwidthSensor(UniFiBandwidthSensor): + """Receiving bandwidth sensor.""" + + TYPE = RX_SENSOR + + @property + def state(self) -> int: + """Return the state of the sensor.""" + if self._is_wired: + return self.client.wired_rx_bytes / 1000000 + return self.client.rx_bytes / 1000000 + + +class UniFiTxBandwidthSensor(UniFiBandwidthSensor): """Transmitting bandwidth sensor.""" + TYPE = TX_SENSOR + @property - def state(self): + def state(self) -> int: """Return the state of the sensor.""" - if self.is_wired: + if self._is_wired: return self.client.wired_tx_bytes / 1000000 - return self.client.raw.get("tx_bytes", 0) / 1000000 - - @property - def name(self): - """Return the name of the client.""" - name = self.client.name or self.client.hostname - return f"{name} TX" - - @property - def unique_id(self): - """Return a unique identifier for this bandwidth sensor.""" - return f"tx-{self.client.mac}" + return self.client.tx_bytes / 1000000 diff --git a/homeassistant/components/unifi/strings.json b/homeassistant/components/unifi/strings.json index 58728225de7..6c142d371c9 100644 --- a/homeassistant/components/unifi/strings.json +++ b/homeassistant/components/unifi/strings.json @@ -1,63 +1,58 @@ { - "config": { - "title": "UniFi Controller", - "step": { - "user": { - "title": "Set up UniFi Controller", - "data": { - "host": "Host", - "username": "User name", - "password": "Password", - "port": "Port", - "site": "Site ID", - "verify_ssl": "Controller using proper certificate" - } - } - }, - "error": { - "faulty_credentials": "Bad user credentials", - "service_unavailable": "No service available", - "unknown_client_mac": "No client available on that MAC address" - }, - "abort": { - "already_configured": "Controller site is already configured", - "user_privilege": "User needs to be administrator" - } - }, - "options": { - "step": { - "init": { - "data": {} - }, - "device_tracker": { - "data": { - "detection_time": "Time in seconds from last seen until considered away", - "ssid_filter": "Select SSIDs to track wireless clients on", - "track_clients": "Track network clients", - "track_devices": "Track network devices (Ubiquiti devices)", - "track_wired_clients": "Include wired network clients" - }, - "description": "Configure device tracking", - "title": "UniFi options 1/3" - }, - "client_control": { - "data": { - "block_client": "Network access controlled clients", - "new_client": "Add new client for network access control" - }, - "description": "Configure client controls\n\nCreate switches for serial numbers you want to control network access for.", - "title": "UniFi options 2/3" - }, - "statistics_sensors": { - "data": { - "allow_bandwidth_sensors": "Bandwidth usage sensors for network clients" - }, - "description": "Configure statistics sensors", - "title": "UniFi options 3/3" - } + "config": { + "step": { + "user": { + "title": "Set up UniFi Controller", + "data": { + "host": "Host", + "username": "User name", + "password": "Password", + "port": "Port", + "site": "Site ID", + "verify_ssl": "Controller using proper certificate" } + } }, "error": { - "unknown_client_mac": "No client available in UniFi on that MAC address" + "faulty_credentials": "Bad user credentials", + "service_unavailable": "No service available", + "unknown_client_mac": "No client available on that MAC address" + }, + "abort": { + "already_configured": "Controller site is already configured", + "user_privilege": "User needs to be administrator" } -} \ No newline at end of file + }, + "options": { + "step": { + "init": { "data": {} }, + "device_tracker": { + "data": { + "detection_time": "Time in seconds from last seen until considered away", + "ignore_wired_bug": "Disable UniFi wired bug logic", + "ssid_filter": "Select SSIDs to track wireless clients on", + "track_clients": "Track network clients", + "track_devices": "Track network devices (Ubiquiti devices)", + "track_wired_clients": "Include wired network clients" + }, + "description": "Configure device tracking", + "title": "UniFi options 1/3" + }, + "client_control": { + "data": { + "block_client": "Network access controlled clients", + "poe_clients": "Allow POE control of clients" + }, + "description": "Configure client controls\n\nCreate switches for serial numbers you want to control network access for.", + "title": "UniFi options 2/3" + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Bandwidth usage sensors for network clients" + }, + "description": "Configure statistics sensors", + "title": "UniFi options 3/3" + } + } + } +} diff --git a/homeassistant/components/unifi/switch.py b/homeassistant/components/unifi/switch.py index 0df019de02c..5fb6daf524c 100644 --- a/homeassistant/components/unifi/switch.py +++ b/homeassistant/components/unifi/switch.py @@ -1,7 +1,7 @@ """Support for devices connected to UniFi POE.""" import logging -from homeassistant.components.switch import SwitchDevice +from homeassistant.components.switch import DOMAIN, SwitchDevice from homeassistant.components.unifi.config_flow import get_controller_from_config_entry from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -11,6 +11,9 @@ from .unifi_client import UniFiClient LOGGER = logging.getLogger(__name__) +BLOCK_SWITCH = "block" +POE_SWITCH = "poe" + async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Component doesn't support configuration through configuration.yaml.""" @@ -22,23 +25,20 @@ async def async_setup_entry(hass, config_entry, async_add_entities): Switches are controlling network access and switch ports with POE. """ controller = get_controller_from_config_entry(hass, config_entry) + controller.entities[DOMAIN] = {BLOCK_SWITCH: set(), POE_SWITCH: set()} if controller.site_role != "admin": return - switches = {} switches_off = [] - option_block_clients = controller.option_block_clients - - entity_registry = await hass.helpers.entity_registry.async_get_registry() - # Restore clients that is not a part of active clients list. + entity_registry = await hass.helpers.entity_registry.async_get_registry() for entity in entity_registry.entities.values(): if ( entity.config_entry_id == config_entry.entry_id - and entity.unique_id.startswith("poe-") + and entity.unique_id.startswith(f"{POE_SWITCH}-") ): _, mac = entity.unique_id.split("-", 1) @@ -54,133 +54,93 @@ async def async_setup_entry(hass, config_entry, async_add_entities): continue @callback - def update_controller(): + def items_added(): """Update the values of the controller.""" - add_entities(controller, async_add_entities, switches, switches_off) + if controller.option_block_clients or controller.option_poe_clients: + add_entities(controller, async_add_entities, switches_off) - controller.listeners.append( - async_dispatcher_connect(hass, controller.signal_update, update_controller) - ) + for signal in (controller.signal_update, controller.signal_options_update): + controller.listeners.append(async_dispatcher_connect(hass, signal, items_added)) - @callback - def options_updated(): - """Manage entities affected by config entry options.""" - nonlocal option_block_clients - - update = set() - remove = set() - - if option_block_clients != controller.option_block_clients: - option_block_clients = controller.option_block_clients - - for block_client_id, entity in switches.items(): - if not isinstance(entity, UniFiBlockClientSwitch): - continue - - if entity.client.mac in option_block_clients: - update.add(block_client_id) - else: - remove.add(block_client_id) - - for block_client_id in remove: - entity = switches.pop(block_client_id) - - if entity_registry.async_is_registered(entity.entity_id): - entity_registry.async_remove(entity.entity_id) - - hass.async_create_task(entity.async_remove()) - - if len(update) != len(option_block_clients): - update_controller() - - controller.listeners.append( - async_dispatcher_connect( - hass, controller.signal_options_update, options_updated - ) - ) - - update_controller() + items_added() switches_off.clear() @callback -def add_entities(controller, async_add_entities, switches, switches_off): +def add_entities(controller, async_add_entities, switches_off): """Add new switch entities from the controller.""" - new_switches = [] - devices = controller.api.devices + switches = [] - # block client - for client_id in controller.option_block_clients: + for mac in controller.option_block_clients: - client = None - block_client_id = f"block-{client_id}" - - if block_client_id in switches: + if mac in controller.entities[DOMAIN][BLOCK_SWITCH]: continue - if client_id in controller.api.clients: - client = controller.api.clients[client_id] + client = None - elif client_id in controller.api.clients_all: - client = controller.api.clients_all[client_id] + if mac in controller.api.clients: + client = controller.api.clients[mac] + + elif mac in controller.api.clients_all: + client = controller.api.clients_all[mac] if not client: continue - switches[block_client_id] = UniFiBlockClientSwitch(client, controller) - new_switches.append(switches[block_client_id]) + switches.append(UniFiBlockClientSwitch(client, controller)) - # control POE - for client_id in controller.api.clients: + if controller.option_poe_clients: + devices = controller.api.devices - poe_client_id = f"poe-{client_id}" + for mac in controller.api.clients: - if poe_client_id in switches: - continue + poe_client_id = f"{POE_SWITCH}-{mac}" - client = controller.api.clients[client_id] + if mac in controller.entities[DOMAIN][POE_SWITCH]: + continue - if poe_client_id in switches_off: - pass - # Network device with active POE - elif ( - client_id in controller.wireless_clients - or client.sw_mac not in devices - or not devices[client.sw_mac].ports[client.sw_port].port_poe - or not devices[client.sw_mac].ports[client.sw_port].poe_enable - or controller.mac == client.mac - ): - continue + client = controller.api.clients[mac] - # Multiple POE-devices on same port means non UniFi POE driven switch - multi_clients_on_port = False - for client2 in controller.api.clients.values(): - - if poe_client_id in switches_off: - break - - if ( - client2.is_wired - and client.mac != client2.mac - and client.sw_mac == client2.sw_mac - and client.sw_port == client2.sw_port + if poe_client_id not in switches_off and ( + mac in controller.wireless_clients + or client.sw_mac not in devices + or not devices[client.sw_mac].ports[client.sw_port].port_poe + or not devices[client.sw_mac].ports[client.sw_port].poe_enable + or controller.mac == client.mac ): - multi_clients_on_port = True - break + continue - if multi_clients_on_port: - continue + # Multiple POE-devices on same port means non UniFi POE driven switch + multi_clients_on_port = False + for client2 in controller.api.clients.values(): - switches[poe_client_id] = UniFiPOEClientSwitch(client, controller) - new_switches.append(switches[poe_client_id]) + if poe_client_id in switches_off: + break - if new_switches: - async_add_entities(new_switches) + if ( + client2.is_wired + and client.mac != client2.mac + and client.sw_mac == client2.sw_mac + and client.sw_port == client2.sw_port + ): + multi_clients_on_port = True + break + + if multi_clients_on_port: + continue + + switches.append(UniFiPOEClientSwitch(client, controller)) + + if switches: + async_add_entities(switches) class UniFiPOEClientSwitch(UniFiClient, SwitchDevice, RestoreEntity): """Representation of a client that uses POE.""" + DOMAIN = DOMAIN + TYPE = POE_SWITCH + def __init__(self, client, controller): """Set up POE switch.""" super().__init__(client, controller) @@ -194,7 +154,6 @@ class UniFiPOEClientSwitch(UniFiClient, SwitchDevice, RestoreEntity): await super().async_added_to_hass() state = await self.async_get_last_state() - if state is None: return @@ -207,11 +166,6 @@ class UniFiPOEClientSwitch(UniFiClient, SwitchDevice, RestoreEntity): if not self.client.sw_port: self.client.raw["sw_port"] = state.attributes["port"] - @property - def unique_id(self): - """Return a unique identifier for this switch.""" - return f"poe-{self.client.mac}" - @property def is_on(self): """Return true if POE is active.""" @@ -270,14 +224,17 @@ class UniFiPOEClientSwitch(UniFiClient, SwitchDevice, RestoreEntity): self.client.sw_port, ) + async def options_updated(self) -> None: + """Config entry options are updated, remove entity if option is disabled.""" + if not self.controller.option_poe_clients: + await self.async_remove() + class UniFiBlockClientSwitch(UniFiClient, SwitchDevice): """Representation of a blockable client.""" - @property - def unique_id(self): - """Return a unique identifier for this switch.""" - return f"block-{self.client.mac}" + DOMAIN = DOMAIN + TYPE = BLOCK_SWITCH @property def is_on(self): @@ -298,3 +255,8 @@ class UniFiBlockClientSwitch(UniFiClient, SwitchDevice): if self.is_blocked: return "mdi:network-off" return "mdi:network" + + async def options_updated(self) -> None: + """Config entry options are updated, remove entity if option is disabled.""" + if self.client.mac not in self.controller.option_block_clients: + await self.async_remove() diff --git a/homeassistant/components/unifi/translations/bg.json b/homeassistant/components/unifi/translations/bg.json new file mode 100644 index 00000000000..f99f5ed67e5 --- /dev/null +++ b/homeassistant/components/unifi/translations/bg.json @@ -0,0 +1,42 @@ +{ + "config": { + "abort": { + "already_configured": "\u0421\u0430\u0439\u0442\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "user_privilege": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u0442 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440" + }, + "error": { + "faulty_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438", + "service_unavailable": "\u041d\u044f\u043c\u0430 \u043d\u0430\u043b\u0438\u0447\u043d\u0430 \u0443\u0441\u043b\u0443\u0433\u0430" + }, + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441", + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "port": "\u041f\u043e\u0440\u0442", + "site": "Site ID", + "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435", + "verify_ssl": "\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440\u044a\u0442 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043d\u0430\u0434\u0435\u0436\u0434\u0435\u043d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" + }, + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 UniFi \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "detection_time": "\u0412\u0440\u0435\u043c\u0435 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0438 \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u043e\u0442\u043e \u0432\u0438\u0436\u0434\u0430\u043d\u0435 \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0441\u0447\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u0430\u0442\u043e \u043e\u0442\u0441\u044a\u0441\u0442\u0432\u0430\u0449\u043e", + "track_clients": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0440\u0435\u0436\u043e\u0432\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0438", + "track_devices": "\u041f\u0440\u043e\u0441\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043c\u0440\u0435\u0436\u043e\u0432\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (Ubiquiti \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430)", + "track_wired_clients": "\u0412\u043a\u043b\u044e\u0447\u0435\u0442\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0438 \u0441\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0441 \u043a\u0430\u0431\u0435\u043b" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "\u0421\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0435\u043d\u0437\u043e\u0440\u0438 \u0437\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u043c\u0440\u0435\u0436\u043e\u0432\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0438" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/ca.json b/homeassistant/components/unifi/translations/ca.json new file mode 100644 index 00000000000..6d8b395f2b0 --- /dev/null +++ b/homeassistant/components/unifi/translations/ca.json @@ -0,0 +1,57 @@ +{ + "config": { + "abort": { + "already_configured": "El lloc del controlador ja est\u00e0 configurat", + "user_privilege": "L'usuari ha de ser administrador" + }, + "error": { + "faulty_credentials": "Credencials d'usuari incorrectes", + "service_unavailable": "Servei no disponible", + "unknown_client_mac": "No hi ha cap client disponible en aquesta adre\u00e7a MAC" + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "password": "Contrasenya", + "port": "Port", + "site": "ID del lloc", + "username": "Nom d'usuari", + "verify_ssl": "El controlador est\u00e0 utilitzant un certificat adequat" + }, + "title": "Configuraci\u00f3 del controlador UniFi" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Clients controlats amb acc\u00e9s a la xarxa", + "new_client": "Afegeix un client nou per al control d\u2019acc\u00e9s a la xarxa", + "poe_clients": "Permet control POE dels clients" + }, + "description": "Configura els controls del client \n\nConfigura interruptors per als n\u00fameros de s\u00e8rie als quals vulguis controlar l'acc\u00e9s a la xarxa.", + "title": "Opcions d'UniFi 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Temps (en segons) des de s'ha vist per \u00faltima vegada fins que es considera a fora", + "ssid_filter": "Selecciona els SSID's on fer-hi el seguiment de clients", + "track_clients": "Segueix clients de la xarxa", + "track_devices": "Segueix dispositius de la xarxa (dispositius Ubiquiti)", + "track_wired_clients": "Inclou clients de xarxa per cable" + }, + "description": "Configuraci\u00f3 de seguiment de dispositius", + "title": "Opcions d'UniFi" + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Crea sensors d'\u00fas d'ample de banda per a clients de la xarxa" + }, + "description": "Configuraci\u00f3 dels sensors d\u2019estad\u00edstiques", + "title": "Opcions d'UniFi" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/cs.json b/homeassistant/components/unifi/translations/cs.json new file mode 100644 index 00000000000..c28ca26919c --- /dev/null +++ b/homeassistant/components/unifi/translations/cs.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_configured": "\u0158adi\u010d je ji\u017e nakonfigurov\u00e1n", + "user_privilege": "U\u017eivatel mus\u00ed b\u00fdt spr\u00e1vcem" + }, + "error": { + "faulty_credentials": "Chybn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje", + "service_unavailable": "Slu\u017eba nen\u00ed dostupn\u00e1" + }, + "step": { + "user": { + "data": { + "host": "Hostitel", + "password": "Heslo", + "port": "Port", + "site": "ID s\u00edt\u011b", + "username": "U\u017eivatelsk\u00e9 jm\u00e9no", + "verify_ssl": "\u0158adi\u010d pou\u017e\u00edv\u00e1 spr\u00e1vn\u00fd certifik\u00e1t" + }, + "title": "Nastaven\u00ed UniFi \u0159adi\u010de" + } + } + }, + "options": { + "step": { + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Vytvo\u0159it senzory vyu\u017eit\u00ed \u0161\u00ed\u0159ky p\u00e1sma pro s\u00ed\u0165ov\u00e9 klienty" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/da.json b/homeassistant/components/unifi/translations/da.json new file mode 100644 index 00000000000..a15d25a283d --- /dev/null +++ b/homeassistant/components/unifi/translations/da.json @@ -0,0 +1,53 @@ +{ + "config": { + "abort": { + "already_configured": "Controller site er allerede konfigureret", + "user_privilege": "Bruger skal v\u00e6re administrator" + }, + "error": { + "faulty_credentials": "Ugyldige legitimationsoplysninger", + "service_unavailable": "Service utilg\u00e6ngelig" + }, + "step": { + "user": { + "data": { + "host": "V\u00e6rt", + "password": "Adgangskode", + "port": "Port", + "site": "Site ID", + "username": "Brugernavn", + "verify_ssl": "Controller bruger korrekt certifikat" + }, + "title": "Konfigurer UniFi Controller" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "detection_time": "Tid i sekunder fra sidst set indtil betragtet som v\u00e6k", + "ssid_filter": "V\u00e6lg SSIDer, der skal spores tr\u00e5dl\u00f8se klienter p\u00e5", + "track_clients": "Spor netv\u00e6rksklienter", + "track_devices": "Spor netv\u00e6rksenheder (Ubiquiti-enheder)", + "track_wired_clients": "Inkluder kablede netv\u00e6rksklienter" + }, + "description": "Konfigurer enhedssporing", + "title": "UniFi-indstillinger" + }, + "init": { + "data": { + "one": "EN", + "other": "ANDEN" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "B\u00e5ndbreddeforbrugssensorer for netv\u00e6rksklienter" + }, + "description": "Konfigurer statistiksensorer", + "title": "UniFi-indstillinger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/de.json b/homeassistant/components/unifi/translations/de.json new file mode 100644 index 00000000000..0683f3da594 --- /dev/null +++ b/homeassistant/components/unifi/translations/de.json @@ -0,0 +1,63 @@ +{ + "config": { + "abort": { + "already_configured": "Controller-Site ist bereits konfiguriert", + "user_privilege": "Der Benutzer muss Administrator sein" + }, + "error": { + "faulty_credentials": "Ung\u00fcltige Anmeldeinformationen", + "service_unavailable": "Kein Dienst verf\u00fcgbar", + "unknown_client_mac": "Unter dieser MAC-Adresse ist kein Client verf\u00fcgbar." + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Passwort", + "port": "Port", + "site": "Site-ID", + "username": "Benutzername", + "verify_ssl": "Controller mit ordnungsgem\u00e4ssem Zertifikat" + }, + "title": "UniFi-Controller einrichten" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Clients mit Netzwerkzugriffskontrolle", + "new_client": "F\u00fcgen Sie einen neuen Client f\u00fcr die Netzwerkzugangskontrolle hinzu", + "poe_clients": "POE-Kontrolle von Clients zulassen" + }, + "description": "Konfigurieren Sie Client-Steuerelemente \n\nErstellen Sie Switches f\u00fcr Seriennummern, f\u00fcr die Sie den Netzwerkzugriff steuern m\u00f6chten.", + "title": "UniFi-Optionen 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Zeit in Sekunden vom letzten Gesehenen bis zur Entfernung", + "ssid_filter": "W\u00e4hlen Sie SSIDs zur Verfolgung von drahtlosen Clients aus", + "track_clients": "Nachverfolgen von Netzwerkclients", + "track_devices": "Verfolgen von Netzwerkger\u00e4ten (Ubiquiti-Ger\u00e4te)", + "track_wired_clients": "Einbinden von kabelgebundenen Netzwerk-Clients" + }, + "description": "Konfigurieren Sie die Ger\u00e4teverfolgung", + "title": "UniFi-Optionen 1/3" + }, + "init": { + "data": { + "one": "eins", + "other": "andere" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Bandbreitennutzungssensoren f\u00fcr Netzwerkclients" + }, + "description": "Konfigurieren Sie Statistiksensoren", + "title": "UniFi-Optionen 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/en.json b/homeassistant/components/unifi/translations/en.json new file mode 100644 index 00000000000..618c393b7aa --- /dev/null +++ b/homeassistant/components/unifi/translations/en.json @@ -0,0 +1,58 @@ +{ + "config": { + "abort": { + "already_configured": "Controller site is already configured", + "user_privilege": "User needs to be administrator" + }, + "error": { + "faulty_credentials": "Bad user credentials", + "service_unavailable": "No service available", + "unknown_client_mac": "No client available on that MAC address" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Port", + "site": "Site ID", + "username": "User name", + "verify_ssl": "Controller using proper certificate" + }, + "title": "Set up UniFi Controller" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Network access controlled clients", + "new_client": "Add new client for network access control", + "poe_clients": "Allow POE control of clients" + }, + "description": "Configure client controls\n\nCreate switches for serial numbers you want to control network access for.", + "title": "UniFi options 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Time in seconds from last seen until considered away", + "ignore_wired_bug": "Disable UniFi wired bug logic", + "ssid_filter": "Select SSIDs to track wireless clients on", + "track_clients": "Track network clients", + "track_devices": "Track network devices (Ubiquiti devices)", + "track_wired_clients": "Include wired network clients" + }, + "description": "Configure device tracking", + "title": "UniFi options 1/3" + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Bandwidth usage sensors for network clients" + }, + "description": "Configure statistics sensors", + "title": "UniFi options 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/es-419.json b/homeassistant/components/unifi/translations/es-419.json new file mode 100644 index 00000000000..ac50051b6c8 --- /dev/null +++ b/homeassistant/components/unifi/translations/es-419.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "El sitio del controlador ya est\u00e1 configurado", + "user_privilege": "El usuario necesita ser administrador" + }, + "error": { + "faulty_credentials": "Credenciales de usuario incorrectas", + "service_unavailable": "No hay servicio disponible" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Contrase\u00f1a", + "port": "Puerto", + "site": "ID del sitio", + "username": "Nombre de usuario", + "verify_ssl": "Controlador usando el certificado apropiado" + }, + "title": "Configurar el controlador UniFi" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/es.json b/homeassistant/components/unifi/translations/es.json new file mode 100644 index 00000000000..dbced017d77 --- /dev/null +++ b/homeassistant/components/unifi/translations/es.json @@ -0,0 +1,64 @@ +{ + "config": { + "abort": { + "already_configured": "El sitio del controlador ya est\u00e1 configurado", + "user_privilege": "El usuario debe ser administrador" + }, + "error": { + "faulty_credentials": "Credenciales de usuario incorrectas", + "service_unavailable": "Servicio No disponible", + "unknown_client_mac": "Ning\u00fan cliente disponible en esa direcci\u00f3n MAC" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Contrase\u00f1a", + "port": "Puerto", + "site": "ID del sitio", + "username": "Nombre de usuario", + "verify_ssl": "Controlador usando el certificado adecuado" + }, + "title": "Configurar el controlador UniFi" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Clientes con acceso controlado a la red", + "new_client": "A\u00f1adir nuevo cliente para el control de acceso a la red", + "poe_clients": "Permitir control PoE de clientes" + }, + "description": "Configurar controles de cliente\n\nCrea conmutadores para los n\u00fameros de serie para los que deseas controlar el acceso a la red.", + "title": "Opciones UniFi 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Tiempo en segundos desde la \u00faltima vez que se vio hasta considerarlo desconectado", + "ignore_wired_bug": "Desactivar la l\u00f3gica para el bug cableado de UniFi", + "ssid_filter": "Seleccione los SSIDs para realizar seguimiento de clientes inal\u00e1mbricos", + "track_clients": "Seguimiento de los clientes de red", + "track_devices": "Rastree dispositivos de red (dispositivos Ubiquiti)", + "track_wired_clients": "Incluir clientes de red cableada" + }, + "description": "Configurar dispositivo de seguimiento", + "title": "Opciones UniFi 1/3" + }, + "init": { + "data": { + "one": "vac\u00edo", + "other": "vac\u00edo" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Crear sensores para monitorizar uso de ancho de banda de clientes de red" + }, + "description": "Configurar estad\u00edsticas de los sensores", + "title": "Opciones UniFi 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/fr.json b/homeassistant/components/unifi/translations/fr.json new file mode 100644 index 00000000000..007f06b1c8e --- /dev/null +++ b/homeassistant/components/unifi/translations/fr.json @@ -0,0 +1,60 @@ +{ + "config": { + "abort": { + "already_configured": "Le contr\u00f4leur est d\u00e9j\u00e0 configur\u00e9", + "user_privilege": "L'utilisateur doit \u00eatre administrateur" + }, + "error": { + "faulty_credentials": "Mauvaises informations d'identification de l'utilisateur", + "service_unavailable": "Aucun service disponible", + "unknown_client_mac": "Aucun client disponible sur cette adresse MAC" + }, + "step": { + "user": { + "data": { + "host": "H\u00f4te", + "password": "Mot de passe", + "port": "Port", + "site": "ID du site", + "username": "Nom d'utilisateur", + "verify_ssl": "Contr\u00f4leur utilisant un certificat appropri\u00e9" + }, + "title": "Configurer le contr\u00f4leur UniFi" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Clients contr\u00f4l\u00e9s par acc\u00e8s r\u00e9seau", + "new_client": "Ajouter un nouveau client pour le contr\u00f4le d'acc\u00e8s au r\u00e9seau" + }, + "title": "Options UniFi 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Temps en secondes depuis la derni\u00e8re vue avant de consid\u00e9rer comme absent", + "track_clients": "Suivre les clients du r\u00e9seau", + "track_devices": "Suivre les p\u00e9riph\u00e9riques r\u00e9seau (p\u00e9riph\u00e9riques Ubiquiti)", + "track_wired_clients": "Inclure les clients du r\u00e9seau filaire" + }, + "description": "Configurer le suivi des appareils", + "title": "Options UniFi 1/3" + }, + "init": { + "data": { + "one": "Vide", + "other": "Vide" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Cr\u00e9er des capteurs d'utilisation de la bande passante pour les clients r\u00e9seau" + }, + "description": "Configurer des capteurs de statistiques", + "title": "Options UniFi 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/hr.json b/homeassistant/components/unifi/translations/hr.json similarity index 100% rename from homeassistant/components/unifi/.translations/hr.json rename to homeassistant/components/unifi/translations/hr.json diff --git a/homeassistant/components/unifi/translations/hu.json b/homeassistant/components/unifi/translations/hu.json new file mode 100644 index 00000000000..49bab5225d9 --- /dev/null +++ b/homeassistant/components/unifi/translations/hu.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "user_privilege": "A felhaszn\u00e1l\u00f3nak rendszergazd\u00e1nak kell lennie" + }, + "error": { + "faulty_credentials": "Rossz felhaszn\u00e1l\u00f3i hiteles\u00edt\u0151 adatok", + "service_unavailable": "Nincs el\u00e9rhet\u0151 szolg\u00e1ltat\u00e1s" + }, + "step": { + "user": { + "data": { + "host": "Hoszt", + "password": "Jelsz\u00f3", + "port": "Port", + "site": "Site azonos\u00edt\u00f3", + "username": "Felhaszn\u00e1l\u00f3n\u00e9v", + "verify_ssl": "Vez\u00e9rl\u0151 megfelel\u0151 tan\u00fas\u00edtv\u00e1nnyal" + }, + "title": "UniFi vez\u00e9rl\u0151 be\u00e1ll\u00edt\u00e1sa" + } + } + }, + "options": { + "step": { + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "S\u00e1vsz\u00e9less\u00e9g-haszn\u00e1lati \u00e9rz\u00e9kel\u0151k l\u00e9trehoz\u00e1sa a h\u00e1l\u00f3zati \u00fcgyfelek sz\u00e1m\u00e1ra" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/it.json b/homeassistant/components/unifi/translations/it.json new file mode 100644 index 00000000000..cde18ca4029 --- /dev/null +++ b/homeassistant/components/unifi/translations/it.json @@ -0,0 +1,64 @@ +{ + "config": { + "abort": { + "already_configured": "Il sito del Controller \u00e8 gi\u00e0 configurato", + "user_privilege": "L'utente deve essere amministratore" + }, + "error": { + "faulty_credentials": "Credenziali utente non valide", + "service_unavailable": "Servizio non disponibile", + "unknown_client_mac": "Nessun client disponibile su quell'indirizzo MAC" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Password", + "port": "Porta", + "site": "ID del sito", + "username": "Nome utente", + "verify_ssl": "Il Controller sta utilizzando il certificato corretto" + }, + "title": "Configura l'UniFi Controller" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Client controllati per l'accesso alla rete", + "new_client": "Aggiungere un nuovo client per il controllo dell'accesso alla rete", + "poe_clients": "Consentire il controllo POE dei client" + }, + "description": "Configurare i controlli client \n\nCreare interruttori per i numeri di serie dei quali si desidera controllare l'accesso alla rete.", + "title": "Opzioni UniFi 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Tempo in secondi dall'ultima volta che viene visto fino a quando non \u00e8 considerato lontano", + "ignore_wired_bug": "Disattivare la logica dei bug cablati UniFi", + "ssid_filter": "Selezionare gli SSID su cui tracciare i client wireless", + "track_clients": "Traccia i client di rete", + "track_devices": "Tracciare i dispositivi di rete (dispositivi Ubiquiti)", + "track_wired_clients": "Includi i client di rete cablata" + }, + "description": "Configurare il tracciamento del dispositivo", + "title": "Opzioni UniFi 1/3" + }, + "init": { + "data": { + "one": "uno", + "other": "altri" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Sensori di utilizzo della larghezza di banda per i client di rete" + }, + "description": "Configurare i sensori delle statistiche", + "title": "Opzioni UniFi 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/ko.json b/homeassistant/components/unifi/translations/ko.json new file mode 100644 index 00000000000..020a5807f30 --- /dev/null +++ b/homeassistant/components/unifi/translations/ko.json @@ -0,0 +1,57 @@ +{ + "config": { + "abort": { + "already_configured": "\ucee8\ud2b8\ub864\ub7ec \uc0ac\uc774\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "user_privilege": "\uc0ac\uc6a9\uc790\ub294 \uad00\ub9ac\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4" + }, + "error": { + "faulty_credentials": "\uc0ac\uc6a9\uc790 \uc790\uaca9\uc99d\uba85\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "service_unavailable": "\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc11c\ube44\uc2a4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4", + "unknown_client_mac": "\ud574\ub2f9 MAC \uc8fc\uc18c\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8", + "site": "\uc0ac\uc774\ud2b8 ID", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984", + "verify_ssl": "\uc62c\ubc14\ub978 \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\ub294 \ucee8\ud2b8\ub864\ub7ec" + }, + "title": "UniFi \ucee8\ud2b8\ub864\ub7ec \uc124\uc815" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "\ub124\ud2b8\uc6cc\ud06c \uc561\uc138\uc2a4 \uc81c\uc5b4 \ud074\ub77c\uc774\uc5b8\ud2b8", + "new_client": "\ub124\ud2b8\uc6cc\ud06c \uc561\uc138\uc2a4 \uc81c\uc5b4\ub97c \uc704\ud55c \uc0c8\ub85c\uc6b4 \ud074\ub77c\uc774\uc5b8\ud2b8 \ucd94\uac00", + "poe_clients": "\ud074\ub77c\uc774\uc5b8\ud2b8\uc758 POE \uc81c\uc5b4 \ud5c8\uc6a9" + }, + "description": "\ud074\ub77c\uc774\uc5b8\ud2b8 \ucee8\ud2b8\ub864 \uad6c\uc131 \n\n\ub124\ud2b8\uc6cc\ud06c \uc561\uc138\uc2a4\ub97c \uc81c\uc5b4\ud558\ub824\ub294 \uc2dc\ub9ac\uc5bc \ubc88\ud638\uc5d0 \ub300\ud55c \uc2a4\uc704\uce58\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.", + "title": "UniFi \uc635\uc158 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ud655\uc778\ub41c \uc2dc\uac04\ubd80\ud130 \uc678\ucd9c \uc0c1\ud0dc\ub85c \uac04\uc8fc\ub418\ub294 \uc2dc\uac04 (\ucd08)", + "ssid_filter": "\ubb34\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ucd94\uc801\ud558\ub824\uba74 SSID\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694", + "track_clients": "\ub124\ud2b8\uc6cc\ud06c \ud074\ub77c\uc774\uc5b8\ud2b8 \ucd94\uc801 \ub300\uc0c1", + "track_devices": "\ub124\ud2b8\uc6cc\ud06c \uae30\uae30 \ucd94\uc801 (Ubiquiti \uae30\uae30)", + "track_wired_clients": "\uc720\uc120 \ub124\ud2b8\uc6cc\ud06c \ud074\ub77c\uc774\uc5b8\ud2b8 \ud3ec\ud568" + }, + "description": "\uae30\uae30 \ucd94\uc801 \uad6c\uc131", + "title": "UniFi \uc635\uc158 1/3" + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "\ub124\ud2b8\uc6cc\ud06c \ud074\ub77c\uc774\uc5b8\ud2b8 \ub300\uc5ed\ud3ed \uc0ac\uc6a9\ub7c9 \uc13c\uc11c" + }, + "description": "\ud1b5\uacc4 \uc13c\uc11c \uad6c\uc131", + "title": "UniFi \uc635\uc158 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/lb.json b/homeassistant/components/unifi/translations/lb.json new file mode 100644 index 00000000000..901cde0dab4 --- /dev/null +++ b/homeassistant/components/unifi/translations/lb.json @@ -0,0 +1,64 @@ +{ + "config": { + "abort": { + "already_configured": "Kontroller Site ass scho konfigur\u00e9iert", + "user_privilege": "Benotzer muss een Administrator sinn" + }, + "error": { + "faulty_credentials": "Ong\u00eblteg Login Informatioune", + "service_unavailable": "Keen Service disponibel", + "unknown_client_mac": "Kee Cliwent mat der MAC Adress disponibel" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Passwuert", + "port": "Port", + "site": "Site ID", + "username": "Benotzer", + "verify_ssl": "Kontroller benotzt g\u00ebltegen Zertifikat" + }, + "title": "Unifi Kontroller ariichten" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Netzwierk Zougang kontroll\u00e9iert Clienten", + "new_client": "Neie Client fir Netzwierk Zougang Kontroll b\u00e4isetzen", + "poe_clients": "POE Kontroll vun Clienten erlaben" + }, + "description": "Client Kontroll konfigur\u00e9ieren\n\nErstell Schalter fir Serienummer d\u00e9i sollen fir Netzwierk Zougangs Kontroll kontroll\u00e9iert ginn.", + "title": "UniFi Optiounen 2/3" + }, + "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", + "track_wired_clients": "Kabel Netzwierk Cliente abez\u00e9ien" + }, + "description": "Apparate verfollegen ariichten", + "title": "UniFi Optiounen 1/3" + }, + "init": { + "data": { + "one": "Een", + "other": "M\u00e9i" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Bandbreet Benotzung Sensore fir Netzwierk Cliente" + }, + "description": "Statistik Sensoren konfigur\u00e9ieren", + "title": "UniFi Optiounen 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/nl.json b/homeassistant/components/unifi/translations/nl.json new file mode 100644 index 00000000000..e55ae8fd493 --- /dev/null +++ b/homeassistant/components/unifi/translations/nl.json @@ -0,0 +1,53 @@ +{ + "config": { + "abort": { + "already_configured": "Controller site is al geconfigureerd", + "user_privilege": "Gebruiker moet beheerder zijn" + }, + "error": { + "faulty_credentials": "Foutieve gebruikersgegevens", + "service_unavailable": "Geen service beschikbaar" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Wachtwoord", + "port": "Poort", + "site": "Site ID", + "username": "Gebruikersnaam", + "verify_ssl": "Controller gebruik van het juiste certificaat" + }, + "title": "Stel de UniFi-controller in" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "poe_clients": "Sta POE-controle van gebruikers toe" + } + }, + "device_tracker": { + "data": { + "detection_time": "Tijd in seconden vanaf laatst gezien tot beschouwd als weg", + "track_clients": "Volg netwerkclients", + "track_devices": "Netwerkapparaten volgen (Ubiquiti-apparaten)", + "track_wired_clients": "Inclusief bedrade netwerkcli\u00ebnten" + } + }, + "init": { + "data": { + "one": "Leeg", + "other": "Leeg" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Maak bandbreedtegebruiksensoren voor netwerkclients" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/nn.json b/homeassistant/components/unifi/translations/nn.json new file mode 100644 index 00000000000..7c129cba3af --- /dev/null +++ b/homeassistant/components/unifi/translations/nn.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "username": "Brukarnamn" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/no.json b/homeassistant/components/unifi/translations/no.json new file mode 100644 index 00000000000..f1979b7fb97 --- /dev/null +++ b/homeassistant/components/unifi/translations/no.json @@ -0,0 +1,58 @@ +{ + "config": { + "abort": { + "already_configured": "Kontroller nettstedet er allerede konfigurert", + "user_privilege": "Bruker m\u00e5 v\u00e6re administrator" + }, + "error": { + "faulty_credentials": "Ugyldig brukerlegitimasjon", + "service_unavailable": "Ingen tjeneste tilgjengelig", + "unknown_client_mac": "Ingen klient tilgjengelig p\u00e5 den MAC-adressen" + }, + "step": { + "user": { + "data": { + "host": "Vert", + "password": "Passord", + "port": "", + "site": "Nettsted-ID", + "username": "Brukernavn", + "verify_ssl": "Kontroller bruker riktig sertifikat" + }, + "title": "Sett opp UniFi kontroller" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Nettverkskontrollerte klienter", + "new_client": "Legg til ny klient for nettverkstilgangskontroll", + "poe_clients": "Tillat POE-kontroll av klienter" + }, + "description": "Konfigurere klient-kontroller\n\nOpprette brytere for serienumre du \u00f8nsker \u00e5 kontrollere tilgang til nettverk for.", + "title": "UniFi-alternativ 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "Tid i sekunder fra sist sett til den ble ansett borte", + "ignore_wired_bug": "Deaktiver UniFi kablet feillogikk", + "ssid_filter": "Velg SSID-er for \u00e5 spore tr\u00e5dl\u00f8se klienter p\u00e5", + "track_clients": "Spor nettverksklienter", + "track_devices": "Spore nettverksenheter (Ubiquiti-enheter)", + "track_wired_clients": "Inkluder kablede nettverksklienter" + }, + "description": "Konfigurere enhetssporing", + "title": "UniFi-alternativ 1/3" + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "B\u00e5ndbreddebrukssensorer for nettverksklienter" + }, + "description": "Konfigurer statistikk sensorer", + "title": "UniFi-alternativ 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/pl.json b/homeassistant/components/unifi/translations/pl.json new file mode 100644 index 00000000000..db35a0b3c6a --- /dev/null +++ b/homeassistant/components/unifi/translations/pl.json @@ -0,0 +1,65 @@ +{ + "config": { + "abort": { + "already_configured": "Witryna kontrolera jest ju\u017c skonfigurowana.", + "user_privilege": "U\u017cytkownik musi by\u0107 administratorem" + }, + "error": { + "faulty_credentials": "B\u0142\u0119dne dane uwierzytelniaj\u0105ce", + "service_unavailable": "Brak dost\u0119pnych us\u0142ug", + "unknown_client_mac": "Brak klienta z tym adresem MAC" + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o", + "port": "Port", + "site": "Identyfikator witryny", + "username": "Nazwa u\u017cytkownika", + "verify_ssl": "Kontroler u\u017cywa prawid\u0142owego certyfikatu" + }, + "title": "Konfiguracja kontrolera UniFi" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Klienci z kontrol\u0105 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" + }, + "device_tracker": { + "data": { + "detection_time": "Czas w sekundach od momentu, kiedy ostatnio widziano, a\u017c do momentu, kiedy uznano go za nieobecny.", + "ssid_filter": "Wybierz SSIDy do \u015bledzenia klient\u00f3w bezprzewodowych", + "track_clients": "\u015aled\u017a klient\u00f3w sieciowych", + "track_devices": "\u015aled\u017a urz\u0105dzenia sieciowe (urz\u0105dzenia Ubiquiti)", + "track_wired_clients": "Uwzgl\u0119dnij klient\u00f3w sieci przewodowej" + }, + "description": "Konfiguracja \u015bledzenia urz\u0105dze\u0144", + "title": "Opcje UniFi" + }, + "init": { + "data": { + "few": "Kilka", + "many": "Wiele", + "one": "Jeden", + "other": "Inne" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Stw\u00f3rz sensory wykorzystania przepustowo\u015bci przez klient\u00f3w sieciowych" + }, + "description": "Konfiguracja sensora statystyk", + "title": "Opcje UniFi" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/pt-BR.json b/homeassistant/components/unifi/translations/pt-BR.json new file mode 100644 index 00000000000..6372ed941db --- /dev/null +++ b/homeassistant/components/unifi/translations/pt-BR.json @@ -0,0 +1,43 @@ +{ + "config": { + "abort": { + "already_configured": "O site de controle j\u00e1 est\u00e1 configurado", + "user_privilege": "O usu\u00e1rio precisa ser administrador" + }, + "error": { + "faulty_credentials": "Credenciais do usu\u00e1rio inv\u00e1lidas", + "service_unavailable": "Servi\u00e7o indispon\u00edvel" + }, + "step": { + "user": { + "data": { + "host": "Host", + "password": "Senha", + "port": "Porta", + "site": "ID do site", + "username": "Usu\u00e1rio", + "verify_ssl": "Controlador usando certificado apropriado" + }, + "title": "Configurar o Controlador UniFi" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "detection_time": "Tempo em segundos desde a \u00faltima vez que foi visto at\u00e9 ser considerado afastado", + "track_clients": "Rastrear clientes da rede", + "track_devices": "Rastrear dispositivos de rede (dispositivos Ubiquiti)", + "track_wired_clients": "Incluir clientes de rede com fio" + } + }, + "init": { + "data": { + "one": "um", + "other": "uns" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/pt.json b/homeassistant/components/unifi/translations/pt.json new file mode 100644 index 00000000000..123385313e9 --- /dev/null +++ b/homeassistant/components/unifi/translations/pt.json @@ -0,0 +1,53 @@ +{ + "config": { + "abort": { + "already_configured": "O site do controlador j\u00e1 se encontra configurado", + "user_privilege": "Utilizador tem que ser administrador" + }, + "error": { + "faulty_credentials": "Credenciais do utilizador erradas", + "service_unavailable": "Nenhum servi\u00e7o dispon\u00edvel" + }, + "step": { + "user": { + "data": { + "host": "Servidor", + "password": "Palavra-passe", + "port": "Porto", + "site": "Site ID", + "username": "Nome do utilizador", + "verify_ssl": "Controlador com certificados adequados" + }, + "title": "Configurar o controlador UniFi" + } + } + }, + "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": { + "one": "Vazio", + "other": "Vazios" + } + }, + "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" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/ro.json b/homeassistant/components/unifi/translations/ro.json new file mode 100644 index 00000000000..090aeab1a7c --- /dev/null +++ b/homeassistant/components/unifi/translations/ro.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "user_privilege": "Utilizatorul trebuie s\u0103 fie administrator" + }, + "error": { + "faulty_credentials": "Credentiale utilizator invalide", + "service_unavailable": "Nici un serviciu disponibil" + }, + "step": { + "user": { + "data": { + "host": "Gazd\u0103", + "password": "Parol\u0103", + "port": "Port", + "username": "Nume de utilizator", + "verify_ssl": "Controler utiliz\u00e2nd certificatul adecvat" + }, + "title": "Configura\u021bi un controler UniFi" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/ru.json b/homeassistant/components/unifi/translations/ru.json new file mode 100644 index 00000000000..ae3e5c6e3f4 --- /dev/null +++ b/homeassistant/components/unifi/translations/ru.json @@ -0,0 +1,65 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "user_privilege": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c." + }, + "error": { + "faulty_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.", + "service_unavailable": "\u0421\u043b\u0443\u0436\u0431\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430.", + "unknown_client_mac": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u043c MAC-\u0430\u0434\u0440\u0435\u0441\u0435." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "port": "\u041f\u043e\u0440\u0442", + "site": "ID \u0441\u0430\u0439\u0442\u0430", + "username": "\u041b\u043e\u0433\u0438\u043d", + "verify_ssl": "\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442" + }, + "title": "UniFi Controller" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "\u041a\u043b\u0438\u0435\u043d\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430", + "new_client": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430", + "poe_clients": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c POE \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.\n\n\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0442\u0438.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 UniFi. \u0428\u0430\u0433 2" + }, + "device_tracker": { + "data": { + "detection_time": "\u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c (\u0441\u0435\u043a.), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u041d\u0435 \u0434\u043e\u043c\u0430\".", + "ssid_filter": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 SSID \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432", + "track_clients": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0441\u0435\u0442\u0438", + "track_devices": "\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Ubiquiti)", + "track_wired_clients": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 UniFi. \u0428\u0430\u0433 1" + }, + "init": { + "data": { + "few": "\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e", + "many": "\u043c\u043d\u043e\u0433\u043e", + "one": "\u043e\u0434\u043d\u0438", + "other": "\u0434\u0440\u0443\u0433\u0438\u0435" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "\u0421\u0435\u043d\u0441\u043e\u0440\u044b \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 UniFi. \u0428\u0430\u0433 3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/sl.json b/homeassistant/components/unifi/translations/sl.json new file mode 100644 index 00000000000..ec5a1869423 --- /dev/null +++ b/homeassistant/components/unifi/translations/sl.json @@ -0,0 +1,65 @@ +{ + "config": { + "abort": { + "already_configured": "Nadzornik je \u017ee konfiguriran", + "user_privilege": "Uporabnik mora biti skrbnik" + }, + "error": { + "faulty_credentials": "Napa\u010dni uporabni\u0161ki podatki", + "service_unavailable": "Nobena storitev ni na voljo", + "unknown_client_mac": "Na tem MAC naslovu ni na voljo nobenega odjemalca" + }, + "step": { + "user": { + "data": { + "host": "Gostitelj", + "password": "Geslo", + "port": "Vrata", + "site": "Mesto ID", + "username": "Uporabni\u0161ko ime", + "verify_ssl": "Kontroler uporablja ustrezen certifikat" + }, + "title": "Nastavi UniFi Controller" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "Odjemalci pod nadzorom dostopa do omre\u017eja", + "new_client": "Dodajte novega odjemalca za nadzor dostopa do omre\u017eja", + "poe_clients": "Dovoli POE nadzor strank" + }, + "description": "Konfigurirajte nadzor odjemalcev \n\n Ustvarite stikala za serijske \u0161tevilke, za katere \u017eelite nadzirati dostop do omre\u017eja.", + "title": "Mo\u017enosti UniFi 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "\u010cas v sekundah od zadnjega videnja na omre\u017eju do odsotnosti", + "ssid_filter": "Izberite SSID-e za sledenje brez\u017ei\u010dnim odjemalcem", + "track_clients": "Sledite odjemalcem omre\u017eja", + "track_devices": "Sledite omre\u017enim napravam (naprave Ubiquiti)", + "track_wired_clients": "Vklju\u010dite kliente iz o\u017ei\u010denega omre\u017eja" + }, + "description": "Konfigurirajte sledenje napravam", + "title": "Mo\u017enosti UniFi 1/3" + }, + "init": { + "data": { + "few": "NEKAJ", + "one": "ENA", + "other": "OSTALO", + "two": "DVA" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Senzorji uporabe pasovne \u0161irine za omre\u017ene odjemalce" + }, + "description": "Konfigurirajte statisti\u010dne senzorje", + "title": "Mo\u017enosti UniFi 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/sv.json b/homeassistant/components/unifi/translations/sv.json new file mode 100644 index 00000000000..a41503b5ea2 --- /dev/null +++ b/homeassistant/components/unifi/translations/sv.json @@ -0,0 +1,48 @@ +{ + "config": { + "abort": { + "already_configured": "Controller-platsen \u00e4r redan konfigurerad", + "user_privilege": "Anv\u00e4ndaren m\u00e5ste vara administrat\u00f6r" + }, + "error": { + "faulty_credentials": "Felaktiga anv\u00e4ndaruppgifter", + "service_unavailable": "Ingen tj\u00e4nst tillg\u00e4nglig" + }, + "step": { + "user": { + "data": { + "host": "V\u00e4rddatorn", + "password": "L\u00f6senord", + "port": "Port", + "site": "Plats-ID", + "username": "Anv\u00e4ndarnamn", + "verify_ssl": "Controller med korrekt certifikat" + }, + "title": "Konfigurera UniFi Controller" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "detection_time": "Tid i sekunder fr\u00e5n senast sett tills den anses borta", + "track_clients": "Sp\u00e5ra n\u00e4tverksklienter", + "track_devices": "Sp\u00e5ra n\u00e4tverksenheter (Ubiquiti-enheter)", + "track_wired_clients": "Inkludera tr\u00e5dbundna n\u00e4tverksklienter" + } + }, + "init": { + "data": { + "one": "Tom", + "other": "Tomma" + } + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "Skapa bandbreddsanv\u00e4ndningssensorer f\u00f6r n\u00e4tverksklienter" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/.translations/th.json b/homeassistant/components/unifi/translations/th.json similarity index 100% rename from homeassistant/components/unifi/.translations/th.json rename to homeassistant/components/unifi/translations/th.json diff --git a/homeassistant/components/unifi/.translations/tr.json b/homeassistant/components/unifi/translations/tr.json similarity index 100% rename from homeassistant/components/unifi/.translations/tr.json rename to homeassistant/components/unifi/translations/tr.json diff --git a/homeassistant/components/unifi/translations/zh-Hans.json b/homeassistant/components/unifi/translations/zh-Hans.json new file mode 100644 index 00000000000..402d8277bc7 --- /dev/null +++ b/homeassistant/components/unifi/translations/zh-Hans.json @@ -0,0 +1,44 @@ +{ + "config": { + "abort": { + "already_configured": "\u63a7\u5236\u5668\u7ad9\u70b9\u5df2\u914d\u7f6e\u5b8c\u6210", + "user_privilege": "\u7528\u6237\u987b\u4e3a\u7ba1\u7406\u5458" + }, + "error": { + "faulty_credentials": "\u9519\u8bef\u7684\u7528\u6237\u51ed\u636e", + "service_unavailable": "\u6ca1\u6709\u53ef\u7528\u7684\u670d\u52a1" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u673a", + "password": "\u5bc6\u7801", + "port": "\u7aef\u53e3", + "site": "\u7ad9\u70b9 ID", + "username": "\u7528\u6237\u540d", + "verify_ssl": "\u4f7f\u7528\u6b63\u786e\u8bc1\u4e66\u7684\u63a7\u5236\u5668" + }, + "title": "\u914d\u7f6e UniFi \u63a7\u5236\u5668" + } + } + }, + "options": { + "step": { + "device_tracker": { + "data": { + "detection_time": "\u8ddd\u79bb\u4e0a\u6b21\u53d1\u73b0\u591a\u5c11\u79d2\u540e\u8ba4\u4e3a\u79bb\u5f00", + "ssid_filter": "\u9009\u62e9\u6240\u8981\u8ffd\u8e2a\u7684\u65e0\u7ebf\u7f51\u7edcSSID", + "track_clients": "\u8ddf\u8e2a\u7f51\u7edc\u5ba2\u6237\u7aef", + "track_devices": "\u8ddf\u8e2a\u7f51\u7edc\u8bbe\u5907\uff08Ubiquiti \u8bbe\u5907\uff09", + "track_wired_clients": "\u5305\u62ec\u6709\u7ebf\u7f51\u7edc\u5ba2\u6237\u7aef" + }, + "description": "\u914d\u7f6e\u8bbe\u5907\u8ddf\u8e2a", + "title": "UniFi \u9009\u9879" + }, + "statistics_sensors": { + "description": "\u914d\u7f6e\u7edf\u8ba1\u4f20\u611f\u5668", + "title": "UniFi \u9009\u9879" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/translations/zh-Hant.json b/homeassistant/components/unifi/translations/zh-Hant.json new file mode 100644 index 00000000000..7247293662a --- /dev/null +++ b/homeassistant/components/unifi/translations/zh-Hant.json @@ -0,0 +1,58 @@ +{ + "config": { + "abort": { + "already_configured": "\u63a7\u5236\u5668\u4f4d\u5740\u5df2\u7d93\u8a2d\u5b9a", + "user_privilege": "\u4f7f\u7528\u8005\u5fc5\u9808\u70ba\u7ba1\u7406\u54e1\u8eab\u4efd" + }, + "error": { + "faulty_credentials": "\u4f7f\u7528\u8005\u6191\u8b49\u7121\u6548", + "service_unavailable": "\u7121\u670d\u52d9\u53ef\u7528", + "unknown_client_mac": "\u8a72 Mac \u4f4d\u5740\u7121\u53ef\u7528\u5ba2\u6236\u7aef" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "password": "\u5bc6\u78bc", + "port": "\u901a\u8a0a\u57e0", + "site": "\u4f4d\u5740 ID", + "username": "\u4f7f\u7528\u8005\u540d\u7a31", + "verify_ssl": "\u63a7\u5236\u5668\u4f7f\u7528\u9a57\u8b49" + }, + "title": "\u8a2d\u5b9a UniFi \u63a7\u5236\u5668" + } + } + }, + "options": { + "step": { + "client_control": { + "data": { + "block_client": "\u7db2\u8def\u5b58\u53d6\u63a7\u5236\u5ba2\u6236\u7aef", + "new_client": "\u65b0\u589e\u9396\u8981\u63a7\u5236\u7db2\u8def\u5b58\u53d6\u7684\u5ba2\u6236\u7aef", + "poe_clients": "\u5141\u8a31 POE \u63a7\u5236\u5ba2\u6236\u7aef" + }, + "description": "\u8a2d\u5b9a\u5ba2\u6236\u7aef\u63a7\u5236\n\n\u65b0\u589e\u9396\u8981\u63a7\u5236\u7db2\u8def\u5b58\u53d6\u7684\u958b\u95dc\u5e8f\u865f\u3002", + "title": "UniFi \u9078\u9805 2/3" + }, + "device_tracker": { + "data": { + "detection_time": "\u6700\u7d42\u51fa\u73fe\u5f8c\u8996\u70ba\u96e2\u958b\u7684\u6642\u9593\uff08\u4ee5\u79d2\u70ba\u55ae\u4f4d\uff09", + "ignore_wired_bug": "\u95dc\u9589 UniFi \u6709\u7dda\u932f\u8aa4\u908f\u8f2f", + "ssid_filter": "\u9078\u64c7\u6240\u8981\u8ffd\u8e64\u7684\u7121\u7dda\u7db2\u8def", + "track_clients": "\u8ffd\u8e64\u7db2\u8def\u5ba2\u6236\u7aef", + "track_devices": "\u8ffd\u8e64\u7db2\u8def\u8a2d\u5099\uff08Ubiquiti \u8a2d\u5099\uff09", + "track_wired_clients": "\u5305\u542b\u6709\u7dda\u7db2\u8def\u5ba2\u6236\u7aef" + }, + "description": "\u8a2d\u5b9a\u8a2d\u5099\u8ffd\u8e64", + "title": "UniFi \u9078\u9805 1/3" + }, + "statistics_sensors": { + "data": { + "allow_bandwidth_sensors": "\u7db2\u8def\u5ba2\u6236\u7aef\u983b\u5bec\u7528\u91cf\u611f\u61c9\u5668" + }, + "description": "\u8a2d\u5b9a\u7d71\u8a08\u6578\u64da\u611f\u61c9\u5668", + "title": "UniFi \u9078\u9805 3/3" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/unifi/unifi_client.py b/homeassistant/components/unifi/unifi_client.py index b46771e574b..d8c14105990 100644 --- a/homeassistant/components/unifi/unifi_client.py +++ b/homeassistant/components/unifi/unifi_client.py @@ -11,63 +11,69 @@ from aiounifi.events import ( WIRELESS_CLIENT_BLOCKED, WIRELESS_CLIENT_CONNECTED, WIRELESS_CLIENT_DISCONNECTED, + WIRELESS_CLIENT_ROAM, WIRELESS_CLIENT_UNBLOCKED, ) +from homeassistant.components.unifi.unifi_entity_base import UniFiBase from homeassistant.core import callback from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC -from homeassistant.helpers.dispatcher import async_dispatcher_connect -from homeassistant.helpers.entity import Entity 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 = (WIRELESS_CLIENT_CONNECTED, WIRELESS_CLIENT_DISCONNECTED) +WIRELESS_CLIENT_ROAMRADIO = "EVT_WU_RoamRadio" +WIRELESS_CLIENT = ( + WIRELESS_CLIENT_CONNECTED, + WIRELESS_CLIENT_DISCONNECTED, + WIRELESS_CLIENT_ROAM, + WIRELESS_CLIENT_ROAMRADIO, +) -class UniFiClient(Entity): +class UniFiClient(UniFiBase): """Base class for UniFi clients.""" def __init__(self, client, controller) -> None: """Set up client.""" self.client = client - self.controller = controller - self.listeners = [] + super().__init__(controller) - self.is_wired = self.client.mac not in controller.wireless_clients + self._is_wired = self.client.mac not in controller.wireless_clients self.is_blocked = self.client.blocked self.wired_connection = None self.wireless_connection = None + @property + def mac(self): + """Return MAC of client.""" + return self.client.mac + async def async_added_to_hass(self) -> None: """Client entity created.""" - LOGGER.debug("New UniFi client %s (%s)", self.name, self.client.mac) + await super().async_added_to_hass() + LOGGER.debug("New client %s (%s)", self.entity_id, self.client.mac) self.client.register_callback(self.async_update_callback) - self.listeners.append( - async_dispatcher_connect( - self.hass, self.controller.signal_reachable, self.async_update_callback - ) - ) async def async_will_remove_from_hass(self) -> None: """Disconnect client object when removed.""" + await super().async_will_remove_from_hass() self.client.remove_callback(self.async_update_callback) - for unsub_dispatcher in self.listeners: - unsub_dispatcher() @callback def async_update_callback(self) -> None: """Update the clients state.""" - if self.is_wired and self.client.mac in self.controller.wireless_clients: - self.is_wired = False + if self._is_wired and self.client.mac in self.controller.wireless_clients: + self._is_wired = False if self.client.last_updated == SOURCE_EVENT: - if self.client.event.event in WIRELESS_CLIENT: - self.wireless_connection = ( - self.client.event.event == WIRELESS_CLIENT_CONNECTED + 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: @@ -78,8 +84,23 @@ class UniFiClient(Entity): elif self.client.event.event in CLIENT_BLOCKED + CLIENT_UNBLOCKED: self.is_blocked = self.client.event.event in CLIENT_BLOCKED - LOGGER.debug("Updating client %s %s", self.entity_id, self.client.mac) - self.async_schedule_update_ha_state() + LOGGER.debug("Updating client %s (%s)", self.entity_id, self.client.mac) + self.async_write_ha_state() + + @property + def is_wired(self): + """Return if the client is wired. + + Allows disabling logic to keep track of clients affected by UniFi wired bug marking wireless devices as wired. This is useful when running a network not only containing UniFi APs. + """ + if self.controller.option_ignore_wired_bug: + return self.client.is_wired + return self._is_wired + + @property + def unique_id(self): + """Return a unique identifier for this switch.""" + return f"{self.TYPE}-{self.client.mac}" @property def name(self) -> str: @@ -95,8 +116,3 @@ class UniFiClient(Entity): def device_info(self) -> dict: """Return a client description for device registry.""" return {"connections": {(CONNECTION_NETWORK_MAC, self.client.mac)}} - - @property - def should_poll(self) -> bool: - """No polling needed.""" - return True diff --git a/homeassistant/components/unifi/unifi_entity_base.py b/homeassistant/components/unifi/unifi_entity_base.py new file mode 100644 index 00000000000..94088411411 --- /dev/null +++ b/homeassistant/components/unifi/unifi_entity_base.py @@ -0,0 +1,84 @@ +"""Base class for UniFi entities.""" + +from homeassistant.core import callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity_registry import async_entries_for_device + + +class UniFiBase(Entity): + """UniFi entity base class.""" + + DOMAIN = "" + TYPE = "" + + def __init__(self, controller) -> None: + """Set up UniFi entity base. + + Register mac to controller entities to cover disabled entities. + """ + self.controller = controller + self.controller.entities[self.DOMAIN][self.TYPE].add(self.mac) + + @property + def mac(self): + """Return MAC of entity.""" + raise NotImplementedError + + async def async_added_to_hass(self) -> None: + """Entity created.""" + for signal, method in ( + (self.controller.signal_reachable, self.async_update_callback), + (self.controller.signal_options_update, self.options_updated), + (self.controller.signal_remove, self.remove_item), + ): + self.async_on_remove(async_dispatcher_connect(self.hass, signal, method)) + + async def async_will_remove_from_hass(self) -> None: + """Disconnect object when removed.""" + self.controller.entities[self.DOMAIN][self.TYPE].remove(self.mac) + + async def async_remove(self): + """Clean up when removing entity. + + Remove entity if no entry in entity registry exist. + Remove entity registry entry if no entry in device registry exist. + Remove device registry entry if there is only one linked entity (this entity). + Remove entity registry entry if there are more than one entity linked to the device registry entry. + """ + entity_registry = await self.hass.helpers.entity_registry.async_get_registry() + entity_entry = entity_registry.async_get(self.entity_id) + if not entity_entry: + await super().async_remove() + return + + device_registry = await self.hass.helpers.device_registry.async_get_registry() + device_entry = device_registry.async_get(entity_entry.device_id) + if not device_entry: + entity_registry.async_remove(self.entity_id) + return + + if len(async_entries_for_device(entity_registry, entity_entry.device_id)) == 1: + device_registry.async_remove_device(device_entry.id) + return + + entity_registry.async_remove(self.entity_id) + + @callback + def async_update_callback(self): + """Update the entity's state.""" + raise NotImplementedError + + async def options_updated(self) -> None: + """Config entry options are updated, remove entity if option is disabled.""" + raise NotImplementedError + + async def remove_item(self, mac_addresses: set) -> None: + """Remove entity if MAC is part of set.""" + if self.mac in mac_addresses: + await self.async_remove() + + @property + def should_poll(self) -> bool: + """No polling needed.""" + return True diff --git a/homeassistant/components/unifi_direct/manifest.json b/homeassistant/components/unifi_direct/manifest.json index 3de376a831d..206cf39f149 100644 --- a/homeassistant/components/unifi_direct/manifest.json +++ b/homeassistant/components/unifi_direct/manifest.json @@ -3,6 +3,5 @@ "name": "Ubiquiti UniFi AP", "documentation": "https://www.home-assistant.io/integrations/unifi_direct", "requirements": ["pexpect==4.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/unifiled/manifest.json b/homeassistant/components/unifiled/manifest.json index a031b8b2ec3..ebbc825578b 100644 --- a/homeassistant/components/unifiled/manifest.json +++ b/homeassistant/components/unifiled/manifest.json @@ -2,7 +2,6 @@ "domain": "unifiled", "name": "Ubiquiti UniFi LED", "documentation": "https://www.home-assistant.io/integrations/unifiled", - "dependencies": [], "codeowners": ["@florisvdk"], "requirements": ["unifiled==0.11"] } diff --git a/homeassistant/components/universal/manifest.json b/homeassistant/components/universal/manifest.json index 43acbadb450..ab11e1e0b07 100644 --- a/homeassistant/components/universal/manifest.json +++ b/homeassistant/components/universal/manifest.json @@ -2,8 +2,6 @@ "domain": "universal", "name": "Universal Media Player", "documentation": "https://www.home-assistant.io/integrations/universal", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/upc_connect/manifest.json b/homeassistant/components/upc_connect/manifest.json index 904b48fbdd9..6236021f3c6 100644 --- a/homeassistant/components/upc_connect/manifest.json +++ b/homeassistant/components/upc_connect/manifest.json @@ -3,6 +3,5 @@ "name": "UPC Connect Box", "documentation": "https://www.home-assistant.io/integrations/upc_connect", "requirements": ["connect-box==0.2.5"], - "dependencies": [], "codeowners": ["@pvizeli"] } diff --git a/homeassistant/components/upcloud/manifest.json b/homeassistant/components/upcloud/manifest.json index 14ad0359364..f5ff1b2dd1e 100644 --- a/homeassistant/components/upcloud/manifest.json +++ b/homeassistant/components/upcloud/manifest.json @@ -3,6 +3,5 @@ "name": "UpCloud", "documentation": "https://www.home-assistant.io/integrations/upcloud", "requirements": ["upcloud-api==0.4.5"], - "dependencies": [], "codeowners": ["@scop"] } diff --git a/homeassistant/components/updater/manifest.json b/homeassistant/components/updater/manifest.json index 377ca24cd38..76a6d8f64f4 100644 --- a/homeassistant/components/updater/manifest.json +++ b/homeassistant/components/updater/manifest.json @@ -2,8 +2,7 @@ "domain": "updater", "name": "Updater", "documentation": "https://www.home-assistant.io/integrations/updater", - "requirements": ["distro==1.4.0"], - "dependencies": [], + "requirements": ["distro==1.5.0"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/updater/strings.json b/homeassistant/components/updater/strings.json new file mode 100644 index 00000000000..d4fe2079d8f --- /dev/null +++ b/homeassistant/components/updater/strings.json @@ -0,0 +1 @@ +{ "title": "Updater" } diff --git a/homeassistant/components/updater/translations/af.json b/homeassistant/components/updater/translations/af.json new file mode 100644 index 00000000000..bf9cb9c98f4 --- /dev/null +++ b/homeassistant/components/updater/translations/af.json @@ -0,0 +1,3 @@ +{ + "title": "Opdateerder" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ar.json b/homeassistant/components/updater/translations/ar.json new file mode 100644 index 00000000000..9aecb4b83dc --- /dev/null +++ b/homeassistant/components/updater/translations/ar.json @@ -0,0 +1,3 @@ +{ + "title": "\u062a\u062d\u062f\u064a\u062b" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/bg.json b/homeassistant/components/updater/translations/bg.json new file mode 100644 index 00000000000..ce1bddc104f --- /dev/null +++ b/homeassistant/components/updater/translations/bg.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/bs.json b/homeassistant/components/updater/translations/bs.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/bs.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ca.json b/homeassistant/components/updater/translations/ca.json new file mode 100644 index 00000000000..419215d32b6 --- /dev/null +++ b/homeassistant/components/updater/translations/ca.json @@ -0,0 +1,3 @@ +{ + "title": "Actualitzador" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/cs.json b/homeassistant/components/updater/translations/cs.json new file mode 100644 index 00000000000..9d25158400b --- /dev/null +++ b/homeassistant/components/updater/translations/cs.json @@ -0,0 +1,3 @@ +{ + "title": "Aktualiz\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/cy.json b/homeassistant/components/updater/translations/cy.json new file mode 100644 index 00000000000..b3ef0dcb85f --- /dev/null +++ b/homeassistant/components/updater/translations/cy.json @@ -0,0 +1,3 @@ +{ + "title": "Diweddarwr" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/da.json b/homeassistant/components/updater/translations/da.json new file mode 100644 index 00000000000..bc9b108c3ec --- /dev/null +++ b/homeassistant/components/updater/translations/da.json @@ -0,0 +1,3 @@ +{ + "title": "Opdater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/de.json b/homeassistant/components/updater/translations/de.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/de.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/el.json b/homeassistant/components/updater/translations/el.json new file mode 100644 index 00000000000..b3ae655e025 --- /dev/null +++ b/homeassistant/components/updater/translations/el.json @@ -0,0 +1,3 @@ +{ + "title": "\u0395\u03c0\u03b9\u03ba\u03b1\u03b9\u03c1\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03ae\u03c2" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/en.json b/homeassistant/components/updater/translations/en.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/en.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/es-419.json b/homeassistant/components/updater/translations/es-419.json new file mode 100644 index 00000000000..a822ffbd0a9 --- /dev/null +++ b/homeassistant/components/updater/translations/es-419.json @@ -0,0 +1,3 @@ +{ + "title": "Actualizador" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/es.json b/homeassistant/components/updater/translations/es.json new file mode 100644 index 00000000000..a822ffbd0a9 --- /dev/null +++ b/homeassistant/components/updater/translations/es.json @@ -0,0 +1,3 @@ +{ + "title": "Actualizador" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/et.json b/homeassistant/components/updater/translations/et.json new file mode 100644 index 00000000000..8d36316f011 --- /dev/null +++ b/homeassistant/components/updater/translations/et.json @@ -0,0 +1,3 @@ +{ + "title": "Uuendaja" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/eu.json b/homeassistant/components/updater/translations/eu.json new file mode 100644 index 00000000000..cec08736bae --- /dev/null +++ b/homeassistant/components/updater/translations/eu.json @@ -0,0 +1,3 @@ +{ + "title": "Eguneratzailea" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/fa.json b/homeassistant/components/updater/translations/fa.json new file mode 100644 index 00000000000..d32b1e212c2 --- /dev/null +++ b/homeassistant/components/updater/translations/fa.json @@ -0,0 +1,3 @@ +{ + "title": "\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/fi.json b/homeassistant/components/updater/translations/fi.json new file mode 100644 index 00000000000..48f9aa81b72 --- /dev/null +++ b/homeassistant/components/updater/translations/fi.json @@ -0,0 +1,3 @@ +{ + "title": "P\u00e4ivitys" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/fr.json b/homeassistant/components/updater/translations/fr.json new file mode 100644 index 00000000000..228912f95a8 --- /dev/null +++ b/homeassistant/components/updater/translations/fr.json @@ -0,0 +1,3 @@ +{ + "title": "Mise \u00e0 jour" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/gsw.json b/homeassistant/components/updater/translations/gsw.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/gsw.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/he.json b/homeassistant/components/updater/translations/he.json new file mode 100644 index 00000000000..de8c2468f90 --- /dev/null +++ b/homeassistant/components/updater/translations/he.json @@ -0,0 +1,3 @@ +{ + "title": "\u05d4\u05de\u05e2\u05d3\u05db\u05df" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/hr.json b/homeassistant/components/updater/translations/hr.json new file mode 100644 index 00000000000..21d0438f9cb --- /dev/null +++ b/homeassistant/components/updater/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "A\u017euriranje" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/hu.json b/homeassistant/components/updater/translations/hu.json new file mode 100644 index 00000000000..52b2c972559 --- /dev/null +++ b/homeassistant/components/updater/translations/hu.json @@ -0,0 +1,3 @@ +{ + "title": "Friss\u00edt\u00e9sek" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/hy.json b/homeassistant/components/updater/translations/hy.json new file mode 100644 index 00000000000..78c67fb8950 --- /dev/null +++ b/homeassistant/components/updater/translations/hy.json @@ -0,0 +1,3 @@ +{ + "title": "\u0539\u0561\u0580\u0574\u0561\u0581\u0576\u0578\u0572" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/id.json b/homeassistant/components/updater/translations/id.json new file mode 100644 index 00000000000..1ab6aa58946 --- /dev/null +++ b/homeassistant/components/updater/translations/id.json @@ -0,0 +1,3 @@ +{ + "title": "Pembaru" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/is.json b/homeassistant/components/updater/translations/is.json new file mode 100644 index 00000000000..e0f7536fd1a --- /dev/null +++ b/homeassistant/components/updater/translations/is.json @@ -0,0 +1,3 @@ +{ + "title": "Uppf\u00e6rslu\u00e1lfur" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/it.json b/homeassistant/components/updater/translations/it.json new file mode 100644 index 00000000000..539f0bb4294 --- /dev/null +++ b/homeassistant/components/updater/translations/it.json @@ -0,0 +1,3 @@ +{ + "title": "Aggiornamento" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ja.json b/homeassistant/components/updater/translations/ja.json new file mode 100644 index 00000000000..2a34917b909 --- /dev/null +++ b/homeassistant/components/updater/translations/ja.json @@ -0,0 +1,3 @@ +{ + "title": "\u30a2\u30c3\u30d7\u30c7\u30fc\u30bf\u30fc" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ko.json b/homeassistant/components/updater/translations/ko.json new file mode 100644 index 00000000000..14137569e1b --- /dev/null +++ b/homeassistant/components/updater/translations/ko.json @@ -0,0 +1,3 @@ +{ + "title": "\uc5c5\ub370\uc774\ud130" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/lb.json b/homeassistant/components/updater/translations/lb.json new file mode 100644 index 00000000000..375f8fa7bc6 --- /dev/null +++ b/homeassistant/components/updater/translations/lb.json @@ -0,0 +1,3 @@ +{ + "title": "Aktualis\u00e9ierung" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/lv.json b/homeassistant/components/updater/translations/lv.json new file mode 100644 index 00000000000..15d29e35a06 --- /dev/null +++ b/homeassistant/components/updater/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Atjaunin\u0101t\u0101js" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/nb.json b/homeassistant/components/updater/translations/nb.json new file mode 100644 index 00000000000..e98d60ab4fc --- /dev/null +++ b/homeassistant/components/updater/translations/nb.json @@ -0,0 +1,3 @@ +{ + "title": "Oppdater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/nl.json b/homeassistant/components/updater/translations/nl.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/nl.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/nn.json b/homeassistant/components/updater/translations/nn.json new file mode 100644 index 00000000000..7eb98bdd2c1 --- /dev/null +++ b/homeassistant/components/updater/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Oppdateringar" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/no.json b/homeassistant/components/updater/translations/no.json new file mode 100644 index 00000000000..94c84fb618e --- /dev/null +++ b/homeassistant/components/updater/translations/no.json @@ -0,0 +1,3 @@ +{ + "title": "Oppdateringer" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/pl.json b/homeassistant/components/updater/translations/pl.json new file mode 100644 index 00000000000..21a3703bba9 --- /dev/null +++ b/homeassistant/components/updater/translations/pl.json @@ -0,0 +1,3 @@ +{ + "title": "Aktualizator" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/pt-BR.json b/homeassistant/components/updater/translations/pt-BR.json new file mode 100644 index 00000000000..7d07ec8da09 --- /dev/null +++ b/homeassistant/components/updater/translations/pt-BR.json @@ -0,0 +1,3 @@ +{ + "title": "Atualizador" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/pt.json b/homeassistant/components/updater/translations/pt.json new file mode 100644 index 00000000000..7d07ec8da09 --- /dev/null +++ b/homeassistant/components/updater/translations/pt.json @@ -0,0 +1,3 @@ +{ + "title": "Atualizador" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ro.json b/homeassistant/components/updater/translations/ro.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/ro.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ru.json b/homeassistant/components/updater/translations/ru.json new file mode 100644 index 00000000000..a2ee79efd15 --- /dev/null +++ b/homeassistant/components/updater/translations/ru.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/sk.json b/homeassistant/components/updater/translations/sk.json new file mode 100644 index 00000000000..9d25158400b --- /dev/null +++ b/homeassistant/components/updater/translations/sk.json @@ -0,0 +1,3 @@ +{ + "title": "Aktualiz\u00e1tor" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/sl.json b/homeassistant/components/updater/translations/sl.json new file mode 100644 index 00000000000..ac2a2cab3f8 --- /dev/null +++ b/homeassistant/components/updater/translations/sl.json @@ -0,0 +1,3 @@ +{ + "title": "Posodobitelj" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/sv.json b/homeassistant/components/updater/translations/sv.json new file mode 100644 index 00000000000..78ef7d2df20 --- /dev/null +++ b/homeassistant/components/updater/translations/sv.json @@ -0,0 +1,3 @@ +{ + "title": "Uppdaterare" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/ta.json b/homeassistant/components/updater/translations/ta.json new file mode 100644 index 00000000000..74f9398fbcb --- /dev/null +++ b/homeassistant/components/updater/translations/ta.json @@ -0,0 +1,3 @@ +{ + "title": "\u0b85\u0baa\u0bcd\u0b9f\u0bc7\u0b9f\u0bcd\u0b9f\u0bb0\u0bcd" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/te.json b/homeassistant/components/updater/translations/te.json new file mode 100644 index 00000000000..43859eedc5a --- /dev/null +++ b/homeassistant/components/updater/translations/te.json @@ -0,0 +1,3 @@ +{ + "title": "Updater" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/th.json b/homeassistant/components/updater/translations/th.json new file mode 100644 index 00000000000..d825a885d68 --- /dev/null +++ b/homeassistant/components/updater/translations/th.json @@ -0,0 +1,3 @@ +{ + "title": "\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e15" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/tr.json b/homeassistant/components/updater/translations/tr.json new file mode 100644 index 00000000000..7034ef0d79e --- /dev/null +++ b/homeassistant/components/updater/translations/tr.json @@ -0,0 +1,3 @@ +{ + "title": "G\u00fcncelleyici" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/uk.json b/homeassistant/components/updater/translations/uk.json new file mode 100644 index 00000000000..e98d67fc206 --- /dev/null +++ b/homeassistant/components/updater/translations/uk.json @@ -0,0 +1,3 @@ +{ + "title": "\u041e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/vi.json b/homeassistant/components/updater/translations/vi.json new file mode 100644 index 00000000000..0e2783d6f21 --- /dev/null +++ b/homeassistant/components/updater/translations/vi.json @@ -0,0 +1,3 @@ +{ + "title": "Tr\u00ecnh c\u1eadp nh\u1eadt" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/zh-Hans.json b/homeassistant/components/updater/translations/zh-Hans.json new file mode 100644 index 00000000000..154ab2b812b --- /dev/null +++ b/homeassistant/components/updater/translations/zh-Hans.json @@ -0,0 +1,3 @@ +{ + "title": "\u66f4\u65b0\u63d0\u793a" +} \ No newline at end of file diff --git a/homeassistant/components/updater/translations/zh-Hant.json b/homeassistant/components/updater/translations/zh-Hant.json new file mode 100644 index 00000000000..31188faa135 --- /dev/null +++ b/homeassistant/components/updater/translations/zh-Hant.json @@ -0,0 +1,3 @@ +{ + "title": "\u66f4\u65b0\u7248\u672c" +} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/bg.json b/homeassistant/components/upnp/.translations/bg.json deleted file mode 100644 index 6ee5961f152..00000000000 --- a/homeassistant/components/upnp/.translations/bg.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "incomplete_device": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043d\u0435\u043f\u044a\u043b\u043d\u043e UPnP \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", - "no_devices_discovered": "\u041d\u044f\u043c\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 UPnP/IGD", - "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 UPnP/IGD \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", - "no_sensors_or_port_mapping": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0439\u0442\u0435 \u0441\u0435\u043d\u0437\u043e\u0440\u0438\u0442\u0435 \u0438\u043b\u0438 \u043f\u0440\u0435\u043d\u0430\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430", - "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 UPnP/IGD." - }, - "error": { - "one": "\u0433\u0440\u0435\u0448\u043a\u0430", - "other": "\u0433\u0440\u0435\u0448\u043a\u0438" - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0435\u043d\u0430\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430 \u0437\u0430 Home Assistant", - "enable_sensors": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0442\u0440\u0430\u0444\u0438\u0447\u043d\u0438 \u0441\u0435\u043d\u0437\u043e\u0440\u0438", - "igd": "UPnP/IGD" - }, - "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u043e\u043f\u0446\u0438\u0438 \u0437\u0430 UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/ca.json b/homeassistant/components/upnp/.translations/ca.json deleted file mode 100644 index 85370eec8e6..00000000000 --- a/homeassistant/components/upnp/.translations/ca.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD ja est\u00e0 configurat", - "incomplete_device": "Ignorant el dispositiu incomplet UPnP", - "no_devices_discovered": "No s'ha trobat cap UPnP/IGD", - "no_devices_found": "No s'han trobat dispositius UPnP/IGD a la xarxa.", - "no_sensors_or_port_mapping": "Activa, com a m\u00ednim, els sensors o l'assignaci\u00f3 de ports", - "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de UPnP/IGD." - }, - "error": { - "one": "un", - "other": "altre" - }, - "step": { - "confirm": { - "description": "Vols configurar UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Activa l'assignaci\u00f3 de ports per a Home Assistant", - "enable_sensors": "Afegeix sensors de tr\u00e0nsit", - "igd": "UPnP/IGD" - }, - "title": "Opcions de configuraci\u00f3 d'UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/cs.json b/homeassistant/components/upnp/.translations/cs.json deleted file mode 100644 index 17d9949453c..00000000000 --- a/homeassistant/components/upnp/.translations/cs.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD je ji\u017e nakonfigurov\u00e1no", - "incomplete_device": "Ignorov\u00e1n\u00ed ne\u00fapln\u00e9ho za\u0159\u00edzen\u00ed UPnP", - "no_devices_discovered": "Nebyly zji\u0161t\u011bny \u017e\u00e1dn\u00e9 UPnP/IGD", - "no_devices_found": "V s\u00edti nejsou nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed UPnP/IGD.", - "no_sensors_or_port_mapping": "Povolte senzory nebo mapov\u00e1n\u00ed port\u016f", - "single_instance_allowed": "Povolena je pouze jedna instance UPnP/IGD." - }, - "step": { - "confirm": { - "description": "Chcete nastavit UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Povolit mapov\u00e1n\u00ed port\u016f pro Home Assistant", - "enable_sensors": "P\u0159idejte dopravn\u00ed senzory", - "igd": "UPnP/IGD" - }, - "title": "Mo\u017enosti konfigurace pro UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/da.json b/homeassistant/components/upnp/.translations/da.json deleted file mode 100644 index c41741b8635..00000000000 --- a/homeassistant/components/upnp/.translations/da.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD er allerede konfigureret", - "incomplete_device": "Ignorerer ufuldst\u00e6ndig UPnP-enhed", - "no_devices_discovered": "Ingen UPnP/IGD-enheder fundet.", - "no_devices_found": "Ingen UPnP/IGD enheder kunne findes p\u00e5 netv\u00e6rket.", - "no_sensors_or_port_mapping": "Aktiv\u00e9r enten sensorer eller porttilknytning", - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af UPnP/IGD." - }, - "error": { - "one": "En", - "other": "Anden" - }, - "step": { - "confirm": { - "description": "Er du sikker p\u00e5 at du vil konfigurere UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Aktiv\u00e9r porttilknytning til Home Assistent", - "enable_sensors": "Tilf\u00f8j trafiksensorer", - "igd": "UPnP/IGD" - }, - "title": "Konfigurationsindstillinger for UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/de.json b/homeassistant/components/upnp/.translations/de.json deleted file mode 100644 index 253dfd59a6c..00000000000 --- a/homeassistant/components/upnp/.translations/de.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD ist bereits konfiguriert", - "incomplete_device": "Unvollst\u00e4ndiges UPnP-Ger\u00e4t wird ignoriert", - "no_devices_discovered": "Keine UPnP/IGDs entdeckt", - "no_devices_found": "Keine UPnP/IGD-Ger\u00e4te im Netzwerk gefunden.", - "no_sensors_or_port_mapping": "Aktiviere mindestens Sensoren oder Port-Mapping", - "single_instance_allowed": "Es ist nur eine einzige Konfiguration von UPnP/IGD erforderlich." - }, - "error": { - "one": "Ein", - "other": "andere" - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du UPnP/IGD einrichten?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Aktiviere Port-Mapping f\u00fcr Home Assistant", - "enable_sensors": "Verkehrssensoren hinzuf\u00fcgen", - "igd": "UPnP/IGD" - }, - "title": "Konfigurationsoptionen f\u00fcr UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/en.json b/homeassistant/components/upnp/.translations/en.json deleted file mode 100644 index 632d5112f1a..00000000000 --- a/homeassistant/components/upnp/.translations/en.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD is already configured", - "incomplete_device": "Ignoring incomplete UPnP device", - "no_devices_discovered": "No UPnP/IGDs discovered", - "no_devices_found": "No UPnP/IGD devices found on the network.", - "no_sensors_or_port_mapping": "Enable at least sensors or port mapping", - "single_instance_allowed": "Only a single configuration of UPnP/IGD is necessary." - }, - "step": { - "confirm": { - "description": "Do you want to set up UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Enable port mapping for Home Assistant", - "enable_sensors": "Add traffic sensors", - "igd": "UPnP/IGD" - }, - "title": "Configuration options for the UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/es-419.json b/homeassistant/components/upnp/.translations/es-419.json deleted file mode 100644 index bd95b48359e..00000000000 --- a/homeassistant/components/upnp/.translations/es-419.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD ya est\u00e1 configurado", - "incomplete_device": "Ignorar un dispositivo UPnP incompleto", - "no_devices_discovered": "No se han descubierto UPnP/IGDs", - "no_devices_found": "No se encuentran dispositivos UPnP/IGD en la red.", - "no_sensors_or_port_mapping": "Habilitar al menos sensores o mapeo de puertos", - "single_instance_allowed": "S\u00f3lo se necesita una \u00fanica configuraci\u00f3n de UPnP/IGD." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Habilitar la asignaci\u00f3n de puertos para Home Assistant", - "enable_sensors": "A\u00f1adir sensores de tr\u00e1fico", - "igd": "UPnP/IGD" - }, - "title": "Opciones de configuraci\u00f3n para UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/es.json b/homeassistant/components/upnp/.translations/es.json deleted file mode 100644 index fa299cc379f..00000000000 --- a/homeassistant/components/upnp/.translations/es.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP / IGD ya est\u00e1 configurado", - "incomplete_device": "Ignorando el dispositivo UPnP incompleto", - "no_devices_discovered": "No se descubrieron UPnP / IGDs", - "no_devices_found": "No se encuentran dispositivos UPnP/IGD en la red.", - "no_sensors_or_port_mapping": "Habilitar al menos sensores o mapeo de puertos", - "single_instance_allowed": "S\u00f3lo se necesita una configuraci\u00f3n de UPnP/IGD." - }, - "error": { - "one": "UNO", - "other": "OTRO" - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP / IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Habilitar la asignaci\u00f3n de puertos para Home Assistant", - "enable_sensors": "A\u00f1adir sensores de tr\u00e1fico", - "igd": "UPnP / IGD" - }, - "title": "Opciones de configuraci\u00f3n para UPnP/IGD" - } - }, - "title": "UPnP / IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/et.json b/homeassistant/components/upnp/.translations/et.json deleted file mode 100644 index 0c49a92bc0a..00000000000 --- a/homeassistant/components/upnp/.translations/et.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "init": { - "title": "" - }, - "user": { - "data": { - "igd": "" - } - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/fr.json b/homeassistant/components/upnp/.translations/fr.json deleted file mode 100644 index 6864658b379..00000000000 --- a/homeassistant/components/upnp/.translations/fr.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP / IGD est d\u00e9j\u00e0 configur\u00e9", - "incomplete_device": "Ignorer un p\u00e9riph\u00e9rique UPnP incomplet", - "no_devices_discovered": "Aucun UPnP / IGD d\u00e9couvert", - "no_devices_found": "Aucun p\u00e9riph\u00e9rique UPnP / IGD trouv\u00e9 sur le r\u00e9seau.", - "no_sensors_or_port_mapping": "Activer au moins les capteurs ou la cartographie des ports", - "single_instance_allowed": "Une seule configuration UPnP / IGD est n\u00e9cessaire." - }, - "error": { - "one": "Vide", - "other": "Vide" - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer UPnP / IGD?", - "title": "UPnP / IGD" - }, - "init": { - "title": "UPnP / IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Activer le mappage de port pour Home Assistant", - "enable_sensors": "Ajouter des capteurs de trafic", - "igd": "UPnP / IGD" - }, - "title": "Options de configuration pour UPnP / IGD" - } - }, - "title": "UPnP / IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/hu.json b/homeassistant/components/upnp/.translations/hu.json deleted file mode 100644 index 29dab5e09da..00000000000 --- a/homeassistant/components/upnp/.translations/hu.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Az UPnP / IGD m\u00e1r konfigur\u00e1l\u00e1sra ker\u00fclt", - "incomplete_device": "A hi\u00e1nyos UPnP-eszk\u00f6z figyelmen k\u00edv\u00fcl hagy\u00e1sa", - "no_devices_discovered": "Nem tal\u00e1ltam UPnP / IGD-ket", - "no_devices_found": "Nincsenek UPnPIGD eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", - "single_instance_allowed": "Csak egy UPnP / IGD konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." - }, - "error": { - "one": "hiba", - "other": "" - }, - "step": { - "confirm": { - "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a UPnP/IGD-t?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Enged\u00e9lyezd a port mappinget a Home Assistant sz\u00e1m\u00e1ra", - "enable_sensors": "Forgalom \u00e9rz\u00e9kel\u0151k hozz\u00e1ad\u00e1sa", - "igd": "UPnP/IGD" - }, - "title": "Az UPnP/IGD be\u00e1ll\u00edt\u00e1si lehet\u0151s\u00e9gei" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/it.json b/homeassistant/components/upnp/.translations/it.json deleted file mode 100644 index e822895a6cf..00000000000 --- a/homeassistant/components/upnp/.translations/it.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD \u00e8 gi\u00e0 configurato", - "incomplete_device": "Ignorare il dispositivo UPnP incompleto", - "no_devices_discovered": "Nessun UPnP/IGD trovato", - "no_devices_found": "Nessun dispositivo UPnP/IGD trovato in rete.", - "no_sensors_or_port_mapping": "Abilita almeno i sensori o la mappatura delle porte", - "single_instance_allowed": "\u00c8 necessaria una sola configurazione di UPnP/IGD." - }, - "error": { - "one": "Vuoto", - "other": "Vuoto" - }, - "step": { - "confirm": { - "description": "Vuoi configurare UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Abilita il port mapping per Home Assistant", - "enable_sensors": "Aggiungi sensori di traffico", - "igd": "UPnP/IGD" - }, - "title": "Opzioni di configurazione per UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/ko.json b/homeassistant/components/upnp/.translations/ko.json deleted file mode 100644 index bd6aaeef4e2..00000000000 --- a/homeassistant/components/upnp/.translations/ko.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD \uac00 \uc774\ubbf8 \uc124\uc815\ub41c \uc0c1\ud0dc\uc785\ub2c8\ub2e4", - "incomplete_device": "\ubd88\uc644\uc804\ud55c UPnP \uae30\uae30 \ubb34\uc2dc\ud558\uae30", - "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." - }, - "step": { - "confirm": { - "description": "UPnP/IGD \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Home Assistant \ud3ec\ud2b8 \ub9e4\ud551 \ud65c\uc131\ud654", - "enable_sensors": "\ud2b8\ub798\ud53d \uc13c\uc11c \ucd94\uac00", - "igd": "UPnP/IGD" - }, - "title": "UPnP/IGD \uc758 \uad6c\uc131 \uc635\uc158" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/lb.json b/homeassistant/components/upnp/.translations/lb.json deleted file mode 100644 index 029e1e87cf1..00000000000 --- a/homeassistant/components/upnp/.translations/lb.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD ass scho konfigur\u00e9iert", - "incomplete_device": "Ignor\u00e9iert onvollst\u00e4nnegen UPnP-Apparat", - "no_devices_discovered": "Keng UPnP/IGDs entdeckt", - "no_devices_found": "Keng UPnP/IGD Apparater am Netzwierk fonnt.", - "no_sensors_or_port_mapping": "Aktiv\u00e9ier op mannst Sensoren oder Port Mapping", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun UPnP/IGD ass n\u00e9ideg." - }, - "error": { - "one": "Een", - "other": "Aaner" - }, - "step": { - "confirm": { - "description": "Soll UPnP/IGD konfigur\u00e9iert ginn?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Port Mapping fir Home Assistant aktiv\u00e9ieren", - "enable_sensors": "Trafic Sensoren dob\u00e4isetzen", - "igd": "UPnP/IGD" - }, - "title": "Konfiguratiouns Optiounen fir UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/nl.json b/homeassistant/components/upnp/.translations/nl.json deleted file mode 100644 index a94471bb610..00000000000 --- a/homeassistant/components/upnp/.translations/nl.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD is al geconfigureerd", - "incomplete_device": "Onvolledig UPnP-apparaat negeren", - "no_devices_discovered": "Geen UPnP'/IGD's ontdekt", - "no_devices_found": "Geen UPnP/IGD apparaten gevonden op het netwerk.", - "no_sensors_or_port_mapping": "Schakel ten minste sensoren of poorttoewijzing in", - "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van UPnP/IGD nodig." - }, - "error": { - "one": "Een", - "other": "Ander" - }, - "step": { - "confirm": { - "description": "Wilt u UPnP/IGD instellen?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Poorttoewijzing voor Home Assistant inschakelen", - "enable_sensors": "Voeg verkeerssensoren toe", - "igd": "UPnP/IGD" - }, - "title": "Configuratiemogelijkheden voor de UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/nn.json b/homeassistant/components/upnp/.translations/nn.json deleted file mode 100644 index 8e173e4297f..00000000000 --- a/homeassistant/components/upnp/.translations/nn.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "config": { - "abort": { - "no_sensors_or_port_mapping": "I det minste, aktiver sensor eller portkartlegging" - }, - "error": { - "one": "Ein", - "other": "Andre" - }, - "step": { - "confirm": { - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP / IGD" - }, - "user": { - "data": { - "igd": "UPnP/IGD" - } - } - }, - "title": "UPnP / IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/no.json b/homeassistant/components/upnp/.translations/no.json deleted file mode 100644 index fb1508a1aab..00000000000 --- a/homeassistant/components/upnp/.translations/no.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP / IGD er allerede konfigurert", - "incomplete_device": "Ignorerer ufullstendig UPnP-enhet", - "no_devices_discovered": "Ingen UPnP / IGDs oppdaget", - "no_devices_found": "Ingen UPnP / IGD-enheter funnet p\u00e5 nettverket.", - "no_sensors_or_port_mapping": "Aktiver minst sensorer eller port mapping", - "single_instance_allowed": "Bare en konfigurasjon av UPnP / IGD er n\u00f8dvendig." - }, - "error": { - "few": "f\u00e5", - "many": "mange", - "one": "en", - "other": "andre", - "two": "to", - "zero": "ingen" - }, - "step": { - "confirm": { - "description": "\u00d8nsker du \u00e5 konfigurere UPnP / IGD?", - "title": "UPnP / IGD" - }, - "init": { - "title": "UPnP / IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Aktiver port mapping for Home Assistant", - "enable_sensors": "Legg til trafikk sensorer", - "igd": "UPnP / IGD" - }, - "title": "Konfigurasjonsalternativer for UPnP / IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/pl.json b/homeassistant/components/upnp/.translations/pl.json deleted file mode 100644 index 964e5a6818d..00000000000 --- a/homeassistant/components/upnp/.translations/pl.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD jest ju\u017c skonfigurowane.", - "incomplete_device": "Ignorowanie niekompletnego urz\u0105dzenia UPnP", - "no_devices_discovered": "Nie wykryto urz\u0105dze\u0144 UPnP/IGD", - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 UPnP/IGD.", - "no_sensors_or_port_mapping": "W\u0142\u0105cz przynajmniej sensory lub mapowanie port\u00f3w", - "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja UPnP/IGD." - }, - "error": { - "few": "kilka", - "many": "wiele", - "one": "jeden", - "other": "inne" - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "W\u0142\u0105cz mapowanie port\u00f3w dla Home Assistant'a", - "enable_sensors": "Dodaj sensor ruchu sieciowego", - "igd": "UPnP/IGD" - }, - "title": "Opcje konfiguracji dla UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/pt-BR.json b/homeassistant/components/upnp/.translations/pt-BR.json deleted file mode 100644 index bfe4a2ab862..00000000000 --- a/homeassistant/components/upnp/.translations/pt-BR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP / IGD j\u00e1 est\u00e1 configurado", - "incomplete_device": "Ignorando o dispositivo UPnP incompleto", - "no_devices_discovered": "Nenhum UPnP/IGD descoberto", - "no_devices_found": "Nenhum dispositivo UPnP/IGD encontrado na rede.", - "no_sensors_or_port_mapping": "Ative pelo menos sensores ou mapeamento de porta", - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do UPnP/IGD \u00e9 necess\u00e1ria." - }, - "step": { - "confirm": { - "description": "Deseja configurar o UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Ativar o mapeamento de porta para o Home Assistant", - "enable_sensors": "Adicionar sensores de tr\u00e1fego", - "igd": "UPnP/IGD" - }, - "title": "Op\u00e7\u00f5es de configura\u00e7\u00e3o para o UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/pt.json b/homeassistant/components/upnp/.translations/pt.json deleted file mode 100644 index d559a05ff23..00000000000 --- a/homeassistant/components/upnp/.translations/pt.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD j\u00e1 est\u00e1 configurado", - "incomplete_device": "Dispositivos UPnP incompletos ignorados", - "no_devices_discovered": "Nenhum UPnP/IGDs descoberto", - "no_devices_found": "Nenhum dispositivo UPnP / IGD encontrado na rede.", - "no_sensors_or_port_mapping": "Ative pelo menos os sensores ou o mapeamento de porta", - "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do UPnP/IGD \u00e9 necess\u00e1ria." - }, - "error": { - "one": "um", - "other": "v\u00e1rios" - }, - "step": { - "confirm": { - "description": "Deseja configurar o UPnP / IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Ativar o mapeamento de porta para o Home Assistant", - "enable_sensors": "Adicionar sensores de tr\u00e1fego", - "igd": "UPnP/IGD" - }, - "title": "Op\u00e7\u00f5es de configura\u00e7\u00e3o para o UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/ro.json b/homeassistant/components/upnp/.translations/ro.json deleted file mode 100644 index bb584da05dc..00000000000 --- a/homeassistant/components/upnp/.translations/ro.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD este deja configurat", - "no_devices_discovered": "Nu au fost descoperite UPnP/IGD-uri" - }, - "error": { - "few": "", - "one": "Unul", - "other": "" - }, - "step": { - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Activa\u021bi maparea porturilor pentru Home Assistant", - "enable_sensors": "Ad\u0103uga\u021bi senzori de trafic", - "igd": "UPnP/IGD" - }, - "title": "Op\u021biuni de configurare pentru UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/ru.json b/homeassistant/components/upnp/.translations/ru.json deleted file mode 100644 index b0a7b7e7b65..00000000000 --- a/homeassistant/components/upnp/.translations/ru.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "incomplete_device": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 UPnP.", - "no_devices_discovered": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e UPnP / IGD.", - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 UPnP / IGD \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", - "no_sensors_or_port_mapping": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0438\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "few": "\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e", - "many": "\u043c\u043d\u043e\u0433\u043e", - "one": "\u043e\u0434\u0438\u043d", - "other": "\u0434\u0440\u0443\u0433\u0438\u0435" - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c UPnP / IGD?", - "title": "UPnP / IGD" - }, - "init": { - "title": "UPnP / IGD" - }, - "user": { - "data": { - "enable_port_mapping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f Home Assistant", - "enable_sensors": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430", - "igd": "UPnP / IGD" - }, - "title": "UPnP / IGD" - } - }, - "title": "UPnP / IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/sl.json b/homeassistant/components/upnp/.translations/sl.json deleted file mode 100644 index 4c019d8f207..00000000000 --- a/homeassistant/components/upnp/.translations/sl.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD je \u017ee konfiguriran", - "incomplete_device": "Ignoriranje nepopolnih UPnP naprav", - "no_devices_discovered": "Ni odkritih UPnP/IGD naprav", - "no_devices_found": "Naprav UPnP/IGD ni mogo\u010de najti v omre\u017eju.", - "no_sensors_or_port_mapping": "Omogo\u010dite vsaj senzorje ali preslikavo vrat (port mapping)", - "single_instance_allowed": "Potrebna je samo ena konfiguracija UPnp/IGD." - }, - "error": { - "few": "nekaj", - "one": "ena", - "other": "ve\u010d", - "two": "dve" - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti UPnp/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Omogo\u010dajo preslikavo vrat (port mapping) za Home Assistant-a", - "enable_sensors": "Dodaj prometne senzorje", - "igd": "UPnP/IGD" - }, - "title": "Mo\u017enosti konfiguracije za UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/sv.json b/homeassistant/components/upnp/.translations/sv.json deleted file mode 100644 index e3864aee4da..00000000000 --- a/homeassistant/components/upnp/.translations/sv.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD \u00e4r redan konfigurerad", - "incomplete_device": "Ignorera ofullst\u00e4ndig UPnP-enhet", - "no_devices_discovered": "Inga UPnP/IGDs uppt\u00e4cktes", - "no_devices_found": "Inga UPnP/IGD-enheter hittades p\u00e5 n\u00e4tverket.", - "no_sensors_or_port_mapping": "Aktivera minst sensorer eller portmappning", - "single_instance_allowed": "Endast en enda konfiguration av UPnP/IGD \u00e4r n\u00f6dv\u00e4ndig." - }, - "error": { - "one": "En", - "other": "Andra" - }, - "step": { - "confirm": { - "description": "Vill du konfigurera UPnP/IGD?", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "Aktivera portmappning f\u00f6r Home Assistant", - "enable_sensors": "L\u00e4gg till trafiksensorer", - "igd": "UPnP/IGD" - }, - "title": "Konfigurationsalternativ f\u00f6r UPnP/IGD" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/zh-Hans.json b/homeassistant/components/upnp/.translations/zh-Hans.json deleted file mode 100644 index 2194a2dc264..00000000000 --- a/homeassistant/components/upnp/.translations/zh-Hans.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD \u5df2\u914d\u7f6e\u5b8c\u6210", - "incomplete_device": "\u5ffd\u7565\u4e0d\u5b8c\u6574\u7684 UPnP \u8bbe\u5907", - "no_devices_discovered": "\u672a\u53d1\u73b0 UPnP/IGD", - "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 UPnP/IGD \u8bbe\u5907\u3002", - "no_sensors_or_port_mapping": "\u81f3\u5c11\u542f\u7528\u4f20\u611f\u5668\u6216\u7aef\u53e3\u6620\u5c04", - "single_instance_allowed": "UPnP/IGD \u53ea\u9700\u8981\u914d\u7f6e\u4e00\u6b21\u3002" - }, - "step": { - "confirm": { - "description": "\u60a8\u60f3\u8981\u914d\u7f6e UPnP/IGD \u5417\uff1f", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "\u4e3a Home Assistant \u542f\u7528\u7aef\u53e3\u6620\u5c04", - "enable_sensors": "\u6dfb\u52a0\u6d41\u91cf\u4f20\u611f\u5668", - "igd": "UPnP/IGD" - }, - "title": "UPnP/IGD \u7684\u914d\u7f6e\u9009\u9879" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/zh-Hant.json b/homeassistant/components/upnp/.translations/zh-Hant.json deleted file mode 100644 index 1611dac2721..00000000000 --- a/homeassistant/components/upnp/.translations/zh-Hant.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "UPnP/IGD \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "incomplete_device": "\u5ffd\u7565\u4e0d\u76f8\u5bb9 UPnP \u8a2d\u5099", - "no_devices_discovered": "\u672a\u641c\u5c0b\u5230 UPnP/IGD", - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 UPnP/IGD \u8a2d\u5099\u3002", - "no_sensors_or_port_mapping": "\u81f3\u5c11\u958b\u555f\u611f\u61c9\u5668\u6216\u901a\u8a0a\u57e0\u8f49\u767c", - "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 UPnP/IGD \u5373\u53ef\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a UPnP/IGD\uff1f", - "title": "UPnP/IGD" - }, - "init": { - "title": "UPnP/IGD" - }, - "user": { - "data": { - "enable_port_mapping": "\u958b\u555f Home Assistant \u901a\u8a0a\u57e0\u8f49\u767c", - "enable_sensors": "\u65b0\u589e\u6d41\u91cf\u611f\u61c9\u5668", - "igd": "UPnP/IGD" - }, - "title": "UPnP/IGD \u8a2d\u5b9a\u9078\u9805" - } - }, - "title": "UPnP/IGD" - } -} \ No newline at end of file diff --git a/homeassistant/components/upnp/__init__.py b/homeassistant/components/upnp/__init__.py index ce97c7944c6..4d599be88b1 100644 --- a/homeassistant/components/upnp/__init__.py +++ b/homeassistant/components/upnp/__init__.py @@ -1,17 +1,15 @@ """Open ports in your router for Home Assistant and provide statistics.""" from ipaddress import ip_address from operator import itemgetter +from typing import Mapping import voluptuous as vol from homeassistant import config_entries from homeassistant.config_entries import ConfigEntry from homeassistant.const import EVENT_HOMEASSISTANT_STOP -from homeassistant.helpers import ( - config_validation as cv, - device_registry as dr, - dispatcher, -) +from homeassistant.exceptions import ConfigEntryNotReady +from homeassistant.helpers import config_validation as cv, device_registry as dr from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.util import get_local_ip @@ -23,7 +21,6 @@ from .const import ( CONF_PORTS, DOMAIN, LOGGER as _LOGGER, - SIGNAL_REMOVE_SENSOR, ) from .device import Device @@ -37,7 +34,7 @@ CONFIG_SCHEMA = vol.Schema( vol.Optional(CONF_ENABLE_PORT_MAPPING, default=False): cv.boolean, vol.Optional(CONF_ENABLE_SENSORS, default=True): cv.boolean, vol.Optional(CONF_LOCAL_IP): vol.All(ip_address, cv.string), - vol.Optional(CONF_PORTS): vol.Schema( + vol.Optional(CONF_PORTS, default={}): vol.Schema( {vol.Any(CONF_HASS, cv.port): vol.Any(CONF_HASS, cv.port)} ), } @@ -47,7 +44,7 @@ CONFIG_SCHEMA = vol.Schema( ) -def _substitute_hass_ports(ports, hass_port=None): +def _substitute_hass_ports(ports: Mapping, hass_port: int = None) -> Mapping: """ Substitute 'hass' for the hass_port. @@ -86,8 +83,11 @@ def _substitute_hass_ports(ports, hass_port=None): return ports -async def async_discover_and_construct(hass, udn=None) -> Device: +async def async_discover_and_construct( + hass: HomeAssistantType, udn: str = None, st: str = None +) -> Device: """Discovery devices and construct a Device for one.""" + # pylint: disable=invalid-name discovery_infos = await Device.async_discover(hass) if not discovery_infos: _LOGGER.info("No UPnP/IGD devices discovered") @@ -95,7 +95,11 @@ async def async_discover_and_construct(hass, udn=None) -> Device: if udn: # get the discovery info with specified UDN + _LOGGER.debug("Discovery_infos: %s", discovery_infos) filtered = [di for di in discovery_infos if di["udn"] == udn] + if st: + _LOGGER.debug("Filtering on ST: %s", st) + filtered = [di for di in discovery_infos if di["st"] == st] if not filtered: _LOGGER.warning( 'Wanted UPnP/IGD device with UDN "%s" not found, ' "aborting", udn @@ -125,8 +129,8 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType): hass.data[DOMAIN] = { "config": conf, "devices": {}, - "local_ip": config.get(CONF_LOCAL_IP, local_ip), - "ports": conf.get("ports", {}), + "local_ip": conf.get(CONF_LOCAL_IP, local_ip), + "ports": conf.get(CONF_PORTS), } if conf is not None: @@ -139,21 +143,24 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType): return True -async def async_setup_entry(hass: HomeAssistantType, config_entry: ConfigEntry): +async def async_setup_entry(hass: HomeAssistantType, config_entry: ConfigEntry) -> bool: """Set up UPnP/IGD device from a config entry.""" domain_data = hass.data[DOMAIN] conf = domain_data["config"] # discover and construct - device = await async_discover_and_construct(hass, config_entry.data.get("udn")) + udn = config_entry.data.get("udn") + st = config_entry.data.get("st") # pylint: disable=invalid-name + device = await async_discover_and_construct(hass, udn, st) if not device: _LOGGER.info("Unable to create UPnP/IGD, aborting") - return False + raise ConfigEntryNotReady - # 'register'/save UDN + # 'register'/save UDN + ST hass.data[DOMAIN]["devices"][device.udn] = device hass.config_entries.async_update_entry( - entry=config_entry, data={**config_entry.data, "udn": device.udn} + entry=config_entry, + data={**config_entry.data, "udn": device.udn, "st": device.device_type}, ) # create device registry entry @@ -179,8 +186,8 @@ async def async_setup_entry(hass: HomeAssistantType, config_entry: ConfigEntry): # set up port mapping if conf.get(CONF_ENABLE_PORT_MAPPING): _LOGGER.debug("Enabling port mapping") - local_ip = domain_data["local_ip"] - ports = conf.get("ports", {}) + local_ip = domain_data[CONF_LOCAL_IP] + ports = conf.get(CONF_PORTS, {}) hass_port = None if hasattr(hass, "http"): @@ -200,7 +207,9 @@ async def async_setup_entry(hass: HomeAssistantType, config_entry: ConfigEntry): return True -async def async_unload_entry(hass: HomeAssistantType, config_entry: ConfigEntry): +async def async_unload_entry( + hass: HomeAssistantType, config_entry: ConfigEntry +) -> bool: """Unload a UPnP/IGD device from a config entry.""" udn = config_entry.data["udn"] device = hass.data[DOMAIN]["devices"][udn] @@ -211,6 +220,4 @@ async def async_unload_entry(hass: HomeAssistantType, config_entry: ConfigEntry) # remove sensors _LOGGER.debug("Deleting sensors") - dispatcher.async_dispatcher_send(hass, SIGNAL_REMOVE_SENSOR, device) - - return True + return await hass.config_entries.async_forward_entry_unload(config_entry, "sensor") diff --git a/homeassistant/components/upnp/const.py b/homeassistant/components/upnp/const.py index 1b7540ee499..80b5b718bbb 100644 --- a/homeassistant/components/upnp/const.py +++ b/homeassistant/components/upnp/const.py @@ -1,6 +1,9 @@ """Constants for the IGD component.""" +from datetime import timedelta import logging +from homeassistant.const import TIME_SECONDS + CONF_ENABLE_PORT_MAPPING = "port_mapping" CONF_ENABLE_SENSORS = "sensors" CONF_HASS = "hass" @@ -8,4 +11,12 @@ CONF_LOCAL_IP = "local_ip" CONF_PORTS = "ports" DOMAIN = "upnp" LOGGER = logging.getLogger(__package__) -SIGNAL_REMOVE_SENSOR = "upnp_remove_sensor" +BYTES_RECEIVED = "bytes_received" +BYTES_SENT = "bytes_sent" +PACKETS_RECEIVED = "packets_received" +PACKETS_SENT = "packets_sent" +TIMESTAMP = "timestamp" +DATA_PACKETS = "packets" +DATA_RATE_PACKETS_PER_SECOND = f"{DATA_PACKETS}/{TIME_SECONDS}" +KIBIBYTE = 1024 +UPDATE_INTERVAL = timedelta(seconds=30) diff --git a/homeassistant/components/upnp/device.py b/homeassistant/components/upnp/device.py index 474170050c3..73ae06d9945 100644 --- a/homeassistant/components/upnp/device.py +++ b/homeassistant/components/upnp/device.py @@ -1,6 +1,7 @@ """Home Assistant representation of an UPnP/IGD.""" import asyncio from ipaddress import IPv4Address +from typing import Mapping import aiohttp from async_upnp_client import UpnpError, UpnpFactory @@ -9,8 +10,18 @@ from async_upnp_client.profiles.igd import IgdDevice from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.typing import HomeAssistantType +import homeassistant.util.dt as dt_util -from .const import CONF_LOCAL_IP, DOMAIN, LOGGER as _LOGGER +from .const import ( + BYTES_RECEIVED, + BYTES_SENT, + CONF_LOCAL_IP, + DOMAIN, + LOGGER as _LOGGER, + PACKETS_RECEIVED, + PACKETS_SENT, + TIMESTAMP, +) class Device: @@ -18,7 +29,7 @@ class Device: def __init__(self, igd_device): """Initialize UPnP/IGD device.""" - self._igd_device = igd_device + self._igd_device: IgdDevice = igd_device self._mapped_ports = [] @classmethod @@ -61,26 +72,37 @@ class Device: return cls(igd_device) @property - def udn(self): + def udn(self) -> str: """Get the UDN.""" return self._igd_device.udn @property - def name(self): + def name(self) -> str: """Get the name.""" return self._igd_device.name @property - def manufacturer(self): + def manufacturer(self) -> str: """Get the manufacturer.""" return self._igd_device.manufacturer @property - def model_name(self): + def model_name(self) -> str: """Get the model name.""" return self._igd_device.model_name - async def async_add_port_mappings(self, ports, local_ip): + @property + def device_type(self) -> str: + """Get the device type.""" + return self._igd_device.device_type + + def __str__(self) -> str: + """Get string representation.""" + return f"IGD Device: {self.name}/{self.udn}" + + async def async_add_port_mappings( + self, ports: Mapping[int, int], local_ip: str + ) -> None: """Add port mappings.""" if local_ip == "127.0.0.1": _LOGGER.error("Could not create port mapping, our IP is 127.0.0.1") @@ -93,7 +115,9 @@ class Device: await self._async_add_port_mapping(external_port, local_ip, internal_port) self._mapped_ports.append(external_port) - async def _async_add_port_mapping(self, external_port, local_ip, internal_port): + async def _async_add_port_mapping( + self, external_port: int, local_ip: str, internal_port: int + ) -> None: """Add a port mapping.""" # create port mapping _LOGGER.info( @@ -123,12 +147,12 @@ class Device: internal_port, ) - async def async_delete_port_mappings(self): - """Remove a port mapping.""" + async def async_delete_port_mappings(self) -> None: + """Remove port mappings.""" for port in self._mapped_ports: await self._async_delete_port_mapping(port) - async def _async_delete_port_mapping(self, external_port): + async def _async_delete_port_mapping(self, external_port: int) -> None: """Remove a port mapping.""" _LOGGER.info("Deleting port mapping %s (TCP)", external_port) try: @@ -140,30 +164,31 @@ class Device: except (asyncio.TimeoutError, aiohttp.ClientError, UpnpError): _LOGGER.error("Could not delete port mapping") - async def async_get_total_bytes_received(self): - """Get total bytes received.""" - try: - return await self._igd_device.async_get_total_bytes_received() - except asyncio.TimeoutError: - _LOGGER.warning("Timeout during get_total_bytes_received") + async def async_get_traffic_data(self) -> Mapping[str, any]: + """ + Get all traffic data in one go. - async def async_get_total_bytes_sent(self): - """Get total bytes sent.""" - try: - return await self._igd_device.async_get_total_bytes_sent() - except asyncio.TimeoutError: - _LOGGER.warning("Timeout during get_total_bytes_sent") + Traffic data consists of: + - total bytes sent + - total bytes received + - total packets sent + - total packats received - async def async_get_total_packets_received(self): - """Get total packets received.""" - try: - return await self._igd_device.async_get_total_packets_received() - except asyncio.TimeoutError: - _LOGGER.warning("Timeout during get_total_packets_received") + Data is timestamped. + """ + _LOGGER.debug("Getting traffic statistics from device: %s", self) - async def async_get_total_packets_sent(self): - """Get total packets sent.""" - try: - return await self._igd_device.async_get_total_packets_sent() - except asyncio.TimeoutError: - _LOGGER.warning("Timeout during get_total_packets_sent") + values = await asyncio.gather( + self._igd_device.async_get_total_bytes_received(), + self._igd_device.async_get_total_bytes_sent(), + self._igd_device.async_get_total_packets_received(), + self._igd_device.async_get_total_packets_sent(), + ) + + return { + TIMESTAMP: dt_util.utcnow(), + BYTES_RECEIVED: values[0], + BYTES_SENT: values[1], + PACKETS_RECEIVED: values[2], + PACKETS_SENT: values[3], + } diff --git a/homeassistant/components/upnp/manifest.json b/homeassistant/components/upnp/manifest.json index 47ad465eb36..2f6e5de5884 100644 --- a/homeassistant/components/upnp/manifest.json +++ b/homeassistant/components/upnp/manifest.json @@ -3,7 +3,7 @@ "name": "UPnP", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/upnp", - "requirements": ["async-upnp-client==0.14.12"], + "requirements": ["async-upnp-client==0.14.13"], "dependencies": [], "codeowners": ["@StevenLooman"] } diff --git a/homeassistant/components/upnp/sensor.py b/homeassistant/components/upnp/sensor.py index 9632997ac1b..5c356b53c8a 100644 --- a/homeassistant/components/upnp/sensor.py +++ b/homeassistant/components/upnp/sensor.py @@ -1,273 +1,247 @@ """Support for UPnP/IGD Sensors.""" from datetime import timedelta -import logging +from typing import Mapping -from homeassistant.const import DATA_BYTES, DATA_KIBIBYTES, TIME_SECONDS -from homeassistant.core import callback +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import DATA_BYTES, DATA_RATE_KIBIBYTES_PER_SECOND from homeassistant.helpers import device_registry as dr -from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity from homeassistant.helpers.typing import HomeAssistantType -from homeassistant.util import Throttle -import homeassistant.util.dt as dt_util +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator -from .const import DOMAIN as DOMAIN_UPNP, SIGNAL_REMOVE_SENSOR - -_LOGGER = logging.getLogger(__name__) - -BYTES_RECEIVED = "bytes_received" -BYTES_SENT = "bytes_sent" -PACKETS_RECEIVED = "packets_received" -PACKETS_SENT = "packets_sent" +from .const import ( + BYTES_RECEIVED, + BYTES_SENT, + DATA_PACKETS, + DATA_RATE_PACKETS_PER_SECOND, + DOMAIN, + KIBIBYTE, + LOGGER as _LOGGER, + PACKETS_RECEIVED, + PACKETS_SENT, + TIMESTAMP, + UPDATE_INTERVAL, +) +from .device import Device SENSOR_TYPES = { - BYTES_RECEIVED: {"name": "bytes received", "unit": DATA_BYTES}, - BYTES_SENT: {"name": "bytes sent", "unit": DATA_BYTES}, - PACKETS_RECEIVED: {"name": "packets received", "unit": "packets"}, - PACKETS_SENT: {"name": "packets sent", "unit": "packets"}, + BYTES_RECEIVED: { + "device_value_key": BYTES_RECEIVED, + "name": f"{DATA_BYTES} received", + "unit": DATA_BYTES, + "unique_id": BYTES_RECEIVED, + "derived_name": f"{DATA_RATE_KIBIBYTES_PER_SECOND} received", + "derived_unit": DATA_RATE_KIBIBYTES_PER_SECOND, + "derived_unique_id": "KiB/sec_received", + }, + BYTES_SENT: { + "device_value_key": BYTES_SENT, + "name": f"{DATA_BYTES} sent", + "unit": DATA_BYTES, + "unique_id": BYTES_SENT, + "derived_name": f"{DATA_RATE_KIBIBYTES_PER_SECOND} sent", + "derived_unit": DATA_RATE_KIBIBYTES_PER_SECOND, + "derived_unique_id": "KiB/sec_sent", + }, + PACKETS_RECEIVED: { + "device_value_key": PACKETS_RECEIVED, + "name": f"{DATA_PACKETS} received", + "unit": DATA_PACKETS, + "unique_id": PACKETS_RECEIVED, + "derived_name": f"{DATA_RATE_PACKETS_PER_SECOND} received", + "derived_unit": DATA_RATE_PACKETS_PER_SECOND, + "derived_unique_id": "packets/sec_received", + }, + PACKETS_SENT: { + "device_value_key": PACKETS_SENT, + "name": f"{DATA_PACKETS} sent", + "unit": DATA_PACKETS, + "unique_id": PACKETS_SENT, + "derived_name": f"{DATA_RATE_PACKETS_PER_SECOND} sent", + "derived_unit": DATA_RATE_PACKETS_PER_SECOND, + "derived_unique_id": "packets/sec_sent", + }, } -IN = "received" -OUT = "sent" -KIBIBYTE = 1024 - -MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=30) - async def async_setup_platform( hass: HomeAssistantType, config, async_add_entities, discovery_info=None -): +) -> None: """Old way of setting up UPnP/IGD sensors.""" _LOGGER.debug( "async_setup_platform: config: %s, discovery: %s", config, discovery_info ) -async def async_setup_entry(hass, config_entry, async_add_entities): - """Set up the UPnP/IGD sensor.""" - - @callback - def async_add_sensor(device): - """Add sensors from UPnP/IGD device.""" - # raw sensors + per-second sensors - sensors = [ - RawUPnPIGDSensor(device, name, sensor_type) - for name, sensor_type in SENSOR_TYPES.items() - ] - sensors += [ - KBytePerSecondUPnPIGDSensor(device, IN), - KBytePerSecondUPnPIGDSensor(device, OUT), - PacketsPerSecondUPnPIGDSensor(device, IN), - PacketsPerSecondUPnPIGDSensor(device, OUT), - ] - async_add_entities(sensors, True) - +async def async_setup_entry( + hass, config_entry: ConfigEntry, async_add_entities +) -> None: + """Set up the UPnP/IGD sensors.""" data = config_entry.data if "udn" in data: udn = data["udn"] else: # any device will do - udn = list(hass.data[DOMAIN_UPNP]["devices"].keys())[0] + udn = list(hass.data[DOMAIN]["devices"].keys())[0] - device = hass.data[DOMAIN_UPNP]["devices"][udn] - async_add_sensor(device) + device: Device = hass.data[DOMAIN]["devices"][udn] + + _LOGGER.debug("Adding sensors") + coordinator = DataUpdateCoordinator( + hass, + _LOGGER, + name=device.name, + update_method=device.async_get_traffic_data, + update_interval=timedelta(seconds=UPDATE_INTERVAL.seconds), + ) + await coordinator.async_refresh() + + sensors = [ + RawUpnpSensor(coordinator, device, SENSOR_TYPES[BYTES_RECEIVED]), + RawUpnpSensor(coordinator, device, SENSOR_TYPES[BYTES_SENT]), + RawUpnpSensor(coordinator, device, SENSOR_TYPES[PACKETS_RECEIVED]), + RawUpnpSensor(coordinator, device, SENSOR_TYPES[PACKETS_SENT]), + DerivedUpnpSensor(coordinator, device, SENSOR_TYPES[BYTES_RECEIVED]), + DerivedUpnpSensor(coordinator, device, SENSOR_TYPES[BYTES_SENT]), + DerivedUpnpSensor(coordinator, device, SENSOR_TYPES[PACKETS_RECEIVED]), + DerivedUpnpSensor(coordinator, device, SENSOR_TYPES[PACKETS_SENT]), + ] + async_add_entities(sensors, True) class UpnpSensor(Entity): """Base class for UPnP/IGD sensors.""" - def __init__(self, device): + def __init__( + self, + coordinator: DataUpdateCoordinator, + device: Device, + sensor_type: Mapping[str, str], + ) -> None: """Initialize the base sensor.""" + self._coordinator = coordinator self._device = device - - async def async_added_to_hass(self): - """Subscribe to sensors events.""" - async_dispatcher_connect( - self.hass, SIGNAL_REMOVE_SENSOR, self._upnp_remove_sensor - ) - - @callback - def _upnp_remove_sensor(self, device): - """Remove sensor.""" - if self._device != device: - # not for us - return - - self.hass.async_create_task(self.async_remove()) + self._sensor_type = sensor_type @property - def device_info(self): + def should_poll(self) -> bool: + """Inform we should not be polled.""" + return False + + @property + def icon(self) -> str: + """Icon to use in the frontend, if any.""" + return "mdi:server-network" + + @property + def available(self) -> bool: + """Return if entity is available.""" + device_value_key = self._sensor_type["device_value_key"] + return ( + self._coordinator.last_update_success + and device_value_key in self._coordinator.data + ) + + @property + def name(self) -> str: + """Return the name of the sensor.""" + return f"{self._device.name} {self._sensor_type['name']}" + + @property + def unique_id(self) -> str: + """Return an unique ID.""" + return f"{self._device.udn}_{self._sensor_type['unique_id']}" + + @property + def unit_of_measurement(self) -> str: + """Return the unit of measurement of this entity, if any.""" + return self._sensor_type["unit"] + + @property + def device_info(self) -> Mapping[str, any]: """Get device info.""" return { "connections": {(dr.CONNECTION_UPNP, self._device.udn)}, - "identifiers": {(DOMAIN_UPNP, self._device.udn)}, "name": self._device.name, "manufacturer": self._device.manufacturer, "model": self._device.model_name, } + async def async_update(self): + """Request an update.""" + await self._coordinator.async_request_refresh() -class RawUPnPIGDSensor(UpnpSensor): + async def async_added_to_hass(self) -> None: + """Subscribe to sensors events.""" + remove_from_coordinator = self._coordinator.async_add_listener( + self.async_write_ha_state + ) + self.async_on_remove(remove_from_coordinator) + + +class RawUpnpSensor(UpnpSensor): """Representation of a UPnP/IGD sensor.""" - def __init__(self, device, sensor_type_name, sensor_type): - """Initialize the UPnP/IGD sensor.""" - super().__init__(device) - self._type_name = sensor_type_name - self._type = sensor_type - self._name = "{} {}".format(device.name, sensor_type["name"]) - self._state = None - - @property - def name(self) -> str: - """Return the name of the sensor.""" - return self._name - - @property - def unique_id(self) -> str: - """Return an unique ID.""" - return f"{self._device.udn}_{self._type_name}" - @property def state(self) -> str: """Return the state of the device.""" - if self._state is None: - return None - - return format(self._state, "d") - - @property - def icon(self) -> str: - """Icon to use in the frontend, if any.""" - return "mdi:server-network" - - @property - def unit_of_measurement(self) -> str: - """Return the unit of measurement of this entity, if any.""" - return self._type["unit"] - - @Throttle(MIN_TIME_BETWEEN_UPDATES) - async def async_update(self): - """Get the latest information from the IGD.""" - if self._type_name == BYTES_RECEIVED: - self._state = await self._device.async_get_total_bytes_received() - elif self._type_name == BYTES_SENT: - self._state = await self._device.async_get_total_bytes_sent() - elif self._type_name == PACKETS_RECEIVED: - self._state = await self._device.async_get_total_packets_received() - elif self._type_name == PACKETS_SENT: - self._state = await self._device.async_get_total_packets_sent() + device_value_key = self._sensor_type["device_value_key"] + value = self._coordinator.data[device_value_key] + return format(value, "d") -class PerSecondUPnPIGDSensor(UpnpSensor): - """Abstract representation of a X Sent/Received per second sensor.""" +class DerivedUpnpSensor(UpnpSensor): + """Representation of a UNIT Sent/Received per second sensor.""" - def __init__(self, device, direction): + def __init__(self, coordinator, device, sensor_type) -> None: """Initialize sensor.""" - super().__init__(device) - self._direction = direction - - self._state = None + super().__init__(coordinator, device, sensor_type) self._last_value = None - self._last_update_time = None - - @property - def unit(self) -> str: - """Get unit we are measuring in.""" - raise NotImplementedError() - - async def _async_fetch_value(self): - """Fetch a value from the IGD.""" - raise NotImplementedError() - - @property - def unique_id(self) -> str: - """Return an unique ID.""" - return f"{self._device.udn}_{self.unit}/sec_{self._direction}" + self._last_timestamp = None @property def name(self) -> str: """Return the name of the sensor.""" - return f"{self._device.name} {self.unit}/sec {self._direction}" + return f"{self._device.name} {self._sensor_type['derived_name']}" @property - def icon(self) -> str: - """Icon to use in the frontend, if any.""" - return "mdi:server-network" + def unique_id(self) -> str: + """Return an unique ID.""" + return f"{self._device.udn}_{self._sensor_type['derived_unique_id']}" @property def unit_of_measurement(self) -> str: """Return the unit of measurement of this entity, if any.""" - return f"{self.unit}/{TIME_SECONDS}" + return self._sensor_type["derived_unit"] - def _is_overflowed(self, new_value) -> bool: + def _has_overflowed(self, current_value) -> bool: """Check if value has overflowed.""" - return new_value < self._last_value - - async def async_update(self): - """Get the latest information from the UPnP/IGD.""" - new_value = await self._async_fetch_value() - - if self._last_value is None: - self._last_value = new_value - self._last_update_time = dt_util.utcnow() - return - - now = dt_util.utcnow() - if self._is_overflowed(new_value): - self._state = None # temporarily report nothing - else: - delta_time = (now - self._last_update_time).seconds - delta_value = new_value - self._last_value - self._state = delta_value / delta_time - - self._last_value = new_value - self._last_update_time = now - - -class KBytePerSecondUPnPIGDSensor(PerSecondUPnPIGDSensor): - """Representation of a KBytes Sent/Received per second sensor.""" - - @property - def unit(self) -> str: - """Get unit we are measuring in.""" - return DATA_KIBIBYTES - - async def _async_fetch_value(self) -> float: - """Fetch value from device.""" - if self._direction == IN: - return await self._device.async_get_total_bytes_received() - - return await self._device.async_get_total_bytes_sent() + return current_value < self._last_value @property def state(self) -> str: """Return the state of the device.""" - if self._state is None: + # Can't calculate any derivative if we have only one value. + device_value_key = self._sensor_type["device_value_key"] + current_value = self._coordinator.data[device_value_key] + current_timestamp = self._coordinator.data[TIMESTAMP] + if self._last_value is None or self._has_overflowed(current_value): + self._last_value = current_value + self._last_timestamp = current_timestamp return None - return format(float(self._state / KIBIBYTE), ".1f") - - -class PacketsPerSecondUPnPIGDSensor(PerSecondUPnPIGDSensor): - """Representation of a Packets Sent/Received per second sensor.""" - - @property - def unit(self) -> str: - """Get unit we are measuring in.""" - return "packets" - - async def _async_fetch_value(self) -> float: - """Fetch value from device.""" - if self._direction == IN: - return await self._device.async_get_total_packets_received() - - return await self._device.async_get_total_packets_sent() - - @property - def state(self) -> str: - """Return the state of the device.""" - if self._state is None: + # Calculate derivative. + delta_value = current_value - self._last_value + if self._sensor_type["unit"] == DATA_BYTES: + delta_value /= KIBIBYTE + delta_time = current_timestamp - self._last_timestamp + if delta_time.seconds == 0: + # Prevent division by 0. return None + derived = delta_value / delta_time.seconds - return format(float(self._state), ".1f") + # Store current values for future use. + self._last_value = current_value + self._last_timestamp = current_timestamp + + return format(derived, ".1f") diff --git a/homeassistant/components/upnp/strings.json b/homeassistant/components/upnp/strings.json index 6c5b2fb2bb2..5ad90b2c0cb 100644 --- a/homeassistant/components/upnp/strings.json +++ b/homeassistant/components/upnp/strings.json @@ -1,30 +1,25 @@ { - "config": { - "title": "UPnP/IGD", - "step": { - "init": { - "title": "UPnP/IGD" - }, - "confirm": { - "title": "UPnP/IGD", - "description": "Do you want to set up UPnP/IGD?" - }, - "user": { - "title": "Configuration options for the UPnP/IGD", - "data": { - "enable_port_mapping": "Enable port mapping for Home Assistant", - "enable_sensors": "Add traffic sensors", - "igd": "UPnP/IGD" - } - } - }, - "abort": { - "already_configured": "UPnP/IGD is already configured", - "incomplete_device": "Ignoring incomplete UPnP device", - "no_devices_discovered": "No UPnP/IGDs discovered", - "no_devices_found": "No UPnP/IGD devices found on the network.", - "no_sensors_or_port_mapping": "Enable at least sensors or port mapping", - "single_instance_allowed": "Only a single configuration of UPnP/IGD is necessary." + "config": { + "step": { + "confirm": { + "description": "Do you want to set up UPnP/IGD?" + }, + "user": { + "title": "Configuration options", + "data": { + "enable_port_mapping": "Enable port mapping for Home Assistant", + "enable_sensors": "Add traffic sensors", + "igd": "UPnP/IGD" } + } + }, + "abort": { + "already_configured": "UPnP/IGD is already configured", + "incomplete_device": "Ignoring incomplete UPnP device", + "no_devices_discovered": "No UPnP/IGDs discovered", + "no_devices_found": "No UPnP/IGD devices found on the network.", + "no_sensors_or_port_mapping": "Enable at least sensors or port mapping", + "single_instance_allowed": "Only a single configuration of UPnP/IGD is necessary." } -} \ No newline at end of file + } +} diff --git a/homeassistant/components/upnp/translations/bg.json b/homeassistant/components/upnp/translations/bg.json new file mode 100644 index 00000000000..d99458ca4e7 --- /dev/null +++ b/homeassistant/components/upnp/translations/bg.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "incomplete_device": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043d\u0435\u043f\u044a\u043b\u043d\u043e UPnP \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e", + "no_devices_discovered": "\u041d\u044f\u043c\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438 UPnP/IGD", + "no_devices_found": "\u041d\u0435 \u0441\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 UPnP/IGD \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043c\u0440\u0435\u0436\u0430\u0442\u0430.", + "no_sensors_or_port_mapping": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0439\u0442\u0435 \u0441\u0435\u043d\u0437\u043e\u0440\u0438\u0442\u0435 \u0438\u043b\u0438 \u043f\u0440\u0435\u043d\u0430\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430", + "single_instance_allowed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 UPnP/IGD." + }, + "error": { + "one": "\u0433\u0440\u0435\u0448\u043a\u0430", + "other": "\u0433\u0440\u0435\u0448\u043a\u0438" + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0435\u043d\u0430\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430 \u0437\u0430 Home Assistant", + "enable_sensors": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0442\u0440\u0430\u0444\u0438\u0447\u043d\u0438 \u0441\u0435\u043d\u0437\u043e\u0440\u0438", + "igd": "UPnP/IGD" + }, + "title": "\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u043e\u043f\u0446\u0438\u0438 \u0437\u0430 UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/ca.json b/homeassistant/components/upnp/translations/ca.json new file mode 100644 index 00000000000..f58069ea907 --- /dev/null +++ b/homeassistant/components/upnp/translations/ca.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD ja est\u00e0 configurat", + "incomplete_device": "Ignorant el dispositiu incomplet UPnP", + "no_devices_discovered": "No s'ha trobat cap UPnP/IGD", + "no_devices_found": "No s'han trobat dispositius UPnP/IGD a la xarxa.", + "no_sensors_or_port_mapping": "Activa, com a m\u00ednim, els sensors o l'assignaci\u00f3 de ports", + "single_instance_allowed": "Nom\u00e9s cal una sola configuraci\u00f3 de UPnP/IGD." + }, + "error": { + "one": "un", + "other": "altre" + }, + "step": { + "confirm": { + "description": "Vols configurar UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Activa l'assignaci\u00f3 de ports per a Home Assistant", + "enable_sensors": "Afegeix sensors de tr\u00e0nsit", + "igd": "UPnP/IGD" + }, + "title": "Opcions de configuraci\u00f3 d'UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/cs.json b/homeassistant/components/upnp/translations/cs.json new file mode 100644 index 00000000000..745b136bd5d --- /dev/null +++ b/homeassistant/components/upnp/translations/cs.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD je ji\u017e nakonfigurov\u00e1no", + "incomplete_device": "Ignorov\u00e1n\u00ed ne\u00fapln\u00e9ho za\u0159\u00edzen\u00ed UPnP", + "no_devices_discovered": "Nebyly zji\u0161t\u011bny \u017e\u00e1dn\u00e9 UPnP/IGD", + "no_devices_found": "V s\u00edti nejsou nalezena \u017e\u00e1dn\u00e1 za\u0159\u00edzen\u00ed UPnP/IGD.", + "no_sensors_or_port_mapping": "Povolte senzory nebo mapov\u00e1n\u00ed port\u016f", + "single_instance_allowed": "Povolena je pouze jedna instance UPnP/IGD." + }, + "step": { + "confirm": { + "description": "Chcete nastavit UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Povolit mapov\u00e1n\u00ed port\u016f pro Home Assistant", + "enable_sensors": "P\u0159idejte dopravn\u00ed senzory", + "igd": "UPnP/IGD" + }, + "title": "Mo\u017enosti konfigurace pro UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/da.json b/homeassistant/components/upnp/translations/da.json new file mode 100644 index 00000000000..7f75272b240 --- /dev/null +++ b/homeassistant/components/upnp/translations/da.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD er allerede konfigureret", + "incomplete_device": "Ignorerer ufuldst\u00e6ndig UPnP-enhed", + "no_devices_discovered": "Ingen UPnP/IGD-enheder fundet.", + "no_devices_found": "Ingen UPnP/IGD enheder kunne findes p\u00e5 netv\u00e6rket.", + "no_sensors_or_port_mapping": "Aktiv\u00e9r enten sensorer eller porttilknytning", + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af UPnP/IGD." + }, + "error": { + "one": "En", + "other": "Anden" + }, + "step": { + "confirm": { + "description": "Er du sikker p\u00e5 at du vil konfigurere UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Aktiv\u00e9r porttilknytning til Home Assistent", + "enable_sensors": "Tilf\u00f8j trafiksensorer", + "igd": "UPnP/IGD" + }, + "title": "Konfigurationsindstillinger for UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/de.json b/homeassistant/components/upnp/translations/de.json new file mode 100644 index 00000000000..14f8f472221 --- /dev/null +++ b/homeassistant/components/upnp/translations/de.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD ist bereits konfiguriert", + "incomplete_device": "Unvollst\u00e4ndiges UPnP-Ger\u00e4t wird ignoriert", + "no_devices_discovered": "Keine UPnP/IGDs entdeckt", + "no_devices_found": "Keine UPnP/IGD-Ger\u00e4te im Netzwerk gefunden.", + "no_sensors_or_port_mapping": "Aktiviere mindestens Sensoren oder Port-Mapping", + "single_instance_allowed": "Es ist nur eine einzige Konfiguration von UPnP/IGD erforderlich." + }, + "error": { + "one": "Ein", + "other": "andere" + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du UPnP/IGD einrichten?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Aktiviere Port-Mapping f\u00fcr Home Assistant", + "enable_sensors": "Verkehrssensoren hinzuf\u00fcgen", + "igd": "UPnP/IGD" + }, + "title": "Konfigurations-Optionen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/en.json b/homeassistant/components/upnp/translations/en.json new file mode 100644 index 00000000000..6da89c0e3d6 --- /dev/null +++ b/homeassistant/components/upnp/translations/en.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD is already configured", + "incomplete_device": "Ignoring incomplete UPnP device", + "no_devices_discovered": "No UPnP/IGDs discovered", + "no_devices_found": "No UPnP/IGD devices found on the network.", + "no_sensors_or_port_mapping": "Enable at least sensors or port mapping", + "single_instance_allowed": "Only a single configuration of UPnP/IGD is necessary." + }, + "step": { + "confirm": { + "description": "Do you want to set up UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Enable port mapping for Home Assistant", + "enable_sensors": "Add traffic sensors", + "igd": "UPnP/IGD" + }, + "title": "Configuration options" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/es-419.json b/homeassistant/components/upnp/translations/es-419.json new file mode 100644 index 00000000000..00d43221727 --- /dev/null +++ b/homeassistant/components/upnp/translations/es-419.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD ya est\u00e1 configurado", + "incomplete_device": "Ignorar un dispositivo UPnP incompleto", + "no_devices_discovered": "No se han descubierto UPnP/IGDs", + "no_devices_found": "No se encuentran dispositivos UPnP/IGD en la red.", + "no_sensors_or_port_mapping": "Habilitar al menos sensores o mapeo de puertos", + "single_instance_allowed": "S\u00f3lo se necesita una \u00fanica configuraci\u00f3n de UPnP/IGD." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Habilitar la asignaci\u00f3n de puertos para Home Assistant", + "enable_sensors": "A\u00f1adir sensores de tr\u00e1fico", + "igd": "UPnP/IGD" + }, + "title": "Opciones de configuraci\u00f3n para UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/es.json b/homeassistant/components/upnp/translations/es.json new file mode 100644 index 00000000000..cf07aac4bde --- /dev/null +++ b/homeassistant/components/upnp/translations/es.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP / IGD ya est\u00e1 configurado", + "incomplete_device": "Ignorando el dispositivo UPnP incompleto", + "no_devices_discovered": "No se descubrieron UPnP / IGDs", + "no_devices_found": "No se encuentran dispositivos UPnP/IGD en la red.", + "no_sensors_or_port_mapping": "Habilitar al menos sensores o mapeo de puertos", + "single_instance_allowed": "S\u00f3lo se necesita una configuraci\u00f3n de UPnP/IGD." + }, + "error": { + "one": "UNO", + "other": "OTRO" + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP / IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Habilitar la asignaci\u00f3n de puertos para Home Assistant", + "enable_sensors": "A\u00f1adir sensores de tr\u00e1fico", + "igd": "UPnP / IGD" + }, + "title": "Opciones de configuraci\u00f3n para UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/et.json b/homeassistant/components/upnp/translations/et.json new file mode 100644 index 00000000000..bfbd2137298 --- /dev/null +++ b/homeassistant/components/upnp/translations/et.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "init": { + "title": "" + }, + "user": { + "data": { + "igd": "" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/fr.json b/homeassistant/components/upnp/translations/fr.json new file mode 100644 index 00000000000..8b46143beda --- /dev/null +++ b/homeassistant/components/upnp/translations/fr.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP / IGD est d\u00e9j\u00e0 configur\u00e9", + "incomplete_device": "Ignorer un p\u00e9riph\u00e9rique UPnP incomplet", + "no_devices_discovered": "Aucun UPnP / IGD d\u00e9couvert", + "no_devices_found": "Aucun p\u00e9riph\u00e9rique UPnP / IGD trouv\u00e9 sur le r\u00e9seau.", + "no_sensors_or_port_mapping": "Activer au moins les capteurs ou la cartographie des ports", + "single_instance_allowed": "Une seule configuration UPnP / IGD est n\u00e9cessaire." + }, + "error": { + "one": "Vide", + "other": "Vide" + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer UPnP / IGD?", + "title": "UPnP / IGD" + }, + "init": { + "title": "UPnP / IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Activer le mappage de port pour Home Assistant", + "enable_sensors": "Ajouter des capteurs de trafic", + "igd": "UPnP / IGD" + }, + "title": "Options de configuration pour UPnP / IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/hr.json b/homeassistant/components/upnp/translations/hr.json similarity index 100% rename from homeassistant/components/upnp/.translations/hr.json rename to homeassistant/components/upnp/translations/hr.json diff --git a/homeassistant/components/upnp/translations/hu.json b/homeassistant/components/upnp/translations/hu.json new file mode 100644 index 00000000000..e44afa53a65 --- /dev/null +++ b/homeassistant/components/upnp/translations/hu.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Az UPnP / IGD m\u00e1r konfigur\u00e1l\u00e1sra ker\u00fclt", + "incomplete_device": "A hi\u00e1nyos UPnP-eszk\u00f6z figyelmen k\u00edv\u00fcl hagy\u00e1sa", + "no_devices_discovered": "Nem tal\u00e1ltam UPnP / IGD-ket", + "no_devices_found": "Nincsenek UPnPIGD eszk\u00f6z\u00f6k a h\u00e1l\u00f3zaton.", + "single_instance_allowed": "Csak egy UPnP / IGD konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges." + }, + "error": { + "one": "hiba", + "other": "" + }, + "step": { + "confirm": { + "description": "Be szeretn\u00e9d \u00e1ll\u00edtani a UPnP/IGD-t?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Enged\u00e9lyezd a port mappinget a Home Assistant sz\u00e1m\u00e1ra", + "enable_sensors": "Forgalom \u00e9rz\u00e9kel\u0151k hozz\u00e1ad\u00e1sa", + "igd": "UPnP/IGD" + }, + "title": "Az UPnP/IGD be\u00e1ll\u00edt\u00e1si lehet\u0151s\u00e9gei" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/it.json b/homeassistant/components/upnp/translations/it.json new file mode 100644 index 00000000000..06c40aa95a7 --- /dev/null +++ b/homeassistant/components/upnp/translations/it.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD \u00e8 gi\u00e0 configurato", + "incomplete_device": "Ignorare il dispositivo UPnP incompleto", + "no_devices_discovered": "Nessun UPnP/IGD trovato", + "no_devices_found": "Nessun dispositivo UPnP/IGD trovato in rete.", + "no_sensors_or_port_mapping": "Abilita almeno i sensori o la mappatura delle porte", + "single_instance_allowed": "\u00c8 necessaria una sola configurazione di UPnP/IGD." + }, + "error": { + "one": "Vuoto", + "other": "Vuoto" + }, + "step": { + "confirm": { + "description": "Vuoi configurare UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Abilita il port mapping per Home Assistant", + "enable_sensors": "Aggiungi sensori di traffico", + "igd": "UPnP/IGD" + }, + "title": "Opzioni di configurazione per UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/ko.json b/homeassistant/components/upnp/translations/ko.json new file mode 100644 index 00000000000..d1581b026cc --- /dev/null +++ b/homeassistant/components/upnp/translations/ko.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD \uac00 \uc774\ubbf8 \uc124\uc815\ub41c \uc0c1\ud0dc\uc785\ub2c8\ub2e4", + "incomplete_device": "\ubd88\uc644\uc804\ud55c UPnP \uae30\uae30 \ubb34\uc2dc\ud558\uae30", + "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." + }, + "step": { + "confirm": { + "description": "UPnP/IGD \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Home Assistant \ud3ec\ud2b8 \ub9e4\ud551 \ud65c\uc131\ud654", + "enable_sensors": "\ud2b8\ub798\ud53d \uc13c\uc11c \ucd94\uac00", + "igd": "UPnP/IGD" + }, + "title": "UPnP/IGD \uc758 \uad6c\uc131 \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/lb.json b/homeassistant/components/upnp/translations/lb.json new file mode 100644 index 00000000000..9fb009f0935 --- /dev/null +++ b/homeassistant/components/upnp/translations/lb.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD ass scho konfigur\u00e9iert", + "incomplete_device": "Ignor\u00e9iert onvollst\u00e4nnegen UPnP-Apparat", + "no_devices_discovered": "Keng UPnP/IGDs entdeckt", + "no_devices_found": "Keng UPnP/IGD Apparater am Netzwierk fonnt.", + "no_sensors_or_port_mapping": "Aktiv\u00e9ier op mannst Sensoren oder Port Mapping", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun UPnP/IGD ass n\u00e9ideg." + }, + "error": { + "one": "Een", + "other": "Aaner" + }, + "step": { + "confirm": { + "description": "Soll UPnP/IGD konfigur\u00e9iert ginn?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Port Mapping fir Home Assistant aktiv\u00e9ieren", + "enable_sensors": "Trafic Sensoren dob\u00e4isetzen", + "igd": "UPnP/IGD" + }, + "title": "Konfiguratiouns Optiounen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/nl.json b/homeassistant/components/upnp/translations/nl.json new file mode 100644 index 00000000000..f86eb49e0c4 --- /dev/null +++ b/homeassistant/components/upnp/translations/nl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD is al geconfigureerd", + "incomplete_device": "Onvolledig UPnP-apparaat negeren", + "no_devices_discovered": "Geen UPnP'/IGD's ontdekt", + "no_devices_found": "Geen UPnP/IGD apparaten gevonden op het netwerk.", + "no_sensors_or_port_mapping": "Schakel ten minste sensoren of poorttoewijzing in", + "single_instance_allowed": "Er is slechts \u00e9\u00e9n configuratie van UPnP/IGD nodig." + }, + "error": { + "one": "Een", + "other": "Ander" + }, + "step": { + "confirm": { + "description": "Wilt u UPnP/IGD instellen?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Poorttoewijzing voor Home Assistant inschakelen", + "enable_sensors": "Voeg verkeerssensoren toe", + "igd": "UPnP/IGD" + }, + "title": "Configuratiemogelijkheden voor de UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/nn.json b/homeassistant/components/upnp/translations/nn.json new file mode 100644 index 00000000000..b947ce87ff5 --- /dev/null +++ b/homeassistant/components/upnp/translations/nn.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "no_sensors_or_port_mapping": "I det minste, aktiver sensor eller portkartlegging" + }, + "error": { + "one": "Ein", + "other": "Andre" + }, + "step": { + "confirm": { + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP / IGD" + }, + "user": { + "data": { + "igd": "UPnP/IGD" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/no.json b/homeassistant/components/upnp/translations/no.json new file mode 100644 index 00000000000..3004ab40ee7 --- /dev/null +++ b/homeassistant/components/upnp/translations/no.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP / IGD er allerede konfigurert", + "incomplete_device": "Ignorerer ufullstendig UPnP-enhet", + "no_devices_discovered": "Ingen UPnP / IGDs oppdaget", + "no_devices_found": "Ingen UPnP / IGD-enheter funnet p\u00e5 nettverket.", + "no_sensors_or_port_mapping": "Aktiver minst sensorer eller port mapping", + "single_instance_allowed": "Bare en konfigurasjon av UPnP / IGD er n\u00f8dvendig." + }, + "error": { + "few": "f\u00e5", + "many": "mange", + "one": "en", + "other": "andre", + "two": "to", + "zero": "ingen" + }, + "step": { + "confirm": { + "description": "\u00d8nsker du \u00e5 konfigurere UPnP / IGD?", + "title": "UPnP / IGD" + }, + "init": { + "title": "UPnP / IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Aktiver port mapping for Home Assistant", + "enable_sensors": "Legg til trafikk sensorer", + "igd": "UPnP / IGD" + }, + "title": "Konfigurasjonsalternativer for UPnP / IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/pl.json b/homeassistant/components/upnp/translations/pl.json new file mode 100644 index 00000000000..a4370672a96 --- /dev/null +++ b/homeassistant/components/upnp/translations/pl.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD jest ju\u017c skonfigurowane.", + "incomplete_device": "Ignorowanie niekompletnego urz\u0105dzenia UPnP", + "no_devices_discovered": "Nie wykryto urz\u0105dze\u0144 UPnP/IGD", + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 UPnP/IGD.", + "no_sensors_or_port_mapping": "W\u0142\u0105cz przynajmniej sensory lub mapowanie port\u00f3w", + "single_instance_allowed": "Wymagana jest tylko jedna konfiguracja UPnP/IGD." + }, + "error": { + "few": "kilka", + "many": "wiele", + "one": "jeden", + "other": "inne" + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "W\u0142\u0105cz mapowanie port\u00f3w dla Home Assistant'a", + "enable_sensors": "Dodaj sensor ruchu sieciowego", + "igd": "UPnP/IGD" + }, + "title": "Opcje konfiguracji dla UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/pt-BR.json b/homeassistant/components/upnp/translations/pt-BR.json new file mode 100644 index 00000000000..25804bab983 --- /dev/null +++ b/homeassistant/components/upnp/translations/pt-BR.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP / IGD j\u00e1 est\u00e1 configurado", + "incomplete_device": "Ignorando o dispositivo UPnP incompleto", + "no_devices_discovered": "Nenhum UPnP/IGD descoberto", + "no_devices_found": "Nenhum dispositivo UPnP/IGD encontrado na rede.", + "no_sensors_or_port_mapping": "Ative pelo menos sensores ou mapeamento de porta", + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do UPnP/IGD \u00e9 necess\u00e1ria." + }, + "step": { + "confirm": { + "description": "Deseja configurar o UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Ativar o mapeamento de porta para o Home Assistant", + "enable_sensors": "Adicionar sensores de tr\u00e1fego", + "igd": "UPnP/IGD" + }, + "title": "Op\u00e7\u00f5es de configura\u00e7\u00e3o para o UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/pt.json b/homeassistant/components/upnp/translations/pt.json new file mode 100644 index 00000000000..1dbbc34ab0b --- /dev/null +++ b/homeassistant/components/upnp/translations/pt.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD j\u00e1 est\u00e1 configurado", + "incomplete_device": "Dispositivos UPnP incompletos ignorados", + "no_devices_discovered": "Nenhum UPnP/IGDs descoberto", + "no_devices_found": "Nenhum dispositivo UPnP / IGD encontrado na rede.", + "no_sensors_or_port_mapping": "Ative pelo menos os sensores ou o mapeamento de porta", + "single_instance_allowed": "Apenas uma \u00fanica configura\u00e7\u00e3o do UPnP/IGD \u00e9 necess\u00e1ria." + }, + "error": { + "one": "um", + "other": "v\u00e1rios" + }, + "step": { + "confirm": { + "description": "Deseja configurar o UPnP / IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Ativar o mapeamento de porta para o Home Assistant", + "enable_sensors": "Adicionar sensores de tr\u00e1fego", + "igd": "UPnP/IGD" + }, + "title": "Op\u00e7\u00f5es de configura\u00e7\u00e3o para o UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/ro.json b/homeassistant/components/upnp/translations/ro.json new file mode 100644 index 00000000000..7c8401569f1 --- /dev/null +++ b/homeassistant/components/upnp/translations/ro.json @@ -0,0 +1,26 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD este deja configurat", + "no_devices_discovered": "Nu au fost descoperite UPnP/IGD-uri" + }, + "error": { + "few": "", + "one": "Unul", + "other": "" + }, + "step": { + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Activa\u021bi maparea porturilor pentru Home Assistant", + "enable_sensors": "Ad\u0103uga\u021bi senzori de trafic", + "igd": "UPnP/IGD" + }, + "title": "Op\u021biuni de configurare pentru UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/ru.json b/homeassistant/components/upnp/translations/ru.json new file mode 100644 index 00000000000..2e8a3ac3b45 --- /dev/null +++ b/homeassistant/components/upnp/translations/ru.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "incomplete_device": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 UPnP.", + "no_devices_discovered": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e UPnP / IGD.", + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 UPnP / IGD \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0432 \u0441\u0435\u0442\u0438.", + "no_sensors_or_port_mapping": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0438\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "few": "\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e", + "many": "\u043c\u043d\u043e\u0433\u043e", + "one": "\u043e\u0434\u0438\u043d", + "other": "\u0434\u0440\u0443\u0433\u0438\u0435" + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c UPnP / IGD?", + "title": "UPnP / IGD" + }, + "init": { + "title": "UPnP / IGD" + }, + "user": { + "data": { + "enable_port_mapping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f Home Assistant", + "enable_sensors": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430", + "igd": "UPnP / IGD" + }, + "title": "UPnP / IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/sl.json b/homeassistant/components/upnp/translations/sl.json new file mode 100644 index 00000000000..2ff0acc208c --- /dev/null +++ b/homeassistant/components/upnp/translations/sl.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD je \u017ee konfiguriran", + "incomplete_device": "Ignoriranje nepopolnih UPnP naprav", + "no_devices_discovered": "Ni odkritih UPnP/IGD naprav", + "no_devices_found": "Naprav UPnP/IGD ni mogo\u010de najti v omre\u017eju.", + "no_sensors_or_port_mapping": "Omogo\u010dite vsaj senzorje ali preslikavo vrat (port mapping)", + "single_instance_allowed": "Potrebna je samo ena konfiguracija UPnp/IGD." + }, + "error": { + "few": "nekaj", + "one": "ena", + "other": "ve\u010d", + "two": "dve" + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti UPnp/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Omogo\u010dajo preslikavo vrat (port mapping) za Home Assistant-a", + "enable_sensors": "Dodaj prometne senzorje", + "igd": "UPnP/IGD" + }, + "title": "Mo\u017enosti konfiguracije za UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/sv.json b/homeassistant/components/upnp/translations/sv.json new file mode 100644 index 00000000000..67584ed2f34 --- /dev/null +++ b/homeassistant/components/upnp/translations/sv.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD \u00e4r redan konfigurerad", + "incomplete_device": "Ignorera ofullst\u00e4ndig UPnP-enhet", + "no_devices_discovered": "Inga UPnP/IGDs uppt\u00e4cktes", + "no_devices_found": "Inga UPnP/IGD-enheter hittades p\u00e5 n\u00e4tverket.", + "no_sensors_or_port_mapping": "Aktivera minst sensorer eller portmappning", + "single_instance_allowed": "Endast en enda konfiguration av UPnP/IGD \u00e4r n\u00f6dv\u00e4ndig." + }, + "error": { + "one": "En", + "other": "Andra" + }, + "step": { + "confirm": { + "description": "Vill du konfigurera UPnP/IGD?", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "Aktivera portmappning f\u00f6r Home Assistant", + "enable_sensors": "L\u00e4gg till trafiksensorer", + "igd": "UPnP/IGD" + }, + "title": "Konfigurationsalternativ f\u00f6r UPnP/IGD" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/.translations/tr.json b/homeassistant/components/upnp/translations/tr.json similarity index 100% rename from homeassistant/components/upnp/.translations/tr.json rename to homeassistant/components/upnp/translations/tr.json diff --git a/homeassistant/components/upnp/.translations/uk.json b/homeassistant/components/upnp/translations/uk.json similarity index 100% rename from homeassistant/components/upnp/.translations/uk.json rename to homeassistant/components/upnp/translations/uk.json diff --git a/homeassistant/components/upnp/translations/zh-Hans.json b/homeassistant/components/upnp/translations/zh-Hans.json new file mode 100644 index 00000000000..2c367a3e88f --- /dev/null +++ b/homeassistant/components/upnp/translations/zh-Hans.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD \u5df2\u914d\u7f6e\u5b8c\u6210", + "incomplete_device": "\u5ffd\u7565\u4e0d\u5b8c\u6574\u7684 UPnP \u8bbe\u5907", + "no_devices_discovered": "\u672a\u53d1\u73b0 UPnP/IGD", + "no_devices_found": "\u6ca1\u6709\u5728\u7f51\u7edc\u4e0a\u627e\u5230 UPnP/IGD \u8bbe\u5907\u3002", + "no_sensors_or_port_mapping": "\u81f3\u5c11\u542f\u7528\u4f20\u611f\u5668\u6216\u7aef\u53e3\u6620\u5c04", + "single_instance_allowed": "UPnP/IGD \u53ea\u9700\u8981\u914d\u7f6e\u4e00\u6b21\u3002" + }, + "step": { + "confirm": { + "description": "\u60a8\u60f3\u8981\u914d\u7f6e UPnP/IGD \u5417\uff1f", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "\u4e3a Home Assistant \u542f\u7528\u7aef\u53e3\u6620\u5c04", + "enable_sensors": "\u6dfb\u52a0\u6d41\u91cf\u4f20\u611f\u5668", + "igd": "UPnP/IGD" + }, + "title": "UPnP/IGD \u7684\u914d\u7f6e\u9009\u9879" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/upnp/translations/zh-Hant.json b/homeassistant/components/upnp/translations/zh-Hant.json new file mode 100644 index 00000000000..5464ce9e74b --- /dev/null +++ b/homeassistant/components/upnp/translations/zh-Hant.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "UPnP/IGD \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "incomplete_device": "\u5ffd\u7565\u4e0d\u76f8\u5bb9 UPnP \u8a2d\u5099", + "no_devices_discovered": "\u672a\u641c\u5c0b\u5230 UPnP/IGD", + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 UPnP/IGD \u8a2d\u5099\u3002", + "no_sensors_or_port_mapping": "\u81f3\u5c11\u958b\u555f\u611f\u61c9\u5668\u6216\u901a\u8a0a\u57e0\u8f49\u767c", + "single_instance_allowed": "\u50c5\u9700\u8a2d\u5b9a\u4e00\u6b21 UPnP/IGD \u5373\u53ef\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a UPnP/IGD\uff1f", + "title": "UPnP/IGD" + }, + "init": { + "title": "UPnP/IGD" + }, + "user": { + "data": { + "enable_port_mapping": "\u958b\u555f Home Assistant \u901a\u8a0a\u57e0\u8f49\u767c", + "enable_sensors": "\u65b0\u589e\u6d41\u91cf\u611f\u61c9\u5668", + "igd": "UPnP/IGD" + }, + "title": "\u8a2d\u5b9a\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/uptime/manifest.json b/homeassistant/components/uptime/manifest.json index 4d42d2e5bcb..e3d30345dc4 100644 --- a/homeassistant/components/uptime/manifest.json +++ b/homeassistant/components/uptime/manifest.json @@ -2,8 +2,6 @@ "domain": "uptime", "name": "Uptime", "documentation": "https://www.home-assistant.io/integrations/uptime", - "requirements": [], - "dependencies": [], "codeowners": [], "quality_scale": "internal" } diff --git a/homeassistant/components/uptimerobot/manifest.json b/homeassistant/components/uptimerobot/manifest.json index c835dd425fd..88cbc8ad57f 100644 --- a/homeassistant/components/uptimerobot/manifest.json +++ b/homeassistant/components/uptimerobot/manifest.json @@ -3,6 +3,5 @@ "name": "Uptime Robot", "documentation": "https://www.home-assistant.io/integrations/uptimerobot", "requirements": ["pyuptimerobot==0.0.5"], - "dependencies": [], "codeowners": ["@ludeeus"] } diff --git a/homeassistant/components/uscis/manifest.json b/homeassistant/components/uscis/manifest.json index 4a1b26d4e7a..aabcf344685 100644 --- a/homeassistant/components/uscis/manifest.json +++ b/homeassistant/components/uscis/manifest.json @@ -3,6 +3,5 @@ "name": "U.S. Citizenship and Immigration Services (USCIS)", "documentation": "https://www.home-assistant.io/integrations/uscis", "requirements": ["uscisstatus==0.1.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/uscis/sensor.py b/homeassistant/components/uscis/sensor.py index 270023bf99a..2e15a4b1422 100644 --- a/homeassistant/components/uscis/sensor.py +++ b/homeassistant/components/uscis/sensor.py @@ -6,7 +6,7 @@ import uscisstatus import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_FRIENDLY_NAME +from homeassistant.const import CONF_NAME from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle @@ -17,7 +17,7 @@ DEFAULT_NAME = "USCIS" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { - vol.Optional(CONF_FRIENDLY_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Required("case_id"): cv.string, } ) @@ -25,7 +25,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the platform in Home Assistant and Case Information.""" - uscis = UscisSensor(config["case_id"], config[CONF_FRIENDLY_NAME]) + uscis = UscisSensor(config["case_id"], config[CONF_NAME]) uscis.update() if uscis.valid_case_id: add_entities([uscis]) diff --git a/homeassistant/components/usgs_earthquakes_feed/geo_location.py b/homeassistant/components/usgs_earthquakes_feed/geo_location.py index 37934db3052..af9e82adf49 100644 --- a/homeassistant/components/usgs_earthquakes_feed/geo_location.py +++ b/homeassistant/components/usgs_earthquakes_feed/geo_location.py @@ -16,6 +16,7 @@ from homeassistant.const import ( CONF_RADIUS, CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_START, + LENGTH_KILOMETERS, ) from homeassistant.core import callback import homeassistant.helpers.config_validation as cv @@ -38,7 +39,7 @@ CONF_MINIMUM_MAGNITUDE = "minimum_magnitude" DEFAULT_MINIMUM_MAGNITUDE = 0.0 DEFAULT_RADIUS_IN_KM = 50.0 -DEFAULT_UNIT_OF_MEASUREMENT = "km" +DEFAULT_UNIT_OF_MEASUREMENT = LENGTH_KILOMETERS SCAN_INTERVAL = timedelta(minutes=5) diff --git a/homeassistant/components/usgs_earthquakes_feed/manifest.json b/homeassistant/components/usgs_earthquakes_feed/manifest.json index 5e4dbba3fe4..4e30ac470d4 100644 --- a/homeassistant/components/usgs_earthquakes_feed/manifest.json +++ b/homeassistant/components/usgs_earthquakes_feed/manifest.json @@ -3,6 +3,5 @@ "name": "U.S. Geological Survey Earthquake Hazards (USGS)", "documentation": "https://www.home-assistant.io/integrations/usgs_earthquakes_feed", "requirements": ["geojson_client==0.4"], - "dependencies": [], "codeowners": ["@exxamalte"] } diff --git a/homeassistant/components/utility_meter/__init__.py b/homeassistant/components/utility_meter/__init__.py index ef9d9b1ddce..24bfd77f762 100644 --- a/homeassistant/components/utility_meter/__init__.py +++ b/homeassistant/components/utility_meter/__init__.py @@ -184,11 +184,11 @@ class TariffSelect(RestoreEntity): ) return self._current_tariff = tariff - await self.async_update_ha_state() + self.async_write_ha_state() async def async_next_tariff(self): """Offset current index.""" current_index = self._tariffs.index(self._current_tariff) new_index = (current_index + 1) % len(self._tariffs) self._current_tariff = self._tariffs[new_index] - await self.async_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/utility_meter/manifest.json b/homeassistant/components/utility_meter/manifest.json index b71bb324773..ff3ce025f0e 100644 --- a/homeassistant/components/utility_meter/manifest.json +++ b/homeassistant/components/utility_meter/manifest.json @@ -2,8 +2,6 @@ "domain": "utility_meter", "name": "Utility Meter", "documentation": "https://www.home-assistant.io/integrations/utility_meter", - "requirements": [], - "dependencies": [], "codeowners": ["@dgomes"], "quality_scale": "internal" } diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index ad82cd9e79f..c891c698cf6 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -163,7 +163,7 @@ class UtilityMeterSensor(RestoreEntity): _LOGGER.warning( "Invalid state (%s > %s): %s", old_state.state, new_state.state, err ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def async_tariff_change(self, entity, old_state, new_state): @@ -184,7 +184,7 @@ class UtilityMeterSensor(RestoreEntity): self._sensor_source_id, ) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def _async_reset_meter(self, event): """Determine cycle - Helper function for larger than daily cycles.""" @@ -217,7 +217,7 @@ class UtilityMeterSensor(RestoreEntity): self._last_reset = dt_util.now() self._last_period = str(self._state) self._state = 0 - await self.async_update_ha_state() + self.async_write_ha_state() async def async_calibrate(self, value): """Calibrate the Utility Meter with a given value.""" @@ -253,7 +253,7 @@ class UtilityMeterSensor(RestoreEntity): self._unit_of_measurement = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) self._last_period = state.attributes.get(ATTR_LAST_PERIOD) self._last_reset = state.attributes.get(ATTR_LAST_RESET) - await self.async_update_ha_state() + self.async_write_ha_state() if state.attributes.get(ATTR_STATUS) == PAUSED: # Fake cancellation function to init the meter paused self._collecting = lambda: None diff --git a/homeassistant/components/utility_meter/services.yaml b/homeassistant/components/utility_meter/services.yaml index 42522f81876..d33229f4e56 100644 --- a/homeassistant/components/utility_meter/services.yaml +++ b/homeassistant/components/utility_meter/services.yaml @@ -5,31 +5,31 @@ reset: fields: entity_id: description: Name(s) of the utility meter to reset - example: 'utility_meter.energy' + example: "utility_meter.energy" next_tariff: description: Changes the tariff to the next one. fields: entity_id: description: Name(s) of entities to reset - example: 'utility_meter.energy' + example: "utility_meter.energy" select_tariff: description: selects the current tariff of an utility meter. fields: entity_id: description: Name of the entity to set the tariff for - example: 'utility_meter.energy' + example: "utility_meter.energy" tariff: description: Name of the tariff to switch to - example: 'offpeak' + example: "offpeak" calibrate: description: calibrates an utility meter. fields: entity_id: description: Name of the entity to calibrate - example: 'utility_meter.energy' + example: "utility_meter.energy" value: description: Value to which set the meter - example: '100' \ No newline at end of file + example: "100" diff --git a/homeassistant/components/uvc/camera.py b/homeassistant/components/uvc/camera.py index cd6875cdcdc..05937cc3ee9 100644 --- a/homeassistant/components/uvc/camera.py +++ b/homeassistant/components/uvc/camera.py @@ -1,6 +1,5 @@ """Support for Ubiquiti's UVC cameras.""" import logging -import socket import requests from uvcclient import camera as uvc_camera, nvr @@ -67,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 @@ -86,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 @@ -106,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): @@ -123,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: @@ -154,7 +155,7 @@ class UnifiVideoCamera(Camera): ) self._connect_addr = addr break - except socket.error: + except OSError: pass except uvc_camera.CameraConnectError: pass @@ -165,6 +166,7 @@ class UnifiVideoCamera(Camera): return None self._camera = camera + self._caminfo = caminfo return True def camera_image(self): @@ -220,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/homeassistant/components/uvc/manifest.json b/homeassistant/components/uvc/manifest.json index 7c29edd51c6..b44cdd274b4 100644 --- a/homeassistant/components/uvc/manifest.json +++ b/homeassistant/components/uvc/manifest.json @@ -3,6 +3,5 @@ "name": "Ubiquiti UniFi Video", "documentation": "https://www.home-assistant.io/integrations/uvc", "requirements": ["uvcclient==0.11.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/vacuum/.translations/bg.json b/homeassistant/components/vacuum/.translations/bg.json deleted file mode 100644 index 1ab7fce7abe..00000000000 --- a/homeassistant/components/vacuum/.translations/bg.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "\u041d\u0435\u043a\u0430 {entity_name} \u043f\u043e\u0447\u0438\u0441\u0442\u0438", - "dock": "\u041d\u0435\u043a\u0430 {entity_name} \u0434\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" - }, - "condition_type": { - "is_cleaning": "{entity_name} \u043f\u043e\u0447\u0438\u0441\u0442\u0432\u0430", - "is_docked": "{entity_name} \u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" - }, - "trigger_type": { - "cleaning": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u043f\u043e\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435", - "docked": "{entity_name} \u0432 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/ca.json b/homeassistant/components/vacuum/.translations/ca.json deleted file mode 100644 index b3cdbb2f6c7..00000000000 --- a/homeassistant/components/vacuum/.translations/ca.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Fes que {entity_name} netegi", - "dock": "Fes que {entity_name} torni a la base" - }, - "condition_type": { - "is_cleaning": "{entity_name} est\u00e0 netejant", - "is_docked": "{entity_name} est\u00e0 acoblada" - }, - "trigger_type": { - "cleaning": "{entity_name} ha comen\u00e7at a netejar", - "docked": "{entity_name} acoblada" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/da.json b/homeassistant/components/vacuum/.translations/da.json deleted file mode 100644 index fac748ca464..00000000000 --- a/homeassistant/components/vacuum/.translations/da.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Lad {entity_name} g\u00f8re rent", - "dock": "Lad {entity_name} vende tilbage til dock" - }, - "condition_type": { - "is_cleaning": "{entity_name} g\u00f8r rent", - "is_docked": "{entity_name} er i dock" - }, - "trigger_type": { - "cleaning": "{entity_name} begyndte at reng\u00f8re", - "docked": "{entity_name} er i dock" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/de.json b/homeassistant/components/vacuum/.translations/de.json deleted file mode 100644 index 3fe2d57eb01..00000000000 --- a/homeassistant/components/vacuum/.translations/de.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Lass {entity_name} reinigen", - "dock": "Lass {entity_name} zum Dock zur\u00fcckkehren" - }, - "condition_type": { - "is_cleaning": "{entity_name} reinigt", - "is_docked": "{entity_name} ist angedockt" - }, - "trigger_type": { - "cleaning": "{entity_name} hat mit der Reinigung begonnen", - "docked": "{entity_name} angedockt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/en.json b/homeassistant/components/vacuum/.translations/en.json deleted file mode 100644 index 3feb8eada72..00000000000 --- a/homeassistant/components/vacuum/.translations/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Let {entity_name} clean", - "dock": "Let {entity_name} return to the dock" - }, - "condition_type": { - "is_cleaning": "{entity_name} is cleaning", - "is_docked": "{entity_name} is docked" - }, - "trigger_type": { - "cleaning": "{entity_name} started cleaning", - "docked": "{entity_name} docked" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/es.json b/homeassistant/components/vacuum/.translations/es.json deleted file mode 100644 index 376058faafa..00000000000 --- a/homeassistant/components/vacuum/.translations/es.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Deje que {entity_name} limpie", - "dock": "Deje que {entity_name} regrese a la base" - }, - "condition_type": { - "is_cleaning": "{entity_name} est\u00e1 limpiando", - "is_docked": "{entity_name} en la base" - }, - "trigger_type": { - "cleaning": "{entity_name} empez\u00f3 a limpiar", - "docked": "{entity_name} en la base" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/fr.json b/homeassistant/components/vacuum/.translations/fr.json deleted file mode 100644 index 84d5e17bda1..00000000000 --- a/homeassistant/components/vacuum/.translations/fr.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Laisser {entity_name} vide", - "dock": "Laisser {entity_name} retourner \u00e0 la base" - }, - "condition_type": { - "is_cleaning": "{entity_name} nettoie", - "is_docked": "{entity_name} est connect\u00e9" - }, - "trigger_type": { - "cleaning": "{entity_name} commence \u00e0 nettoyer", - "docked": "{entity_name} connect\u00e9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/hu.json b/homeassistant/components/vacuum/.translations/hu.json deleted file mode 100644 index 81a39802c55..00000000000 --- a/homeassistant/components/vacuum/.translations/hu.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "{entity_name} takar\u00edt\u00e1s ind\u00edt\u00e1sa", - "dock": "{entity_name} visszak\u00fcld\u00e9se a dokkol\u00f3ra" - }, - "condition_type": { - "is_cleaning": "{entity_name} takar\u00edt", - "is_docked": "{entity_name} dokkolva van" - }, - "trigger_type": { - "cleaning": "{entity_name} elkezdett takar\u00edtani", - "docked": "{entity_name} dokkolt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/it.json b/homeassistant/components/vacuum/.translations/it.json deleted file mode 100644 index 32ecd1e0377..00000000000 --- a/homeassistant/components/vacuum/.translations/it.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Lascia pulire {entity_name}", - "dock": "Lascia che {entity_name} ritorni alla base" - }, - "condition_type": { - "is_cleaning": "{entity_name} sta pulendo", - "is_docked": "{entity_name} \u00e8 agganciato alla base" - }, - "trigger_type": { - "cleaning": "{entity_name} ha iniziato la pulizia", - "docked": "{entity_name} agganciato" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/ko.json b/homeassistant/components/vacuum/.translations/ko.json deleted file mode 100644 index 0197329abda..00000000000 --- a/homeassistant/components/vacuum/.translations/ko.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "{entity_name} \uc744(\ub97c) \uccad\uc18c\uc2dc\ud0a4\uae30", - "dock": "{entity_name} \uc744(\ub97c) \ucda9\uc804\uc2a4\ud14c\uc774\uc158\uc73c\ub85c \ubcf5\uadc0\uc2dc\ud0a4\uae30" - }, - "condition_type": { - "is_cleaning": "{entity_name} \uc774(\uac00) \uccad\uc18c \uc911\uc774\uba74", - "is_docked": "{entity_name} \uc774(\uac00) \ub3c4\ud0b9\ub418\uc5b4\uc788\uc73c\uba74" - }, - "trigger_type": { - "cleaning": "{entity_name} \uc774(\uac00) \uccad\uc18c\ub97c \uc2dc\uc791\ud560 \ub54c", - "docked": "{entity_name} \uc774(\uac00) \ub3c4\ud0b9\ub420 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/lb.json b/homeassistant/components/vacuum/.translations/lb.json deleted file mode 100644 index d6776ccd619..00000000000 --- a/homeassistant/components/vacuum/.translations/lb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Looss {entity_name} botzen", - "dock": "Sch\u00e9ck {entity_name} z\u00e9reck zur Statioun" - }, - "condition_type": { - "is_cleaning": "{entity_name} botzt", - "is_docked": "{entity_name} ass an der Statioun" - }, - "trigger_type": { - "cleaning": "{entity_name} huet ugefaange mam botzen", - "docked": "{entity_name} an der Statioun" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/nl.json b/homeassistant/components/vacuum/.translations/nl.json deleted file mode 100644 index 8ef0588796c..00000000000 --- a/homeassistant/components/vacuum/.translations/nl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Laat {entity_name} schoonmaken", - "dock": "Laat {entity_name} terugkeren naar het basisstation" - }, - "condition_type": { - "is_cleaning": "{entity_name} is aan het schoonmaken", - "is_docked": "{entity_name} is bij basisstation" - }, - "trigger_type": { - "cleaning": "{entity_name} begon met schoonmaken", - "docked": "{entity_name} is bij basisstation" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/no.json b/homeassistant/components/vacuum/.translations/no.json deleted file mode 100644 index 0c34081cb2f..00000000000 --- a/homeassistant/components/vacuum/.translations/no.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "La {entity_name} rengj\u00f8res", - "dock": "La {entity_name} tilbake til dock" - }, - "condition_type": { - "is_cleaning": "{entity_name} rengj\u00f8res", - "is_docked": "{entity_name} er docked" - }, - "trigger_type": { - "cleaning": "{entity_name} startet rengj\u00f8ringen", - "docked": "{entity_name} dokket" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/pl.json b/homeassistant/components/vacuum/.translations/pl.json deleted file mode 100644 index 09eef23ac9a..00000000000 --- a/homeassistant/components/vacuum/.translations/pl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "niech {entity_name} sprz\u0105ta", - "dock": "niech {entity_name} wr\u00f3ci do bazy" - }, - "condition_type": { - "is_cleaning": "{entity_name} sprz\u0105ta", - "is_docked": "{entity_name} jest w bazie" - }, - "trigger_type": { - "cleaning": "{entity_name} zacznie sprz\u0105ta\u0107", - "docked": "{entity_name} wr\u00f3ci do bazy" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/pt.json b/homeassistant/components/vacuum/.translations/pt.json deleted file mode 100644 index 15b8ac3fd19..00000000000 --- a/homeassistant/components/vacuum/.translations/pt.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Deixar {entity_name} limpar" - }, - "condition_type": { - "is_cleaning": "{entity_name} est\u00e1 a limpar" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/ru.json b/homeassistant/components/vacuum/.translations/ru.json deleted file mode 100644 index c42f0310fae..00000000000 --- a/homeassistant/components/vacuum/.translations/ru.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c {entity_name} \u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0431\u043e\u0440\u043a\u0443", - "dock": "\u0412\u0435\u0440\u043d\u0443\u0442\u044c {entity_name} \u043d\u0430 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u044e" - }, - "condition_type": { - "is_cleaning": "{entity_name} \u0434\u0435\u043b\u0430\u0435\u0442 \u0443\u0431\u043e\u0440\u043a\u0443", - "is_docked": "{entity_name} \u0443 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0438" - }, - "trigger_type": { - "cleaning": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0443\u0431\u043e\u0440\u043a\u0443", - "docked": "{entity_name} \u0441\u0442\u044b\u043a\u0443\u0435\u0442\u0441\u044f \u0441 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0435\u0439" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/sl.json b/homeassistant/components/vacuum/.translations/sl.json deleted file mode 100644 index c594c4f1bdd..00000000000 --- a/homeassistant/components/vacuum/.translations/sl.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "Naj {entity_name} \u010disti", - "dock": "Pustite, da se {entity_name} vrne na dok" - }, - "condition_type": { - "is_cleaning": "{entity_name} \u010disti", - "is_docked": "{entity_name} je priklju\u010den" - }, - "trigger_type": { - "cleaning": "{entity_name} za\u010del \u010di\u0161\u010denje", - "docked": "{entity_name} priklju\u010den" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/sv.json b/homeassistant/components/vacuum/.translations/sv.json deleted file mode 100644 index 38b7f72ab9b..00000000000 --- a/homeassistant/components/vacuum/.translations/sv.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "L\u00e5t {entity_name} st\u00e4da", - "dock": "L\u00e5t {entity_name} \u00e5terg\u00e5 till dockan" - }, - "condition_type": { - "is_cleaning": "{entity_name} st\u00e4dar", - "is_docked": "{entity_name} \u00e4r dockad" - }, - "trigger_type": { - "cleaning": "{entity_name} b\u00f6rjade st\u00e4da", - "docked": "{entity_name} dockad" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/zh-Hans.json b/homeassistant/components/vacuum/.translations/zh-Hans.json deleted file mode 100644 index b676cc7be9d..00000000000 --- a/homeassistant/components/vacuum/.translations/zh-Hans.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "\u4f7f {entity_name} \u5f00\u59cb\u6e05\u626b" - }, - "condition_type": { - "is_cleaning": "{entity_name} \u6b63\u5728\u6e05\u626b", - "is_docked": "{entity_name} \u6b63\u505c\u9760\u5728\u5e95\u5ea7\u4e0a" - }, - "trigger_type": { - "cleaning": "{entity_name} \u5f00\u59cb\u6e05\u626b", - "docked": "{entity_name} \u8fd4\u56de\u5e95\u5ea7" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/.translations/zh-Hant.json b/homeassistant/components/vacuum/.translations/zh-Hant.json deleted file mode 100644 index b108a2a6a44..00000000000 --- a/homeassistant/components/vacuum/.translations/zh-Hant.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "device_automation": { - "action_type": { - "clean": "\u555f\u52d5{entity_name}\u6e05\u9664", - "dock": "\u555f\u52d5{entity_name}\u56de\u5230\u5145\u96fb\u7ad9" - }, - "condition_type": { - "is_cleaning": "{entity_name}\u6b63\u5728\u6e05\u6383", - "is_docked": "{entity_name}\u65bc\u5145\u96fb\u7ad9" - }, - "trigger_type": { - "cleaning": "{entity_name}\u958b\u59cb\u6e05\u6383", - "docked": "{entity_name}\u5df2\u56de\u5145\u96fb\u7ad9" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vacuum/__init__.py b/homeassistant/components/vacuum/__init__.py index 3cd2de600e3..f66a1b5f226 100644 --- a/homeassistant/components/vacuum/__init__.py +++ b/homeassistant/components/vacuum/__init__.py @@ -304,11 +304,9 @@ class VacuumDevice(_BaseVacuum, ToggleEntity): async def async_pause(self): """Not supported.""" - pass async def async_start(self): """Not supported.""" - pass class StateVacuumDevice(_BaseVacuum): @@ -373,12 +371,9 @@ class StateVacuumDevice(_BaseVacuum): async def async_turn_on(self, **kwargs): """Not supported.""" - pass async def async_turn_off(self, **kwargs): """Not supported.""" - pass async def async_toggle(self, **kwargs): """Not supported.""" - pass diff --git a/homeassistant/components/vacuum/manifest.json b/homeassistant/components/vacuum/manifest.json index a6f7ddb2bda..a497bab1380 100644 --- a/homeassistant/components/vacuum/manifest.json +++ b/homeassistant/components/vacuum/manifest.json @@ -2,7 +2,5 @@ "domain": "vacuum", "name": "Vacuum", "documentation": "https://www.home-assistant.io/integrations/vacuum", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/vacuum/reproduce_state.py b/homeassistant/components/vacuum/reproduce_state.py index 485ffef0c9f..48aa9615f1e 100644 --- a/homeassistant/components/vacuum/reproduce_state.py +++ b/homeassistant/components/vacuum/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Vacuum state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -41,7 +41,11 @@ VALID_STATES_STATE = { async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -50,7 +54,7 @@ async def _async_reproduce_state( _LOGGER.warning("Unable to find entity %s", state.entity_id) return - if state.state not in VALID_STATES_TOGGLE and state.state not in VALID_STATES_STATE: + if not (state.state in VALID_STATES_TOGGLE or state.state in VALID_STATES_STATE): _LOGGER.warning( "Invalid state specified for %s: %s", state.entity_id, state.state ) @@ -72,7 +76,7 @@ async def _async_reproduce_state( service = SERVICE_TURN_OFF elif state.state == STATE_CLEANING: service = SERVICE_START - elif state.state == STATE_DOCKED or state.state == STATE_RETURNING: + elif state.state in [STATE_DOCKED, STATE_RETURNING]: service = SERVICE_RETURN_TO_BASE elif state.state == STATE_IDLE: service = SERVICE_STOP @@ -92,10 +96,19 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Vacuum states.""" # Reproduce states in parallel. await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/vacuum/services.yaml b/homeassistant/components/vacuum/services.yaml index 7db70c5cd51..3287eafe7f2 100644 --- a/homeassistant/components/vacuum/services.yaml +++ b/homeassistant/components/vacuum/services.yaml @@ -5,73 +5,73 @@ turn_on: fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" turn_off: description: Stop the current cleaning task and return to home. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" stop: description: Stop the current cleaning task. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" locate: description: Locate the vacuum cleaner robot. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" start_pause: description: Start, pause, or resume the cleaning task. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" start: description: Start or resume the cleaning task. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" pause: description: Pause the cleaning task. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" return_to_base: description: Tell the vacuum cleaner to return to its dock. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" clean_spot: description: Tell the vacuum cleaner to do a spot clean-up. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" send_command: description: Send a raw command to the vacuum cleaner. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" command: description: Command to execute. - example: 'set_dnd_timer' + example: "set_dnd_timer" params: description: Parameters for the command. example: '{ "key": "value" }' @@ -81,7 +81,7 @@ set_fan_speed: fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" fan_speed: description: Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium' or by percentage, between 0 and 100. - example: 'low' + example: "low" diff --git a/homeassistant/components/vacuum/strings.json b/homeassistant/components/vacuum/strings.json index 4eee3f359b5..033946735f7 100644 --- a/homeassistant/components/vacuum/strings.json +++ b/homeassistant/components/vacuum/strings.json @@ -1,4 +1,5 @@ { + "title": "Vacuum", "device_automation": { "condition_type": { "is_docked": "{entity_name} is docked", @@ -12,5 +13,17 @@ "clean": "Let {entity_name} clean", "dock": "Let {entity_name} return to the dock" } + }, + "state": { + "_": { + "cleaning": "Cleaning", + "docked": "Docked", + "error": "Error", + "idle": "[%key:common::state::idle%]", + "off": "[%key:common::state::off%]", + "on": "[%key:common::state::on%]", + "paused": "[%key:common::state::paused%]", + "returning": "Returning to dock" + } } } diff --git a/homeassistant/components/vacuum/translations/af.json b/homeassistant/components/vacuum/translations/af.json new file mode 100644 index 00000000000..7abcedfd968 --- /dev/null +++ b/homeassistant/components/vacuum/translations/af.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Skoonmaak", + "docked": "Vasgemeer by hawe", + "error": "Fout", + "idle": "Onaktief", + "off": "Af", + "on": "Aan", + "paused": "Onderbreek", + "returning": "Oppad terug hawe toe" + } + }, + "title": "Vakuum" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/ar.json b/homeassistant/components/vacuum/translations/ar.json new file mode 100644 index 00000000000..2e9d6c9a5d6 --- /dev/null +++ b/homeassistant/components/vacuum/translations/ar.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "cleaning": "\u062a\u0646\u0638\u064a\u0641", + "error": "\u062e\u0637\u0623", + "off": "\u0645\u0637\u0641\u0626", + "on": "\u0645\u0634\u063a\u0644", + "paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627", + "returning": "\u0627\u0644\u0639\u0648\u062f\u0629" + } + }, + "title": "\u0645\u0643\u0646\u0633\u0629 \u0643\u0647\u0631\u0628\u0627\u0621" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/bg.json b/homeassistant/components/vacuum/translations/bg.json new file mode 100644 index 00000000000..3e1aab27752 --- /dev/null +++ b/homeassistant/components/vacuum/translations/bg.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "\u041d\u0435\u043a\u0430 {entity_name} \u043f\u043e\u0447\u0438\u0441\u0442\u0438", + "dock": "\u041d\u0435\u043a\u0430 {entity_name} \u0434\u0430 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" + }, + "condition_type": { + "is_cleaning": "{entity_name} \u043f\u043e\u0447\u0438\u0441\u0442\u0432\u0430", + "is_docked": "{entity_name} \u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" + }, + "trigger_type": { + "cleaning": "{entity_name} \u0437\u0430\u043f\u043e\u0447\u043d\u0430 \u043f\u043e\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435", + "docked": "{entity_name} \u0432 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" + } + }, + "state": { + "_": { + "cleaning": "\u041f\u043e\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435", + "docked": "\u0412 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f", + "error": "\u0413\u0440\u0435\u0448\u043a\u0430", + "idle": "\u041d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449", + "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d", + "paused": "\u041f\u0430\u0443\u0437\u0430", + "returning": "\u0412\u0440\u044a\u0449\u0430\u043d\u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f" + } + }, + "title": "\u041f\u0440\u0430\u0445\u043e\u0441\u043c\u0443\u043a\u0430\u0447\u043a\u0430" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/ca.json b/homeassistant/components/vacuum/translations/ca.json new file mode 100644 index 00000000000..f52d7e2536b --- /dev/null +++ b/homeassistant/components/vacuum/translations/ca.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Fes que {entity_name} netegi", + "dock": "Fes que {entity_name} torni a la base" + }, + "condition_type": { + "is_cleaning": "{entity_name} est\u00e0 netejant", + "is_docked": "{entity_name} est\u00e0 acoblada" + }, + "trigger_type": { + "cleaning": "{entity_name} ha comen\u00e7at a netejar", + "docked": "{entity_name} acoblada" + } + }, + "state": { + "_": { + "cleaning": "Netejant", + "docked": "Aparcat", + "error": "Error", + "idle": "Inactiu", + "off": "Apagat", + "on": "Enc\u00e8s", + "paused": "Pausat", + "returning": "Retornant a la base" + } + }, + "title": "Aspirador" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/cs.json b/homeassistant/components/vacuum/translations/cs.json new file mode 100644 index 00000000000..75a3254ec36 --- /dev/null +++ b/homeassistant/components/vacuum/translations/cs.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u010cist\u00ed", + "docked": "V stanici", + "error": "Chyba", + "idle": "Ne\u010dinn\u00fd", + "off": "Off", + "on": "On", + "paused": "Pozastaveno", + "returning": "N\u00e1vrat do stanice" + } + }, + "title": "Vysava\u010d" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/da.json b/homeassistant/components/vacuum/translations/da.json new file mode 100644 index 00000000000..5b3079cfb4e --- /dev/null +++ b/homeassistant/components/vacuum/translations/da.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Lad {entity_name} g\u00f8re rent", + "dock": "Lad {entity_name} vende tilbage til dock" + }, + "condition_type": { + "is_cleaning": "{entity_name} g\u00f8r rent", + "is_docked": "{entity_name} er i dock" + }, + "trigger_type": { + "cleaning": "{entity_name} begyndte at reng\u00f8re", + "docked": "{entity_name} er i dock" + } + }, + "state": { + "_": { + "cleaning": "G\u00f8r rent", + "docked": "I dock", + "error": "Fejl", + "idle": "Inaktiv", + "off": "Off", + "on": "On", + "paused": "Sat p\u00e5 pause", + "returning": "Vender tilbage til dock" + } + }, + "title": "St\u00f8vsuger" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/de.json b/homeassistant/components/vacuum/translations/de.json new file mode 100644 index 00000000000..be137a5566b --- /dev/null +++ b/homeassistant/components/vacuum/translations/de.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Lass {entity_name} reinigen", + "dock": "Lass {entity_name} zum Dock zur\u00fcckkehren" + }, + "condition_type": { + "is_cleaning": "{entity_name} reinigt", + "is_docked": "{entity_name} ist angedockt" + }, + "trigger_type": { + "cleaning": "{entity_name} hat mit der Reinigung begonnen", + "docked": "{entity_name} angedockt" + } + }, + "state": { + "_": { + "cleaning": "Reinigen", + "docked": "Angedockt", + "error": "Fehler", + "idle": "Standby", + "off": "Aus", + "on": "An", + "paused": "Pausiert", + "returning": "R\u00fcckkehr zur Dockingstation" + } + }, + "title": "Vacuum" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/el.json b/homeassistant/components/vacuum/translations/el.json new file mode 100644 index 00000000000..3686450d9fb --- /dev/null +++ b/homeassistant/components/vacuum/translations/el.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", + "docked": "\u039a\u03b1\u03c1\u03c6\u03b9\u03c4\u03c3\u03c9\u03bc\u03ad\u03bd\u03bf", + "error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1", + "idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1", + "off": "\u039c\u03b7 \u0395\u03bd\u03b5\u03c1\u03b3\u03cc", + "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc", + "paused": "\u03a0\u03b1\u03cd\u03c3\u03b7", + "returning": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03bf dock" + } + }, + "title": "\u0395\u03ba\u03ba\u03ad\u03bd\u03c9\u03c3\u03b7" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/en.json b/homeassistant/components/vacuum/translations/en.json new file mode 100644 index 00000000000..64f906fd821 --- /dev/null +++ b/homeassistant/components/vacuum/translations/en.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Let {entity_name} clean", + "dock": "Let {entity_name} return to the dock" + }, + "condition_type": { + "is_cleaning": "{entity_name} is cleaning", + "is_docked": "{entity_name} is docked" + }, + "trigger_type": { + "cleaning": "{entity_name} started cleaning", + "docked": "{entity_name} docked" + } + }, + "state": { + "_": { + "cleaning": "Cleaning", + "docked": "Docked", + "error": "Error", + "idle": "Idle", + "off": "Off", + "on": "On", + "paused": "Paused", + "returning": "Returning to dock" + } + }, + "title": "Vacuum" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/es-419.json b/homeassistant/components/vacuum/translations/es-419.json new file mode 100644 index 00000000000..39ed128de9d --- /dev/null +++ b/homeassistant/components/vacuum/translations/es-419.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Limpiando", + "docked": "Acoplado", + "error": "Error", + "idle": "Inactivo", + "off": "Encendida", + "on": "Apagada", + "paused": "Pausado", + "returning": "Regresar al dock" + } + }, + "title": "Aspiradora" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/es.json b/homeassistant/components/vacuum/translations/es.json new file mode 100644 index 00000000000..0cf61c498f2 --- /dev/null +++ b/homeassistant/components/vacuum/translations/es.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Deje que {entity_name} limpie", + "dock": "Deje que {entity_name} regrese a la base" + }, + "condition_type": { + "is_cleaning": "{entity_name} est\u00e1 limpiando", + "is_docked": "{entity_name} en la base" + }, + "trigger_type": { + "cleaning": "{entity_name} empez\u00f3 a limpiar", + "docked": "{entity_name} en la base" + } + }, + "state": { + "_": { + "cleaning": "Limpiando", + "docked": "En base", + "error": "Error", + "idle": "Inactivo", + "off": "Apagado", + "on": "Encendido", + "paused": "En pausa", + "returning": "Volviendo a la base" + } + }, + "title": "Aspiradora" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/et.json b/homeassistant/components/vacuum/translations/et.json new file mode 100644 index 00000000000..56976340c5b --- /dev/null +++ b/homeassistant/components/vacuum/translations/et.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Puhastamine", + "docked": "Dokitud", + "error": "Viga", + "idle": "Ootel", + "off": "V\u00e4ljas", + "on": "Sees", + "paused": "Peatatud", + "returning": "P\u00f6\u00f6rdun tagasi dokki" + } + }, + "title": "T\u00fchjenda" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/eu.json b/homeassistant/components/vacuum/translations/eu.json new file mode 100644 index 00000000000..4c0dc1b2af7 --- /dev/null +++ b/homeassistant/components/vacuum/translations/eu.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "cleaning": "Garbitzen", + "docked": "Basean", + "error": "Errorea", + "off": "Itzalita", + "on": "Piztuta", + "returning": "Basera itzultzen" + } + }, + "title": "Xurgagailua" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/fa.json b/homeassistant/components/vacuum/translations/fa.json new file mode 100644 index 00000000000..5e8fb2cae55 --- /dev/null +++ b/homeassistant/components/vacuum/translations/fa.json @@ -0,0 +1,11 @@ +{ + "state": { + "_": { + "cleaning": "\u062a\u0645\u06cc\u0632 \u06a9\u0631\u062f\u0646", + "off": "\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644", + "on": "\u0641\u063a\u0627\u0644", + "paused": "\u0645\u06a9\u062b" + } + }, + "title": "\u062e\u0644\u0627\u0621" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/fi.json b/homeassistant/components/vacuum/translations/fi.json new file mode 100644 index 00000000000..69c44b2e82a --- /dev/null +++ b/homeassistant/components/vacuum/translations/fi.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Imuroi", + "docked": "Telakoituna", + "error": "Virhe", + "idle": "Lepotilassa", + "off": "Pois p\u00e4\u00e4lt\u00e4", + "on": "P\u00e4\u00e4ll\u00e4", + "paused": "Pys\u00e4ytetty", + "returning": "Palaamassa telakkaan" + } + }, + "title": "Imuri" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/fr.json b/homeassistant/components/vacuum/translations/fr.json new file mode 100644 index 00000000000..cf958c5f852 --- /dev/null +++ b/homeassistant/components/vacuum/translations/fr.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Laisser {entity_name} vide", + "dock": "Laisser {entity_name} retourner \u00e0 la base" + }, + "condition_type": { + "is_cleaning": "{entity_name} nettoie", + "is_docked": "{entity_name} est connect\u00e9" + }, + "trigger_type": { + "cleaning": "{entity_name} commence \u00e0 nettoyer", + "docked": "{entity_name} connect\u00e9" + } + }, + "state": { + "_": { + "cleaning": "Nettoyage", + "docked": "Sur la base", + "error": "Erreur", + "idle": "Inactif", + "off": "Off", + "on": "On", + "paused": "En pause", + "returning": "Retourne \u00e0 la base" + } + }, + "title": "Aspirateur" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/gsw.json b/homeassistant/components/vacuum/translations/gsw.json new file mode 100644 index 00000000000..1e44d1632fe --- /dev/null +++ b/homeassistant/components/vacuum/translations/gsw.json @@ -0,0 +1,12 @@ +{ + "state": { + "_": { + "cleaning": "Putze", + "error": "F\u00e4hler", + "off": "Us", + "on": "I", + "paused": "Pause" + } + }, + "title": "Stoubsuger" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/he.json b/homeassistant/components/vacuum/translations/he.json new file mode 100644 index 00000000000..dc6b5da01cb --- /dev/null +++ b/homeassistant/components/vacuum/translations/he.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u05de\u05e0\u05e7\u05d4", + "docked": "\u05d1\u05e2\u05d2\u05d9\u05e0\u05d4", + "error": "\u05e9\u05d2\u05d9\u05d0\u05d4", + "idle": "\u05de\u05de\u05ea\u05d9\u05df", + "off": "\u05de\u05db\u05d5\u05d1\u05d4", + "on": "\u05de\u05d5\u05e4\u05e2\u05dc", + "paused": "\u05de\u05d5\u05e9\u05d4\u05d4", + "returning": "\u05d7\u05d6\u05d5\u05e8 \u05dc\u05e2\u05d2\u05d9\u05e0\u05d4" + } + }, + "title": "\u05e9\u05d5\u05d0\u05d1 \u05d0\u05d1\u05e7" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/hi.json b/homeassistant/components/vacuum/translations/hi.json new file mode 100644 index 00000000000..e8196f3981d --- /dev/null +++ b/homeassistant/components/vacuum/translations/hi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "cleaning": "\u0938\u092b\u093e\u0908", + "docked": "\u0921\u0949\u0915\u094d\u0921", + "error": "\u0924\u094d\u0930\u0941\u091f\u093f", + "idle": "\u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f", + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942", + "paused": "\u0935\u093f\u0930\u093e\u092e", + "returning": "\u0917\u094b\u0926\u0940 \u092e\u0947\u0902 \u0932\u094c\u091f\u0915\u0930" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/hr.json b/homeassistant/components/vacuum/translations/hr.json new file mode 100644 index 00000000000..8728430a537 --- /dev/null +++ b/homeassistant/components/vacuum/translations/hr.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u010ci\u0161\u0107enje", + "docked": "Usidreni", + "error": "Gre\u0161ka", + "idle": "Neaktivan", + "off": "Uga\u0161eno", + "on": "Upaljeno", + "paused": "Pauzirano", + "returning": "Povratak na dok" + } + }, + "title": "Vakuum" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/hu.json b/homeassistant/components/vacuum/translations/hu.json new file mode 100644 index 00000000000..58d57124db0 --- /dev/null +++ b/homeassistant/components/vacuum/translations/hu.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "{entity_name} takar\u00edt\u00e1s ind\u00edt\u00e1sa", + "dock": "{entity_name} visszak\u00fcld\u00e9se a dokkol\u00f3ra" + }, + "condition_type": { + "is_cleaning": "{entity_name} takar\u00edt", + "is_docked": "{entity_name} dokkolva van" + }, + "trigger_type": { + "cleaning": "{entity_name} elkezdett takar\u00edtani", + "docked": "{entity_name} dokkolt" + } + }, + "state": { + "_": { + "cleaning": "Takar\u00edt\u00e1s", + "docked": "Dokkolva", + "error": "Hiba", + "idle": "T\u00e9tlen", + "off": "Ki", + "on": "Be", + "paused": "Sz\u00fcnetel", + "returning": "Dokkol\u00e1s folyamatban" + } + }, + "title": "Porsz\u00edv\u00f3" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/hy.json b/homeassistant/components/vacuum/translations/hy.json new file mode 100644 index 00000000000..e09eaf61c70 --- /dev/null +++ b/homeassistant/components/vacuum/translations/hy.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u0544\u0561\u0584\u0580\u0578\u0582\u0574", + "docked": "\u053e\u0561\u056e\u056f\u057e\u0561\u056e", + "error": "\u054d\u056d\u0561\u056c", + "idle": "\u054a\u0561\u0580\u0561\u057a", + "off": "\u0561\u0576\u057b\u0561\u057f\u057e\u0561\u056e", + "on": "\u057e\u0580\u0561", + "paused": "\u0534\u0561\u0564\u0561\u0580 \u0567", + "returning": "\u054e\u0565\u0580\u0561\u0564\u0561\u057c\u0576\u0561\u056c\u0578\u057e \u0576\u0561\u057e\u0561\u0570\u0561\u0576\u0563\u056b\u057d\u057f" + } + }, + "title": "\u054e\u0561\u056f\u0578\u0582\u0574" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/id.json b/homeassistant/components/vacuum/translations/id.json new file mode 100644 index 00000000000..a9827363d5e --- /dev/null +++ b/homeassistant/components/vacuum/translations/id.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Membersihkan", + "docked": "Berlabuh", + "error": "Kesalahan", + "idle": "Siaga", + "off": "Padam", + "on": "Nyala", + "paused": "Dijeda", + "returning": "Kembali ke dock" + } + }, + "title": "Vakum" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/is.json b/homeassistant/components/vacuum/translations/is.json new file mode 100644 index 00000000000..759191ae67e --- /dev/null +++ b/homeassistant/components/vacuum/translations/is.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "A\u00f0 ryksuga", + "docked": "\u00ed tengikv\u00ed", + "error": "Villa", + "idle": "A\u00f0ger\u00f0alaus", + "off": "Sl\u00f6kkt", + "on": "\u00cd gangi", + "paused": "\u00cd bi\u00f0", + "returning": "\u00c1 lei\u00f0 tilbaka \u00ed tengikv\u00ed" + } + }, + "title": "Ryksuga" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/it.json b/homeassistant/components/vacuum/translations/it.json new file mode 100644 index 00000000000..f89055b7e21 --- /dev/null +++ b/homeassistant/components/vacuum/translations/it.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Lascia pulire {entity_name}", + "dock": "Lascia che {entity_name} ritorni alla base" + }, + "condition_type": { + "is_cleaning": "{entity_name} sta pulendo", + "is_docked": "{entity_name} \u00e8 agganciato alla base" + }, + "trigger_type": { + "cleaning": "{entity_name} ha iniziato la pulizia", + "docked": "{entity_name} agganciato" + } + }, + "state": { + "_": { + "cleaning": "Pulendo", + "docked": "In base", + "error": "Errore", + "idle": "Inattivo", + "off": "Spento", + "on": "Acceso", + "paused": "In pausa", + "returning": "Ritorno alla base" + } + }, + "title": "Aspirapolvere" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/ko.json b/homeassistant/components/vacuum/translations/ko.json new file mode 100644 index 00000000000..e82b47bc5be --- /dev/null +++ b/homeassistant/components/vacuum/translations/ko.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "{entity_name} \uc744(\ub97c) \uccad\uc18c\uc2dc\ud0a4\uae30", + "dock": "{entity_name} \uc744(\ub97c) \ucda9\uc804\uc2a4\ud14c\uc774\uc158\uc73c\ub85c \ubcf5\uadc0\uc2dc\ud0a4\uae30" + }, + "condition_type": { + "is_cleaning": "{entity_name} \uc774(\uac00) \uccad\uc18c \uc911\uc774\uba74", + "is_docked": "{entity_name} \uc774(\uac00) \ub3c4\ud0b9\ub418\uc5b4\uc788\uc73c\uba74" + }, + "trigger_type": { + "cleaning": "{entity_name} \uc774(\uac00) \uccad\uc18c\ub97c \uc2dc\uc791\ud560 \ub54c", + "docked": "{entity_name} \uc774(\uac00) \ub3c4\ud0b9\ub420 \ub54c" + } + }, + "state": { + "_": { + "cleaning": "\uccad\uc18c\uc911", + "docked": "\ucda9\uc804\uc911", + "error": "\uc791\ub3d9 \uc624\ub958", + "idle": "\ub300\uae30\uc911", + "off": "\uaebc\uc9d0", + "on": "\ucf1c\uc9d0", + "paused": "\uc77c\uc2dc\uc911\uc9c0\ub428", + "returning": "\ucda9\uc804 \ubcf5\uadc0 \uc911" + } + }, + "title": "\uccad\uc18c\uae30" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/lb.json b/homeassistant/components/vacuum/translations/lb.json new file mode 100644 index 00000000000..3092035ec47 --- /dev/null +++ b/homeassistant/components/vacuum/translations/lb.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Looss {entity_name} botzen", + "dock": "Sch\u00e9ck {entity_name} z\u00e9reck zur Statioun" + }, + "condition_type": { + "is_cleaning": "{entity_name} botzt", + "is_docked": "{entity_name} ass an der Statioun" + }, + "trigger_type": { + "cleaning": "{entity_name} huet ugefaange mam botzen", + "docked": "{entity_name} an der Statioun" + } + }, + "state": { + "_": { + "cleaning": "Botzt", + "docked": "Agedockt", + "error": "Feeler", + "idle": "Waart", + "off": "Aus", + "on": "Un", + "paused": "Pauseiert", + "returning": "K\u00ebnnt zur Statioun zer\u00e9ck" + } + }, + "title": "Staubsauger" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/lv.json b/homeassistant/components/vacuum/translations/lv.json new file mode 100644 index 00000000000..a0736308a43 --- /dev/null +++ b/homeassistant/components/vacuum/translations/lv.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Notiek uzkop\u0161ana", + "docked": "Pie doka", + "error": "K\u013c\u016bda", + "idle": "D\u012bkst\u0101v\u0113", + "off": "Izsl\u0113gts", + "on": "Iesl\u0113gts", + "paused": "Aptur\u0113ts", + "returning": "Ce\u013c\u0101 pie doka" + } + }, + "title": "Putek\u013cs\u016bc\u0113js" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/nb.json b/homeassistant/components/vacuum/translations/nb.json new file mode 100644 index 00000000000..23d155ffee3 --- /dev/null +++ b/homeassistant/components/vacuum/translations/nb.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Rengj\u00f8r", + "docked": "Dokket", + "error": "Feil", + "idle": "Inaktiv", + "off": "Av", + "on": "P\u00e5", + "paused": "Pauset", + "returning": "Returner til dokk" + } + }, + "title": "St\u00f8vsuger" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/nl.json b/homeassistant/components/vacuum/translations/nl.json new file mode 100644 index 00000000000..3fbb0ae50be --- /dev/null +++ b/homeassistant/components/vacuum/translations/nl.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Laat {entity_name} schoonmaken", + "dock": "Laat {entity_name} terugkeren naar het basisstation" + }, + "condition_type": { + "is_cleaning": "{entity_name} is aan het schoonmaken", + "is_docked": "{entity_name} is bij basisstation" + }, + "trigger_type": { + "cleaning": "{entity_name} begon met schoonmaken", + "docked": "{entity_name} is bij basisstation" + } + }, + "state": { + "_": { + "cleaning": "Reinigen", + "docked": "Gedockt", + "error": "Fout", + "idle": "Inactief", + "off": "Uit", + "on": "Aan", + "paused": "Gepauzeerd", + "returning": "Terugkeren naar dock" + } + }, + "title": "Stofzuigen" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/nn.json b/homeassistant/components/vacuum/translations/nn.json new file mode 100644 index 00000000000..e06ae761458 --- /dev/null +++ b/homeassistant/components/vacuum/translations/nn.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Reingjer", + "docked": "Parkert", + "error": "Feil", + "idle": "Tomgang", + "off": "Av", + "on": "P\u00e5", + "paused": "Pausa", + "returning": "G\u00e5 tilbake til ladestasjonen" + } + }, + "title": "St\u00f8vsugar" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/no.json b/homeassistant/components/vacuum/translations/no.json new file mode 100644 index 00000000000..dbf94d1243b --- /dev/null +++ b/homeassistant/components/vacuum/translations/no.json @@ -0,0 +1,25 @@ +{ + "device_automation": { + "action_type": { + "clean": "La {entity_name} rengj\u00f8res", + "dock": "La {entity_name} tilbake til dock" + }, + "condition_type": { + "is_cleaning": "{entity_name} rengj\u00f8res", + "is_docked": "{entity_name} er docked" + }, + "trigger_type": { + "cleaning": "{entity_name} startet rengj\u00f8ringen", + "docked": "{entity_name} dokket" + } + }, + "state": { + "_": { + "cleaning": "Rengj\u00f8ring", + "docked": "Dokket", + "error": "Feil", + "returning": "Returner til dokken" + } + }, + "title": "St\u00f8vsuger" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/pl.json b/homeassistant/components/vacuum/translations/pl.json new file mode 100644 index 00000000000..6eef0f893f7 --- /dev/null +++ b/homeassistant/components/vacuum/translations/pl.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "niech {entity_name} sprz\u0105ta", + "dock": "niech {entity_name} wr\u00f3ci do bazy" + }, + "condition_type": { + "is_cleaning": "{entity_name} sprz\u0105ta", + "is_docked": "{entity_name} jest w bazie" + }, + "trigger_type": { + "cleaning": "{entity_name} zacznie sprz\u0105ta\u0107", + "docked": "{entity_name} wr\u00f3ci do bazy" + } + }, + "state": { + "_": { + "cleaning": "sprz\u0105tanie", + "docked": "w stacji dokuj\u0105cej", + "error": "b\u0142\u0105d", + "idle": "nieaktywny", + "off": "wy\u0142\u0105czony", + "on": "w\u0142\u0105czony", + "paused": "wstrzymany", + "returning": "powr\u00f3t do stacji dokuj\u0105cej" + } + }, + "title": "Odkurzacz" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/pt-BR.json b/homeassistant/components/vacuum/translations/pt-BR.json new file mode 100644 index 00000000000..79f4b9b7e42 --- /dev/null +++ b/homeassistant/components/vacuum/translations/pt-BR.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Limpando", + "docked": "Baseado", + "error": "Erro", + "idle": "Em espera", + "off": "Desligado", + "on": "Ligado", + "paused": "Pausado", + "returning": "Retornando para base" + } + }, + "title": "Aspirando" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/pt.json b/homeassistant/components/vacuum/translations/pt.json new file mode 100644 index 00000000000..ea5bf05dc9f --- /dev/null +++ b/homeassistant/components/vacuum/translations/pt.json @@ -0,0 +1,23 @@ +{ + "device_automation": { + "action_type": { + "clean": "Deixar {entity_name} limpar" + }, + "condition_type": { + "is_cleaning": "{entity_name} est\u00e1 a limpar" + } + }, + "state": { + "_": { + "cleaning": "A limpar", + "docked": "Encaixado", + "error": "Erro", + "idle": "Em espera", + "off": "Desligado", + "on": "Ligado", + "paused": "Em pausa", + "returning": "A regressar \u00e0 doca" + } + }, + "title": "Aspira\u00e7\u00e3o" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/ro.json b/homeassistant/components/vacuum/translations/ro.json new file mode 100644 index 00000000000..f58f59a4912 --- /dev/null +++ b/homeassistant/components/vacuum/translations/ro.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Cur\u0103\u021bare", + "docked": "Andocat", + "error": "Eroare", + "idle": "Inactiv", + "off": "Oprit", + "on": "Pornit", + "paused": "\u00centrerupt", + "returning": "\u00cen curs de \u00eentoarcere la doc" + } + }, + "title": "Aspirator" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/ru.json b/homeassistant/components/vacuum/translations/ru.json new file mode 100644 index 00000000000..bb7aca9719f --- /dev/null +++ b/homeassistant/components/vacuum/translations/ru.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c {entity_name} \u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0431\u043e\u0440\u043a\u0443", + "dock": "\u0412\u0435\u0440\u043d\u0443\u0442\u044c {entity_name} \u043d\u0430 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u044e" + }, + "condition_type": { + "is_cleaning": "{entity_name} \u0434\u0435\u043b\u0430\u0435\u0442 \u0443\u0431\u043e\u0440\u043a\u0443", + "is_docked": "{entity_name} \u0443 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0438" + }, + "trigger_type": { + "cleaning": "{entity_name} \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0443\u0431\u043e\u0440\u043a\u0443", + "docked": "{entity_name} \u0441\u0442\u044b\u043a\u0443\u0435\u0442\u0441\u044f \u0441 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0435\u0439" + } + }, + "state": { + "_": { + "cleaning": "\u0423\u0431\u043e\u0440\u043a\u0430", + "docked": "\u0423 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0438", + "error": "\u041e\u0448\u0438\u0431\u043a\u0430", + "idle": "\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435", + "off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d", + "paused": "\u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d", + "returning": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0438" + } + }, + "title": "\u041f\u044b\u043b\u0435\u0441\u043e\u0441" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/sk.json b/homeassistant/components/vacuum/translations/sk.json new file mode 100644 index 00000000000..a0782fb4cdc --- /dev/null +++ b/homeassistant/components/vacuum/translations/sk.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u010cist\u00ed", + "docked": "V doku", + "error": "Chyba", + "idle": "Ne\u010dinn\u00fd", + "off": "Vypnut\u00fd", + "on": "Zapnut\u00fd", + "paused": "Pozastaven\u00fd", + "returning": "Vracia sa do doku" + } + }, + "title": "Vys\u00e1va\u010d" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/sl.json b/homeassistant/components/vacuum/translations/sl.json new file mode 100644 index 00000000000..55ceb336c4f --- /dev/null +++ b/homeassistant/components/vacuum/translations/sl.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "Naj {entity_name} \u010disti", + "dock": "Pustite, da se {entity_name} vrne na dok" + }, + "condition_type": { + "is_cleaning": "{entity_name} \u010disti", + "is_docked": "{entity_name} je priklju\u010den" + }, + "trigger_type": { + "cleaning": "{entity_name} za\u010del \u010di\u0161\u010denje", + "docked": "{entity_name} priklju\u010den" + } + }, + "state": { + "_": { + "cleaning": "\u010cistim", + "docked": "Priklju\u010den", + "error": "Napaka", + "idle": "V pripravljenosti", + "off": "Izklju\u010den", + "on": "Vklju\u010den", + "paused": "Zaustavljeno", + "returning": "Vra\u010dam se na postajo" + } + }, + "title": "Sesam" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/sv.json b/homeassistant/components/vacuum/translations/sv.json new file mode 100644 index 00000000000..88c5cff11f0 --- /dev/null +++ b/homeassistant/components/vacuum/translations/sv.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "L\u00e5t {entity_name} st\u00e4da", + "dock": "L\u00e5t {entity_name} \u00e5terg\u00e5 till dockan" + }, + "condition_type": { + "is_cleaning": "{entity_name} st\u00e4dar", + "is_docked": "{entity_name} \u00e4r dockad" + }, + "trigger_type": { + "cleaning": "{entity_name} b\u00f6rjade st\u00e4da", + "docked": "{entity_name} dockad" + } + }, + "state": { + "_": { + "cleaning": "St\u00e4dar", + "docked": "Dockad", + "error": "Fel", + "idle": "Inaktiv", + "off": "Av", + "on": "P\u00e5", + "paused": "Pausad", + "returning": "\u00c5terg\u00e5r till docka" + } + }, + "title": "Dammsugare" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/te.json b/homeassistant/components/vacuum/translations/te.json new file mode 100644 index 00000000000..774d37755b4 --- /dev/null +++ b/homeassistant/components/vacuum/translations/te.json @@ -0,0 +1,7 @@ +{ + "state": { + "_": { + "cleaning": "\u0c36\u0c41\u0c2d\u0c4d\u0c30\u0c2a\u0c30\u0c41\u0c1a\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/th.json b/homeassistant/components/vacuum/translations/th.json new file mode 100644 index 00000000000..d861fcac779 --- /dev/null +++ b/homeassistant/components/vacuum/translations/th.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e30\u0e2d\u0e32\u0e14", + "docked": "\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d", + "error": "\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14", + "idle": "\u0e27\u0e48\u0e32\u0e07", + "off": "\u0e1b\u0e34\u0e14", + "on": "\u0e40\u0e1b\u0e34\u0e14", + "paused": "\u0e2b\u0e22\u0e38\u0e14\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27", + "returning": "\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e08\u0e38\u0e14\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d" + } + }, + "title": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e14\u0e39\u0e14\u0e1d\u0e38\u0e48\u0e19" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/tr.json b/homeassistant/components/vacuum/translations/tr.json new file mode 100644 index 00000000000..7d127417cb5 --- /dev/null +++ b/homeassistant/components/vacuum/translations/tr.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "Temizleniyor", + "docked": "Dock'da", + "error": "Hata", + "idle": "Bo\u015fta", + "off": "Kapal\u0131", + "on": "A\u00e7\u0131k", + "paused": "Durduruldu", + "returning": "Dock'a geri d\u00f6n\u00fc\u015f" + } + }, + "title": "Elektrikli s\u00fcp\u00fcrge" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/uk.json b/homeassistant/components/vacuum/translations/uk.json new file mode 100644 index 00000000000..9febc8aff1f --- /dev/null +++ b/homeassistant/components/vacuum/translations/uk.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u041f\u0440\u0438\u0431\u0438\u0440\u0430\u043d\u043d\u044f", + "docked": "\u041f\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0432\u0430\u043d\u043e", + "error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430", + "idle": "\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f", + "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e", + "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e", + "paused": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e", + "returning": "\u041f\u043e\u0432\u0435\u0440\u043d\u0435\u043d\u043d\u044f \u0434\u043e \u0434\u043e\u043a\u0430" + } + }, + "title": "\u041f\u0438\u043b\u043e\u0441\u043e\u0441" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/vi.json b/homeassistant/components/vacuum/translations/vi.json new file mode 100644 index 00000000000..22cbc04eb96 --- /dev/null +++ b/homeassistant/components/vacuum/translations/vi.json @@ -0,0 +1,15 @@ +{ + "state": { + "_": { + "cleaning": "\u0110ang l\u00e0m s\u1ea1ch", + "docked": "\u0110\u00e3 v\u00e0o dock", + "error": "L\u1ed7i", + "idle": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng", + "off": "M\u1edf", + "on": "T\u1eaft", + "paused": "T\u1ea1m d\u1eebng", + "returning": "\u0110ang tr\u1edf l\u1ea1i dock" + } + }, + "title": "Vacuum" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/zh-Hans.json b/homeassistant/components/vacuum/translations/zh-Hans.json new file mode 100644 index 00000000000..9e252236d0a --- /dev/null +++ b/homeassistant/components/vacuum/translations/zh-Hans.json @@ -0,0 +1,28 @@ +{ + "device_automation": { + "action_type": { + "clean": "\u4f7f {entity_name} \u5f00\u59cb\u6e05\u626b" + }, + "condition_type": { + "is_cleaning": "{entity_name} \u6b63\u5728\u6e05\u626b", + "is_docked": "{entity_name} \u6b63\u505c\u9760\u5728\u5e95\u5ea7\u4e0a" + }, + "trigger_type": { + "cleaning": "{entity_name} \u5f00\u59cb\u6e05\u626b", + "docked": "{entity_name} \u8fd4\u56de\u5e95\u5ea7" + } + }, + "state": { + "_": { + "cleaning": "\u6b63\u5728\u6e05\u626b", + "docked": "\u505c\u9760", + "error": "\u9519\u8bef", + "idle": "\u7a7a\u95f2", + "off": "\u5173\u95ed", + "on": "\u5f00\u542f", + "paused": "\u5df2\u6682\u505c", + "returning": "\u6b63\u5728\u8fd4\u56de" + } + }, + "title": "\u626b\u5730\u673a" +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/zh-Hant.json b/homeassistant/components/vacuum/translations/zh-Hant.json new file mode 100644 index 00000000000..0f141b0f225 --- /dev/null +++ b/homeassistant/components/vacuum/translations/zh-Hant.json @@ -0,0 +1,29 @@ +{ + "device_automation": { + "action_type": { + "clean": "\u555f\u52d5{entity_name}\u6e05\u9664", + "dock": "\u555f\u52d5{entity_name}\u56de\u5230\u5145\u96fb\u7ad9" + }, + "condition_type": { + "is_cleaning": "{entity_name}\u6b63\u5728\u6e05\u6383", + "is_docked": "{entity_name}\u65bc\u5145\u96fb\u7ad9" + }, + "trigger_type": { + "cleaning": "{entity_name}\u958b\u59cb\u6e05\u6383", + "docked": "{entity_name}\u5df2\u56de\u5145\u96fb\u7ad9" + } + }, + "state": { + "_": { + "cleaning": "\u6e05\u6383\u4e2d", + "docked": "\u5145\u96fb\u4e2d", + "error": "\u932f\u8aa4", + "idle": "\u66ab\u505c", + "off": "\u95dc\u9589", + "on": "\u958b\u555f", + "paused": "\u66ab\u505c", + "returning": "\u8fd4\u56de\u5145\u96fb" + } + }, + "title": "\u5438\u5875\u5668" +} \ No newline at end of file diff --git a/homeassistant/components/vallox/fan.py b/homeassistant/components/vallox/fan.py index 5277a330976..c79ee15db59 100644 --- a/homeassistant/components/vallox/fan.py +++ b/homeassistant/components/vallox/fan.py @@ -93,8 +93,10 @@ class ValloxFan(FanEntity): async def async_added_to_hass(self): """Call to update.""" - async_dispatcher_connect( - self.hass, SIGNAL_VALLOX_STATE_UPDATE, self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_VALLOX_STATE_UPDATE, self._update_callback + ) ) @callback diff --git a/homeassistant/components/vallox/manifest.json b/homeassistant/components/vallox/manifest.json index 7a082200740..97e3955792c 100644 --- a/homeassistant/components/vallox/manifest.json +++ b/homeassistant/components/vallox/manifest.json @@ -3,6 +3,5 @@ "name": "Valloxs", "documentation": "https://www.home-assistant.io/integrations/vallox", "requirements": ["vallox-websocket-api==2.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/vallox/sensor.py b/homeassistant/components/vallox/sensor.py index 5bf9b8061ad..b3a7e8758a0 100644 --- a/homeassistant/components/vallox/sensor.py +++ b/homeassistant/components/vallox/sensor.py @@ -149,8 +149,10 @@ class ValloxSensor(Entity): async def async_added_to_hass(self): """Call to update.""" - async_dispatcher_connect( - self.hass, SIGNAL_VALLOX_STATE_UPDATE, self._update_callback + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_VALLOX_STATE_UPDATE, self._update_callback + ) ) @callback diff --git a/homeassistant/components/vallox/services.yaml b/homeassistant/components/vallox/services.yaml index ea92e0ca2d9..65757b70364 100644 --- a/homeassistant/components/vallox/services.yaml +++ b/homeassistant/components/vallox/services.yaml @@ -2,8 +2,7 @@ set_profile: description: Set the ventilation profile. fields: profile: - description: > - Set to any of: Home, Away, Boost, Fireplace + description: "Set to any of: Home, Away, Boost, Fireplace" example: Away set_profile_fan_speed_home: @@ -13,7 +12,6 @@ set_profile_fan_speed_home: description: Fan speed in %. Integer, between 0 and 100. example: 50 - set_profile_fan_speed_away: description: Set the fan speed of the Away profile. fields: diff --git a/homeassistant/components/vasttrafik/manifest.json b/homeassistant/components/vasttrafik/manifest.json index 9d339d64dd8..59e655c94f2 100644 --- a/homeassistant/components/vasttrafik/manifest.json +++ b/homeassistant/components/vasttrafik/manifest.json @@ -3,6 +3,5 @@ "name": "Västtrafik", "documentation": "https://www.home-assistant.io/integrations/vasttrafik", "requirements": ["vtjp==0.1.14"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/velbus/.translations/bg.json b/homeassistant/components/velbus/.translations/bg.json deleted file mode 100644 index e769f83d28e..00000000000 --- a/homeassistant/components/velbus/.translations/bg.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "\u0422\u043e\u0437\u0438 \u043f\u043e\u0440\u0442 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d" - }, - "error": { - "connection_failed": "\u0412\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441 velbus \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430", - "port_exists": "\u0422\u043e\u0437\u0438 \u043f\u043e\u0440\u0442 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d" - }, - "step": { - "user": { - "data": { - "name": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u0437\u0438 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 velbus", - "port": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u0449 \u043d\u0438\u0437" - }, - "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0442\u0438\u043f\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441 velbus" - } - }, - "title": "Velbus \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/ca.json b/homeassistant/components/velbus/.translations/ca.json deleted file mode 100644 index e38977a483f..00000000000 --- a/homeassistant/components/velbus/.translations/ca.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "El port ja est\u00e0 configurat" - }, - "error": { - "connection_failed": "Ha fallat la connexi\u00f3 Velbus", - "port_exists": "El port ja est\u00e0 configurat" - }, - "step": { - "user": { - "data": { - "name": "Nom de la connexi\u00f3 Velbus", - "port": "Cadena de connexi\u00f3" - }, - "title": "Tipus de connexi\u00f3 Velbus" - } - }, - "title": "Interf\u00edcie Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/da.json b/homeassistant/components/velbus/.translations/da.json deleted file mode 100644 index 5e636c8bcd7..00000000000 --- a/homeassistant/components/velbus/.translations/da.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Denne port er allerede konfigureret" - }, - "error": { - "connection_failed": "Velbus forbindelsen mislykkedes", - "port_exists": "Denne port er allerede konfigureret" - }, - "step": { - "user": { - "data": { - "name": "Navnet p\u00e5 denne velbus forbindelse", - "port": "Forbindelsesstreng" - }, - "title": "Definer velbus forbindelsestypen" - } - }, - "title": "Velbus-interface" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/de.json b/homeassistant/components/velbus/.translations/de.json deleted file mode 100644 index 72af917e12e..00000000000 --- a/homeassistant/components/velbus/.translations/de.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Dieser Port ist bereits konfiguriert" - }, - "error": { - "connection_failed": "Die Velbus-Verbindung ist fehlgeschlagen", - "port_exists": "Dieser Port ist bereits konfiguriert" - }, - "step": { - "user": { - "data": { - "name": "Der Name f\u00fcr diese Velbus-Verbindung", - "port": "Verbindungs details" - }, - "title": "Definieren des Velbus-Verbindungstyps" - } - }, - "title": "Velbus-Schnittstelle" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/en.json b/homeassistant/components/velbus/.translations/en.json deleted file mode 100644 index 898380a6f29..00000000000 --- a/homeassistant/components/velbus/.translations/en.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "This port is already configured" - }, - "error": { - "connection_failed": "The velbus connection failed", - "port_exists": "This port is already configured" - }, - "step": { - "user": { - "data": { - "name": "The name for this velbus connection", - "port": "Connection string" - }, - "title": "Define the velbus connection type" - } - }, - "title": "Velbus interface" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/es-419.json b/homeassistant/components/velbus/.translations/es-419.json deleted file mode 100644 index 1e1e8897c30..00000000000 --- a/homeassistant/components/velbus/.translations/es-419.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Este puerto ya est\u00e1 configurado" - }, - "error": { - "connection_failed": "La conexi\u00f3n velbus fall\u00f3", - "port_exists": "Este puerto ya est\u00e1 configurado" - }, - "step": { - "user": { - "data": { - "name": "El nombre de esta conexi\u00f3n velbus", - "port": "Cadena de conexi\u00f3n" - }, - "title": "Definir el tipo de conexi\u00f3n velbus" - } - }, - "title": "Interfaz Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/es.json b/homeassistant/components/velbus/.translations/es.json deleted file mode 100644 index 1e1e8897c30..00000000000 --- a/homeassistant/components/velbus/.translations/es.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Este puerto ya est\u00e1 configurado" - }, - "error": { - "connection_failed": "La conexi\u00f3n velbus fall\u00f3", - "port_exists": "Este puerto ya est\u00e1 configurado" - }, - "step": { - "user": { - "data": { - "name": "El nombre de esta conexi\u00f3n velbus", - "port": "Cadena de conexi\u00f3n" - }, - "title": "Definir el tipo de conexi\u00f3n velbus" - } - }, - "title": "Interfaz Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/fr.json b/homeassistant/components/velbus/.translations/fr.json deleted file mode 100644 index 8d93adbf4a9..00000000000 --- a/homeassistant/components/velbus/.translations/fr.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Ce port est d\u00e9j\u00e0 configur\u00e9" - }, - "error": { - "connection_failed": "La connexion velbus a \u00e9chou\u00e9", - "port_exists": "Ce port est d\u00e9j\u00e0 configur\u00e9" - }, - "step": { - "user": { - "data": { - "name": "Le nom pour cette connexion velbus", - "port": "Cha\u00eene de connexion" - }, - "title": "D\u00e9finir le type de connexion velbus" - } - }, - "title": "Interface Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/it.json b/homeassistant/components/velbus/.translations/it.json deleted file mode 100644 index e4f1fbf9c6b..00000000000 --- a/homeassistant/components/velbus/.translations/it.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Questa porta \u00e8 gi\u00e0 configurata" - }, - "error": { - "connection_failed": "La connessione Velbus non \u00e8 riuscita", - "port_exists": "Questa porta \u00e8 gi\u00e0 configurata" - }, - "step": { - "user": { - "data": { - "name": "Il nome per questa connessione Velbus", - "port": "Stringa di connessione" - }, - "title": "Definire il tipo di connessione Velbus" - } - }, - "title": "Interfaccia Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/ko.json b/homeassistant/components/velbus/.translations/ko.json deleted file mode 100644 index 6e218afc97c..00000000000 --- a/homeassistant/components/velbus/.translations/ko.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "\ud3ec\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "error": { - "connection_failed": "Velbus \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", - "port_exists": "\ud3ec\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "name": "Velbus \uc5f0\uacb0 \uc774\ub984", - "port": "\uc5f0\uacb0 \ubb38\uc790\uc5f4" - }, - "title": "Velbus \uc5f0\uacb0 \uc720\ud615 \uc815\uc758" - } - }, - "title": "Velbus \uc778\ud130\ud398\uc774\uc2a4" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/lb.json b/homeassistant/components/velbus/.translations/lb.json deleted file mode 100644 index f38a74e5c1f..00000000000 --- a/homeassistant/components/velbus/.translations/lb.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "D\u00ebse Port ass scho konfigur\u00e9iert" - }, - "error": { - "connection_failed": "Feeler bei der velbus Verbindung", - "port_exists": "D\u00ebse Port ass scho konfigur\u00e9iert" - }, - "step": { - "user": { - "data": { - "name": "Numm fir d\u00ebs velbus Verbindung", - "port": "Verbindungs zeeche-folleg" - }, - "title": "D\u00e9fin\u00e9iert den Typ vun der Velbus Verbindung" - } - }, - "title": "Velbus Interface" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/nl.json b/homeassistant/components/velbus/.translations/nl.json deleted file mode 100644 index b2908e8d221..00000000000 --- a/homeassistant/components/velbus/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Deze poort is al geconfigureerd" - }, - "error": { - "connection_failed": "De velbus verbinding is mislukt.", - "port_exists": "Deze poort is al geconfigureerd" - }, - "step": { - "user": { - "data": { - "name": "De naam voor deze velbus-verbinding", - "port": "Verbindingsreeks" - }, - "title": "Definieer de velbus-verbindingstype" - } - }, - "title": "Velbus interface" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/no.json b/homeassistant/components/velbus/.translations/no.json deleted file mode 100644 index c6b16170877..00000000000 --- a/homeassistant/components/velbus/.translations/no.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Denne porten er allerede konfigurert" - }, - "error": { - "connection_failed": "Velbus-tilkoblingen mislyktes", - "port_exists": "Denne porten er allerede konfigurert" - }, - "step": { - "user": { - "data": { - "name": "Navnet p\u00e5 denne velbus tilkoblingen", - "port": "Tilkoblingsstreng" - }, - "title": "Definer tilkoblingstype for velbus" - } - }, - "title": "Velbus-grensesnitt" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/pl.json b/homeassistant/components/velbus/.translations/pl.json deleted file mode 100644 index 0856d142bef..00000000000 --- a/homeassistant/components/velbus/.translations/pl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Ten port jest ju\u017c skonfigurowany." - }, - "error": { - "connection_failed": "Po\u0142\u0105czenie Velbus nie powiod\u0142o si\u0119", - "port_exists": "Ten port jest ju\u017c skonfigurowany." - }, - "step": { - "user": { - "data": { - "name": "Nazwa tego po\u0142\u0105czenia Velbus", - "port": "Parametry po\u0142\u0105czenia" - }, - "title": "Zdefiniuj typ po\u0142\u0105czenia Velbus" - } - }, - "title": "Interfejs Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/ru.json b/homeassistant/components/velbus/.translations/ru.json deleted file mode 100644 index 10ae06ffa7c..00000000000 --- a/homeassistant/components/velbus/.translations/ru.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "\u042d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d." - }, - "error": { - "connection_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 Velbus.", - "port_exists": "\u042d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d." - }, - "step": { - "user": { - "data": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "port": "\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f" - }, - "title": "Velbus" - } - }, - "title": "Velbus" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/sl.json b/homeassistant/components/velbus/.translations/sl.json deleted file mode 100644 index 2fa1ccadcea..00000000000 --- a/homeassistant/components/velbus/.translations/sl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Ta vrata so \u017ee nastavljena" - }, - "error": { - "connection_failed": "Povezava z velbusom ni uspela", - "port_exists": "Ta vrata so \u017ee nastavljena" - }, - "step": { - "user": { - "data": { - "name": "Ime za to velbus povezavo", - "port": "Povezovalni niz" - }, - "title": "Dolo\u010dite vrsto povezave z velbusom" - } - }, - "title": "Velbus vmesnik" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/sv.json b/homeassistant/components/velbus/.translations/sv.json deleted file mode 100644 index 5a864439423..00000000000 --- a/homeassistant/components/velbus/.translations/sv.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "Den h\u00e4r porten \u00e4r redan konfigurerad" - }, - "error": { - "connection_failed": "Velbus-anslutningen misslyckades", - "port_exists": "Den h\u00e4r porten \u00e4r redan konfigurerad" - }, - "step": { - "user": { - "data": { - "name": "Namnet p\u00e5 den h\u00e4r velbus-anslutningen", - "port": "Anslutningsstr\u00e4ng" - }, - "title": "Definiera velbus-anslutningstypen" - } - }, - "title": "Velbus-gr\u00e4nssnitt" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/zh-Hant.json b/homeassistant/components/velbus/.translations/zh-Hant.json deleted file mode 100644 index 33f9191e8a2..00000000000 --- a/homeassistant/components/velbus/.translations/zh-Hant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "port_exists": "\u6b64\u901a\u8a0a\u57e0\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "error": { - "connection_failed": "Velbus \u9023\u7dda\u5931\u6557", - "port_exists": "\u6b64\u901a\u8a0a\u57e0\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" - }, - "step": { - "user": { - "data": { - "name": "Velbus \u9023\u7dda\u540d\u7a31", - "port": "\u9023\u7dda\u5b57\u4e32" - }, - "title": "\u5b9a\u7fa9 Velbus \u9023\u7dda\u985e\u578b" - } - }, - "title": "Velbus \u4ecb\u9762" - } -} \ No newline at end of file diff --git a/homeassistant/components/velbus/climate.py b/homeassistant/components/velbus/climate.py index e322cfb77c7..8810f945ba9 100644 --- a/homeassistant/components/velbus/climate.py +++ b/homeassistant/components/velbus/climate.py @@ -38,7 +38,7 @@ class VelbusClimate(VelbusEntity, ClimateDevice): @property def temperature_unit(self): """Return the unit this state is expressed in.""" - if self._module.get_unit(self._channel) == "°C": + if self._module.get_unit(self._channel) == TEMP_CELSIUS: return TEMP_CELSIUS return TEMP_FAHRENHEIT @@ -82,4 +82,3 @@ class VelbusClimate(VelbusEntity, ClimateDevice): def set_hvac_mode(self, hvac_mode): """Set new target hvac mode.""" - pass diff --git a/homeassistant/components/velbus/config_flow.py b/homeassistant/components/velbus/config_flow.py index 1d081b711a8..e85422d740a 100644 --- a/homeassistant/components/velbus/config_flow.py +++ b/homeassistant/components/velbus/config_flow.py @@ -13,9 +13,9 @@ from .const import DOMAIN @callback def velbus_entries(hass: HomeAssistant): """Return connections for Velbus domain.""" - return set( + return { (entry.data[CONF_PORT]) for entry in hass.config_entries.async_entries(DOMAIN) - ) + } class VelbusConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): diff --git a/homeassistant/components/velbus/manifest.json b/homeassistant/components/velbus/manifest.json index fe3aee9a4cd..ca3ae2b0df6 100644 --- a/homeassistant/components/velbus/manifest.json +++ b/homeassistant/components/velbus/manifest.json @@ -4,6 +4,5 @@ "documentation": "https://www.home-assistant.io/integrations/velbus", "requirements": ["python-velbus==2.0.43"], "config_flow": true, - "dependencies": [], "codeowners": ["@Cereal2nd", "@brefra"] } diff --git a/homeassistant/components/velbus/services.yaml b/homeassistant/components/velbus/services.yaml index ea31b951a18..490c746fa74 100644 --- a/homeassistant/components/velbus/services.yaml +++ b/homeassistant/components/velbus/services.yaml @@ -10,9 +10,9 @@ set_memo_text: description: > The module address in decimal format. The decimal addresses are displayed in front of the modules listed at the integration page. - example: '11' + example: "11" memo_text: description: > The actual text to be displayed. Text is limited to 64 characters. - example: 'Do not forget trash' \ No newline at end of file + example: "Do not forget trash" diff --git a/homeassistant/components/velbus/strings.json b/homeassistant/components/velbus/strings.json index b927e6a5636..d5f9d4e7ccf 100644 --- a/homeassistant/components/velbus/strings.json +++ b/homeassistant/components/velbus/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Velbus interface", "step": { "user": { "title": "Define the velbus connection type", @@ -14,8 +13,6 @@ "port_exists": "This port is already configured", "connection_failed": "The velbus connection failed" }, - "abort": { - "port_exists": "This port is already configured" - } + "abort": { "port_exists": "This port is already configured" } } } diff --git a/homeassistant/components/velbus/translations/bg.json b/homeassistant/components/velbus/translations/bg.json new file mode 100644 index 00000000000..b22803cfb27 --- /dev/null +++ b/homeassistant/components/velbus/translations/bg.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "\u0422\u043e\u0437\u0438 \u043f\u043e\u0440\u0442 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d" + }, + "error": { + "connection_failed": "\u0412\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441 velbus \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430", + "port_exists": "\u0422\u043e\u0437\u0438 \u043f\u043e\u0440\u0442 \u0435 \u0432\u0435\u0447\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d" + }, + "step": { + "user": { + "data": { + "name": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u0437\u0438 \u0432\u0440\u044a\u0437\u043a\u0430 \u0441 velbus", + "port": "\u0421\u0432\u044a\u0440\u0437\u0432\u0430\u0449 \u043d\u0438\u0437" + }, + "title": "\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0442\u0438\u043f\u0430 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0441 velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/ca.json b/homeassistant/components/velbus/translations/ca.json new file mode 100644 index 00000000000..4738e236fff --- /dev/null +++ b/homeassistant/components/velbus/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "El port ja est\u00e0 configurat" + }, + "error": { + "connection_failed": "Ha fallat la connexi\u00f3 Velbus", + "port_exists": "El port ja est\u00e0 configurat" + }, + "step": { + "user": { + "data": { + "name": "Nom de la connexi\u00f3 Velbus", + "port": "Cadena de connexi\u00f3" + }, + "title": "Tipus de connexi\u00f3 Velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/da.json b/homeassistant/components/velbus/translations/da.json new file mode 100644 index 00000000000..6bb58f5871a --- /dev/null +++ b/homeassistant/components/velbus/translations/da.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Denne port er allerede konfigureret" + }, + "error": { + "connection_failed": "Velbus forbindelsen mislykkedes", + "port_exists": "Denne port er allerede konfigureret" + }, + "step": { + "user": { + "data": { + "name": "Navnet p\u00e5 denne velbus forbindelse", + "port": "Forbindelsesstreng" + }, + "title": "Definer velbus forbindelsestypen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/de.json b/homeassistant/components/velbus/translations/de.json new file mode 100644 index 00000000000..8b0a2ab6c9e --- /dev/null +++ b/homeassistant/components/velbus/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Dieser Port ist bereits konfiguriert" + }, + "error": { + "connection_failed": "Die Velbus-Verbindung ist fehlgeschlagen", + "port_exists": "Dieser Port ist bereits konfiguriert" + }, + "step": { + "user": { + "data": { + "name": "Der Name f\u00fcr diese Velbus-Verbindung", + "port": "Verbindungs details" + }, + "title": "Definieren des Velbus-Verbindungstyps" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/en.json b/homeassistant/components/velbus/translations/en.json new file mode 100644 index 00000000000..ab455442891 --- /dev/null +++ b/homeassistant/components/velbus/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "This port is already configured" + }, + "error": { + "connection_failed": "The velbus connection failed", + "port_exists": "This port is already configured" + }, + "step": { + "user": { + "data": { + "name": "The name for this velbus connection", + "port": "Connection string" + }, + "title": "Define the velbus connection type" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/es-419.json b/homeassistant/components/velbus/translations/es-419.json new file mode 100644 index 00000000000..1bde7176eaf --- /dev/null +++ b/homeassistant/components/velbus/translations/es-419.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Este puerto ya est\u00e1 configurado" + }, + "error": { + "connection_failed": "La conexi\u00f3n velbus fall\u00f3", + "port_exists": "Este puerto ya est\u00e1 configurado" + }, + "step": { + "user": { + "data": { + "name": "El nombre de esta conexi\u00f3n velbus", + "port": "Cadena de conexi\u00f3n" + }, + "title": "Definir el tipo de conexi\u00f3n velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/es.json b/homeassistant/components/velbus/translations/es.json new file mode 100644 index 00000000000..1bde7176eaf --- /dev/null +++ b/homeassistant/components/velbus/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Este puerto ya est\u00e1 configurado" + }, + "error": { + "connection_failed": "La conexi\u00f3n velbus fall\u00f3", + "port_exists": "Este puerto ya est\u00e1 configurado" + }, + "step": { + "user": { + "data": { + "name": "El nombre de esta conexi\u00f3n velbus", + "port": "Cadena de conexi\u00f3n" + }, + "title": "Definir el tipo de conexi\u00f3n velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/fr.json b/homeassistant/components/velbus/translations/fr.json new file mode 100644 index 00000000000..ab2e8d756e6 --- /dev/null +++ b/homeassistant/components/velbus/translations/fr.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Ce port est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "connection_failed": "La connexion velbus a \u00e9chou\u00e9", + "port_exists": "Ce port est d\u00e9j\u00e0 configur\u00e9" + }, + "step": { + "user": { + "data": { + "name": "Le nom pour cette connexion velbus", + "port": "Cha\u00eene de connexion" + }, + "title": "D\u00e9finir le type de connexion velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/hu.json b/homeassistant/components/velbus/translations/hu.json similarity index 100% rename from homeassistant/components/velbus/.translations/hu.json rename to homeassistant/components/velbus/translations/hu.json diff --git a/homeassistant/components/velbus/translations/it.json b/homeassistant/components/velbus/translations/it.json new file mode 100644 index 00000000000..bf24ff11336 --- /dev/null +++ b/homeassistant/components/velbus/translations/it.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Questa porta \u00e8 gi\u00e0 configurata" + }, + "error": { + "connection_failed": "La connessione Velbus non \u00e8 riuscita", + "port_exists": "Questa porta \u00e8 gi\u00e0 configurata" + }, + "step": { + "user": { + "data": { + "name": "Il nome per questa connessione Velbus", + "port": "Stringa di connessione" + }, + "title": "Definire il tipo di connessione Velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/ko.json b/homeassistant/components/velbus/translations/ko.json new file mode 100644 index 00000000000..0d8e003472a --- /dev/null +++ b/homeassistant/components/velbus/translations/ko.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "\ud3ec\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "connection_failed": "Velbus \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "port_exists": "\ud3ec\ud2b8\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "name": "Velbus \uc5f0\uacb0 \uc774\ub984", + "port": "\uc5f0\uacb0 \ubb38\uc790\uc5f4" + }, + "title": "Velbus \uc5f0\uacb0 \uc720\ud615 \uc815\uc758" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/lb.json b/homeassistant/components/velbus/translations/lb.json new file mode 100644 index 00000000000..5bb18bc5fa4 --- /dev/null +++ b/homeassistant/components/velbus/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "D\u00ebse Port ass scho konfigur\u00e9iert" + }, + "error": { + "connection_failed": "Feeler bei der velbus Verbindung", + "port_exists": "D\u00ebse Port ass scho konfigur\u00e9iert" + }, + "step": { + "user": { + "data": { + "name": "Numm fir d\u00ebs velbus Verbindung", + "port": "Verbindungs zeeche-folleg" + }, + "title": "D\u00e9fin\u00e9iert den Typ vun der Velbus Verbindung" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/nl.json b/homeassistant/components/velbus/translations/nl.json new file mode 100644 index 00000000000..81991bfff0e --- /dev/null +++ b/homeassistant/components/velbus/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Deze poort is al geconfigureerd" + }, + "error": { + "connection_failed": "De velbus verbinding is mislukt.", + "port_exists": "Deze poort is al geconfigureerd" + }, + "step": { + "user": { + "data": { + "name": "De naam voor deze velbus-verbinding", + "port": "Verbindingsreeks" + }, + "title": "Definieer de velbus-verbindingstype" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/no.json b/homeassistant/components/velbus/translations/no.json new file mode 100644 index 00000000000..0cc2f475820 --- /dev/null +++ b/homeassistant/components/velbus/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Denne porten er allerede konfigurert" + }, + "error": { + "connection_failed": "Velbus-tilkoblingen mislyktes", + "port_exists": "Denne porten er allerede konfigurert" + }, + "step": { + "user": { + "data": { + "name": "Navnet p\u00e5 denne velbus tilkoblingen", + "port": "Tilkoblingsstreng" + }, + "title": "Definer tilkoblingstype for velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/pl.json b/homeassistant/components/velbus/translations/pl.json new file mode 100644 index 00000000000..c3f06b312f4 --- /dev/null +++ b/homeassistant/components/velbus/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Ten port jest ju\u017c skonfigurowany." + }, + "error": { + "connection_failed": "Po\u0142\u0105czenie Velbus nie powiod\u0142o si\u0119", + "port_exists": "Ten port jest ju\u017c skonfigurowany." + }, + "step": { + "user": { + "data": { + "name": "Nazwa tego po\u0142\u0105czenia Velbus", + "port": "Parametry po\u0142\u0105czenia" + }, + "title": "Zdefiniuj typ po\u0142\u0105czenia Velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/pt-BR.json b/homeassistant/components/velbus/translations/pt-BR.json similarity index 100% rename from homeassistant/components/velbus/.translations/pt-BR.json rename to homeassistant/components/velbus/translations/pt-BR.json diff --git a/homeassistant/components/velbus/translations/ru.json b/homeassistant/components/velbus/translations/ru.json new file mode 100644 index 00000000000..e88f6209eee --- /dev/null +++ b/homeassistant/components/velbus/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "\u042d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d." + }, + "error": { + "connection_failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 Velbus.", + "port_exists": "\u042d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d." + }, + "step": { + "user": { + "data": { + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "port": "\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f" + }, + "title": "Velbus" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/sl.json b/homeassistant/components/velbus/translations/sl.json new file mode 100644 index 00000000000..311919186e9 --- /dev/null +++ b/homeassistant/components/velbus/translations/sl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Ta vrata so \u017ee nastavljena" + }, + "error": { + "connection_failed": "Povezava z velbusom ni uspela", + "port_exists": "Ta vrata so \u017ee nastavljena" + }, + "step": { + "user": { + "data": { + "name": "Ime za to velbus povezavo", + "port": "Povezovalni niz" + }, + "title": "Dolo\u010dite vrsto povezave z velbusom" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/translations/sv.json b/homeassistant/components/velbus/translations/sv.json new file mode 100644 index 00000000000..e7a56c52cd6 --- /dev/null +++ b/homeassistant/components/velbus/translations/sv.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "Den h\u00e4r porten \u00e4r redan konfigurerad" + }, + "error": { + "connection_failed": "Velbus-anslutningen misslyckades", + "port_exists": "Den h\u00e4r porten \u00e4r redan konfigurerad" + }, + "step": { + "user": { + "data": { + "name": "Namnet p\u00e5 den h\u00e4r velbus-anslutningen", + "port": "Anslutningsstr\u00e4ng" + }, + "title": "Definiera velbus-anslutningstypen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velbus/.translations/zh-Hans.json b/homeassistant/components/velbus/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/velbus/.translations/zh-Hans.json rename to homeassistant/components/velbus/translations/zh-Hans.json diff --git a/homeassistant/components/velbus/translations/zh-Hant.json b/homeassistant/components/velbus/translations/zh-Hant.json new file mode 100644 index 00000000000..48f9ef5919b --- /dev/null +++ b/homeassistant/components/velbus/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "port_exists": "\u6b64\u901a\u8a0a\u57e0\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "error": { + "connection_failed": "Velbus \u9023\u7dda\u5931\u6557", + "port_exists": "\u6b64\u901a\u8a0a\u57e0\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" + }, + "step": { + "user": { + "data": { + "name": "Velbus \u9023\u7dda\u540d\u7a31", + "port": "\u9023\u7dda\u5b57\u4e32" + }, + "title": "\u5b9a\u7fa9 Velbus \u9023\u7dda\u985e\u578b" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/velux/cover.py b/homeassistant/components/velux/cover.py index c9b4aa53fe5..fe5b1dcf3af 100644 --- a/homeassistant/components/velux/cover.py +++ b/homeassistant/components/velux/cover.py @@ -38,7 +38,7 @@ class VeluxCover(CoverDevice): async def after_update_callback(device): """Call after device was updated.""" - await self.async_update_ha_state() + self.async_write_ha_state() self.node.register_device_updated_cb(after_update_callback) diff --git a/homeassistant/components/velux/manifest.json b/homeassistant/components/velux/manifest.json index 7ecc2ac6ded..d67e29af693 100644 --- a/homeassistant/components/velux/manifest.json +++ b/homeassistant/components/velux/manifest.json @@ -3,6 +3,5 @@ "name": "Velux", "documentation": "https://www.home-assistant.io/integrations/velux", "requirements": ["pyvlx==0.2.12"], - "dependencies": [], "codeowners": ["@Julius2342"] } diff --git a/homeassistant/components/velux/scene.py b/homeassistant/components/velux/scene.py index f93e73e72c7..96ff0558fff 100644 --- a/homeassistant/components/velux/scene.py +++ b/homeassistant/components/velux/scene.py @@ -1,4 +1,6 @@ """Support for VELUX scenes.""" +from typing import Any + from homeassistant.components.scene import Scene from . import _LOGGER, DATA_VELUX @@ -6,9 +8,7 @@ from . import _LOGGER, DATA_VELUX async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the scenes for Velux platform.""" - entities = [] - for scene in hass.data[DATA_VELUX].pyvlx.scenes: - entities.append(VeluxScene(scene)) + entities = [VeluxScene(scene) for scene in hass.data[DATA_VELUX].pyvlx.scenes] async_add_entities(entities) @@ -25,6 +25,6 @@ class VeluxScene(Scene): """Return the name of the scene.""" return self.scene.name - async def async_activate(self): + async def async_activate(self, **kwargs: Any) -> None: """Activate the scene.""" await self.scene.run(wait_for_completion=False) diff --git a/homeassistant/components/venstar/climate.py b/homeassistant/components/venstar/climate.py index effecd7244c..7de6427b5d8 100644 --- a/homeassistant/components/venstar/climate.py +++ b/homeassistant/components/venstar/climate.py @@ -82,10 +82,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): timeout = config.get(CONF_TIMEOUT) humidifier = config.get(CONF_HUMIDIFIER) - if config.get(CONF_SSL): - proto = "https" - else: - proto = "http" + protocol = "https" if config[CONF_SSL] else "http" client = VenstarColorTouch( addr=host, @@ -93,7 +90,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): user=username, password=password, pin=pin, - proto=proto, + proto=protocol, ) add_entities([VenstarThermostat(client, humidifier)], True) diff --git a/homeassistant/components/venstar/manifest.json b/homeassistant/components/venstar/manifest.json index e723e16d41d..d9de9b9d558 100644 --- a/homeassistant/components/venstar/manifest.json +++ b/homeassistant/components/venstar/manifest.json @@ -3,6 +3,5 @@ "name": "Venstar", "documentation": "https://www.home-assistant.io/integrations/venstar", "requirements": ["venstarcolortouch==0.12"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/vera/.translations/ca.json b/homeassistant/components/vera/.translations/ca.json deleted file mode 100644 index d15d12ce6c3..00000000000 --- a/homeassistant/components/vera/.translations/ca.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ja hi ha un controlador configurat.", - "cannot_connect": "No s'ha pogut connectar amb el controlador amb l'URL {base_url}" - }, - "step": { - "user": { - "data": { - "exclude": "Identificadors de dispositiu Vera a excloure de Home Assistant.", - "lights": "Identificadors de dispositiu dels commutadors Vera a tractar com a llums a Home Assistant.", - "vera_controller_url": "URL del controlador" - }, - "description": "Proporciona un URL pel controlador Vera. Hauria de quedar aix\u00ed: http://192.168.1.161:3480.", - "title": "Configuraci\u00f3 del controlador Vera" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "Identificadors de dispositiu Vera a excloure de Home Assistant.", - "lights": "Identificadors de dispositiu dels commutadors Vera a tractar com a llums a Home Assistant." - }, - "description": "Consulta la documentaci\u00f3 de Vera per veure els detalls sobre els par\u00e0metres opcionals a: https://www.home-assistant.io/integrations/vera/. Nota: tots els canvis fets aqu\u00ed necessitaran un reinici de Home Assistant. Per esborrar valors, posa-hi un espai.", - "title": "Opcions del controlador Vera" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/de.json b/homeassistant/components/vera/.translations/de.json deleted file mode 100644 index 91f61c9c2bc..00000000000 --- a/homeassistant/components/vera/.translations/de.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ein Controller ist bereits konfiguriert.", - "cannot_connect": "Konnte keine Verbindung zum Controller mit url {base_url} herstellen" - }, - "step": { - "user": { - "data": { - "exclude": "Vera-Ger\u00e4te-IDs, die vom Home Assistant ausgeschlossen werden sollen.", - "lights": "Vera Switch-Ger\u00e4te-IDs, die im Home Assistant als Lichter behandelt werden sollen.", - "vera_controller_url": "Controller-URL" - }, - "description": "Stellen Sie unten eine Vera-Controller-Url zur Verf\u00fcgung. Sie sollte wie folgt aussehen: http://192.168.1.161:3480.", - "title": "Richten Sie den Vera-Controller ein" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "Vera-Ger\u00e4te-IDs, die vom Home Assistant ausgeschlossen werden sollen." - }, - "description": "Weitere Informationen zu optionalen Parametern finden Sie in der Vera-Dokumentation: https://www.home-assistant.io/integrations/vera/. Hinweis: Alle \u00c4nderungen hier erfordern einen Neustart des Home Assistant-Servers. Geben Sie ein Leerzeichen ein, um Werte zu l\u00f6schen.", - "title": "Vera Controller Optionen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/en.json b/homeassistant/components/vera/.translations/en.json deleted file mode 100644 index 0578daa4c0b..00000000000 --- a/homeassistant/components/vera/.translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A controller is already configured.", - "cannot_connect": "Could not connect to controller with url {base_url}" - }, - "step": { - "user": { - "data": { - "exclude": "Vera device ids to exclude from Home Assistant.", - "lights": "Vera switch device ids to treat as lights in Home Assistant.", - "vera_controller_url": "Controller URL" - }, - "description": "Provide a Vera controller url below. It should look like this: http://192.168.1.161:3480.", - "title": "Setup Vera controller" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "Vera device ids to exclude from Home Assistant.", - "lights": "Vera switch device ids to treat as lights in Home Assistant." - }, - "description": "See the vera documentation for details on optional parameters: https://www.home-assistant.io/integrations/vera/. Note: Any changes here will need a restart to the home assistant server. To clear values, provide a space.", - "title": "Vera controller options" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/es.json b/homeassistant/components/vera/.translations/es.json deleted file mode 100644 index 672bcc9056e..00000000000 --- a/homeassistant/components/vera/.translations/es.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Un controlador ya est\u00e1 configurado.", - "cannot_connect": "No se pudo conectar con el controlador con url {base_url}" - }, - "step": { - "user": { - "data": { - "exclude": "Identificadores de dispositivos Vera a excluir de Home Assistant", - "lights": "Identificadores de interruptores Vera que deben ser tratados como luces en Home Assistant", - "vera_controller_url": "URL del controlador" - }, - "description": "Introduce una URL para el controlador Vera a continuaci\u00f3n. Ser\u00eda algo como: http://192.168.1.161:3480.", - "title": "Configurar el controlador Vera" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "Identificadores de dispositivos Vera a excluir de Home Assistant", - "lights": "Identificadores de interruptores Vera que deben ser tratados como luces en Home Assistant" - }, - "description": "Consulte la documentaci\u00f3n de Vera para obtener detalles sobre los par\u00e1metros opcionales: https://www.home-assistant.io/integrations/vera/. Nota: Cualquier cambio aqu\u00ed necesitar\u00e1 un reinicio del servidor de Home Assistant. Para borrar valores, introduce un espacio.", - "title": "Opciones del controlador Vera" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/ko.json b/homeassistant/components/vera/.translations/ko.json deleted file mode 100644 index cecde6b9183..00000000000 --- a/homeassistant/components/vera/.translations/ko.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\ucee8\ud2b8\ub864\ub7ec\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "cannot_connect": "URL {base_url} \uc5d0 \ucee8\ud2b8\ub864\ub7ec\ub97c \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "exclude": "Home Assistant \uc5d0\uc11c \uc81c\uc678\ud560 Vera \uae30\uae30 ID.", - "lights": "Vera \uc2a4\uc704\uce58 \uae30\uae30 ID \ub294 Home Assistant \uc5d0\uc11c \uc870\uba85\uc73c\ub85c \ucde8\uae09\ub429\ub2c8\ub2e4.", - "vera_controller_url": "\ucee8\ud2b8\ub864\ub7ec URL" - }, - "description": "\uc544\ub798\uc5d0 Vera \ucee8\ud2b8\ub864\ub7ec URL \uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694. http://192.168.1.161:3480 \uacfc \uac19\uc740 \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.", - "title": "Vera \ucee8\ud2b8\ub864\ub7ec \uc124\uc815" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "Home Assistant \uc5d0\uc11c \uc81c\uc678\ud560 Vera \uae30\uae30 ID.", - "lights": "Vera \uc2a4\uc704\uce58 \uae30\uae30 ID \ub294 Home Assistant \uc5d0\uc11c \uc870\uba85\uc73c\ub85c \ucde8\uae09\ub429\ub2c8\ub2e4." - }, - "description": "\ub9e4\uac1c \ubcc0\uc218 \uc120\ud0dd\uc0ac\ud56d\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 vera \uc124\uba85\uc11c\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694: https://www.home-assistant.io/integrations/vera/. \ucc38\uace0: \uc5ec\uae30\uc5d0\uc11c \ubcc0\uacbd\ud558\uba74 Home Assistant \uc11c\ubc84\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4. \uac12\uc744 \uc9c0\uc6b0\ub824\uba74 \uc785\ub825\ub780\uc744 \uacf5\ubc31\uc73c\ub85c \ub450\uc138\uc694.", - "title": "Vera \ucee8\ud2b8\ub864\ub7ec \uc635\uc158" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/lb.json b/homeassistant/components/vera/.translations/lb.json deleted file mode 100644 index 440c576596f..00000000000 --- a/homeassistant/components/vera/.translations/lb.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ee Kontroller ass scho konfigur\u00e9iert", - "cannot_connect": "Et konnt keng Verbindung mam Kontroller mat der URL {base_url} hiergestallt ginn" - }, - "step": { - "user": { - "data": { - "exclude": "IDs vu Vera Apparater d\u00e9i vun Home Assistant ausgeschloss solle ginn.", - "lights": "IDs vun Apparater vu Vera Schalter d\u00e9i als Luuchten am Home Assistant trait\u00e9iert ginn.", - "vera_controller_url": "Kontroller URL" - }, - "description": "Vera Kontroller URL uginn: D\u00e9i sollt sou ausgesinn:\nhttp://192.168.1.161:3480.", - "title": "Vera Kontroller ariichten" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "IDs vu Vera Apparater d\u00e9i vun Home Assistant ausgeschloss solle ginn.", - "lights": "IDs vun Apparater vu Vera Schalter d\u00e9i als Luuchten am Home Assistant trait\u00e9iert ginn." - }, - "description": "Kuck Vera Dokumentatioun fir Detailer zu den optionellle Parameter: https://www.home-assistant.io/integrations/vera/. Hiweis: All \u00c4nnerunge ginn er\u00e9ischt no engem Neistart vum Home Assistant aktiv. Fir W\u00e4rter ze l\u00e4schen, einfach een \"Leerzeichen\" am Feld uginn.", - "title": "Vera Kontroller Optiounen" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/ru.json b/homeassistant/components/vera/.translations/ru.json deleted file mode 100644 index de374358e84..00000000000 --- a/homeassistant/components/vera/.translations/ru.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 {base_url}." - }, - "step": { - "user": { - "data": { - "exclude": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 Home Assistant.", - "lights": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 Home Assistant.", - "vera_controller_url": "URL-\u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430" - }, - "description": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 URL-\u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 Vera. \u0410\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 'http://192.168.1.161:3480'.", - "title": "Vera" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 Home Assistant.", - "lights": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 Home Assistant." - }, - "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445: https://www.home-assistant.io/integrations/vera/.\n\u0414\u043b\u044f \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Home Assistant. \u0427\u0442\u043e\u0431\u044b \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0431\u0435\u043b.", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 Vera" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/.translations/zh-Hant.json b/homeassistant/components/vera/.translations/zh-Hant.json deleted file mode 100644 index 6fb71a57abe..00000000000 --- a/homeassistant/components/vera/.translations/zh-Hant.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u63a7\u5236\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u63a7\u5236\u5668 URL {base_url}" - }, - "step": { - "user": { - "data": { - "exclude": "\u5f9e Home Assistant \u6392\u9664\u7684 Vera \u8a2d\u5099 ID\u3002", - "lights": "\u65bc Home Assistant \u4e2d\u8996\u70ba\u71c8\u5149\u7684 Vera \u958b\u95dc\u8a2d\u5099 ID\u3002", - "vera_controller_url": "\u63a7\u5236\u5668 URL" - }, - "description": "\u65bc\u4e0b\u65b9\u63d0\u4f9b Vera \u63a7\u5236\u5668 URL\u3002\u683c\u5f0f\u61c9\u8a72\u70ba\uff1ahttp://192.168.1.161:3480\u3002", - "title": "\u8a2d\u5b9a Vera \u63a7\u5236\u5668" - } - }, - "title": "Vera" - }, - "options": { - "step": { - "init": { - "data": { - "exclude": "\u5f9e Home Assistant \u6392\u9664\u7684 Vera \u8a2d\u5099 ID\u3002", - "lights": "\u65bc Home Assistant \u4e2d\u8996\u70ba\u71c8\u5149\u7684 Vera \u958b\u95dc\u8a2d\u5099 ID\u3002" - }, - "description": "\u8acb\u53c3\u95b1 Vera \u6587\u4ef6\u4ee5\u7372\u5f97\u8a73\u7d30\u7684\u9078\u9805\u53c3\u6578\u8cc7\u6599\uff1ahttps://www.home-assistant.io/integrations/vera/\u3002\u8acb\u6ce8\u610f\uff1a\u4efb\u4f55\u8b8a\u66f4\u90fd\u9700\u8981\u91cd\u555f Home Assistant\u3002\u6b32\u6e05\u9664\u8a2d\u5b9a\u503c\u3001\u8acb\u8f38\u5165\u7a7a\u683c\u3002", - "title": "Vera \u63a7\u5236\u5668\u9078\u9805" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vera/__init__.py b/homeassistant/components/vera/__init__.py index 1c9d412d974..c98833a7daa 100644 --- a/homeassistant/components/vera/__init__.py +++ b/homeassistant/components/vera/__init__.py @@ -1,4 +1,5 @@ """Support for Vera devices.""" +import asyncio from collections import defaultdict import logging @@ -6,6 +7,8 @@ import pyvera as veraApi from requests.exceptions import RequestException import voluptuous as vol +from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_ARMED, ATTR_BATTERY_LEVEL, @@ -15,27 +18,24 @@ from homeassistant.const import ( CONF_LIGHTS, EVENT_HOMEASSISTANT_STOP, ) -from homeassistant.helpers import config_validation as cv, discovery +from homeassistant.core import HomeAssistant +from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.util import convert, slugify from homeassistant.util.dt import utc_from_timestamp +from .common import ControllerData, get_configured_platforms +from .config_flow import new_options +from .const import ( + ATTR_CURRENT_ENERGY_KWH, + ATTR_CURRENT_POWER_W, + CONF_CONTROLLER, + DOMAIN, + VERA_ID_FORMAT, +) + _LOGGER = logging.getLogger(__name__) -DOMAIN = "vera" - -VERA_CONTROLLER = "vera_controller" - -CONF_CONTROLLER = "vera_controller_url" - -VERA_ID_FORMAT = "{}_{}" - -ATTR_CURRENT_POWER_W = "current_power_w" -ATTR_CURRENT_ENERGY_KWH = "current_energy_kwh" - -VERA_DEVICES = "vera_devices" -VERA_SCENES = "vera_scenes" - VERA_ID_LIST_SCHEMA = vol.Schema([int]) CONFIG_SCHEMA = vol.Schema( @@ -51,42 +51,53 @@ CONFIG_SCHEMA = vol.Schema( extra=vol.ALLOW_EXTRA, ) -VERA_COMPONENTS = [ - "binary_sensor", - "sensor", - "light", - "switch", - "lock", - "climate", - "cover", - "scene", -] - - -def setup(hass, base_config): - """Set up for Vera devices.""" - - def stop_subscription(event): - """Shutdown Vera subscriptions and subscription thread on exit.""" - _LOGGER.info("Shutting down subscriptions") - hass.data[VERA_CONTROLLER].stop() +async def async_setup(hass: HomeAssistant, base_config: dict) -> bool: + """Set up for Vera controllers.""" config = base_config.get(DOMAIN) - # Get Vera specific configuration. - base_url = config.get(CONF_CONTROLLER) - light_ids = config.get(CONF_LIGHTS) - exclude_ids = config.get(CONF_EXCLUDE) + if not config: + return True + + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=config, + ) + ) + + return True + + +async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: + """Do setup of vera.""" + # Use options entered during initial config flow or provided from configuration.yml + if config_entry.data.get(CONF_LIGHTS) or config_entry.data.get(CONF_EXCLUDE): + hass.config_entries.async_update_entry( + entry=config_entry, + data=config_entry.data, + options=new_options( + config_entry.data.get(CONF_LIGHTS, []), + config_entry.data.get(CONF_EXCLUDE, []), + ), + ) + + base_url = config_entry.data[CONF_CONTROLLER] + light_ids = config_entry.options.get(CONF_LIGHTS, []) + exclude_ids = config_entry.options.get(CONF_EXCLUDE, []) # Initialize the Vera controller. - controller, _ = veraApi.init_controller(base_url) - hass.data[VERA_CONTROLLER] = controller - hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_subscription) + controller = veraApi.VeraController(base_url) + controller.start() + + hass.bus.async_listen_once( + EVENT_HOMEASSISTANT_STOP, + lambda event: hass.async_add_executor_job(controller.stop), + ) try: - all_devices = controller.get_devices() + all_devices = await hass.async_add_executor_job(controller.get_devices) - all_scenes = controller.get_scenes() + all_scenes = await hass.async_add_executor_job(controller.get_scenes) except RequestException: # There was a network related error connecting to the Vera controller. _LOGGER.exception("Error communicating with Vera API") @@ -102,15 +113,35 @@ def setup(hass, base_config): continue vera_devices[device_type].append(device) - hass.data[VERA_DEVICES] = vera_devices vera_scenes = [] for scene in all_scenes: vera_scenes.append(scene) - hass.data[VERA_SCENES] = vera_scenes - for component in VERA_COMPONENTS: - discovery.load_platform(hass, component, DOMAIN, {}, base_config) + controller_data = ControllerData( + controller=controller, devices=vera_devices, scenes=vera_scenes + ) + + hass.data[DOMAIN] = controller_data + + # Forward the config data to the necessary platforms. + for platform in get_configured_platforms(controller_data): + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(config_entry, platform) + ) + + return True + + +async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: + """Unload Withings config entry.""" + controller_data = hass.data[DOMAIN] + + tasks = [ + hass.config_entries.async_forward_entry_unload(config_entry, platform) + for platform in get_configured_platforms(controller_data) + ] + await asyncio.gather(*tasks) return True diff --git a/homeassistant/components/vera/binary_sensor.py b/homeassistant/components/vera/binary_sensor.py index 061d2c5c99a..621dc09930d 100644 --- a/homeassistant/components/vera/binary_sensor.py +++ b/homeassistant/components/vera/binary_sensor.py @@ -1,21 +1,34 @@ """Support for Vera binary sensors.""" import logging +from typing import Callable, List -from homeassistant.components.binary_sensor import ENTITY_ID_FORMAT, BinarySensorDevice +from homeassistant.components.binary_sensor import ( + DOMAIN as PLATFORM_DOMAIN, + ENTITY_ID_FORMAT, + BinarySensorDevice, +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Perform the setup for Vera controller devices.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraBinarySensor(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["binary_sensor"] - ], - True, + VeraBinarySensor(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/climate.py b/homeassistant/components/vera/climate.py index 60e73d48978..520c3b516df 100644 --- a/homeassistant/components/vera/climate.py +++ b/homeassistant/components/vera/climate.py @@ -1,7 +1,12 @@ """Support for Vera thermostats.""" import logging +from typing import Callable, List -from homeassistant.components.climate import ENTITY_ID_FORMAT, ClimateDevice +from homeassistant.components.climate import ( + DOMAIN as PLATFORM_DOMAIN, + ENTITY_ID_FORMAT, + ClimateDevice, +) from homeassistant.components.climate.const import ( FAN_AUTO, FAN_ON, @@ -12,10 +17,14 @@ from homeassistant.components.climate.const import ( SUPPORT_FAN_MODE, SUPPORT_TARGET_TEMPERATURE, ) +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity from homeassistant.util import convert -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) @@ -25,14 +34,18 @@ SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE SUPPORT_HVAC = [HVAC_MODE_COOL, HVAC_MODE_HEAT, HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF] -def setup_platform(hass, config, add_entities_callback, discovery_info=None): - """Set up of Vera thermostats.""" - add_entities_callback( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraThermostat(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["climate"] - ], - True, + VeraThermostat(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/common.py b/homeassistant/components/vera/common.py new file mode 100644 index 00000000000..cdfdff404ec --- /dev/null +++ b/homeassistant/components/vera/common.py @@ -0,0 +1,29 @@ +"""Common vera code.""" +import logging +from typing import DefaultDict, List, NamedTuple, Set + +import pyvera as pv + +from homeassistant.components.scene import DOMAIN as SCENE_DOMAIN + +_LOGGER = logging.getLogger(__name__) + + +class ControllerData(NamedTuple): + """Controller data.""" + + controller: pv.VeraController + devices: DefaultDict[str, List[pv.VeraDevice]] + scenes: List[pv.VeraScene] + + +def get_configured_platforms(controller_data: ControllerData) -> Set[str]: + """Get configured platforms for a controller.""" + platforms = [] + for platform in controller_data.devices: + platforms.append(platform) + + if controller_data.scenes: + platforms.append(SCENE_DOMAIN) + + return set(platforms) diff --git a/homeassistant/components/vera/config_flow.py b/homeassistant/components/vera/config_flow.py new file mode 100644 index 00000000000..3d2b30f1079 --- /dev/null +++ b/homeassistant/components/vera/config_flow.py @@ -0,0 +1,130 @@ +"""Config flow for Vera.""" +import logging +import re +from typing import List, cast + +import pyvera as pv +from requests.exceptions import RequestException +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.const import CONF_EXCLUDE, CONF_LIGHTS, CONF_SOURCE +from homeassistant.core import callback + +from .const import CONF_CONTROLLER, DOMAIN + +LIST_REGEX = re.compile("[^0-9]+") +_LOGGER = logging.getLogger(__name__) + + +def str_to_int_list(data: str) -> List[str]: + """Convert a string to an int list.""" + if isinstance(str, list): + return cast(List[str], data) + + return [s for s in LIST_REGEX.split(data) if len(s) > 0] + + +def int_list_to_str(data: List[str]) -> str: + """Convert an int list to a string.""" + return " ".join([str(i) for i in data]) + + +def new_options(lights: List[str], exclude: List[str]) -> dict: + """Create a standard options object.""" + return {CONF_LIGHTS: lights, CONF_EXCLUDE: exclude} + + +def options_schema(options: dict = None) -> dict: + """Return options schema.""" + options = options or {} + return { + vol.Optional( + CONF_LIGHTS, default=int_list_to_str(options.get(CONF_LIGHTS, [])), + ): str, + vol.Optional( + CONF_EXCLUDE, default=int_list_to_str(options.get(CONF_EXCLUDE, [])), + ): str, + } + + +def options_data(user_input: dict) -> dict: + """Return options dict.""" + return new_options( + str_to_int_list(user_input.get(CONF_LIGHTS, "")), + str_to_int_list(user_input.get(CONF_EXCLUDE, "")), + ) + + +class OptionsFlowHandler(config_entries.OptionsFlow): + """Options for the component.""" + + def __init__(self, config_entry: config_entries.ConfigEntry): + """Init object.""" + self.config_entry = config_entry + + async def async_step_init(self, user_input=None): + """Manage the options.""" + if user_input is not None: + return self.async_create_entry(title="", data=options_data(user_input),) + + return self.async_show_form( + step_id="init", + data_schema=vol.Schema(options_schema(self.config_entry.options)), + ) + + +class VeraFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): + """Vera config flow.""" + + @staticmethod + @callback + def async_get_options_flow(config_entry) -> OptionsFlowHandler: + """Get the options flow.""" + return OptionsFlowHandler(config_entry) + + async def async_step_user(self, user_input: dict = None): + """Handle user initiated flow.""" + if self.hass.config_entries.async_entries(DOMAIN): + return self.async_abort(reason="already_configured") + + if user_input is not None: + return await self.async_step_finish( + { + **user_input, + **options_data(user_input), + **{CONF_SOURCE: config_entries.SOURCE_USER}, + } + ) + + return self.async_show_form( + step_id="user", + data_schema=vol.Schema( + {**{vol.Required(CONF_CONTROLLER): str}, **options_schema()} + ), + ) + + async def async_step_import(self, config: dict): + """Handle a flow initialized by import.""" + return await self.async_step_finish( + {**config, **{CONF_SOURCE: config_entries.SOURCE_IMPORT}} + ) + + async def async_step_finish(self, config: dict): + """Validate and create config entry.""" + base_url = config[CONF_CONTROLLER] = config[CONF_CONTROLLER].rstrip("/") + controller = pv.VeraController(base_url) + + # Verify the controller is online and get the serial number. + try: + await self.hass.async_add_executor_job(controller.refresh_data) + except RequestException: + _LOGGER.error("Failed to connect to vera controller %s", base_url) + return self.async_abort( + reason="cannot_connect", description_placeholders={"base_url": base_url} + ) + + await self.async_set_unique_id(controller.serial_number) + self._abort_if_unique_id_configured(config) + + return self.async_create_entry(title=base_url, data=config) diff --git a/homeassistant/components/vera/const.py b/homeassistant/components/vera/const.py new file mode 100644 index 00000000000..c4f1d0efa3a --- /dev/null +++ b/homeassistant/components/vera/const.py @@ -0,0 +1,11 @@ +"""Vera constants.""" +DOMAIN = "vera" + +CONF_CONTROLLER = "vera_controller_url" + +VERA_ID_FORMAT = "{}_{}" + +ATTR_CURRENT_POWER_W = "current_power_w" +ATTR_CURRENT_ENERGY_KWH = "current_energy_kwh" + +CONTROLLER_DATAS = "controller_datas" diff --git a/homeassistant/components/vera/cover.py b/homeassistant/components/vera/cover.py index b90dd8a0531..0d0edb841c1 100644 --- a/homeassistant/components/vera/cover.py +++ b/homeassistant/components/vera/cover.py @@ -1,21 +1,35 @@ """Support for Vera cover - curtains, rollershutters etc.""" import logging +from typing import Callable, List -from homeassistant.components.cover import ATTR_POSITION, ENTITY_ID_FORMAT, CoverDevice +from homeassistant.components.cover import ( + ATTR_POSITION, + DOMAIN as PLATFORM_DOMAIN, + ENTITY_ID_FORMAT, + CoverDevice, +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Vera covers.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraCover(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["cover"] - ], - True, + VeraCover(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/light.py b/homeassistant/components/vera/light.py index fee99235681..877fdf51f0a 100644 --- a/homeassistant/components/vera/light.py +++ b/homeassistant/components/vera/light.py @@ -1,29 +1,39 @@ """Support for Vera lights.""" import logging +from typing import Callable, List from homeassistant.components.light import ( ATTR_BRIGHTNESS, ATTR_HS_COLOR, + DOMAIN as PLATFORM_DOMAIN, ENTITY_ID_FORMAT, SUPPORT_BRIGHTNESS, SUPPORT_COLOR, Light, ) +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity import homeassistant.util.color as color_util -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Vera lights.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraLight(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["light"] - ], - True, + VeraLight(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/lock.py b/homeassistant/components/vera/lock.py index 23b62bb0331..da3c432a6af 100644 --- a/homeassistant/components/vera/lock.py +++ b/homeassistant/components/vera/lock.py @@ -1,10 +1,19 @@ """Support for Vera locks.""" import logging +from typing import Callable, List -from homeassistant.components.lock import ENTITY_ID_FORMAT, LockDevice +from homeassistant.components.lock import ( + DOMAIN as PLATFORM_DOMAIN, + ENTITY_ID_FORMAT, + LockDevice, +) +from homeassistant.config_entries import ConfigEntry from homeassistant.const import STATE_LOCKED, STATE_UNLOCKED +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) @@ -12,14 +21,18 @@ ATTR_LAST_USER_NAME = "changed_by_name" ATTR_LOW_BATTERY = "low_battery" -def setup_platform(hass, config, add_entities, discovery_info=None): - """Find and return Vera locks.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraLock(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["lock"] - ], - True, + VeraLock(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/manifest.json b/homeassistant/components/vera/manifest.json index 63102c29687..22a5da19d8c 100644 --- a/homeassistant/components/vera/manifest.json +++ b/homeassistant/components/vera/manifest.json @@ -1,8 +1,8 @@ { "domain": "vera", "name": "Vera", + "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/vera", "requirements": ["pyvera==0.3.7"], - "dependencies": [], - "codeowners": [] + "codeowners": ["@vangorra"] } diff --git a/homeassistant/components/vera/scene.py b/homeassistant/components/vera/scene.py index af5266ed4b3..2f3069f5332 100644 --- a/homeassistant/components/vera/scene.py +++ b/homeassistant/components/vera/scene.py @@ -1,22 +1,30 @@ """Support for Vera scenes.""" import logging +from typing import Any, Callable, List from homeassistant.components.scene import Scene +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity from homeassistant.util import slugify -from . import VERA_CONTROLLER, VERA_ID_FORMAT, VERA_SCENES +from .const import DOMAIN, VERA_ID_FORMAT _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Vera scenes.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraScene(scene, hass.data[VERA_CONTROLLER]) - for scene in hass.data[VERA_SCENES] - ], - True, + VeraScene(device, controller_data.controller) + for device in controller_data.scenes + ] ) @@ -38,7 +46,7 @@ class VeraScene(Scene): """Update the scene status.""" self.vera_scene.refresh() - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self.vera_scene.activate() diff --git a/homeassistant/components/vera/sensor.py b/homeassistant/components/vera/sensor.py index 9ac0a36ff9c..60ebeeb1566 100644 --- a/homeassistant/components/vera/sensor.py +++ b/homeassistant/components/vera/sensor.py @@ -1,29 +1,37 @@ """Support for Vera sensors.""" from datetime import timedelta import logging +from typing import Callable, List import pyvera as veraApi -from homeassistant.components.sensor import ENTITY_ID_FORMAT +from homeassistant.components.sensor import DOMAIN as PLATFORM_DOMAIN, ENTITY_ID_FORMAT +from homeassistant.config_entries import ConfigEntry from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE +from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import Entity from homeassistant.util import convert -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) SCAN_INTERVAL = timedelta(seconds=5) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Vera controller devices.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraSensor(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["sensor"] - ], - True, + VeraSensor(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/strings.json b/homeassistant/components/vera/strings.json new file mode 100644 index 00000000000..7b294eddbb9 --- /dev/null +++ b/homeassistant/components/vera/strings.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "A controller is already configured.", + "cannot_connect": "Could not connect to controller with url {base_url}" + }, + "step": { + "user": { + "title": "Setup Vera controller", + "description": "Provide a Vera controller url below. It should look like this: http://192.168.1.161:3480.", + "data": { + "vera_controller_url": "Controller URL", + "lights": "Vera switch device ids to treat as lights in Home Assistant.", + "exclude": "Vera device ids to exclude from Home Assistant." + } + } + } + }, + "options": { + "step": { + "init": { + "title": "Vera controller options", + "description": "See the vera documentation for details on optional parameters: https://www.home-assistant.io/integrations/vera/. Note: Any changes here will need a restart to the home assistant server. To clear values, provide a space.", + "data": { + "lights": "Vera switch device ids to treat as lights in Home Assistant.", + "exclude": "Vera device ids to exclude from Home Assistant." + } + } + } + } +} diff --git a/homeassistant/components/vera/switch.py b/homeassistant/components/vera/switch.py index ab3c3e6adb9..a7ae6d45573 100644 --- a/homeassistant/components/vera/switch.py +++ b/homeassistant/components/vera/switch.py @@ -1,22 +1,35 @@ """Support for Vera switches.""" import logging +from typing import Callable, List -from homeassistant.components.switch import ENTITY_ID_FORMAT, SwitchDevice +from homeassistant.components.switch import ( + DOMAIN as PLATFORM_DOMAIN, + ENTITY_ID_FORMAT, + SwitchDevice, +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import Entity from homeassistant.util import convert -from . import VERA_CONTROLLER, VERA_DEVICES, VeraDevice +from . import VeraDevice +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Vera switches.""" - add_entities( +async def async_setup_entry( + hass: HomeAssistant, + entry: ConfigEntry, + async_add_entities: Callable[[List[Entity], bool], None], +) -> None: + """Set up the sensor config entry.""" + controller_data = hass.data[DOMAIN] + async_add_entities( [ - VeraSwitch(device, hass.data[VERA_CONTROLLER]) - for device in hass.data[VERA_DEVICES]["switch"] - ], - True, + VeraSwitch(device, controller_data.controller) + for device in controller_data.devices.get(PLATFORM_DOMAIN) + ] ) diff --git a/homeassistant/components/vera/translations/ca.json b/homeassistant/components/vera/translations/ca.json new file mode 100644 index 00000000000..ff972c70530 --- /dev/null +++ b/homeassistant/components/vera/translations/ca.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ja hi ha un controlador configurat.", + "cannot_connect": "No s'ha pogut connectar amb el controlador amb l'URL {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "Identificadors de dispositiu Vera a excloure de Home Assistant.", + "lights": "Identificadors de dispositiu dels commutadors Vera a tractar com a llums a Home Assistant.", + "vera_controller_url": "URL del controlador" + }, + "description": "Proporciona un URL pel controlador Vera. Hauria de quedar aix\u00ed: http://192.168.1.161:3480.", + "title": "Configuraci\u00f3 del controlador Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Identificadors de dispositiu Vera a excloure de Home Assistant.", + "lights": "Identificadors de dispositiu dels commutadors Vera a tractar com a llums a Home Assistant." + }, + "description": "Consulta la documentaci\u00f3 de Vera per veure els detalls sobre els par\u00e0metres opcionals a: https://www.home-assistant.io/integrations/vera/. Nota: tots els canvis fets aqu\u00ed necessitaran un reinici de Home Assistant. Per esborrar valors, posa-hi un espai.", + "title": "Opcions del controlador Vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/de.json b/homeassistant/components/vera/translations/de.json new file mode 100644 index 00000000000..f754ed737a1 --- /dev/null +++ b/homeassistant/components/vera/translations/de.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ein Controller ist bereits konfiguriert.", + "cannot_connect": "Konnte keine Verbindung zum Controller mit url {base_url} herstellen" + }, + "step": { + "user": { + "data": { + "exclude": "Vera-Ger\u00e4te-IDs, die vom Home Assistant ausgeschlossen werden sollen.", + "lights": "Vera Switch-Ger\u00e4te-IDs, die im Home Assistant als Lichter behandelt werden sollen.", + "vera_controller_url": "Controller-URL" + }, + "description": "Stellen Sie unten eine Vera-Controller-Url zur Verf\u00fcgung. Sie sollte wie folgt aussehen: http://192.168.1.161:3480.", + "title": "Richten Sie den Vera-Controller ein" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Vera-Ger\u00e4te-IDs, die vom Home Assistant ausgeschlossen werden sollen.", + "lights": "Vera Switch-Ger\u00e4te-IDs, die im Home Assistant als Lichter behandelt werden sollen." + }, + "description": "Weitere Informationen zu optionalen Parametern finden Sie in der Vera-Dokumentation: https://www.home-assistant.io/integrations/vera/. Hinweis: Alle \u00c4nderungen hier erfordern einen Neustart des Home Assistant-Servers. Geben Sie ein Leerzeichen ein, um Werte zu l\u00f6schen.", + "title": "Vera Controller Optionen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/en.json b/homeassistant/components/vera/translations/en.json new file mode 100644 index 00000000000..18b8c64f52a --- /dev/null +++ b/homeassistant/components/vera/translations/en.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "A controller is already configured.", + "cannot_connect": "Could not connect to controller with url {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "Vera device ids to exclude from Home Assistant.", + "lights": "Vera switch device ids to treat as lights in Home Assistant.", + "vera_controller_url": "Controller URL" + }, + "description": "Provide a Vera controller url below. It should look like this: http://192.168.1.161:3480.", + "title": "Setup Vera controller" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Vera device ids to exclude from Home Assistant.", + "lights": "Vera switch device ids to treat as lights in Home Assistant." + }, + "description": "See the vera documentation for details on optional parameters: https://www.home-assistant.io/integrations/vera/. Note: Any changes here will need a restart to the home assistant server. To clear values, provide a space.", + "title": "Vera controller options" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/es.json b/homeassistant/components/vera/translations/es.json new file mode 100644 index 00000000000..8acd0d0f611 --- /dev/null +++ b/homeassistant/components/vera/translations/es.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Un controlador ya est\u00e1 configurado.", + "cannot_connect": "No se pudo conectar con el controlador con url {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "Identificadores de dispositivos Vera a excluir de Home Assistant", + "lights": "Identificadores de interruptores Vera que deben ser tratados como luces en Home Assistant", + "vera_controller_url": "URL del controlador" + }, + "description": "Introduce una URL para el controlador Vera a continuaci\u00f3n. Ser\u00eda algo como: http://192.168.1.161:3480.", + "title": "Configurar el controlador Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Identificadores de dispositivos Vera a excluir de Home Assistant", + "lights": "Identificadores de interruptores Vera que deben ser tratados como luces en Home Assistant" + }, + "description": "Consulte la documentaci\u00f3n de Vera para obtener detalles sobre los par\u00e1metros opcionales: https://www.home-assistant.io/integrations/vera/. Nota: Cualquier cambio aqu\u00ed necesitar\u00e1 un reinicio del servidor de Home Assistant. Para borrar valores, introduce un espacio.", + "title": "Opciones del controlador Vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/fr.json b/homeassistant/components/vera/translations/fr.json new file mode 100644 index 00000000000..4d1b5a7eb6d --- /dev/null +++ b/homeassistant/components/vera/translations/fr.json @@ -0,0 +1,8 @@ +{ + "config": { + "abort": { + "already_configured": "Un contr\u00f4leur est d\u00e9j\u00e0 configur\u00e9.", + "cannot_connect": "Impossible de se connecter au contr\u00f4leur avec l'url {base_url}" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/hi.json b/homeassistant/components/vera/translations/hi.json new file mode 100644 index 00000000000..0a9092c288b --- /dev/null +++ b/homeassistant/components/vera/translations/hi.json @@ -0,0 +1,9 @@ +{ + "options": { + "step": { + "init": { + "description": "\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915 \u092e\u093e\u092a\u0926\u0902\u0921\u094b\u0902 \u0915\u0947 \u0935\u093f\u0935\u0930\u0923 \u0915\u0947 \u0932\u093f\u090f \u0935\u0947\u0930\u093e \u092a\u094d\u0930\u0932\u0947\u0916\u0928 \u0926\u0947\u0916\u0947\u0902: https://www.home-assistant.io/integrations/vera/\u0964 \u0928\u094b\u091f: \u092f\u0939\u093e\u0902 \u0915\u093f\u0938\u0940 \u092d\u0940 \u092c\u0926\u0932\u093e\u0935 \u0915\u0947 \u0932\u093f\u090f \u0939\u094b\u092e \u0905\u0938\u093f\u0938\u094d\u091f\u0947\u0902\u091f \u0938\u0930\u094d\u0935\u0930 \u0915\u094b \u0930\u093f\u0938\u094d\u091f\u093e\u0930\u094d\u091f \u0915\u0930\u0928\u093e \u0939\u094b\u0917\u093e\u0964 \u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u0915\u094b \u0938\u094d\u092a\u0937\u094d\u091f \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u090f\u0915 \u0938\u094d\u0925\u093e\u0928 \u092a\u094d\u0930\u0926\u093e\u0928 \u0915\u0930\u0947\u0902\u0964" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/it.json b/homeassistant/components/vera/translations/it.json new file mode 100644 index 00000000000..875e32fbb0c --- /dev/null +++ b/homeassistant/components/vera/translations/it.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Un controller \u00e8 gi\u00e0 configurato.", + "cannot_connect": "Impossibile connettersi al controllore con l'url {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "ID dispositivo Vera da escludere da Home Assistant.", + "lights": "Gli ID dei dispositivi switch Vera da trattare come luci in Home Assistant.", + "vera_controller_url": "URL del controller" + }, + "description": "Fornire un url di controllo Vera di seguito. Dovrebbe avere questo aspetto: http://192.168.1.161:3480.", + "title": "Configurazione controller Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "ID dispositivo Vera da escludere da Home Assistant.", + "lights": "Gli ID dei dispositivi switch Vera da trattare come luci in Home Assistant." + }, + "description": "Consultare la documentazione di vera per i dettagli sui parametri opzionali: https://www.home-assistant.io/integrations/vera/. Nota: qualsiasi modifica qui effettuata necessita del riavvio del server di Home Assistant. Per cancellare i valori, inserire uno spazio.", + "title": "Opzioni controller Vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/ko.json b/homeassistant/components/vera/translations/ko.json new file mode 100644 index 00000000000..6572570916b --- /dev/null +++ b/homeassistant/components/vera/translations/ko.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\ucee8\ud2b8\ub864\ub7ec\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "cannot_connect": "URL {base_url} \uc5d0 \ucee8\ud2b8\ub864\ub7ec\ub97c \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "exclude": "Home Assistant \uc5d0\uc11c \uc81c\uc678\ud560 Vera \uae30\uae30 ID.", + "lights": "Vera \uc2a4\uc704\uce58 \uae30\uae30 ID \ub294 Home Assistant \uc5d0\uc11c \uc870\uba85\uc73c\ub85c \ucde8\uae09\ub429\ub2c8\ub2e4.", + "vera_controller_url": "\ucee8\ud2b8\ub864\ub7ec URL" + }, + "description": "\uc544\ub798\uc5d0 Vera \ucee8\ud2b8\ub864\ub7ec URL \uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694. http://192.168.1.161:3480 \uacfc \uac19\uc740 \ud615\uc2dd\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.", + "title": "Vera \ucee8\ud2b8\ub864\ub7ec \uc124\uc815" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Home Assistant \uc5d0\uc11c \uc81c\uc678\ud560 Vera \uae30\uae30 ID.", + "lights": "Vera \uc2a4\uc704\uce58 \uae30\uae30 ID \ub294 Home Assistant \uc5d0\uc11c \uc870\uba85\uc73c\ub85c \ucde8\uae09\ub429\ub2c8\ub2e4." + }, + "description": "\ub9e4\uac1c \ubcc0\uc218 \uc120\ud0dd\uc0ac\ud56d\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 vera \uc124\uba85\uc11c\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694: https://www.home-assistant.io/integrations/vera/. \ucc38\uace0: \uc5ec\uae30\uc5d0\uc11c \ubcc0\uacbd\ud558\uba74 Home Assistant \uc11c\ubc84\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud574\uc57c \ud569\ub2c8\ub2e4. \uac12\uc744 \uc9c0\uc6b0\ub824\uba74 \uc785\ub825\ub780\uc744 \uacf5\ubc31\uc73c\ub85c \ub450\uc138\uc694.", + "title": "Vera \ucee8\ud2b8\ub864\ub7ec \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/lb.json b/homeassistant/components/vera/translations/lb.json new file mode 100644 index 00000000000..c78ab909b96 --- /dev/null +++ b/homeassistant/components/vera/translations/lb.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ee Kontroller ass scho konfigur\u00e9iert", + "cannot_connect": "Et konnt keng Verbindung mam Kontroller mat der URL {base_url} hiergestallt ginn" + }, + "step": { + "user": { + "data": { + "exclude": "IDs vu Vera Apparater d\u00e9i vun Home Assistant ausgeschloss solle ginn.", + "lights": "IDs vun Apparater vu Vera Schalter d\u00e9i als Luuchten am Home Assistant trait\u00e9iert ginn.", + "vera_controller_url": "Kontroller URL" + }, + "description": "Vera Kontroller URL uginn: D\u00e9i sollt sou ausgesinn:\nhttp://192.168.1.161:3480.", + "title": "Vera Kontroller ariichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "IDs vu Vera Apparater d\u00e9i vun Home Assistant ausgeschloss solle ginn.", + "lights": "IDs vun Apparater vu Vera Schalter d\u00e9i als Luuchten am Home Assistant trait\u00e9iert ginn." + }, + "description": "Kuck Vera Dokumentatioun fir Detailer zu den optionellle Parameter: https://www.home-assistant.io/integrations/vera/. Hiweis: All \u00c4nnerunge ginn er\u00e9ischt no engem Neistart vum Home Assistant aktiv. Fir W\u00e4rter ze l\u00e4schen, einfach een \"Leerzeichen\" am Feld uginn.", + "title": "Vera Kontroller Optiounen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/no.json b/homeassistant/components/vera/translations/no.json new file mode 100644 index 00000000000..dbc6bca1365 --- /dev/null +++ b/homeassistant/components/vera/translations/no.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "En kontroller er allerede konfigurert.", + "cannot_connect": "Kunne ikke koble til kontrolleren med url {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "Vera-enhets-ID-er som skal ekskluderes fra Home Assistant.", + "lights": "Vera bytter enhets-ID-er for \u00e5 behandle som lys i Home Assistant.", + "vera_controller_url": "URL-adresse for kontroller" + }, + "description": "Oppgi en Vera-kontroller-url nedenfor. Det skal se slik ut: http://192.168.1.161:3480.", + "title": "Oppsett Vera-kontroller" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Vera-enhets-ID-er som skal ekskluderes fra Home Assistant.", + "lights": "Vera bytter enhets-ID-er for \u00e5 behandle som lys i Home Assistant." + }, + "description": "Se vera dokumentasjonen for detaljer om valgfrie parametere: https://www.home-assistant.io/integrations/vera/. Merk: Eventuelle endringer her vil trenge en omstart til home assistant-serveren. For \u00e5 fjerne verdier, gi et rom.", + "title": "Alternativer for Vera-kontroller" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/pl.json b/homeassistant/components/vera/translations/pl.json new file mode 100644 index 00000000000..baafc324bea --- /dev/null +++ b/homeassistant/components/vera/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Kontroler jest ju\u017c skonfigurowany.", + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 z kontrolerem za pomoc\u0105 adresu {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "Identyfikatory urz\u0105dze\u0144 Vera do wykluczenia z Home Assistant.", + "lights": "Identyfikatory prze\u0142\u0105cznik\u00f3w Vera, kt\u00f3re maj\u0105 by\u0107 traktowane jako \u015bwiat\u0142a w Home Assistant.", + "vera_controller_url": "Adres URL kontrolera" + }, + "description": "Podaj adres URL kontrolera Vera. Powinien on wygl\u0105da\u0107 tak: http://192.168.1.161:3480.", + "title": "Skonfiguruj kontroler Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Identyfikatory urz\u0105dze\u0144 Vera do wykluczenia z Home Assistant.", + "lights": "Identyfikatory prze\u0142\u0105cznik\u00f3w Vera, kt\u00f3re maj\u0105 by\u0107 traktowane jako \u015bwiat\u0142a w Home Assistant." + }, + "description": "Szczeg\u00f3\u0142owe informacje na temat parametr\u00f3w opcjonalnych mo\u017cna znale\u017a\u0107 w dokumentacji Vera: https://www.home-assistant.io/integrations/vera/. Uwaga: Wszelkie zmiany tutaj b\u0119d\u0105 wymaga\u0142y ponownego uruchomienia serwera Home Assistant. Aby wyczy\u015bci\u0107 warto\u015bci, wpisz spacj\u0119.", + "title": "Opcje kontrolera Vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/ru.json b/homeassistant/components/vera/translations/ru.json new file mode 100644 index 00000000000..99095dffdfc --- /dev/null +++ b/homeassistant/components/vera/translations/ru.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 {base_url}." + }, + "step": { + "user": { + "data": { + "exclude": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 Home Assistant.", + "lights": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 Home Assistant.", + "vera_controller_url": "URL-\u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430" + }, + "description": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 URL-\u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 Vera. \u0410\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 'http://192.168.1.161:3480'.", + "title": "Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 Home Assistant.", + "lights": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Vera \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 Home Assistant." + }, + "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445: https://www.home-assistant.io/integrations/vera/.\n\u0414\u043b\u044f \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Home Assistant. \u0427\u0442\u043e\u0431\u044b \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0431\u0435\u043b.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 Vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/sl.json b/homeassistant/components/vera/translations/sl.json new file mode 100644 index 00000000000..01e5234bc78 --- /dev/null +++ b/homeassistant/components/vera/translations/sl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Krmilnik je \u017ee konfiguriran.", + "cannot_connect": "Ni mogo\u010de vzpostaviti povezave s krmilnikom z URL-jem {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "ID-ji naprav Vera, ki jih \u017eelite izklju\u010diti iz programa Home Assistant.", + "lights": "ID-ji stikal Vera, ki naj jih Home Assistant tretira kot lu\u010di.", + "vera_controller_url": "URL krmilnika" + }, + "description": "Spodaj navedite URL krmilnika Vera. Izgledati bi moral takole: http://192.168.1.161:3480.", + "title": "Nastavite krmilnik Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "ID-ji naprav Vera, ki jih \u017eelite izklju\u010diti iz programa Home Assistant.", + "lights": "ID-ji stikal Vera, ki naj jih Home Assistant tretira kot lu\u010di." + }, + "description": "Podrobnosti o izbirnih parametrih najdete v vera dokumentaciji: https://www.home-assistant.io/integrations/vera/. Opomba: Za vse spremembe tukaj bo potreben ponovni zagon stre\u017enika Home Assistant. \u010ce \u017eelite po\u010distiti vrednosti, vnesite presledek.", + "title": "Mo\u017enosti krmilnika vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/zh-Hant.json b/homeassistant/components/vera/translations/zh-Hant.json new file mode 100644 index 00000000000..0d4b067c5ae --- /dev/null +++ b/homeassistant/components/vera/translations/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u63a7\u5236\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002", + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u63a7\u5236\u5668 URL {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "\u5f9e Home Assistant \u6392\u9664\u7684 Vera \u8a2d\u5099 ID\u3002", + "lights": "\u65bc Home Assistant \u4e2d\u8996\u70ba\u71c8\u5149\u7684 Vera \u958b\u95dc\u8a2d\u5099 ID\u3002", + "vera_controller_url": "\u63a7\u5236\u5668 URL" + }, + "description": "\u65bc\u4e0b\u65b9\u63d0\u4f9b Vera \u63a7\u5236\u5668 URL\u3002\u683c\u5f0f\u61c9\u8a72\u70ba\uff1ahttp://192.168.1.161:3480\u3002", + "title": "\u8a2d\u5b9a Vera \u63a7\u5236\u5668" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "\u5f9e Home Assistant \u6392\u9664\u7684 Vera \u8a2d\u5099 ID\u3002", + "lights": "\u65bc Home Assistant \u4e2d\u8996\u70ba\u71c8\u5149\u7684 Vera \u958b\u95dc\u8a2d\u5099 ID\u3002" + }, + "description": "\u8acb\u53c3\u95b1 Vera \u6587\u4ef6\u4ee5\u7372\u5f97\u8a73\u7d30\u7684\u9078\u9805\u53c3\u6578\u8cc7\u6599\uff1ahttps://www.home-assistant.io/integrations/vera/\u3002\u8acb\u6ce8\u610f\uff1a\u4efb\u4f55\u8b8a\u66f4\u90fd\u9700\u8981\u91cd\u555f Home Assistant\u3002\u6b32\u6e05\u9664\u8a2d\u5b9a\u503c\u3001\u8acb\u8f38\u5165\u7a7a\u683c\u3002", + "title": "Vera \u63a7\u5236\u5668\u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/verisure/__init__.py b/homeassistant/components/verisure/__init__.py index 32735bf06c1..757e299792a 100644 --- a/homeassistant/components/verisure/__init__.py +++ b/homeassistant/components/verisure/__init__.py @@ -75,7 +75,7 @@ DEVICE_SERIAL_SCHEMA = vol.Schema({vol.Required(ATTR_DEVICE_SERIAL): cv.string}) def setup(hass, config): """Set up the Verisure component.""" - global HUB + global HUB # pylint: disable=global-statement HUB = VerisureHub(config[DOMAIN]) HUB.update_overview = Throttle(config[DOMAIN][CONF_SCAN_INTERVAL])( HUB.update_overview diff --git a/homeassistant/components/verisure/manifest.json b/homeassistant/components/verisure/manifest.json index 3e0073c1770..13c29364975 100644 --- a/homeassistant/components/verisure/manifest.json +++ b/homeassistant/components/verisure/manifest.json @@ -3,6 +3,5 @@ "name": "Verisure", "documentation": "https://www.home-assistant.io/integrations/verisure", "requirements": ["jsonpath==0.82", "vsure==1.5.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/verisure/services.yaml b/homeassistant/components/verisure/services.yaml index 405f0c5d57d..885b8597549 100644 --- a/homeassistant/components/verisure/services.yaml +++ b/homeassistant/components/verisure/services.yaml @@ -1,5 +1,6 @@ capture_smartcam: description: Capture a new image from a smartcam. fields: - device_serial: {description: The serial number of the smartcam you want to capture - an image from., example: 2DEU AT5Z} + device_serial: + description: The serial number of the smartcam you want to capture an image from. + example: 2DEU AT5Z diff --git a/homeassistant/components/versasense/manifest.json b/homeassistant/components/versasense/manifest.json index 75614336c3d..bd409b5977f 100644 --- a/homeassistant/components/versasense/manifest.json +++ b/homeassistant/components/versasense/manifest.json @@ -2,7 +2,6 @@ "domain": "versasense", "name": "VersaSense", "documentation": "https://www.home-assistant.io/integrations/versasense", - "dependencies": [], "codeowners": ["@flamm3blemuff1n"], "requirements": ["pyversasense==0.0.6"] } diff --git a/homeassistant/components/version/manifest.json b/homeassistant/components/version/manifest.json index 8d79234375c..ed3158040d5 100644 --- a/homeassistant/components/version/manifest.json +++ b/homeassistant/components/version/manifest.json @@ -3,7 +3,6 @@ "name": "Version", "documentation": "https://www.home-assistant.io/integrations/version", "requirements": ["pyhaversion==3.3.0"], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/vesync/.translations/bg.json b/homeassistant/components/vesync/.translations/bg.json deleted file mode 100644 index a12436936e6..00000000000 --- a/homeassistant/components/vesync/.translations/bg.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Vesync" - }, - "error": { - "invalid_login": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430" - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u0430", - "username": "E-mail \u0430\u0434\u0440\u0435\u0441" - }, - "title": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/ca.json b/homeassistant/components/vesync/.translations/ca.json deleted file mode 100644 index 0c253fd4812..00000000000 --- a/homeassistant/components/vesync/.translations/ca.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nom\u00e9s es permet una \u00fanica inst\u00e0ncia de VeSync" - }, - "error": { - "invalid_login": "Nom d'usuari o contrasenya incorrectes" - }, - "step": { - "user": { - "data": { - "password": "Contrasenya", - "username": "Correu electr\u00f2nic" - }, - "title": "Introdueix el nom d\u2019usuari i contrasenya" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/da.json b/homeassistant/components/vesync/.translations/da.json deleted file mode 100644 index f2be5792f33..00000000000 --- a/homeassistant/components/vesync/.translations/da.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Kun en Vesync-forekomst er tilladt" - }, - "error": { - "invalid_login": "Ugyldigt brugernavn eller adgangskode" - }, - "step": { - "user": { - "data": { - "password": "Adgangskode", - "username": "Emailadresse" - }, - "title": "Indtast brugernavn og adgangskode" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/de.json b/homeassistant/components/vesync/.translations/de.json deleted file mode 100644 index 44b3ea86c55..00000000000 --- a/homeassistant/components/vesync/.translations/de.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Nur eine Vesync-Instanz ist zul\u00e4ssig" - }, - "error": { - "invalid_login": "Ung\u00fcltiger Benutzername oder Kennwort" - }, - "step": { - "user": { - "data": { - "password": "Passwort", - "username": "E-Mail-Adresse" - }, - "title": "Benutzername und Passwort eingeben" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/en.json b/homeassistant/components/vesync/.translations/en.json deleted file mode 100644 index cd8b3e59cbf..00000000000 --- a/homeassistant/components/vesync/.translations/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Only one Vesync instance is allowed" - }, - "error": { - "invalid_login": "Invalid username or password" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Email Address" - }, - "title": "Enter Username and Password" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/es-419.json b/homeassistant/components/vesync/.translations/es-419.json deleted file mode 100644 index 58c62fb64b6..00000000000 --- a/homeassistant/components/vesync/.translations/es-419.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo se permite una instancia de Vesync" - }, - "error": { - "invalid_login": "Nombre de usuario o contrase\u00f1a inv\u00e1lidos" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Ingrese nombre de usuario y contrase\u00f1a" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/es.json b/homeassistant/components/vesync/.translations/es.json deleted file mode 100644 index 856dc77a52c..00000000000 --- a/homeassistant/components/vesync/.translations/es.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Solo se permite una instancia de Vesync" - }, - "error": { - "invalid_login": "Nombre de usuario o contrase\u00f1a no v\u00e1lidos" - }, - "step": { - "user": { - "data": { - "password": "Contrase\u00f1a", - "username": "Direcci\u00f3n de correo electr\u00f3nico" - }, - "title": "Introduzca el nombre de usuario y la contrase\u00f1a" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/fr.json b/homeassistant/components/vesync/.translations/fr.json deleted file mode 100644 index 4928ea4f0be..00000000000 --- a/homeassistant/components/vesync/.translations/fr.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Une seule instance de Vesync est autoris\u00e9e" - }, - "error": { - "invalid_login": "Nom d'utilisateur ou mot de passe invalide" - }, - "step": { - "user": { - "data": { - "password": "Mot de passe", - "username": "Adresse e-mail" - }, - "title": "Entrez vos identifiants" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/it.json b/homeassistant/components/vesync/.translations/it.json deleted file mode 100644 index d3e53547559..00000000000 --- a/homeassistant/components/vesync/.translations/it.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u00c8 consentita una sola istanza di Vesync" - }, - "error": { - "invalid_login": "Nome utente o password non validi" - }, - "step": { - "user": { - "data": { - "password": "Password", - "username": "Indirizzo E-mail" - }, - "title": "Immettere nome utente e password" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/ko.json b/homeassistant/components/vesync/.translations/ko.json deleted file mode 100644 index ca43b90acc9..00000000000 --- a/homeassistant/components/vesync/.translations/ko.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\ud558\ub098\uc758 Vesync \uc778\uc2a4\ud134\uc2a4\ub9cc \ud5c8\uc6a9\ub429\ub2c8\ub2e4" - }, - "error": { - "invalid_login": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "password": "\ube44\ubc00\ubc88\ud638", - "username": "\uc774\uba54\uc77c \uc8fc\uc18c" - }, - "title": "\uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/lb.json b/homeassistant/components/vesync/.translations/lb.json deleted file mode 100644 index 0825bd0805d..00000000000 --- a/homeassistant/components/vesync/.translations/lb.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "N\u00ebmmen eng eenzeg Instanz vu Vesync ass erlaabt." - }, - "error": { - "invalid_login": "Ong\u00ebltege Benotzernumm oder Passwuert" - }, - "step": { - "user": { - "data": { - "password": "Passwuert", - "username": "E-Mail Adresse" - }, - "title": "Benotzernumm a Passwuert aginn" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/nl.json b/homeassistant/components/vesync/.translations/nl.json deleted file mode 100644 index d19d528c61a..00000000000 --- a/homeassistant/components/vesync/.translations/nl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Er is slechts \u00e9\u00e9n Vesync instantie toegestaan." - }, - "error": { - "invalid_login": "Ongeldige gebruikersnaam of wachtwoord" - }, - "step": { - "user": { - "data": { - "password": "Wachtwoord", - "username": "E-mailadres" - }, - "title": "Voer gebruikersnaam en wachtwoord in" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/nn.json b/homeassistant/components/vesync/.translations/nn.json deleted file mode 100644 index 372e37133b1..00000000000 --- a/homeassistant/components/vesync/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/no.json b/homeassistant/components/vesync/.translations/no.json deleted file mode 100644 index be5f27b7a0f..00000000000 --- a/homeassistant/components/vesync/.translations/no.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Bare en Vesync-forekomst er tillatt" - }, - "error": { - "invalid_login": "Ugyldig brukernavn eller passord" - }, - "step": { - "user": { - "data": { - "password": "Passord", - "username": "E-postadresse" - }, - "title": "Skriv inn brukernavn og passord" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/pl.json b/homeassistant/components/vesync/.translations/pl.json deleted file mode 100644 index d6584f11d29..00000000000 --- a/homeassistant/components/vesync/.translations/pl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dozwolona jest tylko jedna instancja Vesync" - }, - "error": { - "invalid_login": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o" - }, - "step": { - "user": { - "data": { - "password": "Has\u0142o", - "username": "Adres e-mail" - }, - "title": "Wprowad\u017a nazw\u0119 u\u017cytkownika i has\u0142o." - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/pt.json b/homeassistant/components/vesync/.translations/pt.json deleted file mode 100644 index 395907056e9..00000000000 --- a/homeassistant/components/vesync/.translations/pt.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "config": { - "error": { - "invalid_login": "Nome de utilizador ou palavra passe incorretos" - }, - "step": { - "user": { - "data": { - "password": "Palavra-passe", - "username": "Endere\u00e7o de e-mail" - }, - "title": "Introduza o nome de utilizador e a palavra-passe" - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/ru.json b/homeassistant/components/vesync/.translations/ru.json deleted file mode 100644 index 23cb6fdfac7..00000000000 --- a/homeassistant/components/vesync/.translations/ru.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "invalid_login": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." - }, - "step": { - "user": { - "data": { - "password": "\u041f\u0430\u0440\u043e\u043b\u044c", - "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" - }, - "title": "VeSync" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/sl.json b/homeassistant/components/vesync/.translations/sl.json deleted file mode 100644 index 636237dcfc1..00000000000 --- a/homeassistant/components/vesync/.translations/sl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dovoljen je samo ena instanca Vesync" - }, - "error": { - "invalid_login": "Neveljavno uporabni\u0161ko ime ali geslo" - }, - "step": { - "user": { - "data": { - "password": "Geslo", - "username": "E-po\u0161tni naslov" - }, - "title": "Vnesite uporabni\u0161ko Ime in Geslo" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/sv.json b/homeassistant/components/vesync/.translations/sv.json deleted file mode 100644 index a477ca6e5da..00000000000 --- a/homeassistant/components/vesync/.translations/sv.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Endast en Vesync-instans \u00e4r till\u00e5ten" - }, - "error": { - "invalid_login": "Ogiltigt anv\u00e4ndarnamn eller l\u00f6senord" - }, - "step": { - "user": { - "data": { - "password": "L\u00f6senord", - "username": "E-postadress" - }, - "title": "Ange anv\u00e4ndarnamn och l\u00f6senord" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/zh-Hant.json b/homeassistant/components/vesync/.translations/zh-Hant.json deleted file mode 100644 index 05e4a1bbc79..00000000000 --- a/homeassistant/components/vesync/.translations/zh-Hant.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Vesync \u7269\u4ef6" - }, - "error": { - "invalid_login": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u7121\u6548" - }, - "step": { - "user": { - "data": { - "password": "\u5bc6\u78bc", - "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" - }, - "title": "\u8acb\u8f38\u5165\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc" - } - }, - "title": "VeSync" - } -} \ No newline at end of file diff --git a/homeassistant/components/vesync/manifest.json b/homeassistant/components/vesync/manifest.json index 1563ee0ce2b..7ac8e89fb60 100644 --- a/homeassistant/components/vesync/manifest.json +++ b/homeassistant/components/vesync/manifest.json @@ -2,7 +2,6 @@ "domain": "vesync", "name": "Etekcity VeSync", "documentation": "https://www.home-assistant.io/integrations/vesync", - "dependencies": [], "codeowners": ["@markperdue", "@webdjoe"], "requirements": ["pyvesync==1.1.0"], "config_flow": true diff --git a/homeassistant/components/vesync/services.yaml b/homeassistant/components/vesync/services.yaml index 2174c974e16..dec19740aef 100644 --- a/homeassistant/components/vesync/services.yaml +++ b/homeassistant/components/vesync/services.yaml @@ -1,2 +1,2 @@ update_devices: - description: Add new VeSync devices to Home Assistant \ No newline at end of file + description: Add new VeSync devices to Home Assistant diff --git a/homeassistant/components/vesync/strings.json b/homeassistant/components/vesync/strings.json index 2d808e85bea..80c934c98db 100644 --- a/homeassistant/components/vesync/strings.json +++ b/homeassistant/components/vesync/strings.json @@ -1,20 +1,12 @@ { - "config": { - "title": "VeSync", - "step": { - "user": { - "title": "Enter Username and Password", - "data": { - "username": "Email Address", - "password": "Password" - } - } - }, - "error": { - "invalid_login": "Invalid username or password" - }, - "abort": { - "already_setup": "Only one Vesync instance is allowed" - } - } -} \ No newline at end of file + "config": { + "step": { + "user": { + "title": "Enter Username and Password", + "data": { "username": "Email Address", "password": "Password" } + } + }, + "error": { "invalid_login": "Invalid username or password" }, + "abort": { "already_setup": "Only one Vesync instance is allowed" } + } +} diff --git a/homeassistant/components/vesync/translations/bg.json b/homeassistant/components/vesync/translations/bg.json new file mode 100644 index 00000000000..612b2028b38 --- /dev/null +++ b/homeassistant/components/vesync/translations/bg.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Vesync" + }, + "error": { + "invalid_login": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u0430" + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u0430", + "username": "E-mail \u0430\u0434\u0440\u0435\u0441" + }, + "title": "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435 \u0438 \u043f\u0430\u0440\u043e\u043b\u0430" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/ca.json b/homeassistant/components/vesync/translations/ca.json new file mode 100644 index 00000000000..6dbf41d9ef2 --- /dev/null +++ b/homeassistant/components/vesync/translations/ca.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Nom\u00e9s es permet una \u00fanica inst\u00e0ncia de VeSync" + }, + "error": { + "invalid_login": "Nom d'usuari o contrasenya incorrectes" + }, + "step": { + "user": { + "data": { + "password": "Contrasenya", + "username": "Correu electr\u00f2nic" + }, + "title": "Introdueix el nom d\u2019usuari i contrasenya" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/da.json b/homeassistant/components/vesync/translations/da.json new file mode 100644 index 00000000000..2fe09c51860 --- /dev/null +++ b/homeassistant/components/vesync/translations/da.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Kun en Vesync-forekomst er tilladt" + }, + "error": { + "invalid_login": "Ugyldigt brugernavn eller adgangskode" + }, + "step": { + "user": { + "data": { + "password": "Adgangskode", + "username": "Emailadresse" + }, + "title": "Indtast brugernavn og adgangskode" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/de.json b/homeassistant/components/vesync/translations/de.json new file mode 100644 index 00000000000..3db70384d8b --- /dev/null +++ b/homeassistant/components/vesync/translations/de.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Nur eine Vesync-Instanz ist zul\u00e4ssig" + }, + "error": { + "invalid_login": "Ung\u00fcltiger Benutzername oder Kennwort" + }, + "step": { + "user": { + "data": { + "password": "Passwort", + "username": "E-Mail-Adresse" + }, + "title": "Benutzername und Passwort eingeben" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/en.json b/homeassistant/components/vesync/translations/en.json new file mode 100644 index 00000000000..c109a81aa2f --- /dev/null +++ b/homeassistant/components/vesync/translations/en.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Only one Vesync instance is allowed" + }, + "error": { + "invalid_login": "Invalid username or password" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Email Address" + }, + "title": "Enter Username and Password" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/es-419.json b/homeassistant/components/vesync/translations/es-419.json new file mode 100644 index 00000000000..7c6f344104a --- /dev/null +++ b/homeassistant/components/vesync/translations/es-419.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Solo se permite una instancia de Vesync" + }, + "error": { + "invalid_login": "Nombre de usuario o contrase\u00f1a inv\u00e1lidos" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Ingrese nombre de usuario y contrase\u00f1a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/es.json b/homeassistant/components/vesync/translations/es.json new file mode 100644 index 00000000000..9eac2f6155d --- /dev/null +++ b/homeassistant/components/vesync/translations/es.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Solo se permite una instancia de Vesync" + }, + "error": { + "invalid_login": "Nombre de usuario o contrase\u00f1a no v\u00e1lidos" + }, + "step": { + "user": { + "data": { + "password": "Contrase\u00f1a", + "username": "Direcci\u00f3n de correo electr\u00f3nico" + }, + "title": "Introduzca el nombre de usuario y la contrase\u00f1a" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/fr.json b/homeassistant/components/vesync/translations/fr.json new file mode 100644 index 00000000000..6db0922e684 --- /dev/null +++ b/homeassistant/components/vesync/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Une seule instance de Vesync est autoris\u00e9e" + }, + "error": { + "invalid_login": "Nom d'utilisateur ou mot de passe invalide" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Adresse e-mail" + }, + "title": "Entrez vos identifiants" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/hu.json b/homeassistant/components/vesync/translations/hu.json similarity index 100% rename from homeassistant/components/vesync/.translations/hu.json rename to homeassistant/components/vesync/translations/hu.json diff --git a/homeassistant/components/vesync/translations/it.json b/homeassistant/components/vesync/translations/it.json new file mode 100644 index 00000000000..42e5b1bb1e4 --- /dev/null +++ b/homeassistant/components/vesync/translations/it.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "\u00c8 consentita una sola istanza di Vesync" + }, + "error": { + "invalid_login": "Nome utente o password non validi" + }, + "step": { + "user": { + "data": { + "password": "Password", + "username": "Indirizzo E-mail" + }, + "title": "Immettere nome utente e password" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/ko.json b/homeassistant/components/vesync/translations/ko.json new file mode 100644 index 00000000000..20672e018f7 --- /dev/null +++ b/homeassistant/components/vesync/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "\ud558\ub098\uc758 Vesync \uc778\uc2a4\ud134\uc2a4\ub9cc \ud5c8\uc6a9\ub429\ub2c8\ub2e4" + }, + "error": { + "invalid_login": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc774\uba54\uc77c \uc8fc\uc18c" + }, + "title": "\uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/lb.json b/homeassistant/components/vesync/translations/lb.json new file mode 100644 index 00000000000..a3793c66f8d --- /dev/null +++ b/homeassistant/components/vesync/translations/lb.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "N\u00ebmmen eng eenzeg Instanz vu Vesync ass erlaabt." + }, + "error": { + "invalid_login": "Ong\u00ebltege Benotzernumm oder Passwuert" + }, + "step": { + "user": { + "data": { + "password": "Passwuert", + "username": "E-Mail Adresse" + }, + "title": "Benotzernumm a Passwuert aginn" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/lv.json b/homeassistant/components/vesync/translations/lv.json similarity index 100% rename from homeassistant/components/vesync/.translations/lv.json rename to homeassistant/components/vesync/translations/lv.json diff --git a/homeassistant/components/vesync/translations/nl.json b/homeassistant/components/vesync/translations/nl.json new file mode 100644 index 00000000000..3624fd2b3f4 --- /dev/null +++ b/homeassistant/components/vesync/translations/nl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Er is slechts \u00e9\u00e9n Vesync instantie toegestaan." + }, + "error": { + "invalid_login": "Ongeldige gebruikersnaam of wachtwoord" + }, + "step": { + "user": { + "data": { + "password": "Wachtwoord", + "username": "E-mailadres" + }, + "title": "Voer gebruikersnaam en wachtwoord in" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/nn.json b/homeassistant/components/vesync/translations/nn.json new file mode 100644 index 00000000000..3c1ca41456d --- /dev/null +++ b/homeassistant/components/vesync/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "VeSync" +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/no.json b/homeassistant/components/vesync/translations/no.json new file mode 100644 index 00000000000..75cfb04b9db --- /dev/null +++ b/homeassistant/components/vesync/translations/no.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Bare en Vesync-forekomst er tillatt" + }, + "error": { + "invalid_login": "Ugyldig brukernavn eller passord" + }, + "step": { + "user": { + "data": { + "password": "Passord", + "username": "E-postadresse" + }, + "title": "Skriv inn brukernavn og passord" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/pl.json b/homeassistant/components/vesync/translations/pl.json new file mode 100644 index 00000000000..aa5d4dc587f --- /dev/null +++ b/homeassistant/components/vesync/translations/pl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Dozwolona jest tylko jedna instancja Vesync" + }, + "error": { + "invalid_login": "Nieprawid\u0142owa nazwa u\u017cytkownika lub has\u0142o" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Adres e-mail" + }, + "title": "Wprowad\u017a nazw\u0119 u\u017cytkownika i has\u0142o." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/pt.json b/homeassistant/components/vesync/translations/pt.json new file mode 100644 index 00000000000..4df94dd3231 --- /dev/null +++ b/homeassistant/components/vesync/translations/pt.json @@ -0,0 +1,16 @@ +{ + "config": { + "error": { + "invalid_login": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Endere\u00e7o de email" + }, + "title": "Introduza o nome de utilizador e a palavra-passe" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/ru.json b/homeassistant/components/vesync/translations/ru.json new file mode 100644 index 00000000000..4b18d353aa9 --- /dev/null +++ b/homeassistant/components/vesync/translations/ru.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "invalid_login": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c." + }, + "step": { + "user": { + "data": { + "password": "\u041f\u0430\u0440\u043e\u043b\u044c", + "username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b" + }, + "title": "VeSync" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/sl.json b/homeassistant/components/vesync/translations/sl.json new file mode 100644 index 00000000000..f766224af1e --- /dev/null +++ b/homeassistant/components/vesync/translations/sl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Dovoljen je samo ena instanca Vesync" + }, + "error": { + "invalid_login": "Neveljavno uporabni\u0161ko ime ali geslo" + }, + "step": { + "user": { + "data": { + "password": "Geslo", + "username": "E-po\u0161tni naslov" + }, + "title": "Vnesite uporabni\u0161ko Ime in Geslo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/translations/sv.json b/homeassistant/components/vesync/translations/sv.json new file mode 100644 index 00000000000..3845e194bf3 --- /dev/null +++ b/homeassistant/components/vesync/translations/sv.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "Endast en Vesync-instans \u00e4r till\u00e5ten" + }, + "error": { + "invalid_login": "Ogiltigt anv\u00e4ndarnamn eller l\u00f6senord" + }, + "step": { + "user": { + "data": { + "password": "L\u00f6senord", + "username": "E-postadress" + }, + "title": "Ange anv\u00e4ndarnamn och l\u00f6senord" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vesync/.translations/zh-Hans.json b/homeassistant/components/vesync/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/vesync/.translations/zh-Hans.json rename to homeassistant/components/vesync/translations/zh-Hans.json diff --git a/homeassistant/components/vesync/translations/zh-Hant.json b/homeassistant/components/vesync/translations/zh-Hant.json new file mode 100644 index 00000000000..cd7cc7ea91b --- /dev/null +++ b/homeassistant/components/vesync/translations/zh-Hant.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_setup": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Vesync \u7269\u4ef6" + }, + "error": { + "invalid_login": "\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u7121\u6548" + }, + "step": { + "user": { + "data": { + "password": "\u5bc6\u78bc", + "username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740" + }, + "title": "\u8acb\u8f38\u5165\u4f7f\u7528\u8005\u540d\u7a31\u8207\u5bc6\u78bc" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/viaggiatreno/manifest.json b/homeassistant/components/viaggiatreno/manifest.json index 4825441707b..b4eb145f315 100644 --- a/homeassistant/components/viaggiatreno/manifest.json +++ b/homeassistant/components/viaggiatreno/manifest.json @@ -2,7 +2,5 @@ "domain": "viaggiatreno", "name": "Trenitalia ViaggiaTreno", "documentation": "https://www.home-assistant.io/integrations/viaggiatreno", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/viaggiatreno/sensor.py b/homeassistant/components/viaggiatreno/sensor.py index 783581a0755..5de968f5eac 100644 --- a/homeassistant/components/viaggiatreno/sensor.py +++ b/homeassistant/components/viaggiatreno/sensor.py @@ -7,7 +7,7 @@ import async_timeout import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ATTR_ATTRIBUTION, TIME_MINUTES +from homeassistant.const import ATTR_ATTRIBUTION, HTTP_OK, TIME_MINUTES import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity @@ -72,7 +72,7 @@ async def async_http_request(hass, uri): session = hass.helpers.aiohttp_client.async_get_clientsession(hass) with async_timeout.timeout(REQUEST_TIMEOUT): req = await session.get(uri) - if req.status != 200: + if req.status != HTTP_OK: return {"error": req.status} json_response = await req.json() return json_response diff --git a/homeassistant/components/vicare/manifest.json b/homeassistant/components/vicare/manifest.json index a03c927c2ac..6fc0dfdd119 100644 --- a/homeassistant/components/vicare/manifest.json +++ b/homeassistant/components/vicare/manifest.json @@ -2,7 +2,6 @@ "domain": "vicare", "name": "Viessmann ViCare", "documentation": "https://www.home-assistant.io/integrations/vicare", - "dependencies": [], "codeowners": ["@oischinger"], "requirements": ["PyViCare==0.1.10"] } diff --git a/homeassistant/components/vilfo/.translations/ca.json b/homeassistant/components/vilfo/.translations/ca.json deleted file mode 100644 index 07d9ddafb51..00000000000 --- a/homeassistant/components/vilfo/.translations/ca.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "L'encaminador Vilfo ja est\u00e0 configurat." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar. Verifica la informaci\u00f3 proporcionada i torna-ho a provar.", - "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida. Comprova el testimoni d'acc\u00e9s i torna-ho a provar.", - "unknown": "S'ha produ\u00eft un error inesperat durant la configuraci\u00f3 de la integraci\u00f3." - }, - "step": { - "user": { - "data": { - "access_token": "Testimoni d'acc\u00e9s per l'API de l'encaminador Vilfo", - "host": "Nom d'amfitri\u00f3 o IP de l'encaminador" - }, - "description": "Configura la integraci\u00f3 de l'encaminador Vilfo. Necessites la seva IP o nom d'amfitri\u00f3 i el testimoni d'acc\u00e9s de l'API (token). Per a m\u00e9s informaci\u00f3, visita: https://www.home-assistant.io/integrations/vilfo", - "title": "Connexi\u00f3 amb l'encaminador Vilfo" - } - }, - "title": "Encaminador Vilfo" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/da.json b/homeassistant/components/vilfo/.translations/da.json deleted file mode 100644 index f233b4cb7b9..00000000000 --- a/homeassistant/components/vilfo/.translations/da.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne Vilfo-router er allerede konfigureret." - }, - "error": { - "cannot_connect": "Forbindelsen kunne ikke oprettes. Tjek de oplysninger, du har angivet, og pr\u00f8v igen.", - "invalid_auth": "Ugyldig godkendelse. Kontroller adgangstoken og pr\u00f8v igen.", - "unknown": "Der opstod en uventet fejl under konfiguration af integrationen." - }, - "step": { - "user": { - "data": { - "access_token": "Adgangstoken til Vilfo-router-API", - "host": "Router-v\u00e6rtsnavn eller IP" - }, - "description": "Indstil Vilfo-routerintegration. Du har brug for dit Vilfo-routerv\u00e6rtsnavn/IP og et API-adgangstoken. For yderligere information om denne integration og hvordan du f\u00e5r disse detaljer, kan du bes\u00f8ge: https://www.home-assistant.io/integrations/vilfo", - "title": "Opret forbindelse til Vilfo-router" - } - }, - "title": "Vilfo-router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/de.json b/homeassistant/components/vilfo/.translations/de.json deleted file mode 100644 index fed2265def2..00000000000 --- a/homeassistant/components/vilfo/.translations/de.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser Vilfo Router ist bereits konfiguriert." - }, - "error": { - "cannot_connect": "Verbindung nicht m\u00f6glich. Bitte \u00fcberpr\u00fcfen Sie die von Ihnen angegebenen Informationen und versuchen Sie es erneut.", - "invalid_auth": "Ung\u00fcltige Authentifizierung. Bitte \u00fcberpr\u00fcfen Sie den Zugriffstoken und versuchen Sie es erneut.", - "unknown": "Beim Einrichten der Integration ist ein unerwarteter Fehler aufgetreten." - }, - "step": { - "user": { - "data": { - "access_token": "Zugriffstoken f\u00fcr die Vilfo Router-API", - "host": "Router-Hostname oder IP" - }, - "description": "Richten Sie die Vilfo Router-Integration ein. Sie ben\u00f6tigen Ihren Vilfo Router-Hostnamen / Ihre IP-Adresse und ein API-Zugriffstoken. Weitere Informationen zu dieser Integration und wie Sie diese Details erhalten, finden Sie unter: https://www.home-assistant.io/integrations/vilfo", - "title": "Stellen Sie eine Verbindung zum Vilfo Router her" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/en.json b/homeassistant/components/vilfo/.translations/en.json deleted file mode 100644 index e6b9817f5a8..00000000000 --- a/homeassistant/components/vilfo/.translations/en.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This Vilfo Router is already configured." - }, - "error": { - "cannot_connect": "Failed to connect. Please check the information you provided and try again.", - "invalid_auth": "Invalid authentication. Please check the access token and try again.", - "unknown": "An unexpected error occurred while setting up the integration." - }, - "step": { - "user": { - "data": { - "access_token": "Access token for the Vilfo Router API", - "host": "Router hostname or IP" - }, - "description": "Set up the Vilfo Router integration. You need your Vilfo Router hostname/IP and an API access token. For additional information on this integration and how to get those details, visit: https://www.home-assistant.io/integrations/vilfo", - "title": "Connect to the Vilfo Router" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/es.json b/homeassistant/components/vilfo/.translations/es.json deleted file mode 100644 index 170faa197da..00000000000 --- a/homeassistant/components/vilfo/.translations/es.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este router Vilfo ya est\u00e1 configurado." - }, - "error": { - "cannot_connect": "No se pudo conectar. Compruebe la informaci\u00f3n que proporcion\u00f3 e int\u00e9ntelo de nuevo.", - "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida. Compruebe el token de acceso e int\u00e9ntelo de nuevo.", - "unknown": "Se ha producido un error inesperado al configurar la integraci\u00f3n." - }, - "step": { - "user": { - "data": { - "access_token": "Token de acceso para la API del Router Vilfo", - "host": "Nombre de host o IP del router" - }, - "description": "Configure la integraci\u00f3n del Router Vilfo. Necesita su nombre de host/IP del Router Vilfo y un token de acceso a la API. Para obtener informaci\u00f3n adicional sobre esta integraci\u00f3n y c\u00f3mo obtener esos detalles, visite: https://www.home-assistant.io/integrations/vilfo", - "title": "Conectar con el Router Vilfo" - } - }, - "title": "Router Vilfo" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/fr.json b/homeassistant/components/vilfo/.translations/fr.json deleted file mode 100644 index 64e48adc573..00000000000 --- a/homeassistant/components/vilfo/.translations/fr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "Connectez-vous au routeur Vilfo" - } - }, - "title": "Routeur Vilfo" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/hu.json b/homeassistant/components/vilfo/.translations/hu.json deleted file mode 100644 index 5ae11707c19..00000000000 --- a/homeassistant/components/vilfo/.translations/hu.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "host": "Router hostname vagy IP" - }, - "title": "Csatlakoz\u00e1s a Vilfo routerhez" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/it.json b/homeassistant/components/vilfo/.translations/it.json deleted file mode 100644 index 5523dcc0c09..00000000000 --- a/homeassistant/components/vilfo/.translations/it.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo Vilfo Router \u00e8 gi\u00e0 configurato." - }, - "error": { - "cannot_connect": "Impossibile connettersi. Controllare le informazioni fornite e riprovare.", - "invalid_auth": "Autenticazione non valida. Controllare il token di accesso e riprovare.", - "unknown": "Si \u00e8 verificato un errore imprevisto durante l'impostazione dell'integrazione." - }, - "step": { - "user": { - "data": { - "access_token": "Token di accesso per il Vilfo Router API", - "host": "Nome host o IP del router" - }, - "description": "Configurare l'integrazione del Vilfo Router. \u00c8 necessario il vostro hostname/IP del Vilfo Router e un token di accesso API. Per ulteriori informazioni su questa integrazione e su come ottenere tali dettagli, visitare il sito: https://www.home-assistant.io/integrations/vilfo", - "title": "Collegamento al Vilfo Router" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/ko.json b/homeassistant/components/vilfo/.translations/ko.json deleted file mode 100644 index 85cb147ff6c..00000000000 --- a/homeassistant/components/vilfo/.translations/ko.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 Vilfo \ub77c\uc6b0\ud130\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc785\ub825\ud558\uc2e0 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc2e0 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc561\uc138\uc2a4 \ud1a0\ud070\uc744 \ud655\uc778\ud558\uc2e0 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", - "unknown": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud558\ub294 \uc911 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4." - }, - "step": { - "user": { - "data": { - "access_token": "Vilfo \ub77c\uc6b0\ud130 API \uc6a9 \uc561\uc138\uc2a4 \ud1a0\ud070", - "host": "\ub77c\uc6b0\ud130 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c" - }, - "description": "Vilfo \ub77c\uc6b0\ud130 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. Vilfo \ub77c\uc6b0\ud130 \ud638\uc2a4\ud2b8 \uc774\ub984 / IP \uc640 API \uc561\uc138\uc2a4 \ud1a0\ud070\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc5d0 \ub300\ud55c \ucd94\uac00 \uc815\ubcf4\uc640 \uc138\ubd80 \uc0ac\ud56d\uc740 https://www.home-assistant.io/integrations/vilfo \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", - "title": "Vilfo \ub77c\uc6b0\ud130\uc5d0 \uc5f0\uacb0\ud558\uae30" - } - }, - "title": "Vilfo \ub77c\uc6b0\ud130" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/lb.json b/homeassistant/components/vilfo/.translations/lb.json deleted file mode 100644 index 7b88bd31d17..00000000000 --- a/homeassistant/components/vilfo/.translations/lb.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse Vilfo Router ass scho konfigur\u00e9iert." - }, - "error": { - "cannot_connect": "Feeler beim verbannen. Iwwerpr\u00e9ift \u00e4r Informatiounen an prob\u00e9iert nach emol.", - "invalid_auth": "Ong\u00eblteg Authentifikatioun. Iwwerpr\u00e9ift den Acc\u00e8s jeton an prob\u00e9iert nach emol.", - "unknown": "Onerwaarte Feeler beim ariichten vun der Integratioun." - }, - "step": { - "user": { - "data": { - "access_token": "Acc\u00e8s Jeton fir Vilfo Router API", - "host": "Router Numm oder IP" - }, - "description": "Vilfo Router Integratioun ariichten. Dir braucht \u00e4re Vilfo Router Numm/IP an een API Acc\u00e8s Jeton. Fir weider Informatiounen zu d\u00ebser Integratioun a w\u00e9i een zu d\u00ebsen n\u00e9idegen Informatioune k\u00ebnnt, gitt op: https://www.home-assistant.io/integrations/vilfo", - "title": "Mam Vilfo Router verbannen" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/nl.json b/homeassistant/components/vilfo/.translations/nl.json deleted file mode 100644 index db2691d3eeb..00000000000 --- a/homeassistant/components/vilfo/.translations/nl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Deze Vilfo Router is al geconfigureerd." - }, - "error": { - "cannot_connect": "Kon niet verbinden. Controleer de door u verstrekte informatie en probeer het opnieuw.", - "unknown": "Er is een onverwachte fout opgetreden tijdens het instellen van de integratie." - }, - "step": { - "user": { - "data": { - "access_token": "Toegangstoken voor de Vilfo Router API", - "host": "Router hostnaam of IP-adres" - }, - "title": "Maak verbinding met de Vilfo Router" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/no.json b/homeassistant/components/vilfo/.translations/no.json deleted file mode 100644 index 61b9c56f496..00000000000 --- a/homeassistant/components/vilfo/.translations/no.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne Vilfo Ruteren er allerede konfigurert." - }, - "error": { - "cannot_connect": "Tilkobling mislyktes. Vennligst sjekk informasjonen du oppga, og pr\u00f8v igjen.", - "invalid_auth": "Ugyldig godkjenning. Vennligst sjekk access token, og pr\u00f8v p\u00e5 nytt.", - "unknown": "Det oppstod en uventet feil under installasjonen av integrasjonen." - }, - "step": { - "user": { - "data": { - "access_token": "Tilgangstoken for Vilfo Router API", - "host": "Ruter vertsnavn eller IP" - }, - "description": "Konfigurer Vilfo Router-integreringen. Du trenger ditt Vilfo Router vertsnavn/IP og et API-tilgangstoken. Hvis du vil ha mer informasjon om denne integreringen og hvordan du f\u00e5r disse detaljene, kan du g\u00e5 til: https://www.home-assistant.io/integrations/vilfo", - "title": "Koble til Vilfo Ruteren" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/pl.json b/homeassistant/components/vilfo/.translations/pl.json deleted file mode 100644 index e9cd91209a4..00000000000 --- a/homeassistant/components/vilfo/.translations/pl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ten router Vilfo jest ju\u017c skonfigurowany." - }, - "error": { - "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia. Sprawd\u017a wprowadzone dane i spr\u00f3buj ponownie.", - "invalid_auth": "Nieudane uwierzytelnienie. Sprawd\u017a token dost\u0119pu i spr\u00f3buj ponownie.", - "unknown": "Wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d podczas konfiguracji integracji." - }, - "step": { - "user": { - "data": { - "access_token": "Token dost\u0119pu do interfejsu API routera Vilfo", - "host": "Nazwa hosta lub adres IP routera" - }, - "description": "Skonfiguruj integracj\u0119 routera Vilfo. Potrzebujesz nazwy hosta/adresu IP routera Vilfo i tokena dost\u0119pu do interfejsu API. Aby uzyska\u0107 dodatkowe informacje na temat tej integracji i sposobu uzyskania niezb\u0119dnych danych do konfiguracji, odwied\u017a: https://www.home-assistant.io/integrations/vilfo", - "title": "Po\u0142\u0105czenie z routerem Vilfo" - } - }, - "title": "Router Vilfo" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/ru.json b/homeassistant/components/vilfo/.translations/ru.json deleted file mode 100644 index ce8f325e0ea..00000000000 --- a/homeassistant/components/vilfo/.translations/ru.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "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\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", - "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438." - }, - "step": { - "user": { - "data": { - "access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a API \u0440\u043e\u0443\u0442\u0435\u0440\u0430", - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430 Vilfo. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0438 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 API. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442: https://www.home-assistant.io/integrations/vilfo.", - "title": "Vilfo Router" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/sl.json b/homeassistant/components/vilfo/.translations/sl.json deleted file mode 100644 index a7d683e793c..00000000000 --- a/homeassistant/components/vilfo/.translations/sl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta usmerjevalnik Vilfo je \u017ee konfiguriran." - }, - "error": { - "cannot_connect": "Povezava ni uspela. Prosimo, preverite informacije, ki ste jih vnesli in poskusite znova.", - "invalid_auth": "Neveljavna avtentikacija. Preverite dostopni \u017eeton in poskusite znova.", - "unknown": "Med nastavitvijo integracije je pri\u0161lo do nepri\u010dakovane napake." - }, - "step": { - "user": { - "data": { - "access_token": "Dostopni \u017eeton za API Vilfo Router", - "host": "Ime gostitelja usmerjevalnika ali IP" - }, - "description": "Nastavite integracijo Vilfo Router. Potrebujete ime gostitelja ali IP Vilfo usmerjevalnika in dostopni \u017eeton API. Za dodatne informacije o tej integraciji in kako do teh podrobnosti obi\u0161\u010dite: https://www.home-assistant.io/integrations/vilfo", - "title": "Pove\u017eite se z usmerjevalnikom Vilfo" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/sv.json b/homeassistant/components/vilfo/.translations/sv.json deleted file mode 100644 index 69edce6b9d8..00000000000 --- a/homeassistant/components/vilfo/.translations/sv.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den h\u00e4r Vilfo-routern \u00e4r redan konfigurerad." - }, - "error": { - "cannot_connect": "Kunde inte ansluta. V\u00e4nligen kontrollera informationen du angav och f\u00f6rs\u00f6k igen.", - "invalid_auth": "Ogiltig autentisering. V\u00e4nligen kontrollera \u00e5tkomstnyckeln och f\u00f6rs\u00f6k igen.", - "unknown": "Ett ov\u00e4ntat fel intr\u00e4ffade n\u00e4r integrationen skulle konfigureras." - }, - "step": { - "user": { - "data": { - "access_token": "\u00c5tkomstnyckel f\u00f6r Vilfo-routerns API", - "host": "Routerns v\u00e4rdnamn eller IP-adress" - }, - "description": "St\u00e4ll in Vilfo Router-integrationen. Du beh\u00f6ver din Vilfo-routers v\u00e4rdnamn eller IP-adress och en \u00e5tkomstnyckel till dess API. F\u00f6r ytterligare information om den h\u00e4r integrationen och hur du f\u00e5r fram den n\u00f6dv\u00e4ndiga informationen, bes\u00f6k: https://www.home-assistant.io/integrations/vilfo", - "title": "Anslut till Vilfo-routern" - } - }, - "title": "Vilfo Router" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/zh-Hans.json b/homeassistant/components/vilfo/.translations/zh-Hans.json deleted file mode 100644 index 788f85b9382..00000000000 --- a/homeassistant/components/vilfo/.translations/zh-Hans.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "config": { - "error": { - "cannot_connect": "\u8fde\u63a5\u5931\u8d25\u3002\u8bf7\u68c0\u67e5\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u518d\u8bd5\u4e00\u6b21\u3002", - "unknown": "\u8bbe\u7f6e\u6574\u5408\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef\u3002" - }, - "step": { - "user": { - "data": { - "access_token": "Vilfo \u8def\u7531\u5668 API \u5b58\u53d6\u5bc6\u94a5", - "host": "\u8def\u7531\u5668\u4e3b\u673a\u540d\u6216 IP \u5730\u5740" - }, - "description": "\u8bbe\u7f6e Vilfo \u8def\u7531\u5668\u6574\u5408\u3002\u60a8\u9700\u8981\u8f93\u5165 Vilfo \u8def\u7531\u5668\u4e3b\u673a\u540d/IP \u5730\u5740\u3001API\u5b58\u53d6\u5bc6\u94a5\u3002\u5176\u4ed6\u6574\u5408\u7684\u76f8\u5173\u4fe1\u606f\uff0c\u8bf7\u8bbf\u95ee\uff1ahttps://www.home-assistant.io/integrations/vilfo", - "title": "\u8fde\u63a5\u5230 Vilfo \u8def\u7531\u5668" - } - }, - "title": "Vilfo \u8def\u7531\u5668" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/.translations/zh-Hant.json b/homeassistant/components/vilfo/.translations/zh-Hant.json deleted file mode 100644 index 7553cc683cd..00000000000 --- a/homeassistant/components/vilfo/.translations/zh-Hant.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Vilfo \u8def\u7531\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "error": { - "cannot_connect": "\u9023\u7dda\u5931\u6557\u3002\u8acb\u6aa2\u67e5\u8f38\u5165\u8cc7\u6599\u5f8c\uff0c\u518d\u8a66\u4e00\u6b21\u3002", - "invalid_auth": "\u9a57\u8b49\u7121\u6548\uff0c\u8acb\u6aa2\u67e5\u5b58\u53d6\u5bc6\u9470\u5f8c\u518d\u8a66\u4e00\u6b21\u3002", - "unknown": "\u8a2d\u5b9a\u6574\u5408\u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" - }, - "step": { - "user": { - "data": { - "access_token": "Vilfo \u8def\u7531\u5668 API \u5b58\u53d6\u5bc6\u9470", - "host": "\u8def\u7531\u5668\u4e3b\u6a5f\u7aef\u6216 IP \u4f4d\u5740" - }, - "description": "\u8a2d\u5b9a Vilfo \u8def\u7531\u5668\u6574\u5408\u3002\u9700\u8981\u8f38\u5165 Vilfo \u8def\u7531\u5668\u4e3b\u6a5f\u540d\u7a31/IP \u4f4d\u5740\u3001API \u5b58\u53d6\u5bc6\u9470\u3002\u5176\u4ed6\u6574\u5408\u76f8\u95dc\u8cc7\u8a0a\uff0c\u8acb\u53c3\u8003\uff1ahttps://www.home-assistant.io/integrations/vilfo", - "title": "\u9023\u7dda\u81f3 Vilfo \u8def\u7531\u5668" - } - }, - "title": "Vilfo \u8def\u7531\u5668" - } -} \ No newline at end of file diff --git a/homeassistant/components/vilfo/manifest.json b/homeassistant/components/vilfo/manifest.json index cedb485fab3..4dba1a5687e 100644 --- a/homeassistant/components/vilfo/manifest.json +++ b/homeassistant/components/vilfo/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/vilfo", "requirements": ["vilfo-api-client==0.3.2"], - "dependencies": [], "codeowners": ["@ManneW"] } diff --git a/homeassistant/components/vilfo/strings.json b/homeassistant/components/vilfo/strings.json index e7a55c55f1f..399e30446e9 100644 --- a/homeassistant/components/vilfo/strings.json +++ b/homeassistant/components/vilfo/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "Vilfo Router", "step": { "user": { "title": "Connect to the Vilfo Router", diff --git a/homeassistant/components/vilfo/translations/ca.json b/homeassistant/components/vilfo/translations/ca.json new file mode 100644 index 00000000000..5b8c12bab6c --- /dev/null +++ b/homeassistant/components/vilfo/translations/ca.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "L'encaminador Vilfo ja est\u00e0 configurat." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar. Verifica la informaci\u00f3 proporcionada i torna-ho a provar.", + "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida. Comprova el testimoni d'acc\u00e9s i torna-ho a provar.", + "unknown": "S'ha produ\u00eft un error inesperat durant la configuraci\u00f3 de la integraci\u00f3." + }, + "step": { + "user": { + "data": { + "access_token": "Testimoni d'acc\u00e9s per l'API de l'encaminador Vilfo", + "host": "Nom d'amfitri\u00f3 o IP de l'encaminador" + }, + "description": "Configura la integraci\u00f3 de l'encaminador Vilfo. Necessites la seva IP o nom d'amfitri\u00f3 i el testimoni d'acc\u00e9s de l'API (token). Per a m\u00e9s informaci\u00f3, visita: https://www.home-assistant.io/integrations/vilfo", + "title": "Connexi\u00f3 amb l'encaminador Vilfo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/da.json b/homeassistant/components/vilfo/translations/da.json new file mode 100644 index 00000000000..0ef9c619c91 --- /dev/null +++ b/homeassistant/components/vilfo/translations/da.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Vilfo-router er allerede konfigureret." + }, + "error": { + "cannot_connect": "Forbindelsen kunne ikke oprettes. Tjek de oplysninger, du har angivet, og pr\u00f8v igen.", + "invalid_auth": "Ugyldig godkendelse. Kontroller adgangstoken og pr\u00f8v igen.", + "unknown": "Der opstod en uventet fejl under konfiguration af integrationen." + }, + "step": { + "user": { + "data": { + "access_token": "Adgangstoken til Vilfo-router-API", + "host": "Router-v\u00e6rtsnavn eller IP" + }, + "description": "Indstil Vilfo-routerintegration. Du har brug for dit Vilfo-routerv\u00e6rtsnavn/IP og et API-adgangstoken. For yderligere information om denne integration og hvordan du f\u00e5r disse detaljer, kan du bes\u00f8ge: https://www.home-assistant.io/integrations/vilfo", + "title": "Opret forbindelse til Vilfo-router" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/de.json b/homeassistant/components/vilfo/translations/de.json new file mode 100644 index 00000000000..d4b68d04c93 --- /dev/null +++ b/homeassistant/components/vilfo/translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Vilfo Router ist bereits konfiguriert." + }, + "error": { + "cannot_connect": "Verbindung nicht m\u00f6glich. Bitte \u00fcberpr\u00fcfen Sie die von Ihnen angegebenen Informationen und versuchen Sie es erneut.", + "invalid_auth": "Ung\u00fcltige Authentifizierung. Bitte \u00fcberpr\u00fcfen Sie den Zugriffstoken und versuchen Sie es erneut.", + "unknown": "Beim Einrichten der Integration ist ein unerwarteter Fehler aufgetreten." + }, + "step": { + "user": { + "data": { + "access_token": "Zugriffstoken f\u00fcr die Vilfo Router-API", + "host": "Router-Hostname oder IP" + }, + "description": "Richten Sie die Vilfo Router-Integration ein. Sie ben\u00f6tigen Ihren Vilfo Router-Hostnamen / Ihre IP-Adresse und ein API-Zugriffstoken. Weitere Informationen zu dieser Integration und wie Sie diese Details erhalten, finden Sie unter: https://www.home-assistant.io/integrations/vilfo", + "title": "Stellen Sie eine Verbindung zum Vilfo Router her" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/en.json b/homeassistant/components/vilfo/translations/en.json new file mode 100644 index 00000000000..49a94414403 --- /dev/null +++ b/homeassistant/components/vilfo/translations/en.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "This Vilfo Router is already configured." + }, + "error": { + "cannot_connect": "Failed to connect. Please check the information you provided and try again.", + "invalid_auth": "Invalid authentication. Please check the access token and try again.", + "unknown": "An unexpected error occurred while setting up the integration." + }, + "step": { + "user": { + "data": { + "access_token": "Access token for the Vilfo Router API", + "host": "Router hostname or IP" + }, + "description": "Set up the Vilfo Router integration. You need your Vilfo Router hostname/IP and an API access token. For additional information on this integration and how to get those details, visit: https://www.home-assistant.io/integrations/vilfo", + "title": "Connect to the Vilfo Router" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/es.json b/homeassistant/components/vilfo/translations/es.json new file mode 100644 index 00000000000..97f4b8d417e --- /dev/null +++ b/homeassistant/components/vilfo/translations/es.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Este router Vilfo ya est\u00e1 configurado." + }, + "error": { + "cannot_connect": "No se pudo conectar. Comprueba la informaci\u00f3n que proporcionaste e int\u00e9ntalo de nuevo.", + "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida. Comprueba el token de acceso e int\u00e9ntalo de nuevo.", + "unknown": "Se ha producido un error inesperado al configurar la integraci\u00f3n." + }, + "step": { + "user": { + "data": { + "access_token": "Token de acceso para la API del Router Vilfo", + "host": "Nombre de host o IP del router" + }, + "description": "Configure la integraci\u00f3n del Router Vilfo. Necesita su nombre de host/IP del Router Vilfo y un token de acceso a la API. Para obtener informaci\u00f3n adicional sobre esta integraci\u00f3n y c\u00f3mo obtener esos detalles, visite: https://www.home-assistant.io/integrations/vilfo", + "title": "Conectar con el Router Vilfo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/fr.json b/homeassistant/components/vilfo/translations/fr.json new file mode 100644 index 00000000000..272711789d8 --- /dev/null +++ b/homeassistant/components/vilfo/translations/fr.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "user": { + "title": "Connectez-vous au routeur Vilfo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/hu.json b/homeassistant/components/vilfo/translations/hu.json new file mode 100644 index 00000000000..0368349f75a --- /dev/null +++ b/homeassistant/components/vilfo/translations/hu.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "Router hostname vagy IP" + }, + "title": "Csatlakoz\u00e1s a Vilfo routerhez" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/it.json b/homeassistant/components/vilfo/translations/it.json new file mode 100644 index 00000000000..2f39499260e --- /dev/null +++ b/homeassistant/components/vilfo/translations/it.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Questo Vilfo Router \u00e8 gi\u00e0 configurato." + }, + "error": { + "cannot_connect": "Impossibile connettersi. Controllare le informazioni fornite e riprovare.", + "invalid_auth": "Autenticazione non valida. Controllare il token di accesso e riprovare.", + "unknown": "Si \u00e8 verificato un errore imprevisto durante l'impostazione dell'integrazione." + }, + "step": { + "user": { + "data": { + "access_token": "Token di accesso per il Vilfo Router API", + "host": "Nome host o IP del router" + }, + "description": "Configurare l'integrazione del Vilfo Router. \u00c8 necessario il vostro hostname/IP del Vilfo Router e un token di accesso API. Per ulteriori informazioni su questa integrazione e su come ottenere tali dettagli, visitare il sito: https://www.home-assistant.io/integrations/vilfo", + "title": "Collegamento al Vilfo Router" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/ko.json b/homeassistant/components/vilfo/translations/ko.json new file mode 100644 index 00000000000..f0b96eb77b7 --- /dev/null +++ b/homeassistant/components/vilfo/translations/ko.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 Vilfo \ub77c\uc6b0\ud130\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \uc785\ub825\ud558\uc2e0 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uc2e0 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc561\uc138\uc2a4 \ud1a0\ud070\uc744 \ud655\uc778\ud558\uc2e0 \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud558\ub294 \uc911 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4." + }, + "step": { + "user": { + "data": { + "access_token": "Vilfo \ub77c\uc6b0\ud130 API \uc6a9 \uc561\uc138\uc2a4 \ud1a0\ud070", + "host": "\ub77c\uc6b0\ud130 \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c" + }, + "description": "Vilfo \ub77c\uc6b0\ud130 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. Vilfo \ub77c\uc6b0\ud130 \ud638\uc2a4\ud2b8 \uc774\ub984 / IP \uc640 API \uc561\uc138\uc2a4 \ud1a0\ud070\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\uc5d0 \ub300\ud55c \ucd94\uac00 \uc815\ubcf4\uc640 \uc138\ubd80 \uc0ac\ud56d\uc740 https://www.home-assistant.io/integrations/vilfo \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", + "title": "Vilfo \ub77c\uc6b0\ud130\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/lb.json b/homeassistant/components/vilfo/translations/lb.json new file mode 100644 index 00000000000..88964aedc9b --- /dev/null +++ b/homeassistant/components/vilfo/translations/lb.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Vilfo Router ass scho konfigur\u00e9iert." + }, + "error": { + "cannot_connect": "Feeler beim verbannen. Iwwerpr\u00e9ift \u00e4r Informatiounen an prob\u00e9iert nach emol.", + "invalid_auth": "Ong\u00eblteg Authentifikatioun. Iwwerpr\u00e9ift den Acc\u00e8s jeton an prob\u00e9iert nach emol.", + "unknown": "Onerwaarte Feeler beim ariichten vun der Integratioun." + }, + "step": { + "user": { + "data": { + "access_token": "Acc\u00e8s Jeton fir Vilfo Router API", + "host": "Router Numm oder IP" + }, + "description": "Vilfo Router Integratioun ariichten. Dir braucht \u00e4re Vilfo Router Numm/IP an een API Acc\u00e8s Jeton. Fir weider Informatiounen zu d\u00ebser Integratioun a w\u00e9i een zu d\u00ebsen n\u00e9idegen Informatioune k\u00ebnnt, gitt op: https://www.home-assistant.io/integrations/vilfo", + "title": "Mam Vilfo Router verbannen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/nl.json b/homeassistant/components/vilfo/translations/nl.json new file mode 100644 index 00000000000..1901be6fd1a --- /dev/null +++ b/homeassistant/components/vilfo/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Deze Vilfo Router is al geconfigureerd." + }, + "error": { + "cannot_connect": "Kon niet verbinden. Controleer de door u verstrekte informatie en probeer het opnieuw.", + "unknown": "Er is een onverwachte fout opgetreden tijdens het instellen van de integratie." + }, + "step": { + "user": { + "data": { + "access_token": "Toegangstoken voor de Vilfo Router API", + "host": "Router hostnaam of IP-adres" + }, + "title": "Maak verbinding met de Vilfo Router" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/no.json b/homeassistant/components/vilfo/translations/no.json new file mode 100644 index 00000000000..36c6e79989b --- /dev/null +++ b/homeassistant/components/vilfo/translations/no.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Denne Vilfo Ruteren er allerede konfigurert." + }, + "error": { + "cannot_connect": "Tilkobling mislyktes. Vennligst sjekk informasjonen du oppga, og pr\u00f8v igjen.", + "invalid_auth": "Ugyldig godkjenning. Vennligst sjekk access token, og pr\u00f8v p\u00e5 nytt.", + "unknown": "Det oppstod en uventet feil under installasjonen av integrasjonen." + }, + "step": { + "user": { + "data": { + "access_token": "Tilgangstoken for Vilfo Router API", + "host": "Ruter vertsnavn eller IP" + }, + "description": "Konfigurer Vilfo Router-integreringen. Du trenger ditt Vilfo Router vertsnavn/IP og et API-tilgangstoken. Hvis du vil ha mer informasjon om denne integreringen og hvordan du f\u00e5r disse detaljene, kan du g\u00e5 til: https://www.home-assistant.io/integrations/vilfo", + "title": "Koble til Vilfo Ruteren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/pl.json b/homeassistant/components/vilfo/translations/pl.json new file mode 100644 index 00000000000..4cff9fb6fea --- /dev/null +++ b/homeassistant/components/vilfo/translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Ten router Vilfo jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia. Sprawd\u017a wprowadzone dane i spr\u00f3buj ponownie.", + "invalid_auth": "Nieudane uwierzytelnienie. Sprawd\u017a token dost\u0119pu i spr\u00f3buj ponownie.", + "unknown": "Wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d podczas konfiguracji integracji." + }, + "step": { + "user": { + "data": { + "access_token": "Token dost\u0119pu do interfejsu API routera Vilfo", + "host": "Nazwa hosta lub adres IP routera" + }, + "description": "Skonfiguruj integracj\u0119 routera Vilfo. Potrzebujesz nazwy hosta/adresu IP routera Vilfo i tokena dost\u0119pu do interfejsu API. Aby uzyska\u0107 dodatkowe informacje na temat tej integracji i sposobu uzyskania niezb\u0119dnych danych do konfiguracji, odwied\u017a: https://www.home-assistant.io/integrations/vilfo", + "title": "Po\u0142\u0105czenie z routerem Vilfo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/ru.json b/homeassistant/components/vilfo/translations/ru.json new file mode 100644 index 00000000000..372c9750410 --- /dev/null +++ b/homeassistant/components/vilfo/translations/ru.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "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\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", + "invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.", + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "data": { + "access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a API \u0440\u043e\u0443\u0442\u0435\u0440\u0430", + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430 Vilfo. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u0438 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 API. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442: https://www.home-assistant.io/integrations/vilfo.", + "title": "Vilfo Router" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/sl.json b/homeassistant/components/vilfo/translations/sl.json new file mode 100644 index 00000000000..c815698099f --- /dev/null +++ b/homeassistant/components/vilfo/translations/sl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Ta usmerjevalnik Vilfo je \u017ee konfiguriran." + }, + "error": { + "cannot_connect": "Povezava ni uspela. Prosimo, preverite informacije, ki ste jih vnesli in poskusite znova.", + "invalid_auth": "Neveljavna avtentikacija. Preverite dostopni \u017eeton in poskusite znova.", + "unknown": "Med nastavitvijo integracije je pri\u0161lo do nepri\u010dakovane napake." + }, + "step": { + "user": { + "data": { + "access_token": "Dostopni \u017eeton za API Vilfo Router", + "host": "Ime gostitelja usmerjevalnika ali IP" + }, + "description": "Nastavite integracijo Vilfo Router. Potrebujete ime gostitelja ali IP Vilfo usmerjevalnika in dostopni \u017eeton API. Za dodatne informacije o tej integraciji in kako do teh podrobnosti obi\u0161\u010dite: https://www.home-assistant.io/integrations/vilfo", + "title": "Pove\u017eite se z usmerjevalnikom Vilfo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/sv.json b/homeassistant/components/vilfo/translations/sv.json new file mode 100644 index 00000000000..7192f91ee1a --- /dev/null +++ b/homeassistant/components/vilfo/translations/sv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Den h\u00e4r Vilfo-routern \u00e4r redan konfigurerad." + }, + "error": { + "cannot_connect": "Kunde inte ansluta. V\u00e4nligen kontrollera informationen du angav och f\u00f6rs\u00f6k igen.", + "invalid_auth": "Ogiltig autentisering. V\u00e4nligen kontrollera \u00e5tkomstnyckeln och f\u00f6rs\u00f6k igen.", + "unknown": "Ett ov\u00e4ntat fel intr\u00e4ffade n\u00e4r integrationen skulle konfigureras." + }, + "step": { + "user": { + "data": { + "access_token": "\u00c5tkomstnyckel f\u00f6r Vilfo-routerns API", + "host": "Routerns v\u00e4rdnamn eller IP-adress" + }, + "description": "St\u00e4ll in Vilfo Router-integrationen. Du beh\u00f6ver din Vilfo-routers v\u00e4rdnamn eller IP-adress och en \u00e5tkomstnyckel till dess API. F\u00f6r ytterligare information om den h\u00e4r integrationen och hur du f\u00e5r fram den n\u00f6dv\u00e4ndiga informationen, bes\u00f6k: https://www.home-assistant.io/integrations/vilfo", + "title": "Anslut till Vilfo-routern" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/zh-Hans.json b/homeassistant/components/vilfo/translations/zh-Hans.json new file mode 100644 index 00000000000..f3fec441d4c --- /dev/null +++ b/homeassistant/components/vilfo/translations/zh-Hans.json @@ -0,0 +1,18 @@ +{ + "config": { + "error": { + "cannot_connect": "\u8fde\u63a5\u5931\u8d25\u3002\u8bf7\u68c0\u67e5\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u518d\u8bd5\u4e00\u6b21\u3002", + "unknown": "\u8bbe\u7f6e\u6574\u5408\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef\u3002" + }, + "step": { + "user": { + "data": { + "access_token": "Vilfo \u8def\u7531\u5668 API \u5b58\u53d6\u5bc6\u94a5", + "host": "\u8def\u7531\u5668\u4e3b\u673a\u540d\u6216 IP \u5730\u5740" + }, + "description": "\u8bbe\u7f6e Vilfo \u8def\u7531\u5668\u6574\u5408\u3002\u60a8\u9700\u8981\u8f93\u5165 Vilfo \u8def\u7531\u5668\u4e3b\u673a\u540d/IP \u5730\u5740\u3001API\u5b58\u53d6\u5bc6\u94a5\u3002\u5176\u4ed6\u6574\u5408\u7684\u76f8\u5173\u4fe1\u606f\uff0c\u8bf7\u8bbf\u95ee\uff1ahttps://www.home-assistant.io/integrations/vilfo", + "title": "\u8fde\u63a5\u5230 Vilfo \u8def\u7531\u5668" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vilfo/translations/zh-Hant.json b/homeassistant/components/vilfo/translations/zh-Hant.json new file mode 100644 index 00000000000..665474e2d76 --- /dev/null +++ b/homeassistant/components/vilfo/translations/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Vilfo \u8def\u7531\u5668\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "error": { + "cannot_connect": "\u9023\u7dda\u5931\u6557\u3002\u8acb\u6aa2\u67e5\u8f38\u5165\u8cc7\u6599\u5f8c\uff0c\u518d\u8a66\u4e00\u6b21\u3002", + "invalid_auth": "\u9a57\u8b49\u7121\u6548\uff0c\u8acb\u6aa2\u67e5\u5b58\u53d6\u5bc6\u9470\u5f8c\u518d\u8a66\u4e00\u6b21\u3002", + "unknown": "\u8a2d\u5b9a\u6574\u5408\u6642\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002" + }, + "step": { + "user": { + "data": { + "access_token": "Vilfo \u8def\u7531\u5668 API \u5b58\u53d6\u5bc6\u9470", + "host": "\u8def\u7531\u5668\u4e3b\u6a5f\u7aef\u6216 IP \u4f4d\u5740" + }, + "description": "\u8a2d\u5b9a Vilfo \u8def\u7531\u5668\u6574\u5408\u3002\u9700\u8981\u8f38\u5165 Vilfo \u8def\u7531\u5668\u4e3b\u6a5f\u540d\u7a31/IP \u4f4d\u5740\u3001API \u5b58\u53d6\u5bc6\u9470\u3002\u5176\u4ed6\u6574\u5408\u76f8\u95dc\u8cc7\u8a0a\uff0c\u8acb\u53c3\u8003\uff1ahttps://www.home-assistant.io/integrations/vilfo", + "title": "\u9023\u7dda\u81f3 Vilfo \u8def\u7531\u5668" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vivotek/manifest.json b/homeassistant/components/vivotek/manifest.json index 3b4a4211f34..5d1b8cedd7b 100644 --- a/homeassistant/components/vivotek/manifest.json +++ b/homeassistant/components/vivotek/manifest.json @@ -3,6 +3,5 @@ "name": "VIVOTEK", "documentation": "https://www.home-assistant.io/integrations/vivotek", "requirements": ["libpyvivotek==0.4.0"], - "dependencies": [], "codeowners": ["@HarlemSquirrel"] } diff --git a/homeassistant/components/vizio/.translations/ca.json b/homeassistant/components/vizio/.translations/ca.json deleted file mode 100644 index 6b9a3a89134..00000000000 --- a/homeassistant/components/vizio/.translations/ca.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Aquesta entrada ja ha estat configurada.", - "updated_entry": "Aquesta entrada ja s'ha configurat per\u00f2 el nom i les opcions definides a la configuraci\u00f3 no coincideixen amb els valors importats anteriorment, en conseq\u00fc\u00e8ncia, s'han actualitzat." - }, - "error": { - "cant_connect": "No s'ha pogut connectar amb el dispositiu. [Comprova la documentaci\u00f3](https://www.home-assistant.io/integrations/vizio/) i torna a verificar que: \n - El dispositiu est\u00e0 engegat \n - El dispositiu est\u00e0 connectat a la xarxa \n - Els valors que has intridu\u00eft s\u00f3n correctes\n abans d\u2019intentar tornar a presentar.", - "complete_pairing failed": "No s'ha pogut completar l'emparellament. Verifica que el PIN proporcionat sigui el correcte i que el televisor segueix connectat a la xarxa abans de provar-ho de nou.", - "host_exists": "Dispositiu Vizio amb aquest nom d'amfitri\u00f3 ja configurat.", - "name_exists": "Dispositiu Vizio amb aquest nom ja configurat." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "El televisor hauria d'estar mostrant un codi. Introdueix aquest codi al formulari i segueix amb els seg\u00fcents passos per completar l'emparellament.", - "title": "Proc\u00e9s d'aparellament complet" - }, - "pairing_complete": { - "description": "El dispositiu Vizio SmartCast est\u00e0 connectat a Home Assistant.", - "title": "Emparellament completat" - }, - "pairing_complete_import": { - "description": "El dispositiu Vizio SmartCast est\u00e0 connectat a Home Assistant.\n\nEl testimoni d'acc\u00e9s (Access Token) \u00e9s '**{access_token}**'.", - "title": "Emparellament completat" - }, - "user": { - "data": { - "access_token": "Testimoni d'acc\u00e9s", - "device_class": "Tipus de dispositiu", - "host": ":", - "name": "Nom" - }, - "description": "Nom\u00e9s es necessita testimoni d'acc\u00e9s per als televisors. Si est\u00e0s configurant un televisor i encara no tens un testimoni d'acc\u00e9s, deixeu-ho en blanc per poder fer el proc\u00e9s d'emparellament.", - "title": "Configuraci\u00f3 del client de Vizio SmartCast" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Aplicacions a incloure o excloure", - "include_or_exclude": "Incloure o excloure aplicacions?", - "volume_step": "Mida del pas de volum" - }, - "description": "Si tens una Smart TV, pots filtrar de manera opcional la teva llista de canals escollint quines aplicacions vols incloure o excloure de la llista.", - "title": "Actualitzaci\u00f3 de les opcions de Vizo SmartCast" - } - }, - "title": "Actualitzaci\u00f3 de les opcions de Vizo SmartCast" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/da.json b/homeassistant/components/vizio/.translations/da.json deleted file mode 100644 index 5317c1c2adb..00000000000 --- a/homeassistant/components/vizio/.translations/da.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Denne post er allerede blevet konfigureret.", - "updated_entry": "Denne post er allerede konfigureret, men navnet og/eller indstillingerne, der er defineret i konfigurationen, stemmer ikke overens med den tidligere importerede konfiguration, s\u00e5 konfigurationsposten er blevet opdateret i overensstemmelse hermed." - }, - "error": { - "cant_connect": "Kunne ikke oprette forbindelse til enheden. [Gennemg\u00e5 dokumentationen] (https://www.home-assistant.io/integrations/vizio/), og bekr\u00e6ft, at: \n - Enheden er t\u00e6ndt \n - Enheden er tilsluttet netv\u00e6rket \n - De angivne v\u00e6rdier er korrekte \n f\u00f8r du fors\u00f8ger at indsende igen.", - "host_exists": "Vizio-enhed med den specificerede v\u00e6rt er allerede konfigureret.", - "name_exists": "Vizio-enhed med det specificerede navn er allerede konfigureret." - }, - "step": { - "user": { - "data": { - "access_token": "Adgangstoken", - "device_class": "Enhedstype", - "host": ":", - "name": "Navn" - }, - "title": "Ops\u00e6t Vizio SmartCast-enhed" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "volume_step": "Lydstyrkestrinst\u00f8rrelse" - }, - "title": "Opdater Vizo SmartCast-indstillinger" - } - }, - "title": "Opdater Vizo SmartCast-indstillinger" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/de.json b/homeassistant/components/vizio/.translations/de.json deleted file mode 100644 index 2197d27de71..00000000000 --- a/homeassistant/components/vizio/.translations/de.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dieser Eintrag wurde bereits eingerichtet.", - "updated_entry": "Dieser Eintrag wurde bereits eingerichtet, aber der Name, die Apps und / oder die in der Konfiguration definierten Optionen stimmen nicht mit der zuvor importierten Konfiguration \u00fcberein, sodass der Konfigurationseintrag entsprechend aktualisiert wurde." - }, - "error": { - "cant_connect": "Es konnte keine Verbindung zum Ger\u00e4t hergestellt werden. [\u00dcberpr\u00fcfen Sie die Dokumentation] (https://www.home-assistant.io/integrations/vizio/) und \u00fcberpr\u00fcfen Sie Folgendes erneut:\n- Das Ger\u00e4t ist eingeschaltet\n- Das Ger\u00e4t ist mit dem Netzwerk verbunden\n- Die von Ihnen eingegebenen Werte sind korrekt\nbevor sie versuchen, erneut zu \u00fcbermitteln.", - "complete_pairing failed": "Das Pairing kann nicht abgeschlossen werden. Stellen Sie sicher, dass die von Ihnen angegebene PIN korrekt ist und das Fernsehger\u00e4t weiterhin mit Strom versorgt und mit dem Netzwerk verbunden ist, bevor Sie es erneut versuchen.", - "host_exists": "Vizio-Ger\u00e4t mit angegebenem Host bereits konfiguriert.", - "name_exists": "Vizio-Ger\u00e4t mit angegebenem Namen bereits konfiguriert." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "Ihr Fernseher sollte einen Code anzeigen. Geben Sie diesen Code in das Formular ein und fahren Sie mit dem n\u00e4chsten Schritt fort, um die Kopplung abzuschlie\u00dfen.", - "title": "Schlie\u00dfen Sie den Pairing-Prozess ab" - }, - "pairing_complete": { - "description": "Ihr Vizio SmartCast-Ger\u00e4t ist jetzt mit Home Assistant verbunden.", - "title": "Kopplung abgeschlossen" - }, - "pairing_complete_import": { - "description": "Ihr Vizio SmartCast-Fernseher ist jetzt mit Home Assistant verbunden. \n\n Ihr Zugriffstoken ist '**{access_token}**'.", - "title": "Kopplung abgeschlossen" - }, - "user": { - "data": { - "access_token": "Zugangstoken", - "device_class": "Ger\u00e4tetyp", - "host": ":", - "name": "Name" - }, - "description": "Ein Zugriffstoken wird nur f\u00fcr Fernsehger\u00e4te ben\u00f6tigt. Wenn Sie ein Fernsehger\u00e4t konfigurieren und noch kein Zugriffstoken haben, lassen Sie es leer, um einen Pairing-Vorgang durchzuf\u00fchren.", - "title": "Richten Sie das Vizio SmartCast-Ger\u00e4t ein" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Apps zum Einschlie\u00dfen oder Ausschlie\u00dfen", - "include_or_exclude": "Apps einschlie\u00dfen oder ausschlie\u00dfen?", - "volume_step": "Lautst\u00e4rken-Schrittgr\u00f6\u00dfe" - }, - "description": "Wenn Sie \u00fcber ein Smart-TV-Ger\u00e4t verf\u00fcgen, k\u00f6nnen Sie Ihre Quellliste optional filtern, indem Sie ausw\u00e4hlen, welche Apps in Ihre Quellliste aufgenommen oder ausgeschlossen werden sollen.", - "title": "Aktualisieren Sie die Vizo SmartCast-Optionen" - } - }, - "title": "Aktualisieren Sie die Vizo SmartCast-Optionen" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/en.json b/homeassistant/components/vizio/.translations/en.json deleted file mode 100644 index f4b03e1eb82..00000000000 --- a/homeassistant/components/vizio/.translations/en.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "This entry has already been setup.", - "updated_entry": "This entry has already been setup but the name, apps, and/or options defined in the configuration do not match the previously imported configuration, so the configuration entry has been updated accordingly." - }, - "error": { - "cant_connect": "Could not connect to the device. [Review the docs](https://www.home-assistant.io/integrations/vizio/) and re-verify that:\n- The device is powered on\n- The device is connected to the network\n- The values you filled in are accurate\nbefore attempting to resubmit.", - "complete_pairing failed": "Unable to complete pairing. Ensure the PIN you provided is correct and the TV is still powered and connected to the network before resubmitting.", - "host_exists": "Vizio device with specified host already configured.", - "name_exists": "Vizio device with specified name already configured." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "Your TV should be displaying a code. Enter that code into the form and then continue to the next step to complete the pairing.", - "title": "Complete Pairing Process" - }, - "pairing_complete": { - "description": "Your Vizio SmartCast device is now connected to Home Assistant.", - "title": "Pairing Complete" - }, - "pairing_complete_import": { - "description": "Your Vizio SmartCast TV is now connected to Home Assistant.\n\nYour Access Token is '**{access_token}**'.", - "title": "Pairing Complete" - }, - "user": { - "data": { - "access_token": "Access Token", - "device_class": "Device Type", - "host": ":", - "name": "Name" - }, - "description": "An Access Token is only needed for TVs. If you are configuring a TV and do not have an Access Token yet, leave it blank to go through a pairing process.", - "title": "Setup Vizio SmartCast Device" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Apps to Include or Exclude", - "include_or_exclude": "Include or Exclude Apps?", - "volume_step": "Volume Step Size" - }, - "description": "If you have a Smart TV, you can optionally filter your source list by choosing which apps to include or exclude in your source list.", - "title": "Update Vizo SmartCast Options" - } - }, - "title": "Update Vizo SmartCast Options" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/es.json b/homeassistant/components/vizio/.translations/es.json deleted file mode 100644 index eb35fbb0b5b..00000000000 --- a/homeassistant/components/vizio/.translations/es.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Esta entrada ya ha sido configurada.", - "updated_entry": "Esta entrada ya ha sido configurada pero el nombre y/o las opciones definidas en la configuraci\u00f3n no coinciden con la configuraci\u00f3n previamente importada, por lo que la entrada de la configuraci\u00f3n ha sido actualizada en consecuencia." - }, - "error": { - "cant_connect": "No se pudo conectar al dispositivo. [Revise los documentos] (https://www.home-assistant.io/integrations/vizio/) y vuelva a verificar que:\n- El dispositivo est\u00e1 encendido\n- El dispositivo est\u00e1 conectado a la red\n- Los valores que ha rellenado son precisos\nantes de intentar volver a enviar.", - "complete_pairing failed": "No se pudo completar el emparejamiento. Aseg\u00farate de que el PIN que has proporcionado es correcto y que el televisor sigue encendido y conectado a la red antes de volver a enviarlo.", - "host_exists": "El host ya est\u00e1 configurado.", - "name_exists": "Nombre ya configurado." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "Tu TV debe estar mostrando un c\u00f3digo. Escribe ese c\u00f3digo en el formulario y contin\u00faa con el paso siguiente para completar el emparejamiento.", - "title": "Completar Proceso de Emparejamiento" - }, - "pairing_complete": { - "description": "Tu dispositivo Vizio SmartCast est\u00e1 ahora conectado a Home Assistant.", - "title": "Emparejamiento Completado" - }, - "pairing_complete_import": { - "description": "Su dispositivo Vizio SmartCast TV ahora est\u00e1 conectado a Home Assistant.\n\nEl Token de Acceso es '**{access_token}**'.", - "title": "Emparejamiento Completado" - }, - "user": { - "data": { - "access_token": "Token de acceso", - "device_class": "Tipo de dispositivo", - "host": "< Host / IP > : ", - "name": "Nombre" - }, - "description": "Todos los campos son obligatorios excepto el Token de Acceso. Si decides no proporcionar un Token de Acceso y tu Tipo de Dispositivo es \"tv\", se te llevar\u00e1 por un proceso de emparejamiento con tu dispositivo para que se pueda recuperar un Token de Acceso.\n\nPara pasar por el proceso de emparejamiento, antes de pulsar en Enviar, aseg\u00farese de que tu TV est\u00e9 encendida y conectada a la red. Tambi\u00e9n es necesario poder ver la pantalla.", - "title": "Configurar el cliente de Vizio SmartCast" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Aplicaciones para incluir o excluir", - "include_or_exclude": "\u00bfIncluir o excluir aplicaciones?", - "volume_step": "Tama\u00f1o del paso de volumen" - }, - "description": "Si tienes un Smart TV, opcionalmente puedes filtrar su lista de fuentes eligiendo qu\u00e9 aplicaciones incluir o excluir en su lista de fuentes.", - "title": "Actualizar las opciones de SmartCast de Vizo" - } - }, - "title": "Actualizar las opciones de SmartCast de Vizo" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/fr.json b/homeassistant/components/vizio/.translations/fr.json deleted file mode 100644 index 0c0ff56af69..00000000000 --- a/homeassistant/components/vizio/.translations/fr.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Cette entr\u00e9e a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9e.", - "updated_entry": "Cette entr\u00e9e a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9e mais le nom et/ou les options d\u00e9finis dans la configuration ne correspondent pas \u00e0 la configuration pr\u00e9c\u00e9demment import\u00e9e, de sorte que l'entr\u00e9e de configuration a \u00e9t\u00e9 mise \u00e0 jour en cons\u00e9quence." - }, - "error": { - "cant_connect": "Impossible de se connecter \u00e0 l'appareil. [V\u00e9rifier les documents](https://www.home-assistant.io/integrations/vizio/) et rev\u00e9rifier que:\n- L'appareil est sous tension\n- L'appareil est connect\u00e9 au r\u00e9seau\n- Les valeurs que vous avez saisies sont exactes\navant d'essayer de le soumettre \u00e0 nouveau.", - "complete_pairing failed": "Impossible de terminer l'appariement. Assurez-vous que le code PIN que vous avez fourni est correct et que le t\u00e9l\u00e9viseur est toujours aliment\u00e9 et connect\u00e9 au r\u00e9seau avant de soumettre \u00e0 nouveau.", - "host_exists": "H\u00f4te d\u00e9j\u00e0 configur\u00e9.", - "name_exists": "Nom d\u00e9j\u00e0 configur\u00e9." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "title": "Processus de couplage complet" - }, - "pairing_complete": { - "description": "Votre appareil Vizio SmartCast est maintenant connect\u00e9 \u00e0 Home Assistant.", - "title": "Appairage termin\u00e9" - }, - "pairing_complete_import": { - "title": "Appairage termin\u00e9" - }, - "user": { - "data": { - "access_token": "Jeton d'acc\u00e8s", - "device_class": "Type d'appareil", - "host": ":", - "name": "Nom" - }, - "description": "Un jeton d'acc\u00e8s n'est n\u00e9cessaire que pour les t\u00e9l\u00e9viseurs. Si vous configurez un t\u00e9l\u00e9viseur et que vous n'avez pas encore de jeton d'acc\u00e8s, laissez-le vide pour passer par un processus de couplage.", - "title": "Configurer le client Vizio SmartCast" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Applications \u00e0 inclure ou \u00e0 exclure", - "include_or_exclude": "Inclure ou exclure des applications?", - "volume_step": "Taille du pas de volume" - }, - "description": "Si vous avez une Smart TV, vous pouvez \u00e9ventuellement filtrer votre liste de sources en choisissant les applications \u00e0 inclure ou \u00e0 exclure dans votre liste de sources.", - "title": "Mettre \u00e0 jour les options de Vizo SmartCast" - } - }, - "title": "Mettre \u00e0 jour les options de Vizo SmartCast" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/hu.json b/homeassistant/components/vizio/.translations/hu.json deleted file mode 100644 index c8b74f33e3d..00000000000 --- a/homeassistant/components/vizio/.translations/hu.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Ez a bejegyz\u00e9s m\u00e1r be van \u00e1ll\u00edtva.", - "updated_entry": "Ez a bejegyz\u00e9s m\u00e1r be van \u00e1ll\u00edtva, de a konfigur\u00e1ci\u00f3ban defini\u00e1lt n\u00e9v, appok \u00e9s/vagy be\u00e1ll\u00edt\u00e1sok nem egyeznek meg a kor\u00e1bban import\u00e1lt konfigur\u00e1ci\u00f3val, \u00edgy a konfigur\u00e1ci\u00f3s bejegyz\u00e9s ennek megfelel\u0151en friss\u00fclt." - }, - "error": { - "cant_connect": "Nem lehetett csatlakozni az eszk\u00f6zh\u00f6z. [Tekintsd \u00e1t a dokumentumokat] (https://www.home-assistant.io/integrations/vizio/) \u00e9s \u00fajra ellen\u0151rizd, hogy:\n- A k\u00e9sz\u00fcl\u00e9k be van kapcsolva\n- A k\u00e9sz\u00fcl\u00e9k csatlakozik a h\u00e1l\u00f3zathoz\n- A kit\u00f6lt\u00f6tt \u00e9rt\u00e9kek pontosak\nmiel\u0151tt \u00fajra elk\u00fclden\u00e9d.", - "host_exists": "A megadott kiszolg\u00e1l\u00f3n\u00e9vvel rendelkez\u0151 Vizio-eszk\u00f6z m\u00e1r konfigur\u00e1lva van.", - "name_exists": "A megadott n\u00e9vvel rendelkez\u0151 Vizio-eszk\u00f6z m\u00e1r konfigur\u00e1lva van." - }, - "step": { - "user": { - "data": { - "access_token": "Hozz\u00e1f\u00e9r\u00e9si token", - "device_class": "Eszk\u00f6zt\u00edpus", - "name": "N\u00e9v" - }, - "title": "A Vizio SmartCast Client be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "volume_step": "Hanger\u0151 l\u00e9p\u00e9s nagys\u00e1ga" - }, - "title": "Friss\u00edtse a Vizo SmartCast be\u00e1ll\u00edt\u00e1sokat" - } - }, - "title": "Friss\u00edtse a Vizo SmartCast be\u00e1ll\u00edt\u00e1sokat" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/it.json b/homeassistant/components/vizio/.translations/it.json deleted file mode 100644 index 4a26a40ad56..00000000000 --- a/homeassistant/components/vizio/.translations/it.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Questa voce \u00e8 gi\u00e0 stata configurata.", - "updated_entry": "Questa voce \u00e8 gi\u00e0 stata configurata, ma il nome, le app e/o le opzioni definite nella configurazione non corrispondono alla configurazione importata in precedenza, pertanto la voce di configurazione \u00e8 stata aggiornata di conseguenza." - }, - "error": { - "cant_connect": "Impossibile connettersi al dispositivo. [Esamina i documenti] (https://www.home-assistant.io/integrations/vizio/) e verifica nuovamente che: \n - Il dispositivo sia acceso \n - Il dispositivo sia collegato alla rete \n - I valori inseriti siano corretti \n prima di ritentare.", - "complete_pairing failed": "Impossibile completare l'associazione. Assicurarsi che il PIN fornito sia corretto e che il televisore sia ancora alimentato e connesso alla rete prima di inviarlo di nuovo.", - "host_exists": "Dispositivo Vizio con host specificato gi\u00e0 configurato.", - "name_exists": "Dispositivo Vizio con il nome specificato gi\u00e0 configurato." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "La TV dovrebbe visualizzare un codice. Immettere quel codice nel modulo e quindi continuare con il passaggio successivo per completare l'associazione.", - "title": "Processo di associazione completo" - }, - "pairing_complete": { - "description": "Il dispositivo Vizio SmartCast \u00e8 ora connesso a Home Assistant.", - "title": "Associazione completata" - }, - "pairing_complete_import": { - "description": "Il dispositivo Vizio SmartCast TV \u00e8 ora connesso a Home Assistant. \n\nIl tuo Token di Accesso \u00e8 '**{access_token}**'.", - "title": "Associazione completata" - }, - "user": { - "data": { - "access_token": "Token di accesso", - "device_class": "Tipo di dispositivo", - "host": "< Host / IP >: ", - "name": "Nome" - }, - "description": "Un Token di Accesso \u00e8 necessario solo per i televisori. Se si sta configurando un televisore e non si dispone ancora di un Token di Accesso, lasciarlo vuoto per passare attraverso un processo di associazione.", - "title": "Configurazione del dispositivo SmartCast Vizio" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "App da includere o escludere", - "include_or_exclude": "Includere o escludere app?", - "volume_step": "Dimensione del passo del volume" - }, - "description": "Se si dispone di una Smart TV, \u00e8 possibile filtrare l'elenco di origine scegliendo le app da includere o escludere in esso.", - "title": "Aggiornamento delle opzioni di Vizo SmartCast" - } - }, - "title": "Aggiornamento delle opzioni di Vizo SmartCast" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/ko.json b/homeassistant/components/vizio/.translations/ko.json deleted file mode 100644 index df2fb243f88..00000000000 --- a/homeassistant/components/vizio/.translations/ko.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\uc774 \ud56d\ubaa9\uc740 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "updated_entry": "\uc774 \ud56d\ubaa9\uc740 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc9c0\ub9cc \uad6c\uc131\uc5d0 \uc815\uc758\ub41c \uc774\ub984, \uc571 \ud639\uc740 \uc635\uc158\uc774 \uc774\uc804\uc5d0 \uac00\uc838\uc628 \uad6c\uc131 \ub0b4\uc6a9\uacfc \uc77c\uce58\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uad6c\uc131 \ud56d\ubaa9\uc774 \uadf8\uc5d0 \ub530\ub77c \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "error": { - "cant_connect": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. [\uc548\ub0b4\ub97c \ucc38\uace0] (https://www.home-assistant.io/integrations/vizio/)\ud558\uace0 \uc591\uc2dd\uc744 \ub2e4\uc2dc \uc81c\ucd9c\ud558\uae30 \uc804\uc5d0 \ub2e4\uc74c\uc744 \ub2e4\uc2dc \ud655\uc778\ud574\uc8fc\uc138\uc694.\n- \uae30\uae30 \uc804\uc6d0\uc774 \ucf1c\uc838 \uc788\uc2b5\ub2c8\uae4c?\n- \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc2b5\ub2c8\uae4c?\n- \uc785\ub825\ud55c \ub0b4\uc6a9\uc774 \uc62c\ubc14\ub985\ub2c8\uae4c?", - "complete_pairing failed": "\ud398\uc5b4\ub9c1\uc744 \uc644\ub8cc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc785\ub825\ud55c PIN \uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud558\uace0 \ub2e4\uc74c \uacfc\uc815\uc744 \uc9c4\ud589\ud558\uae30 \uc804\uc5d0 TV \uc758 \uc804\uc6d0\uc774 \ucf1c\uc838 \uc788\uace0 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", - "host_exists": "\uc124\uc815\ub41c \ud638\uc2a4\ud2b8\uc758 Vizio \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "name_exists": "\uc124\uc815\ub41c \uc774\ub984\uc758 Vizio \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "TV \uc5d0 \ucf54\ub4dc\uac00 \ud45c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ucf54\ub4dc\ub97c \uc591\uc2dd\uc5d0 \uc785\ub825\ud55c \ud6c4 \ub2e4\uc74c \ub2e8\uacc4\ub97c \uacc4\uc18d\ud558\uc5ec \ud398\uc5b4\ub9c1\uc744 \uc644\ub8cc\ud574\uc8fc\uc138\uc694.", - "title": "\ud398\uc5b4\ub9c1 \uacfc\uc815 \uc644\ub8cc" - }, - "pairing_complete": { - "description": "Vizio SmartCast \uae30\uae30\uac00 Home Assistant \uc5d0 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "title": "\ud398\uc5b4\ub9c1 \uc644\ub8cc" - }, - "pairing_complete_import": { - "description": "Vizio SmartCast TV \uac00 Home Assistant \uc5d0 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \n\n\uc561\uc138\uc2a4 \ud1a0\ud070\uc740 '**{access_token}**' \uc785\ub2c8\ub2e4.", - "title": "\ud398\uc5b4\ub9c1 \uc644\ub8cc" - }, - "user": { - "data": { - "access_token": "\uc561\uc138\uc2a4 \ud1a0\ud070", - "device_class": "\uae30\uae30 \uc885\ub958", - "host": "<\ud638\uc2a4\ud2b8/ip>:", - "name": "\uc774\ub984" - }, - "description": "\uc561\uc138\uc2a4 \ud1a0\ud070\uc740 TV \uc5d0\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4. TV \ub97c \uad6c\uc131\ud558\uace0 \uc788\uace0 \uc544\uc9c1 \uc561\uc138\uc2a4 \ud1a0\ud070\uc774 \uc5c6\ub294 \uacbd\uc6b0 \ud398\uc5b4\ub9c1 \uacfc\uc815\uc744 \uc9c4\ud589\ud558\ub824\uba74 \ube44\uc6cc\ub450\uc138\uc694.", - "title": "Vizio SmartCast \uae30\uae30 \uc124\uc815" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "\ud3ec\ud568 \ub610\ub294 \uc81c\uc678 \ud560 \uc571", - "include_or_exclude": "\uc571\uc744 \ud3ec\ud568 \ub610\ub294 \uc81c\uc678\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "volume_step": "\ubcfc\ub968 \ub2e8\uacc4 \ud06c\uae30" - }, - "description": "\uc2a4\ub9c8\ud2b8 TV \uac00 \uc788\ub294 \uacbd\uc6b0 \uc120\ud0dd\uc0ac\ud56d\uc73c\ub85c \uc18c\uc2a4 \ubaa9\ub85d\uc5d0 \ud3ec\ud568 \ub610\ub294 \uc81c\uc678\ud560 \uc571\uc744 \uc120\ud0dd\ud558\uc5ec \uc18c\uc2a4 \ubaa9\ub85d\uc744 \ud544\ud130\ub9c1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", - "title": "Vizo SmartCast \uc635\uc158 \uc5c5\ub370\uc774\ud2b8" - } - }, - "title": "Vizo SmartCast \uc635\uc158 \uc5c5\ub370\uc774\ud2b8" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/lb.json b/homeassistant/components/vizio/.translations/lb.json deleted file mode 100644 index 3146c8756a8..00000000000 --- a/homeassistant/components/vizio/.translations/lb.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "D\u00ebs Entr\u00e9e ass scho konfigur\u00e9iert.", - "updated_entry": "D\u00ebs Entr\u00e9e ass scho konfigur\u00e9iert mee d\u00e9i defin\u00e9ierten Numm an/oder Optiounen an der Konfiguratioun st\u00ebmmen net mat deene virdrun import\u00e9ierten Optiounen iwwereneen, esou gouf d'Entr\u00e9e deementspriechend aktualis\u00e9iert." - }, - "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." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "Um TV sollt e Code ugewisen ginn. G\u00ebff d\u00ebse Code an d'Form a fuer weider mam n\u00e4chste Schr\u00ebtt fir d'Kopplung ofzeschl\u00e9issen.", - "title": "Kopplungs Prozess ofschl\u00e9issen" - }, - "pairing_complete": { - "description": "D\u00e4in Visio 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}**'.", - "title": "Kopplung ofgeschloss" - }, - "user": { - "data": { - "access_token": "Acc\u00e8ss Jeton", - "device_class": "Typ vun Apparat", - "host": ":", - "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" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Apps fir mat abegr\u00e4ifen oder auszeschl\u00e9issen", - "include_or_exclude": "Apps mat abez\u00e9ien oder auschl\u00e9issen?", - "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": "Vizo Smartcast Optiounen aktualis\u00e9ieren" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/nl.json b/homeassistant/components/vizio/.translations/nl.json deleted file mode 100644 index 797836e0145..00000000000 --- a/homeassistant/components/vizio/.translations/nl.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Dit item is al ingesteld.", - "updated_entry": "Dit item is al ingesteld, maar de naam en/of opties die zijn gedefinieerd in de configuratie komen niet overeen met de eerder ge\u00efmporteerde configuratie, dus het configuratie-item is dienovereenkomstig bijgewerkt." - }, - "error": { - "cant_connect": "Kan geen verbinding maken met het apparaat. [Bekijk de documenten] (https://www.home-assistant.io/integrations/vizio/) en controleer of:\n- Het apparaat is ingeschakeld\n- Het apparaat is aangesloten op het netwerk\n- De waarden die u ingevuld correct zijn\nvoordat u weer probeert om opnieuw in te dienen.", - "host_exists": "Vizio apparaat met opgegeven host al geconfigureerd.", - "name_exists": "Vizio apparaat met opgegeven naam al geconfigureerd." - }, - "step": { - "user": { - "data": { - "access_token": "Toegangstoken", - "device_class": "Apparaattype", - "host": ":", - "name": "Naam" - }, - "title": "Vizio SmartCast Client instellen" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "volume_step": "Volume Stapgrootte" - }, - "title": "Update Vizo SmartCast Opties" - } - }, - "title": "Update Vizo SmartCast Opties" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/no.json b/homeassistant/components/vizio/.translations/no.json deleted file mode 100644 index 65e96945e46..00000000000 --- a/homeassistant/components/vizio/.translations/no.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Denne oppf\u00f8ringen er allerede konfigurert.", - "updated_entry": "Dette innlegget har allerede v\u00e6rt oppsett, men navnet, apps, og/eller alternativer som er definert i konfigurasjon som ikke stemmer med det som tidligere er importert konfigurasjon, s\u00e5 konfigurasjonen innlegget har blitt oppdatert i henhold til dette." - }, - "error": { - "cant_connect": "Kunne ikke koble til enheten. [Se gjennom dokumentene] (https://www.home-assistant.io/integrations/vizio/) og bekreft at: \n - Enheten er sl\u00e5tt p\u00e5 \n - Enheten er koblet til nettverket \n - Verdiene du fylte ut er n\u00f8yaktige \n f\u00f8r du pr\u00f8ver \u00e5 sende inn p\u00e5 nytt.", - "complete_pairing failed": "Kan ikke fullf\u00f8re sammenkoblingen. Forsikre deg om at PIN-koden du oppga er riktig, og at TV-en fortsatt er p\u00e5 og tilkoblet nettverket f\u00f8r du sender inn p\u00e5 nytt.", - "host_exists": "Vizio-enhet med spesifisert vert allerede konfigurert.", - "name_exists": "Vizio-enhet med spesifisert navn allerede konfigurert." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "TVen skal vise en kode. Skriv inn denne koden i skjemaet, og fortsett deretter til neste trinn for \u00e5 fullf\u00f8re paringen.", - "title": "Fullf\u00f8r Sammenkoblings Prosessen" - }, - "pairing_complete": { - "description": "Din Vizio SmartCast-enheten er n\u00e5 koblet til Home Assistant.", - "title": "Sammenkoblingen Er Fullf\u00f8rt" - }, - "pairing_complete_import": { - "description": "Din Vizio SmartCast TV er n\u00e5 koblet til Home Assistant.\n\nTilgangstokenet er **{access_token}**.", - "title": "Sammenkoblingen Er Fullf\u00f8rt" - }, - "user": { - "data": { - "access_token": "Tilgangstoken", - "device_class": "Enhetstype", - "host": ":", - "name": "Navn" - }, - "description": "En tilgangstoken er bare n\u00f8dvendig for TV-er. Hvis du konfigurerer en TV og ikke har tilgangstoken enn\u00e5, m\u00e5 du la den st\u00e5 tom for \u00e5 g\u00e5 gjennom en sammenkoblingsprosess.", - "title": "Sett opp Vizio SmartCast-enhet" - } - }, - "title": "" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Apper \u00e5 inkludere eller ekskludere", - "include_or_exclude": "Inkluder eller ekskludere apper?", - "volume_step": "St\u00f8rrelse p\u00e5 volum trinn" - }, - "description": "Hvis du har en Smart-TV, kan du eventuelt filtrere kildelisten ved \u00e5 velge hvilke apper som skal inkluderes eller utelates i kildelisten.", - "title": "Oppdater Vizo SmartCast alternativer" - } - }, - "title": "Oppdater Vizo SmartCast alternativer" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/pl.json b/homeassistant/components/vizio/.translations/pl.json deleted file mode 100644 index 2537279d998..00000000000 --- a/homeassistant/components/vizio/.translations/pl.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Ten komponent jest ju\u017c skonfigurowany.", - "updated_entry": "Ten wpis zosta\u0142 ju\u017c skonfigurowany, ale nazwa i/lub opcje zdefiniowane w konfiguracji nie pasuj\u0105 do wcze\u015bniej zaimportowanych warto\u015bci, wi\u0119c wpis konfiguracji zosta\u0142 odpowiednio zaktualizowany." - }, - "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.", - "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." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - } - }, - "pairing_complete": { - "title": "Parowanie zako\u0144czone" - }, - "pairing_complete_import": { - "title": "Parowanie zako\u0144czone" - }, - "user": { - "data": { - "access_token": "Token dost\u0119pu", - "device_class": "Typ urz\u0105dzenia", - "host": ":", - "name": "Nazwa" - }, - "title": "Konfiguracja klienta Vizio SmartCast" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Aplikacje do do\u0142\u0105czenia lub wykluczenia", - "include_or_exclude": "Do\u0142\u0105czanie lub wykluczanie aplikacji", - "volume_step": "Skok g\u0142o\u015bno\u015bci" - }, - "description": "Je\u015bli telewizor obs\u0142uguje aplikacje, mo\u017cesz opcjonalnie filtrowa\u0107 aplikacje, kt\u00f3re maj\u0105 zosta\u0107 uwzgl\u0119dnione lub wykluczone z listy \u017ar\u00f3de\u0142. Mo\u017cesz pomin\u0105\u0107 ten krok dla telewizor\u00f3w, kt\u00f3re nie obs\u0142uguj\u0105 aplikacji.", - "title": "Aktualizacja opcji Vizo SmartCast" - } - }, - "title": "Aktualizuj opcje Vizo SmartCast" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/ru.json b/homeassistant/components/vizio/.translations/ru.json deleted file mode 100644 index e1e6ac73b9d..00000000000 --- a/homeassistant/components/vizio/.translations/ru.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u042d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430.", - "updated_entry": "\u042d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430, \u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u043d\u0435\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430." - }, - "error": { - "cant_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. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e:\n- \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e;\n- \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a \u0441\u0435\u0442\u0438;\n- \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u0432\u0435\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/integrations/vizio/) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.", - "complete_pairing failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 PIN-\u043a\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439, \u0430 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0441\u0435\u0442\u0438.", - "host_exists": "\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.", - "name_exists": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN-\u043a\u043e\u0434" - }, - "description": "\u0412\u0430\u0448 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043a\u043e\u0434. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0444\u043e\u0440\u043c\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435.", - "title": "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f" - }, - "pairing_complete": { - "description": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Vizio SmartCast \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Home Assistant.", - "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e" - }, - "pairing_complete_import": { - "description": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Vizio SmartCast \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Home Assistant. \n\n\u0412\u0430\u0448 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - '**{access_token}**'.", - "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e" - }, - "user": { - "data": { - "access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430", - "device_class": "\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", - "host": "<\u0425\u043e\u0441\u0442/IP>:<\u041f\u043e\u0440\u0442>", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" - }, - "description": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0412\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0438 \u0443 \u0412\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f.", - "title": "Vizio SmartCast" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439", - "include_or_exclude": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?", - "volume_step": "\u0428\u0430\u0433 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438" - }, - "description": "\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c Smart TV, \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430.", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Vizio SmartCast" - } - }, - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Vizio SmartCast" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/sl.json b/homeassistant/components/vizio/.translations/sl.json deleted file mode 100644 index ed325acd868..00000000000 --- a/homeassistant/components/vizio/.translations/sl.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Ta vnos je \u017ee nastavljen.", - "updated_entry": "Ta vnos je bil \u017ee nastavljen, vendar se ime, aplikacije in/ali mo\u017enosti, dolo\u010dene v konfiguraciji, ne ujemajo s predhodno uvo\u017eeno konfiguracijo, zato je bil konfiguracijski vnos ustrezno posodobljen." - }, - "error": { - "cant_connect": "Ni bilo mogo\u010de povezati z napravo. [Preglejte dokumente] (https://www.home-assistant.io/integrations/vizio/) in ponovno preverite, ali: \n \u2013 Naprava je vklopljena \n \u2013 Naprava je povezana z omre\u017ejem \n \u2013 Vrednosti, ki ste jih izpolnili, so to\u010dne \nnato poskusite ponovno.", - "complete_pairing failed": "Seznanjanja ni mogo\u010de dokon\u010dati. Zagotovite, da je PIN, ki ste ga vnesli, pravilen in da je televizor \u0161e vedno vklopljen in priklju\u010den na omre\u017eje, preden ponovno poizkusite.", - "host_exists": "Naprava Vizio z dolo\u010denim gostiteljem je \u017ee konfigurirana.", - "name_exists": "Naprava Vizio z navedenim imenom je \u017ee konfigurirana." - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "Va\u0161 TV naj bi prikazoval kodo. Vnesite to kodo v obrazec in nato nadaljujte z naslednjim korakom za dokon\u010danje zdru\u017eevanja.", - "title": "Dokon\u010dajte proces zdru\u017eevanja" - }, - "pairing_complete": { - "description": "Va\u0161a naprava Vizio SmartCast je zdaj povezana s Home Assistant-om.", - "title": "Seznanjanje je kon\u010dano" - }, - "pairing_complete_import": { - "description": "Va\u0161 VIZIO SmartCast TV je zdaj priklju\u010den na Home Assistant.\n\n\u017deton za dostop je '**{access_token}**'.", - "title": "Seznanjanje je kon\u010dano" - }, - "user": { - "data": { - "access_token": "\u017deton za dostop", - "device_class": "Vrsta naprave", - "host": ":", - "name": "Ime" - }, - "description": "Dostopni \u017eeton je potreben samo za televizorje. \u010ce konfigurirate televizor in \u0161e nimate \u017eetona za dostop, ga pustite prazno in boste \u0161li, da bo \u0161el skozi postopek seznanjanja.", - "title": "Namestite Vizio SmartCast napravo" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "Aplikacije za vklju\u010ditev ali izklju\u010ditev", - "include_or_exclude": "Vklju\u010di ali Izklju\u010di Aplikacije?", - "volume_step": "Velikost koraka glasnosti" - }, - "description": "\u010ce imate pametni TV, lahko po izbiri filtrirate seznam virov tako, da izberete, katere aplikacije \u017eelite vklju\u010diti ali izklju\u010diti na seznamu virov.", - "title": "Posodobite mo\u017enosti Vizo SmartCast" - } - }, - "title": "Posodobite mo\u017enosti Vizo SmartCast" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/sv.json b/homeassistant/components/vizio/.translations/sv.json deleted file mode 100644 index bafd7d1bd2f..00000000000 --- a/homeassistant/components/vizio/.translations/sv.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "Den h\u00e4r posten har redan st\u00e4llts in.", - "updated_entry": "Den h\u00e4r posten har redan konfigurerats, men namnet och/eller alternativen som definierats i konfigurationen matchar inte den tidigare importerade konfigurationen och d\u00e4rf\u00f6r har konfigureringsposten uppdaterats i enlighet med detta." - }, - "error": { - "cant_connect": "Det gick inte att ansluta till enheten. [Granska dokumentationen] (https://www.home-assistant.io/integrations/vizio/) och p\u00e5 nytt kontrollera att\n- Enheten \u00e4r p\u00e5slagen\n- Enheten \u00e4r ansluten till n\u00e4tverket\n- De v\u00e4rden du fyllt i \u00e4r korrekta\ninnan du f\u00f6rs\u00f6ker skicka in igen.", - "host_exists": "Vizio-enheten med angivet v\u00e4rdnamn \u00e4r redan konfigurerad.", - "name_exists": "Vizio-enheten med angivet namn \u00e4r redan konfigurerad." - }, - "step": { - "user": { - "data": { - "access_token": "\u00c5tkomstnyckel", - "device_class": "Enhetstyp", - "host": ":", - "name": "Namn" - }, - "title": "St\u00e4ll in Vizio SmartCast-klient" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "volume_step": "Storlek p\u00e5 volymsteg" - }, - "title": "Uppdatera Vizo SmartCast-alternativ" - } - }, - "title": "Uppdatera Vizo SmartCast-alternativ" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/zh-Hant.json b/homeassistant/components/vizio/.translations/zh-Hant.json deleted file mode 100644 index eb396428e68..00000000000 --- a/homeassistant/components/vizio/.translations/zh-Hant.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "config": { - "abort": { - "already_setup": "\u6b64\u7269\u4ef6\u5df2\u8a2d\u5b9a\u904e\u3002", - "updated_entry": "\u6b64\u7269\u4ef6\u5df2\u7d93\u8a2d\u5b9a\uff0c\u4f46\u8a2d\u5b9a\u4e4b\u540d\u7a31\u3001App \u53ca/\u6216\u9078\u9805\u8207\u5148\u524d\u532f\u5165\u7684\u7269\u4ef6\u9078\u9805\u503c\u4e0d\u5408\uff0c\u56e0\u6b64\u8a2d\u5b9a\u5c07\u6703\u8ddf\u8457\u66f4\u65b0\u3002" - }, - "error": { - "cant_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u8a2d\u5099\u3002[\u8acb\u53c3\u8003\u8aaa\u660e\u6587\u4ef6](https://www.home-assistant.io/integrations/vizio/) \u4e26\u78ba\u8a8d\u4ee5\u4e0b\u9805\u76ee\uff1a\n- \u8a2d\u5099\u5df2\u958b\u6a5f\n- \u8a2d\u5099\u5df2\u9023\u7dda\u81f3\u7db2\u8def\n- \u586b\u5beb\u8cc7\u6599\u6b63\u78ba\n\u7136\u5f8c\u518d\u91cd\u65b0\u50b3\u9001\u3002", - "complete_pairing failed": "\u7121\u6cd5\u5b8c\u6210\u914d\u5c0d\uff0c\u50b3\u9001\u524d\u3001\u8acb\u78ba\u5b9a\u6240\u8f38\u5165\u7684 PIN \u78bc\u3001\u540c\u6642\u96fb\u8996\u5df2\u7d93\u958b\u555f\u4e26\u9023\u7dda\u81f3\u7db2\u8def\u3002", - "host_exists": "\u4f9d\u4e3b\u6a5f\u7aef\u4e4b Vizio \u5143\u4ef6\u8a2d\u5b9a\u5df2\u8a2d\u5b9a\u5b8c\u6210\u3002", - "name_exists": "\u4f9d\u540d\u7a31\u4e4b Vizio \u5143\u4ef6\u8a2d\u5b9a\u5df2\u8a2d\u5b9a\u5b8c\u6210\u3002" - }, - "step": { - "pair_tv": { - "data": { - "pin": "PIN" - }, - "description": "\u96fb\u8996\u4e0a\u61c9\u8a72\u6703\u986f\u793a\u4e00\u7d44\u4ee3\u78bc\u3002\u65bc\u8868\u683c\u4e2d\u8f38\u5165\u4ee3\u78bc\uff0c\u7136\u5f8c\u7e7c\u7e8c\u4e0b\u4e00\u6b65\u4ee5\u5b8c\u6210\u914d\u5c0d\u3002", - "title": "\u5b8c\u6210\u914d\u5c0d\u904e\u7a0b" - }, - "pairing_complete": { - "description": "Vizio SmartCast \u8a2d\u5099\u5df2\u7d93\u9023\u7dda\u81f3 Home Assistant\u3002", - "title": "\u914d\u5c0d\u5b8c\u6210" - }, - "pairing_complete_import": { - "description": "Vizio SmartCast TV \u8a2d\u5099\u5df2\u9023\u7dda\u81f3 Home Assistant\u3002\n\n\u5b58\u53d6\u5bc6\u9470\u70ba\u300c**{access_token}**\u300d\u3002", - "title": "\u914d\u5c0d\u5b8c\u6210" - }, - "user": { - "data": { - "access_token": "\u5b58\u53d6\u5bc6\u9470", - "device_class": "\u8a2d\u5099\u985e\u5225", - "host": "<\u4e3b\u6a5f\u7aef/IP>:", - "name": "\u540d\u7a31" - }, - "description": "\u6b64\u96fb\u8996\u50c5\u9700\u5b58\u53d6\u5bc6\u9470\u3002\u5047\u5982\u60a8\u6b63\u5728\u8a2d\u5b9a\u96fb\u8996\u3001\u5c1a\u672a\u53d6\u5f97\u5bc6\u9470\uff0c\u4fdd\u6301\u7a7a\u767d\u4ee5\u9032\u884c\u914d\u5c0d\u904e\u7a0b\u3002", - "title": "\u8a2d\u5b9a Vizio SmartCast \u8a2d\u5099" - } - }, - "title": "Vizio SmartCast" - }, - "options": { - "step": { - "init": { - "data": { - "apps_to_include_or_exclude": "\u6240\u8981\u5305\u542b\u6216\u6392\u9664\u7684 App", - "include_or_exclude": "\u5305\u542b\u6216\u6392\u9664 App\uff1f", - "volume_step": "\u97f3\u91cf\u5927\u5c0f" - }, - "description": "\u5047\u5982\u60a8\u64c1\u6709 Smart TV\u3001\u53ef\u7531\u4f86\u6e90\u5217\u8868\u4e2d\u9078\u64c7\u6240\u8981\u904e\u6ffe\u5305\u542b\u6216\u6392\u9664\u7684 App\u3002\u3002", - "title": "\u66f4\u65b0 Vizo SmartCast \u9078\u9805" - } - }, - "title": "\u66f4\u65b0 Vizo SmartCast \u9078\u9805" - } -} \ No newline at end of file diff --git a/homeassistant/components/vizio/const.py b/homeassistant/components/vizio/const.py index 795f12266fb..43cb993cec3 100644 --- a/homeassistant/components/vizio/const.py +++ b/homeassistant/components/vizio/const.py @@ -63,6 +63,9 @@ SUPPORTED_COMMANDS = { ), } +VIZIO_SOUND_MODE = "eq" +VIZIO_AUDIO_SETTINGS = "audio" + # Since Vizio component relies on device class, this dict will ensure that changes to # the values of DEVICE_CLASS_SPEAKER or DEVICE_CLASS_TV don't require changes to pyvizio. VIZIO_DEVICE_CLASSES = { diff --git a/homeassistant/components/vizio/manifest.json b/homeassistant/components/vizio/manifest.json index 02904bedbde..9c1f1960d74 100644 --- a/homeassistant/components/vizio/manifest.json +++ b/homeassistant/components/vizio/manifest.json @@ -2,7 +2,7 @@ "domain": "vizio", "name": "VIZIO SmartCast", "documentation": "https://www.home-assistant.io/integrations/vizio", - "requirements": ["pyvizio==0.1.46"], + "requirements": ["pyvizio==0.1.47"], "codeowners": ["@raman325"], "config_flow": true, "zeroconf": ["_viziocast._tcp.local."], diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index d463ebca36a..bb7ae3f75b0 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -9,6 +9,7 @@ from pyvizio.const import APP_HOME, APPS, INPUT_APPS, NO_APP_RUNNING, UNKNOWN_AP from homeassistant.components.media_player import ( DEVICE_CLASS_SPEAKER, + SUPPORT_SELECT_SOUND_MODE, MediaPlayerDevice, ) from homeassistant.config_entries import ConfigEntry @@ -41,7 +42,9 @@ from .const import ( DOMAIN, ICON, SUPPORTED_COMMANDS, + VIZIO_AUDIO_SETTINGS, VIZIO_DEVICE_CLASSES, + VIZIO_SOUND_MODE, ) _LOGGER = logging.getLogger(__name__) @@ -133,6 +136,8 @@ class VizioDevice(MediaPlayerDevice): self._current_input = None self._current_app = None self._current_app_config = None + self._current_sound_mode = None + self._available_sound_modes = None self._available_inputs = [] self._available_apps = [] self._conf_apps = config_entry.options.get(CONF_APPS, {}) @@ -191,17 +196,29 @@ class VizioDevice(MediaPlayerDevice): self._current_app = None self._current_app_config = None self._available_apps = None + self._current_sound_mode = None + self._available_sound_modes = None return self._state = STATE_ON - audio_settings = await self._device.get_all_audio_settings( - log_api_exception=False + audio_settings = await self._device.get_all_settings( + VIZIO_AUDIO_SETTINGS, log_api_exception=False ) if audio_settings is not None: self._volume_level = float(audio_settings["volume"]) / self._max_volume self._is_muted = audio_settings["mute"].lower() == "on" + if VIZIO_SOUND_MODE in audio_settings: + self._supported_commands |= SUPPORT_SELECT_SOUND_MODE + self._current_sound_mode = audio_settings[VIZIO_SOUND_MODE] + if self._available_sound_modes is None: + self._available_sound_modes = await self._device.get_setting_options( + VIZIO_AUDIO_SETTINGS, VIZIO_SOUND_MODE + ) + else: + self._supported_commands ^= SUPPORT_SELECT_SOUND_MODE + input_ = await self._device.get_current_input(log_api_exception=False) if input_ is not None: self._current_input = input_ @@ -367,7 +384,7 @@ class VizioDevice(MediaPlayerDevice): return self._config_entry.unique_id @property - def device_info(self): + def device_info(self) -> Dict[str, Any]: """Return device registry information.""" return { "identifiers": {(DOMAIN, self._config_entry.unique_id)}, @@ -378,10 +395,27 @@ class VizioDevice(MediaPlayerDevice): } @property - def device_class(self): + def device_class(self) -> str: """Return device class for entity.""" return self._device_class + @property + def sound_mode(self) -> Optional[str]: + """Name of the current sound mode.""" + return self._current_sound_mode + + @property + def sound_mode_list(self) -> Optional[List[str]]: + """List of available sound modes.""" + return self._available_sound_modes + + async def async_select_sound_mode(self, sound_mode): + """Select sound mode.""" + if sound_mode in self._available_sound_modes: + await self._device.set_setting( + VIZIO_AUDIO_SETTINGS, VIZIO_SOUND_MODE, sound_mode + ) + async def async_turn_on(self) -> None: """Turn the device on.""" await self._device.pow_on() diff --git a/homeassistant/components/vizio/strings.json b/homeassistant/components/vizio/strings.json index b6f6f53cf79..3a9766c207b 100644 --- a/homeassistant/components/vizio/strings.json +++ b/homeassistant/components/vizio/strings.json @@ -1,56 +1,52 @@ { - "config": { - "title": "Vizio SmartCast", - "step": { - "user": { - "title": "Setup Vizio SmartCast Device", - "description": "An Access Token is only needed for TVs. If you are configuring a TV and do not have an Access Token yet, leave it blank to go through a pairing process.", - "data": { - "name": "Name", - "host": ":", - "device_class": "Device Type", - "access_token": "Access Token" - } - }, - "pair_tv": { - "title": "Complete Pairing Process", - "description": "Your TV should be displaying a code. Enter that code into the form and then continue to the next step to complete the pairing.", - "data": { - "pin": "PIN" - } - }, - "pairing_complete": { - "title": "Pairing Complete", - "description": "Your Vizio SmartCast device is now connected to Home Assistant." - }, - "pairing_complete_import": { - "title": "Pairing Complete", - "description": "Your Vizio SmartCast TV is now connected to Home Assistant.\n\nYour Access Token is '**{access_token}**'." - } - }, - "error": { - "host_exists": "Vizio device with specified host already configured.", - "name_exists": "Vizio device with specified name already configured.", - "complete_pairing failed": "Unable to complete pairing. Ensure the PIN you provided is correct and the TV is still powered and connected to the network before resubmitting.", - "cant_connect": "Could not connect to the device. [Review the docs](https://www.home-assistant.io/integrations/vizio/) and re-verify that:\n- The device is powered on\n- The device is connected to the network\n- The values you filled in are accurate\nbefore attempting to resubmit." - }, - "abort": { - "already_setup": "This entry has already been setup.", - "updated_entry": "This entry has already been setup but the name, apps, and/or options defined in the configuration do not match the previously imported configuration, so the configuration entry has been updated accordingly." + "config": { + "step": { + "user": { + "title": "Setup VIZIO SmartCast Device", + "description": "An Access Token is only needed for TVs. If you are configuring a TV and do not have an Access Token yet, leave it blank to go through a pairing process.", + "data": { + "name": "Name", + "host": ":", + "device_class": "Device Type", + "access_token": "Access Token" } + }, + "pair_tv": { + "title": "Complete Pairing Process", + "description": "Your TV should be displaying a code. Enter that code into the form and then continue to the next step to complete the pairing.", + "data": { "pin": "PIN" } + }, + "pairing_complete": { + "title": "Pairing Complete", + "description": "Your VIZIO SmartCast device is now connected to Home Assistant." + }, + "pairing_complete_import": { + "title": "Pairing Complete", + "description": "Your VIZIO SmartCast TV is now connected to Home Assistant.\n\nYour Access Token is '**{access_token}**'." + } }, - "options": { - "title": "Update Vizo SmartCast Options", - "step": { - "init": { - "title": "Update Vizo SmartCast Options", - "description": "If you have a Smart TV, you can optionally filter your source list by choosing which apps to include or exclude in your source list.", - "data": { - "volume_step": "Volume Step Size", - "include_or_exclude": "Include or Exclude Apps?", - "apps_to_include_or_exclude": "Apps to Include or Exclude" - } - } - } + "error": { + "host_exists": "VIZIO device with specified host already configured.", + "name_exists": "VIZIO device with specified name already configured.", + "complete_pairing failed": "Unable to complete pairing. Ensure the PIN you provided is correct and the TV is still powered and connected to the network before resubmitting.", + "cant_connect": "Could not connect to the device. [Review the docs](https://www.home-assistant.io/integrations/vizio/) and re-verify that:\n- The device is powered on\n- The device is connected to the network\n- The values you filled in are accurate\nbefore attempting to resubmit." + }, + "abort": { + "already_setup": "This entry has already been setup.", + "updated_entry": "This entry has already been setup but the name, apps, and/or options defined in the configuration do not match the previously imported configuration, so the configuration entry has been updated accordingly." } + }, + "options": { + "step": { + "init": { + "title": "Update VIZIO SmartCast Options", + "description": "If you have a Smart TV, you can optionally filter your source list by choosing which apps to include or exclude in your source list.", + "data": { + "volume_step": "Volume Step Size", + "include_or_exclude": "Include or Exclude Apps?", + "apps_to_include_or_exclude": "Apps to Include or Exclude" + } + } + } + } } diff --git a/homeassistant/components/vizio/translations/ca.json b/homeassistant/components/vizio/translations/ca.json new file mode 100644 index 00000000000..b59346bcf42 --- /dev/null +++ b/homeassistant/components/vizio/translations/ca.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Aquesta entrada ja ha estat configurada.", + "updated_entry": "Aquesta entrada ja s'ha configurat per\u00f2 el nom i les opcions definides a la configuraci\u00f3 no coincideixen amb els valors importats anteriorment, en conseq\u00fc\u00e8ncia, s'han actualitzat." + }, + "error": { + "cant_connect": "No s'ha pogut connectar amb el dispositiu. [Comprova la documentaci\u00f3](https://www.home-assistant.io/integrations/vizio/) i torna a verificar que: \n - El dispositiu est\u00e0 engegat \n - El dispositiu est\u00e0 connectat a la xarxa \n - Els valors que has intridu\u00eft s\u00f3n correctes\n abans d\u2019intentar tornar a presentar.", + "complete_pairing failed": "No s'ha pogut completar l'emparellament. Verifica que el PIN proporcionat sigui el correcte i que el televisor segueix connectat a la xarxa abans de provar-ho de nou.", + "host_exists": "Dispositiu Vizio amb aquest nom d'amfitri\u00f3 ja configurat.", + "name_exists": "Dispositiu Vizio amb aquest nom ja configurat." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "El televisor hauria d'estar mostrant un codi. Introdueix aquest codi al formulari i segueix amb els seg\u00fcents passos per completar l'emparellament.", + "title": "Proc\u00e9s d'aparellament complet" + }, + "pairing_complete": { + "description": "El dispositiu Vizio SmartCast est\u00e0 connectat a Home Assistant.", + "title": "Emparellament completat" + }, + "pairing_complete_import": { + "description": "El dispositiu Vizio SmartCast est\u00e0 connectat a Home Assistant.\n\nEl teu testimoni d'acc\u00e9s (access token) \u00e9s '**{access_token}**'.", + "title": "Emparellament completat" + }, + "user": { + "data": { + "access_token": "Testimoni d'acc\u00e9s", + "device_class": "Tipus de dispositiu", + "host": ":", + "name": "Nom" + }, + "description": "Nom\u00e9s es necessita testimoni d'acc\u00e9s per als televisors. Si est\u00e0s configurant un televisor i encara no tens un testimoni d'acc\u00e9s, deixa-ho en blanc per poder fer el proc\u00e9s d'emparellament.", + "title": "Configuraci\u00f3 del client de Vizio SmartCast" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Aplicacions a incloure o excloure", + "include_or_exclude": "Incloure o excloure aplicacions?", + "volume_step": "Mida del pas de volum" + }, + "description": "Si tens una Smart TV, pots filtrar de manera opcional la teva llista de canals escollint quines aplicacions vols incloure o excloure de la llista.", + "title": "Actualitzaci\u00f3 de les opcions de Vizo SmartCast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/da.json b/homeassistant/components/vizio/translations/da.json new file mode 100644 index 00000000000..6de25c240de --- /dev/null +++ b/homeassistant/components/vizio/translations/da.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_setup": "Denne post er allerede blevet konfigureret.", + "updated_entry": "Denne post er allerede konfigureret, men navnet og/eller indstillingerne, der er defineret i konfigurationen, stemmer ikke overens med den tidligere importerede konfiguration, s\u00e5 konfigurationsposten er blevet opdateret i overensstemmelse hermed." + }, + "error": { + "cant_connect": "Kunne ikke oprette forbindelse til enheden. [Gennemg\u00e5 dokumentationen] (https://www.home-assistant.io/integrations/vizio/), og bekr\u00e6ft, at: \n - Enheden er t\u00e6ndt \n - Enheden er tilsluttet netv\u00e6rket \n - De angivne v\u00e6rdier er korrekte \n f\u00f8r du fors\u00f8ger at indsende igen.", + "host_exists": "Vizio-enhed med den specificerede v\u00e6rt er allerede konfigureret.", + "name_exists": "Vizio-enhed med det specificerede navn er allerede konfigureret." + }, + "step": { + "user": { + "data": { + "access_token": "Adgangstoken", + "device_class": "Enhedstype", + "host": ":", + "name": "Navn" + }, + "title": "Ops\u00e6t Vizio SmartCast-enhed" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "volume_step": "Lydstyrkestrinst\u00f8rrelse" + }, + "title": "Opdater Vizo SmartCast-indstillinger" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/de.json b/homeassistant/components/vizio/translations/de.json new file mode 100644 index 00000000000..b5e8a5acc60 --- /dev/null +++ b/homeassistant/components/vizio/translations/de.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Dieser Eintrag wurde bereits eingerichtet.", + "updated_entry": "Dieser Eintrag wurde bereits eingerichtet, aber der Name, die Apps und / oder die in der Konfiguration definierten Optionen stimmen nicht mit der zuvor importierten Konfiguration \u00fcberein, sodass der Konfigurationseintrag entsprechend aktualisiert wurde." + }, + "error": { + "cant_connect": "Es konnte keine Verbindung zum Ger\u00e4t hergestellt werden. [\u00dcberpr\u00fcfen Sie die Dokumentation] (https://www.home-assistant.io/integrations/vizio/) und \u00fcberpr\u00fcfen Sie Folgendes erneut:\n- Das Ger\u00e4t ist eingeschaltet\n- Das Ger\u00e4t ist mit dem Netzwerk verbunden\n- Die von Ihnen eingegebenen Werte sind korrekt\nbevor sie versuchen, erneut zu \u00fcbermitteln.", + "complete_pairing failed": "Das Pairing kann nicht abgeschlossen werden. Stellen Sie sicher, dass die von Ihnen angegebene PIN korrekt ist und das Fernsehger\u00e4t weiterhin mit Strom versorgt und mit dem Netzwerk verbunden ist, bevor Sie es erneut versuchen.", + "host_exists": "VIZIO-Ger\u00e4t mit angegebenem Host bereits konfiguriert.", + "name_exists": "VIZIO-Ger\u00e4t mit angegebenem Namen bereits konfiguriert." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "Ihr Fernseher sollte einen Code anzeigen. Geben Sie diesen Code in das Formular ein und fahren Sie mit dem n\u00e4chsten Schritt fort, um die Kopplung abzuschlie\u00dfen.", + "title": "Schlie\u00dfen Sie den Pairing-Prozess ab" + }, + "pairing_complete": { + "description": "Ihr VIZIO SmartCast-Ger\u00e4t ist jetzt mit Home Assistant verbunden.", + "title": "Kopplung abgeschlossen" + }, + "pairing_complete_import": { + "description": "Ihr VIZIO SmartCast-Fernseher ist jetzt mit Home Assistant verbunden. \n\n Ihr Zugriffstoken ist '**{access_token}**'.", + "title": "Kopplung abgeschlossen" + }, + "user": { + "data": { + "access_token": "Zugangstoken", + "device_class": "Ger\u00e4tetyp", + "host": ":", + "name": "Name" + }, + "description": "Ein Zugriffstoken wird nur f\u00fcr Fernsehger\u00e4te ben\u00f6tigt. Wenn Sie ein Fernsehger\u00e4t konfigurieren und noch kein Zugriffstoken haben, lassen Sie es leer, um einen Pairing-Vorgang durchzuf\u00fchren.", + "title": "Richten Sie das VIZIO SmartCast-Ger\u00e4t ein" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Apps zum Einschlie\u00dfen oder Ausschlie\u00dfen", + "include_or_exclude": "Apps einschlie\u00dfen oder ausschlie\u00dfen?", + "volume_step": "Lautst\u00e4rken-Schrittgr\u00f6\u00dfe" + }, + "description": "Wenn Sie \u00fcber ein Smart-TV-Ger\u00e4t verf\u00fcgen, k\u00f6nnen Sie Ihre Quellliste optional filtern, indem Sie ausw\u00e4hlen, welche Apps in Ihre Quellliste aufgenommen oder ausgeschlossen werden sollen.", + "title": "Aktualisieren Sie die VIZIO SmartCast-Optionen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/en.json b/homeassistant/components/vizio/translations/en.json new file mode 100644 index 00000000000..d160356cb07 --- /dev/null +++ b/homeassistant/components/vizio/translations/en.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "This entry has already been setup.", + "updated_entry": "This entry has already been setup but the name, apps, and/or options defined in the configuration do not match the previously imported configuration, so the configuration entry has been updated accordingly." + }, + "error": { + "cant_connect": "Could not connect to the device. [Review the docs](https://www.home-assistant.io/integrations/vizio/) and re-verify that:\n- The device is powered on\n- The device is connected to the network\n- The values you filled in are accurate\nbefore attempting to resubmit.", + "complete_pairing failed": "Unable to complete pairing. Ensure the PIN you provided is correct and the TV is still powered and connected to the network before resubmitting.", + "host_exists": "VIZIO device with specified host already configured.", + "name_exists": "VIZIO device with specified name already configured." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "Your TV should be displaying a code. Enter that code into the form and then continue to the next step to complete the pairing.", + "title": "Complete Pairing Process" + }, + "pairing_complete": { + "description": "Your VIZIO SmartCast device is now connected to Home Assistant.", + "title": "Pairing Complete" + }, + "pairing_complete_import": { + "description": "Your VIZIO SmartCast TV is now connected to Home Assistant.\n\nYour Access Token is '**{access_token}**'.", + "title": "Pairing Complete" + }, + "user": { + "data": { + "access_token": "Access Token", + "device_class": "Device Type", + "host": ":", + "name": "Name" + }, + "description": "An Access Token is only needed for TVs. If you are configuring a TV and do not have an Access Token yet, leave it blank to go through a pairing process.", + "title": "Setup VIZIO SmartCast Device" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Apps to Include or Exclude", + "include_or_exclude": "Include or Exclude Apps?", + "volume_step": "Volume Step Size" + }, + "description": "If you have a Smart TV, you can optionally filter your source list by choosing which apps to include or exclude in your source list.", + "title": "Update VIZIO SmartCast Options" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/es.json b/homeassistant/components/vizio/translations/es.json new file mode 100644 index 00000000000..f6cf42ebe99 --- /dev/null +++ b/homeassistant/components/vizio/translations/es.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Esta entrada ya ha sido configurada.", + "updated_entry": "Esta entrada ya ha sido configurada pero el nombre y/o las opciones definidas en la configuraci\u00f3n no coinciden con la configuraci\u00f3n previamente importada, por lo que la entrada de la configuraci\u00f3n ha sido actualizada en consecuencia." + }, + "error": { + "cant_connect": "No se pudo conectar al dispositivo. [Revise los documentos] (https://www.home-assistant.io/integrations/vizio/) y vuelva a verificar que:\n- El dispositivo est\u00e1 encendido\n- El dispositivo est\u00e1 conectado a la red\n- Los valores que ha rellenado son precisos\nantes de intentar volver a enviar.", + "complete_pairing failed": "No se pudo completar el emparejamiento. Aseg\u00farate de que el PIN que has proporcionado es correcto y que el televisor sigue encendido y conectado a la red antes de volver a enviarlo.", + "host_exists": "El host ya est\u00e1 configurado.", + "name_exists": "Nombre ya configurado." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "Tu TV debe estar mostrando un c\u00f3digo. Escribe ese c\u00f3digo en el formulario y contin\u00faa con el paso siguiente para completar el emparejamiento.", + "title": "Completar Proceso de Emparejamiento" + }, + "pairing_complete": { + "description": "Tu dispositivo Vizio SmartCast est\u00e1 ahora conectado a Home Assistant.", + "title": "Emparejamiento Completado" + }, + "pairing_complete_import": { + "description": "Su dispositivo Vizio SmartCast TV ahora est\u00e1 conectado a Home Assistant.\n\nEl Token de Acceso es '**{access_token}**'.", + "title": "Emparejamiento Completado" + }, + "user": { + "data": { + "access_token": "Token de acceso", + "device_class": "Tipo de dispositivo", + "host": "< Host / IP > : ", + "name": "Nombre" + }, + "description": "Todos los campos son obligatorios excepto el Token de Acceso. Si decides no proporcionar un Token de Acceso y tu Tipo de Dispositivo es \"tv\", se te llevar\u00e1 por un proceso de emparejamiento con tu dispositivo para que se pueda recuperar un Token de Acceso.\n\nPara pasar por el proceso de emparejamiento, antes de pulsar en Enviar, aseg\u00farese de que tu TV est\u00e9 encendida y conectada a la red. Tambi\u00e9n es necesario poder ver la pantalla.", + "title": "Configurar el cliente de Vizio SmartCast" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Aplicaciones para incluir o excluir", + "include_or_exclude": "\u00bfIncluir o excluir aplicaciones?", + "volume_step": "Tama\u00f1o del paso de volumen" + }, + "description": "Si tienes un Smart TV, opcionalmente puedes filtrar su lista de fuentes eligiendo qu\u00e9 aplicaciones incluir o excluir en su lista de fuentes.", + "title": "Actualizar las opciones de SmartCast de Vizo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/fr.json b/homeassistant/components/vizio/translations/fr.json new file mode 100644 index 00000000000..043a33734dc --- /dev/null +++ b/homeassistant/components/vizio/translations/fr.json @@ -0,0 +1,52 @@ +{ + "config": { + "abort": { + "already_setup": "Cette entr\u00e9e a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9e.", + "updated_entry": "Cette entr\u00e9e a d\u00e9j\u00e0 \u00e9t\u00e9 configur\u00e9e mais le nom et/ou les options d\u00e9finis dans la configuration ne correspondent pas \u00e0 la configuration pr\u00e9c\u00e9demment import\u00e9e, de sorte que l'entr\u00e9e de configuration a \u00e9t\u00e9 mise \u00e0 jour en cons\u00e9quence." + }, + "error": { + "cant_connect": "Impossible de se connecter \u00e0 l'appareil. [V\u00e9rifier les documents](https://www.home-assistant.io/integrations/vizio/) et rev\u00e9rifier que:\n- L'appareil est sous tension\n- L'appareil est connect\u00e9 au r\u00e9seau\n- Les valeurs que vous avez saisies sont exactes\navant d'essayer de le soumettre \u00e0 nouveau.", + "complete_pairing failed": "Impossible de terminer l'appariement. Assurez-vous que le code PIN que vous avez fourni est correct et que le t\u00e9l\u00e9viseur est toujours aliment\u00e9 et connect\u00e9 au r\u00e9seau avant de soumettre \u00e0 nouveau.", + "host_exists": "H\u00f4te d\u00e9j\u00e0 configur\u00e9.", + "name_exists": "Nom d\u00e9j\u00e0 configur\u00e9." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "title": "Processus de couplage complet" + }, + "pairing_complete": { + "description": "Votre appareil Vizio SmartCast est maintenant connect\u00e9 \u00e0 Home Assistant.", + "title": "Appairage termin\u00e9" + }, + "pairing_complete_import": { + "title": "Appairage termin\u00e9" + }, + "user": { + "data": { + "access_token": "Jeton d'acc\u00e8s", + "device_class": "Type d'appareil", + "host": ":", + "name": "Nom" + }, + "description": "Un jeton d'acc\u00e8s n'est n\u00e9cessaire que pour les t\u00e9l\u00e9viseurs. Si vous configurez un t\u00e9l\u00e9viseur et que vous n'avez pas encore de jeton d'acc\u00e8s, laissez-le vide pour passer par un processus de couplage.", + "title": "Configurer le client Vizio SmartCast" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Applications \u00e0 inclure ou \u00e0 exclure", + "include_or_exclude": "Inclure ou exclure des applications?", + "volume_step": "Taille du pas de volume" + }, + "description": "Si vous avez une Smart TV, vous pouvez \u00e9ventuellement filtrer votre liste de sources en choisissant les applications \u00e0 inclure ou \u00e0 exclure dans votre liste de sources.", + "title": "Mettre \u00e0 jour les options de Vizo SmartCast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/hu.json b/homeassistant/components/vizio/translations/hu.json new file mode 100644 index 00000000000..37ef8b3740f --- /dev/null +++ b/homeassistant/components/vizio/translations/hu.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_setup": "Ez a bejegyz\u00e9s m\u00e1r be van \u00e1ll\u00edtva.", + "updated_entry": "Ez a bejegyz\u00e9s m\u00e1r be van \u00e1ll\u00edtva, de a konfigur\u00e1ci\u00f3ban defini\u00e1lt n\u00e9v, appok \u00e9s/vagy be\u00e1ll\u00edt\u00e1sok nem egyeznek meg a kor\u00e1bban import\u00e1lt konfigur\u00e1ci\u00f3val, \u00edgy a konfigur\u00e1ci\u00f3s bejegyz\u00e9s ennek megfelel\u0151en friss\u00fclt." + }, + "error": { + "cant_connect": "Nem lehetett csatlakozni az eszk\u00f6zh\u00f6z. [Tekintsd \u00e1t a dokumentumokat] (https://www.home-assistant.io/integrations/vizio/) \u00e9s \u00fajra ellen\u0151rizd, hogy:\n- A k\u00e9sz\u00fcl\u00e9k be van kapcsolva\n- A k\u00e9sz\u00fcl\u00e9k csatlakozik a h\u00e1l\u00f3zathoz\n- A kit\u00f6lt\u00f6tt \u00e9rt\u00e9kek pontosak\nmiel\u0151tt \u00fajra elk\u00fclden\u00e9d.", + "host_exists": "A megadott kiszolg\u00e1l\u00f3n\u00e9vvel rendelkez\u0151 Vizio-eszk\u00f6z m\u00e1r konfigur\u00e1lva van.", + "name_exists": "A megadott n\u00e9vvel rendelkez\u0151 Vizio-eszk\u00f6z m\u00e1r konfigur\u00e1lva van." + }, + "step": { + "user": { + "data": { + "access_token": "Hozz\u00e1f\u00e9r\u00e9si token", + "device_class": "Eszk\u00f6zt\u00edpus", + "name": "N\u00e9v" + }, + "title": "A Vizio SmartCast Client be\u00e1ll\u00edt\u00e1sa" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "volume_step": "Hanger\u0151 l\u00e9p\u00e9s nagys\u00e1ga" + }, + "title": "Friss\u00edtse a Vizo SmartCast be\u00e1ll\u00edt\u00e1sokat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/it.json b/homeassistant/components/vizio/translations/it.json new file mode 100644 index 00000000000..3bfc872f0e4 --- /dev/null +++ b/homeassistant/components/vizio/translations/it.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Questa voce \u00e8 gi\u00e0 stata configurata.", + "updated_entry": "Questa voce \u00e8 gi\u00e0 stata configurata, ma il nome, le app e/o le opzioni definite nella configurazione non corrispondono alla configurazione importata in precedenza, pertanto la voce di configurazione \u00e8 stata aggiornata di conseguenza." + }, + "error": { + "cant_connect": "Impossibile connettersi al dispositivo. [Esamina i documenti] (https://www.home-assistant.io/integrations/vizio/) e verifica nuovamente che: \n - Il dispositivo sia acceso \n - Il dispositivo sia collegato alla rete \n - I valori inseriti siano corretti \n prima di ritentare.", + "complete_pairing failed": "Impossibile completare l'associazione. Assicurarsi che il PIN fornito sia corretto e che il televisore sia ancora alimentato e connesso alla rete prima di inviarlo di nuovo.", + "host_exists": "Dispositivo VIZIO con host specificato gi\u00e0 configurato.", + "name_exists": "Dispositivo VIZIO con il nome specificato gi\u00e0 configurato." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "La TV dovrebbe visualizzare un codice. Immettere quel codice nel modulo e quindi continuare con il passaggio successivo per completare l'associazione.", + "title": "Processo di associazione completo" + }, + "pairing_complete": { + "description": "Il dispositivo VIZIO SmartCast \u00e8 ora connesso a Home Assistant.", + "title": "Associazione completata" + }, + "pairing_complete_import": { + "description": "Il dispositivo VIZIO SmartCast TV \u00e8 ora connesso a Home Assistant. \n\nIl tuo Token di Accesso \u00e8 '**{access_token}**'.", + "title": "Associazione completata" + }, + "user": { + "data": { + "access_token": "Token di accesso", + "device_class": "Tipo di dispositivo", + "host": "< Host / IP >: ", + "name": "Nome" + }, + "description": "Un Token di Accesso \u00e8 necessario solo per i televisori. Se si sta configurando un televisore e non si dispone ancora di un Token di Accesso, lasciarlo vuoto per passare attraverso un processo di associazione.", + "title": "Configurazione del dispositivo SmartCast VIZIO" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "App da includere o escludere", + "include_or_exclude": "Includere o escludere app?", + "volume_step": "Dimensione del passo del volume" + }, + "description": "Se si dispone di una Smart TV, \u00e8 possibile filtrare l'elenco di origine scegliendo le app da includere o escludere in esso.", + "title": "Aggiornamento delle opzioni di VIZIO SmartCast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/ko.json b/homeassistant/components/vizio/translations/ko.json new file mode 100644 index 00000000000..16ad1884294 --- /dev/null +++ b/homeassistant/components/vizio/translations/ko.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "\uc774 \ud56d\ubaa9\uc740 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "updated_entry": "\uc774 \ud56d\ubaa9\uc740 \uc774\ubbf8 \uc124\uc815\ub418\uc5c8\uc9c0\ub9cc \uad6c\uc131\uc5d0 \uc815\uc758\ub41c \uc774\ub984, \uc571 \ud639\uc740 \uc635\uc158\uc774 \uc774\uc804\uc5d0 \uac00\uc838\uc628 \uad6c\uc131 \ub0b4\uc6a9\uacfc \uc77c\uce58\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uad6c\uc131 \ud56d\ubaa9\uc774 \uadf8\uc5d0 \ub530\ub77c \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cant_connect": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. [\uc548\ub0b4\ub97c \ucc38\uace0] (https://www.home-assistant.io/integrations/vizio/)\ud558\uace0 \uc591\uc2dd\uc744 \ub2e4\uc2dc \uc81c\ucd9c\ud558\uae30 \uc804\uc5d0 \ub2e4\uc74c\uc744 \ub2e4\uc2dc \ud655\uc778\ud574\uc8fc\uc138\uc694.\n- \uae30\uae30 \uc804\uc6d0\uc774 \ucf1c\uc838 \uc788\uc2b5\ub2c8\uae4c?\n- \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc2b5\ub2c8\uae4c?\n- \uc785\ub825\ud55c \ub0b4\uc6a9\uc774 \uc62c\ubc14\ub985\ub2c8\uae4c?", + "complete_pairing failed": "\ud398\uc5b4\ub9c1\uc744 \uc644\ub8cc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc785\ub825\ud55c PIN \uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud558\uace0 \ub2e4\uc74c \uacfc\uc815\uc744 \uc9c4\ud589\ud558\uae30 \uc804\uc5d0 TV \uc758 \uc804\uc6d0\uc774 \ucf1c\uc838 \uc788\uace0 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "host_exists": "\uc124\uc815\ub41c \ud638\uc2a4\ud2b8\uc758 Vizio \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "name_exists": "\uc124\uc815\ub41c \uc774\ub984\uc758 Vizio \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "TV \uc5d0 \ucf54\ub4dc\uac00 \ud45c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ucf54\ub4dc\ub97c \uc591\uc2dd\uc5d0 \uc785\ub825\ud55c \ud6c4 \ub2e4\uc74c \ub2e8\uacc4\ub97c \uacc4\uc18d\ud558\uc5ec \ud398\uc5b4\ub9c1\uc744 \uc644\ub8cc\ud574\uc8fc\uc138\uc694.", + "title": "\ud398\uc5b4\ub9c1 \uacfc\uc815 \uc644\ub8cc" + }, + "pairing_complete": { + "description": "Vizio SmartCast \uae30\uae30\uac00 Home Assistant \uc5d0 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "title": "\ud398\uc5b4\ub9c1 \uc644\ub8cc" + }, + "pairing_complete_import": { + "description": "Vizio SmartCast TV \uac00 Home Assistant \uc5d0 \uc5f0\uacb0\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \n\n\uc561\uc138\uc2a4 \ud1a0\ud070\uc740 '**{access_token}**' \uc785\ub2c8\ub2e4.", + "title": "\ud398\uc5b4\ub9c1 \uc644\ub8cc" + }, + "user": { + "data": { + "access_token": "\uc561\uc138\uc2a4 \ud1a0\ud070", + "device_class": "\uae30\uae30 \uc885\ub958", + "host": "<\ud638\uc2a4\ud2b8/ip>:", + "name": "\uc774\ub984" + }, + "description": "\uc561\uc138\uc2a4 \ud1a0\ud070\uc740 TV \uc5d0\ub9cc \ud544\uc694\ud569\ub2c8\ub2e4. TV \ub97c \uad6c\uc131\ud558\uace0 \uc788\uace0 \uc544\uc9c1 \uc561\uc138\uc2a4 \ud1a0\ud070\uc774 \uc5c6\ub294 \uacbd\uc6b0 \ud398\uc5b4\ub9c1 \uacfc\uc815\uc744 \uc9c4\ud589\ud558\ub824\uba74 \ube44\uc6cc\ub450\uc138\uc694.", + "title": "Vizio SmartCast \uae30\uae30 \uc124\uc815" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "\ud3ec\ud568 \ub610\ub294 \uc81c\uc678 \ud560 \uc571", + "include_or_exclude": "\uc571\uc744 \ud3ec\ud568 \ub610\ub294 \uc81c\uc678\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "volume_step": "\ubcfc\ub968 \ub2e8\uacc4 \ud06c\uae30" + }, + "description": "\uc2a4\ub9c8\ud2b8 TV \uac00 \uc788\ub294 \uacbd\uc6b0 \uc120\ud0dd\uc0ac\ud56d\uc73c\ub85c \uc18c\uc2a4 \ubaa9\ub85d\uc5d0 \ud3ec\ud568 \ub610\ub294 \uc81c\uc678\ud560 \uc571\uc744 \uc120\ud0dd\ud558\uc5ec \uc18c\uc2a4 \ubaa9\ub85d\uc744 \ud544\ud130\ub9c1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "title": "Vizo SmartCast \uc635\uc158 \uc5c5\ub370\uc774\ud2b8" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/lb.json b/homeassistant/components/vizio/translations/lb.json new file mode 100644 index 00000000000..48267a23126 --- /dev/null +++ b/homeassistant/components/vizio/translations/lb.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "D\u00ebs Entr\u00e9e ass scho konfigur\u00e9iert.", + "updated_entry": "D\u00ebs Entr\u00e9e ass scho konfigur\u00e9iert mee d\u00e9i defin\u00e9ierten Numm an/oder Optiounen an der Konfiguratioun st\u00ebmmen net mat deene virdrun import\u00e9ierten Optiounen iwwereneen, esou gouf d'Entr\u00e9e deementspriechend aktualis\u00e9iert." + }, + "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." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "Um TV sollt e Code ugewisen ginn. G\u00ebff d\u00ebse Code an d'Form a fuer weider mam n\u00e4chste Schr\u00ebtt fir d'Kopplung ofzeschl\u00e9issen.", + "title": "Kopplungs Prozess ofschl\u00e9issen" + }, + "pairing_complete": { + "description": "D\u00e4in VIZIO SmartCast Apparat ass elo mam Home Assistant verbonnen.", + "title": "Kopplung ofgeschloss" + }, + "pairing_complete_import": { + "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": { + "data": { + "access_token": "Acc\u00e8ss Jeton", + "device_class": "Typ vun Apparat", + "host": ":", + "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": "VIZIO Smartcast Apparat ariichten" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Apps fir mat abegr\u00e4ifen oder auszeschl\u00e9issen", + "include_or_exclude": "Apps mat abez\u00e9ien oder auschl\u00e9issen?", + "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": "VIZIO Smartcast Optiounen aktualis\u00e9ieren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/nl.json b/homeassistant/components/vizio/translations/nl.json new file mode 100644 index 00000000000..e1789347bf2 --- /dev/null +++ b/homeassistant/components/vizio/translations/nl.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_setup": "Dit item is al ingesteld.", + "updated_entry": "Dit item is al ingesteld, maar de naam en/of opties die zijn gedefinieerd in de configuratie komen niet overeen met de eerder ge\u00efmporteerde configuratie, dus het configuratie-item is dienovereenkomstig bijgewerkt." + }, + "error": { + "cant_connect": "Kan geen verbinding maken met het apparaat. [Bekijk de documenten] (https://www.home-assistant.io/integrations/vizio/) en controleer of:\n- Het apparaat is ingeschakeld\n- Het apparaat is aangesloten op het netwerk\n- De waarden die u ingevuld correct zijn\nvoordat u weer probeert om opnieuw in te dienen.", + "host_exists": "Vizio apparaat met opgegeven host al geconfigureerd.", + "name_exists": "Vizio apparaat met opgegeven naam al geconfigureerd." + }, + "step": { + "user": { + "data": { + "access_token": "Toegangstoken", + "device_class": "Apparaattype", + "host": ":", + "name": "Naam" + }, + "title": "Vizio SmartCast Client instellen" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "volume_step": "Volume Stapgrootte" + }, + "title": "Update Vizo SmartCast Opties" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/no.json b/homeassistant/components/vizio/translations/no.json new file mode 100644 index 00000000000..16a8c6c392e --- /dev/null +++ b/homeassistant/components/vizio/translations/no.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Denne oppf\u00f8ringen er allerede konfigurert.", + "updated_entry": "Dette innlegget har allerede v\u00e6rt oppsett, men navnet, apps, og/eller alternativer som er definert i konfigurasjon som ikke stemmer med det som tidligere er importert konfigurasjon, s\u00e5 konfigurasjonen innlegget har blitt oppdatert i henhold til dette." + }, + "error": { + "cant_connect": "Kunne ikke koble til enheten. [Se gjennom dokumentene] (https://www.home-assistant.io/integrations/vizio/) og bekreft at: \n - Enheten er sl\u00e5tt p\u00e5 \n - Enheten er koblet til nettverket \n - Verdiene du fylte ut er n\u00f8yaktige \n f\u00f8r du pr\u00f8ver \u00e5 sende inn p\u00e5 nytt.", + "complete_pairing failed": "Kan ikke fullf\u00f8re sammenkoblingen. Forsikre deg om at PIN-koden du oppga er riktig, og at TV-en fortsatt er p\u00e5 og tilkoblet nettverket f\u00f8r du sender inn p\u00e5 nytt.", + "host_exists": "VIZIO-enhet med spesifisert vert allerede konfigurert.", + "name_exists": "VIZIO-enhet med spesifisert navn allerede konfigurert." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "TVen skal vise en kode. Skriv inn denne koden i skjemaet, og fortsett deretter til neste trinn for \u00e5 fullf\u00f8re paringen.", + "title": "Fullf\u00f8r Sammenkoblings Prosessen" + }, + "pairing_complete": { + "description": "Din VIZIO SmartCast enheten er n\u00e5 koblet til Hjemme-Assistent.", + "title": "Sammenkoblingen Er Fullf\u00f8rt" + }, + "pairing_complete_import": { + "description": "VIZIO SmartCast TV er n\u00e5 koblet til Hjemmeassistent.\n\nTilgangstokenet er **{access_token}**.", + "title": "Sammenkoblingen Er Fullf\u00f8rt" + }, + "user": { + "data": { + "access_token": "Tilgangstoken", + "device_class": "Enhetstype", + "host": ":", + "name": "Navn" + }, + "description": "En tilgangstoken er bare n\u00f8dvendig for TV-er. Hvis du konfigurerer en TV og ikke har tilgangstoken enn\u00e5, m\u00e5 du la den st\u00e5 tom for \u00e5 g\u00e5 gjennom en sammenkoblingsprosess.", + "title": "Konfigurer VIZIO SmartCast-enhet" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Apper \u00e5 inkludere eller ekskludere", + "include_or_exclude": "Inkluder eller ekskludere apper?", + "volume_step": "St\u00f8rrelse p\u00e5 volum trinn" + }, + "description": "Hvis du har en Smart-TV, kan du eventuelt filtrere kildelisten ved \u00e5 velge hvilke apper som skal inkluderes eller utelates i kildelisten.", + "title": "Oppdater VIZIO SmartCast-alternativer" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/pl.json b/homeassistant/components/vizio/translations/pl.json new file mode 100644 index 00000000000..2d586bc3e36 --- /dev/null +++ b/homeassistant/components/vizio/translations/pl.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Ten komponent jest ju\u017c skonfigurowany.", + "updated_entry": "Ten wpis zosta\u0142 ju\u017c skonfigurowany, ale nazwa i/lub opcje zdefiniowane w konfiguracji nie pasuj\u0105 do wcze\u015bniej zaimportowanych warto\u015bci, wi\u0119c wpis konfiguracji zosta\u0142 odpowiednio zaktualizowany." + }, + "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." + }, + "step": { + "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": { + "data": { + "access_token": "Token dost\u0119pu", + "device_class": "Typ urz\u0105dzenia", + "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" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Aplikacje do do\u0142\u0105czenia lub wykluczenia", + "include_or_exclude": "Do\u0142\u0105czanie lub wykluczanie aplikacji", + "volume_step": "Skok g\u0142o\u015bno\u015bci" + }, + "description": "Je\u015bli telewizor obs\u0142uguje aplikacje, mo\u017cesz opcjonalnie filtrowa\u0107 aplikacje, kt\u00f3re maj\u0105 zosta\u0107 uwzgl\u0119dnione lub wykluczone z listy \u017ar\u00f3de\u0142. Mo\u017cesz pomin\u0105\u0107 ten krok dla telewizor\u00f3w, kt\u00f3re nie obs\u0142uguj\u0105 aplikacji.", + "title": "Aktualizacja opcji Vizo SmartCast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/pt.json b/homeassistant/components/vizio/translations/pt.json new file mode 100644 index 00000000000..286cd58dd89 --- /dev/null +++ b/homeassistant/components/vizio/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/ru.json b/homeassistant/components/vizio/translations/ru.json new file mode 100644 index 00000000000..62b75b4714a --- /dev/null +++ b/homeassistant/components/vizio/translations/ru.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "\u042d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430.", + "updated_entry": "\u042d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430, \u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u043d\u0435\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430." + }, + "error": { + "cant_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. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e:\n- \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e;\n- \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a \u0441\u0435\u0442\u0438;\n- \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u0432\u0435\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/integrations/vizio/) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.", + "complete_pairing failed": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0412\u0430\u043c\u0438 PIN-\u043a\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439, \u0430 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0441\u0435\u0442\u0438.", + "host_exists": "\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.", + "name_exists": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN-\u043a\u043e\u0434" + }, + "description": "\u0412\u0430\u0448 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043a\u043e\u0434. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0444\u043e\u0440\u043c\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435.", + "title": "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f" + }, + "pairing_complete": { + "description": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e VIZIO SmartCast \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Home Assistant.", + "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e" + }, + "pairing_complete_import": { + "description": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e VIZIO SmartCast TV \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a Home Assistant. \n\n\u0412\u0430\u0448 \u0442\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - '**{access_token}**'.", + "title": "\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e" + }, + "user": { + "data": { + "access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430", + "device_class": "\u0422\u0438\u043f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", + "host": "<\u0425\u043e\u0441\u0442/IP>:<\u041f\u043e\u0440\u0442>", + "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" + }, + "description": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0412\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0435 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0438 \u0443 \u0412\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f.", + "title": "VIZIO SmartCast" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439", + "include_or_exclude": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?", + "volume_step": "\u0428\u0430\u0433 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438" + }, + "description": "\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c Smart TV, \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VIZIO SmartCast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/.translations/sk.json b/homeassistant/components/vizio/translations/sk.json similarity index 100% rename from homeassistant/components/vizio/.translations/sk.json rename to homeassistant/components/vizio/translations/sk.json diff --git a/homeassistant/components/vizio/translations/sl.json b/homeassistant/components/vizio/translations/sl.json new file mode 100644 index 00000000000..e64c3b6cc86 --- /dev/null +++ b/homeassistant/components/vizio/translations/sl.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "Ta vnos je \u017ee nastavljen.", + "updated_entry": "Ta vnos je bil \u017ee nastavljen, vendar se ime, aplikacije in/ali mo\u017enosti, dolo\u010dene v konfiguraciji, ne ujemajo s predhodno uvo\u017eeno konfiguracijo, zato je bil konfiguracijski vnos ustrezno posodobljen." + }, + "error": { + "cant_connect": "Ni bilo mogo\u010de povezati z napravo. [Preglejte dokumente] (https://www.home-assistant.io/integrations/vizio/) in ponovno preverite, ali: \n \u2013 Naprava je vklopljena \n \u2013 Naprava je povezana z omre\u017ejem \n \u2013 Vrednosti, ki ste jih izpolnili, so to\u010dne \nnato poskusite ponovno.", + "complete_pairing failed": "Seznanjanja ni mogo\u010de dokon\u010dati. Zagotovite, da je PIN, ki ste ga vnesli, pravilen in da je televizor \u0161e vedno vklopljen in priklju\u010den na omre\u017eje, preden ponovno poizkusite.", + "host_exists": "Naprava Vizio z dolo\u010denim gostiteljem je \u017ee konfigurirana.", + "name_exists": "Naprava Vizio z navedenim imenom je \u017ee konfigurirana." + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "Va\u0161 TV naj bi prikazoval kodo. Vnesite to kodo v obrazec in nato nadaljujte z naslednjim korakom za dokon\u010danje zdru\u017eevanja.", + "title": "Dokon\u010dajte proces zdru\u017eevanja" + }, + "pairing_complete": { + "description": "Va\u0161a naprava Vizio SmartCast je zdaj povezana s Home Assistant-om.", + "title": "Seznanjanje je kon\u010dano" + }, + "pairing_complete_import": { + "description": "Va\u0161 VIZIO SmartCast TV je zdaj povezan s Home Assistant-om.\n\n\u017deton za dostop je '**{access_token}**'.", + "title": "Seznanjanje je kon\u010dano" + }, + "user": { + "data": { + "access_token": "\u017deton za dostop", + "device_class": "Vrsta naprave", + "host": ":", + "name": "Ime" + }, + "description": "Dostopni \u017eeton je potreben samo za televizorje. \u010ce konfigurirate televizor in \u0161e nimate \u017eetona za dostop, ga pustite prazno in boste \u0161li, da bo \u0161el skozi postopek seznanjanja.", + "title": "Nastavite napravo VIZIO SmartCast" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "Aplikacije za vklju\u010ditev ali izklju\u010ditev", + "include_or_exclude": "Vklju\u010di ali Izklju\u010di Aplikacije?", + "volume_step": "Velikost koraka glasnosti" + }, + "description": "\u010ce imate pametni TV, lahko po izbiri filtrirate seznam virov tako, da izberete, katere aplikacije \u017eelite vklju\u010diti ali izklju\u010diti na seznamu virov.", + "title": "Posodobite mo\u017enosti VIZIO SmartCast" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/sv.json b/homeassistant/components/vizio/translations/sv.json new file mode 100644 index 00000000000..5c5a25dd129 --- /dev/null +++ b/homeassistant/components/vizio/translations/sv.json @@ -0,0 +1,34 @@ +{ + "config": { + "abort": { + "already_setup": "Den h\u00e4r posten har redan st\u00e4llts in.", + "updated_entry": "Den h\u00e4r posten har redan konfigurerats, men namnet och/eller alternativen som definierats i konfigurationen matchar inte den tidigare importerade konfigurationen och d\u00e4rf\u00f6r har konfigureringsposten uppdaterats i enlighet med detta." + }, + "error": { + "cant_connect": "Det gick inte att ansluta till enheten. [Granska dokumentationen] (https://www.home-assistant.io/integrations/vizio/) och p\u00e5 nytt kontrollera att\n- Enheten \u00e4r p\u00e5slagen\n- Enheten \u00e4r ansluten till n\u00e4tverket\n- De v\u00e4rden du fyllt i \u00e4r korrekta\ninnan du f\u00f6rs\u00f6ker skicka in igen.", + "host_exists": "Vizio-enheten med angivet v\u00e4rdnamn \u00e4r redan konfigurerad.", + "name_exists": "Vizio-enheten med angivet namn \u00e4r redan konfigurerad." + }, + "step": { + "user": { + "data": { + "access_token": "\u00c5tkomstnyckel", + "device_class": "Enhetstyp", + "host": ":", + "name": "Namn" + }, + "title": "St\u00e4ll in Vizio SmartCast-klient" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "volume_step": "Storlek p\u00e5 volymsteg" + }, + "title": "Uppdatera Vizo SmartCast-alternativ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/zh-Hant.json b/homeassistant/components/vizio/translations/zh-Hant.json new file mode 100644 index 00000000000..db2f4ca9447 --- /dev/null +++ b/homeassistant/components/vizio/translations/zh-Hant.json @@ -0,0 +1,54 @@ +{ + "config": { + "abort": { + "already_setup": "\u6b64\u7269\u4ef6\u5df2\u8a2d\u5b9a\u904e\u3002", + "updated_entry": "\u6b64\u7269\u4ef6\u5df2\u7d93\u8a2d\u5b9a\uff0c\u4f46\u8a2d\u5b9a\u4e4b\u540d\u7a31\u3001App \u53ca/\u6216\u9078\u9805\u8207\u5148\u524d\u532f\u5165\u7684\u7269\u4ef6\u9078\u9805\u503c\u4e0d\u5408\uff0c\u56e0\u6b64\u8a2d\u5b9a\u5c07\u6703\u8ddf\u8457\u66f4\u65b0\u3002" + }, + "error": { + "cant_connect": "\u7121\u6cd5\u9023\u7dda\u81f3\u8a2d\u5099\u3002[\u8acb\u53c3\u8003\u8aaa\u660e\u6587\u4ef6](https://www.home-assistant.io/integrations/vizio/) \u4e26\u78ba\u8a8d\u4ee5\u4e0b\u9805\u76ee\uff1a\n- \u8a2d\u5099\u5df2\u958b\u6a5f\n- \u8a2d\u5099\u5df2\u9023\u7dda\u81f3\u7db2\u8def\n- \u586b\u5beb\u8cc7\u6599\u6b63\u78ba\n\u7136\u5f8c\u518d\u91cd\u65b0\u50b3\u9001\u3002", + "complete_pairing failed": "\u7121\u6cd5\u5b8c\u6210\u914d\u5c0d\uff0c\u50b3\u9001\u524d\u3001\u8acb\u78ba\u5b9a\u6240\u8f38\u5165\u7684 PIN \u78bc\u3001\u540c\u6642\u96fb\u8996\u5df2\u7d93\u958b\u555f\u4e26\u9023\u7dda\u81f3\u7db2\u8def\u3002", + "host_exists": "\u4f9d\u4e3b\u6a5f\u7aef\u4e4b VIZIO \u5143\u4ef6\u8a2d\u5b9a\u5df2\u8a2d\u5b9a\u5b8c\u6210\u3002", + "name_exists": "\u4f9d\u540d\u7a31\u4e4b VIZIO \u5143\u4ef6\u8a2d\u5b9a\u5df2\u8a2d\u5b9a\u5b8c\u6210\u3002" + }, + "step": { + "pair_tv": { + "data": { + "pin": "PIN" + }, + "description": "\u96fb\u8996\u4e0a\u61c9\u8a72\u6703\u986f\u793a\u4e00\u7d44\u4ee3\u78bc\u3002\u65bc\u8868\u683c\u4e2d\u8f38\u5165\u4ee3\u78bc\uff0c\u7136\u5f8c\u7e7c\u7e8c\u4e0b\u4e00\u6b65\u4ee5\u5b8c\u6210\u914d\u5c0d\u3002", + "title": "\u5b8c\u6210\u914d\u5c0d\u904e\u7a0b" + }, + "pairing_complete": { + "description": "VIZIO SmartCast \u8a2d\u5099\u5df2\u7d93\u9023\u7dda\u81f3 Home Assistant\u3002", + "title": "\u914d\u5c0d\u5b8c\u6210" + }, + "pairing_complete_import": { + "description": "VIZIO SmartCast TV \u8a2d\u5099\u5df2\u9023\u7dda\u81f3 Home Assistant\u3002\n\n\u5b58\u53d6\u5bc6\u9470\u70ba\u300c**{access_token}**\u300d\u3002", + "title": "\u914d\u5c0d\u5b8c\u6210" + }, + "user": { + "data": { + "access_token": "\u5b58\u53d6\u5bc6\u9470", + "device_class": "\u8a2d\u5099\u985e\u5225", + "host": "<\u4e3b\u6a5f\u7aef/IP>:", + "name": "\u540d\u7a31" + }, + "description": "\u6b64\u96fb\u8996\u50c5\u9700\u5b58\u53d6\u5bc6\u9470\u3002\u5047\u5982\u60a8\u6b63\u5728\u8a2d\u5b9a\u96fb\u8996\u3001\u5c1a\u672a\u53d6\u5f97\u5bc6\u9470\uff0c\u4fdd\u6301\u7a7a\u767d\u4ee5\u9032\u884c\u914d\u5c0d\u904e\u7a0b\u3002", + "title": "\u8a2d\u5b9a VIZIO SmartCast \u8a2d\u5099" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "apps_to_include_or_exclude": "\u6240\u8981\u5305\u542b\u6216\u6392\u9664\u7684 App", + "include_or_exclude": "\u5305\u542b\u6216\u6392\u9664 App\uff1f", + "volume_step": "\u97f3\u91cf\u5927\u5c0f" + }, + "description": "\u5047\u5982\u60a8\u64c1\u6709 Smart TV\u3001\u53ef\u7531\u4f86\u6e90\u5217\u8868\u4e2d\u9078\u64c7\u6240\u8981\u904e\u6ffe\u5305\u542b\u6216\u6392\u9664\u7684 App\u3002\u3002", + "title": "\u66f4\u65b0 VIZIO SmartCast \u9078\u9805" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vlc/manifest.json b/homeassistant/components/vlc/manifest.json index f9fbfeabb0d..6a79e542be2 100644 --- a/homeassistant/components/vlc/manifest.json +++ b/homeassistant/components/vlc/manifest.json @@ -3,6 +3,5 @@ "name": "VLC media player", "documentation": "https://www.home-assistant.io/integrations/vlc", "requirements": ["python-vlc==1.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/vlc_telnet/manifest.json b/homeassistant/components/vlc_telnet/manifest.json index fdc974878ec..f6e4aa04521 100644 --- a/homeassistant/components/vlc_telnet/manifest.json +++ b/homeassistant/components/vlc_telnet/manifest.json @@ -3,6 +3,5 @@ "name": "VLC media player Telnet", "documentation": "https://www.home-assistant.io/integrations/vlc-telnet", "requirements": ["python-telnet-vlc==1.0.4"], - "dependencies": [], "codeowners": ["@rodripf"] } diff --git a/homeassistant/components/voicerss/manifest.json b/homeassistant/components/voicerss/manifest.json index aef86267425..ff9d194a270 100644 --- a/homeassistant/components/voicerss/manifest.json +++ b/homeassistant/components/voicerss/manifest.json @@ -2,7 +2,5 @@ "domain": "voicerss", "name": "VoiceRSS", "documentation": "https://www.home-assistant.io/integrations/voicerss", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/voicerss/tts.py b/homeassistant/components/voicerss/tts.py index 9f87dabf94f..52a3f9f1b1c 100644 --- a/homeassistant/components/voicerss/tts.py +++ b/homeassistant/components/voicerss/tts.py @@ -7,7 +7,7 @@ import async_timeout import voluptuous as vol from homeassistant.components.tts import CONF_LANG, PLATFORM_SCHEMA, Provider -from homeassistant.const import CONF_API_KEY +from homeassistant.const import CONF_API_KEY, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -175,7 +175,7 @@ class VoiceRSSProvider(Provider): with async_timeout.timeout(10): request = await websession.post(VOICERSS_API_URL, data=form_data) - if request.status != 200: + if request.status != HTTP_OK: _LOGGER.error( "Error %d on load url %s.", request.status, request.url ) diff --git a/homeassistant/components/volkszaehler/manifest.json b/homeassistant/components/volkszaehler/manifest.json index dd361de5f96..0e28675ce87 100644 --- a/homeassistant/components/volkszaehler/manifest.json +++ b/homeassistant/components/volkszaehler/manifest.json @@ -3,6 +3,5 @@ "name": "Volkszaehler", "documentation": "https://www.home-assistant.io/integrations/volkszaehler", "requirements": ["volkszaehler==0.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/volumio/manifest.json b/homeassistant/components/volumio/manifest.json index a97c9d637ef..7fed8811600 100644 --- a/homeassistant/components/volumio/manifest.json +++ b/homeassistant/components/volumio/manifest.json @@ -2,7 +2,5 @@ "domain": "volumio", "name": "Volumio", "documentation": "https://www.home-assistant.io/integrations/volumio", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/volumio/media_player.py b/homeassistant/components/volumio/media_player.py index 90e62c0d951..6d46b6015e0 100644 --- a/homeassistant/components/volumio/media_player.py +++ b/homeassistant/components/volumio/media_player.py @@ -31,6 +31,7 @@ from homeassistant.const import ( CONF_HOST, CONF_NAME, CONF_PORT, + HTTP_OK, STATE_IDLE, STATE_PAUSED, STATE_PLAYING, @@ -79,7 +80,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Volumio platform.""" if DATA_VOLUMIO not in hass.data: - hass.data[DATA_VOLUMIO] = dict() + hass.data[DATA_VOLUMIO] = {} # This is a manual configuration? if discovery_info is None: @@ -127,7 +128,7 @@ class Volumio(MediaPlayerDevice): try: websession = async_get_clientsession(self.hass) response = await websession.get(url, params=params) - if response.status == 200: + if response.status == HTTP_OK: data = await response.json() else: _LOGGER.error( diff --git a/homeassistant/components/volvooncall/__init__.py b/homeassistant/components/volvooncall/__init__.py index c621a12943b..232ecf477f7 100644 --- a/homeassistant/components/volvooncall/__init__.py +++ b/homeassistant/components/volvooncall/__init__.py @@ -230,8 +230,10 @@ class VolvoEntity(Entity): async def async_added_to_hass(self): """Register update dispatcher.""" - async_dispatcher_connect( - self.hass, SIGNAL_STATE_UPDATED, self.async_schedule_update_ha_state + self.async_on_remove( + async_dispatcher_connect( + self.hass, SIGNAL_STATE_UPDATED, self.async_write_ha_state + ) ) @property @@ -279,3 +281,8 @@ class VolvoEntity(Entity): self.instrument.attributes, model=f"{self.vehicle.vehicle_type}/{self.vehicle.model_year}", ) + + @property + def unique_id(self) -> str: + """Return a unique ID.""" + return f"{self.vin}-{self.component}-{self.attribute}" diff --git a/homeassistant/components/volvooncall/manifest.json b/homeassistant/components/volvooncall/manifest.json index bc629eafaad..c16ad0e4858 100644 --- a/homeassistant/components/volvooncall/manifest.json +++ b/homeassistant/components/volvooncall/manifest.json @@ -3,6 +3,5 @@ "name": "Volvo On Call", "documentation": "https://www.home-assistant.io/integrations/volvooncall", "requirements": ["volvooncall==0.8.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/volvooncall/switch.py b/homeassistant/components/volvooncall/switch.py index 5beea91c7e3..da0f61c1d8f 100644 --- a/homeassistant/components/volvooncall/switch.py +++ b/homeassistant/components/volvooncall/switch.py @@ -26,7 +26,9 @@ class VolvoSwitch(VolvoEntity, ToggleEntity): async def async_turn_on(self, **kwargs): """Turn the switch on.""" await self.instrument.turn_on() + self.async_write_ha_state() async def async_turn_off(self, **kwargs): """Turn the switch off.""" await self.instrument.turn_off() + self.async_write_ha_state() diff --git a/homeassistant/components/vultr/manifest.json b/homeassistant/components/vultr/manifest.json index f9e9d8d2894..596e37c3545 100644 --- a/homeassistant/components/vultr/manifest.json +++ b/homeassistant/components/vultr/manifest.json @@ -3,6 +3,5 @@ "name": "Vultr", "documentation": "https://www.home-assistant.io/integrations/vultr", "requirements": ["vultr==0.1.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/w800rf32/binary_sensor.py b/homeassistant/components/w800rf32/binary_sensor.py index 9c83dbce804..16239e0c98c 100644 --- a/homeassistant/components/w800rf32/binary_sensor.py +++ b/homeassistant/components/w800rf32/binary_sensor.py @@ -130,7 +130,7 @@ class W800rf32BinarySensor(BinarySensorDevice): def update_state(self, state): """Update the state of the device.""" self._state = state - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Register update callback.""" diff --git a/homeassistant/components/w800rf32/manifest.json b/homeassistant/components/w800rf32/manifest.json index 5fe6cb70110..c93d25dcf46 100644 --- a/homeassistant/components/w800rf32/manifest.json +++ b/homeassistant/components/w800rf32/manifest.json @@ -3,6 +3,5 @@ "name": "WGL Designs W800RF32", "documentation": "https://www.home-assistant.io/integrations/w800rf32", "requirements": ["pyW800rf32==0.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wake_on_lan/manifest.json b/homeassistant/components/wake_on_lan/manifest.json index 526be2a33f2..c66f87ae26e 100644 --- a/homeassistant/components/wake_on_lan/manifest.json +++ b/homeassistant/components/wake_on_lan/manifest.json @@ -3,6 +3,5 @@ "name": "Wake on LAN", "documentation": "https://www.home-assistant.io/integrations/wake_on_lan", "requirements": ["wakeonlan==1.1.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wake_on_lan/services.yaml b/homeassistant/components/wake_on_lan/services.yaml index e20dd64396f..915dd2bce96 100644 --- a/homeassistant/components/wake_on_lan/services.yaml +++ b/homeassistant/components/wake_on_lan/services.yaml @@ -1,6 +1,9 @@ send_magic_packet: description: Send a 'magic packet' to wake up a device with 'Wake-On-LAN' capabilities. fields: - broadcast_address: {description: Optional broadcast IP where to send the magic - packet., example: 192.168.255.255} - mac: {description: MAC address of the device to wake up., example: 'aa:bb:cc:dd:ee:ff'} + broadcast_address: + description: Optional broadcast IP where to send the magic packet. + example: 192.168.255.255 + mac: + description: MAC address of the device to wake up. + example: "aa:bb:cc:dd:ee:ff" diff --git a/homeassistant/components/waqi/manifest.json b/homeassistant/components/waqi/manifest.json index 6d37030d1dd..947d0089f4b 100644 --- a/homeassistant/components/waqi/manifest.json +++ b/homeassistant/components/waqi/manifest.json @@ -3,6 +3,5 @@ "name": "World Air Quality Index (WAQI)", "documentation": "https://www.home-assistant.io/integrations/waqi", "requirements": ["waqiasync==1.0.0"], - "dependencies": [], "codeowners": ["@andrey-git"] } diff --git a/homeassistant/components/water_heater/manifest.json b/homeassistant/components/water_heater/manifest.json index 7b9adbda1f7..32221d46a7f 100644 --- a/homeassistant/components/water_heater/manifest.json +++ b/homeassistant/components/water_heater/manifest.json @@ -2,7 +2,5 @@ "domain": "water_heater", "name": "Water Heater", "documentation": "https://www.home-assistant.io/integrations/water_heater", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/water_heater/reproduce_state.py b/homeassistant/components/water_heater/reproduce_state.py index 2038b4c237b..77cdba93f96 100644 --- a/homeassistant/components/water_heater/reproduce_state.py +++ b/homeassistant/components/water_heater/reproduce_state.py @@ -1,7 +1,7 @@ """Reproduce an Water heater state.""" import asyncio import logging -from typing import Iterable, Optional +from typing import Any, Dict, Iterable, Optional from homeassistant.const import ( ATTR_ENTITY_ID, @@ -44,7 +44,11 @@ VALID_STATES = { async def _async_reproduce_state( - hass: HomeAssistantType, state: State, context: Optional[Context] = None + hass: HomeAssistantType, + state: State, + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a single state.""" cur_state = hass.states.get(state.entity_id) @@ -117,9 +121,18 @@ async def _async_reproduce_state( async def async_reproduce_states( - hass: HomeAssistantType, states: Iterable[State], context: Optional[Context] = None + hass: HomeAssistantType, + states: Iterable[State], + *, + context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce Water heater states.""" await asyncio.gather( - *(_async_reproduce_state(hass, state, context) for state in states) + *( + _async_reproduce_state( + hass, state, context=context, reproduce_options=reproduce_options + ) + for state in states + ) ) diff --git a/homeassistant/components/water_heater/services.yaml b/homeassistant/components/water_heater/services.yaml index 7a26e5bc0d4..8aee796b9cb 100644 --- a/homeassistant/components/water_heater/services.yaml +++ b/homeassistant/components/water_heater/services.yaml @@ -5,7 +5,7 @@ set_away_mode: fields: entity_id: description: Name(s) of entities to change. - example: 'water_heater.water_heater' + example: "water_heater.water_heater" away_mode: description: New value of away mode. example: true @@ -15,7 +15,7 @@ set_temperature: fields: entity_id: description: Name(s) of entities to change. - example: 'water_heater.water_heater' + example: "water_heater.water_heater" temperature: description: New target temperature for water heater. example: 25 @@ -25,7 +25,7 @@ set_operation_mode: fields: entity_id: description: Name(s) of entities to change. - example: 'water_heater.water_heater' + example: "water_heater.water_heater" operation_mode: description: New value of operation mode. example: eco diff --git a/homeassistant/components/waterfurnace/__init__.py b/homeassistant/components/waterfurnace/__init__.py index 942ab8a14ac..2ec77e35070 100644 --- a/homeassistant/components/waterfurnace/__init__.py +++ b/homeassistant/components/waterfurnace/__init__.py @@ -14,7 +14,7 @@ from homeassistant.helpers import config_validation as cv, discovery _LOGGER = logging.getLogger(__name__) DOMAIN = "waterfurnace" -UPDATE_TOPIC = DOMAIN + "_update" +UPDATE_TOPIC = f"{DOMAIN}_update" SCAN_INTERVAL = timedelta(seconds=10) ERROR_INTERVAL = timedelta(seconds=300) MAX_FAILS = 10 diff --git a/homeassistant/components/waterfurnace/manifest.json b/homeassistant/components/waterfurnace/manifest.json index 05a38f57892..6ccd2382db9 100644 --- a/homeassistant/components/waterfurnace/manifest.json +++ b/homeassistant/components/waterfurnace/manifest.json @@ -3,6 +3,5 @@ "name": "WaterFurnace", "documentation": "https://www.home-assistant.io/integrations/waterfurnace", "requirements": ["waterfurnace==1.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/waterfurnace/sensor.py b/homeassistant/components/waterfurnace/sensor.py index e2c92d07f9c..9378694f5f3 100644 --- a/homeassistant/components/waterfurnace/sensor.py +++ b/homeassistant/components/waterfurnace/sensor.py @@ -1,7 +1,7 @@ """Support for Waterfurnace.""" from homeassistant.components.sensor import ENTITY_ID_FORMAT -from homeassistant.const import TEMP_FAHRENHEIT, UNIT_PERCENTAGE +from homeassistant.const import POWER_WATT, TEMP_FAHRENHEIT, UNIT_PERCENTAGE from homeassistant.core import callback from homeassistant.helpers.entity import Entity from homeassistant.util import slugify @@ -24,7 +24,7 @@ class WFSensorConfig: SENSORS = [ WFSensorConfig("Furnace Mode", "mode"), - WFSensorConfig("Total Power", "totalunitpower", "mdi:flash", "W"), + WFSensorConfig("Total Power", "totalunitpower", "mdi:flash", POWER_WATT), WFSensorConfig( "Active Setpoint", "tstatactivesetpoint", "mdi:thermometer", TEMP_FAHRENHEIT ), @@ -39,10 +39,10 @@ SENSORS = [ WFSensorConfig( "Humidity", "tstatrelativehumidity", "mdi:water-percent", UNIT_PERCENTAGE ), - WFSensorConfig("Compressor Power", "compressorpower", "mdi:flash", "W"), - WFSensorConfig("Fan Power", "fanpower", "mdi:flash", "W"), - WFSensorConfig("Aux Power", "auxpower", "mdi:flash", "W"), - WFSensorConfig("Loop Pump Power", "looppumppower", "mdi:flash", "W"), + WFSensorConfig("Compressor Power", "compressorpower", "mdi:flash", POWER_WATT), + WFSensorConfig("Fan Power", "fanpower", "mdi:flash", POWER_WATT), + WFSensorConfig("Aux Power", "auxpower", "mdi:flash", POWER_WATT), + WFSensorConfig("Loop Pump Power", "looppumppower", "mdi:flash", POWER_WATT), WFSensorConfig("Compressor Speed", "actualcompressorspeed", "mdi:speedometer"), WFSensorConfig("Fan Speed", "airflowcurrentspeed", "mdi:fan"), ] @@ -105,8 +105,10 @@ class WaterFurnaceSensor(Entity): async def async_added_to_hass(self): """Register callbacks.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - UPDATE_TOPIC, self.async_update_callback + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + UPDATE_TOPIC, self.async_update_callback + ) ) @callback @@ -114,4 +116,4 @@ class WaterFurnaceSensor(Entity): """Update state.""" if self.client.data is not None: self._state = getattr(self.client.data, self._attr, None) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/watson_iot/__init__.py b/homeassistant/components/watson_iot/__init__.py index adc05893fde..b0500806b84 100644 --- a/homeassistant/components/watson_iot/__init__.py +++ b/homeassistant/components/watson_iot/__init__.py @@ -208,7 +208,7 @@ class WatsonIOTThread(threading.Thread): _LOGGER.error("Failed to publish message to Watson IoT") continue break - except (MissingMessageEncoderException, IOError): + except (MissingMessageEncoderException, OSError): if retry < MAX_TRIES: time.sleep(RETRY_DELAY) else: diff --git a/homeassistant/components/watson_iot/manifest.json b/homeassistant/components/watson_iot/manifest.json index d12c40e4def..f735b4007e1 100644 --- a/homeassistant/components/watson_iot/manifest.json +++ b/homeassistant/components/watson_iot/manifest.json @@ -3,6 +3,5 @@ "name": "IBM Watson IoT Platform", "documentation": "https://www.home-assistant.io/integrations/watson_iot", "requirements": ["ibmiotf==0.3.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/watson_tts/manifest.json b/homeassistant/components/watson_tts/manifest.json index c1d708a20f9..78d5613e16d 100644 --- a/homeassistant/components/watson_tts/manifest.json +++ b/homeassistant/components/watson_tts/manifest.json @@ -3,6 +3,5 @@ "name": "IBM Watson TTS", "documentation": "https://www.home-assistant.io/integrations/watson_tts", "requirements": ["ibm-watson==4.0.1"], - "dependencies": [], "codeowners": ["@rutkai"] } diff --git a/homeassistant/components/waze_travel_time/manifest.json b/homeassistant/components/waze_travel_time/manifest.json index b34c4f88191..907013ac362 100644 --- a/homeassistant/components/waze_travel_time/manifest.json +++ b/homeassistant/components/waze_travel_time/manifest.json @@ -3,6 +3,5 @@ "name": "Waze Travel Time", "documentation": "https://www.home-assistant.io/integrations/waze_travel_time", "requirements": ["WazeRouteCalculator==0.12"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/weather/manifest.json b/homeassistant/components/weather/manifest.json index 4e6290a8c69..c77e8408c83 100644 --- a/homeassistant/components/weather/manifest.json +++ b/homeassistant/components/weather/manifest.json @@ -2,8 +2,6 @@ "domain": "weather", "name": "Weather", "documentation": "https://www.home-assistant.io/integrations/weather", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/weather/strings.json b/homeassistant/components/weather/strings.json new file mode 100644 index 00000000000..c4764beb5b6 --- /dev/null +++ b/homeassistant/components/weather/strings.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Clear, night", + "cloudy": "Cloudy", + "exceptional": "Exceptional", + "fog": "Fog", + "hail": "Hail", + "lightning": "Lightning", + "lightning-rainy": "Lightning, rainy", + "partlycloudy": "Partly cloudy", + "pouring": "Pouring", + "rainy": "Rainy", + "snowy": "Snowy", + "snowy-rainy": "Snowy, rainy", + "sunny": "Sunny", + "windy": "Windy", + "windy-variant": "Windy" + } + } +} diff --git a/homeassistant/components/weather/translations/af.json b/homeassistant/components/weather/translations/af.json new file mode 100644 index 00000000000..3a8867fb55d --- /dev/null +++ b/homeassistant/components/weather/translations/af.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "Helder, nag", + "cloudy": "Bewolk", + "fog": "Mis", + "hail": "Hael", + "lightning": "Weerlig", + "lightning-rainy": "Weerlig, Re\u00ebnagtig", + "partlycloudy": "Gedeeltelik bewolk", + "pouring": "Stort", + "rainy": "Re\u00ebnagtig", + "snowy": "Sneeuagtig", + "snowy-rainy": "Ysre\u00ebn", + "sunny": "Sonnig", + "windy": "Winderig", + "windy-variant": "Winderig" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/ar.json b/homeassistant/components/weather/translations/ar.json new file mode 100644 index 00000000000..c6e2e316556 --- /dev/null +++ b/homeassistant/components/weather/translations/ar.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "cloudy": "Bewolkt", + "fog": "Mist", + "sunny": "\u0645\u0634\u0645\u0633" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/bg.json b/homeassistant/components/weather/translations/bg.json new file mode 100644 index 00000000000..19b9810cfa7 --- /dev/null +++ b/homeassistant/components/weather/translations/bg.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u042f\u0441\u043d\u043e, \u043d\u043e\u0449", + "cloudy": "\u041e\u0431\u043b\u0430\u0447\u043d\u043e", + "exceptional": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u043d\u043e", + "fog": "\u041c\u044a\u0433\u043b\u0430", + "hail": "\u0413\u0440\u0430\u0434\u0443\u0448\u043a\u0430", + "lightning": "\u0421\u0432\u0435\u0442\u043a\u0430\u0432\u0438\u0446\u0430", + "lightning-rainy": "\u0421\u0432\u0435\u0442\u043a\u0430\u0432\u0438\u0446\u0430, \u0434\u044a\u0436\u0434\u043e\u0432\u043d\u043e", + "partlycloudy": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0441\u0442", + "pouring": "\u041e\u0431\u0438\u043b\u0435\u043d \u0434\u044a\u0436\u0434", + "rainy": "\u0414\u044a\u0436\u0434\u043e\u0432\u043d\u043e", + "snowy": "\u0421\u043d\u0435\u0436\u043d\u043e", + "snowy-rainy": "\u0421\u043d\u0435\u0436\u043d\u043e, \u0434\u044a\u0436\u0434\u043e\u0432\u043d\u043e", + "sunny": "\u0421\u043b\u044a\u043d\u0447\u0435\u0432\u043e", + "windy": "\u0412\u0435\u0442\u0440\u043e\u0432\u0438\u0442\u043e", + "windy-variant": "\u0412\u0435\u0442\u0440\u043e\u0432\u0438\u0442\u043e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/ca.json b/homeassistant/components/weather/translations/ca.json new file mode 100644 index 00000000000..b4ff9c51df1 --- /dev/null +++ b/homeassistant/components/weather/translations/ca.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Ser\u00e8, nit", + "cloudy": "Ennuvolat", + "exceptional": "Excepcional", + "fog": "Boira", + "hail": "Calamarsa", + "lightning": "Llamps", + "lightning-rainy": "Tempesta", + "partlycloudy": "Parcialment ennuvolat", + "pouring": "Pluja", + "rainy": "Pluj\u00f3s", + "snowy": "Neu", + "snowy-rainy": "Aiguaneu", + "sunny": "Assolellat", + "windy": "Vent\u00f3s", + "windy-variant": "Vent\u00f3s" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/cs.json b/homeassistant/components/weather/translations/cs.json new file mode 100644 index 00000000000..2f5d27ef78b --- /dev/null +++ b/homeassistant/components/weather/translations/cs.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Jasn\u00e1 noc", + "cloudy": "Zata\u017eeno", + "exceptional": "Vyj\u00edme\u010dn\u00e9", + "fog": "Mlha", + "hail": "Krupobit\u00ed", + "lightning": "Bou\u0159e", + "lightning-rainy": "Bou\u0159e a d\u00e9\u0161\u0165", + "partlycloudy": "Polojasno", + "pouring": "Lij\u00e1k", + "rainy": "D\u00e9\u0161\u0165", + "snowy": "Sn\u00edh", + "snowy-rainy": "D\u00e9\u0161\u0165 se sn\u011bhem", + "sunny": "Slune\u010dno", + "windy": "V\u011btrno", + "windy-variant": "V\u011btrno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/cy.json b/homeassistant/components/weather/translations/cy.json new file mode 100644 index 00000000000..dc4c7e5d9d1 --- /dev/null +++ b/homeassistant/components/weather/translations/cy.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "Clir, nos", + "cloudy": "Cymylog", + "fog": "Niwl", + "hail": "Cenllysg", + "lightning": "Mellt", + "lightning-rainy": "Mellt, glawog", + "partlycloudy": "Cymharol gymylog", + "pouring": "Arllwys", + "rainy": "Glawog", + "snowy": "Eira", + "snowy-rainy": "Eira, gwlyb", + "sunny": "Heulog", + "windy": "Gwyntog", + "windy-variant": "Gwyntog" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/da.json b/homeassistant/components/weather/translations/da.json new file mode 100644 index 00000000000..6b4ff1a38bf --- /dev/null +++ b/homeassistant/components/weather/translations/da.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Klart, nat", + "cloudy": "Overskyet", + "exceptional": "Enest\u00e5ende", + "fog": "T\u00e5ge", + "hail": "Hagl", + "lightning": "Lyn", + "lightning-rainy": "Lyn, regnvejr", + "partlycloudy": "Delvist overskyet", + "pouring": "Regnvejr", + "rainy": "Regnfuldt", + "snowy": "Sne", + "snowy-rainy": "Sne, regn", + "sunny": "Solrig", + "windy": "Bl\u00e6sende", + "windy-variant": "Bl\u00e6sende" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/de.json b/homeassistant/components/weather/translations/de.json new file mode 100644 index 00000000000..123cae340ab --- /dev/null +++ b/homeassistant/components/weather/translations/de.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Klare Nacht", + "cloudy": "Bew\u00f6lkt", + "exceptional": "Au\u00dfergew\u00f6hnlich", + "fog": "Nebel", + "hail": "Hagel", + "lightning": "Gewitter", + "lightning-rainy": "Gewitter, regnerisch", + "partlycloudy": "Teilweise bew\u00f6lkt", + "pouring": "Str\u00f6mend", + "rainy": "Regnerisch", + "snowy": "Verschneit", + "snowy-rainy": "Verschneit, regnerisch", + "sunny": "Sonnig", + "windy": "Windig", + "windy-variant": "Windig" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/el.json b/homeassistant/components/weather/translations/el.json new file mode 100644 index 00000000000..9127056dc1d --- /dev/null +++ b/homeassistant/components/weather/translations/el.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u039e\u03b1\u03c3\u03c4\u03b5\u03c1\u03b9\u03ac, \u03bd\u03cd\u03c7\u03c4\u03b1", + "cloudy": "\u039d\u03b5\u03c6\u03b5\u03bb\u03ce\u03b4\u03b7\u03c2", + "exceptional": "\u0395\u03be\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc", + "fog": "\u039f\u03bc\u03af\u03c7\u03bb\u03b7", + "hail": "\u03a7\u03b1\u03bb\u03ac\u03b6\u03b9", + "lightning": "\u0391\u03c3\u03c4\u03c1\u03b1\u03c0\u03ae", + "lightning-rainy": "\u039a\u03b1\u03c4\u03b1\u03b9\u03b3\u03af\u03b4\u03b1, \u03b2\u03c1\u03bf\u03c7\u03b5\u03c1\u03cc", + "partlycloudy": "\u039c\u03b5\u03c1\u03b9\u03ba\u03ce\u03c2 \u03bd\u03b5\u03c6\u03b5\u03bb\u03ce\u03b4\u03b7\u03c2", + "pouring": "\u03a8\u03b9\u03c7\u03b1\u03bb\u03af\u03b6\u03b5\u03b9", + "rainy": "\u0392\u03c1\u03bf\u03c7\u03b5\u03c1\u03ae", + "snowy": "\u03a7\u03b9\u03bf\u03bd\u03ce\u03b4\u03b7\u03c2", + "snowy-rainy": "\u03a7\u03b9\u03bf\u03bd\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf, \u03b2\u03c1\u03bf\u03c7\u03b5\u03c1\u03cc", + "sunny": "\u0397\u03bb\u03b9\u03cc\u03bb\u03bf\u03c5\u03c3\u03c4\u03bf", + "windy": "\u0398\u03c5\u03b5\u03bb\u03bb\u03ce\u03b4\u03b5\u03b9\u03c2", + "windy-variant": "\u0398\u03c5\u03b5\u03bb\u03bb\u03ce\u03b4\u03b5\u03b9\u03c2" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/en.json b/homeassistant/components/weather/translations/en.json new file mode 100644 index 00000000000..6bdca306d93 --- /dev/null +++ b/homeassistant/components/weather/translations/en.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Clear, night", + "cloudy": "Cloudy", + "exceptional": "Exceptional", + "fog": "Fog", + "hail": "Hail", + "lightning": "Lightning", + "lightning-rainy": "Lightning, rainy", + "partlycloudy": "Partly cloudy", + "pouring": "Pouring", + "rainy": "Rainy", + "snowy": "Snowy", + "snowy-rainy": "Snowy, rainy", + "sunny": "Sunny", + "windy": "Windy", + "windy-variant": "Windy" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/es-419.json b/homeassistant/components/weather/translations/es-419.json new file mode 100644 index 00000000000..2457f68cf92 --- /dev/null +++ b/homeassistant/components/weather/translations/es-419.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Despejado, de noche", + "cloudy": "Nublado", + "exceptional": "Excepcional", + "fog": "Niebla", + "hail": "Granizo", + "lightning": "Rel\u00e1mpagos", + "lightning-rainy": "Rel\u00e1mpagos, lluvioso", + "partlycloudy": "Parcialmente nublado", + "pouring": "Torrencial", + "rainy": "Lluvioso", + "snowy": "Nevado", + "snowy-rainy": "Nevado, lluvioso", + "sunny": "Soleado", + "windy": "Ventoso", + "windy-variant": "Ventoso" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/es.json b/homeassistant/components/weather/translations/es.json new file mode 100644 index 00000000000..2457f68cf92 --- /dev/null +++ b/homeassistant/components/weather/translations/es.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Despejado, de noche", + "cloudy": "Nublado", + "exceptional": "Excepcional", + "fog": "Niebla", + "hail": "Granizo", + "lightning": "Rel\u00e1mpagos", + "lightning-rainy": "Rel\u00e1mpagos, lluvioso", + "partlycloudy": "Parcialmente nublado", + "pouring": "Torrencial", + "rainy": "Lluvioso", + "snowy": "Nevado", + "snowy-rainy": "Nevado, lluvioso", + "sunny": "Soleado", + "windy": "Ventoso", + "windy-variant": "Ventoso" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/et.json b/homeassistant/components/weather/translations/et.json new file mode 100644 index 00000000000..f035d37d62e --- /dev/null +++ b/homeassistant/components/weather/translations/et.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Selge \u00f6\u00f6", + "cloudy": "Pilves", + "exceptional": "Erakordne", + "fog": "Udu", + "hail": "Rahe", + "lightning": "\u00c4ikeseline", + "lightning-rainy": "\u00c4ikeseline, vihmane", + "partlycloudy": "Osaliselt pilves", + "pouring": "Kallab", + "rainy": "Vihmane", + "snowy": "Lumine", + "snowy-rainy": "L\u00f6rtsine", + "sunny": "P\u00e4ikeseline", + "windy": "Tuuline", + "windy-variant": "Tuuline" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/eu.json b/homeassistant/components/weather/translations/eu.json new file mode 100644 index 00000000000..cd31176ae01 --- /dev/null +++ b/homeassistant/components/weather/translations/eu.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "Garbia, gaua", + "cloudy": "Hodeitsua", + "fog": "Lainoa", + "hail": "Txingorra", + "lightning": "Tximistak", + "lightning-rainy": "Tximistak, euritsua", + "partlycloudy": "Ostarteak", + "pouring": "Botatzen", + "rainy": "Euritsua", + "snowy": "Elurtsua", + "snowy-rainy": "Elurtsua, euritsua", + "sunny": "Eguzkitsua", + "windy": "Haizetsua", + "windy-variant": "Haizetsua" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/fa.json b/homeassistant/components/weather/translations/fa.json new file mode 100644 index 00000000000..57316a642ef --- /dev/null +++ b/homeassistant/components/weather/translations/fa.json @@ -0,0 +1,18 @@ +{ + "state": { + "_": { + "cloudy": "\u0627\u0628\u0631\u06cc", + "fog": "\u0645\u0647", + "hail": "\u062a\u06af\u0631\u06af", + "lightning": "\u0631\u0639\u062f \u0648 \u0628\u0631\u0642", + "partlycloudy": "\u0646\u06cc\u0645\u0647 \u0627\u0628\u0631\u06cc", + "pouring": "\u0631\u06cc\u062e\u062a\u0646", + "rainy": "\u0628\u0627\u0631\u0627\u0646\u06cc", + "snowy": "\u0628\u0631\u0641\u06cc", + "snowy-rainy": "\u0628\u0631\u0641\u06cc\u060c \u0628\u0627\u0631\u0627\u0646\u06cc", + "sunny": "\u0622\u0641\u062a\u0627\u0628\u06cc", + "windy": "\u0628\u0627\u062f", + "windy-variant": "\u0628\u0627\u062f" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/fi.json b/homeassistant/components/weather/translations/fi.json new file mode 100644 index 00000000000..772fd263d8b --- /dev/null +++ b/homeassistant/components/weather/translations/fi.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Y\u00f6, selke\u00e4\u00e4", + "cloudy": "Pilvist\u00e4", + "exceptional": "Poikkeuksellinen", + "fog": "Sumuista", + "hail": "Raekuuroja", + "lightning": "Ukkoskuuroja", + "lightning-rainy": "Ukkosvaara, sateista", + "partlycloudy": "Osittain pilvist\u00e4", + "pouring": "Kaatosadetta", + "rainy": "Sateista", + "snowy": "Lumisadetta", + "snowy-rainy": "R\u00e4nt\u00e4sadetta", + "sunny": "Aurinkoista", + "windy": "Tuulista", + "windy-variant": "Tuulista" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/fr.json b/homeassistant/components/weather/translations/fr.json new file mode 100644 index 00000000000..a766fcfd9c4 --- /dev/null +++ b/homeassistant/components/weather/translations/fr.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Nuit d\u00e9gag\u00e9e", + "cloudy": "Nuageux", + "exceptional": "Exceptionnel", + "fog": "Brouillard", + "hail": "Gr\u00eale", + "lightning": "Orage", + "lightning-rainy": "Orage / Pluie", + "partlycloudy": "Partiellement nuageux", + "pouring": "Averses", + "rainy": "Pluie", + "snowy": "Neige", + "snowy-rainy": "Neige / Pluie", + "sunny": "Soleil", + "windy": "Vent", + "windy-variant": "Vent" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/gsw.json b/homeassistant/components/weather/translations/gsw.json new file mode 100644 index 00000000000..6cad51ae16d --- /dev/null +++ b/homeassistant/components/weather/translations/gsw.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "Klar, Nacht", + "cloudy": "Bedeckt", + "fog": "N\u00e4bu", + "hail": "H\u00e4gu", + "lightning": "Blitz\u00e4", + "lightning-rainy": "Blitz\u00e4, R\u00e4ge", + "partlycloudy": "Teilwis bedeckt", + "pouring": "Sch\u00fctte", + "rainy": "R\u00e4gn\u00e4risch", + "snowy": "Schneie", + "snowy-rainy": "Schneie, r\u00e4gnerisch", + "sunny": "sunnig", + "windy": "windig", + "windy-variant": "windig" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/he.json b/homeassistant/components/weather/translations/he.json new file mode 100644 index 00000000000..ae821db2e01 --- /dev/null +++ b/homeassistant/components/weather/translations/he.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u05dc\u05d9\u05dc\u05d4 \u05d1\u05d4\u05d9\u05e8", + "cloudy": "\u05de\u05e2\u05d5\u05e0\u05df", + "exceptional": "\u05d9\u05d5\u05e6\u05d0 \u05d3\u05d5\u05e4\u05df", + "fog": "\u05e2\u05e8\u05e4\u05dc", + "hail": "\u05d1\u05e8\u05d3", + "lightning": "\u05d1\u05e8\u05e7", + "lightning-rainy": "\u05d1\u05e8\u05e7, \u05d2\u05e9\u05d5\u05dd", + "partlycloudy": "\u05de\u05e2\u05d5\u05e0\u05df \u05d7\u05dc\u05e7\u05d9\u05ea", + "pouring": "\u05d2\u05e9\u05d5\u05dd", + "rainy": "\u05d2\u05e9\u05d5\u05dd", + "snowy": "\u05de\u05d5\u05e9\u05dc\u05d2", + "snowy-rainy": "\u05de\u05d5\u05e9\u05dc\u05d2, \u05d2\u05e9\u05d5\u05dd", + "sunny": "\u05e9\u05de\u05e9\u05d9", + "windy": "\u05e1\u05d5\u05e2\u05e8", + "windy-variant": "\u05e1\u05d5\u05e2\u05e8" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/hi.json b/homeassistant/components/weather/translations/hi.json new file mode 100644 index 00000000000..a4fb25b59cf --- /dev/null +++ b/homeassistant/components/weather/translations/hi.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u092c\u093f\u0928\u093e \u092c\u093e\u0926\u0932 \u0935\u093e\u0932\u0940 \u0930\u093e\u0924", + "cloudy": "\u092c\u093e\u0926\u0932", + "exceptional": "\u0905\u0938\u093e\u0927\u093e\u0930\u0923", + "fog": "\u0915\u094b\u0939\u0930\u093e", + "hail": "\u0913\u0932\u0947", + "lightning": "\u092c\u093f\u091c\u0932\u0940", + "lightning-rainy": "\u092c\u093f\u091c\u0932\u0940, \u092c\u0930\u0938\u093e\u0924", + "partlycloudy": "\u0906\u0902\u0936\u093f\u0915 \u0930\u0942\u092a \u0938\u0947 \u092c\u093e\u0926\u0932 \u091b\u093e\u090f\u0902\u0917\u0947", + "pouring": "\u092c\u0930\u0938\u093e\u0924\u0940", + "rainy": "\u092c\u0930\u0938\u093e\u0924\u0940", + "snowy": "\u092c\u0930\u094d\u092b\u0940\u0932\u093e", + "snowy-rainy": "\u092c\u0930\u094d\u092b\u0940\u0932\u0940, \u092c\u0930\u0938\u093e\u0924", + "sunny": "\u0927\u0942\u092a", + "windy": "\u0924\u0942\u092b\u093e\u0928\u0940", + "windy-variant": "\u0924\u0942\u092b\u093e\u0928\u0940" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/hr.json b/homeassistant/components/weather/translations/hr.json new file mode 100644 index 00000000000..61c76fdf7ff --- /dev/null +++ b/homeassistant/components/weather/translations/hr.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Vedro, no\u0107", + "cloudy": "Obla\u010dno", + "exceptional": "Izuzetan", + "fog": "Magla", + "hail": "Tu\u010da", + "lightning": "Munja", + "lightning-rainy": "Munja, ki\u0161na", + "partlycloudy": "Djelomi\u010dno obla\u010dno", + "pouring": "Lije", + "rainy": "Ki\u0161ovito", + "snowy": "Snje\u017eno", + "snowy-rainy": "Snje\u017eno, ki\u0161no", + "sunny": "Sun\u010dano", + "windy": "Vjetrovito", + "windy-variant": "Vjetrovito" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/hu.json b/homeassistant/components/weather/translations/hu.json new file mode 100644 index 00000000000..4adff23dea6 --- /dev/null +++ b/homeassistant/components/weather/translations/hu.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Tiszta, \u00e9jszaka", + "cloudy": "Felh\u0151s", + "exceptional": "Kiv\u00e9teles", + "fog": "K\u00f6d", + "hail": "J\u00e9ges\u0151", + "lightning": "Vihar", + "lightning-rainy": "Viharos, es\u0151s", + "partlycloudy": "R\u00e9szben felh\u0151s", + "pouring": "Szakad", + "rainy": "Es\u0151s", + "snowy": "Havaz\u00e1s", + "snowy-rainy": "Havas, es\u0151s", + "sunny": "Napos", + "windy": "Szeles", + "windy-variant": "Szeles" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/hy.json b/homeassistant/components/weather/translations/hy.json new file mode 100644 index 00000000000..134b9926b2a --- /dev/null +++ b/homeassistant/components/weather/translations/hy.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u0544\u0561\u0584\u0580\u0565\u056c \u057d\u057f\u0578\u0582\u0563\u057e\u0561\u056e \u056b\u0580\u0565\u0580\u0568", + "cloudy": "\u0531\u0574\u057a\u0561\u0574\u0561\u056e", + "exceptional": "\u0532\u0561\u0581\u0561\u057c\u056b\u056f", + "fog": "\u0544\u0561\u057c\u0561\u056d\u0578\u0582\u0572", + "hail": "\u053f\u0561\u0580\u056f\u0578\u0582\u057f", + "lightning": "\u053f\u0561\u0575\u056e\u0561\u056f", + "lightning-rainy": "\u053f\u0561\u0575\u056e\u0561\u056f, \u0561\u0576\u0571\u0580\u0587", + "partlycloudy": "\u0544\u0561\u057d\u0561\u0574\u0562 \u0561\u0574\u057a\u0561\u0574\u0561\u056e", + "pouring": "\u053c\u0581\u0576\u0565\u056c", + "rainy": "\u0531\u0576\u0571\u0580\u0587\u0578\u057f", + "snowy": "\u0541\u0575\u0578\u0582\u0576\u0578\u057f \u0567", + "snowy-rainy": "\u0541\u0575\u0578\u0582\u0576\u0561\u057c\u0561\u057f, \u0561\u0576\u0571\u0580\u0587\u0578\u057f", + "sunny": "\u0531\u0580\u0587\u0578\u057f", + "windy": "\u053f\u0561\u0574", + "windy-variant": "\u0554\u0561\u0574\u0578\u057f" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/id.json b/homeassistant/components/weather/translations/id.json new file mode 100644 index 00000000000..6d73343c61b --- /dev/null +++ b/homeassistant/components/weather/translations/id.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Cerah, malam", + "cloudy": "Berawan", + "exceptional": "Luar biasa", + "fog": "Kabut", + "hail": "Hujan es", + "lightning": "Petir", + "lightning-rainy": "Petir, hujan", + "partlycloudy": "Sebagian berawan", + "pouring": "Hujan lebat", + "rainy": "Hujan", + "snowy": "Bersalju", + "snowy-rainy": "Bersalju, hujan", + "sunny": "Cerah", + "windy": "Berangin", + "windy-variant": "Berangin" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/is.json b/homeassistant/components/weather/translations/is.json new file mode 100644 index 00000000000..2b0dc01deb9 --- /dev/null +++ b/homeassistant/components/weather/translations/is.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Hei\u00f0sk\u00fdrt, n\u00f3tt", + "cloudy": "Sk\u00fdja\u00f0", + "exceptional": "Mj\u00f6g gott", + "fog": "\u00deoka", + "hail": "Hagl\u00e9l", + "lightning": "Eldingar", + "lightning-rainy": "Eldingar, rigning", + "partlycloudy": "A\u00f0 hluta til sk\u00fdja\u00f0", + "pouring": "\u00darhelli", + "rainy": "Rigning", + "snowy": "Snj\u00f3koma", + "snowy-rainy": "Slydda", + "sunny": "S\u00f3lskin", + "windy": "Vindasamt", + "windy-variant": "Vindasamt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/it.json b/homeassistant/components/weather/translations/it.json new file mode 100644 index 00000000000..2345dc16eb3 --- /dev/null +++ b/homeassistant/components/weather/translations/it.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Sereno, notte", + "cloudy": "Nuvoloso", + "exceptional": "Eccezionale", + "fog": "Nebbia", + "hail": "Grandine", + "lightning": "Temporale", + "lightning-rainy": "Temporale, piovoso", + "partlycloudy": "Parzialmente nuvoloso", + "pouring": "Piogge intense", + "rainy": "Piovoso", + "snowy": "Nevoso", + "snowy-rainy": "Nevoso, piovoso", + "sunny": "Soleggiato", + "windy": "Ventoso", + "windy-variant": "Ventoso" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/ja.json b/homeassistant/components/weather/translations/ja.json new file mode 100644 index 00000000000..8b2d8a46d74 --- /dev/null +++ b/homeassistant/components/weather/translations/ja.json @@ -0,0 +1,19 @@ +{ + "state": { + "_": { + "clear-night": "\u6674\u308c\u305f\u591c", + "cloudy": "\u66c7\u308a", + "fog": "\u9727", + "hail": "\u96f9", + "lightning": "\u96f7", + "lightning-rainy": "\u96f7\u96e8", + "partlycloudy": "\u6674\u308c\u6642\u3005\u66c7\u308a", + "pouring": "\u5927\u96e8", + "rainy": "\u96e8", + "snowy": "\u96ea", + "snowy-rainy": "\u307f\u305e\u308c", + "sunny": "\u6674\u308c", + "windy": "\u5f37\u98a8" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/ko.json b/homeassistant/components/weather/translations/ko.json new file mode 100644 index 00000000000..7aae9117e68 --- /dev/null +++ b/homeassistant/components/weather/translations/ko.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\ub9d1\uc74c (\ubc24)", + "cloudy": "\ud750\ub9bc", + "exceptional": "\uc608\uc678\uc0ac\ud56d", + "fog": "\uc548\uac1c", + "hail": "\uc6b0\ubc15", + "lightning": "\ubc88\uac1c", + "lightning-rainy": "\ub1cc\uc6b0", + "partlycloudy": "\ub300\uccb4\ub85c \ud750\ub9bc", + "pouring": "\ud638\uc6b0", + "rainy": "\ube44", + "snowy": "\ub208", + "snowy-rainy": "\uc9c4\ub208\uac1c\ube44", + "sunny": "\ub9d1\uc74c", + "windy": "\ubc14\ub78c", + "windy-variant": "\ubc14\ub78c" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/lb.json b/homeassistant/components/weather/translations/lb.json new file mode 100644 index 00000000000..24091e68784 --- /dev/null +++ b/homeassistant/components/weather/translations/lb.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Kloer, Nuecht", + "cloudy": "Wollekeg", + "exceptional": "Aussergew\u00e9inlech", + "fog": "Niwwel", + "hail": "Kn\u00ebppelsteng", + "lightning": "Bl\u00ebtz", + "lightning-rainy": "Bl\u00ebtz, Reen", + "partlycloudy": "Liicht wollekeg", + "pouring": "Schloreen", + "rainy": "Reen", + "snowy": "Schn\u00e9i", + "snowy-rainy": "Schn\u00e9i, Reen", + "sunny": "Sonneg", + "windy": "L\u00ebfteg", + "windy-variant": "L\u00ebfteg" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/lv.json b/homeassistant/components/weather/translations/lv.json new file mode 100644 index 00000000000..c3f831c6ca6 --- /dev/null +++ b/homeassistant/components/weather/translations/lv.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Skaidrs, nakts", + "cloudy": "M\u0101ko\u0146ains", + "exceptional": "Iz\u0146\u0113muma k\u0101rt\u0101", + "fog": "Migla", + "hail": "Krusa", + "lightning": "Zibens", + "lightning-rainy": "Zibens, lietus", + "partlycloudy": "Da\u013c\u0113ji apm\u0101cies", + "pouring": "Lietusg\u0101ze", + "rainy": "Lietains", + "snowy": "Sniegs", + "snowy-rainy": "Sniegs, lietus", + "sunny": "Saulains", + "windy": "V\u0113jains", + "windy-variant": "V\u0113jains" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/nb.json b/homeassistant/components/weather/translations/nb.json new file mode 100644 index 00000000000..bfc25489647 --- /dev/null +++ b/homeassistant/components/weather/translations/nb.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Klart, natt", + "cloudy": "Skyet", + "exceptional": "Eksepsjonell", + "fog": "T\u00e5ke", + "hail": "Hagl", + "lightning": "Lyn", + "lightning-rainy": "Lyn, regn", + "partlycloudy": "Delvis skyet", + "pouring": "Kraftig nedb\u00f8r", + "rainy": "Regn", + "snowy": "Sn\u00f8", + "snowy-rainy": "Sludd", + "sunny": "Solfylt", + "windy": "Vind", + "windy-variant": "Vind" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/nl.json b/homeassistant/components/weather/translations/nl.json new file mode 100644 index 00000000000..bab37782936 --- /dev/null +++ b/homeassistant/components/weather/translations/nl.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Helder, nacht", + "cloudy": "Bewolkt", + "exceptional": "Uitzonderlijk", + "fog": "Mist", + "hail": "Hagel", + "lightning": "Bliksem", + "lightning-rainy": "Bliksem, regenachtig", + "partlycloudy": "Gedeeltelijk bewolkt", + "pouring": "Regen", + "rainy": "Regenachtig", + "snowy": "Sneeuwachtig", + "snowy-rainy": "Sneeuw-, regenachtig", + "sunny": "Zonnig", + "windy": "Winderig", + "windy-variant": "Winderig" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/nn.json b/homeassistant/components/weather/translations/nn.json new file mode 100644 index 00000000000..94513403df4 --- /dev/null +++ b/homeassistant/components/weather/translations/nn.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Klart, natt", + "cloudy": "Overskya", + "exceptional": "Utmerka", + "fog": "T\u00e5ke", + "hail": "Hagl", + "lightning": "Lyn", + "lightning-rainy": "Lyn, regn", + "partlycloudy": "Delvis overskya", + "pouring": "P\u00f8sande", + "rainy": "Regn", + "snowy": "Sn\u00f8", + "snowy-rainy": "Sn\u00f8, regn", + "sunny": "Mykje sol", + "windy": "Vind", + "windy-variant": "Vind" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/no.json b/homeassistant/components/weather/translations/no.json new file mode 100644 index 00000000000..ff2269de953 --- /dev/null +++ b/homeassistant/components/weather/translations/no.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Klart, natt", + "cloudy": "Skyet", + "exceptional": "Eksepsjonell", + "fog": "T\u00e5ke", + "hail": "Hagl", + "lightning": "Lyn", + "lightning-rainy": "Lyn, regnfult", + "partlycloudy": "Delvis skyet", + "pouring": "Kraftig regn", + "rainy": "Regnfull", + "snowy": "Sn\u00f8", + "snowy-rainy": "Sludd", + "sunny": "Solfylt", + "windy": "Vindfult", + "windy-variant": "Vindfult" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/pl.json b/homeassistant/components/weather/translations/pl.json new file mode 100644 index 00000000000..c7d387690ca --- /dev/null +++ b/homeassistant/components/weather/translations/pl.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "pogodnie, noc", + "cloudy": "pochmurno", + "exceptional": "wyj\u0105tkowy", + "fog": "mg\u0142a", + "hail": "grad", + "lightning": "b\u0142yskawice", + "lightning-rainy": "burza", + "partlycloudy": "cz\u0119\u015bciowe zachmurzenie", + "pouring": "ulewa", + "rainy": "deszczowo", + "snowy": "\u015bnie\u017cnie", + "snowy-rainy": "\u015bnie\u017cnie, deszczowo", + "sunny": "s\u0142onecznie", + "windy": "wietrznie", + "windy-variant": "wietrznie" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/pt-BR.json b/homeassistant/components/weather/translations/pt-BR.json new file mode 100644 index 00000000000..64a81da9b35 --- /dev/null +++ b/homeassistant/components/weather/translations/pt-BR.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Noite clara", + "cloudy": "Nublado", + "exceptional": "Excepcional", + "fog": "Nevoeiro", + "hail": "Granizo", + "lightning": "Raios", + "lightning-rainy": "Raios, chuvoso", + "partlycloudy": "Parcialmente nublado", + "pouring": "Torrencial", + "rainy": "Chuvoso", + "snowy": "Neve", + "snowy-rainy": "Neve, chuva", + "sunny": "Ensolarado", + "windy": "Ventoso", + "windy-variant": "Ventoso" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/pt.json b/homeassistant/components/weather/translations/pt.json new file mode 100644 index 00000000000..b0cf7848faa --- /dev/null +++ b/homeassistant/components/weather/translations/pt.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Limpo, Noite", + "cloudy": "Nublado", + "exceptional": "Excepcional", + "fog": "Nevoeiro", + "hail": "Granizo", + "lightning": "Rel\u00e2mpago", + "lightning-rainy": "Rel\u00e2mpagos, chuva", + "partlycloudy": "Parcialmente nublado", + "pouring": "Chuva forte", + "rainy": "Chuva", + "snowy": "Neve", + "snowy-rainy": "Neve, chuva", + "sunny": "Sol", + "windy": "Vento fraco", + "windy-variant": "Vento fraco" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/ro.json b/homeassistant/components/weather/translations/ro.json new file mode 100644 index 00000000000..ac7fdb12ac0 --- /dev/null +++ b/homeassistant/components/weather/translations/ro.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Noapte senin\u0103", + "cloudy": "Noros", + "exceptional": "Excep\u0163ional", + "fog": "Cea\u0163\u0103", + "hail": "Grindin\u0103", + "lightning": "Des\u0103rc\u0103ri electrice", + "lightning-rainy": "Ploaie cu desc\u0103rc\u0103ri electrice", + "partlycloudy": "Par\u021bial noros", + "pouring": "Avers\u0103", + "rainy": "Ploios", + "snowy": "Z\u0103pad\u0103", + "snowy-rainy": "Lapovi\u021b\u0103 \u0219i ninsoare", + "sunny": "\u00eensorit", + "windy": "Vant", + "windy-variant": "Vant" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/ru.json b/homeassistant/components/weather/translations/ru.json new file mode 100644 index 00000000000..d2d0a066874 --- /dev/null +++ b/homeassistant/components/weather/translations/ru.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u042f\u0441\u043d\u043e, \u043d\u043e\u0447\u044c", + "cloudy": "\u041e\u0431\u043b\u0430\u0447\u043d\u043e", + "exceptional": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435", + "fog": "\u0422\u0443\u043c\u0430\u043d", + "hail": "\u0413\u0440\u0430\u0434", + "lightning": "\u041c\u043e\u043b\u043d\u0438\u044f", + "lightning-rainy": "\u041c\u043e\u043b\u043d\u0438\u044f, \u0434\u043e\u0436\u0434\u044c", + "partlycloudy": "\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0441\u0442\u044c", + "pouring": "\u041b\u0438\u0432\u0435\u043d\u044c", + "rainy": "\u0414\u043e\u0436\u0434\u044c", + "snowy": "\u0421\u043d\u0435\u0433", + "snowy-rainy": "\u0421\u043d\u0435\u0433 \u0441 \u0434\u043e\u0436\u0434\u0435\u043c", + "sunny": "\u042f\u0441\u043d\u043e", + "windy": "\u0412\u0435\u0442\u0440\u0435\u043d\u043e", + "windy-variant": "\u0412\u0435\u0442\u0440\u0435\u043d\u043e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/sk.json b/homeassistant/components/weather/translations/sk.json new file mode 100644 index 00000000000..12c3e530e9e --- /dev/null +++ b/homeassistant/components/weather/translations/sk.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Jasno, v noci", + "cloudy": "Zamra\u010den\u00e9", + "exceptional": "V\u00fdnimo\u010dn\u00e9", + "fog": "Hmla", + "hail": "Krupobitie", + "lightning": "Blesky", + "lightning-rainy": "Blesky, da\u017edivo", + "partlycloudy": "\u010ciasto\u010dne zamra\u010den\u00e9", + "pouring": "Lej\u00faco", + "rainy": "Da\u017edivo", + "snowy": "Zasne\u017eeno", + "snowy-rainy": "Zasne\u017eeno, da\u017edivo", + "sunny": "slne\u010dno", + "windy": "Veterno", + "windy-variant": "Veterno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/sl.json b/homeassistant/components/weather/translations/sl.json new file mode 100644 index 00000000000..e7ff67bac3c --- /dev/null +++ b/homeassistant/components/weather/translations/sl.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Jasna, no\u010d", + "cloudy": "Obla\u010dno", + "exceptional": "Izjemno", + "fog": "Megla", + "hail": "To\u010da", + "lightning": "Grmenje", + "lightning-rainy": "Grmenje, de\u017eevno", + "partlycloudy": "Delno obla\u010dno", + "pouring": "Mo\u010dan de\u017e", + "rainy": "De\u017eevno", + "snowy": "Sne\u017eno", + "snowy-rainy": "Sne\u017eno, de\u017eevno", + "sunny": "Son\u010dno", + "windy": "Vetrovno", + "windy-variant": "Vetrovno" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/sr-Latn.json b/homeassistant/components/weather/translations/sr-Latn.json new file mode 100644 index 00000000000..1a90500f954 --- /dev/null +++ b/homeassistant/components/weather/translations/sr-Latn.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "Vedra no\u0107", + "cloudy": "Obla\u010dno", + "fog": "Magla", + "hail": "Grad", + "lightning": "Grmljavina", + "lightning-rainy": "Grmljavina sa ki\u0161om", + "partlycloudy": "Delimi\u010dno obla\u010dno", + "pouring": "Pljusak", + "rainy": "Ki\u0161a", + "snowy": "Sneg", + "snowy-rainy": "Sneg i ki\u0161a", + "sunny": "Sun\u010dano", + "windy": "Vetrovito", + "windy-variant": "Vetrovito" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/sv.json b/homeassistant/components/weather/translations/sv.json new file mode 100644 index 00000000000..a8a9fbc3f14 --- /dev/null +++ b/homeassistant/components/weather/translations/sv.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "Klart, natt", + "cloudy": "Molnigt", + "exceptional": "Exceptionellt", + "fog": "Dimma", + "hail": "Hagel", + "lightning": "\u00c5ska", + "lightning-rainy": "\u00c5ska, regnigt", + "partlycloudy": "Delvis molnigt", + "pouring": "\u00d6sregn", + "rainy": "Regnigt", + "snowy": "Sn\u00f6igt", + "snowy-rainy": "Sn\u00f6igt, regnigt", + "sunny": "Soligt", + "windy": "Bl\u00e5sigt", + "windy-variant": "Bl\u00e5sigt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/te.json b/homeassistant/components/weather/translations/te.json new file mode 100644 index 00000000000..90a4a2f9a2f --- /dev/null +++ b/homeassistant/components/weather/translations/te.json @@ -0,0 +1,19 @@ +{ + "state": { + "_": { + "cloudy": "\u0c2e\u0c47\u0c18\u0c3e\u0c35\u0c43\u0c24\u0c02", + "fog": "\u0c2a\u0c4a\u0c17\u0c2e\u0c02\u0c1a\u0c41", + "hail": "\u0c35\u0c21\u0c17\u0c33\u0c4d\u0c33\u0c41", + "lightning": "\u0c2e\u0c46\u0c30\u0c41\u0c2a\u0c41\u0c32\u0c41", + "lightning-rainy": "\u0c2e\u0c46\u0c30\u0c41\u0c2a\u0c41, \u0c35\u0c30\u0c4d\u0c37\u0c02", + "partlycloudy": "\u0c2a\u0c3e\u0c15\u0c4d\u0c37\u0c3f\u0c15\u0c02\u0c17\u0c3e \u0c2e\u0c47\u0c18\u0c3e\u0c35\u0c43\u0c24\u0c02", + "pouring": "\u0c15\u0c41\u0c02\u0c2d\u0c35\u0c43\u0c37\u0c4d\u0c1f\u0c3f", + "rainy": "\u0c35\u0c30\u0c4d\u0c37\u0c02", + "snowy": "\u0c2e\u0c02\u0c1a\u0c41", + "snowy-rainy": "\u0c2e\u0c02\u0c1a\u0c41, \u0c35\u0c30\u0c4d\u0c37\u0c02", + "sunny": "\u0c0e\u0c02\u0c21", + "windy": "\u0c17\u0c3e\u0c32\u0c41\u0c32\u0c24\u0c4b", + "windy-variant": "\u0c17\u0c3e\u0c32\u0c41\u0c32\u0c24\u0c4b" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/th.json b/homeassistant/components/weather/translations/th.json new file mode 100644 index 00000000000..11ab05a20d7 --- /dev/null +++ b/homeassistant/components/weather/translations/th.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "\u0e1f\u0e49\u0e32\u0e42\u0e1b\u0e23\u0e48\u0e07, \u0e01\u0e25\u0e32\u0e07\u0e04\u0e37\u0e19", + "cloudy": "\u0e21\u0e35\u0e40\u0e21\u0e06\u0e21\u0e32\u0e01", + "fog": "\u0e2b\u0e21\u0e2d\u0e01", + "hail": "\u0e25\u0e39\u0e01\u0e40\u0e2b\u0e47\u0e1a", + "lightning": "\u0e1f\u0e49\u0e32\u0e41\u0e25\u0e1a", + "lightning-rainy": "\u0e1f\u0e49\u0e32\u0e41\u0e25\u0e1a, \u0e1d\u0e19\u0e15\u0e01", + "partlycloudy": "\u0e21\u0e35\u0e40\u0e21\u0e06\u0e1a\u0e32\u0e07\u0e2a\u0e48\u0e27\u0e19", + "pouring": "\u0e40\u0e17", + "rainy": "\u0e1d\u0e19", + "snowy": "\u0e2b\u0e34\u0e21\u0e30", + "snowy-rainy": "\u0e2b\u0e34\u0e21\u0e30, \u0e1d\u0e19", + "sunny": "\u0e41\u0e14\u0e14\u0e08\u0e31\u0e14", + "windy": "\u0e25\u0e21\u0e41\u0e23\u0e07", + "windy-variant": "\u0e25\u0e21\u0e41\u0e23\u0e07" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/tr.json b/homeassistant/components/weather/translations/tr.json new file mode 100644 index 00000000000..d3a2e2c051a --- /dev/null +++ b/homeassistant/components/weather/translations/tr.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "A\u00e7\u0131k, gece", + "cloudy": "Bulutlu", + "exceptional": "Ola\u011fan\u00fcst\u00fc", + "fog": "Sis", + "hail": "Selam", + "lightning": "Y\u0131ld\u0131r\u0131m", + "lightning-rainy": "Y\u0131ld\u0131r\u0131m, ya\u011fmurlu", + "partlycloudy": "Par\u00e7al\u0131 bulutlu", + "pouring": "D\u00f6kme", + "rainy": "Ya\u011fmurlu", + "snowy": "Karl\u0131", + "snowy-rainy": "Karl\u0131, ya\u011fmurlu", + "sunny": "G\u00fcne\u015fli", + "windy": "R\u00fczgarl\u0131", + "windy-variant": "R\u00fczgarl\u0131" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/uk.json b/homeassistant/components/weather/translations/uk.json new file mode 100644 index 00000000000..8cabe944296 --- /dev/null +++ b/homeassistant/components/weather/translations/uk.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u042f\u0441\u043d\u043e, \u043d\u0456\u0447", + "cloudy": "\u0425\u043c\u0430\u0440\u043d\u043e", + "exceptional": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f", + "fog": "\u0422\u0443\u043c\u0430\u043d", + "hail": "\u0413\u0440\u0430\u0434", + "lightning": "\u0411\u043b\u0438\u0441\u043a\u0430\u0432\u043a\u0430", + "lightning-rainy": "\u0411\u043b\u0438\u0441\u043a\u0430\u0432\u043a\u0430, \u0434\u043e\u0449", + "partlycloudy": "\u041d\u0435\u0432\u0435\u043b\u0438\u043a\u0430 \u0445\u043c\u0430\u0440\u043d\u0456\u0441\u0442\u044c", + "pouring": "\u0417\u043b\u0438\u0432\u0430", + "rainy": "\u0414\u043e\u0449\u043e\u0432\u0430", + "snowy": "\u0421\u043d\u0456\u0436\u043d\u043e", + "snowy-rainy": "\u0421\u043d\u0456\u0433, \u0434\u043e\u0449", + "sunny": "\u0421\u043e\u043d\u044f\u0447\u043d\u043e", + "windy": "\u0412\u0456\u0442\u0440\u044f\u043d\u043e", + "windy-variant": "\u0412\u0456\u0442\u0440\u044f\u043d\u043e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/vi.json b/homeassistant/components/weather/translations/vi.json new file mode 100644 index 00000000000..4a6ae3498cf --- /dev/null +++ b/homeassistant/components/weather/translations/vi.json @@ -0,0 +1,20 @@ +{ + "state": { + "_": { + "clear-night": "Tr\u1eddi trong, \u0111\u00eam", + "cloudy": "Nhi\u1ec1u m\u00e2y", + "fog": "S\u01b0\u01a1ng m\u00f9", + "hail": "M\u01b0a \u0111a\u0341", + "lightning": "S\u00e9t", + "lightning-rainy": "S\u00e9t, m\u01b0a", + "partlycloudy": "M\u00e2y r\u1ea3i r\u00e1c", + "pouring": "M\u01b0a l\u1edbn", + "rainy": "M\u01b0a", + "snowy": "Tuy\u1ebft", + "snowy-rainy": "Tuy\u1ebft, m\u01b0a", + "sunny": "N\u1eafng \u0111\u1eb9p", + "windy": "Gi\u00f3 nh\u1eb9", + "windy-variant": "Gi\u00f3 nh\u1eb9" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/zh-Hans.json b/homeassistant/components/weather/translations/zh-Hans.json new file mode 100644 index 00000000000..283c5250fa9 --- /dev/null +++ b/homeassistant/components/weather/translations/zh-Hans.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u591c\u95f4\u6674\u6717", + "cloudy": "\u9634", + "exceptional": "\u7279\u6b8a", + "fog": "\u96fe", + "hail": "\u51b0\u96f9", + "lightning": "\u96f7\u7535", + "lightning-rainy": "\u96f7\u9635\u96e8", + "partlycloudy": "\u591a\u4e91", + "pouring": "\u66b4\u96e8", + "rainy": "\u96e8", + "snowy": "\u96ea", + "snowy-rainy": "\u96e8\u5939\u96ea", + "sunny": "\u6674", + "windy": "\u6709\u98ce", + "windy-variant": "\u6709\u98ce" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/zh-Hant.json b/homeassistant/components/weather/translations/zh-Hant.json new file mode 100644 index 00000000000..1ca3b25eec7 --- /dev/null +++ b/homeassistant/components/weather/translations/zh-Hant.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u6674\u7a7a\u3001\u591c\u9593", + "cloudy": "\u591a\u96f2", + "exceptional": "\u4f8b\u5916", + "fog": "\u6709\u9727", + "hail": "\u51b0\u96f9", + "lightning": "\u6709\u96f7", + "lightning-rainy": "\u6709\u96f7\u96e8", + "partlycloudy": "\u5c40\u90e8\u591a\u96f2", + "pouring": "\u5927\u96e8", + "rainy": "\u6709\u96e8", + "snowy": "\u6709\u96ea", + "snowy-rainy": "\u6709\u96ea\u3001\u6709\u96e8", + "sunny": "\u6674\u5929", + "windy": "\u6709\u98a8", + "windy-variant": "\u6709\u98a8" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/webhook/__init__.py b/homeassistant/components/webhook/__init__.py index 217baf42f3a..84ebdaddad0 100644 --- a/homeassistant/components/webhook/__init__.py +++ b/homeassistant/components/webhook/__init__.py @@ -7,6 +7,7 @@ import voluptuous as vol from homeassistant.components import websocket_api from homeassistant.components.http.view import HomeAssistantView +from homeassistant.const import HTTP_OK from homeassistant.core import callback from homeassistant.loader import bind_hass @@ -71,16 +72,16 @@ async def async_handle_webhook(hass, webhook_id, request): # Always respond successfully to not give away if a hook exists or not. if webhook is None: _LOGGER.warning("Received message for unregistered webhook %s", webhook_id) - return Response(status=200) + return Response(status=HTTP_OK) try: response = await webhook["handler"](hass, webhook_id, request) if response is None: - response = Response(status=200) + response = Response(status=HTTP_OK) return response except Exception: # pylint: disable=broad-except _LOGGER.exception("Error processing webhook %s", webhook_id) - return Response(status=200) + return Response(status=HTTP_OK) async def async_setup(hass, config): diff --git a/homeassistant/components/webhook/manifest.json b/homeassistant/components/webhook/manifest.json index ff31698fefc..17c0a2c7dbe 100644 --- a/homeassistant/components/webhook/manifest.json +++ b/homeassistant/components/webhook/manifest.json @@ -2,7 +2,6 @@ "domain": "webhook", "name": "Webhook", "documentation": "https://www.home-assistant.io/integrations/webhook", - "requirements": [], "dependencies": ["http"], "codeowners": [] } diff --git a/homeassistant/components/webostv/__init__.py b/homeassistant/components/webostv/__init__.py index 9dec8fe0c71..f0a059fc5b8 100644 --- a/homeassistant/components/webostv/__init__.py +++ b/homeassistant/components/webostv/__init__.py @@ -1,4 +1,4 @@ -"""Support for WebOS TV.""" +"""Support for LG webOS Smart TV.""" import asyncio import logging @@ -6,6 +6,18 @@ from aiopylgtv import PyLGTVCmdException, PyLGTVPairException, WebOsClient import voluptuous as vol from websockets.exceptions import ConnectionClosed +from homeassistant.components.webostv.const import ( + ATTR_BUTTON, + ATTR_COMMAND, + CONF_ON_ACTION, + CONF_SOURCES, + DEFAULT_NAME, + DOMAIN, + SERVICE_BUTTON, + SERVICE_COMMAND, + SERVICE_SELECT_SOUND_OUTPUT, + WEBOSTV_CONFIG_FILE, +) from homeassistant.const import ( ATTR_ENTITY_ID, CONF_CUSTOMIZE, @@ -16,24 +28,10 @@ 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 -DOMAIN = "webostv" - -CONF_SOURCES = "sources" -CONF_ON_ACTION = "turn_on_action" -DEFAULT_NAME = "LG webOS Smart TV" -WEBOSTV_CONFIG_FILE = "webostv.conf" - -SERVICE_BUTTON = "button" -ATTR_BUTTON = "button" - -SERVICE_COMMAND = "command" -ATTR_COMMAND = "command" - -SERVICE_SELECT_SOUND_OUTPUT = "select_sound_output" - CUSTOMIZE_SCHEMA = vol.Schema( {vol.Optional(CONF_SOURCES, default=[]): vol.All(cv.ensure_list, [cv.string])} ) @@ -141,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/homeassistant/components/webostv/const.py b/homeassistant/components/webostv/const.py index a81696f6c0b..3e1e790fc02 100644 --- a/homeassistant/components/webostv/const.py +++ b/homeassistant/components/webostv/const.py @@ -1,4 +1,19 @@ -"""Constants used for WebOS TV.""" +"""Constants used for LG webOS Smart TV.""" +DOMAIN = "webostv" + +DEFAULT_NAME = "LG webOS Smart TV" + +ATTR_BUTTON = "button" +ATTR_COMMAND = "command" +ATTR_SOUND_OUTPUT = "sound_output" + +CONF_ON_ACTION = "turn_on_action" +CONF_SOURCES = "sources" + +SERVICE_BUTTON = "button" +SERVICE_COMMAND = "command" +SERVICE_SELECT_SOUND_OUTPUT = "select_sound_output" + LIVE_TV_APP_ID = "com.webos.app.livetv" -ATTR_SOUND_OUTPUT = "sound_output" +WEBOSTV_CONFIG_FILE = "webostv.conf" diff --git a/homeassistant/components/webostv/media_player.py b/homeassistant/components/webostv/media_player.py index f4d9f97fe42..a19f42d7d56 100644 --- a/homeassistant/components/webostv/media_player.py +++ b/homeassistant/components/webostv/media_player.py @@ -4,11 +4,11 @@ from datetime import timedelta from functools import wraps import logging -from aiopylgtv import PyLGTVCmdException, PyLGTVPairException +from aiopylgtv import PyLGTVCmdException, PyLGTVPairException, WebOsClient from websockets.exceptions import ConnectionClosed from homeassistant import util -from homeassistant.components.media_player import MediaPlayerDevice +from homeassistant.components.media_player import DEVICE_CLASS_TV, MediaPlayerDevice from homeassistant.components.media_player.const import ( MEDIA_TYPE_CHANNEL, SUPPORT_NEXT_TRACK, @@ -23,6 +23,13 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, SUPPORT_VOLUME_STEP, ) +from homeassistant.components.webostv.const import ( + ATTR_SOUND_OUTPUT, + CONF_ON_ACTION, + CONF_SOURCES, + DOMAIN, + LIVE_TV_APP_ID, +) from homeassistant.const import ( ATTR_ENTITY_ID, CONF_CUSTOMIZE, @@ -36,31 +43,26 @@ from homeassistant.const import ( from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.script import Script -from . import CONF_ON_ACTION, CONF_SOURCES, DOMAIN -from .const import ATTR_SOUND_OUTPUT, LIVE_TV_APP_ID - _LOGGER = logging.getLogger(__name__) - SUPPORT_WEBOSTV = ( SUPPORT_TURN_OFF | SUPPORT_NEXT_TRACK | SUPPORT_PAUSE | SUPPORT_PREVIOUS_TRACK - | SUPPORT_VOLUME_MUTE - | SUPPORT_VOLUME_SET - | SUPPORT_VOLUME_STEP | SUPPORT_SELECT_SOURCE | SUPPORT_PLAY_MEDIA | SUPPORT_PLAY ) +SUPPORT_WEBOSTV_VOLUME = SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_STEP + MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10) MIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1) async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Set up the LG WebOS TV platform.""" + """Set up the LG webOS Smart TV platform.""" if discovery_info is None: return @@ -108,12 +110,13 @@ def cmd(func): class LgWebOSMediaPlayerEntity(MediaPlayerDevice): - """Representation of a LG WebOS TV.""" + """Representation of a LG webOS Smart TV.""" - def __init__(self, client, name, customize, on_script=None): + def __init__(self, client: WebOsClient, name: str, customize, on_script=None): """Initialize the webos device.""" self._client = client self._name = name + self._unique_id = client.software_info["device_id"] self._customize = customize self._on_script = on_script @@ -153,7 +156,7 @@ class LgWebOSMediaPlayerEntity(MediaPlayerDevice): """Update state from WebOsClient.""" self.update_sources() - self.async_schedule_update_ha_state(False) + self.async_write_ha_state() def update_sources(self): """Update list of sources from current source, apps, inputs and configured list.""" @@ -219,11 +222,21 @@ class LgWebOSMediaPlayerEntity(MediaPlayerDevice): ): pass + @property + def unique_id(self): + """Return the unique id of the device.""" + return self._unique_id + @property def name(self): """Return the name of the device.""" return self._name + @property + def device_class(self): + """Return the device class of the device.""" + return DEVICE_CLASS_TV + @property def state(self): """Return the state of the device.""" @@ -285,9 +298,17 @@ class LgWebOSMediaPlayerEntity(MediaPlayerDevice): @property def supported_features(self): """Flag media player features that are supported.""" + supported = SUPPORT_WEBOSTV + + if self._client.sound_output == "external_arc": + supported = supported | SUPPORT_WEBOSTV_VOLUME + elif self._client.sound_output != "lineout": + supported = supported | SUPPORT_WEBOSTV_VOLUME | SUPPORT_VOLUME_SET + if self._on_script: - return SUPPORT_WEBOSTV | SUPPORT_TURN_ON - return SUPPORT_WEBOSTV + supported = supported | SUPPORT_TURN_ON + + return supported @property def device_state_attributes(self): diff --git a/homeassistant/components/webostv/services.yaml b/homeassistant/components/webostv/services.yaml index 1dfb3a6f1d3..70aa94b6ea6 100644 --- a/homeassistant/components/webostv/services.yaml +++ b/homeassistant/components/webostv/services.yaml @@ -1,35 +1,37 @@ -# Describes the format for available webostv services +# Describes the format for available webostv services button: - description: 'Send a button press command.' + description: "Send a button press command." fields: entity_id: description: Name(s) of the webostv entities where to run the API method. - example: 'media_player.living_room_tv' + example: "media_player.living_room_tv" button: - description: Name of the button to press. Known possible values are + description: >- + Name of the button to press. Known possible values are LEFT, RIGHT, DOWN, UP, HOME, BACK, ENTER, DASH, INFO, ASTERISK, CC, EXIT, MUTE, RED, GREEN, BLUE, VOLUMEUP, VOLUMEDOWN, CHANNELUP, CHANNELDOWN, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - example: 'LEFT' + example: "LEFT" command: - description: 'Send a command.' + description: "Send a command." fields: entity_id: description: Name(s) of the webostv entities where to run the API method. - example: 'media_player.living_room_tv' + example: "media_player.living_room_tv" command: - description: Endpoint of the command. Known valid endpoints are listed in + description: >- + Endpoint of the command. Known valid endpoints are listed in https://github.com/TheRealLink/pylgtv/blob/master/pylgtv/endpoints.py - example: 'media.controls/rewind' + example: "media.controls/rewind" select_sound_output: - description: 'Send the TV the command to change sound output.' + description: "Send the TV the command to change sound output." fields: entity_id: description: Name(s) of the webostv entities to change sound output on. - example: 'media_player.living_room_tv' + example: "media_player.living_room_tv" sound_output: description: Name of the sound output to switch to. - example: 'external_speaker' + example: "external_speaker" diff --git a/homeassistant/components/websocket_api/auth.py b/homeassistant/components/websocket_api/auth.py index 9e33ed74fd4..f5b29f49b1e 100644 --- a/homeassistant/components/websocket_api/auth.py +++ b/homeassistant/components/websocket_api/auth.py @@ -57,8 +57,8 @@ class AuthPhase: try: msg = AUTH_MESSAGE_SCHEMA(msg) except vol.Invalid as err: - error_msg = "Auth message incorrectly formatted: {}".format( - humanize_error(msg, err) + error_msg = ( + f"Auth message incorrectly formatted: {humanize_error(msg, err)}" ) self._logger.warning(error_msg) self._send_message(auth_invalid_message(error_msg)) diff --git a/homeassistant/components/websocket_api/commands.py b/homeassistant/components/websocket_api/commands.py index 3e43f824e69..3de41bc8918 100644 --- a/homeassistant/components/websocket_api/commands.py +++ b/homeassistant/components/websocket_api/commands.py @@ -1,4 +1,6 @@ """Commands part of Websocket API.""" +import asyncio + import voluptuous as vol from homeassistant.auth.permissions.const import POLICY_READ @@ -8,6 +10,7 @@ from homeassistant.exceptions import HomeAssistantError, ServiceNotFound, Unauth from homeassistant.helpers import config_validation as cv from homeassistant.helpers.event import async_track_state_change from homeassistant.helpers.service import async_get_all_descriptions +from homeassistant.loader import IntegrationNotFound, async_get_integration from . import const, decorators, messages @@ -25,6 +28,8 @@ def async_register_commands(hass, async_reg): async_reg(hass, handle_get_config) async_reg(hass, handle_ping) async_reg(hass, handle_render_template) + async_reg(hass, handle_manifest_list) + async_reg(hass, handle_manifest_get) def pong_message(iden): @@ -40,10 +45,7 @@ def pong_message(iden): } ) def handle_subscribe_events(hass, connection, msg): - """Handle subscribe events command. - - Async friendly. - """ + """Handle subscribe events command.""" # Circular dep # pylint: disable=import-outside-toplevel from .permissions import SUBSCRIBE_WHITELIST @@ -90,10 +92,7 @@ def handle_subscribe_events(hass, connection, msg): } ) def handle_unsubscribe_events(hass, connection, msg): - """Handle unsubscribe events command. - - Async friendly. - """ + """Handle unsubscribe events command.""" subscription = msg["subscription"] if subscription in connection.subscriptions: @@ -117,10 +116,7 @@ def handle_unsubscribe_events(hass, connection, msg): ) @decorators.async_response async def handle_call_service(hass, connection, msg): - """Handle call service command. - - Async friendly. - """ + """Handle call service command.""" blocking = True if msg["domain"] == HASS_DOMAIN and msg["service"] in ["restart", "stop"]: blocking = False @@ -164,10 +160,7 @@ async def handle_call_service(hass, connection, msg): @callback @decorators.websocket_command({vol.Required("type"): "get_states"}) def handle_get_states(hass, connection, msg): - """Handle get states command. - - Async friendly. - """ + """Handle get states command.""" if connection.user.permissions.access_all_entities("read"): states = hass.states.async_all() else: @@ -184,10 +177,7 @@ def handle_get_states(hass, connection, msg): @decorators.websocket_command({vol.Required("type"): "get_services"}) @decorators.async_response async def handle_get_services(hass, connection, msg): - """Handle get services command. - - Async friendly. - """ + """Handle get services command.""" descriptions = await async_get_all_descriptions(hass) connection.send_message(messages.result_message(msg["id"], descriptions)) @@ -195,20 +185,44 @@ async def handle_get_services(hass, connection, msg): @callback @decorators.websocket_command({vol.Required("type"): "get_config"}) def handle_get_config(hass, connection, msg): - """Handle get config command. - - Async friendly. - """ + """Handle get config command.""" connection.send_message(messages.result_message(msg["id"], hass.config.as_dict())) +@decorators.websocket_command({vol.Required("type"): "manifest/list"}) +@decorators.async_response +async def handle_manifest_list(hass, connection, msg): + """Handle integrations command.""" + integrations = await asyncio.gather( + *[ + async_get_integration(hass, domain) + for domain in hass.config.components + # Filter out platforms. + if "." not in domain + ] + ) + connection.send_result( + msg["id"], [integration.manifest for integration in integrations] + ) + + +@decorators.websocket_command( + {vol.Required("type"): "manifest/get", vol.Required("integration"): str} +) +@decorators.async_response +async def handle_manifest_get(hass, connection, msg): + """Handle integrations command.""" + try: + integration = await async_get_integration(hass, msg["integration"]) + connection.send_result(msg["id"], integration.manifest) + except IntegrationNotFound: + connection.send_error(msg["id"], const.ERR_NOT_FOUND, "Integration not found") + + @callback @decorators.websocket_command({vol.Required("type"): "ping"}) def handle_ping(hass, connection, msg): - """Handle ping command. - - Async friendly. - """ + """Handle ping command.""" connection.send_message(pong_message(msg["id"])) @@ -222,10 +236,7 @@ def handle_ping(hass, connection, msg): } ) def handle_render_template(hass, connection, msg): - """Handle render_template command. - - Async friendly. - """ + """Handle render_template command.""" template = msg["template"] template.hass = hass diff --git a/homeassistant/components/websocket_api/const.py b/homeassistant/components/websocket_api/const.py index 61f12fd5f57..121ea7496de 100644 --- a/homeassistant/components/websocket_api/const.py +++ b/homeassistant/components/websocket_api/const.py @@ -16,7 +16,9 @@ WebSocketCommandHandler = Callable[[HomeAssistant, "ActiveConnection", dict], No DOMAIN = "websocket_api" URL = "/api/websocket" -MAX_PENDING_MSG = 512 +PENDING_MSG_PEAK = 512 +PENDING_MSG_PEAK_TIME = 5 +MAX_PENDING_MSG = 2048 ERR_ID_REUSE = "id_reuse" ERR_INVALID_FORMAT = "invalid_format" @@ -39,6 +41,6 @@ SIGNAL_WEBSOCKET_CONNECTED = "websocket_connected" SIGNAL_WEBSOCKET_DISCONNECTED = "websocket_disconnected" # Data used to store the current connection list -DATA_CONNECTIONS = DOMAIN + ".connections" +DATA_CONNECTIONS = f"{DOMAIN}.connections" JSON_DUMP = partial(json.dumps, cls=JSONEncoder, allow_nan=False) diff --git a/homeassistant/components/websocket_api/error.py b/homeassistant/components/websocket_api/error.py index c0b7ea04554..5d4ca93105d 100644 --- a/homeassistant/components/websocket_api/error.py +++ b/homeassistant/components/websocket_api/error.py @@ -4,5 +4,3 @@ from homeassistant.exceptions import HomeAssistantError class Disconnect(HomeAssistantError): """Disconnect the current session.""" - - pass diff --git a/homeassistant/components/websocket_api/http.py b/homeassistant/components/websocket_api/http.py index 3921413fd28..b22eff150ba 100644 --- a/homeassistant/components/websocket_api/http.py +++ b/homeassistant/components/websocket_api/http.py @@ -10,6 +10,11 @@ import async_timeout from homeassistant.components.http import HomeAssistantView from homeassistant.const import EVENT_HOMEASSISTANT_STOP from homeassistant.core import callback +from homeassistant.helpers.event import async_call_later +from homeassistant.util.json import ( + find_paths_unserializable_data, + format_unserializable_data, +) from .auth import AuthPhase, auth_required_message from .const import ( @@ -18,6 +23,8 @@ from .const import ( ERR_UNKNOWN_ERROR, JSON_DUMP, MAX_PENDING_MSG, + PENDING_MSG_PEAK, + PENDING_MSG_PEAK_TIME, SIGNAL_WEBSOCKET_CONNECTED, SIGNAL_WEBSOCKET_DISCONNECTED, URL, @@ -52,6 +59,7 @@ class WebSocketHandler: self._handle_task = None self._writer_task = None self._logger = logging.getLogger("{}.connection.{}".format(__name__, id(self))) + self._peak_checker_unsub = None async def _writer(self): """Write outgoing messages.""" @@ -70,19 +78,27 @@ class WebSocketHandler: try: dumped = JSON_DUMP(message) - except (ValueError, TypeError) as err: - self._logger.error( - "Unable to serialize to JSON: %s\n%s", err, message - ) + except (ValueError, TypeError): await self.wsock.send_json( error_message( message["id"], ERR_UNKNOWN_ERROR, "Invalid JSON in response" ) ) + self._logger.error( + "Unable to serialize to JSON. Bad data found at %s", + format_unserializable_data( + find_paths_unserializable_data(message, dump=JSON_DUMP) + ), + ) continue await self.wsock.send_str(dumped) + # Clean up the peaker checker when we shut down the writer + if self._peak_checker_unsub: + self._peak_checker_unsub() + self._peak_checker_unsub = None + @callback def _send_message(self, message): """Send a message to the client. @@ -97,8 +113,35 @@ class WebSocketHandler: self._logger.error( "Client exceeded max pending messages [2]: %s", MAX_PENDING_MSG ) + self._cancel() + if self._to_write.qsize() < PENDING_MSG_PEAK: + if self._peak_checker_unsub: + self._peak_checker_unsub() + self._peak_checker_unsub = None + return + + if self._peak_checker_unsub is None: + self._peak_checker_unsub = async_call_later( + self.hass, PENDING_MSG_PEAK_TIME, self._check_write_peak + ) + + @callback + def _check_write_peak(self, _): + """Check that we are no longer above the write peak.""" + self._peak_checker_unsub = None + + if self._to_write.qsize() < PENDING_MSG_PEAK: + return + + self._logger.error( + "Client unable to keep up with pending messages. Stayed over %s for %s seconds", + PENDING_MSG_PEAK, + PENDING_MSG_PEAK_TIME, + ) + self._cancel() + @callback def _cancel(self): """Cancel the connection.""" @@ -111,13 +154,7 @@ class WebSocketHandler: wsock = self.wsock = web.WebSocketResponse(heartbeat=55) await wsock.prepare(request) self._logger.debug("Connected") - - # Py3.7+ - if hasattr(asyncio, "current_task"): - # pylint: disable=no-member - self._handle_task = asyncio.current_task() - else: - self._handle_task = asyncio.Task.current_task() + self._handle_task = asyncio.current_task() @callback def handle_hass_stop(event): diff --git a/homeassistant/components/websocket_api/manifest.json b/homeassistant/components/websocket_api/manifest.json index 2751f8343bf..76e2742b996 100644 --- a/homeassistant/components/websocket_api/manifest.json +++ b/homeassistant/components/websocket_api/manifest.json @@ -2,7 +2,6 @@ "domain": "websocket_api", "name": "Home Asssitant WebSocket API", "documentation": "https://www.home-assistant.io/integrations/websocket_api", - "requirements": [], "dependencies": ["http"], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" diff --git a/homeassistant/components/websocket_api/sensor.py b/homeassistant/components/websocket_api/sensor.py index 4ae39787335..6be07dfb1f4 100644 --- a/homeassistant/components/websocket_api/sensor.py +++ b/homeassistant/components/websocket_api/sensor.py @@ -28,11 +28,15 @@ class APICount(Entity): async def async_added_to_hass(self): """Added to hass.""" - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_WEBSOCKET_CONNECTED, self._update_count + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_WEBSOCKET_CONNECTED, self._update_count + ) ) - self.hass.helpers.dispatcher.async_dispatcher_connect( - SIGNAL_WEBSOCKET_DISCONNECTED, self._update_count + self.async_on_remove( + self.hass.helpers.dispatcher.async_dispatcher_connect( + SIGNAL_WEBSOCKET_DISCONNECTED, self._update_count + ) ) self._update_count() @@ -54,4 +58,4 @@ class APICount(Entity): @callback def _update_count(self): self.count = self.hass.data.get(DATA_CONNECTIONS, 0) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/wemo/.translations/bg.json b/homeassistant/components/wemo/.translations/bg.json deleted file mode 100644 index fe52c21e5f6..00000000000 --- a/homeassistant/components/wemo/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 Wemo \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", - "single_instance_allowed": "\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Wemo." - }, - "step": { - "confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/ca.json b/homeassistant/components/wemo/.translations/ca.json deleted file mode 100644 index 62db7fa3eb8..00000000000 --- a/homeassistant/components/wemo/.translations/ca.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No s'han trobat dispositius Wemo a la xarxa.", - "single_instance_allowed": "Nom\u00e9s \u00e9s possible una \u00fanica configuraci\u00f3 de Wemo." - }, - "step": { - "confirm": { - "description": "Vols configurar Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/da.json b/homeassistant/components/wemo/.translations/da.json deleted file mode 100644 index 1da4d407849..00000000000 --- a/homeassistant/components/wemo/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Der blev ikke fundet nogen Wemo-enheder p\u00e5 netv\u00e6rket.", - "single_instance_allowed": "Kun en enkelt konfiguration af Wemo er mulig." - }, - "step": { - "confirm": { - "description": "Vil du konfigurere Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/de.json b/homeassistant/components/wemo/.translations/de.json deleted file mode 100644 index 8af563b6dbb..00000000000 --- a/homeassistant/components/wemo/.translations/de.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Es wurden keine Wemo-Ger\u00e4te im Netzwerk gefunden.", - "single_instance_allowed": "Nur eine einzige Konfiguration von Wemo ist zul\u00e4ssig." - }, - "step": { - "confirm": { - "description": "M\u00f6chtest du Wemo einrichten?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/en.json b/homeassistant/components/wemo/.translations/en.json deleted file mode 100644 index a3751b7f5d6..00000000000 --- a/homeassistant/components/wemo/.translations/en.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No Wemo devices found on the network.", - "single_instance_allowed": "Only a single configuration of Wemo is possible." - }, - "step": { - "confirm": { - "description": "Do you want to set up Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/es-419.json b/homeassistant/components/wemo/.translations/es-419.json deleted file mode 100644 index df390e73dd1..00000000000 --- a/homeassistant/components/wemo/.translations/es-419.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos Wemo en la red.", - "single_instance_allowed": "Solo es posible una \u00fanica configuraci\u00f3n de Wemo." - }, - "step": { - "confirm": { - "description": "\u00bfDesea configurar Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/es.json b/homeassistant/components/wemo/.translations/es.json deleted file mode 100644 index e5363a459e3..00000000000 --- a/homeassistant/components/wemo/.translations/es.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "No se encontraron dispositivos Wemo en la red.", - "single_instance_allowed": "Solo es posible una \u00fanica configuraci\u00f3n de Wemo." - }, - "step": { - "confirm": { - "description": "\u00bfQuieres configurar Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/fr.json b/homeassistant/components/wemo/.translations/fr.json deleted file mode 100644 index 08b55e2366a..00000000000 --- a/homeassistant/components/wemo/.translations/fr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Aucun p\u00e9riph\u00e9rique Wemo trouv\u00e9 sur le r\u00e9seau.", - "single_instance_allowed": "Une seule configuration de Wemo est possible." - }, - "step": { - "confirm": { - "description": "Voulez-vous configurer Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/hr.json b/homeassistant/components/wemo/.translations/hr.json deleted file mode 100644 index 389bfbd3cb1..00000000000 --- a/homeassistant/components/wemo/.translations/hr.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/it.json b/homeassistant/components/wemo/.translations/it.json deleted file mode 100644 index dcfa1954db3..00000000000 --- a/homeassistant/components/wemo/.translations/it.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nessun dispositivo Wemo trovato in rete.", - "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di Wemo." - }, - "step": { - "confirm": { - "description": "Vuoi configurare Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/ko.json b/homeassistant/components/wemo/.translations/ko.json deleted file mode 100644 index cc3a70a0bc6..00000000000 --- a/homeassistant/components/wemo/.translations/ko.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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." - }, - "step": { - "confirm": { - "description": "Wemo \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/lb.json b/homeassistant/components/wemo/.translations/lb.json deleted file mode 100644 index cf8a52cef2d..00000000000 --- a/homeassistant/components/wemo/.translations/lb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Keng Wemo Apparater am Netzwierk fonnt.", - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Wemo ass erlaabt." - }, - "step": { - "confirm": { - "description": "Soll Wemo konfigur\u00e9iert ginn?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/nl.json b/homeassistant/components/wemo/.translations/nl.json deleted file mode 100644 index 65fc3865bdd..00000000000 --- a/homeassistant/components/wemo/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Geen Wemo-apparaten gevonden op het netwerk.", - "single_instance_allowed": "Slechts een enkele configuratie van Wemo is mogelijk." - }, - "step": { - "confirm": { - "description": "Wilt u Wemo instellen?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/nn.json b/homeassistant/components/wemo/.translations/nn.json deleted file mode 100644 index c1c8830cb25..00000000000 --- a/homeassistant/components/wemo/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "confirm": { - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/no.json b/homeassistant/components/wemo/.translations/no.json deleted file mode 100644 index 25a4172f00c..00000000000 --- a/homeassistant/components/wemo/.translations/no.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Ingen Sonos enheter funnet p\u00e5 nettverket.", - "single_instance_allowed": "Kun en konfigurasjon av Wemo er mulig." - }, - "step": { - "confirm": { - "description": "\u00d8nsker du \u00e5 sette opp Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/pl.json b/homeassistant/components/wemo/.translations/pl.json deleted file mode 100644 index a5315967ba4..00000000000 --- a/homeassistant/components/wemo/.translations/pl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Wemo.", - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Wemo." - }, - "step": { - "confirm": { - "description": "Czy chcesz skonfigurowa\u0107 Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/pt-BR.json b/homeassistant/components/wemo/.translations/pt-BR.json deleted file mode 100644 index b64fab85f78..00000000000 --- a/homeassistant/components/wemo/.translations/pt-BR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Nenhum dispositivo Wemo encontrado na rede.", - "single_instance_allowed": "Somente uma \u00fanica configura\u00e7\u00e3o de Wemo \u00e9 poss\u00edvel." - }, - "step": { - "confirm": { - "description": "Voc\u00ea quer configurar o Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/ru.json b/homeassistant/components/wemo/.translations/ru.json deleted file mode 100644 index c0572510925..00000000000 --- a/homeassistant/components/wemo/.translations/ru.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Wemo \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/sl.json b/homeassistant/components/wemo/.translations/sl.json deleted file mode 100644 index 61340d9df45..00000000000 --- a/homeassistant/components/wemo/.translations/sl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "V omre\u017eju ni najdenih naprav Wemo.", - "single_instance_allowed": "Mo\u017ena je samo ena konfiguracija Wema." - }, - "step": { - "confirm": { - "description": "Ali \u017eelite nastaviti Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/sv.json b/homeassistant/components/wemo/.translations/sv.json deleted file mode 100644 index 0773b0079bf..00000000000 --- a/homeassistant/components/wemo/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "Inga Wemo-enheter finns p\u00e5 n\u00e4tverket.", - "single_instance_allowed": "Endast en enda konfiguration av Wemo \u00e4r m\u00f6jlig." - }, - "step": { - "confirm": { - "description": "Vill du konfigurera Wemo?", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/.translations/zh-Hant.json b/homeassistant/components/wemo/.translations/zh-Hant.json deleted file mode 100644 index 4663cf579f8..00000000000 --- a/homeassistant/components/wemo/.translations/zh-Hant.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "abort": { - "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 Wemo \u8a2d\u5099\u3002", - "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Wemo\u3002" - }, - "step": { - "confirm": { - "description": "\u662f\u5426\u8981\u8a2d\u5b9a Wemo\uff1f", - "title": "Wemo" - } - }, - "title": "Wemo" - } -} \ No newline at end of file diff --git a/homeassistant/components/wemo/binary_sensor.py b/homeassistant/components/wemo/binary_sensor.py index db1ba60364e..0ca1f950448 100644 --- a/homeassistant/components/wemo/binary_sensor.py +++ b/homeassistant/components/wemo/binary_sensor.py @@ -55,7 +55,7 @@ class WemoBinarySensor(BinarySensorDevice): return await self._async_locked_update(force_update) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Wemo sensor added to Home Assistant.""" diff --git a/homeassistant/components/wemo/fan.py b/homeassistant/components/wemo/fan.py index cec481a2eb4..24ed68c792d 100644 --- a/homeassistant/components/wemo/fan.py +++ b/homeassistant/components/wemo/fan.py @@ -172,7 +172,7 @@ class WemoHumidifier(FanEntity): return await self._async_locked_update(force_update) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def unique_id(self): diff --git a/homeassistant/components/wemo/light.py b/homeassistant/components/wemo/light.py index 5988019e66f..b8c05ead076 100644 --- a/homeassistant/components/wemo/light.py +++ b/homeassistant/components/wemo/light.py @@ -236,7 +236,7 @@ class WemoDimmer(Light): return await self._async_locked_update(force_update) - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Wemo dimmer added to Home Assistant.""" diff --git a/homeassistant/components/wemo/manifest.json b/homeassistant/components/wemo/manifest.json index 017d43f7aba..0ad4574ecbc 100644 --- a/homeassistant/components/wemo/manifest.json +++ b/homeassistant/components/wemo/manifest.json @@ -12,6 +12,5 @@ "homekit": { "models": ["Wemo"] }, - "dependencies": [], "codeowners": ["@sqldiablo"] } diff --git a/homeassistant/components/wemo/services.yaml b/homeassistant/components/wemo/services.yaml index c2415265c62..c47d666f5c1 100644 --- a/homeassistant/components/wemo/services.yaml +++ b/homeassistant/components/wemo/services.yaml @@ -3,7 +3,7 @@ set_humidity: fields: entity_id: description: Names of the WeMo humidifier entities (1 or more entity_ids are required). - example: 'fan.wemo_humidifier' + example: "fan.wemo_humidifier" target_humidity: description: Target humidity. This is a float value between 0 and 100, but will be mapped to the humidity levels that WeMo humidifiers support (45, 50, 55, 60, and 100/Max) by rounding the value down to the nearest supported value. example: 56.5 @@ -13,4 +13,4 @@ reset_filter_life: fields: entity_id: description: Names of the WeMo humidifier entities (1 or more entity_ids are required). - example: 'fan.wemo_humidifier' + example: "fan.wemo_humidifier" diff --git a/homeassistant/components/wemo/strings.json b/homeassistant/components/wemo/strings.json index d4b40817cb3..fe8cc10a74c 100644 --- a/homeassistant/components/wemo/strings.json +++ b/homeassistant/components/wemo/strings.json @@ -1,9 +1,7 @@ { "config": { - "title": "Wemo", "step": { "confirm": { - "title": "Wemo", "description": "Do you want to set up Wemo?" } }, diff --git a/homeassistant/components/wemo/switch.py b/homeassistant/components/wemo/switch.py index ad8ea45ffd6..4b6d99da200 100644 --- a/homeassistant/components/wemo/switch.py +++ b/homeassistant/components/wemo/switch.py @@ -77,7 +77,7 @@ class WemoSwitch(SwitchDevice): return await self._async_locked_update(force_update) - self.async_schedule_update_ha_state() + self.async_write_ha_state() @property def unique_id(self): diff --git a/homeassistant/components/wemo/translations/bg.json b/homeassistant/components/wemo/translations/bg.json new file mode 100644 index 00000000000..19f2121f42a --- /dev/null +++ b/homeassistant/components/wemo/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0412 \u043c\u0440\u0435\u0436\u0430\u0442\u0430 \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 Wemo \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "single_instance_allowed": "\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Wemo." + }, + "step": { + "confirm": { + "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/ca.json b/homeassistant/components/wemo/translations/ca.json new file mode 100644 index 00000000000..36ce6153796 --- /dev/null +++ b/homeassistant/components/wemo/translations/ca.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No s'han trobat dispositius Wemo a la xarxa.", + "single_instance_allowed": "Nom\u00e9s \u00e9s possible una \u00fanica configuraci\u00f3 de Wemo." + }, + "step": { + "confirm": { + "description": "Vols configurar Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/da.json b/homeassistant/components/wemo/translations/da.json new file mode 100644 index 00000000000..d2192d85f4b --- /dev/null +++ b/homeassistant/components/wemo/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Der blev ikke fundet nogen Wemo-enheder p\u00e5 netv\u00e6rket.", + "single_instance_allowed": "Kun en enkelt konfiguration af Wemo er mulig." + }, + "step": { + "confirm": { + "description": "Vil du konfigurere Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/de.json b/homeassistant/components/wemo/translations/de.json new file mode 100644 index 00000000000..a0d4465796d --- /dev/null +++ b/homeassistant/components/wemo/translations/de.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Es wurden keine Wemo-Ger\u00e4te im Netzwerk gefunden.", + "single_instance_allowed": "Nur eine einzige Konfiguration von Wemo ist zul\u00e4ssig." + }, + "step": { + "confirm": { + "description": "M\u00f6chtest du Wemo einrichten?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/en.json b/homeassistant/components/wemo/translations/en.json new file mode 100644 index 00000000000..ef86613ea79 --- /dev/null +++ b/homeassistant/components/wemo/translations/en.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No Wemo devices found on the network.", + "single_instance_allowed": "Only a single configuration of Wemo is possible." + }, + "step": { + "confirm": { + "description": "Do you want to set up Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/es-419.json b/homeassistant/components/wemo/translations/es-419.json new file mode 100644 index 00000000000..3010cfed63b --- /dev/null +++ b/homeassistant/components/wemo/translations/es-419.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos Wemo en la red.", + "single_instance_allowed": "Solo es posible una \u00fanica configuraci\u00f3n de Wemo." + }, + "step": { + "confirm": { + "description": "\u00bfDesea configurar Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/es.json b/homeassistant/components/wemo/translations/es.json new file mode 100644 index 00000000000..c8c45bb1083 --- /dev/null +++ b/homeassistant/components/wemo/translations/es.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "No se encontraron dispositivos Wemo en la red.", + "single_instance_allowed": "Solo es posible una \u00fanica configuraci\u00f3n de Wemo." + }, + "step": { + "confirm": { + "description": "\u00bfQuieres configurar Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/fr.json b/homeassistant/components/wemo/translations/fr.json new file mode 100644 index 00000000000..47b7d0e6b74 --- /dev/null +++ b/homeassistant/components/wemo/translations/fr.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Aucun p\u00e9riph\u00e9rique Wemo trouv\u00e9 sur le r\u00e9seau.", + "single_instance_allowed": "Une seule configuration de Wemo est possible." + }, + "step": { + "confirm": { + "description": "Voulez-vous configurer Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/hr.json b/homeassistant/components/wemo/translations/hr.json new file mode 100644 index 00000000000..36e06157eb7 --- /dev/null +++ b/homeassistant/components/wemo/translations/hr.json @@ -0,0 +1,3 @@ +{ + "title": "Wemo" +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/it.json b/homeassistant/components/wemo/translations/it.json new file mode 100644 index 00000000000..a14a47a459b --- /dev/null +++ b/homeassistant/components/wemo/translations/it.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nessun dispositivo Wemo trovato in rete.", + "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di Wemo." + }, + "step": { + "confirm": { + "description": "Vuoi configurare Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/ko.json b/homeassistant/components/wemo/translations/ko.json new file mode 100644 index 00000000000..41de2e3aaeb --- /dev/null +++ b/homeassistant/components/wemo/translations/ko.json @@ -0,0 +1,14 @@ +{ + "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." + }, + "step": { + "confirm": { + "description": "Wemo \ub97c \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/lb.json b/homeassistant/components/wemo/translations/lb.json new file mode 100644 index 00000000000..8602a1adcbf --- /dev/null +++ b/homeassistant/components/wemo/translations/lb.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Keng Wemo Apparater am Netzwierk fonnt.", + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Wemo ass erlaabt." + }, + "step": { + "confirm": { + "description": "Soll Wemo konfigur\u00e9iert ginn?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/nl.json b/homeassistant/components/wemo/translations/nl.json new file mode 100644 index 00000000000..dc40fd0d66b --- /dev/null +++ b/homeassistant/components/wemo/translations/nl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Geen Wemo-apparaten gevonden op het netwerk.", + "single_instance_allowed": "Slechts een enkele configuratie van Wemo is mogelijk." + }, + "step": { + "confirm": { + "description": "Wilt u Wemo instellen?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/nn.json b/homeassistant/components/wemo/translations/nn.json new file mode 100644 index 00000000000..afce1415ba7 --- /dev/null +++ b/homeassistant/components/wemo/translations/nn.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "confirm": { + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/no.json b/homeassistant/components/wemo/translations/no.json new file mode 100644 index 00000000000..1aecf403a4c --- /dev/null +++ b/homeassistant/components/wemo/translations/no.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Ingen Sonos enheter funnet p\u00e5 nettverket.", + "single_instance_allowed": "Kun en konfigurasjon av Wemo er mulig." + }, + "step": { + "confirm": { + "description": "\u00d8nsker du \u00e5 sette opp Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/pl.json b/homeassistant/components/wemo/translations/pl.json new file mode 100644 index 00000000000..c1c7d9746d5 --- /dev/null +++ b/homeassistant/components/wemo/translations/pl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nie znaleziono w sieci urz\u0105dze\u0144 Wemo.", + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Wemo." + }, + "step": { + "confirm": { + "description": "Czy chcesz skonfigurowa\u0107 Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/pt-BR.json b/homeassistant/components/wemo/translations/pt-BR.json new file mode 100644 index 00000000000..a4fb8960af9 --- /dev/null +++ b/homeassistant/components/wemo/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Nenhum dispositivo Wemo encontrado na rede.", + "single_instance_allowed": "Somente uma \u00fanica configura\u00e7\u00e3o de Wemo \u00e9 poss\u00edvel." + }, + "step": { + "confirm": { + "description": "Voc\u00ea quer configurar o Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/ru.json b/homeassistant/components/wemo/translations/ru.json new file mode 100644 index 00000000000..5f5c4380586 --- /dev/null +++ b/homeassistant/components/wemo/translations/ru.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Wemo \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/sl.json b/homeassistant/components/wemo/translations/sl.json new file mode 100644 index 00000000000..8f754b309be --- /dev/null +++ b/homeassistant/components/wemo/translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "V omre\u017eju ni najdenih naprav Wemo.", + "single_instance_allowed": "Mo\u017ena je samo ena konfiguracija Wema." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/sv.json b/homeassistant/components/wemo/translations/sv.json new file mode 100644 index 00000000000..8476f17077c --- /dev/null +++ b/homeassistant/components/wemo/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "Inga Wemo-enheter finns p\u00e5 n\u00e4tverket.", + "single_instance_allowed": "Endast en enda konfiguration av Wemo \u00e4r m\u00f6jlig." + }, + "step": { + "confirm": { + "description": "Vill du konfigurera Wemo?", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wemo/translations/zh-Hant.json b/homeassistant/components/wemo/translations/zh-Hant.json new file mode 100644 index 00000000000..b3845e0df57 --- /dev/null +++ b/homeassistant/components/wemo/translations/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "no_devices_found": "\u5728\u7db2\u8def\u4e0a\u627e\u4e0d\u5230 Wemo \u8a2d\u5099\u3002", + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Wemo\u3002" + }, + "step": { + "confirm": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a Wemo\uff1f", + "title": "Wemo" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/whois/manifest.json b/homeassistant/components/whois/manifest.json index 6e383ec1467..4330604f9bd 100644 --- a/homeassistant/components/whois/manifest.json +++ b/homeassistant/components/whois/manifest.json @@ -3,6 +3,5 @@ "name": "Whois", "documentation": "https://www.home-assistant.io/integrations/whois", "requirements": ["python-whois==0.7.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wink/__init__.py b/homeassistant/components/wink/__init__.py index ceeb8b4cbc0..2d20183cb3d 100644 --- a/homeassistant/components/wink/__init__.py +++ b/homeassistant/components/wink/__init__.py @@ -233,15 +233,13 @@ def _request_app_setup(hass, config): start_url = f"{hass.config.api.base_url}{WINK_AUTH_CALLBACK_PATH}" - description = """Please create a Wink developer app at + description = f"""Please create a Wink developer app at https://developer.wink.com. - Add a Redirect URI of {}. + Add a Redirect URI of {start_url}. They will provide you a Client ID and secret after reviewing your request. (This can take several days). - """.format( - start_url - ) + """ hass.data[DOMAIN]["configuring"][DOMAIN] = configurator.request_config( DOMAIN, @@ -351,9 +349,7 @@ def setup(hass, config): # Home . else: - redirect_uri = "{}{}".format( - hass.config.api.base_url, WINK_AUTH_CALLBACK_PATH - ) + redirect_uri = f"{hass.config.api.base_url}{WINK_AUTH_CALLBACK_PATH}" wink_auth_start_url = pywink.get_authorization_url( config_file.get(ATTR_CLIENT_ID), redirect_uri @@ -749,7 +745,7 @@ class WinkDevice(Entity): self.schedule_update_ha_state() except (ValueError, KeyError, AttributeError): _LOGGER.error( - "Error in pubnub JSON for %s polling API for current state", self.name, + "Error in pubnub JSON for %s polling API for current state", self.name ) self.schedule_update_ha_state(True) @@ -762,7 +758,7 @@ class WinkDevice(Entity): def unique_id(self): """Return the unique id of the Wink device.""" if hasattr(self.wink, "capability") and self.wink.capability() is not None: - return "{}_{}".format(self.wink.object_id(), self.wink.capability()) + return f"{self.wink.object_id()}_{self.wink.capability()}" return self.wink.object_id() @property @@ -912,7 +908,7 @@ class WinkNimbusDialDevice(WinkDevice): @property def name(self): """Return the name of the device.""" - return self.parent.name() + " dial " + str(self.wink.index() + 1) + return f"{self.parent.name()} dial {self.wink.index() + 1}" @property def device_state_attributes(self): diff --git a/homeassistant/components/wink/scene.py b/homeassistant/components/wink/scene.py index ff083598b2e..753e2c24278 100644 --- a/homeassistant/components/wink/scene.py +++ b/homeassistant/components/wink/scene.py @@ -1,5 +1,6 @@ """Support for Wink scenes.""" import logging +from typing import Any import pywink @@ -31,6 +32,6 @@ class WinkScene(WinkDevice, Scene): """Call when entity is added to hass.""" self.hass.data[DOMAIN]["entities"]["scene"].append(self) - def activate(self): + def activate(self, **kwargs: Any) -> None: """Activate the scene.""" self.wink.activate() diff --git a/homeassistant/components/wink/sensor.py b/homeassistant/components/wink/sensor.py index 2d0313ec211..cd3eb756fb3 100644 --- a/homeassistant/components/wink/sensor.py +++ b/homeassistant/components/wink/sensor.py @@ -3,7 +3,7 @@ import logging import pywink -from homeassistant.const import TEMP_CELSIUS +from homeassistant.const import DEGREE, TEMP_CELSIUS from . import DOMAIN, WinkDevice @@ -48,7 +48,7 @@ class WinkSensorDevice(WinkDevice): """Initialize the Wink device.""" super().__init__(wink, hass) self.capability = self.wink.capability() - if self.wink.unit() == "°": + if self.wink.unit() == DEGREE: self._unit_of_measurement = TEMP_CELSIUS else: self._unit_of_measurement = self.wink.unit() diff --git a/homeassistant/components/wink/services.yaml b/homeassistant/components/wink/services.yaml index 500f1fd3f2a..ac050fd0087 100644 --- a/homeassistant/components/wink/services.yaml +++ b/homeassistant/components/wink/services.yaml @@ -1,17 +1,16 @@ # Describes the format for available Wink services - pair_new_device: description: Pair a new device to a Wink Hub. fields: hub_name: description: The name of the hub to pair a new device to. - example: 'My hub' + example: "My hub" pairing_mode: description: One of ["zigbee", "zwave", "zwave_exclusion", "zwave_network_rediscovery", "lutron", "bluetooth", "kidde"]. - example: 'zigbee' + example: "zigbee" kidde_radio_code: - description: 'A string of 8 1s and 0s one for each dip switch on the kidde device left --> right = 1 --> 8. Down = 1 and Up = 0' - example: '10101010' + description: "A string of 8 1s and 0s one for each dip switch on the kidde device left --> right = 1 --> 8. Down = 1 and Up = 0" + example: "10101010" rename_wink_device: description: Rename the provided device. @@ -40,47 +39,55 @@ set_siren_volume: fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" volume: - description: Volume level. One of ["low", "medium", "high"]. - example: "high" + description: Volume level. One of ["low", "medium", "high"]. + example: "high" enable_chime: description: Enable the chime of a Dome siren with the provided sound. fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" tone: - description: The tone to use for the chime. One of ["doorbell", "fur_elise", "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", "police_siren", "evacuation", "beep_beep", "beep", "inactive"] - example: "doorbell" + description: >- + The tone to use for the chime. One of ["doorbell", "fur_elise", + "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", + "police_siren", "evacuation", "beep_beep", "beep", "inactive"] + example: "doorbell" set_siren_tone: description: Set the sound to use when the siren is enabled. (This doesn't enable the siren) fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" tone: - description: The tone to use for the chime. One of ["doorbell", "fur_elise", "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", "police_siren", "evacuation", "beep_beep", "beep", "inactive"] - example: "alert" + description: >- + The tone to use for the chime. One of ["doorbell", "fur_elise", + "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", + "police_siren", "evacuation", "beep_beep", "beep", "inactive"] + example: "alert" siren_set_auto_shutoff: description: How long to sound the siren before turning off. fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" auto_shutoff: - description: The time in seconds to sound the siren. One of [None, -1, 30, 60, 120] (None and -1 are forever. Use None for gocontrol, and -1 for Dome) - example: 60 + description: >- + The time in seconds to sound the siren. One of [None, -1, 30, 60, 120] + (None and -1 are forever. Use None for gocontrol, and -1 for Dome) + example: 60 set_siren_strobe_enabled: description: Enable or disable the strobe light when the siren is sounding. fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" enabled: description: "True or False" @@ -89,38 +96,38 @@ set_chime_strobe_enabled: fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" enabled: - description: "True or False" + description: "True or False" enable_siren: description: Enable/disable the siren. fields: entity_id: description: Name(s) of the entities to set - example: 'switch.dome_siren' + example: "switch.dome_siren" enabled: - description: "True or False" + description: "true or false" set_chime_volume: description: Set the volume of the chime for a Dome siren/chime. fields: entity_id: description: Name(s) of the entities to set. - example: 'switch.dome_siren' + example: "switch.dome_siren" volume: - description: Volume level. One of ["low", "medium", "high"] - example: "low" + description: Volume level. One of ["low", "medium", "high"] + example: "low" set_nimbus_dial_configuration: description: Set the configuration of an individual nimbus dial fields: entity_id: description: Name of the entity to set. - example: 'wink.nimbus_dial_3' + example: "wink.nimbus_dial_3" rotation: description: Direction dial hand should spin ["cw" or "ccw"] - example: 'cw' + example: "cw" ticks: description: Number of times the hand should move example: 12 @@ -145,12 +152,15 @@ set_nimbus_dial_state: fields: entity_id: description: Name of the entity to set. - example: 'wink.nimbus_dial_3' + example: "wink.nimbus_dial_3" value: description: The value that should be set (Should be between min_value and max_value) example: 250 labels: - description: The values shown on the dial labels ["Dial 1", "test"] the first value is what is shown by default the second value is shown when the nimbus is pressed + description: >- + The values shown on the dial labels ["Dial 1", "test"] the first value + is what is shown by default the second value is shown when the nimbus is + pressed. example: ["example", "test"] set_lock_vacation_mode: @@ -158,7 +168,7 @@ set_lock_vacation_mode: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" enabled: description: enable or disable. true or false. example: true @@ -168,7 +178,7 @@ set_lock_alarm_mode: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" mode: description: One of tamper, activity, or forced_entry. example: tamper @@ -178,7 +188,7 @@ set_lock_alarm_sensitivity: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" sensitivity: description: One of low, medium_low, medium, medium_high, high. example: medium @@ -188,7 +198,7 @@ set_lock_alarm_state: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" enabled: description: enable or disable. true or false. example: true @@ -198,7 +208,7 @@ set_lock_beeper_state: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" enabled: description: enable or disable. true or false. example: true @@ -208,10 +218,10 @@ add_new_lock_key_code: fields: entity_id: description: Name of lock to unlock. - example: 'lock.front_door' + example: "lock.front_door" name: description: name of the new key code. example: Bob code: description: new key code, length must match length of other codes. Default length is 4. - example: 1234 \ No newline at end of file + example: 1234 diff --git a/homeassistant/components/wink/water_heater.py b/homeassistant/components/wink/water_heater.py index 11330c7c9a5..dae6acf91bf 100644 --- a/homeassistant/components/wink/water_heater.py +++ b/homeassistant/components/wink/water_heater.py @@ -104,8 +104,7 @@ class WinkWaterHeater(WinkDevice, WaterHeaterDevice): else: error = ( "Invalid operation mode mapping. " - + mode - + " doesn't map. Please report this." + f"{mode} doesn't map. Please report this." ) _LOGGER.error(error) return op_list diff --git a/homeassistant/components/wirelesstag/__init__.py b/homeassistant/components/wirelesstag/__init__.py index 396ca093eec..d4d60e220c6 100644 --- a/homeassistant/components/wirelesstag/__init__.py +++ b/homeassistant/components/wirelesstag/__init__.py @@ -3,7 +3,7 @@ import logging from requests.exceptions import ConnectTimeout, HTTPError import voluptuous as vol -from wirelesstagpy import NotificationConfig as NC +from wirelesstagpy import NotificationConfig as NC, WirelessTags, WirelessTagsException from homeassistant import util from homeassistant.const import ( @@ -12,6 +12,7 @@ from homeassistant.const import ( CONF_PASSWORD, CONF_USERNAME, UNIT_PERCENTAGE, + VOLT, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import dispatcher_send @@ -130,7 +131,7 @@ class WirelessTagPlatform: def local_base_url(self): """Define base url of hass in local network.""" if self._local_base_url is None: - self._local_base_url = "http://{}".format(util.get_local_ip()) + self._local_base_url = f"http://{util.get_local_ip()}" port = self.hass.config.api.port if port is not None: @@ -190,8 +191,6 @@ def setup(hass, config): password = conf.get(CONF_PASSWORD) try: - from wirelesstagpy import WirelessTags, WirelessTagsException - wirelesstags = WirelessTags(username=username, password=password) platform = WirelessTagPlatform(hass, wirelesstags) @@ -200,7 +199,7 @@ def setup(hass, config): except (ConnectTimeout, HTTPError, WirelessTagsException) as ex: _LOGGER.error("Unable to connect to wirelesstag.net service: %s", str(ex)) hass.components.persistent_notification.create( - "Error: {}
Please restart hass after fixing this.".format(ex), + f"Error: {ex}
Please restart hass after fixing this.", title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, ) @@ -282,7 +281,7 @@ class WirelessTagBaseSensor(Entity): """Return the state attributes.""" return { ATTR_BATTERY_LEVEL: int(self._tag.battery_remaining * 100), - ATTR_VOLTAGE: f"{self._tag.battery_volts:.2f}V", + ATTR_VOLTAGE: f"{self._tag.battery_volts:.2f}{VOLT}", ATTR_TAG_SIGNAL_STRENGTH: f"{self._tag.signal_strength}dBm", ATTR_TAG_OUT_OF_RANGE: not self._tag.is_in_range, ATTR_TAG_POWER_CONSUMPTION: f"{self._tag.power_consumption:.2f}{UNIT_PERCENTAGE}", diff --git a/homeassistant/components/wirelesstag/binary_sensor.py b/homeassistant/components/wirelesstag/binary_sensor.py index 4fcebe73478..eae8c17edcd 100644 --- a/homeassistant/components/wirelesstag/binary_sensor.py +++ b/homeassistant/components/wirelesstag/binary_sensor.py @@ -102,10 +102,12 @@ class WirelessTagBinarySensor(WirelessTagBaseSensor, BinarySensorDevice): tag_id = self.tag_id event_type = self.device_class mac = self.tag_manager_mac - async_dispatcher_connect( - self.hass, - SIGNAL_BINARY_EVENT_UPDATE.format(tag_id, event_type, mac), - self._on_binary_event_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_BINARY_EVENT_UPDATE.format(tag_id, event_type, mac), + self._on_binary_event_callback, + ) ) @property @@ -140,4 +142,4 @@ class WirelessTagBinarySensor(WirelessTagBaseSensor, BinarySensorDevice): """Update state from arrived push notification.""" # state should be 'on' or 'off' self._state = event.data.get("state") - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/wirelesstag/manifest.json b/homeassistant/components/wirelesstag/manifest.json index 9320b9a9e73..d3059a49497 100644 --- a/homeassistant/components/wirelesstag/manifest.json +++ b/homeassistant/components/wirelesstag/manifest.json @@ -3,6 +3,5 @@ "name": "Wireless Sensor Tags", "documentation": "https://www.home-assistant.io/integrations/wirelesstag", "requirements": ["wirelesstagpy==0.4.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wirelesstag/sensor.py b/homeassistant/components/wirelesstag/sensor.py index fa72ab184e1..2a845249028 100644 --- a/homeassistant/components/wirelesstag/sensor.py +++ b/homeassistant/components/wirelesstag/sensor.py @@ -58,16 +58,18 @@ class WirelessTagSensor(WirelessTagBaseSensor): # sensor.wirelesstag_bedroom_temperature # and not as sensor.bedroom for temperature and # sensor.bedroom_2 for humidity - self._entity_id = "{}.{}_{}_{}".format( - "sensor", WIRELESSTAG_DOMAIN, self.underscored_name, self._sensor_type + self._entity_id = ( + f"sensor.{WIRELESSTAG_DOMAIN}_{self.underscored_name}_{self._sensor_type}" ) async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect( - self.hass, - SIGNAL_TAG_UPDATE.format(self.tag_id, self.tag_manager_mac), - self._update_tag_info_callback, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + SIGNAL_TAG_UPDATE.format(self.tag_id, self.tag_manager_mac), + self._update_tag_info_callback, + ) ) @property @@ -111,4 +113,4 @@ class WirelessTagSensor(WirelessTagBaseSensor): _LOGGER.debug("Entity to update state: %s event data: %s", self, event.data) new_value = self._sensor.value_from_update_event(event.data) self._state = self.decorate_value(new_value) - self.async_schedule_update_ha_state() + self.async_write_ha_state() diff --git a/homeassistant/components/wirelesstag/switch.py b/homeassistant/components/wirelesstag/switch.py index 1bc806d9e32..79242394f7f 100644 --- a/homeassistant/components/wirelesstag/switch.py +++ b/homeassistant/components/wirelesstag/switch.py @@ -57,7 +57,7 @@ class WirelessTagSwitch(WirelessTagBaseSensor, SwitchDevice): super().__init__(api, tag) self._switch_type = switch_type self.sensor_type = SWITCH_TYPES[self._switch_type][1] - self._name = "{} {}".format(self._tag.name, SWITCH_TYPES[self._switch_type][0]) + self._name = f"{self._tag.name} {SWITCH_TYPES[self._switch_type][0]}" def turn_on(self, **kwargs): """Turn on the switch.""" diff --git a/homeassistant/components/withings/.translations/bg.json b/homeassistant/components/withings/.translations/bg.json deleted file mode 100644 index 30e384e0bc0..00000000000 --- a/homeassistant/components/withings/.translations/bg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "config": { - "create_entry": { - "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Withings \u0437\u0430 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b." - }, - "step": { - "profile": { - "data": { - "profile": "\u041f\u0440\u043e\u0444\u0438\u043b" - }, - "description": "\u041a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b \u0441\u0442\u0435 \u0438\u0437\u0431\u0440\u0430\u043b\u0438 \u043d\u0430 \u0443\u0435\u0431\u0441\u0430\u0439\u0442\u0430 \u043d\u0430 Withings? \u0412\u0430\u0436\u043d\u043e \u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0442\u0435 \u0434\u0430 \u0441\u044a\u0432\u043f\u0430\u0434\u0430\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u0435\u043d \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438.", - "title": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u043f\u0440\u043e\u0444\u0438\u043b." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/ca.json b/homeassistant/components/withings/.translations/ca.json deleted file mode 100644 index 6363ddf1983..00000000000 --- a/homeassistant/components/withings/.translations/ca.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", - "missing_configuration": "La integraci\u00f3 Withings no est\u00e0 configurada. Mira'n la documentaci\u00f3." - }, - "create_entry": { - "default": "Autenticaci\u00f3 exitosa amb Withings per al perfil seleccionat." - }, - "step": { - "pick_implementation": { - "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" - }, - "profile": { - "data": { - "profile": "Perfil" - }, - "description": "Quin perfil has seleccionat al lloc web de Withings? \u00c9s important que els perfils coincideixin sin\u00f3, les dades no s\u2019etiquetaran correctament.", - "title": "Perfil d'usuari." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/da.json b/homeassistant/components/withings/.translations/da.json deleted file mode 100644 index 09e73e4ea8e..00000000000 --- a/homeassistant/components/withings/.translations/da.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Timeout ved generering af godkendelses-url.", - "missing_configuration": "Withings-integrationen er ikke konfigureret. F\u00f8lg venligst dokumentationen." - }, - "create_entry": { - "default": "Godkendt med Withings." - }, - "step": { - "pick_implementation": { - "title": "V\u00e6lg godkendelsesmetode" - }, - "profile": { - "data": { - "profile": "Profile" - }, - "description": "Hvilken profil har du valgt p\u00e5 Withings hjemmeside? Det er vigtigt, at profilerne matcher, ellers vil data blive m\u00e6rket forkert.", - "title": "Brugerprofil." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/de.json b/homeassistant/components/withings/.translations/de.json deleted file mode 100644 index 6295d918848..00000000000 --- a/homeassistant/components/withings/.translations/de.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Autorisierungs-URL.", - "missing_configuration": "Die Withings-Integration ist nicht konfiguriert. Bitte folgen Sie der Dokumentation." - }, - "create_entry": { - "default": "Erfolgreiche Authentifizierung mit Withings." - }, - "step": { - "pick_implementation": { - "title": "Authentifizierungsmethode ausw\u00e4hlen" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Welches Profil hast du auf der Withings-Website ausgew\u00e4hlt? Es ist wichtig, dass die Profile \u00fcbereinstimmen, da sonst die Daten falsch beschriftet werden.", - "title": "Benutzerprofil" - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/en.json b/homeassistant/components/withings/.translations/en.json deleted file mode 100644 index eefa54b9490..00000000000 --- a/homeassistant/components/withings/.translations/en.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Timeout generating authorize url.", - "missing_configuration": "The Withings integration is not configured. Please follow the documentation." - }, - "create_entry": { - "default": "Successfully authenticated with Withings." - }, - "step": { - "pick_implementation": { - "title": "Pick Authentication Method" - }, - "profile": { - "data": { - "profile": "Profile" - }, - "description": "Which profile did you select on the Withings website? It's important the profiles match, otherwise data will be mis-labeled.", - "title": "User Profile." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/es-419.json b/homeassistant/components/withings/.translations/es-419.json deleted file mode 100644 index f0490e5724b..00000000000 --- a/homeassistant/components/withings/.translations/es-419.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "config": { - "create_entry": { - "default": "Autenticado correctamente con Withings para el perfil seleccionado." - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/es.json b/homeassistant/components/withings/.translations/es.json deleted file mode 100644 index f3e2c36ae72..00000000000 --- a/homeassistant/components/withings/.translations/es.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", - "missing_configuration": "La integraci\u00f3n de Withings no est\u00e1 configurada. Por favor, siga la documentaci\u00f3n." - }, - "create_entry": { - "default": "Autenticado correctamente con Withings para el perfil seleccionado." - }, - "step": { - "pick_implementation": { - "title": "Elija el m\u00e9todo de autenticaci\u00f3n" - }, - "profile": { - "data": { - "profile": "Perfil" - }, - "description": "\u00bfQu\u00e9 perfil seleccion\u00f3 en el sitio web de Withings? Es importante que los perfiles coincidan, de lo contrario los datos se etiquetar\u00e1n incorrectamente.", - "title": "Perfil de usuario." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/fr.json b/homeassistant/components/withings/.translations/fr.json deleted file mode 100644 index d178ef6c889..00000000000 --- a/homeassistant/components/withings/.translations/fr.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "D\u00e9lai d'expiration g\u00e9n\u00e9rant une URL d'autorisation.", - "missing_configuration": "L'int\u00e9gration Withings n'est pas configur\u00e9e. Veuillez suivre la documentation." - }, - "create_entry": { - "default": "Authentifi\u00e9 avec succ\u00e8s \u00e0 Withings pour le profil s\u00e9lectionn\u00e9." - }, - "step": { - "pick_implementation": { - "title": "Choisissez une m\u00e9thode d'authentification" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Quel profil avez-vous s\u00e9lectionn\u00e9 sur le site Withings? Il est important que les profils correspondent, sinon les donn\u00e9es seront mal \u00e9tiquet\u00e9es.", - "title": "Profil utilisateur" - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/hu.json b/homeassistant/components/withings/.translations/hu.json deleted file mode 100644 index b13cf9ec524..00000000000 --- a/homeassistant/components/withings/.translations/hu.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n.", - "missing_configuration": "A Withings integr\u00e1ci\u00f3 nincs konfigur\u00e1lva. K\u00e9rj\u00fck, k\u00f6vesse a dokument\u00e1ci\u00f3t." - }, - "create_entry": { - "default": "A Withings sikeresen hiteles\u00edtett." - }, - "step": { - "pick_implementation": { - "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Melyik profilt v\u00e1lasztottad ki a Withings weboldalon? Fontos, hogy a profilok egyeznek, k\u00fcl\u00f6nben az adatok helytelen c\u00edmk\u00e9vel lesznek ell\u00e1tva.", - "title": "Felhaszn\u00e1l\u00f3i profil." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/it.json b/homeassistant/components/withings/.translations/it.json deleted file mode 100644 index 6deeff07489..00000000000 --- a/homeassistant/components/withings/.translations/it.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Timeout durante la generazione dell'URL di autorizzazione.", - "missing_configuration": "Il componente Withings non \u00e8 configurato. Si prega di seguire la documentazione." - }, - "create_entry": { - "default": "Autenticazione riuscita con Withings." - }, - "step": { - "pick_implementation": { - "title": "Scegli il metodo di autenticazione" - }, - "profile": { - "data": { - "profile": "Profilo" - }, - "description": "Quale profilo hai selezionato sul sito web di Withings? \u00c8 importante che i profili corrispondano, altrimenti i dati avranno con un'errata etichettatura.", - "title": "Profilo utente." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/ko.json b/homeassistant/components/withings/.translations/ko.json deleted file mode 100644 index 8cdd8511919..00000000000 --- a/homeassistant/components/withings/.translations/ko.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "missing_configuration": "Withings \uad6c\uc131\uc694\uc18c\uac00 \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc11c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694." - }, - "create_entry": { - "default": "Withings \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." - }, - "step": { - "pick_implementation": { - "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" - }, - "profile": { - "data": { - "profile": "\ud504\ub85c\ud544" - }, - "description": "Withings \uc6f9 \uc0ac\uc774\ud2b8\uc5d0\uc11c \uc5b4\ub5a4 \ud504\ub85c\ud544\uc744 \uc120\ud0dd\ud558\uc168\ub098\uc694? \ud504\ub85c\ud544\uc774 \uc77c\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74, \ub370\uc774\ud130\uc5d0 \ub808\uc774\ube14\uc774 \uc798\ubabb \uc9c0\uc815\ub429\ub2c8\ub2e4.", - "title": "\uc0ac\uc6a9\uc790 \ud504\ub85c\ud544." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/lb.json b/homeassistant/components/withings/.translations/lb.json deleted file mode 100644 index 1984ef6f586..00000000000 --- a/homeassistant/components/withings/.translations/lb.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", - "missing_configuration": "Withings Integratioun ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." - }, - "create_entry": { - "default": "Erfollegr\u00e4ich mam ausgewielte Profile mat Withings authentifiz\u00e9iert." - }, - "step": { - "pick_implementation": { - "title": "Wielt Authentifikatiouns Method aus" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "W\u00e9ie Profil hutt dir op der Withings Webs\u00e4it ausgewielt? Et ass wichteg dass Profiller passen, soss ginn Donn\u00e9e\u00eb falsch gekennzeechent.", - "title": "Benotzer Profil." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/lv.json b/homeassistant/components/withings/.translations/lv.json deleted file mode 100644 index 7d8b268367c..00000000000 --- a/homeassistant/components/withings/.translations/lv.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/nl.json b/homeassistant/components/withings/.translations/nl.json deleted file mode 100644 index d534acc5c09..00000000000 --- a/homeassistant/components/withings/.translations/nl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", - "missing_configuration": "De Withings integratie is niet geconfigureerd. Gelieve de documentatie te volgen." - }, - "create_entry": { - "default": "Succesvol geverifieerd met Withings voor het geselecteerde profiel." - }, - "step": { - "pick_implementation": { - "title": "Kies Authenticatiemethode" - }, - "profile": { - "data": { - "profile": "Profiel" - }, - "description": "Welk profiel hebt u op de website van Withings selecteren? Het is belangrijk dat de profielen overeenkomen, anders worden gegevens verkeerd gelabeld.", - "title": "Gebruikersprofiel." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/nn.json b/homeassistant/components/withings/.translations/nn.json deleted file mode 100644 index 7d8b268367c..00000000000 --- a/homeassistant/components/withings/.translations/nn.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/no.json b/homeassistant/components/withings/.translations/no.json deleted file mode 100644 index fac2fa3a8fc..00000000000 --- a/homeassistant/components/withings/.translations/no.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", - "missing_configuration": "Withings-integreringen er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen." - }, - "create_entry": { - "default": "Vellykket godkjent med Withings." - }, - "step": { - "pick_implementation": { - "title": "Velg autentiseringsmetode" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Hvilken profil valgte du p\u00e5 Withings nettsted? Det er viktig at profilene samsvarer, ellers blir data feilmerket.", - "title": "Brukerprofil." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/pl.json b/homeassistant/components/withings/.translations/pl.json deleted file mode 100644 index c20f7a9ba53..00000000000 --- a/homeassistant/components/withings/.translations/pl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Min\u0105\u0142 limit czasu generowania url autoryzacji.", - "missing_configuration": "Integracja z Withings nie jest skonfigurowana. Post\u0119puj zgodnie z dokumentacj\u0105." - }, - "create_entry": { - "default": "Pomy\u015blnie uwierzytelniono z Withings dla wybranego profilu" - }, - "step": { - "pick_implementation": { - "title": "Wybierz metod\u0119 uwierzytelnienia" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Kt\u00f3ry profil wybra\u0142e\u015b na stronie Withings? Wa\u017cne jest, aby profile si\u0119 zgadza\u0142y, w przeciwnym razie dane zostan\u0105 b\u0142\u0119dnie oznaczone.", - "title": "Profil u\u017cytkownika" - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/ru.json b/homeassistant/components/withings/.translations/ru.json deleted file mode 100644 index eba16290453..00000000000 --- a/homeassistant/components/withings/.translations/ru.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", - "missing_configuration": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Withings \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." - }, - "create_entry": { - "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." - }, - "step": { - "pick_implementation": { - "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" - }, - "profile": { - "data": { - "profile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c" - }, - "description": "\u041a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0412\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Withings? \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438, \u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b.", - "title": "Withings" - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/sl.json b/homeassistant/components/withings/.translations/sl.json deleted file mode 100644 index 1de0a0d6ce7..00000000000 --- a/homeassistant/components/withings/.translations/sl.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", - "missing_configuration": "Integracija Withings ni konfigurirana. Prosimo, upo\u0161tevajte dokumentacijo." - }, - "create_entry": { - "default": "Uspe\u0161no overjen z Withings." - }, - "step": { - "pick_implementation": { - "title": "Izberite na\u010din preverjanja pristnosti" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Kateri profil ste izbrali na spletni strani Withings? Pomembno je, da se profili ujemajo, sicer bodo podatki napa\u010dno ozna\u010deni.", - "title": "Uporabni\u0161ki profil." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/sv.json b/homeassistant/components/withings/.translations/sv.json deleted file mode 100644 index dfaa09d52f0..00000000000 --- a/homeassistant/components/withings/.translations/sv.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "Skapandet av en auktoriseringsadress \u00f6verskred tidsgr\u00e4nsen.", - "missing_configuration": "Withings-integrationen \u00e4r inte konfigurerad. V\u00e4nligen f\u00f6lj dokumentationen." - }, - "create_entry": { - "default": "Lyckad autentisering med Withings." - }, - "step": { - "pick_implementation": { - "title": "V\u00e4lj autentiseringsmetod" - }, - "profile": { - "data": { - "profile": "Profil" - }, - "description": "Vilken profil valde du p\u00e5 Withings webbplats? Det \u00e4r viktigt att profilerna matchar, annars kommer data att vara felm\u00e4rkta.", - "title": "Anv\u00e4ndarprofil." - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/zh-Hant.json b/homeassistant/components/withings/.translations/zh-Hant.json deleted file mode 100644 index 61ae1fd8e06..00000000000 --- a/homeassistant/components/withings/.translations/zh-Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "config": { - "abort": { - "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642\u3002", - "missing_configuration": "Withings \u6574\u5408\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" - }, - "create_entry": { - "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Withings \u8a2d\u5099\u3002" - }, - "step": { - "pick_implementation": { - "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" - }, - "profile": { - "data": { - "profile": "\u500b\u4eba\u8a2d\u5b9a" - }, - "description": "\u65bc Withings \u7db2\u7ad9\u6240\u9078\u64c7\u7684\u500b\u4eba\u8a2d\u5b9a\u70ba\u4f55\uff1f\u5047\u5982\u500b\u4eba\u8a2d\u5b9a\u4e0d\u7b26\u5408\u7684\u8a71\uff0c\u8cc7\u6599\u5c07\u6703\u6a19\u793a\u932f\u8aa4\u3002", - "title": "\u500b\u4eba\u8a2d\u5b9a\u3002" - } - }, - "title": "Withings" - } -} \ No newline at end of file diff --git a/homeassistant/components/withings/common.py b/homeassistant/components/withings/common.py index 9cba055bac4..ac7bc149cd9 100644 --- a/homeassistant/components/withings/common.py +++ b/homeassistant/components/withings/common.py @@ -38,14 +38,10 @@ NOT_AUTHENTICATED_ERROR = re.compile( class NotAuthenticatedError(HomeAssistantError): """Raise when not authenticated with the service.""" - pass - class ServiceError(HomeAssistantError): """Raise when the service has an error.""" - pass - class ThrottleData: """Throttle data.""" @@ -108,7 +104,7 @@ class ConfigEntryWithingsApi(AbstractWithingsApi): partial( requests.request, method, - "%s/%s" % (self.URL, path), + f"{self.URL}/{path}", params=params, headers={ "Authorization": "Bearer %s" diff --git a/homeassistant/components/withings/const.py b/homeassistant/components/withings/const.py index 781420b347a..172a17d2914 100644 --- a/homeassistant/components/withings/const.py +++ b/homeassistant/components/withings/const.py @@ -48,7 +48,6 @@ MEAS_SLEEP_REM_DURATION_SECONDS = "sleep_rem_duration_seconds" MEAS_SLEEP_RESPIRATORY_RATE_AVERAGE = "sleep_respiratory_average_bpm" MEAS_SLEEP_RESPIRATORY_RATE_MAX = "sleep_respiratory_max_bpm" MEAS_SLEEP_RESPIRATORY_RATE_MIN = "sleep_respiratory_min_bpm" -MEAS_SLEEP_STATE = "sleep_state" MEAS_SLEEP_TOSLEEP_DURATION_SECONDS = "sleep_tosleep_duration_seconds" MEAS_SLEEP_TOWAKEUP_DURATION_SECONDS = "sleep_towakeup_duration_seconds" MEAS_SLEEP_WAKEUP_COUNT = "sleep_wakeup_count" diff --git a/homeassistant/components/withings/sensor.py b/homeassistant/components/withings/sensor.py index 7e58beb4419..4061e3207cc 100644 --- a/homeassistant/components/withings/sensor.py +++ b/homeassistant/components/withings/sensor.py @@ -6,9 +6,7 @@ from withings_api.common import ( MeasureGetMeasResponse, MeasureGroupAttribs, MeasureType, - SleepGetResponse, SleepGetSummaryResponse, - SleepState, get_measure_value, ) @@ -73,16 +71,6 @@ class WithingsMeasureAttribute(WithingsAttribute): """Model measure attributes.""" -class WithingsSleepStateAttribute(WithingsAttribute): - """Model sleep data attributes.""" - - def __init__( - self, measurement: str, friendly_name: str, unit_of_measurement: str, icon: str - ) -> None: - """Initialize sleep state attribute.""" - super().__init__(measurement, None, friendly_name, unit_of_measurement, icon) - - class WithingsSleepSummaryAttribute(WithingsAttribute): """Models sleep summary attributes.""" @@ -196,9 +184,6 @@ WITHINGS_ATTRIBUTES = [ SPEED_METERS_PER_SECOND, None, ), - WithingsSleepStateAttribute( - const.MEAS_SLEEP_STATE, "Sleep state", None, "mdi:sleep" - ), WithingsSleepSummaryAttribute( const.MEAS_SLEEP_WAKEUP_DURATION_SECONDS, GetSleepSummaryField.WAKEUP_DURATION.value, @@ -320,8 +305,9 @@ class WithingsHealthSensor(Entity): @property def unique_id(self) -> str: """Return a unique, Home Assistant friendly identifier for this entity.""" - return "withings_{}_{}_{}".format( - self._slug, self._user_id, slugify(self._attribute.measurement) + return ( + f"withings_{self._slug}_{self._user_id}_" + f"{slugify(self._attribute.measurement)}" ) @property @@ -358,11 +344,6 @@ class WithingsHealthSensor(Entity): await self._data_manager.update_measures() await self.async_update_measure(self._data_manager.measures) - elif isinstance(self._attribute, WithingsSleepStateAttribute): - _LOGGER.debug("Updating sleep state") - await self._data_manager.update_sleep() - await self.async_update_sleep_state(self._data_manager.sleep) - elif isinstance(self._attribute, WithingsSleepSummaryAttribute): _LOGGER.debug("Updating sleep summary state") await self._data_manager.update_sleep_summary() @@ -385,27 +366,6 @@ class WithingsHealthSensor(Entity): self._state = round(value, 2) - async def async_update_sleep_state(self, data: SleepGetResponse) -> None: - """Update the sleep state data.""" - if not data.series: - _LOGGER.debug("No sleep data, setting state to %s", None) - self._state = None - return - - sorted_series = sorted(data.series, key=lambda serie: serie.startdate) - serie = sorted_series[len(sorted_series) - 1] - state = None - if serie.state == SleepState.AWAKE: - state = const.STATE_AWAKE - elif serie.state == SleepState.LIGHT: - state = const.STATE_LIGHT - elif serie.state == SleepState.DEEP: - state = const.STATE_DEEP - elif serie.state == SleepState.REM: - state = const.STATE_REM - - self._state = state - async def async_update_sleep_summary(self, data: SleepGetSummaryResponse) -> None: """Update the sleep summary data.""" if not data.series: diff --git a/homeassistant/components/withings/strings.json b/homeassistant/components/withings/strings.json index 9f40c4babd9..b4f5123d5af 100644 --- a/homeassistant/components/withings/strings.json +++ b/homeassistant/components/withings/strings.json @@ -1,13 +1,10 @@ { "config": { - "title": "Withings", "step": { "profile": { "title": "User Profile.", "description": "Which profile did you select on the Withings website? It's important the profiles match, otherwise data will be mis-labeled.", - "data": { - "profile": "Profile" - } + "data": { "profile": "Profile" } }, "pick_implementation": { "title": "Pick Authentication Method" } }, @@ -15,8 +12,6 @@ "authorize_url_timeout": "Timeout generating authorize url.", "missing_configuration": "The Withings integration is not configured. Please follow the documentation." }, - "create_entry": { - "default": "Successfully authenticated with Withings." - } + "create_entry": { "default": "Successfully authenticated with Withings." } } } diff --git a/homeassistant/components/withings/translations/bg.json b/homeassistant/components/withings/translations/bg.json new file mode 100644 index 00000000000..de34abbeed0 --- /dev/null +++ b/homeassistant/components/withings/translations/bg.json @@ -0,0 +1,16 @@ +{ + "config": { + "create_entry": { + "default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Withings \u0437\u0430 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b." + }, + "step": { + "profile": { + "data": { + "profile": "\u041f\u0440\u043e\u0444\u0438\u043b" + }, + "description": "\u041a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b \u0441\u0442\u0435 \u0438\u0437\u0431\u0440\u0430\u043b\u0438 \u043d\u0430 \u0443\u0435\u0431\u0441\u0430\u0439\u0442\u0430 \u043d\u0430 Withings? \u0412\u0430\u0436\u043d\u043e \u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0442\u0435 \u0434\u0430 \u0441\u044a\u0432\u043f\u0430\u0434\u0430\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u0435\u043d \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438.", + "title": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u0438 \u043f\u0440\u043e\u0444\u0438\u043b." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/ca.json b/homeassistant/components/withings/translations/ca.json new file mode 100644 index 00000000000..3b2ee2eff9b --- /dev/null +++ b/homeassistant/components/withings/translations/ca.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.", + "missing_configuration": "La integraci\u00f3 Withings no est\u00e0 configurada. Mira'n la documentaci\u00f3." + }, + "create_entry": { + "default": "Autenticaci\u00f3 exitosa amb Withings per al perfil seleccionat." + }, + "step": { + "pick_implementation": { + "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3" + }, + "profile": { + "data": { + "profile": "Perfil" + }, + "description": "Quin perfil has seleccionat al lloc web de Withings? \u00c9s important que els perfils coincideixin sin\u00f3, les dades no s\u2019etiquetaran correctament.", + "title": "Perfil d'usuari." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/cs.json b/homeassistant/components/withings/translations/cs.json similarity index 100% rename from homeassistant/components/withings/.translations/cs.json rename to homeassistant/components/withings/translations/cs.json diff --git a/homeassistant/components/withings/translations/da.json b/homeassistant/components/withings/translations/da.json new file mode 100644 index 00000000000..bee4c6b9757 --- /dev/null +++ b/homeassistant/components/withings/translations/da.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Timeout ved generering af godkendelses-url.", + "missing_configuration": "Withings-integrationen er ikke konfigureret. F\u00f8lg venligst dokumentationen." + }, + "create_entry": { + "default": "Godkendt med Withings." + }, + "step": { + "pick_implementation": { + "title": "V\u00e6lg godkendelsesmetode" + }, + "profile": { + "data": { + "profile": "Profile" + }, + "description": "Hvilken profil har du valgt p\u00e5 Withings hjemmeside? Det er vigtigt, at profilerne matcher, ellers vil data blive m\u00e6rket forkert.", + "title": "Brugerprofil." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/de.json b/homeassistant/components/withings/translations/de.json new file mode 100644 index 00000000000..d217640e44b --- /dev/null +++ b/homeassistant/components/withings/translations/de.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Autorisierungs-URL.", + "missing_configuration": "Die Withings-Integration ist nicht konfiguriert. Bitte folgen Sie der Dokumentation." + }, + "create_entry": { + "default": "Erfolgreiche Authentifizierung mit Withings." + }, + "step": { + "pick_implementation": { + "title": "Authentifizierungsmethode ausw\u00e4hlen" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Welches Profil hast du auf der Withings-Website ausgew\u00e4hlt? Es ist wichtig, dass die Profile \u00fcbereinstimmen, da sonst die Daten falsch beschriftet werden.", + "title": "Benutzerprofil" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/en.json b/homeassistant/components/withings/translations/en.json new file mode 100644 index 00000000000..734a23bc5e0 --- /dev/null +++ b/homeassistant/components/withings/translations/en.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Timeout generating authorize url.", + "missing_configuration": "The Withings integration is not configured. Please follow the documentation." + }, + "create_entry": { + "default": "Successfully authenticated with Withings." + }, + "step": { + "pick_implementation": { + "title": "Pick Authentication Method" + }, + "profile": { + "data": { + "profile": "Profile" + }, + "description": "Which profile did you select on the Withings website? It's important the profiles match, otherwise data will be mis-labeled.", + "title": "User Profile." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/es-419.json b/homeassistant/components/withings/translations/es-419.json new file mode 100644 index 00000000000..4fc2dec0ac2 --- /dev/null +++ b/homeassistant/components/withings/translations/es-419.json @@ -0,0 +1,7 @@ +{ + "config": { + "create_entry": { + "default": "Autenticado correctamente con Withings para el perfil seleccionado." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/es.json b/homeassistant/components/withings/translations/es.json new file mode 100644 index 00000000000..19376d363cb --- /dev/null +++ b/homeassistant/components/withings/translations/es.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Tiempo de espera agotado para la autorizaci\u00f3n de la url.", + "missing_configuration": "La integraci\u00f3n de Withings no est\u00e1 configurada. Por favor, siga la documentaci\u00f3n." + }, + "create_entry": { + "default": "Autenticado correctamente con Withings para el perfil seleccionado." + }, + "step": { + "pick_implementation": { + "title": "Elija el m\u00e9todo de autenticaci\u00f3n" + }, + "profile": { + "data": { + "profile": "Perfil" + }, + "description": "\u00bfQu\u00e9 perfil seleccion\u00f3 en el sitio web de Withings? Es importante que los perfiles coincidan, de lo contrario los datos se etiquetar\u00e1n incorrectamente.", + "title": "Perfil de usuario." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/fr.json b/homeassistant/components/withings/translations/fr.json new file mode 100644 index 00000000000..d9941443f1c --- /dev/null +++ b/homeassistant/components/withings/translations/fr.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "D\u00e9lai d'expiration g\u00e9n\u00e9rant une URL d'autorisation.", + "missing_configuration": "L'int\u00e9gration Withings n'est pas configur\u00e9e. Veuillez suivre la documentation." + }, + "create_entry": { + "default": "Authentifi\u00e9 avec succ\u00e8s \u00e0 Withings pour le profil s\u00e9lectionn\u00e9." + }, + "step": { + "pick_implementation": { + "title": "Choisissez une m\u00e9thode d'authentification" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Quel profil avez-vous s\u00e9lectionn\u00e9 sur le site Withings? Il est important que les profils correspondent, sinon les donn\u00e9es seront mal \u00e9tiquet\u00e9es.", + "title": "Profil utilisateur" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/hu.json b/homeassistant/components/withings/translations/hu.json new file mode 100644 index 00000000000..ed0cc9cdc1b --- /dev/null +++ b/homeassistant/components/withings/translations/hu.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Id\u0151t\u00fall\u00e9p\u00e9s az \u00e9rv\u00e9nyes\u00edt\u00e9si url gener\u00e1l\u00e1sa sor\u00e1n.", + "missing_configuration": "A Withings integr\u00e1ci\u00f3 nincs konfigur\u00e1lva. K\u00e9rj\u00fck, k\u00f6vesse a dokument\u00e1ci\u00f3t." + }, + "create_entry": { + "default": "A Withings sikeresen hiteles\u00edtett." + }, + "step": { + "pick_implementation": { + "title": "V\u00e1lassza ki a hiteles\u00edt\u00e9si m\u00f3dszert" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Melyik profilt v\u00e1lasztottad ki a Withings weboldalon? Fontos, hogy a profilok egyeznek, k\u00fcl\u00f6nben az adatok helytelen c\u00edmk\u00e9vel lesznek ell\u00e1tva.", + "title": "Felhaszn\u00e1l\u00f3i profil." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/it.json b/homeassistant/components/withings/translations/it.json new file mode 100644 index 00000000000..f1d45416988 --- /dev/null +++ b/homeassistant/components/withings/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Timeout durante la generazione dell'URL di autorizzazione.", + "missing_configuration": "Il componente Withings non \u00e8 configurato. Si prega di seguire la documentazione." + }, + "create_entry": { + "default": "Autenticazione riuscita con Withings." + }, + "step": { + "pick_implementation": { + "title": "Scegli il metodo di autenticazione" + }, + "profile": { + "data": { + "profile": "Profilo" + }, + "description": "Quale profilo hai selezionato sul sito web di Withings? \u00c8 importante che i profili corrispondano, altrimenti i dati avranno con un'errata etichettatura.", + "title": "Profilo utente." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/ko.json b/homeassistant/components/withings/translations/ko.json new file mode 100644 index 00000000000..f15cfc1a2de --- /dev/null +++ b/homeassistant/components/withings/translations/ko.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "missing_configuration": "Withings \uad6c\uc131\uc694\uc18c\uac00 \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc11c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694." + }, + "create_entry": { + "default": "Withings \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "step": { + "pick_implementation": { + "title": "\uc778\uc99d \ubc29\ubc95 \uc120\ud0dd" + }, + "profile": { + "data": { + "profile": "\ud504\ub85c\ud544" + }, + "description": "Withings \uc6f9 \uc0ac\uc774\ud2b8\uc5d0\uc11c \uc5b4\ub5a4 \ud504\ub85c\ud544\uc744 \uc120\ud0dd\ud558\uc168\ub098\uc694? \ud504\ub85c\ud544\uc774 \uc77c\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74, \ub370\uc774\ud130\uc5d0 \ub808\uc774\ube14\uc774 \uc798\ubabb \uc9c0\uc815\ub429\ub2c8\ub2e4.", + "title": "\uc0ac\uc6a9\uc790 \ud504\ub85c\ud544." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/lb.json b/homeassistant/components/withings/translations/lb.json new file mode 100644 index 00000000000..38bd29b96e4 --- /dev/null +++ b/homeassistant/components/withings/translations/lb.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Z\u00e4it Iwwerschreidung beim gener\u00e9ieren vun der Autorisatiouns URL.", + "missing_configuration": "Withings Integratioun ass nach net konfigur\u00e9iert. Follegt w.e.g der Dokumentatioun." + }, + "create_entry": { + "default": "Erfollegr\u00e4ich mat Withings authentifiz\u00e9iert." + }, + "step": { + "pick_implementation": { + "title": "Wielt Authentifikatiouns Method aus" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "W\u00e9ie Profil hutt dir op der Withings Webs\u00e4it ausgewielt? Et ass wichteg dass Profiller passen, soss ginn Donn\u00e9e\u00eb falsch gekennzeechent.", + "title": "Benotzer Profil." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/lv.json b/homeassistant/components/withings/translations/lv.json new file mode 100644 index 00000000000..a23ba89ea71 --- /dev/null +++ b/homeassistant/components/withings/translations/lv.json @@ -0,0 +1,3 @@ +{ + "title": "Withings" +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/nl.json b/homeassistant/components/withings/translations/nl.json new file mode 100644 index 00000000000..0fe8153cbe4 --- /dev/null +++ b/homeassistant/components/withings/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Time-out tijdens genereren autorisatie url.", + "missing_configuration": "De Withings integratie is niet geconfigureerd. Gelieve de documentatie te volgen." + }, + "create_entry": { + "default": "Succesvol geverifieerd met Withings voor het geselecteerde profiel." + }, + "step": { + "pick_implementation": { + "title": "Kies Authenticatiemethode" + }, + "profile": { + "data": { + "profile": "Profiel" + }, + "description": "Welk profiel hebt u op de website van Withings selecteren? Het is belangrijk dat de profielen overeenkomen, anders worden gegevens verkeerd gelabeld.", + "title": "Gebruikersprofiel." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/nn.json b/homeassistant/components/withings/translations/nn.json new file mode 100644 index 00000000000..a23ba89ea71 --- /dev/null +++ b/homeassistant/components/withings/translations/nn.json @@ -0,0 +1,3 @@ +{ + "title": "Withings" +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/no.json b/homeassistant/components/withings/translations/no.json new file mode 100644 index 00000000000..0922f1b3344 --- /dev/null +++ b/homeassistant/components/withings/translations/no.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Tidsavbrudd ved generering av autoriseringsadresse.", + "missing_configuration": "Withings-integreringen er ikke konfigurert. Vennligst f\u00f8lg dokumentasjonen." + }, + "create_entry": { + "default": "Vellykket godkjent med Withings." + }, + "step": { + "pick_implementation": { + "title": "Velg autentiseringsmetode" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Hvilken profil valgte du p\u00e5 Withings nettsted? Det er viktig at profilene samsvarer, ellers blir data feilmerket.", + "title": "Brukerprofil." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/pl.json b/homeassistant/components/withings/translations/pl.json new file mode 100644 index 00000000000..a45141ff50b --- /dev/null +++ b/homeassistant/components/withings/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Min\u0105\u0142 limit czasu generowania url autoryzacji.", + "missing_configuration": "Integracja z Withings nie jest skonfigurowana. Post\u0119puj zgodnie z dokumentacj\u0105." + }, + "create_entry": { + "default": "Pomy\u015blnie uwierzytelniono z Withings dla wybranego profilu" + }, + "step": { + "pick_implementation": { + "title": "Wybierz metod\u0119 uwierzytelnienia" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Kt\u00f3ry profil wybra\u0142e\u015b na stronie Withings? Wa\u017cne jest, aby profile si\u0119 zgadza\u0142y, w przeciwnym razie dane zostan\u0105 b\u0142\u0119dnie oznaczone.", + "title": "Profil u\u017cytkownika" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/pt.json b/homeassistant/components/withings/translations/pt.json similarity index 100% rename from homeassistant/components/withings/.translations/pt.json rename to homeassistant/components/withings/translations/pt.json diff --git a/homeassistant/components/withings/translations/ru.json b/homeassistant/components/withings/translations/ru.json new file mode 100644 index 00000000000..f99071a2615 --- /dev/null +++ b/homeassistant/components/withings/translations/ru.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "\u0418\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.", + "missing_configuration": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Withings \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438." + }, + "create_entry": { + "default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e." + }, + "step": { + "pick_implementation": { + "title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438" + }, + "profile": { + "data": { + "profile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c" + }, + "description": "\u041a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0412\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Withings? \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438, \u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b.", + "title": "Withings" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/sl.json b/homeassistant/components/withings/translations/sl.json new file mode 100644 index 00000000000..0b1ef34bf7c --- /dev/null +++ b/homeassistant/components/withings/translations/sl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "\u010casovna omejitev za generiranje potrditvenega URL-ja je potekla.", + "missing_configuration": "Integracija Withings ni konfigurirana. Prosimo, upo\u0161tevajte dokumentacijo." + }, + "create_entry": { + "default": "Uspe\u0161no overjen z Withings." + }, + "step": { + "pick_implementation": { + "title": "Izberite na\u010din preverjanja pristnosti" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Kateri profil ste izbrali na spletni strani Withings? Pomembno je, da se profili ujemajo, sicer bodo podatki napa\u010dno ozna\u010deni.", + "title": "Uporabni\u0161ki profil." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/translations/sv.json b/homeassistant/components/withings/translations/sv.json new file mode 100644 index 00000000000..c5b6b0fddab --- /dev/null +++ b/homeassistant/components/withings/translations/sv.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "Skapandet av en auktoriseringsadress \u00f6verskred tidsgr\u00e4nsen.", + "missing_configuration": "Withings-integrationen \u00e4r inte konfigurerad. V\u00e4nligen f\u00f6lj dokumentationen." + }, + "create_entry": { + "default": "Lyckad autentisering med Withings." + }, + "step": { + "pick_implementation": { + "title": "V\u00e4lj autentiseringsmetod" + }, + "profile": { + "data": { + "profile": "Profil" + }, + "description": "Vilken profil valde du p\u00e5 Withings webbplats? Det \u00e4r viktigt att profilerna matchar, annars kommer data att vara felm\u00e4rkta.", + "title": "Anv\u00e4ndarprofil." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/withings/.translations/zh-Hans.json b/homeassistant/components/withings/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/withings/.translations/zh-Hans.json rename to homeassistant/components/withings/translations/zh-Hans.json diff --git a/homeassistant/components/withings/translations/zh-Hant.json b/homeassistant/components/withings/translations/zh-Hant.json new file mode 100644 index 00000000000..ac644d26418 --- /dev/null +++ b/homeassistant/components/withings/translations/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "authorize_url_timeout": "\u7522\u751f\u8a8d\u8b49 URL \u6642\u903e\u6642\u3002", + "missing_configuration": "Withings \u6574\u5408\u5c1a\u672a\u8a2d\u7f6e\uff0c\u8acb\u53c3\u95b1\u6587\u4ef6\u8aaa\u660e\u3002" + }, + "create_entry": { + "default": "\u5df2\u6210\u529f\u8a8d\u8b49 Withings \u8a2d\u5099\u3002" + }, + "step": { + "pick_implementation": { + "title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f" + }, + "profile": { + "data": { + "profile": "\u500b\u4eba\u8a2d\u5b9a" + }, + "description": "\u65bc Withings \u7db2\u7ad9\u6240\u9078\u64c7\u7684\u500b\u4eba\u8a2d\u5b9a\u70ba\u4f55\uff1f\u5047\u5982\u500b\u4eba\u8a2d\u5b9a\u4e0d\u7b26\u5408\u7684\u8a71\uff0c\u8cc7\u6599\u5c07\u6703\u6a19\u793a\u932f\u8aa4\u3002", + "title": "\u500b\u4eba\u8a2d\u5b9a\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/bg.json b/homeassistant/components/wled/.translations/bg.json deleted file mode 100644 index d99df20187f..00000000000 --- a/homeassistant/components/wled/.translations/bg.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u0422\u043e\u0432\u0430 WLED \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e.", - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 WLED \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e." - }, - "error": { - "connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 WLED \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "\u0410\u0434\u0440\u0435\u0441" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0432\u0430\u0448\u0438\u044f WLED \u0434\u0430 \u0441\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0430 \u0441 Home Assistant.", - "title": "\u0421\u0432\u044a\u0440\u0436\u0435\u0442\u0435 \u0412\u0430\u0448\u0438\u044f WLED" - }, - "zeroconf_confirm": { - "description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 WLED \u0441 \u0438\u043c\u0435 {name} `\u043a\u044a\u043c Home Assistant?", - "title": "\u041e\u0442\u043a\u0440\u0438\u0442\u043e \u0435 WLED \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/ca.json b/homeassistant/components/wled/.translations/ca.json deleted file mode 100644 index cf4d1d98f6e..00000000000 --- a/homeassistant/components/wled/.translations/ca.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquest dispositiu WLED ja est\u00e0 configurat.", - "connection_error": "No s'ha pogut connectar amb el dispositiu WLED." - }, - "error": { - "connection_error": "No s'ha pogut connectar amb el dispositiu WLED." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Amfitri\u00f3 o adre\u00e7a IP" - }, - "description": "Configura el teu WLED per integrar-lo amb Home Assistant.", - "title": "Enlla\u00e7 amb WLED" - }, - "zeroconf_confirm": { - "description": "Vols afegir el WLED `{name}` a Home Assistant?", - "title": "Dispositiu WLED descobert" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/da.json b/homeassistant/components/wled/.translations/da.json deleted file mode 100644 index 0ab3a789b3a..00000000000 --- a/homeassistant/components/wled/.translations/da.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne WLED-enhed er allerede konfigureret.", - "connection_error": "Kunne ikke oprette forbindelse til WLED-enheden." - }, - "error": { - "connection_error": "Kunne ikke oprette forbindelse til WLED-enheden." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "V\u00e6rt eller IP-adresse" - }, - "description": "Indstil din WLED til at integrere med Home Assistant.", - "title": "Forbind din WLED" - }, - "zeroconf_confirm": { - "description": "\u00d8nsker du at tilf\u00f8je WLED-enhed med navnet `{name}' til Home Assistant?", - "title": "Fandt WLED-enhed" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/de.json b/homeassistant/components/wled/.translations/de.json deleted file mode 100644 index 2a7ef92b0ec..00000000000 --- a/homeassistant/components/wled/.translations/de.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieses WLED-Ger\u00e4t ist bereits konfiguriert.", - "connection_error": "Verbindung zum WLED-Ger\u00e4t fehlgeschlagen." - }, - "error": { - "connection_error": "Verbindung zum WLED-Ger\u00e4t fehlgeschlagen." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Hostname oder IP-Adresse" - }, - "description": "Richte deine WLED f\u00fcr die Integration mit Home Assistant ein.", - "title": "Verkn\u00fcpfe dein WLED" - }, - "zeroconf_confirm": { - "description": "M\u00f6chtest du die WLED mit dem Namen \"{name}\" zu Home Assistant hinzuf\u00fcgen?", - "title": "Gefundenes WLED-Ger\u00e4t" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/en.json b/homeassistant/components/wled/.translations/en.json deleted file mode 100644 index 0271f7d2b1e..00000000000 --- a/homeassistant/components/wled/.translations/en.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This WLED device is already configured.", - "connection_error": "Failed to connect to WLED device." - }, - "error": { - "connection_error": "Failed to connect to WLED device." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Host or IP address" - }, - "description": "Set up your WLED to integrate with Home Assistant.", - "title": "Link your WLED" - }, - "zeroconf_confirm": { - "description": "Do you want to add the WLED named `{name}` to Home Assistant?", - "title": "Discovered WLED device" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/es.json b/homeassistant/components/wled/.translations/es.json deleted file mode 100644 index b7f567698ea..00000000000 --- a/homeassistant/components/wled/.translations/es.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Este dispositivo WLED ya est\u00e1 configurado.", - "connection_error": "No se ha podido conectar al dispositivo WLED." - }, - "error": { - "connection_error": "No se ha podido conectar al dispositivo WLED." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Host o direcci\u00f3n IP" - }, - "description": "Configure su WLED para integrarse con Home Assistant.", - "title": "Vincula tu WLED" - }, - "zeroconf_confirm": { - "description": "\u00bfQuieres a\u00f1adir el WLED llamado `{name}` a Home Assistant?", - "title": "Descubierto dispositivo WLED" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/fr.json b/homeassistant/components/wled/.translations/fr.json deleted file mode 100644 index 6f275ad8199..00000000000 --- a/homeassistant/components/wled/.translations/fr.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cet appareil WLED est d\u00e9j\u00e0 configur\u00e9.", - "connection_error": "\u00c9chec de la connexion au p\u00e9riph\u00e9rique WLED." - }, - "error": { - "connection_error": "\u00c9chec de la connexion au p\u00e9riph\u00e9rique WLED." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "H\u00f4te ou adresse IP" - }, - "description": "Configurer votre WLED pour l'int\u00e9grer \u00e0 Home Assistant.", - "title": "Liez votre WLED" - }, - "zeroconf_confirm": { - "description": "Voulez-vous ajouter le dispositif WLED nomm\u00e9 `{name}` \u00e0 Home Assistant?", - "title": "Dispositif WLED d\u00e9couvert" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/hu.json b/homeassistant/components/wled/.translations/hu.json deleted file mode 100644 index 644b61ceb73..00000000000 --- a/homeassistant/components/wled/.translations/hu.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "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": "Nem siker\u00fclt csatlakozni a WLED eszk\u00f6zh\u00f6z." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Hosztn\u00e9v vagy IP c\u00edm" - }, - "description": "\u00c1ll\u00edtsa be a WLED-et, hogy integr\u00e1l\u00f3djon a Home Assistant alkalmaz\u00e1sba.", - "title": "Csatlakoztassa a WLED-t" - }, - "zeroconf_confirm": { - "description": "Hozz\u00e1 akarja adni a {name} `nev\u0171 WLED-et a Home Assistant-hez?", - "title": "Felfedezett WLED eszk\u00f6z" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/it.json b/homeassistant/components/wled/.translations/it.json deleted file mode 100644 index 300f88ddc46..00000000000 --- a/homeassistant/components/wled/.translations/it.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questo dispositivo WLED \u00e8 gi\u00e0 configurato.", - "connection_error": "Impossibile connettersi al dispositivo WLED." - }, - "error": { - "connection_error": "Impossibile connettersi al dispositivo WLED." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Host o indirizzo IP" - }, - "description": "Configura WLED per l'integrazione con Home Assistant.", - "title": "Collega il tuo WLED" - }, - "zeroconf_confirm": { - "description": "Vuoi aggiungere il WLED chiamato `{name}` a Home Assistant?", - "title": "Dispositivo WLED rilevato" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/ko.json b/homeassistant/components/wled/.translations/ko.json deleted file mode 100644 index 38496c01ee8..00000000000 --- a/homeassistant/components/wled/.translations/ko.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "WLED \uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", - "connection_error": "WLED \uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "error": { - "connection_error": "WLED \uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c" - }, - "description": "Home Assistant \uc5d0 WLED \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.", - "title": "WLED \uc5f0\uacb0" - }, - "zeroconf_confirm": { - "description": "Home Assistant \uc5d0 WLED `{name}` \uc744(\ub97c) \ucd94\uac00\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", - "title": "\ubc1c\uacac\ub41c WLED \uae30\uae30" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/lb.json b/homeassistant/components/wled/.translations/lb.json deleted file mode 100644 index 0e9381bd164..00000000000 --- a/homeassistant/components/wled/.translations/lb.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebsen WLED Apparat ass scho konfigur\u00e9iert.", - "connection_error": "Feeler beim verbannen mam WLED Apparat." - }, - "error": { - "connection_error": "Feeler beim verbannen mam WLED Apparat." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Numm oder IP Adresse" - }, - "description": "\u00c4ren WLED als Integratioun mam Home Assistant ariichten.", - "title": "\u00c4ren WLED verbannen" - }, - "zeroconf_confirm": { - "description": "W\u00ebllt dir den WLED mam Numm `{name}` am Home Assistant dob\u00e4isetzen?", - "title": "Entdeckten WLED Apparat" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/nl.json b/homeassistant/components/wled/.translations/nl.json deleted file mode 100644 index 266f74ce6c2..00000000000 --- a/homeassistant/components/wled/.translations/nl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dit WLED-apparaat is al geconfigureerd.", - "connection_error": "Kan geen verbinding maken met WLED-apparaat." - }, - "error": { - "connection_error": "Kan geen verbinding maken met WLED-apparaat." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Hostnaam of IP-adres" - }, - "description": "Stel uw WLED in op integratie met Home Assistant.", - "title": "Koppel je WLED" - }, - "zeroconf_confirm": { - "description": "Wil je de WLED genaamd `{name}` toevoegen aan Home Assistant?", - "title": "Ontdekt WLED-apparaat" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/nn.json b/homeassistant/components/wled/.translations/nn.json deleted file mode 100644 index f50a24eeac0..00000000000 --- a/homeassistant/components/wled/.translations/nn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "config": { - "flow_title": "WLED: {name}", - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/no.json b/homeassistant/components/wled/.translations/no.json deleted file mode 100644 index b2dc9cb6547..00000000000 --- a/homeassistant/components/wled/.translations/no.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne WLED-enheten er allerede konfigurert.", - "connection_error": "Kunne ikke koble til WLED-enheten." - }, - "error": { - "connection_error": "Kunne ikke koble til WLED-enheten." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Vert eller IP-adresse" - }, - "description": "Konfigurer WLED til \u00e5 integreres med Home Assistant.", - "title": "Linken din WLED" - }, - "zeroconf_confirm": { - "description": "Vil du legge til WLED med navnet ' {name} ' i Home Assistant?", - "title": "Oppdaget WLED-enhet" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/pl.json b/homeassistant/components/wled/.translations/pl.json deleted file mode 100644 index 6080336c44f..00000000000 --- a/homeassistant/components/wled/.translations/pl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "To urz\u0105dzenie WLED jest ju\u017c skonfigurowane.", - "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z urz\u0105dzeniem WLED." - }, - "error": { - "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z urz\u0105dzeniem WLED." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Nazwa hosta lub adres IP" - }, - "description": "Konfiguracja WLED w celu integracji z Home Assistant'em.", - "title": "Po\u0142\u0105cz sw\u00f3j WLED" - }, - "zeroconf_confirm": { - "description": "Czy chcesz doda\u0107 WLED o nazwie `{name}` do Home Assistant'a?", - "title": "Wykryto urz\u0105dzenie WLED" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/pt.json b/homeassistant/components/wled/.translations/pt.json deleted file mode 100644 index 521434d11a8..00000000000 --- a/homeassistant/components/wled/.translations/pt.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "connection_error": "Falha ao ligar ao dispositivo WLED" - }, - "error": { - "connection_error": "Falha ao ligar ao dispositivo WLED" - }, - "step": { - "user": { - "data": { - "host": "Nome servidor ou endere\u00e7o IP" - }, - "title": "Associar WLED" - }, - "zeroconf_confirm": { - "title": "Dispositivo WLED descoberto" - } - }, - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/ru.json b/homeassistant/components/wled/.translations/ru.json deleted file mode 100644 index a1893bbce58..00000000000 --- a/homeassistant/components/wled/.translations/ru.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "connection_error": "\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." - }, - "error": { - "connection_error": "\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." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" - }, - "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 WLED \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Home Assistant.", - "title": "WLED" - }, - "zeroconf_confirm": { - "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c WLED `{name}`?", - "title": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e WLED" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/sl.json b/homeassistant/components/wled/.translations/sl.json deleted file mode 100644 index b9ffb347a80..00000000000 --- a/homeassistant/components/wled/.translations/sl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta naprava WLED je \u017ee konfigurirana.", - "connection_error": "Povezava z napravo WLED ni uspela." - }, - "error": { - "connection_error": "Povezava z napravo WLED ni uspela." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "Gostitelj ali IP naslov" - }, - "description": "Nastavite svoj WLED za integracijo s Home Assistant.", - "title": "Pove\u017eite svoj WLED" - }, - "zeroconf_confirm": { - "description": "Ali \u017eelite dodati WLED z imenom `{name}` v Home Assistant?", - "title": "Odkrite WLED naprave" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/sv.json b/homeassistant/components/wled/.translations/sv.json deleted file mode 100644 index 980c023118e..00000000000 --- a/homeassistant/components/wled/.translations/sv.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Den h\u00e4r WLED-enheten \u00e4r redan konfigurerad.", - "connection_error": "Det gick inte att ansluta till WLED-enheten." - }, - "error": { - "connection_error": "Det gick inte att ansluta till WLED-enheten." - }, - "flow_title": "WLED: {name}", - "step": { - "user": { - "data": { - "host": "V\u00e4rd eller IP-adress" - }, - "description": "St\u00e4ll in din WLED f\u00f6r att integrera med Home Assistant.", - "title": "L\u00e4nka din WLED" - }, - "zeroconf_confirm": { - "description": "Vill du l\u00e4gga till WLED med namnet `{name}` till Home Assistant?", - "title": "Uppt\u00e4ckt WLED-enhet" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/.translations/zh-Hant.json b/homeassistant/components/wled/.translations/zh-Hant.json deleted file mode 100644 index 14139a20401..00000000000 --- a/homeassistant/components/wled/.translations/zh-Hant.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "WLED \u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "connection_error": "WLED \u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" - }, - "error": { - "connection_error": "WLED \u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" - }, - "flow_title": "WLED\uff1a{name}", - "step": { - "user": { - "data": { - "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740" - }, - "description": "\u8a2d\u5b9a WLED \u4ee5\u6574\u5408\u81f3 Home Assistant\u3002", - "title": "\u9023\u7d50 WLED" - }, - "zeroconf_confirm": { - "description": "\u662f\u5426\u8981\u65b0\u589e WLED \u540d\u7a31\u300c{name}\u300d\u8a2d\u5099\u81f3 Home Assistant\uff1f", - "title": "\u81ea\u52d5\u63a2\u7d22\u5230 WLED \u8a2d\u5099" - } - }, - "title": "WLED" - } -} \ No newline at end of file diff --git a/homeassistant/components/wled/manifest.json b/homeassistant/components/wled/manifest.json index d501edbd631..0e5bb990bae 100644 --- a/homeassistant/components/wled/manifest.json +++ b/homeassistant/components/wled/manifest.json @@ -4,7 +4,6 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/wled", "requirements": ["wled==0.3.0"], - "dependencies": [], "zeroconf": ["_wled._tcp.local."], "codeowners": ["@frenck"], "quality_scale": "platinum" diff --git a/homeassistant/components/wled/strings.json b/homeassistant/components/wled/strings.json index dde66b8e122..4200fd96301 100644 --- a/homeassistant/components/wled/strings.json +++ b/homeassistant/components/wled/strings.json @@ -1,23 +1,17 @@ { "config": { - "title": "WLED", "flow_title": "WLED: {name}", "step": { "user": { - "title": "Link your WLED", "description": "Set up your WLED to integrate with Home Assistant.", - "data": { - "host": "Host or IP address" - } + "data": { "host": "Host or IP address" } }, "zeroconf_confirm": { "description": "Do you want to add the WLED named `{name}` to Home Assistant?", "title": "Discovered WLED device" } }, - "error": { - "connection_error": "Failed to connect to WLED device." - }, + "error": { "connection_error": "Failed to connect to WLED device." }, "abort": { "already_configured": "This WLED device is already configured.", "connection_error": "Failed to connect to WLED device." diff --git a/homeassistant/components/wled/translations/af.json b/homeassistant/components/wled/translations/af.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/af.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ar.json b/homeassistant/components/wled/translations/ar.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/ar.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/bg.json b/homeassistant/components/wled/translations/bg.json new file mode 100644 index 00000000000..8e091a7eace --- /dev/null +++ b/homeassistant/components/wled/translations/bg.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "\u0410\u0434\u0440\u0435\u0441" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/bs.json b/homeassistant/components/wled/translations/bs.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/bs.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ca.json b/homeassistant/components/wled/translations/ca.json new file mode 100644 index 00000000000..ac47147207e --- /dev/null +++ b/homeassistant/components/wled/translations/ca.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Aquest dispositiu WLED ja est\u00e0 configurat.", + "connection_error": "No s'ha pogut connectar amb el dispositiu WLED." + }, + "error": { + "connection_error": "No s'ha pogut connectar amb el dispositiu WLED." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3 o adre\u00e7a IP" + }, + "description": "Configura el teu WLED per integrar-lo amb Home Assistant.", + "title": "Enlla\u00e7 amb WLED" + }, + "zeroconf_confirm": { + "description": "Vols afegir el WLED `{name}` a Home Assistant?", + "title": "Dispositiu WLED descobert" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/cs.json b/homeassistant/components/wled/translations/cs.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/cs.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/cy.json b/homeassistant/components/wled/translations/cy.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/cy.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/da.json b/homeassistant/components/wled/translations/da.json new file mode 100644 index 00000000000..739a9befa82 --- /dev/null +++ b/homeassistant/components/wled/translations/da.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "V\u00e6rt eller IP-adresse" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/de.json b/homeassistant/components/wled/translations/de.json new file mode 100644 index 00000000000..697fa1acf52 --- /dev/null +++ b/homeassistant/components/wled/translations/de.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Dieses WLED-Ger\u00e4t ist bereits konfiguriert.", + "connection_error": "Verbindung zum WLED-Ger\u00e4t fehlgeschlagen." + }, + "error": { + "connection_error": "Verbindung zum WLED-Ger\u00e4t fehlgeschlagen." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Hostname oder IP-Adresse" + }, + "description": "Richten Sie Ihren WLED f\u00fcr die Integration mit Home Assistant ein.", + "title": "Verkn\u00fcpfen Sie Ihre WLED" + }, + "zeroconf_confirm": { + "description": "M\u00f6chten Sie die WLED mit dem Namen `{name}` zu Home Assistant hinzuf\u00fcgen?", + "title": "WLED-Ger\u00e4t entdeckt" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/el.json b/homeassistant/components/wled/translations/el.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/el.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/en.json b/homeassistant/components/wled/translations/en.json new file mode 100644 index 00000000000..7c63779d5ac --- /dev/null +++ b/homeassistant/components/wled/translations/en.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "This WLED device is already configured.", + "connection_error": "Failed to connect to WLED device." + }, + "error": { + "connection_error": "Failed to connect to WLED device." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Host or IP address" + }, + "description": "Set up your WLED to integrate with Home Assistant.", + "title": "Link your WLED" + }, + "zeroconf_confirm": { + "description": "Do you want to add the WLED named `{name}` to Home Assistant?", + "title": "Discovered WLED device" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/eo.json b/homeassistant/components/wled/translations/eo.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/eo.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/es-419.json b/homeassistant/components/wled/translations/es-419.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/es-419.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/es.json b/homeassistant/components/wled/translations/es.json new file mode 100644 index 00000000000..b5973638373 --- /dev/null +++ b/homeassistant/components/wled/translations/es.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "Host o direcci\u00f3n IP" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/et.json b/homeassistant/components/wled/translations/et.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/et.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/eu.json b/homeassistant/components/wled/translations/eu.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/eu.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/fa.json b/homeassistant/components/wled/translations/fa.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/fa.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/fi.json b/homeassistant/components/wled/translations/fi.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/fi.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/fr.json b/homeassistant/components/wled/translations/fr.json new file mode 100644 index 00000000000..ded950bdf69 --- /dev/null +++ b/homeassistant/components/wled/translations/fr.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "H\u00f4te ou adresse IP" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/gsw.json b/homeassistant/components/wled/translations/gsw.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/gsw.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/he.json b/homeassistant/components/wled/translations/he.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/he.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/hi.json b/homeassistant/components/wled/translations/hi.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/hi.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/hr.json b/homeassistant/components/wled/translations/hr.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/hr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/hu.json b/homeassistant/components/wled/translations/hu.json new file mode 100644 index 00000000000..5ffd902214e --- /dev/null +++ b/homeassistant/components/wled/translations/hu.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "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": "Nem siker\u00fclt csatlakozni a WLED eszk\u00f6zh\u00f6z." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Hosztn\u00e9v vagy IP c\u00edm" + }, + "description": "\u00c1ll\u00edtsd be a WLED-et a Home Assistant-ba val\u00f3 integr\u00e1l\u00e1shoz.", + "title": "Csatlakoztasd a WLED-et" + }, + "zeroconf_confirm": { + "description": "Szeretn\u00e9d hozz\u00e1adni a(z) `{name}` WLED-et a Home Assistant-hoz?", + "title": "Felfedezett WLED eszk\u00f6z" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/iba.json b/homeassistant/components/wled/translations/iba.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/iba.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/id.json b/homeassistant/components/wled/translations/id.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/id.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/is.json b/homeassistant/components/wled/translations/is.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/is.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/it.json b/homeassistant/components/wled/translations/it.json new file mode 100644 index 00000000000..60a896c34d1 --- /dev/null +++ b/homeassistant/components/wled/translations/it.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Questo dispositivo WLED \u00e8 gi\u00e0 configurato.", + "connection_error": "Impossibile connettersi al dispositivo WLED." + }, + "error": { + "connection_error": "Impossibile connettersi al dispositivo WLED." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Host o indirizzo IP" + }, + "description": "Configura WLED per l'integrazione con Home Assistant.", + "title": "Collega il tuo WLED" + }, + "zeroconf_confirm": { + "description": "Vuoi aggiungere il WLED chiamato `{name}` a Home Assistant?", + "title": "Dispositivo WLED rilevato" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ja.json b/homeassistant/components/wled/translations/ja.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/ja.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ko.json b/homeassistant/components/wled/translations/ko.json new file mode 100644 index 00000000000..b811023e88e --- /dev/null +++ b/homeassistant/components/wled/translations/ko.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "\ud638\uc2a4\ud2b8 \ub610\ub294 IP \uc8fc\uc18c" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/lb.json b/homeassistant/components/wled/translations/lb.json new file mode 100644 index 00000000000..7657e1a12cc --- /dev/null +++ b/homeassistant/components/wled/translations/lb.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebsen WLED Apparat ass scho konfigur\u00e9iert.", + "connection_error": "Feeler beim verbannen mam WLED Apparat." + }, + "error": { + "connection_error": "Feeler beim verbannen mam WLED Apparat." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Numm oder IP Adresse" + }, + "description": "D\u00e4in WLED als Integratioun mam Home Assistant ariichten.", + "title": "D\u00e4in WLED verbannen" + }, + "zeroconf_confirm": { + "description": "Soll de WLED mam Numm `{name}` am Home Assistant dob\u00e4i gesaat ginn?", + "title": "Entdeckten WLED Apparat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/lt.json b/homeassistant/components/wled/translations/lt.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/lt.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/lv.json b/homeassistant/components/wled/translations/lv.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/lv.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/nl.json b/homeassistant/components/wled/translations/nl.json new file mode 100644 index 00000000000..5b78cbd791b --- /dev/null +++ b/homeassistant/components/wled/translations/nl.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "Hostnaam of IP-adres" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/nn.json b/homeassistant/components/wled/translations/nn.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/nn.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/no.json b/homeassistant/components/wled/translations/no.json new file mode 100644 index 00000000000..34c645e9802 --- /dev/null +++ b/homeassistant/components/wled/translations/no.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Denne WLED-enheten er allerede konfigurert.", + "connection_error": "Kunne ikke koble til WLED-enheten." + }, + "error": { + "connection_error": "Kunne ikke koble til WLED-enheten." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Vert eller IP-adresse" + }, + "description": "Konfigurer WLED til \u00e5 integreres med Home Assistant.", + "title": "Linken din WLED" + }, + "zeroconf_confirm": { + "description": "Vil du legge til WLED med navnet ' {name} ' i Home Assistant?", + "title": "Oppdaget WLED-enhet" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/pl.json b/homeassistant/components/wled/translations/pl.json new file mode 100644 index 00000000000..8e4d8cec492 --- /dev/null +++ b/homeassistant/components/wled/translations/pl.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/pt-BR.json b/homeassistant/components/wled/translations/pt-BR.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/pt-BR.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/pt.json b/homeassistant/components/wled/translations/pt.json new file mode 100644 index 00000000000..356c842839e --- /dev/null +++ b/homeassistant/components/wled/translations/pt.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "Nome servidor ou endere\u00e7o IP" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ro.json b/homeassistant/components/wled/translations/ro.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/ro.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ru.json b/homeassistant/components/wled/translations/ru.json new file mode 100644 index 00000000000..21b5282eb6d --- /dev/null +++ b/homeassistant/components/wled/translations/ru.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "connection_error": "\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." + }, + "error": { + "connection_error": "\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." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441" + }, + "description": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 WLED \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 Home Assistant.", + "title": "WLED" + }, + "zeroconf_confirm": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c WLED `{name}`?", + "title": "WLED" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/sk.json b/homeassistant/components/wled/translations/sk.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/sk.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/sl.json b/homeassistant/components/wled/translations/sl.json new file mode 100644 index 00000000000..e0f4b187e54 --- /dev/null +++ b/homeassistant/components/wled/translations/sl.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Ta naprava WLED je \u017ee konfigurirana.", + "connection_error": "Povezava z napravo WLED ni uspela." + }, + "error": { + "connection_error": "Povezava z napravo WLED ni uspela." + }, + "flow_title": "WLED: {name}", + "step": { + "user": { + "data": { + "host": "Gostitelj ali IP naslov" + }, + "description": "Nastavite svoj WLED za integracijo s Home Assistant.", + "title": "Pove\u017eite svoj WLED" + }, + "zeroconf_confirm": { + "description": "Ali \u017eelite dodati WLED z imenom `{name}` v Home Assistant?", + "title": "Odkrite WLED naprave" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/sr-Latn.json b/homeassistant/components/wled/translations/sr-Latn.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/sr-Latn.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/sr.json b/homeassistant/components/wled/translations/sr.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/sr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/sv.json b/homeassistant/components/wled/translations/sv.json new file mode 100644 index 00000000000..a348c0d5572 --- /dev/null +++ b/homeassistant/components/wled/translations/sv.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "data": { + "host": "V\u00e4rd eller IP-adress" + }, + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ta.json b/homeassistant/components/wled/translations/ta.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/ta.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/te.json b/homeassistant/components/wled/translations/te.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/te.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/th.json b/homeassistant/components/wled/translations/th.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/th.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/tr.json b/homeassistant/components/wled/translations/tr.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/tr.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/uk.json b/homeassistant/components/wled/translations/uk.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/uk.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/ur.json b/homeassistant/components/wled/translations/ur.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/ur.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/vi.json b/homeassistant/components/wled/translations/vi.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/vi.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/zh-Hans.json b/homeassistant/components/wled/translations/zh-Hans.json new file mode 100644 index 00000000000..a9107341e37 --- /dev/null +++ b/homeassistant/components/wled/translations/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "error": { + "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "step": { + "user": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + }, + "zeroconf_confirm": { + "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/zh-Hant.json b/homeassistant/components/wled/translations/zh-Hant.json new file mode 100644 index 00000000000..1b3b3f9fb2a --- /dev/null +++ b/homeassistant/components/wled/translations/zh-Hant.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "WLED \u8a2d\u5099\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "connection_error": "WLED \u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" + }, + "error": { + "connection_error": "WLED \u8a2d\u5099\u9023\u7dda\u5931\u6557\u3002" + }, + "flow_title": "WLED\uff1a{name}", + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u6216 IP \u4f4d\u5740" + }, + "description": "\u8a2d\u5b9a WLED \u4ee5\u6574\u5408\u81f3 Home Assistant\u3002", + "title": "\u9023\u7d50 WLED" + }, + "zeroconf_confirm": { + "description": "\u662f\u5426\u8981\u65b0\u589e WLED \u540d\u7a31\u300c{name}\u300d\u8a2d\u5099\u81f3 Home Assistant\uff1f", + "title": "\u81ea\u52d5\u63a2\u7d22\u5230 WLED \u8a2d\u5099" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/workday/manifest.json b/homeassistant/components/workday/manifest.json index 21b84d87cbb..393a251bb7f 100644 --- a/homeassistant/components/workday/manifest.json +++ b/homeassistant/components/workday/manifest.json @@ -2,8 +2,7 @@ "domain": "workday", "name": "Workday", "documentation": "https://www.home-assistant.io/integrations/workday", - "requirements": ["holidays==0.10.1"], - "dependencies": [], + "requirements": ["holidays==0.10.2"], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/worldclock/manifest.json b/homeassistant/components/worldclock/manifest.json index 9008fbc4855..4f13e8fba90 100644 --- a/homeassistant/components/worldclock/manifest.json +++ b/homeassistant/components/worldclock/manifest.json @@ -2,8 +2,6 @@ "domain": "worldclock", "name": "Worldclock", "documentation": "https://www.home-assistant.io/integrations/worldclock", - "requirements": [], - "dependencies": [], "codeowners": ["@fabaff"], "quality_scale": "internal" } diff --git a/homeassistant/components/worldtidesinfo/manifest.json b/homeassistant/components/worldtidesinfo/manifest.json index 56aa445bc08..b4c3d9509d4 100644 --- a/homeassistant/components/worldtidesinfo/manifest.json +++ b/homeassistant/components/worldtidesinfo/manifest.json @@ -2,7 +2,5 @@ "domain": "worldtidesinfo", "name": "World Tides", "documentation": "https://www.home-assistant.io/integrations/worldtidesinfo", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/worxlandroid/manifest.json b/homeassistant/components/worxlandroid/manifest.json index 479470f5a3a..a8a722ff93e 100644 --- a/homeassistant/components/worxlandroid/manifest.json +++ b/homeassistant/components/worxlandroid/manifest.json @@ -2,7 +2,5 @@ "domain": "worxlandroid", "name": "Worx Landroid", "documentation": "https://www.home-assistant.io/integrations/worxlandroid", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wsdot/manifest.json b/homeassistant/components/wsdot/manifest.json index 73e6c2fe6a7..386b14a3a6a 100644 --- a/homeassistant/components/wsdot/manifest.json +++ b/homeassistant/components/wsdot/manifest.json @@ -2,7 +2,5 @@ "domain": "wsdot", "name": "Washington State Department of Transportation (WSDOT)", "documentation": "https://www.home-assistant.io/integrations/wsdot", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wsdot/sensor.py b/homeassistant/components/wsdot/sensor.py index 6ee55aa387f..786fd07f626 100644 --- a/homeassistant/components/wsdot/sensor.py +++ b/homeassistant/components/wsdot/sensor.py @@ -13,6 +13,7 @@ from homeassistant.const import ( CONF_API_KEY, CONF_ID, CONF_NAME, + HTTP_OK, TIME_MINUTES, ) import homeassistant.helpers.config_validation as cv @@ -112,7 +113,7 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor): } response = requests.get(RESOURCE, params, timeout=10) - if response.status_code != 200: + if response.status_code != HTTP_OK: _LOGGER.warning("Invalid response from WSDOT API") else: self._data = response.json() diff --git a/homeassistant/components/wunderground/manifest.json b/homeassistant/components/wunderground/manifest.json index b429aad3a78..85f3be46029 100644 --- a/homeassistant/components/wunderground/manifest.json +++ b/homeassistant/components/wunderground/manifest.json @@ -2,7 +2,5 @@ "domain": "wunderground", "name": "Weather Underground (WUnderground)", "documentation": "https://www.home-assistant.io/integrations/wunderground", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wunderground/sensor.py b/homeassistant/components/wunderground/sensor.py index de1e48c9c14..d6b7cb447f9 100644 --- a/homeassistant/components/wunderground/sensor.py +++ b/homeassistant/components/wunderground/sensor.py @@ -17,6 +17,7 @@ from homeassistant.const import ( CONF_LATITUDE, CONF_LONGITUDE, CONF_MONITORED_CONDITIONS, + DEGREE, IRRADIATION_WATTS_PER_SQUARE_METER, LENGTH_FEET, LENGTH_INCHES, @@ -217,9 +218,9 @@ class WUHourlyForecastSensorConfig(WUSensorConfig): :param field: field name to use as value """ super().__init__( - friendly_name=lambda wu: "{} {}".format( - wu.data["hourly_forecast"][period]["FCTTIME"]["weekday_name_abbrev"], - wu.data["hourly_forecast"][period]["FCTTIME"]["civil"], + friendly_name=lambda wu: ( + f"{wu.data['hourly_forecast'][period]['FCTTIME']['weekday_name_abbrev']} " + f"{wu.data['hourly_forecast'][period]['FCTTIME']['civil']}" ), feature="hourly", value=lambda wu: wu.data["hourly_forecast"][period][field], @@ -329,7 +330,7 @@ class WUAlertsSensorConfig(WUSensorConfig): for alert in ALERTS_ATTRS: if data[alert]: if multiple_alerts: - dkey = alert.capitalize() + "_" + data["type"] + dkey = f"{alert.capitalize()}_{data['type']}" else: dkey = alert.capitalize() attrs[dkey] = data[alert] @@ -456,7 +457,7 @@ SENSOR_TYPES = { ), "weather": WUCurrentConditionsSensorConfig("Weather Summary", "weather", None), "wind_degrees": WUCurrentConditionsSensorConfig( - "Wind Degrees", "wind_degrees", "mdi:weather-windy", "°" + "Wind Degrees", "wind_degrees", "mdi:weather-windy", DEGREE ), "wind_dir": WUCurrentConditionsSensorConfig( "Wind Direction", "wind_dir", "mdi:weather-windy" @@ -477,8 +478,9 @@ SENSOR_TYPES = { "Wind Summary", "wind_string", "mdi:weather-windy" ), "temp_high_record_c": WUAlmanacSensorConfig( - lambda wu: "High Temperature Record ({})".format( - wu.data["almanac"]["temp_high"]["recordyear"] + lambda wu: ( + f"High Temperature Record " + f"({wu.data['almanac']['temp_high']['recordyear']})" ), "temp_high", "record", @@ -487,8 +489,9 @@ SENSOR_TYPES = { "mdi:thermometer", ), "temp_high_record_f": WUAlmanacSensorConfig( - lambda wu: "High Temperature Record ({})".format( - wu.data["almanac"]["temp_high"]["recordyear"] + lambda wu: ( + f"High Temperature Record " + f"({wu.data['almanac']['temp_high']['recordyear']})" ), "temp_high", "record", @@ -497,8 +500,9 @@ SENSOR_TYPES = { "mdi:thermometer", ), "temp_low_record_c": WUAlmanacSensorConfig( - lambda wu: "Low Temperature Record ({})".format( - wu.data["almanac"]["temp_low"]["recordyear"] + lambda wu: ( + f"Low Temperature Record " + f"({wu.data['almanac']['temp_low']['recordyear']})" ), "temp_low", "record", @@ -507,8 +511,9 @@ SENSOR_TYPES = { "mdi:thermometer", ), "temp_low_record_f": WUAlmanacSensorConfig( - lambda wu: "Low Temperature Record ({})".format( - wu.data["almanac"]["temp_low"]["recordyear"] + lambda wu: ( + f"Low Temperature Record " + f"({wu.data['almanac']['temp_low']['recordyear']})" ), "temp_low", "record", diff --git a/homeassistant/components/wunderlist/manifest.json b/homeassistant/components/wunderlist/manifest.json index 0502d8efd35..414a5eb7d33 100644 --- a/homeassistant/components/wunderlist/manifest.json +++ b/homeassistant/components/wunderlist/manifest.json @@ -3,6 +3,5 @@ "name": "Wunderlist", "documentation": "https://www.home-assistant.io/integrations/wunderlist", "requirements": ["wunderpy2==0.1.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/wunderlist/services.yaml b/homeassistant/components/wunderlist/services.yaml index a3b097c5d35..1b824e43843 100644 --- a/homeassistant/components/wunderlist/services.yaml +++ b/homeassistant/components/wunderlist/services.yaml @@ -6,10 +6,10 @@ create_task: fields: list_name: description: name of the new list where the task will be created - example: 'Shopping list' + example: "Shopping list" name: description: name of the new task - example: 'Buy 5 bottles of beer' + example: "Buy 5 bottles of beer" starred: description: Create the task as starred [Optional] example: true diff --git a/homeassistant/components/wwlln/.translations/bg.json b/homeassistant/components/wwlln/.translations/bg.json deleted file mode 100644 index f252518fcab..00000000000 --- a/homeassistant/components/wwlln/.translations/bg.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", - "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430", - "radius": "\u0420\u0430\u0434\u0438\u0443\u0441 (\u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u043a\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0430\u0442\u0430 \u043e\u0442 \u0412\u0430\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442 \u043c\u0435\u0440\u043d\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0438)" - }, - "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0441\u0438." - } - }, - "title": "\u0421\u0432\u0435\u0442\u043e\u0432\u043d\u0430 \u043c\u0440\u0435\u0436\u0430 \u0437\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u044a\u043b\u043d\u0438\u044f (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/ca.json b/homeassistant/components/wwlln/.translations/ca.json deleted file mode 100644 index f7fe15f27ec..00000000000 --- a/homeassistant/components/wwlln/.translations/ca.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Aquesta ubicaci\u00f3 ja est\u00e0 registrada." - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "radius": "Radi (utilitzant el sistema d'unitats establert)" - }, - "title": "Introdueix la teva informaci\u00f3 d'ubicaci\u00f3." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/cy.json b/homeassistant/components/wwlln/.translations/cy.json deleted file mode 100644 index 6050207304f..00000000000 --- a/homeassistant/components/wwlln/.translations/cy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Lledred", - "longitude": "Hydred", - "radius": "Radiws (gan ddefnyddio'ch system uned sylfaenol)" - }, - "title": "Cwblhewch gwybodaeth eich lleoliad" - } - }, - "title": "Rhwydwaith Lleoliad Golau Byd-eang (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/da.json b/homeassistant/components/wwlln/.translations/da.json deleted file mode 100644 index df10f39657a..00000000000 --- a/homeassistant/components/wwlln/.translations/da.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Breddegrad", - "longitude": "L\u00e6ngdegrad", - "radius": "Radius (ved hj\u00e6lp af dit basisenhedssystem)" - }, - "title": "Udfyld dine lokalitetsoplysninger." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/de.json b/homeassistant/components/wwlln/.translations/de.json deleted file mode 100644 index 487f2294dc6..00000000000 --- a/homeassistant/components/wwlln/.translations/de.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Dieser Standort ist bereits registriert." - }, - "step": { - "user": { - "data": { - "latitude": "Breitengrad", - "longitude": "L\u00e4ngengrad", - "radius": "Radius (mit Ma\u00dfeinheit)" - }, - "title": "Gib deine Standortinformationen ein." - } - }, - "title": "Weltweites Blitzlokalisierungsnetzwerk (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/en.json b/homeassistant/components/wwlln/.translations/en.json deleted file mode 100644 index 48896cc8682..00000000000 --- a/homeassistant/components/wwlln/.translations/en.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "This location is already registered." - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "radius": "Radius (using your base unit system)" - }, - "title": "Fill in your location information." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/es-419.json b/homeassistant/components/wwlln/.translations/es-419.json deleted file mode 100644 index 6b2e5d23ffb..00000000000 --- a/homeassistant/components/wwlln/.translations/es-419.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "radius": "Radio (usando su sistema de unidad base)" - }, - "title": "Complete su informaci\u00f3n de ubicaci\u00f3n." - } - }, - "title": "Red Mundial de Localizaci\u00f3n de Rayos (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/es.json b/homeassistant/components/wwlln/.translations/es.json deleted file mode 100644 index 22eb2c1e704..00000000000 --- a/homeassistant/components/wwlln/.translations/es.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Esta ubicaci\u00f3n ya est\u00e1 registrada." - }, - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "radius": "Radio (usando la unidad base del sistema)" - }, - "title": "Completa la informaci\u00f3n de tu ubicaci\u00f3n." - } - }, - "title": "Red mundial de localizaci\u00f3n de rayos (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/fr.json b/homeassistant/components/wwlln/.translations/fr.json deleted file mode 100644 index d19114286ad..00000000000 --- a/homeassistant/components/wwlln/.translations/fr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Cet emplacement est d\u00e9j\u00e0 enregistr\u00e9." - }, - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "radius": "Rayon (en utilisant votre syst\u00e8me d'unit\u00e9 de base)" - }, - "title": "Veuillez saisir vos informations d'emplacement." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/hr.json b/homeassistant/components/wwlln/.translations/hr.json deleted file mode 100644 index 3dec14ffa17..00000000000 --- a/homeassistant/components/wwlln/.translations/hr.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Zemljopisna \u0161irina", - "longitude": "Zemljopisna du\u017eina", - "radius": "Radius (koriste\u0107i sustav osnovne jedinice)" - }, - "title": "Ispunite podatke o lokaciji." - } - }, - "title": "Svjetska mre\u017ea lokacija munje (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/it.json b/homeassistant/components/wwlln/.translations/it.json deleted file mode 100644 index 1733cfdf172..00000000000 --- a/homeassistant/components/wwlln/.translations/it.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Questa posizione \u00e8 gi\u00e0 registrata." - }, - "step": { - "user": { - "data": { - "latitude": "Latitudine", - "longitude": "Longitudine", - "radius": "Raggio (utilizzando il tuo sistema di unit\u00e0 di misura di base)" - }, - "title": "Inserisci le informazioni sulla tua posizione." - } - }, - "title": "Rete mondiale di localizzazione dei fulmini (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/ko.json b/homeassistant/components/wwlln/.translations/ko.json deleted file mode 100644 index a71ebe3ea0c..00000000000 --- a/homeassistant/components/wwlln/.translations/ko.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\uc774 \uc704\uce58\ub294 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" - }, - "step": { - "user": { - "data": { - "latitude": "\uc704\ub3c4", - "longitude": "\uacbd\ub3c4", - "radius": "\ubc18\uacbd (\uae30\ubcf8 \ub2e8\uc704 \uc2dc\uc2a4\ud15c \uc0ac\uc6a9)" - }, - "title": "\uc704\uce58 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694." - } - }, - "title": "\uc138\uacc4 \ub099\ub8b0 \uc704\uce58\ub9dd (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/lb.json b/homeassistant/components/wwlln/.translations/lb.json deleted file mode 100644 index 9632cb372b2..00000000000 --- a/homeassistant/components/wwlln/.translations/lb.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "D\u00ebse Standuert ass scho registr\u00e9iert" - }, - "step": { - "user": { - "data": { - "latitude": "Breedegrad", - "longitude": "L\u00e4ngegrad", - "radius": "Radius (mat \u00e4ren Basis Unit\u00e9ite System)" - }, - "title": "F\u00ebllt \u00e4r Informatiounen aus." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/nl.json b/homeassistant/components/wwlln/.translations/nl.json deleted file mode 100644 index 542c53f0c03..00000000000 --- a/homeassistant/components/wwlln/.translations/nl.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Breedtegraad", - "longitude": "Lengtegraad", - "radius": "Radius (met behulp van uw basisstation systeem)" - }, - "title": "Vul uw locatiegegevens in." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/no.json b/homeassistant/components/wwlln/.translations/no.json deleted file mode 100644 index fab8810ba5e..00000000000 --- a/homeassistant/components/wwlln/.translations/no.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Denne plasseringen er allerede registrert." - }, - "step": { - "user": { - "data": { - "latitude": "Breddegrad", - "longitude": "Lengdegrad", - "radius": "Radius (ved hjelp av ditt basenhetssystem)" - }, - "title": "Fyll ut posisjonsinformasjonen din." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/pl.json b/homeassistant/components/wwlln/.translations/pl.json deleted file mode 100644 index 22d84209b7f..00000000000 --- a/homeassistant/components/wwlln/.translations/pl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta lokalizacja jest ju\u017c zarejestrowana." - }, - "step": { - "user": { - "data": { - "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna", - "radius": "Promie\u0144 (przy u\u017cyciu systemu jednostki bazowej)" - }, - "title": "Wprowad\u017a informacje o lokalizacji." - } - }, - "title": "\u015awiatowa sie\u0107 lokalizacji wy\u0142adowa\u0144 atmosferycznych (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/pt-BR.json b/homeassistant/components/wwlln/.translations/pt-BR.json deleted file mode 100644 index 296588f66a8..00000000000 --- a/homeassistant/components/wwlln/.translations/pt-BR.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Latitude", - "longitude": "Longitude", - "radius": "Raio (usando seu sistema de unidade base)" - }, - "title": "Preencha suas informa\u00e7\u00f5es de localiza\u00e7\u00e3o." - } - }, - "title": "Rede mundial de localiza\u00e7\u00e3o de rel\u00e2mpagos (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/ru.json b/homeassistant/components/wwlln/.translations/ru.json deleted file mode 100644 index b67d70e057b..00000000000 --- a/homeassistant/components/wwlln/.translations/ru.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "step": { - "user": { - "data": { - "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", - "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", - "radius": "\u0420\u0430\u0434\u0438\u0443\u0441 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0412\u0430\u0448\u0443 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0435\u0434\u0438\u043d\u0438\u0446)" - }, - "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" - } - }, - "title": "\u0412\u0441\u0435\u043c\u0438\u0440\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u043b\u043d\u0438\u0439 (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/sl.json b/homeassistant/components/wwlln/.translations/sl.json deleted file mode 100644 index 11fc4f00db8..00000000000 --- a/homeassistant/components/wwlln/.translations/sl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Ta lokacija je \u017ee registrirana." - }, - "step": { - "user": { - "data": { - "latitude": "Zemljepisna \u0161irina", - "longitude": "Zemljepisna dol\u017eina", - "radius": "Obmo\u010dje (z uporabo va\u0161ih osnovnih enot)" - }, - "title": "Izpolnite podatke o va\u0161i lokaciji." - } - }, - "title": "Svetovna mre\u017ea za lokacije strel (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/sv.json b/homeassistant/components/wwlln/.translations/sv.json deleted file mode 100644 index 3180c543452..00000000000 --- a/homeassistant/components/wwlln/.translations/sv.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "Latitud", - "longitude": "Longitud", - "radius": "Radie (i basinst\u00e4llningarnas enheter)" - }, - "title": "Fyll i platsinformation." - } - }, - "title": "World Wide Lightning Location Network (WWLLN)" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/zh-Hans.json b/homeassistant/components/wwlln/.translations/zh-Hans.json deleted file mode 100644 index e53d33512e1..00000000000 --- a/homeassistant/components/wwlln/.translations/zh-Hans.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "latitude": "\u7eac\u5ea6", - "longitude": "\u7ecf\u5ea6", - "radius": "\u534a\u5f84\uff08\u4f7f\u7528\u57fa\u672c\u5355\u4f4d\u7cfb\u7edf\uff09" - }, - "title": "\u586b\u5199\u60a8\u7684\u4f4d\u7f6e\u4fe1\u606f\u3002" - } - }, - "title": "\u5168\u7403\u95ea\u7535\u5b9a\u4f4d\u7f51\u7edc\uff08WWLLN\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/zh-Hant.json b/homeassistant/components/wwlln/.translations/zh-Hant.json deleted file mode 100644 index fac13ffe77f..00000000000 --- a/homeassistant/components/wwlln/.translations/zh-Hant.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u6b64\u4f4d\u7f6e\u5df2\u8a3b\u518a\u3002" - }, - "step": { - "user": { - "data": { - "latitude": "\u7def\u5ea6", - "longitude": "\u7d93\u5ea6", - "radius": "\u534a\u5f91\uff08\u4f7f\u7528\u57fa\u672c\u55ae\u4f4d\u7cfb\u7d71\uff09" - }, - "title": "\u586b\u5beb\u5ea7\u6a19\u8cc7\u8a0a\u3002" - } - }, - "title": "\u5168\u7403\u9583\u96fb\u5b9a\u4f4d\u7db2\uff08WWLLN\uff09" - } -} \ No newline at end of file diff --git a/homeassistant/components/wwlln/manifest.json b/homeassistant/components/wwlln/manifest.json index 343b8b8a8ce..19406ac4b7a 100644 --- a/homeassistant/components/wwlln/manifest.json +++ b/homeassistant/components/wwlln/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/wwlln", "requirements": ["aiowwlln==2.0.2"], - "dependencies": [], "codeowners": ["@bachya"] } diff --git a/homeassistant/components/wwlln/strings.json b/homeassistant/components/wwlln/strings.json index 0ab731eaf50..c3c9193df33 100644 --- a/homeassistant/components/wwlln/strings.json +++ b/homeassistant/components/wwlln/strings.json @@ -1,6 +1,5 @@ { "config": { - "title": "World Wide Lightning Location Network (WWLLN)", "step": { "user": { "title": "Fill in your location information.", @@ -11,8 +10,6 @@ } } }, - "abort": { - "already_configured": "This location is already registered." - } + "abort": { "already_configured": "This location is already registered." } } } diff --git a/homeassistant/components/wwlln/translations/bg.json b/homeassistant/components/wwlln/translations/bg.json new file mode 100644 index 00000000000..cd39935f171 --- /dev/null +++ b/homeassistant/components/wwlln/translations/bg.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430", + "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430", + "radius": "\u0420\u0430\u0434\u0438\u0443\u0441 (\u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u043a\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0430\u0442\u0430 \u043e\u0442 \u0412\u0430\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442 \u043c\u0435\u0440\u043d\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0438)" + }, + "title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0441\u0438." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/ca.json b/homeassistant/components/wwlln/translations/ca.json new file mode 100644 index 00000000000..b6e915aa35e --- /dev/null +++ b/homeassistant/components/wwlln/translations/ca.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Aquesta ubicaci\u00f3 ja est\u00e0 registrada." + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "radius": "Radi (utilitzant el sistema d'unitats establert)" + }, + "title": "Introdueix la teva informaci\u00f3 d'ubicaci\u00f3." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/cy.json b/homeassistant/components/wwlln/translations/cy.json new file mode 100644 index 00000000000..f9c36f4e72a --- /dev/null +++ b/homeassistant/components/wwlln/translations/cy.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Lledred", + "longitude": "Hydred", + "radius": "Radiws (gan ddefnyddio'ch system uned sylfaenol)" + }, + "title": "Cwblhewch gwybodaeth eich lleoliad" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/da.json b/homeassistant/components/wwlln/translations/da.json new file mode 100644 index 00000000000..b87d9af14f3 --- /dev/null +++ b/homeassistant/components/wwlln/translations/da.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "L\u00e6ngdegrad", + "radius": "Radius (ved hj\u00e6lp af dit basisenhedssystem)" + }, + "title": "Udfyld dine lokalitetsoplysninger." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/de.json b/homeassistant/components/wwlln/translations/de.json new file mode 100644 index 00000000000..2f59ea2d38c --- /dev/null +++ b/homeassistant/components/wwlln/translations/de.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Dieser Standort ist bereits registriert." + }, + "step": { + "user": { + "data": { + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "radius": "Radius (mit Ma\u00dfeinheit)" + }, + "title": "Gib deine Standortinformationen ein." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/en.json b/homeassistant/components/wwlln/translations/en.json new file mode 100644 index 00000000000..936c64c2a77 --- /dev/null +++ b/homeassistant/components/wwlln/translations/en.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "This location is already registered." + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "radius": "Radius (using your base unit system)" + }, + "title": "Fill in your location information." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/es-419.json b/homeassistant/components/wwlln/translations/es-419.json new file mode 100644 index 00000000000..1732a5b43bc --- /dev/null +++ b/homeassistant/components/wwlln/translations/es-419.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "radius": "Radio (usando su sistema de unidad base)" + }, + "title": "Complete su informaci\u00f3n de ubicaci\u00f3n." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/es.json b/homeassistant/components/wwlln/translations/es.json new file mode 100644 index 00000000000..16b3b461ad1 --- /dev/null +++ b/homeassistant/components/wwlln/translations/es.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Esta ubicaci\u00f3n ya est\u00e1 registrada." + }, + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "radius": "Radio (usando la unidad base del sistema)" + }, + "title": "Completa la informaci\u00f3n de tu ubicaci\u00f3n." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/fr.json b/homeassistant/components/wwlln/translations/fr.json new file mode 100644 index 00000000000..d4fad7f0160 --- /dev/null +++ b/homeassistant/components/wwlln/translations/fr.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Cet emplacement est d\u00e9j\u00e0 enregistr\u00e9." + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "radius": "Rayon (en utilisant votre syst\u00e8me d'unit\u00e9 de base)" + }, + "title": "Veuillez saisir vos informations d'emplacement." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/hr.json b/homeassistant/components/wwlln/translations/hr.json new file mode 100644 index 00000000000..43af25b9047 --- /dev/null +++ b/homeassistant/components/wwlln/translations/hr.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Zemljopisna \u0161irina", + "longitude": "Zemljopisna du\u017eina", + "radius": "Radius (koriste\u0107i sustav osnovne jedinice)" + }, + "title": "Ispunite podatke o lokaciji." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/.translations/hu.json b/homeassistant/components/wwlln/translations/hu.json similarity index 100% rename from homeassistant/components/wwlln/.translations/hu.json rename to homeassistant/components/wwlln/translations/hu.json diff --git a/homeassistant/components/wwlln/translations/it.json b/homeassistant/components/wwlln/translations/it.json new file mode 100644 index 00000000000..4193ccab890 --- /dev/null +++ b/homeassistant/components/wwlln/translations/it.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Questa posizione \u00e8 gi\u00e0 registrata." + }, + "step": { + "user": { + "data": { + "latitude": "Latitudine", + "longitude": "Longitudine", + "radius": "Raggio (utilizzando il tuo sistema di unit\u00e0 di misura di base)" + }, + "title": "Inserisci le informazioni sulla tua posizione." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/ko.json b/homeassistant/components/wwlln/translations/ko.json new file mode 100644 index 00000000000..5ddf4f05184 --- /dev/null +++ b/homeassistant/components/wwlln/translations/ko.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uc704\uce58\ub294 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "radius": "\ubc18\uacbd (\uae30\ubcf8 \ub2e8\uc704 \uc2dc\uc2a4\ud15c \uc0ac\uc6a9)" + }, + "title": "\uc704\uce58 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/lb.json b/homeassistant/components/wwlln/translations/lb.json new file mode 100644 index 00000000000..dcdc2becf06 --- /dev/null +++ b/homeassistant/components/wwlln/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "D\u00ebse Standuert ass scho registr\u00e9iert" + }, + "step": { + "user": { + "data": { + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad", + "radius": "Radius (mat \u00e4ren Basis Unit\u00e9ite System)" + }, + "title": "F\u00ebllt \u00e4r Informatiounen aus." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/nl.json b/homeassistant/components/wwlln/translations/nl.json new file mode 100644 index 00000000000..34388295976 --- /dev/null +++ b/homeassistant/components/wwlln/translations/nl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Deze locatie is al geregistreerd." + }, + "step": { + "user": { + "data": { + "latitude": "Breedtegraad", + "longitude": "Lengtegraad", + "radius": "Radius (met behulp van uw basisstation systeem)" + }, + "title": "Vul uw locatiegegevens in." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/no.json b/homeassistant/components/wwlln/translations/no.json new file mode 100644 index 00000000000..4ce9b99b738 --- /dev/null +++ b/homeassistant/components/wwlln/translations/no.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Denne plasseringen er allerede registrert." + }, + "step": { + "user": { + "data": { + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "radius": "Radius (ved hjelp av ditt basenhetssystem)" + }, + "title": "Fyll ut posisjonsinformasjonen din." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/pl.json b/homeassistant/components/wwlln/translations/pl.json new file mode 100644 index 00000000000..04071c31cb1 --- /dev/null +++ b/homeassistant/components/wwlln/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Ta lokalizacja jest ju\u017c zarejestrowana." + }, + "step": { + "user": { + "data": { + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "radius": "Promie\u0144 (przy u\u017cyciu systemu jednostki bazowej)" + }, + "title": "Wprowad\u017a informacje o lokalizacji." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/pt-BR.json b/homeassistant/components/wwlln/translations/pt-BR.json new file mode 100644 index 00000000000..9119d281dd5 --- /dev/null +++ b/homeassistant/components/wwlln/translations/pt-BR.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude", + "radius": "Raio (usando seu sistema de unidade base)" + }, + "title": "Preencha suas informa\u00e7\u00f5es de localiza\u00e7\u00e3o." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/pt.json b/homeassistant/components/wwlln/translations/pt.json new file mode 100644 index 00000000000..c7081cd694a --- /dev/null +++ b/homeassistant/components/wwlln/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/wwlln/translations/ru.json b/homeassistant/components/wwlln/translations/ru.json new file mode 100644 index 00000000000..007704bf406 --- /dev/null +++ b/homeassistant/components/wwlln/translations/ru.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "step": { + "user": { + "data": { + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "radius": "\u0420\u0430\u0434\u0438\u0443\u0441 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0412\u0430\u0448\u0443 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0435\u0434\u0438\u043d\u0438\u0446)" + }, + "title": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/sl.json b/homeassistant/components/wwlln/translations/sl.json new file mode 100644 index 00000000000..55712fd8590 --- /dev/null +++ b/homeassistant/components/wwlln/translations/sl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Ta lokacija je \u017ee registrirana." + }, + "step": { + "user": { + "data": { + "latitude": "Zemljepisna \u0161irina", + "longitude": "Zemljepisna dol\u017eina", + "radius": "Obmo\u010dje (z uporabo va\u0161ih osnovnih enot)" + }, + "title": "Izpolnite podatke o va\u0161i lokaciji." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/sv.json b/homeassistant/components/wwlln/translations/sv.json new file mode 100644 index 00000000000..22a91d7dfcc --- /dev/null +++ b/homeassistant/components/wwlln/translations/sv.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Latitud", + "longitude": "Longitud", + "radius": "Radie (i basinst\u00e4llningarnas enheter)" + }, + "title": "Fyll i platsinformation." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/zh-Hans.json b/homeassistant/components/wwlln/translations/zh-Hans.json new file mode 100644 index 00000000000..5346a777cd6 --- /dev/null +++ b/homeassistant/components/wwlln/translations/zh-Hans.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "\u7eac\u5ea6", + "longitude": "\u7ecf\u5ea6", + "radius": "\u534a\u5f84\uff08\u4f7f\u7528\u57fa\u672c\u5355\u4f4d\u7cfb\u7edf\uff09" + }, + "title": "\u586b\u5199\u60a8\u7684\u4f4d\u7f6e\u4fe1\u606f\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wwlln/translations/zh-Hant.json b/homeassistant/components/wwlln/translations/zh-Hant.json new file mode 100644 index 00000000000..7b4bfaa1c08 --- /dev/null +++ b/homeassistant/components/wwlln/translations/zh-Hant.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "\u6b64\u4f4d\u7f6e\u5df2\u8a3b\u518a\u3002" + }, + "step": { + "user": { + "data": { + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "radius": "\u534a\u5f91\uff08\u4f7f\u7528\u57fa\u672c\u55ae\u4f4d\u7cfb\u7d71\uff09" + }, + "title": "\u586b\u5beb\u5ea7\u6a19\u8cc7\u8a0a\u3002" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/x10/manifest.json b/homeassistant/components/x10/manifest.json index b994e50a7ac..ce51fcac0ca 100644 --- a/homeassistant/components/x10/manifest.json +++ b/homeassistant/components/x10/manifest.json @@ -2,7 +2,5 @@ "domain": "x10", "name": "Heyu X10", "documentation": "https://www.home-assistant.io/integrations/x10", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/xbox_live/manifest.json b/homeassistant/components/xbox_live/manifest.json index 4bf8e3faf62..f00f49c1589 100644 --- a/homeassistant/components/xbox_live/manifest.json +++ b/homeassistant/components/xbox_live/manifest.json @@ -3,6 +3,5 @@ "name": "Xbox Live", "documentation": "https://www.home-assistant.io/integrations/xbox_live", "requirements": ["xboxapi==0.1.1"], - "dependencies": [], "codeowners": ["@MartinHjelmare"] } diff --git a/homeassistant/components/xeoma/manifest.json b/homeassistant/components/xeoma/manifest.json index f5fd27b5063..9fb6cb8b598 100644 --- a/homeassistant/components/xeoma/manifest.json +++ b/homeassistant/components/xeoma/manifest.json @@ -3,6 +3,5 @@ "name": "Xeoma", "documentation": "https://www.home-assistant.io/integrations/xeoma", "requirements": ["pyxeoma==1.4.1"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/xfinity/manifest.json b/homeassistant/components/xfinity/manifest.json index 861a05da4c6..999b77dfb59 100644 --- a/homeassistant/components/xfinity/manifest.json +++ b/homeassistant/components/xfinity/manifest.json @@ -3,6 +3,5 @@ "name": "Xfinity Gateway", "documentation": "https://www.home-assistant.io/integrations/xfinity", "requirements": ["xfinity-gateway==0.0.4"], - "dependencies": [], "codeowners": ["@cisasteelersfan"] } diff --git a/homeassistant/components/xiaomi/camera.py b/homeassistant/components/xiaomi/camera.py index cc85f17146b..45466be2cc4 100644 --- a/homeassistant/components/xiaomi/camera.py +++ b/homeassistant/components/xiaomi/camera.py @@ -136,9 +136,7 @@ class XiaomiCamera(Camera): else: video = videos[-1] - return "ftp://{0}:{1}@{2}:{3}{4}/{5}".format( - self.user, self.passwd, host, self.port, ftp.pwd(), video - ) + return f"ftp://{self.user}:{self.passwd}@{host}:{self.port}{ftp.pwd()}/{video}" async def async_camera_image(self): """Return a still image response from the camera.""" diff --git a/homeassistant/components/xiaomi/device_tracker.py b/homeassistant/components/xiaomi/device_tracker.py index df16b13b931..530140b524f 100644 --- a/homeassistant/components/xiaomi/device_tracker.py +++ b/homeassistant/components/xiaomi/device_tracker.py @@ -9,7 +9,7 @@ from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DeviceScanner, ) -from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, HTTP_OK import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -112,7 +112,7 @@ def _retrieve_list(host, token, **kwargs): except requests.exceptions.Timeout: _LOGGER.exception("Connection to the router timed out at URL %s", url) return - if res.status_code != 200: + if res.status_code != HTTP_OK: _LOGGER.exception("Connection failed with http code %s", res.status_code) return try: @@ -150,7 +150,7 @@ def _get_token(host, username, password): except requests.exceptions.Timeout: _LOGGER.exception("Connection to the router timed out") return - if res.status_code == 200: + if res.status_code == HTTP_OK: try: result = res.json() except ValueError: diff --git a/homeassistant/components/xiaomi/manifest.json b/homeassistant/components/xiaomi/manifest.json index 4c5b2c19dd9..407406228a5 100644 --- a/homeassistant/components/xiaomi/manifest.json +++ b/homeassistant/components/xiaomi/manifest.json @@ -2,7 +2,6 @@ "domain": "xiaomi", "name": "Xiaomi", "documentation": "https://www.home-assistant.io/integrations/xiaomi", - "requirements": [], "dependencies": ["ffmpeg"], "codeowners": [] } diff --git a/homeassistant/components/xiaomi_aqara/__init__.py b/homeassistant/components/xiaomi_aqara/__init__.py index ae032a8b35f..450a6e4c862 100644 --- a/homeassistant/components/xiaomi_aqara/__init__.py +++ b/homeassistant/components/xiaomi_aqara/__init__.py @@ -242,8 +242,8 @@ class XiaomiDevice(Entity): self.parse_voltage(device["data"]) if hasattr(self, "_data_key") and self._data_key: # pylint: disable=no-member - self._unique_id = "{}{}".format( - self._data_key, self._sid # pylint: disable=no-member + self._unique_id = ( + f"{self._data_key}{self._sid}" # pylint: disable=no-member ) else: self._unique_id = f"{self._type}{self._sid}" @@ -286,7 +286,7 @@ class XiaomiDevice(Entity): """Set state to UNAVAILABLE.""" self._remove_unavailability_tracker = None self._is_available = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() @callback def _async_track_unavailable(self): @@ -308,7 +308,7 @@ class XiaomiDevice(Entity): is_data = self.parse_data(data, raw_data) is_voltage = self.parse_voltage(data) if is_data or is_voltage or was_unavailable: - self.async_schedule_update_ha_state() + self.async_write_ha_state() def parse_voltage(self, data): """Parse battery level data sent by gateway.""" diff --git a/homeassistant/components/xiaomi_aqara/binary_sensor.py b/homeassistant/components/xiaomi_aqara/binary_sensor.py index a7e49f681c4..2c95198f348 100644 --- a/homeassistant/components/xiaomi_aqara/binary_sensor.py +++ b/homeassistant/components/xiaomi_aqara/binary_sensor.py @@ -197,7 +197,7 @@ class XiaomiMotionSensor(XiaomiBinarySensor): """Set state to False.""" self._unsub_set_no_motion = None self._state = False - self.async_schedule_update_ha_state() + self.async_write_ha_state() def parse_data(self, data, raw_data): """Parse data sent by gateway. diff --git a/homeassistant/components/xiaomi_aqara/lock.py b/homeassistant/components/xiaomi_aqara/lock.py index befbfc001ba..ed71e05bf5f 100644 --- a/homeassistant/components/xiaomi_aqara/lock.py +++ b/homeassistant/components/xiaomi_aqara/lock.py @@ -63,7 +63,7 @@ class XiaomiAqaraLock(LockDevice, XiaomiDevice): def clear_unlock_state(self, _): """Clear unlock state automatically.""" self._state = STATE_LOCKED - self.async_schedule_update_ha_state() + self.async_write_ha_state() def parse_data(self, data, raw_data): """Parse data sent by gateway.""" diff --git a/homeassistant/components/xiaomi_aqara/manifest.json b/homeassistant/components/xiaomi_aqara/manifest.json index fade5e1a51b..e604b225fc4 100644 --- a/homeassistant/components/xiaomi_aqara/manifest.json +++ b/homeassistant/components/xiaomi_aqara/manifest.json @@ -3,7 +3,6 @@ "name": "Xiaomi Gateway (Aqara)", "documentation": "https://www.home-assistant.io/integrations/xiaomi_aqara", "requirements": ["PyXiaomiGateway==0.12.4"], - "dependencies": [], "after_dependencies": ["discovery"], "codeowners": ["@danielhiversen", "@syssi"] } diff --git a/homeassistant/components/xiaomi_aqara/services.yaml b/homeassistant/components/xiaomi_aqara/services.yaml index 0c5b89dc2cb..9d8c87e5863 100644 --- a/homeassistant/components/xiaomi_aqara/services.yaml +++ b/homeassistant/components/xiaomi_aqara/services.yaml @@ -1,22 +1,39 @@ add_device: - description: Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. + description: + Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new device can be added afterwards by pressing the pairing button once. fields: - gw_mac: {description: MAC address of the Xiaomi Aqara Gateway., example: 34ce00880088} + gw_mac: + description: MAC address of the Xiaomi Aqara Gateway. + example: 34ce00880088 play_ringtone: - description: Play a specific ringtone. The version of the gateway firmware must + description: + Play a specific ringtone. The version of the gateway firmware must be 1.4.1_145 at least. fields: - gw_mac: {description: MAC address of the Xiaomi Aqara Gateway., example: 34ce00880088} - ringtone_id: {description: One of the allowed ringtone ids., example: 8} - ringtone_vol: {description: The volume in percent., example: 30} + gw_mac: + description: MAC address of the Xiaomi Aqara Gateway. + example: 34ce00880088 + ringtone_id: + description: One of the allowed ringtone ids. + example: 8 + ringtone_vol: + description: The volume in percent. + example: 30 remove_device: - description: Removes a specific device. The removal is required if a device shall + description: + Removes a specific device. The removal is required if a device shall be paired with another gateway. fields: - device_id: {description: Hardware address of the device to remove., example: 158d0000000000} - gw_mac: {description: MAC address of the Xiaomi Aqara Gateway., example: 34ce00880088} + device_id: + description: Hardware address of the device to remove. + example: 158d0000000000 + gw_mac: + description: MAC address of the Xiaomi Aqara Gateway. + example: 34ce00880088 stop_ringtone: description: Stops a playing ringtone immediately. fields: - gw_mac: {description: MAC address of the Xiaomi Aqara Gateway., example: 34ce00880088} + gw_mac: + description: MAC address of the Xiaomi Aqara Gateway. + example: 34ce00880088 diff --git a/homeassistant/components/xiaomi_miio/air_quality.py b/homeassistant/components/xiaomi_miio/air_quality.py index 93aeb0d28b7..7da4da9c05d 100644 --- a/homeassistant/components/xiaomi_miio/air_quality.py +++ b/homeassistant/components/xiaomi_miio/air_quality.py @@ -5,12 +5,7 @@ from miio import AirQualityMonitor, Device, DeviceException import voluptuous as vol from homeassistant.components.air_quality import PLATFORM_SCHEMA, AirQualityEntity -from homeassistant.const import ( - CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, - CONF_HOST, - CONF_NAME, - CONF_TOKEN, -) +from homeassistant.const import CONF_HOST, CONF_NAME, CONF_TOKEN from homeassistant.exceptions import NoEntitySpecifiedError, PlatformNotReady import homeassistant.helpers.config_validation as cv @@ -93,7 +88,6 @@ class AirMonitorB1(AirQualityEntity): self._device = device self._unique_id = unique_id self._icon = "mdi:cloud" - self._unit_of_measurement = CONCENTRATION_MICROGRAMS_PER_CUBIC_METER self._available = None self._air_quality_index = None self._carbon_dioxide = None @@ -185,11 +179,6 @@ class AirMonitorB1(AirQualityEntity): return data - @property - def unit_of_measurement(self): - """Return the unit of measurement.""" - return self._unit_of_measurement - class AirMonitorS1(AirMonitorB1): """Air Quality class for Xiaomi cgllc.airmonitor.s1 device.""" diff --git a/homeassistant/components/xiaomi_miio/const.py b/homeassistant/components/xiaomi_miio/const.py index 54dd684f6b1..aaeaf19c5f9 100644 --- a/homeassistant/components/xiaomi_miio/const.py +++ b/homeassistant/components/xiaomi_miio/const.py @@ -10,6 +10,7 @@ SERVICE_SET_CHILD_LOCK_ON = "fan_set_child_lock_on" SERVICE_SET_CHILD_LOCK_OFF = "fan_set_child_lock_off" SERVICE_SET_LED_BRIGHTNESS = "fan_set_led_brightness" SERVICE_SET_FAVORITE_LEVEL = "fan_set_favorite_level" +SERVICE_SET_FAN_LEVEL = "fan_set_fan_level" SERVICE_SET_AUTO_DETECT_ON = "fan_set_auto_detect_on" SERVICE_SET_AUTO_DETECT_OFF = "fan_set_auto_detect_off" SERVICE_SET_LEARN_MODE_ON = "fan_set_learn_mode_on" diff --git a/homeassistant/components/xiaomi_miio/fan.py b/homeassistant/components/xiaomi_miio/fan.py index 7cb45296506..bd5a0c72047 100644 --- a/homeassistant/components/xiaomi_miio/fan.py +++ b/homeassistant/components/xiaomi_miio/fan.py @@ -8,6 +8,7 @@ from miio import ( # pylint: disable=import-error AirFresh, AirHumidifier, AirPurifier, + AirPurifierMiot, Device, DeviceException, ) @@ -23,6 +24,10 @@ from miio.airpurifier import ( # pylint: disable=import-error, import-error LedBrightness as AirpurifierLedBrightness, OperationMode as AirpurifierOperationMode, ) +from miio.airpurifier_miot import ( # pylint: disable=import-error, import-error + LedBrightness as AirpurifierMiotLedBrightness, + OperationMode as AirpurifierMiotOperationMode, +) import voluptuous as vol from homeassistant.components.fan import PLATFORM_SCHEMA, SUPPORT_SET_SPEED, FanEntity @@ -48,6 +53,7 @@ from .const import ( SERVICE_SET_DRY_OFF, SERVICE_SET_DRY_ON, SERVICE_SET_EXTRA_FEATURES, + SERVICE_SET_FAN_LEVEL, SERVICE_SET_FAVORITE_LEVEL, SERVICE_SET_LEARN_MODE_OFF, SERVICE_SET_LEARN_MODE_ON, @@ -77,6 +83,8 @@ MODEL_AIRPURIFIER_MA2 = "zhimi.airpurifier.ma2" MODEL_AIRPURIFIER_SA1 = "zhimi.airpurifier.sa1" MODEL_AIRPURIFIER_SA2 = "zhimi.airpurifier.sa2" MODEL_AIRPURIFIER_2S = "zhimi.airpurifier.mc1" +MODEL_AIRPURIFIER_3 = "zhimi.airpurifier.ma4" +MODEL_AIRPURIFIER_3H = "zhimi.airpurifier.mb3" MODEL_AIRHUMIDIFIER_V1 = "zhimi.humidifier.v1" MODEL_AIRHUMIDIFIER_CA1 = "zhimi.humidifier.ca1" @@ -104,6 +112,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( MODEL_AIRPURIFIER_SA1, MODEL_AIRPURIFIER_SA2, MODEL_AIRPURIFIER_2S, + MODEL_AIRPURIFIER_3, + MODEL_AIRPURIFIER_3H, MODEL_AIRHUMIDIFIER_V1, MODEL_AIRHUMIDIFIER_CA1, MODEL_AIRHUMIDIFIER_CB1, @@ -131,6 +141,7 @@ ATTR_AVERAGE_AIR_QUALITY_INDEX = "average_aqi" ATTR_PURIFY_VOLUME = "purify_volume" ATTR_BRIGHTNESS = "brightness" ATTR_LEVEL = "level" +ATTR_FAN_LEVEL = "fan_level" ATTR_MOTOR2_SPEED = "motor2_speed" ATTR_ILLUMINANCE = "illuminance" ATTR_FILTER_RFID_PRODUCT_ID = "filter_rfid_product_id" @@ -154,13 +165,15 @@ ATTR_TRANS_LEVEL = "trans_level" ATTR_HARDWARE_VERSION = "hardware_version" # Air Humidifier CA -ATTR_MOTOR_SPEED = "motor_speed" +# ATTR_MOTOR_SPEED = "motor_speed" ATTR_DEPTH = "depth" ATTR_DRY = "dry" # Air Fresh ATTR_CO2 = "co2" +PURIFIER_MIOT = [MODEL_AIRPURIFIER_3, MODEL_AIRPURIFIER_3H] + # Map attributes to properties of the state object AVAILABLE_ATTRIBUTES_AIRPURIFIER_COMMON = { ATTR_TEMPERATURE: "temperature", @@ -227,6 +240,28 @@ AVAILABLE_ATTRIBUTES_AIRPURIFIER_2S = { ATTR_ILLUMINANCE: "illuminance", } +AVAILABLE_ATTRIBUTES_AIRPURIFIER_3 = { + ATTR_TEMPERATURE: "temperature", + ATTR_HUMIDITY: "humidity", + ATTR_AIR_QUALITY_INDEX: "aqi", + ATTR_MODE: "mode", + ATTR_FILTER_HOURS_USED: "filter_hours_used", + ATTR_FILTER_LIFE: "filter_life_remaining", + ATTR_FAVORITE_LEVEL: "favorite_level", + ATTR_CHILD_LOCK: "child_lock", + ATTR_LED: "led", + ATTR_MOTOR_SPEED: "motor_speed", + ATTR_AVERAGE_AIR_QUALITY_INDEX: "average_aqi", + ATTR_PURIFY_VOLUME: "purify_volume", + ATTR_USE_TIME: "use_time", + ATTR_BUZZER: "buzzer", + ATTR_LED_BRIGHTNESS: "led_brightness", + ATTR_FILTER_RFID_PRODUCT_ID: "filter_rfid_product_id", + ATTR_FILTER_RFID_TAG: "filter_rfid_tag", + ATTR_FILTER_TYPE: "filter_type", + ATTR_FAN_LEVEL: "fan_level", +} + AVAILABLE_ATTRIBUTES_AIRPURIFIER_V3 = { # Common set isn't used here. It's a very basic version of the device. ATTR_AIR_QUALITY_INDEX: "aqi", @@ -302,6 +337,7 @@ OPERATION_MODES_AIRPURIFIER = ["Auto", "Silent", "Favorite", "Idle"] OPERATION_MODES_AIRPURIFIER_PRO = ["Auto", "Silent", "Favorite"] OPERATION_MODES_AIRPURIFIER_PRO_V7 = OPERATION_MODES_AIRPURIFIER_PRO OPERATION_MODES_AIRPURIFIER_2S = ["Auto", "Silent", "Favorite"] +OPERATION_MODES_AIRPURIFIER_3 = ["Auto", "Silent", "Favorite", "Fan"] OPERATION_MODES_AIRPURIFIER_V3 = [ "Auto", "Silent", @@ -327,6 +363,7 @@ FEATURE_RESET_FILTER = 256 FEATURE_SET_EXTRA_FEATURES = 512 FEATURE_SET_TARGET_HUMIDITY = 1024 FEATURE_SET_DRY = 2048 +FEATURE_SET_FAN_LEVEL = 4096 FEATURE_FLAGS_AIRPURIFIER = ( FEATURE_SET_BUZZER @@ -361,6 +398,15 @@ FEATURE_FLAGS_AIRPURIFIER_2S = ( | FEATURE_SET_FAVORITE_LEVEL ) +FEATURE_FLAGS_AIRPURIFIER_3 = ( + FEATURE_SET_BUZZER + | FEATURE_SET_CHILD_LOCK + | FEATURE_SET_LED + | FEATURE_SET_FAVORITE_LEVEL + | FEATURE_SET_FAN_LEVEL + | FEATURE_SET_LED_BRIGHTNESS +) + FEATURE_FLAGS_AIRPURIFIER_V3 = ( FEATURE_SET_BUZZER | FEATURE_SET_CHILD_LOCK | FEATURE_SET_LED ) @@ -394,6 +440,10 @@ SERVICE_SCHEMA_FAVORITE_LEVEL = AIRPURIFIER_SERVICE_SCHEMA.extend( {vol.Required(ATTR_LEVEL): vol.All(vol.Coerce(int), vol.Clamp(min=0, max=17))} ) +SERVICE_SCHEMA_FAN_LEVEL = AIRPURIFIER_SERVICE_SCHEMA.extend( + {vol.Required(ATTR_LEVEL): vol.All(vol.Coerce(int), vol.Clamp(min=1, max=3))} +) + SERVICE_SCHEMA_VOLUME = AIRPURIFIER_SERVICE_SCHEMA.extend( {vol.Required(ATTR_VOLUME): vol.All(vol.Coerce(int), vol.Clamp(min=0, max=100))} ) @@ -430,6 +480,10 @@ SERVICE_TO_METHOD = { "method": "async_set_favorite_level", "schema": SERVICE_SCHEMA_FAVORITE_LEVEL, }, + SERVICE_SET_FAN_LEVEL: { + "method": "async_set_fan_level", + "schema": SERVICE_SCHEMA_FAN_LEVEL, + }, SERVICE_SET_VOLUME: {"method": "async_set_volume", "schema": SERVICE_SCHEMA_VOLUME}, SERVICE_SET_EXTRA_FEATURES: { "method": "async_set_extra_features", @@ -472,7 +526,10 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= except DeviceException: raise PlatformNotReady - if model.startswith("zhimi.airpurifier."): + if model in PURIFIER_MIOT: + air_purifier = AirPurifierMiot(host, token) + device = XiaomiAirPurifierMiot(name, air_purifier, model, unique_id) + elif model.startswith("zhimi.airpurifier."): air_purifier = AirPurifier(host, token) device = XiaomiAirPurifier(name, air_purifier, model, unique_id) elif model.startswith("zhimi.humidifier."): @@ -690,6 +747,10 @@ class XiaomiAirPurifier(XiaomiGenericDevice): self._device_features = FEATURE_FLAGS_AIRPURIFIER_2S self._available_attributes = AVAILABLE_ATTRIBUTES_AIRPURIFIER_2S self._speed_list = OPERATION_MODES_AIRPURIFIER_2S + elif self._model == MODEL_AIRPURIFIER_3 or self._model == MODEL_AIRPURIFIER_3H: + self._device_features = FEATURE_FLAGS_AIRPURIFIER_3 + self._available_attributes = AVAILABLE_ATTRIBUTES_AIRPURIFIER_3 + self._speed_list = OPERATION_MODES_AIRPURIFIER_3 elif self._model == MODEL_AIRPURIFIER_V3: self._device_features = FEATURE_FLAGS_AIRPURIFIER_V3 self._available_attributes = AVAILABLE_ATTRIBUTES_AIRPURIFIER_V3 @@ -795,6 +856,17 @@ class XiaomiAirPurifier(XiaomiGenericDevice): level, ) + async def async_set_fan_level(self, level: int = 1): + """Set the favorite level.""" + if self._device_features & FEATURE_SET_FAN_LEVEL == 0: + return + + await self._try_command( + "Setting the fan level of the miio device failed.", + self._device.set_fan_level, + level, + ) + async def async_set_auto_detect_on(self): """Turn the auto detect on.""" if self._device_features & FEATURE_SET_AUTO_DETECT == 0: @@ -872,6 +944,42 @@ class XiaomiAirPurifier(XiaomiGenericDevice): ) +class XiaomiAirPurifierMiot(XiaomiAirPurifier): + """Representation of a Xiaomi Air Purifier (MiOT protocol).""" + + @property + def speed(self): + """Return the current speed.""" + if self._state: + return AirpurifierMiotOperationMode(self._state_attrs[ATTR_MODE]).name + + return None + + async def async_set_speed(self, speed: str) -> None: + """Set the speed of the fan.""" + if self.supported_features & SUPPORT_SET_SPEED == 0: + return + + _LOGGER.debug("Setting the operation mode to: %s", speed) + + await self._try_command( + "Setting operation mode of the miio device failed.", + self._device.set_mode, + AirpurifierMiotOperationMode[speed.title()], + ) + + async def async_set_led_brightness(self, brightness: int = 2): + """Set the led brightness.""" + if self._device_features & FEATURE_SET_LED_BRIGHTNESS == 0: + return + + await self._try_command( + "Setting the led brightness of the miio device failed.", + self._device.set_led_brightness, + AirpurifierMiotLedBrightness(brightness), + ) + + class XiaomiAirHumidifier(XiaomiGenericDevice): """Representation of a Xiaomi Air Humidifier.""" diff --git a/homeassistant/components/xiaomi_miio/light.py b/homeassistant/components/xiaomi_miio/light.py index 61462bcdbc0..c4ea831ceeb 100644 --- a/homeassistant/components/xiaomi_miio/light.py +++ b/homeassistant/components/xiaomi_miio/light.py @@ -718,7 +718,7 @@ class XiaomiPhilipsEyecareLampAmbientLight(XiaomiPhilipsAbstractLight): """Initialize the light device.""" name = f"{name} Ambient Light" if unique_id is not None: - unique_id = "{}-{}".format(unique_id, "ambient") + unique_id = f"{unique_id}-ambient" super().__init__(name, light, model, unique_id) async def async_turn_on(self, **kwargs): diff --git a/homeassistant/components/xiaomi_miio/manifest.json b/homeassistant/components/xiaomi_miio/manifest.json index 3d179c63adb..1db01321285 100644 --- a/homeassistant/components/xiaomi_miio/manifest.json +++ b/homeassistant/components/xiaomi_miio/manifest.json @@ -2,7 +2,6 @@ "domain": "xiaomi_miio", "name": "Xiaomi miio", "documentation": "https://www.home-assistant.io/integrations/xiaomi_miio", - "requirements": ["construct==2.9.45", "python-miio==0.4.8"], - "dependencies": [], + "requirements": ["construct==2.9.45", "python-miio==0.5.0.1"], "codeowners": ["@rytilahti", "@syssi"] } diff --git a/homeassistant/components/xiaomi_miio/remote.py b/homeassistant/components/xiaomi_miio/remote.py index 9e4446f2964..8c4d68208b4 100644 --- a/homeassistant/components/xiaomi_miio/remote.py +++ b/homeassistant/components/xiaomi_miio/remote.py @@ -100,12 +100,12 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= if DATA_KEY not in hass.data: hass.data[DATA_KEY] = {} - friendly_name = config.get(CONF_NAME, "xiaomi_miio_" + host.replace(".", "_")) + friendly_name = config.get(CONF_NAME, f"xiaomi_miio_{host.replace('.', '_')}") slot = config.get(CONF_SLOT) timeout = config.get(CONF_TIMEOUT) xiaomi_miio_remote = XiaomiMiioRemote( - friendly_name, device, unique_id, slot, timeout, config.get(CONF_COMMANDS), + friendly_name, device, unique_id, slot, timeout, config.get(CONF_COMMANDS) ) hass.data[DATA_KEY][host] = xiaomi_miio_remote diff --git a/homeassistant/components/xiaomi_miio/services.yaml b/homeassistant/components/xiaomi_miio/services.yaml index 36dcbc950be..a5308b08d6d 100644 --- a/homeassistant/components/xiaomi_miio/services.yaml +++ b/homeassistant/components/xiaomi_miio/services.yaml @@ -3,59 +3,69 @@ fan_set_buzzer_on: fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_buzzer_off: description: Turn the buzzer off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_led_on: description: Turn the led on. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_led_off: description: Turn the led off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_child_lock_on: description: Turn the child lock on. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_child_lock_off: description: Turn the child lock off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_favorite_level: description: Set the favorite level. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" level: description: Level, between 0 and 16. example: 1 +fan_set_fan_level: + description: Set the fan level. + fields: + entity_id: + description: Name of the xiaomi miio entity. + example: "fan.xiaomi_miio_device" + level: + description: Level, between 1 and 3. + example: 1 + fan_set_led_brightness: description: Set the led brightness. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" brightness: description: Brightness (0 = Bright, 1 = Dim, 2 = Off) example: 1 @@ -65,35 +75,35 @@ fan_set_auto_detect_on: fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_auto_detect_off: description: Turn the auto detect off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_learn_mode_on: description: Turn the learn mode on. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_learn_mode_off: description: Turn the learn mode off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_volume: description: Set the sound volume. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" volume: description: Volume, between 0 and 100. example: 50 @@ -103,14 +113,14 @@ fan_reset_filter: fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_extra_features: description: Manipulates a storage register which advertises extra features. The Mi Home app evaluates the value. A feature called "turbo mode" is unlocked in the app on value 1. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" features: description: Integer, known values are 0 (default) and 1 (turbo mode). example: 1 @@ -120,7 +130,7 @@ fan_set_target_humidity: fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" humidity: description: Target humidity. Allowed values are 30, 40, 50, 60, 70 and 80. example: 50 @@ -130,14 +140,14 @@ fan_set_dry_on: fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" fan_set_dry_off: description: Turn the dry mode off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'fan.xiaomi_miio_device' + example: "fan.xiaomi_miio_device" light_set_scene: description: Set a fixed scene. @@ -163,77 +173,77 @@ light_reminder_on: description: Enable the eye fatigue reminder/notification (EYECARE SMART LAMP 2 ONLY). fields: entity_id: - description: 'Name of the entity to act on.' - example: 'light.xiaomi_miio' + description: "Name of the entity to act on." + example: "light.xiaomi_miio" light_reminder_off: description: Disable the eye fatigue reminder/notification (EYECARE SMART LAMP 2 ONLY). fields: entity_id: - description: 'Name of the entity to act on.' - example: 'light.xiaomi_miio' + description: "Name of the entity to act on." + example: "light.xiaomi_miio" light_night_light_mode_on: description: Turn the eyecare mode on (EYECARE SMART LAMP 2 ONLY). fields: entity_id: - description: 'Name of the entity to act on.' - example: 'light.xiaomi_miio' + description: "Name of the entity to act on." + example: "light.xiaomi_miio" light_night_light_mode_off: description: Turn the eyecare mode fan_set_dry_off (EYECARE SMART LAMP 2 ONLY). fields: entity_id: - description: 'Name of the entity to act on.' - example: 'light.xiaomi_miio' + description: "Name of the entity to act on." + example: "light.xiaomi_miio" light_eyecare_mode_on: description: Enable the eye fatigue reminder/notification (EYECARE SMART LAMP 2 ONLY). fields: entity_id: - description: 'Name of the entity to act on.' - example: 'light.xiaomi_miio' + description: "Name of the entity to act on." + example: "light.xiaomi_miio" light_eyecare_mode_off: description: Disable the eye fatigue reminder/notification (EYECARE SMART LAMP 2 ONLY). fields: entity_id: - description: 'Name of the entity to act on.' - example: 'light.xiaomi_miio' + description: "Name of the entity to act on." + example: "light.xiaomi_miio" remote_learn_command: description: 'Learn an IR command, press "Call Service", point the remote at the IR device, and the learned command will be shown as a notification in Overview.' fields: entity_id: - description: 'Name of the entity to learn command from.' - example: 'remote.xiaomi_miio' + description: "Name of the entity to learn command from." + example: "remote.xiaomi_miio" slot: - description: 'Define the slot used to save the IR command (Value from 1 to 1000000)' - example: '1' + description: "Define the slot used to save the IR command (Value from 1 to 1000000)" + example: "1" timeout: - description: 'Define the timeout in seconds, before which the command must be learned.' - example: '30' + description: "Define the timeout in seconds, before which the command must be learned." + example: "30" switch_set_wifi_led_on: description: Turn the wifi led on. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'switch.xiaomi_miio_device' + example: "switch.xiaomi_miio_device" switch_set_wifi_led_off: description: Turn the wifi led off. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'switch.xiaomi_miio_device' + example: "switch.xiaomi_miio_device" switch_set_power_price: description: Set the power price. fields: entity_id: description: Name of the xiaomi miio entity. - example: 'switch.xiaomi_miio_device' + example: "switch.xiaomi_miio_device" mode: description: Power price, between 0 and 999. example: 31 @@ -243,66 +253,66 @@ switch_set_power_mode: fields: entity_id: description: Name of the xiaomi miio entity. - example: 'switch.xiaomi_miio_device' + example: "switch.xiaomi_miio_device" mode: description: Power mode, valid values are 'normal' and 'green'. - example: 'green' + example: "green" vacuum_remote_control_start: description: Start remote control of the vacuum cleaner. You can then move it with `remote_control_move`, when done call `remote_control_stop`. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" vacuum_remote_control_stop: description: Stop remote control mode of the vacuum cleaner. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" vacuum_remote_control_move: description: Remote control the vacuum cleaner, make sure you first set it in remote control mode with `remote_control_start`. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" velocity: description: Speed, between -0.29 and 0.29. - example: '0.2' + example: "0.2" rotation: description: Rotation, between -179 degrees and 179 degrees. - example: '90' + example: "90" duration: description: Duration of the movement. - example: '1500' + example: "1500" vacuum_remote_control_move_step: description: Remote control the vacuum cleaner, only makes one move and then stops. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" velocity: description: Speed, between -0.29 and 0.29. - example: '0.2' + example: "0.2" rotation: description: Rotation, between -179 degrees and 179 degrees. - example: '90' + example: "90" duration: description: Duration of the movement. - example: '1500' + example: "1500" vacuum_clean_zone: description: Start the cleaning operation in the selected areas for the number of repeats indicated. fields: entity_id: description: Name of the vacuum entity. - example: 'vacuum.xiaomi_vacuum_cleaner' + example: "vacuum.xiaomi_vacuum_cleaner" zone: description: Array of zones. Each zone is an array of 4 integer values. - example: '[[23510,25311,25110,26362]]' + example: "[[23510,25311,25110,26362]]" repeats: description: Number of cleaning repeats for each zone between 1 and 3. - example: '1' + example: "1" diff --git a/homeassistant/components/xiaomi_miio/switch.py b/homeassistant/components/xiaomi_miio/switch.py index 63229b851d0..c66f9b745f5 100644 --- a/homeassistant/components/xiaomi_miio/switch.py +++ b/homeassistant/components/xiaomi_miio/switch.py @@ -429,7 +429,7 @@ class ChuangMiPlugSwitch(XiaomiPlugGenericSwitch): name = f"{name} USB" if channel_usb else name if unique_id is not None and channel_usb: - unique_id = "{}-{}".format(unique_id, "usb") + unique_id = f"{unique_id}-usb" super().__init__(name, plug, model, unique_id) self._channel_usb = channel_usb diff --git a/homeassistant/components/xiaomi_miio/vacuum.py b/homeassistant/components/xiaomi_miio/vacuum.py index a32a28993ca..416918e6f43 100644 --- a/homeassistant/components/xiaomi_miio/vacuum.py +++ b/homeassistant/components/xiaomi_miio/vacuum.py @@ -60,8 +60,6 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( extra=vol.ALLOW_EXTRA, ) -FAN_SPEEDS = {"Silent": 38, "Standard": 60, "Medium": 77, "Turbo": 90, "Gentle": 105} - ATTR_CLEAN_START = "clean_start" ATTR_CLEAN_STOP = "clean_stop" ATTR_CLEANING_TIME = "cleaning_time" @@ -246,6 +244,8 @@ class MiroboVacuum(StateVacuumDevice): self.clean_history = None self.dnd_state = None self.last_clean = None + self._fan_speeds = None + self._fan_speeds_reverse = None @property def name(self): @@ -281,14 +281,17 @@ class MiroboVacuum(StateVacuumDevice): """Return the fan speed of the vacuum cleaner.""" if self.vacuum_state is not None: speed = self.vacuum_state.fanspeed - if speed in FAN_SPEEDS.values(): - return [key for key, value in FAN_SPEEDS.items() if value == speed][0] + if speed in self._fan_speeds_reverse: + return self._fan_speeds_reverse[speed] + + _LOGGER.debug("Unable to find reverse for %s", speed) + return speed @property def fan_speed_list(self): """Get the list of available fan speed steps of the vacuum cleaner.""" - return list(sorted(FAN_SPEEDS.keys(), key=lambda s: FAN_SPEEDS[s])) + return list(self._fan_speeds) @property def device_state_attributes(self): @@ -372,8 +375,8 @@ class MiroboVacuum(StateVacuumDevice): async def async_set_fan_speed(self, fan_speed, **kwargs): """Set fan speed.""" - if fan_speed.capitalize() in FAN_SPEEDS: - fan_speed = FAN_SPEEDS[fan_speed.capitalize()] + if fan_speed in self._fan_speeds: + fan_speed = self._fan_speeds[fan_speed] else: try: fan_speed = int(fan_speed) @@ -453,6 +456,9 @@ class MiroboVacuum(StateVacuumDevice): state = self._vacuum.status() self.vacuum_state = state + self._fan_speeds = self._vacuum.fan_speed_presets() + self._fan_speeds_reverse = {v: k for k, v in self._fan_speeds.items()} + self.consumable_state = self._vacuum.consumable_status() self.clean_history = self._vacuum.clean_history() self.last_clean = self._vacuum.last_clean_details() diff --git a/homeassistant/components/xiaomi_tv/manifest.json b/homeassistant/components/xiaomi_tv/manifest.json index 13843c88ecc..3c901ca753a 100644 --- a/homeassistant/components/xiaomi_tv/manifest.json +++ b/homeassistant/components/xiaomi_tv/manifest.json @@ -3,6 +3,5 @@ "name": "Xiaomi TV", "documentation": "https://www.home-assistant.io/integrations/xiaomi_tv", "requirements": ["pymitv==1.4.3"], - "dependencies": [], "codeowners": ["@simse"] } diff --git a/homeassistant/components/xmpp/manifest.json b/homeassistant/components/xmpp/manifest.json index 26d2362a192..8f35f813d99 100644 --- a/homeassistant/components/xmpp/manifest.json +++ b/homeassistant/components/xmpp/manifest.json @@ -3,6 +3,5 @@ "name": "Jabber (XMPP)", "documentation": "https://www.home-assistant.io/integrations/xmpp", "requirements": ["slixmpp==1.4.2"], - "dependencies": [], "codeowners": ["@fabaff", "@flowolf"] } diff --git a/homeassistant/components/xmpp/notify.py b/homeassistant/components/xmpp/notify.py index 28d42698657..0aba4a8bd15 100644 --- a/homeassistant/components/xmpp/notify.py +++ b/homeassistant/components/xmpp/notify.py @@ -29,6 +29,7 @@ from homeassistant.const import ( CONF_RESOURCE, CONF_ROOM, CONF_SENDER, + HTTP_BAD_REQUEST, ) import homeassistant.helpers.config_validation as cv import homeassistant.helpers.template as template_helper @@ -262,7 +263,7 @@ async def async_send_message( result = await hass.async_add_executor_job(get_url, url) - if result.status_code >= 400: + if result.status_code >= HTTP_BAD_REQUEST: _LOGGER.error("Could not load file from %s", url) return None diff --git a/homeassistant/components/xs1/climate.py b/homeassistant/components/xs1/climate.py index 33c778c0d3d..19d5ae1e904 100644 --- a/homeassistant/components/xs1/climate.py +++ b/homeassistant/components/xs1/climate.py @@ -115,7 +115,6 @@ class XS1ThermostatEntity(XS1DeviceEntity, ClimateDevice): def set_hvac_mode(self, hvac_mode): """Set new target hvac mode.""" - pass async def async_update(self): """Also update the sensor when available.""" diff --git a/homeassistant/components/xs1/manifest.json b/homeassistant/components/xs1/manifest.json index 480da6df351..e997953f7ac 100644 --- a/homeassistant/components/xs1/manifest.json +++ b/homeassistant/components/xs1/manifest.json @@ -3,6 +3,5 @@ "name": "EZcontrol XS1", "documentation": "https://www.home-assistant.io/integrations/xs1", "requirements": ["xs1-api-client==2.3.5"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/yale_smart_alarm/manifest.json b/homeassistant/components/yale_smart_alarm/manifest.json index a937e5e5d5b..b465125508c 100644 --- a/homeassistant/components/yale_smart_alarm/manifest.json +++ b/homeassistant/components/yale_smart_alarm/manifest.json @@ -3,6 +3,5 @@ "name": "Yale Smart Living", "documentation": "https://www.home-assistant.io/integrations/yale_smart_alarm", "requirements": ["yalesmartalarmclient==0.1.6"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/yamaha/manifest.json b/homeassistant/components/yamaha/manifest.json index d7aa9dbfae0..e2f2ed98783 100644 --- a/homeassistant/components/yamaha/manifest.json +++ b/homeassistant/components/yamaha/manifest.json @@ -3,6 +3,5 @@ "name": "Yamaha Network Receivers", "documentation": "https://www.home-assistant.io/integrations/yamaha", "requirements": ["rxv==0.6.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/yamaha/media_player.py b/homeassistant/components/yamaha/media_player.py index 7ab7d5b3a47..5aa0299200a 100644 --- a/homeassistant/components/yamaha/media_player.py +++ b/homeassistant/components/yamaha/media_player.py @@ -233,7 +233,7 @@ class YamahaDevice(MediaPlayerDevice): zone_name = self._zone_names.get(self._zone, self._zone) if zone_name != "Main_Zone": # Zone will be one of Main_Zone, Zone_2, Zone_3 - name += " " + zone_name.replace("_", " ") + name += f" {zone_name.replace('_', ' ')}" return name @property diff --git a/homeassistant/components/yamaha/services.yaml b/homeassistant/components/yamaha/services.yaml index c92522008be..f96d3ea58ef 100644 --- a/homeassistant/components/yamaha/services.yaml +++ b/homeassistant/components/yamaha/services.yaml @@ -3,10 +3,10 @@ enable_output: fields: entity_id: description: Name(s) of entities to enable/disable port on. - example: 'media_player.yamaha' + example: "media_player.yamaha" port: description: Name of port to enable/disable. - example: 'hdmi1' + example: "hdmi1" enabled: description: Boolean indicating if port should be enabled or not. - example: true \ No newline at end of file + example: true diff --git a/homeassistant/components/yamaha_musiccast/manifest.json b/homeassistant/components/yamaha_musiccast/manifest.json index 8734f870966..4c3a35c15dc 100644 --- a/homeassistant/components/yamaha_musiccast/manifest.json +++ b/homeassistant/components/yamaha_musiccast/manifest.json @@ -3,6 +3,5 @@ "name": "Yamaha MusicCast", "documentation": "https://www.home-assistant.io/integrations/yamaha_musiccast", "requirements": ["pymusiccast==0.1.6"], - "dependencies": [], "codeowners": ["@jalmeroth"] } diff --git a/homeassistant/components/yandex_transport/manifest.json b/homeassistant/components/yandex_transport/manifest.json index 6ba0886d2db..da9d920a26c 100644 --- a/homeassistant/components/yandex_transport/manifest.json +++ b/homeassistant/components/yandex_transport/manifest.json @@ -3,6 +3,5 @@ "name": "Yandex Transport", "documentation": "https://www.home-assistant.io/integrations/yandex_transport", "requirements": ["ya_ma==0.3.8"], - "dependencies": [], "codeowners": ["@rishatik92"] } diff --git a/homeassistant/components/yandextts/manifest.json b/homeassistant/components/yandextts/manifest.json index 99f074fa758..2769b5fc177 100644 --- a/homeassistant/components/yandextts/manifest.json +++ b/homeassistant/components/yandextts/manifest.json @@ -2,7 +2,5 @@ "domain": "yandextts", "name": "Yandex TTS", "documentation": "https://www.home-assistant.io/integrations/yandextts", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/yandextts/tts.py b/homeassistant/components/yandextts/tts.py index b06df4b7a42..32b77e08df4 100644 --- a/homeassistant/components/yandextts/tts.py +++ b/homeassistant/components/yandextts/tts.py @@ -7,7 +7,7 @@ import async_timeout import voluptuous as vol from homeassistant.components.tts import CONF_LANG, PLATFORM_SCHEMA, Provider -from homeassistant.const import CONF_API_KEY +from homeassistant.const import CONF_API_KEY, HTTP_OK from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -133,7 +133,7 @@ class YandexSpeechKitProvider(Provider): request = await websession.get(YANDEX_API_URL, params=url_param) - if request.status != 200: + if request.status != HTTP_OK: _LOGGER.error( "Error %d on load URL %s", request.status, request.url ) diff --git a/homeassistant/components/yeelight/__init__.py b/homeassistant/components/yeelight/__init__.py index eae1cd32c06..1e0fe841cac 100644 --- a/homeassistant/components/yeelight/__init__.py +++ b/homeassistant/components/yeelight/__init__.py @@ -147,7 +147,7 @@ def setup(hass, config): def device_discovered(_, info): _LOGGER.debug("Adding autodetected %s", info["hostname"]) - name = "yeelight_%s_%s" % (info["device_type"], info["properties"]["mac"]) + name = "yeelight_{}_{}".format(info["device_type"], info["properties"]["mac"]) device_config = DEVICE_SCHEMA({CONF_NAME: name}) diff --git a/homeassistant/components/yeelight/binary_sensor.py b/homeassistant/components/yeelight/binary_sensor.py index 29e24b510e5..f5f3e03b765 100644 --- a/homeassistant/components/yeelight/binary_sensor.py +++ b/homeassistant/components/yeelight/binary_sensor.py @@ -2,7 +2,6 @@ import logging from homeassistant.components.binary_sensor import BinarySensorDevice -from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from . import DATA_UPDATED, DATA_YEELIGHT @@ -29,16 +28,14 @@ class YeelightNightlightModeSensor(BinarySensorDevice): """Initialize nightlight mode sensor.""" self._device = device - @callback - def _schedule_immediate_update(self): - self.async_schedule_update_ha_state() - async def async_added_to_hass(self): """Handle entity which will be added.""" - async_dispatcher_connect( - self.hass, - DATA_UPDATED.format(self._device.ipaddr), - self._schedule_immediate_update, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + DATA_UPDATED.format(self._device.ipaddr), + self.async_write_ha_state, + ) ) @property diff --git a/homeassistant/components/yeelight/light.py b/homeassistant/components/yeelight/light.py index 59863464d21..ab49e46938c 100644 --- a/homeassistant/components/yeelight/light.py +++ b/homeassistant/components/yeelight/light.py @@ -456,10 +456,12 @@ class YeelightGenericLight(Light): async def async_added_to_hass(self): """Handle entity which will be added.""" - async_dispatcher_connect( - self.hass, - DATA_UPDATED.format(self._device.ipaddr), - self._schedule_immediate_update, + self.async_on_remove( + async_dispatcher_connect( + self.hass, + DATA_UPDATED.format(self._device.ipaddr), + self._schedule_immediate_update, + ) ) @property @@ -677,7 +679,7 @@ class YeelightGenericLight(Light): red, green, blue = color_util.color_hs_to_RGB(*self._hs) - transitions = list() + transitions = [] transitions.append( RGBTransition(255, 0, 0, brightness=10, duration=duration) ) diff --git a/homeassistant/components/yeelight/manifest.json b/homeassistant/components/yeelight/manifest.json index c5396030813..ad3022d5d5a 100644 --- a/homeassistant/components/yeelight/manifest.json +++ b/homeassistant/components/yeelight/manifest.json @@ -3,7 +3,6 @@ "name": "Yeelight", "documentation": "https://www.home-assistant.io/integrations/yeelight", "requirements": ["yeelight==0.5.1"], - "dependencies": [], "after_dependencies": ["discovery"], "codeowners": ["@rytilahti", "@zewelor"] } diff --git a/homeassistant/components/yeelight/services.yaml b/homeassistant/components/yeelight/services.yaml index 52106a42063..5e7f2419f16 100644 --- a/homeassistant/components/yeelight/services.yaml +++ b/homeassistant/components/yeelight/services.yaml @@ -3,19 +3,19 @@ set_mode: fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" mode: description: Operation mode. Valid values are 'last', 'normal', 'rgb', 'hsv', 'color_flow', 'moonlight'. - example: 'moonlight' + example: "moonlight" set_color_scene: description: Changes the light to the specified RGB color and brightness. If the light is off, it will be turned on. fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" rgb_color: description: Color for the light in RGB-format. - example: '[255, 100, 100]' + example: "[255, 100, 100]" brightness: description: The brightness value to set (1-100). example: 50 @@ -24,10 +24,10 @@ set_hsv_scene: fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" hs_color: description: Color for the light in hue/sat format. Hue is 0-359 and Sat is 0-100. - example: '[300, 70]' + example: "[300, 70]" brightness: description: The brightness value to set (1-100). example: 50 @@ -36,7 +36,7 @@ set_color_temp_scene: fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" kelvin: description: Color temperature for the light in Kelvin. example: 4000 @@ -48,13 +48,13 @@ set_color_flow_scene: fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" count: description: The number of times to run this flow (0 to run forever). example: 0 action: description: The action to take after the flow stops. Can be 'recover', 'stay', 'off'. (default 'recover') - example: 'stay' + example: "stay" transitions: description: Array of transitions, for desired effect. Examples https://yeelight.readthedocs.io/en/stable/flow.html example: '[{ "TemperatureTransition": [1900, 1000, 80] }, { "TemperatureTransition": [1900, 1000, 10] }]' @@ -63,7 +63,7 @@ set_auto_delay_off_scene: fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" minutes: description: The minutes to wait before automatically turning the light off. example: 5 @@ -75,13 +75,13 @@ start_flow: fields: entity_id: description: Name of the light entity. - example: 'light.yeelight' + example: "light.yeelight" count: description: The number of times to run this flow (0 to run forever). example: 0 action: description: The action to take after the flow stops. Can be 'recover', 'stay', 'off'. (default 'recover') - example: 'stay' + example: "stay" transitions: description: Array of transitions, for desired effect. Examples https://yeelight.readthedocs.io/en/stable/flow.html example: '[{ "TemperatureTransition": [1900, 1000, 80] }, { "TemperatureTransition": [1900, 1000, 10] }]' diff --git a/homeassistant/components/yeelightsunflower/manifest.json b/homeassistant/components/yeelightsunflower/manifest.json index 6c1a44e8cb1..4c21e8e6f26 100644 --- a/homeassistant/components/yeelightsunflower/manifest.json +++ b/homeassistant/components/yeelightsunflower/manifest.json @@ -3,6 +3,5 @@ "name": "Yeelight Sunflower", "documentation": "https://www.home-assistant.io/integrations/yeelightsunflower", "requirements": ["yeelightsunflower==0.0.10"], - "dependencies": [], "codeowners": ["@lindsaymarkward"] } diff --git a/homeassistant/components/yessssms/manifest.json b/homeassistant/components/yessssms/manifest.json index 0dc6f213bce..5200408d1d5 100644 --- a/homeassistant/components/yessssms/manifest.json +++ b/homeassistant/components/yessssms/manifest.json @@ -3,6 +3,5 @@ "name": "yesss! SMS", "documentation": "https://www.home-assistant.io/integrations/yessssms", "requirements": ["YesssSMS==0.4.1"], - "dependencies": [], "codeowners": ["@flowolf"] } diff --git a/homeassistant/components/yessssms/notify.py b/homeassistant/components/yessssms/notify.py index fbc6b50e8d6..863602134a4 100644 --- a/homeassistant/components/yessssms/notify.py +++ b/homeassistant/components/yessssms/notify.py @@ -46,7 +46,6 @@ def get_service(hass, config, discovery_info=None): "Connection Error, could not verify login data for '%s'", yesss.get_provider(), ) - pass _LOGGER.debug( "initialized; library version: %s, with %s", diff --git a/homeassistant/components/yi/camera.py b/homeassistant/components/yi/camera.py index 6e49d287186..4273b5294ed 100644 --- a/homeassistant/components/yi/camera.py +++ b/homeassistant/components/yi/camera.py @@ -110,14 +110,9 @@ class YiCamera(Camera): await ftp.quit() self._is_on = True - return "ftp://{0}:{1}@{2}:{3}{4}/{5}/{6}".format( - self.user, - self.passwd, - self.host, - self.port, - self.path, - latest_dir, - videos[-1], + return ( + f"ftp://{self.user}:{self.passwd}@{self.host}:" + f"{self.port}{self.path}/{latest_dir}/{videos[-1]}" ) except (ConnectionRefusedError, StatusCodeError) as err: _LOGGER.error("Error while fetching video: %s", err) diff --git a/homeassistant/components/yr/manifest.json b/homeassistant/components/yr/manifest.json index 10b274b8dd3..f21248c9632 100644 --- a/homeassistant/components/yr/manifest.json +++ b/homeassistant/components/yr/manifest.json @@ -3,6 +3,5 @@ "name": "Yr", "documentation": "https://www.home-assistant.io/integrations/yr", "requirements": ["xmltodict==0.12.0"], - "dependencies": [], "codeowners": ["@danielhiversen"] } diff --git a/homeassistant/components/yr/sensor.py b/homeassistant/components/yr/sensor.py index c6aaeea7ac9..58a04ce62a6 100644 --- a/homeassistant/components/yr/sensor.py +++ b/homeassistant/components/yr/sensor.py @@ -17,9 +17,11 @@ from homeassistant.const import ( CONF_LONGITUDE, CONF_MONITORED_CONDITIONS, CONF_NAME, + DEGREE, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_PRESSURE, DEVICE_CLASS_TEMPERATURE, + HTTP_OK, PRESSURE_HPA, SPEED_METERS_PER_SECOND, TEMP_CELSIUS, @@ -46,7 +48,7 @@ SENSOR_TYPES = { "windSpeed": ["Wind speed", SPEED_METERS_PER_SECOND, None], "windGust": ["Wind gust", SPEED_METERS_PER_SECOND, None], "pressure": ["Pressure", PRESSURE_HPA, DEVICE_CLASS_PRESSURE], - "windDirection": ["Wind direction", "°", None], + "windDirection": ["Wind direction", DEGREE, None], "humidity": ["Humidity", UNIT_PERCENTAGE, DEVICE_CLASS_HUMIDITY], "fog": ["Fog", UNIT_PERCENTAGE, None], "cloudiness": ["Cloudiness", UNIT_PERCENTAGE, None], @@ -96,11 +98,13 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= dev = [] for sensor_type in config[CONF_MONITORED_CONDITIONS]: dev.append(YrSensor(name, sensor_type)) - async_add_entities(dev) weather = YrData(hass, coordinates, forecast, dev) - async_track_utc_time_change(hass, weather.updating_devices, minute=31, second=0) + async_track_utc_time_change( + hass, weather.updating_devices, minute=randrange(60), second=0 + ) await weather.fetching_data() + async_add_entities(dev) class YrSensor(Entity): @@ -137,7 +141,7 @@ class YrSensor(Entity): return None return ( "https://api.met.no/weatherapi/weathericon/1.1/" - "?symbol={0};content_type=image/png".format(self._state) + f"?symbol={self._state};content_type=image/png" ) @property @@ -183,7 +187,7 @@ class YrData: websession = async_get_clientsession(self.hass) with async_timeout.timeout(10): resp = await websession.get(self._url, params=self._urlparams) - if resp.status != 200: + if resp.status != HTTP_OK: try_again(f"{resp.url} returned {resp.status}") return text = await resp.text() @@ -234,7 +238,6 @@ class YrData: ordered_entries.sort(key=lambda item: item[0]) # Update all devices - tasks = [] if ordered_entries: for dev in self.devices: new_state = None @@ -274,7 +277,5 @@ class YrData: # pylint: disable=protected-access if new_state != dev._state: dev._state = new_state - tasks.append(dev.async_update_ha_state()) - - if tasks: - await asyncio.wait(tasks) + if dev.hass: + dev.async_write_ha_state() diff --git a/homeassistant/components/yweather/__init__.py b/homeassistant/components/yweather/__init__.py deleted file mode 100644 index 0d5012f4c5d..00000000000 --- a/homeassistant/components/yweather/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""The yweather component.""" diff --git a/homeassistant/components/yweather/manifest.json b/homeassistant/components/yweather/manifest.json deleted file mode 100644 index 9d9c76f67e4..00000000000 --- a/homeassistant/components/yweather/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "domain": "yweather", - "name": "Yahoo Weather", - "documentation": "https://www.home-assistant.io/integrations/yweather", - "requirements": ["yahooweather==0.10"], - "dependencies": [], - "codeowners": [] -} diff --git a/homeassistant/components/yweather/sensor.py b/homeassistant/components/yweather/sensor.py deleted file mode 100644 index db21c430c4d..00000000000 --- a/homeassistant/components/yweather/sensor.py +++ /dev/null @@ -1,200 +0,0 @@ -"""Support for the Yahoo! Weather service.""" -from datetime import timedelta -import logging - -import voluptuous as vol -from yahooweather import ( # pylint: disable=import-error - UNIT_C, - UNIT_F, - YahooWeather, - get_woeid, -) - -from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import ( - ATTR_ATTRIBUTION, - CONF_MONITORED_CONDITIONS, - CONF_NAME, - TEMP_CELSIUS, - UNIT_PERCENTAGE, -) -import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.entity import Entity -from homeassistant.util import Throttle - -_LOGGER = logging.getLogger(__name__) - -ATTRIBUTION = "Weather details provided by Yahoo! Inc." - -CONF_FORECAST = "forecast" - -CONF_WOEID = "woeid" - -DEFAULT_NAME = "Yweather" - -MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=10) - -SENSOR_TYPES = { - "weather_current": ["Current", None], - "weather": ["Condition", None], - "temperature": ["Temperature", "temperature"], - "temp_min": ["Temperature min", "temperature"], - "temp_max": ["Temperature max", "temperature"], - "wind_speed": ["Wind speed", "speed"], - "humidity": ["Humidity", UNIT_PERCENTAGE], - "pressure": ["Pressure", "pressure"], - "visibility": ["Visibility", "distance"], -} - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_WOEID): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_FORECAST, default=0): vol.All( - vol.Coerce(int), vol.Range(min=0, max=5) - ), - vol.Required(CONF_MONITORED_CONDITIONS, default=[]): [vol.In(SENSOR_TYPES)], - } -) - - -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Yahoo! weather sensor.""" - unit = hass.config.units.temperature_unit - woeid = config.get(CONF_WOEID) - forecast = config.get(CONF_FORECAST) - name = config.get(CONF_NAME) - - yunit = UNIT_C if unit == TEMP_CELSIUS else UNIT_F - - SENSOR_TYPES["temperature"][1] = unit - SENSOR_TYPES["temp_min"][1] = unit - SENSOR_TYPES["temp_max"][1] = unit - - # If not exists a customer WOEID/calculation from Home Assistant - if woeid is None: - woeid = get_woeid(hass.config.latitude, hass.config.longitude) - if woeid is None: - _LOGGER.critical("Can't retrieve WOEID from yahoo!") - return False - - yahoo_api = YahooWeatherData(woeid, yunit) - - if not yahoo_api.update(): - _LOGGER.critical("Can't retrieve weather data from Yahoo!") - return False - - if forecast >= len(yahoo_api.yahoo.Forecast): - _LOGGER.error( - "Yahoo! only support %d days forecast!", len(yahoo_api.yahoo.Forecast) - ) - return False - - dev = [] - for variable in config[CONF_MONITORED_CONDITIONS]: - dev.append(YahooWeatherSensor(yahoo_api, name, forecast, variable)) - - add_entities(dev, True) - - -class YahooWeatherSensor(Entity): - """Implementation of the Yahoo! weather sensor.""" - - def __init__(self, weather_data, name, forecast, sensor_type): - """Initialize the sensor.""" - self._client = name - self._name = SENSOR_TYPES[sensor_type][0] - self._type = sensor_type - self._state = None - self._unit = SENSOR_TYPES[sensor_type][1] - self._data = weather_data - self._forecast = forecast - self._code = None - - @property - def name(self): - """Return the name of the sensor.""" - return f"{self._client} {self._name}" - - @property - def state(self): - """Return the state of the device.""" - return self._state - - @property - def unit_of_measurement(self): - """Return the unit of measurement of this entity, if any.""" - return self._data.yahoo.Units.get(self._unit, self._unit) - - @property - def entity_picture(self): - """Return the entity picture to use in the frontend, if any.""" - if self._code is None or "weather" not in self._type: - return None - - return self._data.yahoo.getWeatherImage(self._code) - - @property - def device_state_attributes(self): - """Return the state attributes.""" - attrs = {ATTR_ATTRIBUTION: ATTRIBUTION} - - if self._code is not None and "weather" in self._type: - attrs["condition_code"] = self._code - - return attrs - - def update(self): - """Get the latest data from Yahoo! and updates the states.""" - self._data.update() - if not self._data.yahoo.RawData: - _LOGGER.info("Don't receive weather data from Yahoo!") - return - - # Default code for weather image - self._code = self._data.yahoo.Now["code"] - - # Read data - if self._type == "weather_current": - self._state = self._data.yahoo.Now["text"] - elif self._type == "weather": - self._code = self._data.yahoo.Forecast[self._forecast]["code"] - self._state = self._data.yahoo.Forecast[self._forecast]["text"] - elif self._type == "temperature": - self._state = self._data.yahoo.Now["temp"] - elif self._type == "temp_min": - self._code = self._data.yahoo.Forecast[self._forecast]["code"] - self._state = self._data.yahoo.Forecast[self._forecast]["low"] - elif self._type == "temp_max": - self._code = self._data.yahoo.Forecast[self._forecast]["code"] - self._state = self._data.yahoo.Forecast[self._forecast]["high"] - elif self._type == "wind_speed": - self._state = round(float(self._data.yahoo.Wind["speed"]) / 1.61, 2) - elif self._type == "humidity": - self._state = self._data.yahoo.Atmosphere["humidity"] - elif self._type == "pressure": - self._state = round( - float(self._data.yahoo.Atmosphere["pressure"]) / 33.8637526, 2 - ) - elif self._type == "visibility": - self._state = round( - float(self._data.yahoo.Atmosphere["visibility"]) / 1.61, 2 - ) - - -class YahooWeatherData: - """Handle Yahoo! API object and limit updates.""" - - def __init__(self, woeid, temp_unit): - """Initialize the data object.""" - self._yahoo = YahooWeather(woeid, temp_unit) - - @property - def yahoo(self): - """Return Yahoo! API object.""" - return self._yahoo - - @Throttle(MIN_TIME_BETWEEN_UPDATES) - def update(self): - """Get the latest data from Yahoo!.""" - return self._yahoo.updateWeather() diff --git a/homeassistant/components/yweather/weather.py b/homeassistant/components/yweather/weather.py deleted file mode 100644 index 202124aa340..00000000000 --- a/homeassistant/components/yweather/weather.py +++ /dev/null @@ -1,195 +0,0 @@ -"""Support for the Yahoo! Weather service.""" -from datetime import timedelta -import logging - -import voluptuous as vol -from yahooweather import ( # pylint: disable=import-error - UNIT_C, - UNIT_F, - YahooWeather, - get_woeid, -) - -from homeassistant.components.weather import ( - ATTR_FORECAST_CONDITION, - ATTR_FORECAST_TEMP, - ATTR_FORECAST_TEMP_LOW, - ATTR_FORECAST_TIME, - PLATFORM_SCHEMA, - WeatherEntity, -) -from homeassistant.const import CONF_NAME, STATE_UNKNOWN, TEMP_CELSIUS -import homeassistant.helpers.config_validation as cv - -_LOGGER = logging.getLogger(__name__) - -DATA_CONDITION = "yahoo_condition" - -ATTRIBUTION = "Weather details provided by Yahoo! Inc." - -CONF_WOEID = "woeid" - -DEFAULT_NAME = "Yweather" - -SCAN_INTERVAL = timedelta(minutes=10) - -CONDITION_CLASSES = { - "clear-night": [31, 33], - "cloudy": [26, 27, 28], - "fog": [20, 21], - "hail": [17, 35], - "lightning": [], - "lightning-rainy": [3, 4, 37, 38, 39, 45, 47], - "partlycloudy": [29, 30, 44], - "pouring": [], - "rainy": [9, 10, 11, 12, 40], - "snowy": [8, 13, 14, 15, 16, 41, 42, 43, 46], - "snowy-rainy": [5, 6, 7, 18], - "sunny": [25, 32, 34, 36], - "windy": [23, 24], - "windy-variant": [], - "exceptional": [0, 1, 2, 19, 22], -} - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - { - vol.Optional(CONF_WOEID): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - } -) - - -def setup_platform(hass, config, add_entities, discovery_info=None): - """Set up the Yahoo! weather platform.""" - unit = hass.config.units.temperature_unit - woeid = config.get(CONF_WOEID) - name = config.get(CONF_NAME) - - yunit = UNIT_C if unit == TEMP_CELSIUS else UNIT_F - - # If not exists a customer WOEID/calculation from Home Assistant - if woeid is None: - woeid = get_woeid(hass.config.latitude, hass.config.longitude) - if woeid is None: - _LOGGER.warning("Can't retrieve WOEID from Yahoo!") - return False - - yahoo_api = YahooWeatherData(woeid, yunit) - - if not yahoo_api.update(): - _LOGGER.critical("Can't retrieve weather data from Yahoo!") - return False - - # create condition helper - if DATA_CONDITION not in hass.data: - hass.data[DATA_CONDITION] = [str(x) for x in range(0, 50)] - for cond, condlst in CONDITION_CLASSES.items(): - for condi in condlst: - hass.data[DATA_CONDITION][condi] = cond - - add_entities([YahooWeatherWeather(yahoo_api, name, unit)], True) - - -class YahooWeatherWeather(WeatherEntity): - """Representation of Yahoo! weather data.""" - - def __init__(self, weather_data, name, unit): - """Initialize the sensor.""" - self._name = name - self._data = weather_data - self._unit = unit - - @property - def name(self): - """Return the name of the sensor.""" - return self._name - - @property - def condition(self): - """Return the current condition.""" - try: - return self.hass.data[DATA_CONDITION][int(self._data.yahoo.Now["code"])] - except (ValueError, IndexError): - return STATE_UNKNOWN - - @property - def temperature(self): - """Return the temperature.""" - return int(self._data.yahoo.Now["temp"]) - - @property - def temperature_unit(self): - """Return the unit of measurement.""" - return self._unit - - @property - def pressure(self): - """Return the pressure.""" - return round(float(self._data.yahoo.Atmosphere["pressure"]) / 33.8637526, 2) - - @property - def humidity(self): - """Return the humidity.""" - return int(self._data.yahoo.Atmosphere["humidity"]) - - @property - def visibility(self): - """Return the visibility.""" - return round(float(self._data.yahoo.Atmosphere["visibility"]) / 1.61, 2) - - @property - def wind_speed(self): - """Return the wind speed.""" - return round(float(self._data.yahoo.Wind["speed"]) / 1.61, 2) - - @property - def wind_bearing(self): - """Return the wind direction.""" - return int(self._data.yahoo.Wind["direction"]) - - @property - def attribution(self): - """Return the attribution.""" - return ATTRIBUTION - - @property - def forecast(self): - """Return the forecast array.""" - try: - return [ - { - ATTR_FORECAST_TIME: v["date"], - ATTR_FORECAST_TEMP: int(v["high"]), - ATTR_FORECAST_TEMP_LOW: int(v["low"]), - ATTR_FORECAST_CONDITION: self.hass.data[DATA_CONDITION][ - int(v["code"]) - ], - } - for v in self._data.yahoo.Forecast - ] - except (ValueError, IndexError): - return STATE_UNKNOWN - - def update(self): - """Get the latest data from Yahoo! and updates the states.""" - self._data.update() - if not self._data.yahoo.RawData: - _LOGGER.info("Don't receive weather data from Yahoo!") - return - - -class YahooWeatherData: - """Handle the Yahoo! API object and limit updates.""" - - def __init__(self, woeid, temp_unit): - """Initialize the data object.""" - self._yahoo = YahooWeather(woeid, temp_unit) - - @property - def yahoo(self): - """Return Yahoo! API object.""" - return self._yahoo - - def update(self): - """Get the latest data from Yahoo!.""" - return self._yahoo.updateWeather() diff --git a/homeassistant/components/zabbix/__init__.py b/homeassistant/components/zabbix/__init__.py index 0926f35af38..644d35da728 100644 --- a/homeassistant/components/zabbix/__init__.py +++ b/homeassistant/components/zabbix/__init__.py @@ -40,14 +40,11 @@ def setup(hass, config): """Set up the Zabbix component.""" conf = config[DOMAIN] - if conf[CONF_SSL]: - schema = "https" - else: - schema = "http" + protocol = "https" if config[CONF_SSL] else "http" - url = urljoin("{}://{}".format(schema, conf[CONF_HOST]), conf[CONF_PATH]) - username = conf.get(CONF_USERNAME, None) - password = conf.get(CONF_PASSWORD, None) + url = urljoin(f"{protocol}://{conf[CONF_HOST]}", conf[CONF_PATH]) + username = conf.get(CONF_USERNAME) + password = conf.get(CONF_PASSWORD) zapi = ZabbixAPI(url) try: diff --git a/homeassistant/components/zabbix/manifest.json b/homeassistant/components/zabbix/manifest.json index 5cf4adf5804..08dfb98d5fa 100644 --- a/homeassistant/components/zabbix/manifest.json +++ b/homeassistant/components/zabbix/manifest.json @@ -3,6 +3,5 @@ "name": "Zabbix", "documentation": "https://www.home-assistant.io/integrations/zabbix", "requirements": ["pyzabbix==0.7.4"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/zamg/manifest.json b/homeassistant/components/zamg/manifest.json index ff131767b33..c2c03145f60 100644 --- a/homeassistant/components/zamg/manifest.json +++ b/homeassistant/components/zamg/manifest.json @@ -2,7 +2,5 @@ "domain": "zamg", "name": "Zentralanstalt für Meteorologie und Geodynamik (ZAMG)", "documentation": "https://www.home-assistant.io/integrations/zamg", - "requirements": [], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/zamg/sensor.py b/homeassistant/components/zamg/sensor.py index a5eb90df218..e893c854804 100644 --- a/homeassistant/components/zamg/sensor.py +++ b/homeassistant/components/zamg/sensor.py @@ -17,7 +17,10 @@ from homeassistant.const import ( CONF_LONGITUDE, CONF_MONITORED_CONDITIONS, CONF_NAME, + DEGREE, + LENGTH_METERS, SPEED_KILOMETERS_PER_HOUR, + TEMP_CELSIUS, UNIT_PERCENTAGE, __version__, ) @@ -47,22 +50,27 @@ SENSOR_TYPES = { f"WG {SPEED_KILOMETERS_PER_HOUR}", float, ), - "wind_bearing": ("Wind Bearing", "°", "WR °", int), + "wind_bearing": ("Wind Bearing", DEGREE, f"WR {DEGREE}", int), "wind_max_speed": ( "Top Wind Speed", SPEED_KILOMETERS_PER_HOUR, f"WSG {SPEED_KILOMETERS_PER_HOUR}", float, ), - "wind_max_bearing": ("Top Wind Bearing", "°", "WSR °", int), + "wind_max_bearing": ("Top Wind Bearing", DEGREE, f"WSR {DEGREE}", int), "sun_last_hour": ("Sun Last Hour", UNIT_PERCENTAGE, f"SO {UNIT_PERCENTAGE}", int), - "temperature": ("Temperature", "°C", "T °C", float), + "temperature": ("Temperature", TEMP_CELSIUS, f"T {TEMP_CELSIUS}", float), "precipitation": ("Precipitation", "l/m²", "N l/m²", float), - "dewpoint": ("Dew Point", "°C", "TP °C", float), + "dewpoint": ("Dew Point", TEMP_CELSIUS, f"TP {TEMP_CELSIUS}", float), # The following probably not useful for general consumption, # but we need them to fill in internal attributes "station_name": ("Station Name", None, "Name", str), - "station_elevation": ("Station Elevation", "m", "Höhe m", int), + "station_elevation": ( + "Station Elevation", + LENGTH_METERS, + f"Höhe {LENGTH_METERS}", + int, + ), "update_date": ("Update Date", None, "Datum", str), "update_time": ("Update Time", None, "Zeit", str), } @@ -159,7 +167,7 @@ class ZamgData: """The class for handling the data retrieval.""" API_URL = "http://www.zamg.ac.at/ogd/" - API_HEADERS = {USER_AGENT: "{} {}".format("home-assistant.zamg/", __version__)} + API_HEADERS = {USER_AGENT: f"home-assistant.zamg/ {__version__}"} def __init__(self, station_id): """Initialize the probe.""" diff --git a/homeassistant/components/zamg/weather.py b/homeassistant/components/zamg/weather.py index 46818578534..c1a0ab62cc5 100644 --- a/homeassistant/components/zamg/weather.py +++ b/homeassistant/components/zamg/weather.py @@ -78,8 +78,9 @@ class ZamgWeather(WeatherEntity): @property def name(self): """Return the name of the sensor.""" - return self.stationname or "ZAMG {}".format( - self.zamg_data.data.get("Name") or "(unknown station)" + return ( + self.stationname + or f"ZAMG {self.zamg_data.data.get('Name') or '(unknown station)'}" ) @property diff --git a/homeassistant/components/zengge/manifest.json b/homeassistant/components/zengge/manifest.json index 1890088f291..fc765170860 100644 --- a/homeassistant/components/zengge/manifest.json +++ b/homeassistant/components/zengge/manifest.json @@ -3,6 +3,5 @@ "name": "Zengge", "documentation": "https://www.home-assistant.io/integrations/zengge", "requirements": ["zengge==0.2"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/zeroconf/__init__.py b/homeassistant/components/zeroconf/__init__.py index 16a7d2f000c..6fd5d96a40c 100644 --- a/homeassistant/components/zeroconf/__init__.py +++ b/homeassistant/components/zeroconf/__init__.py @@ -53,7 +53,7 @@ def setup(hass, config): try: host_ip_pton = socket.inet_pton(socket.AF_INET, host_ip) - except socket.error: + except OSError: host_ip_pton = socket.inet_pton(socket.AF_INET6, host_ip) info = ServiceInfo( @@ -134,8 +134,8 @@ def handle_homekit(hass, info) -> bool: for test_model in HOMEKIT: if ( model != test_model - and not model.startswith(test_model + " ") - and not model.startswith(test_model + "-") + and not model.startswith(f"{test_model} ") + and not model.startswith(f"{test_model}-") ): continue @@ -157,7 +157,14 @@ def info_from_service(service): # See https://ietf.org/rfc/rfc6763.html#section-6.4 and # https://ietf.org/rfc/rfc6763.html#section-6.5 for expected encodings # for property keys and values - key = key.decode("ascii") + try: + key = key.decode("ascii") + except UnicodeDecodeError: + _LOGGER.debug( + "Ignoring invalid key provided by [%s]: %s", service.name, key + ) + continue + properties["_raw"][key] = value try: diff --git a/homeassistant/components/zeroconf/manifest.json b/homeassistant/components/zeroconf/manifest.json index 3171b8e953b..241cf443244 100644 --- a/homeassistant/components/zeroconf/manifest.json +++ b/homeassistant/components/zeroconf/manifest.json @@ -2,7 +2,7 @@ "domain": "zeroconf", "name": "Zero-configuration networking (zeroconf)", "documentation": "https://www.home-assistant.io/integrations/zeroconf", - "requirements": ["zeroconf==0.25.0"], + "requirements": ["zeroconf==0.25.1"], "dependencies": ["api"], "codeowners": ["@robbiet480", "@Kane610"], "quality_scale": "internal" diff --git a/homeassistant/components/zestimate/manifest.json b/homeassistant/components/zestimate/manifest.json index c9443bc1ad5..9df1c3f7b91 100644 --- a/homeassistant/components/zestimate/manifest.json +++ b/homeassistant/components/zestimate/manifest.json @@ -3,6 +3,5 @@ "name": "Zestimate", "documentation": "https://www.home-assistant.io/integrations/zestimate", "requirements": ["xmltodict==0.12.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/zha/.translations/bg.json b/homeassistant/components/zha/.translations/bg.json deleted file mode 100644 index 916d09a6830..00000000000 --- a/homeassistant/components/zha/.translations/bg.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 ZHA." - }, - "error": { - "cannot_connect": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 ZHA \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "step": { - "user": { - "data": { - "radio_type": "\u0422\u0438\u043f \u0440\u0430\u0434\u0438\u043e", - "usb_path": "\u041f\u044a\u0442 \u0434\u043e USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "\u041a\u0432\u0430\u043a", - "warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435" - }, - "trigger_subtype": { - "both_buttons": "\u0418 \u0434\u0432\u0430\u0442\u0430 \u0431\u0443\u0442\u043e\u043d\u0430", - "button_1": "\u041f\u044a\u0440\u0432\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_2": "\u0412\u0442\u043e\u0440\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_3": "\u0422\u0440\u0435\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_4": "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_5": "\u041f\u0435\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", - "button_6": "\u0428\u0435\u0441\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", - "close": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438", - "dim_down": "\u0417\u0430\u0442\u044a\u043c\u043d\u044f\u0432\u0430\u043d\u0435", - "dim_up": "\u041e\u0441\u0432\u0435\u0442\u044f\u0432\u0430\u043d\u0435", - "face_1": "\u0441 \u043b\u0438\u0446\u0435 1 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", - "face_2": "\u0441 \u043b\u0438\u0446\u0435 2 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", - "face_3": "\u0441 \u043b\u0438\u0446\u0435 3 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", - "face_4": "\u0441 \u043b\u0438\u0446\u0435 4 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", - "face_5": "\u0441 \u043b\u0438\u0446\u0435 5 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", - "face_6": "\u0441 \u043b\u0438\u0446\u0435 6 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", - "face_any": "\u0421 \u043d\u044f\u043a\u043e\u0438/\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438 \u043b\u0438\u0446\u0435(\u0430) \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0438", - "left": "\u041b\u044f\u0432\u043e", - "open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d", - "right": "\u0414\u044f\u0441\u043d\u043e", - "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438" - }, - "trigger_type": { - "device_dropped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0438\u0437\u0442\u044a\u0440\u0432\u0430\u043d\u043e", - "device_flipped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043e\u0431\u044a\u0440\u043d\u0430\u0442\u043e \"{subtype}\"", - "device_knocked": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043f\u043e\u0447\u0443\u043a\u0430\u043d\u043e \"{subtype}\"", - "device_rotated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \"{subtype}\"", - "device_shaken": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0440\u0430\u0437\u043a\u043b\u0430\u0442\u0435\u043d\u043e", - "device_slid": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0433\u043e \u0435 \u043f\u043b\u044a\u0437\u043d\u0430\u0442\u043e \"{subtype}\"", - "device_tilted": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043d\u0430\u043a\u043b\u043e\u043d\u0435\u043d\u043e", - "remote_button_double_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_button_long_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e", - "remote_button_long_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442 \u0441\u043b\u0435\u0434 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u043d\u0435", - "remote_button_quadruple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0447\u0435\u0442\u0438\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_button_quintuple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0435\u0442\u043a\u0440\u0430\u0442\u043d\u043e", - "remote_button_short_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442", - "remote_button_short_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442", - "remote_button_triple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0442\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/ca.json b/homeassistant/components/zha/.translations/ca.json deleted file mode 100644 index 9ad486f5041..00000000000 --- a/homeassistant/components/zha/.translations/ca.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 de ZHA." - }, - "error": { - "cannot_connect": "No s'ha pogut connectar amb el dispositiu ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Tipus de r\u00e0dio", - "usb_path": "Ruta del port USB al dispositiu" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Av\u00eds" - }, - "trigger_subtype": { - "both_buttons": "Ambd\u00f3s botons", - "button_1": "Primer bot\u00f3", - "button_2": "Segon bot\u00f3", - "button_3": "Tercer bot\u00f3", - "button_4": "Quart bot\u00f3", - "button_5": "Cinqu\u00e8 bot\u00f3", - "button_6": "Sis\u00e8 bot\u00f3", - "close": "Tanca", - "dim_down": "Atenua la brillantor", - "dim_up": "Augmenta la brillantor", - "face_1": "amb la cara 1 activada", - "face_2": "amb la cara 2 activada", - "face_3": "amb la cara 3 activada", - "face_4": "amb la cara 4 activada", - "face_5": "amb la cara 5 activada", - "face_6": "amb la cara 6 activada", - "face_any": "Amb qualsevol o alguna de les cares especificades activades.", - "left": "Esquerra", - "open": "Obert", - "right": "Dreta", - "turn_off": "Desactiva", - "turn_on": "Activa" - }, - "trigger_type": { - "device_dropped": "Dispositiu caigut", - "device_flipped": "Dispositiu voltejat a \"{subtype}\"", - "device_knocked": "Dispositiu colpejat a \"{subtype}\"", - "device_rotated": "Dispositiu rotat a \"{subtype}\"", - "device_shaken": "Dispositiu sacsejat", - "device_slid": "Dispositiu lliscat a \"{subtype}\"", - "device_tilted": "Dispositiu inclinat", - "remote_button_alt_double_press": "Bot\u00f3 \"{subtype}\" clicat dues vegades (mode alternatiu)", - "remote_button_alt_long_press": "Bot\u00f3 \"{subtype}\" premut cont\u00ednuament (mode alternatiu)", - "remote_button_alt_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut (mode alternatiu", - "remote_button_alt_quadruple_press": "Bot\u00f3 \"{subtype}\" clicat quatre vegades (mode alternatiu)", - "remote_button_alt_quintuple_press": "Bot\u00f3 \"{subtype}\" clicat cinc vegades (mode alternatiu)", - "remote_button_alt_short_press": "Bot\u00f3 \"{subtype}\" premut (mode alternatiu)", - "remote_button_alt_short_release": "Bot\u00f3 \"{subtype}\" alliberat (mode alternatiu)", - "remote_button_alt_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades (mode alternatiu)", - "remote_button_double_press": "Bot\u00f3 \"{subtype}\" clicat dues vegades", - "remote_button_long_press": "Bot\u00f3 \"{subtype}\" premut cont\u00ednuament", - "remote_button_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut", - "remote_button_quadruple_press": "Bot\u00f3 \"{subtype}\" clicat quatre vegades", - "remote_button_quintuple_press": "Bot\u00f3 \"{subtype}\" clicat cinc vegades", - "remote_button_short_press": "Bot\u00f3 \"{subtype}\" premut", - "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat", - "remote_button_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/da.json b/homeassistant/components/zha/.translations/da.json deleted file mode 100644 index 908d8113b2e..00000000000 --- a/homeassistant/components/zha/.translations/da.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af ZHA." - }, - "error": { - "cannot_connect": "Kunne ikke oprette forbindelse til ZHA-enhed." - }, - "step": { - "user": { - "data": { - "radio_type": "Radio-type", - "usb_path": "Sti til USB-enhed" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Advare" - }, - "trigger_subtype": { - "both_buttons": "Begge knapper", - "button_1": "F\u00f8rste knap", - "button_2": "Anden knap", - "button_3": "Tredje knap", - "button_4": "Fjerde knap", - "button_5": "Femte knap", - "button_6": "Sjette knap", - "close": "Luk", - "dim_down": "D\u00e6mp ned", - "dim_up": "D\u00e6mp op", - "face_1": "med ansigt 1 aktiveret", - "face_2": "med ansigt 2 aktiveret", - "face_3": "med ansigt 3 aktiveret", - "face_4": "med ansigt 4 aktiveret", - "face_5": "med ansigt 5 aktiveret", - "face_6": "med ansigt 6 aktiveret", - "face_any": "Med ethvert/specificeret ansigt(er) aktiveret", - "left": "Venstre", - "open": "\u00c5ben", - "right": "H\u00f8jre", - "turn_off": "Sluk", - "turn_on": "T\u00e6nd" - }, - "trigger_type": { - "device_dropped": "Enhed faldt", - "device_flipped": "Enheden blev vendt \"{subtype}\"", - "device_knocked": "Enhed banket med \"{subtype}\"", - "device_rotated": "Enhed roteret \"{subtype}\"", - "device_shaken": "Enhed rystet", - "device_slid": "Enheden gled \"{subtype}\"", - "device_tilted": "Enheden vippes", - "remote_button_double_press": "\"{subtype}\"-knappen er dobbeltklikket", - "remote_button_long_press": "\"{subtype}\"-knappen trykket p\u00e5 konstant", - "remote_button_long_release": "\"{subtype}\"-knappen frigivet efter langt tryk", - "remote_button_quadruple_press": "\"{subtype}\"-knappen firedobbelt-klikket", - "remote_button_quintuple_press": "\"{subtype}\"-knappen femdobbelt-klikket", - "remote_button_short_press": "\"{subtype}\"-knappen trykket p\u00e5", - "remote_button_short_release": "\"{subtype}\"-knappen frigivet", - "remote_button_triple_press": "\"{subtype}\"-knappen tredobbeltklikkes" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/de.json b/homeassistant/components/zha/.translations/de.json deleted file mode 100644 index f7a00fcfa7f..00000000000 --- a/homeassistant/components/zha/.translations/de.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Es ist nur eine einzige Konfiguration von ZHA zul\u00e4ssig." - }, - "error": { - "cannot_connect": "Kein Verbindung zu ZHA-Ger\u00e4t m\u00f6glich" - }, - "step": { - "user": { - "data": { - "radio_type": "Radio-Type", - "usb_path": "USB-Ger\u00e4te-Pfad" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Kreischen", - "warn": "Warnen" - }, - "trigger_subtype": { - "both_buttons": "Beide Tasten", - "button_1": "Erste Taste", - "button_2": "Zweite Taste", - "button_3": "Dritte Taste", - "button_4": "Vierte Taste", - "button_5": "F\u00fcnfte Taste", - "button_6": "Sechste Taste", - "close": "Schlie\u00dfen", - "dim_down": "Dimmer runter", - "dim_up": "Dimmer hoch", - "face_1": "mit Fl\u00e4che 1 aktiviert", - "face_2": "mit Fl\u00e4che 2 aktiviert", - "face_3": "mit Fl\u00e4che 3 aktiviert", - "face_4": "mit Fl\u00e4che 4 aktiviert", - "face_5": "mit Fl\u00e4che 5 aktiviert", - "face_6": "mit Fl\u00e4che 6 aktiviert", - "face_any": "Mit einer beliebigen/festgelegten Fl\u00e4che(n) aktiviert", - "left": "Links", - "open": "Offen", - "right": "Rechts", - "turn_off": "Ausschalten", - "turn_on": "Einschalten" - }, - "trigger_type": { - "device_dropped": "Ger\u00e4t ist gefallen", - "device_flipped": "Ger\u00e4t umgedreht \"{subtype}\"", - "device_knocked": "Ger\u00e4t klopfte \"{subtype}\"", - "device_rotated": "Ger\u00e4t wurde gedreht \"{subtype}\"", - "device_shaken": "Ger\u00e4t ersch\u00fcttert", - "device_slid": "Ger\u00e4t gerutscht \"{subtype}\"", - "device_tilted": "Ger\u00e4t gekippt", - "remote_button_alt_double_press": "\"{subtype}\" Taste doppelt geklickt (Alternativer Modus)", - "remote_button_alt_long_press": "\"{subtype}\" Taste kontinuierlich gedr\u00fcckt (Alternativer Modus)", - "remote_button_alt_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen (Alternativer Modus)", - "remote_button_alt_quadruple_press": "\"{subtype}\" Taste vierfach geklickt (Alternativer Modus)", - "remote_button_alt_quintuple_press": "\"{subtype}\" Taste f\u00fcnffach geklickt (Alternativer Modus)", - "remote_button_alt_short_press": "\"{subtype}\" Taste gedr\u00fcckt (Alternativer Modus)", - "remote_button_alt_short_release": "\"{subtype}\" Taste losgelassen (Alternativer Modus)", - "remote_button_alt_triple_press": "\"{subtype}\" Taste dreimal geklickt (Alternativer Modus)", - "remote_button_double_press": "\"{subtype}\" Taste doppelt angeklickt", - "remote_button_long_press": "\"{subtype}\" Taste kontinuierlich gedr\u00fcckt", - "remote_button_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen", - "remote_button_quadruple_press": "\"{subtype}\" Taste vierfach geklickt", - "remote_button_quintuple_press": "\"{subtype}\" Taste f\u00fcnffach geklickt", - "remote_button_short_press": "\"{subtype}\" Taste gedr\u00fcckt", - "remote_button_short_release": "\"{subtype}\" Taste losgelassen", - "remote_button_triple_press": "\"{subtype}\" Taste dreimal geklickt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/en.json b/homeassistant/components/zha/.translations/en.json deleted file mode 100644 index 500083a7e4e..00000000000 --- a/homeassistant/components/zha/.translations/en.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Only a single configuration of ZHA is allowed." - }, - "error": { - "cannot_connect": "Unable to connect to ZHA device." - }, - "step": { - "user": { - "data": { - "radio_type": "Radio Type", - "usb_path": "USB Device Path" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Warn" - }, - "trigger_subtype": { - "both_buttons": "Both buttons", - "button_1": "First button", - "button_2": "Second button", - "button_3": "Third button", - "button_4": "Fourth button", - "button_5": "Fifth button", - "button_6": "Sixth button", - "close": "Close", - "dim_down": "Dim down", - "dim_up": "Dim up", - "face_1": "with face 1 activated", - "face_2": "with face 2 activated", - "face_3": "with face 3 activated", - "face_4": "with face 4 activated", - "face_5": "with face 5 activated", - "face_6": "with face 6 activated", - "face_any": "With any/specified face(s) activated", - "left": "Left", - "open": "Open", - "right": "Right", - "turn_off": "Turn off", - "turn_on": "Turn on" - }, - "trigger_type": { - "device_dropped": "Device dropped", - "device_flipped": "Device flipped \"{subtype}\"", - "device_knocked": "Device knocked \"{subtype}\"", - "device_rotated": "Device rotated \"{subtype}\"", - "device_shaken": "Device shaken", - "device_slid": "Device slid \"{subtype}\"", - "device_tilted": "Device tilted", - "remote_button_alt_double_press": "\"{subtype}\" button double clicked (Alternate mode)", - "remote_button_alt_long_press": "\"{subtype}\" button continuously pressed (Alternate mode)", - "remote_button_alt_long_release": "\"{subtype}\" button released after long press (Alternate mode)", - "remote_button_alt_quadruple_press": "\"{subtype}\" button quadruple clicked (Alternate mode)", - "remote_button_alt_quintuple_press": "\"{subtype}\" button quintuple clicked (Alternate mode)", - "remote_button_alt_short_press": "\"{subtype}\" button pressed (Alternate mode)", - "remote_button_alt_short_release": "\"{subtype}\" button released (Alternate mode)", - "remote_button_alt_triple_press": "\"{subtype}\" button triple clicked (Alternate mode)", - "remote_button_double_press": "\"{subtype}\" button double clicked", - "remote_button_long_press": "\"{subtype}\" button continuously pressed", - "remote_button_long_release": "\"{subtype}\" button released after long press", - "remote_button_quadruple_press": "\"{subtype}\" button quadruple clicked", - "remote_button_quintuple_press": "\"{subtype}\" button quintuple clicked", - "remote_button_short_press": "\"{subtype}\" button pressed", - "remote_button_short_release": "\"{subtype}\" button released", - "remote_button_triple_press": "\"{subtype}\" button triple clicked" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/es-419.json b/homeassistant/components/zha/.translations/es-419.json deleted file mode 100644 index edf38b4fd3b..00000000000 --- a/homeassistant/components/zha/.translations/es-419.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de ZHA." - }, - "error": { - "cannot_connect": "No se puede conectar al dispositivo ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Tipo de radio", - "usb_path": "Ruta del dispositivo USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "trigger_subtype": { - "left": "Izquierda", - "open": "Abrir", - "right": "Derecha", - "turn_off": "Apagar", - "turn_on": "Encender" - }, - "trigger_type": { - "device_dropped": "Dispositivo ca\u00eddo", - "device_flipped": "Dispositivo volteado \"{subtype}\"", - "device_knocked": "Dispositivo golpeado \"{subtype}\"", - "device_rotated": "Dispositivo girado \"{subtype}\"", - "device_shaken": "Dispositivo agitado", - "device_slid": "Dispositivo deslizado \"{subtype}\"", - "device_tilted": "Dispositivo inclinado" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/es.json b/homeassistant/components/zha/.translations/es.json deleted file mode 100644 index 2bf817daf63..00000000000 --- a/homeassistant/components/zha/.translations/es.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de ZHA." - }, - "error": { - "cannot_connect": "No se puede conectar al dispositivo ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Tipo de radio", - "usb_path": "Ruta del dispositivo USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Advertir" - }, - "trigger_subtype": { - "both_buttons": "Ambos botones", - "button_1": "Primer bot\u00f3n", - "button_2": "Segundo bot\u00f3n", - "button_3": "Tercer bot\u00f3n", - "button_4": "Cuarto bot\u00f3n", - "button_5": "Quinto bot\u00f3n", - "button_6": "Sexto bot\u00f3n", - "close": "Cerrar", - "dim_down": "Bajar la intensidad", - "dim_up": "Subir la intensidad", - "face_1": "con la cara 1 activada", - "face_2": "con la cara 2 activada", - "face_3": "con la cara 3 activada", - "face_4": "con la cara 4 activada", - "face_5": "con la cara 5 activada", - "face_6": "con la cara 6 activada", - "face_any": "Con cualquier cara/especificada(s) activada(s)", - "left": "Izquierda", - "open": "Abrir", - "right": "Derecha", - "turn_off": "Apagar", - "turn_on": "Encender" - }, - "trigger_type": { - "device_dropped": "Dispositivo ca\u00eddo", - "device_flipped": "Dispositivo volteado \" {subtype} \"", - "device_knocked": "Dispositivo eliminado \" {subtype} \"", - "device_rotated": "Dispositivo girado \" {subtype} \"", - "device_shaken": "Dispositivo agitado", - "device_slid": "Dispositivo deslizado \" {subtype} \"", - "device_tilted": "Dispositivo inclinado", - "remote_button_alt_double_press": "Bot\u00f3n \"{subtype}\" doble pulsaci\u00f3n (modo Alternativo)", - "remote_button_alt_long_press": "Bot\u00f3n \"{subtype}\" pulsado continuamente (modo Alternativo)", - "remote_button_alt_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga (modo Alternativo)", - "remote_button_alt_quadruple_press": "Bot\u00f3n \"{subtype}\" cu\u00e1druple pulsaci\u00f3n (modo Alternativo)", - "remote_button_alt_quintuple_press": "Bot\u00f3n \"{subtype}\" qu\u00edntuple pulsaci\u00f3n (modo Alternativo)", - "remote_button_alt_short_press": "Bot\u00f3n \"{subtype}\" pulsado (modo Alternativo)", - "remote_button_alt_short_release": "Bot\u00f3n \"{subtype}\" soltado (modo Alternativo)", - "remote_button_alt_triple_press": "Bot\u00f3n \"{subtype}\" triple pulsaci\u00f3n (modo Alternativo)", - "remote_button_double_press": "Bot\u00f3n \"{subtype}\" doble pulsaci\u00f3n", - "remote_button_long_press": "Bot\u00f3n \"{subtype}\" pulsado continuamente", - "remote_button_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga", - "remote_button_quadruple_press": "Bot\u00f3n \"{subtype}\" cu\u00e1druple pulsaci\u00f3n", - "remote_button_quintuple_press": "Bot\u00f3n \"{subtype}\" qu\u00edntuple pulsaci\u00f3n", - "remote_button_short_press": "Bot\u00f3n \"{subtype}\" pulsado", - "remote_button_short_release": "Bot\u00f3n \"{subtype}\" soltado", - "remote_button_triple_press": "Bot\u00f3n \"{subtype}\" triple pulsaci\u00f3n" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/fr.json b/homeassistant/components/zha/.translations/fr.json deleted file mode 100644 index 99905bba836..00000000000 --- a/homeassistant/components/zha/.translations/fr.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Une seule configuration de ZHA est autoris\u00e9e." - }, - "error": { - "cannot_connect": "Impossible de se connecter au p\u00e9riph\u00e9rique ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Type de radio", - "usb_path": "Chemin du p\u00e9riph\u00e9rique USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Hurlement", - "warn": "Pr\u00e9venir" - }, - "trigger_subtype": { - "both_buttons": "Les deux boutons", - "button_1": "Premier bouton", - "button_2": "Deuxi\u00e8me bouton", - "button_3": "Troisi\u00e8me bouton", - "button_4": "Quatri\u00e8me bouton", - "button_5": "Cinqui\u00e8me bouton", - "button_6": "Sixi\u00e8me bouton", - "close": "Fermer", - "dim_down": "Assombrir", - "dim_up": "\u00c9claircir", - "face_1": "avec face 1 activ\u00e9e", - "face_2": "avec face 2 activ\u00e9e", - "face_3": "avec face 3 activ\u00e9e", - "face_4": "avec face 4 activ\u00e9e", - "face_5": "avec face 5 activ\u00e9e", - "face_6": "avec face 6 activ\u00e9e", - "face_any": "Avec n'importe quelle face / face sp\u00e9cifi\u00e9e(s) activ\u00e9e", - "left": "Gauche", - "open": "Ouvert", - "right": "Droite", - "turn_off": "\u00c9teindre", - "turn_on": "Allumer" - }, - "trigger_type": { - "device_dropped": "Appareil tomb\u00e9", - "device_flipped": "Appareil retourn\u00e9 \"{subtype}\"", - "device_knocked": "Appareil frapp\u00e9 \"{subtype}\"", - "device_rotated": "Appareil tourn\u00e9 \"{subtype}\"", - "device_shaken": "Appareil secou\u00e9", - "device_slid": "Appareil gliss\u00e9 \"{subtype}\"", - "device_tilted": "Dispositif inclin\u00e9", - "remote_button_double_press": "Double clic sur le bouton \" {subtype} \"", - "remote_button_long_press": "Bouton \"{subtype}\" appuy\u00e9 continuellement", - "remote_button_long_release": "Bouton \" {subtype} \" rel\u00e2ch\u00e9 apr\u00e8s un appui long", - "remote_button_quadruple_press": "bouton \" {subtype} \" quadruple clics", - "remote_button_quintuple_press": "bouton \" {subtype} \" quintuple clics", - "remote_button_short_press": "bouton \"{subtype}\" est press\u00e9", - "remote_button_short_release": "Bouton \" {subtype} \" est rel\u00e2ch\u00e9", - "remote_button_triple_press": "Bouton \"{subtype}\" \u00e0 trois clics" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/hu.json b/homeassistant/components/zha/.translations/hu.json deleted file mode 100644 index 11b2a9fc833..00000000000 --- a/homeassistant/components/zha/.translations/hu.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Csak egyetlen ZHA konfigur\u00e1ci\u00f3 megengedett." - }, - "error": { - "cannot_connect": "Nem lehet csatlakozni a ZHA eszk\u00f6zh\u00f6z." - }, - "step": { - "user": { - "data": { - "radio_type": "R\u00e1di\u00f3 t\u00edpusa", - "usb_path": "USB eszk\u00f6z el\u00e9r\u00e9si \u00fat" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/it.json b/homeassistant/components/zha/.translations/it.json deleted file mode 100644 index 5048ce52599..00000000000 --- a/homeassistant/components/zha/.translations/it.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di ZHA." - }, - "error": { - "cannot_connect": "Impossibile connettersi al dispositivo ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Tipo di Radio", - "usb_path": "Percorso del dispositivo USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Strillare", - "warn": "Avvertire" - }, - "trigger_subtype": { - "both_buttons": "Entrambi i pulsanti", - "button_1": "Primo pulsante", - "button_2": "Secondo pulsante", - "button_3": "Terzo pulsante", - "button_4": "Quarto pulsante", - "button_5": "Quinto pulsante", - "button_6": "Sesto pulsante", - "close": "Chiudere", - "dim_down": "Diminuire luminosit\u00e0", - "dim_up": "Aumentare luminosit\u00e0", - "face_1": "con faccia 1 attivata", - "face_2": "con faccia 2 attivata", - "face_3": "con faccia 3 attivata", - "face_4": "con faccia 4 attivata", - "face_5": "con faccia 5 attivata", - "face_6": "con faccia 6 attivata", - "face_any": "Con una o pi\u00f9 facce specificate attivate", - "left": "Sinistra", - "open": "Aperto", - "right": "Destra", - "turn_off": "Spento", - "turn_on": "Acceso" - }, - "trigger_type": { - "device_dropped": "Dispositivo caduto", - "device_flipped": "Dispositivo capovolto \" {subtype} \"", - "device_knocked": "Dispositivo bussato \" {subtype} \"", - "device_rotated": "Dispositivo ruotato \" {subtype} \"", - "device_shaken": "Dispositivo in vibrazione", - "device_slid": "Dispositivo scivolato \"{sottotipo}\"", - "device_tilted": "Dispositivo inclinato", - "remote_button_alt_double_press": "Pulsante \"{subtype}\" cliccato due volte (modalit\u00e0 Alternata)", - "remote_button_alt_long_press": "Pulsante \"{subtype}\" premuto continuamente (modalit\u00e0 Alternata)", - "remote_button_alt_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione (modalit\u00e0 Alternata)", - "remote_button_alt_quadruple_press": "Pulsante \"{subtype}\" cliccato quattro volte (modalit\u00e0 Alternata)", - "remote_button_alt_quintuple_press": "Pulsante \"{subtype}\" cliccato cinque volte (modalit\u00e0 Alternata)", - "remote_button_alt_short_press": "Pulsante \"{subtype}\" premuto (modalit\u00e0 Alternata)", - "remote_button_alt_short_release": "Pulsante \"{subtype}\" rilasciato (modalit\u00e0 Alternata)", - "remote_button_alt_triple_press": "Pulsante \"{subtype}\" cliccato tre volte (modalit\u00e0 Alternata)", - "remote_button_double_press": "Pulsante \"{subtype}\" cliccato due volte", - "remote_button_long_press": "Pulsante \"{subtype}\" premuto continuamente", - "remote_button_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione", - "remote_button_quadruple_press": "Pulsante \"{subtype}\" cliccato quattro volte", - "remote_button_quintuple_press": "Pulsante \"{subtype}\" cliccato cinque volte", - "remote_button_short_press": "Pulsante \"{subtype}\" premuto", - "remote_button_short_release": "Pulsante \"{subtype}\" rilasciato", - "remote_button_triple_press": "Pulsante \"{subtype}\" cliccato tre volte" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/ko.json b/homeassistant/components/zha/.translations/ko.json deleted file mode 100644 index 76a10d2c976..00000000000 --- a/homeassistant/components/zha/.translations/ko.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "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." - }, - "step": { - "user": { - "data": { - "radio_type": "\ubb34\uc120 \uc720\ud615", - "usb_path": "USB \uc7a5\uce58 \uacbd\ub85c" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "\ube44\uc0c1", - "warn": "\uacbd\uace0" - }, - "trigger_subtype": { - "both_buttons": "\ub450 \uac1c", - "button_1": "\uccab \ubc88\uc9f8", - "button_2": "\ub450 \ubc88\uc9f8", - "button_3": "\uc138 \ubc88\uc9f8", - "button_4": "\ub124 \ubc88\uc9f8", - "button_5": "\ub2e4\uc12f \ubc88\uc9f8", - "button_6": "\uc5ec\uc12f \ubc88\uc9f8", - "close": "\ub2eb\uae30", - "dim_down": "\uc5b4\ub461\uac8c \ud558\uae30", - "dim_up": "\ubc1d\uac8c \ud558\uae30", - "face_1": "\uba74 1\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "face_2": "\uba74 2\ub97c \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "face_3": "\uba74 3\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "face_4": "\uba74 4\ub97c \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "face_5": "\uba74 5\ub97c \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "face_6": "\uba74 6\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "face_any": "\uc784\uc758\uc758 \uba74 \ub610\ub294 \ud2b9\uc815 \uba74\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", - "left": "\uc67c\ucabd", - "open": "\uc5f4\uae30", - "right": "\uc624\ub978\ucabd", - "turn_off": "\ub044\uae30", - "turn_on": "\ucf1c\uae30" - }, - "trigger_type": { - "device_dropped": "\uae30\uae30\uac00 \ub5a8\uc5b4\uc84c\uc744 \ub54c", - "device_flipped": "\"{subtype}\" \uae30\uae30\uac00 \ub4a4\uc9d1\uc5b4\uc9c8 \ub54c", - "device_knocked": "\"{subtype}\" \uae30\uae30\uac00 \ub450\ub4dc\ub824\uc9c8 \ub54c", - "device_rotated": "\"{subtype}\" \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", - "device_shaken": "\uae30\uae30\uac00 \ud754\ub4e4\ub9b4 \ub54c", - "device_slid": "\"{subtype}\" \uae30\uae30\uac00 \ubbf8\ub044\ub7ec\uc9c8 \ub54c", - "device_tilted": "\uae30\uae30\uac00 \uae30\uc6b8\uc5b4\uc9c8 \ub54c", - "remote_button_alt_double_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_alt_long_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_alt_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c (\ub300\uccb4\ubaa8\ub4dc)", - "remote_button_alt_quadruple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_alt_quintuple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_alt_short_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_alt_short_release": "\"{subtype}\" \ubc84\ud2bc\uc5d0\uc11c \uc190\uc744 \ub5c4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_alt_triple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", - "remote_button_double_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c", - "remote_button_long_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c", - "remote_button_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", - "remote_button_quadruple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c", - "remote_button_quintuple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \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_triple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/lb.json b/homeassistant/components/zha/.translations/lb.json deleted file mode 100644 index c4c65bf2037..00000000000 --- a/homeassistant/components/zha/.translations/lb.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun ZHA ass erlaabt." - }, - "error": { - "cannot_connect": "Keng Verbindung mam ZHA Apparat m\u00e9iglech." - }, - "step": { - "user": { - "data": { - "radio_type": "Typ vun Radio", - "usb_path": "Pad zum USB Apparat" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Mellen", - "warn": "Warnen" - }, - "trigger_subtype": { - "both_buttons": "B\u00e9id Kn\u00e4ppchen", - "button_1": "\u00c9ischte Kn\u00e4ppchen", - "button_2": "Zweete Kn\u00e4ppchen", - "button_3": "Dr\u00ebtte Kn\u00e4ppchen", - "button_4": "V\u00e9ierte Kn\u00e4ppchen", - "button_5": "F\u00ebnnefte Kn\u00e4ppchen", - "button_6": "Sechste Kn\u00e4ppchen", - "close": "Zoumaachen", - "dim_down": "Verd\u00e4ischteren", - "dim_up": "Erhellen", - "face_1": "mat S\u00e4it 1 aktiv\u00e9iert", - "face_2": "mat S\u00e4it 2 aktiv\u00e9iert", - "face_3": "mat S\u00e4it 3 aktiv\u00e9iert", - "face_4": "mat S\u00e4it 4 aktiv\u00e9iert", - "face_5": "mat S\u00e4it 5 aktiv\u00e9iert", - "face_6": "mat S\u00e4it 6 aktiv\u00e9iert", - "face_any": "Mat iergendenger/spezifiz\u00e9ierter S\u00e4it(en) aktiv\u00e9iert", - "left": "L\u00e9nks", - "open": "Op", - "right": "Riets", - "turn_off": "Ausschalten", - "turn_on": "Uschalten" - }, - "trigger_type": { - "device_dropped": "Apparat gefall", - "device_flipped": "Apparat \u00ebmgedr\u00e9int \"{subtype}\"", - "device_knocked": "Apparat geklappt \"{subtype}\"", - "device_rotated": "Apparat gedr\u00e9int \"{subtype}\"", - "device_shaken": "Apparat ger\u00ebselt", - "device_slid": "Apparat gerutscht \"{subtype}\"", - "device_tilted": "Apparat ass gekippt", - "remote_button_alt_double_press": "\"{subtype}\" Kn\u00e4ppche zwee mol gedr\u00e9ckt (Alternative Modus)", - "remote_button_alt_long_press": "\"{subtype}\" Kn\u00e4ppche permanent gedr\u00e9ckt (Alternative Modus)", - "remote_button_alt_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss (Alternative Modus)", - "remote_button_alt_quadruple_press": "\"{subtype}\" Kn\u00e4ppche v\u00e9ier mol gedr\u00e9ckt (Alternative Modus)", - "remote_button_alt_quintuple_press": "\"{subtype}\" Kn\u00e4ppche f\u00ebnnef mol gedr\u00e9ckt (Alternative Modus)", - "remote_button_alt_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt (Alternative Modus)", - "remote_button_alt_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss (Alternative Modus)", - "remote_button_alt_triple_press": "\"{subtype}\" Kn\u00e4ppche dr\u00e4imol gedr\u00e9ckt (Alternative Modus)", - "remote_button_double_press": "\"{subtype}\" Kn\u00e4ppche zwee mol gedr\u00e9ckt", - "remote_button_long_press": "\"{subtype}\" Kn\u00e4ppche permanent gedr\u00e9ckt", - "remote_button_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss", - "remote_button_quadruple_press": "\"{subtype}\" Kn\u00e4ppche v\u00e9ier mol gedr\u00e9ckt", - "remote_button_quintuple_press": "\"{subtype}\" Kn\u00e4ppche f\u00ebnnef mol gedr\u00e9ckt", - "remote_button_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt", - "remote_button_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss", - "remote_button_triple_press": "\"{subtype}\" Kn\u00e4ppche dr\u00e4imol gedr\u00e9ckt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/nl.json b/homeassistant/components/zha/.translations/nl.json deleted file mode 100644 index fc7ae970503..00000000000 --- a/homeassistant/components/zha/.translations/nl.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie van ZHA is toegestaan." - }, - "error": { - "cannot_connect": "Kan geen verbinding maken met ZHA apparaat." - }, - "step": { - "user": { - "data": { - "radio_type": "Radio Type", - "usb_path": "USB-apparaatpad" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Schreeuw", - "warn": "Waarschuwen" - }, - "trigger_subtype": { - "both_buttons": "Beide knoppen", - "button_1": "Eerste knop", - "button_2": "Tweede knop", - "button_3": "Derde knop", - "button_4": "Vierde knop", - "button_5": "Vijfde knop", - "button_6": "Zesde knop", - "close": "Sluiten", - "dim_down": "Dim omlaag", - "dim_up": "Dim omhoog", - "face_1": "met gezicht 1 geactiveerd", - "face_2": "met gezicht 2 geactiveerd", - "face_3": "met gezicht 3 geactiveerd", - "face_4": "met gezicht 4 geactiveerd", - "face_5": "met gezicht 5 geactiveerd", - "face_6": "met gezicht 6 geactiveerd", - "face_any": "Met elk/opgegeven gezicht (en) geactiveerd", - "left": "Links", - "open": "Open", - "right": "Rechts", - "turn_off": "Uitschakelen", - "turn_on": "Inschakelen" - }, - "trigger_type": { - "device_dropped": "Apparaat gevallen", - "device_flipped": "Apparaat omgedraaid \"{subtype}\"", - "device_knocked": "Apparaat klopte \"{subtype}\"", - "device_rotated": "Apparaat gedraaid \" {subtype} \"", - "device_shaken": "Apparaat geschud", - "device_slid": "Apparaat geschoven \"{subtype}\"\".", - "device_tilted": "Apparaat gekanteld", - "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", - "remote_button_quadruple_press": "\" {subtype} \" knop viervoudig aangeklikt", - "remote_button_quintuple_press": "\" {subtype} \" knop vijf keer aangeklikt", - "remote_button_short_press": "\" {subtype} \" knop ingedrukt", - "remote_button_short_release": "\"{subtype}\" knop losgelaten", - "remote_button_triple_press": "\" {subtype} \" knop driemaal geklikt" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/nn.json b/homeassistant/components/zha/.translations/nn.json deleted file mode 100644 index 392018bb1f1..00000000000 --- a/homeassistant/components/zha/.translations/nn.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "config": { - "step": { - "user": { - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/no.json b/homeassistant/components/zha/.translations/no.json deleted file mode 100644 index 656926017cf..00000000000 --- a/homeassistant/components/zha/.translations/no.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Kun en konfigurasjon av ZHA er tillatt." - }, - "error": { - "cannot_connect": "Kan ikke koble til ZHA-enhet." - }, - "step": { - "user": { - "data": { - "radio_type": "Radio type", - "usb_path": "USB enhetsbane" - }, - "title": "" - } - }, - "title": "" - }, - "device_automation": { - "action_type": { - "squawk": "Varsle", - "warn": "Advar" - }, - "trigger_subtype": { - "both_buttons": "Begge knapper", - "button_1": "F\u00f8rste knapp", - "button_2": "Andre knapp", - "button_3": "Tredje knapp", - "button_4": "Fjerde knapp", - "button_5": "Femte knapp", - "button_6": "Sjette knapp", - "close": "Lukk", - "dim_down": "Dimm ned", - "dim_up": "Dimm opp", - "face_1": "med ansikt 1 aktivert", - "face_2": "med ansikt 2 aktivert", - "face_3": "med ansikt 3 aktivert", - "face_4": "med ansikt 4 aktivert", - "face_5": "med ansikt 5 aktivert", - "face_6": "med ansikt 6 aktivert", - "face_any": "Med alle/angitte ansikt(er) aktivert", - "left": "Venstre", - "open": "\u00c5pen", - "right": "H\u00f8yre", - "turn_off": "Skru av", - "turn_on": "Sl\u00e5 p\u00e5" - }, - "trigger_type": { - "device_dropped": "Enheten ble sluppet", - "device_flipped": "Enheten snudd \"{subtype}\"", - "device_knocked": "Enheten sl\u00e5tt \"{subtype}\"", - "device_rotated": "Enheten roterte \"{subtype}\"", - "device_shaken": "Enhet er ristet", - "device_slid": "Enheten skled \"{subtype}\"", - "device_tilted": "Enheten skr\u00e5stilt", - "remote_button_alt_double_press": "\" {subtype} \" -knapp dobbeltklikket (alternativ modus)", - "remote_button_alt_long_press": "\" {subtype} \" -knappen trykkes kontinuerlig (alternativ modus)", - "remote_button_alt_long_release": "\" {subtype} \" -knapp sluppet etter langt trykk (Alternativ modus)", - "remote_button_alt_quadruple_press": "\"{subtype}\" knapp firedoblet klikket (alternativ modus)", - "remote_button_alt_quintuple_press": "\"{subtype}\" knapp femdobblet klikket (alternativ modus)", - "remote_button_alt_short_press": "\" {subtype} \" -knappen trykket p\u00e5 (alternativ modus)", - "remote_button_alt_short_release": "\" {subtype} \" -knapp utgitt (alternativ modus)", - "remote_button_alt_triple_press": "\" {subtype} \" -knapp tredobbeltklikket (alternativ modus)", - "remote_button_double_press": "\"{subtype}\"-knappen ble dobbeltklikket", - "remote_button_long_press": "\"{subtype}\"-knappen ble holdt inne", - "remote_button_long_release": "\"{subtype}\"-knappen sluppet etter langt trykk", - "remote_button_quadruple_press": "\"{subtype}\"-knappen ble trykket fire ganger", - "remote_button_quintuple_press": "\"{subtype}\"-knappen ble trykket fem ganger", - "remote_button_short_press": "\"{subtype}\"-knappen ble trykket", - "remote_button_short_release": "\"{subtype}\"-knappen sluppet", - "remote_button_triple_press": "\"{subtype}\"-knappen ble trippelklikket" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/pl.json b/homeassistant/components/zha/.translations/pl.json deleted file mode 100644 index bf651fb16ed..00000000000 --- a/homeassistant/components/zha/.translations/pl.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja ZHA." - }, - "error": { - "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z urz\u0105dzeniem ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Typ radia", - "usb_path": "\u015acie\u017cka urz\u0105dzenia USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "squawk", - "warn": "ostrze\u017cenie" - }, - "trigger_subtype": { - "both_buttons": "oba przyciski", - "button_1": "pierwszy przycisk", - "button_2": "drugi przycisk", - "button_3": "trzeci przycisk", - "button_4": "czwarty przycisk", - "button_5": "pi\u0105ty przycisk", - "button_6": "sz\u00f3sty przycisk", - "close": "nast\u0105pi zamkni\u0119cie", - "dim_down": "nast\u0105pi zmniejszenie jasno\u015bci", - "dim_up": "nast\u0105pi zwi\u0119kszenie jasno\u015bci", - "face_1": "z aktywowan\u0105 twarz\u0105 1", - "face_2": "z aktywowan\u0105 twarz\u0105 2", - "face_3": "z aktywowan\u0105 twarz\u0105 3", - "face_4": "z aktywowan\u0105 twarz\u0105 4", - "face_5": "z aktywowan\u0105 twarz\u0105 5", - "face_6": "z aktywowan\u0105 twarz\u0105 6", - "face_any": "z dowoln\u0105 twarz\u0105 aktywowan\u0105", - "left": "w lewo", - "open": "otwarcie", - "right": "w prawo", - "turn_off": "nast\u0105pi wy\u0142\u0105czenie", - "turn_on": "nast\u0105pi w\u0142\u0105czenie" - }, - "trigger_type": { - "device_dropped": "nast\u0105pi upadek urz\u0105dzenia", - "device_flipped": "nast\u0105pi odwr\u00f3cenie urz\u0105dzenia \"{subtype}\"", - "device_knocked": "nast\u0105pi pukni\u0119cie w urz\u0105dzenie \"{subtype}\"", - "device_rotated": "nast\u0105pi obr\u00f3cenie urz\u0105dzenia \"{subtype}\"", - "device_shaken": "nast\u0105pi potrz\u0105\u015bni\u0119cie urz\u0105dzeniem", - "device_slid": "nast\u0105pi przesuni\u0119cie urz\u0105dzenia \"{subtype}\"", - "device_tilted": "nast\u0105pi przechylenie urz\u0105dzenia", - "remote_button_alt_double_press": "\"{subtype}\" dwukrotnie naci\u015bni\u0119ty (tryb alternatywny)", - "remote_button_alt_long_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y (tryb alternatywny)", - "remote_button_alt_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu (tryb alternatywny)", - "remote_button_alt_quadruple_press": "\"{subtype}\" czterokrotnie naci\u015bni\u0119ty (tryb alternatywny)", - "remote_button_alt_quintuple_press": "\"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty (tryb alternatywny)", - "remote_button_alt_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty (tryb alternatywny)", - "remote_button_alt_short_release": "\"{subtype}\" zostanie zwolniony (tryb alternatywny)", - "remote_button_alt_triple_press": "\"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty (tryb alternatywny)", - "remote_button_double_press": "\"{subtype}\" zostanie podw\u00f3jnie naci\u015bni\u0119ty", - "remote_button_long_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y", - "remote_button_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", - "remote_button_quadruple_press": "\"{subtype}\" czterokrotnie naci\u015bni\u0119ty", - "remote_button_quintuple_press": "\"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty", - "remote_button_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty", - "remote_button_short_release": "\"{subtype}\" zostanie zwolniony", - "remote_button_triple_press": "\"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/pt-BR.json b/homeassistant/components/zha/.translations/pt-BR.json deleted file mode 100644 index 7ccc661dd28..00000000000 --- a/homeassistant/components/zha/.translations/pt-BR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do ZHA \u00e9 permitida." - }, - "error": { - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao dispositivo ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Tipo de r\u00e1dio", - "usb_path": "Caminho do Dispositivo USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Aviso" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/pt.json b/homeassistant/components/zha/.translations/pt.json deleted file mode 100644 index 0c86dc95d09..00000000000 --- a/homeassistant/components/zha/.translations/pt.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do ZHA \u00e9 permitida." - }, - "error": { - "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao dispositivo ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Tipo de r\u00e1dio", - "usb_path": "Caminho do Dispositivo USB" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "warn": "Avisar" - }, - "trigger_subtype": { - "left": "Esquerda" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/ru.json b/homeassistant/components/zha/.translations/ru.json deleted file mode 100644 index c5f38d00d69..00000000000 --- a/homeassistant/components/zha/.translations/ru.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." - }, - "error": { - "cannot_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": { - "data": { - "radio_type": "\u0422\u0438\u043f \u0420\u0430\u0434\u0438\u043e", - "usb_path": "\u041f\u0443\u0442\u044c \u043a USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" - }, - "title": "Zigbee Home Automation" - } - }, - "title": "Zigbee Home Automation (ZHA)" - }, - "device_automation": { - "action_type": { - "squawk": "\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0434\u0435\u0440", - "warn": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435" - }, - "trigger_subtype": { - "both_buttons": "\u041e\u0431\u0435 \u043a\u043d\u043e\u043f\u043a\u0438", - "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_5": "\u041f\u044f\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "button_6": "\u0428\u0435\u0441\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", - "close": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "dim_down": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f", - "dim_up": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f", - "face_1": "\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", - "face_2": "\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", - "face_3": "\u043d\u0430 \u0442\u0440\u0435\u0442\u0435\u0439 \u0433\u0440\u0430\u043d\u0438", - "face_4": "\u043d\u0430 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", - "face_5": "\u043d\u0430 \u043f\u044f\u0442\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", - "face_6": "\u043d\u0430 \u0448\u0435\u0441\u0442\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", - "face_any": "\u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", - "left": "\u041d\u0430\u043b\u0435\u0432\u043e", - "open": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", - "right": "\u041d\u0430\u043f\u0440\u0430\u0432\u043e", - "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", - "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" - }, - "trigger_type": { - "device_dropped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u043b\u0438", - "device_flipped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \"{subtype}\"", - "device_knocked": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0438 \"{subtype}\"", - "device_rotated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \"{subtype}\"", - "device_shaken": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u044f\u0445\u043d\u0443\u043b\u0438", - "device_slid": "\u0421\u0434\u0432\u0438\u0433 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \"{subtype}\"", - "device_tilted": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u043a\u043b\u043e\u043d\u0438\u043b\u0438", - "remote_button_alt_double_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_long_press": "\"{subtype}\" \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_long_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_quadruple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_quintuple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_short_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_short_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_alt_triple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", - "remote_button_double_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430", - "remote_button_long_press": "\"{subtype}\" \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430", - "remote_button_long_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", - "remote_button_quadruple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430", - "remote_button_quintuple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437", - "remote_button_short_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430", - "remote_button_short_release": "\"{subtype}\" \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", - "remote_button_triple_press": "\"{subtype}\" \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/sl.json b/homeassistant/components/zha/.translations/sl.json deleted file mode 100644 index 53a45000701..00000000000 --- a/homeassistant/components/zha/.translations/sl.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Dovoljena je samo ena konfiguracija ZHA." - }, - "error": { - "cannot_connect": "Ne morem se povezati napravo ZHA." - }, - "step": { - "user": { - "data": { - "radio_type": "Vrsta radia", - "usb_path": "USB Pot" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Opozori" - }, - "trigger_subtype": { - "both_buttons": "Oba gumba", - "button_1": "Prvi gumb", - "button_2": "Drugi gumb", - "button_3": "Tretji gumb", - "button_4": "\u010cetrti gumb", - "button_5": "Peti gumb", - "button_6": "\u0160esti gumb", - "close": "Zapri", - "dim_down": "Zatemnite", - "dim_up": "pove\u010dajte mo\u010d", - "face_1": "aktivirano z obrazom 1", - "face_2": "aktivirano z obrazom 2", - "face_3": "aktivirano z obrazom 3", - "face_4": "aktivirano z obrazom 4", - "face_5": "aktivirano z obrazom 5", - "face_6": "aktivirano z obrazom 6", - "face_any": "Z vsemi/dolo\u010denimi obrazi vklju\u010deno", - "left": "Levo", - "open": "Odprto", - "right": "Desno", - "turn_off": "Ugasni", - "turn_on": "Pri\u017egi" - }, - "trigger_type": { - "device_dropped": "Naprava padla", - "device_flipped": "Naprava obrnjena \"{subtype}\"", - "device_knocked": "Naprava prevrnjena \"{subtype}\"", - "device_rotated": "Naprava je zasukana \"{subtype}\"", - "device_shaken": "Naprava se je pretresla", - "device_slid": "Naprava zdrsnila \"{subtype}\"", - "device_tilted": "Naprava je nagnjena", - "remote_button_alt_double_press": "Dvojni klik gumba \" {subtype} \" (nadomestni na\u010din)", - "remote_button_alt_long_press": "Gumb \" {subtype} \" neprekinjeno pritisnjen (nadomestni na\u010din)", - "remote_button_alt_long_release": "\"{Subtype}\" gumb spro\u0161\u010den po dolgem pritisku (nadomestni na\u010din)", - "remote_button_alt_quadruple_press": "\u0161tirikrat kliknjen gumb \" {subtype} \" (nadomestni na\u010din)", - "remote_button_alt_quintuple_press": "Petkrat kliknjen \"{podtipa}\" gumb (Nadomestni na\u010din)", - "remote_button_alt_short_press": "pritisnjen gumb \" {subtype} \" (nadomestni na\u010din)", - "remote_button_alt_short_release": "Gumb \" {subtype} \" spro\u0161\u010den (nadomestni na\u010din)", - "remote_button_alt_triple_press": "Trikrat kliknjen gumb \" {subtype} \" (nadomestni na\u010din)", - "remote_button_double_press": "Dvakrat kliknete gumb \"{subtype}\"", - "remote_button_long_press": "\"{subtype}\" gumb neprekinjeno pritisnjen", - "remote_button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", - "remote_button_quadruple_press": "\"{subtype}\" gumb \u0161tirikrat kliknjen", - "remote_button_quintuple_press": "\"{subtype}\" gumb petkrat kliknjen", - "remote_button_short_press": "Pritisnjen \"{subtype}\" gumb", - "remote_button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den", - "remote_button_triple_press": "Gumb \"{subtype}\" trikrat kliknjen" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/sv.json b/homeassistant/components/zha/.translations/sv.json deleted file mode 100644 index 473cf1cd2a9..00000000000 --- a/homeassistant/components/zha/.translations/sv.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "Endast en enda konfiguration av ZHA \u00e4r till\u00e5ten." - }, - "error": { - "cannot_connect": "Det gick inte att ansluta till ZHA enhet." - }, - "step": { - "user": { - "data": { - "radio_type": "Typ av radio", - "usb_path": "USB-enhetens s\u00f6kv\u00e4g" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "Kraxa", - "warn": "Varna" - }, - "trigger_subtype": { - "both_buttons": "B\u00e5da knapparna", - "button_1": "F\u00f6rsta knappen", - "button_2": "Andra knappen", - "button_3": "Tredje knappen", - "button_4": "Fj\u00e4rde knappen", - "button_5": "Femte knappen", - "button_6": "Sj\u00e4tte knappen", - "close": "St\u00e4ng", - "dim_down": "Dimma ned", - "dim_up": "Dimma upp", - "face_1": "med bildsida 1 aktiverat", - "face_2": "med bildsida 2 aktiverat", - "face_3": "med bildsida 3 aktiverat", - "face_4": "med bildsida 4 aktiverat", - "face_5": "med bildsida 5 aktiverat", - "face_6": "med bildsida 6 aktiverat", - "face_any": "Med valfri/specificerad bildsida(or) aktiverat", - "left": "V\u00e4nster", - "open": "\u00d6ppen", - "right": "H\u00f6ger", - "turn_off": "St\u00e4ng av", - "turn_on": "Starta" - }, - "trigger_type": { - "device_dropped": "Enheten tappades", - "device_flipped": "Enheten v\u00e4nd \"{subtype}\"", - "device_knocked": "Enheten knackad \"{subtype}\"", - "device_rotated": "Enheten roterade \"{subtype}\"", - "device_shaken": "Enheten skakad", - "device_slid": "Enheten gled \"{subtype}\"", - "device_tilted": "Enheten lutad", - "remote_button_double_press": "\"{subtype}\"-knappen dubbelklickades", - "remote_button_long_press": "\"{subtype}\"-knappen kontinuerligt nedtryckt", - "remote_button_long_release": "\"{subtype}\"-knappen sl\u00e4pptes efter ett l\u00e5ngttryck", - "remote_button_quadruple_press": "\"{subtype}\"-knappen klickades \nfyrfaldigt", - "remote_button_quintuple_press": "\"{subtype}\"-knappen klickades \nfemfaldigt", - "remote_button_short_press": "\"{subtype}\"-knappen trycktes in", - "remote_button_short_release": "\"{subtype}\"-knappen sl\u00e4ppt", - "remote_button_triple_press": "\"{subtype}\"-knappen trippelklickades" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/zh-Hans.json b/homeassistant/components/zha/.translations/zh-Hans.json deleted file mode 100644 index b0a553263f7..00000000000 --- a/homeassistant/components/zha/.translations/zh-Hans.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u53ea\u5141\u8bb8\u4e00\u4e2a ZHA \u914d\u7f6e\u3002" - }, - "error": { - "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230 ZHA \u8bbe\u5907\u3002" - }, - "step": { - "user": { - "data": { - "radio_type": "\u65e0\u7ebf\u7535\u7c7b\u578b", - "usb_path": "USB \u8bbe\u5907\u8def\u5f84" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/zh-Hant.json b/homeassistant/components/zha/.translations/zh-Hant.json deleted file mode 100644 index 9547e7b5b7d..00000000000 --- a/homeassistant/components/zha/.translations/zh-Hant.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "config": { - "abort": { - "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 ZHA\u3002" - }, - "error": { - "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 ZHA \u8a2d\u5099\u3002" - }, - "step": { - "user": { - "data": { - "radio_type": "\u7121\u7dda\u96fb\u985e\u578b", - "usb_path": "USB \u8a2d\u5099\u8def\u5f91" - }, - "title": "ZHA" - } - }, - "title": "ZHA" - }, - "device_automation": { - "action_type": { - "squawk": "\u61c9\u7b54", - "warn": "\u8b66\u544a" - }, - "trigger_subtype": { - "both_buttons": "\u5169\u500b\u6309\u9215", - "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", - "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", - "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", - "button_4": "\u7b2c\u56db\u500b\u6309\u9215", - "button_5": "\u7b2c\u4e94\u500b\u6309\u9215", - "button_6": "\u7b2c\u516d\u500b\u6309\u9215", - "close": "\u95dc\u9589", - "dim_down": "\u8abf\u6697", - "dim_up": "\u8abf\u4eae", - "face_1": "\u5df2\u7531\u9762\u5bb9 1 \u958b\u555f", - "face_2": "\u5df2\u7531\u9762\u5bb9 2 \u958b\u555f", - "face_3": "\u5df2\u7531\u9762\u5bb9 3 \u958b\u555f", - "face_4": "\u5df2\u7531\u9762\u5bb9 4 \u958b\u555f", - "face_5": "\u5df2\u7531\u9762\u5bb9 5 \u958b\u555f", - "face_6": "\u5df2\u7531\u9762\u5bb9 6 \u958b\u555f", - "face_any": "\u5df2\u7531\u4efb\u4f55/\u7279\u5b9a\u9762\u5bb9\u958b\u555f", - "left": "\u5de6", - "open": "\u958b\u555f", - "right": "\u53f3", - "turn_off": "\u95dc\u9589", - "turn_on": "\u958b\u555f" - }, - "trigger_type": { - "device_dropped": "\u8a2d\u5099\u6389\u843d", - "device_flipped": "\u7ffb\u52d5 \"{subtype}\" \u8a2d\u5099", - "device_knocked": "\u6572\u64ca \"{subtype}\" \u8a2d\u5099", - "device_rotated": "\u65cb\u8f49 \"{subtype}\" \u8a2d\u5099", - "device_shaken": "\u8a2d\u5099\u6416\u6643", - "device_slid": "\u63a8\u52d5 \"{subtype}\" \u8a2d\u5099", - "device_tilted": "\u8a2d\u5099\u540d\u7a31", - "remote_button_alt_double_press": "\"{subtype}\" \u6309\u9215\u96d9\u64ca\u9375\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_long_press": "\"{subtype}\" \u6309\u9215\u6301\u7e8c\u6309\u4e0b\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_long_release": "\"{subtype}\" \u6309\u9215\u9577\u6309\u5f8c\u91cb\u653e\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_quadruple_press": "\"{subtype}\" \u6309\u9215\u56db\u9023\u64ca\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_quintuple_press": "\"{subtype}\" \u6309\u9215\u4e94\u9023\u64ca\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_alt_triple_press": "\"{subtype}\" \u6309\u9215\u4e09\u9023\u64ca\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", - "remote_button_double_press": "\"{subtype}\" \u6309\u9215\u96d9\u64ca", - "remote_button_long_press": "\"{subtype}\" \u6309\u9215\u6301\u7e8c\u6309\u4e0b", - "remote_button_long_release": "\"{subtype}\" \u6309\u9215\u9577\u6309\u5f8c\u91cb\u653e", - "remote_button_quadruple_press": "\"{subtype}\" \u6309\u9215\u56db\u9023\u64ca", - "remote_button_quintuple_press": "\"{subtype}\" \u6309\u9215\u4e94\u9023\u64ca", - "remote_button_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b", - "remote_button_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e", - "remote_button_triple_press": "\"{subtype}\" \u6309\u9215\u4e09\u9023\u64ca" - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zha/api.py b/homeassistant/components/zha/api.py index f3b6e2eebd9..232a5666300 100644 --- a/homeassistant/components/zha/api.py +++ b/homeassistant/components/zha/api.py @@ -2,6 +2,7 @@ import asyncio import collections +from collections.abc import Mapping import logging from typing import Any @@ -677,7 +678,7 @@ async def websocket_unbind_devices(hass, connection, msg): def is_cluster_binding(value: Any) -> ClusterBinding: """Validate and transform a cluster binding.""" - if not isinstance(value, collections.Mapping): + if not isinstance(value, Mapping): raise vol.Invalid("Not a cluster binding") try: cluster_binding = ClusterBinding( @@ -774,9 +775,9 @@ async def async_binding_operation(zha_gateway, source_ieee, target_ieee, operati res = await asyncio.gather(*(t[0] for t in bind_tasks), return_exceptions=True) for outcome, log_msg in zip(res, bind_tasks): if isinstance(outcome, Exception): - fmt = log_msg[1] + " failed: %s" + fmt = f"{log_msg[1]} failed: %s" else: - fmt = log_msg[1] + " completed: %s" + fmt = f"{log_msg[1]} completed: %s" zdo.debug(fmt, *(log_msg[2] + (outcome,))) diff --git a/homeassistant/components/zha/binary_sensor.py b/homeassistant/components/zha/binary_sensor.py index 9ed1bbfca16..044d32890da 100644 --- a/homeassistant/components/zha/binary_sensor.py +++ b/homeassistant/components/zha/binary_sensor.py @@ -75,7 +75,6 @@ class BinarySensor(ZhaEntity, BinarySensorDevice): async def get_device_class(self): """Get the HA device class from the channel.""" - pass async def async_added_to_hass(self): """Run when about to be added to hass.""" diff --git a/homeassistant/components/zha/core/channels/__init__.py b/homeassistant/components/zha/core/channels/__init__.py index 91a23e17f12..18eb2a6c1cc 100644 --- a/homeassistant/components/zha/core/channels/__init__.py +++ b/homeassistant/components/zha/core/channels/__init__.py @@ -1,7 +1,7 @@ """Channels module for Zigbee Home Automation.""" import asyncio import logging -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Optional, Tuple, Union from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_send @@ -92,6 +92,14 @@ class Channels: """Return the unique id for this channel.""" return self._unique_id + @property + def zigbee_signature(self) -> Dict[int, Dict[str, Any]]: + """Get the zigbee signatures for the pools in channels.""" + return { + signature[0]: signature[1] + for signature in [pool.zigbee_signature for pool in self.pools] + } + @classmethod def new(cls, zha_device: zha_typing.ZhaDeviceType) -> "Channels": """Create new instance.""" @@ -231,6 +239,27 @@ class ChannelPool: """Return the unique id for this channel.""" return self._unique_id + @property + def zigbee_signature(self) -> Tuple[int, Dict[str, Any]]: + """Get the zigbee signature for the endpoint this pool represents.""" + return ( + self.endpoint.endpoint_id, + { + const.ATTR_PROFILE_ID: self.endpoint.profile_id, + const.ATTR_DEVICE_TYPE: f"0x{self.endpoint.device_type:04x}" + if self.endpoint.device_type is not None + else "", + const.ATTR_IN_CLUSTERS: [ + f"0x{cluster_id:04x}" + for cluster_id in sorted(self.endpoint.in_clusters) + ], + const.ATTR_OUT_CLUSTERS: [ + f"0x{cluster_id:04x}" + for cluster_id in sorted(self.endpoint.out_clusters) + ], + }, + ) + @classmethod def new(cls, channels: Channels, ep_id: int) -> "ChannelPool": """Create new channels for an endpoint.""" diff --git a/homeassistant/components/zha/core/channels/base.py b/homeassistant/components/zha/core/channels/base.py index a5255e7f756..83accc5b86c 100644 --- a/homeassistant/components/zha/core/channels/base.py +++ b/homeassistant/components/zha/core/channels/base.py @@ -56,7 +56,7 @@ def decorate_command(channel, command): ) return result - except (zigpy.exceptions.DeliveryError, asyncio.TimeoutError) as ex: + except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as ex: channel.debug("command failed: %s exception: %s", command.__name__, str(ex)) return ex @@ -135,13 +135,13 @@ class ZigbeeChannel(LogMixin): async def bind(self): """Bind a zigbee cluster. - This also swallows DeliveryError exceptions that are thrown when + This also swallows ZigbeeException exceptions that are thrown when devices are unreachable. """ try: res = await self.cluster.bind() self.debug("bound '%s' cluster: %s", self.cluster.ep_attribute, res[0]) - except (zigpy.exceptions.DeliveryError, asyncio.TimeoutError) as ex: + except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as ex: self.debug( "Failed to bind '%s' cluster: %s", self.cluster.ep_attribute, str(ex) ) @@ -149,7 +149,7 @@ class ZigbeeChannel(LogMixin): async def configure_reporting(self) -> None: """Configure attribute reporting for a cluster. - This also swallows DeliveryError exceptions that are thrown when + This also swallows ZigbeeException exceptions that are thrown when devices are unreachable. """ kwargs = {} @@ -173,7 +173,7 @@ class ZigbeeChannel(LogMixin): reportable_change, res, ) - except (zigpy.exceptions.DeliveryError, asyncio.TimeoutError) as ex: + except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as ex: self.debug( "failed to set reporting for '%s' attr on '%s' cluster: %s", attr_name, @@ -205,7 +205,6 @@ class ZigbeeChannel(LogMixin): @callback def cluster_command(self, tsn, command_id, args): """Handle commands received to this cluster.""" - pass @callback def attribute_updated(self, attrid, value): @@ -220,7 +219,6 @@ class ZigbeeChannel(LogMixin): @callback def zdo_command(self, *args, **kwargs): """Handle ZDO commands on this cluster.""" - pass @callback def zha_send_event(self, command: str, args: Union[int, dict]) -> None: @@ -236,7 +234,6 @@ class ZigbeeChannel(LogMixin): async def async_update(self): """Retrieve latest state from cluster.""" - pass async def get_attribute_value(self, attribute, from_cache=True): """Get the value for an attribute.""" @@ -266,16 +263,15 @@ class ZigbeeChannel(LogMixin): only_cache=from_cache, manufacturer=manufacturer, ) - results = {attribute: result.get(attribute) for attribute in attributes} - except (asyncio.TimeoutError, zigpy.exceptions.DeliveryError) as ex: + return result + except (asyncio.TimeoutError, zigpy.exceptions.ZigbeeException) as ex: self.debug( "failed to get attributes '%s' on '%s' cluster: %s", attributes, self.cluster.ep_attribute, str(ex), ) - results = {} - return results + return {} def log(self, level, msg, *args): """Log a message.""" @@ -322,12 +318,10 @@ class ZDOChannel(LogMixin): @callback def device_announce(self, zigpy_device): """Device announce handler.""" - pass @callback def permit_duration(self, duration): """Permit handler.""" - pass async def async_initialize(self, from_cache): """Initialize channel.""" diff --git a/homeassistant/components/zha/core/channels/closures.py b/homeassistant/components/zha/core/channels/closures.py index 2b6c06ba12a..826c99fbd3b 100644 --- a/homeassistant/components/zha/core/channels/closures.py +++ b/homeassistant/components/zha/core/channels/closures.py @@ -49,8 +49,6 @@ class DoorLockChannel(ZigbeeChannel): class Shade(ZigbeeChannel): """Shade channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(closures.WindowCovering.cluster_id) class WindowCovering(ZigbeeChannel): diff --git a/homeassistant/components/zha/core/channels/general.py b/homeassistant/components/zha/core/channels/general.py index f2afadbd657..05406b6939e 100644 --- a/homeassistant/components/zha/core/channels/general.py +++ b/homeassistant/components/zha/core/channels/general.py @@ -30,8 +30,6 @@ _LOGGER = logging.getLogger(__name__) class Alarms(ZigbeeChannel): """Alarms channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.AnalogInput.cluster_id) class AnalogInput(ZigbeeChannel): @@ -58,8 +56,6 @@ class AnalogValue(ZigbeeChannel): class ApplianceContorl(ZigbeeChannel): """Appliance Control channel.""" - pass - @registries.CHANNEL_ONLY_CLUSTERS.register(general.Basic.cluster_id) @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Basic.cluster_id) @@ -130,29 +126,21 @@ class BinaryValue(ZigbeeChannel): class Commissioning(ZigbeeChannel): """Commissioning channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.DeviceTemperature.cluster_id) class DeviceTemperature(ZigbeeChannel): """Device Temperature channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.GreenPowerProxy.cluster_id) class GreenPowerProxy(ZigbeeChannel): """Green Power Proxy channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Groups.cluster_id) class Groups(ZigbeeChannel): """Groups channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Identify.cluster_id) class Identify(ZigbeeChannel): @@ -171,8 +159,6 @@ class Identify(ZigbeeChannel): class LevelControlClientChannel(ClientChannel): """LevelControl client cluster.""" - pass - @registries.BINDABLE_CLUSTERS.register(general.LevelControl.cluster_id) @registries.LIGHT_CLUSTERS.register(general.LevelControl.cluster_id) @@ -244,8 +230,6 @@ class MultistateValue(ZigbeeChannel): class OnOffClientChannel(ClientChannel): """OnOff client channel.""" - pass - @registries.BINARY_SENSOR_CLUSTERS.register(general.OnOff.cluster_id) @registries.BINDABLE_CLUSTERS.register(general.OnOff.cluster_id) @@ -331,8 +315,6 @@ class OnOffChannel(ZigbeeChannel): class OnOffConfiguration(ZigbeeChannel): """OnOff Configuration channel.""" - pass - @registries.CLIENT_CHANNELS_REGISTRY.register(general.Ota.cluster_id) @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Ota.cluster_id) @@ -354,8 +336,6 @@ class Ota(ZigbeeChannel): class Partition(ZigbeeChannel): """Partition channel.""" - pass - @registries.CHANNEL_ONLY_CLUSTERS.register(general.PollControl.cluster_id) @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.PollControl.cluster_id) @@ -449,32 +429,22 @@ class PowerConfigurationChannel(ZigbeeChannel): class PowerProfile(ZigbeeChannel): """Power Profile channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.RSSILocation.cluster_id) class RSSILocation(ZigbeeChannel): """RSSI Location channel.""" - pass - @registries.CLIENT_CHANNELS_REGISTRY.register(general.Scenes.cluster_id) class ScenesClientChannel(ClientChannel): """Scenes channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Scenes.cluster_id) class Scenes(ZigbeeChannel): """Scenes channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Time.cluster_id) class Time(ZigbeeChannel): """Time channel.""" - - pass diff --git a/homeassistant/components/zha/core/channels/homeautomation.py b/homeassistant/components/zha/core/channels/homeautomation.py index 1df7cf117e2..b295a567b3d 100644 --- a/homeassistant/components/zha/core/channels/homeautomation.py +++ b/homeassistant/components/zha/core/channels/homeautomation.py @@ -21,8 +21,6 @@ _LOGGER = logging.getLogger(__name__) class ApplianceEventAlerts(ZigbeeChannel): """Appliance Event Alerts channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( homeautomation.ApplianceIdentification.cluster_id @@ -30,8 +28,6 @@ class ApplianceEventAlerts(ZigbeeChannel): class ApplianceIdentification(ZigbeeChannel): """Appliance Identification channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( homeautomation.ApplianceStatistics.cluster_id @@ -39,15 +35,11 @@ class ApplianceIdentification(ZigbeeChannel): class ApplianceStatistics(ZigbeeChannel): """Appliance Statistics channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(homeautomation.Diagnostic.cluster_id) class Diagnostic(ZigbeeChannel): """Diagnostic channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( homeautomation.ElectricalMeasurement.cluster_id @@ -89,27 +81,19 @@ class ElectricalMeasurementChannel(ZigbeeChannel): async def fetch_config(self, from_cache): """Fetch config from device and updates format specifier.""" - divisor = await self.get_attribute_value( - "ac_power_divisor", from_cache=from_cache + results = await self.get_attributes( + [ + "ac_power_divisor", + "power_divisor", + "ac_power_multiplier", + "power_multiplier", + ], + from_cache=from_cache, ) - if divisor is None: - divisor = await self.get_attribute_value( - "power_divisor", from_cache=from_cache - ) - if divisor is None: - divisor = 1 - self._divisor = divisor - - mult = await self.get_attribute_value( - "ac_power_multiplier", from_cache=from_cache + self._divisor = results.get("ac_power_divisor", results.get("power_divisor", 1)) + self._multiplier = results.get( + "ac_power_multiplier", results.get("power_multiplier", 1) ) - if mult is None: - mult = await self.get_attribute_value( - "power_multiplier", from_cache=from_cache - ) - if mult is None: - mult = 1 - self._multiplier = mult @property def divisor(self) -> Optional[int]: @@ -127,5 +111,3 @@ class ElectricalMeasurementChannel(ZigbeeChannel): ) class MeterIdentification(ZigbeeChannel): """Metering Identification channel.""" - - pass diff --git a/homeassistant/components/zha/core/channels/hvac.py b/homeassistant/components/zha/core/channels/hvac.py index 3c00e186ebb..3c58ff946b9 100644 --- a/homeassistant/components/zha/core/channels/hvac.py +++ b/homeassistant/components/zha/core/channels/hvac.py @@ -1,7 +1,7 @@ """HVAC channels module for Zigbee Home Automation.""" import logging -from zigpy.exceptions import DeliveryError +from zigpy.exceptions import ZigbeeException import zigpy.zcl.clusters.hvac as hvac from homeassistant.core import callback @@ -17,8 +17,6 @@ _LOGGER = logging.getLogger(__name__) class Dehumidification(ZigbeeChannel): """Dehumidification channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(hvac.Fan.cluster_id) class FanChannel(ZigbeeChannel): @@ -33,7 +31,7 @@ class FanChannel(ZigbeeChannel): try: await self.cluster.write_attributes({"fan_mode": value}) - except DeliveryError as ex: + except ZigbeeException as ex: self.error("Could not set speed: %s", ex) return @@ -67,18 +65,12 @@ class FanChannel(ZigbeeChannel): class Pump(ZigbeeChannel): """Pump channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(hvac.Thermostat.cluster_id) class Thermostat(ZigbeeChannel): """Thermostat channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(hvac.UserInterface.cluster_id) class UserInterface(ZigbeeChannel): """User interface (thermostat) channel.""" - - pass diff --git a/homeassistant/components/zha/core/channels/lighting.py b/homeassistant/components/zha/core/channels/lighting.py index 25f6c05d739..2b80a1092bb 100644 --- a/homeassistant/components/zha/core/channels/lighting.py +++ b/homeassistant/components/zha/core/channels/lighting.py @@ -14,15 +14,11 @@ _LOGGER = logging.getLogger(__name__) class Ballast(ZigbeeChannel): """Ballast channel.""" - pass - @registries.CLIENT_CHANNELS_REGISTRY.register(lighting.Color.cluster_id) class ColorClientChannel(ClientChannel): """Color client channel.""" - pass - @registries.BINDABLE_CLUSTERS.register(lighting.Color.cluster_id) @registries.LIGHT_CLUSTERS.register(lighting.Color.cluster_id) @@ -45,6 +41,18 @@ class ColorChannel(ZigbeeChannel): """Initialize ColorChannel.""" super().__init__(cluster, ch_pool) self._color_capabilities = None + self._min_mireds = 153 + self._max_mireds = 500 + + @property + def min_mireds(self): + """Return the coldest color_temp that this channel supports.""" + return self._min_mireds + + @property + def max_mireds(self): + """Return the warmest color_temp that this channel supports.""" + return self._max_mireds def get_color_capabilities(self): """Return the color capabilities.""" @@ -63,9 +71,15 @@ class ColorChannel(ZigbeeChannel): async def fetch_color_capabilities(self, from_cache): """Get the color configuration.""" - capabilities = await self.get_attribute_value( - "color_capabilities", from_cache=from_cache - ) + attributes = [ + "color_temp_physical_min", + "color_temp_physical_max", + "color_capabilities", + ] + results = await self.get_attributes(attributes, from_cache=from_cache) + capabilities = results.get("color_capabilities") + self._min_mireds = results.get("color_temp_physical_min", 153) + self._max_mireds = results.get("color_temp_physical_max", 500) if capabilities is None: # ZCL Version 4 devices don't support the color_capabilities diff --git a/homeassistant/components/zha/core/channels/lightlink.py b/homeassistant/components/zha/core/channels/lightlink.py index af0248c9713..25f3ebf9686 100644 --- a/homeassistant/components/zha/core/channels/lightlink.py +++ b/homeassistant/components/zha/core/channels/lightlink.py @@ -13,5 +13,3 @@ _LOGGER = logging.getLogger(__name__) @registries.ZIGBEE_CHANNEL_REGISTRY.register(lightlink.LightLink.cluster_id) class LightLink(ZigbeeChannel): """Lightlink channel.""" - - pass diff --git a/homeassistant/components/zha/core/channels/protocol.py b/homeassistant/components/zha/core/channels/protocol.py index db7488e9a7f..083e0f55841 100644 --- a/homeassistant/components/zha/core/channels/protocol.py +++ b/homeassistant/components/zha/core/channels/protocol.py @@ -13,99 +13,71 @@ _LOGGER = logging.getLogger(__name__) class AnalogInputExtended(ZigbeeChannel): """Analog Input Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.AnalogInputRegular.cluster_id) class AnalogInputRegular(ZigbeeChannel): """Analog Input Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.AnalogOutputExtended.cluster_id) class AnalogOutputExtended(ZigbeeChannel): """Analog Output Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.AnalogOutputRegular.cluster_id) class AnalogOutputRegular(ZigbeeChannel): """Analog Output Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.AnalogValueExtended.cluster_id) class AnalogValueExtended(ZigbeeChannel): """Analog Value Extended edition channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.AnalogValueRegular.cluster_id) class AnalogValueRegular(ZigbeeChannel): """Analog Value Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BacnetProtocolTunnel.cluster_id) class BacnetProtocolTunnel(ZigbeeChannel): """Bacnet Protocol Tunnel channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BinaryInputExtended.cluster_id) class BinaryInputExtended(ZigbeeChannel): """Binary Input Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BinaryInputRegular.cluster_id) class BinaryInputRegular(ZigbeeChannel): """Binary Input Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BinaryOutputExtended.cluster_id) class BinaryOutputExtended(ZigbeeChannel): """Binary Output Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BinaryOutputRegular.cluster_id) class BinaryOutputRegular(ZigbeeChannel): """Binary Output Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BinaryValueExtended.cluster_id) class BinaryValueExtended(ZigbeeChannel): """Binary Value Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.BinaryValueRegular.cluster_id) class BinaryValueRegular(ZigbeeChannel): """Binary Value Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.GenericTunnel.cluster_id) class GenericTunnel(ZigbeeChannel): """Generic Tunnel channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( protocol.MultistateInputExtended.cluster_id @@ -113,15 +85,11 @@ class GenericTunnel(ZigbeeChannel): class MultiStateInputExtended(ZigbeeChannel): """Multistate Input Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.MultistateInputRegular.cluster_id) class MultiStateInputRegular(ZigbeeChannel): """Multistate Input Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( protocol.MultistateOutputExtended.cluster_id @@ -129,8 +97,6 @@ class MultiStateInputRegular(ZigbeeChannel): class MultiStateOutputExtended(ZigbeeChannel): """Multistate Output Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( protocol.MultistateOutputRegular.cluster_id @@ -138,8 +104,6 @@ class MultiStateOutputExtended(ZigbeeChannel): class MultiStateOutputRegular(ZigbeeChannel): """Multistate Output Regular channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register( protocol.MultistateValueExtended.cluster_id @@ -147,11 +111,7 @@ class MultiStateOutputRegular(ZigbeeChannel): class MultiStateValueExtended(ZigbeeChannel): """Multistate Value Extended channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(protocol.MultistateValueRegular.cluster_id) class MultiStateValueRegular(ZigbeeChannel): """Multistate Value Regular channel.""" - - pass diff --git a/homeassistant/components/zha/core/channels/security.py b/homeassistant/components/zha/core/channels/security.py index 822ae8dd911..b2b6f74c0de 100644 --- a/homeassistant/components/zha/core/channels/security.py +++ b/homeassistant/components/zha/core/channels/security.py @@ -7,7 +7,7 @@ https://home-assistant.io/integrations/zha/ import asyncio import logging -from zigpy.exceptions import DeliveryError +from zigpy.exceptions import ZigbeeException import zigpy.zcl.clusters.security as security from homeassistant.core import callback @@ -30,8 +30,6 @@ _LOGGER = logging.getLogger(__name__) class IasAce(ZigbeeChannel): """IAS Ancillary Control Equipment channel.""" - pass - @registries.CHANNEL_ONLY_CLUSTERS.register(security.IasWd.cluster_id) @registries.ZIGBEE_CHANNEL_REGISTRY.register(security.IasWd.cluster_id) @@ -153,7 +151,7 @@ class IASZoneChannel(ZigbeeChannel): self._cluster.ep_attribute, res[0], ) - except DeliveryError as ex: + except ZigbeeException as ex: self.debug( "Failed to write cie_addr: %s to '%s' cluster: %s", str(ieee), diff --git a/homeassistant/components/zha/core/channels/smartenergy.py b/homeassistant/components/zha/core/channels/smartenergy.py index 86533662838..58a394e7c80 100644 --- a/homeassistant/components/zha/core/channels/smartenergy.py +++ b/homeassistant/components/zha/core/channels/smartenergy.py @@ -17,57 +17,41 @@ _LOGGER = logging.getLogger(__name__) class Calendar(ZigbeeChannel): """Calendar channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.DeviceManagement.cluster_id) class DeviceManagement(ZigbeeChannel): """Device Management channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.Drlc.cluster_id) class Drlc(ZigbeeChannel): """Demand Response and Load Control channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.EnergyManagement.cluster_id) class EnergyManagement(ZigbeeChannel): """Energy Management channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.Events.cluster_id) class Events(ZigbeeChannel): """Event channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.KeyEstablishment.cluster_id) class KeyEstablishment(ZigbeeChannel): """Key Establishment channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.MduPairing.cluster_id) class MduPairing(ZigbeeChannel): """Pairing channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.Messaging.cluster_id) class Messaging(ZigbeeChannel): """Messaging channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.Metering.cluster_id) class Metering(ZigbeeChannel): @@ -114,6 +98,8 @@ class Metering(ZigbeeChannel): @callback def attribute_updated(self, attrid, value): """Handle attribute update from Metering cluster.""" + if None in (self._multiplier, self._divisor, self._format_spec): + return super().attribute_updated(attrid, value * self._multiplier / self._divisor) @property @@ -123,25 +109,24 @@ class Metering(ZigbeeChannel): async def fetch_config(self, from_cache): """Fetch config from device and updates format specifier.""" - self._divisor = await self.get_attribute_value("divisor", from_cache=from_cache) - self._multiplier = await self.get_attribute_value( - "multiplier", from_cache=from_cache - ) - self._unit_enum = await self.get_attribute_value( - "unit_of_measure", from_cache=from_cache - ) - fmting = await self.get_attribute_value( - "demand_formatting", from_cache=from_cache + results = await self.get_attributes( + ["divisor", "multiplier", "unit_of_measure", "demand_formatting"], + from_cache=from_cache, ) - if self._divisor is None or self._divisor == 0: + self._divisor = results.get("divisor", 1) + if self._divisor == 0: self._divisor = 1 - if self._multiplier is None or self._multiplier == 0: + + self._multiplier = results.get("multiplier", 1) + if self._multiplier == 0: self._multiplier = 1 - if self._unit_enum is None: - self._unit_enum = 0x7F # unknown - if fmting is None: - fmting = 0xF9 # 1 digit to the right, 15 digits to the left + + self._unit_enum = results.get("unit_of_measure", 0x7F) # default to unknown + + fmting = results.get( + "demand_formatting", 0xF9 + ) # 1 digit to the right, 15 digits to the left r_digits = fmting & 0x07 # digits to the right of decimal point l_digits = (fmting >> 3) & 0x0F # digits to the left of decimal point @@ -163,18 +148,12 @@ class Metering(ZigbeeChannel): class Prepayment(ZigbeeChannel): """Prepayment channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.Price.cluster_id) class Price(ZigbeeChannel): """Price channel.""" - pass - @registries.ZIGBEE_CHANNEL_REGISTRY.register(smartenergy.Tunneling.cluster_id) class Tunneling(ZigbeeChannel): """Tunneling channel.""" - - pass diff --git a/homeassistant/components/zha/core/const.py b/homeassistant/components/zha/core/const.py index fe139a8239b..b181b848f04 100644 --- a/homeassistant/components/zha/core/const.py +++ b/homeassistant/components/zha/core/const.py @@ -22,8 +22,10 @@ ATTR_COMMAND = "command" ATTR_COMMAND_TYPE = "command_type" ATTR_DEVICE_IEEE = "device_ieee" ATTR_DEVICE_TYPE = "device_type" +ATTR_ENDPOINTS = "endpoints" ATTR_ENDPOINT_ID = "endpoint_id" ATTR_IEEE = "ieee" +ATTR_IN_CLUSTERS = "in_clusters" ATTR_LAST_SEEN = "last_seen" ATTR_LEVEL = "level" ATTR_LQI = "lqi" @@ -32,8 +34,11 @@ ATTR_MANUFACTURER_CODE = "manufacturer_code" ATTR_MEMBERS = "members" ATTR_MODEL = "model" ATTR_NAME = "name" +ATTR_NODE_DESCRIPTOR = "node_descriptor" ATTR_NWK = "nwk" +ATTR_OUT_CLUSTERS = "out_clusters" ATTR_POWER_SOURCE = "power_source" +ATTR_PROFILE_ID = "profile_id" ATTR_QUIRK_APPLIED = "quirk_applied" ATTR_QUIRK_CLASS = "quirk_class" ATTR_RSSI = "rssi" diff --git a/homeassistant/components/zha/core/device.py b/homeassistant/components/zha/core/device.py index 0215858721f..b4947d121e4 100644 --- a/homeassistant/components/zha/core/device.py +++ b/homeassistant/components/zha/core/device.py @@ -5,6 +5,7 @@ from enum import Enum import logging import random import time +from typing import Any, Dict from zigpy import types import zigpy.exceptions @@ -31,6 +32,7 @@ from .const import ( ATTR_COMMAND_TYPE, ATTR_DEVICE_TYPE, ATTR_ENDPOINT_ID, + ATTR_ENDPOINTS, ATTR_IEEE, ATTR_LAST_SEEN, ATTR_LQI, @@ -38,11 +40,13 @@ from .const import ( ATTR_MANUFACTURER_CODE, ATTR_MODEL, ATTR_NAME, + ATTR_NODE_DESCRIPTOR, ATTR_NWK, ATTR_POWER_SOURCE, ATTR_QUIRK_APPLIED, ATTR_QUIRK_CLASS, ATTR_RSSI, + ATTR_SIGNATURE, ATTR_VALUE, CLUSTER_COMMAND_SERVER, CLUSTER_COMMANDS_CLIENT, @@ -89,9 +93,7 @@ class ZHADevice(LogMixin): self._zigpy_device = zigpy_device self._zha_gateway = zha_gateway self._available = False - self._available_signal = "{}_{}_{}".format( - self.name, self.ieee, SIGNAL_AVAILABLE - ) + self._available_signal = f"{self.name}_{self.ieee}_{SIGNAL_AVAILABLE}" self._checkins_missed_count = 0 self.unsubs = [] self.unsubs.append( @@ -100,10 +102,11 @@ class ZHADevice(LogMixin): ) ) self.quirk_applied = isinstance(self._zigpy_device, zigpy.quirks.CustomDevice) - self.quirk_class = "{}.{}".format( - self._zigpy_device.__class__.__module__, - self._zigpy_device.__class__.__name__, + self.quirk_class = ( + f"{self._zigpy_device.__class__.__module__}." + f"{self._zigpy_device.__class__.__name__}" ) + if self.is_mains_powered: self._consider_unavailable_time = _CONSIDER_UNAVAILABLE_MAINS else: @@ -267,6 +270,14 @@ class ZHADevice(LogMixin): """Return True if sensor is available.""" return self._available + @property + def zigbee_signature(self) -> Dict[str, Any]: + """Get zigbee signature for this device.""" + return { + ATTR_NODE_DESCRIPTOR: str(self._zigpy_device.node_desc), + ATTR_ENDPOINTS: self._channels.zigbee_signature, + } + def set_available(self, available): """Set availability from restore and prevent signals.""" self._available = available @@ -340,9 +351,7 @@ class ZHADevice(LogMixin): if self._available != available and available: # Update the state the first time the device comes online async_dispatcher_send(self.hass, self._available_signal, False) - async_dispatcher_send( - self.hass, "{}_{}".format(self._available_signal, "entity"), available - ) + async_dispatcher_send(self.hass, f"{self._available_signal}_entity", available) self._available = available @property @@ -366,6 +375,7 @@ class ZHADevice(LogMixin): ATTR_LAST_SEEN: update_time, ATTR_AVAILABLE: self.available, ATTR_DEVICE_TYPE: self.device_type, + ATTR_SIGNATURE: self.zigbee_signature, } async def async_configure(self): @@ -501,7 +511,7 @@ class ZHADevice(LogMixin): response, ) return response - except zigpy.exceptions.DeliveryError as exc: + except zigpy.exceptions.ZigbeeException as exc: self.debug( "failed to set attribute: %s %s %s %s %s", f"{ATTR_VALUE}: {value}", @@ -553,7 +563,7 @@ class ZHADevice(LogMixin): """Remove this device from the provided zigbee group.""" try: await self._zigpy_device.remove_from_group(group_id) - except (zigpy.exceptions.DeliveryError, asyncio.TimeoutError) as ex: + except (zigpy.exceptions.ZigbeeException, asyncio.TimeoutError) as ex: self.debug( "Failed to remove device '%s' from group: 0x%04x ex: %s", self._zigpy_device.ieee, @@ -603,7 +613,7 @@ class ZHADevice(LogMixin): cluster_binding.id, group_id, ) - zdo.debug("processing " + op_msg, *op_params) + zdo.debug(f"processing {op_msg}", *op_params) tasks.append( ( zdo.request( @@ -620,9 +630,9 @@ class ZHADevice(LogMixin): res = await asyncio.gather(*(t[0] for t in tasks), return_exceptions=True) for outcome, log_msg in zip(res, tasks): if isinstance(outcome, Exception): - fmt = log_msg[1] + " failed: %s" + fmt = f"{log_msg[1]} failed: %s" else: - fmt = log_msg[1] + " completed: %s" + fmt = f"{log_msg[1]} completed: %s" zdo.debug(fmt, *(log_msg[2] + (outcome,))) def log(self, level, msg, *args): diff --git a/homeassistant/components/zha/entity.py b/homeassistant/components/zha/entity.py index d28bc622bbe..fe213f7920b 100644 --- a/homeassistant/components/zha/entity.py +++ b/homeassistant/components/zha/entity.py @@ -117,24 +117,11 @@ class BaseZhaEntity(LogMixin, entity.Entity): def async_set_state(self, attr_id: int, attr_name: str, value: Any) -> None: """Set the entity state.""" - async def async_added_to_hass(self) -> None: - """Run when about to be added to hass.""" - await super().async_added_to_hass() - self.remove_future = asyncio.Future() - await self.async_accept_signal( - None, - "{}_{}".format(SIGNAL_REMOVE, str(self.zha_device.ieee)), - self.async_remove, - signal_override=True, - ) - async def async_will_remove_from_hass(self) -> None: """Disconnect entity object when removed.""" for unsub in self._unsubs[:]: unsub() self._unsubs.remove(unsub) - self.zha_device.gateway.remove_entity_reference(self) - self.remove_future.set_result(True) async def async_accept_signal( self, channel: ChannelType, signal: str, func: CALLABLE_T, signal_override=False @@ -189,7 +176,7 @@ class ZhaEntity(BaseZhaEntity, RestoreEntity): await self.async_check_recently_seen() await self.async_accept_signal( None, - "{}_{}".format(self.zha_device.available_signal, "entity"), + f"{self.zha_device.available_signal}_entity", self.async_set_available, signal_override=True, ) @@ -293,4 +280,3 @@ class ZhaGroupEntity(BaseZhaEntity): async def async_update(self) -> None: """Update the state of the group entity.""" - pass diff --git a/homeassistant/components/zha/fan.py b/homeassistant/components/zha/fan.py index c3cd88b0d6d..c7a13a4f34f 100644 --- a/homeassistant/components/zha/fan.py +++ b/homeassistant/components/zha/fan.py @@ -3,7 +3,7 @@ import functools import logging from typing import List -from zigpy.exceptions import DeliveryError +from zigpy.exceptions import ZigbeeException import zigpy.zcl.clusters.hvac as hvac from homeassistant.components.fan import ( @@ -121,7 +121,6 @@ class BaseFan(FanEntity): @callback def async_set_state(self, attr_id, attr_name, value): """Handle state update from channel.""" - pass @STRICT_MATCH(channel_names=CHANNEL_FAN) @@ -178,7 +177,7 @@ class FanGroup(BaseFan, ZhaGroupEntity): """Set the speed of the fan.""" try: await self._fan_channel.write_attributes({"fan_mode": value}) - except DeliveryError as ex: + except ZigbeeException as ex: self.error("Could not set speed: %s", ex) return diff --git a/homeassistant/components/zha/light.py b/homeassistant/components/zha/light.py index c6ec5c2ccf9..b05e4b7bee0 100644 --- a/homeassistant/components/zha/light.py +++ b/homeassistant/components/zha/light.py @@ -108,7 +108,7 @@ class BaseLight(LogMixin, light.Light): self._off_brightness: Optional[int] = None self._hs_color: Optional[Tuple[float, float]] = None self._color_temp: Optional[int] = None - self._min_mireds: Optional[int] = 154 + self._min_mireds: Optional[int] = 153 self._max_mireds: Optional[int] = 500 self._white_value: Optional[int] = None self._effect_list: Optional[List[str]] = None @@ -138,6 +138,16 @@ class BaseLight(LogMixin, light.Light): """Return the brightness of this light.""" return self._brightness + @property + def min_mireds(self): + """Return the coldest color_temp that this light supports.""" + return self._min_mireds + + @property + def max_mireds(self): + """Return the warmest color_temp that this light supports.""" + return self._max_mireds + def set_level(self, value): """Set the brightness of this light between 0..254. @@ -316,6 +326,9 @@ class Light(BaseLight, ZhaEntity): self._level_channel = self.cluster_channels.get(CHANNEL_LEVEL) self._color_channel = self.cluster_channels.get(CHANNEL_COLOR) self._identify_channel = self.zha_device.channels.identify_ch + if self._color_channel: + self._min_mireds: Optional[int] = self._color_channel.min_mireds + self._max_mireds: Optional[int] = self._color_channel.max_mireds self._cancel_refresh_handle = None effect_list = [] @@ -501,7 +514,7 @@ class LightGroup(BaseLight, ZhaGroupEntity): self._color_temp = helpers.reduce_attribute(on_states, ATTR_COLOR_TEMP) self._min_mireds = helpers.reduce_attribute( - states, ATTR_MIN_MIREDS, default=154, reduce=min + states, ATTR_MIN_MIREDS, default=153, reduce=min ) self._max_mireds = helpers.reduce_attribute( states, ATTR_MAX_MIREDS, default=500, reduce=max diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index 193a3c12165..e49f4f1407a 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -7,11 +7,10 @@ "bellows-homeassistant==0.15.2", "zha-quirks==0.0.38", "zigpy-cc==0.3.1", - "zigpy-deconz==0.8.0", - "zigpy-homeassistant==0.18.2", + "zigpy-deconz==0.8.1", + "zigpy-homeassistant==0.19.0", "zigpy-xbee-homeassistant==0.11.0", "zigpy-zigate==0.5.1" ], - "dependencies": [], "codeowners": ["@dmulcahey", "@adminiuga"] } diff --git a/homeassistant/components/zha/sensor.py b/homeassistant/components/zha/sensor.py index 5e2e8bf4a0d..4544780b4f8 100644 --- a/homeassistant/components/zha/sensor.py +++ b/homeassistant/components/zha/sensor.py @@ -158,7 +158,6 @@ class AnalogInput(Sensor): """Sensor that displays analog input values.""" SENSOR_ATTR = "present_value" - pass @STRICT_MATCH(channel_names=CHANNEL_POWER_CONFIGURATION) diff --git a/homeassistant/components/zha/services.yaml b/homeassistant/components/zha/services.yaml index 3e38d6982f0..971321fbfd2 100644 --- a/homeassistant/components/zha/services.yaml +++ b/homeassistant/components/zha/services.yaml @@ -78,7 +78,7 @@ issue_zigbee_cluster_command: example: "server" args: description: args to pass to the command - example: '[arg1, arg2, argN]' + example: "[arg1, arg2, argN]" manufacturer: description: manufacturer code example: 0x00FC @@ -98,7 +98,7 @@ issue_zigbee_group_command: example: 0 args: description: args to pass to the command - example: '[arg1, arg2, argN]' + example: "[arg1, arg2, argN]" manufacturer: description: manufacturer code example: 0x00FC diff --git a/homeassistant/components/zha/strings.json b/homeassistant/components/zha/strings.json index a015ca30770..755ba7ae710 100644 --- a/homeassistant/components/zha/strings.json +++ b/homeassistant/components/zha/strings.json @@ -1,27 +1,18 @@ { "config": { - "title": "ZHA", "step": { "user": { "title": "ZHA", - "data": { - "radio_type": "Radio Type", - "usb_path": "USB Device Path" - } + "data": { "radio_type": "Radio Type", "usb_path": "USB Device Path" } } }, - "error": { - "cannot_connect": "Unable to connect to ZHA device." - }, + "error": { "cannot_connect": "Unable to connect to ZHA device." }, "abort": { "single_instance_allowed": "Only a single configuration of ZHA is allowed." } }, "device_automation": { - "action_type": { - "squawk": "Squawk", - "warn": "Warn" - }, + "action_type": { "squawk": "Squawk", "warn": "Warn" }, "trigger_type": { "remote_button_short_press": "\"{subtype}\" button pressed", "remote_button_short_release": "\"{subtype}\" button released", diff --git a/homeassistant/components/zha/translations/bg.json b/homeassistant/components/zha/translations/bg.json new file mode 100644 index 00000000000..ec7bad9997b --- /dev/null +++ b/homeassistant/components/zha/translations/bg.json @@ -0,0 +1,66 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 ZHA." + }, + "error": { + "cannot_connect": "\u041d\u0435\u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 ZHA \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "step": { + "user": { + "data": { + "radio_type": "\u0422\u0438\u043f \u0440\u0430\u0434\u0438\u043e", + "usb_path": "\u041f\u044a\u0442 \u0434\u043e USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "\u041a\u0432\u0430\u043a", + "warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435" + }, + "trigger_subtype": { + "both_buttons": "\u0418 \u0434\u0432\u0430\u0442\u0430 \u0431\u0443\u0442\u043e\u043d\u0430", + "button_1": "\u041f\u044a\u0440\u0432\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_2": "\u0412\u0442\u043e\u0440\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_3": "\u0422\u0440\u0435\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_4": "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_5": "\u041f\u0435\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", + "button_6": "\u0428\u0435\u0441\u0442\u0438 \u0431\u0443\u0442\u043e\u043d", + "close": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438", + "dim_down": "\u0417\u0430\u0442\u044a\u043c\u043d\u044f\u0432\u0430\u043d\u0435", + "dim_up": "\u041e\u0441\u0432\u0435\u0442\u044f\u0432\u0430\u043d\u0435", + "face_1": "\u0441 \u043b\u0438\u0446\u0435 1 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", + "face_2": "\u0441 \u043b\u0438\u0446\u0435 2 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", + "face_3": "\u0441 \u043b\u0438\u0446\u0435 3 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", + "face_4": "\u0441 \u043b\u0438\u0446\u0435 4 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", + "face_5": "\u0441 \u043b\u0438\u0446\u0435 5 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", + "face_6": "\u0441 \u043b\u0438\u0446\u0435 6 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u043e", + "face_any": "\u0421 \u043d\u044f\u043a\u043e\u0438/\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438 \u043b\u0438\u0446\u0435(\u0430) \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0438", + "left": "\u041b\u044f\u0432\u043e", + "open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d", + "right": "\u0414\u044f\u0441\u043d\u043e", + "turn_off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0438" + }, + "trigger_type": { + "device_dropped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0438\u0437\u0442\u044a\u0440\u0432\u0430\u043d\u043e", + "device_flipped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043e\u0431\u044a\u0440\u043d\u0430\u0442\u043e \"{subtype}\"", + "device_knocked": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043f\u043e\u0447\u0443\u043a\u0430\u043d\u043e \"{subtype}\"", + "device_rotated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0437\u0430\u0432\u044a\u0440\u0442\u044f\u043d\u043e \"{subtype}\"", + "device_shaken": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u0440\u0430\u0437\u043a\u043b\u0430\u0442\u0435\u043d\u043e", + "device_slid": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0433\u043e \u0435 \u043f\u043b\u044a\u0437\u043d\u0430\u0442\u043e \"{subtype}\"", + "device_tilted": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0435 \u043d\u0430\u043a\u043b\u043e\u043d\u0435\u043d\u043e", + "remote_button_double_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0434\u0432\u0443\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_button_long_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e", + "remote_button_long_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442 \u0441\u043b\u0435\u0434 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u043d\u0430\u0442\u0438\u0441\u043a\u0430\u043d\u0435", + "remote_button_quadruple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0447\u0435\u0442\u0438\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_button_quintuple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u043f\u0435\u0442\u043a\u0440\u0430\u0442\u043d\u043e", + "remote_button_short_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442", + "remote_button_short_release": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043e\u0442\u043f\u0443\u0441\u043d\u0430\u0442", + "remote_button_triple_press": "\"{subtype}\" \u0431\u0443\u0442\u043e\u043d\u044a\u0442 \u0431\u0435\u0448\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0430\u0442 \u0442\u0440\u0438\u043a\u0440\u0430\u0442\u043d\u043e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/ca.json b/homeassistant/components/zha/translations/ca.json new file mode 100644 index 00000000000..7102410aed4 --- /dev/null +++ b/homeassistant/components/zha/translations/ca.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 de ZHA." + }, + "error": { + "cannot_connect": "No s'ha pogut connectar amb el dispositiu ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Tipus de r\u00e0dio", + "usb_path": "Ruta del port USB al dispositiu" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk", + "warn": "Av\u00eds" + }, + "trigger_subtype": { + "both_buttons": "Ambd\u00f3s botons", + "button_1": "Primer bot\u00f3", + "button_2": "Segon bot\u00f3", + "button_3": "Tercer bot\u00f3", + "button_4": "Quart bot\u00f3", + "button_5": "Cinqu\u00e8 bot\u00f3", + "button_6": "Sis\u00e8 bot\u00f3", + "close": "Tanca", + "dim_down": "Atenua la brillantor", + "dim_up": "Augmenta la brillantor", + "face_1": "amb la cara 1 activada", + "face_2": "amb la cara 2 activada", + "face_3": "amb la cara 3 activada", + "face_4": "amb la cara 4 activada", + "face_5": "amb la cara 5 activada", + "face_6": "amb la cara 6 activada", + "face_any": "Amb qualsevol o alguna de les cares especificades activades.", + "left": "Esquerra", + "open": "Obert", + "right": "Dreta", + "turn_off": "Desactiva", + "turn_on": "Activa" + }, + "trigger_type": { + "device_dropped": "Dispositiu caigut", + "device_flipped": "Dispositiu voltejat a \"{subtype}\"", + "device_knocked": "Dispositiu colpejat a \"{subtype}\"", + "device_rotated": "Dispositiu rotat a \"{subtype}\"", + "device_shaken": "Dispositiu sacsejat", + "device_slid": "Dispositiu lliscat a \"{subtype}\"", + "device_tilted": "Dispositiu inclinat", + "remote_button_alt_double_press": "Bot\u00f3 \"{subtype}\" clicat dues vegades (mode alternatiu)", + "remote_button_alt_long_press": "Bot\u00f3 \"{subtype}\" premut cont\u00ednuament (mode alternatiu)", + "remote_button_alt_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut (mode alternatiu", + "remote_button_alt_quadruple_press": "Bot\u00f3 \"{subtype}\" clicat quatre vegades (mode alternatiu)", + "remote_button_alt_quintuple_press": "Bot\u00f3 \"{subtype}\" clicat cinc vegades (mode alternatiu)", + "remote_button_alt_short_press": "Bot\u00f3 \"{subtype}\" premut (mode alternatiu)", + "remote_button_alt_short_release": "Bot\u00f3 \"{subtype}\" alliberat (mode alternatiu)", + "remote_button_alt_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades (mode alternatiu)", + "remote_button_double_press": "Bot\u00f3 \"{subtype}\" clicat dues vegades", + "remote_button_long_press": "Bot\u00f3 \"{subtype}\" premut cont\u00ednuament", + "remote_button_long_release": "Bot\u00f3 \"{subtype}\" alliberat despr\u00e9s d'una estona premut", + "remote_button_quadruple_press": "Bot\u00f3 \"{subtype}\" clicat quatre vegades", + "remote_button_quintuple_press": "Bot\u00f3 \"{subtype}\" clicat cinc vegades", + "remote_button_short_press": "Bot\u00f3 \"{subtype}\" premut", + "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat", + "remote_button_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/.translations/cs.json b/homeassistant/components/zha/translations/cs.json similarity index 100% rename from homeassistant/components/zha/.translations/cs.json rename to homeassistant/components/zha/translations/cs.json diff --git a/homeassistant/components/zha/translations/da.json b/homeassistant/components/zha/translations/da.json new file mode 100644 index 00000000000..43477e1189e --- /dev/null +++ b/homeassistant/components/zha/translations/da.json @@ -0,0 +1,66 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af ZHA." + }, + "error": { + "cannot_connect": "Kunne ikke oprette forbindelse til ZHA-enhed." + }, + "step": { + "user": { + "data": { + "radio_type": "Radio-type", + "usb_path": "Sti til USB-enhed" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk", + "warn": "Advare" + }, + "trigger_subtype": { + "both_buttons": "Begge knapper", + "button_1": "F\u00f8rste knap", + "button_2": "Anden knap", + "button_3": "Tredje knap", + "button_4": "Fjerde knap", + "button_5": "Femte knap", + "button_6": "Sjette knap", + "close": "Luk", + "dim_down": "D\u00e6mp ned", + "dim_up": "D\u00e6mp op", + "face_1": "med ansigt 1 aktiveret", + "face_2": "med ansigt 2 aktiveret", + "face_3": "med ansigt 3 aktiveret", + "face_4": "med ansigt 4 aktiveret", + "face_5": "med ansigt 5 aktiveret", + "face_6": "med ansigt 6 aktiveret", + "face_any": "Med ethvert/specificeret ansigt(er) aktiveret", + "left": "Venstre", + "open": "\u00c5ben", + "right": "H\u00f8jre", + "turn_off": "Sluk", + "turn_on": "T\u00e6nd" + }, + "trigger_type": { + "device_dropped": "Enhed faldt", + "device_flipped": "Enheden blev vendt \"{subtype}\"", + "device_knocked": "Enhed banket med \"{subtype}\"", + "device_rotated": "Enhed roteret \"{subtype}\"", + "device_shaken": "Enhed rystet", + "device_slid": "Enheden gled \"{subtype}\"", + "device_tilted": "Enheden vippes", + "remote_button_double_press": "\"{subtype}\"-knappen er dobbeltklikket", + "remote_button_long_press": "\"{subtype}\"-knappen trykket p\u00e5 konstant", + "remote_button_long_release": "\"{subtype}\"-knappen frigivet efter langt tryk", + "remote_button_quadruple_press": "\"{subtype}\"-knappen firedobbelt-klikket", + "remote_button_quintuple_press": "\"{subtype}\"-knappen femdobbelt-klikket", + "remote_button_short_press": "\"{subtype}\"-knappen trykket p\u00e5", + "remote_button_short_release": "\"{subtype}\"-knappen frigivet", + "remote_button_triple_press": "\"{subtype}\"-knappen tredobbeltklikkes" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/de.json b/homeassistant/components/zha/translations/de.json new file mode 100644 index 00000000000..c5ef6071dd7 --- /dev/null +++ b/homeassistant/components/zha/translations/de.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Es ist nur eine einzige Konfiguration von ZHA zul\u00e4ssig." + }, + "error": { + "cannot_connect": "Kein Verbindung zu ZHA-Ger\u00e4t m\u00f6glich" + }, + "step": { + "user": { + "data": { + "radio_type": "Radio-Type", + "usb_path": "USB-Ger\u00e4te-Pfad" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Kreischen", + "warn": "Warnen" + }, + "trigger_subtype": { + "both_buttons": "Beide Tasten", + "button_1": "Erste Taste", + "button_2": "Zweite Taste", + "button_3": "Dritte Taste", + "button_4": "Vierte Taste", + "button_5": "F\u00fcnfte Taste", + "button_6": "Sechste Taste", + "close": "Schlie\u00dfen", + "dim_down": "Dimmer runter", + "dim_up": "Dimmer hoch", + "face_1": "mit Fl\u00e4che 1 aktiviert", + "face_2": "mit Fl\u00e4che 2 aktiviert", + "face_3": "mit Fl\u00e4che 3 aktiviert", + "face_4": "mit Fl\u00e4che 4 aktiviert", + "face_5": "mit Fl\u00e4che 5 aktiviert", + "face_6": "mit Fl\u00e4che 6 aktiviert", + "face_any": "Mit einer beliebigen/festgelegten Fl\u00e4che(n) aktiviert", + "left": "Links", + "open": "Offen", + "right": "Rechts", + "turn_off": "Ausschalten", + "turn_on": "Einschalten" + }, + "trigger_type": { + "device_dropped": "Ger\u00e4t ist gefallen", + "device_flipped": "Ger\u00e4t umgedreht \"{subtype}\"", + "device_knocked": "Ger\u00e4t klopfte \"{subtype}\"", + "device_rotated": "Ger\u00e4t wurde gedreht \"{subtype}\"", + "device_shaken": "Ger\u00e4t ersch\u00fcttert", + "device_slid": "Ger\u00e4t gerutscht \"{subtype}\"", + "device_tilted": "Ger\u00e4t gekippt", + "remote_button_alt_double_press": "\"{subtype}\" Taste doppelt geklickt (Alternativer Modus)", + "remote_button_alt_long_press": "\"{subtype}\" Taste kontinuierlich gedr\u00fcckt (Alternativer Modus)", + "remote_button_alt_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen (Alternativer Modus)", + "remote_button_alt_quadruple_press": "\"{subtype}\" Taste vierfach geklickt (Alternativer Modus)", + "remote_button_alt_quintuple_press": "\"{subtype}\" Taste f\u00fcnffach geklickt (Alternativer Modus)", + "remote_button_alt_short_press": "\"{subtype}\" Taste gedr\u00fcckt (Alternativer Modus)", + "remote_button_alt_short_release": "\"{subtype}\" Taste losgelassen (Alternativer Modus)", + "remote_button_alt_triple_press": "\"{subtype}\" Taste dreimal geklickt (Alternativer Modus)", + "remote_button_double_press": "\"{subtype}\" Taste doppelt angeklickt", + "remote_button_long_press": "\"{subtype}\" Taste kontinuierlich gedr\u00fcckt", + "remote_button_long_release": "\"{subtype}\" Taste nach langem Dr\u00fccken losgelassen", + "remote_button_quadruple_press": "\"{subtype}\" Taste vierfach geklickt", + "remote_button_quintuple_press": "\"{subtype}\" Taste f\u00fcnffach geklickt", + "remote_button_short_press": "\"{subtype}\" Taste gedr\u00fcckt", + "remote_button_short_release": "\"{subtype}\" Taste losgelassen", + "remote_button_triple_press": "\"{subtype}\" Taste dreimal geklickt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/en.json b/homeassistant/components/zha/translations/en.json new file mode 100644 index 00000000000..d8db817507d --- /dev/null +++ b/homeassistant/components/zha/translations/en.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Only a single configuration of ZHA is allowed." + }, + "error": { + "cannot_connect": "Unable to connect to ZHA device." + }, + "step": { + "user": { + "data": { + "radio_type": "Radio Type", + "usb_path": "USB Device Path" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk", + "warn": "Warn" + }, + "trigger_subtype": { + "both_buttons": "Both buttons", + "button_1": "First button", + "button_2": "Second button", + "button_3": "Third button", + "button_4": "Fourth button", + "button_5": "Fifth button", + "button_6": "Sixth button", + "close": "Close", + "dim_down": "Dim down", + "dim_up": "Dim up", + "face_1": "with face 1 activated", + "face_2": "with face 2 activated", + "face_3": "with face 3 activated", + "face_4": "with face 4 activated", + "face_5": "with face 5 activated", + "face_6": "with face 6 activated", + "face_any": "With any/specified face(s) activated", + "left": "Left", + "open": "Open", + "right": "Right", + "turn_off": "Turn off", + "turn_on": "Turn on" + }, + "trigger_type": { + "device_dropped": "Device dropped", + "device_flipped": "Device flipped \"{subtype}\"", + "device_knocked": "Device knocked \"{subtype}\"", + "device_rotated": "Device rotated \"{subtype}\"", + "device_shaken": "Device shaken", + "device_slid": "Device slid \"{subtype}\"", + "device_tilted": "Device tilted", + "remote_button_alt_double_press": "\"{subtype}\" button double clicked (Alternate mode)", + "remote_button_alt_long_press": "\"{subtype}\" button continuously pressed (Alternate mode)", + "remote_button_alt_long_release": "\"{subtype}\" button released after long press (Alternate mode)", + "remote_button_alt_quadruple_press": "\"{subtype}\" button quadruple clicked (Alternate mode)", + "remote_button_alt_quintuple_press": "\"{subtype}\" button quintuple clicked (Alternate mode)", + "remote_button_alt_short_press": "\"{subtype}\" button pressed (Alternate mode)", + "remote_button_alt_short_release": "\"{subtype}\" button released (Alternate mode)", + "remote_button_alt_triple_press": "\"{subtype}\" button triple clicked (Alternate mode)", + "remote_button_double_press": "\"{subtype}\" button double clicked", + "remote_button_long_press": "\"{subtype}\" button continuously pressed", + "remote_button_long_release": "\"{subtype}\" button released after long press", + "remote_button_quadruple_press": "\"{subtype}\" button quadruple clicked", + "remote_button_quintuple_press": "\"{subtype}\" button quintuple clicked", + "remote_button_short_press": "\"{subtype}\" button pressed", + "remote_button_short_release": "\"{subtype}\" button released", + "remote_button_triple_press": "\"{subtype}\" button triple clicked" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/es-419.json b/homeassistant/components/zha/translations/es-419.json new file mode 100644 index 00000000000..81803aa8cf4 --- /dev/null +++ b/homeassistant/components/zha/translations/es-419.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de ZHA." + }, + "error": { + "cannot_connect": "No se puede conectar al dispositivo ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Tipo de radio", + "usb_path": "Ruta del dispositivo USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "trigger_subtype": { + "left": "Izquierda", + "open": "Abrir", + "right": "Derecha", + "turn_off": "Apagar", + "turn_on": "Encender" + }, + "trigger_type": { + "device_dropped": "Dispositivo ca\u00eddo", + "device_flipped": "Dispositivo volteado \"{subtype}\"", + "device_knocked": "Dispositivo golpeado \"{subtype}\"", + "device_rotated": "Dispositivo girado \"{subtype}\"", + "device_shaken": "Dispositivo agitado", + "device_slid": "Dispositivo deslizado \"{subtype}\"", + "device_tilted": "Dispositivo inclinado" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/es.json b/homeassistant/components/zha/translations/es.json new file mode 100644 index 00000000000..19767b7662f --- /dev/null +++ b/homeassistant/components/zha/translations/es.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "S\u00f3lo se permite una \u00fanica configuraci\u00f3n de ZHA." + }, + "error": { + "cannot_connect": "No se puede conectar al dispositivo ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Tipo de radio", + "usb_path": "Ruta del dispositivo USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk", + "warn": "Advertir" + }, + "trigger_subtype": { + "both_buttons": "Ambos botones", + "button_1": "Primer bot\u00f3n", + "button_2": "Segundo bot\u00f3n", + "button_3": "Tercer bot\u00f3n", + "button_4": "Cuarto bot\u00f3n", + "button_5": "Quinto bot\u00f3n", + "button_6": "Sexto bot\u00f3n", + "close": "Cerrar", + "dim_down": "Bajar la intensidad", + "dim_up": "Subir la intensidad", + "face_1": "con la cara 1 activada", + "face_2": "con la cara 2 activada", + "face_3": "con la cara 3 activada", + "face_4": "con la cara 4 activada", + "face_5": "con la cara 5 activada", + "face_6": "con la cara 6 activada", + "face_any": "Con cualquier cara/especificada(s) activada(s)", + "left": "Izquierda", + "open": "Abrir", + "right": "Derecha", + "turn_off": "Apagar", + "turn_on": "Encender" + }, + "trigger_type": { + "device_dropped": "Dispositivo ca\u00eddo", + "device_flipped": "Dispositivo volteado \" {subtype} \"", + "device_knocked": "Dispositivo eliminado \" {subtype} \"", + "device_rotated": "Dispositivo girado \" {subtype} \"", + "device_shaken": "Dispositivo agitado", + "device_slid": "Dispositivo deslizado \" {subtype} \"", + "device_tilted": "Dispositivo inclinado", + "remote_button_alt_double_press": "Bot\u00f3n \"{subtype}\" doble pulsaci\u00f3n (modo Alternativo)", + "remote_button_alt_long_press": "Bot\u00f3n \"{subtype}\" pulsado continuamente (modo Alternativo)", + "remote_button_alt_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga (modo Alternativo)", + "remote_button_alt_quadruple_press": "Bot\u00f3n \"{subtype}\" cu\u00e1druple pulsaci\u00f3n (modo Alternativo)", + "remote_button_alt_quintuple_press": "Bot\u00f3n \"{subtype}\" qu\u00edntuple pulsaci\u00f3n (modo Alternativo)", + "remote_button_alt_short_press": "Bot\u00f3n \"{subtype}\" pulsado (modo Alternativo)", + "remote_button_alt_short_release": "Bot\u00f3n \"{subtype}\" soltado (modo Alternativo)", + "remote_button_alt_triple_press": "Bot\u00f3n \"{subtype}\" triple pulsaci\u00f3n (modo Alternativo)", + "remote_button_double_press": "Bot\u00f3n \"{subtype}\" doble pulsaci\u00f3n", + "remote_button_long_press": "Bot\u00f3n \"{subtype}\" pulsado continuamente", + "remote_button_long_release": "Bot\u00f3n \"{subtype}\" soltado despu\u00e9s de una pulsaci\u00f3n larga", + "remote_button_quadruple_press": "Bot\u00f3n \"{subtype}\" cu\u00e1druple pulsaci\u00f3n", + "remote_button_quintuple_press": "Bot\u00f3n \"{subtype}\" qu\u00edntuple pulsaci\u00f3n", + "remote_button_short_press": "Bot\u00f3n \"{subtype}\" pulsado", + "remote_button_short_release": "Bot\u00f3n \"{subtype}\" soltado", + "remote_button_triple_press": "Bot\u00f3n \"{subtype}\" triple pulsaci\u00f3n" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/fr.json b/homeassistant/components/zha/translations/fr.json new file mode 100644 index 00000000000..d3ca58546f1 --- /dev/null +++ b/homeassistant/components/zha/translations/fr.json @@ -0,0 +1,66 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Une seule configuration de ZHA est autoris\u00e9e." + }, + "error": { + "cannot_connect": "Impossible de se connecter au p\u00e9riph\u00e9rique ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Type de radio", + "usb_path": "Chemin du p\u00e9riph\u00e9rique USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Hurlement", + "warn": "Pr\u00e9venir" + }, + "trigger_subtype": { + "both_buttons": "Les deux boutons", + "button_1": "Premier bouton", + "button_2": "Deuxi\u00e8me bouton", + "button_3": "Troisi\u00e8me bouton", + "button_4": "Quatri\u00e8me bouton", + "button_5": "Cinqui\u00e8me bouton", + "button_6": "Sixi\u00e8me bouton", + "close": "Fermer", + "dim_down": "Assombrir", + "dim_up": "\u00c9claircir", + "face_1": "avec face 1 activ\u00e9e", + "face_2": "avec face 2 activ\u00e9e", + "face_3": "avec face 3 activ\u00e9e", + "face_4": "avec face 4 activ\u00e9e", + "face_5": "avec face 5 activ\u00e9e", + "face_6": "avec face 6 activ\u00e9e", + "face_any": "Avec n'importe quelle face / face sp\u00e9cifi\u00e9e(s) activ\u00e9e", + "left": "Gauche", + "open": "Ouvert", + "right": "Droite", + "turn_off": "\u00c9teindre", + "turn_on": "Allumer" + }, + "trigger_type": { + "device_dropped": "Appareil tomb\u00e9", + "device_flipped": "Appareil retourn\u00e9 \"{subtype}\"", + "device_knocked": "Appareil frapp\u00e9 \"{subtype}\"", + "device_rotated": "Appareil tourn\u00e9 \"{subtype}\"", + "device_shaken": "Appareil secou\u00e9", + "device_slid": "Appareil gliss\u00e9 \"{subtype}\"", + "device_tilted": "Dispositif inclin\u00e9", + "remote_button_double_press": "Double clic sur le bouton \" {subtype} \"", + "remote_button_long_press": "Bouton \"{subtype}\" appuy\u00e9 continuellement", + "remote_button_long_release": "Bouton \" {subtype} \" rel\u00e2ch\u00e9 apr\u00e8s un appui long", + "remote_button_quadruple_press": "bouton \" {subtype} \" quadruple clics", + "remote_button_quintuple_press": "bouton \" {subtype} \" quintuple clics", + "remote_button_short_press": "bouton \"{subtype}\" est press\u00e9", + "remote_button_short_release": "Bouton \" {subtype} \" est rel\u00e2ch\u00e9", + "remote_button_triple_press": "Bouton \"{subtype}\" \u00e0 trois clics" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/hu.json b/homeassistant/components/zha/translations/hu.json new file mode 100644 index 00000000000..0f1d3985923 --- /dev/null +++ b/homeassistant/components/zha/translations/hu.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Csak egyetlen ZHA konfigur\u00e1ci\u00f3 megengedett." + }, + "error": { + "cannot_connect": "Nem lehet csatlakozni a ZHA eszk\u00f6zh\u00f6z." + }, + "step": { + "user": { + "data": { + "radio_type": "R\u00e1di\u00f3 t\u00edpusa", + "usb_path": "USB eszk\u00f6z el\u00e9r\u00e9si \u00fat" + }, + "title": "ZHA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/it.json b/homeassistant/components/zha/translations/it.json new file mode 100644 index 00000000000..05d429701f0 --- /dev/null +++ b/homeassistant/components/zha/translations/it.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u00c8 consentita solo una singola configurazione di ZHA." + }, + "error": { + "cannot_connect": "Impossibile connettersi al dispositivo ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Tipo di Radio", + "usb_path": "Percorso del dispositivo USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Strillare", + "warn": "Avvertire" + }, + "trigger_subtype": { + "both_buttons": "Entrambi i pulsanti", + "button_1": "Primo pulsante", + "button_2": "Secondo pulsante", + "button_3": "Terzo pulsante", + "button_4": "Quarto pulsante", + "button_5": "Quinto pulsante", + "button_6": "Sesto pulsante", + "close": "Chiudere", + "dim_down": "Diminuire luminosit\u00e0", + "dim_up": "Aumentare luminosit\u00e0", + "face_1": "con faccia 1 attivata", + "face_2": "con faccia 2 attivata", + "face_3": "con faccia 3 attivata", + "face_4": "con faccia 4 attivata", + "face_5": "con faccia 5 attivata", + "face_6": "con faccia 6 attivata", + "face_any": "Con una o pi\u00f9 facce specificate attivate", + "left": "Sinistra", + "open": "Aperto", + "right": "Destra", + "turn_off": "Spento", + "turn_on": "Acceso" + }, + "trigger_type": { + "device_dropped": "Dispositivo caduto", + "device_flipped": "Dispositivo capovolto \" {subtype} \"", + "device_knocked": "Dispositivo bussato \" {subtype} \"", + "device_rotated": "Dispositivo ruotato \" {subtype} \"", + "device_shaken": "Dispositivo in vibrazione", + "device_slid": "Dispositivo scivolato \"{sottotipo}\"", + "device_tilted": "Dispositivo inclinato", + "remote_button_alt_double_press": "Pulsante \"{subtype}\" cliccato due volte (modalit\u00e0 Alternata)", + "remote_button_alt_long_press": "Pulsante \"{subtype}\" premuto continuamente (modalit\u00e0 Alternata)", + "remote_button_alt_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione (modalit\u00e0 Alternata)", + "remote_button_alt_quadruple_press": "Pulsante \"{subtype}\" cliccato quattro volte (modalit\u00e0 Alternata)", + "remote_button_alt_quintuple_press": "Pulsante \"{subtype}\" cliccato cinque volte (modalit\u00e0 Alternata)", + "remote_button_alt_short_press": "Pulsante \"{subtype}\" premuto (modalit\u00e0 Alternata)", + "remote_button_alt_short_release": "Pulsante \"{subtype}\" rilasciato (modalit\u00e0 Alternata)", + "remote_button_alt_triple_press": "Pulsante \"{subtype}\" cliccato tre volte (modalit\u00e0 Alternata)", + "remote_button_double_press": "Pulsante \"{subtype}\" cliccato due volte", + "remote_button_long_press": "Pulsante \"{subtype}\" premuto continuamente", + "remote_button_long_release": "Pulsante \"{subtype}\" rilasciato dopo una lunga pressione", + "remote_button_quadruple_press": "Pulsante \"{subtype}\" cliccato quattro volte", + "remote_button_quintuple_press": "Pulsante \"{subtype}\" cliccato cinque volte", + "remote_button_short_press": "Pulsante \"{subtype}\" premuto", + "remote_button_short_release": "Pulsante \"{subtype}\" rilasciato", + "remote_button_triple_press": "Pulsante \"{subtype}\" cliccato tre volte" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/ko.json b/homeassistant/components/zha/translations/ko.json new file mode 100644 index 00000000000..99438e10a84 --- /dev/null +++ b/homeassistant/components/zha/translations/ko.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "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." + }, + "step": { + "user": { + "data": { + "radio_type": "\ubb34\uc120 \uc720\ud615", + "usb_path": "USB \uc7a5\uce58 \uacbd\ub85c" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "\ube44\uc0c1", + "warn": "\uacbd\uace0" + }, + "trigger_subtype": { + "both_buttons": "\ub450 \uac1c", + "button_1": "\uccab \ubc88\uc9f8", + "button_2": "\ub450 \ubc88\uc9f8", + "button_3": "\uc138 \ubc88\uc9f8", + "button_4": "\ub124 \ubc88\uc9f8", + "button_5": "\ub2e4\uc12f \ubc88\uc9f8", + "button_6": "\uc5ec\uc12f \ubc88\uc9f8", + "close": "\ub2eb\uae30", + "dim_down": "\uc5b4\ub461\uac8c \ud558\uae30", + "dim_up": "\ubc1d\uac8c \ud558\uae30", + "face_1": "\uba74 1\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "face_2": "\uba74 2\ub97c \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "face_3": "\uba74 3\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "face_4": "\uba74 4\ub97c \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "face_5": "\uba74 5\ub97c \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "face_6": "\uba74 6\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "face_any": "\uc784\uc758\uc758 \uba74 \ub610\ub294 \ud2b9\uc815 \uba74\uc744 \ud65c\uc131\ud654 \ud55c \ucc44\ub85c", + "left": "\uc67c\ucabd", + "open": "\uc5f4\uae30", + "right": "\uc624\ub978\ucabd", + "turn_off": "\ub044\uae30", + "turn_on": "\ucf1c\uae30" + }, + "trigger_type": { + "device_dropped": "\uae30\uae30\uac00 \ub5a8\uc5b4\uc84c\uc744 \ub54c", + "device_flipped": "\"{subtype}\" \uae30\uae30\uac00 \ub4a4\uc9d1\uc5b4\uc9c8 \ub54c", + "device_knocked": "\"{subtype}\" \uae30\uae30\uac00 \ub450\ub4dc\ub824\uc9c8 \ub54c", + "device_rotated": "\"{subtype}\" \uae30\uae30\uac00 \ud68c\uc804\ub420 \ub54c", + "device_shaken": "\uae30\uae30\uac00 \ud754\ub4e4\ub9b4 \ub54c", + "device_slid": "\"{subtype}\" \uae30\uae30\uac00 \ubbf8\ub044\ub7ec\uc9c8 \ub54c", + "device_tilted": "\uae30\uae30\uac00 \uae30\uc6b8\uc5b4\uc9c8 \ub54c", + "remote_button_alt_double_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_alt_long_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_alt_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c (\ub300\uccb4\ubaa8\ub4dc)", + "remote_button_alt_quadruple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_alt_quintuple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_alt_short_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_alt_short_release": "\"{subtype}\" \ubc84\ud2bc\uc5d0\uc11c \uc190\uc744 \ub5c4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_alt_triple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c (\ub300\uccb4 \ubaa8\ub4dc)", + "remote_button_double_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub450 \ubc88 \ub20c\ub9b4 \ub54c", + "remote_button_long_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uacc4\uc18d \ub20c\ub824\uc9c8 \ub54c", + "remote_button_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", + "remote_button_quadruple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub124 \ubc88 \ub20c\ub9b4 \ub54c", + "remote_button_quintuple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub2e4\uc12f \ubc88 \ub20c\ub9b4 \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_triple_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \uc138 \ubc88 \ub20c\ub9b4 \ub54c" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/lb.json b/homeassistant/components/zha/translations/lb.json new file mode 100644 index 00000000000..3c84a7e6d5d --- /dev/null +++ b/homeassistant/components/zha/translations/lb.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun ZHA ass erlaabt." + }, + "error": { + "cannot_connect": "Keng Verbindung mam ZHA Apparat m\u00e9iglech." + }, + "step": { + "user": { + "data": { + "radio_type": "Typ vun Radio", + "usb_path": "Pad zum USB Apparat" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Mellen", + "warn": "Warnen" + }, + "trigger_subtype": { + "both_buttons": "B\u00e9id Kn\u00e4ppchen", + "button_1": "\u00c9ischte Kn\u00e4ppchen", + "button_2": "Zweete Kn\u00e4ppchen", + "button_3": "Dr\u00ebtte Kn\u00e4ppchen", + "button_4": "V\u00e9ierte Kn\u00e4ppchen", + "button_5": "F\u00ebnnefte Kn\u00e4ppchen", + "button_6": "Sechste Kn\u00e4ppchen", + "close": "Zoumaachen", + "dim_down": "Verd\u00e4ischteren", + "dim_up": "Erhellen", + "face_1": "mat S\u00e4it 1 aktiv\u00e9iert", + "face_2": "mat S\u00e4it 2 aktiv\u00e9iert", + "face_3": "mat S\u00e4it 3 aktiv\u00e9iert", + "face_4": "mat S\u00e4it 4 aktiv\u00e9iert", + "face_5": "mat S\u00e4it 5 aktiv\u00e9iert", + "face_6": "mat S\u00e4it 6 aktiv\u00e9iert", + "face_any": "Mat iergendenger/spezifiz\u00e9ierter S\u00e4it(en) aktiv\u00e9iert", + "left": "L\u00e9nks", + "open": "Op", + "right": "Riets", + "turn_off": "Ausschalten", + "turn_on": "Uschalten" + }, + "trigger_type": { + "device_dropped": "Apparat gefall", + "device_flipped": "Apparat \u00ebmgedr\u00e9int \"{subtype}\"", + "device_knocked": "Apparat geklappt \"{subtype}\"", + "device_rotated": "Apparat gedr\u00e9int \"{subtype}\"", + "device_shaken": "Apparat ger\u00ebselt", + "device_slid": "Apparat gerutscht \"{subtype}\"", + "device_tilted": "Apparat ass gekippt", + "remote_button_alt_double_press": "\"{subtype}\" Kn\u00e4ppche zwee mol gedr\u00e9ckt (Alternative Modus)", + "remote_button_alt_long_press": "\"{subtype}\" Kn\u00e4ppche permanent gedr\u00e9ckt (Alternative Modus)", + "remote_button_alt_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss (Alternative Modus)", + "remote_button_alt_quadruple_press": "\"{subtype}\" Kn\u00e4ppche v\u00e9ier mol gedr\u00e9ckt (Alternative Modus)", + "remote_button_alt_quintuple_press": "\"{subtype}\" Kn\u00e4ppche f\u00ebnnef mol gedr\u00e9ckt (Alternative Modus)", + "remote_button_alt_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt (Alternative Modus)", + "remote_button_alt_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss (Alternative Modus)", + "remote_button_alt_triple_press": "\"{subtype}\" Kn\u00e4ppche dr\u00e4imol gedr\u00e9ckt (Alternative Modus)", + "remote_button_double_press": "\"{subtype}\" Kn\u00e4ppche zwee mol gedr\u00e9ckt", + "remote_button_long_press": "\"{subtype}\" Kn\u00e4ppche permanent gedr\u00e9ckt", + "remote_button_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss", + "remote_button_quadruple_press": "\"{subtype}\" Kn\u00e4ppche v\u00e9ier mol gedr\u00e9ckt", + "remote_button_quintuple_press": "\"{subtype}\" Kn\u00e4ppche f\u00ebnnef mol gedr\u00e9ckt", + "remote_button_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt", + "remote_button_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss", + "remote_button_triple_press": "\"{subtype}\" Kn\u00e4ppche dr\u00e4imol gedr\u00e9ckt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/nl.json b/homeassistant/components/zha/translations/nl.json new file mode 100644 index 00000000000..f3eb4009f02 --- /dev/null +++ b/homeassistant/components/zha/translations/nl.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Slechts \u00e9\u00e9n configuratie van ZHA is toegestaan." + }, + "error": { + "cannot_connect": "Kan geen verbinding maken met ZHA apparaat." + }, + "step": { + "user": { + "data": { + "radio_type": "Radio Type", + "usb_path": "USB-apparaatpad" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Schreeuw", + "warn": "Waarschuwen" + }, + "trigger_subtype": { + "both_buttons": "Beide knoppen", + "button_1": "Eerste knop", + "button_2": "Tweede knop", + "button_3": "Derde knop", + "button_4": "Vierde knop", + "button_5": "Vijfde knop", + "button_6": "Zesde knop", + "close": "Sluiten", + "dim_down": "Dim omlaag", + "dim_up": "Dim omhoog", + "face_1": "met gezicht 1 geactiveerd", + "face_2": "met gezicht 2 geactiveerd", + "face_3": "met gezicht 3 geactiveerd", + "face_4": "met gezicht 4 geactiveerd", + "face_5": "met gezicht 5 geactiveerd", + "face_6": "met gezicht 6 geactiveerd", + "face_any": "Met elk/opgegeven gezicht (en) geactiveerd", + "left": "Links", + "open": "Open", + "right": "Rechts", + "turn_off": "Uitschakelen", + "turn_on": "Inschakelen" + }, + "trigger_type": { + "device_dropped": "Apparaat gevallen", + "device_flipped": "Apparaat omgedraaid \"{subtype}\"", + "device_knocked": "Apparaat klopte \"{subtype}\"", + "device_rotated": "Apparaat gedraaid \" {subtype} \"", + "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", + "remote_button_quadruple_press": "\" {subtype} \" knop viervoudig aangeklikt", + "remote_button_quintuple_press": "\" {subtype} \" knop vijf keer aangeklikt", + "remote_button_short_press": "\" {subtype} \" knop ingedrukt", + "remote_button_short_release": "\"{subtype}\" knop losgelaten", + "remote_button_triple_press": "\" {subtype} \" knop driemaal geklikt" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/nn.json b/homeassistant/components/zha/translations/nn.json new file mode 100644 index 00000000000..2e607435b7e --- /dev/null +++ b/homeassistant/components/zha/translations/nn.json @@ -0,0 +1,14 @@ +{ + "config": { + "step": { + "user": { + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/no.json b/homeassistant/components/zha/translations/no.json new file mode 100644 index 00000000000..c36bd66304b --- /dev/null +++ b/homeassistant/components/zha/translations/no.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Kun en konfigurasjon av ZHA er tillatt." + }, + "error": { + "cannot_connect": "Kan ikke koble til ZHA-enhet." + }, + "step": { + "user": { + "data": { + "radio_type": "Radio type", + "usb_path": "USB enhetsbane" + }, + "title": "" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Varsle", + "warn": "Advar" + }, + "trigger_subtype": { + "both_buttons": "Begge knapper", + "button_1": "F\u00f8rste knapp", + "button_2": "Andre knapp", + "button_3": "Tredje knapp", + "button_4": "Fjerde knapp", + "button_5": "Femte knapp", + "button_6": "Sjette knapp", + "close": "Lukk", + "dim_down": "Dimm ned", + "dim_up": "Dimm opp", + "face_1": "med ansikt 1 aktivert", + "face_2": "med ansikt 2 aktivert", + "face_3": "med ansikt 3 aktivert", + "face_4": "med ansikt 4 aktivert", + "face_5": "med ansikt 5 aktivert", + "face_6": "med ansikt 6 aktivert", + "face_any": "Med alle/angitte ansikt(er) aktivert", + "left": "Venstre", + "open": "\u00c5pen", + "right": "H\u00f8yre", + "turn_off": "Skru av", + "turn_on": "Sl\u00e5 p\u00e5" + }, + "trigger_type": { + "device_dropped": "Enheten ble sluppet", + "device_flipped": "Enheten snudd \"{subtype}\"", + "device_knocked": "Enheten sl\u00e5tt \"{subtype}\"", + "device_rotated": "Enheten roterte \"{subtype}\"", + "device_shaken": "Enhet er ristet", + "device_slid": "Enheten skled \"{subtype}\"", + "device_tilted": "Enheten skr\u00e5stilt", + "remote_button_alt_double_press": "\" {subtype} \" -knapp dobbeltklikket (alternativ modus)", + "remote_button_alt_long_press": "\" {subtype} \" -knappen trykkes kontinuerlig (alternativ modus)", + "remote_button_alt_long_release": "\" {subtype} \" -knapp sluppet etter langt trykk (Alternativ modus)", + "remote_button_alt_quadruple_press": "\"{subtype}\" knapp firedoblet klikket (alternativ modus)", + "remote_button_alt_quintuple_press": "\"{subtype}\" knapp femdobblet klikket (alternativ modus)", + "remote_button_alt_short_press": "\" {subtype} \" -knappen trykket p\u00e5 (alternativ modus)", + "remote_button_alt_short_release": "\" {subtype} \" -knapp utgitt (alternativ modus)", + "remote_button_alt_triple_press": "\" {subtype} \" -knapp tredobbeltklikket (alternativ modus)", + "remote_button_double_press": "\"{subtype}\"-knappen ble dobbeltklikket", + "remote_button_long_press": "\"{subtype}\"-knappen ble holdt inne", + "remote_button_long_release": "\"{subtype}\"-knappen sluppet etter langt trykk", + "remote_button_quadruple_press": "\"{subtype}\"-knappen ble trykket fire ganger", + "remote_button_quintuple_press": "\"{subtype}\"-knappen ble trykket fem ganger", + "remote_button_short_press": "\"{subtype}\"-knappen ble trykket", + "remote_button_short_release": "\"{subtype}\"-knappen sluppet", + "remote_button_triple_press": "\"{subtype}\"-knappen ble trippelklikket" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/pl.json b/homeassistant/components/zha/translations/pl.json new file mode 100644 index 00000000000..164d1b1a730 --- /dev/null +++ b/homeassistant/components/zha/translations/pl.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja ZHA." + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z urz\u0105dzeniem ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Typ radia", + "usb_path": "\u015acie\u017cka urz\u0105dzenia USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "squawk", + "warn": "ostrze\u017cenie" + }, + "trigger_subtype": { + "both_buttons": "oba przyciski", + "button_1": "pierwszy przycisk", + "button_2": "drugi przycisk", + "button_3": "trzeci przycisk", + "button_4": "czwarty przycisk", + "button_5": "pi\u0105ty przycisk", + "button_6": "sz\u00f3sty przycisk", + "close": "nast\u0105pi zamkni\u0119cie", + "dim_down": "nast\u0105pi zmniejszenie jasno\u015bci", + "dim_up": "nast\u0105pi zwi\u0119kszenie jasno\u015bci", + "face_1": "z aktywowan\u0105 twarz\u0105 1", + "face_2": "z aktywowan\u0105 twarz\u0105 2", + "face_3": "z aktywowan\u0105 twarz\u0105 3", + "face_4": "z aktywowan\u0105 twarz\u0105 4", + "face_5": "z aktywowan\u0105 twarz\u0105 5", + "face_6": "z aktywowan\u0105 twarz\u0105 6", + "face_any": "z dowoln\u0105 twarz\u0105 aktywowan\u0105", + "left": "w lewo", + "open": "otwarcie", + "right": "w prawo", + "turn_off": "nast\u0105pi wy\u0142\u0105czenie", + "turn_on": "nast\u0105pi w\u0142\u0105czenie" + }, + "trigger_type": { + "device_dropped": "nast\u0105pi upadek urz\u0105dzenia", + "device_flipped": "nast\u0105pi odwr\u00f3cenie urz\u0105dzenia \"{subtype}\"", + "device_knocked": "nast\u0105pi pukni\u0119cie w urz\u0105dzenie \"{subtype}\"", + "device_rotated": "nast\u0105pi obr\u00f3cenie urz\u0105dzenia \"{subtype}\"", + "device_shaken": "nast\u0105pi potrz\u0105\u015bni\u0119cie urz\u0105dzeniem", + "device_slid": "nast\u0105pi przesuni\u0119cie urz\u0105dzenia \"{subtype}\"", + "device_tilted": "nast\u0105pi przechylenie urz\u0105dzenia", + "remote_button_alt_double_press": "\"{subtype}\" dwukrotnie naci\u015bni\u0119ty (tryb alternatywny)", + "remote_button_alt_long_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y (tryb alternatywny)", + "remote_button_alt_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu (tryb alternatywny)", + "remote_button_alt_quadruple_press": "\"{subtype}\" czterokrotnie naci\u015bni\u0119ty (tryb alternatywny)", + "remote_button_alt_quintuple_press": "\"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty (tryb alternatywny)", + "remote_button_alt_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty (tryb alternatywny)", + "remote_button_alt_short_release": "\"{subtype}\" zostanie zwolniony (tryb alternatywny)", + "remote_button_alt_triple_press": "\"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty (tryb alternatywny)", + "remote_button_double_press": "\"{subtype}\" zostanie podw\u00f3jnie naci\u015bni\u0119ty", + "remote_button_long_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty w spos\u00f3b ci\u0105g\u0142y", + "remote_button_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", + "remote_button_quadruple_press": "\"{subtype}\" czterokrotnie naci\u015bni\u0119ty", + "remote_button_quintuple_press": "\"{subtype}\" zostanie pi\u0119ciokrotnie naci\u015bni\u0119ty", + "remote_button_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty", + "remote_button_short_release": "\"{subtype}\" zostanie zwolniony", + "remote_button_triple_press": "\"{subtype}\" zostanie trzykrotnie naci\u015bni\u0119ty" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/pt-BR.json b/homeassistant/components/zha/translations/pt-BR.json new file mode 100644 index 00000000000..60d9f681be0 --- /dev/null +++ b/homeassistant/components/zha/translations/pt-BR.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do ZHA \u00e9 permitida." + }, + "error": { + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao dispositivo ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Tipo de r\u00e1dio", + "usb_path": "Caminho do Dispositivo USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk", + "warn": "Aviso" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/pt.json b/homeassistant/components/zha/translations/pt.json new file mode 100644 index 00000000000..2c810af8eae --- /dev/null +++ b/homeassistant/components/zha/translations/pt.json @@ -0,0 +1,37 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Apenas uma configura\u00e7\u00e3o do ZHA \u00e9 permitida." + }, + "error": { + "cannot_connect": "N\u00e3o \u00e9 poss\u00edvel conectar-se ao dispositivo ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Tipo de r\u00e1dio", + "usb_path": "Caminho do Dispositivo USB" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "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" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/ru.json b/homeassistant/components/zha/translations/ru.json new file mode 100644 index 00000000000..d05dff4e478 --- /dev/null +++ b/homeassistant/components/zha/translations/ru.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." + }, + "error": { + "cannot_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": { + "data": { + "radio_type": "\u0422\u0438\u043f \u0420\u0430\u0434\u0438\u043e", + "usb_path": "\u041f\u0443\u0442\u044c \u043a USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + }, + "title": "Zigbee Home Automation" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0434\u0435\u0440", + "warn": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435" + }, + "trigger_subtype": { + "both_buttons": "\u041e\u0431\u0435 \u043a\u043d\u043e\u043f\u043a\u0438", + "button_1": "\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_2": "\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_3": "\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_4": "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_5": "\u041f\u044f\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "button_6": "\u0428\u0435\u0441\u0442\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430", + "close": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "dim_down": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f", + "dim_up": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f", + "face_1": "\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", + "face_2": "\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", + "face_3": "\u043d\u0430 \u0442\u0440\u0435\u0442\u0435\u0439 \u0433\u0440\u0430\u043d\u0438", + "face_4": "\u043d\u0430 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", + "face_5": "\u043d\u0430 \u043f\u044f\u0442\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", + "face_6": "\u043d\u0430 \u0448\u0435\u0441\u0442\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", + "face_any": "\u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0433\u0440\u0430\u043d\u0438", + "left": "\u043d\u0430\u043b\u0435\u0432\u043e", + "open": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f", + "right": "\u043d\u0430\u043f\u0440\u0430\u0432\u043e", + "turn_off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f", + "turn_on": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f" + }, + "trigger_type": { + "device_dropped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u043b\u0438", + "device_flipped": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 {subtype}", + "device_knocked": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u043b\u0438 {subtype}", + "device_rotated": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b\u0438 {subtype}", + "device_shaken": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u0440\u044f\u0441\u043b\u0438", + "device_slid": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438 {subtype}", + "device_tilted": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u043a\u043b\u043e\u043d\u0438\u043b\u0438", + "remote_button_alt_double_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_long_press": "{subtype} \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_long_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_quadruple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_quintuple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_short_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_short_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_alt_triple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 (\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c)", + "remote_button_double_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430", + "remote_button_long_press": "{subtype} \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u0430", + "remote_button_long_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f", + "remote_button_quadruple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430", + "remote_button_quintuple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u043f\u044f\u0442\u044c \u0440\u0430\u0437", + "remote_button_short_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430", + "remote_button_short_release": "{subtype} \u043e\u0442\u043f\u0443\u0449\u0435\u043d\u0430", + "remote_button_triple_press": "{subtype} \u043d\u0430\u0436\u0430\u0442\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/sl.json b/homeassistant/components/zha/translations/sl.json new file mode 100644 index 00000000000..bfaf0757ea4 --- /dev/null +++ b/homeassistant/components/zha/translations/sl.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dovoljena je samo ena konfiguracija ZHA." + }, + "error": { + "cannot_connect": "Ne morem se povezati napravo ZHA." + }, + "step": { + "user": { + "data": { + "radio_type": "Vrsta radia", + "usb_path": "USB Pot" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Squawk", + "warn": "Opozori" + }, + "trigger_subtype": { + "both_buttons": "Oba gumba", + "button_1": "Prvi gumb", + "button_2": "Drugi gumb", + "button_3": "Tretji gumb", + "button_4": "\u010cetrti gumb", + "button_5": "Peti gumb", + "button_6": "\u0160esti gumb", + "close": "Zapri", + "dim_down": "Zatemnite", + "dim_up": "pove\u010dajte mo\u010d", + "face_1": "aktivirano z obrazom 1", + "face_2": "aktivirano z obrazom 2", + "face_3": "aktivirano z obrazom 3", + "face_4": "aktivirano z obrazom 4", + "face_5": "aktivirano z obrazom 5", + "face_6": "aktivirano z obrazom 6", + "face_any": "Z vsemi/dolo\u010denimi obrazi vklju\u010deno", + "left": "Levo", + "open": "Odprto", + "right": "Desno", + "turn_off": "Ugasni", + "turn_on": "Pri\u017egi" + }, + "trigger_type": { + "device_dropped": "Naprava padla", + "device_flipped": "Naprava obrnjena \"{subtype}\"", + "device_knocked": "Naprava prevrnjena \"{subtype}\"", + "device_rotated": "Naprava je zasukana \"{subtype}\"", + "device_shaken": "Naprava se je pretresla", + "device_slid": "Naprava zdrsnila \"{subtype}\"", + "device_tilted": "Naprava je nagnjena", + "remote_button_alt_double_press": "Dvojni klik gumba \" {subtype} \" (nadomestni na\u010din)", + "remote_button_alt_long_press": "Gumb \" {subtype} \" neprekinjeno pritisnjen (nadomestni na\u010din)", + "remote_button_alt_long_release": "\"{Subtype}\" gumb spro\u0161\u010den po dolgem pritisku (nadomestni na\u010din)", + "remote_button_alt_quadruple_press": "\u0161tirikrat kliknjen gumb \" {subtype} \" (nadomestni na\u010din)", + "remote_button_alt_quintuple_press": "Petkrat kliknjen \"{podtipa}\" gumb (Nadomestni na\u010din)", + "remote_button_alt_short_press": "pritisnjen gumb \" {subtype} \" (nadomestni na\u010din)", + "remote_button_alt_short_release": "Gumb \" {subtype} \" spro\u0161\u010den (nadomestni na\u010din)", + "remote_button_alt_triple_press": "Trikrat kliknjen gumb \" {subtype} \" (nadomestni na\u010din)", + "remote_button_double_press": "Dvakrat kliknete gumb \"{subtype}\"", + "remote_button_long_press": "\"{subtype}\" gumb neprekinjeno pritisnjen", + "remote_button_long_release": "\"{subtype}\" gumb spro\u0161\u010den po dolgem pritisku", + "remote_button_quadruple_press": "\"{subtype}\" gumb \u0161tirikrat kliknjen", + "remote_button_quintuple_press": "\"{subtype}\" gumb petkrat kliknjen", + "remote_button_short_press": "Pritisnjen \"{subtype}\" gumb", + "remote_button_short_release": "Gumb \"{subtype}\" spro\u0161\u010den", + "remote_button_triple_press": "Gumb \"{subtype}\" trikrat kliknjen" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/sv.json b/homeassistant/components/zha/translations/sv.json new file mode 100644 index 00000000000..84ae9155b37 --- /dev/null +++ b/homeassistant/components/zha/translations/sv.json @@ -0,0 +1,66 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Endast en enda konfiguration av ZHA \u00e4r till\u00e5ten." + }, + "error": { + "cannot_connect": "Det gick inte att ansluta till ZHA enhet." + }, + "step": { + "user": { + "data": { + "radio_type": "Typ av radio", + "usb_path": "USB-enhetens s\u00f6kv\u00e4g" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "Kraxa", + "warn": "Varna" + }, + "trigger_subtype": { + "both_buttons": "B\u00e5da knapparna", + "button_1": "F\u00f6rsta knappen", + "button_2": "Andra knappen", + "button_3": "Tredje knappen", + "button_4": "Fj\u00e4rde knappen", + "button_5": "Femte knappen", + "button_6": "Sj\u00e4tte knappen", + "close": "St\u00e4ng", + "dim_down": "Dimma ned", + "dim_up": "Dimma upp", + "face_1": "med bildsida 1 aktiverat", + "face_2": "med bildsida 2 aktiverat", + "face_3": "med bildsida 3 aktiverat", + "face_4": "med bildsida 4 aktiverat", + "face_5": "med bildsida 5 aktiverat", + "face_6": "med bildsida 6 aktiverat", + "face_any": "Med valfri/specificerad bildsida(or) aktiverat", + "left": "V\u00e4nster", + "open": "\u00d6ppen", + "right": "H\u00f6ger", + "turn_off": "St\u00e4ng av", + "turn_on": "Starta" + }, + "trigger_type": { + "device_dropped": "Enheten tappades", + "device_flipped": "Enheten v\u00e4nd \"{subtype}\"", + "device_knocked": "Enheten knackad \"{subtype}\"", + "device_rotated": "Enheten roterade \"{subtype}\"", + "device_shaken": "Enheten skakad", + "device_slid": "Enheten gled \"{subtype}\"", + "device_tilted": "Enheten lutad", + "remote_button_double_press": "\"{subtype}\"-knappen dubbelklickades", + "remote_button_long_press": "\"{subtype}\"-knappen kontinuerligt nedtryckt", + "remote_button_long_release": "\"{subtype}\"-knappen sl\u00e4pptes efter ett l\u00e5ngttryck", + "remote_button_quadruple_press": "\"{subtype}\"-knappen klickades \nfyrfaldigt", + "remote_button_quintuple_press": "\"{subtype}\"-knappen klickades \nfemfaldigt", + "remote_button_short_press": "\"{subtype}\"-knappen trycktes in", + "remote_button_short_release": "\"{subtype}\"-knappen sl\u00e4ppt", + "remote_button_triple_press": "\"{subtype}\"-knappen trippelklickades" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/zh-Hans.json b/homeassistant/components/zha/translations/zh-Hans.json new file mode 100644 index 00000000000..72756d78a65 --- /dev/null +++ b/homeassistant/components/zha/translations/zh-Hans.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u53ea\u5141\u8bb8\u4e00\u4e2a ZHA \u914d\u7f6e\u3002" + }, + "error": { + "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230 ZHA \u8bbe\u5907\u3002" + }, + "step": { + "user": { + "data": { + "radio_type": "\u65e0\u7ebf\u7535\u7c7b\u578b", + "usb_path": "USB \u8bbe\u5907\u8def\u5f84" + }, + "title": "ZHA" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zha/translations/zh-Hant.json b/homeassistant/components/zha/translations/zh-Hant.json new file mode 100644 index 00000000000..6171f68a081 --- /dev/null +++ b/homeassistant/components/zha/translations/zh-Hant.json @@ -0,0 +1,74 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 ZHA\u3002" + }, + "error": { + "cannot_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 ZHA \u8a2d\u5099\u3002" + }, + "step": { + "user": { + "data": { + "radio_type": "\u7121\u7dda\u96fb\u985e\u578b", + "usb_path": "USB \u8a2d\u5099\u8def\u5f91" + }, + "title": "ZHA" + } + } + }, + "device_automation": { + "action_type": { + "squawk": "\u61c9\u7b54", + "warn": "\u8b66\u544a" + }, + "trigger_subtype": { + "both_buttons": "\u5169\u500b\u6309\u9215", + "button_1": "\u7b2c\u4e00\u500b\u6309\u9215", + "button_2": "\u7b2c\u4e8c\u500b\u6309\u9215", + "button_3": "\u7b2c\u4e09\u500b\u6309\u9215", + "button_4": "\u7b2c\u56db\u500b\u6309\u9215", + "button_5": "\u7b2c\u4e94\u500b\u6309\u9215", + "button_6": "\u7b2c\u516d\u500b\u6309\u9215", + "close": "\u95dc\u9589", + "dim_down": "\u8abf\u6697", + "dim_up": "\u8abf\u4eae", + "face_1": "\u5df2\u7531\u9762\u5bb9 1 \u958b\u555f", + "face_2": "\u5df2\u7531\u9762\u5bb9 2 \u958b\u555f", + "face_3": "\u5df2\u7531\u9762\u5bb9 3 \u958b\u555f", + "face_4": "\u5df2\u7531\u9762\u5bb9 4 \u958b\u555f", + "face_5": "\u5df2\u7531\u9762\u5bb9 5 \u958b\u555f", + "face_6": "\u5df2\u7531\u9762\u5bb9 6 \u958b\u555f", + "face_any": "\u5df2\u7531\u4efb\u4f55/\u7279\u5b9a\u9762\u5bb9\u958b\u555f", + "left": "\u5de6", + "open": "\u958b\u555f", + "right": "\u53f3", + "turn_off": "\u95dc\u9589", + "turn_on": "\u958b\u555f" + }, + "trigger_type": { + "device_dropped": "\u8a2d\u5099\u6389\u843d", + "device_flipped": "\u7ffb\u52d5 \"{subtype}\" \u8a2d\u5099", + "device_knocked": "\u6572\u64ca \"{subtype}\" \u8a2d\u5099", + "device_rotated": "\u65cb\u8f49 \"{subtype}\" \u8a2d\u5099", + "device_shaken": "\u8a2d\u5099\u6416\u6643", + "device_slid": "\u63a8\u52d5 \"{subtype}\" \u8a2d\u5099", + "device_tilted": "\u8a2d\u5099\u540d\u7a31", + "remote_button_alt_double_press": "\"{subtype}\" \u6309\u9215\u96d9\u64ca\u9375\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_long_press": "\"{subtype}\" \u6309\u9215\u6301\u7e8c\u6309\u4e0b\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_long_release": "\"{subtype}\" \u6309\u9215\u9577\u6309\u5f8c\u91cb\u653e\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_quadruple_press": "\"{subtype}\" \u6309\u9215\u56db\u9023\u64ca\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_quintuple_press": "\"{subtype}\" \u6309\u9215\u4e94\u9023\u64ca\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_alt_triple_press": "\"{subtype}\" \u6309\u9215\u4e09\u9023\u64ca\uff08\u66ff\u4ee3\u6a21\u5f0f\uff09", + "remote_button_double_press": "\"{subtype}\" \u6309\u9215\u96d9\u64ca", + "remote_button_long_press": "\"{subtype}\" \u6309\u9215\u6301\u7e8c\u6309\u4e0b", + "remote_button_long_release": "\"{subtype}\" \u6309\u9215\u9577\u6309\u5f8c\u91cb\u653e", + "remote_button_quadruple_press": "\"{subtype}\" \u6309\u9215\u56db\u9023\u64ca", + "remote_button_quintuple_press": "\"{subtype}\" \u6309\u9215\u4e94\u9023\u64ca", + "remote_button_short_press": "\"{subtype}\" \u6309\u9215\u5df2\u6309\u4e0b", + "remote_button_short_release": "\"{subtype}\" \u6309\u9215\u5df2\u91cb\u653e", + "remote_button_triple_press": "\"{subtype}\" \u6309\u9215\u4e09\u9023\u64ca" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zhong_hong/manifest.json b/homeassistant/components/zhong_hong/manifest.json index 13a65ad1646..f2caf269258 100644 --- a/homeassistant/components/zhong_hong/manifest.json +++ b/homeassistant/components/zhong_hong/manifest.json @@ -3,6 +3,5 @@ "name": "ZhongHong", "documentation": "https://www.home-assistant.io/integrations/zhong_hong", "requirements": ["zhong_hong_hvac==1.0.9"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/zigbee/__init__.py b/homeassistant/components/zigbee/__init__.py index 48c96b7591f..2fa8291538e 100644 --- a/homeassistant/components/zigbee/__init__.py +++ b/homeassistant/components/zigbee/__init__.py @@ -33,20 +33,8 @@ DEFAULT_DEVICE = "/dev/ttyUSB0" DEFAULT_BAUD = 9600 DEFAULT_ADC_MAX_VOLTS = 1.2 -# Copied from xbee_helper during setup() -GPIO_DIGITAL_OUTPUT_LOW = None -GPIO_DIGITAL_OUTPUT_HIGH = None -ADC_PERCENTAGE = None -DIGITAL_PINS = None -ANALOG_PINS = None -CONVERT_ADC = None -ZIGBEE_EXCEPTION = None -ZIGBEE_TX_FAILURE = None - ATTR_FRAME = "frame" -DEVICE = None - CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( @@ -71,24 +59,6 @@ PLATFORM_SCHEMA = vol.Schema( def setup(hass, config): """Set up the connection to the Zigbee device.""" - global DEVICE - global GPIO_DIGITAL_OUTPUT_LOW - global GPIO_DIGITAL_OUTPUT_HIGH - global ADC_PERCENTAGE - global DIGITAL_PINS - global ANALOG_PINS - global CONVERT_ADC - global ZIGBEE_EXCEPTION - global ZIGBEE_TX_FAILURE - - GPIO_DIGITAL_OUTPUT_LOW = xb_const.GPIO_DIGITAL_OUTPUT_LOW - GPIO_DIGITAL_OUTPUT_HIGH = xb_const.GPIO_DIGITAL_OUTPUT_HIGH - ADC_PERCENTAGE = xb_const.ADC_PERCENTAGE - DIGITAL_PINS = xb_const.DIGITAL_PINS - ANALOG_PINS = xb_const.ANALOG_PINS - CONVERT_ADC = convert_adc - ZIGBEE_EXCEPTION = ZigBeeException - ZIGBEE_TX_FAILURE = ZigBeeTxFailure usb_device = config[DOMAIN].get(CONF_DEVICE, DEFAULT_DEVICE) baud = int(config[DOMAIN].get(CONF_BAUD, DEFAULT_BAUD)) @@ -97,8 +67,11 @@ def setup(hass, config): except SerialException as exc: _LOGGER.exception("Unable to open serial port for Zigbee: %s", exc) return False - DEVICE = ZigBee(ser) - hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, close_serial_port) + zigbee_device = ZigBee(ser) + + def close_serial_port(*args): + """Close the serial port we're using to communicate with the Zigbee.""" + zigbee_device.zb.serial.close() def _frame_received(frame): """Run when a Zigbee frame is received. @@ -108,16 +81,13 @@ def setup(hass, config): """ dispatcher_send(hass, SIGNAL_ZIGBEE_FRAME_RECEIVED, frame) - DEVICE.add_frame_rx_handler(_frame_received) + hass.data[DOMAIN] = zigbee_device + hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, close_serial_port) + zigbee_device.add_frame_rx_handler(_frame_received) return True -def close_serial_port(*args): - """Close the serial port we're using to communicate with the Zigbee.""" - DEVICE.zb.serial.close() - - def frame_is_relevant(entity, frame): """Test whether the frame is relevant to the entity.""" if frame.get("source_addr_long") != entity.config.address: @@ -229,13 +199,13 @@ class ZigBeeDigitalOutConfig(ZigBeePinConfig): """ if self._config.get("on_state", "").lower() == "low": bool2state = { - True: GPIO_DIGITAL_OUTPUT_LOW, - False: GPIO_DIGITAL_OUTPUT_HIGH, + True: xb_const.GPIO_DIGITAL_OUTPUT_LOW, + False: xb_const.GPIO_DIGITAL_OUTPUT_HIGH, } else: bool2state = { - True: GPIO_DIGITAL_OUTPUT_HIGH, - False: GPIO_DIGITAL_OUTPUT_LOW, + True: xb_const.GPIO_DIGITAL_OUTPUT_HIGH, + False: xb_const.GPIO_DIGITAL_OUTPUT_LOW, } state2bool = {v: k for k, v in bool2state.items()} return bool2state, state2bool @@ -269,9 +239,10 @@ class ZigBeeAnalogInConfig(ZigBeePinConfig): class ZigBeeDigitalIn(Entity): """Representation of a GPIO pin configured as a digital input.""" - def __init__(self, hass, config): + def __init__(self, config, device): """Initialize the device.""" self._config = config + self._device = device self._state = False async def async_added_to_hass(self): @@ -286,7 +257,7 @@ class ZigBeeDigitalIn(Entity): if not frame_is_relevant(self, frame): return sample = next(iter(frame["samples"])) - pin_name = DIGITAL_PINS[self._config.pin] + pin_name = xb_const.DIGITAL_PINS[self._config.pin] if pin_name not in sample: # Doesn't contain information about our pin return @@ -322,18 +293,18 @@ class ZigBeeDigitalIn(Entity): def update(self): """Ask the Zigbee device what state its input pin is in.""" try: - sample = DEVICE.get_sample(self._config.address) - except ZIGBEE_TX_FAILURE: + sample = self._device.get_sample(self._config.address) + except ZigBeeTxFailure: _LOGGER.warning( "Transmission failure when attempting to get sample from " "Zigbee device at address: %s", hexlify(self._config.address), ) return - except ZIGBEE_EXCEPTION as exc: + except ZigBeeException as exc: _LOGGER.exception("Unable to get sample from Zigbee device: %s", exc) return - pin_name = DIGITAL_PINS[self._config.pin] + pin_name = xb_const.DIGITAL_PINS[self._config.pin] if pin_name not in sample: _LOGGER.warning( "Pin %s (%s) was not in the sample provided by Zigbee device %s.", @@ -351,17 +322,17 @@ class ZigBeeDigitalOut(ZigBeeDigitalIn): def _set_state(self, state): """Initialize the Zigbee digital out device.""" try: - DEVICE.set_gpio_pin( + self._device.set_gpio_pin( self._config.pin, self._config.bool2state[state], self._config.address ) - except ZIGBEE_TX_FAILURE: + except ZigBeeTxFailure: _LOGGER.warning( "Transmission failure when attempting to set output pin on " "Zigbee device at address: %s", hexlify(self._config.address), ) return - except ZIGBEE_EXCEPTION as exc: + except ZigBeeException as exc: _LOGGER.exception("Unable to set digital pin on Zigbee device: %s", exc) return self._state = state @@ -379,15 +350,17 @@ class ZigBeeDigitalOut(ZigBeeDigitalIn): def update(self): """Ask the Zigbee device what its output is set to.""" try: - pin_state = DEVICE.get_gpio_pin(self._config.pin, self._config.address) - except ZIGBEE_TX_FAILURE: + pin_state = self._device.get_gpio_pin( + self._config.pin, self._config.address + ) + except ZigBeeTxFailure: _LOGGER.warning( "Transmission failure when attempting to get output pin status" " from Zigbee device at address: %s", hexlify(self._config.address), ) return - except ZIGBEE_EXCEPTION as exc: + except ZigBeeException as exc: _LOGGER.exception( "Unable to get output pin status from Zigbee device: %s", exc ) @@ -398,9 +371,10 @@ class ZigBeeDigitalOut(ZigBeeDigitalIn): class ZigBeeAnalogIn(Entity): """Representation of a GPIO pin configured as an analog input.""" - def __init__(self, hass, config): + def __init__(self, config, device): """Initialize the ZigBee analog in device.""" self._config = config + self._device = device self._value = None async def async_added_to_hass(self): @@ -415,12 +389,12 @@ class ZigBeeAnalogIn(Entity): if not frame_is_relevant(self, frame): return sample = frame["samples"].pop() - pin_name = ANALOG_PINS[self._config.pin] + pin_name = xb_const.ANALOG_PINS[self._config.pin] if pin_name not in sample: # Doesn't contain information about our pin return - self._value = CONVERT_ADC( - sample[pin_name], ADC_PERCENTAGE, self._config.max_voltage + self._value = convert_adc( + sample[pin_name], xb_const.ADC_PERCENTAGE, self._config.max_voltage ) self.schedule_update_ha_state() @@ -454,17 +428,17 @@ class ZigBeeAnalogIn(Entity): def update(self): """Get the latest reading from the ADC.""" try: - self._value = DEVICE.read_analog_pin( + self._value = self._device.read_analog_pin( self._config.pin, self._config.max_voltage, self._config.address, - ADC_PERCENTAGE, + xb_const.ADC_PERCENTAGE, ) - except ZIGBEE_TX_FAILURE: + except ZigBeeTxFailure: _LOGGER.warning( "Transmission failure when attempting to get sample from " "Zigbee device at address: %s", hexlify(self._config.address), ) - except ZIGBEE_EXCEPTION as exc: + except ZigBeeException as exc: _LOGGER.exception("Unable to get sample from Zigbee device: %s", exc) diff --git a/homeassistant/components/zigbee/binary_sensor.py b/homeassistant/components/zigbee/binary_sensor.py index d8a5949be4c..d32554e5744 100644 --- a/homeassistant/components/zigbee/binary_sensor.py +++ b/homeassistant/components/zigbee/binary_sensor.py @@ -3,7 +3,7 @@ import voluptuous as vol from homeassistant.components.binary_sensor import BinarySensorDevice -from . import PLATFORM_SCHEMA, ZigBeeDigitalIn, ZigBeeDigitalInConfig +from . import DOMAIN, PLATFORM_SCHEMA, ZigBeeDigitalIn, ZigBeeDigitalInConfig CONF_ON_STATE = "on_state" @@ -15,10 +15,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Optional(CONF_ON_STATE): vol.In(ST def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Zigbee binary sensor platform.""" - add_entities([ZigBeeBinarySensor(hass, ZigBeeDigitalInConfig(config))], True) + zigbee_device = hass.data[DOMAIN] + add_entities( + [ZigBeeBinarySensor(ZigBeeDigitalInConfig(config), zigbee_device)], True + ) class ZigBeeBinarySensor(ZigBeeDigitalIn, BinarySensorDevice): """Use ZigBeeDigitalIn as binary sensor.""" - - pass diff --git a/homeassistant/components/zigbee/light.py b/homeassistant/components/zigbee/light.py index 9a48efe8a95..54f6044c3dd 100644 --- a/homeassistant/components/zigbee/light.py +++ b/homeassistant/components/zigbee/light.py @@ -3,7 +3,7 @@ import voluptuous as vol from homeassistant.components.light import Light -from . import PLATFORM_SCHEMA, ZigBeeDigitalOut, ZigBeeDigitalOutConfig +from . import DOMAIN, PLATFORM_SCHEMA, ZigBeeDigitalOut, ZigBeeDigitalOutConfig CONF_ON_STATE = "on_state" @@ -17,10 +17,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Create and add an entity based on the configuration.""" - add_entities([ZigBeeLight(hass, ZigBeeDigitalOutConfig(config))]) + zigbee_device = hass.data[DOMAIN] + add_entities([ZigBeeLight(ZigBeeDigitalOutConfig(config), zigbee_device)]) class ZigBeeLight(ZigBeeDigitalOut, Light): """Use ZigBeeDigitalOut as light.""" - - pass diff --git a/homeassistant/components/zigbee/manifest.json b/homeassistant/components/zigbee/manifest.json index d6c0d76f3c0..6940aaef7dc 100644 --- a/homeassistant/components/zigbee/manifest.json +++ b/homeassistant/components/zigbee/manifest.json @@ -3,6 +3,5 @@ "name": "Zigbee", "documentation": "https://www.home-assistant.io/integrations/zigbee", "requirements": ["xbee-helper==0.0.7"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/zigbee/sensor.py b/homeassistant/components/zigbee/sensor.py index 648b3bd5a2f..0c709a6d1a5 100644 --- a/homeassistant/components/zigbee/sensor.py +++ b/homeassistant/components/zigbee/sensor.py @@ -3,12 +3,18 @@ from binascii import hexlify import logging import voluptuous as vol +from xbee_helper.exceptions import ZigBeeException, ZigBeeTxFailure -from homeassistant.components import zigbee from homeassistant.const import TEMP_CELSIUS from homeassistant.helpers.entity import Entity -from . import PLATFORM_SCHEMA +from . import ( + DOMAIN, + PLATFORM_SCHEMA, + ZigBeeAnalogIn, + ZigBeeAnalogInConfig, + ZigBeeConfig, +) _LOGGER = logging.getLogger(__name__) @@ -32,6 +38,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): Uses the 'type' config value to work out which type of Zigbee sensor we're dealing with and instantiates the relevant classes to handle it. """ + zigbee_device = hass.data[DOMAIN] typ = config.get(CONF_TYPE) try: @@ -40,15 +47,16 @@ def setup_platform(hass, config, add_entities, discovery_info=None): _LOGGER.exception("Unknown Zigbee sensor type: %s", typ) return - add_entities([sensor_class(hass, config_class(config))], True) + add_entities([sensor_class(config_class(config), zigbee_device)], True) class ZigBeeTemperatureSensor(Entity): """Representation of XBee Pro temperature sensor.""" - def __init__(self, hass, config): + def __init__(self, config, device): """Initialize the sensor.""" self._config = config + self._device = device self._temp = None @property @@ -69,19 +77,19 @@ class ZigBeeTemperatureSensor(Entity): def update(self): """Get the latest data.""" try: - self._temp = zigbee.DEVICE.get_temperature(self._config.address) - except zigbee.ZIGBEE_TX_FAILURE: + self._temp = self._device.get_temperature(self._config.address) + except ZigBeeTxFailure: _LOGGER.warning( "Transmission failure when attempting to get sample from " "Zigbee device at address: %s", hexlify(self._config.address), ) - except zigbee.ZIGBEE_EXCEPTION as exc: + except ZigBeeException as exc: _LOGGER.exception("Unable to get sample from Zigbee device: %s", exc) # This must be below the classes to which it refers. TYPE_CLASSES = { - "temperature": (ZigBeeTemperatureSensor, zigbee.ZigBeeConfig), - "analog": (zigbee.ZigBeeAnalogIn, zigbee.ZigBeeAnalogInConfig), + "temperature": (ZigBeeTemperatureSensor, ZigBeeConfig), + "analog": (ZigBeeAnalogIn, ZigBeeAnalogInConfig), } diff --git a/homeassistant/components/zigbee/switch.py b/homeassistant/components/zigbee/switch.py index 4e8d21f438a..e29d2c045df 100644 --- a/homeassistant/components/zigbee/switch.py +++ b/homeassistant/components/zigbee/switch.py @@ -3,7 +3,7 @@ import voluptuous as vol from homeassistant.components.switch import SwitchDevice -from . import PLATFORM_SCHEMA, ZigBeeDigitalOut, ZigBeeDigitalOutConfig +from . import DOMAIN, PLATFORM_SCHEMA, ZigBeeDigitalOut, ZigBeeDigitalOutConfig CONF_ON_STATE = "on_state" @@ -16,10 +16,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Optional(CONF_ON_STATE): vol.In(ST def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Zigbee switch platform.""" - add_entities([ZigBeeSwitch(hass, ZigBeeDigitalOutConfig(config))]) + zigbee_device = hass.data[DOMAIN] + add_entities([ZigBeeSwitch(ZigBeeDigitalOutConfig(config), zigbee_device)]) class ZigBeeSwitch(ZigBeeDigitalOut, SwitchDevice): """Representation of a Zigbee Digital Out device.""" - - pass diff --git a/homeassistant/components/ziggo_mediabox_xl/manifest.json b/homeassistant/components/ziggo_mediabox_xl/manifest.json index 84a384e5168..ccc5e260eaf 100644 --- a/homeassistant/components/ziggo_mediabox_xl/manifest.json +++ b/homeassistant/components/ziggo_mediabox_xl/manifest.json @@ -3,6 +3,5 @@ "name": "Ziggo Mediabox XL", "documentation": "https://www.home-assistant.io/integrations/ziggo_mediabox_xl", "requirements": ["ziggo-mediabox-xl==1.1.0"], - "dependencies": [], "codeowners": [] } diff --git a/homeassistant/components/ziggo_mediabox_xl/media_player.py b/homeassistant/components/ziggo_mediabox_xl/media_player.py index 83a7dbbaba9..832758e26fb 100644 --- a/homeassistant/components/ziggo_mediabox_xl/media_player.py +++ b/homeassistant/components/ziggo_mediabox_xl/media_player.py @@ -85,7 +85,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ZiggoMediaboxXLDevice(mediabox, host, name, connection_successful) ) known_devices.add(ip_addr) - except socket.error as error: + except OSError as error: _LOGGER.error("Can't connect to %s: %s", host, error) else: _LOGGER.info("Ignoring duplicate Ziggo Mediabox XL %s", host) @@ -115,7 +115,7 @@ class ZiggoMediaboxXLDevice(MediaPlayerDevice): self._available = True else: self._available = False - except socket.error: + except OSError: _LOGGER.error("Couldn't fetch state from %s", self._host) self._available = False @@ -123,7 +123,7 @@ class ZiggoMediaboxXLDevice(MediaPlayerDevice): """Send keys to the device and handle exceptions.""" try: self._mediabox.send_keys(keys) - except socket.error: + except OSError: _LOGGER.error("Couldn't send keys to %s", self._host) @property diff --git a/homeassistant/components/zone/manifest.json b/homeassistant/components/zone/manifest.json index d45399c3f31..019049a3b71 100644 --- a/homeassistant/components/zone/manifest.json +++ b/homeassistant/components/zone/manifest.json @@ -3,8 +3,6 @@ "name": "Zone", "config_flow": false, "documentation": "https://www.home-assistant.io/integrations/zone", - "requirements": [], - "dependencies": [], "codeowners": ["@home-assistant/core"], "quality_scale": "internal" } diff --git a/homeassistant/components/zone/.translations/bg.json b/homeassistant/components/zone/translations/bg.json similarity index 100% rename from homeassistant/components/zone/.translations/bg.json rename to homeassistant/components/zone/translations/bg.json diff --git a/homeassistant/components/zone/.translations/ca.json b/homeassistant/components/zone/translations/ca.json similarity index 100% rename from homeassistant/components/zone/.translations/ca.json rename to homeassistant/components/zone/translations/ca.json diff --git a/homeassistant/components/zone/.translations/cs.json b/homeassistant/components/zone/translations/cs.json similarity index 100% rename from homeassistant/components/zone/.translations/cs.json rename to homeassistant/components/zone/translations/cs.json diff --git a/homeassistant/components/zone/.translations/cy.json b/homeassistant/components/zone/translations/cy.json similarity index 100% rename from homeassistant/components/zone/.translations/cy.json rename to homeassistant/components/zone/translations/cy.json diff --git a/homeassistant/components/zone/.translations/da.json b/homeassistant/components/zone/translations/da.json similarity index 100% rename from homeassistant/components/zone/.translations/da.json rename to homeassistant/components/zone/translations/da.json diff --git a/homeassistant/components/zone/.translations/de.json b/homeassistant/components/zone/translations/de.json similarity index 100% rename from homeassistant/components/zone/.translations/de.json rename to homeassistant/components/zone/translations/de.json diff --git a/homeassistant/components/zone/.translations/en.json b/homeassistant/components/zone/translations/en.json similarity index 100% rename from homeassistant/components/zone/.translations/en.json rename to homeassistant/components/zone/translations/en.json diff --git a/homeassistant/components/zone/.translations/es-419.json b/homeassistant/components/zone/translations/es-419.json similarity index 100% rename from homeassistant/components/zone/.translations/es-419.json rename to homeassistant/components/zone/translations/es-419.json diff --git a/homeassistant/components/zone/.translations/es.json b/homeassistant/components/zone/translations/es.json similarity index 100% rename from homeassistant/components/zone/.translations/es.json rename to homeassistant/components/zone/translations/es.json diff --git a/homeassistant/components/zone/.translations/et.json b/homeassistant/components/zone/translations/et.json similarity index 100% rename from homeassistant/components/zone/.translations/et.json rename to homeassistant/components/zone/translations/et.json diff --git a/homeassistant/components/zone/.translations/fr.json b/homeassistant/components/zone/translations/fr.json similarity index 100% rename from homeassistant/components/zone/.translations/fr.json rename to homeassistant/components/zone/translations/fr.json diff --git a/homeassistant/components/zone/.translations/he.json b/homeassistant/components/zone/translations/he.json similarity index 100% rename from homeassistant/components/zone/.translations/he.json rename to homeassistant/components/zone/translations/he.json diff --git a/homeassistant/components/zone/.translations/hr.json b/homeassistant/components/zone/translations/hr.json similarity index 100% rename from homeassistant/components/zone/.translations/hr.json rename to homeassistant/components/zone/translations/hr.json diff --git a/homeassistant/components/zone/.translations/hu.json b/homeassistant/components/zone/translations/hu.json similarity index 100% rename from homeassistant/components/zone/.translations/hu.json rename to homeassistant/components/zone/translations/hu.json diff --git a/homeassistant/components/zone/.translations/id.json b/homeassistant/components/zone/translations/id.json similarity index 100% rename from homeassistant/components/zone/.translations/id.json rename to homeassistant/components/zone/translations/id.json diff --git a/homeassistant/components/zone/.translations/it.json b/homeassistant/components/zone/translations/it.json similarity index 100% rename from homeassistant/components/zone/.translations/it.json rename to homeassistant/components/zone/translations/it.json diff --git a/homeassistant/components/zone/.translations/ja.json b/homeassistant/components/zone/translations/ja.json similarity index 100% rename from homeassistant/components/zone/.translations/ja.json rename to homeassistant/components/zone/translations/ja.json diff --git a/homeassistant/components/zone/.translations/ko.json b/homeassistant/components/zone/translations/ko.json similarity index 100% rename from homeassistant/components/zone/.translations/ko.json rename to homeassistant/components/zone/translations/ko.json diff --git a/homeassistant/components/zone/.translations/lb.json b/homeassistant/components/zone/translations/lb.json similarity index 100% rename from homeassistant/components/zone/.translations/lb.json rename to homeassistant/components/zone/translations/lb.json diff --git a/homeassistant/components/zone/.translations/nl.json b/homeassistant/components/zone/translations/nl.json similarity index 100% rename from homeassistant/components/zone/.translations/nl.json rename to homeassistant/components/zone/translations/nl.json diff --git a/homeassistant/components/zone/.translations/nn.json b/homeassistant/components/zone/translations/nn.json similarity index 100% rename from homeassistant/components/zone/.translations/nn.json rename to homeassistant/components/zone/translations/nn.json diff --git a/homeassistant/components/zone/.translations/no.json b/homeassistant/components/zone/translations/no.json similarity index 100% rename from homeassistant/components/zone/.translations/no.json rename to homeassistant/components/zone/translations/no.json diff --git a/homeassistant/components/zone/.translations/pl.json b/homeassistant/components/zone/translations/pl.json similarity index 100% rename from homeassistant/components/zone/.translations/pl.json rename to homeassistant/components/zone/translations/pl.json diff --git a/homeassistant/components/zone/.translations/pt-BR.json b/homeassistant/components/zone/translations/pt-BR.json similarity index 100% rename from homeassistant/components/zone/.translations/pt-BR.json rename to homeassistant/components/zone/translations/pt-BR.json diff --git a/homeassistant/components/zone/.translations/pt.json b/homeassistant/components/zone/translations/pt.json similarity index 100% rename from homeassistant/components/zone/.translations/pt.json rename to homeassistant/components/zone/translations/pt.json diff --git a/homeassistant/components/zone/.translations/ru.json b/homeassistant/components/zone/translations/ru.json similarity index 100% rename from homeassistant/components/zone/.translations/ru.json rename to homeassistant/components/zone/translations/ru.json diff --git a/homeassistant/components/zone/.translations/sl.json b/homeassistant/components/zone/translations/sl.json similarity index 100% rename from homeassistant/components/zone/.translations/sl.json rename to homeassistant/components/zone/translations/sl.json diff --git a/homeassistant/components/zone/.translations/sv.json b/homeassistant/components/zone/translations/sv.json similarity index 100% rename from homeassistant/components/zone/.translations/sv.json rename to homeassistant/components/zone/translations/sv.json diff --git a/homeassistant/components/zone/.translations/th.json b/homeassistant/components/zone/translations/th.json similarity index 100% rename from homeassistant/components/zone/.translations/th.json rename to homeassistant/components/zone/translations/th.json diff --git a/homeassistant/components/zone/.translations/uk.json b/homeassistant/components/zone/translations/uk.json similarity index 100% rename from homeassistant/components/zone/.translations/uk.json rename to homeassistant/components/zone/translations/uk.json diff --git a/homeassistant/components/zone/.translations/vi.json b/homeassistant/components/zone/translations/vi.json similarity index 100% rename from homeassistant/components/zone/.translations/vi.json rename to homeassistant/components/zone/translations/vi.json diff --git a/homeassistant/components/zone/.translations/zh-Hans.json b/homeassistant/components/zone/translations/zh-Hans.json similarity index 100% rename from homeassistant/components/zone/.translations/zh-Hans.json rename to homeassistant/components/zone/translations/zh-Hans.json diff --git a/homeassistant/components/zone/.translations/zh-Hant.json b/homeassistant/components/zone/translations/zh-Hant.json similarity index 100% rename from homeassistant/components/zone/.translations/zh-Hant.json rename to homeassistant/components/zone/translations/zh-Hant.json diff --git a/homeassistant/components/zoneminder/__init__.py b/homeassistant/components/zoneminder/__init__.py index 3007c981480..c631406b0e3 100644 --- a/homeassistant/components/zoneminder/__init__.py +++ b/homeassistant/components/zoneminder/__init__.py @@ -58,13 +58,10 @@ def setup(hass, config): success = True for conf in config[DOMAIN]: - if conf[CONF_SSL]: - schema = "https" - else: - schema = "http" + protocol = "https" if conf[CONF_SSL] else "http" host_name = conf[CONF_HOST] - server_origin = f"{schema}://{host_name}" + server_origin = f"{protocol}://{host_name}" zm_client = ZoneMinder( server_origin, conf.get(CONF_USERNAME), diff --git a/homeassistant/components/zoneminder/manifest.json b/homeassistant/components/zoneminder/manifest.json index 2f6fe831eb3..b3a87510e5a 100644 --- a/homeassistant/components/zoneminder/manifest.json +++ b/homeassistant/components/zoneminder/manifest.json @@ -3,6 +3,5 @@ "name": "ZoneMinder", "documentation": "https://www.home-assistant.io/integrations/zoneminder", "requirements": ["zm-py==0.4.0"], - "dependencies": [], "codeowners": ["@rohankapoorcom"] } diff --git a/homeassistant/components/zoneminder/services.yaml b/homeassistant/components/zoneminder/services.yaml index e6346d2f384..a6fb85b641d 100644 --- a/homeassistant/components/zoneminder/services.yaml +++ b/homeassistant/components/zoneminder/services.yaml @@ -3,4 +3,4 @@ set_run_state: fields: name: description: The string name of the ZoneMinder run state to set as active. - example: 'Home' \ No newline at end of file + example: "Home" diff --git a/homeassistant/components/zwave/.translations/bg.json b/homeassistant/components/zwave/.translations/bg.json deleted file mode 100644 index 7140e3956df..00000000000 --- a/homeassistant/components/zwave/.translations/bg.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", - "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Z-Wave \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440." - }, - "error": { - "option_error": "\u0412\u0430\u043b\u0438\u0434\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 Z-Wave \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043b\u0438 \u0435 \u043f\u044a\u0442\u044f\u0442 \u043a\u044a\u043c USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e?" - }, - "step": { - "user": { - "data": { - "network_key": "\u041c\u0440\u0435\u0436\u043e\u0432 \u043a\u043b\u044e\u0447 (\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043f\u0440\u0430\u0437\u043d\u043e \u0437\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435)", - "usb_path": "USB \u043f\u044a\u0442" - }, - "description": "\u0412\u0438\u0436\u0442\u0435 https://www.home-assistant.io/docs/z-wave/installation/ \u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438", - "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/ca.json b/homeassistant/components/zwave/.translations/ca.json deleted file mode 100644 index bbf303a1f5e..00000000000 --- a/homeassistant/components/zwave/.translations/ca.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave ja est\u00e0 configurat", - "one_instance_only": "El component nom\u00e9s admet una inst\u00e0ncia de Z-Wave" - }, - "error": { - "option_error": "Ha fallat la validaci\u00f3 de Z-Wave. \u00c9s correcta la ruta al port USB on hi ha connectat el dispositiu?" - }, - "step": { - "user": { - "data": { - "network_key": "Clau de xarxa (deixa-ho en blanc per generar-la autom\u00e0ticament)", - "usb_path": "Ruta del port USB" - }, - "description": "Consulta https://www.home-assistant.io/docs/z-wave/installation/ per obtenir informaci\u00f3 sobre les variables de configuraci\u00f3", - "title": "Configuraci\u00f3 de Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/cs.json b/homeassistant/components/zwave/.translations/cs.json deleted file mode 100644 index a44fb8ad34b..00000000000 --- a/homeassistant/components/zwave/.translations/cs.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave je ji\u017e nakonfigurov\u00e1no", - "one_instance_only": "Komponenta podporuje pouze jednu instanci Z-Wave" - }, - "error": { - "option_error": "Z-Wave ov\u011b\u0159en\u00ed se nezda\u0159ilo. Je cesta k USB za\u0159\u00edzen\u00ed spr\u00e1vn\u011b?" - }, - "step": { - "user": { - "data": { - "network_key": "S\u00ed\u0165ov\u00fd kl\u00ed\u010d (ponechte pr\u00e1zdn\u00e9 pro automatick\u00e9 generov\u00e1n\u00ed)", - "usb_path": "Cesta k USB" - }, - "description": "Viz https://www.home-assistant.io/docs/z-wave/installation/ pro informace o konfigura\u010dn\u00edch prom\u011bnn\u00fdch", - "title": "Nastavit Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/da.json b/homeassistant/components/zwave/.translations/da.json deleted file mode 100644 index 25eee9b3d91..00000000000 --- a/homeassistant/components/zwave/.translations/da.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave er allerede konfigureret", - "one_instance_only": "Komponenten underst\u00f8tter kun \u00e9n Z-Wave-instans" - }, - "error": { - "option_error": "Z-Wave-validering mislykkedes. Er stien til USB-enhed korrekt?" - }, - "step": { - "user": { - "data": { - "network_key": "Netv\u00e6rksn\u00f8gle (efterlad blank for autogenerering)", - "usb_path": "Sti til USB-enhed" - }, - "description": "Se https://www.home-assistant.io/docs/z-wave/installation/ for oplysninger om konfigurationsvariabler", - "title": "Ops\u00e6t Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/de.json b/homeassistant/components/zwave/.translations/de.json deleted file mode 100644 index f2438f1561f..00000000000 --- a/homeassistant/components/zwave/.translations/de.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave ist bereits konfiguriert", - "one_instance_only": "Komponente unterst\u00fctzt nur eine Z-Wave-Instanz" - }, - "error": { - "option_error": "Z-Wave-Validierung fehlgeschlagen. Ist der Pfad zum USB-Stick korrekt?" - }, - "step": { - "user": { - "data": { - "network_key": "Netzwerkschl\u00fcssel (leer lassen, um automatisch zu generieren)", - "usb_path": "USB-Pfad" - }, - "description": "Informationen zu den Konfigurationsvariablen findest du unter https://www.home-assistant.io/docs/z-wave/installation/", - "title": "Z-Wave einrichten" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/en.json b/homeassistant/components/zwave/.translations/en.json deleted file mode 100644 index 081d5c858cb..00000000000 --- a/homeassistant/components/zwave/.translations/en.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave is already configured", - "one_instance_only": "Component only supports one Z-Wave instance" - }, - "error": { - "option_error": "Z-Wave validation failed. Is the path to the USB stick correct?" - }, - "step": { - "user": { - "data": { - "network_key": "Network Key (leave blank to auto-generate)", - "usb_path": "USB Path" - }, - "description": "See https://www.home-assistant.io/docs/z-wave/installation/ for information on the configuration variables", - "title": "Set up Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/es-419.json b/homeassistant/components/zwave/.translations/es-419.json deleted file mode 100644 index f2ca1a19aa4..00000000000 --- a/homeassistant/components/zwave/.translations/es-419.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave ya est\u00e1 configurado", - "one_instance_only": "El componente solo admite una instancia de Z-Wave" - }, - "error": { - "option_error": "La validaci\u00f3n de Z-Wave fall\u00f3. \u00bfEs correcta la ruta a la memoria USB?" - }, - "step": { - "user": { - "data": { - "network_key": "Clave de red (dejar en blanco para auto-generar)", - "usb_path": "Ruta USB" - }, - "description": "Consulte https://www.home-assistant.io/docs/z-wave/installation/ para obtener informaci\u00f3n sobre las variables de configuraci\u00f3n", - "title": "Configurar Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/es.json b/homeassistant/components/zwave/.translations/es.json deleted file mode 100644 index ba7885f2e25..00000000000 --- a/homeassistant/components/zwave/.translations/es.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave ya est\u00e1 configurado", - "one_instance_only": "El componente solo admite una instancia de Z-Wave" - }, - "error": { - "option_error": "Z-Wave error de validaci\u00f3n. \u00bfLa ruta de acceso a la memoria USB escorrecta?" - }, - "step": { - "user": { - "data": { - "network_key": "Clave de red (d\u00e9jelo en blanco para generar autom\u00e1ticamente)", - "usb_path": "Ruta USB" - }, - "description": "Consulta https://www.home-assistant.io/docs/z-wave/installation/ para obtener informaci\u00f3n sobre las variables de configuraci\u00f3n", - "title": "Configurar Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/et.json b/homeassistant/components/zwave/.translations/et.json deleted file mode 100644 index 8c4c45f9c89..00000000000 --- a/homeassistant/components/zwave/.translations/et.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "config": { - "title": "" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/fr.json b/homeassistant/components/zwave/.translations/fr.json deleted file mode 100644 index 797a64b2076..00000000000 --- a/homeassistant/components/zwave/.translations/fr.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave est d\u00e9j\u00e0 configur\u00e9", - "one_instance_only": "Le composant ne prend en charge qu'une seule instance Z-Wave" - }, - "error": { - "option_error": "La validation Z-Wave a \u00e9chou\u00e9. Le chemin d'acc\u00e8s \u00e0 la cl\u00e9 USB est-il correct?" - }, - "step": { - "user": { - "data": { - "network_key": "Cl\u00e9 r\u00e9seau (laisser vide pour g\u00e9n\u00e9rer automatiquement)", - "usb_path": "Chemin USB" - }, - "description": "Voir https://www.home-assistant.io/docs/z-wave/installation/ pour plus d'informations sur les variables de configuration.", - "title": "Configurer Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/hu.json b/homeassistant/components/zwave/.translations/hu.json deleted file mode 100644 index 2842c535984..00000000000 --- a/homeassistant/components/zwave/.translations/hu.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "A Z-Wave m\u00e1r konfigur\u00e1lva van", - "one_instance_only": "Az \u00f6sszetev\u0151 csak egy Z-Wave p\u00e9ld\u00e1nyt t\u00e1mogat" - }, - "error": { - "option_error": "A Z-Wave \u00e9rv\u00e9nyes\u00edt\u00e9s sikertelen. Az USB-meghajt\u00f3 el\u00e9r\u00e9si \u00fatj\u00e1t helyesen adtad meg?" - }, - "step": { - "user": { - "data": { - "network_key": "H\u00e1l\u00f3zati kulcs (hagyja \u00fcresen az automatikus gener\u00e1l\u00e1shoz)", - "usb_path": "USB el\u00e9r\u00e9si \u00fat" - }, - "description": "A konfigur\u00e1ci\u00f3s v\u00e1ltoz\u00f3kr\u00f3l az inform\u00e1ci\u00f3kat l\u00e1sd a https://www.home-assistant.io/docs/z-wave/installation/ oldalon.", - "title": "Z-Wave be\u00e1ll\u00edt\u00e1sa" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/it.json b/homeassistant/components/zwave/.translations/it.json deleted file mode 100644 index c380d8e5625..00000000000 --- a/homeassistant/components/zwave/.translations/it.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave \u00e8 gi\u00e0 configurato", - "one_instance_only": "Il componente supporta solo un'istanza di Z-Wave" - }, - "error": { - "option_error": "Convalida Z-Wave fallita. Il percorso della chiavetta USB \u00e8 corretto?" - }, - "step": { - "user": { - "data": { - "network_key": "Chiave di rete (lascia vuoto per generare automaticamente)", - "usb_path": "Percorso USB" - }, - "description": "Vai su https://www.home-assistant.io/docs/z-wave/installation/ per le informazioni sulle variabili di configurazione", - "title": "Configura Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/ko.json b/homeassistant/components/zwave/.translations/ko.json deleted file mode 100644 index e288019de0c..00000000000 --- a/homeassistant/components/zwave/.translations/ko.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", - "one_instance_only": "\uad6c\uc131\uc694\uc18c\ub294 \ud558\ub098\uc758 Z-Wave \uc778\uc2a4\ud134\uc2a4\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4" - }, - "error": { - "option_error": "Z-Wave \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. USB \uc2a4\ud2f1\uc758 \uacbd\ub85c\uac00 \uc815\ud655\ud569\ub2c8\uae4c?" - }, - "step": { - "user": { - "data": { - "network_key": "\ub124\ud2b8\uc6cc\ud06c \ud0a4 (\uacf5\ub780\uc73c\ub85c \ube44\uc6cc\ub450\uba74 \uc790\ub3d9 \uc0dd\uc131\ud569\ub2c8\ub2e4)", - "usb_path": "USB \uacbd\ub85c" - }, - "description": "\uad6c\uc131 \ubcc0\uc218\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/docs/z-wave/installation/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", - "title": "Z-Wave \uc124\uc815" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/lb.json b/homeassistant/components/zwave/.translations/lb.json deleted file mode 100644 index 84b6d8aa67d..00000000000 --- a/homeassistant/components/zwave/.translations/lb.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave ass scho konfigur\u00e9iert", - "one_instance_only": "Komponent \u00ebnnerst\u00ebtzt n\u00ebmmen eng Z-Wave Instanz" - }, - "error": { - "option_error": "Z-Wave Validatioun net g\u00eblteg. Ass de Pad zum USB Stick richteg?" - }, - "step": { - "user": { - "data": { - "network_key": "Netzwierk Schl\u00ebssel (eidel loossen fir een automatesch z'erstellen)", - "usb_path": "USB Pad" - }, - "description": "Lies op https://www.home-assistant.io/docs/z-wave/installation/ fir weider Informatiounen iwwert d'Konfiguratioun vun den Variabelen", - "title": "Z-Wave konfigur\u00e9ieren" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/nl.json b/homeassistant/components/zwave/.translations/nl.json deleted file mode 100644 index 0b700b895fd..00000000000 --- a/homeassistant/components/zwave/.translations/nl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave is al geconfigureerd", - "one_instance_only": "Component ondersteunt slechts \u00e9\u00e9n Z-Wave-instantie" - }, - "error": { - "option_error": "Z-Wave-validatie mislukt. Is het pad naar de USB-stick correct?" - }, - "step": { - "user": { - "data": { - "network_key": "Netwerksleutel (laat leeg om automatisch te genereren)", - "usb_path": "USB-pad" - }, - "description": "Zie https://www.home-assistant.io/docs/z-wave/installation/ voor informatie over de configuratievariabelen", - "title": "Stel Z-Wave in" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/nn.json b/homeassistant/components/zwave/.translations/nn.json deleted file mode 100644 index 8d1c737170f..00000000000 --- a/homeassistant/components/zwave/.translations/nn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "config": { - "step": { - "user": { - "description": "Sj\u00e5 [www.home-assistant.io/docs/z-wave/installation/](https://www.home-assistant.io/docs/z-wave/installation/) for informasjon om konfigurasjonsvariablene." - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/no.json b/homeassistant/components/zwave/.translations/no.json deleted file mode 100644 index 1d5584a82a0..00000000000 --- a/homeassistant/components/zwave/.translations/no.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave er allerede konfigurert", - "one_instance_only": "Komponenten st\u00f8tter kun en Z-Wave-forekomst" - }, - "error": { - "option_error": "Z-Wave-validering mislyktes. Er banen til USB dongel riktig?" - }, - "step": { - "user": { - "data": { - "network_key": "Nettverksn\u00f8kkel (la v\u00e6re tom for automatisk generering)", - "usb_path": "USB bane" - }, - "description": "Se [www.home-assistant.io/docs/z-wave/installation/](https://www.home-assistant.io/docs/z-wave/installation/) for informasjon om konfigurasjon variablene", - "title": "Sett opp Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/pl.json b/homeassistant/components/zwave/.translations/pl.json deleted file mode 100644 index a985405c009..00000000000 --- a/homeassistant/components/zwave/.translations/pl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave jest ju\u017c skonfigurowany.", - "one_instance_only": "Komponent obs\u0142uguje tylko jedn\u0105 instancj\u0119 Z-Wave" - }, - "error": { - "option_error": "Walidacja Z-Wave nie powiod\u0142a si\u0119. Czy \u015bcie\u017cka do kontrolera Z-Wave USB jest prawid\u0142owa?" - }, - "step": { - "user": { - "data": { - "network_key": "Klucz sieciowy (pozostaw pusty, by generowa\u0107 automatycznie)", - "usb_path": "\u015acie\u017cka do kontrolera Z-Wave USB" - }, - "description": "Przejd\u017a na https://www.home-assistant.io/docs/z-wave/installation/, aby uzyska\u0107 informacje na temat zmiennych konfiguracyjnych", - "title": "Konfiguracja Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/pt-BR.json b/homeassistant/components/zwave/.translations/pt-BR.json deleted file mode 100644 index 2b4b19cde5a..00000000000 --- a/homeassistant/components/zwave/.translations/pt-BR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave j\u00e1 est\u00e1 configurado.", - "one_instance_only": "Componente suporta apenas uma inst\u00e2ncia do Z-Wave" - }, - "error": { - "option_error": "A valida\u00e7\u00e3o Z-Wave falhou. O caminho para o USB est\u00e1 correto?" - }, - "step": { - "user": { - "data": { - "network_key": "Chave de rede (deixe em branco para gerar automaticamente)", - "usb_path": "Caminho do USB" - }, - "description": "Consulte https://www.home-assistant.io/docs/z-wave/installation/ para obter informa\u00e7\u00f5es sobre as vari\u00e1veis de configura\u00e7\u00e3o", - "title": "Configurar o Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/pt.json b/homeassistant/components/zwave/.translations/pt.json deleted file mode 100644 index 23c653d02fc..00000000000 --- a/homeassistant/components/zwave/.translations/pt.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "O Z-Wave j\u00e1 est\u00e1 configurado", - "one_instance_only": "Componente suporta apenas uma inst\u00e2ncia Z-Wave" - }, - "error": { - "option_error": "A valida\u00e7\u00e3o Z-Wave falhou. O caminho para o dispositivo USB est\u00e1 correto?" - }, - "step": { - "user": { - "data": { - "network_key": "Network Key (deixe em branco para auto-gera\u00e7\u00e3o)", - "usb_path": "Endere\u00e7o USB" - }, - "description": "Consulte https://www.home-assistant.io/docs/z-wave/installation/ para obter informa\u00e7\u00f5es sobre as vari\u00e1veis de configura\u00e7\u00e3o", - "title": "Configurar o Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/ro.json b/homeassistant/components/zwave/.translations/ro.json deleted file mode 100644 index 6920f56cdb1..00000000000 --- a/homeassistant/components/zwave/.translations/ro.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave este deja configurat", - "one_instance_only": "Componenta accept\u0103 numai o instan\u021b\u0103 Z-Wave" - }, - "error": { - "option_error": "Validarea Z-Wave a e\u0219uat. Este corect\u0103 calea c\u0103tre stick-ul USB?" - }, - "step": { - "user": { - "data": { - "network_key": "Cheie de re\u021bea (l\u0103sa\u021bi necompletat pentru a genera automat)", - "usb_path": "Cale USB" - }, - "description": "Vede\u021bi https://www.home-assistant.io/docs/z-wave/installation/ pentru informa\u021bii despre variabilele de configurare", - "title": "Configura\u021bi Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/ru.json b/homeassistant/components/zwave/.translations/ru.json deleted file mode 100644 index a1039c2dedc..00000000000 --- a/homeassistant/components/zwave/.translations/ru.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", - "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c Z-Wave." - }, - "error": { - "option_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 Z-Wave. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0443\u0442\u044c \u043a USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." - }, - "step": { - "user": { - "data": { - "network_key": "\u041a\u043b\u044e\u0447 \u0441\u0435\u0442\u0438 (\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438)", - "usb_path": "\u041f\u0443\u0442\u044c \u043a USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" - }, - "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/docs/z-wave/installation/) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.", - "title": "Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/sl.json b/homeassistant/components/zwave/.translations/sl.json deleted file mode 100644 index fa799d1ed36..00000000000 --- a/homeassistant/components/zwave/.translations/sl.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave je \u017ee konfiguriran", - "one_instance_only": "Komponente podpirajo le eno Z-Wave instanco" - }, - "error": { - "option_error": "Potrjevanje Z-Wave ni uspelo. Ali je pot do USB klju\u010da pravilna?" - }, - "step": { - "user": { - "data": { - "network_key": "Omre\u017eni klju\u010d (pustite prazno za samodejno generiranje)", - "usb_path": "USB Pot" - }, - "description": "Za informacije o konfiguracijskih spremenljivka si oglejte https://www.home-assistant.io/docs/z-wave/installation/", - "title": "Nastavite Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/sv.json b/homeassistant/components/zwave/.translations/sv.json deleted file mode 100644 index 508652a1784..00000000000 --- a/homeassistant/components/zwave/.translations/sv.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave \u00e4r redan konfigurerat", - "one_instance_only": "Komponenten st\u00f6der endast en Z-Wave-instans" - }, - "error": { - "option_error": "Z-Wave-valideringen misslyckades. \u00c4r s\u00f6kv\u00e4gen till USB-minnet korrekt?" - }, - "step": { - "user": { - "data": { - "network_key": "N\u00e4tverksnyckel (l\u00e4mna blank f\u00f6r automatisk generering)", - "usb_path": "USB-s\u00f6kv\u00e4g" - }, - "description": "Se https://www.home-assistant.io/docs/z-wave/installation/ f\u00f6r information om konfigurationsvariabler", - "title": "St\u00e4lla in Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/tr.json b/homeassistant/components/zwave/.translations/tr.json deleted file mode 100644 index c9762784d52..00000000000 --- a/homeassistant/components/zwave/.translations/tr.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "config": { - "step": { - "user": { - "data": { - "network_key": "A\u011f Anajtar\u0131 (otomatik \u00fcretilmesi i\u00e7in bo\u015f b\u0131rak\u0131n\u0131z)" - } - } - } - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/zh-Hans.json b/homeassistant/components/zwave/.translations/zh-Hans.json deleted file mode 100644 index 2c72ce72c60..00000000000 --- a/homeassistant/components/zwave/.translations/zh-Hans.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave \u5df2\u914d\u7f6e\u5b8c\u6210", - "one_instance_only": "\u7ec4\u4ef6\u53ea\u652f\u6301\u4e00\u4e2a Z-Wave \u5b9e\u4f8b" - }, - "error": { - "option_error": "Z-Wave \u9a8c\u8bc1\u5931\u8d25\u3002 USB \u68d2\u7684\u8def\u5f84\u662f\u5426\u6b63\u786e\uff1f" - }, - "step": { - "user": { - "data": { - "network_key": "\u7f51\u7edc\u5bc6\u94a5\uff08\u7559\u7a7a\u5c06\u81ea\u52a8\u751f\u6210\uff09", - "usb_path": "USB \u8def\u5f84" - }, - "description": "\u6709\u5173\u914d\u7f6e\u7684\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 https://www.home-assistant.io/docs/z-wave/installation/", - "title": "\u8bbe\u7f6e Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/.translations/zh-Hant.json b/homeassistant/components/zwave/.translations/zh-Hant.json deleted file mode 100644 index 2a84e8b3fd6..00000000000 --- a/homeassistant/components/zwave/.translations/zh-Hant.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "config": { - "abort": { - "already_configured": "Z-Wave \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", - "one_instance_only": "\u7d44\u4ef6\u50c5\u652f\u63f4\u4e00\u7d44 Z-Wave \u7269\u4ef6" - }, - "error": { - "option_error": "Z-Wave \u9a57\u8b49\u5931\u6557\uff0c\u8acb\u78ba\u5b9a USB \u96a8\u8eab\u789f\u8def\u5f91\u6b63\u78ba\uff1f" - }, - "step": { - "user": { - "data": { - "network_key": "\u7db2\u8def\u5bc6\u9470\uff08\u4fdd\u7559\u7a7a\u767d\u5c07\u6703\u81ea\u52d5\u7522\u751f\uff09", - "usb_path": "USB \u8def\u5f91" - }, - "description": "\u95dc\u65bc\u8a2d\u5b9a\u8b8a\u6578\u8cc7\u8a0a\uff0c\u8acb\u53c3\u95b1 https://www.home-assistant.io/docs/z-wave/installation/", - "title": "\u8a2d\u5b9a Z-Wave" - } - }, - "title": "Z-Wave" - } -} \ No newline at end of file diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 1491c10777f..f8149782db6 100644 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -1,4 +1,5 @@ """Support for Z-Wave.""" +# pylint: disable=import-outside-toplevel import asyncio import copy from importlib import import_module @@ -260,7 +261,7 @@ def _obj_to_dict(obj): def _value_name(value): """Return the name of the value.""" - return "{} {}".format(node_name(value.node), value.label).strip() + return f"{node_name(value.node)} {value.label}".strip() def nice_print_node(node): @@ -296,7 +297,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= if discovery_info is None or DATA_NETWORK not in hass.data: return False - device = hass.data[DATA_DEVICES].get(discovery_info[const.DISCOVERY_DEVICE], None) + device = hass.data[DATA_DEVICES].get(discovery_info[const.DISCOVERY_DEVICE]) if device is None: return False @@ -825,9 +826,7 @@ async def async_setup_entry(hass, config_entry): ) return _LOGGER.info( - "Node %s on instance %s does not have resettable meters.", - node_id, - instance, + "Node %s on instance %s does not have resettable meters.", node_id, instance ) def heal_node(service): @@ -1208,7 +1207,6 @@ class ZWaveDeviceEntity(ZWaveBaseEntity): def value_added(self): """Handle a new value of this entity.""" - pass def value_changed(self): """Handle a changed value for this entity's node.""" @@ -1234,7 +1232,7 @@ class ZWaveDeviceEntity(ZWaveBaseEntity): ent_reg.async_update_entity(self.entity_id, new_entity_id=new_entity_id) return # else for the above two ifs, update if not using update_entity - self.async_schedule_update_ha_state() + self.async_write_ha_state() async def async_added_to_hass(self): """Add device to dict.""" @@ -1262,7 +1260,6 @@ class ZWaveDeviceEntity(ZWaveBaseEntity): def update_properties(self): """Update on data changes for node values.""" - pass @property def should_poll(self): diff --git a/homeassistant/components/zwave/config_flow.py b/homeassistant/components/zwave/config_flow.py index b570e31c128..cff197b7e97 100644 --- a/homeassistant/components/zwave/config_flow.py +++ b/homeassistant/components/zwave/config_flow.py @@ -1,4 +1,5 @@ """Config flow to configure Z-Wave.""" +# pylint: disable=import-outside-toplevel from collections import OrderedDict import logging @@ -65,7 +66,7 @@ class ZwaveFlowHandler(config_entries.ConfigFlow): # Generate a random key from random import choice - key = str() + key = "" for i in range(16): key += "0x" key += choice("1234567890ABCDEF") diff --git a/homeassistant/components/zwave/lock.py b/homeassistant/components/zwave/lock.py index 382d2c4dbf2..0bbcf9815c6 100644 --- a/homeassistant/components/zwave/lock.py +++ b/homeassistant/components/zwave/lock.py @@ -337,21 +337,20 @@ class ZwaveLock(ZWaveDeviceEntity, LockDevice): ) if alarm_type == 21: - self._lock_status = "{}{}".format( - LOCK_ALARM_TYPE.get(str(alarm_type)), - MANUAL_LOCK_ALARM_LEVEL.get(str(alarm_level)), + self._lock_status = ( + f"{LOCK_ALARM_TYPE.get(str(alarm_type))}" + f"{MANUAL_LOCK_ALARM_LEVEL.get(str(alarm_level))}" ) return if str(alarm_type) in ALARM_TYPE_STD: - self._lock_status = "{}{}".format( - LOCK_ALARM_TYPE.get(str(alarm_type)), str(alarm_level) - ) + self._lock_status = f"{LOCK_ALARM_TYPE.get(str(alarm_type))}{alarm_level}" return if alarm_type == 161: - self._lock_status = "{}{}".format( - LOCK_ALARM_TYPE.get(str(alarm_type)), - TAMPER_ALARM_LEVEL.get(str(alarm_level)), + self._lock_status = ( + f"{LOCK_ALARM_TYPE.get(str(alarm_type))}" + f"{TAMPER_ALARM_LEVEL.get(str(alarm_level))}" ) + return if alarm_type != 0: self._lock_status = LOCK_ALARM_TYPE.get(str(alarm_type)) diff --git a/homeassistant/components/zwave/manifest.json b/homeassistant/components/zwave/manifest.json index 72d61b278dd..5fda2eac7c3 100644 --- a/homeassistant/components/zwave/manifest.json +++ b/homeassistant/components/zwave/manifest.json @@ -4,6 +4,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/zwave", "requirements": ["homeassistant-pyozw==0.1.10", "pydispatcher==2.0.5"], - "dependencies": [], "codeowners": ["@home-assistant/z-wave"] } diff --git a/homeassistant/components/zwave/node_entity.py b/homeassistant/components/zwave/node_entity.py index 3b94991312a..a9a4bf22b8b 100644 --- a/homeassistant/components/zwave/node_entity.py +++ b/homeassistant/components/zwave/node_entity.py @@ -1,4 +1,5 @@ """Entity class that represents Z-Wave node.""" +# pylint: disable=import-outside-toplevel from itertools import count import logging @@ -87,7 +88,7 @@ class ZWaveBaseEntity(Entity): @callback def do_update(): """Really update.""" - self.hass.async_add_job(self.async_update_ha_state) + self.async_write_ha_state() self._update_scheduled = False self._update_scheduled = True @@ -273,7 +274,7 @@ class ZWaveNodeEntity(ZWaveBaseEntity): ent_reg.async_update_entity(self.entity_id, new_entity_id=new_entity_id) return # else for the above two ifs, update if not using update_entity - self.async_schedule_update_ha_state() + self.async_write_ha_state() def network_node_event(self, node, value): """Handle a node activated event on the network.""" diff --git a/homeassistant/components/zwave/sensor.py b/homeassistant/components/zwave/sensor.py index b732e3569ed..b551e436352 100644 --- a/homeassistant/components/zwave/sensor.py +++ b/homeassistant/components/zwave/sensor.py @@ -105,8 +105,6 @@ class ZWaveAlarmSensor(ZWaveSensor): COMMAND_CLASS_ALARM is what we get here. """ - pass - class ZWaveBatterySensor(ZWaveSensor): """Representation of Z-Wave device battery level.""" diff --git a/homeassistant/components/zwave/services.yaml b/homeassistant/components/zwave/services.yaml index d908941fb92..b4a5db58986 100644 --- a/homeassistant/components/zwave/services.yaml +++ b/homeassistant/components/zwave/services.yaml @@ -31,14 +31,14 @@ heal_network: fields: return_routes: description: Whether or not to update the return routes from the nodes to the controller. Defaults to False. - example: True + example: true heal_node: description: Start a Z-Wave node heal. Refer to OZW_Log.txt for progress. fields: return_routes: description: Whether or not to update the return routes from the node to the controller. Defaults to False. - example: True + example: true remove_node: description: Remove a node from the Z-Wave network. Refer to OZW_Log.txt for progress. @@ -100,7 +100,6 @@ set_poll_intensity: description: The intensity to poll, 0 = disabled, 1 = Every time through list, 2 = Every second time through list... example: 2 - print_config_parameter: description: Prints a Z-Wave node config parameter value to log. fields: @@ -120,7 +119,7 @@ refresh_entity: fields: entity_id: description: Name of the entity to refresh. - example: 'light.leviton_vrmx11lz_multilevel_scene_switch_level_40' + example: "light.leviton_vrmx11lz_multilevel_scene_switch_level_40" refresh_node: description: Refresh zwave node. @@ -153,7 +152,7 @@ test_node: description: This will send test messages to a node in the Z-Wave network. This could bring back dead nodes. fields: node_id: - description: ID of the node to send test messages to. + description: ID of the node to send test messages to. example: 10 messages: description: Optional. Amount of test messages to send. @@ -167,10 +166,10 @@ rename_node: example: 10 update_ids: description: (optional) Rename the entity IDs for entities of this node. - example: True + example: true name: description: New Name - example: 'kitchen' + example: "kitchen" rename_value: description: Set the name of a node value. This will affect the ID of the value entity. Value IDs can be queried from /api/zwave/values/{node_id} @@ -183,10 +182,10 @@ rename_value: example: 72037594255792737 update_ids: description: (optional) Update the entity ID for this value's entity. - example: True + example: true name: description: New Name - example: 'Luminosity' + example: "Luminosity" reset_node_meters: description: Resets the meter counters of a node. diff --git a/homeassistant/components/zwave/strings.json b/homeassistant/components/zwave/strings.json index 0ac55e46791..3c62a89dc25 100644 --- a/homeassistant/components/zwave/strings.json +++ b/homeassistant/components/zwave/strings.json @@ -1,22 +1,33 @@ { - "config": { - "title": "Z-Wave", - "step": { - "user": { - "title": "Set up Z-Wave", - "description": "See https://www.home-assistant.io/docs/z-wave/installation/ for information on the configuration variables", - "data": { - "usb_path": "USB Path", - "network_key": "Network Key (leave blank to auto-generate)" - } - } - }, - "error": { - "option_error": "Z-Wave validation failed. Is the path to the USB stick correct?" - }, - "abort": { - "already_configured": "Z-Wave is already configured", - "one_instance_only": "Component only supports one Z-Wave instance" + "config": { + "step": { + "user": { + "title": "Set up Z-Wave", + "description": "See https://www.home-assistant.io/docs/z-wave/installation/ for information on the configuration variables", + "data": { + "usb_path": "USB Path", + "network_key": "Network Key (leave blank to auto-generate)" } + } + }, + "error": { + "option_error": "Z-Wave validation failed. Is the path to the USB stick correct?" + }, + "abort": { + "already_configured": "Z-Wave is already configured", + "one_instance_only": "Component only supports one Z-Wave instance" } -} \ No newline at end of file + }, + "state": { + "query_stage": { + "initializing": "[%key:component::zwave::state::_::initializing%]", + "dead": "[%key:component::zwave::state::_::dead%]" + }, + "_": { + "initializing": "Initializing", + "dead": "Dead", + "sleeping": "Sleeping", + "ready": "Ready" + } + } +} diff --git a/homeassistant/components/zwave/translations/af.json b/homeassistant/components/zwave/translations/af.json new file mode 100644 index 00000000000..155960b3884 --- /dev/null +++ b/homeassistant/components/zwave/translations/af.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Dood", + "initializing": "Inisialiseer", + "ready": "Gereed", + "sleeping": "Aan die slaap" + }, + "query_stage": { + "dead": "Dood ({query_stage})", + "initializing": "Inisialiseer ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ar.json b/homeassistant/components/zwave/translations/ar.json new file mode 100644 index 00000000000..5dc1469d468 --- /dev/null +++ b/homeassistant/components/zwave/translations/ar.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0645\u0641\u0635\u0648\u0644", + "initializing": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621", + "ready": "\u062c\u0627\u0647\u0632", + "sleeping": "\u0646\u0627\u0626\u0645" + }, + "query_stage": { + "dead": "\u0645\u0641\u0635\u0648\u0644 ({query_stage})", + "initializing": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621 ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/bg.json b/homeassistant/components/zwave/translations/bg.json new file mode 100644 index 00000000000..e1ce9e37a70 --- /dev/null +++ b/homeassistant/components/zwave/translations/bg.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d", + "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0441\u0430\u043c\u043e \u0435\u0434\u0438\u043d Z-Wave \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440." + }, + "error": { + "option_error": "\u0412\u0430\u043b\u0438\u0434\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 Z-Wave \u043d\u0435 \u0431\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u043b\u0438 \u0435 \u043f\u044a\u0442\u044f\u0442 \u043a\u044a\u043c USB \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e?" + }, + "step": { + "user": { + "data": { + "network_key": "\u041c\u0440\u0435\u0436\u043e\u0432 \u043a\u043b\u044e\u0447 (\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043f\u0440\u0430\u0437\u043d\u043e \u0437\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435)", + "usb_path": "USB \u043f\u044a\u0442" + }, + "description": "\u0412\u0438\u0436\u0442\u0435 https://www.home-assistant.io/docs/z-wave/installation/ \u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u043d\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "\u041c\u044a\u0440\u0442\u044a\u0432", + "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f", + "ready": "\u0413\u043e\u0442\u043e\u0432", + "sleeping": "\u0421\u043f\u044f\u0449" + }, + "query_stage": { + "dead": "\u041c\u044a\u0440\u0442\u044a\u0432 ({query_stage})", + "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/bs.json b/homeassistant/components/zwave/translations/bs.json new file mode 100644 index 00000000000..8d58bad5606 --- /dev/null +++ b/homeassistant/components/zwave/translations/bs.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Mrtav", + "initializing": "Inicijalizacija", + "ready": "Spreman", + "sleeping": "Spava" + }, + "query_stage": { + "dead": "Mrtav ({query_stage})", + "initializing": "Inicijalizacija ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ca.json b/homeassistant/components/zwave/translations/ca.json new file mode 100644 index 00000000000..27f543a44c7 --- /dev/null +++ b/homeassistant/components/zwave/translations/ca.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave ja est\u00e0 configurat", + "one_instance_only": "El component nom\u00e9s admet una inst\u00e0ncia de Z-Wave" + }, + "error": { + "option_error": "Ha fallat la validaci\u00f3 de Z-Wave. \u00c9s correcta la ruta al port USB on hi ha connectat el dispositiu?" + }, + "step": { + "user": { + "data": { + "network_key": "Clau de xarxa (deixa-ho en blanc per generar-la autom\u00e0ticament)", + "usb_path": "Ruta del port USB" + }, + "description": "Consulta https://www.home-assistant.io/docs/z-wave/installation/ per obtenir informaci\u00f3 sobre les variables de configuraci\u00f3", + "title": "Configuraci\u00f3 de Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "No disponible", + "initializing": "Inicialitzant", + "ready": "A punt", + "sleeping": "Dormint" + }, + "query_stage": { + "dead": "No disponible", + "initializing": "Inicialitzant" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/cs.json b/homeassistant/components/zwave/translations/cs.json new file mode 100644 index 00000000000..858edb1b0dc --- /dev/null +++ b/homeassistant/components/zwave/translations/cs.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave je ji\u017e nakonfigurov\u00e1no", + "one_instance_only": "Komponenta podporuje pouze jednu instanci Z-Wave" + }, + "error": { + "option_error": "Z-Wave ov\u011b\u0159en\u00ed se nezda\u0159ilo. Je cesta k USB za\u0159\u00edzen\u00ed spr\u00e1vn\u011b?" + }, + "step": { + "user": { + "data": { + "network_key": "S\u00ed\u0165ov\u00fd kl\u00ed\u010d (ponechte pr\u00e1zdn\u00e9 pro automatick\u00e9 generov\u00e1n\u00ed)", + "usb_path": "Cesta k USB" + }, + "description": "Viz https://www.home-assistant.io/docs/z-wave/installation/ pro informace o konfigura\u010dn\u00edch prom\u011bnn\u00fdch", + "title": "Nastavit Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Nereaguje", + "initializing": "Inicializace", + "ready": "P\u0159ipraveno", + "sleeping": "\u00dasporn\u00fd re\u017eim" + }, + "query_stage": { + "dead": "Nereaguje ({query_stage})", + "initializing": "Inicializace ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/cy.json b/homeassistant/components/zwave/translations/cy.json new file mode 100644 index 00000000000..43860e1c1fd --- /dev/null +++ b/homeassistant/components/zwave/translations/cy.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Marw", + "initializing": "Ymgychwyn", + "ready": "Barod", + "sleeping": "Cysgu" + }, + "query_stage": { + "dead": "Marw ({query_stage})", + "initializing": "Ymgychwyn ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/da.json b/homeassistant/components/zwave/translations/da.json new file mode 100644 index 00000000000..233b8250991 --- /dev/null +++ b/homeassistant/components/zwave/translations/da.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave er allerede konfigureret", + "one_instance_only": "Komponenten underst\u00f8tter kun \u00e9n Z-Wave-instans" + }, + "error": { + "option_error": "Z-Wave-validering mislykkedes. Er stien til USB-enhed korrekt?" + }, + "step": { + "user": { + "data": { + "network_key": "Netv\u00e6rksn\u00f8gle (efterlad blank for autogenerering)", + "usb_path": "Sti til USB-enhed" + }, + "description": "Se https://www.home-assistant.io/docs/z-wave/installation/ for oplysninger om konfigurationsvariabler", + "title": "Ops\u00e6t Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "D\u00f8d", + "initializing": "Initialiserer", + "ready": "Klar", + "sleeping": "Sover" + }, + "query_stage": { + "dead": "D\u00f8d ({query_stage})", + "initializing": "Initialiserer ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/de.json b/homeassistant/components/zwave/translations/de.json new file mode 100644 index 00000000000..2c2850c1fd5 --- /dev/null +++ b/homeassistant/components/zwave/translations/de.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave ist bereits konfiguriert", + "one_instance_only": "Komponente unterst\u00fctzt nur eine Z-Wave-Instanz" + }, + "error": { + "option_error": "Z-Wave-Validierung fehlgeschlagen. Ist der Pfad zum USB-Stick korrekt?" + }, + "step": { + "user": { + "data": { + "network_key": "Netzwerkschl\u00fcssel (leer lassen, um automatisch zu generieren)", + "usb_path": "USB-Pfad" + }, + "description": "Informationen zu den Konfigurationsvariablen findest du unter https://www.home-assistant.io/docs/z-wave/installation/", + "title": "Z-Wave einrichten" + } + } + }, + "state": { + "_": { + "dead": "Nicht erreichbar", + "initializing": "Initialisierend", + "ready": "Bereit", + "sleeping": "Schlafend" + }, + "query_stage": { + "dead": "Nicht erreichbar ({query_stage})", + "initializing": "Initialisiere ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/el.json b/homeassistant/components/zwave/translations/el.json new file mode 100644 index 00000000000..b047ad7158a --- /dev/null +++ b/homeassistant/components/zwave/translations/el.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u039d\u03b5\u03ba\u03c1\u03cc", + "initializing": "\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", + "ready": "\u0388\u03c4\u03bf\u03b9\u03bc\u03bf", + "sleeping": "\u039a\u03bf\u03b9\u03bc\u03ac\u03c4\u03b1\u03b9" + }, + "query_stage": { + "dead": "\u039d\u03b5\u03ba\u03c1\u03cc ( {query_stage} )", + "initializing": "\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/en.json b/homeassistant/components/zwave/translations/en.json new file mode 100644 index 00000000000..f277e1e4c68 --- /dev/null +++ b/homeassistant/components/zwave/translations/en.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave is already configured", + "one_instance_only": "Component only supports one Z-Wave instance" + }, + "error": { + "option_error": "Z-Wave validation failed. Is the path to the USB stick correct?" + }, + "step": { + "user": { + "data": { + "network_key": "Network Key (leave blank to auto-generate)", + "usb_path": "USB Path" + }, + "description": "See https://www.home-assistant.io/docs/z-wave/installation/ for information on the configuration variables", + "title": "Set up Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Dead", + "initializing": "Initializing", + "ready": "Ready", + "sleeping": "Sleeping" + }, + "query_stage": { + "dead": "Dead", + "initializing": "Initializing" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/es-419.json b/homeassistant/components/zwave/translations/es-419.json new file mode 100644 index 00000000000..e4cb16af6c4 --- /dev/null +++ b/homeassistant/components/zwave/translations/es-419.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave ya est\u00e1 configurado", + "one_instance_only": "El componente solo admite una instancia de Z-Wave" + }, + "error": { + "option_error": "La validaci\u00f3n de Z-Wave fall\u00f3. \u00bfEs correcta la ruta a la memoria USB?" + }, + "step": { + "user": { + "data": { + "network_key": "Clave de red (dejar en blanco para auto-generar)", + "usb_path": "Ruta USB" + }, + "description": "Consulte https://www.home-assistant.io/docs/z-wave/installation/ para obtener informaci\u00f3n sobre las variables de configuraci\u00f3n", + "title": "Configurar Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Desconectado", + "initializing": "Iniciando", + "ready": "Listo", + "sleeping": "Hibernacion" + }, + "query_stage": { + "dead": "Desconectado ({query_stage})", + "initializing": "Iniciando ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/es.json b/homeassistant/components/zwave/translations/es.json new file mode 100644 index 00000000000..0588ab6076b --- /dev/null +++ b/homeassistant/components/zwave/translations/es.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave ya est\u00e1 configurado", + "one_instance_only": "El componente solo admite una instancia de Z-Wave" + }, + "error": { + "option_error": "Z-Wave error de validaci\u00f3n. \u00bfLa ruta de acceso a la memoria USB escorrecta?" + }, + "step": { + "user": { + "data": { + "network_key": "Clave de red (d\u00e9jelo en blanco para generar autom\u00e1ticamente)", + "usb_path": "Ruta USB" + }, + "description": "Consulta https://www.home-assistant.io/docs/z-wave/installation/ para obtener informaci\u00f3n sobre las variables de configuraci\u00f3n", + "title": "Configurar Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "No responde", + "initializing": "Inicializando", + "ready": "Listo", + "sleeping": "Ahorro de energ\u00eda" + }, + "query_stage": { + "dead": "No responde", + "initializing": "Inicializando" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/et.json b/homeassistant/components/zwave/translations/et.json new file mode 100644 index 00000000000..e33b5e32827 --- /dev/null +++ b/homeassistant/components/zwave/translations/et.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Surnud", + "initializing": "L\u00e4htestan", + "ready": "Valmis", + "sleeping": "Ootel" + }, + "query_stage": { + "dead": "Surnud ({query_stage})", + "initializing": "L\u00e4htestan ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/eu.json b/homeassistant/components/zwave/translations/eu.json new file mode 100644 index 00000000000..ceab4ed0d98 --- /dev/null +++ b/homeassistant/components/zwave/translations/eu.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Hilda", + "initializing": "Hasieratzen", + "ready": "Prest", + "sleeping": "Lotan" + }, + "query_stage": { + "dead": "Ez du erantzuten ({query_stage})", + "initializing": "Hasieratzen ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/fa.json b/homeassistant/components/zwave/translations/fa.json new file mode 100644 index 00000000000..21d9a0c0fb7 --- /dev/null +++ b/homeassistant/components/zwave/translations/fa.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0645\u0631\u062f\u0647", + "initializing": "\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646", + "ready": "\u0622\u0645\u0627\u062f\u0647", + "sleeping": "\u062f\u0631 \u062d\u0627\u0644 \u062e\u0648\u0627\u0628" + }, + "query_stage": { + "dead": "\u0645\u0631\u062f\u0647 ({query_stage})", + "initializing": "\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646 ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/fi.json b/homeassistant/components/zwave/translations/fi.json new file mode 100644 index 00000000000..fde97739c63 --- /dev/null +++ b/homeassistant/components/zwave/translations/fi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Kuollut", + "initializing": "Alustaa", + "ready": "Valmis", + "sleeping": "Lepotilassa" + }, + "query_stage": { + "dead": "Kuollut ({query_stage})", + "initializing": "Alustaa ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/fr.json b/homeassistant/components/zwave/translations/fr.json new file mode 100644 index 00000000000..ccd5db34d3c --- /dev/null +++ b/homeassistant/components/zwave/translations/fr.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave est d\u00e9j\u00e0 configur\u00e9", + "one_instance_only": "Le composant ne prend en charge qu'une seule instance Z-Wave" + }, + "error": { + "option_error": "La validation Z-Wave a \u00e9chou\u00e9. Le chemin d'acc\u00e8s \u00e0 la cl\u00e9 USB est-il correct?" + }, + "step": { + "user": { + "data": { + "network_key": "Cl\u00e9 r\u00e9seau (laisser vide pour g\u00e9n\u00e9rer automatiquement)", + "usb_path": "Chemin USB" + }, + "description": "Voir https://www.home-assistant.io/docs/z-wave/installation/ pour plus d'informations sur les variables de configuration.", + "title": "Configurer Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Morte", + "initializing": "Initialisation", + "ready": "Pr\u00eat", + "sleeping": "En veille" + }, + "query_stage": { + "dead": "Morte ( {query_stage} )", + "initializing": "Initialisation ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/gsw.json b/homeassistant/components/zwave/translations/gsw.json new file mode 100644 index 00000000000..fb704e97c7d --- /dev/null +++ b/homeassistant/components/zwave/translations/gsw.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Tod", + "initializing": "Inizialisi\u00e4r\u00e4", + "ready": "Parat", + "sleeping": "Schlaf\u00e4" + }, + "query_stage": { + "dead": "Tod ({query_stage})", + "initializing": "Inizialisi\u00e4r\u00e4 ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/he.json b/homeassistant/components/zwave/translations/he.json new file mode 100644 index 00000000000..4ed45b0711f --- /dev/null +++ b/homeassistant/components/zwave/translations/he.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u05de\u05ea", + "initializing": "\u05de\u05d0\u05ea\u05d7\u05dc", + "ready": "\u05de\u05d5\u05db\u05df", + "sleeping": "\u05d9\u05e9\u05df" + }, + "query_stage": { + "dead": "\u05de\u05ea ({query_stage})", + "initializing": "\u05de\u05d0\u05ea\u05d7\u05dc ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/hi.json b/homeassistant/components/zwave/translations/hi.json new file mode 100644 index 00000000000..99e98c4aa9f --- /dev/null +++ b/homeassistant/components/zwave/translations/hi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u092e\u0943\u0924", + "initializing": "\u0906\u0930\u0902\u092d", + "ready": "\u0924\u0948\u092f\u093e\u0930", + "sleeping": "\u0938\u094b\u092f\u093e \u0939\u0941\u0906" + }, + "query_stage": { + "dead": " ( {query_stage} )", + "initializing": "\u0906\u0930\u0902\u092d ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/hr.json b/homeassistant/components/zwave/translations/hr.json new file mode 100644 index 00000000000..dbff348b761 --- /dev/null +++ b/homeassistant/components/zwave/translations/hr.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Mrtav", + "initializing": "Inicijalizacija", + "ready": "Spreman", + "sleeping": "Spavanje" + }, + "query_stage": { + "dead": "Mrtav ({query_stage})", + "initializing": "Inicijalizacija ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/hu.json b/homeassistant/components/zwave/translations/hu.json new file mode 100644 index 00000000000..72026949c78 --- /dev/null +++ b/homeassistant/components/zwave/translations/hu.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "A Z-Wave m\u00e1r konfigur\u00e1lva van", + "one_instance_only": "Az \u00f6sszetev\u0151 csak egy Z-Wave p\u00e9ld\u00e1nyt t\u00e1mogat" + }, + "error": { + "option_error": "A Z-Wave \u00e9rv\u00e9nyes\u00edt\u00e9s sikertelen. Az USB-meghajt\u00f3 el\u00e9r\u00e9si \u00fatj\u00e1t helyesen adtad meg?" + }, + "step": { + "user": { + "data": { + "network_key": "H\u00e1l\u00f3zati kulcs (hagyja \u00fcresen az automatikus gener\u00e1l\u00e1shoz)", + "usb_path": "USB el\u00e9r\u00e9si \u00fat" + }, + "description": "A konfigur\u00e1ci\u00f3s v\u00e1ltoz\u00f3kr\u00f3l az inform\u00e1ci\u00f3kat l\u00e1sd a https://www.home-assistant.io/docs/z-wave/installation/ oldalon.", + "title": "Z-Wave be\u00e1ll\u00edt\u00e1sa" + } + } + }, + "state": { + "_": { + "dead": "Halott", + "initializing": "Inicializ\u00e1l\u00e1s", + "ready": "K\u00e9sz", + "sleeping": "Alv\u00e1s" + }, + "query_stage": { + "dead": "Halott", + "initializing": "Inicializ\u00e1l\u00e1s" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/hy.json b/homeassistant/components/zwave/translations/hy.json new file mode 100644 index 00000000000..c4fa19f700a --- /dev/null +++ b/homeassistant/components/zwave/translations/hy.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0544\u0565\u057c\u0561\u056e", + "initializing": "\u0546\u0561\u056d\u0561\u0571\u0565\u057c\u0576\u0578\u0572", + "ready": "\u054a\u0561\u057f\u0580\u0561\u057d\u057f \u0567", + "sleeping": "\u0554\u0576\u0565\u056c" + }, + "query_stage": { + "dead": "\u0544\u0561\u0570\u0561\u0581\u0561\u056e{query_stage})", + "initializing": "\u0546\u0561\u056d\u0561\u0571\u0565\u057c\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/id.json b/homeassistant/components/zwave/translations/id.json new file mode 100644 index 00000000000..76c9c148b1e --- /dev/null +++ b/homeassistant/components/zwave/translations/id.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Mati", + "initializing": "Inisialisasi", + "ready": "Siap", + "sleeping": "Tidur" + }, + "query_stage": { + "dead": "Mati ({query_stage})", + "initializing": "Inisialisasi ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/is.json b/homeassistant/components/zwave/translations/is.json new file mode 100644 index 00000000000..bb54fd48425 --- /dev/null +++ b/homeassistant/components/zwave/translations/is.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Dau\u00f0ur", + "initializing": "Frumstilli", + "ready": "Tilb\u00fainn", + "sleeping": "\u00cd dvala" + }, + "query_stage": { + "dead": "Dau\u00f0ur ({query_stage})", + "initializing": "Frumstilli ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/it.json b/homeassistant/components/zwave/translations/it.json new file mode 100644 index 00000000000..e8e3b78a25e --- /dev/null +++ b/homeassistant/components/zwave/translations/it.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave \u00e8 gi\u00e0 configurato", + "one_instance_only": "Il componente supporta solo un'istanza di Z-Wave" + }, + "error": { + "option_error": "Convalida Z-Wave fallita. Il percorso della chiavetta USB \u00e8 corretto?" + }, + "step": { + "user": { + "data": { + "network_key": "Chiave di rete (lascia vuoto per generare automaticamente)", + "usb_path": "Percorso USB" + }, + "description": "Vai su https://www.home-assistant.io/docs/z-wave/installation/ per le informazioni sulle variabili di configurazione", + "title": "Configura Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Disattivo", + "initializing": "Avvio", + "ready": "Pronto", + "sleeping": "In attesa" + }, + "query_stage": { + "dead": "Disattivo ({query_stage})", + "initializing": "Avvio ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ja.json b/homeassistant/components/zwave/translations/ja.json new file mode 100644 index 00000000000..3106439dc92 --- /dev/null +++ b/homeassistant/components/zwave/translations/ja.json @@ -0,0 +1,13 @@ +{ + "state": { + "_": { + "initializing": "\u521d\u671f\u5316\u4e2d", + "ready": "\u6e96\u5099\u5b8c\u4e86", + "sleeping": "\u30b9\u30ea\u30fc\u30d7" + }, + "query_stage": { + "dead": " ({query_stage})", + "initializing": "\u521d\u671f\u5316\u4e2d ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ko.json b/homeassistant/components/zwave/translations/ko.json new file mode 100644 index 00000000000..a30e2b40b9f --- /dev/null +++ b/homeassistant/components/zwave/translations/ko.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "one_instance_only": "\uad6c\uc131\uc694\uc18c\ub294 \ud558\ub098\uc758 Z-Wave \uc778\uc2a4\ud134\uc2a4\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4" + }, + "error": { + "option_error": "Z-Wave \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4. USB \uc2a4\ud2f1\uc758 \uacbd\ub85c\uac00 \uc815\ud655\ud569\ub2c8\uae4c?" + }, + "step": { + "user": { + "data": { + "network_key": "\ub124\ud2b8\uc6cc\ud06c \ud0a4 (\uacf5\ub780\uc73c\ub85c \ube44\uc6cc\ub450\uba74 \uc790\ub3d9 \uc0dd\uc131\ud569\ub2c8\ub2e4)", + "usb_path": "USB \uacbd\ub85c" + }, + "description": "\uad6c\uc131 \ubcc0\uc218\uc5d0 \ub300\ud55c \uc815\ubcf4\ub294 [\uc548\ub0b4](https://www.home-assistant.io/docs/z-wave/installation/) \ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694", + "title": "Z-Wave \uc124\uc815" + } + } + }, + "state": { + "_": { + "dead": "\uc751\ub2f5\uc5c6\uc74c", + "initializing": "\ucd08\uae30\ud654\uc911", + "ready": "\uc900\ube44", + "sleeping": "\uc808\uc804\ubaa8\ub4dc" + }, + "query_stage": { + "dead": "\uc751\ub2f5\uc5c6\uc74c ({query_stage})", + "initializing": "\ucd08\uae30\ud654\uc911 ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/lb.json b/homeassistant/components/zwave/translations/lb.json new file mode 100644 index 00000000000..7abe764c2a1 --- /dev/null +++ b/homeassistant/components/zwave/translations/lb.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave ass scho konfigur\u00e9iert", + "one_instance_only": "Komponent \u00ebnnerst\u00ebtzt n\u00ebmmen eng Z-Wave Instanz" + }, + "error": { + "option_error": "Z-Wave Validatioun net g\u00eblteg. Ass de Pad zum USB Stick richteg?" + }, + "step": { + "user": { + "data": { + "network_key": "Netzwierk Schl\u00ebssel (eidel loossen fir een automatesch z'erstellen)", + "usb_path": "USB Pad" + }, + "description": "Lies op https://www.home-assistant.io/docs/z-wave/installation/ fir weider Informatiounen iwwert d'Konfiguratioun vun den Variabelen", + "title": "Z-Wave konfigur\u00e9ieren" + } + } + }, + "state": { + "_": { + "dead": "Doud", + "initializing": "Initialis\u00e9iert", + "ready": "Bereet", + "sleeping": "Schl\u00e9ift" + }, + "query_stage": { + "dead": "Doud", + "initializing": "Initialis\u00e9iert" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/lt.json b/homeassistant/components/zwave/translations/lt.json new file mode 100644 index 00000000000..a390b260a03 --- /dev/null +++ b/homeassistant/components/zwave/translations/lt.json @@ -0,0 +1,8 @@ +{ + "state": { + "query_stage": { + "dead": " ({query_stage})", + "initializing": " ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/lv.json b/homeassistant/components/zwave/translations/lv.json new file mode 100644 index 00000000000..d759c7a9213 --- /dev/null +++ b/homeassistant/components/zwave/translations/lv.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Beigta", + "initializing": "Inicializ\u0113", + "ready": "Gatavs", + "sleeping": "Gu\u013c" + }, + "query_stage": { + "dead": "Beigta ({query_stage})", + "initializing": "Inicializ\u0113 ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/nb.json b/homeassistant/components/zwave/translations/nb.json new file mode 100644 index 00000000000..9dcd1e82788 --- /dev/null +++ b/homeassistant/components/zwave/translations/nb.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "D\u00f8d", + "initializing": "Initialiserer", + "ready": "Klar", + "sleeping": "Sover" + }, + "query_stage": { + "dead": "D\u00f8d ({query_stage})", + "initializing": "Initialiserer ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/nl.json b/homeassistant/components/zwave/translations/nl.json new file mode 100644 index 00000000000..dc3513a3c71 --- /dev/null +++ b/homeassistant/components/zwave/translations/nl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave is al geconfigureerd", + "one_instance_only": "Component ondersteunt slechts \u00e9\u00e9n Z-Wave-instantie" + }, + "error": { + "option_error": "Z-Wave-validatie mislukt. Is het pad naar de USB-stick correct?" + }, + "step": { + "user": { + "data": { + "network_key": "Netwerksleutel (laat leeg om automatisch te genereren)", + "usb_path": "USB-pad" + }, + "description": "Zie https://www.home-assistant.io/docs/z-wave/installation/ voor informatie over de configuratievariabelen", + "title": "Stel Z-Wave in" + } + } + }, + "state": { + "_": { + "dead": "Onbereikbaar", + "initializing": "Initialiseren", + "ready": "Gereed", + "sleeping": "Slaapt" + }, + "query_stage": { + "dead": "Onbereikbaar ({query_stage})", + "initializing": "Initialiseren ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/nn.json b/homeassistant/components/zwave/translations/nn.json new file mode 100644 index 00000000000..76ff6120d81 --- /dev/null +++ b/homeassistant/components/zwave/translations/nn.json @@ -0,0 +1,21 @@ +{ + "config": { + "step": { + "user": { + "description": "Sj\u00e5 [www.home-assistant.io/docs/z-wave/installation/](https://www.home-assistant.io/docs/z-wave/installation/) for informasjon om konfigurasjonsvariablene." + } + } + }, + "state": { + "_": { + "dead": "D\u00f8d", + "initializing": "Initialiserer", + "ready": "Klar", + "sleeping": "S\u00f8v" + }, + "query_stage": { + "dead": "D\u00f8d ({query_stage})", + "initializing": "Initialiserer ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/no.json b/homeassistant/components/zwave/translations/no.json new file mode 100644 index 00000000000..1a214262feb --- /dev/null +++ b/homeassistant/components/zwave/translations/no.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave er allerede konfigurert", + "one_instance_only": "Komponenten st\u00f8tter kun en Z-Wave-forekomst" + }, + "error": { + "option_error": "Z-Wave-validering mislyktes. Er banen til USB dongel riktig?" + }, + "step": { + "user": { + "data": { + "network_key": "Nettverksn\u00f8kkel (la v\u00e6re tom for automatisk generering)", + "usb_path": "USB bane" + }, + "description": "Se [www.home-assistant.io/docs/z-wave/installation/](https://www.home-assistant.io/docs/z-wave/installation/) for informasjon om konfigurasjon variablene", + "title": "Sett opp Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "D\u00f8d", + "initializing": "Initialiserer", + "ready": "Klar", + "sleeping": "Sover" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/pl.json b/homeassistant/components/zwave/translations/pl.json new file mode 100644 index 00000000000..dd7ae5aead9 --- /dev/null +++ b/homeassistant/components/zwave/translations/pl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave jest ju\u017c skonfigurowany.", + "one_instance_only": "Komponent obs\u0142uguje tylko jedn\u0105 instancj\u0119 Z-Wave" + }, + "error": { + "option_error": "Walidacja Z-Wave nie powiod\u0142a si\u0119. Czy \u015bcie\u017cka do kontrolera Z-Wave USB jest prawid\u0142owa?" + }, + "step": { + "user": { + "data": { + "network_key": "Klucz sieciowy (pozostaw pusty, by generowa\u0107 automatycznie)", + "usb_path": "\u015acie\u017cka do kontrolera Z-Wave USB" + }, + "description": "Przejd\u017a na https://www.home-assistant.io/docs/z-wave/installation/, aby uzyska\u0107 informacje na temat zmiennych konfiguracyjnych", + "title": "Konfiguracja Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "martwy", + "initializing": "inicjalizacja", + "ready": "gotowy", + "sleeping": "u\u015bpiony" + }, + "query_stage": { + "dead": "martwy", + "initializing": "inicjalizacja" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/pt-BR.json b/homeassistant/components/zwave/translations/pt-BR.json new file mode 100644 index 00000000000..5bd0ef9d1a8 --- /dev/null +++ b/homeassistant/components/zwave/translations/pt-BR.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave j\u00e1 est\u00e1 configurado.", + "one_instance_only": "Componente suporta apenas uma inst\u00e2ncia do Z-Wave" + }, + "error": { + "option_error": "A valida\u00e7\u00e3o Z-Wave falhou. O caminho para o USB est\u00e1 correto?" + }, + "step": { + "user": { + "data": { + "network_key": "Chave de rede (deixe em branco para gerar automaticamente)", + "usb_path": "Caminho do USB" + }, + "description": "Consulte https://www.home-assistant.io/docs/z-wave/installation/ para obter informa\u00e7\u00f5es sobre as vari\u00e1veis de configura\u00e7\u00e3o", + "title": "Configurar o Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Morto", + "initializing": "Iniciando", + "ready": "Pronto", + "sleeping": "Dormindo" + }, + "query_stage": { + "dead": "Morto ({query_stage})", + "initializing": "Iniciando ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/pt.json b/homeassistant/components/zwave/translations/pt.json new file mode 100644 index 00000000000..b216bfa0984 --- /dev/null +++ b/homeassistant/components/zwave/translations/pt.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "O Z-Wave j\u00e1 est\u00e1 configurado", + "one_instance_only": "Componente suporta apenas uma inst\u00e2ncia Z-Wave" + }, + "error": { + "option_error": "A valida\u00e7\u00e3o Z-Wave falhou. O caminho para o dispositivo USB est\u00e1 correto?" + }, + "step": { + "user": { + "data": { + "network_key": "Network Key (deixe em branco para auto-gera\u00e7\u00e3o)", + "usb_path": "Endere\u00e7o USB" + }, + "description": "Consulte https://www.home-assistant.io/docs/z-wave/installation/ para obter informa\u00e7\u00f5es sobre as vari\u00e1veis de configura\u00e7\u00e3o", + "title": "Configurar o Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Morto", + "initializing": "A inicializar", + "ready": "Pronto", + "sleeping": "Adormecido" + }, + "query_stage": { + "dead": "Morto ({query_stage})", + "initializing": "A inicializar ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ro.json b/homeassistant/components/zwave/translations/ro.json new file mode 100644 index 00000000000..1ba9ba80bf9 --- /dev/null +++ b/homeassistant/components/zwave/translations/ro.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave este deja configurat", + "one_instance_only": "Componenta accept\u0103 numai o instan\u021b\u0103 Z-Wave" + }, + "error": { + "option_error": "Validarea Z-Wave a e\u0219uat. Este corect\u0103 calea c\u0103tre stick-ul USB?" + }, + "step": { + "user": { + "data": { + "network_key": "Cheie de re\u021bea (l\u0103sa\u021bi necompletat pentru a genera automat)", + "usb_path": "Cale USB" + }, + "description": "Vede\u021bi https://www.home-assistant.io/docs/z-wave/installation/ pentru informa\u021bii despre variabilele de configurare", + "title": "Configura\u021bi Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Inactiv", + "initializing": "Se ini\u021bializeaz\u0103", + "ready": "Disponibil", + "sleeping": "Adormit" + }, + "query_stage": { + "dead": "Inactiv ({query_stage})", + "initializing": "Se ini\u021bializeaz\u0103 ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ru.json b/homeassistant/components/zwave/translations/ru.json new file mode 100644 index 00000000000..72255110b6a --- /dev/null +++ b/homeassistant/components/zwave/translations/ru.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.", + "one_instance_only": "\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c Z-Wave." + }, + "error": { + "option_error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 Z-Wave. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0443\u0442\u044c \u043a USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." + }, + "step": { + "user": { + "data": { + "network_key": "\u041a\u043b\u044e\u0447 \u0441\u0435\u0442\u0438 (\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438)", + "usb_path": "\u041f\u0443\u0442\u044c \u043a USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + }, + "description": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/docs/z-wave/installation/) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.", + "title": "Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "\u041d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e", + "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f", + "ready": "\u0413\u043e\u0442\u043e\u0432", + "sleeping": "\u0420\u0435\u0436\u0438\u043c \u0441\u043d\u0430" + }, + "query_stage": { + "dead": "\u041d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e", + "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/sk.json b/homeassistant/components/zwave/translations/sk.json new file mode 100644 index 00000000000..f53db0f9721 --- /dev/null +++ b/homeassistant/components/zwave/translations/sk.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "Nereaguje", + "initializing": "Inicializ\u00e1cia", + "ready": "Pripraven\u00e9", + "sleeping": "\u00dasporn\u00fd re\u017eim" + }, + "query_stage": { + "dead": "Nereaguje ({query_stage})", + "initializing": "Inicializ\u00e1cia ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/sl.json b/homeassistant/components/zwave/translations/sl.json new file mode 100644 index 00000000000..5ea01ecbb3b --- /dev/null +++ b/homeassistant/components/zwave/translations/sl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave je \u017ee konfiguriran", + "one_instance_only": "Komponente podpirajo le eno Z-Wave instanco" + }, + "error": { + "option_error": "Potrjevanje Z-Wave ni uspelo. Ali je pot do USB klju\u010da pravilna?" + }, + "step": { + "user": { + "data": { + "network_key": "Omre\u017eni klju\u010d (pustite prazno za samodejno generiranje)", + "usb_path": "USB Pot" + }, + "description": "Za informacije o konfiguracijskih spremenljivka si oglejte https://www.home-assistant.io/docs/z-wave/installation/", + "title": "Nastavite Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "Mrtev", + "initializing": "Inicializacija", + "ready": "Pripravljen", + "sleeping": "Spanje" + }, + "query_stage": { + "dead": "Mrtev ({query_stage})", + "initializing": "Inicializacija ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/sr-Latn.json b/homeassistant/components/zwave/translations/sr-Latn.json new file mode 100644 index 00000000000..a390b260a03 --- /dev/null +++ b/homeassistant/components/zwave/translations/sr-Latn.json @@ -0,0 +1,8 @@ +{ + "state": { + "query_stage": { + "dead": " ({query_stage})", + "initializing": " ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/sr.json b/homeassistant/components/zwave/translations/sr.json new file mode 100644 index 00000000000..00727fbb694 --- /dev/null +++ b/homeassistant/components/zwave/translations/sr.json @@ -0,0 +1,11 @@ +{ + "state": { + "_": { + "ready": "Spreman" + }, + "query_stage": { + "dead": " ({query_stage})", + "initializing": " ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/sv.json b/homeassistant/components/zwave/translations/sv.json new file mode 100644 index 00000000000..0f8d7b4c614 --- /dev/null +++ b/homeassistant/components/zwave/translations/sv.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave \u00e4r redan konfigurerat", + "one_instance_only": "Komponenten st\u00f6der endast en Z-Wave-instans" + }, + "error": { + "option_error": "Z-Wave-valideringen misslyckades. \u00c4r s\u00f6kv\u00e4gen till USB-minnet korrekt?" + }, + "step": { + "user": { + "data": { + "network_key": "N\u00e4tverksnyckel (l\u00e4mna blank f\u00f6r automatisk generering)", + "usb_path": "USB-s\u00f6kv\u00e4g" + }, + "description": "Se https://www.home-assistant.io/docs/z-wave/installation/ f\u00f6r information om konfigurationsvariabler", + "title": "St\u00e4lla in Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "D\u00f6d", + "initializing": "Initierar", + "ready": "Redo", + "sleeping": "Sovande" + }, + "query_stage": { + "dead": "D\u00f6d ({query_stage})", + "initializing": "Initierar ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/ta.json b/homeassistant/components/zwave/translations/ta.json new file mode 100644 index 00000000000..9b4fa65530c --- /dev/null +++ b/homeassistant/components/zwave/translations/ta.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0b87\u0bb1\u0ba8\u0bcd\u0ba4\u0bc1\u0bb5\u0bbf\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "initializing": "\u0ba4\u0bc1\u0bb5\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1", + "ready": "\u0ba4\u0baf\u0bbe\u0bb0\u0bcd", + "sleeping": "\u0ba4\u0bc2\u0b99\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba4\u0bc1" + }, + "query_stage": { + "dead": "\u0b87\u0bb1\u0ba8\u0bcd\u0ba4\u0bc1\u0bb5\u0bbf\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 ({query_stage})", + "initializing": "\u0ba4\u0bc1\u0bb5\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1 ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/te.json b/homeassistant/components/zwave/translations/te.json new file mode 100644 index 00000000000..88e4eac6961 --- /dev/null +++ b/homeassistant/components/zwave/translations/te.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0c2e\u0c43\u0c24 \u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c02", + "initializing": "\u0c38\u0c3f\u0c26\u0c4d\u0c27\u0c02 \u0c05\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f", + "ready": "\u0c30\u0c46\u0c21\u0c40", + "sleeping": "\u0c28\u0c3f\u0c26\u0c4d\u0c30\u0c3f\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f" + }, + "query_stage": { + "dead": "\u0c2e\u0c43\u0c24 \u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c02 ({query_stage})", + "initializing": "\u0c38\u0c3f\u0c26\u0c4d\u0c27\u0c02 \u0c05\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/th.json b/homeassistant/components/zwave/translations/th.json new file mode 100644 index 00000000000..51db4f5b2e1 --- /dev/null +++ b/homeassistant/components/zwave/translations/th.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0e44\u0e21\u0e48\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "initializing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19", + "ready": "\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19", + "sleeping": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2b\u0e25\u0e31\u0e1a" + }, + "query_stage": { + "dead": "\u0e44\u0e21\u0e48\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 ({query_stage})", + "initializing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19 ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/tr.json b/homeassistant/components/zwave/translations/tr.json new file mode 100644 index 00000000000..3a007d1db61 --- /dev/null +++ b/homeassistant/components/zwave/translations/tr.json @@ -0,0 +1,23 @@ +{ + "config": { + "step": { + "user": { + "data": { + "network_key": "A\u011f Anajtar\u0131 (otomatik \u00fcretilmesi i\u00e7in bo\u015f b\u0131rak\u0131n\u0131z)" + } + } + } + }, + "state": { + "_": { + "dead": "\u00d6l\u00fc", + "initializing": "Ba\u015flat\u0131l\u0131yor", + "ready": "Haz\u0131r", + "sleeping": "Uyuyor" + }, + "query_stage": { + "dead": "\u00d6l\u00fc ({query_stage})", + "initializing": "Ba\u015flat\u0131l\u0131yor ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/uk.json b/homeassistant/components/zwave/translations/uk.json new file mode 100644 index 00000000000..d00986cae58 --- /dev/null +++ b/homeassistant/components/zwave/translations/uk.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u041d\u0435\u0440\u043e\u0431\u043e\u0447\u0430", + "initializing": "\u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f", + "ready": "\u0413\u043e\u0442\u043e\u0432\u0438\u0439", + "sleeping": "\u0421\u043f\u043b\u044f\u0447\u043a\u0430" + }, + "query_stage": { + "dead": "\u041d\u0435\u0440\u043e\u0431\u043e\u0447\u0430 ({query_stage})", + "initializing": "\u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/vi.json b/homeassistant/components/zwave/translations/vi.json new file mode 100644 index 00000000000..4055e09a8df --- /dev/null +++ b/homeassistant/components/zwave/translations/vi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "dead": "\u0110\u00e3 t\u1eaft", + "initializing": "Kh\u1edfi t\u1ea1o", + "ready": "S\u1eb5n s\u00e0ng", + "sleeping": "Ng\u1ee7" + }, + "query_stage": { + "dead": "\u0110\u00e3 t\u1eaft ({query_stage})", + "initializing": "Kh\u1edfi t\u1ea1o ( {query_stage} )" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/zh-Hans.json b/homeassistant/components/zwave/translations/zh-Hans.json new file mode 100644 index 00000000000..9236b7de146 --- /dev/null +++ b/homeassistant/components/zwave/translations/zh-Hans.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave \u5df2\u914d\u7f6e\u5b8c\u6210", + "one_instance_only": "\u7ec4\u4ef6\u53ea\u652f\u6301\u4e00\u4e2a Z-Wave \u5b9e\u4f8b" + }, + "error": { + "option_error": "Z-Wave \u9a8c\u8bc1\u5931\u8d25\u3002 USB \u68d2\u7684\u8def\u5f84\u662f\u5426\u6b63\u786e\uff1f" + }, + "step": { + "user": { + "data": { + "network_key": "\u7f51\u7edc\u5bc6\u94a5\uff08\u7559\u7a7a\u5c06\u81ea\u52a8\u751f\u6210\uff09", + "usb_path": "USB \u8def\u5f84" + }, + "description": "\u6709\u5173\u914d\u7f6e\u7684\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 https://www.home-assistant.io/docs/z-wave/installation/", + "title": "\u8bbe\u7f6e Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "\u65ad\u5f00", + "initializing": "\u521d\u59cb\u5316", + "ready": "\u5c31\u7eea", + "sleeping": "\u4f11\u7720" + }, + "query_stage": { + "dead": "\u65ad\u5f00 ({query_stage})", + "initializing": "\u521d\u59cb\u5316 ({query_stage})" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/zh-Hant.json b/homeassistant/components/zwave/translations/zh-Hant.json new file mode 100644 index 00000000000..b8e8f00177a --- /dev/null +++ b/homeassistant/components/zwave/translations/zh-Hant.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "Z-Wave \u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210", + "one_instance_only": "\u7d44\u4ef6\u50c5\u652f\u63f4\u4e00\u7d44 Z-Wave \u7269\u4ef6" + }, + "error": { + "option_error": "Z-Wave \u9a57\u8b49\u5931\u6557\uff0c\u8acb\u78ba\u5b9a USB \u96a8\u8eab\u789f\u8def\u5f91\u6b63\u78ba\uff1f" + }, + "step": { + "user": { + "data": { + "network_key": "\u7db2\u8def\u5bc6\u9470\uff08\u4fdd\u7559\u7a7a\u767d\u5c07\u6703\u81ea\u52d5\u7522\u751f\uff09", + "usb_path": "USB \u8def\u5f91" + }, + "description": "\u95dc\u65bc\u8a2d\u5b9a\u8b8a\u6578\u8cc7\u8a0a\uff0c\u8acb\u53c3\u95b1 https://www.home-assistant.io/docs/z-wave/installation/", + "title": "\u8a2d\u5b9a Z-Wave" + } + } + }, + "state": { + "_": { + "dead": "\u5931\u53bb\u9023\u7dda", + "initializing": "\u6b63\u5728\u521d\u59cb\u5316", + "ready": "\u6e96\u5099\u5c31\u7dd2", + "sleeping": "\u4f11\u7720\u4e2d" + }, + "query_stage": { + "dead": "\u5931\u53bb\u9023\u7dda", + "initializing": "\u6b63\u5728\u521d\u59cb\u5316" + } + } +} \ No newline at end of file diff --git a/homeassistant/config.py b/homeassistant/config.py index b63acf4ab4c..56bbe76a045 100644 --- a/homeassistant/config.py +++ b/homeassistant/config.py @@ -116,10 +116,9 @@ def _no_duplicate_auth_provider( key = (config[CONF_TYPE], config.get(CONF_ID)) if key in config_keys: raise vol.Invalid( - "Duplicate auth provider {} found. Please add unique IDs if " - "you want to have the same auth provider twice".format( - config[CONF_TYPE] - ) + f"Duplicate auth provider {config[CONF_TYPE]} found. " + "Please add unique IDs " + "if you want to have the same auth provider twice" ) config_keys.add(key) return configs @@ -140,8 +139,9 @@ def _no_duplicate_auth_mfa_module( key = config.get(CONF_ID, config[CONF_TYPE]) if key in config_keys: raise vol.Invalid( - "Duplicate mfa module {} found. Please add unique IDs if " - "you want to have the same mfa module twice".format(config[CONF_TYPE]) + f"Duplicate mfa module {config[CONF_TYPE]} found. " + "Please add unique IDs " + "if you want to have the same mfa module twice" ) config_keys.add(key) return configs @@ -319,8 +319,9 @@ def load_yaml_config_file(config_path: str) -> Dict[Any, Any]: conf_dict = load_yaml(config_path) if not isinstance(conf_dict, dict): - msg = "The configuration file {} does not contain a dictionary".format( - os.path.basename(config_path) + msg = ( + f"The configuration file {os.path.basename(config_path)} " + "does not contain a dictionary" ) _LOGGER.error(msg) raise HomeAssistantError(msg) @@ -339,7 +340,7 @@ def process_ha_config_upgrade(hass: HomeAssistant) -> None: version_path = hass.config.path(VERSION_FILE) try: - with open(version_path, "rt") as inp: + with open(version_path) as inp: conf_version = inp.readline().strip() except FileNotFoundError: # Last version to not have this file @@ -364,7 +365,7 @@ def process_ha_config_upgrade(hass: HomeAssistant) -> None: # 0.92 moved google/tts.py to google_translate/tts.py config_path = hass.config.path(YAML_CONFIG_FILE) - with open(config_path, "rt", encoding="utf-8") as config_file: + with open(config_path, encoding="utf-8") as config_file: config_raw = config_file.read() if TTS_PRE_92 in config_raw: @@ -375,7 +376,6 @@ def process_ha_config_upgrade(hass: HomeAssistant) -> None: config_file.write(config_raw) except OSError: _LOGGER.exception("Migrating to google_translate tts failed") - pass if version_obj < LooseVersion("0.94") and is_docker_env(): # In 0.94 we no longer install packages inside the deps folder when @@ -416,16 +416,13 @@ def _format_config_error( message = f"Invalid config for [{domain}]: " if isinstance(ex, vol.Invalid): if "extra keys not allowed" in ex.error_message: + path = "->".join(str(m) for m in ex.path) message += ( - "[{option}] is an invalid option for [{domain}]. " - "Check: {domain}->{path}.".format( - option=ex.path[-1], - domain=domain, - path="->".join(str(m) for m in ex.path), - ) + f"[{ex.path[-1]}] is an invalid option for [{domain}]. " + f"Check: {domain}->{path}." ) else: - message += "{}.".format(humanize_error(config, ex)) + message += f"{humanize_error(config, ex)}." else: message += str(ex) @@ -434,9 +431,9 @@ def _format_config_error( except AttributeError: domain_config = config - message += " (See {}, line {}). ".format( - getattr(domain_config, "__config_file__", "?"), - getattr(domain_config, "__line__", "?"), + message += ( + f" (See {getattr(domain_config, '__config_file__', '?')}, " + f"line {getattr(domain_config, '__line__', '?')}). " ) if domain != CONF_CORE and link: @@ -473,16 +470,14 @@ async def async_process_ha_core_config(hass: HomeAssistant, config: Dict) -> Non hac = hass.config if any( - [ - k in config - for k in [ - CONF_LATITUDE, - CONF_LONGITUDE, - CONF_NAME, - CONF_ELEVATION, - CONF_TIME_ZONE, - CONF_UNIT_SYSTEM, - ] + k in config + for k in [ + CONF_LATITUDE, + CONF_LONGITUDE, + CONF_NAME, + CONF_ELEVATION, + CONF_TIME_ZONE, + CONF_UNIT_SYSTEM, ] ): hac.config_source = SOURCE_YAML @@ -554,9 +549,9 @@ def _log_pkg_error(package: str, component: str, config: Dict, message: str) -> message = f"Package {package} setup failed. Integration {component} {message}" pack_config = config[CONF_CORE][CONF_PACKAGES].get(package, config) - message += " (See {}:{}). ".format( - getattr(pack_config, "__config_file__", "?"), - getattr(pack_config, "__line__", "?"), + message += ( + f" (See {getattr(pack_config, '__config_file__', '?')}:" + f"{getattr(pack_config, '__line__', '?')}). " ) _LOGGER.error(message) @@ -564,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 @@ -586,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( Optional[str]: This method is a coroutine. """ + # pylint: disable=import-outside-toplevel import homeassistant.helpers.check_config as check_config res = await check_config.async_check_ha_config_file(hass) @@ -833,6 +842,7 @@ def async_notify_setup_error( This method must be run in the event loop. """ + # pylint: disable=import-outside-toplevel from homeassistant.components import persistent_notification errors = hass.data.get(DATA_PERSISTENT_ERRORS) @@ -845,11 +855,7 @@ def async_notify_setup_error( message = "The following integrations and platforms could not be set up:\n\n" for name, link in errors.items(): - if link: - part = f"[{name}]({link})" - else: - part = name - + part = f"[{name}]({link})" if link else name message += f" - {part}\n" message += "\nPlease check your config." diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index 945bd3865c3..d4f76d9bb37 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -870,11 +870,11 @@ class ConfigFlow(data_entry_flow.FlowHandler): def _async_current_ids(self, include_ignore: bool = True) -> Set[Optional[str]]: """Return current unique IDs.""" assert self.hass is not None - return set( + return { entry.unique_id for entry in self.hass.config_entries.async_entries(self.handler) if include_ignore or entry.source != SOURCE_IGNORE - ) + } @callback def _async_in_progress(self) -> List[Dict]: @@ -917,8 +917,7 @@ class OptionsFlowManager(data_entry_flow.FlowManager): if entry.domain not in HANDLERS: raise data_entry_flow.UnknownHandler - flow = cast(OptionsFlow, HANDLERS[entry.domain].async_get_options_flow(entry)) - return flow + return cast(OptionsFlow, HANDLERS[entry.domain].async_get_options_flow(entry)) async def async_finish_flow( self, flow: data_entry_flow.FlowHandler, result: Dict[str, Any] diff --git a/homeassistant/const.py b/homeassistant/const.py index 385f410b7ae..a30c0f0bdc5 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 -MINOR_VERSION = 108 -PATCH_VERSION = "9" +MINOR_VERSION = 109 +PATCH_VERSION = "0" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) @@ -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" @@ -345,13 +346,20 @@ ATTR_TEMPERATURE = "temperature" # Power units POWER_WATT = "W" +# Voltage units +VOLT = "V" + # Energy units -ENERGY_KILO_WATT_HOUR = "kWh" -ENERGY_WATT_HOUR = "Wh" +ENERGY_WATT_HOUR = f"{POWER_WATT}h" +ENERGY_KILO_WATT_HOUR = f"k{ENERGY_WATT_HOUR}" + +# Degree units +DEGREE = "°" # Temperature units -TEMP_CELSIUS = "°C" -TEMP_FAHRENHEIT = "°F" +TEMP_CELSIUS = f"{DEGREE}C" +TEMP_FAHRENHEIT = f"{DEGREE}F" +TEMP_KELVIN = f"{DEGREE}K" # Time units TIME_MICROSECONDS = "μs" @@ -374,6 +382,10 @@ LENGTH_FEET: str = "ft" LENGTH_YARD: str = "yd" LENGTH_MILES: str = "mi" +# Frequency units +FREQUENCY_HERTZ = "Hz" +FREQUENCY_GIGAHERTZ = f"G{FREQUENCY_HERTZ}" + # Pressure units PRESSURE_PA: str = "Pa" PRESSURE_HPA: str = "hPa" @@ -402,11 +414,15 @@ MASS_MICROGRAMS = "µg" MASS_OUNCES: str = "oz" MASS_POUNDS: str = "lb" +# Conductivity units +CONDUCTIVITY: str = f"µS/{LENGTH_CENTIMETERS}" + # UV Index units -UNIT_UV_INDEX: str = "UV index" +UV_INDEX: str = "UV index" # Percentage units UNIT_PERCENTAGE = "%" + # Irradiation units IRRADIATION_WATTS_PER_SQUARE_METER = f"{POWER_WATT}/{AREA_SQUARE_METERS}" @@ -527,6 +543,7 @@ HTTP_CREATED = 201 HTTP_MOVED_PERMANENTLY = 301 HTTP_BAD_REQUEST = 400 HTTP_UNAUTHORIZED = 401 +HTTP_FORBIDDEN = 403 HTTP_NOT_FOUND = 404 HTTP_METHOD_NOT_ALLOWED = 405 HTTP_UNPROCESSABLE_ENTITY = 422 diff --git a/homeassistant/core.py b/homeassistant/core.py index 9265c57bbf3..c799656df89 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -28,6 +28,7 @@ from typing import ( Optional, Set, TypeVar, + Union, ) import uuid @@ -35,7 +36,7 @@ from async_timeout import timeout import attr import voluptuous as vol -from homeassistant import loader, util +from homeassistant import block_async_io, loader, util from homeassistant.const import ( ATTR_DOMAIN, ATTR_FRIENDLY_NAME, @@ -49,12 +50,14 @@ 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, EVENT_STATE_CHANGED, EVENT_TIME_CHANGED, EVENT_TIMER_OUT_OF_SYNC, + LENGTH_METERS, MATCH_ALL, __version__, ) @@ -75,6 +78,9 @@ if TYPE_CHECKING: from homeassistant.config_entries import ConfigEntries from homeassistant.components.http import HomeAssistantHTTP + +block_async_io.enable() + # pylint: disable=invalid-name T = TypeVar("T") CALLABLE_T = TypeVar("CALLABLE_T", bound=Callable) @@ -152,7 +158,7 @@ class CoreState(enum.Enum): starting = "STARTING" running = "RUNNING" stopping = "STOPPING" - writing_data = "WRITING_DATA" + final_write = "FINAL_WRITE" def __str__(self) -> str: """Return the event.""" @@ -230,6 +236,7 @@ class HomeAssistant: await self.async_start() if attach_signals: + # pylint: disable=import-outside-toplevel from homeassistant.helpers.signal import async_register_signal_handling async_register_signal_handling(self) @@ -273,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. @@ -358,7 +366,9 @@ class HomeAssistant: self._track_task = False @callback - def async_run_job(self, target: Callable[..., None], *args: Any) -> None: + def async_run_job( + self, target: Callable[..., Union[None, Awaitable]], *args: Any + ) -> None: """Run a job from within the event loop. This method must be run in the event loop. @@ -414,7 +424,7 @@ class HomeAssistant: # regardless of the state of the loop. if self.state == CoreState.not_running: # just ignore return - if self.state == CoreState.stopping or self.state == CoreState.writing_data: + if self.state == CoreState.stopping or self.state == CoreState.final_write: _LOGGER.info("async_stop called twice: ignored") return if self.state == CoreState.starting: @@ -428,7 +438,7 @@ class HomeAssistant: await self.async_block_till_done() # stage 2 - self.state = CoreState.writing_data + self.state = CoreState.final_write self.bus.async_fire(EVENT_HOMEASSISTANT_FINAL_WRITE) await self.async_block_till_done() @@ -478,7 +488,7 @@ class Event: def __init__( self, event_type: str, - data: Optional[Dict] = None, + data: Optional[Dict[str, Any]] = None, origin: EventOrigin = EventOrigin.local, time_fired: Optional[int] = None, context: Optional[Context] = None, @@ -507,11 +517,9 @@ class Event: """Return the representation.""" # pylint: disable=maybe-no-member if self.data: - return "".format( - self.event_type, str(self.origin)[0], util.repr_helper(self.data) - ) + return f"" - return "".format(self.event_type, str(self.origin)[0]) + return f"" def __eq__(self, other: Any) -> bool: """Return the comparison.""" @@ -544,9 +552,7 @@ class EventBus: @property def listeners(self) -> Dict[str, int]: """Return dictionary with events and the number of listeners.""" - return run_callback_threadsafe( # type: ignore - self._hass.loop, self.async_listeners - ).result() + return run_callback_threadsafe(self._hass.loop, self.async_listeners).result() def fire( self, @@ -824,15 +830,11 @@ class State: def __repr__(self) -> str: """Return the representation of the states.""" - attrs = ( - "; {}".format(util.repr_helper(self.attributes)) if self.attributes else "" - ) + attrs = f"; {util.repr_helper(self.attributes)}" if self.attributes else "" - return "".format( - self.entity_id, - self.state, - attrs, - dt_util.as_local(self.last_changed).isoformat(), + return ( + f"" ) @@ -850,7 +852,7 @@ class StateMachine: future = run_callback_threadsafe( self._loop, self.async_entity_ids, domain_filter ) - return future.result() # type: ignore + return future.result() @callback def async_entity_ids(self, domain_filter: Optional[str] = None) -> List[str]: @@ -871,9 +873,7 @@ class StateMachine: def all(self) -> List[State]: """Create a list of all states.""" - return run_callback_threadsafe( # type: ignore - self._loop, self.async_all - ).result() + return run_callback_threadsafe(self._loop, self.async_all).result() @callback def async_all(self) -> List[State]: @@ -903,7 +903,7 @@ class StateMachine: Returns boolean to indicate if an entity was removed. """ - return run_callback_threadsafe( # type: ignore + return run_callback_threadsafe( self._loop, self.async_remove, entity_id ).result() @@ -1043,8 +1043,9 @@ class ServiceCall: def __repr__(self) -> str: """Return the representation of the service.""" if self.data: - return "".format( - self.domain, self.service, self.context.id, util.repr_helper(self.data) + return ( + f"" ) return f"" @@ -1061,9 +1062,7 @@ class ServiceRegistry: @property def services(self) -> Dict[str, Dict[str, Service]]: """Return dictionary with per domain a list of available services.""" - return run_callback_threadsafe( # type: ignore - self._hass.loop, self.async_services - ).result() + return run_callback_threadsafe(self._hass.loop, self.async_services).result() @callback def async_services(self) -> Dict[str, Dict[str, Service]]: @@ -1223,29 +1222,57 @@ class ServiceRegistry: context=context, ) + coro = self._execute_service(handler, service_call) if not blocking: - self._hass.async_create_task(self._safe_execute(handler, service_call)) + self._run_service_in_background(coro, service_call) return None + task = self._hass.async_create_task(coro) try: - async with timeout(limit): - await asyncio.shield(self._execute_service(handler, service_call)) - return True - except asyncio.TimeoutError: - return False + await asyncio.wait({task}, timeout=limit) + except asyncio.CancelledError: + # Task calling us was cancelled, so cancel service call task, and wait for + # it to be cancelled, within reason, before leaving. + _LOGGER.debug("Service call was cancelled: %s", service_call) + task.cancel() + await asyncio.wait({task}, timeout=SERVICE_CALL_LIMIT) + raise - async def _safe_execute(self, handler: Service, service_call: ServiceCall) -> None: - """Execute a service and catch exceptions.""" - try: - await self._execute_service(handler, service_call) - except Unauthorized: - _LOGGER.warning( - "Unauthorized service called %s/%s", - service_call.domain, - service_call.service, - ) - except Exception: # pylint: disable=broad-except - _LOGGER.exception("Error executing service %s", service_call) + if task.cancelled(): + # Service call task was cancelled some other way, such as during shutdown. + _LOGGER.debug("Service was cancelled: %s", service_call) + raise asyncio.CancelledError + if task.done(): + # Propagate any exceptions that might have happened during service call. + task.result() + # Service call completed successfully! + return True + # Service call task did not complete before timeout expired. + # Let it keep running in background. + self._run_service_in_background(task, service_call) + _LOGGER.debug("Service did not complete before timeout: %s", service_call) + return False + + def _run_service_in_background( + self, coro_or_task: Union[Coroutine, asyncio.Task], service_call: ServiceCall + ) -> None: + """Run service call in background, catching and logging any exceptions.""" + + async def catch_exceptions() -> None: + try: + await coro_or_task + except Unauthorized: + _LOGGER.warning( + "Unauthorized service called %s/%s", + service_call.domain, + service_call.service, + ) + except asyncio.CancelledError: + _LOGGER.debug("Service was cancelled: %s", service_call) + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Error executing service: %s", service_call) + + self._hass.async_create_task(catch_exceptions()) async def _execute_service( self, handler: Service, service_call: ServiceCall @@ -1299,7 +1326,7 @@ class Config: Async friendly. """ return self.units.length( - location.distance(self.latitude, self.longitude, lat, lon), "m" + location.distance(self.latitude, self.longitude, lat, lon), LENGTH_METERS ) def path(self, *path: str) -> str: diff --git a/homeassistant/data_entry_flow.py b/homeassistant/data_entry_flow.py index 4a115762be4..51f083b7eeb 100644 --- a/homeassistant/data_entry_flow.py +++ b/homeassistant/data_entry_flow.py @@ -1,5 +1,6 @@ """Classes to help gather user submissions.""" import abc +import asyncio import logging from typing import Any, Dict, List, Optional, cast import uuid @@ -53,8 +54,18 @@ class FlowManager(abc.ABC): def __init__(self, hass: HomeAssistant,) -> None: """Initialize the flow manager.""" self.hass = hass + self._initializing: Dict[str, List[asyncio.Future]] = {} self._progress: Dict[str, Any] = {} + async def async_wait_init_flow_finish(self, handler: str) -> None: + """Wait till all flows in progress are initialized.""" + current = self._initializing.get(handler) + + if not current: + return + + await asyncio.wait(current) + @abc.abstractmethod async def async_create_flow( self, @@ -67,20 +78,17 @@ class FlowManager(abc.ABC): Handler key is the domain of the component that we want to set up. """ - pass @abc.abstractmethod async def async_finish_flow( self, flow: "FlowHandler", result: Dict[str, Any] ) -> Dict[str, Any]: """Finish a config flow and add an entry.""" - pass async def async_post_init( self, flow: "FlowHandler", result: Dict[str, Any] ) -> None: """Entry has finished executing its first step asynchronously.""" - pass @callback def async_progress(self) -> List[Dict]: @@ -97,8 +105,13 @@ class FlowManager(abc.ABC): """Start a configuration flow.""" if context is None: context = {} + + init_done: asyncio.Future = asyncio.Future() + self._initializing.setdefault(handler, []).append(init_done) + flow = await self.async_create_flow(handler, context=context, data=data) if not flow: + self._initializing[handler].remove(init_done) raise UnknownFlow("Flow was not created") flow.hass = self.hass flow.handler = handler @@ -106,7 +119,12 @@ class FlowManager(abc.ABC): flow.context = context self._progress[flow.flow_id] = flow - result = await self._async_handle_step(flow, flow.init_step, data) + try: + result = await self._async_handle_step( + flow, flow.init_step, data, init_done + ) + finally: + self._initializing[handler].remove(init_done) if result["type"] != RESULT_TYPE_ABORT: await self.async_post_init(flow, result) @@ -157,13 +175,19 @@ class FlowManager(abc.ABC): raise UnknownFlow async def _async_handle_step( - self, flow: Any, step_id: str, user_input: Optional[Dict] + self, + flow: Any, + step_id: str, + user_input: Optional[Dict], + step_done: Optional[asyncio.Future] = None, ) -> Dict: """Handle a step of a flow.""" method = f"async_step_{step_id}" if not hasattr(flow, method): self._progress.pop(flow.flow_id) + if step_done: + step_done.set_result(None) raise UnknownStep( f"Handler {flow.__class__.__name__} doesn't support step {step_id}" ) @@ -175,6 +199,13 @@ class FlowManager(abc.ABC): flow.flow_id, flow.handler, err.reason, err.description_placeholders ) + # Mark the step as done. + # We do this before calling async_finish_flow because config entries will hit a + # circular dependency where async_finish_flow sets up new entry, which needs the + # integration to be set up, which is waiting for init to be done. + if step_done: + step_done.set_result(None) + if result["type"] not in ( RESULT_TYPE_FORM, RESULT_TYPE_EXTERNAL_STEP, @@ -182,9 +213,7 @@ class FlowManager(abc.ABC): RESULT_TYPE_ABORT, RESULT_TYPE_EXTERNAL_STEP_DONE, ): - raise ValueError( - "Handler returned incorrect type: {}".format(result["type"]) - ) + raise ValueError(f"Handler returned incorrect type: {result['type']}") if result["type"] in ( RESULT_TYPE_FORM, diff --git a/homeassistant/generated/config_flows.py b/homeassistant/generated/config_flows.py index dd0342a06a3..e17aefac636 100644 --- a/homeassistant/generated/config_flows.py +++ b/homeassistant/generated/config_flows.py @@ -13,8 +13,10 @@ FLOWS = [ "almond", "ambiclimate", "ambient_station", + "atag", "august", "axis", + "braviatv", "brother", "cast", "cert_expiry", @@ -31,7 +33,10 @@ FLOWS = [ "elkm1", "emulated_roku", "esphome", + "flume", + "flunearyou", "freebox", + "fritzbox", "garmin_connect", "gdacs", "geofency", @@ -56,6 +61,7 @@ FLOWS = [ "ipma", "ipp", "iqvia", + "islamic_prayer_times", "izone", "konnected", "life360", @@ -82,9 +88,11 @@ FLOWS = [ "notion", "nuheat", "nut", + "nws", "opentherm_gw", "openuv", "owntracks", + "panasonic_viera", "plaato", "plex", "point", @@ -95,6 +103,7 @@ FLOWS = [ "rainmachine", "ring", "roku", + "roomba", "samsungtv", "sense", "sentry", @@ -109,9 +118,12 @@ FLOWS = [ "sonos", "spotify", "starline", + "synology_dsm", + "tado", "tellduslive", "tesla", "toon", + "totalconnect", "tplink", "traccar", "tradfri", @@ -121,6 +133,7 @@ FLOWS = [ "unifi", "upnp", "velbus", + "vera", "vesync", "vilfo", "vizio", diff --git a/homeassistant/generated/ssdp.py b/homeassistant/generated/ssdp.py index c9832ea2d86..5dbef37d9bf 100644 --- a/homeassistant/generated/ssdp.py +++ b/homeassistant/generated/ssdp.py @@ -17,6 +17,11 @@ SSDP = { "manufacturer": "DIRECTV" } ], + "fritzbox": [ + { + "st": "urn:schemas-upnp-org:device:fritzbox:1" + } + ], "harmony": [ { "deviceType": "urn:myharmony-com:device:harmony:1", @@ -70,6 +75,12 @@ SSDP = { "st": "urn:schemas-upnp-org:device:ZonePlayer:1" } ], + "synology_dsm": [ + { + "deviceType": "urn:schemas-upnp-org:device:Basic:1", + "manufacturer": "Synology" + } + ], "wemo": [ { "manufacturer": "Belkin International Inc." diff --git a/homeassistant/generated/zeroconf.py b/homeassistant/generated/zeroconf.py index 46b3a9943f8..d6e4965c235 100644 --- a/homeassistant/generated/zeroconf.py +++ b/homeassistant/generated/zeroconf.py @@ -47,12 +47,15 @@ ZEROCONF = { HOMEKIT = { "819LMB": "myq", + "AC02": "tado", "BSB002": "hue", + "Healty Home Coach": "netatmo", "LIFX": "lifx", "Netatmo Relay": "netatmo", "Presence": "netatmo", "Rachio": "rachio", "TRADFRI": "tradfri", "Welcome": "netatmo", - "Wemo": "wemo" + "Wemo": "wemo", + "tado": "tado" } diff --git a/homeassistant/helpers/check_config.py b/homeassistant/helpers/check_config.py index 0beeb4da4e8..d876748e8d1 100644 --- a/homeassistant/helpers/check_config.py +++ b/homeassistant/helpers/check_config.py @@ -107,7 +107,7 @@ async def async_check_ha_config_file(hass: HomeAssistant) -> HomeAssistantConfig core_config.pop(CONF_PACKAGES, None) # Filter out repeating config sections - components = set(key.split(" ")[0] for key in config.keys()) + components = {key.split(" ")[0] for key in config.keys()} # Process and validate config for domain in components: diff --git a/homeassistant/helpers/condition.py b/homeassistant/helpers/condition.py index 3500a3a4e3d..363d33b14ea 100644 --- a/homeassistant/helpers/condition.py +++ b/homeassistant/helpers/condition.py @@ -146,19 +146,16 @@ def numeric_state( variables: TemplateVarsType = None, ) -> bool: """Test a numeric state condition.""" - return cast( - bool, - run_callback_threadsafe( - hass.loop, - async_numeric_state, - hass, - entity, - below, - above, - value_template, - variables, - ).result(), - ) + return run_callback_threadsafe( + hass.loop, + async_numeric_state, + hass, + entity, + below, + above, + value_template, + variables, + ).result() def async_numeric_state( @@ -353,12 +350,9 @@ def template( hass: HomeAssistant, value_template: Template, variables: TemplateVarsType = None ) -> bool: """Test if template condition matches.""" - return cast( - bool, - run_callback_threadsafe( - hass.loop, async_template, hass, value_template, variables - ).result(), - ) + return run_callback_threadsafe( + hass.loop, async_template, hass, value_template, variables + ).result() def async_template( diff --git a/homeassistant/helpers/config_entry_oauth2_flow.py b/homeassistant/helpers/config_entry_oauth2_flow.py index 0ae91ad5591..0c5a5c3873e 100644 --- a/homeassistant/helpers/config_entry_oauth2_flow.py +++ b/homeassistant/helpers/config_entry_oauth2_flow.py @@ -369,7 +369,7 @@ class OAuth2AuthorizeCallbackView(HomeAssistantView): state = _decode_jwt(hass, request.query["state"]) if state is None: - return web.Response(text=f"Invalid state") + return web.Response(text="Invalid state") await hass.config_entries.flow.async_configure( flow_id=state["flow_id"], user_input=request.query["code"] diff --git a/homeassistant/helpers/data_entry_flow.py b/homeassistant/helpers/data_entry_flow.py index 05f49cd9f53..951b6d4c748 100644 --- a/homeassistant/helpers/data_entry_flow.py +++ b/homeassistant/helpers/data_entry_flow.py @@ -5,6 +5,7 @@ import voluptuous as vol from homeassistant import config_entries, data_entry_flow from homeassistant.components.http import HomeAssistantView from homeassistant.components.http.data_validator import RequestDataValidator +from homeassistant.const import HTTP_NOT_FOUND import homeassistant.helpers.config_validation as cv # mypy: allow-untyped-calls, allow-untyped-defs @@ -29,7 +30,7 @@ class _BaseFlowManagerView(HomeAssistantView): if result["type"] != data_entry_flow.RESULT_TYPE_FORM: return result - import voluptuous_serialize + import voluptuous_serialize # pylint: disable=import-outside-toplevel data = result.copy() @@ -62,7 +63,7 @@ class FlowManagerIndexView(_BaseFlowManagerView): handler, context={"source": config_entries.SOURCE_USER} ) except data_entry_flow.UnknownHandler: - return self.json_message("Invalid handler specified", 404) + return self.json_message("Invalid handler specified", HTTP_NOT_FOUND) except data_entry_flow.UnknownStep: return self.json_message("Handler does not support user", 400) @@ -79,7 +80,7 @@ class FlowManagerResourceView(_BaseFlowManagerView): try: result = await self._flow_mgr.async_configure(flow_id) except data_entry_flow.UnknownFlow: - return self.json_message("Invalid flow specified", 404) + return self.json_message("Invalid flow specified", HTTP_NOT_FOUND) result = self._prepare_result_json(result) @@ -91,7 +92,7 @@ class FlowManagerResourceView(_BaseFlowManagerView): try: result = await self._flow_mgr.async_configure(flow_id, data) except data_entry_flow.UnknownFlow: - return self.json_message("Invalid flow specified", 404) + return self.json_message("Invalid flow specified", HTTP_NOT_FOUND) except vol.Invalid: return self.json_message("User input malformed", 400) @@ -104,6 +105,6 @@ class FlowManagerResourceView(_BaseFlowManagerView): try: self._flow_mgr.async_abort(flow_id) except data_entry_flow.UnknownFlow: - return self.json_message("Invalid flow specified", 404) + return self.json_message("Invalid flow specified", HTTP_NOT_FOUND) return self.json_message("Flow aborted") diff --git a/homeassistant/helpers/device_registry.py b/homeassistant/helpers/device_registry.py index 6d9574c3bbd..ef85ac953f6 100644 --- a/homeassistant/helpers/device_registry.py +++ b/homeassistant/helpers/device_registry.py @@ -152,6 +152,8 @@ class DeviceRegistry: device_id, *, area_id=_UNDEF, + manufacturer=_UNDEF, + model=_UNDEF, name=_UNDEF, name_by_user=_UNDEF, new_identifiers=_UNDEF, @@ -163,6 +165,8 @@ class DeviceRegistry: return self._async_update_device( device_id, area_id=area_id, + manufacturer=manufacturer, + model=model, name=name, name_by_user=name_by_user, new_identifiers=new_identifiers, diff --git a/homeassistant/helpers/discovery.py b/homeassistant/helpers/discovery.py index ea20d8c9216..11663672bb2 100644 --- a/homeassistant/helpers/discovery.py +++ b/homeassistant/helpers/discovery.py @@ -10,11 +10,10 @@ from typing import Any, Callable, Collection, Dict, Optional, Union from homeassistant import core, setup from homeassistant.const import ATTR_DISCOVERED, ATTR_SERVICE, EVENT_PLATFORM_DISCOVERED from homeassistant.exceptions import HomeAssistantError +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.loader import DEPENDENCY_BLACKLIST, bind_hass from homeassistant.util.async_ import run_callback_threadsafe -# mypy: allow-untyped-defs, no-check-untyped-defs - EVENT_LOAD_PLATFORM = "load_platform.{}" ATTR_PLATFORM = "platform" @@ -56,13 +55,29 @@ def async_listen( @bind_hass -def discover(hass, service, discovered, component, hass_config): +def discover( + hass: core.HomeAssistant, + service: str, + discovered: DiscoveryInfoType, + component: str, + hass_config: ConfigType, +) -> None: """Fire discovery event. Can ensure a component is loaded.""" - hass.add_job(async_discover(hass, service, discovered, component, hass_config)) + hass.add_job( + async_discover( # type: ignore + hass, service, discovered, component, hass_config + ) + ) @bind_hass -async def async_discover(hass, service, discovered, component, hass_config): +async def async_discover( + hass: core.HomeAssistant, + service: str, + discovered: Optional[DiscoveryInfoType], + component: Optional[str], + hass_config: ConfigType, +) -> None: """Fire discovery event. Can ensure a component is loaded.""" if component in DEPENDENCY_BLACKLIST: raise HomeAssistantError(f"Cannot discover the {component} component.") @@ -70,7 +85,7 @@ async def async_discover(hass, service, discovered, component, hass_config): if component is not None and component not in hass.config.components: await setup.async_setup_component(hass, component, hass_config) - data = {ATTR_SERVICE: service} + data: Dict[str, Any] = {ATTR_SERVICE: service} if discovered is not None: data[ATTR_DISCOVERED] = discovered @@ -117,7 +132,13 @@ def async_listen_platform( @bind_hass -def load_platform(hass, component, platform, discovered, hass_config): +def load_platform( + hass: core.HomeAssistant, + component: str, + platform: str, + discovered: DiscoveryInfoType, + hass_config: ConfigType, +) -> None: """Load a component and platform dynamically. Target components will be loaded and an EVENT_PLATFORM_DISCOVERED will be @@ -129,12 +150,20 @@ def load_platform(hass, component, platform, discovered, hass_config): Use `listen_platform` to register a callback for these events. """ hass.add_job( - async_load_platform(hass, component, platform, discovered, hass_config) + async_load_platform( # type: ignore + hass, component, platform, discovered, hass_config + ) ) @bind_hass -async def async_load_platform(hass, component, platform, discovered, hass_config): +async def async_load_platform( + hass: core.HomeAssistant, + component: str, + platform: str, + discovered: DiscoveryInfoType, + hass_config: ConfigType, +) -> None: """Load a component and platform dynamically. Target components will be loaded and an EVENT_PLATFORM_DISCOVERED will be @@ -164,7 +193,7 @@ async def async_load_platform(hass, component, platform, discovered, hass_config if not setup_success: return - data = { + data: Dict[str, Any] = { ATTR_SERVICE: EVENT_LOAD_PLATFORM.format(component), ATTR_PLATFORM: platform, } diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index 62d46500451..738b49f4c54 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -35,7 +35,7 @@ from homeassistant.helpers.entity_registry import ( from homeassistant.util import dt as dt_util, ensure_unique_string, slugify from homeassistant.util.async_ import run_callback_threadsafe -# mypy: allow-untyped-defs, no-check-untyped-defs, no-warn-return-any +# mypy: allow-untyped-defs, no-check-untyped-defs _LOGGER = logging.getLogger(__name__) SLOW_UPDATE_WARNING = 10 @@ -319,11 +319,7 @@ class Entity(ABC): else: state = self.state - if state is None: - state = STATE_UNKNOWN - else: - state = str(state) - + state = STATE_UNKNOWN if state is None else str(state) attr.update(self.state_attributes or {}) attr.update(self.device_state_attributes or {}) @@ -622,7 +618,7 @@ class ToggleEntity(Entity): async def async_turn_on(self, **kwargs): """Turn the entity on.""" - await self.hass.async_add_job(ft.partial(self.turn_on, **kwargs)) + await self.hass.async_add_executor_job(ft.partial(self.turn_on, **kwargs)) def turn_off(self, **kwargs: Any) -> None: """Turn the entity off.""" @@ -630,7 +626,7 @@ class ToggleEntity(Entity): async def async_turn_off(self, **kwargs): """Turn the entity off.""" - await self.hass.async_add_job(ft.partial(self.turn_off, **kwargs)) + await self.hass.async_add_executor_job(ft.partial(self.turn_off, **kwargs)) def toggle(self, **kwargs: Any) -> None: """Toggle the entity.""" diff --git a/homeassistant/helpers/entity_component.py b/homeassistant/helpers/entity_component.py index 76c2cb9889e..4c30457b62c 100644 --- a/homeassistant/helpers/entity_component.py +++ b/homeassistant/helpers/entity_component.py @@ -191,7 +191,7 @@ class EntityComponent: This method must be run in the event loop. """ - return await service.async_extract_entities( # type: ignore + return await service.async_extract_entities( self.hass, self.entities, service_call, expand_group ) diff --git a/homeassistant/helpers/entity_platform.py b/homeassistant/helpers/entity_platform.py index 4cbb7a23496..e4d52aaa3a1 100644 --- a/homeassistant/helpers/entity_platform.py +++ b/homeassistant/helpers/entity_platform.py @@ -300,9 +300,7 @@ class EntityPlatform: return self._async_unsub_polling = async_track_time_interval( - self.hass, - self._update_entity_states, # type: ignore - self.scan_interval, + self.hass, self._update_entity_states, self.scan_interval, ) async def _async_add_entity( @@ -444,7 +442,7 @@ class EntityPlatform: await entity.async_internal_added_to_hass() await entity.async_added_to_hass() - await entity.async_update_ha_state() + entity.async_write_ha_state() async def async_reset(self) -> None: """Remove all entities and reset data. diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index dba35ae1388..10de8564fca 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -9,9 +9,18 @@ timer. """ import asyncio from collections import OrderedDict -from itertools import chain import logging -from typing import TYPE_CHECKING, Any, Callable, Dict, Iterable, List, Optional, cast +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Tuple, + cast, +) import attr @@ -27,7 +36,7 @@ from homeassistant.const import ( from homeassistant.core import Event, callback, split_entity_id, valid_entity_id from homeassistant.helpers.device_registry import EVENT_DEVICE_REGISTRY_UPDATED from homeassistant.loader import bind_hass -from homeassistant.util import ensure_unique_string, slugify +from homeassistant.util import slugify from homeassistant.util.yaml import load_yaml from .typing import HomeAssistantType @@ -122,6 +131,22 @@ class EntityRegistry: EVENT_DEVICE_REGISTRY_UPDATED, self.async_device_removed ) + @callback + def async_get_device_class_lookup(self, domain_device_classes: set) -> dict: + """Return a lookup for the device class by domain.""" + lookup: Dict[str, Dict[Tuple[Any, Any], str]] = {} + for entity in self.entities.values(): + if not entity.device_id: + continue + domain_device_class = (entity.domain, entity.device_class) + if domain_device_class not in domain_device_classes: + continue + if entity.device_id not in lookup: + lookup[entity.device_id] = {domain_device_class: entity.entity_id} + else: + lookup[entity.device_id][domain_device_class] = entity.entity_id + return lookup + @callback def async_is_registered(self, entity_id: str) -> bool: """Check if an entity_id is currently registered.""" @@ -157,14 +182,21 @@ class EntityRegistry: Conflicts checked against registered and currently existing entities. """ - return ensure_unique_string( - "{}.{}".format(domain, slugify(suggested_object_id)), - chain( - self.entities.keys(), - self.hass.states.async_entity_ids(domain), - known_object_ids if known_object_ids else [], - ), - ) + preferred_string = f"{domain}.{slugify(suggested_object_id)}" + test_string = preferred_string + if not known_object_ids: + known_object_ids = {} + + tries = 1 + while ( + test_string in self.entities + or test_string in known_object_ids + or self.hass.states.get(test_string) + ): + tries += 1 + test_string = f"{preferred_string}_{tries}" + + return test_string @callback def async_get_or_create( diff --git a/homeassistant/helpers/event.py b/homeassistant/helpers/event.py index 8a4b4bc2b76..266cb150e0a 100644 --- a/homeassistant/helpers/event.py +++ b/homeassistant/helpers/event.py @@ -1,7 +1,7 @@ """Helpers for listening to events.""" from datetime import datetime, timedelta import functools as ft -from typing import Any, Callable, Dict, Iterable, Optional, Union, cast +from typing import Any, Awaitable, Callable, Dict, Iterable, Optional, Union, cast import attr @@ -118,7 +118,7 @@ def async_track_template( variables: Optional[Dict[str, Any]] = None, ) -> CALLBACK_TYPE: """Add a listener that track state changes with template condition.""" - from . import condition + from . import condition # pylint: disable=import-outside-toplevel # Local variable to keep track of if the action has already been triggered already_triggered = False @@ -274,7 +274,9 @@ call_later = threaded_listener_factory(async_call_later) @callback @bind_hass def async_track_time_interval( - hass: HomeAssistant, action: Callable[..., None], interval: timedelta + hass: HomeAssistant, + action: Callable[..., Union[None, Awaitable]], + interval: timedelta, ) -> CALLBACK_TYPE: """Add a listener that fires repetitively at every timedelta interval.""" remove = None diff --git a/homeassistant/helpers/restore_state.py b/homeassistant/helpers/restore_state.py index 0757770d2f7..c75d9c840ed 100644 --- a/homeassistant/helpers/restore_state.py +++ b/homeassistant/helpers/restore_state.py @@ -4,10 +4,7 @@ from datetime import datetime, timedelta import logging from typing import Any, Awaitable, Dict, List, Optional, Set, cast -from homeassistant.const import ( - EVENT_HOMEASSISTANT_FINAL_WRITE, - EVENT_HOMEASSISTANT_START, -) +from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP from homeassistant.core import ( CoreState, HomeAssistant, @@ -126,11 +123,11 @@ class RestoreStateData: now = dt_util.utcnow() all_states = self.hass.states.async_all() # Entities currently backed by an entity object - current_entity_ids = set( + current_entity_ids = { state.entity_id for state in all_states if not state.attributes.get(entity_registry.ATTR_RESTORED) - ) + } # Start with the currently registered states stored_states = [ @@ -174,22 +171,19 @@ class RestoreStateData: def async_setup_dump(self, *args: Any) -> None: """Set up the restore state listeners.""" - @callback - def _async_dump_states(*_: Any) -> None: - self.hass.async_create_task(self.async_dump_states()) + async def _async_dump_states(*_: Any) -> None: + await self.async_dump_states() # Dump the initial states now. This helps minimize the risk of having # old states loaded by overwriting the last states once Home Assistant # has started and the old states have been read. - _async_dump_states() + self.hass.async_create_task(_async_dump_states()) # Dump states periodically async_track_time_interval(self.hass, _async_dump_states, STATE_DUMP_INTERVAL) # Dump states when stopping hass - self.hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_FINAL_WRITE, _async_dump_states - ) + self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _async_dump_states) @callback def async_restore_entity_added(self, entity_id: str) -> None: diff --git a/homeassistant/helpers/script.py b/homeassistant/helpers/script.py index 145bb42af5b..c724b9e890d 100644 --- a/homeassistant/helpers/script.py +++ b/homeassistant/helpers/script.py @@ -36,7 +36,6 @@ from homeassistant.core import ( Context, HomeAssistant, callback, - is_callback, ) from homeassistant.helpers import ( condition, @@ -679,10 +678,7 @@ class Script: def _changed(self): if self.change_listener: - if is_callback(self.change_listener): - self.change_listener() - else: - self._hass.async_add_job(self.change_listener) + self._hass.async_run_job(self.change_listener) @property def is_running(self) -> bool: diff --git a/homeassistant/helpers/service.py b/homeassistant/helpers/service.py index 7a352b4e8d1..a75f862467e 100644 --- a/homeassistant/helpers/service.py +++ b/homeassistant/helpers/service.py @@ -2,7 +2,17 @@ import asyncio from functools import partial, wraps import logging -from typing import Callable +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Set, + Tuple, +) import voluptuous as vol @@ -22,13 +32,17 @@ from homeassistant.exceptions import ( Unauthorized, UnknownUser, ) -from homeassistant.helpers import template, typing +from homeassistant.helpers import template import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.typing import HomeAssistantType +from homeassistant.helpers.typing import ConfigType, HomeAssistantType, TemplateVarsType from homeassistant.loader import async_get_integration, bind_hass from homeassistant.util.yaml import load_yaml from homeassistant.util.yaml.loader import JSON_TYPE +if TYPE_CHECKING: + from homeassistant.helpers.entity import Entity # noqa + + # mypy: allow-untyped-defs, no-check-untyped-defs CONF_SERVICE_ENTITY_ID = "entity_id" @@ -42,8 +56,12 @@ SERVICE_DESCRIPTION_CACHE = "service_description_cache" @bind_hass def call_from_config( - hass, config, blocking=False, variables=None, validate_config=True -): + hass: HomeAssistantType, + config: ConfigType, + blocking: bool = False, + variables: TemplateVarsType = None, + validate_config: bool = True, +) -> None: """Call a service based on a config hash.""" asyncio.run_coroutine_threadsafe( async_call_from_config(hass, config, blocking, variables, validate_config), @@ -53,8 +71,13 @@ def call_from_config( @bind_hass async def async_call_from_config( - hass, config, blocking=False, variables=None, validate_config=True, context=None -): + hass: HomeAssistantType, + config: ConfigType, + blocking: bool = False, + variables: TemplateVarsType = None, + validate_config: bool = True, + context: Optional[ha.Context] = None, +) -> None: """Call a service based on a config hash.""" try: parms = async_prepare_call_from_config(hass, config, variables, validate_config) @@ -68,7 +91,12 @@ async def async_call_from_config( @ha.callback @bind_hass -def async_prepare_call_from_config(hass, config, variables=None, validate_config=False): +def async_prepare_call_from_config( + hass: HomeAssistantType, + config: ConfigType, + variables: TemplateVarsType = None, + validate_config: bool = False, +) -> Tuple[str, str, Dict[str, Any]]: """Prepare to call a service based on a config hash.""" if validate_config: try: @@ -113,7 +141,9 @@ def async_prepare_call_from_config(hass, config, variables=None, validate_config @bind_hass -def extract_entity_ids(hass, service_call, expand_group=True): +def extract_entity_ids( + hass: HomeAssistantType, service_call: ha.ServiceCall, expand_group: bool = True +) -> Set[str]: """Extract a list of entity ids from a service call. Will convert group entity ids to the entity ids it represents. @@ -124,7 +154,12 @@ def extract_entity_ids(hass, service_call, expand_group=True): @bind_hass -async def async_extract_entities(hass, entities, service_call, expand_group=True): +async def async_extract_entities( + hass: HomeAssistantType, + entities: Iterable["Entity"], + service_call: ha.ServiceCall, + expand_group: bool = True, +) -> List["Entity"]: """Extract a list of entity objects from a service call. Will convert group entity ids to the entity ids it represents. @@ -158,7 +193,9 @@ async def async_extract_entities(hass, entities, service_call, expand_group=True @bind_hass -async def async_extract_entity_ids(hass, service_call, expand_group=True): +async def async_extract_entity_ids( + hass: HomeAssistantType, service_call: ha.ServiceCall, expand_group: bool = True +) -> Set[str]: """Extract a list of entity ids from a service call. Will convert group entity ids to the entity ids it represents. @@ -166,7 +203,7 @@ async def async_extract_entity_ids(hass, service_call, expand_group=True): entity_ids = service_call.data.get(ATTR_ENTITY_ID) area_ids = service_call.data.get(ATTR_AREA_ID) - extracted = set() + extracted: Set[str] = set() if entity_ids in (None, ENTITY_MATCH_NONE) and area_ids in ( None, @@ -226,7 +263,9 @@ async def _load_services_file(hass: HomeAssistantType, domain: str) -> JSON_TYPE @bind_hass -async def async_get_all_descriptions(hass): +async def async_get_all_descriptions( + hass: HomeAssistantType, +) -> Dict[str, Dict[str, Any]]: """Return descriptions (i.e. user documentation) for all service calls.""" descriptions_cache = hass.data.setdefault(SERVICE_DESCRIPTION_CACHE, {}) format_cache_key = "{}.{}".format @@ -253,7 +292,7 @@ async def async_get_all_descriptions(hass): loaded[domain] = content # Build response - descriptions = {} + descriptions: Dict[str, Dict[str, Any]] = {} for domain in services: descriptions[domain] = {} @@ -281,7 +320,9 @@ async def async_get_all_descriptions(hass): @ha.callback @bind_hass -def async_set_service_schema(hass, domain, service, schema): +def async_set_service_schema( + hass: HomeAssistantType, domain: str, service: str, schema: Dict[str, Any] +) -> None: """Register a description for a service.""" hass.data.setdefault(SERVICE_DESCRIPTION_CACHE, {}) @@ -454,7 +495,7 @@ async def _handle_entity_call(hass, entity, func, data, context): @bind_hass @ha.callback def async_register_admin_service( - hass: typing.HomeAssistantType, + hass: HomeAssistantType, domain: str, service: str, service_func: Callable, diff --git a/homeassistant/helpers/state.py b/homeassistant/helpers/state.py index 60e6acc8797..87112cd9133 100644 --- a/homeassistant/helpers/state.py +++ b/homeassistant/helpers/state.py @@ -4,7 +4,7 @@ from collections import defaultdict import datetime as dt import logging from types import ModuleType, TracebackType -from typing import Dict, Iterable, List, Optional, Type, Union +from typing import Any, Dict, Iterable, List, Optional, Type, Union from homeassistant.components.sun import STATE_ABOVE_HORIZON, STATE_BELOW_HORIZON from homeassistant.const import ( @@ -69,8 +69,9 @@ def get_changed_since( async def async_reproduce_state( hass: HomeAssistantType, states: Union[State, Iterable[State]], - blocking: bool = False, + *, context: Optional[Context] = None, + reproduce_options: Optional[Dict[str, Any]] = None, ) -> None: """Reproduce a list of states on multiple domains.""" if isinstance(states, State): @@ -97,7 +98,7 @@ async def async_reproduce_state( return await platform.async_reproduce_states( # type: ignore - hass, states_by_domain, context=context + hass, states_by_domain, context=context, reproduce_options=reproduce_options ) if to_call: diff --git a/homeassistant/helpers/storage.py b/homeassistant/helpers/storage.py index 5885aa01e6f..00df728fb36 100644 --- a/homeassistant/helpers/storage.py +++ b/homeassistant/helpers/storage.py @@ -6,7 +6,7 @@ import os from typing import Any, Callable, Dict, List, Optional, Type, Union from homeassistant.const import EVENT_HOMEASSISTANT_FINAL_WRITE -from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback +from homeassistant.core import CALLBACK_TYPE, CoreState, HomeAssistant, callback from homeassistant.helpers.event import async_call_later from homeassistant.loader import bind_hass from homeassistant.util import json as json_util @@ -72,7 +72,7 @@ class Store: self._private = private self._data: Optional[Dict[str, Any]] = None self._unsub_delay_listener: Optional[CALLBACK_TYPE] = None - self._unsub_stop_listener: Optional[CALLBACK_TYPE] = None + self._unsub_final_write_listener: Optional[CALLBACK_TYPE] = None self._write_lock = asyncio.Lock() self._load_task: Optional[asyncio.Future] = None self._encoder = encoder @@ -132,7 +132,12 @@ class Store: self._data = {"version": self.version, "key": self.key, "data": data} self._async_cleanup_delay_listener() - self._async_cleanup_stop_listener() + self._async_cleanup_final_write_listener() + + if self.hass.state == CoreState.stopping: + self._async_ensure_final_write_listener() + return + await self._async_handle_write_data() @callback @@ -141,27 +146,31 @@ class Store: self._data = {"version": self.version, "key": self.key, "data_func": data_func} self._async_cleanup_delay_listener() + self._async_cleanup_final_write_listener() + + if self.hass.state == CoreState.stopping: + self._async_ensure_final_write_listener() + return self._unsub_delay_listener = async_call_later( self.hass, delay, self._async_callback_delayed_write ) - - self._async_ensure_stop_listener() + self._async_ensure_final_write_listener() @callback - def _async_ensure_stop_listener(self): + def _async_ensure_final_write_listener(self): """Ensure that we write if we quit before delay has passed.""" - if self._unsub_stop_listener is None: - self._unsub_stop_listener = self.hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_FINAL_WRITE, self._async_callback_stop_write + if self._unsub_final_write_listener is None: + self._unsub_final_write_listener = self.hass.bus.async_listen_once( + EVENT_HOMEASSISTANT_FINAL_WRITE, self._async_callback_final_write ) @callback - def _async_cleanup_stop_listener(self): + def _async_cleanup_final_write_listener(self): """Clean up a stop listener.""" - if self._unsub_stop_listener is not None: - self._unsub_stop_listener() - self._unsub_stop_listener = None + if self._unsub_final_write_listener is not None: + self._unsub_final_write_listener() + self._unsub_final_write_listener = None @callback def _async_cleanup_delay_listener(self): @@ -172,13 +181,17 @@ class Store: async def _async_callback_delayed_write(self, _now): """Handle a delayed write callback.""" + # catch the case where a call is scheduled and then we stop Home Assistant + if self.hass.state == CoreState.stopping: + self._async_ensure_final_write_listener() + return self._unsub_delay_listener = None - self._async_cleanup_stop_listener() + self._async_cleanup_final_write_listener() await self._async_handle_write_data() - async def _async_callback_stop_write(self, _event): - """Handle a write because Home Assistant is stopping.""" - self._unsub_stop_listener = None + async def _async_callback_final_write(self, _event): + """Handle a write because Home Assistant is in final write state.""" + self._unsub_final_write_listener = None self._async_cleanup_delay_listener() await self._async_handle_write_data() diff --git a/homeassistant/helpers/sun.py b/homeassistant/helpers/sun.py index 45ff06f16de..818010c3410 100644 --- a/homeassistant/helpers/sun.py +++ b/homeassistant/helpers/sun.py @@ -19,7 +19,8 @@ DATA_LOCATION_CACHE = "astral_location_cache" @bind_hass def get_astral_location(hass: HomeAssistantType) -> "astral.Location": """Get an astral location for the current Home Assistant configuration.""" - from astral import Location + + from astral import Location # pylint: disable=import-outside-toplevel latitude = hass.config.latitude longitude = hass.config.longitude @@ -58,7 +59,7 @@ def get_location_astral_event_next( offset: Optional[datetime.timedelta] = None, ) -> datetime.datetime: """Calculate the next specified solar event.""" - from astral import AstralError + from astral import AstralError # pylint: disable=import-outside-toplevel if offset is None: offset = datetime.timedelta() @@ -92,7 +93,7 @@ def get_astral_event_date( date: Union[datetime.date, datetime.datetime, None] = None, ) -> Optional[datetime.datetime]: """Calculate the astral event time for the specified date.""" - from astral import AstralError + from astral import AstralError # pylint: disable=import-outside-toplevel location = get_astral_location(hass) diff --git a/homeassistant/helpers/template.py b/homeassistant/helpers/template.py index 5cd15fefd99..3f9924d00d5 100644 --- a/homeassistant/helpers/template.py +++ b/homeassistant/helpers/template.py @@ -19,6 +19,7 @@ from homeassistant.const import ( ATTR_LATITUDE, ATTR_LONGITUDE, ATTR_UNIT_OF_MEASUREMENT, + LENGTH_METERS, MATCH_ALL, STATE_UNKNOWN, ) @@ -50,7 +51,7 @@ _RE_JINJA_DELIMITERS = re.compile(r"\{%|\{\{") @bind_hass -def attach(hass, obj): +def attach(hass: HomeAssistantType, obj: Any) -> None: """Recursively attach hass to all template instances in list and dict.""" if isinstance(obj, list): for child in obj: @@ -62,7 +63,7 @@ def attach(hass, obj): obj.hass = hass -def render_complex(value, variables=None): +def render_complex(value: Any, variables: TemplateVarsType = None) -> Any: """Recursive template creator helper function.""" if isinstance(value, list): return [render_complex(item, variables) for item in value] @@ -306,11 +307,11 @@ class Template: and self.hass == other.hass ) - def __hash__(self): + def __hash__(self) -> int: """Hash code for template.""" return hash(self.template) - def __repr__(self): + def __repr__(self) -> str: """Representation of Template.""" return 'Template("' + self.template + '")' @@ -332,7 +333,7 @@ class AllStates: raise TemplateError(f"Invalid domain name '{name}'") return DomainStates(self._hass, name) - def _collect_all(self): + def _collect_all(self) -> None: render_info = self._hass.data.get(_RENDER_INFO) if render_info is not None: # pylint: disable=protected-access @@ -348,7 +349,7 @@ class AllStates: ) ) - def __len__(self): + def __len__(self) -> int: """Return number of states.""" self._collect_all() return len(self._hass.states.async_entity_ids()) @@ -358,7 +359,7 @@ class AllStates: state = _get_state(self._hass, entity_id) return STATE_UNKNOWN if state is None else state.state - def __repr__(self): + def __repr__(self) -> str: """Representation of All States.""" return "